oxygen-cli 1.21.0-beta.11 → 1.21.0-beta.12
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.
|
@@ -32,9 +32,9 @@ class NetworkSubModule extends _OxygenSubModule.OxygenSubModule {
|
|
|
32
32
|
this._devTools = devTools;
|
|
33
33
|
this._driver = this._parent.getDriver();
|
|
34
34
|
|
|
35
|
-
this.
|
|
35
|
+
this._driver.on('Network.responseReceived', this._onNetworkResponseReceived.bind(this));
|
|
36
36
|
|
|
37
|
-
this.
|
|
37
|
+
this._driver.on('Network.requestWillBeSent', this._onNetworkRequestWillBeSent.bind(this));
|
|
38
38
|
|
|
39
39
|
super.init();
|
|
40
40
|
return true;
|
|
@@ -42,11 +42,11 @@ class NetworkSubModule extends _OxygenSubModule.OxygenSubModule {
|
|
|
42
42
|
|
|
43
43
|
async dispose() {
|
|
44
44
|
try {
|
|
45
|
-
if (this.
|
|
46
|
-
await this.
|
|
47
|
-
await this.
|
|
48
|
-
await this.
|
|
49
|
-
await this.
|
|
45
|
+
if (this._driver) {
|
|
46
|
+
await this._driver.removeListener('Network.responseReceived', () => {});
|
|
47
|
+
await this._driver.removeListener('Network.requestWillBeSent', () => {});
|
|
48
|
+
await this._driver.emit('Network.disable');
|
|
49
|
+
await this._driver.emit('Network.close');
|
|
50
50
|
}
|
|
51
51
|
} catch (e) {}
|
|
52
52
|
|
|
@@ -345,4 +345,4 @@ class NetworkSubModule extends _OxygenSubModule.OxygenSubModule {
|
|
|
345
345
|
}
|
|
346
346
|
|
|
347
347
|
exports.default = NetworkSubModule;
|
|
348
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9veF9zZXJ2aWNlcy9zZXJ2aWNlLWRldnRvb2xzL3N1Ym1vZHVsZS1uZXR3b3JrLmpzIl0sIm5hbWVzIjpbIk5ldHdvcmtTdWJNb2R1bGUiLCJPeHlnZW5TdWJNb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJwYXJlbnQiLCJfZGV2VG9vbHMiLCJfbmV0d29ya1JlcXVlc3RzIiwiX2NvbGxlY3REYXRhIiwiaW5pdCIsImRldlRvb2xzIiwiX3BhcmVudCIsImdldERyaXZlciIsIl9kcml2ZXIiLCJzZXNzaW9uIiwib24iLCJfb25OZXR3b3JrUmVzcG9uc2VSZWNlaXZlZCIsImJpbmQiLCJfb25OZXR3b3JrUmVxdWVzdFdpbGxCZVNlbnQiLCJkaXNwb3NlIiwicmVtb3ZlTGlzdGVuZXIiLCJlbWl0IiwiZSIsInN0YXJ0Iiwic3RvcCIsImdldFJlcXVlc3RzIiwid2FpdEZvclVybCIsInBhdHRlcm4iLCJ0aW1lb3V0IiwiX2lzSW5pdGlhbGl6ZWQiLCJPeEVycm9yIiwiZXJySGVscGVyIiwiZXJyb3JDb2RlIiwiTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiIsImhlbHBlcnMiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsIkRhdGUiLCJub3ciLCJyZXEiLCJ0ZXN0IiwidXJsIiwicGF1c2UiLCJUSU1FT1VUIiwid2FpdEZvck5vdFVybCIsIndhaXRGb3IiLCJtYXRjaGVyIiwiYXNzZXJ0VXJsIiwiQVNTRVJUX0VSUk9SIiwiYXNzZXJ0U3RhdHVzQ29kZSIsInN0YXR1c0NvZGUiLCJmYWlsdXJlTWVzc2FnZSIsIm1hdGNoZWRSZXEiLCJzdGF0dXMiLCJtZXNzYWdlIiwiYXNzZXJ0UmVzcG9uc2VDb250ZW50IiwiY29udGVudCIsInJlc3AiLCJjZHAiLCJyZXF1ZXN0SWQiLCJib2R5IiwiYmFzZTY0RW5jb2RlZCIsImluZGV4T2YiLCJwYXJhbXMiLCJyZXNwb25zZUJvZHkiLCJjb25zb2xlIiwibG9nIiwicmVxdWVzdFBvc3REYXRhIiwicmVzcG9uc2UiLCJtaW1lVHlwZSIsIkpTT04iLCJwYXJzZSIsInBvc3REYXRhIiwicHVzaCIsInJlZGlyZWN0UmVzcG9uc2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBOztBQUVBOztBQUNBOzs7O0FBRWUsTUFBTUEsZ0JBQU4sU0FBK0JDLGdDQUEvQixDQUErQztBQUMxREMsRUFBQUEsV0FBVyxDQUFDQyxJQUFELEVBQU9DLE1BQVAsRUFBZTtBQUN0QixVQUFNRCxJQUFOLEVBQVlDLE1BQVo7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLElBQWpCO0FBQ0EsU0FBS0MsZ0JBQUwsR0FBd0IsRUFBeEI7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLEtBQXBCO0FBQ0g7O0FBRURDLEVBQUFBLElBQUksQ0FBQ0MsUUFBRCxFQUFXO0FBQ1gsUUFBSSxDQUFDQSxRQUFELElBQWEsQ0FBQyxLQUFLQyxPQUFuQixJQUE4QixDQUFDLEtBQUtBLE9BQUwsQ0FBYUMsU0FBNUMsSUFBeUQsT0FBTyxLQUFLRCxPQUFMLENBQWFDLFNBQXBCLEtBQWtDLFVBQTNGLElBQXlHLENBQUMsS0FBS0QsT0FBTCxDQUFhQyxTQUFiLEVBQTlHLEVBQXdJO0FBQ3BJLFlBQU1ILElBQU47QUFDQSxhQUFPLEtBQVA7QUFDSDs7QUFDRCxTQUFLSCxTQUFMLEdBQWlCSSxRQUFqQjtBQUNBLFNBQUtHLE9BQUwsR0FBZSxLQUFLRixPQUFMLENBQWFDLFNBQWIsRUFBZjs7QUFDQSxTQUFLTixTQUFMLENBQWVRLE9BQWYsQ0FBdUJDLEVBQXZCLENBQTBCLDBCQUExQixFQUFzRCxLQUFLQywwQkFBTCxDQUFnQ0MsSUFBaEMsQ0FBcUMsSUFBckMsQ0FBdEQ7O0FBQ0EsU0FBS1gsU0FBTCxDQUFlUSxPQUFmLENBQXVCQyxFQUF2QixDQUEwQiwyQkFBMUIsRUFBdUQsS0FBS0csMkJBQUwsQ0FBaUNELElBQWpDLENBQXNDLElBQXRDLENBQXZEOztBQUNBLFVBQU1SLElBQU47QUFDQSxXQUFPLElBQVA7QUFDSDs7QUFF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QVIsQ0FBWSx5REFBWixFQUF1RTVDLENBQXZFO0FBQ0g7O0FBRUQsVUFBSTtBQUNBLFlBQUk2QyxlQUFlLElBQUlBLGVBQWUsQ0FBQ0ssUUFBdkMsRUFBaUQ7QUFDN0NMLFVBQUFBLGVBQWUsQ0FBQ0ssUUFBaEIsR0FBMkJGLElBQUksQ0FBQ0MsS0FBTCxDQUFXSixlQUFlLENBQUNLLFFBQTNCLENBQTNCO0FBQ0g7QUFDSixPQUpELENBSUUsT0FBT2xELENBQVAsRUFBVTtBQUVSMkMsUUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksb0RBQVosRUFBa0U1QyxDQUFsRTtBQUNIOztBQUVELFdBQUtmLGdCQUFMLENBQXNCa0UsSUFBdEIsQ0FBMkI7QUFBRWQsUUFBQUEsU0FBUyxFQUFFSSxNQUFNLENBQUNKLFNBQXBCO0FBQStCLFdBQUdJLE1BQU0sQ0FBQ1csZ0JBQXpDO0FBQTJEUCxRQUFBQTtBQUEzRCxPQUEzQjtBQUNIO0FBQ0o7O0FBeld5RCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgZm9yIG1vbml0b3JpbmcgYW5kIGFuYWx5emluZyBDaHJvbWUgYnJvd3NlciBuZXR3b3JrIGFjdGl2aXRpZXMuXHJcbiovXHJcbmltcG9ydCB7IE94eWdlblN1Yk1vZHVsZSB9IGZyb20gJy4uLy4uL2NvcmUvT3h5Z2VuU3ViTW9kdWxlJztcclxuXHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uLy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrU3ViTW9kdWxlIGV4dGVuZHMgT3h5Z2VuU3ViTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHBhcmVudCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUsIHBhcmVudCk7XHJcbiAgICAgICAgdGhpcy5fZGV2VG9vbHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX25ldHdvcmtSZXF1ZXN0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChkZXZUb29scykge1xyXG4gICAgICAgIGlmICghZGV2VG9vbHMgfHwgIXRoaXMuX3BhcmVudCB8fCAhdGhpcy5fcGFyZW50LmdldERyaXZlciB8fCB0eXBlb2YgdGhpcy5fcGFyZW50LmdldERyaXZlciAhPT0gJ2Z1bmN0aW9uJyB8fCAhdGhpcy5fcGFyZW50LmdldERyaXZlcigpKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLmluaXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kZXZUb29scyA9IGRldlRvb2xzO1xyXG4gICAgICAgIHRoaXMuX2RyaXZlciA9IHRoaXMuX3BhcmVudC5nZXREcml2ZXIoKTtcclxuICAgICAgICB0aGlzLl9kZXZUb29scy5zZXNzaW9uLm9uKCdOZXR3b3JrLnJlc3BvbnNlUmVjZWl2ZWQnLCB0aGlzLl9vbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX2RldlRvb2xzLnNlc3Npb24ub24oJ05ldHdvcmsucmVxdWVzdFdpbGxCZVNlbnQnLCB0aGlzLl9vbk5ldHdvcmtSZXF1ZXN0V2lsbEJlU2VudC5iaW5kKHRoaXMpKTtcclxuICAgICAgICBzdXBlci5pbml0KCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZSgpIHtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RldlRvb2xzKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kZXZUb29scy5zZXNzaW9uLnJlbW92ZUxpc3RlbmVyKCdOZXR3b3JrLnJlc3BvbnNlUmVjZWl2ZWQnLCAoKSA9PiB7fSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kZXZUb29scy5zZXNzaW9uLnJlbW92ZUxpc3RlbmVyKCdOZXR3b3JrLnJlcXVlc3RXaWxsQmVTZW50JywgKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGV2VG9vbHMuc2Vzc2lvbi5lbWl0KCdOZXR3b3JrLmRpc2FibGUnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RldlRvb2xzLnNlc3Npb24uZW1pdCgnTmV0d29yay5jbG9zZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGV2VG9vbHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2RyaXZlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fbmV0d29ya1JlcXVlc3RzID0gW107XHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBCZWdpbiBjb2xsZWN0aW5nIG5ldHdvcmsgcmVxdWVzdHMuXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQW55IHByZXZpb3VzbHkgY29sbGVjdGVkIHJlcXVlc3RzIHdpbGwgYmUgZGlzY2FyZGVkLiBOZXR3b3JrIHJlcXVlc3QgY29sbGVjdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBvbiBDaHJvbWUgNjMgYW5kIGxhdGVyLlxyXG4gICAgICogQGZ1bmN0aW9uIHN0YXJ0XHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIHdlYi5pbml0KCk7XHJcbiAgICAgKiB3ZWIubmV0d29yay5zdGFydCgpO1xyXG4gICAgICogd2ViLm9wZW4oXCJodHRwczovL3d3dy55b3Vyd2Vic2l0ZS5jb21cIik7XHJcbiAgICAgKiAvLyBwcmludCB0aGUgY29sbGVjdGVkIHJlcXVlc3Qgc28gZmFyOlxyXG4gICAgICogbGV0IHJlcXVlc3RzID0gd2ViLm5ldHdvcmsuZ2V0UmVxdWVzdHMoKTtcclxuICAgICAqIGZvciAobGV0IHJlcSBvZiByZXF1ZXN0cykge1xyXG4gICAgICogICBsb2cuaW5mbyhyZXEpO1xyXG4gICAgICogfVxyXG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgdmVyYmF0aW0gVVJMIG1hdGNoOlxyXG4gICAgICogd2ViLm5ldHdvcmsud2FpdEZvclVybCgnaHR0cHM6Ly93d3cueW91cndlYnNpdGUuY29tL2Zvby9iYXInKTtcclxuICAgICAqIC8vIHdhaXQgZm9yIGEgcmVxdWVzdCB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBVUkwgbWF0Y2g6XHJcbiAgICAgKiB3ZWIubmV0d29yay53YWl0Rm9yVXJsKC9odHRwczpcXC9cXC8uKlxcL2Zvb1xcL2Jhci8pO1xyXG4gICAgICogLy8gd2FpdCBmb3IgYSByZXF1ZXN0IHVzaW5nIGEgY3VzdG9tIG1hdGNoZXI6XHJcbiAgICAgKiB3ZWIubmV0d29yay53YWl0Rm9yKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XHJcbiAgICAgKiAgIHJldHVybiByZXF1ZXN0LnN0YXR1c1RleHQgPT09ICdPSycgJiYgcmVxdWVzdC51cmwgPT09ICdodHRwczovL3d3dy55b3Vyd2Vic2l0ZS5jb20vZm9vL2Jhcic7XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5fY29sbGVjdERhdGEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX25ldHdvcmtSZXF1ZXN0cyA9IFtdO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTdG9wIGNvbGxlY3RpbmcgbmV0d29yayByZXF1ZXN0cy5cclxuICAgICAqIEBmdW5jdGlvbiBzdG9wXHJcbiAgICAgKi9cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5fY29sbGVjdERhdGEgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJuIGFsbCB0aGUgY29sbGVjdGVkIG5ldHdvcmsgcmVxdWVzdHMgc28gZmFyLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldFJlcXVlc3RzXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3RbXX0gQXJyYXkgY29udGFpbmluZyBuZXR3b3JrIHJlcXVlc3RzLlxyXG4gICAgICovXHJcbiAgICBnZXRSZXF1ZXN0cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbmV0d29ya1JlcXVlc3RzO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBXYWl0IGZvciBhIG5ldHdvcmsgcmVxdWVzdCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIFVSTC5cclxuICAgICAqIEBmdW5jdGlvbiB3YWl0Rm9yVXJsXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHBhdHRlcm4gLSBBbiBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICB3YWl0Rm9yVXJsKHBhdHRlcm4sIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2Agb3IgYHdlYmAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChwYXR0ZXJuLCAncGF0dGVybicpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCByZXEgb2YgdGhpcy5fbmV0d29ya1JlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0dGVybi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiBwYXR0ZXJuLnRlc3QocmVxLnVybCkgfHwgcGF0dGVybiA9PT0gcmVxLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyLnBhdXNlKDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVElNRU9VVCwgYE5vIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIFVSTCBcIiR7cGF0dGVybn1cIiB3YXMgZm91bmQuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBGYWlsIHRoZSB0ZXN0IGlmIHJlcXVlc3Qgd2l0aCBhIG1hdGNoaW5nIFVSTCB3YXMgcmVjZWl2ZWQgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSBmcmFtZS5cclxuICAgICAqIEBmdW5jdGlvbiB3YWl0Rm9yTm90VXJsXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHBhdHRlcm4gLSBBbiBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKi9cclxuICAgIHdhaXRGb3JOb3RVcmwocGF0dGVybiwgdGltZW91dCA9IDYwKjEwMDApIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2RyaXZlciB8fCAhdGhpcy5faXNJbml0aWFsaXplZCB8fCAhdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBvciBgd2ViYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29yay5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBuZXR3b3JrYCBjb21tYW5kcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KHBhdHRlcm4sICdwYXR0ZXJuJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLl9uZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXR0ZXJuLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIHBhdHRlcm4udGVzdChyZXEudXJsKSB8fCBwYXR0ZXJuID09PSByZXEudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCBgQSByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3BhdHRlcm59XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFdhaXQgZm9yIGEgbmV0d29yayByZXF1ZXN0LlxyXG4gICAgICogQGZ1bmN0aW9uIG5ldHdvcmtXYWl0Rm9yXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtYXRjaGVyIC0gTWF0Y2hpbmcgZnVuY3Rpb24uIFNob3VsZCByZXR1cm4gdHJ1ZSBvbiBtYXRjaCwgb3IgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgd2FpdEZvcihtYXRjaGVyLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZHJpdmVyIHx8ICF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2B3ZWIubmV0d29yay5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBuZXR3b3JrYCBjb21tYW5kcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KG1hdGNoZXIsICdtYXRjaGVyJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHJlcSBvZiB0aGlzLl9uZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVyKHJlcSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRJTUVPVVQsICdObyByZXF1ZXN0IGZvdW5kIHVzaW5nIHRoZSBwcm92aWRlZCBtYXRjaGVyLicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IGlmIG5ldHdvcmsgcmVxdWVzdCBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIFVSTC5cclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRVcmxcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gdXJsIC0gQSByZXF1ZXN0IFVSTCB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGFzc2VydFVybCh1cmwsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2Agb3IgYHdlYmAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHdlYi5uZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQodXJsLCAndXJsJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLl9uZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgdXJsLnRlc3QocmVxLnVybCkgfHwgdXJsID09PSByZXEudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBObyByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3VybH1cIiB3YXMgZm91bmQuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgd2hldGhlciBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlIG1hdGNoZXMgdGhlIHNwZWNpZmllZCB2YWx1ZS5cclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRTdGF0dXNDb2RlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHVybCAtIEEgcmVxdWVzdCBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gc3RhdHVzQ29kZSAtIEEgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGZhaWx1cmVNZXNzYWdlIC0gQW4gb3B0aW9uYWwgZmFpbHVyZSBtZXNzYWdlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgYXNzZXJ0U3RhdHVzQ29kZSh1cmwsIHN0YXR1c0NvZGUsIGZhaWx1cmVNZXNzYWdlID0gbnVsbCwgdGltZW91dCA9IDYwKjEwMDApIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2RyaXZlciB8fCAhdGhpcy5faXNJbml0aWFsaXplZCB8fCAhdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBvciBgd2ViYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgd2ViLm5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudCh1cmwsICd1cmwnKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChzdGF0dXNDb2RlLCAnc3RhdHVzQ29kZScpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBsZXQgbWF0Y2hlZFJlcSA9IG51bGw7XHJcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQgJiYgIW1hdGNoZWRSZXEpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcmVxIG9mIHRoaXMuX25ldHdvcmtSZXF1ZXN0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVybC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiB1cmwudGVzdChyZXEudXJsKSB8fCB1cmwgPT09IHJlcS51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkUmVxID0gcmVxO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICFtYXRjaGVkUmVxICYmIHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW1hdGNoZWRSZXEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBObyByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3VybH1cIiB3YXMgZm91bmQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdGF0dXNDb2RlICE9PSBtYXRjaGVkUmVxLnN0YXR1cykge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2UgfHwgYFRoZSBleHBlY3RlZCBzdGF0dXMgY29kZSBcIiR7c3RhdHVzQ29kZX1cIiBkb2VzIG5vdCBtYXRjaCBcIiR7bWF0Y2hlZFJlcS5zdGF0dXN9XCIuYDtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCB3aGV0aGVyIEhUVFAgcmVzcG9uc2UgY29udGVudCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgdmFsdWUgb3IgcGF0dGVybi5cclxuICAgICAqIEBmdW5jdGlvbiBhc3NlcnRSZXNwb25zZUNvbnRlbnRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gdXJsIC0gQSByZXF1ZXN0IFVSTCB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfFJlZ0V4cH0gY29udGVudCAtIEEgcmVzcG9uc2UgYm9keSBjb250ZW50IHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBmYWlsdXJlTWVzc2FnZSAtIEFuIG9wdGlvbmFsIGZhaWx1cmUgbWVzc2FnZS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFzc2VydFJlc3BvbnNlQ29udGVudCh1cmwsIGNvbnRlbnQsIGZhaWx1cmVNZXNzYWdlID0gbnVsbCwgdGltZW91dCA9IDYwKjEwMDApIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2RyaXZlciB8fCAhdGhpcy5faXNJbml0aWFsaXplZCB8fCAhdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBvciBgd2ViYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgd2ViLm5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudCh1cmwsICd1cmwnKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChjb250ZW50LCAnY29udGVudCcpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBsZXQgbWF0Y2hlZFJlcSA9IG51bGw7XHJcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQgJiYgIW1hdGNoZWRSZXEpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcmVxIG9mIHRoaXMuX25ldHdvcmtSZXF1ZXN0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVybC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiB1cmwudGVzdChyZXEudXJsKSB8fCB1cmwgPT09IHJlcS51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkUmVxID0gcmVxO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICFtYXRjaGVkUmVxICYmIHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW1hdGNoZWRSZXEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIGBObyByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3VybH1cIiB3YXMgZm91bmQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLl9kcml2ZXIuY2RwKCdOZXR3b3JrJywnZ2V0UmVzcG9uc2VCb2R5Jywge1xyXG4gICAgICAgICAgICByZXF1ZXN0SWQ6IG1hdGNoZWRSZXEucmVxdWVzdElkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHJlc3AgJiYgcmVzcC5ib2R5ICYmICFyZXNwLmJhc2U2NEVuY29kZWQpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnQuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgY29udGVudC50ZXN0KHJlc3AuYm9keSkgfHwgcmVzcC5ib2R5LmluZGV4T2YoY29udGVudCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZmFpbHVyZU1lc3NhZ2UgfHwgYFJlc3BvbnNlIFwiJHt1cmx9XCIgYm9keSBjb250ZW50IGRvZXMgbm90IG1hdGNoIFwiJHtjb250ZW50fS5gO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5BU1NFUlRfRVJST1IsIG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9vbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkKHBhcmFtcykge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VCb2R5O1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5ID0gYXdhaXQgdGhpcy5fZHJpdmVyLmNkcCgnTmV0d29yaycsJ2dldFJlc3BvbnNlQm9keScsIHtcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHBhcmFtcy5yZXF1ZXN0SWRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZ2V0UmVzcG9uc2VCb2R5IGVycm9yc1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29uTmV0d29ya1Jlc3BvbnNlUmVjZWl2ZWQgTmV0d29yay5nZXRSZXNwb25zZUJvZHkgZScsIGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVxdWVzdFBvc3REYXRhO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBvc3REYXRhID0gYXdhaXQgdGhpcy5fZHJpdmVyLmNkcCgnTmV0d29yaycsJ2dldFJlcXVlc3RQb3N0RGF0YScsIHtcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHBhcmFtcy5yZXF1ZXN0SWRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZ2V0UmVxdWVzdFBvc3REYXRhIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29uTmV0d29ya1Jlc3BvbnNlUmVjZWl2ZWQgTmV0d29yay5nZXRSZXF1ZXN0UG9zdERhdGEgZScsIGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMgJiZcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yZXNwb25zZSAmJlxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnJlc3BvbnNlLm1pbWVUeXBlID09PSAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZUJvZHkgJiYgcmVzcG9uc2VCb2R5LmJvZHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VCb2R5LmJvZHkgPSBKU09OLnBhcnNlKHJlc3BvbnNlQm9keS5ib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGpzb24gcGFyc2UgcmVzcG9uc2UgQm9keSBlcnJvcnNcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb25OZXR3b3JrUmVzcG9uc2VSZWNlaXZlZCByZXNwb25zZUJvZHkgcGFyc2UgZScsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdFBvc3REYXRhICYmIHJlcXVlc3RQb3N0RGF0YS5wb3N0RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0UG9zdERhdGEucG9zdERhdGEgPSBKU09OLnBhcnNlKHJlcXVlc3RQb3N0RGF0YS5wb3N0RGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBqc29uIHBhcnNlIHJlcXVlc3QgUG9zdCBEYXRhIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkIHJlcXVlc3RQb3N0RGF0YSBwYXJzZSBlJywgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX25ldHdvcmtSZXF1ZXN0cy5wdXNoKHsgcmVxdWVzdElkOiBwYXJhbXMucmVxdWVzdElkLCAuLi5wYXJhbXMucmVzcG9uc2UsIHJlc3BvbnNlQm9keSwgcmVxdWVzdFBvc3REYXRhIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfb25OZXR3b3JrUmVxdWVzdFdpbGxCZVNlbnQocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbGxlY3REYXRhICYmIHBhcmFtcy5yZWRpcmVjdFJlc3BvbnNlKSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVxdWVzdFBvc3REYXRhO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBvc3REYXRhID0gYXdhaXQgdGhpcy5fZHJpdmVyLmNkcCgnTmV0d29yaycsJ2dldFJlcXVlc3RQb3N0RGF0YScsIHtcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHBhcmFtcy5yZXF1ZXN0SWRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZ2V0UmVxdWVzdFBvc3REYXRhIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29uTmV0d29ya1JlcXVlc3RXaWxsQmVTZW50IE5ldHdvcmsuZ2V0UmVxdWVzdFBvc3REYXRhIGUnLCBlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0UG9zdERhdGEgJiYgcmVxdWVzdFBvc3REYXRhLnBvc3REYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBvc3REYXRhLnBvc3REYXRhID0gSlNPTi5wYXJzZShyZXF1ZXN0UG9zdERhdGEucG9zdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUganNvbiBwYXJzZSByZXF1ZXN0IFBvc3QgRGF0YSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbk5ldHdvcmtSZXF1ZXN0V2lsbEJlU2VudCByZXF1ZXN0UG9zdERhdGEgcGFyc2UgZScsIGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9uZXR3b3JrUmVxdWVzdHMucHVzaCh7IHJlcXVlc3RJZDogcGFyYW1zLnJlcXVlc3RJZCwgLi4ucGFyYW1zLnJlZGlyZWN0UmVzcG9uc2UsIHJlcXVlc3RQb3N0RGF0YSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
|
|
348
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9veF9zZXJ2aWNlcy9zZXJ2aWNlLWRldnRvb2xzL3N1Ym1vZHVsZS1uZXR3b3JrLmpzIl0sIm5hbWVzIjpbIk5ldHdvcmtTdWJNb2R1bGUiLCJPeHlnZW5TdWJNb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJwYXJlbnQiLCJfZGV2VG9vbHMiLCJfbmV0d29ya1JlcXVlc3RzIiwiX2NvbGxlY3REYXRhIiwiaW5pdCIsImRldlRvb2xzIiwiX3BhcmVudCIsImdldERyaXZlciIsIl9kcml2ZXIiLCJvbiIsIl9vbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkIiwiYmluZCIsIl9vbk5ldHdvcmtSZXF1ZXN0V2lsbEJlU2VudCIsImRpc3Bvc2UiLCJyZW1vdmVMaXN0ZW5lciIsImVtaXQiLCJlIiwic3RhcnQiLCJzdG9wIiwiZ2V0UmVxdWVzdHMiLCJ3YWl0Rm9yVXJsIiwicGF0dGVybiIsInRpbWVvdXQiLCJfaXNJbml0aWFsaXplZCIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJlcnJvckNvZGUiLCJNT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SIiwiaGVscGVycyIsImFzc2VydEFyZ3VtZW50IiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiRGF0ZSIsIm5vdyIsInJlcSIsInRlc3QiLCJ1cmwiLCJwYXVzZSIsIlRJTUVPVVQiLCJ3YWl0Rm9yTm90VXJsIiwid2FpdEZvciIsIm1hdGNoZXIiLCJhc3NlcnRVcmwiLCJBU1NFUlRfRVJST1IiLCJhc3NlcnRTdGF0dXNDb2RlIiwic3RhdHVzQ29kZSIsImZhaWx1cmVNZXNzYWdlIiwibWF0Y2hlZFJlcSIsInN0YXR1cyIsIm1lc3NhZ2UiLCJhc3NlcnRSZXNwb25zZUNvbnRlbnQiLCJjb250ZW50IiwicmVzcCIsImNkcCIsInJlcXVlc3RJZCIsImJvZHkiLCJiYXNlNjRFbmNvZGVkIiwiaW5kZXhPZiIsInBhcmFtcyIsInJlc3BvbnNlQm9keSIsImNvbnNvbGUiLCJsb2ciLCJyZXF1ZXN0UG9zdERhdGEiLCJyZXNwb25zZSIsIm1pbWVUeXBlIiwiSlNPTiIsInBhcnNlIiwicG9zdERhdGEiLCJwdXNoIiwicmVkaXJlY3RSZXNwb25zZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBWUE7O0FBRUE7O0FBQ0E7Ozs7QUFFZSxNQUFNQSxnQkFBTixTQUErQkMsZ0NBQS9CLENBQStDO0FBQzFEQyxFQUFBQSxXQUFXLENBQUNDLElBQUQsRUFBT0MsTUFBUCxFQUFlO0FBQ3RCLFVBQU1ELElBQU4sRUFBWUMsTUFBWjtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxTQUFLQyxnQkFBTCxHQUF3QixFQUF4QjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsS0FBcEI7QUFDSDs7QUFFREMsRUFBQUEsSUFBSSxDQUFDQyxRQUFELEVBQVc7QUFDWCxRQUFJLENBQUNBLFFBQUQsSUFBYSxDQUFDLEtBQUtDLE9BQW5CLElBQThCLENBQUMsS0FBS0EsT0FBTCxDQUFhQyxTQUE1QyxJQUF5RCxPQUFPLEtBQUtELE9BQUwsQ0FBYUMsU0FBcEIsS0FBa0MsVUFBM0YsSUFBeUcsQ0FBQyxLQUFLRCxPQUFMLENBQWFDLFNBQWIsRUFBOUcsRUFBd0k7QUFDcEksWUFBTUgsSUFBTjtBQUNBLGFBQU8sS0FBUDtBQUNIOztBQUNELFNBQUtILFNBQUwsR0FBaUJJLFFBQWpCO0FBQ0EsU0FBS0csT0FBTCxHQUFlLEtBQUtGLE9BQUwsQ0FBYUMsU0FBYixFQUFmOztBQUNBLFNBQUtDLE9BQUwsQ0FBYUMsRUFBYixDQUFnQiwwQkFBaEIsRUFBNEMsS0FBS0MsMEJBQUwsQ0FBZ0NDLElBQWhDLENBQXFDLElBQXJDLENBQTVDOztBQUNBLFNBQUtILE9BQUwsQ0FBYUMsRUFBYixDQUFnQiwyQkFBaEIsRUFBNkMsS0FBS0csMkJBQUwsQ0FBaUNELElBQWpDLENBQXNDLElBQXRDLENBQTdDOztBQUNBLFVBQU1QLElBQU47QUFDQSxXQUFPLElBQVA7QUFDSDs7QUFFWSxRQUFQUyxPQUFPLEdBQUc7QUFFWixRQUFJO0FBQ0EsVUFB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QUFBLGVBQWUsQ0FBQ0ssUUFBaEIsR0FBMkJGLElBQUksQ0FBQ0MsS0FBTCxDQUFXSixlQUFlLENBQUNLLFFBQTNCLENBQTNCO0FBQ0g7QUFDSixPQUpELENBSUUsT0FBT2xELENBQVAsRUFBVTtBQUVSMkMsUUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksb0RBQVosRUFBa0U1QyxDQUFsRTtBQUNIOztBQUVELFdBQUtkLGdCQUFMLENBQXNCaUUsSUFBdEIsQ0FBMkI7QUFBRWQsUUFBQUEsU0FBUyxFQUFFSSxNQUFNLENBQUNKLFNBQXBCO0FBQStCLFdBQUdJLE1BQU0sQ0FBQ1csZ0JBQXpDO0FBQTJEUCxRQUFBQTtBQUEzRCxPQUEzQjtBQUNIO0FBQ0o7O0FBeld5RCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3ZpZGVzIG1ldGhvZHMgZm9yIG1vbml0b3JpbmcgYW5kIGFuYWx5emluZyBDaHJvbWUgYnJvd3NlciBuZXR3b3JrIGFjdGl2aXRpZXMuXHJcbiovXHJcbmltcG9ydCB7IE94eWdlblN1Yk1vZHVsZSB9IGZyb20gJy4uLy4uL2NvcmUvT3h5Z2VuU3ViTW9kdWxlJztcclxuXHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uLy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrU3ViTW9kdWxlIGV4dGVuZHMgT3h5Z2VuU3ViTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHBhcmVudCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUsIHBhcmVudCk7XHJcbiAgICAgICAgdGhpcy5fZGV2VG9vbHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX25ldHdvcmtSZXF1ZXN0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChkZXZUb29scykge1xyXG4gICAgICAgIGlmICghZGV2VG9vbHMgfHwgIXRoaXMuX3BhcmVudCB8fCAhdGhpcy5fcGFyZW50LmdldERyaXZlciB8fCB0eXBlb2YgdGhpcy5fcGFyZW50LmdldERyaXZlciAhPT0gJ2Z1bmN0aW9uJyB8fCAhdGhpcy5fcGFyZW50LmdldERyaXZlcigpKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLmluaXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kZXZUb29scyA9IGRldlRvb2xzO1xyXG4gICAgICAgIHRoaXMuX2RyaXZlciA9IHRoaXMuX3BhcmVudC5nZXREcml2ZXIoKTtcclxuICAgICAgICB0aGlzLl9kcml2ZXIub24oJ05ldHdvcmsucmVzcG9uc2VSZWNlaXZlZCcsIHRoaXMuX29uTmV0d29ya1Jlc3BvbnNlUmVjZWl2ZWQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fZHJpdmVyLm9uKCdOZXR3b3JrLnJlcXVlc3RXaWxsQmVTZW50JywgdGhpcy5fb25OZXR3b3JrUmVxdWVzdFdpbGxCZVNlbnQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgc3VwZXIuaW5pdCgpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2UoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kcml2ZXIpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RyaXZlci5yZW1vdmVMaXN0ZW5lcignTmV0d29yay5yZXNwb25zZVJlY2VpdmVkJywgKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZHJpdmVyLnJlbW92ZUxpc3RlbmVyKCdOZXR3b3JrLnJlcXVlc3RXaWxsQmVTZW50JywgKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZHJpdmVyLmVtaXQoJ05ldHdvcmsuZGlzYWJsZScpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZHJpdmVyLmVtaXQoJ05ldHdvcmsuY2xvc2UnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9ycztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2RldlRvb2xzID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX25ldHdvcmtSZXF1ZXN0cyA9IFtdO1xyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQmVnaW4gY29sbGVjdGluZyBuZXR3b3JrIHJlcXVlc3RzLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEFueSBwcmV2aW91c2x5IGNvbGxlY3RlZCByZXF1ZXN0cyB3aWxsIGJlIGRpc2NhcmRlZC4gTmV0d29yayByZXF1ZXN0IGNvbGxlY3Rpb24gaXMgc3VwcG9ydGVkIG9ubHkgb24gQ2hyb21lIDYzIGFuZCBsYXRlci5cclxuICAgICAqIEBmdW5jdGlvbiBzdGFydFxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm5ldHdvcmsuc3RhcnQoKTtcclxuICAgICAqIHdlYi5vcGVuKFwiaHR0cHM6Ly93d3cueW91cndlYnNpdGUuY29tXCIpO1xyXG4gICAgICogLy8gcHJpbnQgdGhlIGNvbGxlY3RlZCByZXF1ZXN0IHNvIGZhcjpcclxuICAgICAqIGxldCByZXF1ZXN0cyA9IHdlYi5uZXR3b3JrLmdldFJlcXVlc3RzKCk7XHJcbiAgICAgKiBmb3IgKGxldCByZXEgb2YgcmVxdWVzdHMpIHtcclxuICAgICAqICAgbG9nLmluZm8ocmVxKTtcclxuICAgICAqIH1cclxuICAgICAqIC8vIHdhaXQgZm9yIGEgcmVxdWVzdCB1c2luZyBhIHZlcmJhdGltIFVSTCBtYXRjaDpcclxuICAgICAqIHdlYi5uZXR3b3JrLndhaXRGb3JVcmwoJ2h0dHBzOi8vd3d3LnlvdXJ3ZWJzaXRlLmNvbS9mb28vYmFyJyk7XHJcbiAgICAgKiAvLyB3YWl0IGZvciBhIHJlcXVlc3QgdXNpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gVVJMIG1hdGNoOlxyXG4gICAgICogd2ViLm5ldHdvcmsud2FpdEZvclVybCgvaHR0cHM6XFwvXFwvLipcXC9mb29cXC9iYXIvKTtcclxuICAgICAqIC8vIHdhaXQgZm9yIGEgcmVxdWVzdCB1c2luZyBhIGN1c3RvbSBtYXRjaGVyOlxyXG4gICAgICogd2ViLm5ldHdvcmsud2FpdEZvcihmdW5jdGlvbiAocmVxdWVzdCkge1xyXG4gICAgICogICByZXR1cm4gcmVxdWVzdC5zdGF0dXNUZXh0ID09PSAnT0snICYmIHJlcXVlc3QudXJsID09PSAnaHR0cHM6Ly93d3cueW91cndlYnNpdGUuY29tL2Zvby9iYXInO1xyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9uZXR3b3JrUmVxdWVzdHMgPSBbXTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU3RvcCBjb2xsZWN0aW5nIG5ldHdvcmsgcmVxdWVzdHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gc3RvcFxyXG4gICAgICovXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIHRoaXMuX2NvbGxlY3REYXRhID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybiBhbGwgdGhlIGNvbGxlY3RlZCBuZXR3b3JrIHJlcXVlc3RzIHNvIGZhci5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRSZXF1ZXN0c1xyXG4gICAgICogQHJldHVybiB7T2JqZWN0W119IEFycmF5IGNvbnRhaW5pbmcgbmV0d29yayByZXF1ZXN0cy5cclxuICAgICAqL1xyXG4gICAgZ2V0UmVxdWVzdHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25ldHdvcmtSZXF1ZXN0cztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgV2FpdCBmb3IgYSBuZXR3b3JrIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBVUkwuXHJcbiAgICAgKiBAZnVuY3Rpb24gd2FpdEZvclVybFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBwYXR0ZXJuIC0gQW4gVVJMIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBOZXR3b3JrIHJlcXVlc3QgZGV0YWlscyBpZiB0aGUgbmV0d29yayByZXF1ZXN0IHdhcyBmb3VuZC5cclxuICAgICAqL1xyXG4gICAgd2FpdEZvclVybChwYXR0ZXJuLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZHJpdmVyIHx8ICF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG9yIGB3ZWJgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQocGF0dGVybiwgJ3BhdHRlcm4nKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcmVxIG9mIHRoaXMuX25ldHdvcmtSZXF1ZXN0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdHRlcm4uY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgcGF0dGVybi50ZXN0KHJlcS51cmwpIHx8IHBhdHRlcm4gPT09IHJlcS51cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2RyaXZlci5wYXVzZSg1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRJTUVPVVQsIGBObyByZXF1ZXN0IG1hdGNoaW5nIHRoZSBVUkwgXCIke3BhdHRlcm59XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRmFpbCB0aGUgdGVzdCBpZiByZXF1ZXN0IHdpdGggYSBtYXRjaGluZyBVUkwgd2FzIHJlY2VpdmVkIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gd2FpdEZvck5vdFVybFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSBwYXR0ZXJuIC0gQW4gVVJMIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICB3YWl0Rm9yTm90VXJsKHBhdHRlcm4sIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2Agb3IgYHdlYmAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChwYXR0ZXJuLCAncGF0dGVybicpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCByZXEgb2YgdGhpcy5fbmV0d29ya1JlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0dGVybi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnUmVnRXhwJyAmJiBwYXR0ZXJuLnRlc3QocmVxLnVybCkgfHwgcGF0dGVybiA9PT0gcmVxLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVElNRU9VVCwgYEEgcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHtwYXR0ZXJufVwiIHdhcyBmb3VuZC5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBXYWl0IGZvciBhIG5ldHdvcmsgcmVxdWVzdC5cclxuICAgICAqIEBmdW5jdGlvbiBuZXR3b3JrV2FpdEZvclxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbWF0Y2hlciAtIE1hdGNoaW5nIGZ1bmN0aW9uLiBTaG91bGQgcmV0dXJuIHRydWUgb24gbWF0Y2gsIG9yIGZhbHNlIG90aGVyd2lzZS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIHdhaXRGb3IobWF0Y2hlciwgdGltZW91dCA9IDYwKjEwMDApIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2RyaXZlciB8fCAhdGhpcy5faXNJbml0aWFsaXplZCB8fCAhdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2BuZXR3b3JrYCBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb2xsZWN0RGF0YSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgd2ViLm5ldHdvcmsuc3RhcnQoKWAgbXVzdCBiZSBleGVjdXRlZCBwcmlvciB0byB1c2luZyBgbmV0d29ya2AgY29tbWFuZHMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudChtYXRjaGVyLCAnbWF0Y2hlcicpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciByZXEgb2YgdGhpcy5fbmV0d29ya1JlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcihyZXEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5USU1FT1VULCAnTm8gcmVxdWVzdCBmb3VuZCB1c2luZyB0aGUgcHJvdmlkZWQgbWF0Y2hlci4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEFzc2VydCBpZiBuZXR3b3JrIHJlcXVlc3QgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBVUkwuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0VXJsXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHVybCAtIEEgcmVxdWVzdCBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBhc3NlcnRVcmwodXJsLCB0aW1lb3V0ID0gNjAqMTAwMCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fZHJpdmVyIHx8ICF0aGlzLl9pc0luaXRpYWxpemVkIHx8ICF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYG5ldHdvcmtgIG9yIGB3ZWJgIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbGxlY3REYXRhKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuTU9EVUxFX05PVF9JTklUSUFMSVpFRF9FUlJPUiwgJ2B3ZWIubmV0d29yay5zdGFydCgpYCBtdXN0IGJlIGV4ZWN1dGVkIHByaW9yIHRvIHVzaW5nIGBuZXR3b3JrYCBjb21tYW5kcy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50KHVybCwgJ3VybCcpO1xyXG4gICAgICAgIHRoaXMuX3BhcmVudC5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZW91dCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCByZXEgb2YgdGhpcy5fbmV0d29ya1JlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXJsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIHVybC50ZXN0KHJlcS51cmwpIHx8IHVybCA9PT0gcmVxLnVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyLnBhdXNlKDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgTm8gcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHt1cmx9XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgQXNzZXJ0IHdoZXRoZXIgSFRUUCByZXNwb25zZSBzdGF0dXMgY29kZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgdmFsdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0U3RhdHVzQ29kZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd8UmVnRXhwfSB1cmwgLSBBIHJlcXVlc3QgVVJMIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHN0YXR1c0NvZGUgLSBBIHJlc3BvbnNlIHN0YXR1cyBjb2RlIHRvIG1hdGNoIHZlcmJhdGltIG9yIGEgUmVnRXhwLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBmYWlsdXJlTWVzc2FnZSAtIEFuIG9wdGlvbmFsIGZhaWx1cmUgbWVzc2FnZS5cclxuICAgICAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gTmV0d29yayByZXF1ZXN0IGRldGFpbHMgaWYgdGhlIG5ldHdvcmsgcmVxdWVzdCB3YXMgZm91bmQuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFzc2VydFN0YXR1c0NvZGUodXJsLCBzdGF0dXNDb2RlLCBmYWlsdXJlTWVzc2FnZSA9IG51bGwsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2Agb3IgYHdlYmAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHdlYi5uZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQodXJsLCAndXJsJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQoc3RhdHVzQ29kZSwgJ3N0YXR1c0NvZGUnKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgbGV0IG1hdGNoZWRSZXEgPSBudWxsO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0ICYmICFtYXRjaGVkUmVxKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLl9uZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgdXJsLnRlc3QocmVxLnVybCkgfHwgdXJsID09PSByZXEudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZFJlcSA9IHJlcTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAhbWF0Y2hlZFJlcSAmJiB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFtYXRjaGVkUmVxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgTm8gcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHt1cmx9XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gbWF0Y2hlZFJlcS5zdGF0dXMpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGZhaWx1cmVNZXNzYWdlIHx8IGBUaGUgZXhwZWN0ZWQgc3RhdHVzIGNvZGUgXCIke3N0YXR1c0NvZGV9XCIgZG9lcyBub3QgbWF0Y2ggXCIke21hdGNoZWRSZXEuc3RhdHVzfVwiLmA7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBBc3NlcnQgd2hldGhlciBIVFRQIHJlc3BvbnNlIGNvbnRlbnQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHZhbHVlIG9yIHBhdHRlcm4uXHJcbiAgICAgKiBAZnVuY3Rpb24gYXNzZXJ0UmVzcG9uc2VDb250ZW50XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IHVybCAtIEEgcmVxdWVzdCBVUkwgdG8gbWF0Y2ggdmVyYmF0aW0gb3IgYSBSZWdFeHAuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB9IGNvbnRlbnQgLSBBIHJlc3BvbnNlIGJvZHkgY29udGVudCB0byBtYXRjaCB2ZXJiYXRpbSBvciBhIFJlZ0V4cC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gZmFpbHVyZU1lc3NhZ2UgLSBBbiBvcHRpb25hbCBmYWlsdXJlIG1lc3NhZ2UuXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0LiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IE5ldHdvcmsgcmVxdWVzdCBkZXRhaWxzIGlmIHRoZSBuZXR3b3JrIHJlcXVlc3Qgd2FzIGZvdW5kLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBhc3NlcnRSZXNwb25zZUNvbnRlbnQodXJsLCBjb250ZW50LCBmYWlsdXJlTWVzc2FnZSA9IG51bGwsIHRpbWVvdXQgPSA2MCoxMDAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcml2ZXIgfHwgIXRoaXMuX2lzSW5pdGlhbGl6ZWQgfHwgIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdgbmV0d29ya2Agb3IgYHdlYmAgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5NT0RVTEVfTk9UX0lOSVRJQUxJWkVEX0VSUk9SLCAnYHdlYi5uZXR3b3JrLnN0YXJ0KClgIG11c3QgYmUgZXhlY3V0ZWQgcHJpb3IgdG8gdXNpbmcgYG5ldHdvcmtgIGNvbW1hbmRzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQodXJsLCAndXJsJyk7XHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQoY29udGVudCwgJ2NvbnRlbnQnKTtcclxuICAgICAgICB0aGlzLl9wYXJlbnQuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgbGV0IG1hdGNoZWRSZXEgPSBudWxsO1xyXG4gICAgICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnQgPCB0aW1lb3V0ICYmICFtYXRjaGVkUmVxKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLl9uZXR3b3JrUmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwuY29uc3RydWN0b3IubmFtZSA9PT0gJ1JlZ0V4cCcgJiYgdXJsLnRlc3QocmVxLnVybCkgfHwgdXJsID09PSByZXEudXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZFJlcSA9IHJlcTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAhbWF0Y2hlZFJlcSAmJiB0aGlzLl9kcml2ZXIucGF1c2UoNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFtYXRjaGVkUmVxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBgTm8gcmVxdWVzdCBtYXRjaGluZyB0aGUgVVJMIFwiJHt1cmx9XCIgd2FzIGZvdW5kLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgdGhpcy5fZHJpdmVyLmNkcCgnTmV0d29yaycsJ2dldFJlc3BvbnNlQm9keScsIHtcclxuICAgICAgICAgICAgcmVxdWVzdElkOiBtYXRjaGVkUmVxLnJlcXVlc3RJZFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChyZXNwICYmIHJlc3AuYm9keSAmJiAhcmVzcC5iYXNlNjRFbmNvZGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdSZWdFeHAnICYmIGNvbnRlbnQudGVzdChyZXNwLmJvZHkpIHx8IHJlc3AuYm9keS5pbmRleE9mKGNvbnRlbnQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGZhaWx1cmVNZXNzYWdlIHx8IGBSZXNwb25zZSBcIiR7dXJsfVwiIGJvZHkgY29udGVudCBkb2VzIG5vdCBtYXRjaCBcIiR7Y29udGVudH0uYDtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX0VSUk9SLCBtZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfb25OZXR3b3JrUmVzcG9uc2VSZWNlaXZlZChwYXJhbXMpIHtcclxuICAgICAgICBpZiAodGhpcy5fY29sbGVjdERhdGEpIHtcclxuICAgICAgICAgICAgbGV0IHJlc3BvbnNlQm9keTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlQm9keSA9IGF3YWl0IHRoaXMuX2RyaXZlci5jZHAoJ05ldHdvcmsnLCdnZXRSZXNwb25zZUJvZHknLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiBwYXJhbXMucmVxdWVzdElkXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGdldFJlc3BvbnNlQm9keSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkIE5ldHdvcmsuZ2V0UmVzcG9uc2VCb2R5IGUnLCBlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHJlcXVlc3RQb3N0RGF0YTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RQb3N0RGF0YSA9IGF3YWl0IHRoaXMuX2RyaXZlci5jZHAoJ05ldHdvcmsnLCdnZXRSZXF1ZXN0UG9zdERhdGEnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiBwYXJhbXMucmVxdWVzdElkXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGdldFJlcXVlc3RQb3N0RGF0YSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbk5ldHdvcmtSZXNwb25zZVJlY2VpdmVkIE5ldHdvcmsuZ2V0UmVxdWVzdFBvc3REYXRhIGUnLCBlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zICYmXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMucmVzcG9uc2UgJiZcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5yZXNwb25zZS5taW1lVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VCb2R5ICYmIHJlc3BvbnNlQm9keS5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQm9keS5ib2R5ID0gSlNPTi5wYXJzZShyZXNwb25zZUJvZHkuYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBqc29uIHBhcnNlIHJlc3BvbnNlIEJvZHkgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ29uTmV0d29ya1Jlc3BvbnNlUmVjZWl2ZWQgcmVzcG9uc2VCb2R5IHBhcnNlIGUnLCBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RQb3N0RGF0YSAmJiByZXF1ZXN0UG9zdERhdGEucG9zdERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBvc3REYXRhLnBvc3REYXRhID0gSlNPTi5wYXJzZShyZXF1ZXN0UG9zdERhdGEucG9zdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUganNvbiBwYXJzZSByZXF1ZXN0IFBvc3QgRGF0YSBlcnJvcnNcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb25OZXR3b3JrUmVzcG9uc2VSZWNlaXZlZCByZXF1ZXN0UG9zdERhdGEgcGFyc2UgZScsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9uZXR3b3JrUmVxdWVzdHMucHVzaCh7IHJlcXVlc3RJZDogcGFyYW1zLnJlcXVlc3RJZCwgLi4ucGFyYW1zLnJlc3BvbnNlLCByZXNwb25zZUJvZHksIHJlcXVlc3RQb3N0RGF0YSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX29uTmV0d29ya1JlcXVlc3RXaWxsQmVTZW50KHBhcmFtcykge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb2xsZWN0RGF0YSAmJiBwYXJhbXMucmVkaXJlY3RSZXNwb25zZSkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHJlcXVlc3RQb3N0RGF0YTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3RQb3N0RGF0YSA9IGF3YWl0IHRoaXMuX2RyaXZlci5jZHAoJ05ldHdvcmsnLCdnZXRSZXF1ZXN0UG9zdERhdGEnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiBwYXJhbXMucmVxdWVzdElkXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGdldFJlcXVlc3RQb3N0RGF0YSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdvbk5ldHdvcmtSZXF1ZXN0V2lsbEJlU2VudCBOZXR3b3JrLmdldFJlcXVlc3RQb3N0RGF0YSBlJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdFBvc3REYXRhICYmIHJlcXVlc3RQb3N0RGF0YS5wb3N0RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQb3N0RGF0YS5wb3N0RGF0YSA9IEpTT04ucGFyc2UocmVxdWVzdFBvc3REYXRhLnBvc3REYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGpzb24gcGFyc2UgcmVxdWVzdCBQb3N0IERhdGEgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb25OZXR3b3JrUmVxdWVzdFdpbGxCZVNlbnQgcmVxdWVzdFBvc3REYXRhIHBhcnNlIGUnLCBlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fbmV0d29ya1JlcXVlc3RzLnB1c2goeyByZXF1ZXN0SWQ6IHBhcmFtcy5yZXF1ZXN0SWQsIC4uLnBhcmFtcy5yZWRpcmVjdFJlc3BvbnNlLCByZXF1ZXN0UG9zdERhdGEgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|
|
@@ -59,9 +59,9 @@ class DevToolsService extends _OxygenService.default {
|
|
|
59
59
|
console.log('UNSUPPORTED_ERROR_MESSAGE', UNSUPPORTED_ERROR_MESSAGE);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
if (devToolsSvc.
|
|
62
|
+
if (devToolsSvc._isSupported) {
|
|
63
63
|
global.browser = module.getDriver();
|
|
64
|
-
await devToolsSvc.before();
|
|
64
|
+
await devToolsSvc.before(null, null, this._driver);
|
|
65
65
|
submodule.init(devToolsSvc);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -80,4 +80,4 @@ class DevToolsService extends _OxygenService.default {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
exports.default = DevToolsService;
|
|
83
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9zZXJ2aWNlcy9zZXJ2aWNlLWRldnRvb2xzLmpzIl0sIm5hbWVzIjpbIkRldlRvb2xzU2VydmljZSIsIk94eWdlblNlcnZpY2UiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjdHgiLCJyZXN1bHRzIiwibG9nZ2VyIiwiX3N1Yk1vZHVsZXMiLCJpc1NlcnZpY2VJbml0aWFsaXplZCIsIm9uTW9kdWxlTG9hZGVkIiwibW9kdWxlIiwiZ2V0RHJpdmVyIiwiZ2V0Q2FwYWJpbGl0aWVzIiwibmV0d29ya1N1Ym1vZHVsZSIsIk5ldHdvcmtTdWJNb2R1bGUiLCJhZGRTdWJNb2R1bGUiLCJuYW1lIiwib25Nb2R1bGVJbml0aWFsaXplZCIsInN1Ym1vZHVsZSIsImlzSW5pdGlhbGl6ZWQiLCJjYXBhYmlsaXRpZXMiLCJfZHJpdmVyIiwiZGVidWdnZXJBZGRyZXNzIiwicHJvdmlkZXIiLCJkZXZUb29sc1N2YyIsIldESU9EZXZUb29sc1NlcnZpY2UiLCJVTlNVUFBPUlRFRF9FUlJPUl9NRVNTQUdFIiwiYmVmb3JlU2Vzc2lvbiIsImNvbnNvbGUiLCJsb2ciLCJfaXNTdXBwb3J0ZWQiLCJnbG9iYWwiLCJicm93c2VyIiwiYmVmb3JlIiwiaW5pdCIsIm9uTW9kdWxlV2lsbERpc3Bvc2UiLCJkaXNwb3NlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQTs7QUFFQTs7QUFDQTs7OztBQUVlLE1BQU1BLGVBQU4sU0FBOEJDLHNCQUE5QixDQUE0QztBQUN2REMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLEdBQVYsRUFBZUMsT0FBZixFQUF3QkMsTUFBeEIsRUFBZ0M7QUFDdkMsVUFBTUgsT0FBTixFQUFlQyxHQUFmLEVBQW9CQyxPQUFwQixFQUE2QkMsTUFBN0I7QUFFQSxTQUFLQyxXQUFMLEdBQW1CLEVBQW5CO0FBQ0EsU0FBS0Msb0JBQUwsR0FBNEIsSUFBNUI7QUFDSDs7QUFDREMsRUFBQUEsY0FBYyxDQUFDQyxNQUFELEVBQVM7QUFFbkIsUUFBSSxDQUFDQSxNQUFELElBQVcsQ0FBQ0EsTUFBTSxDQUFDQyxTQUFuQixJQUFnQyxPQUFPRCxNQUFNLENBQUNDLFNBQWQsS0FBNEIsVUFBNUQsSUFBMEUsQ0FBQ0QsTUFBTSxDQUFDRSxlQUFsRixJQUFxRyxPQUFPRixNQUFNLENBQUNFLGVBQWQsS0FBa0MsVUFBM0ksRUFBdUo7QUFDbko7QUFDSDs7QUFFRCxVQUFNQyxnQkFBZ0IsR0FBRyxJQUFJQyx5QkFBSixDQUFxQixTQUFyQixFQUFnQ0osTUFBaEMsQ0FBekI7QUFDQUEsSUFBQUEsTUFBTSxDQUFDSyxZQUFQLENBQW9CLFNBQXBCLEVBQStCRixnQkFBL0I7QUFDQSxTQUFLTixXQUFMLENBQWlCRyxNQUFNLENBQUNNLElBQXhCLElBQWdDSCxnQkFBaEM7QUFDSDs7QUFDd0IsUUFBbkJJLG1CQUFtQixDQUFDUCxNQUFELEVBQVM7QUFFOUIsUUFBSSxDQUFDQSxNQUFELElBQVcsQ0FBQ0EsTUFBTSxDQUFDQyxTQUFuQixJQUFnQyxPQUFPRCxNQUFNLENBQUNDLFNBQWQsS0FBNEIsVUFBNUQsSUFBMEUsQ0FBQ0QsTUFBTSxDQUFDRSxlQUFsRixJQUFxRyxPQUFPRixNQUFNLENBQUNFLGVBQWQsS0FBa0MsVUFBM0ksRUFBdUo7QUFDbko7QUFDSDs7QUFDRCxVQUFNTSxTQUFTLEdBQUcsS0FBS1gsV0FBTCxDQUFpQkcsTUFBTSxDQUFDTSxJQUF4QixDQUFsQjs7QUFDQSxRQUFJLENBQUNFLFNBQUQsSUFBY0EsU0FBUyxDQUFDQyxhQUE1QixFQUEyQztBQUN2QztBQUNIOztBQUVELFFBQUloQixPQUFPLEdBQUcsRUFBZDtBQUNBLFVBQU1pQixZQUFZLEdBQUdWLE1BQU0sQ0FBQ0UsZUFBUCxFQUFyQjtBQUNBLFNBQUtTLE9BQUwsR0FBZVgsTUFBTSxDQUFDQyxTQUFQLEVBQWY7O0FBRUEsUUFDSSxLQUFLVSxPQUFMLElBQ0EsS0FBS0EsT0FBTCxDQUFhRCxZQURiLElBRUEsS0FBS0MsT0FBTCxDQUFhRCxZQUFiLENBQTBCLG9CQUExQixDQUZBLElBR0EsS0FBS0MsT0FBTCxDQUFhRCxZQUFiLENBQTBCLG9CQUExQixFQUFnRCxpQkFBaEQsQ0FKSixFQUtFO0FBQ0VqQixNQUFBQSxPQUFPLENBQUNtQixlQUFSLEdBQTBCLEtBQUtELE9BQUwsQ0FBYUQsWUFBYixDQUEwQixvQkFBMUIsRUFBZ0QsaUJBQWhELENBQTFCO0FBQ0g7O0FBR0QsUUFBSSxLQUFLQyxPQUFMLENBQWFFLFFBQWIsS0FBMEIsSUFBOUIsRUFBb0M7QUFFaEMsWUFBTUMsV0FBVyxHQUFHLElBQUlDLHdCQUFKLENBQXdCdEIsT0FBeEIsQ0FBcEI7QUFDQSxZQUFNdUIseUJBQXlCLEdBQUdGLFdBQVcsQ0FBQ0csYUFBWixDQUEwQixJQUExQixFQUFnQ1AsWUFBaEMsQ0FBbEM7O0FBRUEsVUFBSU0seUJBQUosRUFBK0I7QUFDM0JFLFFBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLDJCQUFaLEVBQXlDSCx5QkFBekM7QUFDSDs7QUFFRCxVQUFJRixXQUFXLENBQUNNLFlBQWhCLEVBQThCO0FBRzFCQyxRQUFBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUJ0QixNQUFNLENBQUNDLFNBQVAsRUFBakI7QUFDQSxjQUFNYSxXQUFXLENBQUNTLE1BQVosQ0FBbUIsSUFBbkIsRUFBeUIsSUFBekIsRUFBK0IsS0FBS1osT0FBcEMsQ0FBTjtBQUNBSCxRQUFBQSxTQUFTLENBQUNnQixJQUFWLENBQWVWLFdBQWY7QUFFSDtBQUNKO0FBQ0o7O0FBQ0RXLEVBQUFBLG1CQUFtQixDQUFDekIsTUFBRCxFQUFTO0FBQ3hCLFVBQU1RLFNBQVMsR0FBRyxLQUFLWCxXQUFMLENBQWlCRyxNQUFNLENBQUNNLElBQXhCLENBQWxCOztBQUNBLFFBQUksQ0FBQ0UsU0FBTCxFQUFnQjtBQUNaO0FBQ0g7O0FBQ0RBLElBQUFBLFNBQVMsQ0FBQ2tCLE9BQVY7QUFDSDs7QUFsRXNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW5yZWFjaGFibGUgKi9cclxuaW1wb3J0IFdESU9EZXZUb29sc1NlcnZpY2UgZnJvbSAnQHdkaW8vZGV2dG9vbHMtc2VydmljZSc7XHJcblxyXG5pbXBvcnQgT3h5Z2VuU2VydmljZSBmcm9tICcuLi9jb3JlL094eWdlblNlcnZpY2UnO1xyXG5pbXBvcnQgTmV0d29ya1N1Yk1vZHVsZSBmcm9tICcuL3NlcnZpY2UtZGV2dG9vbHMvc3VibW9kdWxlLW5ldHdvcmsnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGV2VG9vbHNTZXJ2aWNlIGV4dGVuZHMgT3h5Z2VuU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjdHgsIHJlc3VsdHMsIGxvZ2dlcikge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGN0eCwgcmVzdWx0cywgbG9nZ2VyKTtcclxuICAgICAgICAvLyBoYXNoIG9mIHdlYmRyaXZlciBiYXNlZCBtb2R1bGVzXHJcbiAgICAgICAgdGhpcy5fc3ViTW9kdWxlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuaXNTZXJ2aWNlSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgb25Nb2R1bGVMb2FkZWQobW9kdWxlKSB7XHJcbiAgICAgICAgLy8gc2tpcCBhbnkgbW9kdWxlIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IC5nZXREcml2ZXIoKSBtZXRob2QgKGUuZy4gbm90IHdlYmRyaXZlciBiYXNlZClcclxuICAgICAgICBpZiAoIW1vZHVsZSB8fCAhbW9kdWxlLmdldERyaXZlciB8fCB0eXBlb2YgbW9kdWxlLmdldERyaXZlciAhPT0gJ2Z1bmN0aW9uJyB8fCAhbW9kdWxlLmdldENhcGFiaWxpdGllcyB8fCB0eXBlb2YgbW9kdWxlLmdldENhcGFiaWxpdGllcyAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBuZXR3b3JrU3VibW9kdWxlID0gbmV3IE5ldHdvcmtTdWJNb2R1bGUoJ25ldHdvcmsnLCBtb2R1bGUpO1xyXG4gICAgICAgIG1vZHVsZS5hZGRTdWJNb2R1bGUoJ25ldHdvcmsnLCBuZXR3b3JrU3VibW9kdWxlKTtcclxuICAgICAgICB0aGlzLl9zdWJNb2R1bGVzW21vZHVsZS5uYW1lXSA9IG5ldHdvcmtTdWJtb2R1bGU7XHJcbiAgICB9XHJcbiAgICBhc3luYyBvbk1vZHVsZUluaXRpYWxpemVkKG1vZHVsZSkge1xyXG4gICAgICAgIC8vIHNraXAgYW55IG1vZHVsZSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBnZXREcml2ZXIgbWV0aG9kIChlLmcuIG5vdCB3ZWJkcml2ZXIgYmFzZWQpXHJcbiAgICAgICAgaWYgKCFtb2R1bGUgfHwgIW1vZHVsZS5nZXREcml2ZXIgfHwgdHlwZW9mIG1vZHVsZS5nZXREcml2ZXIgIT09ICdmdW5jdGlvbicgfHwgIW1vZHVsZS5nZXRDYXBhYmlsaXRpZXMgfHwgdHlwZW9mIG1vZHVsZS5nZXRDYXBhYmlsaXRpZXMgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdWJtb2R1bGUgPSB0aGlzLl9zdWJNb2R1bGVzW21vZHVsZS5uYW1lXTtcclxuICAgICAgICBpZiAoIXN1Ym1vZHVsZSB8fCBzdWJtb2R1bGUuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IG1vZHVsZS5nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgICAgICB0aGlzLl9kcml2ZXIgPSBtb2R1bGUuZ2V0RHJpdmVyKCk7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2RyaXZlci5jYXBhYmlsaXRpZXMgJiZcclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyLmNhcGFiaWxpdGllc1snZ29vZzpjaHJvbWVPcHRpb25zJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5fZHJpdmVyLmNhcGFiaWxpdGllc1snZ29vZzpjaHJvbWVPcHRpb25zJ11bJ2RlYnVnZ2VyQWRkcmVzcyddXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuZGVidWdnZXJBZGRyZXNzID0gdGhpcy5fZHJpdmVyLmNhcGFiaWxpdGllc1snZ29vZzpjaHJvbWVPcHRpb25zJ11bJ2RlYnVnZ2VyQWRkcmVzcyddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5vdCB1c2luZyBhbnkgM3JkIHBhcnR5IHByb3ZpZGVyXHJcbiAgICAgICAgaWYgKHRoaXMuX2RyaXZlci5wcm92aWRlciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIERldlRvb2xzU2VydmljZSBhbmQgaG9vayBpdCB0byB0aGUgY3VycmVudCB3ZWJkcml2ZXIgb2JqZWN0XHJcbiAgICAgICAgICAgIGNvbnN0IGRldlRvb2xzU3ZjID0gbmV3IFdESU9EZXZUb29sc1NlcnZpY2Uob3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvbnN0IFVOU1VQUE9SVEVEX0VSUk9SX01FU1NBR0UgPSBkZXZUb29sc1N2Yy5iZWZvcmVTZXNzaW9uKG51bGwsIGNhcGFiaWxpdGllcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoVU5TVVBQT1JURURfRVJST1JfTUVTU0FHRSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1VOU1VQUE9SVEVEX0VSUk9SX01FU1NBR0UnLCBVTlNVUFBPUlRFRF9FUlJPUl9NRVNTQUdFKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRldlRvb2xzU3ZjLl9pc1N1cHBvcnRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gY2hhbmdlIGdsb2JhbC5icm93c2VyIHRvIHRoZSBjdXJyZW50IG1vZHVsZSdzIHdlYmRyaXZlciBpbnN0YW5jZVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc3Qgb3JnR2xvYmFsQnJvd3NlciA9IGdsb2JhbC5icm93c2VyO1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmJyb3dzZXIgPSBtb2R1bGUuZ2V0RHJpdmVyKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBkZXZUb29sc1N2Yy5iZWZvcmUobnVsbCwgbnVsbCwgdGhpcy5fZHJpdmVyKTtcclxuICAgICAgICAgICAgICAgIHN1Ym1vZHVsZS5pbml0KGRldlRvb2xzU3ZjKTtcclxuICAgICAgICAgICAgICAgIC8vIGdsb2JhbC5icm93c2VyID0gb3JnR2xvYmFsQnJvd3NlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG9uTW9kdWxlV2lsbERpc3Bvc2UobW9kdWxlKSB7XHJcbiAgICAgICAgY29uc3Qgc3VibW9kdWxlID0gdGhpcy5fc3ViTW9kdWxlc1ttb2R1bGUubmFtZV07XHJcbiAgICAgICAgaWYgKCFzdWJtb2R1bGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdWJtb2R1bGUuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG59Il19
|
package/package.json
CHANGED
package/test.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var des = soap.describe('https://www.ebi.ac.uk/europepmc/webservices/soap?wsdl');
|
|
4
|
-
//log.info(des);
|
|
5
|
-
|
|
6
|
-
//soap.setProxy('http://109.195.23.223:34031')
|
|
7
|
-
var ret = soap.get('https://www.ebi.ac.uk/europepmc/webservices/soap?wsdl', 'getReferences',
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
"id": "IND92070825",
|
|
11
|
-
"source": "AGR"
|
|
12
|
-
}
|
|
13
|
-
);
|
|
14
|
-
log.info(ret)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/*var des = soap.describe('http://www.thomas-bayer.com/axis2/services/BLZService?wsdl');
|
|
22
|
-
|
|
23
|
-
log.info(des);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
var ret = soap.get('http://www.thomas-bayer.com/axis2/services/BLZService?wsdl', 'getBank',
|
|
27
|
-
|
|
28
|
-
{
|
|
29
|
-
|
|
30
|
-
"blz": "64090100"
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
log.info(ret)*/
|