oxygen-cli 1.24.2 → 1.24.3
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
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## v1.24.3 (2022-08-12)
|
|
4
|
+
|
|
5
|
+
#### :beetle: Bug Fix
|
|
6
|
+
* Additional fixes for MODULE_NOT_INITIALIZED error when running multiple tests which reference an external script containing `*.init` commands.
|
|
7
|
+
* Do not include browserName when bundleId is specified in mobile capabilities.
|
|
8
|
+
|
|
3
9
|
## v1.24.2 (2022-08-05)
|
|
4
10
|
|
|
5
11
|
#### :tada: New Feature
|
|
@@ -193,13 +193,13 @@ class MobileModule extends _WebDriverModule.default {
|
|
|
193
193
|
|
|
194
194
|
if (this.options.collectDeviceLogs) {
|
|
195
195
|
this.caps['appium:clearDeviceLogsOnStart'] = true;
|
|
196
|
-
} // if both browserName and appPackage were specified - remove browserName
|
|
196
|
+
} // if both browserName and appPackage/app/bundleId were specified - assume we want to run the application and remove browserName
|
|
197
197
|
|
|
198
198
|
|
|
199
|
-
if (this.caps.browserName && (this.caps.appPackage || this.caps.app)) {
|
|
199
|
+
if (this.caps.browserName && (this.caps.appPackage || this.caps.app || this.caps.bundleId)) {
|
|
200
200
|
delete this.caps.browserName;
|
|
201
|
-
} // if no appPackage
|
|
202
|
-
else if (!this.caps.browserName && !this.caps.appPackage && !this.caps.app) {
|
|
201
|
+
} // if no appPackage/app/bundleId capability nor browserName are defined, assume we want to run the test against default browser
|
|
202
|
+
else if (!this.caps.browserName && !this.caps.appPackage && !this.caps.app && !this.caps.bundleId) {
|
|
203
203
|
this.caps.browserName = DEFAULT_BROWSER_NAME;
|
|
204
204
|
} // webdriver expects lower case names
|
|
205
205
|
|
|
@@ -697,4 +697,4 @@ class MobileModule extends _WebDriverModule.default {
|
|
|
697
697
|
}
|
|
698
698
|
|
|
699
699
|
exports.default = MobileModule;
|
|
700
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1tb2IuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0JST1dTRVJfTkFNRSIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIk1vYmlsZU1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsImFwcENvbnRleHQiLCJfbG9hZEhlbHBlckZ1bmN0aW9ucyIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJ3YWl0Rm9yVGltZW91dCIsIm5hbWUiLCJnZXREcml2ZXIiLCJnZXRDYXBhYmlsaXRpZXMiLCJjYXBzIiwiaW5pdCIsImFwcGl1bVVybCIsImlzSW5pdGlhbGl6ZWQiLCJyZW9wZW5TZXNzaW9uIiwiZGVidWciLCJkcml2ZXIiLCJyZWxvYWRTZXNzaW9uIiwiX2lzSW5pdGlhbGl6ZWQiLCJjdHgiLCJwbGF0Zm9ybU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VOYW1lIiwiYnJvd3Nlck5hbWUiLCJhdXRvbWF0aW9uTmFtZSIsInVkaWQiLCJhcHAiLCJlbmFibGVBcHBpdW1CZWhhdmlvciIsInVzZUFwcGl1bUZvcldlYiIsImNvbGxlY3REZXZpY2VMb2dzIiwiYXBwUGFja2FnZSIsInRvTG93ZXJDYXNlIiwicmVjb3JkSEFSIiwiYnJvd3NlciIsInBlcmZvcm1hbmNlIiwidXJsIiwiVVJMIiwicGFyc2UiLCJwcm90b2NvbCIsInJlcGxhY2UiLCJob3N0IiwiaG9zdG5hbWUiLCJwb3J0IiwicGFyc2VJbnQiLCJwYXRoIiwicGF0aG5hbWUiLCJhdXRoIiwic3BsaXQiLCJ3ZGlvT3B0cyIsInVzZXIiLCJrZXkiLCJjYXBhYmlsaXRpZXMiLCJsb2dMZXZlbCIsInJ1bm5lciIsIndhaXRmb3JUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5VGltZW91dCIsImNvbm5lY3Rpb25SZXRyeUNvdW50IiwicHJvdmlkZXIiLCJtb2RVdGlscyIsImRldGVybWluZVByb3ZpZGVyIiwiUEVSRkVDVE8iLCJtYXhJbnN0YW5jZXMiLCJvcGVuRGV2aWNlVGltZW91dCIsIm1hbnVmYWN0dXJlciIsIm1vZGVsIiwid2RpbyIsInJlbW90ZSIsInNlbGVuaXVtQnJvd3NlclRpbWVvdXQiLCJzZWxlbml1bVRpbWVvdXQiLCJwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJwZXJmZWN0b1JlcG9ydGluZyIsIlBlcmZlY3RvIiwiUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0Iiwid2ViZHJpdmVyIiwiZXhlY3V0ZVNjcmlwdCIsImNvbW1hbmQiLCJwYXJhbXMiLCJleGVjdXRlIiwicmVwb3J0aW5nQ2xpZW50IiwiUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQiLCJ0ZXN0U3RhcnQiLCJlIiwiZ2V0QXBwaXVtSW5pdEVycm9yIiwiZ2V0Q29udGV4dCIsInNldFdlYlZpZXdDb250ZXh0IiwiQlJPV1NFUlNUQUNLIiwic2V0VGltZW91dCIsImRpc3Bvc2UiLCJzdGF0dXMiLCJzdGVwcyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImZhaWxlZEZpbmRlZCIsImZpbmQiLCJpdGVtIiwidG9VcHBlckNhc2UiLCJ0ZXN0U3RvcCIsIkNvbnN0YW50cyIsInJlc3VsdHMiLCJwYXNzZWQiLCJmYWlsZWQiLCJfc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrIiwiZGVsZXRlU2Vzc2lvbiIsImluY2x1ZGVzIiwic2VsZW5pdW1TZXNzaW9uVGltZW91dCIsIndhcm4iLCJ0cmFuc2FjdGlvbiIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiX2lzQWN0aW9uIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwiZXJyb3IiLCJ0YWtlU2NyZWVuc2hvdCIsInJldHZhbCIsImNhbGwiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIndhaXRVbnRpbFJldFZhbCIsIndhaXRVbnRpbCIsImltYWdlcyIsInB1c2hJbWFnZVRvSW1hZ2VzIiwiZmV0Y2hUaXRsZSIsImltYWdlIiwidGl0bGUiLCJnZXRUaXRsZSIsInRleHRUb0ltYWdlIiwicmVxdWlyZSIsInRpdGxlSW1hZ2UiLCJnZW5lcmF0ZSIsImZvbnRGYW1pbHkiLCJwdXNoIiwiaXNXZWJWaWV3Q29udGV4dCIsImhhbmRsZXMiLCJnZXRXaW5kb3dIYW5kbGVzIiwiaGFuZGxlIiwic3dpdGNoVG9XaW5kb3ciLCJtZXJnZWRJbWFnZSIsImRpcmVjdGlvbiIsInRpbWVvdXQiLCJ0aGVuIiwiY2F0Y2giLCJlcnIiLCJfYWRqdXN0QXBwaXVtTG9nIiwibG9nIiwic3JjIiwidGltZSIsInRpbWVzdGFtcCIsIm1zZyIsIm1lc3NhZ2UiLCJsZXZlbCIsIl9pdGVyYXRpb25TdGFydCIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJsb2dzIiwiZ2V0RGV2aWNlTG9ncyIsImNvbGxlY3RCcm93c2VyTG9ncyIsImdldEJyb3dzZXJMb2dzIiwiY29sbGVjdEFwcGl1bUxvZ3MiLCJnZXRBcHBpdW1Mb2dzIiwibG9nRW50cnkiLCJfZ2V0V2Rpb0xvY2F0b3IiLCJsb2NhdG9yIiwiU0NSSVBUX0VSUk9SIiwiaW5kZXhPZiIsInBsYXRmb3JtIiwic3Vic3RyIiwiZ2V0V2Rpb0xvY2F0b3IiLCJtYXRjaFBhdHRlcm4iLCJnZXRFbGVtZW50IiwiZ2V0RWxlbWVudHMiLCJnZXRDaGlsZEVsZW1lbnQiLCJnZXRDaGlsZEVsZW1lbnRzIiwic2V0VGltZW91dEltcGxpY2l0IiwicmVzdG9yZVRpbWVvdXRJbXBsaWNpdCIsImFzc2VydEFyZ3VtZW50IiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiYXNzZXJ0Q29udGV4dCIsImNvbnRleHRMaXN0IiwiZ2V0TG9nVHlwZXMiLCJyZXF1ZXN0Qm9keSIsInNlc3Npb25JZCIsIm1ldGhvZCIsImpzb24iLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJib2R5IiwicmVzIiwidG9TdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFHQSxNQUFNQSxXQUFXLEdBQUcsS0FBcEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw4QkFBM0I7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxTQUE3QjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLENBQUMsTUFBRCxFQUFTLGFBQVQsQ0FBL0I7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FBQyxNQUFELEVBQVEsS0FBUixFQUFjLE9BQWQsRUFBc0IsT0FBdEIsRUFBOEIsUUFBOUIsRUFBdUMsVUFBdkMsQ0FBeEI7QUFDQSxNQUFNQyxvQkFBb0IsR0FBRyxLQUFLLElBQWxDLEMsQ0FBbUQ7O0FBRXBDLE1BQU1DLFlBQU4s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Q0FBMkIsbUJBQTNCLENBREo7QUFFSixvQkFBUSxLQUFLSCxRQUFMLENBQWNHLFlBQWQsQ0FBMkIsa0JBQTNCLENBRko7QUFHSiwrQkFBbUI7QUFIZjtBQU5GLFNBQVY7QUFZSDs7QUFFRCxVQUFJO0FBQ0EsOEJBQVEzRCxPQUFSLEVBQWlCLENBQUN1SixHQUFELEVBQU1vRCxHQUFOLEVBQVdELElBQVgsS0FBb0I7QUFDakM3RSxVQUFBQSxPQUFPO0FBQ1YsU0FGRDtBQUdILE9BSkQsQ0FJRSxPQUFPcEMsQ0FBUCxFQUFVO0FBQ1IsYUFBS3RGLE1BQUwsQ0FBWXFILEtBQVosQ0FBa0IsbURBQW1EL0IsQ0FBQyxDQUFDbUgsUUFBRixFQUFyRTtBQUNBL0UsUUFBQUEsT0FBTztBQUNWO0FBQ0osS0EzQ00sQ0FBUDtBQTRDSDs7QUFybEJxRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgbW9iXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBtb2JpbGUgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKkxvY2F0b3JzOioqICBcclxuICogXHJcbiAqIE5hdGl2ZSBhcHBsaWNhdGlvbiBsb2NhdG9ycyBmb3IhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FuZHJvaWQucG5nKSAgXHJcbiAqICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICogYH5BQ0NFU1NJQklMSVRZX0lEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJZC5cclxuICogKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBpZC5cclxuICogKiBgY2xhc3M9Q0xBU1NgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBjbGFzcy5cclxuICogKiBgdGV4dD1URVhUYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgdmlzaWJsZSB0ZXh0LlxyXG4gKiAqIGB0ZXh0LWNvbnRhaW5zPVRFWFRgIC0gTG9jYXRlcyBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHN0cmluZy5cclxuICogKiBgZGVzYz1ERVNDUklQVElPTmAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGRlc2NyaXB0aW9uLlxyXG4gKiAqIGBkZXNjLWNvbnRhaW5zPURFU0NSSVBUSU9OYCAtIExvY2F0ZXMgZWxlbWVudCB3aG9zZSBkZXNjcmlwdGlvbiBjb250YWlucyB0aGUgc3BlY2lmaWVkIHN0cmluZy5cclxuICogKiBgc2Nyb2xsYWJsZWAgLSBMb2NhdGVzIGVsZW1lbnRzIHRoYXQgYXJlIHNjcm9sbGFibGUuICBcclxuICogIFxyXG4gKiBOYXRpdmUgYXBwbGljYXRpb24gbG9jYXRvcnMgZm9yIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hcHBsZS5wbmcpICBcclxuICogIFxyXG4gKiAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIElELlxyXG4gKiAqIGB+QUNDRVNTSUJJTElUWV9JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIEFjY2Vzc2liaWxpdHkgSWQuICBcclxuICogIFxyXG4gKiBIeWJyaWQhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2h5YnJpZC5wbmcpICBhbmQgV2ViIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy93ZWIucG5nKSAgYXBwbGljYXRpb24gbG9jYXRvcnMgZm9yIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hbmRyb2lkLnBuZykgICFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYXBwbGUucG5nKSAgXHJcbiAqICBcclxuICogKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBpZC5cclxuICogKiBgbmFtZT1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgbmFtZSBhdHRyaWJ1dGUuXHJcbiAqICogYHRhZz1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgdGFnIG5hbWUuXHJcbiAqICogYGxpbms9VEVYVGAgLSBMb2NhdGVzIGFuY2hvciBlbGVtZW50IHdob3NlIHRleHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAqIGBsaW5rLWNvbnRhaW5zPVRFWFRgIC0gTG9jYXRlcyBhbmNob3IgZWxlbWVudCB3aG9zZSB0ZXh0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICogYGNzcz1DU1NfU0VMRUNUT1JgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGEgQ1NTIHNlbGVjdG9yLlxyXG4gKiBcclxuICogKipQYXR0ZXJuIGFyZ3VtZW50czoqKlxyXG4gKiBcclxuICogQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAqIGBQQVRURVJOYCAtIFZlcmJhdGltIG1hdGNoaW5nLlxyXG4gKiBcclxuICovXHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBwZXJmZWN0b1JlcG9ydGluZyBmcm9tICdwZXJmZWN0by1yZXBvcnRpbmcnO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tICdyZXF1ZXN0JztcclxuaW1wb3J0IG1lcmdlSW1hZ2VzIGZyb20gJy4uL2xpYi9pbWctbWVyZ2UnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICdtb2InO1xyXG5jb25zdCBERUZBVUxUX0FQUElVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9OQU1FID0gJ2RlZmF1bHQnO1xyXG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0J107XHJcbmNvbnN0IEFDVElPTl9DT01NQU5EUyA9IFsnb3BlbicsJ3RhcCcsJ2NsaWNrJywnc3dpcGUnLCdzdWJtaXQnLCdzZXRWYWx1ZSddO1xyXG5jb25zdCBERUZBVUxUX1dBSVRfVElNRU9VVCA9IDYwICogMTAwMDsgICAgICAgICAgICAvLyBkZWZhdWx0IDYwcyB3YWl0IHRpbWVvdXRcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vYmlsZU1vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmV0d29ya1JlcXVlc3RzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHQgPSAnTkFUSVZFX0FQUCc7XHJcbiAgICAgICAgdGhpcy5fbG9hZEhlbHBlckZ1bmN0aW9ucygpO1xyXG4gICAgICAgIC8vIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc29tZSBtb2R1bGUgY29tbWFuZHMgbWlnaHQgcmVmZXIgdG8gdGhpcy5PeEVycm9yIGFuZCB0aGlzLmVyckhlbHBlcilcclxuICAgICAgICB0aGlzLk94RXJyb3IgPSBPeEVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJySGVscGVyID0gZXJySGVscGVyO1xyXG4gICAgICAgIC8vIGhvbGRzIGVsZW1lbnQgb3BlcmF0aW9uIHRpbWVvdXQgdmFsdWVcclxuICAgICAgICB0aGlzLndhaXRGb3JUaW1lb3V0ID0gREVGQVVMVF9XQUlUX1RJTUVPVVQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldERyaXZlclxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgdW5kZXJseWluZyBXRElPIGRyaXZlci5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gV0RJTyBkcml2ZXIuXHJcbiAgICAgKi9cclxuICAgIGdldERyaXZlcigpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RHJpdmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0aWVzXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGN1cnJlbnRseSBkZWZpbmVkIGNhcGFiaWxpdGllcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRDYXBhYmlsaXRpZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwcyB8fCBzdXBlci5nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBBcHBpdW0gc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gY2FwcyAtIERlc2lyZWQgY2FwYWJpbGl0aWVzLiBJZiBub3Qgc3BlY2lmaWVkIGNhcGFiaWxpdGllcyB3aWxsIGJlIHRha2VuIGZyb20gc3VpdGUgZGVmaW5pdGlvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gYXBwaXVtVXJsIC0gUmVtb3RlIEFwcGl1bSBzZXJ2ZXIgVVJMIChkZWZhdWx0OiBodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViKS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdChjYXBzLCBhcHBpdW1VcmwpIHtcclxuICAgICAgICAvLyBpZiByZW9wZW5TZXNzaW9uIGlzIHRydWUgLSByZWluaXRpbGl6ZSB0aGUgbW9kdWxlXHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlb3BlblNlc3Npb24gIT09IGZhbHNlKSB7IC8vIHRydWUgb3IgZmFsc2UgaWYgZXhwbGlzaXRseSBzZXQuIHRydWUgb24gbnVsbCBvciB1bmRlZmluZWQuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygncmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVsb2FkaW5nIHRoZSBzZXNzaW9uLi4uJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5yZWxvYWRTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdtb2IuaW5pdCB3YXMgY2FsbGVkIGZvciBhbHJlYWR5IGluaXRpYWxpemVkIG1vZHVsZS4gcmVvcGVuU2Vzc2lvbiBpcyBmYWxzZSBzbyB0aGUgY2FsbCBpcyBpZ25vcmVkLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSByZWZhY3RvcmVkXHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmNhcHMgJiYgdGhpcy5jdHguY2Fwc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXBzKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy5wbGF0Zm9ybU5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy5wbGF0Zm9ybVZlcnNpb247XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy5kZXZpY2VOYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuYnJvd3Nlck5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy5hdXRvbWF0aW9uTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLnVkaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhcHMuYXBwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2Fwcy5lbmFibGVBcHBpdW1CZWhhdmlvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHMudXNlQXBwaXVtRm9yV2ViID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXBzLmVuYWJsZUFwcGl1bUJlaGF2aW9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNhcHMudXNlQXBwaXVtRm9yV2ViID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNhcHMuZW5hYmxlQXBwaXVtQmVoYXZpb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWFwcGl1bVVybCkge1xyXG4gICAgICAgICAgICBhcHBpdW1VcmwgPSB0aGlzLm9wdGlvbnMuYXBwaXVtVXJsIHx8IERFRkFVTFRfQVBQSVVNX1VSTDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1lcmdlIGNhcGFiaWxpdGllcyBmcm9tIGNvbnRleHQgYW5kIGZyb20gaW5pdCBmdW5jdGlvbiBhcmd1bWVudCwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGNvbnRleHQtcGFzc2VkIGNhcGFiaWxpdGllc1xyXG4gICAgICAgIHRoaXMuY2FwcyA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jdHguY2FwcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY2FwcywgLi4uY2FwcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGNsZWFyIHRoZSBleGlzdGluZyBkZXZpY2UgbG9ncywgaWYgY29sbGVjdERldmljZUxvZ3Mgb3B0aW9uIGlzIHRydWUgKHdlIHdhbnQgdG8gaW5jbHVkZSBsb2dzIG9ubHkgcmVsZXZhbnQgZm9yIHRoaXMgc2Vzc2lvbilcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3REZXZpY2VMb2dzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwc1snYXBwaXVtOmNsZWFyRGV2aWNlTG9nc09uU3RhcnQnXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiBib3RoIGJyb3dzZXJOYW1lIGFuZCBhcHBQYWNrYWdlIHdlcmUgc3BlY2lmaWVkIC0gcmVtb3ZlIGJyb3dzZXJOYW1lXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiAodGhpcy5jYXBzLmFwcFBhY2thZ2UgfHwgdGhpcy5jYXBzLmFwcCkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2Fwcy5icm93c2VyTmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgbm8gYXBwUGFja2FnZSBub3IgYXBwIGNhcGFiaWxpdHksIG5vdCBicm93c2VyTmFtZSBhcmUgZGVmaW5lZCwgYXNzdW1lIHdlIHdhbnQgdG8gcnVuIHRoZSB0ZXN0IGFnYWluc3QgZGVmYXVsdCBicm93c2VyXHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiAhdGhpcy5jYXBzLmFwcFBhY2thZ2UgJiYgIXRoaXMuY2Fwcy5hcHApIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gREVGQVVMVF9CUk9XU0VSX05BTUU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdlYmRyaXZlciBleHBlY3RzIGxvd2VyIGNhc2UgbmFtZXNcclxuICAgICAgICBpZiAodGhpcy5jYXBzLmJyb3dzZXJOYW1lICYmIHR5cGVvZiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHRoaXMuY2Fwcy5icm93c2VyTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhZGp1c3QgY2FwYWJpbGl0aWVzIHRvIGVuYWJsZSBjb2xsZWN0aW5nIGJyb3dzZXIgYW5kIHBlcmZvcm1hbmNlIHN0YXRzIGluIENocm9tZSBcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwc1snZ29vZzpsb2dnaW5nUHJlZnMnXSA9IHsgICAgIC8vIGZvciBDaHJvbWVEcml2ZXIgPj0gNzVcclxuICAgICAgICAgICAgICAgIGJyb3dzZXI6ICdBTEwnLFxyXG4gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2U6ICdBTEwnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2UoYXBwaXVtVXJsKTtcclxuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKTtcclxuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3RuYW1lO1xyXG4gICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh1cmwucG9ydCB8fCAocHJvdG9jb2wgPT09ICdodHRwcycgPyA0NDMgOiA4MCkpO1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB1cmwucGF0aG5hbWU7XHJcblxyXG4gICAgICAgIC8vIGF1dGggaXMgbmVlZGVkIG1vc3RseSBmb3IgY2xvdWQgcHJvdmlkZXJzIHN1Y2ggYXMgTGFtYmRhVGVzdFxyXG4gICAgICAgIGlmICh1cmwuYXV0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLndkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogYXV0aFswXSxcclxuICAgICAgICAgICAgICAgIGtleTogYXV0aFsxXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHdkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMud2Rpb09wdHMgfHwge30sXHJcbiAgICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcclxuICAgICAgICAgICAgaG9zdG5hbWU6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogdGhpcy5jYXBzLFxyXG4gICAgICAgICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXHJcbiAgICAgICAgICAgIHJ1bm5lcjogJ3JlcGwnLFxyXG4gICAgICAgICAgICB3YWl0Zm9yVGltZW91dDogNTAwMCwgLy8gaW5jcmVhc2UgdGhlIGRlZmF1bHQgMzAwMFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiAzMTAqMTAwMCxcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IDFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgcHJvdmlkZXIgPSBtb2RVdGlscy5kZXRlcm1pbmVQcm92aWRlcih3ZGlvT3B0cyk7XHJcbiAgICAgICAgbGV0IG5hbWUgPSAnbmFtZSc7XHJcblxyXG4gICAgICAgIGlmIChwcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLm1heEluc3RhbmNlcyA9IDE7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnBhdGggPSAnL25leHBlcmllbmNlL3BlcmZlY3RvbW9iaWxlL3dkL2h1Yic7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnBvcnQgPSA4MDtcclxuICAgICAgICAgICAgd2Rpb09wdHMucHJvdG9jb2wgPSAnaHR0cCc7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLm9wZW5EZXZpY2VUaW1lb3V0ID0gMTU7XHJcblxyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLm1hbnVmYWN0dXJlcjtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllcy5tb2RlbDtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllcy5ob3N0O1xyXG5cclxuICAgICAgICAgICAgbmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10gJiYgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddWyduYW1lJ10pIHtcclxuICAgICAgICAgICAgbmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXVsnbmFtZSddO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy53ZGlvT3B0cyA9IHdkaW9PcHRzO1xyXG5cclxuICAgICAgICAvLyBpbml0IHdlYmRyaXZlclxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gYXdhaXQgd2Rpby5yZW1vdGUod2Rpb09wdHMpO1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlci5wcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQgPSBhd2FpdCBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICB3ZWJkcml2ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVNjcmlwdDogYXN5bmMgKGNvbW1hbmQsIHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoY29tbWFuZCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdDbGllbnQgPSBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQocGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdGFydChuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJySGVscGVyLmdldEFwcGl1bUluaXRFcnJvcihlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dCA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldENvbnRleHQoKTtcclxuXHJcbiAgICAgICAgLy8gaWYgd2UgYXJlIHJ1bm5pbmcgb24gQW5kcm9pZCA3KyBlbXVsYXRvciwgYW5kIHRodXMvb3IgdXNpbmcgYSBXZWJWaWV3IEJyb3dzZXIgVGVzdGVyIC1cclxuICAgICAgICAvLyBwZXJmb3JtIGFuIGFjdHVhbCBhcHBDb250ZXh0IHN3aXRjaCB0byBXRUJcclxuICAgICAgICAvLyBzbyBBcHBpdW0gd2lsbCBkZWxlZ2F0ZSBjb21tYW5kcyB0byBDaHJvbWUgRHJpdmVyIGluc3RlYWQgb2YgQXBwaXVtIERyaXZlclxyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICAnY2hyb21pdW0td2VidmlldycpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRXZWJWaWV3Q29udGV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5CUk9XU0VSU1RBQ0spIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIC8vIGZhaWxzIG9uIGJyb3dzZXJzdGFja1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoeyAnaW1wbGljaXQnOiB0aGlzLndhaXRGb3JUaW1lb3V0IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAc3VtbWFyeSBFbmRzIHRoZSBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHN0YXR1cyAtIFRlc3Qgc3RhdHVzLCBlaXRoZXIgYHBhc3NlZGAgb3IgYGZhaWxlZGAuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcclxuICAgICAgICAgICAgc3RhdHVzID0gJ3Bhc3NlZCc7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ycy5zdGVwcyAmJiBBcnJheS5pc0FycmF5KHRoaXMucnMuc3RlcHMpICYmIHRoaXMucnMuc3RlcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkRmluZGVkID0gdGhpcy5ycy5zdGVwcy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhaWxlZEZpbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9IHN0YXR1cy50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0b3Aoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdG9SZXBvcnRpbmcuQ29uc3RhbnRzLnJlc3VsdHMucGFzc2VkIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5mYWlsZWRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5CUk9XU0VSU1RBQ0spIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVsnQ0FOQ0VMRUQnLCAnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnICsgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBPcGVucyBuZXcgdHJhbnNhY3Rpb24uXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmVcclxuICAgICAqICAgICAgICAgICAgICB1bmlxdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gdHJhbnNhY3Rpb25cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHRyYW5zYWN0aW9uIG5hbWUuXHJcbiAgICAgKiBAZm9yIGFuZHJvaWQsIGlvcywgaHlicmlkLCB3ZWJcclxuICAgICAqL1xyXG4gICAgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIFByaXZhdGVcclxuICAgICAqL1xyXG5cclxuICAgIF9pc0FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIEFDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNjcmVlbnNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU0NSRUVOU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdXNoSW1hZ2VUb0ltYWdlcyA9IGFzeW5jKGZldGNoVGl0bGUgPSB0cnVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmV0Y2hUaXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VGl0bGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFRvSW1hZ2UgPSByZXF1aXJlKCd0ZXh0LXRvLWltYWdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZUltYWdlID0gYXdhaXQgdGV4dFRvSW1hZ2UuZ2VuZXJhdGUodGl0bGUsIHsgZGVidWc6IGZhbHNlLCBmb250RmFtaWx5OiAnQXJpYWwnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGVJbWFnZSAmJiB0eXBlb2YgdGl0bGVJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlSW1hZ2UgPSB0aXRsZUltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCh0aXRsZUltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaChpbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1dlYlZpZXdDb250ZXh0ID0gYXdhaXQgdGhpcy5pc1dlYlZpZXdDb250ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1dlYlZpZXdDb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGFsbCAoc2NyZWVuc2hvdCBhbmQgdGl0bGUpIGltYWdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFdpbmRvd0hhbmRsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShoYW5kbGVzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoYW5kbGUgb2YgaGFuZGxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zd2l0Y2hUb1dpbmRvdyhoYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwdXNoSW1hZ2VUb0ltYWdlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHB1c2hJbWFnZVRvSW1hZ2VzKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWxsIGltYWdlcyBpbnRvIG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRJbWFnZSA9IGF3YWl0IG1lcmdlSW1hZ2VzKGltYWdlcywgeyBkaXJlY3Rpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZWRJbWFnZSAmJiB0eXBlb2YgbWVyZ2VkSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBtZXJnZWRJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0aW1lb3V0OiAzMCoxMDAwIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCcsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgaW5uZXIgZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBfZ2V0TG9ncyhuYW1lKSB7XHJcbiAgICAvLyAgICAgaWYgKCFOT19MT0dTX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB0aGlzLmdldExvZ3MoKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgX2FkanVzdEFwcGl1bUxvZyhsb2csIHNyYykge1xyXG4gICAgICAgIGlmICghbG9nIHx8IHR5cGVvZiBsb2cgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IGxvZy50aW1lc3RhbXAgZnJvbSB0aGUgZGV2aWNlIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpICAgICAgICBcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0aW1lOiBsb2cudGltZXN0YW1wLFxyXG4gICAgICAgICAgICBtc2c6IGxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICBsZXZlbDogbG9nLmxldmVsLFxyXG4gICAgICAgICAgICBzcmM6IHNyY1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgX2l0ZXJhdGlvblN0YXJ0KCkge1xyXG4gICAgICAgIC8vIGNsZWFyIHRyYW5zYWN0aW9uIG5hbWUgc2F2ZWQgaW4gcHJldmlvdXMgaXRlcmF0aW9uIGlmIGFueVxyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2l0ZXJhdGlvbkVuZChlcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWdub3JlIHRoZSByZXN0IGlmIG1vYiBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCB0aGUgZGV2aWNlIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdERldmljZUxvZ3MpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCB0aGlzLmdldERldmljZUxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nLCAnZGV2aWNlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBkZXZpY2UgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY29sbGVjdCBhbGwgdGhlIGJyb3dzZXIgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCB0aGlzLmdldEJyb3dzZXJMb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbG9nIG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZywgJ2Jyb3dzZXInKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY29sbGVjdCBhbGwgQXBwaXVtIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEFwcGl1bUxvZ3MpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSB0aGlzLmdldEFwcGl1bUxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsb2dFbnRyeSBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2dFbnRyeSwgJ2FwcGl1bScpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgQXBwaXVtIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2dldFdkaW9Mb2NhdG9yKGxvY2F0b3IpIHtcclxuICAgICAgICBpZiAoIWxvY2F0b3IpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gbG9jYXRvciBub3Qgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgbG9jYXRvciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJy8nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjsgLy8gbGVhdmUgeHBhdGggbG9jYXRvciBhcyBpc1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMuY2FwcyAmJiB0aGlzLmNhcHMucGxhdGZvcm1OYW1lID8gdGhpcy5jYXBzLnBsYXRmb3JtTmFtZS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXBwQ29udGV4dCA9PT0gJ05BVElWRV9BUFAnICYmIHBsYXRmb3JtID09PSAnYW5kcm9pZCcpIHtcclxuICAgICAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignaWQ9JykgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIHByZXBlbmQgcGFja2FnZSBuYW1lIGlmIGl0J3Mgbm90IHNwZWNpZmllZFxyXG4gICAgICAgICAgICAgICAgLy8gTk9URTogZ2V0Q3VycmVudFBhY2thZ2UoKSBzZWVtcyB0byBjcmFzaCBwb3NzaWJseSBkdWUgdG8gYSB3ZGlvIGJ1Zy4gXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgICBzbyB3ZSBnZXQgcGFja2FnZSBuYW1lIGZyb20gY2FwcyBpbnN0ZWFkLlxyXG4gICAgICAgICAgICAgICAgbG9jYXRvciA9IGxvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCc6aWQvJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRvciA9IHRoaXMuY2Fwcy5hcHBQYWNrYWdlICsgJzppZC8nICsgbG9jYXRvcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnJlc291cmNlSWQoXCInICsgbG9jYXRvciArICdcIiknO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignY2xhc3M9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5jbGFzc05hbWUoXCInICsgbG9jYXRvci5zdWJzdHIoJ2NsYXNzPScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ3RleHQ9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS50ZXh0KFwiJyArIGxvY2F0b3Iuc3Vic3RyKCd0ZXh0PScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ3RleHQtY29udGFpbnM9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS50ZXh0Q29udGFpbnMoXCInICsgbG9jYXRvci5zdWJzdHIoJ3RleHQtY29udGFpbnM9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignZGVzYz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uKFwiJyArIGxvY2F0b3Iuc3Vic3RyKCdkZXNjPScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2Rlc2MtY29udGFpbnM9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5kZXNjcmlwdGlvbkNvbnRhaW5zKFwiJyArIGxvY2F0b3Iuc3Vic3RyKCdkZXNjLWNvbnRhaW5zPScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ3Njcm9sbGFibGUnKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnNjcm9sbGFibGUodHJ1ZSknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ34nKSA9PT0gMCkgICAgLy8gYWNjZXNzaWJpbGl0eSBpZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcENvbnRleHQgPT09ICdOQVRJVkVfQVBQJyAmJiBwbGF0Zm9ybSA9PT0gJ2lvcycpIHtcclxuICAgICAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignficpID09PSAwKSAvLyBhY2Nlc3NpYmlsaXR5IGlkXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwQ29udGV4dCAhPT0gJ05BVElWRV9BUFAnKSB7ICAgICAgICAgICAgLy8gSHlicmlkIG9yIFdlYiBhcHBsaWNhdGlvblxyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnIycgKyBsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpOyAgICAgIC8vIGNvbnZlcnQgJ2lkPScgdG8gJyMnXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbmFtZT0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnW25hbWU9JyArIGxvY2F0b3Iuc3Vic3RyKCduYW1lPScubGVuZ3RoKSArICddJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICc9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdsaW5rLWNvbnRhaW5zPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcqPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignY3NzPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3Iuc3Vic3RyKCdjc3M9Jy5sZW5ndGgpOyAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBjc3MsIGp1c3QgcmVtb3ZlIGNzcz0gcHJlZml4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSB0aGlzLl9nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0Q29udGV4dCA9IG1vZFV0aWxzLmFzc2VydENvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNvbnRleHRMaXN0ID0gbW9kVXRpbHMuY29udGV4dExpc3Q7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldExvZ1R5cGVzID0gbW9kVXRpbHMuZ2V0TG9nVHlwZXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlU2Vzc2lvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVsZXRlU2Vzc2lvbiBlcnJvcicsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrKHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbGV0IG9wdGlvbnM7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuYnJvd3NlcnN0YWNrLmNvbS9hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAncGFzcyc6IHRoaXMud2Rpb09wdHMua2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2VuZEltbWVkaWF0ZWx5JzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGktY2xvdWQuYnJvd3NlcnN0YWNrLmNvbS9hcHAtYXV0b21hdGUvc2Vzc2lvbnMvJHt0aGlzLmRyaXZlci5zZXNzaW9uSWR9Lmpzb25gLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICdhdXRoJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAndXNlcic6IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydicm93c2Vyc3RhY2sudXNlciddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAncGFzcyc6IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydicm93c2Vyc3RhY2sua2V5J10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZW5kSW1tZWRpYXRlbHknOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gQnJvd3NlcnN0YWNrOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
700
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1tb2IuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0JST1dTRVJfTkFNRSIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIk1vYmlsZU1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsImFwcENvbnRleHQiLCJfbG9hZEhlbHBlckZ1bmN0aW9ucyIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJ3YWl0Rm9yVGltZW91dCIsIm5hbWUiLCJnZXREcml2ZXIiLCJnZXRDYXBhYmlsaXRpZXMiLCJjYXBzIiwiaW5pdCIsImFwcGl1bVVybCIsImlzSW5pdGlhbGl6ZWQiLCJyZW9wZW5TZXNzaW9uIiwiZGVidWciLCJkcml2ZXIiLCJyZWxvYWRTZXNzaW9uIiwiX2lzSW5pdGlhbGl6ZWQiLCJjdHgiLCJwbGF0Zm9ybU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VOYW1lIiwiYnJvd3Nlck5hbWUiLCJhdXRvbWF0aW9uTmFtZSIsInVkaWQiLCJhcHAiLCJlbmFibGVBcHBpdW1CZWhhdmlvciIsInVzZUFwcGl1bUZvcldlYiIsImNvbGxlY3REZXZpY2VMb2dzIiwiYXBwUGFja2FnZSIsImJ1bmRsZUlkIiwidG9Mb3dlckNhc2UiLCJyZWNvcmRIQVIiLCJicm93c2VyIiwicGVyZm9ybWFuY2UiLCJ1cmwiLCJVUkwiLCJwYXJzZSIsInByb3RvY29sIiwicmVwbGFjZSIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwYXJzZUludCIsInBhdGgiLCJwYXRobmFtZSIsImF1dGgiLCJzcGxpdCIsIndkaW9PcHRzIiwidXNlciIsImtleSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJwcm92aWRlciIsIm1vZFV0aWxzIiwiZGV0ZXJtaW5lUHJvdmlkZXIiLCJQRVJGRUNUTyIsIm1heEluc3RhbmNlcyIsIm9wZW5EZXZpY2VUaW1lb3V0IiwibWFudWZhY3R1cmVyIiwibW9kZWwiLCJ3ZGlvIiwicmVtb3RlIiwic2VsZW5pdW1Ccm93c2VyVGltZW91dCIsInNlbGVuaXVtVGltZW91dCIsInBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsInBlcmZlY3RvUmVwb3J0aW5nIiwiUGVyZmVjdG8iLCJQZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJ3ZWJkcml2ZXIiLCJleGVjdXRlU2NyaXB0IiwiY29tbWFuZCIsInBhcmFtcyIsImV4ZWN1dGUiLCJyZXBvcnRpbmdDbGllbnQiLCJQZXJmZWN0b1JlcG9ydGluZ0NsaWVudCIsInRlc3RTdGFydCIsImUiLCJnZXRBcHBpdW1Jbml0RXJyb3IiLCJnZXRDb250ZXh0Iiwic2V0V2ViVmlld0NvbnRleHQiLCJCUk9XU0VSU1RBQ0siLCJzZXRUaW1lb3V0IiwiZGlzcG9zZSIsInN0YXR1cyIsInN0ZXBzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiZmFpbGVkRmluZGVkIiwiZmluZCIsIml0ZW0iLCJ0b1VwcGVyQ2FzZSIsInRlc3RTdG9wIiwiQ29uc3RhbnRzIiwicmVzdWx0cyIsInBhc3NlZCIsImZhaWxlZCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2siLCJkZWxldGVTZXNzaW9uIiwiaW5jbHVkZXMiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0Iiwid2FybiIsInRyYW5zYWN0aW9uIiwiZ2xvYmFsIiwiX2xhc3RUcmFuc2FjdGlvbk5hbWUiLCJfaXNBY3Rpb24iLCJfdGFrZVNjcmVlbnNob3RTaWxlbnQiLCJlcnJvciIsInRha2VTY3JlZW5zaG90IiwicmV0dmFsIiwiY2FsbCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwid2FpdFVudGlsUmV0VmFsIiwid2FpdFVudGlsIiwiaW1hZ2VzIiwicHVzaEltYWdlVG9JbWFnZXMiLCJmZXRjaFRpdGxlIiwiaW1hZ2UiLCJ0aXRsZSIsImdldFRpdGxlIiwidGV4dFRvSW1hZ2UiLCJyZXF1aXJlIiwidGl0bGVJbWFnZSIsImdlbmVyYXRlIiwiZm9udEZhbWlseSIsInB1c2giLCJpc1dlYlZpZXdDb250ZXh0IiwiaGFuZGxlcyIsImdldFdpbmRvd0hhbmRsZXMiLCJoYW5kbGUiLCJzd2l0Y2hUb1dpbmRvdyIsIm1lcmdlZEltYWdlIiwiZGlyZWN0aW9uIiwidGltZW91dCIsInRoZW4iLCJjYXRjaCIsImVyciIsIl9hZGp1c3RBcHBpdW1Mb2ciLCJsb2ciLCJzcmMiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibWVzc2FnZSIsImxldmVsIiwiX2l0ZXJhdGlvblN0YXJ0IiwiX2l0ZXJhdGlvbkVuZCIsInR5cGUiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCIsImxvZ3MiLCJnZXREZXZpY2VMb2dzIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwiZ2V0QnJvd3NlckxvZ3MiLCJjb2xsZWN0QXBwaXVtTG9ncyIsImdldEFwcGl1bUxvZ3MiLCJsb2dFbnRyeSIsIl9nZXRXZGlvTG9jYXRvciIsImxvY2F0b3IiLCJTQ1JJUFRfRVJST1IiLCJpbmRleE9mIiwicGxhdGZvcm0iLCJzdWJzdHIiLCJnZXRXZGlvTG9jYXRvciIsIm1hdGNoUGF0dGVybiIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJhc3NlcnRDb250ZXh0IiwiY29udGV4dExpc3QiLCJnZXRMb2dUeXBlcyIsInJlcXVlc3RCb2R5Iiwic2Vzc2lvbklkIiwibWV0aG9kIiwianNvbiIsInJlamVjdFVuYXV0aG9yaXplZCIsImJvZHkiLCJyZXMiLCJ0b1N0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUdBLE1BQU1BLFdBQVcsR0FBRyxLQUFwQjtBQUNBLE1BQU1DLGtCQUFrQixHQUFHLDhCQUEzQjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLFNBQTdCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBQyxNQUFELEVBQVMsYUFBVCxDQUEvQjtBQUNBLE1BQU1DLGVBQWUsR0FBRyxDQUFDLE1BQUQsRUFBUSxLQUFSLEVBQWMsT0FBZCxFQUFzQixPQUF0QixFQUE4QixRQUE5QixFQUF1QyxVQUF2QyxDQUF4QjtBQUNBLE1BQU1DLG9CQUFvQixHQUFHLEtBQUssSUFBbEMsQyxDQUFtRDs7QUFFcEMsTUFBTUMsWUFBTixTQUEyQkMsd0JBQTNCLENBQTJDO0FBQ3REQyxFQUFBQSxXQUFXLENBQUNDLE9BQUQsRUFBVUMsT0FBVixFQUFtQkMsRUFBbkIsRUFBdUJDLE1BQXZCLEVBQStCQyxPQUEvQixFQUF3Q0MsUUFBeEMsRUFBa0Q7QUFDekQsVUFBTUwsT0FBTixFQUFlQyxPQUFmLEVBQXdCQyxFQUF4QixFQUE0QkMsTUFBNUIsRUFBb0NDLE9BQXBDLEVBQTZDQyxRQUE3QztBQUNBLFNBQUtDLFlBQUwsR0FBb0IsRUFBcEI7QUFDQSxTQUFLQyx1QkFBTCxHQUErQixJQUEvQjtBQUNBLFNBQUtDLGVBQUwsR0FBdUIsSUFBdkI7QUFDQSxTQUFLQyxPQUFMLEdBQWUsRUFBZjtBQUNBLFNBQUtDLFVBQUwsR0FBa0IsWUFBbEI7O0FBQ0EsU0FBS0Msb0JBQUwsR0FQeUQsQ0FRekQ7OztBQUNBLFNBQUtDLE9BQUwsR0FBZUEsb0JBQWY7QUFDQSxTQUFLQyxTQUFMLEdBQWlCQSxlQUFqQixDQVZ5RCxDQVd6RDs7QUFDQSxTQUFLQyxjQUFMLEdBQXNCbEIsb0JBQXRCO0FBQ0g7O0FBRU8sTUFBSm1CLElBQUksR0FBRztBQUNQLFdBQU94QixXQUFQO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSXlCLEVBQUFBLFNBQVMsR0FBRztBQUNSLFdBQU8sTUFBTUEsU0FBTixFQUFQO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSUMsRUFBQUEsZUFBZSxHQUFHO0FBQ2QsV0FBTyxLQUFLQyxJQUFMLElBQWEsTUFBTUQsZUFBTixFQUFwQjtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDYyxRQUFKRSxJQUFJLENBQUNELElBQUQsRUFBT0UsU0FBUCxFQUFrQjtBQUN4QjtBQUNBLFFBQUksS0FBS0MsYUFBVCxFQUF3QjtBQUNwQixVQUFJLEtBQUtyQixPQUFMLENBQWFzQixhQUFiLEtBQStCLEtBQW5DLEVBQTBDO0FBQUU7QUFDeEMsYUFBS25CLE1BQUwsQ0FBWW9CLEtBQVosQ0FBa0Isa0RBQWxCO0FBQ0EsYUFBS0MsTUFBTCxDQUFZQyxhQUFaO0FBQ0EsYUFBS0MsY0FBTCxHQUFzQixJQUF0QjtBQUNILE9BSkQsTUFJTztBQUNILGFBQUt2QixNQUFMLENBQVlvQixLQUFaLENBQWtCLG9HQUFsQjtBQUNIOztBQUNEO0FBQ0gsS0FYdUIsQ0FheEI7OztBQUNBLFFBQUksS0FBS0ksR0FBTCxDQUFTVCxJQUFULElBQWlCLEtBQUtTLEdBQUwsQ0FBU1QsSUFBVCxDQUFjLHdCQUFkLENBQXJCLEVBQThEO0FBQzFELFVBQUlBLElBQUosRUFBVTtBQUNOLGVBQU9BLElBQUksQ0FBQ1UsWUFBWjtBQUNBLGVBQU9WLElBQUksQ0FBQ1csZUFBWjtBQUNBLGVBQU9YLElBQUksQ0FBQ1ksVUFBWjtBQUNBLGVBQU9aLElBQUksQ0FBQ2EsV0FBWjtBQUNBLGVBQU9iLElBQUksQ0FBQ2MsY0FBWjtBQUNBLGVBQU9kLElBQUksQ0FBQ2UsSUFBWjs7QUFFQSxZQUFJZixJQUFJLENBQUNnQixHQUFULEVBQWM7QUFDVmhCLFVBQUFBLElBQUksQ0FBQ2lCLG9CQUFMLEdBQTRCLElBQTVCO0FBQ0gsU0FGRCxNQUVPO0FBQ0hqQixVQUFBQSxJQUFJLENBQUNrQixlQUFMLEdBQXVCLElBQXZCO0FBQ0FsQixVQUFBQSxJQUFJLENBQUNpQixvQkFBTCxHQUE0QixJQUE1QjtBQUNIO0FBQ0osT0FkRCxNQWNPO0FBQ0gsYUFBS1IsR0FBTCxDQUFTVCxJQUFULENBQWNrQixlQUFkLEdBQWdDLElBQWhDO0FBQ0EsYUFBS1QsR0FBTCxDQUFTVCxJQUFULENBQWNpQixvQkFBZCxHQUFxQyxJQUFyQztBQUNIO0FBQ0o7O0FBRUQsUUFBSSxDQUFDZixTQUFMLEVBQWdCO0FBQ1pBLE1BQUFBLFNBQVMsR0FBRyxLQUFLcEIsT0FBTCxDQUFhb0IsU0FBYixJQUEwQjVCLGtCQUF0QztBQUNILEtBckN1QixDQXVDeEI7OztBQUNBLFNBQUswQixJQUFMLEdBQVksRUFBWjs7QUFDQSxRQUFJLEtBQUtTLEdBQUwsQ0FBU1QsSUFBYixFQUFtQjtBQUNmLFdBQUtBLElBQUwsR0FBWSxFQUFFLEdBQUcsS0FBS1MsR0FBTCxDQUFTVDtBQUFkLE9BQVo7QUFDSDs7QUFDRCxRQUFJQSxJQUFKLEVBQVU7QUFDTixXQUFLQSxJQUFMLEdBQVksRUFBRSxHQUFHLEtBQUtBLElBQVY7QUFBZ0IsV0FBR0E7QUFBbkIsT0FBWjtBQUNILEtBOUN1QixDQWdEeEI7OztBQUNBLFFBQUksS0FBS2xCLE9BQUwsQ0FBYXFDLGlCQUFqQixFQUFvQztBQUNoQyxXQUFLbkIsSUFBTCxDQUFVLCtCQUFWLElBQTZDLElBQTdDO0FBQ0gsS0FuRHVCLENBcUR4Qjs7O0FBQ0EsUUFBSSxLQUFLQSxJQUFMLENBQVVhLFdBQVYsS0FBMEIsS0FBS2IsSUFBTCxDQUFVb0IsVUFBVixJQUF3QixLQUFLcEIsSUFBTCxDQUFVZ0IsR0FBbEMsSUFBeUMsS0FBS2hCLElBQUwsQ0FBVXFCLFFBQTdFLENBQUosRUFBNEY7QUFDeEYsYUFBTyxLQUFLckIsSUFBTCxDQUFVYSxXQUFqQjtBQUNILEtBRkQsQ0FHQTtBQUhBLFNBSUssSUFBSSxDQUFDLEtBQUtiLElBQUwsQ0FBVWEsV0FBWCxJQUEwQixDQUFDLEtBQUtiLElBQUwsQ0FBVW9CLFVBQXJDLElBQW1ELENBQUMsS0FBS3BCLElBQUwsQ0FBVWdCLEdBQTlELElBQXFFLENBQUMsS0FBS2hCLElBQUwsQ0FBVXFCLFFBQXBGLEVBQThGO0FBQy9GLGFBQUtyQixJQUFMLENBQVVhLFdBQVYsR0FBd0J0QyxvQkFBeEI7QUFDSCxPQTVEdUIsQ0E2RHhCOzs7QUFDQSxRQUFJLEtBQUt5QixJQUFMLENBQVVhLFdBQVYsSUFBeUIsT0FBTyxLQUFLYixJQUFMLENBQVVhLFdBQWpCLEtBQWlDLFFBQTlELEVBQXdFO0FBQ3BFLFdBQUtiLElBQUwsQ0FBVWEsV0FBVixHQUF3QixLQUFLYixJQUFMLENBQVVhLFdBQVYsQ0FBc0JTLFdBQXRCLEVBQXhCO0FBQ0gsS0FoRXVCLENBaUV4Qjs7O0FBQ0EsUUFBSSxLQUFLeEMsT0FBTCxDQUFheUMsU0FBYixJQUEwQixLQUFLdkIsSUFBTCxDQUFVYSxXQUFWLEtBQTBCLFFBQXhELEVBQWtFO0FBQzlELFdBQUtiLElBQUwsQ0FBVSxtQkFBVixJQUFpQztBQUFNO0FBQ25Dd0IsUUFBQUEsT0FBTyxFQUFFLEtBRG9CO0FBRTdCQyxRQUFBQSxXQUFXLEVBQUU7QUFGZ0IsT0FBakM7QUFJSCxLQXZFdUIsQ0F5RXhCOzs7QUFDQSxVQUFNQyxHQUFHLEdBQUdDLGFBQUlDLEtBQUosQ0FBVTFCLFNBQVYsQ0FBWjs7QUFDQSxVQUFNMkIsUUFBUSxHQUFHSCxHQUFHLENBQUNHLFFBQUosQ0FBYUMsT0FBYixDQUFxQixJQUFyQixFQUEyQixFQUEzQixDQUFqQjtBQUNBLFVBQU1DLElBQUksR0FBR0wsR0FBRyxDQUFDTSxRQUFqQjtBQUNBLFVBQU1DLElBQUksR0FBR0MsUUFBUSxDQUFDUixHQUFHLENBQUNPLElBQUosS0FBYUosUUFBUSxLQUFLLE9BQWIsR0FBdUIsR0FBdkIsR0FBNkIsRUFBMUMsQ0FBRCxDQUFyQjtBQUNBLFVBQU1NLElBQUksR0FBR1QsR0FBRyxDQUFDVSxRQUFqQixDQTlFd0IsQ0FnRnhCOztBQUNBLFFBQUlWLEdBQUcsQ0FBQ1csSUFBUixFQUFjO0FBQ1YsWUFBTUEsSUFBSSxHQUFHWCxHQUFHLENBQUNXLElBQUosQ0FBU0MsS0FBVCxDQUFlLEdBQWYsQ0FBYjtBQUNBLFdBQUt4RCxPQUFMLENBQWF5RCxRQUFiLEdBQXdCO0FBQ3BCQyxRQUFBQSxJQUFJLEVBQUVILElBQUksQ0FBQyxDQUFELENBRFU7QUFFcEJJLFFBQUFBLEdBQUcsRUFBRUosSUFBSSxDQUFDLENBQUQ7QUFGVyxPQUF4QjtBQUlIOztBQUVELFFBQUlFLFFBQVEsR0FBRyxFQUNYLElBQUcsS0FBS3pELE9BQUwsQ0FBYXlELFFBQWIsSUFBeUIsRUFBNUIsQ0FEVztBQUVYVixNQUFBQSxRQUFRLEVBQUVBLFFBRkM7QUFHWEcsTUFBQUEsUUFBUSxFQUFFRCxJQUhDO0FBSVhFLE1BQUFBLElBQUksRUFBRUEsSUFKSztBQUtYRSxNQUFBQSxJQUFJLEVBQUVBLElBTEs7QUFNWE8sTUFBQUEsWUFBWSxFQUFFLEtBQUsxQyxJQU5SO0FBT1gyQyxNQUFBQSxRQUFRLEVBQUUsUUFQQztBQVFYQyxNQUFBQSxNQUFNLEVBQUUsTUFSRztBQVNYQyxNQUFBQSxjQUFjLEVBQUUsSUFUTDtBQVNXO0FBQ3RCQyxNQUFBQSxzQkFBc0IsRUFBRSxNQUFJLElBVmpCO0FBV1hDLE1BQUFBLG9CQUFvQixFQUFFO0FBWFgsS0FBZjs7QUFjQSxRQUFJQyxRQUFRLEdBQUdDLGVBQVNDLGlCQUFULENBQTJCWCxRQUEzQixDQUFmOztBQUNBLFFBQUkxQyxJQUFJLEdBQUcsTUFBWDs7QUFFQSxRQUFJbUQsUUFBUSxLQUFLQyxlQUFTRCxRQUFULENBQWtCRyxRQUFuQyxFQUE2QztBQUN6Q1osTUFBQUEsUUFBUSxDQUFDRyxZQUFULENBQXNCVSxZQUF0QixHQUFxQyxDQUFyQztBQUNBYixNQUFBQSxRQUFRLENBQUNKLElBQVQsR0FBZ0Isb0NBQWhCO0FBQ0FJLE1BQUFBLFFBQVEsQ0FBQ04sSUFBVCxHQUFnQixFQUFoQjtBQUNBTSxNQUFBQSxRQUFRLENBQUNWLFFBQVQsR0FBb0IsTUFBcEI7QUFDQVUsTUFBQUEsUUFBUSxDQUFDYyxpQkFBVCxHQUE2QixFQUE3QjtBQUVBLGFBQU9kLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQlksWUFBN0I7QUFDQSxhQUFPZixRQUFRLENBQUNHLFlBQVQsQ0FBc0JhLEtBQTdCO0FBQ0EsYUFBT2hCLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQjdCLFdBQTdCO0FBQ0EsYUFBTzBCLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQlgsSUFBN0I7QUFFQWxDLE1BQUFBLElBQUksR0FBRzBDLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQix3QkFBdEIsRUFBZ0QsTUFBaEQsQ0FBUDtBQUNBLGFBQU9ILFFBQVEsQ0FBQ0csWUFBVCxDQUFzQix3QkFBdEIsQ0FBUDtBQUNIOztBQUVELFFBQUlILFFBQVEsQ0FBQ0csWUFBVCxDQUFzQixnQkFBdEIsS0FBMkNILFFBQVEsQ0FBQ0csWUFBVCxDQUFzQixnQkFBdEIsRUFBd0MsTUFBeEMsQ0FBL0MsRUFBZ0c7QUFDNUY3QyxNQUFBQSxJQUFJLEdBQUcwQyxRQUFRLENBQUNHLFlBQVQsQ0FBc0IsZ0JBQXRCLEVBQXdDLE1BQXhDLENBQVA7QUFDQSxhQUFPSCxRQUFRLENBQUNHLFlBQVQsQ0FBc0IsZ0JBQXRCLENBQVA7QUFDSDs7QUFFRCxTQUFLSCxRQUFMLEdBQWdCQSxRQUFoQixDQS9Id0IsQ0FpSXhCOztBQUNBLFFBQUk7QUFDQSxXQUFLakMsTUFBTCxHQUFjLE1BQU1rRCxJQUFJLENBQUNDLE1BQUwsQ0FBWWxCLFFBQVosQ0FBcEI7QUFDQSxXQUFLakMsTUFBTCxDQUFZMEMsUUFBWixHQUF1QkEsUUFBdkI7O0FBRUEsVUFBSSxLQUFLbEUsT0FBTCxDQUFhNEUsc0JBQWpCLEVBQXlDO0FBQ3JDLGFBQUtwRCxNQUFMLENBQVlvRCxzQkFBWixHQUFxQyxLQUFLNUUsT0FBTCxDQUFhNEUsc0JBQWxEO0FBQ0g7O0FBRUQsVUFBSSxLQUFLNUUsT0FBTCxDQUFhNkUsZUFBakIsRUFBa0M7QUFDOUIsYUFBS3JELE1BQUwsQ0FBWXFELGVBQVosR0FBOEIsS0FBSzdFLE9BQUwsQ0FBYTZFLGVBQTNDO0FBQ0g7O0FBRUQsVUFBSVgsUUFBUSxLQUFLQyxlQUFTRCxRQUFULENBQWtCRyxRQUFuQyxFQUE2QztBQUN6QyxjQUFNUyx3QkFBd0IsR0FBRyxNQUFNLElBQUlDLDJCQUFrQkMsUUFBbEIsQ0FBMkJDLHdCQUEvQixDQUF3RDtBQUMzRkMsVUFBQUEsU0FBUyxFQUFFO0FBQ1BDLFlBQUFBLGFBQWEsRUFBRSxPQUFPQyxPQUFQLEVBQWdCQyxNQUFoQixLQUEyQjtBQUN0QyxxQkFBTyxNQUFNLEtBQUs3RCxNQUFMLENBQVk4RCxPQUFaLENBQW9CRixPQUFwQixFQUE2QkMsTUFBN0IsQ0FBYjtBQUNIO0FBSE07QUFEZ0YsU0FBeEQsQ0FBdkM7QUFPQSxhQUFLRSxlQUFMLEdBQXVCLElBQUlSLDJCQUFrQkMsUUFBbEIsQ0FBMkJRLHVCQUEvQixDQUF1RFYsd0JBQXZELENBQXZCO0FBQ0EsY0FBTSxLQUFLUyxlQUFMLENBQXFCRSxTQUFyQixDQUErQjFFLElBQS9CLENBQU47QUFDSDtBQUNKLEtBdkJELENBdUJFLE9BQU8yRSxDQUFQLEVBQVU7QUFDUixZQUFNN0UsZ0JBQVU4RSxrQkFBVixDQUE2QkQsQ0FBN0IsQ0FBTjtBQUNIOztBQUVELFNBQUtoRixVQUFMLEdBQWtCLE1BQU0sS0FBS2MsTUFBTCxDQUFZb0UsVUFBWixFQUF4QixDQTdKd0IsQ0ErSnhCO0FBQ0E7QUFDQTs7QUFDQSxRQUFJLEtBQUsxRSxJQUFMLENBQVVhLFdBQVYsS0FBMkIsa0JBQS9CLEVBQW1EO0FBQy9DLFlBQU0sS0FBSzhELGlCQUFMLEVBQU47QUFDSDs7QUFFRCxRQUFJM0IsUUFBUSxLQUFLQyxlQUFTRCxRQUFULENBQWtCNEIsWUFBbkMsRUFBaUQsQ0FDN0M7QUFDQTtBQUNILEtBSEQsTUFHTztBQUNILFlBQU0sS0FBS3RFLE1BQUwsQ0FBWXVFLFVBQVosQ0FBdUI7QUFBRSxvQkFBWSxLQUFLakY7QUFBbkIsT0FBdkIsQ0FBTjtBQUNIOztBQUNELFVBQU1LLElBQU4sQ0FBVyxLQUFLSyxNQUFoQjtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ2lCLFFBQVB3RSxPQUFPLENBQUNDLE1BQUQsRUFBUztBQUNsQixRQUFJLENBQUNBLE1BQUwsRUFBYTtBQUNUQSxNQUFBQSxNQUFNLEdBQUcsUUFBVDs7QUFFQSxVQUFJLEtBQUsvRixFQUFMLENBQVFnRyxLQUFSLElBQWlCQyxLQUFLLENBQUNDLE9BQU4sQ0FBYyxLQUFLbEcsRUFBTCxDQUFRZ0csS0FBdEIsQ0FBakIsSUFBaUQsS0FBS2hHLEVBQUwsQ0FBUWdHLEtBQVIsQ0FBY0csTUFBZCxHQUF1QixDQUE1RSxFQUErRTtBQUMzRSxjQUFNQyxZQUFZLEdBQUcsS0FBS3BHLEVBQUwsQ0FBUWdHLEtBQVIsQ0FBY0ssSUFBZCxDQUFvQkMsSUFBRCxJQUFVQSxJQUFJLENBQUNQLE1BQUwsS0FBZ0IsUUFBN0MsQ0FBckI7O0FBQ0EsWUFBSUssWUFBSixFQUFrQjtBQUNkTCxVQUFBQSxNQUFNLEdBQUcsUUFBVDtBQUNIO0FBQ0o7QUFDSjs7QUFFRCxRQUFJLEtBQUt6RSxNQUFMLElBQWUsS0FBS0gsYUFBeEIsRUFBdUM7QUFDbkM0RSxNQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ1EsV0FBUCxFQUFUOztBQUVBLFVBQUksS0FBS2pGLE1BQUwsQ0FBWTBDLFFBQVosS0FBeUJDLGVBQVNELFFBQVQsQ0FBa0JHLFFBQS9DLEVBQXlEO0FBQ3JELGNBQU0sS0FBS2tCLGVBQUwsQ0FBcUJtQixRQUFyQixDQUE4QjtBQUNoQ1QsVUFBQUEsTUFBTSxFQUFFQSxNQUFNLEtBQUssUUFBWCxHQUNJbEIsMkJBQWtCNEIsU0FBbEIsQ0FBNEJDLE9BQTVCLENBQW9DQyxNQUR4QyxHQUVJOUIsMkJBQWtCNEIsU0FBbEIsQ0FBNEJDLE9BQTVCLENBQW9DRTtBQUhoQixTQUE5QixDQUFOO0FBS0gsT0FORCxNQU1PLElBQUksS0FBS3RGLE1BQUwsQ0FBWTBDLFFBQVosS0FBeUJDLGVBQVNELFFBQVQsQ0FBa0I0QixZQUEvQyxFQUE2RDtBQUNoRSxjQUFNLEtBQUtpQiwrQkFBTCxDQUFxQ2QsTUFBckMsQ0FBTjtBQUNBLGNBQU0sS0FBS2UsYUFBTCxFQUFOO0FBQ0g7O0FBRUQsVUFBSTtBQUNBLFlBQUksQ0FBQyxDQUFDLFVBQUQsRUFBYSxRQUFiLEVBQXVCQyxRQUF2QixDQUFnQ2hCLE1BQWhDLENBQUwsRUFBOEM7QUFDMUMsY0FBSSxLQUFLaUIsc0JBQVQsRUFBaUMsQ0FDN0I7QUFDQTtBQUNILFdBSEQsTUFHTztBQUNILGtCQUFNLEtBQUsxRixNQUFMLENBQVl3RixhQUFaLEVBQU47QUFDSDtBQUNKO0FBQ0osT0FURCxDQVNFLE9BQU90QixDQUFQLEVBQVU7QUFDUixhQUFLdkYsTUFBTCxDQUFZZ0gsSUFBWixDQUFpQiw2QkFBNkJ6QixDQUE5QyxFQURRLENBQzZDO0FBQ3hEOztBQUNELFdBQUtsRSxNQUFMLEdBQWMsSUFBZDtBQUNBLFdBQUtqQix1QkFBTCxHQUErQixJQUEvQjtBQUNBLFlBQU15RixPQUFOO0FBQ0gsS0E3QkQsTUE2Qk87QUFDSDtBQUNIO0FBQ0o7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSW9CLEVBQUFBLFdBQVcsQ0FBQ3JHLElBQUQsRUFBTztBQUNkc0csSUFBQUEsTUFBTSxDQUFDQyxvQkFBUCxHQUE4QnZHLElBQTlCO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7OztBQUVJd0csRUFBQUEsU0FBUyxDQUFDeEcsSUFBRCxFQUFPO0FBQ1osV0FBT3BCLGVBQWUsQ0FBQ3NILFFBQWhCLENBQXlCbEcsSUFBekIsQ0FBUDtBQUNIOztBQUVEeUcsRUFBQUEscUJBQXFCLENBQUN6RyxJQUFELEVBQU87QUFDeEIsUUFBSSxDQUFDckIsc0JBQXNCLENBQUN1SCxRQUF2QixDQUFnQ2xHLElBQWhDLENBQUwsRUFBNEM7QUFDeEMsVUFBSTBHLEtBQUo7O0FBQ0EsVUFBSTtBQUNBLFlBQ0ksS0FBS2pHLE1BQUwsSUFDQSxLQUFLQSxNQUFMLENBQVlrRyxjQUZoQixFQUdFO0FBQ0UsY0FBSUMsTUFBSjtBQUNBLGVBQUtuRyxNQUFMLENBQVlvRyxJQUFaLENBQWlCLE1BQU07QUFDbkIsbUJBQU8sSUFBSUMsT0FBSixDQUFZLENBQUNDLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUNwQyxvQkFBTUMsZUFBZSxHQUFHLEtBQUt4RyxNQUFMLENBQVl5RyxTQUFaLENBQXNCLFlBQVc7QUFDckQsb0JBQUk7QUFDQSxzQkFBSUMsTUFBTSxHQUFHLEVBQWI7O0FBRUEsd0JBQU1DLGlCQUFpQixHQUFHLE9BQU1DLFVBQVUsR0FBRyxJQUFuQixLQUE0QjtBQUNsRCwwQkFBTUMsS0FBSyxHQUFHLE1BQU0sS0FBSzdHLE1BQUwsQ0FBWWtHLGNBQVosRUFBcEI7O0FBQ0Esd0JBQUlVLFVBQUosRUFBZ0I7QUFDWiw0QkFBTUUsS0FBSyxHQUFHLE1BQU0sS0FBSzlHLE1BQUwsQ0FBWStHLFFBQVosRUFBcEI7O0FBQ0EsMEJBQUlELEtBQUosRUFBVztBQUNQLDhCQUFNRSxXQUFXLEdBQUdDLE9BQU8sQ0FBQyxlQUFELENBQTNCOztBQUNBLDRCQUFJQyxVQUFVLEdBQUcsTUFBTUYsV0FBVyxDQUFDRyxRQUFaLENBQXFCTCxLQUFyQixFQUE0QjtBQUFFL0csMEJBQUFBLEtBQUssRUFBRSxLQUFUO0FBQWdCcUgsMEJBQUFBLFVBQVUsRUFBRTtBQUE1Qix5QkFBNUIsQ0FBdkI7O0FBQ0EsNEJBQUlGLFVBQVUsSUFBSSxPQUFPQSxVQUFQLEtBQXNCLFFBQXhDLEVBQWtEO0FBQzlDQSwwQkFBQUEsVUFBVSxHQUFHQSxVQUFVLENBQUMxRixPQUFYLENBQW1CLHdCQUFuQixFQUE2QyxFQUE3QyxDQUFiO0FBQ0FrRiwwQkFBQUEsTUFBTSxDQUFDVyxJQUFQLENBQVlILFVBQVo7QUFDSDtBQUNKO0FBQ0o7O0FBRURSLG9CQUFBQSxNQUFNLENBQUNXLElBQVAsQ0FBWVIsS0FBWjtBQUNILG1CQWZEOztBQWlCQSx3QkFBTVMsZ0JBQWdCLEdBQUcsTUFBTSxLQUFLQSxnQkFBTCxFQUEvQjs7QUFDQSxzQkFBSUEsZ0JBQUosRUFBc0I7QUFDbEI7QUFDQSwwQkFBTUMsT0FBTyxHQUFHLE1BQU0sS0FBS3ZILE1BQUwsQ0FBWXdILGdCQUFaLEVBQXRCOztBQUNBLHdCQUNJRCxPQUFPLElBQ1A1QyxLQUFLLENBQUNDLE9BQU4sQ0FBYzJDLE9BQWQsQ0FEQSxJQUVBQSxPQUFPLENBQUMxQyxNQUFSLEdBQWlCLENBSHJCLEVBSUU7QUFDRSwyQkFBSyxNQUFNNEMsTUFBWCxJQUFxQkYsT0FBckIsRUFBOEI7QUFDMUIsOEJBQU0sS0FBS3ZILE1BQUwsQ0FBWTBILGNBQVosQ0FBMkJELE1BQTNCLENBQU47QUFDQSw4QkFBTWQsaUJBQWlCLEVBQXZCO0FBQ0g7QUFDSjtBQUNKLG1CQWJELE1BYU87QUFDSCwwQkFBTUEsaUJBQWlCLENBQUMsS0FBRCxDQUF2QjtBQUNILG1CQXBDRCxDQXNDQTs7O0FBQ0Esd0JBQU1nQixXQUFXLEdBQUcsTUFBTSx1QkFBWWpCLE1BQVosRUFBb0I7QUFBRWtCLG9CQUFBQSxTQUFTLEVBQUU7QUFBYixtQkFBcEIsQ0FBMUI7O0FBQ0Esc0JBQUlELFdBQVcsSUFBSSxPQUFPQSxXQUFQLEtBQXVCLFFBQTFDLEVBQW9EO0FBQ2hEeEIsb0JBQUFBLE1BQU0sR0FBR3dCLFdBQVcsQ0FBQ25HLE9BQVosQ0FBb0IseUJBQXBCLEVBQStDLEVBQS9DLENBQVQ7QUFDSDs7QUFFRCx5QkFBTyxJQUFQO0FBQ0gsaUJBN0NELENBNkNFLE9BQU8wQyxDQUFQLEVBQVU7QUFDUitCLGtCQUFBQSxLQUFLLEdBQUcvQixDQUFSO0FBQ0EseUJBQU8sS0FBUDtBQUNIO0FBQ0osZUFsRHVCLEVBbUR4QjtBQUFFMkQsZ0JBQUFBLE9BQU8sRUFBRSxLQUFHO0FBQWQsZUFuRHdCLENBQXhCOztBQXFEQSxrQkFBSXJCLGVBQWUsSUFBSUEsZUFBZSxDQUFDc0IsSUFBdkMsRUFBNkM7QUFDekN0QixnQkFBQUEsZUFBZSxDQUFDc0IsSUFBaEIsQ0FBcUIsTUFBTTtBQUN2QnhCLGtCQUFBQSxPQUFPO0FBQ1YsaUJBRkQsRUFFR3lCLEtBRkgsQ0FFVUMsR0FBRCxJQUFTO0FBQ2R6QixrQkFBQUEsTUFBTSxDQUFDeUIsR0FBRCxDQUFOO0FBQ0gsaUJBSkQ7QUFLSCxlQU5ELE1BTU87QUFDSDFCLGdCQUFBQSxPQUFPO0FBQ1Y7QUFDSixhQS9ETSxDQUFQO0FBZ0VILFdBakVEOztBQW1FQSxjQUFJTCxLQUFKLEVBQVc7QUFDUCxpQkFBS3RILE1BQUwsQ0FBWXNILEtBQVosQ0FBa0IsdUJBQWxCLEVBQTJDQSxLQUEzQztBQUNIOztBQUVELGlCQUFPRSxNQUFQO0FBQ0g7QUFDSixPQS9FRCxDQStFRSxPQUFPakMsQ0FBUCxFQUFVO0FBQ1IsYUFBS3ZGLE1BQUwsQ0FBWXNILEtBQVosQ0FBa0IsdUJBQWxCLEVBQTJDL0IsQ0FBM0M7O0FBQ0EsWUFBSStCLEtBQUosRUFBVztBQUNQLGVBQUt0SCxNQUFMLENBQVlzSCxLQUFaLENBQWtCLG1DQUFsQixFQUF1REEsS0FBdkQ7QUFDSCxTQUpPLENBS1I7O0FBQ0g7QUFDSjtBQUNKLEdBNVhxRCxDQThYdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUFnQyxFQUFBQSxnQkFBZ0IsQ0FBQ0MsR0FBRCxFQUFNQyxHQUFOLEVBQVc7QUFDdkIsUUFBSSxDQUFDRCxHQUFELElBQVEsT0FBT0EsR0FBUCxLQUFlLFFBQTNCLEVBQXFDO0FBQ2pDLGFBQU8sSUFBUDtBQUNILEtBSHNCLENBSXZCOzs7QUFDQSxXQUFPO0FBQ0hFLE1BQUFBLElBQUksRUFBRUYsR0FBRyxDQUFDRyxTQURQO0FBRUhDLE1BQUFBLEdBQUcsRUFBRUosR0FBRyxDQUFDSyxPQUZOO0FBR0hDLE1BQUFBLEtBQUssRUFBRU4sR0FBRyxDQUFDTSxLQUhSO0FBSUhMLE1BQUFBLEdBQUcsRUFBRUE7QUFKRixLQUFQO0FBTUg7O0FBRURNLEVBQUFBLGVBQWUsR0FBRztBQUNkO0FBQ0E1QyxJQUFBQSxNQUFNLENBQUNDLG9CQUFQLEdBQThCLElBQTlCO0FBQ0g7O0FBRWtCLFFBQWI0QyxhQUFhLENBQUN6QyxLQUFELEVBQVE7QUFDdkIsUUFBSUEsS0FBSyxJQUFJQSxLQUFLLENBQUMwQyxJQUFOLEtBQWVDLGdCQUFZQyxTQUFaLENBQXNCQyx3QkFBbEQsRUFBNEU7QUFDeEUsV0FBS3BELHNCQUFMLEdBQThCLElBQTlCO0FBQ0E7QUFDSCxLQUhELE1BR087QUFDSCxXQUFLQSxzQkFBTCxHQUE4QixLQUE5QjtBQUNILEtBTnNCLENBT3ZCOzs7QUFDQSxRQUFJLENBQUMsS0FBSzdGLGFBQVYsRUFBeUI7QUFDckI7QUFDSCxLQVZzQixDQVd2Qjs7O0FBQ0EsUUFBSSxLQUFLckIsT0FBTCxDQUFhcUMsaUJBQWpCLEVBQW9DO0FBQ2hDLFVBQUk7QUFDQSxjQUFNa0ksSUFBSSxHQUFHLE1BQU0sS0FBS0MsYUFBTCxFQUFuQjs7QUFDQSxZQUFJRCxJQUFJLElBQUlwRSxLQUFLLENBQUNDLE9BQU4sQ0FBY21FLElBQWQsQ0FBWixFQUFpQztBQUM3QixlQUFLLElBQUliLEdBQVQsSUFBZ0JhLElBQWhCLEVBQXNCO0FBQ2xCLGlCQUFLckssRUFBTCxDQUFRcUssSUFBUixDQUFhMUIsSUFBYixDQUFrQixLQUFLWSxnQkFBTCxDQUFzQkMsR0FBdEIsRUFBMkIsUUFBM0IsQ0FBbEI7QUFDSDtBQUNKO0FBQ0osT0FQRCxDQVFBLE9BQU9oRSxDQUFQLEVBQVU7QUFDTjtBQUNBLGFBQUt2RixNQUFMLENBQVlzSCxLQUFaLENBQWtCLDhCQUFsQixFQUFrRC9CLENBQWxEO0FBQ0g7QUFDSixLQXpCc0IsQ0EyQnZCOzs7QUFDQSxRQUFJLEtBQUsxRixPQUFMLENBQWF5SyxrQkFBakIsRUFBcUM7QUFDakMsVUFBSTtBQUNBLGNBQU1GLElBQUksR0FBRyxNQUFNLEtBQUtHLGNBQUwsRUFBbkI7O0FBQ0EsWUFBSUgsSUFBSSxJQUFJcEUsS0FBSyxDQUFDQyxPQUFOLENBQWNtRSxJQUFkLENBQVosRUFBaUM7QUFDN0IsZUFBSyxJQUFJYixHQUFULElBQWdCYSxJQUFoQixFQUFzQjtBQUNsQixpQkFBS3JLLEVBQUwsQ0FBUXFLLElBQVIsQ0FBYTFCLElBQWIsQ0FBa0IsS0FBS1ksZ0JBQUwsQ0FBc0JDLEdBQXRCLEVBQTJCLFNBQTNCLENBQWxCO0FBQ0g7QUFDSjtBQUNKLE9BUEQsQ0FRQSxPQUFPaEUsQ0FBUCxFQUFVO0FBQ047QUFDQSxhQUFLdkYsTUFBTCxDQUFZc0gsS0FBWixDQUFrQiwrQkFBbEIsRUFBbUQvQixDQUFuRDtBQUNIO0FBQ0osS0F6Q3NCLENBMkN2Qjs7O0FBQ0EsUUFBSSxLQUFLMUYsT0FBTCxDQUFhMkssaUJBQWpCLEVBQW9DO0FBQ2hDLFVBQUk7QUFDQSxjQUFNSixJQUFJLEdBQUcsS0FBS0ssYUFBTCxFQUFiOztBQUNBLFlBQUlMLElBQUksSUFBSXBFLEtBQUssQ0FBQ0MsT0FBTixDQUFjbUUsSUFBZCxDQUFaLEVBQWlDO0FBQzdCLGVBQUssSUFBSU0sUUFBVCxJQUFxQk4sSUFBckIsRUFBMkI7QUFDdkIsaUJBQUtySyxFQUFMLENBQVFxSyxJQUFSLENBQWExQixJQUFiLENBQWtCLEtBQUtZLGdCQUFMLENBQXNCb0IsUUFBdEIsRUFBZ0MsUUFBaEMsQ0FBbEI7QUFDSDtBQUNKO0FBQ0osT0FQRCxDQVFBLE9BQU9uRixDQUFQLEVBQVU7QUFDTjtBQUNBLGFBQUt2RixNQUFMLENBQVlzSCxLQUFaLENBQWtCLDhCQUFsQixFQUFrRC9CLENBQWxEO0FBQ0g7QUFDSjtBQUNKOztBQUVEb0YsRUFBQUEsZUFBZSxDQUFDQyxPQUFELEVBQVU7QUFDckIsUUFBSSxDQUFDQSxPQUFMLEVBQWM7QUFDVixZQUFNLElBQUluSyxvQkFBSixDQUFZQyxnQkFBVXdKLFNBQVYsQ0FBb0JXLFlBQWhDLEVBQThDLDBDQUE5QyxDQUFOO0FBQ0g7O0FBQ0QsUUFBSSxPQUFPRCxPQUFQLEtBQW1CLFFBQXZCLEVBQWlDO0FBQzdCLGFBQU9BLE9BQVA7QUFDSDs7QUFDRCxRQUFJQSxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsR0FBaEIsTUFBeUIsQ0FBN0IsRUFBZ0M7QUFDNUIsYUFBT0YsT0FBUCxDQUQ0QixDQUNaO0FBQ25COztBQUNELFVBQU1HLFFBQVEsR0FBRyxLQUFLaEssSUFBTCxJQUFhLEtBQUtBLElBQUwsQ0FBVVUsWUFBdkIsR0FBc0MsS0FBS1YsSUFBTCxDQUFVVSxZQUFWLENBQXVCWSxXQUF2QixFQUF0QyxHQUE2RSxJQUE5Rjs7QUFFQSxRQUFJLEtBQUs5QixVQUFMLEtBQW9CLFlBQXBCLElBQW9Dd0ssUUFBUSxLQUFLLFNBQXJELEVBQWdFO0FBQzVELFVBQUlILE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixLQUFoQixNQUEyQixDQUEvQixFQUFrQztBQUM5QjtBQUNBO0FBQ0E7QUFDQUYsUUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUNJLE1BQVIsQ0FBZSxNQUFNOUUsTUFBckIsQ0FBVjs7QUFDQSxZQUFJMEUsT0FBTyxDQUFDRSxPQUFSLENBQWdCLE1BQWhCLE1BQTRCLENBQUMsQ0FBakMsRUFBb0M7QUFDaENGLFVBQUFBLE9BQU8sR0FBRyxLQUFLN0osSUFBTCxDQUFVb0IsVUFBVixHQUF1QixNQUF2QixHQUFnQ3lJLE9BQTFDO0FBQ0g7O0FBQ0QsZUFBTywwQ0FBMENBLE9BQTFDLEdBQW9ELElBQTNEO0FBQ0gsT0FURCxNQVNPLElBQUlBLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixRQUFoQixNQUE4QixDQUFsQyxFQUNILE9BQU8seUNBQXlDRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxTQUFTOUUsTUFBeEIsQ0FBekMsR0FBMkUsSUFBbEYsQ0FERyxLQUVGLElBQUkwRSxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsT0FBaEIsTUFBNkIsQ0FBakMsRUFDRCxPQUFPLG9DQUFvQ0YsT0FBTyxDQUFDSSxNQUFSLENBQWUsUUFBUTlFLE1BQXZCLENBQXBDLEdBQXFFLElBQTVFLENBREMsS0FFQSxJQUFJMEUsT0FBTyxDQUFDRSxPQUFSLENBQWdCLGdCQUFoQixNQUFzQyxDQUExQyxFQUNELE9BQU8sNENBQTRDRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxpQkFBaUI5RSxNQUFoQyxDQUE1QyxHQUFzRixJQUE3RixDQURDLEtBRUEsSUFBSTBFLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixPQUFoQixNQUE2QixDQUFqQyxFQUNELE9BQU8sMkNBQTJDRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxRQUFROUUsTUFBdkIsQ0FBM0MsR0FBNEUsSUFBbkYsQ0FEQyxLQUVBLElBQUkwRSxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsZ0JBQWhCLE1BQXNDLENBQTFDLEVBQ0QsT0FBTyxtREFBbURGLE9BQU8sQ0FBQ0ksTUFBUixDQUFlLGlCQUFpQjlFLE1BQWhDLENBQW5ELEdBQTZGLElBQXBHLENBREMsS0FFQSxJQUFJMEUsT0FBTyxDQUFDRSxPQUFSLENBQWdCLFlBQWhCLE1BQWtDLENBQXRDLEVBQ0QsT0FBTywyQ0FBUCxDQURDLEtBRUEsSUFBSUYsT0FBTyxDQUFDRSxPQUFSLENBQWdCLEdBQWhCLE1BQXlCLENBQTdCLEVBQW1DO0FBQ3BDLGVBQU9GLE9BQVA7QUFDUCxLQXhCRCxNQXdCTyxJQUFJLEtBQUtySyxVQUFMLEtBQW9CLFlBQXBCLElBQW9Dd0ssUUFBUSxLQUFLLEtBQXJELEVBQTREO0FBQy9ELFVBQUlILE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixHQUFoQixNQUF5QixDQUE3QixFQUFnQztBQUM1QixlQUFPRixPQUFQO0FBQ1AsS0FITSxNQUdBLElBQUksS0FBS3JLLFVBQUwsS0FBb0IsWUFBeEIsRUFBc0M7QUFBYTtBQUN0RCxVQUFJcUssT0FBTyxDQUFDRSxPQUFSLENBQWdCLEtBQWhCLE1BQTJCLENBQS9CLEVBQ0ksT0FBTyxNQUFNRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxNQUFNOUUsTUFBckIsQ0FBYixDQURKLENBQ29EO0FBRHBELFdBRUssSUFBSTBFLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixPQUFoQixNQUE2QixDQUFqQyxFQUNELE9BQU8sV0FBV0YsT0FBTyxDQUFDSSxNQUFSLENBQWUsUUFBUTlFLE1BQXZCLENBQVgsR0FBNEMsR0FBbkQsQ0FEQyxLQUVBLElBQUkwRSxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsT0FBaEIsTUFBNkIsQ0FBakMsRUFDRCxPQUFPLE1BQU1GLE9BQU8sQ0FBQ0ksTUFBUixDQUFlLFFBQVE5RSxNQUF2QixDQUFiLENBREMsS0FFQSxJQUFJMEUsT0FBTyxDQUFDRSxPQUFSLENBQWdCLGdCQUFoQixNQUFzQyxDQUExQyxFQUNELE9BQU8sT0FBT0YsT0FBTyxDQUFDSSxNQUFSLENBQWUsUUFBUTlFLE1BQXZCLENBQWQsQ0FEQyxLQUVBLElBQUkwRSxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsTUFBaEIsTUFBNEIsQ0FBaEMsRUFDRCxPQUFPRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxPQUFPOUUsTUFBdEIsQ0FBUCxDQVZxQyxDQVVXO0FBQ3ZEOztBQUVELFdBQU8wRSxPQUFQO0FBQ0g7O0FBRURwSyxFQUFBQSxvQkFBb0IsR0FBRztBQUNuQixTQUFLRixPQUFMLENBQWEySyxjQUFiLEdBQThCLEtBQUtOLGVBQW5DO0FBQ0EsU0FBS3JLLE9BQUwsQ0FBYTRLLFlBQWIsR0FBNEJsSCxlQUFTa0gsWUFBckM7QUFDQSxTQUFLNUssT0FBTCxDQUFhNkssVUFBYixHQUEwQm5ILGVBQVNtSCxVQUFuQztBQUNBLFNBQUs3SyxPQUFMLENBQWE4SyxXQUFiLEdBQTJCcEgsZUFBU29ILFdBQXBDO0FBQ0EsU0FBSzlLLE9BQUwsQ0FBYStLLGVBQWIsR0FBK0JySCxlQUFTcUgsZUFBeEM7QUFDQSxTQUFLL0ssT0FBTCxDQUFhZ0wsZ0JBQWIsR0FBZ0N0SCxlQUFTc0gsZ0JBQXpDO0FBQ0EsU0FBS2hMLE9BQUwsQ0FBYWlMLGtCQUFiLEdBQWtDdkgsZUFBU3VILGtCQUEzQztBQUNBLFNBQUtqTCxPQUFMLENBQWFrTCxzQkFBYixHQUFzQ3hILGVBQVN3SCxzQkFBL0M7QUFDQSxTQUFLbEwsT0FBTCxDQUFhbUwsY0FBYixHQUE4QnpILGVBQVN5SCxjQUF2QztBQUNBLFNBQUtuTCxPQUFMLENBQWFvTCw0QkFBYixHQUE0QzFILGVBQVMwSCw0QkFBckQ7QUFDQSxTQUFLcEwsT0FBTCxDQUFhcUwsb0JBQWIsR0FBb0MzSCxlQUFTMkgsb0JBQTdDO0FBQ0EsU0FBS3JMLE9BQUwsQ0FBYXNMLCtCQUFiLEdBQStDNUgsZUFBUzRILCtCQUF4RDtBQUNBLFNBQUt0TCxPQUFMLENBQWF1TCxrQkFBYixHQUFrQzdILGVBQVM2SCxrQkFBM0M7QUFDQSxTQUFLdkwsT0FBTCxDQUFhd0wsMEJBQWIsR0FBMEM5SCxlQUFTOEgsMEJBQW5EO0FBQ0EsU0FBS3hMLE9BQUwsQ0FBYXlMLHFCQUFiLEdBQXFDL0gsZUFBUytILHFCQUE5QztBQUNBLFNBQUt6TCxPQUFMLENBQWEwTCxhQUFiLEdBQTZCaEksZUFBU2dJLGFBQXRDO0FBQ0EsU0FBSzFMLE9BQUwsQ0FBYTJMLFdBQWIsR0FBMkJqSSxlQUFTaUksV0FBcEM7QUFDQSxTQUFLM0wsT0FBTCxDQUFhNEwsV0FBYixHQUEyQmxJLGVBQVNrSSxXQUFwQztBQUNIOztBQUVrQixRQUFickYsYUFBYSxHQUFHO0FBQ2xCLFFBQUk7QUFDQSxVQUFJLEtBQUt4RixNQUFMLElBQWUsS0FBS0EsTUFBTCxDQUFZd0YsYUFBL0IsRUFBOEM7QUFDMUMsY0FBTSxLQUFLeEYsTUFBTCxDQUFZd0YsYUFBWixFQUFOO0FBQ0g7QUFDSixLQUpELENBSUUsT0FBT3RCLENBQVAsRUFBVTtBQUNSLFdBQUt2RixNQUFMLENBQVlzSCxLQUFaLENBQWtCLHFCQUFsQixFQUF5Qy9CLENBQXpDO0FBQ0g7QUFDSjs7QUFFb0MsUUFBL0JxQiwrQkFBK0IsQ0FBQ2QsTUFBRCxFQUFTO0FBQzFDLFdBQU8sSUFBSTRCLE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDcEMsWUFBTXVFLFdBQVcsR0FBRztBQUNoQnJHLFFBQUFBLE1BQU0sRUFBRUEsTUFBTSxLQUFLLFFBQVgsR0FBc0IsUUFBdEIsR0FBaUM7QUFEekIsT0FBcEI7QUFJQSxVQUFJakcsT0FBSjs7QUFFQSxVQUFJLEtBQUt5RCxRQUFMLENBQWNHLFlBQWQsQ0FBMkI3QixXQUEvQixFQUE0QztBQUN4Qy9CLFFBQUFBLE9BQU8sR0FBRztBQUNONEMsVUFBQUEsR0FBRyxFQUFHLGtEQUFpRCxLQUFLcEIsTUFBTCxDQUFZK0ssU0FBVSxPQUR2RTtBQUVOQyxVQUFBQSxNQUFNLEVBQUUsS0FGRjtBQUdOQyxVQUFBQSxJQUFJLEVBQUUsSUFIQTtBQUlOQyxVQUFBQSxrQkFBa0IsRUFBRSxLQUpkO0FBS05DLFVBQUFBLElBQUksRUFBRUwsV0FMQTtBQU1OLGtCQUFRO0FBQ0osb0JBQVEsS0FBSzdJLFFBQUwsQ0FBY0MsSUFEbEI7QUFFSixvQkFBUSxLQUFLRCxRQUFMLENBQWNFLEdBRmxCO0FBR0osK0JBQW1CO0FBSGY7QUFORixTQUFWO0FBWUgsT0FiRCxNQWFPO0FBQ0gzRCxRQUFBQSxPQUFPLEdBQUc7QUFDTjRDLFVBQUFBLEdBQUcsRUFBRyw0REFBMkQsS0FBS3BCLE1BQUwsQ0FBWStLLFNBQVUsT0FEakY7QUFFTkMsVUFBQUEsTUFBTSxFQUFFLEtBRkY7QUFHTkMsVUFBQUEsSUFBSSxFQUFFLElBSEE7QUFJTkMsVUFBQUEsa0JBQWtCLEVBQUUsS0FKZDtBQUtOQyxVQUFBQSxJQUFJLEVBQUVMLFdBTEE7QUFNTixrQkFBUTtBQUNKLG9CQUFRLEtBQUs3SSxRQUFMLENBQWNHLFlBQWQsQ0FBMkIsbUJBQTNCLENBREo7QUFFSixvQkFBUSxLQUFLSCxRQUFMLENBQWNHLFlBQWQsQ0FBMkIsa0JBQTNCLENBRko7QUFHSiwrQkFBbUI7QUFIZjtBQU5GLFNBQVY7QUFZSDs7QUFFRCxVQUFJO0FBQ0EsOEJBQVE1RCxPQUFSLEVBQWlCLENBQUN3SixHQUFELEVBQU1vRCxHQUFOLEVBQVdELElBQVgsS0FBb0I7QUFDakM3RSxVQUFBQSxPQUFPO0FBQ1YsU0FGRDtBQUdILE9BSkQsQ0FJRSxPQUFPcEMsQ0FBUCxFQUFVO0FBQ1IsYUFBS3ZGLE1BQUwsQ0FBWXNILEtBQVosQ0FBa0IsbURBQW1EL0IsQ0FBQyxDQUFDbUgsUUFBRixFQUFyRTtBQUNBL0UsUUFBQUEsT0FBTztBQUNWO0FBQ0osS0EzQ00sQ0FBUDtBQTRDSDs7QUFybEJxRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgbW9iXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBtb2JpbGUgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKkxvY2F0b3JzOioqICBcclxuICogXHJcbiAqIE5hdGl2ZSBhcHBsaWNhdGlvbiBsb2NhdG9ycyBmb3IhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FuZHJvaWQucG5nKSAgXHJcbiAqICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICogYH5BQ0NFU1NJQklMSVRZX0lEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJZC5cclxuICogKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBpZC5cclxuICogKiBgY2xhc3M9Q0xBU1NgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBjbGFzcy5cclxuICogKiBgdGV4dD1URVhUYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgdmlzaWJsZSB0ZXh0LlxyXG4gKiAqIGB0ZXh0LWNvbnRhaW5zPVRFWFRgIC0gTG9jYXRlcyBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHN0cmluZy5cclxuICogKiBgZGVzYz1ERVNDUklQVElPTmAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGRlc2NyaXB0aW9uLlxyXG4gKiAqIGBkZXNjLWNvbnRhaW5zPURFU0NSSVBUSU9OYCAtIExvY2F0ZXMgZWxlbWVudCB3aG9zZSBkZXNjcmlwdGlvbiBjb250YWlucyB0aGUgc3BlY2lmaWVkIHN0cmluZy5cclxuICogKiBgc2Nyb2xsYWJsZWAgLSBMb2NhdGVzIGVsZW1lbnRzIHRoYXQgYXJlIHNjcm9sbGFibGUuICBcclxuICogIFxyXG4gKiBOYXRpdmUgYXBwbGljYXRpb24gbG9jYXRvcnMgZm9yIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hcHBsZS5wbmcpICBcclxuICogIFxyXG4gKiAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIElELlxyXG4gKiAqIGB+QUNDRVNTSUJJTElUWV9JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIEFjY2Vzc2liaWxpdHkgSWQuICBcclxuICogIFxyXG4gKiBIeWJyaWQhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2h5YnJpZC5wbmcpICBhbmQgV2ViIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy93ZWIucG5nKSAgYXBwbGljYXRpb24gbG9jYXRvcnMgZm9yIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hbmRyb2lkLnBuZykgICFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYXBwbGUucG5nKSAgXHJcbiAqICBcclxuICogKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBpZC5cclxuICogKiBgbmFtZT1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgbmFtZSBhdHRyaWJ1dGUuXHJcbiAqICogYHRhZz1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgdGFnIG5hbWUuXHJcbiAqICogYGxpbms9VEVYVGAgLSBMb2NhdGVzIGFuY2hvciBlbGVtZW50IHdob3NlIHRleHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAqIGBsaW5rLWNvbnRhaW5zPVRFWFRgIC0gTG9jYXRlcyBhbmNob3IgZWxlbWVudCB3aG9zZSB0ZXh0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICogYGNzcz1DU1NfU0VMRUNUT1JgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGEgQ1NTIHNlbGVjdG9yLlxyXG4gKiBcclxuICogKipQYXR0ZXJuIGFyZ3VtZW50czoqKlxyXG4gKiBcclxuICogQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAqIGBQQVRURVJOYCAtIFZlcmJhdGltIG1hdGNoaW5nLlxyXG4gKiBcclxuICovXHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBwZXJmZWN0b1JlcG9ydGluZyBmcm9tICdwZXJmZWN0by1yZXBvcnRpbmcnO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tICdyZXF1ZXN0JztcclxuaW1wb3J0IG1lcmdlSW1hZ2VzIGZyb20gJy4uL2xpYi9pbWctbWVyZ2UnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICdtb2InO1xyXG5jb25zdCBERUZBVUxUX0FQUElVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9OQU1FID0gJ2RlZmF1bHQnO1xyXG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0J107XHJcbmNvbnN0IEFDVElPTl9DT01NQU5EUyA9IFsnb3BlbicsJ3RhcCcsJ2NsaWNrJywnc3dpcGUnLCdzdWJtaXQnLCdzZXRWYWx1ZSddO1xyXG5jb25zdCBERUZBVUxUX1dBSVRfVElNRU9VVCA9IDYwICogMTAwMDsgICAgICAgICAgICAvLyBkZWZhdWx0IDYwcyB3YWl0IHRpbWVvdXRcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vYmlsZU1vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmV0d29ya1JlcXVlc3RzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHQgPSAnTkFUSVZFX0FQUCc7XHJcbiAgICAgICAgdGhpcy5fbG9hZEhlbHBlckZ1bmN0aW9ucygpO1xyXG4gICAgICAgIC8vIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc29tZSBtb2R1bGUgY29tbWFuZHMgbWlnaHQgcmVmZXIgdG8gdGhpcy5PeEVycm9yIGFuZCB0aGlzLmVyckhlbHBlcilcclxuICAgICAgICB0aGlzLk94RXJyb3IgPSBPeEVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJySGVscGVyID0gZXJySGVscGVyO1xyXG4gICAgICAgIC8vIGhvbGRzIGVsZW1lbnQgb3BlcmF0aW9uIHRpbWVvdXQgdmFsdWVcclxuICAgICAgICB0aGlzLndhaXRGb3JUaW1lb3V0ID0gREVGQVVMVF9XQUlUX1RJTUVPVVQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldERyaXZlclxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgdW5kZXJseWluZyBXRElPIGRyaXZlci5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gV0RJTyBkcml2ZXIuXHJcbiAgICAgKi9cclxuICAgIGdldERyaXZlcigpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RHJpdmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0aWVzXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGN1cnJlbnRseSBkZWZpbmVkIGNhcGFiaWxpdGllcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRDYXBhYmlsaXRpZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwcyB8fCBzdXBlci5nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIG5ldyBBcHBpdW0gc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gY2FwcyAtIERlc2lyZWQgY2FwYWJpbGl0aWVzLiBJZiBub3Qgc3BlY2lmaWVkIGNhcGFiaWxpdGllcyB3aWxsIGJlIHRha2VuIGZyb20gc3VpdGUgZGVmaW5pdGlvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gYXBwaXVtVXJsIC0gUmVtb3RlIEFwcGl1bSBzZXJ2ZXIgVVJMIChkZWZhdWx0OiBodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViKS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdChjYXBzLCBhcHBpdW1VcmwpIHtcclxuICAgICAgICAvLyBpZiByZW9wZW5TZXNzaW9uIGlzIHRydWUgLSByZWluaXRpbGl6ZSB0aGUgbW9kdWxlXHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlb3BlblNlc3Npb24gIT09IGZhbHNlKSB7IC8vIHRydWUgb3IgZmFsc2UgaWYgZXhwbGlzaXRseSBzZXQuIHRydWUgb24gbnVsbCBvciB1bmRlZmluZWQuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygncmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVsb2FkaW5nIHRoZSBzZXNzaW9uLi4uJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5yZWxvYWRTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdtb2IuaW5pdCB3YXMgY2FsbGVkIGZvciBhbHJlYWR5IGluaXRpYWxpemVkIG1vZHVsZS4gcmVvcGVuU2Vzc2lvbiBpcyBmYWxzZSBzbyB0aGUgY2FsbCBpcyBpZ25vcmVkLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSByZWZhY3RvcmVkXHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmNhcHMgJiYgdGhpcy5jdHguY2Fwc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXBzKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy5wbGF0Zm9ybU5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy5wbGF0Zm9ybVZlcnNpb247XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy5kZXZpY2VOYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuYnJvd3Nlck5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy5hdXRvbWF0aW9uTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLnVkaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhcHMuYXBwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2Fwcy5lbmFibGVBcHBpdW1CZWhhdmlvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHMudXNlQXBwaXVtRm9yV2ViID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXBzLmVuYWJsZUFwcGl1bUJlaGF2aW9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNhcHMudXNlQXBwaXVtRm9yV2ViID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNhcHMuZW5hYmxlQXBwaXVtQmVoYXZpb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWFwcGl1bVVybCkge1xyXG4gICAgICAgICAgICBhcHBpdW1VcmwgPSB0aGlzLm9wdGlvbnMuYXBwaXVtVXJsIHx8IERFRkFVTFRfQVBQSVVNX1VSTDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1lcmdlIGNhcGFiaWxpdGllcyBmcm9tIGNvbnRleHQgYW5kIGZyb20gaW5pdCBmdW5jdGlvbiBhcmd1bWVudCwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGNvbnRleHQtcGFzc2VkIGNhcGFiaWxpdGllc1xyXG4gICAgICAgIHRoaXMuY2FwcyA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jdHguY2FwcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY2FwcywgLi4uY2FwcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGNsZWFyIHRoZSBleGlzdGluZyBkZXZpY2UgbG9ncywgaWYgY29sbGVjdERldmljZUxvZ3Mgb3B0aW9uIGlzIHRydWUgKHdlIHdhbnQgdG8gaW5jbHVkZSBsb2dzIG9ubHkgcmVsZXZhbnQgZm9yIHRoaXMgc2Vzc2lvbilcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3REZXZpY2VMb2dzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwc1snYXBwaXVtOmNsZWFyRGV2aWNlTG9nc09uU3RhcnQnXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiBib3RoIGJyb3dzZXJOYW1lIGFuZCBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCB3ZXJlIHNwZWNpZmllZCAtIGFzc3VtZSB3ZSB3YW50IHRvIHJ1biB0aGUgYXBwbGljYXRpb24gYW5kIHJlbW92ZSBicm93c2VyTmFtZVxyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgKHRoaXMuY2Fwcy5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHAgfHwgdGhpcy5jYXBzLmJ1bmRsZUlkKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYXBzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBubyBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCBjYXBhYmlsaXR5IG5vciBicm93c2VyTmFtZSBhcmUgZGVmaW5lZCwgYXNzdW1lIHdlIHdhbnQgdG8gcnVuIHRoZSB0ZXN0IGFnYWluc3QgZGVmYXVsdCBicm93c2VyXHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiAhdGhpcy5jYXBzLmFwcFBhY2thZ2UgJiYgIXRoaXMuY2Fwcy5hcHAgJiYgIXRoaXMuY2Fwcy5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2ViZHJpdmVyIGV4cGVjdHMgbG93ZXIgY2FzZSBuYW1lc1xyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgdHlwZW9mIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShhcHBpdW1VcmwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBwcm92aWRlciA9IG1vZFV0aWxzLmRldGVybWluZVByb3ZpZGVyKHdkaW9PcHRzKTtcclxuICAgICAgICBsZXQgbmFtZSA9ICduYW1lJztcclxuXHJcbiAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMubWF4SW5zdGFuY2VzID0gMTtcclxuICAgICAgICAgICAgd2Rpb09wdHMucGF0aCA9ICcvbmV4cGVyaWVuY2UvcGVyZmVjdG9tb2JpbGUvd2QvaHViJztcclxuICAgICAgICAgICAgd2Rpb09wdHMucG9ydCA9IDgwO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wcm90b2NvbCA9ICdodHRwJztcclxuICAgICAgICAgICAgd2Rpb09wdHMub3BlbkRldmljZVRpbWVvdXQgPSAxNTtcclxuXHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMubWFudWZhY3R1cmVyO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLm1vZGVsO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgICAgICBkZWxldGUgd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmhvc3Q7XHJcblxyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXSAmJiB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ11bJ25hbWUnXSkge1xyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLndkaW9PcHRzID0gd2Rpb09wdHM7XHJcblxyXG4gICAgICAgIC8vIGluaXQgd2ViZHJpdmVyXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBhd2FpdCB3ZGlvLnJlbW90ZSh3ZGlvT3B0cyk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLnByb3ZpZGVyID0gcHJvdmlkZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCA9IGF3YWl0IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdlYmRyaXZlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlU2NyaXB0OiBhc3luYyAoY29tbWFuZCwgcGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kcml2ZXIuZXhlY3V0ZShjb21tYW5kLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGluZ0NsaWVudCA9IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b1JlcG9ydGluZ0NsaWVudChwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0YXJ0KG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0Q29udGV4dCgpO1xyXG5cclxuICAgICAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBvbiBBbmRyb2lkIDcrIGVtdWxhdG9yLCBhbmQgdGh1cy9vciB1c2luZyBhIFdlYlZpZXcgQnJvd3NlciBUZXN0ZXIgLVxyXG4gICAgICAgIC8vIHBlcmZvcm0gYW4gYWN0dWFsIGFwcENvbnRleHQgc3dpdGNoIHRvIFdFQlxyXG4gICAgICAgIC8vIHNvIEFwcGl1bSB3aWxsIGRlbGVnYXRlIGNvbW1hbmRzIHRvIENocm9tZSBEcml2ZXIgaW5zdGVhZCBvZiBBcHBpdW0gRHJpdmVyXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gICdjaHJvbWl1bS13ZWJ2aWV3Jykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldFdlYlZpZXdDb250ZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgLy8gZmFpbHMgb24gYnJvd3NlcnN0YWNrXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc3RhdHVzIC0gVGVzdCBzdGF0dXMsIGVpdGhlciBgcGFzc2VkYCBvciBgZmFpbGVkYC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICBpZiAoIXN0YXR1cykge1xyXG4gICAgICAgICAgICBzdGF0dXMgPSAncGFzc2VkJztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJzLnN0ZXBzICYmIEFycmF5LmlzQXJyYXkodGhpcy5ycy5zdGVwcykgJiYgdGhpcy5ycy5zdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWlsZWRGaW5kZWQgPSB0aGlzLnJzLnN0ZXBzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFpbGVkRmluZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RvcCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPT09ICdQQVNTRUQnID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5wYXNzZWQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLmZhaWxlZFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrKHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICghWydDQU5DRUxFRCcsICdGQUlMRUQnXS5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlU2Vzc2lvbiB3aWxsIHRha2UgNSBtaW4gdG8gY2FsbFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Vycm9yIGRpc3Bvc2luZyBkcml2ZXI6ICcgKyBlKTsgICAgLy8gaWdub3JlIGFueSBlcnJvcnMgYXQgZGlzcG9zYWwgc3RhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZVxyXG4gICAgICogICAgICAgICAgICAgIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqIEBmb3IgYW5kcm9pZCwgaW9zLCBoeWJyaWQsIHdlYlxyXG4gICAgICovXHJcbiAgICB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZVxyXG4gICAgICovXHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFVudGlsUmV0VmFsID0gdGhpcy5kcml2ZXIud2FpdFVudGlsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB1c2hJbWFnZVRvSW1hZ2VzID0gYXN5bmMoZmV0Y2hUaXRsZSA9IHRydWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZXRjaFRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaXRsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0VG9JbWFnZSA9IHJlcXVpcmUoJ3RleHQtdG8taW1hZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlSW1hZ2UgPSBhd2FpdCB0ZXh0VG9JbWFnZS5nZW5lcmF0ZSh0aXRsZSwgeyBkZWJ1ZzogZmFsc2UsIGZvbnRGYW1pbHk6ICdBcmlhbCcgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZUltYWdlICYmIHR5cGVvZiB0aXRsZUltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVJbWFnZSA9IHRpdGxlSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKHRpdGxlSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzV2ViVmlld0NvbnRleHQgPSBhd2FpdCB0aGlzLmlzV2ViVmlld0NvbnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzV2ViVmlld0NvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgYWxsIChzY3JlZW5zaG90IGFuZCB0aXRsZSkgaW1hZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGhhbmRsZXMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZSBvZiBoYW5kbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KGhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHB1c2hJbWFnZVRvSW1hZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHVzaEltYWdlVG9JbWFnZXMoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhbGwgaW1hZ2VzIGludG8gb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZEltYWdlID0gYXdhaXQgbWVyZ2VJbWFnZXMoaW1hZ2VzLCB7IGRpcmVjdGlvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlZEltYWdlICYmIHR5cGVvZiBtZXJnZWRJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IG1lcmdlZEltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRVbnRpbFJldFZhbCAmJiB3YWl0VW50aWxSZXRWYWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRVbnRpbFJldFZhbC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCcsIGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIF9nZXRMb2dzKG5hbWUpIHtcclxuICAgIC8vICAgICBpZiAoIU5PX0xPR1NfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9ncygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBfYWRqdXN0QXBwaXVtTG9nKGxvZywgc3JjKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBkZXZpY2UgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncykgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZ25vcmUgdGhlIHJlc3QgaWYgbW9iIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIHRoZSBkZXZpY2UgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0RGV2aWNlTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2csICdkZXZpY2UnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGRldmljZSBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCB0aGUgYnJvd3NlciBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0QnJvd3NlckxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nLCAnYnJvd3NlcicpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QXBwaXVtTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZ0VudHJ5IG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikge1xyXG4gICAgICAgIGlmICghbG9jYXRvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBsb2NhdG9yIG5vdCBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhdG9yICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignLycpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yOyAvLyBsZWF2ZSB4cGF0aCBsb2NhdG9yIGFzIGlzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gdGhpcy5jYXBzICYmIHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUgPyB0aGlzLmNhcHMucGxhdGZvcm1OYW1lLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hcHBDb250ZXh0ID09PSAnTkFUSVZFX0FQUCcgJiYgcGxhdGZvcm0gPT09ICdhbmRyb2lkJykge1xyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gcHJlcGVuZCBwYWNrYWdlIG5hbWUgaWYgaXQncyBub3Qgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBnZXRDdXJyZW50UGFja2FnZSgpIHNlZW1zIHRvIGNyYXNoIHBvc3NpYmx5IGR1ZSB0byBhIHdkaW8gYnVnLiBcclxuICAgICAgICAgICAgICAgIC8vICAgICAgIHNvIHdlIGdldCBwYWNrYWdlIG5hbWUgZnJvbSBjYXBzIGluc3RlYWQuXHJcbiAgICAgICAgICAgICAgICBsb2NhdG9yID0gbG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJzppZC8nKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdG9yID0gdGhpcy5jYXBzLmFwcFBhY2thZ2UgKyAnOmlkLycgKyBsb2NhdG9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkucmVzb3VyY2VJZChcIicgKyBsb2NhdG9yICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjbGFzcz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmNsYXNzTmFtZShcIicgKyBsb2NhdG9yLnN1YnN0cignY2xhc3M9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGV4dD0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnRleHQoXCInICsgbG9jYXRvci5zdWJzdHIoJ3RleHQ9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGV4dC1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnRleHRDb250YWlucyhcIicgKyBsb2NhdG9yLnN1YnN0cigndGV4dC1jb250YWlucz0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdkZXNjPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuZGVzY3JpcHRpb24oXCInICsgbG9jYXRvci5zdWJzdHIoJ2Rlc2M9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignZGVzYy1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uQ29udGFpbnMoXCInICsgbG9jYXRvci5zdWJzdHIoJ2Rlc2MtY29udGFpbnM9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignc2Nyb2xsYWJsZScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuc2Nyb2xsYWJsZSh0cnVlKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignficpID09PSAwKSAgICAvLyBhY2Nlc3NpYmlsaXR5IGlkXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwQ29udGV4dCA9PT0gJ05BVElWRV9BUFAnICYmIHBsYXRmb3JtID09PSAnaW9zJykge1xyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCd+JykgPT09IDApIC8vIGFjY2Vzc2liaWxpdHkgaWRcclxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBDb250ZXh0ICE9PSAnTkFUSVZFX0FQUCcpIHsgICAgICAgICAgICAvLyBIeWJyaWQgb3IgV2ViIGFwcGxpY2F0aW9uXHJcbiAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcjJyArIGxvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCk7ICAgICAgLy8gY29udmVydCAnaWQ9JyB0byAnIydcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbmFtZT0nICsgbG9jYXRvci5zdWJzdHIoJ25hbWU9Jy5sZW5ndGgpICsgJ10nO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbms9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJz0nICsgbG9jYXRvci5zdWJzdHIoJ2xpbms9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbmstY29udGFpbnM9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyo9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjc3M9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvci5zdWJzdHIoJ2Nzcz0nLmxlbmd0aCk7ICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGNzcywganVzdCByZW1vdmUgY3NzPSBwcmVmaXhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IHRoaXMuX2dldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRDb250ZXh0ID0gbW9kVXRpbHMuYXNzZXJ0Q29udGV4dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuY29udGV4dExpc3QgPSBtb2RVdGlscy5jb250ZXh0TGlzdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0TG9nVHlwZXMgPSBtb2RVdGlscy5nZXRMb2dUeXBlcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVTZXNzaW9uKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdkZWxldGVTZXNzaW9uIGVycm9yJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBsZXQgb3B0aW9ucztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYCxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiByZXF1ZXN0Qm9keSxcclxuICAgICAgICAgICAgICAgICAgICAnYXV0aCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5rZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZW5kSW1tZWRpYXRlbHknOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS1jbG91ZC5icm93c2Vyc3RhY2suY29tL2FwcC1hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjay51c2VyJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjay5rZXknXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbmRJbW1lZGlhdGVseSc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0KG9wdGlvbnMsIChlcnIsIHJlcywgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBCcm93c2Vyc3RhY2s6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -82,7 +82,6 @@ class OxygenWorker extends EventEmitter {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
let error = null;
|
|
85
|
-
const cwd = this._cwd;
|
|
86
85
|
|
|
87
86
|
try {
|
|
88
87
|
this._oxygen && this._oxygen.onBeforeCase && (await this._oxygen.onBeforeCase(context));
|
|
@@ -99,7 +98,7 @@ class OxygenWorker extends EventEmitter {
|
|
|
99
98
|
|
|
100
99
|
try {
|
|
101
100
|
if (script && script.startsWith('.')) {
|
|
102
|
-
var resolvedPath = require.resolve(path.resolve(
|
|
101
|
+
var resolvedPath = require.resolve(path.resolve(path.dirname(scriptPath), script));
|
|
103
102
|
|
|
104
103
|
if (require.cache[resolvedPath]) {
|
|
105
104
|
delete require.cache[resolvedPath];
|
|
@@ -264,4 +263,4 @@ class OxygenWorker extends EventEmitter {
|
|
|
264
263
|
}
|
|
265
264
|
|
|
266
265
|
exports.default = OxygenWorker;
|
|
267
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9PeHlnZW5Xb3JrZXIuanMiXSwibmFtZXMiOlsiRmliZXIiLCJyZXF1aXJlIiwicGF0aCIsIkV2ZW50RW1pdHRlciIsIk94eWdlbiIsImRlZmF1bHQiLCJveHV0aWwiLCJlcnJvckhlbHBlciIsIm1vZHVsZSIsImdsb2JhbCIsImJyb3dzZXIiLCJPeHlnZW5Xb3JrZXIiLCJjb25zdHJ1Y3RvciIsInJlcG9ydGVyIiwibG9nZ2VyIiwiX294eWdlbiIsIl9vcHRzIiwiX2xvZ2dlciIsIl90ZXN0SG9va3MiLCJfcmVwb3J0ZXIiLCJfcnVuSWQiLCJpbml0IiwicnVuSWQiLCJvcHRpb25zIiwiY2FwcyIsIl9jd2QiLCJjd2QiLCJwcm9jZXNzIiwib24iLCJfaGFuZGxlQmVmb3JlQ29tbWFuZCIsImJpbmQiLCJfaGFuZGxlQWZ0ZXJDb21tYW5kIiwiX2hhbmRsZUxvZ0VudHJ5IiwibG9hZFRlc3RIb29rcyIsImRlYnVnIiwiZSIsInRvU3RyaW5nIiwicnVuIiwic2NyaXB0UGF0aCIsImNvbnRleHQiLCJwb0ZpbGUiLCJFcnJvciIsImxvYWRQYWdlT2JqZWN0RmlsZSIsIl9zdGVwcyIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwiZXJyb3IiLCJvbkJlZm9yZUNhc2UiLCJfcnVuRm5JbkZpYmVyQ29udGV4dCIsImNhY2hlIiwiTW9kdWxlIiwib3JpZ2luYWxSZXF1aXJlIiwicHJvdG90eXBlIiwic2NyaXB0IiwiYXJndW1lbnRzIiwic3RhcnRzV2l0aCIsInJlc29sdmVkUGF0aCIsImV4IiwiYXBwbHkiLCJ0eXBlIiwiZXJyb3JDb2RlIiwiQVNTRVJUX1BBU1NFRCIsIl93YWl0U3RlcFJlc3VsdCIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJtb2R1bGVDYXBzIiwiZ2V0TW9kdWxlc0NhcGFiaWxpdGllcyIsIm9uQWZ0ZXJDYXNlIiwicmVzdWx0U3RvcmUiLCJyZXN1bHRzIiwicmVzZXRSZXN1bHRzIiwib3hDb250ZXh0IiwidmFycyIsImRpc3Bvc2UiLCJzdGF0dXMiLCJkaXNwb3NlTW9kdWxlcyIsImNhbGxUZXN0SG9vayIsImhvb2tOYW1lIiwiaG9va0FyZ3MiLCJleGVjdXRlVGVzdEhvb2siLCJmbiIsIlByb21pc2UiLCJyZWplY3QiLCJyZXN1bHQiLCJlcnIiLCJyZXBsU3RhcnQiLCJjb21tYW5kUmVzb2x2ZSIsInNldFRpbWVvdXQiLCJtb2R1bGVzIiwia2V5cyIsIk9iamVjdCIsIm1hcCIsIml0ZW0iLCJkcml2ZXIiLCJlbWl0IiwicHVzaCIsImxldmVsIiwibWVzc2FnZSIsInNyYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBWUEsTUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsUUFBRCxDQUFyQjs7QUFDQSxNQUFNQyxJQUFJLEdBQUdELE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUNBLE1BQU07QUFBRUUsRUFBQUE7QUFBRixJQUFtQkYsT0FBTyxDQUFDLFFBQUQsQ0FBaEM7O0FBRUEsTUFBTUcsTUFBTSxHQUFHSCxPQUFPLENBQUMsdUJBQUQsQ0FBUCxDQUFpQ0ksT0FBaEQ7O0FBQ0EsTUFBTUMsTUFBTSxHQUFHTCxPQUFPLENBQUMsZ0JBQUQsQ0FBdEI7O0FBQ0EsTUFBTU0sV0FBVyxHQUFHTixPQUFPLENBQUMscUJBQUQsQ0FBM0I7O0FBR0FBLE9BQU8sR0FBR0EsT0FBTyxDQUFDLEtBQUQsQ0FBUCxDQUFlTyxNQUFmLENBQVY7QUFHQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLEVBQWpCOztBQUVlLE1BQU1DLFlBQU4sU0FBMkJSLFlBQTNCLENBQXdDO0FBQ25EUyxFQUFBQSxXQUFXLENBQUVDLFFBQUYsRUFBWUMsTUFBWixFQUFvQjtBQUMzQjtBQUNBLFNBQUtDLE9BQUwsR0FBZSxJQUFmO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLElBQWI7QUFDQSxTQUFLQyxPQUFMLEdBQWVILE1BQWY7QUFDQSxTQUFLSSxVQUFMLEdBQWtCLEVBQWxCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQk4sUUFBakI7QUFDQSxTQUFL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QyxDQUFDOEQsR0FBbkM7QUFDSDtBQUNKOztBQXhPa0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTktcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKlxyXG4gKiBCYXNlZCBvbjpcclxuICogQ29weXJpZ2h0IChjKSBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLiBMaWNlbnNlZCB1bmRlciBNSVQuXHJcbiAqL1xyXG5cclxuY29uc3QgRmliZXIgPSByZXF1aXJlKCdmaWJlcnMnKTtcclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xyXG5cclxuY29uc3QgT3h5Z2VuID0gcmVxdWlyZSgnLi4vLi4vY29yZS9PeHlnZW5Db3JlJykuZGVmYXVsdDtcclxuY29uc3Qgb3h1dGlsID0gcmVxdWlyZSgnLi4vLi4vbGliL3V0aWwnKTtcclxuY29uc3QgZXJyb3JIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi9lcnJvcnMvaGVscGVyJyk7XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZ2xvYmFsLWFzc2lnblxyXG5yZXF1aXJlID0gcmVxdWlyZSgnZXNtJykobW9kdWxlKTtcclxuXHJcbi8vIG1vY2t1cCBnbG9iYmFsLmJyb3dzZXIgb2JqZWN0IGZvciBpbnRlcm5hbCBXRElPIGZ1bmN0aW9ucyB0byB3b3JrIHByb3Blcmx5XHJcbmdsb2JhbC5icm93c2VyID0ge307XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPeHlnZW5Xb3JrZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3IgKHJlcG9ydGVyLCBsb2dnZXIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX294eWdlbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb3B0cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fbG9nZ2VyID0gbG9nZ2VyO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RIb29rcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyID0gcmVwb3J0ZXI7XHJcbiAgICAgICAgdGhpcy5fcnVuSWQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQocnVuSWQsIG9wdGlvbnMsIGNhcHMpIHtcclxuICAgICAgICB0aGlzLl9ydW5JZCA9IHJ1bklkO1xyXG4gICAgICAgIHRoaXMuX29wdHMgPSBvcHRpb25zO1xyXG4gICAgICAgIHRoaXMuX2N3ZCA9IHRoaXMuX29wdHMuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fb3h5Z2VuKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9veHlnZW4gPSBuZXcgT3h5Z2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9veHlnZW4ub24oJ2NvbW1hbmQ6YmVmb3JlJywgdGhpcy5faGFuZGxlQmVmb3JlQ29tbWFuZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX294eWdlbi5vbignY29tbWFuZDphZnRlcicsIHRoaXMuX2hhbmRsZUFmdGVyQ29tbWFuZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX294eWdlbi5vbignbG9nJywgdGhpcy5faGFuZGxlTG9nRW50cnkuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9veHlnZW4uaW5pdChvcHRpb25zLCBjYXBzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RIb29rcyA9IG94dXRpbC5sb2FkVGVzdEhvb2tzKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgLy9tYWtlTW9kdWxlc0dsb2JhbChvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnT3h5Z2VuIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoYE94eWdlbiBpbml0aWFsaXphdGlvbiBmYWlsZWQ6ICR7ZS50b1N0cmluZygpfWApO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBydW4oeyBzY3JpcHRQYXRoLCBjb250ZXh0LCBwb0ZpbGUgPSBudWxsIH0pIHtcclxuICAgICAgICAvLyBhc3NpZ24gdXAgdG8gZGF0ZSBjb250ZXh0IHRvIE94eWdlbiBDb3JlIHRvIHJlZmxlY3QgbmV3IHBhcmFtZXRlcnMgYW5kIG90aGVyIGNvbnRleHQgZGF0YVxyXG4gICAgICAgIGlmICghdGhpcy5fb3h5Z2VuKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yICgnT3h5Z2VuIGlzIG5vdCBpbml0aWFsaXplZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9veHlnZW4uY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5fb3h5Z2VuLmxvYWRQYWdlT2JqZWN0RmlsZShwb0ZpbGUpO1xyXG4gICAgICAgIHRoaXMuX3N0ZXBzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuX2N3ZCAmJiAhcGF0aC5pc0Fic29sdXRlKHNjcmlwdFBhdGgpKSB7XHJcbiAgICAgICAgICAgIHNjcmlwdFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5fY3dkLCBzY3JpcHRQYXRoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICBjb25zdCBjd2QgPSB0aGlzLl9jd2Q7XHJcbiAgICAgICAgLy8gbG9hZCBhbmQgcnVuIHRoZSB0ZXN0IHNjcmlwdFxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4ub25CZWZvcmVDYXNlICYmIGF3YWl0IHRoaXMuX294eWdlbi5vbkJlZm9yZUNhc2UoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3J1bkZuSW5GaWJlckNvbnRleHQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdG8gY2xlYXIgcmVxdWlyZSBjYWNoZSBzbyB0aGUgc2NyaXB0IHdpbGwgYmUgZXhlY3V0ZWQgb24gZWFjaCBpdGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlLmNhY2hlW3JlcXVpcmUucmVzb2x2ZShzY3JpcHRQYXRoKV0gJiYgZGVsZXRlIHJlcXVpcmUuY2FjaGVbcmVxdWlyZS5yZXNvbHZlKHNjcmlwdFBhdGgpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdXNlciB1c2VzIHJlcXVpcmUoJy4vc29tZXNjcmlwdC5qcycpIGluIG11bHRpcGxlIHRlc3Qgc2NyaXB0cyAoY2FzZXMpLCBhbmQgc29tZXNjcmlwdC5qcyBjb250YWlucyB3ZWIvbW9iLmluaXRcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGVuLCB3aGVuIHRob3NlIHNjcmlwdHMgYXJlIGV4ZWN1dGVkIGluIGEgc3VpdGUsIG9ubHkgZmlyc3QgY2FzZSB3aWxsIHBhc3MsIHRoZSByZXN0IHdpbGwgZmFpbCB3aXRoIE1PRFVMRV9OT1RfSU5JVElBTElaRUQgZXJyb3IuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBiZWNhdXNlICdyZXF1aXJlJyBpcyBjYWNoZWQsIGFuZCB3aGVuIHRoZSBmaXJzdCBjYXNlIGlzIGZpbmlzaGVkLCB0aGUgbW9kdWxlIGlzIG1hcmtlZCBhcyBpc0luaXRpYWxpemVkID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbm90IHJlLWluaXRpYWxpemVkIGJhY2sgb24gbmV4dCBjYXNlLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRodXMgd2UgY2xlYW4gdXNlciBsZXZlbCBzY3JpcHRzIGZyb20gJ3JlcXVpcmUnIGNhY2hlLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBwcm9iYWJseSBmaXhlZCBpbiBhIGRpZmZlcmVudCB3YXkuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kdWxlID0gcmVxdWlyZSgnbW9kdWxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXF1aXJlID0gTW9kdWxlLnByb3RvdHlwZS5yZXF1aXJlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBNb2R1bGUucHJvdG90eXBlLnJlcXVpcmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NyaXB0ID0gYXJndW1lbnRzWycwJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkYXRlIGNhY2hlIG9ubHkgZm9yIHVzZXIgbGV2ZWwgc2NyaXB0cyAodGhvc2Ugc3RhcnRpbmcgd2l0aCAnLi8nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdCAmJiBzY3JpcHQuc3RhcnRzV2l0aCgnLicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmVkUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShwYXRoLnJlc29sdmUoY3dkLCBzY3JpcHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZS5jYWNoZVtyZXNvbHZlZFBhdGhdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW3Jlc29sdmVkUGF0aF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFJlcXVpcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoc2NyaXB0UGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGVycm9yID0gZS5jb2RlICYmIGUuY29kZSA9PT0gJ01PRFVMRV9OT1RfRk9VTkQnID8gbmV3IFNjcmlwdE5vdEZvdW5kRXJyb3Ioc2NyaXB0UGF0aCkgOiBlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiBlLnR5cGUgJiYgZS50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSW4gc29tZSBjYXNlcyBzdGVwIHJlc3VsdCBnZW5lcmF0aW9uIHRha2VzIHNvbWUgdGltZSB0byBtYWtlIHNjcmVlbnNob3RcclxuICAgICAgICBhd2FpdCB0aGlzLl9veHlnZW4uX3dhaXRTdGVwUmVzdWx0KCk7XHJcblxyXG4gICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICBlcnJvciA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1vZHVsZUNhcHMgPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4uZ2V0TW9kdWxlc0NhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgICBtb2R1bGVDYXBzID0gdGhpcy5fb3h5Z2VuLmdldE1vZHVsZXNDYXBhYmlsaXRpZXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4ub25BZnRlckNhc2UgJiYgYXdhaXQgdGhpcy5fb3h5Z2VuLm9uQWZ0ZXJDYXNlKGVycm9yKTtcclxuXHJcbiAgICAgICAgLy8gY2xvbmUgdGhlIHJlc3VsdHMsIG90aGVyd2lzZSByZXN1bHRTdG9yZSB3aWxsIGJlIGVtcHR5IGFmdGVyIHRoZSBmb2xsb3dpbmcgdGhpcy5fb3h5Z2VuLnJlc2V0UmVzdWx0cygpIGNhbGxcclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdFN0b3JlID0ge307XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9veHlnZW4gJiYgdGhpcy5fb3h5Z2VuLnJlc3VsdHMpIHtcclxuICAgICAgICAgICAgcmVzdWx0U3RvcmUgPSB7IC4uLnRoaXMuX294eWdlbi5yZXN1bHRzIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fb3h5Z2VuICYmIHRoaXMuX294eWdlbi5yZXNldFJlc3VsdHMpIHtcclxuICAgICAgICAgICAgLy8gcmVzZXQgc3RlcHMgYW5kIG90aGVyIHJlc3VsdCBkYXRhXHJcbiAgICAgICAgICAgIHRoaXMuX294eWdlbi5yZXNldFJlc3VsdHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc3RlcHMgPSBudWxsO1xyXG5cclxuICAgICAgICBsZXQgb3hDb250ZXh0ID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4uY29udGV4dCkge1xyXG4gICAgICAgICAgICBveENvbnRleHQgPSB0aGlzLl9veHlnZW4uY29udGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3hDb250ZXh0LnZhcnMgPSBnbG9iYWwudmFycztcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgZXJyb3IsIG1vZHVsZUNhcHMsIHJlc3VsdFN0b3JlLCBjb250ZXh0OiBveENvbnRleHQgfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICBpZiAodGhpcy5fb3h5Z2VuKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9veHlnZW4uZGlzcG9zZShzdGF0dXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkaXNwb3NlIE94eWdlbicsIG51bGwsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RlcHMgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2VNb2R1bGVzKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICBpZiAodGhpcy5fb3h5Z2VuKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9veHlnZW4uZGlzcG9zZU1vZHVsZXMoc3RhdHVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGlzcG9zZSBPeHlnZW4gbW9kdWxlcycsIG51bGwsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3h5Z2VuLnJlc2V0UmVzdWx0cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNhbGxUZXN0SG9vayhob29rTmFtZSwgaG9va0FyZ3MpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3Rlc3RIb29rcyB8fCAhdGhpcy5fdGVzdEhvb2tzW2hvb2tOYW1lXSB8fCB0eXBlb2YgdGhpcy5fdGVzdEhvb2tzW2hvb2tOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhvb2sgZG9lcyBub3QgZXhpc3Q6ICR7aG9va05hbWV9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IG94dXRpbC5leGVjdXRlVGVzdEhvb2sodGhpcy5fdGVzdEhvb2tzLCBob29rTmFtZSwgaG9va0FyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9ydW5GbkluRmliZXJDb250ZXh0IChmbikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBGaWJlcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbi5hcHBseSh0aGlzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkucnVuKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlcGxTdGFydCgpIHtcclxuICAgICAgICBsZXQgY29tbWFuZFJlc29sdmUgPSAoKSA9PiB7IH07XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9veHlnZW4gJiYgdGhpcy5fb3h5Z2VuLm1vZHVsZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9veHlnZW4ubW9kdWxlcyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGVidWc7XHJcbiAgICAgICAgICAgICAgICBrZXlzLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRyaXZlciA9IHRoaXMuX294eWdlbi5tb2R1bGVzW2l0ZW1dWydnZXREcml2ZXInXSAmJiB0aGlzLl9veHlnZW4ubW9kdWxlc1tpdGVtXVsnZ2V0RHJpdmVyJ10oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZHJpdmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnID0gdGhpcy5fb3h5Z2VuLm1vZHVsZXNbaXRlbV1bJ2RlYnVnJ107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRlYnVnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGVidWcoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kUmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kUmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZFJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiAoY29tbWFuZFJlc29sdmUgPSByZXNvbHZlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUJlZm9yZUNvbW1hbmQoZSkge1xyXG4gICAgICAgIGlmICghZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdCgnY29tbWFuZDpiZWZvcmUnLCBlKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQWZ0ZXJDb21tYW5kKGUpIHtcclxuICAgICAgICBpZiAoIWUgfHwgIWUucmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3N0ZXBzICYmIHRoaXMuX3N0ZXBzLnB1c2goZS5yZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY29tbWFuZDphZnRlcicsIGUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVMb2dFbnRyeShlKSB7XHJcbiAgICAgICAgaWYgKCFlIHx8ICFlLmxldmVsIHx8ICFlLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZSAmJiBlLmxldmVsICYmIGUubGV2ZWwgPT09ICdlcnJvcicpIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyW2UubGV2ZWxdKGUubWVzc2FnZSwgZS5zcmMsIGUuZXJyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2dnZXJbZS5sZXZlbF0oZS5tZXNzYWdlLCBlLnNyYyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
266
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW5uZXJzL294eWdlbi9PeHlnZW5Xb3JrZXIuanMiXSwibmFtZXMiOlsiRmliZXIiLCJyZXF1aXJlIiwicGF0aCIsIkV2ZW50RW1pdHRlciIsIk94eWdlbiIsImRlZmF1bHQiLCJveHV0aWwiLCJlcnJvckhlbHBlciIsIm1vZHVsZSIsImdsb2JhbCIsImJyb3dzZXIiLCJPeHlnZW5Xb3JrZXIiLCJjb25zdHJ1Y3RvciIsInJlcG9ydGVyIiwibG9nZ2VyIiwiX294eWdlbiIsIl9vcHRzIiwiX2xvZ2dlciIsIl90ZXN0SG9va3MiLCJfcmVwb3J0ZXIiLCJfcnVuSWQiLCJpbml0IiwicnVuSWQiLCJvcHRpb25zIiwiY2FwcyIsIl9jd2QiLCJjd2QiLCJwcm9jZXNzIiwib24iLCJfaGFuZGxlQmVmb3JlQ29tbWFuZCIsImJpbmQiLCJfaGFuZGxlQWZ0ZXJDb21tYW5kIiwiX2hhbmRsZUxvZ0VudHJ5IiwibG9hZFRlc3RIb29rcyIsImRlYnVnIiwiZSIsInRvU3RyaW5nIiwicnVuIiwic2NyaXB0UGF0aCIsImNvbnRleHQiLCJwb0ZpbGUiLCJFcnJvciIsImxvYWRQYWdlT2JqZWN0RmlsZSIsIl9zdGVwcyIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwiZXJyb3IiLCJvbkJlZm9yZUNhc2UiLCJfcnVuRm5JbkZpYmVyQ29udGV4dCIsImNhY2hlIiwiTW9kdWxlIiwib3JpZ2luYWxSZXF1aXJlIiwicHJvdG90eXBlIiwic2NyaXB0IiwiYXJndW1lbnRzIiwic3RhcnRzV2l0aCIsInJlc29sdmVkUGF0aCIsImRpcm5hbWUiLCJleCIsImFwcGx5IiwidHlwZSIsImVycm9yQ29kZSIsIkFTU0VSVF9QQVNTRUQiLCJfd2FpdFN0ZXBSZXN1bHQiLCJnZXRGYWlsdXJlRnJvbUVycm9yIiwibW9kdWxlQ2FwcyIsImdldE1vZHVsZXNDYXBhYmlsaXRpZXMiLCJvbkFmdGVyQ2FzZSIsInJlc3VsdFN0b3JlIiwicmVzdWx0cyIsInJlc2V0UmVzdWx0cyIsIm94Q29udGV4dCIsInZhcnMiLCJkaXNwb3NlIiwic3RhdHVzIiwiZGlzcG9zZU1vZHVsZXMiLCJjYWxsVGVzdEhvb2siLCJob29rTmFtZSIsImhvb2tBcmdzIiwiZXhlY3V0ZVRlc3RIb29rIiwiZm4iLCJQcm9taXNlIiwicmVqZWN0IiwicmVzdWx0IiwiZXJyIiwicmVwbFN0YXJ0IiwiY29tbWFuZFJlc29sdmUiLCJzZXRUaW1lb3V0IiwibW9kdWxlcyIsImtleXMiLCJPYmplY3QiLCJtYXAiLCJpdGVtIiwiZHJpdmVyIiwiZW1pdCIsInB1c2giLCJsZXZlbCIsIm1lc3NhZ2UiLCJzcmMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFFBQUQsQ0FBckI7O0FBQ0EsTUFBTUMsSUFBSSxHQUFHRCxPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNO0FBQUVFLEVBQUFBO0FBQUYsSUFBbUJGLE9BQU8sQ0FBQyxRQUFELENBQWhDOztBQUVBLE1BQU1HLE1BQU0sR0FBR0gsT0FBTyxDQUFDLHVCQUFELENBQVAsQ0FBaUNJLE9BQWhEOztBQUNBLE1BQU1DLE1BQU0sR0FBR0wsT0FBTyxDQUFDLGdCQUFELENBQXRCOztBQUNBLE1BQU1NLFdBQVcsR0FBR04sT0FBTyxDQUFDLHFCQUFELENBQTNCOztBQUdBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQyxLQUFELENBQVAsQ0FBZU8sTUFBZixDQUFWO0FBR0FDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixFQUFqQjs7QUFFZSxNQUFNQyxZQUFOLFNBQTJCUixZQUEzQixDQUF3QztBQUNuRFMsRUFBQUEsV0FBVyxDQUFFQyxRQUFGLEVBQVlDLE1BQVosRUFBb0I7QUFDM0I7QUFDQSxTQUFLQyxPQUFMLEdBQWUsSUFBZjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxJQUFiO0FBQ0EsU0FBS0MsT0FBTCxHQUFlSCxNQUFmO0FBQ0EsU0FBS0ksVUFBTCxHQUFrQixFQUFsQjtBQUNBLFNBQUtDLFNBQUwsR0FBaUJOLFFBQWpC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OUQsQ0FBQyxDQUFDK0QsR0FBbkM7QUFDSDtBQUNKOztBQXZPa0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTktcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKlxyXG4gKiBCYXNlZCBvbjpcclxuICogQ29weXJpZ2h0IChjKSBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzLiBMaWNlbnNlZCB1bmRlciBNSVQuXHJcbiAqL1xyXG5cclxuY29uc3QgRmliZXIgPSByZXF1aXJlKCdmaWJlcnMnKTtcclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xyXG5cclxuY29uc3QgT3h5Z2VuID0gcmVxdWlyZSgnLi4vLi4vY29yZS9PeHlnZW5Db3JlJykuZGVmYXVsdDtcclxuY29uc3Qgb3h1dGlsID0gcmVxdWlyZSgnLi4vLi4vbGliL3V0aWwnKTtcclxuY29uc3QgZXJyb3JIZWxwZXIgPSByZXF1aXJlKCcuLi8uLi9lcnJvcnMvaGVscGVyJyk7XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZ2xvYmFsLWFzc2lnblxyXG5yZXF1aXJlID0gcmVxdWlyZSgnZXNtJykobW9kdWxlKTtcclxuXHJcbi8vIG1vY2t1cCBnbG9iYmFsLmJyb3dzZXIgb2JqZWN0IGZvciBpbnRlcm5hbCBXRElPIGZ1bmN0aW9ucyB0byB3b3JrIHByb3Blcmx5XHJcbmdsb2JhbC5icm93c2VyID0ge307XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPeHlnZW5Xb3JrZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3IgKHJlcG9ydGVyLCBsb2dnZXIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX294eWdlbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb3B0cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fbG9nZ2VyID0gbG9nZ2VyO1xyXG4gICAgICAgIHRoaXMuX3Rlc3RIb29rcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVyID0gcmVwb3J0ZXI7XHJcbiAgICAgICAgdGhpcy5fcnVuSWQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQocnVuSWQsIG9wdGlvbnMsIGNhcHMpIHtcclxuICAgICAgICB0aGlzLl9ydW5JZCA9IHJ1bklkO1xyXG4gICAgICAgIHRoaXMuX29wdHMgPSBvcHRpb25zO1xyXG4gICAgICAgIHRoaXMuX2N3ZCA9IHRoaXMuX29wdHMuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fb3h5Z2VuKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9veHlnZW4gPSBuZXcgT3h5Z2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9veHlnZW4ub24oJ2NvbW1hbmQ6YmVmb3JlJywgdGhpcy5faGFuZGxlQmVmb3JlQ29tbWFuZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX294eWdlbi5vbignY29tbWFuZDphZnRlcicsIHRoaXMuX2hhbmRsZUFmdGVyQ29tbWFuZC5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX294eWdlbi5vbignbG9nJywgdGhpcy5faGFuZGxlTG9nRW50cnkuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9veHlnZW4uaW5pdChvcHRpb25zLCBjYXBzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Rlc3RIb29rcyA9IG94dXRpbC5sb2FkVGVzdEhvb2tzKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgLy9tYWtlTW9kdWxlc0dsb2JhbChvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnT3h5Z2VuIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoYE94eWdlbiBpbml0aWFsaXphdGlvbiBmYWlsZWQ6ICR7ZS50b1N0cmluZygpfWApO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBydW4oeyBzY3JpcHRQYXRoLCBjb250ZXh0LCBwb0ZpbGUgPSBudWxsIH0pIHtcclxuICAgICAgICAvLyBhc3NpZ24gdXAgdG8gZGF0ZSBjb250ZXh0IHRvIE94eWdlbiBDb3JlIHRvIHJlZmxlY3QgbmV3IHBhcmFtZXRlcnMgYW5kIG90aGVyIGNvbnRleHQgZGF0YVxyXG4gICAgICAgIGlmICghdGhpcy5fb3h5Z2VuKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yICgnT3h5Z2VuIGlzIG5vdCBpbml0aWFsaXplZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9veHlnZW4uY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5fb3h5Z2VuLmxvYWRQYWdlT2JqZWN0RmlsZShwb0ZpbGUpO1xyXG4gICAgICAgIHRoaXMuX3N0ZXBzID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuX2N3ZCAmJiAhcGF0aC5pc0Fic29sdXRlKHNjcmlwdFBhdGgpKSB7XHJcbiAgICAgICAgICAgIHNjcmlwdFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5fY3dkLCBzY3JpcHRQYXRoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAvLyBsb2FkIGFuZCBydW4gdGhlIHRlc3Qgc2NyaXB0XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5fb3h5Z2VuICYmIHRoaXMuX294eWdlbi5vbkJlZm9yZUNhc2UgJiYgYXdhaXQgdGhpcy5fb3h5Z2VuLm9uQmVmb3JlQ2FzZShjb250ZXh0KTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcnVuRm5JbkZpYmVyQ29udGV4dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0byBjbGVhciByZXF1aXJlIGNhY2hlIHNvIHRoZSBzY3JpcHQgd2lsbCBiZSBleGVjdXRlZCBvbiBlYWNoIGl0ZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmUuY2FjaGVbcmVxdWlyZS5yZXNvbHZlKHNjcmlwdFBhdGgpXSAmJiBkZWxldGUgcmVxdWlyZS5jYWNoZVtyZXF1aXJlLnJlc29sdmUoc2NyaXB0UGF0aCldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB1c2VyIHVzZXMgcmVxdWlyZSgnLi9zb21lc2NyaXB0LmpzJykgaW4gbXVsdGlwbGUgdGVzdCBzY3JpcHRzIChjYXNlcyksIGFuZCBzb21lc2NyaXB0LmpzIGNvbnRhaW5zIHdlYi9tb2IuaW5pdFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZW4sIHdoZW4gdGhvc2Ugc2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW4gYSBzdWl0ZSwgb25seSBmaXJzdCBjYXNlIHdpbGwgcGFzcywgdGhlIHJlc3Qgd2lsbCBmYWlsIHdpdGggTU9EVUxFX05PVF9JTklUSUFMSVpFRCBlcnJvci5cclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIGJlY2F1c2UgJ3JlcXVpcmUnIGlzIGNhY2hlZCwgYW5kIHdoZW4gdGhlIGZpcnN0IGNhc2UgaXMgZmluaXNoZWQsIHRoZSBtb2R1bGUgaXMgbWFya2VkIGFzIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBub3QgcmUtaW5pdGlhbGl6ZWQgYmFjayBvbiBuZXh0IGNhc2UuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGh1cyB3ZSBjbGVhbiB1c2VyIGxldmVsIHNjcmlwdHMgZnJvbSAncmVxdWlyZScgY2FjaGUuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIHByb2JhYmx5IGZpeGVkIGluIGEgZGlmZmVyZW50IHdheS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2R1bGUgPSByZXF1aXJlKCdtb2R1bGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSBNb2R1bGUucHJvdG90eXBlLnJlcXVpcmU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIE1vZHVsZS5wcm90b3R5cGUucmVxdWlyZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHQgPSBhcmd1bWVudHNbJzAnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWRhdGUgY2FjaGUgb25seSBmb3IgdXNlciBsZXZlbCBzY3JpcHRzICh0aG9zZSBzdGFydGluZyB3aXRoICcuLycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0ICYmIHNjcmlwdC5zdGFydHNXaXRoKCcuJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x2ZWRQYXRoID0gcmVxdWlyZS5yZXNvbHZlKHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc2NyaXB0UGF0aCksIHNjcmlwdCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlLmNhY2hlW3Jlc29sdmVkUGF0aF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVpcmUuY2FjaGVbcmVzb2x2ZWRQYXRoXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVxdWlyZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZShzY3JpcHRQYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IgPSBlLmNvZGUgJiYgZS5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcgPyBuZXcgU2NyaXB0Tm90Rm91bmRFcnJvcihzY3JpcHRQYXRoKSA6IGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUudHlwZSAmJiBlLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfUEFTU0VEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbiBzb21lIGNhc2VzIHN0ZXAgcmVzdWx0IGdlbmVyYXRpb24gdGFrZXMgc29tZSB0aW1lIHRvIG1ha2Ugc2NyZWVuc2hvdFxyXG4gICAgICAgIGF3YWl0IHRoaXMuX294eWdlbi5fd2FpdFN0ZXBSZXN1bHQoKTtcclxuXHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGVycm9yID0gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbW9kdWxlQ2FwcyA9IHt9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fb3h5Z2VuICYmIHRoaXMuX294eWdlbi5nZXRNb2R1bGVzQ2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICAgIG1vZHVsZUNhcHMgPSB0aGlzLl9veHlnZW4uZ2V0TW9kdWxlc0NhcGFiaWxpdGllcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fb3h5Z2VuICYmIHRoaXMuX294eWdlbi5vbkFmdGVyQ2FzZSAmJiBhd2FpdCB0aGlzLl9veHlnZW4ub25BZnRlckNhc2UoZXJyb3IpO1xyXG5cclxuICAgICAgICAvLyBjbG9uZSB0aGUgcmVzdWx0cywgb3RoZXJ3aXNlIHJlc3VsdFN0b3JlIHdpbGwgYmUgZW1wdHkgYWZ0ZXIgdGhlIGZvbGxvd2luZyB0aGlzLl9veHlnZW4ucmVzZXRSZXN1bHRzKCkgY2FsbFxyXG5cclxuICAgICAgICBsZXQgcmVzdWx0U3RvcmUgPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4ucmVzdWx0cykge1xyXG4gICAgICAgICAgICByZXN1bHRTdG9yZSA9IHsgLi4udGhpcy5fb3h5Z2VuLnJlc3VsdHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9veHlnZW4gJiYgdGhpcy5fb3h5Z2VuLnJlc2V0UmVzdWx0cykge1xyXG4gICAgICAgICAgICAvLyByZXNldCBzdGVwcyBhbmQgb3RoZXIgcmVzdWx0IGRhdGFcclxuICAgICAgICAgICAgdGhpcy5fb3h5Z2VuLnJlc2V0UmVzdWx0cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zdGVwcyA9IG51bGw7XHJcblxyXG4gICAgICAgIGxldCBveENvbnRleHQgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5fb3h5Z2VuICYmIHRoaXMuX294eWdlbi5jb250ZXh0KSB7XHJcbiAgICAgICAgICAgIG94Q29udGV4dCA9IHRoaXMuX294eWdlbi5jb250ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBveENvbnRleHQudmFycyA9IGdsb2JhbC52YXJzO1xyXG5cclxuICAgICAgICByZXR1cm4geyBlcnJvciwgbW9kdWxlQ2FwcywgcmVzdWx0U3RvcmUsIGNvbnRleHQ6IG94Q29udGV4dCB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9veHlnZW4pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX294eWdlbi5kaXNwb3NlKHN0YXR1cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRpc3Bvc2UgT3h5Z2VuJywgbnVsbCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGVwcyA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZU1vZHVsZXMoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9veHlnZW4pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX294eWdlbi5kaXNwb3NlTW9kdWxlcyhzdGF0dXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkaXNwb3NlIE94eWdlbiBtb2R1bGVzJywgbnVsbCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9veHlnZW4ucmVzZXRSZXN1bHRzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2FsbFRlc3RIb29rKGhvb2tOYW1lLCBob29rQXJncykge1xyXG4gICAgICAgIGlmICghdGhpcy5fdGVzdEhvb2tzIHx8ICF0aGlzLl90ZXN0SG9va3NbaG9va05hbWVdIHx8IHR5cGVvZiB0aGlzLl90ZXN0SG9va3NbaG9va05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSG9vayBkb2VzIG5vdCBleGlzdDogJHtob29rTmFtZX1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgb3h1dGlsLmV4ZWN1dGVUZXN0SG9vayh0aGlzLl90ZXN0SG9va3MsIGhvb2tOYW1lLCBob29rQXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3J1bkZuSW5GaWJlckNvbnRleHQgKGZuKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IEZpYmVyKCgpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuLmFwcGx5KHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5ydW4oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVwbFN0YXJ0KCkge1xyXG4gICAgICAgIGxldCBjb21tYW5kUmVzb2x2ZSA9ICgpID0+IHsgfTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX294eWdlbiAmJiB0aGlzLl9veHlnZW4ubW9kdWxlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX294eWdlbi5tb2R1bGVzKTtcclxuICAgICAgICAgICAgICAgIGxldCBkZWJ1ZztcclxuICAgICAgICAgICAgICAgIGtleXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJpdmVyID0gdGhpcy5fb3h5Z2VuLm1vZHVsZXNbaXRlbV1bJ2dldERyaXZlciddICYmIHRoaXMuX294eWdlbi5tb2R1bGVzW2l0ZW1dWydnZXREcml2ZXInXSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkcml2ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcgPSB0aGlzLl9veHlnZW4ubW9kdWxlc1tpdGVtXVsnZGVidWcnXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBkZWJ1ZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRSZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRSZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb21tYW5kUmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTApO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IChjb21tYW5kUmVzb2x2ZSA9IHJlc29sdmUpKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQmVmb3JlQ29tbWFuZChlKSB7XHJcbiAgICAgICAgaWYgKCFlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOmJlZm9yZScsIGUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVBZnRlckNvbW1hbmQoZSkge1xyXG4gICAgICAgIGlmICghZSB8fCAhZS5yZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc3RlcHMgJiYgdGhpcy5fc3RlcHMucHVzaChlLnJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOmFmdGVyJywgZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUxvZ0VudHJ5KGUpIHtcclxuICAgICAgICBpZiAoIWUgfHwgIWUubGV2ZWwgfHwgIWUubWVzc2FnZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlICYmIGUubGV2ZWwgJiYgZS5sZXZlbCA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2dnZXJbZS5sZXZlbF0oZS5tZXNzYWdlLCBlLnNyYywgZS5lcnIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlcltlLmxldmVsXShlLm1lc3NhZ2UsIGUuc3JjKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|