appium-xcuitest-driver 3.60.0 → 3.60.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/driver.js +3 -3
- package/lib/driver.js +1 -1
- package/package.json +1 -1
package/build/lib/driver.js
CHANGED
|
@@ -168,12 +168,12 @@ class XCUITestDriver extends _appiumBaseDriver.BaseDriver {
|
|
|
168
168
|
var _this$cliArgs;
|
|
169
169
|
|
|
170
170
|
if (_lodash.default.has(this.opts, key)) {
|
|
171
|
-
this.opts[key] = value;
|
|
172
|
-
|
|
173
171
|
_logger.default.info(`CLI arg '${key}' with value '${value}' overwrites value '${this.opts[key]}' sent in via caps)`);
|
|
174
172
|
|
|
175
173
|
didMerge = true;
|
|
176
174
|
}
|
|
175
|
+
|
|
176
|
+
this.opts[key] = value;
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
return didMerge;
|
|
@@ -1331,4 +1331,4 @@ var _default = XCUITestDriver;
|
|
|
1331
1331
|
exports.default = _default;require('source-map-support').install();
|
|
1332
1332
|
|
|
1333
1333
|
|
|
1334
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSIsIk5PX1BST1hZX05BVElWRV9MSVNUIiwiTk9fUFJPWFlfV0VCX0xJU1QiLCJjb25jYXQiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJYQ1VJVGVzdERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsIndlYkxvY2F0b3JTdHJhdGVnaWVzIiwicmVzZXRJb3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJsb2dzIiwiZm4iLCJfIiwibWVtb2l6ZSIsImtleSIsInZhbHVlIiwicHJveHlDb21tYW5kIiwid2RhIiwiZGV2aWNlIiwiandwUHJveHlBY3RpdmUiLCJwcm94eVJlcVJlcyIsImp3cFByb3h5QXZvaWQiLCJzYWZhcmkiLCJjYWNoZWRXZGFTdGF0dXMiLCJjdXJXZWJGcmFtZXMiLCJfY3VycmVudFVybCIsImN1ckNvbnRleHQiLCJ4Y29kZVZlcnNpb24iLCJjb250ZXh0cyIsImltcGxpY2l0V2FpdE1zIiwiYXN5bmNsaWJXYWl0TXMiLCJwYWdlTG9hZE1zIiwibGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0IiwicmVtb3RlIiwid2ViRWxlbWVudHNDYWNoZSIsIkxSVSIsIm1heCIsImRyaXZlckRhdGEiLCJnZXRTdGF0dXMiLCJkcml2ZXJJbmZvIiwic3RhdHVzIiwiYnVpbGQiLCJ2ZXJzaW9uIiwibWVyZ2VDbGlBcmdzVG9PcHRzIiwiZGlkTWVyZ2UiLCJPYmplY3QiLCJlbnRyaWVzIiwiY2xpQXJncyIsImhhcyIsImxvZyIsImluZm8iLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsImxpZmVjeWNsZURhdGEiLCJzZXNzaW9uSWQiLCJjYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInN0YXJ0IiwiYXNzaWduIiwidWRpZCIsInVwZGF0ZVNldHRpbmdzIiwid2RhU2V0dGluZ3MiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJlIiwiZXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVsZXRlU2Vzc2lvbiIsIm5vUmVzZXQiLCJmdWxsUmVzZXQiLCJpb3NTZGtWZXJzaW9uIiwicmVhbERldmljZSIsImRldGVybWluZURldmljZSIsInNpbXVsYXRvckRldmljZXNTZXRQYXRoIiwiZGV2aWNlc1NldFBhdGgiLCJwbGF0Zm9ybVZlcnNpb24iLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJub3JtYWxpemVkVmVyc2lvbiIsInV0aWwiLCJjb21wYXJlVmVyc2lvbnMiLCJFcnJvciIsImlzRW1wdHkiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsImxvZ0V2ZW50IiwidG9Mb3dlciIsImFwcCIsInVuZGVmaW5lZCIsInByb2Nlc3NBcmd1bWVudHMiLCJidW5kbGVJZCIsInNhZmFyaUluaXRpYWxVcmwiLCJpc1JlYWxEZXZpY2UiLCJhZGRyZXNzIiwicG9ydCIsImNvbmZpZ3VyZUFwcCIsInJ1blJlc2V0IiwiV2ViRHJpdmVyQWdlbnQiLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsImNhdGNoIiwiZGVidWciLCJtZW1vaXplZExvZ0luZm8iLCJsb2dJbmZvIiwic3RhcnRMb2dDYXB0dXJlIiwic2tpcExvZ0NhcHR1cmUiLCJyZXN1bHQiLCJpc0xvZ0NhcHR1cmVTdGFydGVkIiwiaXNTaW11bGF0b3IiLCJzaHV0ZG93bk90aGVyU2ltdWxhdG9ycyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiaXNTYWZhcmkiLCJzYWZhcmlHbG9iYWxQcmVmZXJlbmNlcyIsInVwZGF0ZVNhZmFyaUdsb2JhbFNldHRpbmdzIiwibG9jYWxDb25maWciLCJzaW0iLCJjdXN0b21TU0xDZXJ0IiwiY2VydEhlYWQiLCJ0cnVuY2F0ZSIsImxlbmd0aCIsInN0YXJ0U2ltIiwibGF1bmNoV2l0aElEQiIsImlkYiIsIklEQiIsImNvbm5lY3QiLCJtZXNzYWdlIiwiUHlpZGV2aWNlIiwiaW5zdGFsbFByb2ZpbGUiLCJwYXlsb2FkIiwiaW5zdGFsbEFVVCIsImlzQXBwSW5zdGFsbGVkIiwiZXJyb3JBbmRUaHJvdyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbnNNYXBwaW5nIiwidG9QYWlycyIsInBhcnNlIiwic2V0UGVybWlzc2lvbnMiLCJ3YXJuIiwiY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkIiwiZW5hYmxlQ2FsZW5kYXJBY2Nlc3MiLCJkaXNhYmxlQ2FsZW5kYXJBY2Nlc3MiLCJzdGFydFdkYSIsInNldFJlZHVjZU1vdGlvbiIsInNldEluaXRpYWxPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIiwib3BlblVybCIsImF1dG9XZWJ2aWV3IiwibmF2VG9Jbml0aWFsV2VidmlldyIsInNldFVybCIsImhhc1ZhbHVlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwidXNlUG9ydEZvcndhcmRpbmciLCJ3ZGFCYXNlVXJsIiwiREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkiLCJyZXF1ZXN0Q29ubmVjdGlvbiIsInVybCIsImRldmljZVBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwic3luY2hyb25pemF0aW9uS2V5IiwibmFtZSIsInVzZVhjdGVzdHJ1bkZpbGUiLCJpc1NvdXJjZUZyZXNoIiwiZGVyaXZlZERhdGFQYXRoIiwicGF0aCIsIm5vcm1hbGl6ZSIsImlzQnVzeSIsImJvb3RzdHJhcFBhdGgiLCJhY3F1aXJlIiwidXNlTmV3V0RBIiwicXVpdEFuZFVuaW5zdGFsbCIsInNldHVwQ2FjaGluZyIsIm1zZyIsInJlc3VsdEJ1bmRsZVBhdGgiLCJzdGFydHVwUmV0cmllcyIsIndkYVN0YXJ0dXBSZXRyaWVzIiwic3RhcnR1cFJldHJ5SW50ZXJ2YWwiLCJ3ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCIsInJldHJ5Q291bnQiLCJyZXRyaWVzIiwibWFqb3IiLCJsYXVuY2giLCJlcnIiLCJlcnJvck1zZyIsIm9yaWdpbmFsU3RhY2t0cmFjZSIsInN0YXJ0V2RhU2Vzc2lvbiIsInN0YWNrIiwiY2xlYXJTeXN0ZW1GaWxlcyIsImZ1bGx5U3RhcnRlZCIsInNlcnZlciIsInJlY29yZGVyIiwiY29tcGFjdCIsIl9yZWNlbnRTY3JlZW5SZWNvcmRlciIsIl9hdWRpb1JlY29yZGVyIiwiaW50ZXJydXB0IiwiY2xlYW51cCIsIl9wZXJmUmVjb3JkZXJzIiwiQiIsImFsbCIsIm1hcCIsIngiLCJzdG9wIiwic3RvcFJlbW90ZSIsInJlc2V0T25TZXNzaW9uU3RhcnRPbmx5IiwiZW5mb3JjZVNpbXVsYXRvclNodXRkb3duIiwiY3JlYXRlU2ltIiwiZGVsZXRlIiwic2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSIsImlnbm9yZSIsInN5c2xvZyIsInN0b3BDYXB0dXJlIiwiandwcm94eSIsInF1aXQiLCJyZWxlYXNlQ29ubmVjdGlvbiIsImV4ZWN1dGVDb21tYW5kIiwiY21kIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJhcHBJc1BhY2thZ2VPckJ1bmRsZSIsInRlc3QiLCJoZWxwZXJzIiwiZGV2aWNlTmFtZSIsInNldHVwVmVyc2lvbkNhcHMiLCJ0b0xvd2VyQ2FzZSIsImRldmljZVBsYXRmb3JtIiwiZGV2aWNlcyIsImpvaW4iLCJpbmNsdWRlcyIsImlnbiIsImVuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uIiwicnVuT3B0cyIsInNjYWxlRmFjdG9yIiwiY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQiLCJwYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsInNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jIiwiaXNIZWFkbGVzcyIsInRyYWNlUG9pbnRlciIsInNpbXVsYXRvclRyYWNlUG9pbnRlciIsImRldmljZVByZWZlcmVuY2VzIiwiU2ltdWxhdG9yV2luZG93Q2VudGVyIiwiaXNJbnRlZ2VyIiwic2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQiLCJzdGFydHVwVGltZW91dCIsImlzU3RyaW5nIiwidG9VcHBlckNhc2UiLCJTaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiIsIlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUiLCJydW4iLCJwbGF0Zm9ybU5hbWUiLCJpc1R2T1MiLCJQTEFURk9STV9OQU1FX1RWT1MiLCJQTEFURk9STV9OQU1FX0lPUyIsImxhdW5jaEFwcCIsIkFQUF9MQVVOQ0hfVElNRU9VVCIsInNpbWN0bCIsImNoZWNrU3RhdHVzIiwicmVzcG9uc2UiLCJjdXJyZW50QXBwIiwiYnVuZGxlSUQiLCJwYXJzZUludCIsImlzQXJyYXkiLCJlbnYiLCJpc1BsYWluT2JqZWN0IiwibGFuZ3VhZ2UiLCJwdXNoIiwibG9jYWxlIiwiaXNOaWwiLCJzaG91bGRUZXJtaW5hdGVBcHAiLCJmb3JjZUFwcExhdW5jaCIsIndkYUNhcHMiLCJhdXRvTGF1bmNoIiwiYXJndW1lbnRzIiwiZW52aXJvbm1lbnQiLCJldmVudGxvb3BJZGxlRGVsYXlTZWMiLCJ3ZGFFdmVudGxvb3BJZGxlRGVsYXkiLCJzaG91bGRXYWl0Rm9yUXVpZXNjZW5jZSIsIndhaXRGb3JRdWllc2NlbmNlIiwic2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uIiwic2ltcGxlSXNWaXNpYmxlQ2hlY2siLCJtYXhUeXBpbmdGcmVxdWVuY3kiLCJzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlciIsIndhaXRGb3JJZGxlVGltZW91dCIsImVsZW1lbnRSZXNwb25zZUZpZWxkcyIsImRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyIsInVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneSIsImZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlIiwiYXV0b0FjY2VwdEFsZXJ0cyIsImRlZmF1bHRBbGVydEFjdGlvbiIsImF1dG9EaXNtaXNzQWxlcnRzIiwiY2FwYWJpbGl0aWVzIiwiZmlyc3RNYXRjaCIsImFsd2F5c01hdGNoIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImlzV2VidmlldyIsImNhblByb3h5IiwiaXNXZWJDb250ZXh0IiwidmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kiLCJzdHJhdGVneSIsImNvZXJjZVZlcnNpb24iLCJ2ZXJpZnlQcm9jZXNzQXJndW1lbnQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiY29tbWFuZFRpbWVvdXRzIiwicHJvdG9jb2wiLCJob3N0IiwicGVybXMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsInBhcnNlQ2Fwc0FycmF5IiwidGltZW91dCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibmV3U2ltdWxhdG9yIiwib3RoZXJBcHBzIiwiaW5zdGFsbE90aGVyQXBwcyIsImlvc0luc3RhbGxQYXVzZSIsInBhdXNlIiwiZGVsYXkiLCJhcHBzTGlzdCIsImFwcFBhdGhzIiwib3RoZXJBcHAiLCJpc0VuYWJsZWQiLCJpc0Jvb2xlYW4iLCJjdXJPcmllbnRhdGlvbiIsIl9nZXRDb21tYW5kVGltZW91dCIsImNtZE5hbWUiLCJERUZBVUxUX1RJTUVPVVRfS0VZIiwiZ2V0U2Vzc2lvbiIsImRyaXZlclNlc3Npb24iLCJzaG91bGRHZXREZXZpY2VDYXBzIiwiaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvIiwiZGV2aWNlQ2FwcyIsInN0YXR1c0JhclNpemUiLCJzY2FsZSIsImdldFNjcmVlbkluZm8iLCJwaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdwb3J0UmVjdCIsInJlc2V0IiwiY2xvbmVEZWVwIiwic2h1dGRvd25IYW5kbGVyIiwicmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVFBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLHdCQUF3QixHQUFHLHFCQUFqQztBQUNBLE1BQU1DLDRCQUE0QixHQUFHLDhCQUFyQztBQUVBLE1BQU1DLGlCQUFpQixHQUFHO0FBQ3hCQyxFQUFBQSxpQkFBaUIsRUFBRSxLQURLO0FBRXhCQyxFQUFBQSxzQkFBc0IsRUFBRSxLQUZBO0FBR3hCQyxFQUFBQSxXQUFXLEVB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Q0RsUyxvQkFBSUMsSUFBSixDQUFTLCtEQUFUOztBQUNBLFdBQU9MLE1BQU0sQ0FBQ2EsTUFBUCxDQUFjO0FBQUNDLE1BQUFBLElBQUksRUFBRSxLQUFLM0QsSUFBTCxDQUFVMkQ7QUFBakIsS0FBZCxFQUFzQzZRLGFBQXRDLEVBQ0wsS0FBSzNELE9BQUwsQ0FBYW9CLFlBRFIsRUFDc0IsS0FBSzBDLFVBQUwsSUFBbUIsRUFEekMsQ0FBUDtBQUVEOztBQUVVLFFBQUxTLEtBQUssR0FBSTtBQUNiLFFBQUksS0FBS3BWLElBQUwsQ0FBVXVFLE9BQWQsRUFBdUI7QUFFckIsVUFBSXZFLElBQUksR0FBR1ksZ0JBQUV5VSxTQUFGLENBQVksS0FBS3JWLElBQWpCLENBQVg7O0FBQ0FBLE1BQUFBLElBQUksQ0FBQ3VFLE9BQUwsR0FBZSxLQUFmO0FBQ0F2RSxNQUFBQSxJQUFJLENBQUN3RSxTQUFMLEdBQWlCLEtBQWpCO0FBQ0EsWUFBTThRLGVBQWUsR0FBRyxLQUFLQyx5QkFBN0I7O0FBQ0EsV0FBS0EseUJBQUwsR0FBaUMsTUFBTSxDQUFFLENBQXpDOztBQUNBLFVBQUk7QUFDRixjQUFNLEtBQUt0UCxRQUFMLENBQWNqRyxJQUFkLENBQU47QUFDRCxPQUZELFNBRVU7QUFDUixhQUFLdVYseUJBQUwsR0FBaUNELGVBQWpDO0FBQ0Q7QUFDRjs7QUFDRCxVQUFNLE1BQU1GLEtBQU4sRUFBTjtBQUNEOztBQW5xQ3FDOzs7QUFzcUN4Q3ZTLE1BQU0sQ0FBQ2EsTUFBUCxDQUFjN0QsY0FBYyxDQUFDMlYsU0FBN0IsRUFBd0NDLGNBQXhDO2VBRWU1VixjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuaW1wb3J0IHsgdXRpbCwgbWpwZWcgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IHsgV2ViRHJpdmVyQWdlbnQgfSBmcm9tICdhcHBpdW0td2ViZHJpdmVyYWdlbnQnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQge1xuICBjcmVhdGVTaW0sIGdldEV4aXN0aW5nU2ltLCBydW5TaW11bGF0b3JSZXNldCwgaW5zdGFsbFRvU2ltdWxhdG9yLFxuICBzaHV0ZG93bk90aGVyU2ltdWxhdG9ycywgc2h1dGRvd25TaW11bGF0b3IsIHNldExvY2FsZUFuZFByZWZlcmVuY2VzXG59IGZyb20gJy4vc2ltdWxhdG9yLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgZ2V0U2ltdWxhdG9yIH0gZnJvbSAnYXBwaXVtLWlvcy1zaW11bGF0b3InO1xuaW1wb3J0IHtcbiAgZG9lc1N1cHBvcnRLZXljaGFpbkFwaSwgaW5zdGFsbENlcnRpZmljYXRlLCBpbnN0YWxsQ2VydGlmaWNhdGVMZWdhY3ksXG4gIGhhc0NlcnRpZmljYXRlTGVnYWN5LFxufSBmcm9tICcuL2NlcnQtdXRpbHMnO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCwgcmV0cnkgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtLCBleHRyYWN0QnVuZGxlSWQgfSBmcm9tICcuL2FwcC11dGlscyc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwQ29uc3RyYWludHMsIFBMQVRGT1JNX05BTUVfSU9TLCBQTEFURk9STV9OQU1FX1RWT1MgfSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcy9pbmRleCc7XG5pbXBvcnQge1xuICBkZXRlY3RVZGlkLCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbiwgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uLFxuICBjaGVja0FwcFByZXNlbnQsIGdldERyaXZlckluZm8sXG4gIGNsZWFyU3lzdGVtRmlsZXMsIHRyYW5zbGF0ZURldmljZU5hbWUsIG5vcm1hbGl6ZUNvbW1hbmRUaW1lb3V0cyxcbiAgREVGQVVMVF9USU1FT1VUX0tFWSwgbWFya1N5c3RlbUZpbGVzRm9yQ2xlYW51cCxcbiAgcHJpbnRVc2VyLCByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMsXG4gIG5vcm1hbGl6ZVBsYXRmb3JtVmVyc2lvbiwgaXNMb2NhbEhvc3Rcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1xuICBnZXRDb25uZWN0ZWREZXZpY2VzLCBydW5SZWFsRGV2aWNlUmVzZXQsIGluc3RhbGxUb1JlYWxEZXZpY2UsXG4gIGdldFJlYWxEZXZpY2VPYmpcbn0gZnJvbSAnLi9yZWFsLWRldmljZS1tYW5hZ2VtZW50JztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBJREIgZnJvbSAnYXBwaXVtLWlkYic7XG5pbXBvcnQgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkgZnJvbSAnLi9kZXZpY2UtY29ubmVjdGlvbnMtZmFjdG9yeSc7XG5pbXBvcnQgUHlpZGV2aWNlIGZyb20gJy4vcHktaW9zLWRldmljZS1jbGllbnQnO1xuXG5cbmNvbnN0IFNIVVRET1dOX09USEVSX0ZFQVRfTkFNRSA9ICdzaHV0ZG93bl9vdGhlcl9zaW1zJztcbmNvbnN0IENVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEggPSAnY3VzdG9taXplX3Jlc3VsdF9idW5kbGVfcGF0aCc7XG5cbmNvbnN0IGRlZmF1bHRTZXJ2ZXJDYXBzID0ge1xuICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICBicm93c2VyTmFtZTogJycsXG4gIHBsYXRmb3JtOiAnTUFDJyxcbiAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgbmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkOiBmYWxzZSxcbn07XG5jb25zdCBTQUZBUklfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5tb2JpbGVzYWZhcmknO1xuY29uc3QgV0RBX1NJTV9TVEFSVFVQX1JFVFJJRVMgPSAyO1xuY29uc3QgV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyA9IDE7XG5jb25zdCBXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLXhjdWl0ZXN0LWRyaXZlci9ibG9iL21hc3Rlci9kb2NzL3JlYWwtZGV2aWNlLWNvbmZpZy5tZCc7XG5jb25zdCBXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCA9IDEwMDAwO1xuY29uc3QgREVGQVVMVF9TRVRUSU5HUyA9IHtcbiAgbmF0aXZlV2ViVGFwOiBmYWxzZSxcbiAgbmF0aXZlV2ViVGFwU3RyaWN0OiBmYWxzZSxcbiAgdXNlSlNPTlNvdXJjZTogZmFsc2UsXG4gIHNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXM6IHRydWUsXG4gIGVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM6ICd0eXBlLGxhYmVsJyxcbiAgLy8gUmVhZCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL1dlYkRyaXZlckFnZW50L2Jsb2IvbWFzdGVyL1dlYkRyaXZlckFnZW50TGliL1V0aWxpdGllcy9GQkNvbmZpZ3VyYXRpb24ubSBmb3IgZm9sbG93aW5nIHNldHRpbmdzJyB2YWx1ZXNcbiAgbWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eTogMjUsXG4gIG1qcGVnU2VydmVyRnJhbWVyYXRlOiAxMCxcbiAgc2NyZWVuc2hvdFF1YWxpdHk6IDEsXG4gIG1qcGVnU2NhbGluZ0ZhY3RvcjogMTAwLFxuICAvLyBzZXQgYHJlZHVjZU1vdGlvbmAgdG8gYG51bGxgIHNvIHRoYXQgaXQgd2lsbCBiZSB2ZXJpZmllZCBidXQgc3RpbGwgc2V0IGVpdGhlciB0cnVlL2ZhbHNlXG4gIHJlZHVjZU1vdGlvbjogbnVsbCxcbn07XG4vLyBUaGlzIGxvY2sgYXNzdXJlcywgdGhhdCBlYWNoIGRyaXZlciBzZXNzaW9uIGRvZXMgbm90XG4vLyBhZmZlY3Qgc2hhcmVkIHJlc291cmNlcyBvZiB0aGUgb3RoZXIgcGFyYWxsZWwgc2Vzc2lvbnNcbmNvbnN0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5jb25zdCBXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSA9IDUwMDtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbmNvbnN0IE5PX1BST1hZX05BVElWRV9MSVNUID0gW1xuICBbJ0RFTEVURScsIC93aW5kb3cvXSxcbiAgWydHRVQnLCAvXlxcL3Nlc3Npb25cXC9bXlxcL10rJC9dLFxuICBbJ0dFVCcsIC9hbGVydF90ZXh0L10sXG4gIFsnR0VUJywgL2FsZXJ0XFwvW15cXC9dKy9dLFxuICBbJ0dFVCcsIC9hcHBpdW0vXSxcbiAgWydHRVQnLCAvYXR0cmlidXRlL10sXG4gIFsnR0VUJywgL2NvbnRleHQvXSxcbiAgWydHRVQnLCAvbG9jYXRpb24vXSxcbiAgWydHRVQnLCAvbG9nL10sXG4gIFsnR0VUJywgL3NjcmVlbnNob3QvXSxcbiAgWydHRVQnLCAvc2l6ZS9dLFxuICBbJ0dFVCcsIC9zb3VyY2UvXSxcbiAgWydHRVQnLCAvdGltZW91dHMkL10sXG4gIFsnR0VUJywgL3VybC9dLFxuICBbJ0dFVCcsIC93aW5kb3cvXSxcbiAgWydQT1NUJywgL2FjY2VwdF9hbGVydC9dLFxuICBbJ1BPU1QnLCAvYWN0aW9ucyQvXSxcbiAgWydQT1NUJywgL2FsZXJ0X3RleHQvXSxcbiAgWydQT1NUJywgL2FsZXJ0XFwvW15cXC9dKy9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtL10sXG4gIFsnUE9TVCcsIC9hcHBpdW1cXC9kZXZpY2VcXC9pc19sb2NrZWQvXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL2xvY2svXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL3VubG9jay9dLFxuICBbJ1BPU1QnLCAvYmFjay9dLFxuICBbJ1BPU1QnLCAvY2xlYXIvXSxcbiAgWydQT1NUJywgL2NvbnRleHQvXSxcbiAgWydQT1NUJywgL2Rpc21pc3NfYWxlcnQvXSxcbiAgWydQT1NUJywgL2VsZW1lbnRcXC9hY3RpdmUvXSwgLy8gTUpTT05XUCBnZXQgYWN0aXZlIGVsZW1lbnQgc2hvdWxkIHByb3h5XG4gIFsnUE9TVCcsIC9lbGVtZW50JC9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudHMkL10sXG4gIFsnUE9TVCcsIC9leGVjdXRlL10sXG4gIFsnUE9TVCcsIC9rZXlzL10sXG4gIFsnUE9TVCcsIC9sb2cvXSxcbiAgWydQT1NUJywgL21vdmV0by9dLFxuICBbJ1BPU1QnLCAvcmVjZWl2ZV9hc3luY19yZXNwb25zZS9dLCAvLyBhbHdheXMsIGluIGNhc2UgY29udGV4dCBzd2l0Y2hlcyB3aGlsZSB3YWl0aW5nXG4gIFsnUE9TVCcsIC9zZXNzaW9uXFwvW15cXC9dK1xcL2xvY2F0aW9uL10sIC8vIGdlbyBsb2NhdGlvbiwgYnV0IG5vdCBlbGVtZW50IGxvY2F0aW9uXG4gIFsnUE9TVCcsIC9zaGFrZS9dLFxuICBbJ1BPU1QnLCAvdGltZW91dHMvXSxcbiAgWydQT1NUJywgL3RvdWNoL10sXG4gIFsnUE9TVCcsIC91cmwvXSxcbiAgWydQT1NUJywgL3ZhbHVlL10sXG4gIFsnUE9TVCcsIC93aW5kb3cvXSxcbiAgWydERUxFVEUnLCAvY29va2llL10sXG4gIFsnR0VUJywgL2Nvb2tpZS9dLFxuICBbJ1BPU1QnLCAvY29va2llL10sXG5dO1xuY29uc3QgTk9fUFJPWFlfV0VCX0xJU1QgPSBbXG4gIFsnR0VUJywgL2F0dHJpYnV0ZS9dLFxuICBbJ0dFVCcsIC9lbGVtZW50L10sXG4gIFsnR0VUJywgL3RleHQvXSxcbiAgWydHRVQnLCAvdGl0bGUvXSxcbiAgWydQT1NUJywgL2NsZWFyL10sXG4gIFsnUE9TVCcsIC9jbGljay9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudC9dLFxuICBbJ1BPU1QnLCAvZm9yd2FyZC9dLFxuICBbJ1BPU1QnLCAvZnJhbWUvXSxcbiAgWydQT1NUJywgL2tleXMvXSxcbiAgWydQT1NUJywgL3JlZnJlc2gvXSxcbl0uY29uY2F0KE5PX1BST1hZX05BVElWRV9MSVNUKTtcbi8qIGVzbGludC1lbmFibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cblxuY29uc3QgTUVNT0laRURfRlVOQ1RJT05TID0gW1xuICAnZ2V0U3RhdHVzQmFySGVpZ2h0JyxcbiAgJ2dldERldmljZVBpeGVsUmF0aW8nLFxuICAnZ2V0U2NyZWVuSW5mbycsXG5dO1xuXG5jbGFzcyBYQ1VJVGVzdERyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcblxuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuXG4gICAgdGhpcy5sb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICd4cGF0aCcsXG4gICAgICAnaWQnLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJy1pb3MgcHJlZGljYXRlIHN0cmluZycsXG4gICAgICAnLWlvcyBjbGFzcyBjaGFpbicsXG4gICAgICAnYWNjZXNzaWJpbGl0eSBpZCcsXG4gICAgICAnY3NzIHNlbGVjdG9yJyxcbiAgICBdO1xuICAgIHRoaXMud2ViTG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAnbGluayB0ZXh0JyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgICAgJ3RhZyBuYW1lJyxcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ3BhcnRpYWwgbGluayB0ZXh0JyxcbiAgICBdO1xuICAgIHRoaXMucmVzZXRJb3MoKTtcbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKERFRkFVTFRfU0VUVElOR1MsIHRoaXMub25TZXR0aW5nc1VwZGF0ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmxvZ3MgPSB7fTtcblxuICAgIC8vIG1lbW9pemUgZnVuY3Rpb25zIGhlcmUsIHNvIHRoYXQgdGhleSBhcmUgZG9uZSBvbiBhIHBlci1pbnN0YW5jZSBiYXNpc1xuICAgIGZvciAoY29uc3QgZm4gb2YgTUVNT0laRURfRlVOQ1RJT05TKSB7XG4gICAgICB0aGlzW2ZuXSA9IF8ubWVtb2l6ZSh0aGlzW2ZuXSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TZXR0aW5nc1VwZGF0ZSAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChrZXkgIT09ICduYXRpdmVXZWJUYXAnICYmIGtleSAhPT0gJ25hdGl2ZVdlYlRhcFN0cmljdCcpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL2FwcGl1bS9zZXR0aW5ncycsICdQT1NUJywge1xuICAgICAgICBzZXR0aW5nczoge1trZXldOiB2YWx1ZX1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm9wdHNba2V5XSA9ICEhdmFsdWU7XG4gIH1cblxuICByZXNldElvcyAoKSB7XG4gICAgdGhpcy5vcHRzID0gdGhpcy5vcHRzIHx8IHt9O1xuICAgIHRoaXMud2RhID0gbnVsbDtcbiAgICB0aGlzLm9wdHMuZGV2aWNlID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gW107XG4gICAgdGhpcy5zYWZhcmkgPSBmYWxzZTtcbiAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IG51bGw7XG5cbiAgICB0aGlzLmN1cldlYkZyYW1lcyA9IFtdO1xuICAgIHRoaXMuX2N1cnJlbnRVcmwgPSBudWxsO1xuICAgIHRoaXMuY3VyQ29udGV4dCA9IG51bGw7XG4gICAgdGhpcy54Y29kZVZlcnNpb24gPSB7fTtcbiAgICB0aGlzLmNvbnRleHRzID0gW107XG4gICAgdGhpcy5pbXBsaWNpdFdhaXRNcyA9IDA7XG4gICAgdGhpcy5hc3luY2xpYldhaXRNcyA9IDA7XG4gICAgdGhpcy5wYWdlTG9hZE1zID0gNjAwMDtcbiAgICB0aGlzLmxhbmRzY2FwZVdlYkNvb3Jkc09mZnNldCA9IDA7XG4gICAgdGhpcy5yZW1vdGUgPSBudWxsO1xuXG4gICAgdGhpcy53ZWJFbGVtZW50c0NhY2hlID0gbmV3IExSVSh7XG4gICAgICBtYXg6IFdFQl9FTEVNRU5UU19DQUNIRV9TSVpFLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbCBvdXQgcmVzb3VyY2UgaW5mbyBoZXJlXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuZHJpdmVySW5mbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuZHJpdmVySW5mbyA9IGF3YWl0IGdldERyaXZlckluZm8oKTtcbiAgICB9XG4gICAgbGV0IHN0YXR1cyA9IHtidWlsZDoge3ZlcnNpb246IHRoaXMuZHJpdmVySW5mby52ZXJzaW9ufX07XG4gICAgaWYgKHRoaXMuY2FjaGVkV2RhU3RhdHVzKSB7XG4gICAgICBzdGF0dXMud2RhID0gdGhpcy5jYWNoZWRXZGFTdGF0dXM7XG4gICAgfVxuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICBtZXJnZUNsaUFyZ3NUb09wdHMgKCkge1xuICAgIGxldCBkaWRNZXJnZSA9IGZhbHNlO1xuICAgIC8vIHRoaXMuY2xpQXJncyBzaG91bGQgbmV2ZXIgaW5jbHVkZSBhbnl0aGluZyB3ZSBkbyBub3QgZXhwZWN0LlxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY2xpQXJncyA/PyB7fSkpIHtcbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsIGtleSkpIHtcbiAgICAgICAgdGhpcy5vcHRzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgbG9nLmluZm8oYENMSSBhcmcgJyR7a2V5fScgd2l0aCB2YWx1ZSAnJHt2YWx1ZX0nIG92ZXJ3cml0ZXMgdmFsdWUgJyR7dGhpcy5vcHRzW2tleV19JyBzZW50IGluIHZpYSBjYXBzKWApO1xuICAgICAgICBkaWRNZXJnZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWRNZXJnZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEgPSB7fTsgLy8gdGhpcyBpcyB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRoZSBzdGF0ZSB3ZSBzdGFydCBzbyB3aGVuIHdlIGRlbGV0ZSB0aGUgc2Vzc2lvbiB3ZSBjYW4gcHV0IHRoaW5ncyBiYWNrXG4gICAgdHJ5IHtcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG4gICAgICB0aGlzLm9wdHMuc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuXG4gICAgICAvLyBtZXJnZSBjbGkgYXJncyB0byBvcHRzLCBhbmQgaWYgd2UgZGlkIG1lcmdlIGFueSwgcmV2YWxpZGF0ZSBvcHRzIHRvIGVuc3VyZSB0aGUgZmluYWwgc2V0XG4gICAgICAvLyBpcyBhbHNvIGNvbnNpc3RlbnRcbiAgICAgIGlmICh0aGlzLm1lcmdlQ2xpQXJnc1RvT3B0cygpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVEZXNpcmVkQ2Fwcyh7Li4uY2FwcywgLi4udGhpcy5jbGlBcmdzfSk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnQoKTtcblxuICAgICAgLy8gbWVyZ2Ugc2VydmVyIGNhcGFiaWxpdGllcyArIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjYXBzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNlcnZlckNhcHMsIGNhcHMpO1xuICAgICAgLy8gdXBkYXRlIHRoZSB1ZGlkIHdpdGggd2hhdCBpcyBhY3R1YWxseSB1c2VkXG4gICAgICBjYXBzLnVkaWQgPSB0aGlzLm9wdHMudWRpZDtcbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayBuYXRpdmVXZWJUYXAgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ25hdGl2ZVdlYlRhcCcpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe25hdGl2ZVdlYlRhcDogdGhpcy5vcHRzLm5hdGl2ZVdlYlRhcH0pO1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIG5hdGl2ZVdlYlRhcFN0cmljdCBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbmF0aXZlV2ViVGFwU3RyaWN0JykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7bmF0aXZlV2ViVGFwU3RyaWN0OiB0aGlzLm9wdHMubmF0aXZlV2ViVGFwU3RyaWN0fSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgdXNlSlNPTlNvdXJjZSBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAndXNlSlNPTlNvdXJjZScpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe3VzZUpTT05Tb3VyY2U6IHRoaXMub3B0cy51c2VKU09OU291cmNlfSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB3ZGFTZXR0aW5ncyA9IHtcbiAgICAgICAgZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlczogREVGQVVMVF9TRVRUSU5HUy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzLFxuICAgICAgICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiBERUZBVUxUX1NFVFRJTkdTLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMsXG4gICAgICB9O1xuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ2VsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzID0gdGhpcy5vcHRzLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcycpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMgPSB0aGlzLm9wdHMuc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcztcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5JykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MubWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eSA9IHRoaXMub3B0cy5tanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5O1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ21qcGVnU2VydmVyRnJhbWVyYXRlJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MubWpwZWdTZXJ2ZXJGcmFtZXJhdGUgPSB0aGlzLm9wdHMubWpwZWdTZXJ2ZXJGcmFtZXJhdGU7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnc2NyZWVuc2hvdFF1YWxpdHknKSkge1xuICAgICAgICBsb2cuaW5mbyhgU2V0dGluZyB0aGUgcXVhbGl0eSBvZiBwaG9uZSBzY3JlZW5zaG90OiAnJHt0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHl9J2ApO1xuICAgICAgICB3ZGFTZXR0aW5ncy5zY3JlZW5zaG90UXVhbGl0eSA9IHRoaXMub3B0cy5zY3JlZW5zaG90UXVhbGl0eTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSBXREEgZ2V0cyBvdXIgZGVmYXVsdHMgaW5zdGVhZCBvZiB3aGF0ZXZlciBpdHMgb3duIG1pZ2h0IGJlXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHdkYVNldHRpbmdzKTtcblxuICAgICAgLy8gdHVybiBvbiBtanBlZyBzdHJlYW0gcmVhZGluZyBpZiByZXF1ZXN0ZWRcbiAgICAgIGlmICh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKSB7XG4gICAgICAgIGxvZy5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKEpTT04uc3RyaW5naWZ5KGUpKTtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCAoKSB7XG4gICAgdGhpcy5vcHRzLm5vUmVzZXQgPSAhIXRoaXMub3B0cy5ub1Jlc2V0O1xuICAgIHRoaXMub3B0cy5mdWxsUmVzZXQgPSAhIXRoaXMub3B0cy5mdWxsUmVzZXQ7XG5cbiAgICBhd2FpdCBwcmludFVzZXIoKTtcblxuICAgIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uID0gbnVsbDsgLy8gRm9yIFdEQSBhbmQgeGNvZGVidWlsZFxuICAgIGNvbnN0IHtkZXZpY2UsIHVkaWQsIHJlYWxEZXZpY2V9ID0gYXdhaXQgdGhpcy5kZXRlcm1pbmVEZXZpY2UoKTtcbiAgICBsb2cuaW5mbyhgRGV0ZXJtaW5pbmcgZGV2aWNlIHRvIHJ1biB0ZXN0cyBvbjogdWRpZDogJyR7dWRpZH0nLCByZWFsIGRldmljZTogJHtyZWFsRGV2aWNlfWApO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5yZWFsRGV2aWNlID0gcmVhbERldmljZTtcblxuICAgIGlmICh0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgpIHtcbiAgICAgIGlmIChyZWFsRGV2aWNlKSB7XG4gICAgICAgIGxvZy5pbmZvKGBUaGUgJ3NpbXVsYXRvckRldmljZXNTZXRQYXRoJyBjYXBhYmlsaXR5IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3IgZGV2aWNlc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oYFNldHRpbmcgc2ltdWxhdG9yIGRldmljZXMgc2V0IHBhdGggdG8gJyR7dGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRofSdgKTtcbiAgICAgICAgdGhpcy5vcHRzLmRldmljZS5kZXZpY2VzU2V0UGF0aCA9IHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50IGlmIHRoZXJlIGlzIG5vIHBsYXRmb3JtVmVyc2lvbiwgZ2V0IGl0IGZyb20gdGhlIGRldmljZVxuICAgIGlmICghdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAmJiB0aGlzLm9wdHMuZGV2aWNlKSB7XG4gICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgIGxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyBkZXZpY2UgdmVyc2lvbjogJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFZlcnNpb24gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24odGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbik7XG4gICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IG5vcm1hbGl6ZWRWZXJzaW9uKSB7XG4gICAgICBsb2cuaW5mbyhgTm9ybWFsaXplZCBwbGF0Zm9ybVZlcnNpb24gY2FwYWJpbGl0eSB2YWx1ZSAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgdG8gJyR7bm9ybWFsaXplZFZlcnNpb259J2ApO1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZWRWZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnOS4zJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGxhdGZvcm0gdmVyc2lvbiBtdXN0IGJlIDkuMyBvciBhYm92ZS4gJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnhjb2RlVmVyc2lvbikgJiYgKCF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwgfHwgIXRoaXMub3B0cy5yZWFsRGV2aWNlKSkge1xuICAgICAgLy8gbm8gYHdlYkRyaXZlckFnZW50VXJsYCwgb3Igb24gYSBzaW11bGF0b3IsIHNvIHdlIG5lZWQgYW4gWGNvZGUgdmVyc2lvblxuICAgICAgdGhpcy54Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbigpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCd4Y29kZURldGFpbHNSZXRyaWV2ZWQnKTtcblxuICAgIGlmIChfLnRvTG93ZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKSA9PT0gJ3NhZmFyaScpIHtcbiAgICAgIGxvZy5pbmZvKCdTYWZhcmkgdGVzdCByZXF1ZXN0ZWQnKTtcbiAgICAgIHRoaXMuc2FmYXJpID0gdHJ1ZTtcbiAgICAgIHRoaXMub3B0cy5hcHAgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyA9IHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzIHx8IHt9O1xuICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gU0FGQVJJX0JVTkRMRV9JRDtcbiAgICAgIHRoaXMuX2N1cnJlbnRVcmwgPSB0aGlzLm9wdHMuc2FmYXJpSW5pdGlhbFVybCB8fCAoXG4gICAgICAgIHRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICAgICA/ICdodHRwOi8vYXBwaXVtLmlvJ1xuICAgICAgICAgIDogYGh0dHA6Ly8ke3RoaXMub3B0cy5hZGRyZXNzfToke3RoaXMub3B0cy5wb3J0fS93ZWxjb21lYFxuICAgICAgKTtcbiAgICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4yJykpIHtcbiAgICAgICAgLy8gdGhpcyBvcHRpb24gZG9lcyBub3Qgd29yayBvbiAxMi4yIGFuZCBhYm92ZVxuICAgICAgICB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cy5hcmdzID0gWyctdScsIHRoaXMuX2N1cnJlbnRVcmxdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcCB8fCB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlQXBwKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ2FwcENvbmZpZ3VyZWQnKTtcblxuICAgIC8vIGZhaWwgdmVyeSBlYXJseSBpZiB0aGUgYXBwIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3RcbiAgICAvLyBvciBpZiBidW5kbGUgaWQgZG9lc24ndCBwb2ludCB0byBhbiBpbnN0YWxsZWQgYXBwXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IGNoZWNrQXBwUHJlc2VudCh0aGlzLm9wdHMuYXBwKTtcblxuICAgICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdEJ1bmRsZUlkKHRoaXMub3B0cy5hcHApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucnVuUmVzZXQoKTtcblxuICAgIHRoaXMud2RhID0gbmV3IFdlYkRyaXZlckFnZW50KHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLm9wdHMpO1xuICAgIC8vIERlcml2ZWQgZGF0YSBwYXRoIHJldHJpZXZhbCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uXG4gICAgLy8gV2UgY291bGQgc3RhcnQgdGhhdCBub3cgaW4gYmFja2dyb3VuZCBhbmQgZ2V0IHRoZSBjYWNoZWQgcmVzdWx0XG4gICAgLy8gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkXG4gICAgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKS5jYXRjaCgoZSkgPT4gbG9nLmRlYnVnKGUpKTtcblxuICAgIGNvbnN0IG1lbW9pemVkTG9nSW5mbyA9IF8ubWVtb2l6ZShmdW5jdGlvbiBsb2dJbmZvICgpIHtcbiAgICAgIGxvZy5pbmZvKFwiJ3NraXBMb2dDYXB0dXJlJyBpcyBzZXQuIFNraXBwaW5nIHN0YXJ0aW5nIGxvZ3Mgc3VjaCBhcyBjcmFzaCwgc3lzdGVtLCBzYWZhcmkgY29uc29sZSBhbmQgc2FmYXJpIG5ldHdvcmsuXCIpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0TG9nQ2FwdHVyZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMuc2tpcExvZ0NhcHR1cmUpIHtcbiAgICAgICAgbWVtb2l6ZWRMb2dJbmZvKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdGFydExvZ0NhcHR1cmUoKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnbG9nQ2FwdHVyZVN0YXJ0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBjb25zdCBpc0xvZ0NhcHR1cmVTdGFydGVkID0gYXdhaXQgc3RhcnRMb2dDYXB0dXJlKCk7XG5cbiAgICBsb2cuaW5mbyhgU2V0dGluZyB1cCAke3RoaXMuaXNSZWFsRGV2aWNlKCkgPyAncmVhbCBkZXZpY2UnIDogJ3NpbXVsYXRvcid9YCk7XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNodXRkb3duT3RoZXJTaW11bGF0b3JzKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25PdGhlclNpbXVsYXRvcnModGhpcy5vcHRzLmRldmljZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHRoZSBzaW11bGF0b3IgaXMgc3RhcnRlZFxuICAgICAgLy8gaWYgaXQgaXMgYWxyZWFkeSBydW5uaW5nLCB0aGlzIGNhcCB3b24ndCB3b3JrLCB3aGljaCBpcyBkb2N1bWVudGVkXG4gICAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMub3B0cy5zYWZhcmlHbG9iYWxQcmVmZXJlbmNlcykge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5vcHRzLmRldmljZS51cGRhdGVTYWZhcmlHbG9iYWxTZXR0aW5ncyh0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBTYWZhcmkgZ2xvYmFsIHByZWZlcmVuY2VzIHVwZGF0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvY2FsQ29uZmlnID0gYXdhaXQgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXModGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLCB0aGlzLmlzU2FmYXJpKCksIGFzeW5jIChzaW0pID0+IHtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3Ioc2ltKTtcblxuICAgICAgICAvLyB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIG5lZWRzIHRvIGJlIGNoYW5nZXMgYSBwcmlvcmksIHNvIGNoYW5nZSBmaXJzdC5cbiAgICAgICAgLy8gc29tZXRpbWVzIHRoZSBzaHV0ZG93biBwcm9jZXNzIGNoYW5nZXMgdGhlIHNldHRpbmdzLCBzbyByZXNldCB0aGVtLFxuICAgICAgICAvLyBrbm93aW5nIHRoYXQgdGhlIHNpbSBpcyBhbHJlYWR5IHNodXRcbiAgICAgICAgYXdhaXQgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXMoc2ltLCB0aGlzLm9wdHMsIHRoaXMuaXNTYWZhcmkoKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0ICYmICEoYXdhaXQgZG9lc1N1cHBvcnRLZXljaGFpbkFwaSh0aGlzLm9wdHMuZGV2aWNlKSkpIHtcbiAgICAgICAgY29uc3QgY2VydEhlYWQgPSBfLnRydW5jYXRlKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB7bGVuZ3RoOiAyMH0pO1xuICAgICAgICBsb2cuaW5mbyhgSW5zdGFsbGluZyB0aGUgY3VzdG9tIFNTTCBjZXJ0aWZpY2F0ZSAnJHtjZXJ0SGVhZH0nYCk7XG4gICAgICAgIGlmIChhd2FpdCBoYXNDZXJ0aWZpY2F0ZUxlZ2FjeSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCkpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgU1NMIGNlcnRpZmljYXRlICcke2NlcnRIZWFkfScgYWxyZWFkeSBpbnN0YWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2cuaW5mbyhgTWFraW5nIHN1cmUgU2ltdWxhdG9yIGlzIHNodXQgZG93biwgJyArXG4gICAgICAgICAgICAnc28gdGhhdCBTU0wgY2VydGlmaWNhdGUgaW5zdGFsbGF0aW9uIHRha2VzIGVmZmVjdGApO1xuICAgICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgICAgIGF3YWl0IGluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dFdmVudCgnY3VzdG9tQ2VydEluc3RhbGxlZCcpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2ltKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCAmJiBhd2FpdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpKHRoaXMub3B0cy5kZXZpY2UpKSB7XG4gICAgICAgIC8vIFNpbXVsYXRvciBtdXN0IGJlIGJvb3RlZCBpbiBvcmRlciB0byBjYWxsIHRoaXMgaGVscGVyXG4gICAgICAgIGF3YWl0IGluc3RhbGxDZXJ0aWZpY2F0ZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCk7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2N1c3RvbUNlcnRJbnN0YWxsZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5sYXVuY2hXaXRoSURCICYmIHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGlkYiA9IG5ldyBJREIoe3VkaWR9KTtcbiAgICAgICAgICBhd2FpdCBpZGIuY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMub3B0cy5kZXZpY2UuaWRiID0gaWRiO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLmluZm8oYGlkYiB3aWxsIG5vdCBiZSB1c2VkIGZvciBTaW11bGF0b3IgaW50ZXJhY3Rpb24uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZ0V2ZW50KCdzaW1TdGFydGVkJyk7XG4gICAgICBpZiAoIWlzTG9nQ2FwdHVyZVN0YXJ0ZWQpIHtcbiAgICAgICAgLy8gUmV0cnkgbG9nIGNhcHR1cmUgaWYgU2ltdWxhdG9yIHdhcyBub3QgcnVubmluZyBiZWZvcmVcbiAgICAgICAgYXdhaXQgc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCkge1xuICAgICAgYXdhaXQgbmV3IFB5aWRldmljZSh1ZGlkKS5pbnN0YWxsUHJvZmlsZSh7cGF5bG9hZDogdGhpcy5vcHRzLmN1c3RvbVNTTENlcnR9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsQVVUKCk7XG4gICAgICB0aGlzLmxvZ0V2ZW50KCdhcHBJbnN0YWxsZWQnKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBvbmx5IGhhdmUgYnVuZGxlIGlkZW50aWZpZXIgYW5kIG5vIGFwcCwgZmFpbCBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWRcbiAgICBpZiAoIXRoaXMub3B0cy5hcHAgJiYgdGhpcy5vcHRzLmJ1bmRsZUlkICYmICF0aGlzLnNhZmFyaSkge1xuICAgICAgaWYgKCFhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5idW5kbGVJZCkpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYEFwcCB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke3RoaXMub3B0cy5idW5kbGVJZH0nIHVua25vd25gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnBlcm1pc3Npb25zKSB7XG4gICAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnU2V0dGluZyB0aGUgcmVxdWVzdGVkIHBlcm1pc3Npb25zIGJlZm9yZSBXREEgaXMgc3RhcnRlZCcpO1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZSh0aGlzLm9wdHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0UGVybWlzc2lvbnMoYnVuZGxlSWQsIHBlcm1pc3Npb25zTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKCdTZXR0aW5nIHBlcm1pc3Npb25zIGlzIG9ubHkgc3VwcG9ydGVkIG9uIFNpbXVsYXRvci4gJyArXG4gICAgICAgICAgJ1RoZSBcInBlcm1pc3Npb25zXCIgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5lbmFibGVDYWxlbmRhckFjY2Vzcyh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmRpc2FibGVDYWxlbmRhckFjY2Vzcyh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc3RhcnRXZGEodGhpcy5vcHRzLnNlc3Npb25JZCwgcmVhbERldmljZSk7XG5cbiAgICBhd2FpdCB0aGlzLnNldFJlZHVjZU1vdGlvbih0aGlzLm9wdHMucmVkdWNlTW90aW9uKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0SW5pdGlhbE9yaWVudGF0aW9uKHRoaXMub3B0cy5vcmllbnRhdGlvbik7XG4gICAgdGhpcy5sb2dFdmVudCgnb3JpZW50YXRpb25TZXQnKTtcblxuICAgIC8vIHJlYWwgZGV2aWNlcyB3aWxsIGJlIGhhbmRsZWQgbGF0ZXIsIGFmdGVyIHRoZSB3ZWIgY29udGV4dCBoYXMgYmVlbiBpbml0aWFsaXplZFxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgIXRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICYmIHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc+PScsICcxMi4yJykpIHtcbiAgICAgIC8vIG9uIDEyLjIgdGhlIHBhZ2UgaXMgbm90IG9wZW5lZCBpbiBXREFcbiAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uub3BlblVybCh0aGlzLl9jdXJyZW50VXJsKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpIHx8IHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgbG9nLmRlYnVnKCdXYWl0aW5nIGZvciBpbml0aWFsIHdlYnZpZXcnKTtcbiAgICAgIGF3YWl0IHRoaXMubmF2VG9Jbml0aWFsV2VidmlldygpO1xuICAgICAgdGhpcy5sb2dFdmVudCgnaW5pdGlhbFdlYnZpZXdOYXZpZ2F0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgLy8gb24gMTIuMiB0aGUgcGFnZSBpcyBub3Qgb3BlbmVkIGluIFdEQVxuICAgICAgYXdhaXQgdGhpcy5zZXRVcmwodGhpcy5fY3VycmVudFVybCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IFdlYkRyaXZlckFnZW50UnVubmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgLSBUaGUgaWQgb2YgdGhlIHRhcmdldCBzZXNzaW9uIHRvIGxhdW5jaCBXREEgd2l0aC5cbiAgICogQHBhcmFtIHtib29sZWFufSByZWFsRGV2aWNlIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIHRlc3QgdGFyZ2V0IGRldmljZSBpcyBhIHJlYWwgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgc3RhcnRXZGEgKHNlc3Npb25JZCwgcmVhbERldmljZSkge1xuICAgIC8vIERvbid0IGNsZWFudXAgdGhlIHByb2Nlc3NlcyBpZiB3ZWJEcml2ZXJBZ2VudFVybCBpcyBzZXRcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICBhd2FpdCB0aGlzLndkYS5jbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VQb3J0Rm9yd2FyZGluZyA9IHRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICYmICF0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybFxuICAgICAgJiYgaXNMb2NhbEhvc3QodGhpcy53ZGEud2RhQmFzZVVybCk7XG4gICAgYXdhaXQgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVxdWVzdENvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQsIHRoaXMud2RhLnVybC5wb3J0LCB7XG4gICAgICBkZXZpY2VQb3J0OiB1c2VQb3J0Rm9yd2FyZGluZyA/IHRoaXMud2RhLndkYVJlbW90ZVBvcnQgOiBudWxsLFxuICAgICAgdXNlUG9ydEZvcndhcmRpbmcsXG4gICAgfSk7XG5cbiAgICAvLyBMZXQgbXVsdGlwbGUgV0RBIGJpbmFyaWVzIHdpdGggZGlmZmVyZW50IGRlcml2ZWQgZGF0YSBmb2xkZXJzIGJlIGJ1aWx0IGluIHBhcmFsbGVsXG4gICAgLy8gQ29uY3VycmVudCBXREEgYnVpbGRzIGZyb20gdGhlIHNhbWUgc291cmNlIHdpbGwgY2F1c2UgeGNvZGVidWlsZCBzeW5jaHJvbml6YXRpb24gZXJyb3JzXG4gICAgbGV0IHN5bmNocm9uaXphdGlvbktleSA9IFhDVUlUZXN0RHJpdmVyLm5hbWU7XG4gICAgaWYgKHRoaXMub3B0cy51c2VYY3Rlc3RydW5GaWxlIHx8ICEoYXdhaXQgdGhpcy53ZGEuaXNTb3VyY2VGcmVzaCgpKSkge1xuICAgICAgLy8gRmlyc3QtdGltZSBjb21waWxhdGlvbiBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLCB3aGljaCBpcyBkb25lIGZhc3RlciBpZiBleGVjdXRlZFxuICAgICAgLy8gc2VxdWVudGlhbGx5LiBYY29kZWJ1aWxkIHNwcmVhZHMgdGhlIGxvYWQgY2F1c2VkIGJ5IHRoZSBjbGFuZyBjb21waWxlciB0byBhbGwgYXZhaWxhYmxlIENQVSBjb3Jlc1xuICAgICAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgICAgIGlmIChkZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUoZGVyaXZlZERhdGFQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTdGFydGluZyBXZWJEcml2ZXJBZ2VudCBpbml0aWFsaXphdGlvbiB3aXRoIHRoZSBzeW5jaHJvbml6YXRpb24ga2V5ICcke3N5bmNocm9uaXphdGlvbktleX0nYCk7XG4gICAgaWYgKFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuaXNCdXN5KCkgJiYgIXRoaXMub3B0cy5kZXJpdmVkRGF0YVBhdGggJiYgIXRoaXMub3B0cy5ib290c3RyYXBQYXRoKSB7XG4gICAgICBsb2cuZGVidWcoYENvbnNpZGVyIHNldHRpbmcgYSB1bmlxdWUgJ2Rlcml2ZWREYXRhUGF0aCcgY2FwYWJpbGl0eSB2YWx1ZSBmb3IgZWFjaCBwYXJhbGxlbCBkcml2ZXIgaW5zdGFuY2UgYCArXG4gICAgICAgIGB0byBhdm9pZCBjb25mbGljdHMgYW5kIHNwZWVkIHVwIHRoZSBidWlsZGluZyBwcm9jZXNzYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICBsb2cuZGVidWcoYENhcGFiaWxpdHkgJ3VzZU5ld1dEQScgc2V0IHRvIHRydWUsIHNvIHVuaW5zdGFsbGluZyBXREEgYmVmb3JlIHByb2NlZWRpbmdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdEFuZFVuaW5zdGFsbCgpO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFVbmluc3RhbGxlZCcpO1xuICAgICAgfSBlbHNlIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEuc2V0dXBDYWNoaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGxvY2FsIGhlbHBlciBmb3IgdGhlIHR3byBwbGFjZXMgd2UgbmVlZCB0byB1bmluc3RhbGwgd2RhIGFuZCByZS1zdGFydCBpdFxuICAgICAgY29uc3QgcXVpdEFuZFVuaW5zdGFsbCA9IGFzeW5jIChtc2cpID0+IHtcbiAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ05vdCBxdWl0dGluZy91bmluc3RhbGxpbmcgV2ViRHJpdmVyQWdlbnQgc2luY2Ugd2ViRHJpdmVyQWdlbnRVcmwgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCcpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGxvZy53YXJuKCdRdWl0dGluZyBhbmQgdW5pbnN0YWxsaW5nIFdlYkRyaXZlckFnZW50Jyk7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXRBbmRVbmluc3RhbGwoKTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFVzZWQgaW4gdGhlIGZvbGxvd2luZyBXREEgYnVpbGRcbiAgICAgIGlmICh0aGlzLm9wdHMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKENVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydHVwUmV0cmllcyA9IHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cmllcyB8fCAodGhpcy5pc1JlYWxEZXZpY2UoKSA/IFdEQV9SRUFMX0RFVl9TVEFSVFVQX1JFVFJJRVMgOiBXREFfU0lNX1NUQVJUVVBfUkVUUklFUyk7XG4gICAgICBjb25zdCBzdGFydHVwUmV0cnlJbnRlcnZhbCA9IHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCB8fCBXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTDtcbiAgICAgIGxvZy5kZWJ1ZyhgVHJ5aW5nIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50ICR7c3RhcnR1cFJldHJpZXN9IHRpbWVzIHdpdGggJHtzdGFydHVwUmV0cnlJbnRlcnZhbH1tcyBpbnRlcnZhbGApO1xuICAgICAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cmllcykgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsKSkge1xuICAgICAgICBsb2cuZGVidWcoYFRoZXNlIHZhbHVlcyBjYW4gYmUgY3VzdG9taXplZCBieSBjaGFuZ2luZyB3ZGFTdGFydHVwUmV0cmllcy93ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCBjYXBhYmlsaXRpZXNgKTtcbiAgICAgIH1cbiAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoc3RhcnR1cFJldHJpZXMsIHN0YXJ0dXBSZXRyeUludGVydmFsLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0QXR0ZW1wdGVkJyk7XG4gICAgICAgIGlmIChyZXRyeUNvdW50ID4gMCkge1xuICAgICAgICAgIGxvZy5pbmZvKGBSZXRyeWluZyBXREEgc3RhcnR1cCAoJHtyZXRyeUNvdW50ICsgMX0gb2YgJHtzdGFydHVwUmV0cmllc30pYCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBvbiB4Y29kZSAxMCBpbnN0YWxsZCB3aWxsIG9mdGVuIHRyeSB0byBhY2Nlc3MgdGhlIGFwcCBmcm9tIGl0cyBzdGFnaW5nXG4gICAgICAgICAgLy8gZGlyZWN0b3J5IGJlZm9yZSBmdWxseSBtb3ZpbmcgaXQgdGhlcmUsIGFuZCBmYWlsLiBSZXRyeWluZyBvbmNlXG4gICAgICAgICAgLy8gaW1tZWRpYXRlbHkgaGVscHNcbiAgICAgICAgICBjb25zdCByZXRyaWVzID0gdGhpcy54Y29kZVZlcnNpb24ubWFqb3IgPj0gMTAgPyAyIDogMTtcbiAgICAgICAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IGF3YWl0IHJldHJ5KHJldHJpZXMsIHRoaXMud2RhLmxhdW5jaC5iaW5kKHRoaXMud2RhKSwgc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRGYWlsZWQnKTtcbiAgICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgICAgbGV0IGVycm9yTXNnID0gYFVuYWJsZSB0byBsYXVuY2ggV2ViRHJpdmVyQWdlbnQgYmVjYXVzZSBvZiB4Y29kZWJ1aWxkIGZhaWx1cmU6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICAgICAgZXJyb3JNc2cgKz0gYC4gTWFrZSBzdXJlIHlvdSBmb2xsb3cgdGhlIHR1dG9yaWFsIGF0ICR7V0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTH0uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFRyeSB0byByZW1vdmUgdGhlIFdlYkRyaXZlckFnZW50UnVubmVyIGFwcGxpY2F0aW9uIGZyb20gdGhlIGRldmljZSBpZiBpdCBpcyBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgYW5kIHJlYm9vdCB0aGUgZGV2aWNlLmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHF1aXRBbmRVbmluc3RhbGwoZXJyb3JNc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMud2RhLnByb3h5UmVxUmVzLmJpbmQodGhpcy53ZGEpO1xuICAgICAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICBsZXQgb3JpZ2luYWxTdGFja3RyYWNlID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCByZXRyeUludGVydmFsKDE1LCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTZXNzaW9uQXR0ZW1wdGVkJyk7XG4gICAgICAgICAgICBsb2cuZGVidWcoJ1NlbmRpbmcgY3JlYXRlU2Vzc2lvbiBjb21tYW5kIHRvIFdEQScpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cyB8fCBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFdkYVNlc3Npb24odGhpcy5vcHRzLmJ1bmRsZUlkLCB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxTdGFja3RyYWNlID0gZXJyLnN0YWNrO1xuICAgICAgICAgICAgICBsb2cuZGVidWcoYEZhaWxlZCB0byBjcmVhdGUgV0RBIHNlc3Npb24gKCR7ZXJyLm1lc3NhZ2V9KS4gUmV0cnlpbmcuLi5gKTtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVNlc3Npb25TdGFydGVkJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChvcmlnaW5hbFN0YWNrdHJhY2UpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhvcmlnaW5hbFN0YWNrdHJhY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBgVW5hYmxlIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50IHNlc3Npb24gYmVjYXVzZSBvZiB4Y29kZWJ1aWxkIGZhaWx1cmU6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICAgICAgZXJyb3JNc2cgKz0gYCBNYWtlIHN1cmUgeW91IGZvbGxvdyB0aGUgdHV0b3JpYWwgYXQgJHtXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMfS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgVHJ5IHRvIHJlbW92ZSB0aGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIGluc3RhbGxlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBhbmQgcmVib290IHRoZSBkZXZpY2UuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcXVpdEFuZFVuaW5zdGFsbChlcnJvck1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRzLmNsZWFyU3lzdGVtRmlsZXMgJiYgIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICAgIGF3YWl0IG1hcmtTeXN0ZW1GaWxlc0ZvckNsZWFudXAodGhpcy53ZGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgZXhwZWN0IGNlcnRhaW4gc29ja2V0IGVycm9ycyB1bnRpbCB0aGlzIHBvaW50LCBidXQgbm93XG4gICAgICAgIC8vIG1hcmsgdGhpbmdzIGFzIGZ1bGx5IHdvcmtpbmdcbiAgICAgICAgdGhpcy53ZGEuZnVsbHlTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRlZCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBydW5SZXNldCAob3B0cyA9IG51bGwpIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCdyZXNldFN0YXJ0ZWQnKTtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgcnVuUmVhbERldmljZVJlc2V0KHRoaXMub3B0cy5kZXZpY2UsIG9wdHMgfHwgdGhpcy5vcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgcnVuU2ltdWxhdG9yUmVzZXQodGhpcy5vcHRzLmRldmljZSwgb3B0cyB8fCB0aGlzLm9wdHMpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCdyZXNldENvbXBsZXRlJyk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICBhd2FpdCByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgXy5jb21wYWN0KFt0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlciwgdGhpcy5fYXVkaW9SZWNvcmRlcl0pKSB7XG4gICAgICBhd2FpdCByZWNvcmRlci5pbnRlcnJ1cHQodHJ1ZSk7XG4gICAgICBhd2FpdCByZWNvcmRlci5jbGVhbnVwKCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fcGVyZlJlY29yZGVycykpIHtcbiAgICAgIGF3YWl0IEIuYWxsKHRoaXMuX3BlcmZSZWNvcmRlcnMubWFwKCh4KSA9PiB4LnN0b3AodHJ1ZSkpKTtcbiAgICAgIHRoaXMuX3BlcmZSZWNvcmRlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnN0b3AoKTtcblxuICAgIGlmICh0aGlzLndkYSAmJiAhdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNsZWFyU3lzdGVtRmlsZXMpIHtcbiAgICAgICAgbGV0IHN5bmNocm9uaXphdGlvbktleSA9IFhDVUlUZXN0RHJpdmVyLm5hbWU7XG4gICAgICAgIGNvbnN0IGRlcml2ZWREYXRhUGF0aCA9IGF3YWl0IHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gICAgICAgIGlmIChkZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgICBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZShkZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjbGVhclN5c3RlbUZpbGVzKHRoaXMud2RhKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoJ05vdCBjbGVhcmluZyBsb2cgZmlsZXMuIFVzZSBgY2xlYXJTeXN0ZW1GaWxlc2AgY2FwYWJpbGl0eSB0byB0dXJuIG9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbW90ZSkge1xuICAgICAgbG9nLmRlYnVnKCdGb3VuZCBhIHJlbW90ZSBkZWJ1Z2dlciBzZXNzaW9uLiBSZW1vdmluZy4uLicpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wUmVtb3RlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9PT0gZmFsc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMucnVuUmVzZXQoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRzLCB7XG4gICAgICAgIGVuZm9yY2VTaW11bGF0b3JTaHV0ZG93bjogdHJ1ZSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpICYmICF0aGlzLm9wdHMubm9SZXNldCAmJiAhIXRoaXMub3B0cy5kZXZpY2UpIHtcbiAgICAgIGlmICh0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgc2ltdWxhdG9yIGNyZWF0ZWQgZm9yIHRoaXMgcnVuICh1ZGlkOiAnJHt0aGlzLm9wdHMudWRpZH0nKWApO1xuICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5kZWxldGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRSZXNldExvY2F0aW9uU2Vydml2Y2UgPSB0aGlzLmlzUmVhbERldmljZSgpICYmICEhdGhpcy5vcHRzLnJlc2V0TG9jYXRpb25TZXJ2aWNlO1xuICAgIGlmIChzaG91bGRSZXNldExvY2F0aW9uU2Vydml2Y2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMubW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UoKTtcbiAgICAgIH0gY2F0Y2ggKGlnbm9yZSkgeyAvKiBJZ25vcmUgdGhpcyBlcnJvciBzaW5jZSBtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSBhbHJlYWR5IGxvZ2dlZCB0aGUgZXJyb3IgKi8gfVxuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KHRoaXMubG9ncykpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9ncy5zeXNsb2cuc3RvcENhcHR1cmUoKTtcbiAgICAgIHRoaXMubG9ncyA9IHt9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1qcGVnU3RyZWFtKSB7XG4gICAgICBsb2cuaW5mbygnQ2xvc2luZyBNSlBFRyBzdHJlYW0nKTtcbiAgICAgIHRoaXMubWpwZWdTdHJlYW0uc3RvcCgpO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRJb3MoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcblxuXG4gICAgaWYgKHRoaXMud2RhICYmIHRoaXMud2RhLmZ1bGx5U3RhcnRlZCkge1xuICAgICAgaWYgKHRoaXMud2RhLmp3cHJveHkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3Nlc3Npb24vJHt0aGlzLnNlc3Npb25JZH1gLCAnREVMRVRFJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIGFuIGVycm9yIGhlcmUgc2hvdWxkIG5vdCBzaG9ydC1jaXJjdWl0IHRoZSByZXN0IG9mIGNsZWFuIHVwXG4gICAgICAgICAgbG9nLmRlYnVnKGBVbmFibGUgdG8gREVMRVRFIHNlc3Npb24gb24gV0RBOiAnJHtlcnIubWVzc2FnZX0nLiBDb250aW51aW5nIHNodXRkb3duLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsICYmIHRoaXMub3B0cy51c2VOZXdXREEpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlbGVhc2VDb25uZWN0aW9uKHRoaXMub3B0cy51ZGlkKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVDb21tYW5kIChjbWQsIC4uLmFyZ3MpIHtcbiAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyBjb21tYW5kICcke2NtZH0nYCk7XG5cbiAgICBpZiAoY21kID09PSAncmVjZWl2ZUFzeW5jUmVzcG9uc2UnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWNlaXZlQXN5bmNSZXNwb25zZSguLi5hcmdzKTtcbiAgICB9XG4gICAgLy8gVE9ETzogb25jZSB0aGlzIGZpeCBnZXRzIGludG8gYmFzZSBkcml2ZXIgcmVtb3ZlIGZyb20gaGVyZVxuICAgIGlmIChjbWQgPT09ICdnZXRTdGF0dXMnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmV4ZWN1dGVDb21tYW5kKGNtZCwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBjb25maWd1cmVBcHAgKCkge1xuICAgIGZ1bmN0aW9uIGFwcElzUGFja2FnZU9yQnVuZGxlIChhcHApIHtcbiAgICAgIHJldHVybiAoL14oW2EtekEtWjAtOVxcLV9dK1xcLlthLXpBLVowLTlcXC1fXSspKyQvKS50ZXN0KGFwcCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGFwcCBuYW1lIGlzIGEgYnVuZGxlSWQgYXNzaWduIGl0IHRvIHRoZSBidW5kbGVJZCBwcm9wZXJ0eVxuICAgIGlmICghdGhpcy5vcHRzLmJ1bmRsZUlkICYmIGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSB0aGlzLm9wdHMuYXBwO1xuICAgICAgdGhpcy5vcHRzLmFwcCA9ICcnO1xuICAgIH1cbiAgICAvLyB3ZSBoYXZlIGEgYnVuZGxlIElELCBidXQgbm8gYXBwLCBvciBhcHAgaXMgYWxzbyBhIGJ1bmRsZVxuICAgIGlmICgodGhpcy5vcHRzLmJ1bmRsZUlkICYmIGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5idW5kbGVJZCkpICYmXG4gICAgICAgICh0aGlzLm9wdHMuYXBwID09PSAnJyB8fCBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkpIHtcbiAgICAgIGxvZy5kZWJ1ZygnQXBwIGlzIGFuIGlPUyBidW5kbGUsIHdpbGwgYXR0ZW1wdCB0byBydW4gYXMgcHJlLWV4aXN0aW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHN1cHBvcnRlZCBidWlsZC1pbiBhcHBzXG4gICAgc3dpdGNoIChfLnRvTG93ZXIodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gJ2NvbS5hcHBsZS5QcmVmZXJlbmNlcyc7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdjYWxlbmRhcic6XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9ICdjb20uYXBwbGUubW9iaWxlY2FsJztcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gZG93bmxvYWQgaWYgbmVjZXNzYXJ5XG4gICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCAnLmFwcCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yKGVycik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBhcHA6ICR7dGhpcy5vcHRzLmFwcH0uIGAgK1xuICAgICAgICBgQXBwIHBhdGhzIG5lZWQgdG8gYmUgYWJzb2x1dGUgb3IgYW4gVVJMIHRvIGEgY29tcHJlc3NlZCBhcHAgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZXRlcm1pbmVEZXZpY2UgKCkge1xuICAgIC8vIGluIHRoZSBvbmUgY2FzZSB3aGVyZSB3ZSBjcmVhdGUgYSBzaW0sIHdlIHdpbGwgc2V0IHRoaXMgc3RhdGVcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltID0gZmFsc2U7XG5cbiAgICAvLyBpZiB3ZSBnZXQgZ2VuZXJpYyBuYW1lcywgdHJhbnNsYXRlIHRoZW1cbiAgICB0aGlzLm9wdHMuZGV2aWNlTmFtZSA9IHRyYW5zbGF0ZURldmljZU5hbWUodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgdGhpcy5vcHRzLmRldmljZU5hbWUpO1xuXG4gICAgY29uc3Qgc2V0dXBWZXJzaW9uQ2FwcyA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uKCk7XG4gICAgICBsb2cuaW5mbyhgaU9TIFNESyBWZXJzaW9uIHNldCB0byAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nYCk7XG4gICAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24pIHtcbiAgICAgICAgbG9nLmluZm8oYE5vIHBsYXRmb3JtVmVyc2lvbiBzcGVjaWZpZWQuIFVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBYY29kZSBzdXBwb3J0czogJyR7dGhpcy5vcHRzLmlvc1Nka1ZlcnNpb259Jy4gYCArXG4gICAgICAgICAgYFRoaXMgbWF5IGNhdXNlIHByb2JsZW1zIGlmIGEgc2ltdWxhdG9yIGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIHBsYXRmb3JtIHZlcnNpb24uYCk7XG4gICAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24odGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRzLnVkaWQpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMudWRpZC50b0xvd2VyQ2FzZSgpID09PSAnYXV0bycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLm9wdHMudWRpZCA9IGF3YWl0IGRldGVjdFVkaWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gVHJ5aW5nIHRvIGZpbmQgbWF0Y2hpbmcgVURJRCBmb3IgU2ltdWxhdG9yXG4gICAgICAgICAgbG9nLndhcm4oYENhbm5vdCBkZXRlY3QgYW55IGNvbm5lY3RlZCByZWFsIGRldmljZXMuIEZhbGxpbmcgYmFjayB0byBTaW11bGF0b3IuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldEV4aXN0aW5nU2ltKHRoaXMub3B0cyk7XG4gICAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIC8vIE5vIG1hdGNoaW5nIFNpbXVsYXRvciBpcyBmb3VuZC4gVGhyb3cgYW4gZXJyb3JcbiAgICAgICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZGV0ZWN0IHVkaWQgZm9yICR7dGhpcy5vcHRzLmRldmljZU5hbWV9IFNpbXVsYXRvciBydW5uaW5nIGlPUyAke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWF0Y2hpbmcgU2ltdWxhdG9yIGV4aXN0cyBhbmQgaXMgZm91bmQuIFVzZSBpdFxuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICAgICAgY29uc3QgZGV2aWNlUGxhdGZvcm0gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24oYXdhaXQgZGV2aWNlLmdldFBsYXRmb3JtVmVyc2lvbigpKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAhPT0gZGV2aWNlUGxhdGZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBkZXZpY2VQbGF0Zm9ybTtcbiAgICAgICAgICAgIGxvZy5pbmZvKGBTZXQgcGxhdGZvcm1WZXJzaW9uIHRvICcke2RldmljZVBsYXRmb3JtfScgdG8gbWF0Y2ggdGhlIGRldmljZSB3aXRoIGdpdmVuIFVESURgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgc2V0dXBWZXJzaW9uQ2FwcygpO1xuICAgICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtYWtlIHN1cmUgaXQgaXMgYSBjb25uZWN0ZWQgZGV2aWNlLiBJZiBub3QsIHRoZSB1ZGlkIHBhc3NlZCBpbiBpcyBpbnZhbGlkXG4gICAgICAgIGNvbnN0IGRldmljZXMgPSBhd2FpdCBnZXRDb25uZWN0ZWREZXZpY2VzKCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQXZhaWxhYmxlIGRldmljZXM6ICR7ZGV2aWNlcy5qb2luKCcsICcpfWApO1xuICAgICAgICBpZiAoIWRldmljZXMuaW5jbHVkZXModGhpcy5vcHRzLnVkaWQpKSB7XG4gICAgICAgICAgLy8gY2hlY2sgZm9yIGEgcGFydGljdWxhciBzaW11bGF0b3JcbiAgICAgICAgICBsb2cuZGVidWcoYE5vIHJlYWwgZGV2aWNlIHdpdGggdWRpZCAnJHt0aGlzLm9wdHMudWRpZH0nLiBMb29raW5nIGZvciBzaW11bGF0b3JgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0U2ltdWxhdG9yKHRoaXMub3B0cy51ZGlkLCB7XG4gICAgICAgICAgICAgIGRldmljZXNTZXRQYXRoOiB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogdGhpcy5vcHRzLnVkaWR9O1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRldmljZSBvciBzaW11bGF0b3IgVURJRDogJyR7dGhpcy5vcHRzLnVkaWR9J2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRSZWFsRGV2aWNlT2JqKHRoaXMub3B0cy51ZGlkKTtcbiAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiB0cnVlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGtub3cgZm9yIHN1cmUgdGhlIGRldmljZSB3aWxsIGJlIGEgU2ltdWxhdG9yXG4gICAgYXdhaXQgc2V0dXBWZXJzaW9uQ2FwcygpO1xuICAgIGlmICh0aGlzLm9wdHMuZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24pIHtcbiAgICAgIGxvZy5kZWJ1ZyhgTmV3IHNpbXVsYXRvciBpcyByZXF1ZXN0ZWQuIElmIHRoaXMgaXMgbm90IHdhbnRlZCwgc2V0ICdlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbicgY2FwYWJpbGl0eSB0byBmYWxzZWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IHNpbXVsYXRvciB0byB1c2UsIGdpdmVuIHRoZSBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0RXhpc3RpbmdTaW0odGhpcy5vcHRzKTtcblxuICAgICAgLy8gY2hlY2sgZm9yIGFuIGV4aXN0aW5nIHNpbXVsYXRvclxuICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgICAgIH1cblxuICAgICAgbG9nLmluZm8oJ1NpbXVsYXRvciB1ZGlkIG5vdCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vIG5vIGRldmljZSBvZiB0aGlzIHR5cGUgZXhpc3RzLCBvciB0aGV5IHJlcXVlc3QgbmV3IHNpbSwgc28gY3JlYXRlIG9uZVxuICAgIGxvZy5pbmZvKCdVc2luZyBkZXNpcmVkIGNhcHMgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvcicpO1xuICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMuY3JlYXRlU2ltKCk7XG4gICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gIH1cblxuICBhc3luYyBzdGFydFNpbSAoKSB7XG4gICAgY29uc3QgcnVuT3B0cyA9IHtcbiAgICAgIHNjYWxlRmFjdG9yOiB0aGlzLm9wdHMuc2NhbGVGYWN0b3IsXG4gICAgICBjb25uZWN0SGFyZHdhcmVLZXlib2FyZDogISF0aGlzLm9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQsXG4gICAgICBwYXN0ZWJvYXJkQXV0b21hdGljU3luYzogdGhpcy5vcHRzLnNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jID8/ICdvZmYnLFxuICAgICAgaXNIZWFkbGVzczogISF0aGlzLm9wdHMuaXNIZWFkbGVzcyxcbiAgICAgIHRyYWNlUG9pbnRlcjogdGhpcy5vcHRzLnNpbXVsYXRvclRyYWNlUG9pbnRlcixcbiAgICAgIGRldmljZVByZWZlcmVuY2VzOiB7fSxcbiAgICB9O1xuXG4gICAgLy8gYWRkIHRoZSB3aW5kb3cgY2VudGVyLCBpZiBpdCBpcyBzcGVjaWZpZWRcbiAgICBpZiAodGhpcy5vcHRzLlNpbXVsYXRvcldpbmRvd0NlbnRlcikge1xuICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dDZW50ZXIgPSB0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyO1xuICAgIH1cblxuICAgIGlmIChfLmlzSW50ZWdlcih0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQpKSB7XG4gICAgICBydW5PcHRzLnN0YXJ0dXBUaW1lb3V0ID0gdGhpcy5vcHRzLnNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0O1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgdG8gd29ya2Fyb3VuZCBYQ1Rlc3QgYnVnIGFib3V0IGNoYW5naW5nIFNpbXVsYXRvclxuICAgIC8vIG9yaWVudGF0aW9uIGlzIG5vdCBzeW5jaHJvbml6ZWQgdG8gdGhlIGFjdHVhbCB3aW5kb3cgb3JpZW50YXRpb25cbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IF8uaXNTdHJpbmcodGhpcy5vcHRzLm9yaWVudGF0aW9uKSAmJiB0aGlzLm9wdHMub3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gICAgICBjYXNlICdMQU5EU0NBUEUnOlxuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uID0gJ0xhbmRzY2FwZUxlZnQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSA5MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdQT1JUUkFJVCc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnUG9ydHJhaXQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJ1bihydW5PcHRzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNpbSAoKSB7XG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IHRydWU7XG5cbiAgICAvLyBHZXQgcGxhdGZvcm0gbmFtZSBmcm9tIGNvbnN0IHNpbmNlIGl0IG11c3QgYmUgY2FzZSBzZW5zaXRpdmUgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvclxuICAgIGNvbnN0IHBsYXRmb3JtTmFtZSA9IHRoaXMuaXNUdk9TKCkgPyBQTEFURk9STV9OQU1FX1RWT1MgOiBQTEFURk9STV9OQU1FX0lPUztcblxuICAgIC8vIGNyZWF0ZSBzaW0gZm9yIGNhcHNcbiAgICBjb25zdCBzaW0gPSBhd2FpdCBjcmVhdGVTaW0odGhpcy5vcHRzLCBwbGF0Zm9ybU5hbWUpO1xuICAgIGxvZy5pbmZvKGBDcmVhdGVkIHNpbXVsYXRvciB3aXRoIHVkaWQgJyR7c2ltLnVkaWR9Jy5gKTtcblxuICAgIHJldHVybiBzaW07XG4gIH1cblxuICBhc3luYyBsYXVuY2hBcHAgKCkge1xuICAgIGNvbnN0IEFQUF9MQVVOQ0hfVElNRU9VVCA9IDIwICogMTAwMDtcblxuICAgIHRoaXMubG9nRXZlbnQoJ2FwcExhdW5jaEF0dGVtcHRlZCcpO1xuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2ltY3RsLmxhdW5jaEFwcCh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuXG4gICAgbGV0IGNoZWNrU3RhdHVzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICBsZXQgY3VycmVudEFwcCA9IHJlc3BvbnNlLmN1cnJlbnRBcHAuYnVuZGxlSUQ7XG4gICAgICBpZiAoY3VycmVudEFwcCAhPT0gdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm9wdHMuYnVuZGxlSWR9IG5vdCBpbiBmb3JlZ3JvdW5kLiAke2N1cnJlbnRBcHB9IGlzIGluIGZvcmVncm91bmRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbG9nLmluZm8oYFdhaXRpbmcgZm9yICcke3RoaXMub3B0cy5idW5kbGVJZH0nIHRvIGJlIGluIGZvcmVncm91bmRgKTtcbiAgICBsZXQgcmV0cmllcyA9IHBhcnNlSW50KEFQUF9MQVVOQ0hfVElNRU9VVCAvIDIwMCwgMTApO1xuICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMjAwLCBjaGVja1N0YXR1cyk7XG4gICAgbG9nLmluZm8oYCR7dGhpcy5vcHRzLmJ1bmRsZUlkfSBpcyBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoZWQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2RhU2Vzc2lvbiAoYnVuZGxlSWQsIHByb2Nlc3NBcmd1bWVudHMpIHtcbiAgICBjb25zdCBhcmdzID0gcHJvY2Vzc0FyZ3VtZW50cyA/IChwcm9jZXNzQXJndW1lbnRzLmFyZ3MgfHwgW10pIDogW107XG4gICAgaWYgKCFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5hcmdzIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShhcmdzKX0gaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICBjb25zdCBlbnYgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuZW52IHx8IHt9KSA6IHt9O1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGVudikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5lbnYgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhIGRpY3Rpb25hcnkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShlbnYpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxhbmd1YWdlKSkge1xuICAgICAgYXJncy5wdXNoKCctQXBwbGVMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICAgIGFyZ3MucHVzaCgnLU5TTGFuZ3VhZ2VzJywgYCgke3RoaXMub3B0cy5sYW5ndWFnZX0pYCk7XG4gICAgfVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5sb2NhbGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxvY2FsZScsIHRoaXMub3B0cy5sb2NhbGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCkpIHtcbiAgICAgICAgdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoKSkge1xuICAgICAgICB0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2ggPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3ZGFDYXBzID0ge1xuICAgICAgYnVuZGxlSWQ6IHRoaXMub3B0cy5hdXRvTGF1bmNoID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGJ1bmRsZUlkLFxuICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgICAgZW52aXJvbm1lbnQ6IGVudixcbiAgICAgIGV2ZW50bG9vcElkbGVEZWxheVNlYzogdGhpcy5vcHRzLndkYUV2ZW50bG9vcElkbGVEZWxheSA/PyAwLFxuICAgICAgc2hvdWxkV2FpdEZvclF1aWVzY2VuY2U6IHRoaXMub3B0cy53YWl0Rm9yUXVpZXNjZW5jZSA/PyB0cnVlLFxuICAgICAgc2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uOiB0aGlzLm9wdHMuc2ltcGxlSXNWaXNpYmxlQ2hlY2sgPz8gZmFsc2UsXG4gICAgICBtYXhUeXBpbmdGcmVxdWVuY3k6IHRoaXMub3B0cy5tYXhUeXBpbmdGcmVxdWVuY3kgPz8gNjAsXG4gICAgICBzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlcjogdGhpcy5vcHRzLnNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyID8/IHRydWUsXG4gICAgICB3YWl0Rm9ySWRsZVRpbWVvdXQ6IHRoaXMub3B0cy53YWl0Rm9ySWRsZVRpbWVvdXQsXG4gICAgICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiB0aGlzLm9wdHMuc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIGVsZW1lbnRSZXNwb25zZUZpZWxkczogdGhpcy5vcHRzLmVsZW1lbnRSZXNwb25zZUZpZWxkcyxcbiAgICAgIGRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90czogdGhpcy5vcHRzLmRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyxcbiAgICAgIHNob3VsZFRlcm1pbmF0ZUFwcDogdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA/PyB0cnVlLFxuICAgICAgZm9yY2VBcHBMYXVuY2g6IHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCA/PyB0cnVlLFxuICAgICAgdXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5OiB0aGlzLm9wdHMudXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5ID8/IHRydWUsXG4gICAgICBmb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZTogdGhpcy5vcHRzLmZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlXG4gICAgICAgID8/ICh0aGlzLm9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQgPT09IHRydWUgPyBmYWxzZSA6IHRydWUpLFxuICAgIH07XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvQWNjZXB0QWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdhY2NlcHQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmF1dG9EaXNtaXNzQWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdkaXNtaXNzJztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbd2RhQ2Fwc10sXG4gICAgICAgIGFsd2F5c01hdGNoOiB7fSxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIFByb3h5IG1ldGhvZHMgZnJvbSBCYXNlRHJpdmVyXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgpIHtcbiAgICBpZiAodGhpcy5pc1dlYnZpZXcoKSkge1xuICAgICAgcmV0dXJuIE5PX1BST1hZX1dFQl9MSVNUO1xuICAgIH1cbiAgICByZXR1cm4gTk9fUFJPWFlfTkFUSVZFX0xJU1Q7XG4gIH1cblxuICBjYW5Qcm94eSAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc1NhZmFyaSAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zYWZhcmk7XG4gIH1cblxuICBpc1JlYWxEZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLm9wdHMucmVhbERldmljZTtcbiAgfVxuXG4gIGlzU2ltdWxhdG9yICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNUdk9TICgpIHtcbiAgICByZXR1cm4gXy50b0xvd2VyKHRoaXMub3B0cy5wbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbiAgfVxuXG4gIGlzV2VidmlldyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLmlzV2ViQ29udGV4dCgpO1xuICB9XG5cbiAgdmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kgKHN0cmF0ZWd5KSB7XG4gICAgc3VwZXIudmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3koc3RyYXRlZ3ksIHRoaXMuaXNXZWJDb250ZXh0KCkpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBvbmUgb2YgYGFwcGAgb3IgYGJ1bmRsZUlkYFxuICAgIGlmIChfLnRvTG93ZXIoY2Fwcy5icm93c2VyTmFtZSkgIT09ICdzYWZhcmknICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5idW5kbGVJZCkge1xuICAgICAgbG9nLmluZm8oJ1RoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBpbmNsdWRlIG5laXRoZXIgYW4gYXBwIG5vciBhIGJ1bmRsZUlkLiAnICtcbiAgICAgICAgJ1dlYkRyaXZlckFnZW50IHdpbGwgYmUgc3RhcnRlZCB3aXRob3V0IHRoZSBkZWZhdWx0IGFwcCcpO1xuICAgIH1cblxuICAgIGlmICghdXRpbC5jb2VyY2VWZXJzaW9uKGNhcHMucGxhdGZvcm1WZXJzaW9uLCBmYWxzZSkpIHtcbiAgICAgIGxvZy53YXJuKGAncGxhdGZvcm1WZXJzaW9uJyBjYXBhYmlsaXR5ICgnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nKSBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGBDb25zaWRlciBmaXhpbmcgaXQgb3IgYmUgcmVhZHkgdG8gZXhwZXJpZW5jZSBhbiBpbmNvbnNpc3RlbnQgZHJpdmVyIGJlaGF2aW9yLmApO1xuICAgIH1cblxuICAgIGxldCB2ZXJpZnlQcm9jZXNzQXJndW1lbnQgPSAocHJvY2Vzc0FyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3Qge2FyZ3MsIGVudn0gPSBwcm9jZXNzQXJndW1lbnRzO1xuICAgICAgaWYgKCFfLmlzTmlsKGFyZ3MpICYmICFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ3Byb2Nlc3NBcmd1bWVudHMuYXJncyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc05pbChlbnYpICYmICFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygncHJvY2Vzc0FyZ3VtZW50cy5lbnYgbXVzdCBiZSBhbiBvYmplY3QgPGtleSx2YWx1ZT4gcGFpciB7YTpiLCBjOmR9Jyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGBwcm9jZXNzQXJndW1lbnRzYCBzaG91bGQgYmUgSlNPTiBzdHJpbmcgb3IgYW4gb2JqZWN0IHdpdGggYXJndW1lbnRzIGFuZC8gZW52aXJvbm1lbnQgZGV0YWlsc1xuICAgIGlmIChjYXBzLnByb2Nlc3NBcmd1bWVudHMpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyB0cnkgdG8gcGFyc2UgdGhlIHN0cmluZyBhcyBKU09OXG4gICAgICAgICAgY2Fwcy5wcm9jZXNzQXJndW1lbnRzID0gSlNPTi5wYXJzZShjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICAgIHZlcmlmeVByb2Nlc3NBcmd1bWVudChjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgcHJvY2Vzc0FyZ3VtZW50cyBtdXN0IGJlIGEgSlNPTiBmb3JtYXQgb3IgYW4gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICAgIGBCb3RoIGVudmlyb25tZW50IGFuZCBhcmd1bWVudCBjYW4gYmUgbnVsbC4gRXJyb3I6ICR7ZXJyfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChjYXBzLnByb2Nlc3NBcmd1bWVudHMpKSB7XG4gICAgICAgIHZlcmlmeVByb2Nlc3NBcmd1bWVudChjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBvciBhIHN0cmluZyBKU09OIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoZXJlIGlzIG5vIHBvaW50IGluIGhhdmluZyBga2V5Y2hhaW5QYXRoYCB3aXRob3V0IGBrZXljaGFpblBhc3N3b3JkYFxuICAgIGlmICgoY2Fwcy5rZXljaGFpblBhdGggJiYgIWNhcHMua2V5Y2hhaW5QYXNzd29yZCkgfHwgKCFjYXBzLmtleWNoYWluUGF0aCAmJiBjYXBzLmtleWNoYWluUGFzc3dvcmQpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgSWYgJ2tleWNoYWluUGF0aCcgaXMgc2V0LCAna2V5Y2hhaW5QYXNzd29yZCcgbXVzdCBhbHNvIGJlIHNldCAoYW5kIHZpY2UgdmVyc2EpLmApO1xuICAgIH1cblxuICAgIC8vIGByZXNldE9uU2Vzc2lvblN0YXJ0T25seWAgc2hvdWxkIGJlIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkgPSAhdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkpIHx8IHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seTtcbiAgICB0aGlzLm9wdHMudXNlTmV3V0RBID0gdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMudXNlTmV3V0RBKSA/IHRoaXMub3B0cy51c2VOZXdXREEgOiBmYWxzZTtcblxuICAgIGlmIChjYXBzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgY2Fwcy5jb21tYW5kVGltZW91dHMgPSBub3JtYWxpemVDb21tYW5kVGltZW91dHMoY2Fwcy5jb21tYW5kVGltZW91dHMpO1xuICAgIH1cblxuICAgIGlmIChfLmlzU3RyaW5nKGNhcHMud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICBjb25zdCB7cHJvdG9jb2wsIGhvc3R9ID0gdXJsLnBhcnNlKGNhcHMud2ViRHJpdmVyQWdlbnRVcmwpO1xuICAgICAgaWYgKF8uaXNFbXB0eShwcm90b2NvbCkgfHwgXy5pc0VtcHR5KGhvc3QpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnd2ViRHJpdmVyQWdlbnRVcmwnIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhIHZhbGlkIFdlYkRyaXZlckFnZW50IHNlcnZlciBVUkwuIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJyR7Y2Fwcy53ZWJEcml2ZXJBZ2VudFVybH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5icm93c2VyTmFtZSkge1xuICAgICAgaWYgKGNhcHMuYnVuZGxlSWQpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdicm93c2VyTmFtZScgY2Fubm90IGJlIHNldCB0b2dldGhlciB3aXRoICdidW5kbGVJZCcgY2FwYWJpbGl0eWApO1xuICAgICAgfVxuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXNcbiAgICAgIC8vIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgICBsb2cud2FybihgVGhlIGNhcGFiaWxpdGllcyBzaG91bGQgZ2VuZXJhbGx5IG5vdCBpbmNsdWRlIGJvdGggYW4gJ2FwcCcgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLnBlcm1pc3Npb25zKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybXNdIG9mIF8udG9QYWlycyhKU09OLnBhcnNlKGNhcHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhidW5kbGVJZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7SlNPTi5zdHJpbmdpZnkoYnVuZGxlSWQpfScgbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChwZXJtcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7SlNPTi5zdHJpbmdpZnkocGVybXMpfScgbXVzdCBiZSBhIEpTT04gb2JqZWN0YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnJHtjYXBzLnBlcm1pc3Npb25zfScgaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBvYmplY3Qgd2l0aCBmb3JtYXQgYCArXG4gICAgICAgICAgYHtcIjxidW5kbGVJZDE+XCI6IHtcIjxzZXJ2aWNlTmFtZTE+XCI6IFwiPHNlcnZpY2VTdGF0dXMxPlwiLCAuLi59LCAuLi59LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGxhdGZvcm1WZXJzaW9uICYmICF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdwbGF0Zm9ybVZlcnNpb24nIG11c3QgYmUgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGAnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIGdpdmVuIGluc3RlYWQuYCk7XG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgaXMgYW4gYXJyYXksIEpTT04gYXJyYXksIG9yIHN0cmluZ1xuICAgIGlmIChjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzKSB7XG4gICAgICBjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpO1xuICAgIH1cblxuICAgIC8vIGZpbmFsbHksIHJldHVybiB0cnVlIHNpbmNlIHRoZSBzdXBlcmNsYXNzIGNoZWNrIHBhc3NlZCwgYXMgZGlkIHRoaXNcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxBVVQgKCkge1xuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgIGlzU2ltdWxhdG9yOiB0aGlzLmlzU2ltdWxhdG9yKCksXG4gICAgICBpc1R2T1M6IHRoaXMuaXNUdk9TKCksXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvUmVhbERldmljZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYnVuZGxlSWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCxcbiAgICAgICAgc3RyYXRlZ3k6IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3ksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5idW5kbGVJZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgbmV3U2ltdWxhdG9yOiB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RhbGxPdGhlckFwcHModGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmlvc0luc3RhbGxQYXVzZSkpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy82ODg5XG4gICAgICBsZXQgcGF1c2UgPSBwYXJzZUludCh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlLCAxMCk7XG4gICAgICBsb2cuZGVidWcoYGlvc0luc3RhbGxQYXVzZSBzZXQuIFBhdXNpbmcgJHtwYXVzZX0gbXMgYmVmb3JlIGNvbnRpbnVpbmdgKTtcbiAgICAgIGF3YWl0IEIuZGVsYXkocGF1c2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxPdGhlckFwcHMgKG90aGVyQXBwcykge1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBsb2cud2FybignQ2FwYWJpbGl0eSBvdGhlckFwcHMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFNpbXVsYXRvcnMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGFwcHNMaXN0O1xuICAgIHRyeSB7XG4gICAgICBhcHBzTGlzdCA9IHRoaXMuaGVscGVycy5wYXJzZUNhcHNBcnJheShvdGhlckFwcHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShhcHBzTGlzdCkpIHtcbiAgICAgIGxvZy5pbmZvKGBHb3QgemVybyBhcHBzIGZyb20gJ290aGVyQXBwcycgY2FwYWJpbGl0eSB2YWx1ZS4gRG9pbmcgbm90aGluZ2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcFBhdGhzID0gYXdhaXQgQi5hbGwoYXBwc0xpc3QubWFwKFxuICAgICAgKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsICcuYXBwJylcbiAgICApKTtcbiAgICBmb3IgKGNvbnN0IG90aGVyQXBwIG9mIGFwcFBhdGhzKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSwgb3RoZXJBcHAsIHVuZGVmaW5lZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgbmV3U2ltdWxhdG9yOiB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZWR1Y2VNb3Rpb24gYXMgJ2lzRW5hYmxlZCcgb25seSB3aGVuIHRoZSBjYXBhYmlsaXRpZXMgaGFzICdyZWR1Y2VNb3Rpb24nXG4gICAqIFRoZSBjYWxsIGlzIGlnbm9yZWQgZm9yIHJlYWwgZGV2aWNlcy5cbiAgICogQHBhcmFtIHs/Ym9vbGVhbn0gaXNFbmFibGVkIFdldGhlciBlbmFibGUgcmVkdWNlTW90aW9uXG4gICAqL1xuICBhc3luYyBzZXRSZWR1Y2VNb3Rpb24gKGlzRW5hYmxlZCkge1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpIHx8ICFfLmlzQm9vbGVhbihpc0VuYWJsZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmluZm8oYFNldHRpbmcgcmVkdWNlTW90aW9uIHRvICR7aXNFbmFibGVkfWApO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe3JlZHVjZU1vdGlvbjogaXNFbmFibGVkfSk7XG4gIH1cblxuICBhc3luYyBzZXRJbml0aWFsT3JpZW50YXRpb24gKG9yaWVudGF0aW9uKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9yaWVudGF0aW9uKSkge1xuICAgICAgbG9nLmluZm8oJ1NraXBwaW5nIHNldHRpbmcgb2YgdGhlIGluaXRpYWwgZGlzcGxheSBvcmllbnRhdGlvbi4gJyArXG4gICAgICAgICdTZXQgdGhlIFwib3JpZW50YXRpb25cIiBjYXBhYmlsaXR5IHRvIGVpdGhlciBcIkxBTkRTQ0FQRVwiIG9yIFwiUE9SVFJBSVRcIiwgaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9yaWVudGF0aW9uID0gb3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBpZiAoIV8uaW5jbHVkZXMoWydMQU5EU0NBUEUnLCAnUE9SVFJBSVQnXSwgb3JpZW50YXRpb24pKSB7XG4gICAgICBsb2cuZGVidWcoYFVuYWJsZSB0byBzZXQgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHtvcmllbnRhdGlvbn0nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9vcmllbnRhdGlvbicsICdQT1NUJywge29yaWVudGF0aW9ufSk7XG4gICAgICB0aGlzLm9wdHMuY3VyT3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gZmFpbGVkIHdpdGg6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgX2dldENvbW1hbmRUaW1lb3V0IChjbWROYW1lKSB7XG4gICAgaWYgKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMpIHtcbiAgICAgIGlmIChjbWROYW1lICYmIF8uaGFzKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMsIGNtZE5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzW2NtZE5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbREVGQVVMVF9USU1FT1VUX0tFWV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZXNzaW9uIGNhcGFiaWxpdGllcyBtZXJnZWQgd2l0aCB3aGF0IFdEQSByZXBvcnRzXG4gICAqIFRoaXMgaXMgYSBsaWJyYXJ5IGNvbW1hbmQgYnV0IG5lZWRzIHRvIGNhbGwgJ3N1cGVyJyBzbyBjYW4ndCBiZSBvblxuICAgKiBhIGhlbHBlciBvYmplY3RcbiAgICovXG4gIGFzeW5jIGdldFNlc3Npb24gKCkge1xuICAgIC8vIGNhbGwgc3VwZXIgdG8gZ2V0IGV2ZW50IHRpbWluZ3MsIGV0Yy4uLlxuICAgIGNvbnN0IGRyaXZlclNlc3Npb24gPSBhd2FpdCBzdXBlci5nZXRTZXNzaW9uKCk7XG4gICAgaWYgKCF0aGlzLndkYUNhcHMpIHtcbiAgICAgIHRoaXMud2RhQ2FwcyA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvJywgJ0dFVCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEdldERldmljZUNhcHMgPSBfLmlzQm9vbGVhbih0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvKVxuICAgICAgPyB0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvXG4gICAgICA6IHRydWU7IC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBpZiAoc2hvdWxkR2V0RGV2aWNlQ2FwcyAmJiAhdGhpcy5kZXZpY2VDYXBzKSB7XG4gICAgICBjb25zdCB7c3RhdHVzQmFyU2l6ZSwgc2NhbGV9ID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5JbmZvKCk7XG4gICAgICB0aGlzLmRldmljZUNhcHMgPSB7XG4gICAgICAgIHBpeGVsUmF0aW86IHNjYWxlLFxuICAgICAgICBzdGF0QmFySGVpZ2h0OiBzdGF0dXNCYXJTaXplLmhlaWdodCxcbiAgICAgICAgdmlld3BvcnRSZWN0OiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0UmVjdCgpLFxuICAgICAgfTtcbiAgICB9XG4gICAgbG9nLmluZm8oJ01lcmdpbmcgV0RBIGNhcHMgb3ZlciBBcHBpdW0gY2FwcyBmb3Igc2Vzc2lvbiBkZXRhaWwgcmVzcG9uc2UnKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7dWRpZDogdGhpcy5vcHRzLnVkaWR9LCBkcml2ZXJTZXNzaW9uLFxuICAgICAgdGhpcy53ZGFDYXBzLmNhcGFiaWxpdGllcywgdGhpcy5kZXZpY2VDYXBzIHx8IHt9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgIC8vIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHJlc2V0IGhhcHBlbnMgZXZlbiBpZiBub1Jlc2V0IGlzIHNldCB0byB0cnVlXG4gICAgICBsZXQgb3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG4gICAgICBvcHRzLm5vUmVzZXQgPSBmYWxzZTtcbiAgICAgIG9wdHMuZnVsbFJlc2V0ID0gZmFsc2U7XG4gICAgICBjb25zdCBzaHV0ZG93bkhhbmRsZXIgPSB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd247XG4gICAgICB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24gPSAoKSA9PiB7fTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUmVzZXQob3B0cyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24gPSBzaHV0ZG93bkhhbmRsZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLnJlc2V0KCk7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihYQ1VJVGVzdERyaXZlci5wcm90b3R5cGUsIGNvbW1hbmRzKTtcblxuZXhwb3J0IGRlZmF1bHQgWENVSVRlc3REcml2ZXI7XG5leHBvcnQgeyBYQ1VJVGVzdERyaXZlciB9O1xuIl0sImZpbGUiOiJsaWIvZHJpdmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
|
1334
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9kcml2ZXIuanMiXSwibmFtZXMiOlsiU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FIiwiQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCIsImRlZmF1bHRTZXJ2ZXJDYXBzIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwiYnJvd3Nlck5hbWUiLCJwbGF0Zm9ybSIsImphdmFzY3JpcHRFbmFibGVkIiwiZGF0YWJhc2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwibmV0d29ya0Nvbm5lY3Rpb25FbmFibGVkIiwiU0FGQVJJX0JVTkRMRV9JRCIsIldEQV9TSU1fU1RBUlRVUF9SRVRSSUVTIiwiV0RBX1JFQUxfREVWX1NUQVJUVVBfUkVUUklFUyIsIldEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwiLCJXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTCIsIkRFRkFVTFRfU0VUVElOR1MiLCJuYXRpdmVXZWJUYXAiLCJuYXRpdmVXZWJUYXBTdHJpY3QiLCJ1c2VKU09OU291cmNlIiwic2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyIsImVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMiLCJtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5IiwibWpwZWdTZXJ2ZXJGcmFtZXJhdGUiLCJzY3JlZW5zaG90UXVhbGl0eSIsIm1qcGVnU2NhbGluZ0ZhY3RvciIsInJlZHVjZU1vdGlvbiIsIlNIQVJFRF9SRVNPVVJDRVNfR1VBUkQiLCJBc3luY0xvY2siLCJXRUJfRUxFTUVOVFNfQ0FDSEVfU0laRSIsIk5PX1BST1hZX05BVElWRV9MSVNUIiwiTk9fUFJPWFlfV0VCX0xJU1QiLCJjb25jYXQiLCJNRU1PSVpFRF9GVU5DVElPTlMiLCJYQ1VJVGVzdERyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJsb2NhdG9yU3RyYXRlZ2llcyIsIndlYkxvY2F0b3JTdHJhdGVnaWVzIiwicmVzZXRJb3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJsb2dzIiwiZm4iLCJfIiwibWVtb2l6ZSIsImtleSIsInZhbHVlIiwicHJveHlDb21tYW5kIiwid2RhIiwiZGV2aWNlIiwiandwUHJveHlBY3RpdmUiLCJwcm94eVJlcVJlcyIsImp3cFByb3h5QXZvaWQiLCJzYWZhcmkiLCJjYWNoZWRXZGFTdGF0dXMiLCJjdXJXZWJGcmFtZXMiLCJfY3VycmVudFVybCIsImN1ckNvbnRleHQiLCJ4Y29kZVZlcnNpb24iLCJjb250ZXh0cyIsImltcGxpY2l0V2FpdE1zIiwiYXN5bmNsaWJXYWl0TXMiLCJwYWdlTG9hZE1zIiwibGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0IiwicmVtb3RlIiwid2ViRWxlbWVudHNDYWNoZSIsIkxSVSIsIm1heCIsImRyaXZlckRhdGEiLCJnZXRTdGF0dXMiLCJkcml2ZXJJbmZvIiwic3RhdHVzIiwiYnVpbGQiLCJ2ZXJzaW9uIiwibWVyZ2VDbGlBcmdzVG9PcHRzIiwiZGlkTWVyZ2UiLCJPYmplY3QiLCJlbnRyaWVzIiwiY2xpQXJncyIsImhhcyIsImxvZyIsImluZm8iLCJjcmVhdGVTZXNzaW9uIiwiYXJncyIsImxpZmVjeWNsZURhdGEiLCJzZXNzaW9uSWQiLCJjYXBzIiwidmFsaWRhdGVEZXNpcmVkQ2FwcyIsInN0YXJ0IiwiYXNzaWduIiwidWRpZCIsInVwZGF0ZVNldHRpbmdzIiwid2RhU2V0dGluZ3MiLCJtanBlZ1NjcmVlbnNob3RVcmwiLCJtanBlZ1N0cmVhbSIsIm1qcGVnIiwiTUpwZWdTdHJlYW0iLCJlIiwiZXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVsZXRlU2Vzc2lvbiIsIm5vUmVzZXQiLCJmdWxsUmVzZXQiLCJpb3NTZGtWZXJzaW9uIiwicmVhbERldmljZSIsImRldGVybWluZURldmljZSIsInNpbXVsYXRvckRldmljZXNTZXRQYXRoIiwiZGV2aWNlc1NldFBhdGgiLCJwbGF0Zm9ybVZlcnNpb24iLCJnZXRQbGF0Zm9ybVZlcnNpb24iLCJub3JtYWxpemVkVmVyc2lvbiIsInV0aWwiLCJjb21wYXJlVmVyc2lvbnMiLCJFcnJvciIsImlzRW1wdHkiLCJ3ZWJEcml2ZXJBZ2VudFVybCIsImxvZ0V2ZW50IiwidG9Mb3dlciIsImFwcCIsInVuZGVmaW5lZCIsInByb2Nlc3NBcmd1bWVudHMiLCJidW5kbGVJZCIsInNhZmFyaUluaXRpYWxVcmwiLCJpc1JlYWxEZXZpY2UiLCJhZGRyZXNzIiwicG9ydCIsImNvbmZpZ3VyZUFwcCIsInJ1blJlc2V0IiwiV2ViRHJpdmVyQWdlbnQiLCJyZXRyaWV2ZURlcml2ZWREYXRhUGF0aCIsImNhdGNoIiwiZGVidWciLCJtZW1vaXplZExvZ0luZm8iLCJsb2dJbmZvIiwic3RhcnRMb2dDYXB0dXJlIiwic2tpcExvZ0NhcHR1cmUiLCJyZXN1bHQiLCJpc0xvZ0NhcHR1cmVTdGFydGVkIiwiaXNTaW11bGF0b3IiLCJzaHV0ZG93bk90aGVyU2ltdWxhdG9ycyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiaXNTYWZhcmkiLCJzYWZhcmlHbG9iYWxQcmVmZXJlbmNlcyIsInVwZGF0ZVNhZmFyaUdsb2JhbFNldHRpbmdzIiwibG9jYWxDb25maWciLCJzaW0iLCJjdXN0b21TU0xDZXJ0IiwiY2VydEhlYWQiLCJ0cnVuY2F0ZSIsImxlbmd0aCIsInN0YXJ0U2ltIiwibGF1bmNoV2l0aElEQiIsImlkYiIsIklEQiIsImNvbm5lY3QiLCJtZXNzYWdlIiwiUHlpZGV2aWNlIiwiaW5zdGFsbFByb2ZpbGUiLCJwYXlsb2FkIiwiaW5zdGFsbEFVVCIsImlzQXBwSW5zdGFsbGVkIiwiZXJyb3JBbmRUaHJvdyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbnNNYXBwaW5nIiwidG9QYWlycyIsInBhcnNlIiwic2V0UGVybWlzc2lvbnMiLCJ3YXJuIiwiY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkIiwiZW5hYmxlQ2FsZW5kYXJBY2Nlc3MiLCJkaXNhYmxlQ2FsZW5kYXJBY2Nlc3MiLCJzdGFydFdkYSIsInNldFJlZHVjZU1vdGlvbiIsInNldEluaXRpYWxPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIiwib3BlblVybCIsImF1dG9XZWJ2aWV3IiwibmF2VG9Jbml0aWFsV2VidmlldyIsInNldFVybCIsImhhc1ZhbHVlIiwiY2xlYW51cE9ic29sZXRlUHJvY2Vzc2VzIiwidXNlUG9ydEZvcndhcmRpbmciLCJ3ZGFCYXNlVXJsIiwiREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkiLCJyZXF1ZXN0Q29ubmVjdGlvbiIsInVybCIsImRldmljZVBvcnQiLCJ3ZGFSZW1vdGVQb3J0Iiwic3luY2hyb25pemF0aW9uS2V5IiwibmFtZSIsInVzZVhjdGVzdHJ1bkZpbGUiLCJpc1NvdXJjZUZyZXNoIiwiZGVyaXZlZERhdGFQYXRoIiwicGF0aCIsIm5vcm1hbGl6ZSIsImlzQnVzeSIsImJvb3RzdHJhcFBhdGgiLCJhY3F1aXJlIiwidXNlTmV3V0RBIiwicXVpdEFuZFVuaW5zdGFsbCIsInNldHVwQ2FjaGluZyIsIm1zZyIsInJlc3VsdEJ1bmRsZVBhdGgiLCJzdGFydHVwUmV0cmllcyIsIndkYVN0YXJ0dXBSZXRyaWVzIiwic3RhcnR1cFJldHJ5SW50ZXJ2YWwiLCJ3ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCIsInJldHJ5Q291bnQiLCJyZXRyaWVzIiwibWFqb3IiLCJsYXVuY2giLCJlcnIiLCJlcnJvck1zZyIsIm9yaWdpbmFsU3RhY2t0cmFjZSIsInN0YXJ0V2RhU2Vzc2lvbiIsInN0YWNrIiwiY2xlYXJTeXN0ZW1GaWxlcyIsImZ1bGx5U3RhcnRlZCIsInNlcnZlciIsInJlY29yZGVyIiwiY29tcGFjdCIsIl9yZWNlbnRTY3JlZW5SZWNvcmRlciIsIl9hdWRpb1JlY29yZGVyIiwiaW50ZXJydXB0IiwiY2xlYW51cCIsIl9wZXJmUmVjb3JkZXJzIiwiQiIsImFsbCIsIm1hcCIsIngiLCJzdG9wIiwic3RvcFJlbW90ZSIsInJlc2V0T25TZXNzaW9uU3RhcnRPbmx5IiwiZW5mb3JjZVNpbXVsYXRvclNodXRkb3duIiwiY3JlYXRlU2ltIiwiZGVsZXRlIiwic2hvdWxkUmVzZXRMb2NhdGlvblNlcnZpdmNlIiwicmVzZXRMb2NhdGlvblNlcnZpY2UiLCJtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSIsImlnbm9yZSIsInN5c2xvZyIsInN0b3BDYXB0dXJlIiwiandwcm94eSIsInF1aXQiLCJyZWxlYXNlQ29ubmVjdGlvbiIsImV4ZWN1dGVDb21tYW5kIiwiY21kIiwicmVjZWl2ZUFzeW5jUmVzcG9uc2UiLCJhcHBJc1BhY2thZ2VPckJ1bmRsZSIsInRlc3QiLCJoZWxwZXJzIiwiZGV2aWNlTmFtZSIsInNldHVwVmVyc2lvbkNhcHMiLCJ0b0xvd2VyQ2FzZSIsImRldmljZVBsYXRmb3JtIiwiZGV2aWNlcyIsImpvaW4iLCJpbmNsdWRlcyIsImlnbiIsImVuZm9yY2VGcmVzaFNpbXVsYXRvckNyZWF0aW9uIiwicnVuT3B0cyIsInNjYWxlRmFjdG9yIiwiY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQiLCJwYXN0ZWJvYXJkQXV0b21hdGljU3luYyIsInNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jIiwiaXNIZWFkbGVzcyIsInRyYWNlUG9pbnRlciIsInNpbXVsYXRvclRyYWNlUG9pbnRlciIsImRldmljZVByZWZlcmVuY2VzIiwiU2ltdWxhdG9yV2luZG93Q2VudGVyIiwiaXNJbnRlZ2VyIiwic2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQiLCJzdGFydHVwVGltZW91dCIsImlzU3RyaW5nIiwidG9VcHBlckNhc2UiLCJTaW11bGF0b3JXaW5kb3dPcmllbnRhdGlvbiIsIlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUiLCJydW4iLCJwbGF0Zm9ybU5hbWUiLCJpc1R2T1MiLCJQTEFURk9STV9OQU1FX1RWT1MiLCJQTEFURk9STV9OQU1FX0lPUyIsImxhdW5jaEFwcCIsIkFQUF9MQVVOQ0hfVElNRU9VVCIsInNpbWN0bCIsImNoZWNrU3RhdHVzIiwicmVzcG9uc2UiLCJjdXJyZW50QXBwIiwiYnVuZGxlSUQiLCJwYXJzZUludCIsImlzQXJyYXkiLCJlbnYiLCJpc1BsYWluT2JqZWN0IiwibGFuZ3VhZ2UiLCJwdXNoIiwibG9jYWxlIiwiaXNOaWwiLCJzaG91bGRUZXJtaW5hdGVBcHAiLCJmb3JjZUFwcExhdW5jaCIsIndkYUNhcHMiLCJhdXRvTGF1bmNoIiwiYXJndW1lbnRzIiwiZW52aXJvbm1lbnQiLCJldmVudGxvb3BJZGxlRGVsYXlTZWMiLCJ3ZGFFdmVudGxvb3BJZGxlRGVsYXkiLCJzaG91bGRXYWl0Rm9yUXVpZXNjZW5jZSIsIndhaXRGb3JRdWllc2NlbmNlIiwic2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uIiwic2ltcGxlSXNWaXNpYmxlQ2hlY2siLCJtYXhUeXBpbmdGcmVxdWVuY3kiLCJzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlciIsIndhaXRGb3JJZGxlVGltZW91dCIsImVsZW1lbnRSZXNwb25zZUZpZWxkcyIsImRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyIsInVzZU5hdGl2ZUNhY2hpbmdTdHJhdGVneSIsImZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlIiwiYXV0b0FjY2VwdEFsZXJ0cyIsImRlZmF1bHRBbGVydEFjdGlvbiIsImF1dG9EaXNtaXNzQWxlcnRzIiwiY2FwYWJpbGl0aWVzIiwiZmlyc3RNYXRjaCIsImFsd2F5c01hdGNoIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImlzV2VidmlldyIsImNhblByb3h5IiwiaXNXZWJDb250ZXh0IiwidmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kiLCJzdHJhdGVneSIsImNvZXJjZVZlcnNpb24iLCJ2ZXJpZnlQcm9jZXNzQXJndW1lbnQiLCJrZXljaGFpblBhdGgiLCJrZXljaGFpblBhc3N3b3JkIiwiY29tbWFuZFRpbWVvdXRzIiwicHJvdG9jb2wiLCJob3N0IiwicGVybXMiLCJhZGRpdGlvbmFsV2Vidmlld0J1bmRsZUlkcyIsInBhcnNlQ2Fwc0FycmF5IiwidGltZW91dCIsImFwcFB1c2hUaW1lb3V0IiwiYXBwSW5zdGFsbFN0cmF0ZWd5IiwibmV3U2ltdWxhdG9yIiwib3RoZXJBcHBzIiwiaW5zdGFsbE90aGVyQXBwcyIsImlvc0luc3RhbGxQYXVzZSIsInBhdXNlIiwiZGVsYXkiLCJhcHBzTGlzdCIsImFwcFBhdGhzIiwib3RoZXJBcHAiLCJpc0VuYWJsZWQiLCJpc0Jvb2xlYW4iLCJjdXJPcmllbnRhdGlvbiIsIl9nZXRDb21tYW5kVGltZW91dCIsImNtZE5hbWUiLCJERUZBVUxUX1RJTUVPVVRfS0VZIiwiZ2V0U2Vzc2lvbiIsImRyaXZlclNlc3Npb24iLCJzaG91bGRHZXREZXZpY2VDYXBzIiwiaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvIiwiZGV2aWNlQ2FwcyIsInN0YXR1c0JhclNpemUiLCJzY2FsZSIsImdldFNjcmVlbkluZm8iLCJwaXhlbFJhdGlvIiwic3RhdEJhckhlaWdodCIsImhlaWdodCIsInZpZXdwb3J0UmVjdCIsImdldFZpZXdwb3J0UmVjdCIsInJlc2V0IiwiY2xvbmVEZWVwIiwic2h1dGRvd25IYW5kbGVyIiwicmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOztBQUNBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVFBOztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLHdCQUF3QixHQUFHLHFCQUFqQztBQUNBLE1BQU1DLDRCQUE0QixHQUFHLDhCQUFyQztBQUVBLE1BQU1DLGlCQUFpQixHQUFHO0FBQ3hCQyxFQUFBQSxpQkFBaUIsRUFBRSxLQURLO0FBRXhCQyxFQUFBQSxzQkFBc0IsRUFBRSxLQUZBO0FBR3hCQyxFQUFBQSxXQUFXLEVB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QUFDRGxTLG9CQUFJQyxJQUFKLENBQVMsK0RBQVQ7O0FBQ0EsV0FBT0wsTUFBTSxDQUFDYSxNQUFQLENBQWM7QUFBQ0MsTUFBQUEsSUFBSSxFQUFFLEtBQUszRCxJQUFMLENBQVUyRDtBQUFqQixLQUFkLEVBQXNDNlEsYUFBdEMsRUFDTCxLQUFLM0QsT0FBTCxDQUFhb0IsWUFEUixFQUNzQixLQUFLMEMsVUFBTCxJQUFtQixFQUR6QyxDQUFQO0FBRUQ7O0FBRVUsUUFBTFMsS0FBSyxHQUFJO0FBQ2IsUUFBSSxLQUFLcFYsSUFBTCxDQUFVdUUsT0FBZCxFQUF1QjtBQUVyQixVQUFJdkUsSUFBSSxHQUFHWSxnQkFBRXlVLFNBQUYsQ0FBWSxLQUFLclYsSUFBakIsQ0FBWDs7QUFDQUEsTUFBQUEsSUFBSSxDQUFDdUUsT0FBTCxHQUFlLEtBQWY7QUFDQXZFLE1BQUFBLElBQUksQ0FBQ3dFLFNBQUwsR0FBaUIsS0FBakI7QUFDQSxZQUFNOFEsZUFBZSxHQUFHLEtBQUtDLHlCQUE3Qjs7QUFDQSxXQUFLQSx5QkFBTCxHQUFpQyxNQUFNLENBQUUsQ0FBekM7O0FBQ0EsVUFBSTtBQUNGLGNBQU0sS0FBS3RQLFFBQUwsQ0FBY2pHLElBQWQsQ0FBTjtBQUNELE9BRkQsU0FFVTtBQUNSLGFBQUt1Vix5QkFBTCxHQUFpQ0QsZUFBakM7QUFDRDtBQUNGOztBQUNELFVBQU0sTUFBTUYsS0FBTixFQUFOO0FBQ0Q7O0FBbnFDcUM7OztBQXNxQ3hDdlMsTUFBTSxDQUFDYSxNQUFQLENBQWM3RCxjQUFjLENBQUMyVixTQUE3QixFQUF3Q0MsY0FBeEM7ZUFFZTVWLGMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRHJpdmVyLCBEZXZpY2VTZXR0aW5ncyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB1dGlsLCBtanBlZyB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgeyBXZWJEcml2ZXJBZ2VudCB9IGZyb20gJ2FwcGl1bS13ZWJkcml2ZXJhZ2VudCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7XG4gIGNyZWF0ZVNpbSwgZ2V0RXhpc3RpbmdTaW0sIHJ1blNpbXVsYXRvclJlc2V0LCBpbnN0YWxsVG9TaW11bGF0b3IsXG4gIHNodXRkb3duT3RoZXJTaW11bGF0b3JzLCBzaHV0ZG93blNpbXVsYXRvciwgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXNcbn0gZnJvbSAnLi9zaW11bGF0b3ItbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBnZXRTaW11bGF0b3IgfSBmcm9tICdhcHBpdW0taW9zLXNpbXVsYXRvcic7XG5pbXBvcnQge1xuICBkb2VzU3VwcG9ydEtleWNoYWluQXBpLCBpbnN0YWxsQ2VydGlmaWNhdGUsIGluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSxcbiAgaGFzQ2VydGlmaWNhdGVMZWdhY3ksXG59IGZyb20gJy4vY2VydC11dGlscyc7XG5pbXBvcnQgeyByZXRyeUludGVydmFsLCByZXRyeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHZlcmlmeUFwcGxpY2F0aW9uUGxhdGZvcm0sIGV4dHJhY3RCdW5kbGVJZCB9IGZyb20gJy4vYXBwLXV0aWxzJztcbmltcG9ydCB7IGRlc2lyZWRDYXBDb25zdHJhaW50cywgUExBVEZPUk1fTkFNRV9JT1MsIFBMQVRGT1JNX05BTUVfVFZPUyB9IGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCB7XG4gIGRldGVjdFVkaWQsIGdldEFuZENoZWNrWGNvZGVWZXJzaW9uLCBnZXRBbmRDaGVja0lvc1Nka1ZlcnNpb24sXG4gIGNoZWNrQXBwUHJlc2VudCwgZ2V0RHJpdmVySW5mbyxcbiAgY2xlYXJTeXN0ZW1GaWxlcywgdHJhbnNsYXRlRGV2aWNlTmFtZSwgbm9ybWFsaXplQ29tbWFuZFRpbWVvdXRzLFxuICBERUZBVUxUX1RJTUVPVVRfS0VZLCBtYXJrU3lzdGVtRmlsZXNGb3JDbGVhbnVwLFxuICBwcmludFVzZXIsIHJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyxcbiAgbm9ybWFsaXplUGxhdGZvcm1WZXJzaW9uLCBpc0xvY2FsSG9zdFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7XG4gIGdldENvbm5lY3RlZERldmljZXMsIHJ1blJlYWxEZXZpY2VSZXNldCwgaW5zdGFsbFRvUmVhbERldmljZSxcbiAgZ2V0UmVhbERldmljZU9ialxufSBmcm9tICcuL3JlYWwtZGV2aWNlLW1hbmFnZW1lbnQnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IElEQiBmcm9tICdhcHBpdW0taWRiJztcbmltcG9ydCBERVZJQ0VfQ09OTkVDVElPTlNfRkFDVE9SWSBmcm9tICcuL2RldmljZS1jb25uZWN0aW9ucy1mYWN0b3J5JztcbmltcG9ydCBQeWlkZXZpY2UgZnJvbSAnLi9weS1pb3MtZGV2aWNlLWNsaWVudCc7XG5cblxuY29uc3QgU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FID0gJ3NodXRkb3duX290aGVyX3NpbXMnO1xuY29uc3QgQ1VTVE9NSVpFX1JFU1VMVF9CVU5EUEVfUEFUSCA9ICdjdXN0b21pemVfcmVzdWx0X2J1bmRsZV9wYXRoJztcblxuY29uc3QgZGVmYXVsdFNlcnZlckNhcHMgPSB7XG4gIHdlYlN0b3JhZ2VFbmFibGVkOiBmYWxzZSxcbiAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gIGJyb3dzZXJOYW1lOiAnJyxcbiAgcGxhdGZvcm06ICdNQUMnLFxuICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgZGF0YWJhc2VFbmFibGVkOiBmYWxzZSxcbiAgdGFrZXNTY3JlZW5zaG90OiB0cnVlLFxuICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IGZhbHNlLFxufTtcbmNvbnN0IFNBRkFSSV9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLm1vYmlsZXNhZmFyaSc7XG5jb25zdCBXREFfU0lNX1NUQVJUVVBfUkVUUklFUyA9IDI7XG5jb25zdCBXREFfUkVBTF9ERVZfU1RBUlRVUF9SRVRSSUVTID0gMTtcbmNvbnN0IFdEQV9SRUFMX0RFVl9UVVRPUklBTF9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0teGN1aXRlc3QtZHJpdmVyL2Jsb2IvbWFzdGVyL2RvY3MvcmVhbC1kZXZpY2UtY29uZmlnLm1kJztcbmNvbnN0IFdEQV9TVEFSVFVQX1JFVFJZX0lOVEVSVkFMID0gMTAwMDA7XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTID0ge1xuICBuYXRpdmVXZWJUYXA6IGZhbHNlLFxuICBuYXRpdmVXZWJUYXBTdHJpY3Q6IGZhbHNlLFxuICB1c2VKU09OU291cmNlOiBmYWxzZSxcbiAgc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlczogdHJ1ZSxcbiAgZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlczogJ3R5cGUsbGFiZWwnLFxuICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vV2ViRHJpdmVyQWdlbnQvYmxvYi9tYXN0ZXIvV2ViRHJpdmVyQWdlbnRMaWIvVXRpbGl0aWVzL0ZCQ29uZmlndXJhdGlvbi5tIGZvciBmb2xsb3dpbmcgc2V0dGluZ3MnIHZhbHVlc1xuICBtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5OiAyNSxcbiAgbWpwZWdTZXJ2ZXJGcmFtZXJhdGU6IDEwLFxuICBzY3JlZW5zaG90UXVhbGl0eTogMSxcbiAgbWpwZWdTY2FsaW5nRmFjdG9yOiAxMDAsXG4gIC8vIHNldCBgcmVkdWNlTW90aW9uYCB0byBgbnVsbGAgc28gdGhhdCBpdCB3aWxsIGJlIHZlcmlmaWVkIGJ1dCBzdGlsbCBzZXQgZWl0aGVyIHRydWUvZmFsc2VcbiAgcmVkdWNlTW90aW9uOiBudWxsLFxufTtcbi8vIFRoaXMgbG9jayBhc3N1cmVzLCB0aGF0IGVhY2ggZHJpdmVyIHNlc3Npb24gZG9lcyBub3Rcbi8vIGFmZmVjdCBzaGFyZWQgcmVzb3VyY2VzIG9mIHRoZSBvdGhlciBwYXJhbGxlbCBzZXNzaW9uc1xuY29uc3QgU0hBUkVEX1JFU09VUkNFU19HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFdFQl9FTEVNRU5UU19DQUNIRV9TSVpFID0gNTAwO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuY29uc3QgTk9fUFJPWFlfTkFUSVZFX0xJU1QgPSBbXG4gIFsnREVMRVRFJywgL3dpbmRvdy9dLFxuICBbJ0dFVCcsIC9eXFwvc2Vzc2lvblxcL1teXFwvXSskL10sXG4gIFsnR0VUJywgL2FsZXJ0X3RleHQvXSxcbiAgWydHRVQnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnR0VUJywgL2FwcGl1bS9dLFxuICBbJ0dFVCcsIC9hdHRyaWJ1dGUvXSxcbiAgWydHRVQnLCAvY29udGV4dC9dLFxuICBbJ0dFVCcsIC9sb2NhdGlvbi9dLFxuICBbJ0dFVCcsIC9sb2cvXSxcbiAgWydHRVQnLCAvc2NyZWVuc2hvdC9dLFxuICBbJ0dFVCcsIC9zaXplL10sXG4gIFsnR0VUJywgL3NvdXJjZS9dLFxuICBbJ0dFVCcsIC90aW1lb3V0cyQvXSxcbiAgWydHRVQnLCAvdXJsL10sXG4gIFsnR0VUJywgL3dpbmRvdy9dLFxuICBbJ1BPU1QnLCAvYWNjZXB0X2FsZXJ0L10sXG4gIFsnUE9TVCcsIC9hY3Rpb25zJC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRfdGV4dC9dLFxuICBbJ1BPU1QnLCAvYWxlcnRcXC9bXlxcL10rL10sXG4gIFsnUE9TVCcsIC9hcHBpdW0vXSxcbiAgWydQT1NUJywgL2FwcGl1bVxcL2RldmljZVxcL2lzX2xvY2tlZC9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvbG9jay9dLFxuICBbJ1BPU1QnLCAvYXBwaXVtXFwvZGV2aWNlXFwvdW5sb2NrL10sXG4gIFsnUE9TVCcsIC9iYWNrL10sXG4gIFsnUE9TVCcsIC9jbGVhci9dLFxuICBbJ1BPU1QnLCAvY29udGV4dC9dLFxuICBbJ1BPU1QnLCAvZGlzbWlzc19hbGVydC9dLFxuICBbJ1BPU1QnLCAvZWxlbWVudFxcL2FjdGl2ZS9dLCAvLyBNSlNPTldQIGdldCBhY3RpdmUgZWxlbWVudCBzaG91bGQgcHJveHlcbiAgWydQT1NUJywgL2VsZW1lbnQkL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50cyQvXSxcbiAgWydQT1NUJywgL2V4ZWN1dGUvXSxcbiAgWydQT1NUJywgL2tleXMvXSxcbiAgWydQT1NUJywgL2xvZy9dLFxuICBbJ1BPU1QnLCAvbW92ZXRvL10sXG4gIFsnUE9TVCcsIC9yZWNlaXZlX2FzeW5jX3Jlc3BvbnNlL10sIC8vIGFsd2F5cywgaW4gY2FzZSBjb250ZXh0IHN3aXRjaGVzIHdoaWxlIHdhaXRpbmdcbiAgWydQT1NUJywgL3Nlc3Npb25cXC9bXlxcL10rXFwvbG9jYXRpb24vXSwgLy8gZ2VvIGxvY2F0aW9uLCBidXQgbm90IGVsZW1lbnQgbG9jYXRpb25cbiAgWydQT1NUJywgL3NoYWtlL10sXG4gIFsnUE9TVCcsIC90aW1lb3V0cy9dLFxuICBbJ1BPU1QnLCAvdG91Y2gvXSxcbiAgWydQT1NUJywgL3VybC9dLFxuICBbJ1BPU1QnLCAvdmFsdWUvXSxcbiAgWydQT1NUJywgL3dpbmRvdy9dLFxuICBbJ0RFTEVURScsIC9jb29raWUvXSxcbiAgWydHRVQnLCAvY29va2llL10sXG4gIFsnUE9TVCcsIC9jb29raWUvXSxcbl07XG5jb25zdCBOT19QUk9YWV9XRUJfTElTVCA9IFtcbiAgWydHRVQnLCAvYXR0cmlidXRlL10sXG4gIFsnR0VUJywgL2VsZW1lbnQvXSxcbiAgWydHRVQnLCAvdGV4dC9dLFxuICBbJ0dFVCcsIC90aXRsZS9dLFxuICBbJ1BPU1QnLCAvY2xlYXIvXSxcbiAgWydQT1NUJywgL2NsaWNrL10sXG4gIFsnUE9TVCcsIC9lbGVtZW50L10sXG4gIFsnUE9TVCcsIC9mb3J3YXJkL10sXG4gIFsnUE9TVCcsIC9mcmFtZS9dLFxuICBbJ1BPU1QnLCAva2V5cy9dLFxuICBbJ1BPU1QnLCAvcmVmcmVzaC9dLFxuXS5jb25jYXQoTk9fUFJPWFlfTkFUSVZFX0xJU1QpO1xuLyogZXNsaW50LWVuYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuXG5jb25zdCBNRU1PSVpFRF9GVU5DVElPTlMgPSBbXG4gICdnZXRTdGF0dXNCYXJIZWlnaHQnLFxuICAnZ2V0RGV2aWNlUGl4ZWxSYXRpbycsXG4gICdnZXRTY3JlZW5JbmZvJyxcbl07XG5cbmNsYXNzIFhDVUlUZXN0RHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG5cbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ3hwYXRoJyxcbiAgICAgICdpZCcsXG4gICAgICAnbmFtZScsXG4gICAgICAnY2xhc3MgbmFtZScsXG4gICAgICAnLWlvcyBwcmVkaWNhdGUgc3RyaW5nJyxcbiAgICAgICctaW9zIGNsYXNzIGNoYWluJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICAgICdjc3Mgc2VsZWN0b3InLFxuICAgIF07XG4gICAgdGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyA9IFtcbiAgICAgICdsaW5rIHRleHQnLFxuICAgICAgJ2NzcyBzZWxlY3RvcicsXG4gICAgICAndGFnIG5hbWUnLFxuICAgICAgJ2xpbmsgdGV4dCcsXG4gICAgICAncGFydGlhbCBsaW5rIHRleHQnLFxuICAgIF07XG4gICAgdGhpcy5yZXNldElvcygpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBuZXcgRGV2aWNlU2V0dGluZ3MoREVGQVVMVF9TRVRUSU5HUywgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuICAgIHRoaXMubG9ncyA9IHt9O1xuXG4gICAgLy8gbWVtb2l6ZSBmdW5jdGlvbnMgaGVyZSwgc28gdGhhdCB0aGV5IGFyZSBkb25lIG9uIGEgcGVyLWluc3RhbmNlIGJhc2lzXG4gICAgZm9yIChjb25zdCBmbiBvZiBNRU1PSVpFRF9GVU5DVElPTlMpIHtcbiAgICAgIHRoaXNbZm5dID0gXy5tZW1vaXplKHRoaXNbZm5dKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAhPT0gJ25hdGl2ZVdlYlRhcCcgJiYga2V5ICE9PSAnbmF0aXZlV2ViVGFwU3RyaWN0Jykge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvYXBwaXVtL3NldHRpbmdzJywgJ1BPU1QnLCB7XG4gICAgICAgIHNldHRpbmdzOiB7W2tleV06IHZhbHVlfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMub3B0c1trZXldID0gISF2YWx1ZTtcbiAgfVxuXG4gIHJlc2V0SW9zICgpIHtcbiAgICB0aGlzLm9wdHMgPSB0aGlzLm9wdHMgfHwge307XG4gICAgdGhpcy53ZGEgPSBudWxsO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbXTtcbiAgICB0aGlzLnNhZmFyaSA9IGZhbHNlO1xuICAgIHRoaXMuY2FjaGVkV2RhU3RhdHVzID0gbnVsbDtcblxuICAgIHRoaXMuY3VyV2ViRnJhbWVzID0gW107XG4gICAgdGhpcy5fY3VycmVudFVybCA9IG51bGw7XG4gICAgdGhpcy5jdXJDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLnhjb2RlVmVyc2lvbiA9IHt9O1xuICAgIHRoaXMuY29udGV4dHMgPSBbXTtcbiAgICB0aGlzLmltcGxpY2l0V2FpdE1zID0gMDtcbiAgICB0aGlzLmFzeW5jbGliV2FpdE1zID0gMDtcbiAgICB0aGlzLnBhZ2VMb2FkTXMgPSA2MDAwO1xuICAgIHRoaXMubGFuZHNjYXBlV2ViQ29vcmRzT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnJlbW90ZSA9IG51bGw7XG5cbiAgICB0aGlzLndlYkVsZW1lbnRzQ2FjaGUgPSBuZXcgTFJVKHtcbiAgICAgIG1heDogV0VCX0VMRU1FTlRTX0NBQ0hFX1NJWkUsXG4gICAgfSk7XG4gIH1cblxuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgLy8gVE9ETyBmaWxsIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBhc3luYyBnZXRTdGF0dXMgKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5kcml2ZXJJbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5kcml2ZXJJbmZvID0gYXdhaXQgZ2V0RHJpdmVySW5mbygpO1xuICAgIH1cbiAgICBsZXQgc3RhdHVzID0ge2J1aWxkOiB7dmVyc2lvbjogdGhpcy5kcml2ZXJJbmZvLnZlcnNpb259fTtcbiAgICBpZiAodGhpcy5jYWNoZWRXZGFTdGF0dXMpIHtcbiAgICAgIHN0YXR1cy53ZGEgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cztcbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfVxuXG4gIG1lcmdlQ2xpQXJnc1RvT3B0cyAoKSB7XG4gICAgbGV0IGRpZE1lcmdlID0gZmFsc2U7XG4gICAgLy8gdGhpcy5jbGlBcmdzIHNob3VsZCBuZXZlciBpbmNsdWRlIGFueXRoaW5nIHdlIGRvIG5vdCBleHBlY3QuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jbGlBcmdzID8/IHt9KSkge1xuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywga2V5KSkge1xuICAgICAgICBsb2cuaW5mbyhgQ0xJIGFyZyAnJHtrZXl9JyB3aXRoIHZhbHVlICcke3ZhbHVlfScgb3ZlcndyaXRlcyB2YWx1ZSAnJHt0aGlzLm9wdHNba2V5XX0nIHNlbnQgaW4gdmlhIGNhcHMpYCk7XG4gICAgICAgIGRpZE1lcmdlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0c1trZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBkaWRNZXJnZTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEgPSB7fTsgLy8gdGhpcyBpcyB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mIHRoZSBzdGF0ZSB3ZSBzdGFydCBzbyB3aGVuIHdlIGRlbGV0ZSB0aGUgc2Vzc2lvbiB3ZSBjYW4gcHV0IHRoaW5ncyBiYWNrXG4gICAgdHJ5IHtcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG4gICAgICB0aGlzLm9wdHMuc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuXG4gICAgICAvLyBtZXJnZSBjbGkgYXJncyB0byBvcHRzLCBhbmQgaWYgd2UgZGlkIG1lcmdlIGFueSwgcmV2YWxpZGF0ZSBvcHRzIHRvIGVuc3VyZSB0aGUgZmluYWwgc2V0XG4gICAgICAvLyBpcyBhbHNvIGNvbnNpc3RlbnRcbiAgICAgIGlmICh0aGlzLm1lcmdlQ2xpQXJnc1RvT3B0cygpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVEZXNpcmVkQ2Fwcyh7Li4uY2FwcywgLi4udGhpcy5jbGlBcmdzfSk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnQoKTtcblxuICAgICAgLy8gbWVyZ2Ugc2VydmVyIGNhcGFiaWxpdGllcyArIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAgICBjYXBzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNlcnZlckNhcHMsIGNhcHMpO1xuICAgICAgLy8gdXBkYXRlIHRoZSB1ZGlkIHdpdGggd2hhdCBpcyBhY3R1YWxseSB1c2VkXG4gICAgICBjYXBzLnVkaWQgPSB0aGlzLm9wdHMudWRpZDtcbiAgICAgIC8vIGVuc3VyZSB3ZSB0cmFjayBuYXRpdmVXZWJUYXAgY2FwYWJpbGl0eSBhcyBhIHNldHRpbmcgYXMgd2VsbFxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ25hdGl2ZVdlYlRhcCcpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe25hdGl2ZVdlYlRhcDogdGhpcy5vcHRzLm5hdGl2ZVdlYlRhcH0pO1xuICAgICAgfVxuICAgICAgLy8gZW5zdXJlIHdlIHRyYWNrIG5hdGl2ZVdlYlRhcFN0cmljdCBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnbmF0aXZlV2ViVGFwU3RyaWN0JykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXR0aW5ncyh7bmF0aXZlV2ViVGFwU3RyaWN0OiB0aGlzLm9wdHMubmF0aXZlV2ViVGFwU3RyaWN0fSk7XG4gICAgICB9XG4gICAgICAvLyBlbnN1cmUgd2UgdHJhY2sgdXNlSlNPTlNvdXJjZSBjYXBhYmlsaXR5IGFzIGEgc2V0dGluZyBhcyB3ZWxsXG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAndXNlSlNPTlNvdXJjZScpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe3VzZUpTT05Tb3VyY2U6IHRoaXMub3B0cy51c2VKU09OU291cmNlfSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB3ZGFTZXR0aW5ncyA9IHtcbiAgICAgICAgZWxlbWVudFJlc3BvbnNlQXR0cmlidXRlczogREVGQVVMVF9TRVRUSU5HUy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzLFxuICAgICAgICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiBERUZBVUxUX1NFVFRJTkdTLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMsXG4gICAgICB9O1xuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ2VsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXMnKSkge1xuICAgICAgICB3ZGFTZXR0aW5ncy5lbGVtZW50UmVzcG9uc2VBdHRyaWJ1dGVzID0gdGhpcy5vcHRzLmVsZW1lbnRSZXNwb25zZUF0dHJpYnV0ZXM7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcycpKSB7XG4gICAgICAgIHdkYVNldHRpbmdzLnNob3VsZFVzZUNvbXBhY3RSZXNwb25zZXMgPSB0aGlzLm9wdHMuc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcztcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdtanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5JykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MubWpwZWdTZXJ2ZXJTY3JlZW5zaG90UXVhbGl0eSA9IHRoaXMub3B0cy5tanBlZ1NlcnZlclNjcmVlbnNob3RRdWFsaXR5O1xuICAgICAgfVxuICAgICAgaWYgKF8uaGFzKHRoaXMub3B0cywgJ21qcGVnU2VydmVyRnJhbWVyYXRlJykpIHtcbiAgICAgICAgd2RhU2V0dGluZ3MubWpwZWdTZXJ2ZXJGcmFtZXJhdGUgPSB0aGlzLm9wdHMubWpwZWdTZXJ2ZXJGcmFtZXJhdGU7XG4gICAgICB9XG4gICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnc2NyZWVuc2hvdFF1YWxpdHknKSkge1xuICAgICAgICBsb2cuaW5mbyhgU2V0dGluZyB0aGUgcXVhbGl0eSBvZiBwaG9uZSBzY3JlZW5zaG90OiAnJHt0aGlzLm9wdHMuc2NyZWVuc2hvdFF1YWxpdHl9J2ApO1xuICAgICAgICB3ZGFTZXR0aW5ncy5zY3JlZW5zaG90UXVhbGl0eSA9IHRoaXMub3B0cy5zY3JlZW5zaG90UXVhbGl0eTtcbiAgICAgIH1cbiAgICAgIC8vIGVuc3VyZSBXREEgZ2V0cyBvdXIgZGVmYXVsdHMgaW5zdGVhZCBvZiB3aGF0ZXZlciBpdHMgb3duIG1pZ2h0IGJlXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVNldHRpbmdzKHdkYVNldHRpbmdzKTtcblxuICAgICAgLy8gdHVybiBvbiBtanBlZyBzdHJlYW0gcmVhZGluZyBpZiByZXF1ZXN0ZWRcbiAgICAgIGlmICh0aGlzLm9wdHMubWpwZWdTY3JlZW5zaG90VXJsKSB7XG4gICAgICAgIGxvZy5pbmZvKGBTdGFydGluZyBNSlBFRyBzdHJlYW0gcmVhZGluZyBVUkw6ICcke3RoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmx9J2ApO1xuICAgICAgICB0aGlzLm1qcGVnU3RyZWFtID0gbmV3IG1qcGVnLk1KcGVnU3RyZWFtKHRoaXMub3B0cy5tanBlZ1NjcmVlbnNob3RVcmwpO1xuICAgICAgICBhd2FpdCB0aGlzLm1qcGVnU3RyZWFtLnN0YXJ0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKEpTT04uc3RyaW5naWZ5KGUpKTtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCAoKSB7XG4gICAgdGhpcy5vcHRzLm5vUmVzZXQgPSAhIXRoaXMub3B0cy5ub1Jlc2V0O1xuICAgIHRoaXMub3B0cy5mdWxsUmVzZXQgPSAhIXRoaXMub3B0cy5mdWxsUmVzZXQ7XG5cbiAgICBhd2FpdCBwcmludFVzZXIoKTtcblxuICAgIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uID0gbnVsbDsgLy8gRm9yIFdEQSBhbmQgeGNvZGVidWlsZFxuICAgIGNvbnN0IHtkZXZpY2UsIHVkaWQsIHJlYWxEZXZpY2V9ID0gYXdhaXQgdGhpcy5kZXRlcm1pbmVEZXZpY2UoKTtcbiAgICBsb2cuaW5mbyhgRGV0ZXJtaW5pbmcgZGV2aWNlIHRvIHJ1biB0ZXN0cyBvbjogdWRpZDogJyR7dWRpZH0nLCByZWFsIGRldmljZTogJHtyZWFsRGV2aWNlfWApO1xuICAgIHRoaXMub3B0cy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgIHRoaXMub3B0cy5yZWFsRGV2aWNlID0gcmVhbERldmljZTtcblxuICAgIGlmICh0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgpIHtcbiAgICAgIGlmIChyZWFsRGV2aWNlKSB7XG4gICAgICAgIGxvZy5pbmZvKGBUaGUgJ3NpbXVsYXRvckRldmljZXNTZXRQYXRoJyBjYXBhYmlsaXR5IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBTaW11bGF0b3IgZGV2aWNlc2ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmluZm8oYFNldHRpbmcgc2ltdWxhdG9yIGRldmljZXMgc2V0IHBhdGggdG8gJyR7dGhpcy5vcHRzLnNpbXVsYXRvckRldmljZXNTZXRQYXRofSdgKTtcbiAgICAgICAgdGhpcy5vcHRzLmRldmljZS5kZXZpY2VzU2V0UGF0aCA9IHRoaXMub3B0cy5zaW11bGF0b3JEZXZpY2VzU2V0UGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50IGlmIHRoZXJlIGlzIG5vIHBsYXRmb3JtVmVyc2lvbiwgZ2V0IGl0IGZyb20gdGhlIGRldmljZVxuICAgIGlmICghdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAmJiB0aGlzLm9wdHMuZGV2aWNlKSB7XG4gICAgICB0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uID0gYXdhaXQgdGhpcy5vcHRzLmRldmljZS5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgIGxvZy5pbmZvKGBObyBwbGF0Zm9ybVZlcnNpb24gc3BlY2lmaWVkLiBVc2luZyBkZXZpY2UgdmVyc2lvbjogJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFZlcnNpb24gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24odGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbik7XG4gICAgaWYgKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gIT09IG5vcm1hbGl6ZWRWZXJzaW9uKSB7XG4gICAgICBsb2cuaW5mbyhgTm9ybWFsaXplZCBwbGF0Zm9ybVZlcnNpb24gY2FwYWJpbGl0eSB2YWx1ZSAnJHt0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9ufScgdG8gJyR7bm9ybWFsaXplZFZlcnNpb259J2ApO1xuICAgICAgdGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiA9IG5vcm1hbGl6ZWRWZXJzaW9uO1xuICAgIH1cbiAgICBpZiAodXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJzwnLCAnOS4zJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGxhdGZvcm0gdmVyc2lvbiBtdXN0IGJlIDkuMyBvciBhYm92ZS4gJyR7dGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnhjb2RlVmVyc2lvbikgJiYgKCF0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwgfHwgIXRoaXMub3B0cy5yZWFsRGV2aWNlKSkge1xuICAgICAgLy8gbm8gYHdlYkRyaXZlckFnZW50VXJsYCwgb3Igb24gYSBzaW11bGF0b3IsIHNvIHdlIG5lZWQgYW4gWGNvZGUgdmVyc2lvblxuICAgICAgdGhpcy54Y29kZVZlcnNpb24gPSBhd2FpdCBnZXRBbmRDaGVja1hjb2RlVmVyc2lvbigpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCd4Y29kZURldGFpbHNSZXRyaWV2ZWQnKTtcblxuICAgIGlmIChfLnRvTG93ZXIodGhpcy5vcHRzLmJyb3dzZXJOYW1lKSA9PT0gJ3NhZmFyaScpIHtcbiAgICAgIGxvZy5pbmZvKCdTYWZhcmkgdGVzdCByZXF1ZXN0ZWQnKTtcbiAgICAgIHRoaXMuc2FmYXJpID0gdHJ1ZTtcbiAgICAgIHRoaXMub3B0cy5hcHAgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyA9IHRoaXMub3B0cy5wcm9jZXNzQXJndW1lbnRzIHx8IHt9O1xuICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gU0FGQVJJX0JVTkRMRV9JRDtcbiAgICAgIHRoaXMuX2N1cnJlbnRVcmwgPSB0aGlzLm9wdHMuc2FmYXJpSW5pdGlhbFVybCB8fCAoXG4gICAgICAgIHRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICAgICA/ICdodHRwOi8vYXBwaXVtLmlvJ1xuICAgICAgICAgIDogYGh0dHA6Ly8ke3RoaXMub3B0cy5hZGRyZXNzfToke3RoaXMub3B0cy5wb3J0fS93ZWxjb21lYFxuICAgICAgKTtcbiAgICAgIGlmICh1dGlsLmNvbXBhcmVWZXJzaW9ucyh0aGlzLm9wdHMucGxhdGZvcm1WZXJzaW9uLCAnPCcsICcxMi4yJykpIHtcbiAgICAgICAgLy8gdGhpcyBvcHRpb24gZG9lcyBub3Qgd29yayBvbiAxMi4yIGFuZCBhYm92ZVxuICAgICAgICB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cy5hcmdzID0gWyctdScsIHRoaXMuX2N1cnJlbnRVcmxdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmFwcCB8fCB0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlQXBwKCk7XG4gICAgfVxuICAgIHRoaXMubG9nRXZlbnQoJ2FwcENvbmZpZ3VyZWQnKTtcblxuICAgIC8vIGZhaWwgdmVyeSBlYXJseSBpZiB0aGUgYXBwIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3RcbiAgICAvLyBvciBpZiBidW5kbGUgaWQgZG9lc24ndCBwb2ludCB0byBhbiBpbnN0YWxsZWQgYXBwXG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IGNoZWNrQXBwUHJlc2VudCh0aGlzLm9wdHMuYXBwKTtcblxuICAgICAgaWYgKCF0aGlzLm9wdHMuYnVuZGxlSWQpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gYXdhaXQgZXh0cmFjdEJ1bmRsZUlkKHRoaXMub3B0cy5hcHApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMucnVuUmVzZXQoKTtcblxuICAgIHRoaXMud2RhID0gbmV3IFdlYkRyaXZlckFnZW50KHRoaXMueGNvZGVWZXJzaW9uLCB0aGlzLm9wdHMpO1xuICAgIC8vIERlcml2ZWQgZGF0YSBwYXRoIHJldHJpZXZhbCBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uXG4gICAgLy8gV2UgY291bGQgc3RhcnQgdGhhdCBub3cgaW4gYmFja2dyb3VuZCBhbmQgZ2V0IHRoZSBjYWNoZWQgcmVzdWx0XG4gICAgLy8gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkXG4gICAgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKS5jYXRjaCgoZSkgPT4gbG9nLmRlYnVnKGUpKTtcblxuICAgIGNvbnN0IG1lbW9pemVkTG9nSW5mbyA9IF8ubWVtb2l6ZShmdW5jdGlvbiBsb2dJbmZvICgpIHtcbiAgICAgIGxvZy5pbmZvKFwiJ3NraXBMb2dDYXB0dXJlJyBpcyBzZXQuIFNraXBwaW5nIHN0YXJ0aW5nIGxvZ3Mgc3VjaCBhcyBjcmFzaCwgc3lzdGVtLCBzYWZhcmkgY29uc29sZSBhbmQgc2FmYXJpIG5ldHdvcmsuXCIpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN0YXJ0TG9nQ2FwdHVyZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMuc2tpcExvZ0NhcHR1cmUpIHtcbiAgICAgICAgbWVtb2l6ZWRMb2dJbmZvKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdGFydExvZ0NhcHR1cmUoKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnbG9nQ2FwdHVyZVN0YXJ0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBjb25zdCBpc0xvZ0NhcHR1cmVTdGFydGVkID0gYXdhaXQgc3RhcnRMb2dDYXB0dXJlKCk7XG5cbiAgICBsb2cuaW5mbyhgU2V0dGluZyB1cCAke3RoaXMuaXNSZWFsRGV2aWNlKCkgPyAncmVhbCBkZXZpY2UnIDogJ3NpbXVsYXRvcid9YCk7XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLnNodXRkb3duT3RoZXJTaW11bGF0b3JzKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRmVhdHVyZUVuYWJsZWQoU0hVVERPV05fT1RIRVJfRkVBVF9OQU1FKTtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25PdGhlclNpbXVsYXRvcnModGhpcy5vcHRzLmRldmljZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHRoZSBzaW11bGF0b3IgaXMgc3RhcnRlZFxuICAgICAgLy8gaWYgaXQgaXMgYWxyZWFkeSBydW5uaW5nLCB0aGlzIGNhcCB3b24ndCB3b3JrLCB3aGljaCBpcyBkb2N1bWVudGVkXG4gICAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMub3B0cy5zYWZhcmlHbG9iYWxQcmVmZXJlbmNlcykge1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5vcHRzLmRldmljZS51cGRhdGVTYWZhcmlHbG9iYWxTZXR0aW5ncyh0aGlzLm9wdHMuc2FmYXJpR2xvYmFsUHJlZmVyZW5jZXMpKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKGBTYWZhcmkgZ2xvYmFsIHByZWZlcmVuY2VzIHVwZGF0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvY2FsQ29uZmlnID0gYXdhaXQgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXModGhpcy5vcHRzLmRldmljZSwgdGhpcy5vcHRzLCB0aGlzLmlzU2FmYXJpKCksIGFzeW5jIChzaW0pID0+IHtcbiAgICAgICAgYXdhaXQgc2h1dGRvd25TaW11bGF0b3Ioc2ltKTtcblxuICAgICAgICAvLyB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIG5lZWRzIHRvIGJlIGNoYW5nZXMgYSBwcmlvcmksIHNvIGNoYW5nZSBmaXJzdC5cbiAgICAgICAgLy8gc29tZXRpbWVzIHRoZSBzaHV0ZG93biBwcm9jZXNzIGNoYW5nZXMgdGhlIHNldHRpbmdzLCBzbyByZXNldCB0aGVtLFxuICAgICAgICAvLyBrbm93aW5nIHRoYXQgdGhlIHNpbSBpcyBhbHJlYWR5IHNodXRcbiAgICAgICAgYXdhaXQgc2V0TG9jYWxlQW5kUHJlZmVyZW5jZXMoc2ltLCB0aGlzLm9wdHMsIHRoaXMuaXNTYWZhcmkoKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0ICYmICEoYXdhaXQgZG9lc1N1cHBvcnRLZXljaGFpbkFwaSh0aGlzLm9wdHMuZGV2aWNlKSkpIHtcbiAgICAgICAgY29uc3QgY2VydEhlYWQgPSBfLnRydW5jYXRlKHRoaXMub3B0cy5jdXN0b21TU0xDZXJ0LCB7bGVuZ3RoOiAyMH0pO1xuICAgICAgICBsb2cuaW5mbyhgSW5zdGFsbGluZyB0aGUgY3VzdG9tIFNTTCBjZXJ0aWZpY2F0ZSAnJHtjZXJ0SGVhZH0nYCk7XG4gICAgICAgIGlmIChhd2FpdCBoYXNDZXJ0aWZpY2F0ZUxlZ2FjeSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCkpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgU1NMIGNlcnRpZmljYXRlICcke2NlcnRIZWFkfScgYWxyZWFkeSBpbnN0YWxsZWRgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2cuaW5mbyhgTWFraW5nIHN1cmUgU2ltdWxhdG9yIGlzIHNodXQgZG93biwgJyArXG4gICAgICAgICAgICAnc28gdGhhdCBTU0wgY2VydGlmaWNhdGUgaW5zdGFsbGF0aW9uIHRha2VzIGVmZmVjdGApO1xuICAgICAgICAgIGF3YWl0IHNodXRkb3duU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UpO1xuICAgICAgICAgIGF3YWl0IGluc3RhbGxDZXJ0aWZpY2F0ZUxlZ2FjeSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2dFdmVudCgnY3VzdG9tQ2VydEluc3RhbGxlZCcpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0U2ltKCk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCAmJiBhd2FpdCBkb2VzU3VwcG9ydEtleWNoYWluQXBpKHRoaXMub3B0cy5kZXZpY2UpKSB7XG4gICAgICAgIC8vIFNpbXVsYXRvciBtdXN0IGJlIGJvb3RlZCBpbiBvcmRlciB0byBjYWxsIHRoaXMgaGVscGVyXG4gICAgICAgIGF3YWl0IGluc3RhbGxDZXJ0aWZpY2F0ZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCk7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ2N1c3RvbUNlcnRJbnN0YWxsZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5sYXVuY2hXaXRoSURCICYmIHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGlkYiA9IG5ldyBJREIoe3VkaWR9KTtcbiAgICAgICAgICBhd2FpdCBpZGIuY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMub3B0cy5kZXZpY2UuaWRiID0gaWRiO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLmluZm8oYGlkYiB3aWxsIG5vdCBiZSB1c2VkIGZvciBTaW11bGF0b3IgaW50ZXJhY3Rpb24uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZ0V2ZW50KCdzaW1TdGFydGVkJyk7XG4gICAgICBpZiAoIWlzTG9nQ2FwdHVyZVN0YXJ0ZWQpIHtcbiAgICAgICAgLy8gUmV0cnkgbG9nIGNhcHR1cmUgaWYgU2ltdWxhdG9yIHdhcyBub3QgcnVubmluZyBiZWZvcmVcbiAgICAgICAgYXdhaXQgc3RhcnRMb2dDYXB0dXJlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuY3VzdG9tU1NMQ2VydCkge1xuICAgICAgYXdhaXQgbmV3IFB5aWRldmljZSh1ZGlkKS5pbnN0YWxsUHJvZmlsZSh7cGF5bG9hZDogdGhpcy5vcHRzLmN1c3RvbVNTTENlcnR9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsQVVUKCk7XG4gICAgICB0aGlzLmxvZ0V2ZW50KCdhcHBJbnN0YWxsZWQnKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBvbmx5IGhhdmUgYnVuZGxlIGlkZW50aWZpZXIgYW5kIG5vIGFwcCwgZmFpbCBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWRcbiAgICBpZiAoIXRoaXMub3B0cy5hcHAgJiYgdGhpcy5vcHRzLmJ1bmRsZUlkICYmICF0aGlzLnNhZmFyaSkge1xuICAgICAgaWYgKCFhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5idW5kbGVJZCkpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYEFwcCB3aXRoIGJ1bmRsZSBpZGVudGlmaWVyICcke3RoaXMub3B0cy5idW5kbGVJZH0nIHVua25vd25gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRzLnBlcm1pc3Npb25zKSB7XG4gICAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZygnU2V0dGluZyB0aGUgcmVxdWVzdGVkIHBlcm1pc3Npb25zIGJlZm9yZSBXREEgaXMgc3RhcnRlZCcpO1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybWlzc2lvbnNNYXBwaW5nXSBvZiBfLnRvUGFpcnMoSlNPTi5wYXJzZSh0aGlzLm9wdHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2V0UGVybWlzc2lvbnMoYnVuZGxlSWQsIHBlcm1pc3Npb25zTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZy53YXJuKCdTZXR0aW5nIHBlcm1pc3Npb25zIGlzIG9ubHkgc3VwcG9ydGVkIG9uIFNpbXVsYXRvci4gJyArXG4gICAgICAgICAgJ1RoZSBcInBlcm1pc3Npb25zXCIgY2FwYWJpbGl0eSB3aWxsIGJlIGlnbm9yZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTaW11bGF0b3IoKSkge1xuICAgICAgaWYgKHRoaXMub3B0cy5jYWxlbmRhckFjY2Vzc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5lbmFibGVDYWxlbmRhckFjY2Vzcyh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuY2FsZW5kYXJBY2Nlc3NBdXRob3JpemVkID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLmRpc2FibGVDYWxlbmRhckFjY2Vzcyh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc3RhcnRXZGEodGhpcy5vcHRzLnNlc3Npb25JZCwgcmVhbERldmljZSk7XG5cbiAgICBhd2FpdCB0aGlzLnNldFJlZHVjZU1vdGlvbih0aGlzLm9wdHMucmVkdWNlTW90aW9uKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0SW5pdGlhbE9yaWVudGF0aW9uKHRoaXMub3B0cy5vcmllbnRhdGlvbik7XG4gICAgdGhpcy5sb2dFdmVudCgnb3JpZW50YXRpb25TZXQnKTtcblxuICAgIC8vIHJlYWwgZGV2aWNlcyB3aWxsIGJlIGhhbmRsZWQgbGF0ZXIsIGFmdGVyIHRoZSB3ZWIgY29udGV4dCBoYXMgYmVlbiBpbml0aWFsaXplZFxuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkgJiYgIXRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICYmIHV0aWwuY29tcGFyZVZlcnNpb25zKHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24sICc+PScsICcxMi4yJykpIHtcbiAgICAgIC8vIG9uIDEyLjIgdGhlIHBhZ2UgaXMgbm90IG9wZW5lZCBpbiBXREFcbiAgICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uub3BlblVybCh0aGlzLl9jdXJyZW50VXJsKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpIHx8IHRoaXMub3B0cy5hdXRvV2Vidmlldykge1xuICAgICAgbG9nLmRlYnVnKCdXYWl0aW5nIGZvciBpbml0aWFsIHdlYnZpZXcnKTtcbiAgICAgIGF3YWl0IHRoaXMubmF2VG9Jbml0aWFsV2VidmlldygpO1xuICAgICAgdGhpcy5sb2dFdmVudCgnaW5pdGlhbFdlYnZpZXdOYXZpZ2F0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NhZmFyaSgpICYmIHRoaXMuaXNSZWFsRGV2aWNlKCkgJiYgdXRpbC5jb21wYXJlVmVyc2lvbnModGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgJz49JywgJzEyLjInKSkge1xuICAgICAgLy8gb24gMTIuMiB0aGUgcGFnZSBpcyBub3Qgb3BlbmVkIGluIFdEQVxuICAgICAgYXdhaXQgdGhpcy5zZXRVcmwodGhpcy5fY3VycmVudFVybCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IFdlYkRyaXZlckFnZW50UnVubmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgLSBUaGUgaWQgb2YgdGhlIHRhcmdldCBzZXNzaW9uIHRvIGxhdW5jaCBXREEgd2l0aC5cbiAgICogQHBhcmFtIHtib29sZWFufSByZWFsRGV2aWNlIC0gRXF1YWxzIHRvIHRydWUgaWYgdGhlIHRlc3QgdGFyZ2V0IGRldmljZSBpcyBhIHJlYWwgZGV2aWNlLlxuICAgKi9cbiAgYXN5bmMgc3RhcnRXZGEgKHNlc3Npb25JZCwgcmVhbERldmljZSkge1xuICAgIC8vIERvbid0IGNsZWFudXAgdGhlIHByb2Nlc3NlcyBpZiB3ZWJEcml2ZXJBZ2VudFVybCBpcyBzZXRcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUodGhpcy53ZGEud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICBhd2FpdCB0aGlzLndkYS5jbGVhbnVwT2Jzb2xldGVQcm9jZXNzZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VQb3J0Rm9yd2FyZGluZyA9IHRoaXMuaXNSZWFsRGV2aWNlKClcbiAgICAgICYmICF0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybFxuICAgICAgJiYgaXNMb2NhbEhvc3QodGhpcy53ZGEud2RhQmFzZVVybCk7XG4gICAgYXdhaXQgREVWSUNFX0NPTk5FQ1RJT05TX0ZBQ1RPUlkucmVxdWVzdENvbm5lY3Rpb24odGhpcy5vcHRzLnVkaWQsIHRoaXMud2RhLnVybC5wb3J0LCB7XG4gICAgICBkZXZpY2VQb3J0OiB1c2VQb3J0Rm9yd2FyZGluZyA/IHRoaXMud2RhLndkYVJlbW90ZVBvcnQgOiBudWxsLFxuICAgICAgdXNlUG9ydEZvcndhcmRpbmcsXG4gICAgfSk7XG5cbiAgICAvLyBMZXQgbXVsdGlwbGUgV0RBIGJpbmFyaWVzIHdpdGggZGlmZmVyZW50IGRlcml2ZWQgZGF0YSBmb2xkZXJzIGJlIGJ1aWx0IGluIHBhcmFsbGVsXG4gICAgLy8gQ29uY3VycmVudCBXREEgYnVpbGRzIGZyb20gdGhlIHNhbWUgc291cmNlIHdpbGwgY2F1c2UgeGNvZGVidWlsZCBzeW5jaHJvbml6YXRpb24gZXJyb3JzXG4gICAgbGV0IHN5bmNocm9uaXphdGlvbktleSA9IFhDVUlUZXN0RHJpdmVyLm5hbWU7XG4gICAgaWYgKHRoaXMub3B0cy51c2VYY3Rlc3RydW5GaWxlIHx8ICEoYXdhaXQgdGhpcy53ZGEuaXNTb3VyY2VGcmVzaCgpKSkge1xuICAgICAgLy8gRmlyc3QtdGltZSBjb21waWxhdGlvbiBpcyBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLCB3aGljaCBpcyBkb25lIGZhc3RlciBpZiBleGVjdXRlZFxuICAgICAgLy8gc2VxdWVudGlhbGx5LiBYY29kZWJ1aWxkIHNwcmVhZHMgdGhlIGxvYWQgY2F1c2VkIGJ5IHRoZSBjbGFuZyBjb21waWxlciB0byBhbGwgYXZhaWxhYmxlIENQVSBjb3Jlc1xuICAgICAgY29uc3QgZGVyaXZlZERhdGFQYXRoID0gYXdhaXQgdGhpcy53ZGEucmV0cmlldmVEZXJpdmVkRGF0YVBhdGgoKTtcbiAgICAgIGlmIChkZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgc3luY2hyb25pemF0aW9uS2V5ID0gcGF0aC5ub3JtYWxpemUoZGVyaXZlZERhdGFQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nLmRlYnVnKGBTdGFydGluZyBXZWJEcml2ZXJBZ2VudCBpbml0aWFsaXphdGlvbiB3aXRoIHRoZSBzeW5jaHJvbml6YXRpb24ga2V5ICcke3N5bmNocm9uaXphdGlvbktleX0nYCk7XG4gICAgaWYgKFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuaXNCdXN5KCkgJiYgIXRoaXMub3B0cy5kZXJpdmVkRGF0YVBhdGggJiYgIXRoaXMub3B0cy5ib290c3RyYXBQYXRoKSB7XG4gICAgICBsb2cuZGVidWcoYENvbnNpZGVyIHNldHRpbmcgYSB1bmlxdWUgJ2Rlcml2ZWREYXRhUGF0aCcgY2FwYWJpbGl0eSB2YWx1ZSBmb3IgZWFjaCBwYXJhbGxlbCBkcml2ZXIgaW5zdGFuY2UgYCArXG4gICAgICAgIGB0byBhdm9pZCBjb25mbGljdHMgYW5kIHNwZWVkIHVwIHRoZSBidWlsZGluZyBwcm9jZXNzYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBTSEFSRURfUkVTT1VSQ0VTX0dVQVJELmFjcXVpcmUoc3luY2hyb25pemF0aW9uS2V5LCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5vcHRzLnVzZU5ld1dEQSkge1xuICAgICAgICBsb2cuZGVidWcoYENhcGFiaWxpdHkgJ3VzZU5ld1dEQScgc2V0IHRvIHRydWUsIHNvIHVuaW5zdGFsbGluZyBXREEgYmVmb3JlIHByb2NlZWRpbmdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdEFuZFVuaW5zdGFsbCgpO1xuICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFVbmluc3RhbGxlZCcpO1xuICAgICAgfSBlbHNlIGlmICghdXRpbC5oYXNWYWx1ZSh0aGlzLndkYS53ZWJEcml2ZXJBZ2VudFVybCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEuc2V0dXBDYWNoaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGxvY2FsIGhlbHBlciBmb3IgdGhlIHR3byBwbGFjZXMgd2UgbmVlZCB0byB1bmluc3RhbGwgd2RhIGFuZCByZS1zdGFydCBpdFxuICAgICAgY29uc3QgcXVpdEFuZFVuaW5zdGFsbCA9IGFzeW5jIChtc2cpID0+IHtcbiAgICAgICAgbG9nLmRlYnVnKG1zZyk7XG4gICAgICAgIGlmICh0aGlzLm9wdHMud2ViRHJpdmVyQWdlbnRVcmwpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ05vdCBxdWl0dGluZy91bmluc3RhbGxpbmcgV2ViRHJpdmVyQWdlbnQgc2luY2Ugd2ViRHJpdmVyQWdlbnRVcmwgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCcpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGxvZy53YXJuKCdRdWl0dGluZyBhbmQgdW5pbnN0YWxsaW5nIFdlYkRyaXZlckFnZW50Jyk7XG4gICAgICAgIGF3YWl0IHRoaXMud2RhLnF1aXRBbmRVbmluc3RhbGwoKTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFVzZWQgaW4gdGhlIGZvbGxvd2luZyBXREEgYnVpbGRcbiAgICAgIGlmICh0aGlzLm9wdHMucmVzdWx0QnVuZGxlUGF0aCkge1xuICAgICAgICB0aGlzLmVuc3VyZUZlYXR1cmVFbmFibGVkKENVU1RPTUlaRV9SRVNVTFRfQlVORFBFX1BBVEgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydHVwUmV0cmllcyA9IHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cmllcyB8fCAodGhpcy5pc1JlYWxEZXZpY2UoKSA/IFdEQV9SRUFMX0RFVl9TVEFSVFVQX1JFVFJJRVMgOiBXREFfU0lNX1NUQVJUVVBfUkVUUklFUyk7XG4gICAgICBjb25zdCBzdGFydHVwUmV0cnlJbnRlcnZhbCA9IHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCB8fCBXREFfU1RBUlRVUF9SRVRSWV9JTlRFUlZBTDtcbiAgICAgIGxvZy5kZWJ1ZyhgVHJ5aW5nIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50ICR7c3RhcnR1cFJldHJpZXN9IHRpbWVzIHdpdGggJHtzdGFydHVwUmV0cnlJbnRlcnZhbH1tcyBpbnRlcnZhbGApO1xuICAgICAgaWYgKCF1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy53ZGFTdGFydHVwUmV0cmllcykgJiYgIXV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLndkYVN0YXJ0dXBSZXRyeUludGVydmFsKSkge1xuICAgICAgICBsb2cuZGVidWcoYFRoZXNlIHZhbHVlcyBjYW4gYmUgY3VzdG9taXplZCBieSBjaGFuZ2luZyB3ZGFTdGFydHVwUmV0cmllcy93ZGFTdGFydHVwUmV0cnlJbnRlcnZhbCBjYXBhYmlsaXRpZXNgKTtcbiAgICAgIH1cbiAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwoc3RhcnR1cFJldHJpZXMsIHN0YXJ0dXBSZXRyeUludGVydmFsLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVN0YXJ0QXR0ZW1wdGVkJyk7XG4gICAgICAgIGlmIChyZXRyeUNvdW50ID4gMCkge1xuICAgICAgICAgIGxvZy5pbmZvKGBSZXRyeWluZyBXREEgc3RhcnR1cCAoJHtyZXRyeUNvdW50ICsgMX0gb2YgJHtzdGFydHVwUmV0cmllc30pYCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBvbiB4Y29kZSAxMCBpbnN0YWxsZCB3aWxsIG9mdGVuIHRyeSB0byBhY2Nlc3MgdGhlIGFwcCBmcm9tIGl0cyBzdGFnaW5nXG4gICAgICAgICAgLy8gZGlyZWN0b3J5IGJlZm9yZSBmdWxseSBtb3ZpbmcgaXQgdGhlcmUsIGFuZCBmYWlsLiBSZXRyeWluZyBvbmNlXG4gICAgICAgICAgLy8gaW1tZWRpYXRlbHkgaGVscHNcbiAgICAgICAgICBjb25zdCByZXRyaWVzID0gdGhpcy54Y29kZVZlcnNpb24ubWFqb3IgPj0gMTAgPyAyIDogMTtcbiAgICAgICAgICB0aGlzLmNhY2hlZFdkYVN0YXR1cyA9IGF3YWl0IHJldHJ5KHJldHJpZXMsIHRoaXMud2RhLmxhdW5jaC5iaW5kKHRoaXMud2RhKSwgc2Vzc2lvbklkLCByZWFsRGV2aWNlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRGYWlsZWQnKTtcbiAgICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgICAgbGV0IGVycm9yTXNnID0gYFVuYWJsZSB0byBsYXVuY2ggV2ViRHJpdmVyQWdlbnQgYmVjYXVzZSBvZiB4Y29kZWJ1aWxkIGZhaWx1cmU6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICAgICAgZXJyb3JNc2cgKz0gYC4gTWFrZSBzdXJlIHlvdSBmb2xsb3cgdGhlIHR1dG9yaWFsIGF0ICR7V0RBX1JFQUxfREVWX1RVVE9SSUFMX1VSTH0uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYFRyeSB0byByZW1vdmUgdGhlIFdlYkRyaXZlckFnZW50UnVubmVyIGFwcGxpY2F0aW9uIGZyb20gdGhlIGRldmljZSBpZiBpdCBpcyBpbnN0YWxsZWQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgYW5kIHJlYm9vdCB0aGUgZGV2aWNlLmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHF1aXRBbmRVbmluc3RhbGwoZXJyb3JNc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMud2RhLnByb3h5UmVxUmVzLmJpbmQodGhpcy53ZGEpO1xuICAgICAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICBsZXQgb3JpZ2luYWxTdGFja3RyYWNlID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCByZXRyeUludGVydmFsKDE1LCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ0V2ZW50KCd3ZGFTZXNzaW9uQXR0ZW1wdGVkJyk7XG4gICAgICAgICAgICBsb2cuZGVidWcoJ1NlbmRpbmcgY3JlYXRlU2Vzc2lvbiBjb21tYW5kIHRvIFdEQScpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZWRXZGFTdGF0dXMgPSB0aGlzLmNhY2hlZFdkYVN0YXR1cyB8fCBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFdkYVNlc3Npb24odGhpcy5vcHRzLmJ1bmRsZUlkLCB0aGlzLm9wdHMucHJvY2Vzc0FyZ3VtZW50cyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgb3JpZ2luYWxTdGFja3RyYWNlID0gZXJyLnN0YWNrO1xuICAgICAgICAgICAgICBsb2cuZGVidWcoYEZhaWxlZCB0byBjcmVhdGUgV0RBIHNlc3Npb24gKCR7ZXJyLm1lc3NhZ2V9KS4gUmV0cnlpbmcuLi5gKTtcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubG9nRXZlbnQoJ3dkYVNlc3Npb25TdGFydGVkJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChvcmlnaW5hbFN0YWNrdHJhY2UpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhvcmlnaW5hbFN0YWNrdHJhY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZXJyb3JNc2cgPSBgVW5hYmxlIHRvIHN0YXJ0IFdlYkRyaXZlckFnZW50IHNlc3Npb24gYmVjYXVzZSBvZiB4Y29kZWJ1aWxkIGZhaWx1cmU6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgICAgICAgZXJyb3JNc2cgKz0gYCBNYWtlIHN1cmUgeW91IGZvbGxvdyB0aGUgdHV0b3JpYWwgYXQgJHtXREFfUkVBTF9ERVZfVFVUT1JJQUxfVVJMfS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgVHJ5IHRvIHJlbW92ZSB0aGUgV2ViRHJpdmVyQWdlbnRSdW5uZXIgYXBwbGljYXRpb24gZnJvbSB0aGUgZGV2aWNlIGlmIGl0IGlzIGluc3RhbGxlZCBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBhbmQgcmVib290IHRoZSBkZXZpY2UuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgcXVpdEFuZFVuaW5zdGFsbChlcnJvck1zZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRzLmNsZWFyU3lzdGVtRmlsZXMgJiYgIXRoaXMub3B0cy53ZWJEcml2ZXJBZ2VudFVybCkge1xuICAgICAgICAgIGF3YWl0IG1hcmtTeXN0ZW1GaWxlc0ZvckNsZWFudXAodGhpcy53ZGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgZXhwZWN0IGNlcnRhaW4gc29ja2V0IGVycm9ycyB1bnRpbCB0aGlzIHBvaW50LCBidXQgbm93XG4gICAgICAgIC8vIG1hcmsgdGhpbmdzIGFzIGZ1bGx5IHdvcmtpbmdcbiAgICAgICAgdGhpcy53ZGEuZnVsbHlTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2dFdmVudCgnd2RhU3RhcnRlZCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBydW5SZXNldCAob3B0cyA9IG51bGwpIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCdyZXNldFN0YXJ0ZWQnKTtcbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgcnVuUmVhbERldmljZVJlc2V0KHRoaXMub3B0cy5kZXZpY2UsIG9wdHMgfHwgdGhpcy5vcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgcnVuU2ltdWxhdG9yUmVzZXQodGhpcy5vcHRzLmRldmljZSwgb3B0cyB8fCB0aGlzLm9wdHMpO1xuICAgIH1cbiAgICB0aGlzLmxvZ0V2ZW50KCdyZXNldENvbXBsZXRlJyk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICBhd2FpdCByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgXy5jb21wYWN0KFt0aGlzLl9yZWNlbnRTY3JlZW5SZWNvcmRlciwgdGhpcy5fYXVkaW9SZWNvcmRlcl0pKSB7XG4gICAgICBhd2FpdCByZWNvcmRlci5pbnRlcnJ1cHQodHJ1ZSk7XG4gICAgICBhd2FpdCByZWNvcmRlci5jbGVhbnVwKCk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5fcGVyZlJlY29yZGVycykpIHtcbiAgICAgIGF3YWl0IEIuYWxsKHRoaXMuX3BlcmZSZWNvcmRlcnMubWFwKCh4KSA9PiB4LnN0b3AodHJ1ZSkpKTtcbiAgICAgIHRoaXMuX3BlcmZSZWNvcmRlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnN0b3AoKTtcblxuICAgIGlmICh0aGlzLndkYSAmJiAhdGhpcy5vcHRzLndlYkRyaXZlckFnZW50VXJsKSB7XG4gICAgICBpZiAodGhpcy5vcHRzLmNsZWFyU3lzdGVtRmlsZXMpIHtcbiAgICAgICAgbGV0IHN5bmNocm9uaXphdGlvbktleSA9IFhDVUlUZXN0RHJpdmVyLm5hbWU7XG4gICAgICAgIGNvbnN0IGRlcml2ZWREYXRhUGF0aCA9IGF3YWl0IHRoaXMud2RhLnJldHJpZXZlRGVyaXZlZERhdGFQYXRoKCk7XG4gICAgICAgIGlmIChkZXJpdmVkRGF0YVBhdGgpIHtcbiAgICAgICAgICBzeW5jaHJvbml6YXRpb25LZXkgPSBwYXRoLm5vcm1hbGl6ZShkZXJpdmVkRGF0YVBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFNIQVJFRF9SRVNPVVJDRVNfR1VBUkQuYWNxdWlyZShzeW5jaHJvbml6YXRpb25LZXksIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjbGVhclN5c3RlbUZpbGVzKHRoaXMud2RhKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuZGVidWcoJ05vdCBjbGVhcmluZyBsb2cgZmlsZXMuIFVzZSBgY2xlYXJTeXN0ZW1GaWxlc2AgY2FwYWJpbGl0eSB0byB0dXJuIG9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbW90ZSkge1xuICAgICAgbG9nLmRlYnVnKCdGb3VuZCBhIHJlbW90ZSBkZWJ1Z2dlciBzZXNzaW9uLiBSZW1vdmluZy4uLicpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wUmVtb3RlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seSA9PT0gZmFsc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMucnVuUmVzZXQoT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRzLCB7XG4gICAgICAgIGVuZm9yY2VTaW11bGF0b3JTaHV0ZG93bjogdHJ1ZSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1NpbXVsYXRvcigpICYmICF0aGlzLm9wdHMubm9SZXNldCAmJiAhIXRoaXMub3B0cy5kZXZpY2UpIHtcbiAgICAgIGlmICh0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgRGVsZXRpbmcgc2ltdWxhdG9yIGNyZWF0ZWQgZm9yIHRoaXMgcnVuICh1ZGlkOiAnJHt0aGlzLm9wdHMudWRpZH0nKWApO1xuICAgICAgICBhd2FpdCBzaHV0ZG93blNpbXVsYXRvcih0aGlzLm9wdHMuZGV2aWNlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRzLmRldmljZS5kZWxldGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRSZXNldExvY2F0aW9uU2Vydml2Y2UgPSB0aGlzLmlzUmVhbERldmljZSgpICYmICEhdGhpcy5vcHRzLnJlc2V0TG9jYXRpb25TZXJ2aWNlO1xuICAgIGlmIChzaG91bGRSZXNldExvY2F0aW9uU2Vydml2Y2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMubW9iaWxlUmVzZXRMb2NhdGlvblNlcnZpY2UoKTtcbiAgICAgIH0gY2F0Y2ggKGlnbm9yZSkgeyAvKiBJZ25vcmUgdGhpcyBlcnJvciBzaW5jZSBtb2JpbGVSZXNldExvY2F0aW9uU2VydmljZSBhbHJlYWR5IGxvZ2dlZCB0aGUgZXJyb3IgKi8gfVxuICAgIH1cblxuICAgIGlmICghXy5pc0VtcHR5KHRoaXMubG9ncykpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9ncy5zeXNsb2cuc3RvcENhcHR1cmUoKTtcbiAgICAgIHRoaXMubG9ncyA9IHt9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1qcGVnU3RyZWFtKSB7XG4gICAgICBsb2cuaW5mbygnQ2xvc2luZyBNSlBFRyBzdHJlYW0nKTtcbiAgICAgIHRoaXMubWpwZWdTdHJlYW0uc3RvcCgpO1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRJb3MoKTtcblxuICAgIGF3YWl0IHN1cGVyLmRlbGV0ZVNlc3Npb24oKTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gbnVsbDtcblxuXG4gICAgaWYgKHRoaXMud2RhICYmIHRoaXMud2RhLmZ1bGx5U3RhcnRlZCkge1xuICAgICAgaWYgKHRoaXMud2RhLmp3cHJveHkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZChgL3Nlc3Npb24vJHt0aGlzLnNlc3Npb25JZH1gLCAnREVMRVRFJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIGFuIGVycm9yIGhlcmUgc2hvdWxkIG5vdCBzaG9ydC1jaXJjdWl0IHRoZSByZXN0IG9mIGNsZWFuIHVwXG4gICAgICAgICAgbG9nLmRlYnVnKGBVbmFibGUgdG8gREVMRVRFIHNlc3Npb24gb24gV0RBOiAnJHtlcnIubWVzc2FnZX0nLiBDb250aW51aW5nIHNodXRkb3duLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMud2RhLndlYkRyaXZlckFnZW50VXJsICYmIHRoaXMub3B0cy51c2VOZXdXREEpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53ZGEucXVpdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIERFVklDRV9DT05ORUNUSU9OU19GQUNUT1JZLnJlbGVhc2VDb25uZWN0aW9uKHRoaXMub3B0cy51ZGlkKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVDb21tYW5kIChjbWQsIC4uLmFyZ3MpIHtcbiAgICBsb2cuZGVidWcoYEV4ZWN1dGluZyBjb21tYW5kICcke2NtZH0nYCk7XG5cbiAgICBpZiAoY21kID09PSAncmVjZWl2ZUFzeW5jUmVzcG9uc2UnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZWNlaXZlQXN5bmNSZXNwb25zZSguLi5hcmdzKTtcbiAgICB9XG4gICAgLy8gVE9ETzogb25jZSB0aGlzIGZpeCBnZXRzIGludG8gYmFzZSBkcml2ZXIgcmVtb3ZlIGZyb20gaGVyZVxuICAgIGlmIChjbWQgPT09ICdnZXRTdGF0dXMnKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmV4ZWN1dGVDb21tYW5kKGNtZCwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBjb25maWd1cmVBcHAgKCkge1xuICAgIGZ1bmN0aW9uIGFwcElzUGFja2FnZU9yQnVuZGxlIChhcHApIHtcbiAgICAgIHJldHVybiAoL14oW2EtekEtWjAtOVxcLV9dK1xcLlthLXpBLVowLTlcXC1fXSspKyQvKS50ZXN0KGFwcCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGFwcCBuYW1lIGlzIGEgYnVuZGxlSWQgYXNzaWduIGl0IHRvIHRoZSBidW5kbGVJZCBwcm9wZXJ0eVxuICAgIGlmICghdGhpcy5vcHRzLmJ1bmRsZUlkICYmIGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5hcHApKSB7XG4gICAgICB0aGlzLm9wdHMuYnVuZGxlSWQgPSB0aGlzLm9wdHMuYXBwO1xuICAgICAgdGhpcy5vcHRzLmFwcCA9ICcnO1xuICAgIH1cbiAgICAvLyB3ZSBoYXZlIGEgYnVuZGxlIElELCBidXQgbm8gYXBwLCBvciBhcHAgaXMgYWxzbyBhIGJ1bmRsZVxuICAgIGlmICgodGhpcy5vcHRzLmJ1bmRsZUlkICYmIGFwcElzUGFja2FnZU9yQnVuZGxlKHRoaXMub3B0cy5idW5kbGVJZCkpICYmXG4gICAgICAgICh0aGlzLm9wdHMuYXBwID09PSAnJyB8fCBhcHBJc1BhY2thZ2VPckJ1bmRsZSh0aGlzLm9wdHMuYXBwKSkpIHtcbiAgICAgIGxvZy5kZWJ1ZygnQXBwIGlzIGFuIGlPUyBidW5kbGUsIHdpbGwgYXR0ZW1wdCB0byBydW4gYXMgcHJlLWV4aXN0aW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgZm9yIHN1cHBvcnRlZCBidWlsZC1pbiBhcHBzXG4gICAgc3dpdGNoIChfLnRvTG93ZXIodGhpcy5vcHRzLmFwcCkpIHtcbiAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgdGhpcy5vcHRzLmJ1bmRsZUlkID0gJ2NvbS5hcHBsZS5QcmVmZXJlbmNlcyc7XG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdjYWxlbmRhcic6XG4gICAgICAgIHRoaXMub3B0cy5idW5kbGVJZCA9ICdjb20uYXBwbGUubW9iaWxlY2FsJztcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gZG93bmxvYWQgaWYgbmVjZXNzYXJ5XG4gICAgICB0aGlzLm9wdHMuYXBwID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcCh0aGlzLm9wdHMuYXBwLCAnLmFwcCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yKGVycik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBhcHA6ICR7dGhpcy5vcHRzLmFwcH0uIGAgK1xuICAgICAgICBgQXBwIHBhdGhzIG5lZWQgdG8gYmUgYWJzb2x1dGUgb3IgYW4gVVJMIHRvIGEgY29tcHJlc3NlZCBhcHAgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZXRlcm1pbmVEZXZpY2UgKCkge1xuICAgIC8vIGluIHRoZSBvbmUgY2FzZSB3aGVyZSB3ZSBjcmVhdGUgYSBzaW0sIHdlIHdpbGwgc2V0IHRoaXMgc3RhdGVcbiAgICB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltID0gZmFsc2U7XG5cbiAgICAvLyBpZiB3ZSBnZXQgZ2VuZXJpYyBuYW1lcywgdHJhbnNsYXRlIHRoZW1cbiAgICB0aGlzLm9wdHMuZGV2aWNlTmFtZSA9IHRyYW5zbGF0ZURldmljZU5hbWUodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiwgdGhpcy5vcHRzLmRldmljZU5hbWUpO1xuXG4gICAgY29uc3Qgc2V0dXBWZXJzaW9uQ2FwcyA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMub3B0cy5pb3NTZGtWZXJzaW9uID0gYXdhaXQgZ2V0QW5kQ2hlY2tJb3NTZGtWZXJzaW9uKCk7XG4gICAgICBsb2cuaW5mbyhgaU9TIFNESyBWZXJzaW9uIHNldCB0byAnJHt0aGlzLm9wdHMuaW9zU2RrVmVyc2lvbn0nYCk7XG4gICAgICBpZiAoIXRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gJiYgdGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24pIHtcbiAgICAgICAgbG9nLmluZm8oYE5vIHBsYXRmb3JtVmVyc2lvbiBzcGVjaWZpZWQuIFVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBYY29kZSBzdXBwb3J0czogJyR7dGhpcy5vcHRzLmlvc1Nka1ZlcnNpb259Jy4gYCArXG4gICAgICAgICAgYFRoaXMgbWF5IGNhdXNlIHByb2JsZW1zIGlmIGEgc2ltdWxhdG9yIGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIHBsYXRmb3JtIHZlcnNpb24uYCk7XG4gICAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24odGhpcy5vcHRzLmlvc1Nka1ZlcnNpb24pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRzLnVkaWQpIHtcbiAgICAgIGlmICh0aGlzLm9wdHMudWRpZC50b0xvd2VyQ2FzZSgpID09PSAnYXV0bycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLm9wdHMudWRpZCA9IGF3YWl0IGRldGVjdFVkaWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gVHJ5aW5nIHRvIGZpbmQgbWF0Y2hpbmcgVURJRCBmb3IgU2ltdWxhdG9yXG4gICAgICAgICAgbG9nLndhcm4oYENhbm5vdCBkZXRlY3QgYW55IGNvbm5lY3RlZCByZWFsIGRldmljZXMuIEZhbGxpbmcgYmFjayB0byBTaW11bGF0b3IuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IGdldEV4aXN0aW5nU2ltKHRoaXMub3B0cyk7XG4gICAgICAgICAgaWYgKCFkZXZpY2UpIHtcbiAgICAgICAgICAgIC8vIE5vIG1hdGNoaW5nIFNpbXVsYXRvciBpcyBmb3VuZC4gVGhyb3cgYW4gZXJyb3JcbiAgICAgICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgZGV0ZWN0IHVkaWQgZm9yICR7dGhpcy5vcHRzLmRldmljZU5hbWV9IFNpbXVsYXRvciBydW5uaW5nIGlPUyAke3RoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb259YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWF0Y2hpbmcgU2ltdWxhdG9yIGV4aXN0cyBhbmQgaXMgZm91bmQuIFVzZSBpdFxuICAgICAgICAgIHRoaXMub3B0cy51ZGlkID0gZGV2aWNlLnVkaWQ7XG4gICAgICAgICAgY29uc3QgZGV2aWNlUGxhdGZvcm0gPSBub3JtYWxpemVQbGF0Zm9ybVZlcnNpb24oYXdhaXQgZGV2aWNlLmdldFBsYXRmb3JtVmVyc2lvbigpKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRzLnBsYXRmb3JtVmVyc2lvbiAhPT0gZGV2aWNlUGxhdGZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMub3B0cy5wbGF0Zm9ybVZlcnNpb24gPSBkZXZpY2VQbGF0Zm9ybTtcbiAgICAgICAgICAgIGxvZy5pbmZvKGBTZXQgcGxhdGZvcm1WZXJzaW9uIHRvICcke2RldmljZVBsYXRmb3JtfScgdG8gbWF0Y2ggdGhlIGRldmljZSB3aXRoIGdpdmVuIFVESURgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgc2V0dXBWZXJzaW9uQ2FwcygpO1xuICAgICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogZGV2aWNlLnVkaWR9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtYWtlIHN1cmUgaXQgaXMgYSBjb25uZWN0ZWQgZGV2aWNlLiBJZiBub3QsIHRoZSB1ZGlkIHBhc3NlZCBpbiBpcyBpbnZhbGlkXG4gICAgICAgIGNvbnN0IGRldmljZXMgPSBhd2FpdCBnZXRDb25uZWN0ZWREZXZpY2VzKCk7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQXZhaWxhYmxlIGRldmljZXM6ICR7ZGV2aWNlcy5qb2luKCcsICcpfWApO1xuICAgICAgICBpZiAoIWRldmljZXMuaW5jbHVkZXModGhpcy5vcHRzLnVkaWQpKSB7XG4gICAgICAgICAgLy8gY2hlY2sgZm9yIGEgcGFydGljdWxhciBzaW11bGF0b3JcbiAgICAgICAgICBsb2cuZGVidWcoYE5vIHJlYWwgZGV2aWNlIHdpdGggdWRpZCAnJHt0aGlzLm9wdHMudWRpZH0nLiBMb29raW5nIGZvciBzaW11bGF0b3JgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0U2ltdWxhdG9yKHRoaXMub3B0cy51ZGlkLCB7XG4gICAgICAgICAgICAgIGRldmljZXNTZXRQYXRoOiB0aGlzLm9wdHMuc2ltdWxhdG9yRGV2aWNlc1NldFBhdGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiBmYWxzZSwgdWRpZDogdGhpcy5vcHRzLnVkaWR9O1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRldmljZSBvciBzaW11bGF0b3IgVURJRDogJyR7dGhpcy5vcHRzLnVkaWR9J2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCBnZXRSZWFsRGV2aWNlT2JqKHRoaXMub3B0cy51ZGlkKTtcbiAgICAgIHJldHVybiB7ZGV2aWNlLCByZWFsRGV2aWNlOiB0cnVlLCB1ZGlkOiB0aGlzLm9wdHMudWRpZH07XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGtub3cgZm9yIHN1cmUgdGhlIGRldmljZSB3aWxsIGJlIGEgU2ltdWxhdG9yXG4gICAgYXdhaXQgc2V0dXBWZXJzaW9uQ2FwcygpO1xuICAgIGlmICh0aGlzLm9wdHMuZW5mb3JjZUZyZXNoU2ltdWxhdG9yQ3JlYXRpb24pIHtcbiAgICAgIGxvZy5kZWJ1ZyhgTmV3IHNpbXVsYXRvciBpcyByZXF1ZXN0ZWQuIElmIHRoaXMgaXMgbm90IHdhbnRlZCwgc2V0ICdlbmZvcmNlRnJlc2hTaW11bGF0b3JDcmVhdGlvbicgY2FwYWJpbGl0eSB0byBmYWxzZWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IHNpbXVsYXRvciB0byB1c2UsIGdpdmVuIHRoZSBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgZ2V0RXhpc3RpbmdTaW0odGhpcy5vcHRzKTtcblxuICAgICAgLy8gY2hlY2sgZm9yIGFuIGV4aXN0aW5nIHNpbXVsYXRvclxuICAgICAgaWYgKGRldmljZSkge1xuICAgICAgICByZXR1cm4ge2RldmljZSwgcmVhbERldmljZTogZmFsc2UsIHVkaWQ6IGRldmljZS51ZGlkfTtcbiAgICAgIH1cblxuICAgICAgbG9nLmluZm8oJ1NpbXVsYXRvciB1ZGlkIG5vdCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vIG5vIGRldmljZSBvZiB0aGlzIHR5cGUgZXhpc3RzLCBvciB0aGV5IHJlcXVlc3QgbmV3IHNpbSwgc28gY3JlYXRlIG9uZVxuICAgIGxvZy5pbmZvKCdVc2luZyBkZXNpcmVkIGNhcHMgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvcicpO1xuICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMuY3JlYXRlU2ltKCk7XG4gICAgcmV0dXJuIHtkZXZpY2UsIHJlYWxEZXZpY2U6IGZhbHNlLCB1ZGlkOiBkZXZpY2UudWRpZH07XG4gIH1cblxuICBhc3luYyBzdGFydFNpbSAoKSB7XG4gICAgY29uc3QgcnVuT3B0cyA9IHtcbiAgICAgIHNjYWxlRmFjdG9yOiB0aGlzLm9wdHMuc2NhbGVGYWN0b3IsXG4gICAgICBjb25uZWN0SGFyZHdhcmVLZXlib2FyZDogISF0aGlzLm9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQsXG4gICAgICBwYXN0ZWJvYXJkQXV0b21hdGljU3luYzogdGhpcy5vcHRzLnNpbXVsYXRvclBhc3RlYm9hcmRBdXRvbWF0aWNTeW5jID8/ICdvZmYnLFxuICAgICAgaXNIZWFkbGVzczogISF0aGlzLm9wdHMuaXNIZWFkbGVzcyxcbiAgICAgIHRyYWNlUG9pbnRlcjogdGhpcy5vcHRzLnNpbXVsYXRvclRyYWNlUG9pbnRlcixcbiAgICAgIGRldmljZVByZWZlcmVuY2VzOiB7fSxcbiAgICB9O1xuXG4gICAgLy8gYWRkIHRoZSB3aW5kb3cgY2VudGVyLCBpZiBpdCBpcyBzcGVjaWZpZWRcbiAgICBpZiAodGhpcy5vcHRzLlNpbXVsYXRvcldpbmRvd0NlbnRlcikge1xuICAgICAgcnVuT3B0cy5kZXZpY2VQcmVmZXJlbmNlcy5TaW11bGF0b3JXaW5kb3dDZW50ZXIgPSB0aGlzLm9wdHMuU2ltdWxhdG9yV2luZG93Q2VudGVyO1xuICAgIH1cblxuICAgIGlmIChfLmlzSW50ZWdlcih0aGlzLm9wdHMuc2ltdWxhdG9yU3RhcnR1cFRpbWVvdXQpKSB7XG4gICAgICBydW5PcHRzLnN0YXJ0dXBUaW1lb3V0ID0gdGhpcy5vcHRzLnNpbXVsYXRvclN0YXJ0dXBUaW1lb3V0O1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgdG8gd29ya2Fyb3VuZCBYQ1Rlc3QgYnVnIGFib3V0IGNoYW5naW5nIFNpbXVsYXRvclxuICAgIC8vIG9yaWVudGF0aW9uIGlzIG5vdCBzeW5jaHJvbml6ZWQgdG8gdGhlIGFjdHVhbCB3aW5kb3cgb3JpZW50YXRpb25cbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IF8uaXNTdHJpbmcodGhpcy5vcHRzLm9yaWVudGF0aW9uKSAmJiB0aGlzLm9wdHMub3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gICAgICBjYXNlICdMQU5EU0NBUEUnOlxuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd09yaWVudGF0aW9uID0gJ0xhbmRzY2FwZUxlZnQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSA5MDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdQT1JUUkFJVCc6XG4gICAgICAgIHJ1bk9wdHMuZGV2aWNlUHJlZmVyZW5jZXMuU2ltdWxhdG9yV2luZG93T3JpZW50YXRpb24gPSAnUG9ydHJhaXQnO1xuICAgICAgICBydW5PcHRzLmRldmljZVByZWZlcmVuY2VzLlNpbXVsYXRvcldpbmRvd1JvdGF0aW9uQW5nbGUgPSAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLm9wdHMuZGV2aWNlLnJ1bihydW5PcHRzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNpbSAoKSB7XG4gICAgdGhpcy5saWZlY3ljbGVEYXRhLmNyZWF0ZVNpbSA9IHRydWU7XG5cbiAgICAvLyBHZXQgcGxhdGZvcm0gbmFtZSBmcm9tIGNvbnN0IHNpbmNlIGl0IG11c3QgYmUgY2FzZSBzZW5zaXRpdmUgdG8gY3JlYXRlIGEgbmV3IHNpbXVsYXRvclxuICAgIGNvbnN0IHBsYXRmb3JtTmFtZSA9IHRoaXMuaXNUdk9TKCkgPyBQTEFURk9STV9OQU1FX1RWT1MgOiBQTEFURk9STV9OQU1FX0lPUztcblxuICAgIC8vIGNyZWF0ZSBzaW0gZm9yIGNhcHNcbiAgICBjb25zdCBzaW0gPSBhd2FpdCBjcmVhdGVTaW0odGhpcy5vcHRzLCBwbGF0Zm9ybU5hbWUpO1xuICAgIGxvZy5pbmZvKGBDcmVhdGVkIHNpbXVsYXRvciB3aXRoIHVkaWQgJyR7c2ltLnVkaWR9Jy5gKTtcblxuICAgIHJldHVybiBzaW07XG4gIH1cblxuICBhc3luYyBsYXVuY2hBcHAgKCkge1xuICAgIGNvbnN0IEFQUF9MQVVOQ0hfVElNRU9VVCA9IDIwICogMTAwMDtcblxuICAgIHRoaXMubG9nRXZlbnQoJ2FwcExhdW5jaEF0dGVtcHRlZCcpO1xuICAgIGF3YWl0IHRoaXMub3B0cy5kZXZpY2Uuc2ltY3RsLmxhdW5jaEFwcCh0aGlzLm9wdHMuYnVuZGxlSWQpO1xuXG4gICAgbGV0IGNoZWNrU3RhdHVzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9zdGF0dXMnLCAnR0VUJyk7XG4gICAgICBsZXQgY3VycmVudEFwcCA9IHJlc3BvbnNlLmN1cnJlbnRBcHAuYnVuZGxlSUQ7XG4gICAgICBpZiAoY3VycmVudEFwcCAhPT0gdGhpcy5vcHRzLmJ1bmRsZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm9wdHMuYnVuZGxlSWR9IG5vdCBpbiBmb3JlZ3JvdW5kLiAke2N1cnJlbnRBcHB9IGlzIGluIGZvcmVncm91bmRgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbG9nLmluZm8oYFdhaXRpbmcgZm9yICcke3RoaXMub3B0cy5idW5kbGVJZH0nIHRvIGJlIGluIGZvcmVncm91bmRgKTtcbiAgICBsZXQgcmV0cmllcyA9IHBhcnNlSW50KEFQUF9MQVVOQ0hfVElNRU9VVCAvIDIwMCwgMTApO1xuICAgIGF3YWl0IHJldHJ5SW50ZXJ2YWwocmV0cmllcywgMjAwLCBjaGVja1N0YXR1cyk7XG4gICAgbG9nLmluZm8oYCR7dGhpcy5vcHRzLmJ1bmRsZUlkfSBpcyBpbiBmb3JlZ3JvdW5kYCk7XG4gICAgdGhpcy5sb2dFdmVudCgnYXBwTGF1bmNoZWQnKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0V2RhU2Vzc2lvbiAoYnVuZGxlSWQsIHByb2Nlc3NBcmd1bWVudHMpIHtcbiAgICBjb25zdCBhcmdzID0gcHJvY2Vzc0FyZ3VtZW50cyA/IChwcm9jZXNzQXJndW1lbnRzLmFyZ3MgfHwgW10pIDogW107XG4gICAgaWYgKCFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5hcmdzIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShhcmdzKX0gaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICBjb25zdCBlbnYgPSBwcm9jZXNzQXJndW1lbnRzID8gKHByb2Nlc3NBcmd1bWVudHMuZW52IHx8IHt9KSA6IHt9O1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGVudikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJvY2Vzc0FyZ3VtZW50cy5lbnYgY2FwYWJpbGl0eSBpcyBleHBlY3RlZCB0byBiZSBhIGRpY3Rpb25hcnkuIGAgK1xuICAgICAgICBgJHtKU09OLnN0cmluZ2lmeShlbnYpfSBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmxhbmd1YWdlKSkge1xuICAgICAgYXJncy5wdXNoKCctQXBwbGVMYW5ndWFnZXMnLCBgKCR7dGhpcy5vcHRzLmxhbmd1YWdlfSlgKTtcbiAgICAgIGFyZ3MucHVzaCgnLU5TTGFuZ3VhZ2VzJywgYCgke3RoaXMub3B0cy5sYW5ndWFnZX0pYCk7XG4gICAgfVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHRoaXMub3B0cy5sb2NhbGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1BcHBsZUxvY2FsZScsIHRoaXMub3B0cy5sb2NhbGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMubm9SZXNldCkge1xuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCkpIHtcbiAgICAgICAgdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKF8uaXNOaWwodGhpcy5vcHRzLmZvcmNlQXBwTGF1bmNoKSkge1xuICAgICAgICB0aGlzLm9wdHMuZm9yY2VBcHBMYXVuY2ggPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3ZGFDYXBzID0ge1xuICAgICAgYnVuZGxlSWQ6IHRoaXMub3B0cy5hdXRvTGF1bmNoID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGJ1bmRsZUlkLFxuICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgICAgZW52aXJvbm1lbnQ6IGVudixcbiAgICAgIGV2ZW50bG9vcElkbGVEZWxheVNlYzogdGhpcy5vcHRzLndkYUV2ZW50bG9vcElkbGVEZWxheSA/PyAwLFxuICAgICAgc2hvdWxkV2FpdEZvclF1aWVzY2VuY2U6IHRoaXMub3B0cy53YWl0Rm9yUXVpZXNjZW5jZSA/PyB0cnVlLFxuICAgICAgc2hvdWxkVXNlVGVzdE1hbmFnZXJGb3JWaXNpYmlsaXR5RGV0ZWN0aW9uOiB0aGlzLm9wdHMuc2ltcGxlSXNWaXNpYmxlQ2hlY2sgPz8gZmFsc2UsXG4gICAgICBtYXhUeXBpbmdGcmVxdWVuY3k6IHRoaXMub3B0cy5tYXhUeXBpbmdGcmVxdWVuY3kgPz8gNjAsXG4gICAgICBzaG91bGRVc2VTaW5nbGV0b25UZXN0TWFuYWdlcjogdGhpcy5vcHRzLnNob3VsZFVzZVNpbmdsZXRvblRlc3RNYW5hZ2VyID8/IHRydWUsXG4gICAgICB3YWl0Rm9ySWRsZVRpbWVvdXQ6IHRoaXMub3B0cy53YWl0Rm9ySWRsZVRpbWVvdXQsXG4gICAgICBzaG91bGRVc2VDb21wYWN0UmVzcG9uc2VzOiB0aGlzLm9wdHMuc2hvdWxkVXNlQ29tcGFjdFJlc3BvbnNlcyxcbiAgICAgIGVsZW1lbnRSZXNwb25zZUZpZWxkczogdGhpcy5vcHRzLmVsZW1lbnRSZXNwb25zZUZpZWxkcyxcbiAgICAgIGRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90czogdGhpcy5vcHRzLmRpc2FibGVBdXRvbWF0aWNTY3JlZW5zaG90cyxcbiAgICAgIHNob3VsZFRlcm1pbmF0ZUFwcDogdGhpcy5vcHRzLnNob3VsZFRlcm1pbmF0ZUFwcCA/PyB0cnVlLFxuICAgICAgZm9yY2VBcHBMYXVuY2g6IHRoaXMub3B0cy5mb3JjZUFwcExhdW5jaCA/PyB0cnVlLFxuICAgICAgdXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5OiB0aGlzLm9wdHMudXNlTmF0aXZlQ2FjaGluZ1N0cmF0ZWd5ID8/IHRydWUsXG4gICAgICBmb3JjZVNpbXVsYXRvclNvZnR3YXJlS2V5Ym9hcmRQcmVzZW5jZTogdGhpcy5vcHRzLmZvcmNlU2ltdWxhdG9yU29mdHdhcmVLZXlib2FyZFByZXNlbmNlXG4gICAgICAgID8/ICh0aGlzLm9wdHMuY29ubmVjdEhhcmR3YXJlS2V5Ym9hcmQgPT09IHRydWUgPyBmYWxzZSA6IHRydWUpLFxuICAgIH07XG4gICAgaWYgKHRoaXMub3B0cy5hdXRvQWNjZXB0QWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdhY2NlcHQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRzLmF1dG9EaXNtaXNzQWxlcnRzKSB7XG4gICAgICB3ZGFDYXBzLmRlZmF1bHRBbGVydEFjdGlvbiA9ICdkaXNtaXNzJztcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnByb3h5Q29tbWFuZCgnL3Nlc3Npb24nLCAnUE9TVCcsIHtcbiAgICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgICBmaXJzdE1hdGNoOiBbd2RhQ2Fwc10sXG4gICAgICAgIGFsd2F5c01hdGNoOiB7fSxcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIFByb3h5IG1ldGhvZHMgZnJvbSBCYXNlRHJpdmVyXG4gIHByb3h5QWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUFjdGl2ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0ICgpIHtcbiAgICBpZiAodGhpcy5pc1dlYnZpZXcoKSkge1xuICAgICAgcmV0dXJuIE5PX1BST1hZX1dFQl9MSVNUO1xuICAgIH1cbiAgICByZXR1cm4gTk9fUFJPWFlfTkFUSVZFX0xJU1Q7XG4gIH1cblxuICBjYW5Qcm94eSAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc1NhZmFyaSAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zYWZhcmk7XG4gIH1cblxuICBpc1JlYWxEZXZpY2UgKCkge1xuICAgIHJldHVybiB0aGlzLm9wdHMucmVhbERldmljZTtcbiAgfVxuXG4gIGlzU2ltdWxhdG9yICgpIHtcbiAgICByZXR1cm4gIXRoaXMub3B0cy5yZWFsRGV2aWNlO1xuICB9XG5cbiAgaXNUdk9TICgpIHtcbiAgICByZXR1cm4gXy50b0xvd2VyKHRoaXMub3B0cy5wbGF0Zm9ybU5hbWUpID09PSBfLnRvTG93ZXIoUExBVEZPUk1fTkFNRV9UVk9TKTtcbiAgfVxuXG4gIGlzV2VidmlldyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTYWZhcmkoKSB8fCB0aGlzLmlzV2ViQ29udGV4dCgpO1xuICB9XG5cbiAgdmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kgKHN0cmF0ZWd5KSB7XG4gICAgc3VwZXIudmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3koc3RyYXRlZ3ksIHRoaXMuaXNXZWJDb250ZXh0KCkpO1xuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghc3VwZXIudmFsaWRhdGVEZXNpcmVkQ2FwcyhjYXBzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBvbmUgb2YgYGFwcGAgb3IgYGJ1bmRsZUlkYFxuICAgIGlmIChfLnRvTG93ZXIoY2Fwcy5icm93c2VyTmFtZSkgIT09ICdzYWZhcmknICYmICFjYXBzLmFwcCAmJiAhY2Fwcy5idW5kbGVJZCkge1xuICAgICAgbG9nLmluZm8oJ1RoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBpbmNsdWRlIG5laXRoZXIgYW4gYXBwIG5vciBhIGJ1bmRsZUlkLiAnICtcbiAgICAgICAgJ1dlYkRyaXZlckFnZW50IHdpbGwgYmUgc3RhcnRlZCB3aXRob3V0IHRoZSBkZWZhdWx0IGFwcCcpO1xuICAgIH1cblxuICAgIGlmICghdXRpbC5jb2VyY2VWZXJzaW9uKGNhcHMucGxhdGZvcm1WZXJzaW9uLCBmYWxzZSkpIHtcbiAgICAgIGxvZy53YXJuKGAncGxhdGZvcm1WZXJzaW9uJyBjYXBhYmlsaXR5ICgnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nKSBpcyBub3QgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGBDb25zaWRlciBmaXhpbmcgaXQgb3IgYmUgcmVhZHkgdG8gZXhwZXJpZW5jZSBhbiBpbmNvbnNpc3RlbnQgZHJpdmVyIGJlaGF2aW9yLmApO1xuICAgIH1cblxuICAgIGxldCB2ZXJpZnlQcm9jZXNzQXJndW1lbnQgPSAocHJvY2Vzc0FyZ3VtZW50cykgPT4ge1xuICAgICAgY29uc3Qge2FyZ3MsIGVudn0gPSBwcm9jZXNzQXJndW1lbnRzO1xuICAgICAgaWYgKCFfLmlzTmlsKGFyZ3MpICYmICFfLmlzQXJyYXkoYXJncykpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coJ3Byb2Nlc3NBcmd1bWVudHMuYXJncyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgICAgIH1cbiAgICAgIGlmICghXy5pc05pbChlbnYpICYmICFfLmlzUGxhaW5PYmplY3QoZW52KSkge1xuICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdygncHJvY2Vzc0FyZ3VtZW50cy5lbnYgbXVzdCBiZSBhbiBvYmplY3QgPGtleSx2YWx1ZT4gcGFpciB7YTpiLCBjOmR9Jyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIGBwcm9jZXNzQXJndW1lbnRzYCBzaG91bGQgYmUgSlNPTiBzdHJpbmcgb3IgYW4gb2JqZWN0IHdpdGggYXJndW1lbnRzIGFuZC8gZW52aXJvbm1lbnQgZGV0YWlsc1xuICAgIGlmIChjYXBzLnByb2Nlc3NBcmd1bWVudHMpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKGNhcHMucHJvY2Vzc0FyZ3VtZW50cykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyB0cnkgdG8gcGFyc2UgdGhlIHN0cmluZyBhcyBKU09OXG4gICAgICAgICAgY2Fwcy5wcm9jZXNzQXJndW1lbnRzID0gSlNPTi5wYXJzZShjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICAgIHZlcmlmeVByb2Nlc3NBcmd1bWVudChjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgcHJvY2Vzc0FyZ3VtZW50cyBtdXN0IGJlIGEgSlNPTiBmb3JtYXQgb3IgYW4gb2JqZWN0IHdpdGggZm9ybWF0IHthcmdzIDogW10sIGVudiA6IHthOmIsIGM6ZH19LiBgICtcbiAgICAgICAgICAgIGBCb3RoIGVudmlyb25tZW50IGFuZCBhcmd1bWVudCBjYW4gYmUgbnVsbC4gRXJyb3I6ICR7ZXJyfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF8uaXNQbGFpbk9iamVjdChjYXBzLnByb2Nlc3NBcmd1bWVudHMpKSB7XG4gICAgICAgIHZlcmlmeVByb2Nlc3NBcmd1bWVudChjYXBzLnByb2Nlc3NBcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdwcm9jZXNzQXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBvciBhIHN0cmluZyBKU09OIG9iamVjdCB3aXRoIGZvcm1hdCB7YXJncyA6IFtdLCBlbnYgOiB7YTpiLCBjOmR9fS4gYCArXG4gICAgICAgICAgYEJvdGggZW52aXJvbm1lbnQgYW5kIGFyZ3VtZW50IGNhbiBiZSBudWxsLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoZXJlIGlzIG5vIHBvaW50IGluIGhhdmluZyBga2V5Y2hhaW5QYXRoYCB3aXRob3V0IGBrZXljaGFpblBhc3N3b3JkYFxuICAgIGlmICgoY2Fwcy5rZXljaGFpblBhdGggJiYgIWNhcHMua2V5Y2hhaW5QYXNzd29yZCkgfHwgKCFjYXBzLmtleWNoYWluUGF0aCAmJiBjYXBzLmtleWNoYWluUGFzc3dvcmQpKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgSWYgJ2tleWNoYWluUGF0aCcgaXMgc2V0LCAna2V5Y2hhaW5QYXNzd29yZCcgbXVzdCBhbHNvIGJlIHNldCAoYW5kIHZpY2UgdmVyc2EpLmApO1xuICAgIH1cblxuICAgIC8vIGByZXNldE9uU2Vzc2lvblN0YXJ0T25seWAgc2hvdWxkIGJlIHNldCB0byB0cnVlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkgPSAhdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMucmVzZXRPblNlc3Npb25TdGFydE9ubHkpIHx8IHRoaXMub3B0cy5yZXNldE9uU2Vzc2lvblN0YXJ0T25seTtcbiAgICB0aGlzLm9wdHMudXNlTmV3V0RBID0gdXRpbC5oYXNWYWx1ZSh0aGlzLm9wdHMudXNlTmV3V0RBKSA/IHRoaXMub3B0cy51c2VOZXdXREEgOiBmYWxzZTtcblxuICAgIGlmIChjYXBzLmNvbW1hbmRUaW1lb3V0cykge1xuICAgICAgY2Fwcy5jb21tYW5kVGltZW91dHMgPSBub3JtYWxpemVDb21tYW5kVGltZW91dHMoY2Fwcy5jb21tYW5kVGltZW91dHMpO1xuICAgIH1cblxuICAgIGlmIChfLmlzU3RyaW5nKGNhcHMud2ViRHJpdmVyQWdlbnRVcmwpKSB7XG4gICAgICBjb25zdCB7cHJvdG9jb2wsIGhvc3R9ID0gdXJsLnBhcnNlKGNhcHMud2ViRHJpdmVyQWdlbnRVcmwpO1xuICAgICAgaWYgKF8uaXNFbXB0eShwcm90b2NvbCkgfHwgXy5pc0VtcHR5KGhvc3QpKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnd2ViRHJpdmVyQWdlbnRVcmwnIGNhcGFiaWxpdHkgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhIHZhbGlkIFdlYkRyaXZlckFnZW50IHNlcnZlciBVUkwuIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgJyR7Y2Fwcy53ZWJEcml2ZXJBZ2VudFVybH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2Fwcy5icm93c2VyTmFtZSkge1xuICAgICAgaWYgKGNhcHMuYnVuZGxlSWQpIHtcbiAgICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdicm93c2VyTmFtZScgY2Fubm90IGJlIHNldCB0b2dldGhlciB3aXRoICdidW5kbGVJZCcgY2FwYWJpbGl0eWApO1xuICAgICAgfVxuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXNcbiAgICAgIC8vIGlzIGNvbW1vbiB3aXRoIHNlbGVuaXVtIGdyaWRcbiAgICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgICBsb2cud2FybihgVGhlIGNhcGFiaWxpdGllcyBzaG91bGQgZ2VuZXJhbGx5IG5vdCBpbmNsdWRlIGJvdGggYW4gJ2FwcCcgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYXBzLnBlcm1pc3Npb25zKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKGNvbnN0IFtidW5kbGVJZCwgcGVybXNdIG9mIF8udG9QYWlycyhKU09OLnBhcnNlKGNhcHMucGVybWlzc2lvbnMpKSkge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhidW5kbGVJZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7SlNPTi5zdHJpbmdpZnkoYnVuZGxlSWQpfScgbXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChwZXJtcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7SlNPTi5zdHJpbmdpZnkocGVybXMpfScgbXVzdCBiZSBhIEpTT04gb2JqZWN0YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGAnJHtjYXBzLnBlcm1pc3Npb25zfScgaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBvYmplY3Qgd2l0aCBmb3JtYXQgYCArXG4gICAgICAgICAgYHtcIjxidW5kbGVJZDE+XCI6IHtcIjxzZXJ2aWNlTmFtZTE+XCI6IFwiPHNlcnZpY2VTdGF0dXMxPlwiLCAuLi59LCAuLi59LiBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhcHMucGxhdGZvcm1WZXJzaW9uICYmICF1dGlsLmNvZXJjZVZlcnNpb24oY2Fwcy5wbGF0Zm9ybVZlcnNpb24sIGZhbHNlKSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYCdwbGF0Zm9ybVZlcnNpb24nIG11c3QgYmUgYSB2YWxpZCB2ZXJzaW9uIG51bWJlci4gYCArXG4gICAgICAgIGAnJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn0nIGlzIGdpdmVuIGluc3RlYWQuYCk7XG4gICAgfVxuXG4gICAgLy8gYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMgaXMgYW4gYXJyYXksIEpTT04gYXJyYXksIG9yIHN0cmluZ1xuICAgIGlmIChjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzKSB7XG4gICAgICBjYXBzLmFkZGl0aW9uYWxXZWJ2aWV3QnVuZGxlSWRzID0gdGhpcy5oZWxwZXJzLnBhcnNlQ2Fwc0FycmF5KGNhcHMuYWRkaXRpb25hbFdlYnZpZXdCdW5kbGVJZHMpO1xuICAgIH1cblxuICAgIC8vIGZpbmFsbHksIHJldHVybiB0cnVlIHNpbmNlIHRoZSBzdXBlcmNsYXNzIGNoZWNrIHBhc3NlZCwgYXMgZGlkIHRoaXNcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxBVVQgKCkge1xuICAgIGlmICh0aGlzLmlzU2FmYXJpKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB2ZXJpZnlBcHBsaWNhdGlvblBsYXRmb3JtKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgIGlzU2ltdWxhdG9yOiB0aGlzLmlzU2ltdWxhdG9yKCksXG4gICAgICBpc1R2T1M6IHRoaXMuaXNUdk9TKCksXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1JlYWxEZXZpY2UoKSkge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvUmVhbERldmljZSh0aGlzLm9wdHMuZGV2aWNlLCB0aGlzLm9wdHMuYXBwLCB0aGlzLm9wdHMuYnVuZGxlSWQsIHtcbiAgICAgICAgbm9SZXNldDogdGhpcy5vcHRzLm5vUmVzZXQsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMub3B0cy5hcHBQdXNoVGltZW91dCxcbiAgICAgICAgc3RyYXRlZ3k6IHRoaXMub3B0cy5hcHBJbnN0YWxsU3RyYXRlZ3ksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgaW5zdGFsbFRvU2ltdWxhdG9yKHRoaXMub3B0cy5kZXZpY2UsIHRoaXMub3B0cy5hcHAsIHRoaXMub3B0cy5idW5kbGVJZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgbmV3U2ltdWxhdG9yOiB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdHMub3RoZXJBcHBzKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RhbGxPdGhlckFwcHModGhpcy5vcHRzLm90aGVyQXBwcyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaGFzVmFsdWUodGhpcy5vcHRzLmlvc0luc3RhbGxQYXVzZSkpIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy82ODg5XG4gICAgICBsZXQgcGF1c2UgPSBwYXJzZUludCh0aGlzLm9wdHMuaW9zSW5zdGFsbFBhdXNlLCAxMCk7XG4gICAgICBsb2cuZGVidWcoYGlvc0luc3RhbGxQYXVzZSBzZXQuIFBhdXNpbmcgJHtwYXVzZX0gbXMgYmVmb3JlIGNvbnRpbnVpbmdgKTtcbiAgICAgIGF3YWl0IEIuZGVsYXkocGF1c2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluc3RhbGxPdGhlckFwcHMgKG90aGVyQXBwcykge1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpKSB7XG4gICAgICBsb2cud2FybignQ2FwYWJpbGl0eSBvdGhlckFwcHMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIFNpbXVsYXRvcnMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGFwcHNMaXN0O1xuICAgIHRyeSB7XG4gICAgICBhcHBzTGlzdCA9IHRoaXMuaGVscGVycy5wYXJzZUNhcHNBcnJheShvdGhlckFwcHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJvdGhlckFwcHNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShhcHBzTGlzdCkpIHtcbiAgICAgIGxvZy5pbmZvKGBHb3QgemVybyBhcHBzIGZyb20gJ290aGVyQXBwcycgY2FwYWJpbGl0eSB2YWx1ZS4gRG9pbmcgbm90aGluZ2ApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcFBhdGhzID0gYXdhaXQgQi5hbGwoYXBwc0xpc3QubWFwKFxuICAgICAgKGFwcCkgPT4gdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHAsICcuYXBwJylcbiAgICApKTtcbiAgICBmb3IgKGNvbnN0IG90aGVyQXBwIG9mIGFwcFBhdGhzKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsVG9TaW11bGF0b3IodGhpcy5vcHRzLmRldmljZSwgb3RoZXJBcHAsIHVuZGVmaW5lZCwge1xuICAgICAgICBub1Jlc2V0OiB0aGlzLm9wdHMubm9SZXNldCxcbiAgICAgICAgbmV3U2ltdWxhdG9yOiB0aGlzLmxpZmVjeWNsZURhdGEuY3JlYXRlU2ltLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZWR1Y2VNb3Rpb24gYXMgJ2lzRW5hYmxlZCcgb25seSB3aGVuIHRoZSBjYXBhYmlsaXRpZXMgaGFzICdyZWR1Y2VNb3Rpb24nXG4gICAqIFRoZSBjYWxsIGlzIGlnbm9yZWQgZm9yIHJlYWwgZGV2aWNlcy5cbiAgICogQHBhcmFtIHs/Ym9vbGVhbn0gaXNFbmFibGVkIFdldGhlciBlbmFibGUgcmVkdWNlTW90aW9uXG4gICAqL1xuICBhc3luYyBzZXRSZWR1Y2VNb3Rpb24gKGlzRW5hYmxlZCkge1xuICAgIGlmICh0aGlzLmlzUmVhbERldmljZSgpIHx8ICFfLmlzQm9vbGVhbihpc0VuYWJsZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbG9nLmluZm8oYFNldHRpbmcgcmVkdWNlTW90aW9uIHRvICR7aXNFbmFibGVkfWApO1xuICAgIGF3YWl0IHRoaXMudXBkYXRlU2V0dGluZ3Moe3JlZHVjZU1vdGlvbjogaXNFbmFibGVkfSk7XG4gIH1cblxuICBhc3luYyBzZXRJbml0aWFsT3JpZW50YXRpb24gKG9yaWVudGF0aW9uKSB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKG9yaWVudGF0aW9uKSkge1xuICAgICAgbG9nLmluZm8oJ1NraXBwaW5nIHNldHRpbmcgb2YgdGhlIGluaXRpYWwgZGlzcGxheSBvcmllbnRhdGlvbi4gJyArXG4gICAgICAgICdTZXQgdGhlIFwib3JpZW50YXRpb25cIiBjYXBhYmlsaXR5IHRvIGVpdGhlciBcIkxBTkRTQ0FQRVwiIG9yIFwiUE9SVFJBSVRcIiwgaWYgdGhpcyBpcyBhbiB1bmRlc2lyZWQgYmVoYXZpb3IuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9yaWVudGF0aW9uID0gb3JpZW50YXRpb24udG9VcHBlckNhc2UoKTtcbiAgICBpZiAoIV8uaW5jbHVkZXMoWydMQU5EU0NBUEUnLCAnUE9SVFJBSVQnXSwgb3JpZW50YXRpb24pKSB7XG4gICAgICBsb2cuZGVidWcoYFVuYWJsZSB0byBzZXQgaW5pdGlhbCBvcmllbnRhdGlvbiB0byAnJHtvcmllbnRhdGlvbn0nYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgU2V0dGluZyBpbml0aWFsIG9yaWVudGF0aW9uIHRvICcke29yaWVudGF0aW9ufSdgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm94eUNvbW1hbmQoJy9vcmllbnRhdGlvbicsICdQT1NUJywge29yaWVudGF0aW9ufSk7XG4gICAgICB0aGlzLm9wdHMuY3VyT3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBTZXR0aW5nIGluaXRpYWwgb3JpZW50YXRpb24gZmFpbGVkIHdpdGg6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgX2dldENvbW1hbmRUaW1lb3V0IChjbWROYW1lKSB7XG4gICAgaWYgKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMpIHtcbiAgICAgIGlmIChjbWROYW1lICYmIF8uaGFzKHRoaXMub3B0cy5jb21tYW5kVGltZW91dHMsIGNtZE5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMuY29tbWFuZFRpbWVvdXRzW2NtZE5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMub3B0cy5jb21tYW5kVGltZW91dHNbREVGQVVMVF9USU1FT1VUX0tFWV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZXNzaW9uIGNhcGFiaWxpdGllcyBtZXJnZWQgd2l0aCB3aGF0IFdEQSByZXBvcnRzXG4gICAqIFRoaXMgaXMgYSBsaWJyYXJ5IGNvbW1hbmQgYnV0IG5lZWRzIHRvIGNhbGwgJ3N1cGVyJyBzbyBjYW4ndCBiZSBvblxuICAgKiBhIGhlbHBlciBvYmplY3RcbiAgICovXG4gIGFzeW5jIGdldFNlc3Npb24gKCkge1xuICAgIC8vIGNhbGwgc3VwZXIgdG8gZ2V0IGV2ZW50IHRpbWluZ3MsIGV0Yy4uLlxuICAgIGNvbnN0IGRyaXZlclNlc3Npb24gPSBhd2FpdCBzdXBlci5nZXRTZXNzaW9uKCk7XG4gICAgaWYgKCF0aGlzLndkYUNhcHMpIHtcbiAgICAgIHRoaXMud2RhQ2FwcyA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKCcvJywgJ0dFVCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZEdldERldmljZUNhcHMgPSBfLmlzQm9vbGVhbih0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvKVxuICAgICAgPyB0aGlzLm9wdHMuaW5jbHVkZURldmljZUNhcHNUb1Nlc3Npb25JbmZvXG4gICAgICA6IHRydWU7IC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBpZiAoc2hvdWxkR2V0RGV2aWNlQ2FwcyAmJiAhdGhpcy5kZXZpY2VDYXBzKSB7XG4gICAgICBjb25zdCB7c3RhdHVzQmFyU2l6ZSwgc2NhbGV9ID0gYXdhaXQgdGhpcy5nZXRTY3JlZW5JbmZvKCk7XG4gICAgICB0aGlzLmRldmljZUNhcHMgPSB7XG4gICAgICAgIHBpeGVsUmF0aW86IHNjYWxlLFxuICAgICAgICBzdGF0QmFySGVpZ2h0OiBzdGF0dXNCYXJTaXplLmhlaWdodCxcbiAgICAgICAgdmlld3BvcnRSZWN0OiBhd2FpdCB0aGlzLmdldFZpZXdwb3J0UmVjdCgpLFxuICAgICAgfTtcbiAgICB9XG4gICAgbG9nLmluZm8oJ01lcmdpbmcgV0RBIGNhcHMgb3ZlciBBcHBpdW0gY2FwcyBmb3Igc2Vzc2lvbiBkZXRhaWwgcmVzcG9uc2UnKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7dWRpZDogdGhpcy5vcHRzLnVkaWR9LCBkcml2ZXJTZXNzaW9uLFxuICAgICAgdGhpcy53ZGFDYXBzLmNhcGFiaWxpdGllcywgdGhpcy5kZXZpY2VDYXBzIHx8IHt9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0ICgpIHtcbiAgICBpZiAodGhpcy5vcHRzLm5vUmVzZXQpIHtcbiAgICAgIC8vIFRoaXMgaXMgdG8gbWFrZSBzdXJlIHJlc2V0IGhhcHBlbnMgZXZlbiBpZiBub1Jlc2V0IGlzIHNldCB0byB0cnVlXG4gICAgICBsZXQgb3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG4gICAgICBvcHRzLm5vUmVzZXQgPSBmYWxzZTtcbiAgICAgIG9wdHMuZnVsbFJlc2V0ID0gZmFsc2U7XG4gICAgICBjb25zdCBzaHV0ZG93bkhhbmRsZXIgPSB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd247XG4gICAgICB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24gPSAoKSA9PiB7fTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUmVzZXQob3B0cyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24gPSBzaHV0ZG93bkhhbmRsZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHN1cGVyLnJlc2V0KCk7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihYQ1VJVGVzdERyaXZlci5wcm90b3R5cGUsIGNvbW1hbmRzKTtcblxuZXhwb3J0IGRlZmF1bHQgWENVSVRlc3REcml2ZXI7XG5leHBvcnQgeyBYQ1VJVGVzdERyaXZlciB9O1xuIl0sImZpbGUiOiJsaWIvZHJpdmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|
package/lib/driver.js
CHANGED
|
@@ -233,10 +233,10 @@ class XCUITestDriver extends BaseDriver {
|
|
|
233
233
|
// this.cliArgs should never include anything we do not expect.
|
|
234
234
|
for (const [key, value] of Object.entries(this.cliArgs ?? {})) {
|
|
235
235
|
if (_.has(this.opts, key)) {
|
|
236
|
-
this.opts[key] = value;
|
|
237
236
|
log.info(`CLI arg '${key}' with value '${value}' overwrites value '${this.opts[key]}' sent in via caps)`);
|
|
238
237
|
didMerge = true;
|
|
239
238
|
}
|
|
239
|
+
this.opts[key] = value;
|
|
240
240
|
}
|
|
241
241
|
return didMerge;
|
|
242
242
|
}
|