appium-espresso-driver 2.15.2 → 2.15.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/build/lib/driver.js +1 -6
- package/build/lib/driver.js.map +1 -1
- package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
- package/lib/driver.js +0 -6
- package/npm-shrinkwrap.json +801 -3102
- package/package.json +3 -2
- package/scripts/print-espresso-path.js +8 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [2.15.4](https://github.com/appium/appium-espresso-driver/compare/v2.15.3...v2.15.4) (2023-02-17)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Miscellaneous Chores
|
|
5
|
+
|
|
6
|
+
* remove unused unicode caps ([#856](https://github.com/appium/appium-espresso-driver/issues/856)) ([39f66ae](https://github.com/appium/appium-espresso-driver/commit/39f66ae38320031fa6343b761b53b719f7a6a719))
|
|
7
|
+
|
|
8
|
+
## [2.15.3](https://github.com/appium/appium-espresso-driver/compare/v2.15.2...v2.15.3) (2023-02-04)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* add scripts in the package ([f8b6e9c](https://github.com/appium/appium-espresso-driver/commit/f8b6e9cd273f4e6471986c449133d8a2c71f6217))
|
|
14
|
+
|
|
1
15
|
## [2.15.2](https://github.com/appium/appium-espresso-driver/compare/v2.15.1...v2.15.2) (2023-02-04)
|
|
2
16
|
|
|
3
17
|
|
package/build/lib/driver.js
CHANGED
|
@@ -37,7 +37,6 @@ class EspressoDriver extends _driver.BaseDriver {
|
|
|
37
37
|
this.desiredCapConstraints = _desiredCaps.default;
|
|
38
38
|
this.espresso = null;
|
|
39
39
|
this.jwpProxyActive = false;
|
|
40
|
-
this.defaultIME = null;
|
|
41
40
|
this.jwpProxyAvoid = NO_PROXY;
|
|
42
41
|
this.apkStrings = {};
|
|
43
42
|
this.settings = new _driver.DeviceSettings({}, this.onSettingsUpdate.bind(this));
|
|
@@ -388,10 +387,6 @@ class EspressoDriver extends _driver.BaseDriver {
|
|
|
388
387
|
this.log.warn(`Unable to reset animation: ${err.message}`);
|
|
389
388
|
}
|
|
390
389
|
}
|
|
391
|
-
if (this.opts.unicodeKeyboard && this.opts.resetKeyboard && this.defaultIME) {
|
|
392
|
-
this.log.debug(`Resetting IME to '${this.defaultIME}'`);
|
|
393
|
-
await this.adb.setIME(this.defaultIME);
|
|
394
|
-
}
|
|
395
390
|
if (!this.isChromeSession && this.opts.appPackage && !this.opts.dontStopAppOnReset) {
|
|
396
391
|
await this.adb.forceStop(this.opts.appPackage);
|
|
397
392
|
}
|
|
@@ -454,4 +449,4 @@ for (let [cmd, fn] of _lodash.default.toPairs(_commands.default)) {
|
|
|
454
449
|
}
|
|
455
450
|
var _default = EspressoDriver;
|
|
456
451
|
exports.default = _default;
|
|
457
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiYW5kcm9pZEhlbHBlcnMiLCJTWVNURU1fUE9SVF9SQU5HRSIsIkRFVklDRV9QT1JUIiwiTk9fUFJPWFkiLCJSZWdFeHAiLCJDSFJPTUVfTk9fUFJPWFkiLCJBUEtfRVhUIiwiQUFCX0VYVCIsIlNVUFBPUlRFRF9FWFRFTlNJT05TIiwiRXNwcmVzc29Ecml2ZXIiLCJCYXNlRHJpdmVyIiwibmV3TWV0aG9kTWFwIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwic2hlbGwiLCJsb2NhdG9yU3RyYXRlZ2llcyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsImVzcHJlc3NvIiwiandwUHJveHlBY3RpdmUiLCJkZWZhdWx0SU1FIiwiandwUHJveHlBdm9pZCIsImFwa1N0cmluZ3MiLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwib25TZXR0aW5nc1VwZGF0ZSIsImJpbmQiLCJjaHJvbWVkcml2ZXIiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsImNyZWF0ZVNlc3Npb24iLCJhcmdzIiwic2Vzc2lvbklkIiwiY2FwcyIsInNlcnZlckRldGFpbHMiLCJwbGF0Zm9ybSIsIndlYlN0b3JhZ2VFbmFibGVkIiwidGFrZXNTY3JlZW5zaG90IiwiamF2YXNjcmlwdEVuYWJsZWQiLCJkYXRhYmFzZUVuYWJsZWQiLCJuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQiLCJsb2NhdGlvbkNvbnRleHRFbmFibGVkIiwid2FybmluZ3MiLCJkZXNpcmVkIiwiT2JqZWN0IiwiYXNzaWduIiwiY3VyQ29udGV4dCIsImRlZmF1bHRDb250ZXh0TmFtZSIsImRlZmF1bHRPcHRzIiwiZnVsbFJlc2V0IiwiYXV0b0xhdW5jaCIsImFkYlBvcnQiLCJERUZBVUxUX0FEQl9QT1JUIiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiXyIsImRlZmF1bHRzIiwiaXNDaHJvbWVTZXNzaW9uIiwiYXBwIiwibG9nIiwid2FybiIsImVycm9yQW5kVGhyb3ciLCJyZWJvb3QiLCJzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIiwiYWRkV2lwZURhdGFUb0F2ZEFyZ3MiLCJzeXN0ZW1Qb3J0IiwiZmluZEFQb3J0Tm90SW5Vc2UiLCJ1ZGlkIiwiZW1Qb3J0IiwiZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIiwiYWRiIiwiY3JlYXRlQURCIiwiY29uZmlndXJlQXBwIiwib25Qb3N0UHJvY2VzcyIsIm9uUG9zdENvbmZpZ3VyZUFwcCIsInN1cHBvcnRlZEV4dGVuc2lvbnMiLCJhcHBPbkRldmljZSIsImluZm8iLCJhcHBQYWNrYWdlIiwiaXNBcHBJbnN0YWxsZWQiLCJzdGFydEVzcHJlc3NvU2Vzc2lvbiIsImUiLCJkZWxldGVTZXNzaW9uIiwibWVzc2FnZSIsImVuZHNXaXRoIiwiaXNFcnJvclR5cGUiLCJlcnJvcnMiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwiZXJyIiwic3RhY2siLCJ1bnppcEFwcCIsImFwcFBhdGgiLCJ1c2VTeXN0ZW1VbnppcEVudiIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwiaXNFbXB0eSIsImluY2x1ZGVzIiwidG9Mb3dlciIsInRtcFJvb3QiLCJ0ZW1wRGlyIiwib3BlbkRpciIsInppcCIsImV4dHJhY3RBbGxUbyIsImdsb2JQYXR0ZXJuIiwibWFwIiwiZXh0IiwicmVwbGFjZSIsImpvaW4iLCJzb3J0ZWRCdW5kbGVJdGVtcyIsImZzIiwiZ2xvYiIsImN3ZCIsInN0cmljdCIsInNvcnQiLCJhIiwiYiIsInNwbGl0IiwicGF0aCIsInNlcCIsImxlbmd0aCIsInVuemlwcGVkQXBwUGF0aCIsImZpcnN0IiwiZGVidWciLCJjYWNoZWRBcHBJbmZvIiwiaXNVcmwiLCJwcmVzaWduQXBwIiwiYXBwTG9jYXRpb24iLCJub1NpZ24iLCJjaGVja0Fwa0NlcnQiLCJzaWduIiwiaGFzQXBrRXh0IiwiaGFzQWFiRXh0IiwiZXh0cmFjdFVuaXZlcnNhbEFwayIsInNob3VsZEV4dHJhY3QiLCJwYXRoSW5DYWNoZSIsImlzUmVzdWx0QXBwUGF0aEFscmVhZHlDYWNoZWQiLCJpc1BsYWluT2JqZWN0IiwicGFja2FnZUhhc2giLCJoYXNoIiwiZXhpc3RzIiwiZnVsbFBhdGgiLCJpc0FwayIsInNob3VsZFJlc3VsdEFwcFBhdGhCZUNhY2hlZCIsImlzVW56aXBwZWRBcGsiLCJyaW1yYWYiLCJkcml2ZXJEYXRhIiwiaXNFbXVsYXRvciIsImF2ZCIsImRldmljZU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJhdmREZXZpY2UiLCJhdmRBcmdzIiwidG9Mb3dlckNhc2UiLCJtYW5pZmVzdFBheWxvYWQiLCJnZXRQYWNrYWdlSW5mbyIsInZlcnNpb24iLCJnZXRBcGlMZXZlbCIsInNldEhpZGRlbkFwaVBvbGljeSIsImlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yIiwiYXBwSW5mbyIsImdldExhdW5jaEluZm8iLCJpbml0RGV2aWNlIiwiaXNBbmltYXRpb25PbiIsInNldEFuaW1hdGlvblN0YXRlIiwid2FzQW5pbWF0aW9uRW5hYmxlZCIsImN1ckRldmljZUlkIiwiZGV2aWNlVURJRCIsImluaXRFc3ByZXNzb1NlcnZlciIsImZvcndhcmRQb3J0Iiwic2tpcFVubG9jayIsInVubG9jayIsImluaXRBVVQiLCJhcHBXYWl0UGFja2FnZSIsImFwcEFjdGl2aXR5IiwicXVhbGlmeUFjdGl2aXR5TmFtZSIsImFwcFdhaXRBY3Rpdml0eSIsInN0YXJ0U2Vzc2lvbiIsIndhaXRGb3JBY3Rpdml0eSIsImFwcFdhaXREdXJhdGlvbiIsImF1dG9XZWJ2aWV3IiwiaW5pdFdlYnZpZXciLCJhZGREZXZpY2VJbmZvVG9DYXBzIiwidmlld05hbWUiLCJhbmRyb2lkQ29tbWFuZHMiLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjYWxsIiwidGltZW91dCIsImF1dG9XZWJ2aWV3VGltZW91dCIsInJldHJ5SW50ZXJ2YWwiLCJzZXRDb250ZXh0IiwiYXBpVmVyc2lvbiIsIm1hbnVmYWN0dXJlciIsIm1vZGVsIiwicmVhbERpc3BsYXlTaXplIiwiZGlzcGxheURlbnNpdHkiLCJtb2JpbGVHZXREZXZpY2VJbmZvIiwiZGV2aWNlQXBpTGV2ZWwiLCJwYXJzZUludCIsImRldmljZVNjcmVlblNpemUiLCJkZXZpY2VTY3JlZW5EZW5zaXR5IiwiZGV2aWNlTW9kZWwiLCJkZXZpY2VNYW51ZmFjdHVyZXIiLCJFc3ByZXNzb1J1bm5lciIsImhvc3QiLCJyZW1vdGVBZGJIb3N0IiwiZGV2aWNlUG9ydCIsImFwayIsInRtcERpciIsImZvcmNlRXNwcmVzc29SZWJ1aWxkIiwiZXNwcmVzc29CdWlsZENvbmZpZyIsInNob3dHcmFkbGVMb2ciLCJzZXJ2ZXJMYXVuY2hUaW1lb3V0IiwiZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0Iiwic2tpcFNlcnZlckluc3RhbGxhdGlvbiIsInVzZUtleXN0b3JlIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInByb3h5UmVxUmVzIiwicHJveHlDb21tYW5kIiwidW5pbnN0YWxsT3RoZXJQYWNrYWdlcyIsInBhcnNlQXJyYXkiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiVEVTVF9BUEtfUEtHIiwiZmFzdFJlc2V0IiwicmVzZXRBcHAiLCJza2lwVW5pbnN0YWxsIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbEFwayIsImluc3RhbGxUZXN0QXBrIiwiYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0Iiwic3RkZXJyIiwic2NyZWVuUmVjb3JkaW5nU3RvcFRhc2tzIiwiX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMiLCJzdG9wUmVjb3JkaW5nU2NyZWVuIiwibW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwibW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsIl9zY3JlZW5TdHJlYW1pbmdQcm9wcyIsIm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmciLCJyZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMiLCJzZXJ2ZXIiLCJCIiwiYWxsIiwidGFzayIsImlnbiIsInVuaWNvZGVLZXlib2FyZCIsInJlc2V0S2V5Ym9hcmQiLCJzZXRJTUUiLCJkb250U3RvcEFwcE9uUmVzZXQiLCJmb3JjZVN0b3AiLCJzdG9wTG9nY2F0IiwiYXZkTmFtZSIsImtpbGxFbXVsYXRvciIsInNldERlZmF1bHRIaWRkZW5BcGlQb2xpY3kiLCJ1bmRlZmluZWQiLCJyZW1vdmVQb3J0Rm9yd2FyZCIsImVycm9yIiwicHJveHlBY3RpdmUiLCJjYW5Qcm94eSIsImdldFByb3h5QXZvaWRMaXN0IiwiaXNOaWwiLCJuYXRpdmVXZWJTY3JlZW5zaG90IiwiaXNDaHJvbWVCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJpc1BhY2thZ2VPckJ1bmRsZSIsImNtZCIsImZuIiwidG9QYWlycyIsInByb3RvdHlwZSIsImNvbW1hbmRzIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2RyaXZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBCYXNlRHJpdmVyLCBlcnJvcnMsIGlzRXJyb3JUeXBlLCBEZXZpY2VTZXR0aW5nc30gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyBFc3ByZXNzb1J1bm5lciwgVEVTVF9BUEtfUEtHIH0gZnJvbSAnLi9lc3ByZXNzby1ydW5uZXInO1xuaW1wb3J0IHsgZnMsIHRlbXBEaXIsIHppcCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCB7IERFRkFVTFRfQURCX1BPUlQgfSBmcm9tICdhcHBpdW0tYWRiJztcbmltcG9ydCB7IGFuZHJvaWRIZWxwZXJzLCBhbmRyb2lkQ29tbWFuZHMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIH0gZnJvbSAnYXBwaXVtLWFuZHJvaWQtZHJpdmVyJztcbmltcG9ydCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgZmluZEFQb3J0Tm90SW5Vc2UgfSBmcm9tICdwb3J0c2Nhbm5lcic7XG5pbXBvcnQgeyByZXRyeUludGVydmFsIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgcXVhbGlmeUFjdGl2aXR5TmFtZSwgZ2V0UGFja2FnZUluZm8gfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IG5ld01ldGhvZE1hcCB9IGZyb20gJy4vbWV0aG9kLW1hcCc7XG5cblxuLy8gVE9ETyBtZXJnZSBvdXIgb3duIGhlbHBlcnMgb250byB0aGlzIGxhdGVyXG5jb25zdCBoZWxwZXJzID0gYW5kcm9pZEhlbHBlcnM7XG5cbi8vIFRoZSByYW5nZSBvZiBwb3J0cyB3ZSBjYW4gdXNlIG9uIHRoZSBzeXN0ZW0gZm9yIGNvbW11bmljYXRpbmcgdG8gdGhlXG4vLyBFc3ByZXNzbyBIVFRQIHNlcnZlciBvbiB0aGUgZGV2aWNlXG5jb25zdCBTWVNURU1fUE9SVF9SQU5HRSA9IFs4MzAwLCA4Mzk5XTtcblxuLy8gVGhpcyBpcyB0aGUgcG9ydCB0aGF0IHRoZSBlc3ByZXNzbyBzZXJ2ZXIgbGlzdGVucyB0byBvbiB0aGUgZGV2aWNlLiBXZSB3aWxsXG4vLyBmb3J3YXJkIG9uZSBvZiB0aGUgcG9ydHMgYWJvdmUgb24gdGhlIHN5c3RlbSB0byB0aGlzIHBvcnQgb24gdGhlIGRldmljZS5cbmNvbnN0IERFVklDRV9QT1JUID0gNjc5MTtcblxuLy8gTk9fUFJPWFkgY29udGFpbnMgdGhlIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBlc3ByZXNzbyBzZXJ2ZXIuXG4vLyBUT0RPOiAgQWRkIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBlc3ByZXNzbyBzZXJ2ZXIuXG4vLyBUT0RPOiBOZWVkIHRvIHNlZ3JlZ2F0ZSB0aGUgcGF0aHMgYmV0dGVyIHdheSB1c2luZyByZWd1bGFyIGV4cHJlc3Npb25zIHdoZXJldmVyIGFwcGxpY2FibGUuXG4vLyAoTm90IHNlZ3JlZ2F0aW5nIHJpZ2h0IGF3YXkgYmVjYXVzZSBtb3JlIHBhdGhzIHRvIGJlIGFkZGVkIGluIHRoZSBOT19QUk9YWSBsaXN0KVxuY29uc3QgTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uLyg/IS4qLyknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvY3VycmVudF9hY3Rpdml0eScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9jdXJyZW50X3BhY2thZ2UnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvZGlzcGxheV9kZW5zaXR5JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2lzX2tleWJvYXJkX3Nob3duJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3N5c3RlbV9iYXJzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3N5c3RlbV90aW1lJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc2V0dGluZ3MnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3VybCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvYmFja2dyb3VuZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvY2xvc2UnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL2xhdW5jaCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9hcHAvcmVzZXQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL3N0cmluZ3MnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vY29tcGFyZV9pbWFnZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2FjdGl2YXRlX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvYXBwX2luc3RhbGxlZCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvYXBwX3N0YXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9maW5nZXJfcHJpbnQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2dldF9jbGlwYm9hcmQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2luc3RhbGxfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9pc19sb2NrZWQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2xvY2snKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3B1bGxfZmlsZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcHVsbF9mb2xkZXInKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3B1c2hfZmlsZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvcmVtb3ZlX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2Uvc3RhcnRfYWN0aXZpdHknKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3Rlcm1pbmF0ZV9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3VubG9jaycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9nZXRQZXJmb3JtYW5jZURhdGEnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vcGVyZm9ybWFuY2VEYXRhL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2V4ZWN1dGVfZHJpdmVyJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0YXJ0X3JlY29yZGluZ19zY3JlZW4nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vc3RvcF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL2FzeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZV9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2ltZS9bXi9dKycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2xvY2F0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbmV0d29ya19jb25uZWN0aW9uJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdGltZW91dHMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG5cbiAgLy8gTUpTT05XUCBjb21tYW5kc1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cnKV0sXG5cbiAgLy8gVzNDIGNvbW1hbmRzXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nL3R5cGVzJyldLFxuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cnKV0sXG5dO1xuXG4vLyBUaGlzIGlzIGEgc2V0IG9mIG1ldGhvZHMgYW5kIHBhdGhzIHRoYXQgd2UgbmV2ZXIgd2FudCB0byBwcm94eSB0byBDaHJvbWVkcml2ZXIuXG5jb25zdCBDSFJPTUVfTk9fUFJPWFkgPSBbXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvY29udGV4dCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZWxlbWVudC9bXi9dKy9yZWN0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9vcmllbnRhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RvdWNoL211bHRpL3BlcmZvcm0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9wZXJmb3JtJyldLFxuXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIG1vYmlsZTogY29tbWFuZHMgd29ya2luZyBpbiB3ZWIgY29udGV4dFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZSQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlL3N5bmMnKV0sXG5cbiAgLy8gTUpTT05XUCBjb21tYW5kc1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cvdHlwZXMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2cnKV0sXG5cbiAgLy8gVzNDIGNvbW1hbmRzXG4gIC8vIEZvciBTZWxlbml1bSB2NCAoVzNDIGRvZXMgbm90IGhhdmUgdGhpcyByb3V0ZSlcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nL3R5cGVzJyldLFxuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zZS9sb2cnKV0sXG5dO1xuXG5cbmNvbnN0IEFQS19FWFQgPSAnLmFwayc7XG5jb25zdCBBQUJfRVhUID0gJy5hYWInO1xuY29uc3QgU1VQUE9SVEVEX0VYVEVOU0lPTlMgPSBbQVBLX0VYVCwgQUFCX0VYVF07XG5cbmNsYXNzIEVzcHJlc3NvRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG5cbiAgc3RhdGljIG5ld01ldGhvZE1hcCA9IG5ld01ldGhvZE1hcDtcblxuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9LCBzaG91bGRWYWxpZGF0ZUNhcHMgPSB0cnVlKSB7XG4gICAgLy8gYHNoZWxsYCBvdmVyd3JpdGVzIGFkYi5zaGVsbCwgc28gcmVtb3ZlXG4gICAgZGVsZXRlIG9wdHMuc2hlbGw7XG5cbiAgICBzdXBlcihvcHRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXG4gICAgICAnaWQnLFxuICAgICAgJ2NsYXNzIG5hbWUnLFxuICAgICAgJ2FjY2Vzc2liaWxpdHkgaWQnLFxuICAgIF07XG4gICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMgPSBkZXNpcmVkQ2FwQ29uc3RyYWludHM7XG4gICAgdGhpcy5lc3ByZXNzbyA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuZGVmYXVsdElNRSA9IG51bGw7XG4gICAgdGhpcy5qd3BQcm94eUF2b2lkID0gTk9fUFJPWFk7XG5cbiAgICB0aGlzLmFwa1N0cmluZ3MgPSB7fTsgLy8gbWFwIG9mIGxhbmd1YWdlIC0+IHN0cmluZ3Mgb2JqXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7fSwgdGhpcy5vblNldHRpbmdzVXBkYXRlLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5jaHJvbWVkcml2ZXIgPSBudWxsO1xuICAgIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMgPSB7fTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVE9ETyBoYW5kbGUgb3RoZXJTZXNzaW9uRGF0YSBmb3IgbXVsdGlwbGUgc2Vzc2lvbnNcbiAgICAgIGxldCBbc2Vzc2lvbklkLCBjYXBzXSA9IGF3YWl0IHN1cGVyLmNyZWF0ZVNlc3Npb24oLi4uYXJncyk7XG5cbiAgICAgIGxldCBzZXJ2ZXJEZXRhaWxzID0ge1xuICAgICAgICBwbGF0Zm9ybTogJ0xJTlVYJyxcbiAgICAgICAgd2ViU3RvcmFnZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB0YWtlc1NjcmVlbnNob3Q6IHRydWUsXG4gICAgICAgIGphdmFzY3JpcHRFbmFibGVkOiB0cnVlLFxuICAgICAgICBkYXRhYmFzZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBuZXR3b3JrQ29ubmVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGxvY2F0aW9uQ29udGV4dEVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB3YXJuaW5nczoge30sXG4gICAgICAgIGRlc2lyZWQ6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY2FwcylcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2FwcyA9IE9iamVjdC5hc3NpZ24oc2VydmVyRGV0YWlscywgdGhpcy5jYXBzKTtcblxuICAgICAgdGhpcy5jdXJDb250ZXh0ID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcblxuICAgICAgbGV0IGRlZmF1bHRPcHRzID0ge1xuICAgICAgICBmdWxsUmVzZXQ6IGZhbHNlLFxuICAgICAgICBhdXRvTGF1bmNoOiB0cnVlLFxuICAgICAgICBhZGJQb3J0OiBERUZBVUxUX0FEQl9QT1JULFxuICAgICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IDkwMDAwXG4gICAgICB9O1xuICAgICAgXy5kZWZhdWx0cyh0aGlzLm9wdHMsIGRlZmF1bHRPcHRzKTtcblxuICAgICAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgJ2Jyb3dzZXJOYW1lJyBjYXBhYmlsaXR5IHdpbGwgYmUgaWdub3JlZGApO1xuICAgICAgICAgIHRoaXMubG9nLndhcm4oYENocm9tZSBicm93c2VyIGNhbm5vdCBiZSBydW4gaW4gRXNwcmVzc28gc2Vzc2lvbnMgYmVjYXVzZSBFc3ByZXNzbyBhdXRvbWF0aW9uIGRvZXNuJ3QgYCArXG4gICAgICAgICAgICAgIGBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIENocm9tZWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENocm9tZSBicm93c2VyIHNlc3Npb25zIGNhbm5vdCBiZSBydW4gaW4gRXNwcmVzc28gYmVjYXVzZSBFc3ByZXNzbyBgICtcbiAgICAgICAgICAgIGBhdXRvbWF0aW9uIGRvZXNuJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBDaHJvbWVgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLnJlYm9vdCkge1xuICAgICAgICB0aGlzLnNldEF2ZEZyb21DYXBhYmlsaXRpZXMoY2Fwcyk7XG4gICAgICAgIHRoaXMuYWRkV2lwZURhdGFUb0F2ZEFyZ3MoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcHRzLnN5c3RlbVBvcnQgPSB0aGlzLm9wdHMuc3lzdGVtUG9ydFxuICAgICAgICB8fCBhd2FpdCBmaW5kQVBvcnROb3RJblVzZShTWVNURU1fUE9SVF9SQU5HRVswXSwgU1lTVEVNX1BPUlRfUkFOR0VbMV0pO1xuICAgICAgdGhpcy5vcHRzLmFkYlBvcnQgPSB0aGlzLm9wdHMuYWRiUG9ydCB8fCBERUZBVUxUX0FEQl9QT1JUO1xuICAgICAgLy8gZ2V0IGRldmljZSB1ZGlkIGZvciB0aGlzIHNlc3Npb25cbiAgICAgIGNvbnN0IHt1ZGlkLCBlbVBvcnR9ID0gYXdhaXQgaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHModGhpcy5vcHRzKTtcbiAgICAgIHRoaXMub3B0cy51ZGlkID0gdWRpZDtcbiAgICAgIHRoaXMub3B0cy5lbVBvcnQgPSBlbVBvcnQ7XG4gICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IG91ciBqYXZhIHZlcnNpb24gYW5kIGRldmljZSBpbmZvLCB3ZSBjYW4gY3JlYXRlIG91clxuICAgICAgLy8gQURCIGluc3RhbmNlXG4gICAgICB0aGlzLmFkYiA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLmNyZWF0ZUFEQih0aGlzLm9wdHMpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgICAvLyBmaW5kIGFuZCBjb3B5LCBvciBkb3dubG9hZCBhbmQgdW56aXAgYW4gYXBwIHVybCBvciBwYXRoXG4gICAgICAgIHRoaXMub3B0cy5hcHAgPSBhd2FpdCB0aGlzLmhlbHBlcnMuY29uZmlndXJlQXBwKHRoaXMub3B0cy5hcHAsIHtcbiAgICAgICAgICBvblBvc3RQcm9jZXNzOiB0aGlzLm9uUG9zdENvbmZpZ3VyZUFwcC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbnM6IFNVUFBPUlRFRF9FWFRFTlNJT05TXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcE9uRGV2aWNlKSB7XG4gICAgICAgIC8vIHRoZSBhcHAgaXNuJ3QgYW4gYWN0dWFsIGFwcCBmaWxlIGJ1dCByYXRoZXIgc29tZXRoaW5nIHdlIHdhbnQgdG9cbiAgICAgICAgLy8gYXNzdW1lIGlzIG9uIHRoZSBkZXZpY2UgYW5kIGp1c3QgbGF1bmNoIHZpYSB0aGUgYXBwUGFja2FnZVxuICAgICAgICB0aGlzLmxvZy5pbmZvKGBBcHAgZmlsZSB3YXMgbm90IGxpc3RlZCwgaW5zdGVhZCB3ZSdyZSBnb2luZyB0byBydW4gYCArXG4gICAgICAgICAgICBgJHt0aGlzLm9wdHMuYXBwUGFja2FnZX0gZGlyZWN0bHkgb24gdGhlIGRldmljZWApO1xuICAgICAgICBpZiAoIWF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBmaW5kIHRoZSBwYWNrYWdlICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfScgYCArXG4gICAgICAgICAgICBgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2VgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0RXNwcmVzc29TZXNzaW9uKCk7XG4gICAgICByZXR1cm4gW3Nlc3Npb25JZCwgY2Fwc107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XG4gICAgICBlLm1lc3NhZ2UgKz0gYCR7Xy5lbmRzV2l0aChlLm1lc3NhZ2UsICcuJykgPyAnJyA6ICcuJ30gQ2hlY2sgYCArXG4gICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1lc3ByZXNzby1kcml2ZXIjdHJvdWJsZXNob290aW5nICcgK1xuICAgICAgICAncmVnYXJkaW5nIGFkdmFuY2VkIHNlc3Npb24gc3RhcnR1cCB0cm91Ymxlc2hvb3RpbmcuJztcbiAgICAgIGlmIChpc0Vycm9yVHlwZShlLCBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVyciA9IG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgZXJyLnN0YWNrID0gZS5zdGFjaztcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW56aXAgdGhlIGdpdmVuIGFwcCBwYXRoIGFuZCByZXR1cm4gdGhlIGZpcnN0IHBhY2thZ2UgdGhhdCBoYXMgU1VQUE9SVEVEX0VYVEVOU0lPTlNcbiAgICogaW4gdGhlIGFyY2hpdmVkIGZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIFRoZSBwYXRoIHRvIGFwcCBmaWxlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1bnMgdGhlIHBhdGggdG8gYW4gdW56aXBwZWQgYXBwIGZpbGUgcGF0aC5cbiAgICogQHRocm93cyBSYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIHppcCBkaWQgbm90IGhhdmUgYW55IFNVUFBPUlRFRF9FWFRFTlNJT05TIHBhY2thZ2VzLlxuICAgKi9cbiAgYXN5bmMgdW56aXBBcHAgKGFwcFBhdGgpIHtcbiAgICBjb25zdCB1c2VTeXN0ZW1VbnppcEVudiA9IHByb2Nlc3MuZW52LkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQO1xuICAgIGNvbnN0IHVzZVN5c3RlbVVuemlwID0gXy5pc0VtcHR5KHVzZVN5c3RlbVVuemlwRW52KVxuICAgICAgfHwgIVsnMCcsICdmYWxzZSddLmluY2x1ZGVzKF8udG9Mb3dlcih1c2VTeXN0ZW1VbnppcEVudikpO1xuICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICBhd2FpdCB6aXAuZXh0cmFjdEFsbFRvKGFwcFBhdGgsIHRtcFJvb3QsIHt1c2VTeXN0ZW1VbnppcH0pO1xuXG4gICAgY29uc3QgZ2xvYlBhdHRlcm4gPSBgKiovKi4rKCR7U1VQUE9SVEVEX0VYVEVOU0lPTlMubWFwKChleHQpID0+IGV4dC5yZXBsYWNlKC9eXFwuLywgJycpKS5qb2luKCd8Jyl9KWA7XG4gICAgY29uc3Qgc29ydGVkQnVuZGxlSXRlbXMgPSAoYXdhaXQgZnMuZ2xvYihnbG9iUGF0dGVybiwge1xuICAgICAgY3dkOiB0bXBSb290LFxuICAgICAgc3RyaWN0OiBmYWxzZSxcbiAgICB9KSkuc29ydCgoYSwgYikgPT4gYS5zcGxpdChwYXRoLnNlcCkubGVuZ3RoIC0gYi5zcGxpdChwYXRoLnNlcCkubGVuZ3RoKTtcbiAgICBpZiAoc29ydGVkQnVuZGxlSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBubyBleHBlY3RlZCBwYWNrYWdlcyBpbiB0aGUgemlwXG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGAke3RoaXMub3B0cy5hcHB9IGRpZCBub3QgaGF2ZSBhbnkgb2YgJyR7U1VQUE9SVEVEX0VYVEVOU0lPTlMuam9pbignLCAnKX0nIGAgK1xuICAgICAgICBgZXh0ZW5zaW9uIHBhY2thZ2VzLiBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwcm92aWRlZCAuemlwIGFyY2hpdmUgY29udGFpbnMgYXQgbGVhc3Qgb25lIHZhbGlkIGFwcGxpY2F0aW9uIHBhY2thZ2UuYCk7XG4gICAgfVxuICAgIGNvbnN0IHVuemlwcGVkQXBwUGF0aCA9IHBhdGguam9pbih0bXBSb290LCBfLmZpcnN0KHNvcnRlZEJ1bmRsZUl0ZW1zKSk7XG4gICAgdGhpcy5sb2cuZGVidWcoYCcke3VuemlwcGVkQXBwUGF0aH0nIGlzIHRoZSB1bnppcHBlZCBmaWxlIGZyb20gJyR7YXBwUGF0aH0nYCk7XG4gICAgcmV0dXJuIHVuemlwcGVkQXBwUGF0aDtcbiAgfVxuXG4gIGFzeW5jIG9uUG9zdENvbmZpZ3VyZUFwcCAoe2NhY2hlZEFwcEluZm8sIGlzVXJsLCBhcHBQYXRofSkge1xuICAgIGNvbnN0IHByZXNpZ25BcHAgPSBhc3luYyAoYXBwTG9jYXRpb24pID0+IHtcbiAgICAgIGlmICh0aGlzLm9wdHMubm9TaWduKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1NraXBwaW5nIGFwcGxpY2F0aW9uIHNpZ25pbmcgYmVjYXVzZSBub1NpZ24gY2FwYWJpbGl0eSBpcyBzZXQgdG8gdHJ1ZS4gJyArXG4gICAgICAgICAgJ0hhdmluZyB0aGUgYXBwbGljYXRpb24gdW5kZXIgdGVzdCB3aXRoIGltcHJvcGVyIHNpZ25hdHVyZS9ub24tc2lnbmVkIHdpbGwgY2F1c2UgJyArXG4gICAgICAgICAgJ0VzcHJlc3NvIGF1dG9tYXRpb24gc3RhcnR1cCBmYWlsdXJlLicpO1xuICAgICAgfSBlbHNlIGlmICghYXdhaXQgdGhpcy5hZGIuY2hlY2tBcGtDZXJ0KGFwcExvY2F0aW9uLCB0aGlzLm9wdHMuYXBwUGFja2FnZSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2lnbihhcHBMb2NhdGlvbiwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBoYXNBcGtFeHQgPSAoYXBwUGF0aCkgPT4gXy5lbmRzV2l0aChfLnRvTG93ZXIoYXBwUGF0aCksIEFQS19FWFQpO1xuICAgIGNvbnN0IGhhc0FhYkV4dCA9IChhcHBQYXRoKSA9PiBfLmVuZHNXaXRoKF8udG9Mb3dlcihhcHBQYXRoKSwgQUFCX0VYVCk7XG4gICAgY29uc3QgZXh0cmFjdFVuaXZlcnNhbEFwayA9IGFzeW5jIChzaG91bGRFeHRyYWN0LCBhcHBQYXRoKSA9PlxuICAgICAgc2hvdWxkRXh0cmFjdCA/IGFwcFBhdGggOiBhd2FpdCB0aGlzLmFkYi5leHRyYWN0VW5pdmVyc2FsQXBrKGFwcFBhdGgpO1xuXG4gICAgbGV0IHBhdGhJbkNhY2hlID0gbnVsbDtcbiAgICBsZXQgaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCA9IGZhbHNlO1xuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoY2FjaGVkQXBwSW5mbykpIHtcbiAgICAgIGNvbnN0IHBhY2thZ2VIYXNoID0gYXdhaXQgZnMuaGFzaChhcHBQYXRoKTtcbiAgICAgIGlmIChwYWNrYWdlSGFzaCA9PT0gY2FjaGVkQXBwSW5mby5wYWNrYWdlSGFzaCAmJiBhd2FpdCBmcy5leGlzdHMoY2FjaGVkQXBwSW5mby5mdWxsUGF0aCkpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgVXNpbmcgJyR7Y2FjaGVkQXBwSW5mby5mdWxsUGF0aH0nIHdoaWNoIGlzIGNhY2hlZCBmcm9tICcke2FwcFBhdGh9J2ApO1xuICAgICAgICBpc1Jlc3VsdEFwcFBhdGhBbHJlYWR5Q2FjaGVkID0gdHJ1ZTtcbiAgICAgICAgcGF0aEluQ2FjaGUgPSBjYWNoZWRBcHBJbmZvLmZ1bGxQYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFwcFBhdGggY2FuIGJlIC56aXAsIC5hcGsgb3IgLmFhYlxuICAgIGNvbnN0IGlzQXBrID0gaGFzQXBrRXh0KGFwcFBhdGgpO1xuICAgIC8vIE9ubHkgbG9jYWwgLmFwayBmaWxlcyB0aGF0IGFyZSBhdmFpbGFibGUgaW4tcGxhY2Ugc2hvdWxkIG5vdCBiZSBjYWNoZWRcbiAgICBjb25zdCBzaG91bGRSZXN1bHRBcHBQYXRoQmVDYWNoZWQgPSAhaXNBcGsgfHwgKGlzQXBrICYmIGlzVXJsKTtcblxuICAgIGlmICghaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCkge1xuICAgICAgaWYgKHNob3VsZFJlc3VsdEFwcFBhdGhCZUNhY2hlZCkge1xuICAgICAgICAvLyAuemlwLCAuYWFiIG9yIGRvd25sb2FkZWQgLmFwa1xuXG4gICAgICAgIGxldCB1bnppcHBlZEFwcFBhdGg7XG4gICAgICAgIGxldCBpc1VuemlwcGVkQXBrID0gZmFsc2U7XG4gICAgICAgIGlmICghKGhhc0Fwa0V4dChhcHBQYXRoKSB8fCBoYXNBYWJFeHQoYXBwUGF0aCkpKSB7XG4gICAgICAgICAgdW56aXBwZWRBcHBQYXRoID0gYXdhaXQgdGhpcy51bnppcEFwcChhcHBQYXRoKTtcbiAgICAgICAgICBpc1VuemlwcGVkQXBrID0gaGFzQXBrRXh0KHVuemlwcGVkQXBwUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1bnppcHBlZEFwcFBhdGggb3IgYXBwUGF0aCBoYXMgU1VQUE9SVEVEX0VYVEVOU0lPTlMuXG4gICAgICAgIHBhdGhJbkNhY2hlID0gdW56aXBwZWRBcHBQYXRoXG4gICAgICAgICAgPyBhd2FpdCBleHRyYWN0VW5pdmVyc2FsQXBrKGlzVW56aXBwZWRBcGssIHVuemlwcGVkQXBwUGF0aClcbiAgICAgICAgICA6IGF3YWl0IGV4dHJhY3RVbml2ZXJzYWxBcGsoaXNBcGssIGFwcFBhdGgpO1xuXG4gICAgICAgIGlmICghaXNBcGsgJiYgaXNVcmwpIHtcbiAgICAgICAgICAvLyBDbGVhbiB1cCB0aGUgdGVtcG9yYXJpbHkgZG93bmxvYWRlZCAuYWFiIG9yIC56aXAgcGFja2FnZVxuICAgICAgICAgIGF3YWl0IGZzLnJpbXJhZihhcHBQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzQWFiRXh0KHVuemlwcGVkQXBwUGF0aCkpIHtcbiAgICAgICAgICAvLyBDbGVhbnVwIHRoZSBsb2NhbCB1bnppcHBlZCAuYWFiIGZpbGVcbiAgICAgICAgICBhd2FpdCBmcy5yaW1yYWYodW56aXBwZWRBcHBQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBwcmVzaWduQXBwKHBhdGhJbkNhY2hlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNBcGspIHtcbiAgICAgICAgLy8gSXQgaXMgcHJvYmFibHkgbm90IHRoZSBiZXN0IGlkZWEgdG8gbW9kaWZ5IHRoZSBwcm92aWRlZCBhcHAgaW4tcGxhY2UsXG4gICAgICAgIC8vIGJ1dCB0aGlzIGlzIGhvdyBpdCB3YXMgYWx3YXlzIHdvcmtpbmdcbiAgICAgICAgYXdhaXQgcHJlc2lnbkFwcChhcHBQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZFJlc3VsdEFwcFBhdGhCZUNhY2hlZCA/IHthcHBQYXRoOiBwYXRoSW5DYWNoZX0gOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBkcml2ZXJEYXRhICgpIHtcbiAgICAvLyBUT0RPIGZpbGxlIG91dCByZXNvdXJjZSBpbmZvIGhlcmVcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBpc0VtdWxhdG9yICgpIHtcbiAgICByZXR1cm4gaGVscGVycy5pc0VtdWxhdG9yKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG5cbiAgLy8gVE9ETyB0aGlzIG1ldGhvZCBpcyBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyLWRyaXZlcjsgY29uc29saWRhdGVcbiAgc2V0QXZkRnJvbUNhcGFiaWxpdGllcyAoY2Fwcykge1xuICAgIGlmICh0aGlzLm9wdHMuYXZkKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKCdhdmQgbmFtZSBkZWZpbmVkLCBpZ25vcmluZyBkZXZpY2UgbmFtZSBhbmQgcGxhdGZvcm0gdmVyc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNhcHMuZGV2aWNlTmFtZSkge1xuICAgICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdhdmQgb3IgZGV2aWNlTmFtZSBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWNhcHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBwbGF0Zm9ybVZlcnNpb24gc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHJlYm9vdCBvcHRpb24gaXMgZW5hYmxlZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGF2ZERldmljZSA9IGNhcHMuZGV2aWNlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV8uXS9nLCAnLScpO1xuICAgICAgdGhpcy5vcHRzLmF2ZCA9IGAke2F2ZERldmljZX1fXyR7Y2Fwcy5wbGF0Zm9ybVZlcnNpb259YDtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPIHRoaXMgbWV0aG9kIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjItZHJpdmVyOyBjb25zb2xpZGF0ZVxuICBhZGRXaXBlRGF0YVRvQXZkQXJncyAoKSB7XG4gICAgaWYgKCF0aGlzLm9wdHMuYXZkQXJncykge1xuICAgICAgdGhpcy5vcHRzLmF2ZEFyZ3MgPSAnLXdpcGUtZGF0YSc7XG4gICAgfSBlbHNlIGlmICghdGhpcy5vcHRzLmF2ZEFyZ3MudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnLXdpcGUtZGF0YScpKSB7XG4gICAgICB0aGlzLm9wdHMuYXZkQXJncyArPSAnIC13aXBlLWRhdGEnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gbXVjaCBvZiB0aGlzIGxvZ2ljIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjJcbiAgYXN5bmMgc3RhcnRFc3ByZXNzb1Nlc3Npb24gKCkge1xuICAgIGNvbnN0IHttYW5pZmVzdFBheWxvYWR9ID0gYXdhaXQgZ2V0UGFja2FnZUluZm8oKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBFc3ByZXNzb0RyaXZlciB2ZXJzaW9uOiAke21hbmlmZXN0UGF5bG9hZC52ZXJzaW9ufWApO1xuXG4gICAgLy8gUmVhZCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1hbmRyb2lkLWRyaXZlci9wdWxsLzQ2MSB3aGF0IGhhcHBlbnMgaWYgdGhlciBpcyBubyBzZXRIaWRkZW5BcGlQb2xpY3kgZm9yIEFuZHJvaWQgUCtcbiAgICBpZiAoYXdhaXQgdGhpcy5hZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOCkgeyAvLyBBbmRyb2lkIFBcbiAgICAgIHRoaXMubG9nLndhcm4oJ1JlbGF4aW5nIGhpZGRlbiBhcGkgcG9saWN5Jyk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zZXRIaWRkZW5BcGlQb2xpY3koJzEnLCAhIXRoaXMub3B0cy5pZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvcik7XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFwcFBhY2thZ2UgZXQgYWwgZnJvbSBtYW5pZmVzdCBpZiBuZWNlc3NhcnlcbiAgICBsZXQgYXBwSW5mbyA9IGF3YWl0IGhlbHBlcnMuZ2V0TGF1bmNoSW5mbyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICBpZiAoYXBwSW5mbykge1xuICAgICAgLy8gYW5kIGdldCBpdCBvbnRvIG91ciAnb3B0cycgb2JqZWN0IHNvIHdlIHVzZSBpdCBmcm9tIG5vdyBvblxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm9wdHMsIGFwcEluZm8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBJbmZvID0gdGhpcy5vcHRzO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IGFuIGF2ZCwgc2V0IHRoZSBsYW5ndWFnZS9sb2NhbGUsIHBpY2sgYW4gZW11bGF0b3IsIGV0Yy4uLlxuICAgIC8vIFRPRE8gd2l0aCBtdWx0aXBsZSBkZXZpY2VzIHdlJ2xsIG5lZWQgdG8gcGFyYW1ldGVyaXplIHRoaXNcbiAgICBhd2FpdCBoZWxwZXJzLmluaXREZXZpY2UodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tZXNwcmVzc28tZHJpdmVyL2lzc3Vlcy83MlxuICAgIGlmIChhd2FpdCB0aGlzLmFkYi5pc0FuaW1hdGlvbk9uKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy53YXNBbmltYXRpb25FbmFibGVkID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gdHVybiBvZmYgYW5pbWF0aW9uczogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgYWN0dWFsIGRldmljZSBuYW1lLCB1ZGlkXG4gICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSB0aGlzLmFkYi5jdXJEZXZpY2VJZDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlVURJRCA9IHRoaXMub3B0cy51ZGlkO1xuXG4gICAgLy8gc2V0IHVwIHRoZSBtb2RpZmllZCBlc3ByZXNzbyBzZXJ2ZXIgZXRjXG4gICAgdGhpcy5pbml0RXNwcmVzc29TZXJ2ZXIoKTtcbiAgICAvLyBGdXJ0aGVyIHByZXBhcmUgdGhlIGRldmljZSBieSBmb3J3YXJkaW5nIHRoZSBlc3ByZXNzbyBwb3J0XG4gICAgdGhpcy5sb2cuZGVidWcoYEZvcndhcmRpbmcgRXNwcmVzc28gU2VydmVyIHBvcnQgJHtERVZJQ0VfUE9SVH0gdG8gJHt0aGlzLm9wdHMuc3lzdGVtUG9ydH1gKTtcbiAgICBhd2FpdCB0aGlzLmFkYi5mb3J3YXJkUG9ydCh0aGlzLm9wdHMuc3lzdGVtUG9ydCwgREVWSUNFX1BPUlQpO1xuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVubG9jaykge1xuICAgICAgLy8gdW5sb2NrIHRoZSBkZXZpY2UgdG8gcHJlcGFyZSBpdCBmb3IgdGVzdGluZ1xuICAgICAgYXdhaXQgaGVscGVycy51bmxvY2sodGhpcywgdGhpcy5hZGIsIHRoaXMuY2Fwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGAnc2tpcFVubG9jaycgY2FwYWJpbGl0eSBzZXQsIHNvIHNraXBwaW5nIGRldmljZSB1bmxvY2tgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgdXAgYXBwIHVuZGVyIHRlc3RcbiAgICAvLyBwcmVwYXJlIG91ciBhY3R1YWwgQVVULCBnZXQgaXQgb24gdGhlIGRldmljZSwgZXRjLi4uXG4gICAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG5cbiAgICAvL0FkZGluZyBBVVQgcGFja2FnZSBuYW1lIGluIHRoZSBjYXBhYmlsaXRpZXMgaWYgcGFja2FnZSBuYW1lIG5vdCBleGlzdCBpbiBjYXBzXG4gICAgaWYgKCF0aGlzLmNhcHMuYXBwUGFja2FnZSkge1xuICAgICAgdGhpcy5jYXBzLmFwcFBhY2thZ2UgPSBhcHBJbmZvLmFwcFBhY2thZ2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlKSB7XG4gICAgICB0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UgPSBhcHBJbmZvLmFwcFdhaXRQYWNrYWdlIHx8IGFwcEluZm8uYXBwUGFja2FnZSB8fCB0aGlzLmNhcHMuYXBwUGFja2FnZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSkge1xuICAgICAgdGhpcy5jYXBzLmFwcEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZSh0aGlzLmNhcHMuYXBwQWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBQYWNrYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXBzLmFwcEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZShhcHBJbmZvLmFwcEFjdGl2aXR5LCB0aGlzLmNhcHMuYXBwUGFja2FnZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgICB0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZSh0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5LCB0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5ID0gcXVhbGlmeUFjdGl2aXR5TmFtZShhcHBJbmZvLmFwcFdhaXRBY3Rpdml0eSB8fCBhcHBJbmZvLmFwcEFjdGl2aXR5IHx8IHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSxcbiAgICAgICAgdGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlKTtcbiAgICB9XG5cbiAgICAvLyBsYXVuY2ggZXNwcmVzc28gYW5kIHdhaXQgdGlsbCBpdHMgb25saW5lIGFuZCB3ZSBoYXZlIGEgc2Vzc2lvblxuICAgIGF3YWl0IHRoaXMuZXNwcmVzc28uc3RhcnRTZXNzaW9uKHRoaXMuY2Fwcyk7XG4gICAgaWYgKHRoaXMuY2Fwcy5hdXRvTGF1bmNoID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgTm90IHdhaXRpbmcgZm9yIHRoZSBhcHBsaWNhdGlvbiBhY3Rpdml0eSB0byBzdGFydCBiZWNhdXNlICdhdXRvTGF1bmNoJyBpcyBkaXNhYmxlZGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yQWN0aXZpdHkodGhpcy5jYXBzLmFwcFdhaXRQYWNrYWdlLCB0aGlzLmNhcHMuYXBwV2FpdEFjdGl2aXR5LCB0aGlzLm9wdHMuYXBwV2FpdER1cmF0aW9uKTtcbiAgICB9XG4gICAgLy8gaWYgd2Ugd2FudCB0byBpbW1lZGlhdGVseSBnZXQgaW50byBhIHdlYnZpZXcsIHNldCBvdXIgY29udGV4dFxuICAgIC8vIGFwcHJvcHJpYXRlbHlcbiAgICBpZiAodGhpcy5vcHRzLmF1dG9XZWJ2aWV3KSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRXZWJ2aWV3KCk7XG4gICAgfVxuXG4gICAgLy8gbm93IHRoYXQgZXZlcnl0aGluZyBoYXMgc3RhcnRlZCBzdWNjZXNzZnVsbHksIHR1cm4gb24gcHJveHlpbmcgc28gYWxsXG4gICAgLy8gc3Vic2VxdWVudCBzZXNzaW9uIHJlcXVlc3RzIGdvIHN0cmFpZ2h0IHRvL2Zyb20gZXNwcmVzc29cbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICAgIGF3YWl0IHRoaXMuYWRkRGV2aWNlSW5mb1RvQ2FwcygpO1xuICB9XG5cbiAgYXN5bmMgaW5pdFdlYnZpZXcgKCkge1xuICAgIGNvbnN0IHZpZXdOYW1lID0gYW5kcm9pZENvbW1hbmRzLmRlZmF1bHRXZWJ2aWV3TmFtZS5jYWxsKHRoaXMpO1xuICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLm9wdHMuYXV0b1dlYnZpZXdUaW1lb3V0IHx8IDIwMDA7XG4gICAgdGhpcy5sb2cuaW5mbyhgU2V0dGluZyB3ZWJ2aWV3IHRvIGNvbnRleHQgJyR7dmlld05hbWV9JyB3aXRoIHRpbWVvdXQgJHt0aW1lb3V0fW1zYCk7XG4gICAgYXdhaXQgcmV0cnlJbnRlcnZhbCh0aW1lb3V0IC8gNTAwLCA1MDAsIHRoaXMuc2V0Q29udGV4dC5iaW5kKHRoaXMpLCB2aWV3TmFtZSk7XG4gIH1cblxuICBhc3luYyBhZGREZXZpY2VJbmZvVG9DYXBzICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgcGxhdGZvcm1WZXJzaW9uLFxuICAgICAgbWFudWZhY3R1cmVyLFxuICAgICAgbW9kZWwsXG4gICAgICByZWFsRGlzcGxheVNpemUsXG4gICAgICBkaXNwbGF5RGVuc2l0eSxcbiAgICB9ID0gYXdhaXQgdGhpcy5tb2JpbGVHZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5jYXBzLmRldmljZUFwaUxldmVsID0gcGFyc2VJbnQoYXBpVmVyc2lvbiwgMTApO1xuICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24gPSBwbGF0Zm9ybVZlcnNpb247XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlblNpemUgPSByZWFsRGlzcGxheVNpemU7XG4gICAgdGhpcy5jYXBzLmRldmljZVNjcmVlbkRlbnNpdHkgPSBkaXNwbGF5RGVuc2l0eTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTW9kZWwgPSBtb2RlbDtcbiAgICB0aGlzLmNhcHMuZGV2aWNlTWFudWZhY3R1cmVyID0gbWFudWZhY3R1cmVyO1xuICB9XG5cbiAgaW5pdEVzcHJlc3NvU2VydmVyICgpIHtcbiAgICAvLyBub3cgdGhhdCB3ZSBoYXZlIHBhY2thZ2UgYW5kIGFjdGl2aXR5LCB3ZSBjYW4gY3JlYXRlIGFuIGluc3RhbmNlIG9mXG4gICAgLy8gZXNwcmVzc28gd2l0aCB0aGUgYXBwcm9wcmlhdGUgZGF0YVxuICAgIHRoaXMuZXNwcmVzc28gPSBuZXcgRXNwcmVzc29SdW5uZXIodGhpcy5sb2csIHtcbiAgICAgIGhvc3Q6IHRoaXMub3B0cy5yZW1vdGVBZGJIb3N0IHx8IHRoaXMub3B0cy5ob3N0IHx8ICcxMjcuMC4wLjEnLFxuICAgICAgc3lzdGVtUG9ydDogdGhpcy5vcHRzLnN5c3RlbVBvcnQsXG4gICAgICBkZXZpY2VQb3J0OiBERVZJQ0VfUE9SVCxcbiAgICAgIGFkYjogdGhpcy5hZGIsXG4gICAgICBhcGs6IHRoaXMub3B0cy5hcHAsXG4gICAgICB0bXBEaXI6IHRoaXMub3B0cy50bXBEaXIsXG4gICAgICBhcHBQYWNrYWdlOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgIGFwcEFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgICBmb3JjZUVzcHJlc3NvUmVidWlsZDogISF0aGlzLm9wdHMuZm9yY2VFc3ByZXNzb1JlYnVpbGQsXG4gICAgICBlc3ByZXNzb0J1aWxkQ29uZmlnOiB0aGlzLm9wdHMuZXNwcmVzc29CdWlsZENvbmZpZyxcbiAgICAgIHNob3dHcmFkbGVMb2c6ICEhdGhpcy5vcHRzLnNob3dHcmFkbGVMb2csXG4gICAgICBzZXJ2ZXJMYXVuY2hUaW1lb3V0OiB0aGlzLm9wdHMuZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0LFxuICAgICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiB0aGlzLm9wdHMuYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgICAgc2tpcFNlcnZlckluc3RhbGxhdGlvbjogdGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24sXG4gICAgICB1c2VLZXlzdG9yZTogdGhpcy5vcHRzLnVzZUtleXN0b3JlLFxuICAgICAga2V5c3RvcmVQYXRoOiB0aGlzLm9wdHMua2V5c3RvcmVQYXRoLFxuICAgICAga2V5c3RvcmVQYXNzd29yZDogdGhpcy5vcHRzLmtleXN0b3JlUGFzc3dvcmQsXG4gICAgICBrZXlBbGlhczogdGhpcy5vcHRzLmtleUFsaWFzLFxuICAgICAga2V5UGFzc3dvcmQ6IHRoaXMub3B0cy5rZXlQYXNzd29yZCxcbiAgICAgIGRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlOiB0aGlzLm9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UsXG4gICAgfSk7XG4gICAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuZXNwcmVzc28ucHJveHlSZXFSZXMuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuZXNwcmVzc28ucHJveHlDb21tYW5kLmJpbmQodGhpcy5lc3ByZXNzbyk7XG4gIH1cblxuICAvLyBUT0RPIHRoaXMgbWV0aG9kIGlzIG1vc3RseSBkdXBsaWNhdGVkIGZyb20gdWlhdXRvbWF0b3IyXG4gIGFzeW5jIGluaXRBVVQgKCkge1xuICAgIC8vIHNldCB0aGUgbG9jYWxpemVkIHN0cmluZ3MgZm9yIHRoZSBjdXJyZW50IGxhbmd1YWdlIGZyb20gdGhlIGFwa1xuICAgIC8vIFRPRE86IGluY29ycG9yYXRlIGNoYW5nZXMgZnJvbSBhcHBpdW0jNTMwOCB3aGljaCBmaXggYSByYWNlIGNvbmQtXG4gICAgLy8gaXRpb24gYnVnIGluIG9sZCBhcHBpdW0gYW5kIG5lZWQgdG8gYmUgcmVwbGljYXRlZCBoZXJlXG4gICAgLy8gdGhpcy5hcGtTdHJpbmdzW3RoaXMub3B0cy5sYW5ndWFnZV0gPSBhd2FpdCBhbmRyb2lkSGVscGVycy5wdXNoU3RyaW5ncyhcbiAgICAvLyAgICAgdGhpcy5vcHRzLmxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcblxuICAgIC8vIFVuaW5zdGFsbCBhbnkgdW5pbnN0YWxsT3RoZXJQYWNrYWdlcyB3aGljaCB3ZXJlIHNwZWNpZmllZCBpbiBjYXBzXG4gICAgaWYgKHRoaXMub3B0cy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgICBhd2FpdCBoZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMoXG4gICAgICAgIHRoaXMuYWRiLFxuICAgICAgICBoZWxwZXJzLnBhcnNlQXJyYXkodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpLFxuICAgICAgICBbU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgVEVTVF9BUEtfUEtHXVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0cy5hcHApIHtcbiAgICAgIGlmICh0aGlzLm9wdHMuZnVsbFJlc2V0KSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ0Z1bGwgcmVzZXQgcmVxdWlyZXMgYW4gYXBwIGNhcGFiaWxpdHksIHVzZSBmYXN0UmVzZXQgaWYgYXBwIGlzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoJ05vIGFwcCBjYXBhYmlsaXR5LiBBc3N1bWluZyBpdCBpcyBhbHJlYWR5IG9uIHRoZSBkZXZpY2UnKTtcbiAgICAgIGlmICh0aGlzLm9wdHMuZmFzdFJlc2V0KSB7XG4gICAgICAgIGF3YWl0IGhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdHMuc2tpcFVuaW5zdGFsbCkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEFwayh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0cy5za2lwU2VydmVySW5zdGFsbGF0aW9uKSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1Zygnc2tpcFNlcnZlckluc3RhbGxhdGlvbiBjYXBhYmlsaXR5IGlzIHNldC4gTm90IGluc3RhbGxpZyBlc3ByZXNzby1zZXJ2ZXIgJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuZXNwcmVzc28uaW5zdGFsbFRlc3RBcGsoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmFkZFRvRGV2aWNlSWRsZVdoaXRlbGlzdChTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBURVNUX0FQS19QS0cpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBDYW5ub3QgYWRkIHNlcnZlciBwYWNrYWdlcyB0byB0aGUgRG96ZSB3aGl0ZWxpc3QuIE9yaWdpbmFsIGVycm9yOiBgICtcbiAgICAgICAgICAoZS5zdGRlcnIgfHwgZS5tZXNzYWdlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0RlbGV0aW5nIGVzcHJlc3NvIHNlc3Npb24nKTtcblxuICAgIGNvbnN0IHNjcmVlblJlY29yZGluZ1N0b3BUYXNrcyA9IFthc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5SZWNvcmRpbmdQcm9wZXJ0aWVzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BSZWNvcmRpbmdTY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9LCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy5tb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLm1vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcoKTtcbiAgICAgIH1cbiAgICB9LCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLl9zY3JlZW5TdHJlYW1pbmdQcm9wcykpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nKCk7XG4gICAgICB9XG4gICAgfV07XG5cbiAgICBhd2FpdCBhbmRyb2lkSGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnModGhpcy5zZXJ2ZXIsIHRoaXMuc2Vzc2lvbklkKTtcblxuICAgIGlmICh0aGlzLmVzcHJlc3NvKSB7XG4gICAgICBpZiAodGhpcy5qd3BQcm94eUFjdGl2ZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmVzcHJlc3NvLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXNwcmVzc28gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5hZGIpIHtcbiAgICAgIGF3YWl0IEIuYWxsKHNjcmVlblJlY29yZGluZ1N0b3BUYXNrcy5tYXAoKHRhc2spID0+IHtcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGFzaygpO1xuICAgICAgICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICAgICAgfSkoKTtcbiAgICAgIH0pKTtcbiAgICAgIGlmICh0aGlzLndhc0FuaW1hdGlvbkVuYWJsZWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXRBbmltYXRpb25TdGF0ZSh0cnVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgVW5hYmxlIHRvIHJlc2V0IGFuaW1hdGlvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQgJiYgdGhpcy5vcHRzLnJlc2V0S2V5Ym9hcmQgJiZcbiAgICAgICAgICB0aGlzLmRlZmF1bHRJTUUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYFJlc2V0dGluZyBJTUUgdG8gJyR7dGhpcy5kZWZhdWx0SU1FfSdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0SU1FKHRoaXMuZGVmYXVsdElNRSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNDaHJvbWVTZXNzaW9uICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlICYmICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgJiYgIXRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYEZVTExfUkVTRVQgc2V0IHRvICd0cnVlJywgVW5pbnN0YWxsaW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfSdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLnN0b3BMb2djYXQoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIGxldCBhdmROYW1lID0gdGhpcy5vcHRzLmF2ZC5yZXBsYWNlKCdAJywgJycpO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgY2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICAgIGlmICh0aGlzLm9wdHMuc3lzdGVtUG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMuc3lzdGVtUG9ydCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcmVtb3ZlIHBvcnQgZm9yd2FyZCAnJHtlcnJvci5tZXNzYWdlfSdgKTtcbiAgICAgICAgLy9JZ25vcmUsIHRoaXMgYmxvY2sgd2lsbCBhbHNvIGJlIGNhbGxlZCB3aGVuIHdlIGZhbGwgaW4gY2F0Y2ggYmxvY2tcbiAgICAgICAgLy8gYW5kIGJlZm9yZSBldmVuIHBvcnQgZm9yd2FyZC5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlICgpIHtcbiAgICAvLyBpbnRlbnRpb25hbGx5IGRvIG5vdGhpbmcgaGVyZSwgc2luY2UgY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgcHJveGllc1xuICAgIC8vIHNldHRpbmdzIHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXIgYWxyZWFkeVxuICB9XG5cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBhbHdheXMgaGF2ZSBhbiBhY3RpdmUgcHJveHkgdG8gdGhlIGVzcHJlc3NvIHNlcnZlclxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmNhblByb3h5KHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBjYW4gYWx3YXlzIHByb3h5IHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuICAgIC8vIHdlIGFyZSBtYWludGFpbmluZyB0d28gc2V0cyBvZiBOT19QUk9YWSBsaXN0cywgb25lIGZvciBjaHJvbWVkcml2ZXIoQ0hST01FX05PX1BST1hZKVxuICAgIC8vIGFuZCBvbmUgZm9yIEVzcHJlc3NvKE5PX1BST1hZKSwgYmFzZWQgb24gY3VycmVudCBjb250ZXh0IHdpbGwgcmV0dXJuIHJlbGF0ZWQgTk9fUFJPWFkgbGlzdFxuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IF8uaXNOaWwodGhpcy5jaHJvbWVkcml2ZXIpID8gTk9fUFJPWFkgOiBDSFJPTUVfTk9fUFJPWFk7XG4gICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbLi4udGhpcy5qd3BQcm94eUF2b2lkLCBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cblxuICBnZXQgYXBwT25EZXZpY2UgKCkge1xuICAgIHJldHVybiAhdGhpcy5vcHRzLmFwcCAmJiB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICB9XG59XG5cbi8vIGZpcnN0IGFkZCB0aGUgYW5kcm9pZC1kcml2ZXIgY29tbWFuZHMgd2hpY2ggd2Ugd2lsbCBmYWxsIGJhY2sgdG9cbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoYW5kcm9pZENvbW1hbmRzKSkge1xuICAvLyB3ZSBkbyBzb21lIGRpZmZlcmVudC9zcGVjaWFsIHRoaW5ncyB3aXRoIHRoZXNlIG1ldGhvZHNcbiAgaWYgKCFfLmluY2x1ZGVzKFsnZGVmYXVsdFdlYnZpZXdOYW1lJ10sIGNtZCkpIHtcbiAgICBFc3ByZXNzb0RyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xuICB9XG59XG5cbi8vIHRoZW4gb3ZlcndyaXRlIHdpdGggYW55IGVzcHJlc3NvLXNwZWNpZmljIGNvbW1hbmRzXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICBFc3ByZXNzb0RyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xufVxuXG5leHBvcnQgeyBFc3ByZXNzb0RyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgRXNwcmVzc29Ecml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBLE1BQU1BLE9BQU8sR0FBR0MsbUNBQWM7QUFJOUIsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBSXRDLE1BQU1DLFdBQVcsR0FBRyxJQUFJO0FBTXhCLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBSyxFQUFFLElBQUlDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQ3hDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDLEVBQ3JFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLEVBQ3BFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLEVBQ3BFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxpREFBaUQsQ0FBQyxDQUFDLEVBQ3RFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLEVBQ2hFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLEVBQ2hFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLEVBQ3RELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQzlDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQ2hELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLEVBQ3pELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQzFDLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLEVBQzdELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLEVBQ3hELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLEVBQ3pELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLEVBQ3hELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLEVBQzFELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLEVBQzdELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDLEVBQ2xFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLEVBQ25FLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEVBQy9ELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDLEVBQ2xFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLEVBQ25FLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLEVBQ2pFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEVBQy9ELENBQUMsTUFBTSxFQUFFLElB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
|
|
452
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoZWxwZXJzIiwiYW5kcm9pZEhlbHBlcnMiLCJTWVNURU1fUE9SVF9SQU5HRSIsIkRFVklDRV9QT1JUIiwiTk9fUFJPWFkiLCJSZWdFeHAiLCJDSFJPTUVfTk9fUFJPWFkiLCJBUEtfRVhUIiwiQUFCX0VYVCIsIlNVUFBPUlRFRF9FWFRFTlNJT05TIiwiRXNwcmVzc29Ecml2ZXIiLCJCYXNlRHJpdmVyIiwibmV3TWV0aG9kTWFwIiwiY29uc3RydWN0b3IiLCJvcHRzIiwic2hvdWxkVmFsaWRhdGVDYXBzIiwic2hlbGwiLCJsb2NhdG9yU3RyYXRlZ2llcyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsImVzcHJlc3NvIiwiandwUHJveHlBY3RpdmUiLCJqd3BQcm94eUF2b2lkIiwiYXBrU3RyaW5ncyIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJvblNldHRpbmdzVXBkYXRlIiwiYmluZCIsImNocm9tZWRyaXZlciIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwiY3JlYXRlU2Vzc2lvbiIsImFyZ3MiLCJzZXNzaW9uSWQiLCJjYXBzIiwic2VydmVyRGV0YWlscyIsInBsYXRmb3JtIiwid2ViU3RvcmFnZUVuYWJsZWQiLCJ0YWtlc1NjcmVlbnNob3QiLCJqYXZhc2NyaXB0RW5hYmxlZCIsImRhdGFiYXNlRW5hYmxlZCIsIm5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZCIsImxvY2F0aW9uQ29udGV4dEVuYWJsZWQiLCJ3YXJuaW5ncyIsImRlc2lyZWQiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZGVmYXVsdE9wdHMiLCJmdWxsUmVzZXQiLCJhdXRvTGF1bmNoIiwiYWRiUG9ydCIsIkRFRkFVTFRfQURCX1BPUlQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJfIiwiZGVmYXVsdHMiLCJpc0Nocm9tZVNlc3Npb24iLCJhcHAiLCJsb2ciLCJ3YXJuIiwiZXJyb3JBbmRUaHJvdyIsInJlYm9vdCIsInNldEF2ZEZyb21DYXBhYmlsaXRpZXMiLCJhZGRXaXBlRGF0YVRvQXZkQXJncyIsInN5c3RlbVBvcnQiLCJmaW5kQVBvcnROb3RJblVzZSIsInVkaWQiLCJlbVBvcnQiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJhZGIiLCJjcmVhdGVBREIiLCJjb25maWd1cmVBcHAiLCJvblBvc3RQcm9jZXNzIiwib25Qb3N0Q29uZmlndXJlQXBwIiwic3VwcG9ydGVkRXh0ZW5zaW9ucyIsImFwcE9uRGV2aWNlIiwiaW5mbyIsImFwcFBhY2thZ2UiLCJpc0FwcEluc3RhbGxlZCIsInN0YXJ0RXNwcmVzc29TZXNzaW9uIiwiZSIsImRlbGV0ZVNlc3Npb24iLCJtZXNzYWdlIiwiZW5kc1dpdGgiLCJpc0Vycm9yVHlwZSIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJlcnIiLCJzdGFjayIsInVuemlwQXBwIiwiYXBwUGF0aCIsInVzZVN5c3RlbVVuemlwRW52IiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9QUkVGRVJfU1lTVEVNX1VOWklQIiwidXNlU3lzdGVtVW56aXAiLCJpc0VtcHR5IiwiaW5jbHVkZXMiLCJ0b0xvd2VyIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwiemlwIiwiZXh0cmFjdEFsbFRvIiwiZ2xvYlBhdHRlcm4iLCJtYXAiLCJleHQiLCJyZXBsYWNlIiwiam9pbiIsInNvcnRlZEJ1bmRsZUl0ZW1zIiwiZnMiLCJnbG9iIiwiY3dkIiwic3RyaWN0Iiwic29ydCIsImEiLCJiIiwic3BsaXQiLCJwYXRoIiwic2VwIiwibGVuZ3RoIiwidW56aXBwZWRBcHBQYXRoIiwiZmlyc3QiLCJkZWJ1ZyIsImNhY2hlZEFwcEluZm8iLCJpc1VybCIsInByZXNpZ25BcHAiLCJhcHBMb2NhdGlvbiIsIm5vU2lnbiIsImNoZWNrQXBrQ2VydCIsInNpZ24iLCJoYXNBcGtFeHQiLCJoYXNBYWJFeHQiLCJleHRyYWN0VW5pdmVyc2FsQXBrIiwic2hvdWxkRXh0cmFjdCIsInBhdGhJbkNhY2hlIiwiaXNSZXN1bHRBcHBQYXRoQWxyZWFkeUNhY2hlZCIsImlzUGxhaW5PYmplY3QiLCJwYWNrYWdlSGFzaCIsImhhc2giLCJleGlzdHMiLCJmdWxsUGF0aCIsImlzQXBrIiwic2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkIiwiaXNVbnppcHBlZEFwayIsInJpbXJhZiIsImRyaXZlckRhdGEiLCJpc0VtdWxhdG9yIiwiYXZkIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsImF2ZERldmljZSIsImF2ZEFyZ3MiLCJ0b0xvd2VyQ2FzZSIsIm1hbmlmZXN0UGF5bG9hZCIsImdldFBhY2thZ2VJbmZvIiwidmVyc2lvbiIsImdldEFwaUxldmVsIiwic2V0SGlkZGVuQXBpUG9saWN5IiwiaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3IiLCJhcHBJbmZvIiwiZ2V0TGF1bmNoSW5mbyIsImluaXREZXZpY2UiLCJpc0FuaW1hdGlvbk9uIiwic2V0QW5pbWF0aW9uU3RhdGUiLCJ3YXNBbmltYXRpb25FbmFibGVkIiwiY3VyRGV2aWNlSWQiLCJkZXZpY2VVRElEIiwiaW5pdEVzcHJlc3NvU2VydmVyIiwiZm9yd2FyZFBvcnQiLCJza2lwVW5sb2NrIiwidW5sb2NrIiwiaW5pdEFVVCIsImFwcFdhaXRQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJxdWFsaWZ5QWN0aXZpdHlOYW1lIiwiYXBwV2FpdEFjdGl2aXR5Iiwic3RhcnRTZXNzaW9uIiwid2FpdEZvckFjdGl2aXR5IiwiYXBwV2FpdER1cmF0aW9uIiwiYXV0b1dlYnZpZXciLCJpbml0V2VidmlldyIsImFkZERldmljZUluZm9Ub0NhcHMiLCJ2aWV3TmFtZSIsImFuZHJvaWRDb21tYW5kcyIsImRlZmF1bHRXZWJ2aWV3TmFtZSIsImNhbGwiLCJ0aW1lb3V0IiwiYXV0b1dlYnZpZXdUaW1lb3V0IiwicmV0cnlJbnRlcnZhbCIsInNldENvbnRleHQiLCJhcGlWZXJzaW9uIiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJyZWFsRGlzcGxheVNpemUiLCJkaXNwbGF5RGVuc2l0eSIsIm1vYmlsZUdldERldmljZUluZm8iLCJkZXZpY2VBcGlMZXZlbCIsInBhcnNlSW50IiwiZGV2aWNlU2NyZWVuU2l6ZSIsImRldmljZVNjcmVlbkRlbnNpdHkiLCJkZXZpY2VNb2RlbCIsImRldmljZU1hbnVmYWN0dXJlciIsIkVzcHJlc3NvUnVubmVyIiwiaG9zdCIsInJlbW90ZUFkYkhvc3QiLCJkZXZpY2VQb3J0IiwiYXBrIiwidG1wRGlyIiwiZm9yY2VFc3ByZXNzb1JlYnVpbGQiLCJlc3ByZXNzb0J1aWxkQ29uZmlnIiwic2hvd0dyYWRsZUxvZyIsInNlcnZlckxhdW5jaFRpbWVvdXQiLCJlc3ByZXNzb1NlcnZlckxhdW5jaFRpbWVvdXQiLCJza2lwU2VydmVySW5zdGFsbGF0aW9uIiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsImRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIiwicHJveHlSZXFSZXMiLCJwcm94eUNvbW1hbmQiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwicGFyc2VBcnJheSIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJURVNUX0FQS19QS0ciLCJmYXN0UmVzZXQiLCJyZXNldEFwcCIsInNraXBVbmluc3RhbGwiLCJ1bmluc3RhbGxBcGsiLCJpbnN0YWxsQXBrIiwiaW5zdGFsbFRlc3RBcGsiLCJhZGRUb0RldmljZUlkbGVXaGl0ZWxpc3QiLCJzdGRlcnIiLCJzY3JlZW5SZWNvcmRpbmdTdG9wVGFza3MiLCJfc2NyZWVuUmVjb3JkaW5nUHJvcGVydGllcyIsInN0b3BSZWNvcmRpbmdTY3JlZW4iLCJtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiX3NjcmVlblN0cmVhbWluZ1Byb3BzIiwibW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZyIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsIkIiLCJhbGwiLCJ0YXNrIiwiaWduIiwiZG9udFN0b3BBcHBPblJlc2V0IiwiZm9yY2VTdG9wIiwic3RvcExvZ2NhdCIsImF2ZE5hbWUiLCJraWxsRW11bGF0b3IiLCJzZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5IiwidW5kZWZpbmVkIiwicmVtb3ZlUG9ydEZvcndhcmQiLCJlcnJvciIsInByb3h5QWN0aXZlIiwiY2FuUHJveHkiLCJnZXRQcm94eUF2b2lkTGlzdCIsImlzTmlsIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsImlzQ2hyb21lQnJvd3NlciIsImJyb3dzZXJOYW1lIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJjbWQiLCJmbiIsInRvUGFpcnMiLCJwcm90b3R5cGUiLCJjb21tYW5kcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9kcml2ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgQmFzZURyaXZlciwgZXJyb3JzLCBpc0Vycm9yVHlwZSwgRGV2aWNlU2V0dGluZ3N9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuaW1wb3J0IHsgRXNwcmVzc29SdW5uZXIsIFRFU1RfQVBLX1BLRyB9IGZyb20gJy4vZXNwcmVzc28tcnVubmVyJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCB6aXAgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgY29tbWFuZHMgZnJvbSAnLi9jb21tYW5kcyc7XG5pbXBvcnQgeyBERUZBVUxUX0FEQl9QT1JUIH0gZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQgeyBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lELCB9IGZyb20gJ2FwcGl1bS1hbmRyb2lkLWRyaXZlcic7XG5pbXBvcnQgZGVzaXJlZENhcENvbnN0cmFpbnRzIGZyb20gJy4vZGVzaXJlZC1jYXBzJztcbmltcG9ydCB7IGZpbmRBUG9ydE5vdEluVXNlIH0gZnJvbSAncG9ydHNjYW5uZXInO1xuaW1wb3J0IHsgcmV0cnlJbnRlcnZhbCB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHF1YWxpZnlBY3Rpdml0eU5hbWUsIGdldFBhY2thZ2VJbmZvIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBuZXdNZXRob2RNYXAgfSBmcm9tICcuL21ldGhvZC1tYXAnO1xuXG5cbi8vIFRPRE8gbWVyZ2Ugb3VyIG93biBoZWxwZXJzIG9udG8gdGhpcyBsYXRlclxuY29uc3QgaGVscGVycyA9IGFuZHJvaWRIZWxwZXJzO1xuXG4vLyBUaGUgcmFuZ2Ugb2YgcG9ydHMgd2UgY2FuIHVzZSBvbiB0aGUgc3lzdGVtIGZvciBjb21tdW5pY2F0aW5nIHRvIHRoZVxuLy8gRXNwcmVzc28gSFRUUCBzZXJ2ZXIgb24gdGhlIGRldmljZVxuY29uc3QgU1lTVEVNX1BPUlRfUkFOR0UgPSBbODMwMCwgODM5OV07XG5cbi8vIFRoaXMgaXMgdGhlIHBvcnQgdGhhdCB0aGUgZXNwcmVzc28gc2VydmVyIGxpc3RlbnMgdG8gb24gdGhlIGRldmljZS4gV2Ugd2lsbFxuLy8gZm9yd2FyZCBvbmUgb2YgdGhlIHBvcnRzIGFib3ZlIG9uIHRoZSBzeXN0ZW0gdG8gdGhpcyBwb3J0IG9uIHRoZSBkZXZpY2UuXG5jb25zdCBERVZJQ0VfUE9SVCA9IDY3OTE7XG5cbi8vIE5PX1BST1hZIGNvbnRhaW5zIHRoZSBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gZXNwcmVzc28gc2VydmVyLlxuLy8gVE9ETzogIEFkZCB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gZXNwcmVzc28gc2VydmVyLlxuLy8gVE9ETzogTmVlZCB0byBzZWdyZWdhdGUgdGhlIHBhdGhzIGJldHRlciB3YXkgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucyB3aGVyZXZlciBhcHBsaWNhYmxlLlxuLy8gKE5vdCBzZWdyZWdhdGluZyByaWdodCBhd2F5IGJlY2F1c2UgbW9yZSBwYXRocyB0byBiZSBhZGRlZCBpbiB0aGUgTk9fUFJPWFkgbGlzdClcbmNvbnN0IE5PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi8oPyEuKi8pJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2N1cnJlbnRfYWN0aXZpdHknKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvY3VycmVudF9wYWNrYWdlJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2Rpc3BsYXlfZGVuc2l0eScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9pc19rZXlib2FyZF9zaG93bicpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9zeXN0ZW1fYmFycycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9zeXN0ZW1fdGltZScpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3NldHRpbmdzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0cycpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvaW1lL1teL10rJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9uZXR3b3JrX2Nvbm5lY3Rpb24nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy91cmwnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL2JhY2tncm91bmQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL2Nsb3NlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9sYXVuY2gnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vYXBwL3Jlc2V0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2FwcC9zdHJpbmdzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2NvbXBhcmVfaW1hZ2VzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9hY3RpdmF0ZV9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2FwcF9pbnN0YWxsZWQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL2FwcF9zdGF0ZScpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvZmluZ2VyX3ByaW50JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9nZXRfY2xpcGJvYXJkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9pbnN0YWxsX2FwcCcpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9kZXZpY2UvaXNfbG9ja2VkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9sb2NrJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9wdWxsX2ZpbGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3B1bGxfZm9sZGVyJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS9wdXNoX2ZpbGUnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3JlbW92ZV9hcHAnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZGV2aWNlL3N0YXJ0X2FjdGl2aXR5JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS90ZXJtaW5hdGVfYXBwJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL2RldmljZS91bmxvY2snKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0vZ2V0UGVyZm9ybWFuY2VEYXRhJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3BlcmZvcm1hbmNlRGF0YS90eXBlcycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zZXR0aW5ncycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9leGVjdXRlX2RyaXZlcicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2FwcGl1bS9zdGFydF9yZWNvcmRpbmdfc2NyZWVuJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvYXBwaXVtL3N0b3BfcmVjb3JkaW5nX3NjcmVlbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9leGVjdXRlJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9hc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUvc3luYycpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGVfYXN5bmMnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9pbWUvW14vXSsnKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9sb2NhdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL25ldHdvcmtfY29ubmVjdGlvbicpXSxcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3RpbWVvdXRzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdXJsJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcycpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJyldLFxuXTtcblxuLy8gVGhpcyBpcyBhIHNldCBvZiBtZXRob2RzIGFuZCBwYXRocyB0aGF0IHdlIG5ldmVyIHdhbnQgdG8gcHJveHkgdG8gQ2hyb21lZHJpdmVyLlxuY29uc3QgQ0hST01FX05PX1BST1hZID0gW1xuICBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2NvbnRleHQnKV0sXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2VsZW1lbnQvW14vXSsvcmVjdCcpXSxcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9hcHBpdW0nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9jb250ZXh0JyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvb3JpZW50YXRpb24nKV0sXG4gIFsnUE9TVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy90b3VjaC9tdWx0aS9wZXJmb3JtJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvdG91Y2gvcGVyZm9ybScpXSxcblxuICAvLyB0aGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBtb2JpbGU6IGNvbW1hbmRzIHdvcmtpbmcgaW4gd2ViIGNvbnRleHRcbiAgWydQT1NUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL2V4ZWN1dGUkJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvZXhlY3V0ZS9zeW5jJyldLFxuXG4gIC8vIE1KU09OV1AgY29tbWFuZHNcbiAgWydHRVQnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nL3R5cGVzJyldLFxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvbG9nJyldLFxuXG4gIC8vIFczQyBjb21tYW5kc1xuICAvLyBGb3IgU2VsZW5pdW0gdjQgKFczQyBkb2VzIG5vdCBoYXZlIHRoaXMgcm91dGUpXG4gIFsnR0VUJywgbmV3IFJlZ0V4cCgnXi9zZXNzaW9uL1teL10rL3NlL2xvZy90eXBlcycpXSxcbiAgLy8gRm9yIFNlbGVuaXVtIHY0IChXM0MgZG9lcyBub3QgaGF2ZSB0aGlzIHJvdXRlKVxuICBbJ1BPU1QnLCBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vW14vXSsvc2UvbG9nJyldLFxuXTtcblxuXG5jb25zdCBBUEtfRVhUID0gJy5hcGsnO1xuY29uc3QgQUFCX0VYVCA9ICcuYWFiJztcbmNvbnN0IFNVUFBPUlRFRF9FWFRFTlNJT05TID0gW0FQS19FWFQsIEFBQl9FWFRdO1xuXG5jbGFzcyBFc3ByZXNzb0RyaXZlciBleHRlbmRzIEJhc2VEcml2ZXIge1xuXG4gIHN0YXRpYyBuZXdNZXRob2RNYXAgPSBuZXdNZXRob2RNYXA7XG5cbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIC8vIGBzaGVsbGAgb3ZlcndyaXRlcyBhZGIuc2hlbGwsIHNvIHJlbW92ZVxuICAgIGRlbGV0ZSBvcHRzLnNoZWxsO1xuXG4gICAgc3VwZXIob3B0cywgc2hvdWxkVmFsaWRhdGVDYXBzKTtcbiAgICB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzID0gW1xuICAgICAgJ2lkJyxcbiAgICAgICdjbGFzcyBuYW1lJyxcbiAgICAgICdhY2Nlc3NpYmlsaXR5IGlkJyxcbiAgICBdO1xuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuICAgIHRoaXMuZXNwcmVzc28gPSBudWxsO1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBOT19QUk9YWTtcblxuICAgIHRoaXMuYXBrU3RyaW5ncyA9IHt9OyAvLyBtYXAgb2YgbGFuZ3VhZ2UgLT4gc3RyaW5ncyBvYmpcbiAgICB0aGlzLnNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKHt9LCB0aGlzLm9uU2V0dGluZ3NVcGRhdGUuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycyA9IHt9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2Vzc2lvbiAoLi4uYXJncykge1xuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPIGhhbmRsZSBvdGhlclNlc3Npb25EYXRhIGZvciBtdWx0aXBsZSBzZXNzaW9uc1xuICAgICAgbGV0IFtzZXNzaW9uSWQsIGNhcHNdID0gYXdhaXQgc3VwZXIuY3JlYXRlU2Vzc2lvbiguLi5hcmdzKTtcblxuICAgICAgbGV0IHNlcnZlckRldGFpbHMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiAnTElOVVgnLFxuICAgICAgICB3ZWJTdG9yYWdlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHRha2VzU2NyZWVuc2hvdDogdHJ1ZSxcbiAgICAgICAgamF2YXNjcmlwdEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGRhdGFiYXNlRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtDb25uZWN0aW9uRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgbG9jYXRpb25Db250ZXh0RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIHdhcm5pbmdzOiB7fSxcbiAgICAgICAgZGVzaXJlZDogT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jYXBzKVxuICAgICAgfTtcblxuICAgICAgdGhpcy5jYXBzID0gT2JqZWN0LmFzc2lnbihzZXJ2ZXJEZXRhaWxzLCB0aGlzLmNhcHMpO1xuXG4gICAgICB0aGlzLmN1ckNvbnRleHQgPSB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xuXG4gICAgICBsZXQgZGVmYXVsdE9wdHMgPSB7XG4gICAgICAgIGZ1bGxSZXNldDogZmFsc2UsXG4gICAgICAgIGF1dG9MYXVuY2g6IHRydWUsXG4gICAgICAgIGFkYlBvcnQ6IERFRkFVTFRfQURCX1BPUlQsXG4gICAgICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dDogOTAwMDBcbiAgICAgIH07XG4gICAgICBfLmRlZmF1bHRzKHRoaXMub3B0cywgZGVmYXVsdE9wdHMpO1xuXG4gICAgICBpZiAodGhpcy5pc0Nocm9tZVNlc3Npb24pIHtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5hcHApIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGAnYnJvd3Nlck5hbWUnIGNhcGFiaWxpdHkgd2lsbCBiZSBpZ25vcmVkYCk7XG4gICAgICAgICAgdGhpcy5sb2cud2FybihgQ2hyb21lIGJyb3dzZXIgY2Fubm90IGJlIHJ1biBpbiBFc3ByZXNzbyBzZXNzaW9ucyBiZWNhdXNlIEVzcHJlc3NvIGF1dG9tYXRpb24gZG9lc24ndCBgICtcbiAgICAgICAgICAgICAgYGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgQ2hyb21lYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2hyb21lIGJyb3dzZXIgc2Vzc2lvbnMgY2Fubm90IGJlIHJ1biBpbiBFc3ByZXNzbyBiZWNhdXNlIEVzcHJlc3NvIGAgK1xuICAgICAgICAgICAgYGF1dG9tYXRpb24gZG9lc24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIENocm9tZWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIHRoaXMuc2V0QXZkRnJvbUNhcGFiaWxpdGllcyhjYXBzKTtcbiAgICAgICAgdGhpcy5hZGRXaXBlRGF0YVRvQXZkQXJncygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdHMuc3lzdGVtUG9ydCA9IHRoaXMub3B0cy5zeXN0ZW1Qb3J0XG4gICAgICAgIHx8IGF3YWl0IGZpbmRBUG9ydE5vdEluVXNlKFNZU1RFTV9QT1JUX1JBTkdFWzBdLCBTWVNURU1fUE9SVF9SQU5HRVsxXSk7XG4gICAgICB0aGlzLm9wdHMuYWRiUG9ydCA9IHRoaXMub3B0cy5hZGJQb3J0IHx8IERFRkFVTFRfQURCX1BPUlQ7XG4gICAgICAvLyBnZXQgZGV2aWNlIHVkaWQgZm9yIHRoaXMgc2Vzc2lvblxuICAgICAgY29uc3Qge3VkaWQsIGVtUG9ydH0gPSBhd2FpdCBoZWxwZXJzLmdldERldmljZUluZm9Gcm9tQ2Fwcyh0aGlzLm9wdHMpO1xuICAgICAgdGhpcy5vcHRzLnVkaWQgPSB1ZGlkO1xuICAgICAgdGhpcy5vcHRzLmVtUG9ydCA9IGVtUG9ydDtcbiAgICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgb3VyIGphdmEgdmVyc2lvbiBhbmQgZGV2aWNlIGluZm8sIHdlIGNhbiBjcmVhdGUgb3VyXG4gICAgICAvLyBBREIgaW5zdGFuY2VcbiAgICAgIHRoaXMuYWRiID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMuY3JlYXRlQURCKHRoaXMub3B0cyk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMuYXBwKSB7XG4gICAgICAgIC8vIGZpbmQgYW5kIGNvcHksIG9yIGRvd25sb2FkIGFuZCB1bnppcCBhbiBhcHAgdXJsIG9yIHBhdGhcbiAgICAgICAgdGhpcy5vcHRzLmFwcCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAodGhpcy5vcHRzLmFwcCwge1xuICAgICAgICAgIG9uUG9zdFByb2Nlc3M6IHRoaXMub25Qb3N0Q29uZmlndXJlQXBwLmJpbmQodGhpcyksXG4gICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogU1VQUE9SVEVEX0VYVEVOU0lPTlNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgLy8gdGhlIGFwcCBpc24ndCBhbiBhY3R1YWwgYXBwIGZpbGUgYnV0IHJhdGhlciBzb21ldGhpbmcgd2Ugd2FudCB0b1xuICAgICAgICAvLyBhc3N1bWUgaXMgb24gdGhlIGRldmljZSBhbmQganVzdCBsYXVuY2ggdmlhIHRoZSBhcHBQYWNrYWdlXG4gICAgICAgIHRoaXMubG9nLmluZm8oYEFwcCBmaWxlIHdhcyBub3QgbGlzdGVkLCBpbnN0ZWFkIHdlJ3JlIGdvaW5nIHRvIHJ1biBgICtcbiAgICAgICAgICAgIGAke3RoaXMub3B0cy5hcHBQYWNrYWdlfSBkaXJlY3RseSBvbiB0aGUgZGV2aWNlYCk7XG4gICAgICAgIGlmICghYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQodGhpcy5vcHRzLmFwcFBhY2thZ2UpKSB7XG4gICAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ291bGQgbm90IGZpbmQgdGhlIHBhY2thZ2UgJyR7dGhpcy5vcHRzLmFwcFBhY2thZ2V9JyBgICtcbiAgICAgICAgICAgIGBpbnN0YWxsZWQgb24gdGhlIGRldmljZWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRFc3ByZXNzb1Nlc3Npb24oKTtcbiAgICAgIHJldHVybiBbc2Vzc2lvbklkLCBjYXBzXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcbiAgICAgIGUubWVzc2FnZSArPSBgJHtfLmVuZHNXaXRoKGUubWVzc2FnZSwgJy4nKSA/ICcnIDogJy4nfSBDaGVjayBgICtcbiAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLWVzcHJlc3NvLWRyaXZlciN0cm91Ymxlc2hvb3RpbmcgJyArXG4gICAgICAgICdyZWdhcmRpbmcgYWR2YW5jZWQgc2Vzc2lvbiBzdGFydHVwIHRyb3VibGVzaG9vdGluZy4nO1xuICAgICAgaWYgKGlzRXJyb3JUeXBlKGUsIGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yKSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyID0gbmV3IGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yKGUubWVzc2FnZSk7XG4gICAgICBlcnIuc3RhY2sgPSBlLnN0YWNrO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnppcCB0aGUgZ2l2ZW4gYXBwIHBhdGggYW5kIHJldHVybiB0aGUgZmlyc3QgcGFja2FnZSB0aGF0IGhhcyBTVVBQT1JURURfRVhURU5TSU9OU1xuICAgKiBpbiB0aGUgYXJjaGl2ZWQgZmlsZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggVGhlIHBhdGggdG8gYXBwIGZpbGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVucyB0aGUgcGF0aCB0byBhbiB1bnppcHBlZCBhcHAgZmlsZSBwYXRoLlxuICAgKiBAdGhyb3dzIFJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgemlwIGRpZCBub3QgaGF2ZSBhbnkgU1VQUE9SVEVEX0VYVEVOU0lPTlMgcGFja2FnZXMuXG4gICAqL1xuICBhc3luYyB1bnppcEFwcCAoYXBwUGF0aCkge1xuICAgIGNvbnN0IHVzZVN5c3RlbVVuemlwRW52ID0gcHJvY2Vzcy5lbnYuQVBQSVVNX1BSRUZFUl9TWVNURU1fVU5aSVA7XG4gICAgY29uc3QgdXNlU3lzdGVtVW56aXAgPSBfLmlzRW1wdHkodXNlU3lzdGVtVW56aXBFbnYpXG4gICAgICB8fCAhWycwJywgJ2ZhbHNlJ10uaW5jbHVkZXMoXy50b0xvd2VyKHVzZVN5c3RlbVVuemlwRW52KSk7XG4gICAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICAgIGF3YWl0IHppcC5leHRyYWN0QWxsVG8oYXBwUGF0aCwgdG1wUm9vdCwge3VzZVN5c3RlbVVuemlwfSk7XG5cbiAgICBjb25zdCBnbG9iUGF0dGVybiA9IGAqKi8qLisoJHtTVVBQT1JURURfRVhURU5TSU9OUy5tYXAoKGV4dCkgPT4gZXh0LnJlcGxhY2UoL15cXC4vLCAnJykpLmpvaW4oJ3wnKX0pYDtcbiAgICBjb25zdCBzb3J0ZWRCdW5kbGVJdGVtcyA9IChhd2FpdCBmcy5nbG9iKGdsb2JQYXR0ZXJuLCB7XG4gICAgICBjd2Q6IHRtcFJvb3QsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgIH0pKS5zb3J0KChhLCBiKSA9PiBhLnNwbGl0KHBhdGguc2VwKS5sZW5ndGggLSBiLnNwbGl0KHBhdGguc2VwKS5sZW5ndGgpO1xuICAgIGlmIChzb3J0ZWRCdW5kbGVJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIG5vIGV4cGVjdGVkIHBhY2thZ2VzIGluIHRoZSB6aXBcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCR7dGhpcy5vcHRzLmFwcH0gZGlkIG5vdCBoYXZlIGFueSBvZiAnJHtTVVBQT1JURURfRVhURU5TSU9OUy5qb2luKCcsICcpfScgYCArXG4gICAgICAgIGBleHRlbnNpb24gcGFja2FnZXMuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHByb3ZpZGVkIC56aXAgYXJjaGl2ZSBjb250YWlucyBhdCBsZWFzdCBvbmUgdmFsaWQgYXBwbGljYXRpb24gcGFja2FnZS5gKTtcbiAgICB9XG4gICAgY29uc3QgdW56aXBwZWRBcHBQYXRoID0gcGF0aC5qb2luKHRtcFJvb3QsIF8uZmlyc3Qoc29ydGVkQnVuZGxlSXRlbXMpKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgJyR7dW56aXBwZWRBcHBQYXRofScgaXMgdGhlIHVuemlwcGVkIGZpbGUgZnJvbSAnJHthcHBQYXRofSdgKTtcbiAgICByZXR1cm4gdW56aXBwZWRBcHBQYXRoO1xuICB9XG5cbiAgYXN5bmMgb25Qb3N0Q29uZmlndXJlQXBwICh7Y2FjaGVkQXBwSW5mbywgaXNVcmwsIGFwcFBhdGh9KSB7XG4gICAgY29uc3QgcHJlc2lnbkFwcCA9IGFzeW5jIChhcHBMb2NhdGlvbikgPT4ge1xuICAgICAgaWYgKHRoaXMub3B0cy5ub1NpZ24pIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbygnU2tpcHBpbmcgYXBwbGljYXRpb24gc2lnbmluZyBiZWNhdXNlIG5vU2lnbiBjYXBhYmlsaXR5IGlzIHNldCB0byB0cnVlLiAnICtcbiAgICAgICAgICAnSGF2aW5nIHRoZSBhcHBsaWNhdGlvbiB1bmRlciB0ZXN0IHdpdGggaW1wcm9wZXIgc2lnbmF0dXJlL25vbi1zaWduZWQgd2lsbCBjYXVzZSAnICtcbiAgICAgICAgICAnRXNwcmVzc28gYXV0b21hdGlvbiBzdGFydHVwIGZhaWx1cmUuJyk7XG4gICAgICB9IGVsc2UgaWYgKCFhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQoYXBwTG9jYXRpb24sIHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zaWduKGFwcExvY2F0aW9uLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGhhc0Fwa0V4dCA9IChhcHBQYXRoKSA9PiBfLmVuZHNXaXRoKF8udG9Mb3dlcihhcHBQYXRoKSwgQVBLX0VYVCk7XG4gICAgY29uc3QgaGFzQWFiRXh0ID0gKGFwcFBhdGgpID0+IF8uZW5kc1dpdGgoXy50b0xvd2VyKGFwcFBhdGgpLCBBQUJfRVhUKTtcbiAgICBjb25zdCBleHRyYWN0VW5pdmVyc2FsQXBrID0gYXN5bmMgKHNob3VsZEV4dHJhY3QsIGFwcFBhdGgpID0+XG4gICAgICBzaG91bGRFeHRyYWN0ID8gYXBwUGF0aCA6IGF3YWl0IHRoaXMuYWRiLmV4dHJhY3RVbml2ZXJzYWxBcGsoYXBwUGF0aCk7XG5cbiAgICBsZXQgcGF0aEluQ2FjaGUgPSBudWxsO1xuICAgIGxldCBpc1Jlc3VsdEFwcFBhdGhBbHJlYWR5Q2FjaGVkID0gZmFsc2U7XG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChjYWNoZWRBcHBJbmZvKSkge1xuICAgICAgY29uc3QgcGFja2FnZUhhc2ggPSBhd2FpdCBmcy5oYXNoKGFwcFBhdGgpO1xuICAgICAgaWYgKHBhY2thZ2VIYXNoID09PSBjYWNoZWRBcHBJbmZvLnBhY2thZ2VIYXNoICYmIGF3YWl0IGZzLmV4aXN0cyhjYWNoZWRBcHBJbmZvLmZ1bGxQYXRoKSkge1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBVc2luZyAnJHtjYWNoZWRBcHBJbmZvLmZ1bGxQYXRofScgd2hpY2ggaXMgY2FjaGVkIGZyb20gJyR7YXBwUGF0aH0nYCk7XG4gICAgICAgIGlzUmVzdWx0QXBwUGF0aEFscmVhZHlDYWNoZWQgPSB0cnVlO1xuICAgICAgICBwYXRoSW5DYWNoZSA9IGNhY2hlZEFwcEluZm8uZnVsbFBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYXBwUGF0aCBjYW4gYmUgLnppcCwgLmFwayBvciAuYWFiXG4gICAgY29uc3QgaXNBcGsgPSBoYXNBcGtFeHQoYXBwUGF0aCk7XG4gICAgLy8gT25seSBsb2NhbCAuYXBrIGZpbGVzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbi1wbGFjZSBzaG91bGQgbm90IGJlIGNhY2hlZFxuICAgIGNvbnN0IHNob3VsZFJlc3VsdEFwcFBhdGhCZUNhY2hlZCA9ICFpc0FwayB8fCAoaXNBcGsgJiYgaXNVcmwpO1xuXG4gICAgaWYgKCFpc1Jlc3VsdEFwcFBhdGhBbHJlYWR5Q2FjaGVkKSB7XG4gICAgICBpZiAoc2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkKSB7XG4gICAgICAgIC8vIC56aXAsIC5hYWIgb3IgZG93bmxvYWRlZCAuYXBrXG5cbiAgICAgICAgbGV0IHVuemlwcGVkQXBwUGF0aDtcbiAgICAgICAgbGV0IGlzVW56aXBwZWRBcGsgPSBmYWxzZTtcbiAgICAgICAgaWYgKCEoaGFzQXBrRXh0KGFwcFBhdGgpIHx8IGhhc0FhYkV4dChhcHBQYXRoKSkpIHtcbiAgICAgICAgICB1bnppcHBlZEFwcFBhdGggPSBhd2FpdCB0aGlzLnVuemlwQXBwKGFwcFBhdGgpO1xuICAgICAgICAgIGlzVW56aXBwZWRBcGsgPSBoYXNBcGtFeHQodW56aXBwZWRBcHBQYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVuemlwcGVkQXBwUGF0aCBvciBhcHBQYXRoIGhhcyBTVVBQT1JURURfRVhURU5TSU9OUy5cbiAgICAgICAgcGF0aEluQ2FjaGUgPSB1bnppcHBlZEFwcFBhdGhcbiAgICAgICAgICA/IGF3YWl0IGV4dHJhY3RVbml2ZXJzYWxBcGsoaXNVbnppcHBlZEFwaywgdW56aXBwZWRBcHBQYXRoKVxuICAgICAgICAgIDogYXdhaXQgZXh0cmFjdFVuaXZlcnNhbEFwayhpc0FwaywgYXBwUGF0aCk7XG5cbiAgICAgICAgaWYgKCFpc0FwayAmJiBpc1VybCkge1xuICAgICAgICAgIC8vIENsZWFuIHVwIHRoZSB0ZW1wb3JhcmlseSBkb3dubG9hZGVkIC5hYWIgb3IgLnppcCBwYWNrYWdlXG4gICAgICAgICAgYXdhaXQgZnMucmltcmFmKGFwcFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNBYWJFeHQodW56aXBwZWRBcHBQYXRoKSkge1xuICAgICAgICAgIC8vIENsZWFudXAgdGhlIGxvY2FsIHVuemlwcGVkIC5hYWIgZmlsZVxuICAgICAgICAgIGF3YWl0IGZzLnJpbXJhZih1bnppcHBlZEFwcFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHByZXNpZ25BcHAocGF0aEluQ2FjaGUpO1xuICAgICAgfSBlbHNlIGlmIChpc0Fwaykge1xuICAgICAgICAvLyBJdCBpcyBwcm9iYWJseSBub3QgdGhlIGJlc3QgaWRlYSB0byBtb2RpZnkgdGhlIHByb3ZpZGVkIGFwcCBpbi1wbGFjZSxcbiAgICAgICAgLy8gYnV0IHRoaXMgaXMgaG93IGl0IHdhcyBhbHdheXMgd29ya2luZ1xuICAgICAgICBhd2FpdCBwcmVzaWduQXBwKGFwcFBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2hvdWxkUmVzdWx0QXBwUGF0aEJlQ2FjaGVkID8ge2FwcFBhdGg6IHBhdGhJbkNhY2hlfSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIC8vIFRPRE8gZmlsbGUgb3V0IHJlc291cmNlIGluZm8gaGVyZVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGlzRW11bGF0b3IgKCkge1xuICAgIHJldHVybiBoZWxwZXJzLmlzRW11bGF0b3IodGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIH1cblxuICAvLyBUT0RPIHRoaXMgbWV0aG9kIGlzIGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjItZHJpdmVyOyBjb25zb2xpZGF0ZVxuICBzZXRBdmRGcm9tQ2FwYWJpbGl0aWVzIChjYXBzKSB7XG4gICAgaWYgKHRoaXMub3B0cy5hdmQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oJ2F2ZCBuYW1lIGRlZmluZWQsIGlnbm9yaW5nIGRldmljZSBuYW1lIGFuZCBwbGF0Zm9ybSB2ZXJzaW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY2Fwcy5kZXZpY2VOYW1lKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ2F2ZCBvciBkZXZpY2VOYW1lIHNob3VsZCBiZSBzcGVjaWZpZWQgd2hlbiByZWJvb3Qgb3B0aW9uIGlzIGVuYWJsZXMnKTtcbiAgICAgIH1cbiAgICAgIGlmICghY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnYXZkIG9yIHBsYXRmb3JtVmVyc2lvbiBzaG91bGQgYmUgc3BlY2lmaWVkIHdoZW4gcmVib290IG9wdGlvbiBpcyBlbmFibGVkJyk7XG4gICAgICB9XG4gICAgICBsZXQgYXZkRGV2aWNlID0gY2Fwcy5kZXZpY2VOYW1lLnJlcGxhY2UoL1teYS16QS1aMC05Xy5dL2csICctJyk7XG4gICAgICB0aGlzLm9wdHMuYXZkID0gYCR7YXZkRGV2aWNlfV9fJHtjYXBzLnBsYXRmb3JtVmVyc2lvbn1gO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBtZXRob2QgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMi1kcml2ZXI7IGNvbnNvbGlkYXRlXG4gIGFkZFdpcGVEYXRhVG9BdmRBcmdzICgpIHtcbiAgICBpZiAoIXRoaXMub3B0cy5hdmRBcmdzKSB7XG4gICAgICB0aGlzLm9wdHMuYXZkQXJncyA9ICctd2lwZS1kYXRhJztcbiAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdHMuYXZkQXJncy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCctd2lwZS1kYXRhJykpIHtcbiAgICAgIHRoaXMub3B0cy5hdmRBcmdzICs9ICcgLXdpcGUtZGF0YSc7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETyBtdWNoIG9mIHRoaXMgbG9naWMgaXMgZHVwbGljYXRlZCBmcm9tIHVpYXV0b21hdG9yMlxuICBhc3luYyBzdGFydEVzcHJlc3NvU2Vzc2lvbiAoKSB7XG4gICAgY29uc3Qge21hbmlmZXN0UGF5bG9hZH0gPSBhd2FpdCBnZXRQYWNrYWdlSW5mbygpO1xuICAgIHRoaXMubG9nLmluZm8oYEVzcHJlc3NvRHJpdmVyIHZlcnNpb246ICR7bWFuaWZlc3RQYXlsb2FkLnZlcnNpb259YCk7XG5cbiAgICAvLyBSZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtLWFuZHJvaWQtZHJpdmVyL3B1bGwvNDYxIHdoYXQgaGFwcGVucyBpZiB0aGVyIGlzIG5vIHNldEhpZGRlbkFwaVBvbGljeSBmb3IgQW5kcm9pZCBQK1xuICAgIGlmIChhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpID49IDI4KSB7IC8vIEFuZHJvaWQgUFxuICAgICAgdGhpcy5sb2cud2FybignUmVsYXhpbmcgaGlkZGVuIGFwaSBwb2xpY3knKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEhpZGRlbkFwaVBvbGljeSgnMScsICEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBnZXQgYXBwUGFja2FnZSBldCBhbCBmcm9tIG1hbmlmZXN0IGlmIG5lY2Vzc2FyeVxuICAgIGxldCBhcHBJbmZvID0gYXdhaXQgaGVscGVycy5nZXRMYXVuY2hJbmZvKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIGlmIChhcHBJbmZvKSB7XG4gICAgICAvLyBhbmQgZ2V0IGl0IG9udG8gb3VyICdvcHRzJyBvYmplY3Qgc28gd2UgdXNlIGl0IGZyb20gbm93IG9uXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMub3B0cywgYXBwSW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcEluZm8gPSB0aGlzLm9wdHM7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgYW4gYXZkLCBzZXQgdGhlIGxhbmd1YWdlL2xvY2FsZSwgcGljayBhbiBlbXVsYXRvciwgZXRjLi4uXG4gICAgLy8gVE9ETyB3aXRoIG11bHRpcGxlIGRldmljZXMgd2UnbGwgbmVlZCB0byBwYXJhbWV0ZXJpemUgdGhpc1xuICAgIGF3YWl0IGhlbHBlcnMuaW5pdERldmljZSh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1lc3ByZXNzby1kcml2ZXIvaXNzdWVzLzcyXG4gICAgaWYgKGF3YWl0IHRoaXMuYWRiLmlzQW5pbWF0aW9uT24oKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2V0QW5pbWF0aW9uU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLndhc0FuaW1hdGlvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYFVuYWJsZSB0byB0dXJuIG9mZiBhbmltYXRpb25zOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldCBhY3R1YWwgZGV2aWNlIG5hbWUsIHVkaWRcbiAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9IHRoaXMuYWRiLmN1ckRldmljZUlkO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VVRElEID0gdGhpcy5vcHRzLnVkaWQ7XG5cbiAgICAvLyBzZXQgdXAgdGhlIG1vZGlmaWVkIGVzcHJlc3NvIHNlcnZlciBldGNcbiAgICB0aGlzLmluaXRFc3ByZXNzb1NlcnZlcigpO1xuICAgIC8vIEZ1cnRoZXIgcHJlcGFyZSB0aGUgZGV2aWNlIGJ5IGZvcndhcmRpbmcgdGhlIGVzcHJlc3NvIHBvcnRcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRm9yd2FyZGluZyBFc3ByZXNzbyBTZXJ2ZXIgcG9ydCAke0RFVklDRV9QT1JUfSB0byAke3RoaXMub3B0cy5zeXN0ZW1Qb3J0fWApO1xuICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KHRoaXMub3B0cy5zeXN0ZW1Qb3J0LCBERVZJQ0VfUE9SVCk7XG5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5sb2NrKSB7XG4gICAgICAvLyB1bmxvY2sgdGhlIGRldmljZSB0byBwcmVwYXJlIGl0IGZvciB0ZXN0aW5nXG4gICAgICBhd2FpdCBoZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwgdGhpcy5jYXBzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYCdza2lwVW5sb2NrJyBjYXBhYmlsaXR5IHNldCwgc28gc2tpcHBpbmcgZGV2aWNlIHVubG9ja2ApO1xuICAgIH1cblxuICAgIC8vIHNldCB1cCBhcHAgdW5kZXIgdGVzdFxuICAgIC8vIHByZXBhcmUgb3VyIGFjdHVhbCBBVVQsIGdldCBpdCBvbiB0aGUgZGV2aWNlLCBldGMuLi5cbiAgICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcblxuICAgIC8vQWRkaW5nIEFVVCBwYWNrYWdlIG5hbWUgaW4gdGhlIGNhcGFiaWxpdGllcyBpZiBwYWNrYWdlIG5hbWUgbm90IGV4aXN0IGluIGNhcHNcbiAgICBpZiAoIXRoaXMuY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICB0aGlzLmNhcHMuYXBwUGFja2FnZSA9IGFwcEluZm8uYXBwUGFja2FnZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSA9IGFwcEluZm8uYXBwV2FpdFBhY2thZ2UgfHwgYXBwSW5mby5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHBQYWNrYWdlO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYXBzLmFwcEFjdGl2aXR5KSB7XG4gICAgICB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKHRoaXMuY2Fwcy5hcHBBY3Rpdml0eSwgdGhpcy5jYXBzLmFwcFBhY2thZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcHMuYXBwQWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEluZm8uYXBwQWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBQYWNrYWdlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkpIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHksIHRoaXMuY2Fwcy5hcHBXYWl0UGFja2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHkgPSBxdWFsaWZ5QWN0aXZpdHlOYW1lKGFwcEluZm8uYXBwV2FpdEFjdGl2aXR5IHx8IGFwcEluZm8uYXBwQWN0aXZpdHkgfHwgdGhpcy5jYXBzLmFwcEFjdGl2aXR5LFxuICAgICAgICB0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UpO1xuICAgIH1cblxuICAgIC8vIGxhdW5jaCBlc3ByZXNzbyBhbmQgd2FpdCB0aWxsIGl0cyBvbmxpbmUgYW5kIHdlIGhhdmUgYSBzZXNzaW9uXG4gICAgYXdhaXQgdGhpcy5lc3ByZXNzby5zdGFydFNlc3Npb24odGhpcy5jYXBzKTtcbiAgICBpZiAodGhpcy5jYXBzLmF1dG9MYXVuY2ggPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKGBOb3Qgd2FpdGluZyBmb3IgdGhlIGFwcGxpY2F0aW9uIGFjdGl2aXR5IHRvIHN0YXJ0IGJlY2F1c2UgJ2F1dG9MYXVuY2gnIGlzIGRpc2FibGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JBY3Rpdml0eSh0aGlzLmNhcHMuYXBwV2FpdFBhY2thZ2UsIHRoaXMuY2Fwcy5hcHBXYWl0QWN0aXZpdHksIHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24pO1xuICAgIH1cbiAgICAvLyBpZiB3ZSB3YW50IHRvIGltbWVkaWF0ZWx5IGdldCBpbnRvIGEgd2Vidmlldywgc2V0IG91ciBjb250ZXh0XG4gICAgLy8gYXBwcm9wcmlhdGVseVxuICAgIGlmICh0aGlzLm9wdHMuYXV0b1dlYnZpZXcpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdFdlYnZpZXcoKTtcbiAgICB9XG5cbiAgICAvLyBub3cgdGhhdCBldmVyeXRoaW5nIGhhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseSwgdHVybiBvbiBwcm94eWluZyBzbyBhbGxcbiAgICAvLyBzdWJzZXF1ZW50IHNlc3Npb24gcmVxdWVzdHMgZ28gc3RyYWlnaHQgdG8vZnJvbSBlc3ByZXNzb1xuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gICAgYXdhaXQgdGhpcy5hZGREZXZpY2VJbmZvVG9DYXBzKCk7XG4gIH1cblxuICBhc3luYyBpbml0V2VidmlldyAoKSB7XG4gICAgY29uc3Qgdmlld05hbWUgPSBhbmRyb2lkQ29tbWFuZHMuZGVmYXVsdFdlYnZpZXdOYW1lLmNhbGwodGhpcyk7XG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMub3B0cy5hdXRvV2Vidmlld1RpbWVvdXQgfHwgMjAwMDtcbiAgICB0aGlzLmxvZy5pbmZvKGBTZXR0aW5nIHdlYnZpZXcgdG8gY29udGV4dCAnJHt2aWV3TmFtZX0nIHdpdGggdGltZW91dCAke3RpbWVvdXR9bXNgKTtcbiAgICBhd2FpdCByZXRyeUludGVydmFsKHRpbWVvdXQgLyA1MDAsIDUwMCwgdGhpcy5zZXRDb250ZXh0LmJpbmQodGhpcyksIHZpZXdOYW1lKTtcbiAgfVxuXG4gIGFzeW5jIGFkZERldmljZUluZm9Ub0NhcHMgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBwbGF0Zm9ybVZlcnNpb24sXG4gICAgICBtYW51ZmFjdHVyZXIsXG4gICAgICBtb2RlbCxcbiAgICAgIHJlYWxEaXNwbGF5U2l6ZSxcbiAgICAgIGRpc3BsYXlEZW5zaXR5LFxuICAgIH0gPSBhd2FpdCB0aGlzLm1vYmlsZUdldERldmljZUluZm8oKTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlQXBpTGV2ZWwgPSBwYXJzZUludChhcGlWZXJzaW9uLCAxMCk7XG4gICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9IHBsYXRmb3JtVmVyc2lvbjtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuU2l6ZSA9IHJlYWxEaXNwbGF5U2l6ZTtcbiAgICB0aGlzLmNhcHMuZGV2aWNlU2NyZWVuRGVuc2l0eSA9IGRpc3BsYXlEZW5zaXR5O1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNb2RlbCA9IG1vZGVsO1xuICAgIHRoaXMuY2Fwcy5kZXZpY2VNYW51ZmFjdHVyZXIgPSBtYW51ZmFjdHVyZXI7XG4gIH1cblxuICBpbml0RXNwcmVzc29TZXJ2ZXIgKCkge1xuICAgIC8vIG5vdyB0aGF0IHdlIGhhdmUgcGFja2FnZSBhbmQgYWN0aXZpdHksIHdlIGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2ZcbiAgICAvLyBlc3ByZXNzbyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhXG4gICAgdGhpcy5lc3ByZXNzbyA9IG5ldyBFc3ByZXNzb1J1bm5lcih0aGlzLmxvZywge1xuICAgICAgaG9zdDogdGhpcy5vcHRzLnJlbW90ZUFkYkhvc3QgfHwgdGhpcy5vcHRzLmhvc3QgfHwgJzEyNy4wLjAuMScsXG4gICAgICBzeXN0ZW1Qb3J0OiB0aGlzLm9wdHMuc3lzdGVtUG9ydCxcbiAgICAgIGRldmljZVBvcnQ6IERFVklDRV9QT1JULFxuICAgICAgYWRiOiB0aGlzLmFkYixcbiAgICAgIGFwazogdGhpcy5vcHRzLmFwcCxcbiAgICAgIHRtcERpcjogdGhpcy5vcHRzLnRtcERpcixcbiAgICAgIGFwcFBhY2thZ2U6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgICAgYXBwQWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgIGZvcmNlRXNwcmVzc29SZWJ1aWxkOiAhIXRoaXMub3B0cy5mb3JjZUVzcHJlc3NvUmVidWlsZCxcbiAgICAgIGVzcHJlc3NvQnVpbGRDb25maWc6IHRoaXMub3B0cy5lc3ByZXNzb0J1aWxkQ29uZmlnLFxuICAgICAgc2hvd0dyYWRsZUxvZzogISF0aGlzLm9wdHMuc2hvd0dyYWRsZUxvZyxcbiAgICAgIHNlcnZlckxhdW5jaFRpbWVvdXQ6IHRoaXMub3B0cy5lc3ByZXNzb1NlcnZlckxhdW5jaFRpbWVvdXQsXG4gICAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQ6IHRoaXMub3B0cy5hbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgICBza2lwU2VydmVySW5zdGFsbGF0aW9uOiB0aGlzLm9wdHMuc2tpcFNlcnZlckluc3RhbGxhdGlvbixcbiAgICAgIHVzZUtleXN0b3JlOiB0aGlzLm9wdHMudXNlS2V5c3RvcmUsXG4gICAgICBrZXlzdG9yZVBhdGg6IHRoaXMub3B0cy5rZXlzdG9yZVBhdGgsXG4gICAgICBrZXlzdG9yZVBhc3N3b3JkOiB0aGlzLm9wdHMua2V5c3RvcmVQYXNzd29yZCxcbiAgICAgIGtleUFsaWFzOiB0aGlzLm9wdHMua2V5QWxpYXMsXG4gICAgICBrZXlQYXNzd29yZDogdGhpcy5vcHRzLmtleVBhc3N3b3JkLFxuICAgICAgZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U6IHRoaXMub3B0cy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5lc3ByZXNzby5wcm94eVJlcVJlcy5iaW5kKHRoaXMuZXNwcmVzc28pO1xuICAgIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5lc3ByZXNzby5wcm94eUNvbW1hbmQuYmluZCh0aGlzLmVzcHJlc3NvKTtcbiAgfVxuXG4gIC8vIFRPRE8gdGhpcyBtZXRob2QgaXMgbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSB1aWF1dG9tYXRvcjJcbiAgYXN5bmMgaW5pdEFVVCAoKSB7XG4gICAgLy8gc2V0IHRoZSBsb2NhbGl6ZWQgc3RyaW5ncyBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgZnJvbSB0aGUgYXBrXG4gICAgLy8gVE9ETzogaW5jb3Jwb3JhdGUgY2hhbmdlcyBmcm9tIGFwcGl1bSM1MzA4IHdoaWNoIGZpeCBhIHJhY2UgY29uZC1cbiAgICAvLyBpdGlvbiBidWcgaW4gb2xkIGFwcGl1bSBhbmQgbmVlZCB0byBiZSByZXBsaWNhdGVkIGhlcmVcbiAgICAvLyB0aGlzLmFwa1N0cmluZ3NbdGhpcy5vcHRzLmxhbmd1YWdlXSA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLnB1c2hTdHJpbmdzKFxuICAgIC8vICAgICB0aGlzLm9wdHMubGFuZ3VhZ2UsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuXG4gICAgLy8gVW5pbnN0YWxsIGFueSB1bmluc3RhbGxPdGhlclBhY2thZ2VzIHdoaWNoIHdlcmUgc3BlY2lmaWVkIGluIGNhcHNcbiAgICBpZiAodGhpcy5vcHRzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICAgIGF3YWl0IGhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyhcbiAgICAgICAgdGhpcy5hZGIsXG4gICAgICAgIGhlbHBlcnMucGFyc2VBcnJheSh0aGlzLm9wdHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyksXG4gICAgICAgIFtTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBURVNUX0FQS19QS0ddXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRzLmFwcCkge1xuICAgICAgaWYgKHRoaXMub3B0cy5mdWxsUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdygnRnVsbCByZXNldCByZXF1aXJlcyBhbiBhcHAgY2FwYWJpbGl0eSwgdXNlIGZhc3RSZXNldCBpZiBhcHAgaXMgbm90IHByb3ZpZGVkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5kZWJ1ZygnTm8gYXBwIGNhcGFiaWxpdHkuIEFzc3VtaW5nIGl0IGlzIGFscmVhZHkgb24gdGhlIGRldmljZScpO1xuICAgICAgaWYgKHRoaXMub3B0cy5mYXN0UmVzZXQpIHtcbiAgICAgICAgYXdhaXQgaGVscGVycy5yZXNldEFwcCh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub3B0cy5za2lwVW5pbnN0YWxsKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi51bmluc3RhbGxBcGsodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLmFwcCkge1xuICAgICAgYXdhaXQgaGVscGVycy5pbnN0YWxsQXBrKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRzLnNraXBTZXJ2ZXJJbnN0YWxsYXRpb24pIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdza2lwU2VydmVySW5zdGFsbGF0aW9uIGNhcGFiaWxpdHkgaXMgc2V0LiBOb3QgaW5zdGFsbGlnIGVzcHJlc3NvLXNlcnZlciAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5lc3ByZXNzby5pbnN0YWxsVGVzdEFwaygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuYWRkVG9EZXZpY2VJZGxlV2hpdGVsaXN0KFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIFRFU1RfQVBLX1BLRyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYENhbm5vdCBhZGQgc2VydmVyIHBhY2thZ2VzIHRvIHRoZSBEb3plIHdoaXRlbGlzdC4gT3JpZ2luYWwgZXJyb3I6IGAgK1xuICAgICAgICAgIChlLnN0ZGVyciB8fCBlLm1lc3NhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVTZXNzaW9uICgpIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnRGVsZXRpbmcgZXNwcmVzc28gc2Vzc2lvbicpO1xuXG4gICAgY29uc3Qgc2NyZWVuUmVjb3JkaW5nU3RvcFRhc2tzID0gW2FzeW5jICgpID0+IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblJlY29yZGluZ1Byb3BlcnRpZXMpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcFJlY29yZGluZ1NjcmVlbigpO1xuICAgICAgfVxuICAgIH0sIGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChhd2FpdCB0aGlzLm1vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZygpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZygpO1xuICAgICAgfVxuICAgIH0sIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuX3NjcmVlblN0cmVhbWluZ1Byb3BzKSkge1xuICAgICAgICBhd2FpdCB0aGlzLm1vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcoKTtcbiAgICAgIH1cbiAgICB9XTtcblxuICAgIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyh0aGlzLnNlcnZlciwgdGhpcy5zZXNzaW9uSWQpO1xuXG4gICAgaWYgKHRoaXMuZXNwcmVzc28pIHtcbiAgICAgIGlmICh0aGlzLmp3cFByb3h5QWN0aXZlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXNwcmVzc28uZGVsZXRlU2Vzc2lvbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5lc3ByZXNzbyA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmFkYikge1xuICAgICAgYXdhaXQgQi5hbGwoc2NyZWVuUmVjb3JkaW5nU3RvcFRhc2tzLm1hcCgodGFzaykgPT4ge1xuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0YXNrKCk7XG4gICAgICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgICB9KSgpO1xuICAgICAgfSkpO1xuICAgICAgaWYgKHRoaXMud2FzQW5pbWF0aW9uRW5hYmxlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRiLnNldEFuaW1hdGlvblN0YXRlKHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcmVzZXQgYW5pbWF0aW9uOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNDaHJvbWVTZXNzaW9uICYmIHRoaXMub3B0cy5hcHBQYWNrYWdlICYmICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRzLmZ1bGxSZXNldCAmJiAhdGhpcy5vcHRzLnNraXBVbmluc3RhbGwgJiYgIXRoaXMuYXBwT25EZXZpY2UpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYEZVTExfUkVTRVQgc2V0IHRvICd0cnVlJywgVW5pbnN0YWxsaW5nICcke3RoaXMub3B0cy5hcHBQYWNrYWdlfSdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYWRiLnN0b3BMb2djYXQoKTtcbiAgICAgIGlmICh0aGlzLm9wdHMucmVib290KSB7XG4gICAgICAgIGxldCBhdmROYW1lID0gdGhpcy5vcHRzLmF2ZC5yZXBsYWNlKCdAJywgJycpO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgY2xvc2luZyBlbXVsYXRvciAnJHthdmROYW1lfSdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGF3YWl0IHRoaXMuYWRiLmdldEFwaUxldmVsKCkgPj0gMjgpIHsgLy8gQW5kcm9pZCBQXG4gICAgICAgIHRoaXMubG9nLmluZm8oJ1Jlc3RvcmluZyBoaWRkZW4gYXBpIHBvbGljeSB0byB0aGUgZGV2aWNlIGRlZmF1bHQgY29uZmlndXJhdGlvbicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zZXREZWZhdWx0SGlkZGVuQXBpUG9saWN5KCEhdGhpcy5vcHRzLmlnbm9yZUhpZGRlbkFwaVBvbGljeUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgc3VwZXIuZGVsZXRlU2Vzc2lvbigpO1xuICAgIGlmICh0aGlzLm9wdHMuc3lzdGVtUG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5yZW1vdmVQb3J0Rm9yd2FyZCh0aGlzLm9wdHMuc3lzdGVtUG9ydCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGBVbmFibGUgdG8gcmVtb3ZlIHBvcnQgZm9yd2FyZCAnJHtlcnJvci5tZXNzYWdlfSdgKTtcbiAgICAgICAgLy9JZ25vcmUsIHRoaXMgYmxvY2sgd2lsbCBhbHNvIGJlIGNhbGxlZCB3aGVuIHdlIGZhbGwgaW4gY2F0Y2ggYmxvY2tcbiAgICAgICAgLy8gYW5kIGJlZm9yZSBldmVuIHBvcnQgZm9yd2FyZC5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBvblNldHRpbmdzVXBkYXRlICgpIHtcbiAgICAvLyBpbnRlbnRpb25hbGx5IGRvIG5vdGhpbmcgaGVyZSwgc2luY2UgY29tbWFuZHMudXBkYXRlU2V0dGluZ3MgcHJveGllc1xuICAgIC8vIHNldHRpbmdzIHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXIgYWxyZWFkeVxuICB9XG5cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBhbHdheXMgaGF2ZSBhbiBhY3RpdmUgcHJveHkgdG8gdGhlIGVzcHJlc3NvIHNlcnZlclxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIHN1cGVyLmNhblByb3h5KHNlc3Npb25JZCk7XG5cbiAgICAvLyB3ZSBjYW4gYWx3YXlzIHByb3h5IHRvIHRoZSBlc3ByZXNzbyBzZXJ2ZXJcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBzdXBlci5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpO1xuICAgIC8vIHdlIGFyZSBtYWludGFpbmluZyB0d28gc2V0cyBvZiBOT19QUk9YWSBsaXN0cywgb25lIGZvciBjaHJvbWVkcml2ZXIoQ0hST01FX05PX1BST1hZKVxuICAgIC8vIGFuZCBvbmUgZm9yIEVzcHJlc3NvKE5PX1BST1hZKSwgYmFzZWQgb24gY3VycmVudCBjb250ZXh0IHdpbGwgcmV0dXJuIHJlbGF0ZWQgTk9fUFJPWFkgbGlzdFxuICAgIHRoaXMuandwUHJveHlBdm9pZCA9IF8uaXNOaWwodGhpcy5jaHJvbWVkcml2ZXIpID8gTk9fUFJPWFkgOiBDSFJPTUVfTk9fUFJPWFk7XG4gICAgaWYgKHRoaXMub3B0cy5uYXRpdmVXZWJTY3JlZW5zaG90KSB7XG4gICAgICB0aGlzLmp3cFByb3h5QXZvaWQgPSBbLi4udGhpcy5qd3BQcm94eUF2b2lkLCBbJ0dFVCcsIG5ldyBSZWdFeHAoJ14vc2Vzc2lvbi9bXi9dKy9zY3JlZW5zaG90JyldXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5qd3BQcm94eUF2b2lkO1xuICB9XG5cbiAgZ2V0IGlzQ2hyb21lU2Vzc2lvbiAoKSB7XG4gICAgcmV0dXJuIGhlbHBlcnMuaXNDaHJvbWVCcm93c2VyKHRoaXMub3B0cy5icm93c2VyTmFtZSk7XG4gIH1cblxuICBnZXQgYXBwT25EZXZpY2UgKCkge1xuICAgIHJldHVybiAhdGhpcy5vcHRzLmFwcCAmJiB0aGlzLmhlbHBlcnMuaXNQYWNrYWdlT3JCdW5kbGUodGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xuICB9XG59XG5cbi8vIGZpcnN0IGFkZCB0aGUgYW5kcm9pZC1kcml2ZXIgY29tbWFuZHMgd2hpY2ggd2Ugd2lsbCBmYWxsIGJhY2sgdG9cbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoYW5kcm9pZENvbW1hbmRzKSkge1xuICAvLyB3ZSBkbyBzb21lIGRpZmZlcmVudC9zcGVjaWFsIHRoaW5ncyB3aXRoIHRoZXNlIG1ldGhvZHNcbiAgaWYgKCFfLmluY2x1ZGVzKFsnZGVmYXVsdFdlYnZpZXdOYW1lJ10sIGNtZCkpIHtcbiAgICBFc3ByZXNzb0RyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xuICB9XG59XG5cbi8vIHRoZW4gb3ZlcndyaXRlIHdpdGggYW55IGVzcHJlc3NvLXNwZWNpZmljIGNvbW1hbmRzXG5mb3IgKGxldCBbY21kLCBmbl0gb2YgXy50b1BhaXJzKGNvbW1hbmRzKSkge1xuICBFc3ByZXNzb0RyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xufVxuXG5leHBvcnQgeyBFc3ByZXNzb0RyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgRXNwcmVzc29Ecml2ZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBLE1BQU1BLE9BQU8sR0FBR0MsbUNBQWM7QUFJOUIsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBSXRDLE1BQU1DLFdBQVcsR0FBRyxJQUFJO0FBTXhCLE1BQU1DLFFBQVEsR0FBRyxDQUNmLENBQUMsS0FBSyxFQUFFLElBQUlDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQ3hDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDLEVBQ3JFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLEVBQ3BFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLEVBQ3BFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxpREFBaUQsQ0FBQyxDQUFDLEVBQ3RFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLEVBQ2hFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLEVBQ2hFLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLEVBQ3RELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQzlDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQ2hELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLEVBQ3pELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQzFDLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLEVBQzdELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLEVBQ3hELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLEVBQ3pELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLEVBQ3hELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLEVBQzFELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLEVBQzdELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDLEVBQ2xFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLEVBQ25FLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEVBQy9ELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDLEVBQ2xFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLEVBQ25FLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLEVBQ2pFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEVBQy9ELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLEVBQzFELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEVBQy9ELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLEVBQ2pFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEVBQy9ELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLEVBQ2hFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDLEVBQ3BFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLEVBQ25FLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDLEVBQzVELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLEVBQ2pFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDLEVBQ3BFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLEVBQ3ZELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLEVBQzdELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLEVBQ3JFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDLEVBQ3BFLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLEVBQ3JELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLEVBQ3BELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLEVBQ3JELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQ2pELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQ2hELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLEVBQzFELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQ2hELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBRzNDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQ2hELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBSTNDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLEVBRW5ELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQy9DO0FBR0QsTUFBTUMsZUFBZSxHQUFHLENBQ3RCLENBQUMsS0FBSyxFQUFFLElBQUlELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQzdDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQzlDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLEVBQ3pELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLEVBQ2xELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQzlDLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQy9DLENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLEVBQ25ELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLEVBQzNELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLEVBR3JELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQ2hELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLEVBR3BELENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLEVBQ2hELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBSTNDLENBQUMsS0FBSyxFQUFFLElBQUlBLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLEVBRW5ELENBQUMsTUFBTSxFQUFFLElBQUlBLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQy9DO0FBR0QsTUFBTUUsT0FBTyxHQUFHLE1BQU07QUFDdEIsTUFBTUMsT0FBTyxHQUFHLE1BQU07QUFDdEIsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBQ0YsT0FBTyxFQUFFQyxPQUFPLENBQUM7QUFFL0MsTUFBTUUsY0FBYyxTQUFTQyxrQkFBVSxDQUFDO0VBRXRDLE9BQU9DLFlBQVksR0FBR0EsdUJBQVk7RUFFbENDLFdBQVcsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFQyxrQkFBa0IsR0FBRyxJQUFJLEVBQUU7SUFFakQsT0FBT0QsSUFBSSxDQUFDRSxLQUFLO0lBRWpCLEtBQUssQ0FBQ0YsSUFBSSxFQUFFQyxrQkFBa0IsQ0FBQztJQUMvQixJQUFJLENBQUNFLGlCQUFpQixHQUFHLENBQ3ZCLElBQUksRUFDSixZQUFZLEVBQ1osa0JBQWtCLENBQ25CO0lBQ0QsSUFBSSxDQUFDQyxxQkFBcUIsR0FBR0Esb0JBQXFCO0lBQ2xELElBQUksQ0FBQ0MsUUFBUSxHQUFHLElBQUk7SUFDcEIsSUFBSSxDQUFDQyxjQUFjLEdBQUcsS0FBSztJQUMzQixJQUFJLENBQUNDLGFBQWEsR0FBR2pCLFFBQVE7SUFFN0IsSUFBSSxDQUFDa0IsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNwQixJQUFJLENBQUNDLFFBQVEsR0FBRyxJQUFJQyxzQkFBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV4RSxJQUFJLENBQUNDLFlBQVksR0FBRyxJQUFJO0lBQ3hCLElBQUksQ0FBQ0Msb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0VBQ2hDO0VBRUEsTUFBTUMsYUFBYSxDQUFFLEdBQUdDLElBQUksRUFBRTtJQUM1QixJQUFJO01BRUYsSUFBSSxDQUFDQyxTQUFTLEVBQUVDLElBQUksQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDSCxhQUFhLENBQUMsR0FBR0MsSUFBSSxDQUFDO01BRTFELElBQUlHLGFBQWEsR0FBRztRQUNsQkMsUUFBUSxFQUFFLE9BQU87UUFDakJDLGlCQUFpQixFQUFFLEtBQUs7UUFDeEJDLGVBQWUsRUFBRSxJQUFJO1FBQ3JCQyxpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCQyxlQUFlLEVBQUUsS0FBSztRQUN0QkMsd0JBQXdCLEVBQUUsSUFBSTtRQUM5QkMsc0JBQXNCLEVBQUUsS0FBSztRQUM3QkMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNaQyxPQUFPLEVBQUVDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ1osSUFBSTtNQUN0QyxDQUFDO01BRUQsSUFBSSxDQUFDQSxJQUFJLEdBQUdXLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDWCxhQUFhLEVBQUUsSUFBSSxDQUFDRCxJQUFJLENBQUM7TUFFbkQsSUFBSSxDQUFDYSxVQUFVLEdBQUcsSUFBSSxDQUFDQyxrQkFBa0IsRUFBRTtNQUUzQyxJQUFJQyxXQUFXLEdBQUc7UUFDaEJDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCQyxVQUFVLEVBQUUsSUFBSTtRQUNoQkMsT0FBTyxFQUFFQywyQkFBZ0I7UUFDekJDLHFCQUFxQixFQUFFO01BQ3pCLENBQUM7TUFDREMsZUFBQyxDQUFDQyxRQUFRLENBQUMsSUFBSSxDQUFDeEMsSUFBSSxFQUFFaUMsV0FBVyxDQUFDO01BRWxDLElBQUksSUFBSSxDQUFDUSxlQUFlLEVBQUU7UUFDeEIsSUFBSSxJQUFJLENBQUN6QyxJQUFJLENBQUMwQyxHQUFHLEVBQUU7VUFDakIsSUFBSSxDQUFDQyxHQUFHLENBQUNDLElBQUksQ0FBRSwwQ0FBeUMsQ0FBQztVQUN6RCxJQUFJLENBQUNELEdBQUcsQ0FBQ0MsSUFBSSxDQUFFLHdGQUF1RixHQUNqRyxrQ0FBaUMsQ0FBQztRQUN6QyxDQUFDLE1BQU07VUFDTCxJQUFJLENBQUNELEdBQUcsQ0FBQ0UsYUFBYSxDQUFFLHFFQUFvRSxHQUN6RixxREFBb0QsQ0FBQztRQUMxRDtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUM3QyxJQUFJLENBQUM4QyxNQUFNLEVBQUU7UUFDcEIsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQzdCLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUM4QixvQkFBb0IsRUFBRTtNQUM3QjtNQUVBLElBQUksQ0FBQ2hELElBQUksQ0FBQ2lELFVBQVUsR0FBRyxJQUFJLENBQUNqRCxJQUFJLENBQUNpRCxVQUFVLEtBQ3RDLE1BQU0sSUFBQUMsOEJBQWlCLEVBQUM5RCxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRUEsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDeEUsSUFBSSxDQUFDWSxJQUFJLENBQUNvQyxPQUFPLEdBQUcsSUFBSSxDQUFDcEMsSUFBSSxDQUFDb0MsT0FBTyxJQUFJQywyQkFBZ0I7TUFFekQsTUFBTTtRQUFDYyxJQUFJO1FBQUVDO01BQU0sQ0FBQyxHQUFHLE1BQU1sRSxPQUFPLENBQUNtRSxxQkFBcUIsQ0FBQyxJQUFJLENBQUNyRCxJQUFJLENBQUM7TUFDckUsSUFBSSxDQUFDQSxJQUFJLENBQUNtRCxJQUFJLEdBQUdBLElBQUk7TUFDckIsSUFBSSxDQUFDbkQsSUFBSSxDQUFDb0QsTUFBTSxHQUFHQSxNQUFNO01BR3pCLElBQUksQ0FBQ0UsR0FBRyxHQUFHLE1BQU1uRSxtQ0FBYyxDQUFDb0UsU0FBUyxDQUFDLElBQUksQ0FBQ3ZELElBQUksQ0FBQztNQUVwRCxJQUFJLElBQUksQ0FBQ0EsSUFBSSxDQUFDMEMsR0FBRyxFQUFFO1FBRWpCLElBQUksQ0FBQzFDLElBQUksQ0FBQzBDLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQ3hELE9BQU8sQ0FBQ3NFLFlBQVksQ0FBQyxJQUFJLENBQUN4RCxJQUFJLENBQUMwQyxHQUFHLEVBQUU7VUFDN0RlLGFBQWEsRUFBRSxJQUFJLENBQUNDLGtCQUFrQixDQUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQztVQUNqRCtDLG1CQUFtQixFQUFFaEU7UUFDdkIsQ0FBQyxDQUFDO01BQ0osQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDaUUsV0FBVyxFQUFFO1FBRzNCLElBQUksQ0FBQ2pCLEdBQUcsQ0FBQ2tCLElBQUksQ0FBRSxzREFBcUQsR0FDL0QsR0FBRSxJQUFJLENBQUM3RCxJQUFJLENBQUM4RCxVQUFXLHlCQUF3QixDQUFDO1FBQ3JELElBQUksRUFBQyxNQUFNLElBQUksQ0FBQ1IsR0FBRyxDQUFDUyxjQUFjLENBQUMsSUFBSSxDQUFDL0QsSUFBSSxDQUFDOEQsVUFBVSxDQUFDLEdBQUU7VUFDeEQsSUFBSSxDQUFDbkIsR0FBRyxDQUFDRSxhQUFhLENBQUUsK0JBQThCLElBQUksQ0FBQzdDLElBQUksQ0FBQzhELFVBQVcsSUFBRyxHQUMzRSx5QkFBd0IsQ0FBQztRQUM5QjtNQUNGO01BRUEsTUFBTSxJQUFJLENBQUNFLG9CQUFvQixFQUFFO01BQ2pDLE9BQU8sQ0FBQy9DLFNBQVMsRUFBRUMsSUFBSSxDQUFDO0lBQzFCLENBQUMsQ0FBQyxPQUFPK0MsQ0FBQyxFQUFFO01BQ1YsTUFBTSxJQUFJLENBQUNDLGFBQWEsRUFBRTtNQUMxQkQsQ0FBQyxDQUFDRSxPQUFPLElBQUssR0FBRTVCLGVBQUMsQ0FBQzZCLFFBQVEsQ0FBQ0gsQ0FBQyxDQUFDRSxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUksU0FBUSxHQUM1RCxtRUFBbUUsR0FDbkUscURBQXFEO01BQ3ZELElBQUksSUFBQUUsbUJBQVcsRUFBQ0osQ0FBQyxFQUFFSyxjQUFNLENBQUNDLHNCQUFzQixDQUFDLEVBQUU7UUFDakQsTUFBTU4sQ0FBQztNQUNUO01BQ0EsTUFBTU8sR0FBRyxHQUFHLElBQUlGLGNBQU0sQ0FBQ0Msc0JBQXNCLENBQUNOLENBQUMsQ0FBQ0UsT0FBTyxDQUFDO01BQ3hESyxHQUFHLENBQUNDLEtBQUssR0FBR1IsQ0FBQyxDQUFDUSxLQUFLO01BQ25CLE1BQU1ELEdBQUc7SUFDWDtFQUNGO0VBVUEsTUFBTUUsUUFBUSxDQUFFQyxPQUFPLEVBQUU7SUFDdkIsTUFBTUMsaUJBQWlCLEdBQUdDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQywwQkFBMEI7SUFDaEUsTUFBTUMsY0FBYyxHQUFHekMsZUFBQyxDQUFDMEMsT0FBTyxDQUFDTCxpQkFBaUIsQ0FBQyxJQUM5QyxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDTSxRQUFRLENBQUMzQyxlQUFDLENBQUM0QyxPQUFPLENBQUNQLGlCQUFpQixDQUFDLENBQUM7SUFDM0QsTUFBTVEsT0FBTyxHQUFHLE1BQU1DLGdCQUFPLENBQUNDLE9BQU8sRUFBRTtJQUN2QyxNQUFNQyxZQUFHLENBQUNDLFlBQVksQ0FBQ2IsT0FBTyxFQUFFUyxPQUFPLEVBQUU7TUFBQ0o7SUFBYyxDQUFDLENBQUM7SUFFMUQsTUFBTVMsV0FBVyxHQUFJLFVBQVM5RixvQkFBb0IsQ0FBQytGLEdBQUcsQ0FBRUMsR0FBRyxJQUFLQSxHQUFHLENBQUNDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEdBQUcsQ0FBRSxHQUFFO0lBQ3BHLE1BQU1DLGlCQUFpQixHQUFHLENBQUMsTUFBTUMsV0FBRSxDQUFDQyxJQUFJLENBQUNQLFdBQVcsRUFBRTtNQUNwRFEsR0FBRyxFQUFFYixPQUFPO01BQ1pjLE1BQU0sRUFBRTtJQUNWLENBQUMsQ0FBQyxFQUFFQyxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUtELENBQUMsQ0FBQ0UsS0FBSyxDQUFDQyxhQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDQyxNQUFNLEdBQUdKLENBQUMsQ0FBQ0MsS0FBSyxDQUFDQyxhQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDQyxNQUFNLENBQUM7SUFDdkUsSUFBSVgsaUJBQWlCLENBQUNXLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFFbEMsSUFBSSxDQUFDOUQsR0FBRyxDQUFDRSxhQUFhLENBQUUsR0FBRSxJQUFJLENBQUM3QyxJQUFJLENBQUMwQyxHQUFJLHlCQUF3Qi9DLG9CQUFvQixDQUFDa0csSUFBSSxDQUFDLElBQUksQ0FBRSxJQUFHLEdBQ2hHLGlIQUFnSCxDQUFDO0lBQ3RIO0lBQ0EsTUFBTWEsZUFBZSxHQUFHSCxhQUFJLENBQUNWLElBQUksQ0FBQ1QsT0FBTyxFQUFFN0MsZUFBQyxDQUFDb0UsS0FBSyxDQUFDYixpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RFLElBQUksQ0FBQ25ELEdBQUcsQ0FBQ2lFLEtBQUssQ0FBRSxJQUFHRixlQUFnQixnQ0FBK0IvQixPQUFRLEdBQUUsQ0FBQztJQUM3RSxPQUFPK0IsZUFBZTtFQUN4QjtFQUVBLE1BQU1oRCxrQkFBa0IsQ0FBRTtJQUFDbUQsYUFBYTtJQUFFQyxLQUFLO0lBQUVuQztFQUFPLENBQUMsRUFBRTtJQUN6RCxNQUFNb0MsVUFBVSxHQUFHLE1BQU9DLFdBQVcsSUFBSztNQUN4QyxJQUFJLElBQUksQ0FBQ2hILElBQUksQ0FBQ2lILE1BQU0sRUFBRTtRQUNwQixJQUFJLENBQUN0RSxHQUFHLENBQUNrQixJQUFJLENBQUMseUVBQXlFLEdBQ3JGLGtGQUFrRixHQUNsRixzQ0FBc0MsQ0FBQztNQUMzQyxDQUFDLE1BQU0sSUFBSSxFQUFDLE1BQU0sSUFBSSxDQUFDUCxHQUFHLENBQUM0RCxZQUFZLENBQUNGLFdBQVcsRUFBRSxJQUFJLENBQUNoSCxJQUFJLENBQUM4RCxVQUFVLENBQUMsR0FBRTtRQUMxRSxNQUFNLElBQUksQ0FBQ1IsR0FBRyxDQUFDNkQsSUFBSSxDQUFDSCxXQUFXLEVBQUUsSUFBSSxDQUFDaEgsSUFBSSxDQUFDOEQsVUFBVSxDQUFDO01BQ3hEO0lBQ0YsQ0FBQztJQUVELE1BQU1zRCxTQUFTLEdBQUl6QyxPQUFPLElBQUtwQyxlQUFDLENBQUM2QixRQUFRLENBQUM3QixlQUFDLENBQUM0QyxPQUFPLENBQUNSLE9BQU8sQ0FBQyxFQUFFbEYsT0FBTyxDQUFDO0lBQ3RFLE1BQU00SCxTQUFTLEdBQUkxQyxPQUFPLElBQUtwQyxlQUFDLENBQUM2QixRQUFRLENBQUM3QixlQUFDLENBQUM0QyxPQUFPLENBQUNSLE9BQU8sQ0FBQyxFQUFFakYsT0FBTyxDQUFDO0lBQ3RFLE1BQU00SCxtQkFBbUIsR0FBRyxPQUFPQyxhQUFhLEVBQUU1QyxPQUFPLEtBQ3ZENEMsYUFBYSxHQUFHNUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDckIsR0FBRyxDQUFDZ0UsbUJBQW1CLENBQUMzQyxPQUFPLENBQUM7SUFFdkUsSUFBSTZDLFdBQVcsR0FBRyxJQUFJO0lBQ3RCLElBQUlDLDRCQUE0QixHQUFHLEtBQUs7SUFDeEMsSUFBSWxGLGVBQUMsQ0FBQ21GLGFBQWEsQ0FBQ2IsYUFBYSxDQUFDLEVBQUU7TUFDbEMsTUFBTWMsV0FBVyxHQUFHLE1BQU01QixXQUFFLENBQUM2QixJQUFJLENBQUNqRCxPQUFPLENBQUM7TUFDMUMsSUFBSWdELFdBQVcsS0FBS2QsYUFBYSxDQUFDYyxXQUFXLEtBQUksTUFBTTVCLFdBQUUsQ0FBQzhCLE1BQU0sQ0FBQ2hCLGFBQWEsQ0FBQ2lCLFFBQVEsQ0FBQyxHQUFFO1FBQ3hGLElBQUksQ0FBQ25GLEdBQUcsQ0FBQ2tCLElBQUksQ0FBRSxVQUFTZ0QsYUFBYSxDQUFDaUIsUUFBUywyQkFBMEJuRCxPQUFRLEdBQUUsQ0FBQztRQUNwRjhDLDRCQUE0QixHQUFHLElBQUk7UUFDbkNELFdBQVcsR0FBR1gsYUFBYSxDQUFDaUIsUUFBUTtNQUN0QztJQUNGO0lBR0EsTUFBTUMsS0FBSyxHQUFHWCxTQUFTLENBQUN6QyxPQUFPLENBQUM7SUFFaEMsTUFBTXFELDJCQUEyQixHQUFHLENBQUNELEtBQUssSUFBS0EsS0FBSyxJQUFJakIsS0FBTTtJQUU5RCxJQUFJLENBQUNXLDRCQUE0QixFQUFFO01BQ2pDLElBQUlPLDJCQUEyQixFQUFFO1FBRy9CLElBQUl0QixlQUFlO1FBQ25CLElBQUl1QixhQUFhLEdBQUcsS0FBSztRQUN6QixJQUFJLEVBQUViLFNBQVMsQ0FBQ3pDLE9BQU8sQ0FBQyxJQUFJMEMsU0FBUyxDQUFDMUMsT0FBTyxDQUFDLENBQUMsRUFBRTtVQUMvQytCLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQ2hDLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDO1VBQzlDc0QsYUFBYSxHQUFHYixTQUFTLENBQUNWLGVBQWUsQ0FBQztRQUM1QztRQUdBYyxXQUFXLEdBQUdkLGVBQWUsR0FDekIsTUFBTVksbUJBQW1CLENBQUNXLGFBQWEsRUFBRXZCLGVBQWUsQ0FBQyxHQUN6RCxNQUFNWSxtQkFBbUIsQ0FBQ1MsS0FBSyxFQUFFcEQsT0FBTyxDQUFDO1FBRTdDLElBQUksQ0FBQ29ELEtBQUssSUFBSWpCLEtBQUssRUFBRTtVQUVuQixNQUFNZixXQUFFLENBQUNtQyxNQUFNLENBQUN2RCxPQUFPLENBQUM7UUFDMUI7UUFDQSxJQUFJMEMsU0FBUyxDQUFDWCxlQUFlLENBQUMsRUFBRTtVQUU5QixNQUFNWCxXQUFFLENBQUNtQyxNQUFNLENBQUN4QixlQUFlLENBQUM7UUFDbEM7UUFDQSxNQUFNSyxVQUFVLENBQUNTLFdBQVcsQ0FBQztNQUMvQixDQUFDLE1BQU0sSUFBSU8sS0FBSyxFQUFFO1FBR2hCLE1BQU1oQixVQUFVLENBQUNwQyxPQUFPLENBQUM7TUFDM0I7SUFDRjtJQUNBLE9BQU9xRCwyQkFBMkIsR0FBRztNQUFDckQsT0FBTyxFQUFFNkM7SUFBVyxDQUFDLEdBQUcsS0FBSztFQUNyRTtFQUVBLElBQUlXLFVBQVUsR0FBSTtJQUVoQixPQUFPLENBQUMsQ0FBQztFQUNYO0VBRUFDLFVBQVUsR0FBSTtJQUNaLE9BQU9sSixPQUFPLENBQUNrSixVQUFVLENBQUMsSUFBSSxDQUFDOUUsR0FBRyxFQUFFLElBQUksQ0FBQ3RELElBQUksQ0FBQztFQUNoRDtFQUdBK0Msc0JBQXNCLENBQUU3QixJQUFJLEVBQUU7SUFDNUIsSUFBSSxJQUFJLENBQUNsQixJQUFJLENBQUNxSSxHQUFHLEVBQUU7TUFDakIsSUFBSSxDQUFDMUYsR0FBRyxDQUFDa0IsSUFBSSxDQUFDLDZEQUE2RCxDQUFDO0lBQzlFLENBQUMsTUFBTTtNQUNMLElBQUksQ0FBQzNDLElBQUksQ0FBQ29ILFVBQVUsRUFBRTtRQUNwQixJQUFJLENBQUMzRixHQUFHLENBQUNFLGFBQWEsQ0FBQyxxRUFBcUUsQ0FBQztNQUMvRjtNQUNBLElBQUksQ0FBQzNCLElBQUksQ0FBQ3FILGVBQWUsRUFBRTtRQUN6QixJQUFJLENBQUM1RixHQUFHLENBQUNFLGFBQWEsQ0FBQywwRUFBMEUsQ0FBQztNQUNwRztNQUNBLElBQUkyRixTQUFTLEdBQUd0SCxJQUFJLENBQUNvSCxVQUFVLENBQUMxQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDO01BQy9ELElBQUksQ0FBQzVGLElBQUksQ0FBQ3FJLEdBQUcsR0FBSSxHQUFFRyxTQUFVLEtBQUl0SCxJQUFJLENBQUNxSCxlQUFnQixFQUFDO0lBQ3pEO0VBQ0Y7RUFHQXZGLG9CQUFvQixHQUFJO0lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUNoRCxJQUFJLENBQUN5SSxPQUFPLEVBQUU7TUFDdEIsSUFBSSxDQUFDekksSUFBSSxDQUFDeUksT0FBTyxHQUFHLFlBQVk7SUFDbEMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUN6SSxJQUFJLENBQUN5SSxPQUFPLENBQUNDLFdBQVcsRUFBRSxDQUFDeEQsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO01BQ2xFLElBQUksQ0FBQ2xGLElBQUksQ0FBQ3lJLE9BQU8sSUFBSSxhQUFhO0lBQ3BDO0VBQ0Y7RUFHQSxNQUFNekUsb0JBQW9CLEdBQUk7SUFDNUIsTUFBTTtNQUFDMkU7SUFBZSxDQUFDLEdBQUcsTUFBTSxJQUFBQyxxQkFBYyxHQUFFO0lBQ2hELElBQUksQ0FBQ2pHLEdBQUcsQ0FBQ2tCLElBQUksQ0FBRSwyQkFBMEI4RSxlQUFlLENBQUNFLE9BQVEsRUFBQyxDQUFDO0lBR25FLElBQUksT0FBTSxJQUFJLENBQUN2RixHQUFHLENBQUN3RixXQUFXLEVBQUUsS0FBSSxFQUFFLEVBQUU7TUFDdEMsSUFBSSxDQUFDbkcsR0FBRyxDQUFDQyxJQUFJLENBQUMsNEJBQTRCLENBQUM7TUFDM0MsTUFBTSxJQUFJLENBQUNVLEdBQUcsQ0FBQ3lGLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDL0ksSUFBSSxDQUFDZ0osMEJBQTBCLENBQUM7SUFDaEY7SUFHQSxJQUFJQyxPQUFPLEdBQUcsTUFBTS9KLE9BQU8sQ0FBQ2dLLGFBQWEsQ0FBQyxJQUFJLENBQUM1RixHQUFHLEVBQUUsSUFBSSxDQUFDdEQsSUFBSSxDQUFDO0lBQzlELElBQUlpSixPQUFPLEVBQUU7TUFFWHBILE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLElBQUksQ0FBQzlCLElBQUksRUFBRWlKLE9BQU8sQ0FBQztJQUNuQyxDQUFDLE1BQU07TUFDTEEsT0FBTyxHQUFHLElBQUksQ0FBQ2pKLElBQUk7SUFDckI7SUFJQSxNQUFNZCxPQUFPLENBQUNpSyxVQUFVLENBQUMsSUFBSSxDQUFDN0YsR0FBRyxFQUFFLElBQUksQ0FBQ3RELElBQUksQ0FBQztJQUU3QyxJQUFJLE1BQU0sSUFBSSxDQUFDc0QsR0FBRyxDQUFDOEYsYUFBYSxFQUFFLEVBQUU7TUFDbEMsSUFBSTtRQUNGLE1BQU0sSUFBSSxDQUFDOUYsR0FBRyxDQUFDK0YsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLElBQUksQ0FBQ0MsbUJBQW1CLEdBQUcsSUFBSTtNQUNqQyxDQUFDLENBQUMsT0FBTzlFLEdBQUcsRUFBRTtRQUNaLElBQUksQ0FBQzdCLEdBQUcsQ0FBQ0MsSUFBSSxDQUFFLGtDQUFpQzRCLEdBQUcsQ0FBQ0wsT0FBUSxFQUFDLENBQUM7TUFDaEU7SUFDRjtJQUdBLElBQUksQ0FBQ2pELElBQUksQ0FBQ29ILFVBQVUsR0FBRyxJQUFJLENBQUNoRixHQUFHLENBQUNpRyxXQUFXO0lBQzNDLElBQUksQ0FBQ3JJLElBQUksQ0FBQ3NJLFVBQVUsR0FBRyxJQUFJLENBQUN4SixJQUFJLENBQUNtRCxJQUFJO0lBR3JDLElBQUksQ0FBQ3NHLGtCQUFrQixFQUFFO0lBRXpCLElBQUksQ0FBQzlHLEdBQUcsQ0FBQ2lFLEtBQUssQ0FBRSxtQ0FBa0N2SCxXQUFZLE9BQU0sSUFBSSxDQUFDVyxJQUFJLENBQUNpRCxVQUFXLEVBQUMsQ0FBQztJQUMzRixNQUFNLElBQUksQ0FBQ0ssR0FBRyxDQUFDb0csV0FBVyxDQUFDLElBQUksQ0FBQzFKLElBQUksQ0FBQ2lELFVBQVUsRUFBRTVELFdBQVcsQ0FBQztJQUU3RCxJQUFJLENBQUMsSUFBSSxDQUFDVyxJQUFJLENBQUMySixVQUFVLEVBQUU7TUFFekIsTUFBTXpLLE9BQU8sQ0FBQzBLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDdEcsR0FBRyxFQUFFLElBQUksQ0FBQ3BDLElBQUksQ0FBQztJQUNqRCxDQUFDLE1BQU07TUFDTCxJQUFJLENBQUN5QixHQUFHLENBQUNpRSxLQUFLLENBQUUsd0RBQXVELENBQUM7SUFDMUU7SUFJQSxNQUFNLElBQUksQ0FBQ2lELE9BQU8sRUFBRTtJQUdwQixJQUFJLENBQUMsSUFBSSxDQUFDM0ksSUFBSSxDQUFDNEMsVUFBVSxFQUFFO01BQ3pCLElBQUksQ0FBQzVDLElBQUksQ0FBQzRDLFVBQVUsR0FBR21GLE9BQU8sQ0FBQ25GLFVBQVU7SUFDM0M7SUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDNUMsSUFBSSxDQUFDNEksY0FBYyxFQUFFO01BQzdCLElBQUksQ0FBQzVJLElBQUksQ0FBQzRJLGNBQWMsR0FBR2IsT0FBTyxDQUFDYSxjQUFjLElBQUliLE9BQU8sQ0FBQ25GLFVBQVUsSUFBSSxJQUFJLENBQUM1QyxJQUFJLENBQUM0QyxVQUFVO0lBQ2pHO0lBQ0EsSUFBSSxJQUFJLENBQUM1QyxJQUFJLENBQUM2SSxXQUFXLEVBQUU7TUFDekIsSUFBSSxDQUFDN0ksSUFBSSxDQUFDNkksV0FBVyxHQUFHLElBQUFDLDBCQUFtQixFQUFDLElBQUksQ0FBQzlJLElBQUksQ0FBQzZJLFdBQVcsRUFBRSxJQUFJLENBQUM3SSxJQUFJLENBQUM0QyxVQUFVLENBQUM7SUFDMUYsQ0FBQyxNQUFNO01BQ0wsSUFBSSxDQUFDNUMsSUFBSSxDQUFDNkksV0FBVyxHQUFHLElBQUFDLDBCQUFtQixFQUFDZixPQUFPLENBQUNjLFdBQVcsRUFBRSxJQUFJLENBQUM3SSxJQUFJLENBQUM0QyxVQUFVLENBQUM7SUFDeEY7SUFDQSxJQUFJLElBQUksQ0FBQzVDLElBQUksQ0FBQytJLGVBQWUsRUFBRTtNQUM3QixJQUFJLENBQUMvSSxJQUFJLENBQUMrSSxlQUFlLEdBQUcsSUFBQUQsMEJBQW1CLEVBQUMsSUFBSSxDQUFDOUksSUFBSSxDQUFDK0ksZUFBZSxFQUFFLElBQUksQ0FBQy9JLElBQUksQ0FBQzRJLGNBQWMsQ0FBQztJQUN0RyxDQUFDLE1BQU07TUFDTCxJQUFJLENBQUM1SSxJQUFJLENBQUMrSSxlQUFlLEdBQUcsSUFBQUQsMEJBQW1CLEVBQUNmLE9BQU8sQ0FBQ2dCLGVBQWUsSUFBSWhCLE9BQU8sQ0FBQ2MsV0FBVyxJQUFJLElBQUksQ0FBQzdJLElBQUksQ0FBQzZJLFdBQVcsRUFDckgsSUFBSSxDQUFDN0ksSUFBSSxDQUFDNEksY0FBYyxDQUFDO0lBQzdCO0lBR0EsTUFBTSxJQUFJLENBQUN6SixRQUFRLENBQUM2SixZQUFZLENBQUMsSUFBSSxDQUFDaEosSUFBSSxDQUFDO0lBQzNDLElBQUksSUFBSSxDQUFDQSxJQUFJLENBQUNpQixVQUFVLEtBQUssS0FBSyxFQUFFO01BQ2xDLElBQUksQ0FBQ1EsR0FBRyxDQUFDa0IsSUFBSSxDQUFFLG9GQUFtRixDQUFDO0lBQ3JHLENBQUMsTUFBTTtNQUNMLE1BQU0sSUFBSSxDQUFDUCxHQUFHLENBQUM2RyxlQUFlLENBQUMsSUFBSSxDQUFDakosSUFBSSxDQUFDNEksY0FBYyxFQUFFLElBQUksQ0FBQzVJLElBQUksQ0FBQytJLGVBQWUsRUFBRSxJQUFJLENBQUNqSyxJQUFJLENBQUNvSyxlQUFlLENBQUM7SUFDaEg7SUFHQSxJQUFJLElBQUksQ0FBQ3BLLElBQUksQ0FBQ3FLLFdBQVcsRUFBRTtNQUN6QixNQUFNLElBQUksQ0FBQ0MsV0FBVyxFQUFFO0lBQzFCO0lBSUEsSUFBSSxDQUFDaEssY0FBYyxHQUFHLElBQUk7SUFFMUIsTUFBTSxJQUFJLENBQUNpSyxtQkFBbUIsRUFBRTtFQUNsQztFQUVBLE1BQU1ELFdBQVcsR0FBSTtJQUNuQixNQUFNRSxRQUFRLEdBQUdDLG9DQUFlLENBQUNDLGtCQUFrQixDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzlELE1BQU1DLE9BQU8sR0FBRyxJQUFJLENBQUM1SyxJQUFJLENBQUM2SyxrQkFBa0IsSUFBSSxJQUFJO0lBQ3BELElBQUksQ0FBQ2xJLEdBQUcsQ0FBQ2tCLElBQUksQ0FBRSwrQkFBOEIyRyxRQUFTLGtCQUFpQkksT0FBUSxJQUFHLENBQUM7SUFDbkYsTUFBTSxJQUFBRSx1QkFBYSxFQUFDRixPQUFPLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUNHLFVBQVUsQ0FBQ25LLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTRKLFFBQVEsQ0FBQztFQUMvRTtFQUVBLE1BQU1ELG1CQUFtQixHQUFJO0lBQzNCLE1BQU07TUFDSlMsVUFBVTtNQUNWekMsZUFBZTtNQUNmMEMsWUFBWTtNQUNaQyxLQUFLO01BQ0xDLGVBQWU7TUFDZkM7SUFDRixDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUNDLG1CQUFtQixFQUFFO0lBQ3BDLElBQUksQ0FBQ25LLElBQUksQ0FBQ29LLGNBQWMsR0FBR0MsUUFBUSxDQUFDUCxVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQ25ELElBQUksQ0FBQzlKLElBQUksQ0FBQ3FILGVBQWUsR0FBR0EsZUFBZTtJQUMzQyxJQUFJLENBQUNySCxJQUFJLENBQUNzSyxnQkFBZ0IsR0FBR0wsZUFBZTtJQUM1QyxJQUFJLENBQUNqSyxJQUFJLENBQUN1SyxtQkFBbUIsR0FBR0wsY0FBYztJQUM5QyxJQUFJLENBQUNsSyxJQUFJLENBQUN3SyxXQUFXLEdBQUdSLEtBQUs7SUFDN0IsSUFBSSxDQUFDaEssSUFBSSxDQUFDeUssa0JBQWtCLEdBQUdWLFlBQVk7RUFDN0M7RUFFQXhCLGtCQUFrQixHQUFJO0lBR3BCLElBQUksQ0FBQ3BKLFFBQVEsR0FBRyxJQUFJdUwsOEJBQWMsQ0FBQyxJQUFJLENBQUNqSixHQUFHLEVBQUU7TUFDM0NrSixJQUFJLEVBQUUsSUFBSSxDQUFDN0wsSUFBSSxDQUFDOEwsYUFBYSxJQUFJLElBQUksQ0FBQzlMLElBQUksQ0FBQzZMLElBQUksSUFBSSxXQUFXO01BQzlENUksVUFBVSxFQUFFLElBQUksQ0FBQ2pELElBQUksQ0FBQ2lELFVBQVU7TUFDaEM4SSxVQUFVLEVBQUUxTSxXQUFXO01BQ3ZCaUUsR0FBRyxFQUFFLElBQUksQ0FBQ0EsR0FBRztNQUNiMEksR0FBRyxFQUFFLElBQUksQ0FBQ2hNLElBQUksQ0FBQzBDLEdBQUc7TUFDbEJ1SixNQUFNLEVBQUUsSUFBSSxDQUFDak0sSUFBSSxDQUFDaU0sTUFBTTtNQUN4Qm5JLFVBQVUsRUFBRSxJQUFJLENBQUM5RCxJQUFJLENBQUM4RCxVQUFVO01BQ2hDaUcsV0FBVyxFQUFFLElBQUksQ0FBQy9KLElBQUksQ0FBQytKLFdBQVc7TUFDbENtQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDbE0sSUFBSSxDQUFDa00sb0JBQW9CO01BQ3REQyxtQkFBbUIsRUFBRSxJQUFJLENBQUNuTSxJQUFJLENBQUNtTSxtQkFBbUI7TUFDbERDLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDcE0sSUFBSSxDQUFDb00sYUFBYTtNQUN4Q0MsbUJBQW1CLEVBQUUsSUFBSSxDQUFDck0sSUFBSSxDQUFDc00sMkJBQTJCO01BQzFEaEsscUJBQXFCLEVBQUUsSUFBSSxDQUFDdEMsSUFBSSxDQUFDc0MscUJBQXFCO01BQ3REaUssc0JBQXNCLEVBQUUsSUFBSSxDQUFDdk0sSUFBSSxDQUFDdU0sc0JBQXNCO01BQ3hEQyxXQUFXLEVBQUUsSUFBSSxDQUFDeE0sSUFBSSxDQUFDd00sV0FBVztNQUNsQ0MsWUFBWSxFQUFFLElBQUksQ0FBQ3pNLElBQUksQ0FBQ3lNLFlBQVk7TUFDcENDLGdCQUFnQixFQUFFLElBQUksQ0FBQzFNLElBQUksQ0FBQzBNLGdCQUFnQjtNQUM1Q0MsUUFBUSxFQUFFLElBQUksQ0FBQzNNLElBQUksQ0FBQzJNLFFBQVE7TUFDNUJDLFdBQVcsRUFBRSxJQUFJLENBQUM1TSxJQUFJLENBQUM0TSxXQUFXO01BQ2xDQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUM3TSxJQUFJLENBQUM2TTtJQUNqRCxDQUFDLENBQUM7SUFDRixJQUFJLENBQUNDLFdBQVcsR0FBRyxJQUFJLENBQUN6TSxRQUFRLENBQUN5TSxXQUFXLENBQUNsTSxJQUFJLENBQUMsSUFBSSxDQUFDUCxRQUFRLENBQUM7SUFDaEUsSUFBSSxDQUFDME0sWUFBWSxHQUFHLElBQUksQ0FBQzFNLFFBQVEsQ0FBQzBNLFlBQVksQ0FBQ25NLElBQUksQ0FBQyxJQUFJLENBQUNQLFFBQVEsQ0FBQztFQUNwRTtFQUdBLE1BQU13SixPQUFPLEdBQUk7SUFRZixJQUFJLElBQUksQ0FBQzdKLElBQUksQ0FBQ2dOLHNCQUFzQixFQUFFO01BQ3BDLE1BQU05TixPQUFPLENBQUM4TixzQkFBc0IsQ0FDbEMsSUFBSSxDQUFDMUosR0FBRyxFQUNScEUsT0FBTyxDQUFDK04sVUFBVSxDQUFDLElBQUksQ0FBQ2pOLElBQUksQ0FBQ2dOLHNCQUFzQixDQUFDLEVBQ3BELENBQUNFLDJDQUFzQixFQUFFQyw0QkFBWSxDQUFDLENBQ3ZDO0lBQ0g7SUFFQSxJQUFJLENBQUMsSUFBSSxDQUFDbk4sSUFBSSxDQUFDMEMsR0FBRyxFQUFFO01BQ2xCLElBQUksSUFBSSxDQUFDMUMsSUFBSSxDQUFDa0MsU0FBUyxFQUFFO1FBQ3ZCLElBQUksQ0FBQ1MsR0FBRyxDQUFDRSxhQUFhLENBQUMsNkVBQTZFLENBQUM7TUFDdkc7TUFDQSxJQUFJLENBQUNGLEdBQUcsQ0FBQ2lFLEtBQUssQ0FBQyx5REFBeUQsQ0FBQztNQUN6RSxJQUFJLElBQUksQ0FBQzVHLElBQUksQ0FBQ29OLFNBQVMsRUFBRTtRQUN2QixNQUFNbE8sT0FBTyxDQUFDbU8sUUFBUSxDQUFDLElBQUksQ0FBQy9KLEdBQUcsRUFBRSxJQUFJLENBQUN0RCxJQUFJLENBQUM7TUFDN0M7SUFDRjtJQUVBLElBQUksQ0FBQyxJQUFJLENBQUNBLElBQUksQ0FBQ3NOLGFBQWEsRUFBRTtNQUM1QixNQUFNLElBQUksQ0FBQ2hLLEdBQUcsQ0FBQ2lLLFlBQVksQ0FBQyxJQUFJLENBQUN2TixJQUFJLENBQUM4RCxVQUFVLENBQUM7SUFDbkQ7SUFDQSxJQUFJLElBQUksQ0FBQzlELElBQUksQ0FBQzBDLEdBQUcsRUFBRTtNQUNqQixNQUFNeEQsT0FBTyxDQUFDc08sVUFBVSxDQUFDLElBQUksQ0FBQ2xLLEdBQUcsRUFBRSxJQUFJLENBQUN0RCxJQUFJLENBQUM7SUFDL0M7SUFDQSxJQUFJLElBQUksQ0FBQ0EsSUFBSSxDQUFDdU0sc0JBQXNCLEVBQUU7TUFDcEMsSUFBSSxDQUFDNUosR0FBRyxDQUFDaUUsS0FBSyxDQUFDLDBFQUEwRSxDQUFDO0lBQzVGLENBQUMsTUFBTTtNQUNMLE1BQU0sSUFBSSxDQUFDdkcsUUFBUSxDQUFDb04sY0FBYyxFQUFFO01BQ3BDLElBQUk7UUFDRixNQUFNLElBQUksQ0FBQ25LLEdBQUcsQ0FBQ29LLHdCQUF3QixDQUFDUiwyQ0FBc0IsRUFBRUMsNEJBQVksQ0FBQztNQUMvRSxDQUFDLENBQUMsT0FBT2xKLENBQUMsRUFBRTtRQUNWLElBQUksQ0FBQ3RCLEdBQUcsQ0FBQ0MsSUFBSSxDQUFFLG9FQUFtRSxJQUMvRXFCLENBQUMsQ0FBQzBKLE1BQU0sSUFBSTFKLENBQUMsQ0FBQ0UsT0FBTyxDQUFDLENBQUM7TUFDNUI7SUFDRjtFQUNGO0VBRUEsTUFBTUQsYUFBYSxHQUFJO0lBQ3JCLElBQUksQ0FBQ3ZCLEdBQUcsQ0FBQ2lFLEtBQUssQ0FBQywyQkFBMkIsQ0FBQztJQUUzQyxNQUFNZ0gsd0JBQXdCLEdBQUcsQ0FBQyxZQUFZO01BQzVDLElBQUksQ0FBQ3JMLGVBQUMsQ0FBQzBDLE9BQU8sQ0FBQyxJQUFJLENBQUM0SSwwQkFBMEIsQ0FBQyxFQUFFO1FBQy9DLE1BQU0sSUFBSSxDQUFDQyxtQkFBbUIsRUFBRTtNQUNsQztJQUNGLENBQUMsRUFBRSxZQUFZO01BQ2IsSUFBSSxNQUFNLElBQUksQ0FBQ0MsdUNBQXVDLEVBQUUsRUFBRTtRQUN4RCxNQUFNLElBQUksQ0FBQ0Msa0NBQWtDLEVBQUU7TUFDakQ7SUFDRixDQUFDLEVBQUUsWUFBWTtNQUNiLElBQUksQ0FBQ3pMLGVBQUMsQ0FBQzBDLE9BQU8sQ0FBQyxJQUFJLENBQUNnSixxQkFBcUIsQ0FBQyxFQUFFO1FBQzFDLE1BQU0sSUFBSSxDQUFDQyx5QkFBeUIsRUFBRTtNQUN4QztJQUNGLENBQUMsQ0FBQztJQUVGLE1BQU0vTyxtQ0FBYyxDQUFDZ1AsaUNBQWlDLENBQUMsSUFBSSxDQUFDQyxNQUFNLEVBQUUsSUFBSSxDQUFDbk4sU0FBUyxDQUFDO0lBRW5GLElBQUksSUFBSSxDQUFDWixRQUFRLEVBQUU7TUFDakIsSUFBSSxJQUFJLENBQUNDLGNBQWMsRUFBRTtRQUN2QixNQUFNLElBQUksQ0FBQ0QsUUFBUSxDQUFDNkQsYUFBYSxFQUFFO01BQ3JDO01BQ0EsSUFBSSxDQUFDN0QsUUFBUSxHQUFHLElBQUk7SUFDdEI7SUFDQSxJQUFJLENBQUNDLGNBQWMsR0FBRyxLQUFLO0lBRTNCLElBQUksSUFBSSxDQUFDZ0QsR0FBRyxFQUFFO01BQ1osTUFBTStLLGlCQUFDLENBQUNDLEdBQUcsQ0FBQ1Ysd0JBQXdCLENBQUNsSSxHQUFHLENBQUU2SSxJQUFJLElBQUs7UUFDakQsQ0FBQyxZQUFZO1VBQ1gsSUFBSTtZQUNGLE1BQU1BLElBQUksRUFBRTtVQUNkLENBQUMsQ0FBQyxPQUFPQyxHQUFHLEVBQUUsQ0FBQztRQUNqQixDQUFDLEdBQUc7TUFDTixDQUFDLENBQUMsQ0FBQztNQUNILElBQUksSUFBSSxDQUFDbEYsbUJBQW1CLEVBQUU7UUFDNUIsSUFBSTtVQUNGLE1BQU0sSUFBSSxDQUFDaEcsR0FBRyxDQUFDK0YsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxPQUFPN0UsR0FBRyxFQUFFO1VBQ1osSUFBSSxDQUFDN0IsR0FBRyxDQUFDQyxJQUFJLENBQUUsOEJBQTZCNEIsR0FBRyxDQUFDTCxPQUFRLEVBQUMsQ0FBQztRQUM1RDtNQUNGO01BQ0EsSUFBSSxDQUFDLElBQUksQ0FBQzFCLGVBQWUsSUFBSSxJQUFJLENBQUN6QyxJQUFJLENBQUM4RCxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUM5RCxJQUFJLENBQUN5TyxrQkFBa0IsRUFBRTtRQUNsRixNQUFNLElBQUksQ0FBQ25MLEdBQUcsQ0FBQ29MLFNBQVMsQ0FBQyxJQUFJLENBQUMxTyxJQUFJLENBQUM4RCxVQUFVLENBQUM7TUFDaEQ7TUFDQSxJQUFJLElBQUksQ0FBQzlELElBQUksQ0FBQ2tDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQ2xDLElBQUksQ0FBQ3NOLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQzFKLFdBQVcsRUFBRTtRQUN4RSxJQUFJLENBQUNqQixHQUFHLENBQUNpRSxLQUFLLENBQUUsMkNBQTBDLElBQUksQ0FBQzVHLElBQUksQ0FBQzhELFVBQVcsR0FBRSxDQUFDO1FBQ2xGLE1BQU0sSUFBSSxDQUFDUixHQUFHLENBQUNpSyxZQUFZLENBQUMsSUFBSSxDQUFDdk4sSUFBSSxDQUFDOEQsVUFBVSxDQUFDO01BQ25EO01BQ0EsTUFBTSxJQUFJLENBQUNSLEdBQUcsQ0FBQ3FMLFVBQVUsRUFBRTtNQUMzQixJQUFJLElBQUksQ0FBQzNPLElBQUksQ0FBQzhDLE1BQU0sRUFBRTtRQUNwQixJQUFJOEwsT0FBTyxHQUFHLElBQUksQ0FBQzVPLElBQUksQ0FBQ3FJLEdBQUcsQ0FBQ3pDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQ2pELEdBQUcsQ0FBQ2lFLEtBQUssQ0FBRSxxQkFBb0JnSSxPQUFRLEdBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUksQ0FBQ3RMLEdBQUcsQ0FBQ3VMLFlBQVksQ0FBQ0QsT0FBTyxDQUFDO01BQ3RDO01BQ0EsSUFBSSxPQUFNLElBQUksQ0FBQ3RMLEdBQUcsQ0FBQ3dGLFdBQVcsRUFBRSxLQUFJLEVBQUUsRUFBRTtRQUN0QyxJQUFJLENBQUNuRyxHQUFHLENBQUNrQixJQUFJLENBQUMsaUVBQWlFLENBQUM7UUFDaEYsTUFBTSxJQUFJLENBQUNQLEdBQUcsQ0FBQ3dMLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM5TyxJQUFJLENBQUNnSiwwQkFBMEIsQ0FBQztNQUNsRjtJQUNGO0lBQ0EsTUFBTSxLQUFLLENBQUM5RSxhQUFhLEVBQUU7SUFDM0IsSUFBSSxJQUFJLENBQUNsRSxJQUFJLENBQUNpRCxVQUFVLEtBQUs4TCxTQUFTLEVBQUU7TUFDdEMsSUFBSTtRQUNGLE1BQU0sSUFBSSxDQUFDekwsR0FBRyxDQUFDMEwsaUJBQWlCLENBQUMsSUFBSSxDQUFDaFAsSUFBSSxDQUFDaUQsVUFBVSxDQUFDO01BQ3hELENBQUMsQ0FBQyxPQUFPZ00sS0FBSyxFQUFFO1FBQ2QsSUFBSSxDQUFDdE0sR0FBRyxDQUFDQyxJQUFJLENBQUUsa0NBQWlDcU0sS0FBSyxDQUFDOUssT0FBUSxHQUFFLENBQUM7TUFHbkU7SUFDRjtFQUNGO0VBRUEsTUFBTXhELGdCQUFnQixHQUFJLENBRzFCO0VBRUF1TyxXQUFXLENBQUVqTyxTQUFTLEVBQUU7SUFDdEIsS0FBSyxDQUFDaU8sV0FBVyxDQUFDak8sU0FBUyxDQUFDO0lBRzVCLE9BQU8sSUFBSTtFQUNiO0VBRUFrTyxRQUFRLENBQUVsTyxTQUFTLEVBQUU7SUFDbkIsS0FBSyxDQUFDa08sUUFBUSxDQUFDbE8sU0FBUyxDQUFDO0lBR3pCLE9BQU8sSUFBSTtFQUNiO0VBRUFtTyxpQkFBaUIsQ0FBRW5PLFNBQVMsRUFBRTtJQUM1QixLQUFLLENBQUNtTyxpQkFBaUIsQ0FBQ25PLFNBQVMsQ0FBQztJQUdsQyxJQUFJLENBQUNWLGFBQWEsR0FBR2dDLGVBQUMsQ0FBQzhNLEtBQUssQ0FBQyxJQUFJLENBQUN4TyxZQUFZLENBQUMsR0FBR3ZCLFFBQVEsR0FBR0UsZUFBZTtJQUM1RSxJQUFJLElBQUksQ0FBQ1EsSUFBSSxDQUFDc1AsbUJBQW1CLEVBQUU7TUFDakMsSUFBSSxDQUFDL08sYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUNBLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJaEIsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztJQUNqRztJQUVBLE9BQU8sSUFBSSxDQUFDZ0IsYUFBYTtFQUMzQjtFQUVBLElBQUlrQyxlQUFlLEdBQUk7SUFDckIsT0FBT3ZELE9BQU8sQ0FBQ3FRLGVBQWUsQ0FBQyxJQUFJLENBQUN2UCxJQUFJLENBQUN3UCxXQUFXLENBQUM7RUFDdkQ7RUFFQSxJQUFJNUwsV0FBVyxHQUFJO0lBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUM1RCxJQUFJLENBQUMwQyxHQUFHLElBQUksSUFBSSxDQUFDeEQsT0FBTyxDQUFDdVEsaUJBQWlCLENBQUMsSUFBSSxDQUFDelAsSUFBSSxDQUFDOEQsVUFBVSxDQUFDO0VBQy9FO0FBQ0Y7QUFBQztBQUdELEtBQUssSUFBSSxDQUFDNEwsR0FBRyxFQUFFQyxFQUFFLENBQUMsSUFBSXBOLGVBQUMsQ0FBQ3FOLE9BQU8sQ0FBQ25GLG9DQUFlLENBQUMsRUFBRTtFQUVoRCxJQUFJLENBQUNsSSxlQUFDLENBQUMyQyxRQUFRLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFd0ssR0FBRyxDQUFDLEVBQUU7SUFDNUM5UCxjQUFjLENBQUNpUSxTQUFTLENBQUNILEdBQUcsQ0FBQyxHQUFHQyxFQUFFO0VBQ3BDO0FBQ0Y7QUFHQSxLQUFLLElBQUksQ0FBQ0QsR0FBRyxFQUFFQyxFQUFFLENBQUMsSUFBSXBOLGVBQUMsQ0FBQ3FOLE9BQU8sQ0FBQ0UsaUJBQVEsQ0FBQyxFQUFFO0VBQ3pDbFEsY0FBYyxDQUFDaVEsU0FBUyxDQUFDSCxHQUFHLENBQUMsR0FBR0MsRUFBRTtBQUNwQztBQUFDLGVBR2MvUCxjQUFjO0FBQUEifQ==
|