oxygen-cli 1.20.2 → 1.21.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/build/core/OxygenCore.js +4 -3
  3. package/build/errors/helper.js +9 -5
  4. package/build/lib/util.js +5 -2
  5. package/build/ox_modules/module-db.js +2 -2
  6. package/build/ox_modules/module-email.js +97 -49
  7. package/build/ox_modules/module-eyes.js +4 -21
  8. package/build/ox_modules/module-http.js +59 -49
  9. package/build/ox_modules/module-mailinator.js +25 -32
  10. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +4 -11
  11. package/build/ox_modules/module-mob/commands/selectWindow.js +4 -7
  12. package/build/ox_modules/module-mob/commands/sendKeys.js +2 -2
  13. package/build/ox_modules/module-mob.js +65 -52
  14. package/build/ox_modules/module-pdf.js +12 -32
  15. package/build/ox_modules/module-proxy.js +9 -9
  16. package/build/ox_modules/module-serial.js +14 -12
  17. package/build/ox_modules/module-soap.js +101 -78
  18. package/build/ox_modules/module-twilio.js +27 -27
  19. package/build/ox_modules/module-utils.js +43 -5
  20. package/build/ox_modules/module-web/commands/fullscreenWindow.js +24 -0
  21. package/build/ox_modules/module-web/commands/index.js +25 -1
  22. package/build/ox_modules/module-web/commands/isSelected.js +2 -2
  23. package/build/ox_modules/module-web/commands/maximizeWindow.js +24 -0
  24. package/build/ox_modules/module-web/commands/minimizeWindow.js +24 -0
  25. package/build/ox_modules/module-web/commands/selectWindow.js +4 -7
  26. package/build/ox_modules/module-web/commands/waitForNotExist.js +2 -3
  27. package/build/ox_modules/module-web.js +87 -64
  28. package/build/ox_modules/utils.js +22 -4
  29. package/build/runners/WorkerProcess.js +22 -20
  30. package/package.json +3 -1
@@ -22,8 +22,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
22
22
  var errHelper = require('../errors/helper');
23
23
 
24
24
  module.exports = function () {
25
- var deasync = require('deasync');
26
-
27
25
  var soap = require('soap');
28
26
 
29
27
  var auth = null;
@@ -31,6 +29,7 @@ module.exports = function () {
31
29
  var options = {
32
30
  rejectUnauthorized: false
33
31
  };
32
+ var lastResponseHeaders = null;
34
33
 
35
34
  module.isInitialized = function () {
36
35
  return true;
@@ -105,70 +104,88 @@ module.exports = function () {
105
104
  */
106
105
 
107
106
 
108
- module.get = function (wsdlUrl, method, args) {
107
+ module.get = async function (wsdlUrl, method, args) {
109
108
  var resultClient = null;
110
109
  var result = null;
111
- soap.createClient(wsdlUrl, {
112
- wsdl_options: { ...options,
113
- ...proxyOptions
114
- }
115
- }, (err, client) => {
116
- if (client === undefined) {
117
- var msg = 'Error creating client';
118
-
119
- if (err.message) {
120
- var soapMsg = err.message;
121
- var firstBreakIndex = soapMsg.indexOf('\n');
122
-
123
- if (firstBreakIndex > 0) {
124
- soapMsg = err.message.substring(0, firstBreakIndex);
110
+ await (() => {
111
+ return new Promise((resolve, reject) => {
112
+ soap.createClient(wsdlUrl, {
113
+ wsdl_options: { ...options,
114
+ ...proxyOptions
115
+ }
116
+ }, (err, client) => {
117
+ if (client === undefined) {
118
+ var msg = 'Error creating client';
119
+
120
+ if (err.message) {
121
+ var soapMsg = err.message;
122
+ var firstBreakIndex = soapMsg.indexOf('\n');
123
+
124
+ if (firstBreakIndex > 0) {
125
+ soapMsg = err.message.substring(0, firstBreakIndex);
126
+ }
127
+
128
+ msg += ': ' + soapMsg;
129
+ } else if (err && (typeof err === 'string' || err instanceof String)) {
130
+ msg += ': ' + err;
131
+ }
132
+
133
+ resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, msg);
134
+ resolve();
135
+ return;
125
136
  }
126
137
 
127
- msg += ': ' + soapMsg;
128
- } else if (err && (typeof err === 'string' || err instanceof String)) {
129
- msg += ': ' + err;
130
- }
131
-
132
- resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, msg);
133
- return;
134
- }
135
-
136
- resultClient = client;
137
-
138
- if (typeof client[method] !== 'function') {
139
- resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, 'No method named ' + method + ' was found.');
140
- return;
141
- }
138
+ resultClient = client;
142
139
 
143
- if (auth) {
144
- client.setSecurity(auth);
145
- }
140
+ if (typeof client[method] !== 'function') {
141
+ resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, 'No method named ' + method + ' was found.');
142
+ resolve();
143
+ return;
144
+ }
146
145
 
147
- client[method](args, (err, res) => {
148
- if (err !== null) {
149
- result = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, err.root.Envelope.Body.Fault.faultstring);
150
- return;
151
- }
146
+ if (auth) {
147
+ client.setSecurity(auth);
148
+ }
152
149
 
153
- result = res;
154
- }, { ...options,
155
- ...proxyOptions
150
+ client[method](args, (err, res) => {
151
+ lastResponseHeaders = client.lastResponseHeaders;
152
+
153
+ if (err !== null) {
154
+ result = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, err.root.Envelope.Body.Fault.faultstring);
155
+ resolve();
156
+ return;
157
+ }
158
+
159
+ result = res;
160
+ resolve();
161
+ return;
162
+ }, { ...options,
163
+ ...proxyOptions
164
+ });
165
+ });
156
166
  });
157
- });
158
- deasync.loopWhile(() => !resultClient);
167
+ })();
159
168
 
160
169
  if (resultClient.type === errHelper.errorCode.SOAP_ERROR) {
161
170
  throw resultClient;
162
171
  }
163
172
 
164
- deasync.loopWhile(() => !result);
165
-
166
173
  if (result.type === errHelper.errorCode.SOAP_ERROR) {
167
174
  throw result;
168
175
  }
169
176
 
170
177
  return result;
171
178
  };
179
+ /**
180
+ * @summary Returns last response headers.
181
+ * @function getLastResponseHeaders
182
+ * @return {Object} IncomingHttpHeaders (https://microsoft.github.io/PowerBI-JavaScript/interfaces/_node_modules__types_node_http2_d_._http2_.incominghttpheaders.html).
183
+ */
184
+
185
+
186
+ module.getLastResponseHeaders = function () {
187
+ return lastResponseHeaders;
188
+ };
172
189
  /**
173
190
  * @summary Returns SOAP service description.
174
191
  * @function describe
@@ -177,40 +194,46 @@ module.exports = function () {
177
194
  */
178
195
 
179
196
 
180
- module.describe = function (wsdlUrl) {
197
+ module.describe = async function (wsdlUrl) {
181
198
  var resultClient = null;
182
- soap.createClient(wsdlUrl, {
183
- wsdl_options: { ...options,
184
- ...proxyOptions
185
- }
186
- }, (err, client) => {
187
- if (client === undefined) {
188
- var msg = 'Error creating client';
189
-
190
- if (err.message) {
191
- var soapMsg = err.message;
192
- var firstBreakIndex = soapMsg.indexOf('\n');
193
-
194
- if (firstBreakIndex > 0) {
195
- soapMsg = err.message.substring(0, firstBreakIndex);
199
+ await (() => {
200
+ return new Promise((resolve, reject) => {
201
+ soap.createClient(wsdlUrl, {
202
+ wsdl_options: { ...options,
203
+ ...proxyOptions
204
+ }
205
+ }, (err, client) => {
206
+ if (client === undefined) {
207
+ var msg = 'Error creating client';
208
+
209
+ if (err.message) {
210
+ var soapMsg = err.message;
211
+ var firstBreakIndex = soapMsg.indexOf('\n');
212
+
213
+ if (firstBreakIndex > 0) {
214
+ soapMsg = err.message.substring(0, firstBreakIndex);
215
+ }
216
+
217
+ msg += ': ' + soapMsg;
218
+ } else if (err && (typeof err === 'string' || err instanceof String)) {
219
+ msg += ': ' + err;
220
+ }
221
+
222
+ resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, msg);
223
+ resolve();
224
+ return;
196
225
  }
197
226
 
198
- msg += ': ' + soapMsg;
199
- } else if (err && (typeof err === 'string' || err instanceof String)) {
200
- msg += ': ' + err;
201
- }
202
-
203
- resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, msg);
204
- return;
205
- }
206
-
207
- if (auth) {
208
- client.setSecurity(auth);
209
- }
227
+ if (auth) {
228
+ client.setSecurity(auth);
229
+ }
210
230
 
211
- resultClient = client.describe();
212
- });
213
- deasync.loopWhile(() => !resultClient);
231
+ resultClient = client.describe();
232
+ resolve();
233
+ return;
234
+ });
235
+ });
236
+ })();
214
237
 
215
238
  if (resultClient.type === errHelper.errorCode.SOAP_ERROR) {
216
239
  throw resultClient;
@@ -221,4 +244,4 @@ module.exports = function () {
221
244
 
222
245
  return module;
223
246
  };
224
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1zb2FwLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVhc3luYyIsInNvYXAiLCJhdXRoIiwicHJveHlPcHRpb25zIiwib3B0aW9ucyIsInJlamVjdFVuYXV0aG9yaXplZCIsImlzSW5pdGlhbGl6ZWQiLCJzZXRQcm94eSIsInVybCIsInByb3h5IiwiYXV0aEJhc2ljIiwidXNlciIsInBhc3MiLCJCYXNpY0F1dGhTZWN1cml0eSIsImF1dGhCZWFyZXIiLCJ0b2tlbiIsIkJlYXJlclNlY3VyaXR5IiwiYXV0aE5UTE0iLCJkb21haW4iLCJ3b3Jrc3RhdGlvbiIsIk5UTE1TZWN1cml0eSIsImdldCIsIndzZGxVcmwiLCJtZXRob2QiLCJhcmdzIiwicmVzdWx0Q2xpZW50IiwicmVzdWx0IiwiY3JlYXRlQ2xpZW50Iiwid3NkbF9vcHRpb25zIiwiZXJyIiwiY2xpZW50IiwidW5kZWZpbmVkIiwibXNnIiwibWVzc2FnZSIsInNvYXBNc2ciLCJmaXJzdEJyZWFrSW5kZXgiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwiU3RyaW5nIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIlNPQVBfRVJST1IiLCJzZXRTZWN1cml0eSIsInJlcyIsInJvb3QiLCJFbnZlbG9wZSIsIkJvZHkiLCJGYXVsdCIsImZhdWx0c3RyaW5nIiwibG9vcFdoaWxlIiwidHlwZSIsImRlc2NyaWJlIl0sIm1hcHBpbmdzIjoiOzs7O0FBY0E7Ozs7QUFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsSUFBSUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsa0JBQUQsQ0FBdkI7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixZQUFXO0FBQ3hCLE1BQUlDLE9BQU8sR0FBR0gsT0FBTyxDQUFDLFNBQUQsQ0FBckI7O0FBQ0EsTUFBSUksSUFBSSxHQUFHSixPQUFPLENBQUMsTUFBRCxDQUFsQjs7QUFDQSxNQUFJSyxJQUFJLEdBQUcsSUFBWDtBQUNBLE1BQUlDLFlBQVksR0FBRyxFQUFuQjtBQUNBLE1BQUlDLE9BQU8sR0FBRztBQUNWQyxJQUFBQSxrQkFBa0IsRUFBRTtBQURWLEdBQWQ7O0FBSUFQLEVBQUFBLE1BQU0sQ0FBQ1EsYUFBUCxHQUF1QixZQUFXO0FBQzlCLFdBQU8sSUFBUDtBQUNILEdBRkQ7QUFHQTtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSVIsRUFBQUEsTUFBTSxDQUFDUyxRQUFQLEdBQWtCLFVBQVNDLEdBQVQsRUFBYztBQUM1QixRQUFJQSxHQUFKLEVBQVM7QUFDTEwsTUFBQUEsWUFBWSxHQUFJO0FBQUVNLFFBQUFBLEtBQUssRUFBRUQ7QUFBVCxPQUFoQjtBQUNILEtBRkQsTUFFTztBQUNITCxNQUFBQSxZQUFZLEdBQUcsRUFBZjtBQUNIO0FBQ0osR0FORDtBQVFBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lMLEVBQUFBLE1BQU0sQ0FBQ1ksU0FBUCxHQUFtQixVQUFTQyxJQUFULEVBQWVDLElBQWYsRUFBcUI7QUFDcENWLElBQUFBLElBQUksR0FBRyxJQUFJRCxJQUFJLENBQUNZLGlCQUFULENBQTJCRixJQUEzQixFQUFpQ0MsSUFBakMsQ0FBUDtBQUNILEdBRkQ7QUFJQTtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSWQsRUFBQUEsTUFBTSxDQUFDZ0IsVUFBUCxHQUFvQixVQUFTQyxLQUFULEVBQWdCO0FBQ2hDYixJQUFBQSxJQUFJLEdBQUcsSUFBSUQsSUFBSSxDQUFDZSxjQUFULENBQXdCRCxLQUF4QixDQUFQO0FBQ0gsR0FGRDtBQUlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJakIsRUFBQUEsTUFBTSxDQUFDbUIsUUFBUCxHQUFrQixVQUFTTixJQUFULEVBQWVDLElBQWYsRUFBcUJNLE1BQXJCLEVBQTZCQyxXQUE3QixFQUEwQztBQUN4RGpCLElBQUFBLElBQUksR0FBRyxJQUFJRCxJQUFJLENBQUNtQixZQUFULENBQXNCVCxJQUF0QixFQUE0QkMsSUFBNUIsRUFBa0NNLE1BQWxDLEVBQTBDQyxXQUExQyxDQUFQO0FBQ0gsR0FGRDtBQUlBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lyQixFQUFBQSxNQUFNLENBQUN1QixHQUFQLEdBQWEsVUFBU0MsT0FBVCxFQUFrQkMsTUFBbEIsRUFBMEJDLElBQTFCLEVBQWdDO0FBQ3pDLFFBQUlDLFlBQVksR0FBRyxJQUFuQjtBQUNBLFFBQUlDLE1BQU0sR0FBRyxJQUFiO0FBRUF6QixJQUFBQSxJQUFJLENBQUMwQixZQUFMLENBQWtCTCxPQUFsQixFQUEyQjtBQUFFTSxNQUFBQSxZQUFZLEVBQUUsRUFBRSxHQUFHeEIsT0FBTDtBQUFjLFdBQUdEO0FBQWpCO0FBQWhCLEtBQTNCLEVBQTZFLENBQUMwQixHQUFELEVBQU1DLE1BQU4sS0FBaUI7QUFDMUYsVUFBSUEsTUFBTSxLQUFLQyxTQUFmLEVBQTBCO0FBQ3RCLFlBQUlDLEdBQUcsR0FBSSx1QkFBWDs7QUFDQSxZQUFJSCxHQUFHLENBQUNJLE9BQVIsRUFBaUI7QUFDYixjQUFJQyxPQUFPLEdBQUdMLEdBQUcsQ0FBQ0ksT0FBbEI7QUFDQSxjQUFJRSxlQUFlLEdBQUdELE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixJQUFoQixDQUF0Qjs7QUFDQSxjQUFJRCxlQUFlLEdBQUcsQ0FBdEIsRUFBeUI7QUFDckJELFlBQUFBLE9BQU8sR0FBR0wsR0FBRyxDQUFDSSxPQUFKLENBQVlJLFNBQVosQ0FBc0IsQ0FBdEIsRUFBeUJGLGVBQXpCLENBQVY7QUFDSDs7QUFDREgsVUFBQUEsR0FBRyxJQUFJLE9BQU9FLE9BQWQ7QUFDSCxTQVBELE1BT08sSUFBSUwsR0FBRyxLQUFLLE9BQU9BLEdBQVAsS0FBZSxRQUFmLElBQTJCQSxHQUFHLFlBQVlTLE1BQS9DLENBQVAsRUFBK0Q7QUFDbEVOLFVBQUFBLEdBQUcsSUFBSSxPQUFPSCxHQUFkO0FBQ0g7O0FBQ0RKLFFBQUFBLFlBQVksR0FBRyxJQUFJYyxvQkFBSixDQUFZM0MsU0FBUyxDQUFDNEMsU0FBVixDQUFvQkMsVUFBaEMsRUFBNENULEdBQTVDLENBQWY7QUFDQTtBQUNIOztBQUVEUCxNQUFBQSxZQUFZLEdBQUdLLE1BQWY7O0FBRUEsVUFBSSxPQUFPQSxNQUFNLENBQUNQLE1BQUQsQ0FBYixLQUEwQixVQUE5QixFQUEwQztBQUN0Q0UsUUFBQUEsWUFBWSxHQUFHLElBQUljLG9CQUFKLENBQVkzQyxTQUFTLENBQUM0QyxTQUFWLENBQW9CQyxVQUFoQyxFQUE0QyxxQkFBcUJsQixNQUFyQixHQUE4QixhQUExRSxDQUFmO0FBQ0E7QUFDSDs7QUFFRCxVQUFJckIsSUFBSixFQUFVO0FBQ040QixRQUFBQSxNQUFNLENBQUNZLFdBQVAsQ0FBbUJ4QyxJQUFuQjtBQUNIOztBQUVENEIsTUFBQUEsTUFBTSxDQUFDUCxNQUFELENBQU4sQ0FBZUMsSUFBZixFQUFxQixDQUFDSyxHQUFELEVBQU1jLEdBQU4sS0FBYztBQUMvQixZQUFJZCxHQUFHLEtBQUssSUFBWixFQUFrQjtBQUNkSCxVQUFBQSxNQUFNLEdBQUcsSUFBSWEsb0JBQUosQ0FBWTNDLFNBQVMsQ0FBQzRDLFNBQVYsQ0FBb0JDLFVBQWhDLEVBQTRDWixHQUFHLENBQUNlLElBQUosQ0FBU0MsUUFBVCxDQUFrQkMsSUFBbEIsQ0FBdUJDLEtBQXZCLENBQTZCQyxXQUF6RSxDQUFUO0FBQ0E7QUFDSDs7QUFFRHRCLFFBQUFBLE1BQU0sR0FBR2lCLEdBQVQ7QUFDSCxPQVBELEVBT0csRUFBRSxHQUFHdkMsT0FBTDtBQUFjLFdBQUdEO0FBQWpCLE9BUEg7QUFRSCxLQXBDRDtBQXNDQUgsSUFBQUEsT0FBTyxDQUFDaUQsU0FBUixDQUFrQixNQUFNLENBQUN4QixZQUF6Qjs7QUFDQSxRQUFJQSxZQUFZLENBQUN5QixJQUFiLEtBQXNCdEQsU0FBUyxDQUFDNEMsU0FBVixDQUFvQkMsVUFBOUMsRUFBMEQ7QUFDdEQsWUFBTWhCLFlBQU47QUFDSDs7QUFFRHpCLElBQUFBLE9BQU8sQ0FBQ2lELFNBQVIsQ0FBa0IsTUFBTSxDQUFDdkIsTUFBekI7O0FBQ0EsUUFBSUEsTUFBTSxDQUFDd0IsSUFBUCxLQUFnQnRELFNBQVMsQ0FBQzRDLFNBQVYsQ0FBb0JDLFVBQXhDLEVBQW9EO0FBQ2hELFlBQU1mLE1BQU47QUFDSDs7QUFFRCxXQUFPQSxNQUFQO0FBQ0gsR0FyREQ7QUF1REE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSTVCLEVBQUFBLE1BQU0sQ0FBQ3FELFFBQVAsR0FBa0IsVUFBUzdCLE9BQVQsRUFBa0I7QUFDaEMsUUFBSUcsWUFBWSxHQUFHLElBQW5CO0FBRUF4QixJQUFBQSxJQUFJLENBQUMwQixZQUFMLENBQWtCTCxPQUFsQixFQUEwQjtBQUFFTSxNQUFBQSxZQUFZLEVBQUUsRUFBRSxHQUFHeEIsT0FBTDtBQUFjLFdBQUdEO0FBQWpCO0FBQWhCLEtBQTFCLEVBQTRFLENBQUMwQixHQUFELEVBQU1DLE1BQU4sS0FBaUI7QUFDekYsVUFBSUEsTUFBTSxLQUFLQyxTQUFmLEVBQTBCO0FBQ3RCLFlBQUlDLEdBQUcsR0FBSSx1QkFBWDs7QUFDQSxZQUFJSCxHQUFHLENBQUNJLE9BQVIsRUFBaUI7QUFDYixjQUFJQyxPQUFPLEdBQUdMLEdBQUcsQ0FBQ0ksT0FBbEI7QUFDQSxjQUFJRSxlQUFlLEdBQUdELE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixJQUFoQixDQUF0Qjs7QUFDQSxjQUFJRCxlQUFlLEdBQUcsQ0FBdEIsRUFBeUI7QUFDckJELFlBQUFBLE9BQU8sR0FBR0wsR0FBRyxDQUFDSSxPQUFKLENBQVlJLFNBQVosQ0FBc0IsQ0FBdEIsRUFBeUJGLGVBQXpCLENBQVY7QUFDSDs7QUFDREgsVUFBQUEsR0FBRyxJQUFJLE9BQU9FLE9BQWQ7QUFDSCxTQVBELE1BT08sSUFBSUwsR0FBRyxLQUFLLE9BQU9BLEdBQVAsS0FBZSxRQUFmLElBQTJCQSxHQUFHLFlBQVlTLE1BQS9DLENBQVAsRUFBK0Q7QUFDbEVOLFVBQUFBLEdBQUcsSUFBSSxPQUFPSCxHQUFkO0FBQ0g7O0FBQ0RKLFFBQUFBLFlBQVksR0FBRyxJQUFJYyxvQkFBSixDQUFZM0MsU0FBUyxDQUFDNEMsU0FBVixDQUFvQkMsVUFBaEMsRUFBNENULEdBQTVDLENBQWY7QUFDQTtBQUNIOztBQUVELFVBQUk5QixJQUFKLEVBQVU7QUFDTjRCLFFBQUFBLE1BQU0sQ0FBQ1ksV0FBUCxDQUFtQnhDLElBQW5CO0FBQ0g7O0FBRUR1QixNQUFBQSxZQUFZLEdBQUdLLE1BQU0sQ0FBQ3FCLFFBQVAsRUFBZjtBQUNILEtBdEJEO0FBd0JBbkQsSUFBQUEsT0FBTyxDQUFDaUQsU0FBUixDQUFrQixNQUFNLENBQUN4QixZQUF6Qjs7QUFDQSxRQUFJQSxZQUFZLENBQUN5QixJQUFiLEtBQXNCdEQsU0FBUyxDQUFDNEMsU0FBVixDQUFvQkMsVUFBOUMsRUFBMEQ7QUFDdEQsWUFBTWhCLFlBQU47QUFDSDs7QUFFRCxXQUFPQSxZQUFQO0FBQ0gsR0FqQ0Q7O0FBbUNBLFNBQU8zQixNQUFQO0FBQ0gsQ0EzS0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBzb2FwXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggU09BUCBiYXNlZCBXZWIgU2VydmljZXMuXHJcbiAqL1xyXG5cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxudmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgZGVhc3luYyA9IHJlcXVpcmUoJ2RlYXN5bmMnKTtcclxuICAgIHZhciBzb2FwID0gcmVxdWlyZSgnc29hcCcpO1xyXG4gICAgdmFyIGF1dGggPSBudWxsO1xyXG4gICAgdmFyIHByb3h5T3B0aW9ucyA9IHt9O1xyXG4gICAgdmFyIG9wdGlvbnMgPSB7XHJcbiAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUuaXNJbml0aWFsaXplZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyBwcm94eSB1cmwgdG8gYmUgdXNlZCBmb3IgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2VydmljZS5cclxuICAgICAqIEBmdW5jdGlvbiBzZXRQcm94eVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCAtIFByb3h5IHVybC4gSW52b2NhdGlvbiB3aXRob3V0IGFyZ3VtZW50cyB3aWxsIHJlbW92ZSBhbnkgcHJldmlvdXNseSBzZXQgdXJsLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuc2V0UHJveHkgPSBmdW5jdGlvbih1cmwpIHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIHByb3h5T3B0aW9ucyA9ICB7IHByb3h5OiB1cmwgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwcm94eU9wdGlvbnMgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyBCYXNpYyBBdXRoZW50aWNhdGlvbiBkZXRhaWxzIHRvIGJlIHVzZWQgZm9yIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXV0aEJhc2ljXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXNlciAtIFVzZXJuYW1lLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBhc3MgLSBQYXNzd29yZC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmF1dGhCYXNpYyA9IGZ1bmN0aW9uKHVzZXIsIHBhc3MpIHtcclxuICAgICAgICBhdXRoID0gbmV3IHNvYXAuQmFzaWNBdXRoU2VjdXJpdHkodXNlciwgcGFzcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyBCZWFyZXIgVG9rZW4gQXV0aGVudGljYXRpb24gZGV0YWlscyB0byBiZSB1c2VkIGZvciBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZXJ2aWNlLlxyXG4gICAgICogQGZ1bmN0aW9uIGF1dGhCZWFyZXJcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0b2tlbiAtIFRva2VuLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuYXV0aEJlYXJlciA9IGZ1bmN0aW9uKHRva2VuKSB7XHJcbiAgICAgICAgYXV0aCA9IG5ldyBzb2FwLkJlYXJlclNlY3VyaXR5KHRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXRzIE5UTE0gQXV0aGVudGljYXRpb24gZGV0YWlscyB0byBiZSB1c2VkIGZvciBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZXJ2aWNlLlxyXG4gICAgICogQGZ1bmN0aW9uIGF1dGhOVExNXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXNlciAtIFVzZXJuYW1lLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHBhc3MgLSBQYXNzd29yZC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gLSBEb21haW4uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gd29ya3N0YXRpb24gLSBXb3Jrc3RhdGlvbi5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmF1dGhOVExNID0gZnVuY3Rpb24odXNlciwgcGFzcywgZG9tYWluLCB3b3Jrc3RhdGlvbikge1xyXG4gICAgICAgIGF1dGggPSBuZXcgc29hcC5OVExNU2VjdXJpdHkodXNlciwgcGFzcywgZG9tYWluLCB3b3Jrc3RhdGlvbik7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhdGVzIGEgU09BUCByZXF1ZXN0IGFuZCByZXR1cm5zIHRoZSByZXNwb25zZS5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB3c2RsVXJsIC0gVVJMIHBvaW50aW5nIHRvIHRoZSBXU0RMIFhNTC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2QgLSBNZXRob2QgbmFtZSAoY2FzZSBzZW5zaXRpdmUpLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBhcmdzIC0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGFyZ3VtZW50cy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3BvbnNlIG9iamVjdC5cclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gZ2V0IFNPQVAgc2VydmljZSBkZXNjcmlwdGlvbiwgc28gd2UgY2FuIHVuZGVyc3RhbmQgd2hhdCBtZXRob2RzIGl0IHByb3ZpZGVzLFxyXG4gICAgICogLy8gd2hhdCBpbnB1dCBwYXJhbWV0ZXJzIGl0IGV4cGVjdHMsIGFuZCB3aGF0IGlzIHRoZSBvdXRwdXQgc3RydWN0dXJlLlxyXG4gICAgICogdmFyIHNlcnZpY2VVcmwgPSAnaHR0cDovL3d3dy5kYXRhYWNjZXNzLmNvbS93ZWJzZXJ2aWNlc3NlcnZlci9udW1iZXJjb252ZXJzaW9uLndzbz9XU0RMJztcclxuICAgICAqIHZhciBzZXJ2aWNlRGVzY3JpcHRpb24gPSBzb2FwLmRlc2NyaWJlKHNlcnZpY2VVcmwpO1xyXG4gICAgICogbG9nLmluZm8oc2VydmljZURlc2NyaXB0aW9uKTtcclxuICAgICAqIFxyXG4gICAgICogLy8gTnVtYmVyVG9Xb3JkcyBtZXRob2QgaW4gdGhpcyBzZXJ2aWNlIGNvbnZlcnRzIG51bWJlciB0byB3b3Jkcy5cclxuICAgICAqIHZhciByZXN1bHQgPSBzb2FwLmdldChzZXJ2aWNlVXJsLCAnTnVtYmVyVG9Xb3JkcycsIHsgJ3ViaU51bSc6IDIwMTkgfSk7XHJcbiAgICAgKiBsb2cuaW5mbyhyZXN1bHQuTnVtYmVyVG9Xb3Jkc1Jlc3VsdCk7XHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXQgPSBmdW5jdGlvbih3c2RsVXJsLCBtZXRob2QsIGFyZ3MpIHtcclxuICAgICAgICB2YXIgcmVzdWx0Q2xpZW50ID0gbnVsbDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgc29hcC5jcmVhdGVDbGllbnQod3NkbFVybCwgeyB3c2RsX29wdGlvbnM6IHsgLi4ub3B0aW9ucywgLi4ucHJveHlPcHRpb25zIH19LCAoZXJyLCBjbGllbnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNsaWVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbXNnID0gICdFcnJvciBjcmVhdGluZyBjbGllbnQnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvYXBNc2cgPSBlcnIubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RCcmVha0luZGV4ID0gc29hcE1zZy5pbmRleE9mKCdcXG4nKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RCcmVha0luZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb2FwTXNnID0gZXJyLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGZpcnN0QnJlYWtJbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG1zZyArPSAnOiAnICsgc29hcE1zZztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyICYmICh0eXBlb2YgZXJyID09PSAnc3RyaW5nJyB8fCBlcnIgaW5zdGFuY2VvZiBTdHJpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbXNnICs9ICc6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHRDbGllbnQgPSBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNPQVBfRVJST1IsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlc3VsdENsaWVudCA9IGNsaWVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2xpZW50W21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdENsaWVudCA9IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUiwgJ05vIG1ldGhvZCBuYW1lZCAnICsgbWV0aG9kICsgJyB3YXMgZm91bmQuJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChhdXRoKSB7XHJcbiAgICAgICAgICAgICAgICBjbGllbnQuc2V0U2VjdXJpdHkoYXV0aCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNsaWVudFttZXRob2RdKGFyZ3MsIChlcnIsIHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUiwgZXJyLnJvb3QuRW52ZWxvcGUuQm9keS5GYXVsdC5mYXVsdHN0cmluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlcztcclxuICAgICAgICAgICAgfSwgeyAuLi5vcHRpb25zLCAuLi5wcm94eU9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFyZXN1bHRDbGllbnQpO1xyXG4gICAgICAgIGlmIChyZXN1bHRDbGllbnQudHlwZSA9PT0gZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SKSB7XHJcbiAgICAgICAgICAgIHRocm93IHJlc3VsdENsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFyZXN1bHQpO1xyXG4gICAgICAgIGlmIChyZXN1bHQudHlwZSA9PT0gZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SKSB7XHJcbiAgICAgICAgICAgIHRocm93IHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBTT0FQIHNlcnZpY2UgZGVzY3JpcHRpb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gZGVzY3JpYmVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB3c2RsVXJsIC0gVVJMIHBvaW50aW5nIHRvIHRoZSBXU0RMIFhNTC5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gU2VydmljZSBkZXNjcmlwdGlvbi5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmRlc2NyaWJlID0gZnVuY3Rpb24od3NkbFVybCkge1xyXG4gICAgICAgIHZhciByZXN1bHRDbGllbnQgPSBudWxsO1xyXG5cclxuICAgICAgICBzb2FwLmNyZWF0ZUNsaWVudCh3c2RsVXJsLHsgd3NkbF9vcHRpb25zOiB7IC4uLm9wdGlvbnMsIC4uLnByb3h5T3B0aW9ucyB9fSwgKGVyciwgY2xpZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjbGllbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1zZyA9ICAnRXJyb3IgY3JlYXRpbmcgY2xpZW50JztcclxuICAgICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzb2FwTXNnID0gZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0QnJlYWtJbmRleCA9IHNvYXBNc2cuaW5kZXhPZignXFxuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0QnJlYWtJbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc29hcE1zZyA9IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCBmaXJzdEJyZWFrSW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBtc2cgKz0gJzogJyArIHNvYXBNc2c7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVyciAmJiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycgfHwgZXJyIGluc3RhbmNlb2YgU3RyaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1zZyArPSAnOiAnICsgZXJyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0Q2xpZW50ID0gbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SLCBtc2cpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoYXV0aCkge1xyXG4gICAgICAgICAgICAgICAgY2xpZW50LnNldFNlY3VyaXR5KGF1dGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXN1bHRDbGllbnQgPSBjbGllbnQuZGVzY3JpYmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIXJlc3VsdENsaWVudCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdENsaWVudC50eXBlID09PSBlcnJIZWxwZXIuZXJyb3JDb2RlLlNPQVBfRVJST1IpIHtcclxuICAgICAgICAgICAgdGhyb3cgcmVzdWx0Q2xpZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdENsaWVudDtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1vZHVsZTtcclxufTtcclxuIl19
247
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1zb2FwLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwic29hcCIsImF1dGgiLCJwcm94eU9wdGlvbnMiLCJvcHRpb25zIiwicmVqZWN0VW5hdXRob3JpemVkIiwibGFzdFJlc3BvbnNlSGVhZGVycyIsImlzSW5pdGlhbGl6ZWQiLCJzZXRQcm94eSIsInVybCIsInByb3h5IiwiYXV0aEJhc2ljIiwidXNlciIsInBhc3MiLCJCYXNpY0F1dGhTZWN1cml0eSIsImF1dGhCZWFyZXIiLCJ0b2tlbiIsIkJlYXJlclNlY3VyaXR5IiwiYXV0aE5UTE0iLCJkb21haW4iLCJ3b3Jrc3RhdGlvbiIsIk5UTE1TZWN1cml0eSIsImdldCIsIndzZGxVcmwiLCJtZXRob2QiLCJhcmdzIiwicmVzdWx0Q2xpZW50IiwicmVzdWx0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJjcmVhdGVDbGllbnQiLCJ3c2RsX29wdGlvbnMiLCJlcnIiLCJjbGllbnQiLCJ1bmRlZmluZWQiLCJtc2ciLCJtZXNzYWdlIiwic29hcE1zZyIsImZpcnN0QnJlYWtJbmRleCIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJTdHJpbmciLCJPeEVycm9yIiwiZXJyb3JDb2RlIiwiU09BUF9FUlJPUiIsInNldFNlY3VyaXR5IiwicmVzIiwicm9vdCIsIkVudmVsb3BlIiwiQm9keSIsIkZhdWx0IiwiZmF1bHRzdHJpbmciLCJ0eXBlIiwiZ2V0TGFzdFJlc3BvbnNlSGVhZGVycyIsImRlc2NyaWJlIl0sIm1hcHBpbmdzIjoiOzs7O0FBY0E7Ozs7QUFkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0EsSUFBSUEsU0FBUyxHQUFHQyxPQUFPLENBQUMsa0JBQUQsQ0FBdkI7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixZQUFXO0FBQ3hC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Z2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgc29hcFxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIFNPQVAgYmFzZWQgV2ViIFNlcnZpY2VzLlxyXG4gKi9cclxuXHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbnZhciBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHNvYXAgPSByZXF1aXJlKCdzb2FwJyk7XHJcbiAgICB2YXIgYXV0aCA9IG51bGw7XHJcbiAgICB2YXIgcHJveHlPcHRpb25zID0ge307XHJcbiAgICB2YXIgb3B0aW9ucyA9IHtcclxuICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgdmFyIGxhc3RSZXNwb25zZUhlYWRlcnMgPSBudWxsO1xyXG5cclxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXRzIHByb3h5IHVybCB0byBiZSB1c2VkIGZvciBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZXJ2aWNlLlxyXG4gICAgICogQGZ1bmN0aW9uIHNldFByb3h5XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIC0gUHJveHkgdXJsLiBJbnZvY2F0aW9uIHdpdGhvdXQgYXJndW1lbnRzIHdpbGwgcmVtb3ZlIGFueSBwcmV2aW91c2x5IHNldCB1cmwuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5zZXRQcm94eSA9IGZ1bmN0aW9uKHVybCkge1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgcHJveHlPcHRpb25zID0gIHsgcHJveHk6IHVybCB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHByb3h5T3B0aW9ucyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXRzIEJhc2ljIEF1dGhlbnRpY2F0aW9uIGRldGFpbHMgdG8gYmUgdXNlZCBmb3IgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2VydmljZS5cclxuICAgICAqIEBmdW5jdGlvbiBhdXRoQmFzaWNcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1c2VyIC0gVXNlcm5hbWUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGFzcyAtIFBhc3N3b3JkLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuYXV0aEJhc2ljID0gZnVuY3Rpb24odXNlciwgcGFzcykge1xyXG4gICAgICAgIGF1dGggPSBuZXcgc29hcC5CYXNpY0F1dGhTZWN1cml0eSh1c2VyLCBwYXNzKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXRzIEJlYXJlciBUb2tlbiBBdXRoZW50aWNhdGlvbiBkZXRhaWxzIHRvIGJlIHVzZWQgZm9yIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXV0aEJlYXJlclxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRva2VuIC0gVG9rZW4uXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5hdXRoQmVhcmVyID0gZnVuY3Rpb24odG9rZW4pIHtcclxuICAgICAgICBhdXRoID0gbmV3IHNvYXAuQmVhcmVyU2VjdXJpdHkodG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgTlRMTSBBdXRoZW50aWNhdGlvbiBkZXRhaWxzIHRvIGJlIHVzZWQgZm9yIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gYXV0aE5UTE1cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1c2VyIC0gVXNlcm5hbWUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcGFzcyAtIFBhc3N3b3JkLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiAtIERvbWFpbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB3b3Jrc3RhdGlvbiAtIFdvcmtzdGF0aW9uLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuYXV0aE5UTE0gPSBmdW5jdGlvbih1c2VyLCBwYXNzLCBkb21haW4sIHdvcmtzdGF0aW9uKSB7XHJcbiAgICAgICAgYXV0aCA9IG5ldyBzb2FwLk5UTE1TZWN1cml0eSh1c2VyLCBwYXNzLCBkb21haW4sIHdvcmtzdGF0aW9uKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWF0ZXMgYSBTT0FQIHJlcXVlc3QgYW5kIHJldHVybnMgdGhlIHJlc3BvbnNlLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHdzZGxVcmwgLSBVUkwgcG9pbnRpbmcgdG8gdGhlIFdTREwgWE1MLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZCAtIE1ldGhvZCBuYW1lIChjYXNlIHNlbnNpdGl2ZSkuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IGFyZ3MgLSBPYmplY3QgY29udGFpbmluZyB0aGUgYXJndW1lbnRzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzcG9uc2Ugb2JqZWN0LlxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiAvLyBnZXQgU09BUCBzZXJ2aWNlIGRlc2NyaXB0aW9uLCBzbyB3ZSBjYW4gdW5kZXJzdGFuZCB3aGF0IG1ldGhvZHMgaXQgcHJvdmlkZXMsXHJcbiAgICAgKiAvLyB3aGF0IGlucHV0IHBhcmFtZXRlcnMgaXQgZXhwZWN0cywgYW5kIHdoYXQgaXMgdGhlIG91dHB1dCBzdHJ1Y3R1cmUuXHJcbiAgICAgKiB2YXIgc2VydmljZVVybCA9ICdodHRwOi8vd3d3LmRhdGFhY2Nlc3MuY29tL3dlYnNlcnZpY2Vzc2VydmVyL251bWJlcmNvbnZlcnNpb24ud3NvP1dTREwnO1xyXG4gICAgICogdmFyIHNlcnZpY2VEZXNjcmlwdGlvbiA9IHNvYXAuZGVzY3JpYmUoc2VydmljZVVybCk7XHJcbiAgICAgKiBsb2cuaW5mbyhzZXJ2aWNlRGVzY3JpcHRpb24pO1xyXG4gICAgICogXHJcbiAgICAgKiAvLyBOdW1iZXJUb1dvcmRzIG1ldGhvZCBpbiB0aGlzIHNlcnZpY2UgY29udmVydHMgbnVtYmVyIHRvIHdvcmRzLlxyXG4gICAgICogdmFyIHJlc3VsdCA9IHNvYXAuZ2V0KHNlcnZpY2VVcmwsICdOdW1iZXJUb1dvcmRzJywgeyAndWJpTnVtJzogMjAxOSB9KTtcclxuICAgICAqIGxvZy5pbmZvKHJlc3VsdC5OdW1iZXJUb1dvcmRzUmVzdWx0KTtcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmdldCA9IGFzeW5jIGZ1bmN0aW9uKHdzZGxVcmwsIG1ldGhvZCwgYXJncykge1xyXG4gICAgICAgIHZhciByZXN1bHRDbGllbnQgPSBudWxsO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBudWxsO1xyXG5cclxuICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc29hcC5jcmVhdGVDbGllbnQod3NkbFVybCwgeyB3c2RsX29wdGlvbnM6IHsgLi4ub3B0aW9ucywgLi4ucHJveHlPcHRpb25zIH19LCAoZXJyLCBjbGllbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9ICAnRXJyb3IgY3JlYXRpbmcgY2xpZW50JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc29hcE1zZyA9IGVyci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0QnJlYWtJbmRleCA9IHNvYXBNc2cuaW5kZXhPZignXFxuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RCcmVha0luZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYXBNc2cgPSBlcnIubWVzc2FnZS5zdWJzdHJpbmcoMCwgZmlyc3RCcmVha0luZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnOiAnICsgc29hcE1zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgKHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnIHx8IGVyciBpbnN0YW5jZW9mIFN0cmluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnOiAnICsgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdENsaWVudCA9IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUiwgbXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRDbGllbnQgPSBjbGllbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2xpZW50W21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q2xpZW50ID0gbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SLCAnTm8gbWV0aG9kIG5hbWVkICcgKyBtZXRob2QgKyAnIHdhcyBmb3VuZC4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQuc2V0U2VjdXJpdHkoYXV0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjbGllbnRbbWV0aG9kXShhcmdzLCAoZXJyLCByZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFJlc3BvbnNlSGVhZGVycyA9IGNsaWVudC5sYXN0UmVzcG9uc2VIZWFkZXJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNPQVBfRVJST1IsIGVyci5yb290LkVudmVsb3BlLkJvZHkuRmF1bHQuZmF1bHRzdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIHsgLi4ub3B0aW9ucywgLi4ucHJveHlPcHRpb25zIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHRDbGllbnQudHlwZSA9PT0gZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SKSB7XHJcbiAgICAgICAgICAgIHRocm93IHJlc3VsdENsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHQudHlwZSA9PT0gZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SKSB7XHJcbiAgICAgICAgICAgIHRocm93IHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBsYXN0IHJlc3BvbnNlIGhlYWRlcnMuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0TGFzdFJlc3BvbnNlSGVhZGVyc1xyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBJbmNvbWluZ0h0dHBIZWFkZXJzIChodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vUG93ZXJCSS1KYXZhU2NyaXB0L2ludGVyZmFjZXMvX25vZGVfbW9kdWxlc19fdHlwZXNfbm9kZV9odHRwMl9kXy5faHR0cDJfLmluY29taW5naHR0cGhlYWRlcnMuaHRtbCkuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRMYXN0UmVzcG9uc2VIZWFkZXJzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIGxhc3RSZXNwb25zZUhlYWRlcnM7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBTT0FQIHNlcnZpY2UgZGVzY3JpcHRpb24uXHJcbiAgICAgKiBAZnVuY3Rpb24gZGVzY3JpYmVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB3c2RsVXJsIC0gVVJMIHBvaW50aW5nIHRvIHRoZSBXU0RMIFhNTC5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gU2VydmljZSBkZXNjcmlwdGlvbi5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmRlc2NyaWJlID0gYXN5bmMgZnVuY3Rpb24od3NkbFVybCkge1xyXG4gICAgICAgIHZhciByZXN1bHRDbGllbnQgPSBudWxsO1xyXG5cclxuICAgICAgICBhd2FpdCAoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc29hcC5jcmVhdGVDbGllbnQod3NkbFVybCx7IHdzZGxfb3B0aW9uczogeyAuLi5vcHRpb25zLCAuLi5wcm94eU9wdGlvbnMgfX0sIChlcnIsIGNsaWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGllbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gICdFcnJvciBjcmVhdGluZyBjbGllbnQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb2FwTXNnID0gZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RCcmVha0luZGV4ID0gc29hcE1zZy5pbmRleE9mKCdcXG4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEJyZWFrSW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29hcE1zZyA9IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCBmaXJzdEJyZWFrSW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9ICc6ICcgKyBzb2FwTXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVyciAmJiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycgfHwgZXJyIGluc3RhbmNlb2YgU3RyaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9ICc6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q2xpZW50ID0gbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SLCBtc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC5zZXRTZWN1cml0eShhdXRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdENsaWVudCA9IGNsaWVudC5kZXNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkoKTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdENsaWVudC50eXBlID09PSBlcnJIZWxwZXIuZXJyb3JDb2RlLlNPQVBfRVJST1IpIHtcclxuICAgICAgICAgICAgdGhyb3cgcmVzdWx0Q2xpZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdENsaWVudDtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1vZHVsZTtcclxufTtcclxuIl19
@@ -4,6 +4,8 @@ require("source-map-support/register");
4
4
 
5
5
  var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
6
6
 
7
+ var _util = _interopRequireDefault(require("../lib/util"));
8
+
7
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
10
 
9
11
  /*
@@ -20,8 +22,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
20
22
  * @description Provides methods for working with Twilio service.
21
23
  */
22
24
  module.exports = function () {
23
- const deasync = require('deasync');
24
-
25
25
  const utils = require('./utils');
26
26
 
27
27
  const OxError = this.OxError = _OxygenError.default;
@@ -72,7 +72,6 @@ module.exports = function () {
72
72
  var msg;
73
73
  var now = Date.now();
74
74
  var earliestMessageDate = new Date(now - notOlderThan);
75
- var msgsProcessed = false;
76
75
 
77
76
  while (!msg && Date.now() - now < timeout) {
78
77
  await (() => {
@@ -100,27 +99,25 @@ module.exports = function () {
100
99
  }
101
100
  }
102
101
 
103
- msgsProcessed = true;
104
102
  resolve();
105
103
  });
106
104
  });
107
105
  })();
108
- deasync.loopWhile(() => !msgsProcessed);
109
- deasync.sleep(800);
106
+ await _util.default.sleep(800);
110
107
  }
111
108
 
112
109
  if (!msg) {
113
110
  throw new OxError(errHelper.errorCode.TWILIO_ERROR, "Couldn't get the SMS within " + timeout + 'ms.');
114
111
  }
115
112
 
116
- var removed;
117
-
118
113
  if (removeOnRead) {
119
- _client.messages(msg.sid).remove().then(() => {
120
- removed = true;
121
- });
122
-
123
- deasync.loopWhile(() => !removed);
114
+ await (() => {
115
+ return new Promise((resolve, reject) => {
116
+ _client.messages(msg.sid).remove().then(() => {
117
+ resolve();
118
+ });
119
+ });
120
+ })();
124
121
  }
125
122
 
126
123
  return msg.body;
@@ -138,23 +135,26 @@ module.exports = function () {
138
135
  */
139
136
 
140
137
 
141
- module.sendSms = function (from, to, message) {
138
+ module.sendSms = async function (from, to, message) {
142
139
  helpers.assertArgumentNonEmptyString(from, 'from');
143
140
  helpers.assertArgumentNonEmptyString(to, 'to');
144
141
  helpers.assertArgumentNonEmptyString(message, 'message');
145
142
  var response = null;
146
-
147
- _client.messages.create({
148
- body: message,
149
- from: from,
150
- to: to
151
- }).then(message => {
152
- response = message.sid;
153
- }).catch(err => {
154
- response = err;
155
- });
156
-
157
- deasync.loopWhile(() => !response);
143
+ await (() => {
144
+ return new Promise((resolve, reject) => {
145
+ _client.messages.create({
146
+ body: message,
147
+ from: from,
148
+ to: to
149
+ }).then(message => {
150
+ response = message.sid;
151
+ resolve();
152
+ }).catch(err => {
153
+ response = err;
154
+ resolve();
155
+ });
156
+ });
157
+ })();
158
158
 
159
159
  if (response.message) {
160
160
  var msg = response.message;
@@ -189,4 +189,4 @@ module.exports = function () {
189
189
 
190
190
  return module;
191
191
  };
192
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS10d2lsaW8uanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsImRlYXN5bmMiLCJyZXF1aXJlIiwidXRpbHMiLCJPeEVycm9yIiwiT3hFcnJvckNvbnRzcnVjdG9yIiwiZXJySGVscGVyIiwiaGVscGVycyIsIl9jbGllbnQiLCJpc0luaXRpYWxpemVkIiwidW5kZWZpbmVkIiwiaW5pdCIsImFjY291bnRTaWQiLCJhdXRoVG9rZW4iLCJnZXRMYXN0U21zIiwicmVtb3ZlT25SZWFkIiwidGltZW91dCIsIm5vdE9sZGVyVGhhbiIsImZyb21OdW1iZXIiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRTdHJpbmciLCJtc2ciLCJub3ciLCJEYXRlIiwiZWFybGllc3RNZXNzYWdlRGF0ZSIsIm1zZ3NQcm9jZXNzZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm1lc3NhZ2VzIiwibGlzdCIsImRhdGVTZW50QWZ0ZXIiLCJlcnIiLCJfbXNnIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJkaXJlY3Rpb24iLCJmcm9tIiwiX21zZ0RhdGUiLCJwYXJzZSIsImRhdGVDcmVhdGVkIiwibG9vcFdoaWxlIiwic2xlZXAiLCJlcnJvckNvZGUiLCJUV0lMSU9fRVJST1IiLCJyZW1vdmVkIiwic2lkIiwicmVtb3ZlIiwidGhlbiIsImJvZHkiLCJzZW5kU21zIiwidG8iLCJtZXNzYWdlIiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsInJlc3BvbnNlIiwiY3JlYXRlIiwiY2F0Y2giLCJtb3JlSW5mbyIsImNvZGUiLCJhc3NlcnRBcmd1bWVudCIsInZhbCIsIm5hbWUiLCJjYWxsIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCJdLCJtYXBw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QUMwRCwwQkFBUixHQUFxQyxDQUFDSixHQUFELEVBQU1DLElBQU4sS0FBZTNELEtBQUssQ0FBQzhELDBCQUFOLENBQWlDRixJQUFqQyxDQUFzQyxJQUF0QyxFQUE0Q0YsR0FBNUMsRUFBaURDLElBQWpELENBQXBEOztBQUNBdkQsRUFBQUEsT0FBTyxDQUFDMkQscUJBQVIsR0FBZ0MsQ0FBQ0wsR0FBRCxFQUFNQyxJQUFOLEtBQWUzRCxLQUFLLENBQUMrRCxxQkFBTixDQUE0QkgsSUFBNUIsQ0FBaUMsSUFBakMsRUFBdUNGLEdBQXZDLEVBQTRDQyxJQUE1QyxDQUEvQzs7QUFFQSxTQUFPL0QsTUFBUDtBQUNILENBakpEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgdHdpbGlvXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggVHdpbGlvIHNlcnZpY2UuXHJcbiAqL1xyXG5pbXBvcnQgT3hFcnJvckNvbnRzcnVjdG9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgZGVhc3luYyA9IHJlcXVpcmUoJ2RlYXN5bmMnKTtcclxuICAgIGNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xyXG4gICAgY29uc3QgT3hFcnJvciA9IHRoaXMuT3hFcnJvciA9IE94RXJyb3JDb250c3J1Y3RvcjtcclxuICAgIGNvbnN0IGVyckhlbHBlciA9IHRoaXMuZXJySGVscGVyID0gcmVxdWlyZSgnLi4vZXJyb3JzL2hlbHBlcicpO1xyXG4gICAgY29uc3QgaGVscGVycyA9IHRoaXMuaGVscGVycyA9IHt9O1xyXG5cclxuICAgIHZhciBfY2xpZW50O1xyXG5cclxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIF9jbGllbnQgIT09IHVuZGVmaW5lZDtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXQgVHdpbGlvIGF1dGhlbnRpY2F0aW9uIGRldGFpbHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGFjY291bnRTaWQgLSBBY2NvdW50IFNJRC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoVG9rZW4gLSBBdXRoZW50aWNhdGlvbiB0b2tlbi5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmluaXQgPSBmdW5jdGlvbihhY2NvdW50U2lkLCBhdXRoVG9rZW4pIHtcclxuICAgICAgICBfY2xpZW50ID0gcmVxdWlyZSgndHdpbGlvJykoYWNjb3VudFNpZCwgYXV0aFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgbGFzdCBTTVMgbWVzc2FnZS5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRMYXN0U21zXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlbW92ZU9uUmVhZCAtIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBhZnRlciByZWFkaW5nIGl0LlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHRpbWVvdXQgLSBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3Igd2FpdGluZyBmb3IgdGhlIG1lc3NhZ2UgdG8gYXJyaXZlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSBub3RPbGRlclRoYW4gLSBSZXRyaWV2ZSBtZXNzYWdlIG9ubHkgaWYgaXQgYXJyaXZlZCBub3QgYmVmb3JlIHRoZSBnaXZlbiB0aW1lIChpbiBtcykuIERlZmF1bHQgaXMgNCBtaW51dGVzLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBmcm9tTnVtYmVyIC0gRnJvbSBudW1iZXIgdG8gZmlsdGVyIG1lc3NhZ2VcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gU01TIHRleHQuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRMYXN0U21zID0gYXN5bmMgZnVuY3Rpb24ocmVtb3ZlT25SZWFkLCB0aW1lb3V0LCBub3RPbGRlclRoYW4sIGZyb21OdW1iZXIpIHtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbChyZW1vdmVPblJlYWQsICdyZW1vdmVPblJlYWQnKTtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBpZiAoZnJvbU51bWJlcikge1xyXG4gICAgICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50U3RyaW5nKGZyb21OdW1iZXIsICdmcm9tTnVtYmVyJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW5vdE9sZGVyVGhhbikge1xyXG4gICAgICAgICAgICBub3RPbGRlclRoYW4gPSA0KjYwKjEwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtc2c7XHJcbiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgdmFyIGVhcmxpZXN0TWVzc2FnZURhdGUgPSBuZXcgRGF0ZShub3cgLSBub3RPbGRlclRoYW4pO1xyXG4gICAgICAgIHZhciBtc2dzUHJvY2Vzc2VkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHdoaWxlICghbXNnICYmIChEYXRlLm5vdygpIC0gbm93KSA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NsaWVudC5tZXNzYWdlcy5saXN0KHsgZGF0ZVNlbnRBZnRlcjogZWFybGllc3RNZXNzYWdlRGF0ZSB9LCBmdW5jdGlvbihlcnIsIG1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMgJiYgdHlwZW9mIG1lc3NhZ2VzW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoX21zZyBvZiBtZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbXNnLmRpcmVjdGlvbiA9PSAnaW5ib3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21OdW1iZXIgJiYgX21zZy5mcm9tICE9PSBmcm9tTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbXNnRGF0ZSA9IERhdGUucGFyc2UoX21zZy5kYXRlQ3JlYXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBtZXNzYWdlIGlzIG5ld2VyIHRoYW4gdGhlIHByZXZpb3VzIG9uZSAtIHNhdmUgaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cgJiYgRGF0ZS5wYXJzZShtc2cuZGF0ZUNyZWF0ZWQpIDwgX21zZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBfbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbXNnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gX21zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtc2dzUHJvY2Vzc2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhbXNnc1Byb2Nlc3NlZCk7XHJcbiAgICAgICAgICAgIGRlYXN5bmMuc2xlZXAoODAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbXNnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVFdJTElPX0VSUk9SLCBcIkNvdWxkbid0IGdldCB0aGUgU01TIHdpdGhpbiBcIiArIHRpbWVvdXQgKyAnbXMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVtb3ZlZDtcclxuICAgICAgICBpZiAocmVtb3ZlT25SZWFkKSB7XHJcbiAgICAgICAgICAgIF9jbGllbnQubWVzc2FnZXMobXNnLnNpZCkucmVtb3ZlKCkudGhlbigoKSA9PiB7IHJlbW92ZWQgPSB0cnVlOyB9KTtcclxuICAgICAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIXJlbW92ZWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1zZy5ib2R5O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNlbmQgYW4gU01TLlxyXG4gICAgICogQGZ1bmN0aW9uIHNlbmRTbXNcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmcm9tIC0gUGhvbmUgbnVtYmVyIHRvIHNlbmQgZnJvbS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0byAtIFBob25lIG51bWJlciB0byBzZW5kIHRvLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHNlbmQuXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IE1lc3NhZ2UgU0lELlxyXG4gICAgICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAgICAgKiB0d2lsaW8uaW5pdCgnQWNjb3VudCBTaWQnLCAnQWNjb3VudCBUb2tlbicpO1xyXG4gICAgICogdHdpbGlvLnNlbmRTbXMoJysxeHh4eHh4eHh4eCcsICcrOTcyeHh4eHh4eHh4JywgJ0hlbGxvIFdvcmxkIScpO1xyXG4gICAgICovXHJcbiAgICBtb2R1bGUuc2VuZFNtcyA9IGZ1bmN0aW9uKGZyb20sIHRvLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKGZyb20sICdmcm9tJyk7XHJcbiAgICAgICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKHRvLCAndG8nKTtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcobWVzc2FnZSwgJ21lc3NhZ2UnKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbnVsbDtcclxuXHJcbiAgICAgICAgX2NsaWVudC5tZXNzYWdlcy5jcmVhdGUoe1xyXG4gICAgICAgICAgICBib2R5OiBtZXNzYWdlLFxyXG4gICAgICAgICAgICBmcm9tOiBmcm9tLFxyXG4gICAgICAgICAgICB0bzogdG9cclxuICAgICAgICB9KS50aGVuKG1lc3NhZ2UgPT4ge1xyXG4gICAgICAgICAgICByZXNwb25zZSA9IG1lc3NhZ2Uuc2lkO1xyXG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlID0gZXJyO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhcmVzcG9uc2UpO1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UubWVzc2FnZSkge1xyXG4gICAgICAgICAgICB2YXIgbXNnID0gcmVzcG9uc2UubWVzc2FnZTtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLm1vcmVJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBtc2cgKz0gJyBGb3IgbW9yZSBpbmZvOiAnICsgcmVzcG9uc2UubW9yZUluZm87XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgbXNnID0gJ1VuYWJsZSB0byBjb25uZWN0IHRvIFR3aWxpbzogJyArIG1zZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlRXSUxJT19FUlJPUiwgbXNnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH07XHJcblxyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudCA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50LmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudFN0cmluZyA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50U3RyaW5nLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSAodmFsLCBuYW1lKSA9PiB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlci5jYWxsKHRoaXMsIHZhbCwgbmFtZSk7XHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSAodmFsLCBuYW1lKSA9PiB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSAodmFsLCBuYW1lKSA9PiB1dGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbC5jYWxsKHRoaXMsIHZhbCwgbmFtZSk7XHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dC5jYWxsKHRoaXMsIHZhbCwgbmFtZSk7XHJcblxyXG4gICAgcmV0dXJuIG1vZHVsZTtcclxufTtcclxuIl19
192
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS10d2lsaW8uanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInV0aWxzIiwicmVxdWlyZSIsIk94RXJyb3IiLCJPeEVycm9yQ29udHNydWN0b3IiLCJlcnJIZWxwZXIiLCJoZWxwZXJzIiwiX2NsaWVudCIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwiYWNjb3VudFNpZCIsImF1dGhUb2tlbiIsImdldExhc3RTbXMiLCJyZW1vdmVPblJlYWQiLCJ0aW1lb3V0Iiwibm90T2xkZXJUaGFuIiwiZnJvbU51bWJlciIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsIm1zZyIsIm5vdyIsIkRhdGUiLCJlYXJsaWVzdE1lc3NhZ2VEYXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJtZXNzYWdlcyIsImxpc3QiLCJkYXRlU2VudEFmdGVyIiwiZXJyIiwiX21zZyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZGlyZWN0aW9uIiwiZnJvbSIsIl9tc2dEYXRlIiwicGFyc2UiLCJkYXRlQ3JlYXRlZCIsImxpYlV0aWxzIiwic2xlZXAiLCJlcnJvckNvZGUiLCJUV0lMSU9fRVJST1IiLCJzaWQiLCJyZW1vdmUiLCJ0aGVuIiwiYm9keSIsInNlbmRTbXMiLCJ0byIsIm1lc3NhZ2UiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicmVzcG9uc2UiLCJjcmVhdGUiLCJjYXRjaCIsIm1vcmVJbmZvIiwiY29kZSIsImFzc2VydEFyZ3VtZW50IiwidmFsIiwibmFtZSIsImNhbGwiLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7O0FBYUE7O0FBQ0E7Ozs7QUFkQTtBQUNBO0FB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Q0FBc0MsSUFBdEMsRUFBNENGLEdBQTVDLEVBQWlEQyxJQUFqRCxDQUFwRDs7QUFDQXJELEVBQUFBLE9BQU8sQ0FBQ3lELHFCQUFSLEdBQWdDLENBQUNMLEdBQUQsRUFBTUMsSUFBTixLQUFlMUQsS0FBSyxDQUFDOEQscUJBQU4sQ0FBNEJILElBQTVCLENBQWlDLElBQWpDLEVBQXVDRixHQUF2QyxFQUE0Q0MsSUFBNUMsQ0FBL0M7O0FBRUEsU0FBTzVELE1BQVA7QUFDSCxDQWpKRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIHR3aWxpb1xyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIFR3aWxpbyBzZXJ2aWNlLlxyXG4gKi9cclxuaW1wb3J0IE94RXJyb3JDb250c3J1Y3RvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgbGliVXRpbHMgZnJvbSAnLi4vbGliL3V0aWwnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xyXG4gICAgY29uc3QgT3hFcnJvciA9IHRoaXMuT3hFcnJvciA9IE94RXJyb3JDb250c3J1Y3RvcjtcclxuICAgIGNvbnN0IGVyckhlbHBlciA9IHRoaXMuZXJySGVscGVyID0gcmVxdWlyZSgnLi4vZXJyb3JzL2hlbHBlcicpO1xyXG4gICAgY29uc3QgaGVscGVycyA9IHRoaXMuaGVscGVycyA9IHt9O1xyXG5cclxuICAgIHZhciBfY2xpZW50O1xyXG5cclxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIF9jbGllbnQgIT09IHVuZGVmaW5lZDtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXQgVHdpbGlvIGF1dGhlbnRpY2F0aW9uIGRldGFpbHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGFjY291bnRTaWQgLSBBY2NvdW50IFNJRC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoVG9rZW4gLSBBdXRoZW50aWNhdGlvbiB0b2tlbi5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmluaXQgPSBmdW5jdGlvbihhY2NvdW50U2lkLCBhdXRoVG9rZW4pIHtcclxuICAgICAgICBfY2xpZW50ID0gcmVxdWlyZSgndHdpbGlvJykoYWNjb3VudFNpZCwgYXV0aFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgbGFzdCBTTVMgbWVzc2FnZS5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRMYXN0U21zXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlbW92ZU9uUmVhZCAtIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBhZnRlciByZWFkaW5nIGl0LlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHRpbWVvdXQgLSBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3Igd2FpdGluZyBmb3IgdGhlIG1lc3NhZ2UgdG8gYXJyaXZlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSBub3RPbGRlclRoYW4gLSBSZXRyaWV2ZSBtZXNzYWdlIG9ubHkgaWYgaXQgYXJyaXZlZCBub3QgYmVmb3JlIHRoZSBnaXZlbiB0aW1lIChpbiBtcykuIERlZmF1bHQgaXMgNCBtaW51dGVzLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBmcm9tTnVtYmVyIC0gRnJvbSBudW1iZXIgdG8gZmlsdGVyIG1lc3NhZ2VcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gU01TIHRleHQuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRMYXN0U21zID0gYXN5bmMgZnVuY3Rpb24ocmVtb3ZlT25SZWFkLCB0aW1lb3V0LCBub3RPbGRlclRoYW4sIGZyb21OdW1iZXIpIHtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbChyZW1vdmVPblJlYWQsICdyZW1vdmVPblJlYWQnKTtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBpZiAoZnJvbU51bWJlcikge1xyXG4gICAgICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50U3RyaW5nKGZyb21OdW1iZXIsICdmcm9tTnVtYmVyJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW5vdE9sZGVyVGhhbikge1xyXG4gICAgICAgICAgICBub3RPbGRlclRoYW4gPSA0KjYwKjEwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtc2c7XHJcbiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgdmFyIGVhcmxpZXN0TWVzc2FnZURhdGUgPSBuZXcgRGF0ZShub3cgLSBub3RPbGRlclRoYW4pO1xyXG4gICAgICAgIHdoaWxlICghbXNnICYmIChEYXRlLm5vdygpIC0gbm93KSA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NsaWVudC5tZXNzYWdlcy5saXN0KHsgZGF0ZVNlbnRBZnRlcjogZWFybGllc3RNZXNzYWdlRGF0ZSB9LCBmdW5jdGlvbihlcnIsIG1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMgJiYgdHlwZW9mIG1lc3NhZ2VzW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoX21zZyBvZiBtZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbXNnLmRpcmVjdGlvbiA9PSAnaW5ib3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21OdW1iZXIgJiYgX21zZy5mcm9tICE9PSBmcm9tTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbXNnRGF0ZSA9IERhdGUucGFyc2UoX21zZy5kYXRlQ3JlYXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBtZXNzYWdlIGlzIG5ld2VyIHRoYW4gdGhlIHByZXZpb3VzIG9uZSAtIHNhdmUgaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cgJiYgRGF0ZS5wYXJzZShtc2cuZGF0ZUNyZWF0ZWQpIDwgX21zZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBfbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbXNnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gX21zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkoKTtcclxuICAgICAgICAgICAgYXdhaXQgbGliVXRpbHMuc2xlZXAoODAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbXNnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVFdJTElPX0VSUk9SLCBcIkNvdWxkbid0IGdldCB0aGUgU01TIHdpdGhpbiBcIiArIHRpbWVvdXQgKyAnbXMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVtb3ZlT25SZWFkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIF9jbGllbnQubWVzc2FnZXMobXNnLnNpZCkucmVtb3ZlKCkudGhlbigoKSA9PiB7IHJlc29sdmUoKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtc2cuYm9keTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZW5kIGFuIFNNUy5cclxuICAgICAqIEBmdW5jdGlvbiBzZW5kU21zXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZnJvbSAtIFBob25lIG51bWJlciB0byBzZW5kIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdG8gLSBQaG9uZSBudW1iZXIgdG8gc2VuZCB0by5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBzZW5kLlxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBNZXNzYWdlIFNJRC5cclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogdHdpbGlvLmluaXQoJ0FjY291bnQgU2lkJywgJ0FjY291bnQgVG9rZW4nKTtcclxuICAgICAqIHR3aWxpby5zZW5kU21zKCcrMXh4eHh4eHh4eHgnLCAnKzk3Mnh4eHh4eHh4eCcsICdIZWxsbyBXb3JsZCEnKTtcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLnNlbmRTbXMgPSBhc3luYyBmdW5jdGlvbihmcm9tLCB0bywgbWVzc2FnZSkge1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhmcm9tLCAnZnJvbScpO1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyh0bywgJ3RvJyk7XHJcbiAgICAgICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKG1lc3NhZ2UsICdtZXNzYWdlJyk7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tOiBmcm9tLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvOiB0b1xyXG4gICAgICAgICAgICAgICAgfSkudGhlbihtZXNzYWdlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IG1lc3NhZ2Uuc2lkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBtc2cgPSByZXNwb25zZS5tZXNzYWdlO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UubW9yZUluZm8pIHtcclxuICAgICAgICAgICAgICAgIG1zZyArPSAnIEZvciBtb3JlIGluZm86ICcgKyByZXNwb25zZS5tb3JlSW5mbztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBtc2cgPSAnVW5hYmxlIHRvIGNvbm5lY3QgdG8gVHdpbGlvOiAnICsgbXNnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVFdJTElPX0VSUk9SLCBtc2cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50ID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnQuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZy5jYWxsKHRoaXMsIHZhbCwgbmFtZSk7XHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50U3RyaW5nID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnRTdHJpbmcuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSAodmFsLCBuYW1lKSA9PiB1dGlscy5hc3NlcnRBcmd1bWVudEJvb2wuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0LmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXX0=
@@ -17,6 +17,8 @@ var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
17
17
 
18
18
  var _helper = _interopRequireDefault(require("../errors/helper"));
19
19
 
20
+ var _paramReaderExcel = _interopRequireDefault(require("../lib/param-reader-excel"));
21
+
20
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
23
 
22
24
  /*
@@ -34,8 +36,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
34
36
  */
35
37
  const MODULE_NAME = 'utils';
36
38
 
37
- const deasync = require('deasync');
38
-
39
39
  class UtilsModule extends _OxygenModule.default {
40
40
  constructor(options, context, rs, logger, modules, services) {
41
41
  super(options, context, rs, logger, modules, services);
@@ -59,10 +59,10 @@ class UtilsModule extends _OxygenModule.default {
59
59
  */
60
60
 
61
61
 
62
- pause(ms) {
62
+ async pause(ms) {
63
63
  _utils.default.assertArgumentNumberNonNegative(ms, 'ms');
64
64
 
65
- deasync.sleep(ms);
65
+ await _util.default.sleep(ms);
66
66
  }
67
67
  /**
68
68
  * @summary Decrypt text
@@ -190,8 +190,46 @@ class UtilsModule extends _OxygenModule.default {
190
190
  throw new _OxygenError.default(_helper.default.errorCode.CSV_ERROR, e.message);
191
191
  }
192
192
  }
193
+ /**
194
+ * @summary Reads data from Xlsx file
195
+ * @function readXlsx
196
+ * @param {String} filePath - Absolute path to file
197
+ * @return {Array} - Array of xlsx data
198
+ */
199
+
200
+
201
+ async readXlsx(filePath) {
202
+ const reader = new _paramReaderExcel.default();
203
+ return await reader.read(filePath);
204
+ }
205
+ /**
206
+ * @summary Uses the DNS protocol to resolve a host name
207
+ * @function dnsResolve
208
+ * @param {String} hostname - Host name to resolve.
209
+ * @param {String=} rrType - Resource record type. Default: 'A'.
210
+ * @return {String[] | Object} - Array or Object of resource records. The type and structure of individual results vary based on rrtype
211
+ */
212
+
213
+
214
+ async dnsResolve(hostname, rrType = 'A') {
215
+ _utils.default.assertArgumentNonEmptyString(hostname, 'hostname');
216
+
217
+ const rrTypes = ['A', 'AAAA', 'ANY', 'CNAME', 'MX', 'NAPTR', 'NS', 'PTR', 'SOA', 'SRV', 'TXT'];
218
+
219
+ if (!rrTypes.includes(rrType)) {
220
+ throw new _OxygenError.default(_helper.default.errorCode.SCRIPT_ERROR, `Invalid argument - 'rrType'. Available rrType values: ${rrTypes.join(', ')}`);
221
+ }
222
+
223
+ const dnsPromises = require('dns').promises;
224
+
225
+ try {
226
+ return await dnsPromises.resolve(hostname, rrType);
227
+ } catch (e) {
228
+ throw new _OxygenError.default(_helper.default.errorCode.DNS_ERROR, e.message);
229
+ }
230
+ }
193
231
 
194
232
  }
195
233
 
196
234
  exports.default = UtilsModule;
197
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS11dGlscy5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsImRlYXN5bmMiLCJyZXF1aXJlIiwiVXRpbHNNb2R1bGUiLCJPeHlnZW5Nb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjb250ZXh0IiwicnMiLCJsb2dnZXIiLCJtb2R1bGVzIiwic2VydmljZXMiLCJfYWx3YXlzSW5pdGlhbGl6ZWQiLCJfaXNJbml0aWFsaXplZCIsIm5hbWUiLCJwYXVzZSIsIm1zIiwidXRpbHMiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwic2xlZXAiLCJkZWNyeXB0IiwidGV4dCIsImxpYlV0aWxzIiwiZW5jcnlwdCIsInJlYWRDc3YiLCJmaWxlUGF0aCIsInBhcnNlIiwiZnMiLCJwYXRoIiwiZXh0IiwiZXh0bmFtZSIsIk94RXJyb3IiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIkNTVl9FUlJPUiIsImRhdGEiLCJyZWFkRmlsZVN5bmMiLCJlIiwicmVwbGFjZSIsImJvbSIsImNoYXJDb2RlQXQiLCJ0YWJsZSIsImNvbHVtbnMiLCJ0cmltIiwibWVzc2FnZSIsIndyaXRlQ3N2IiwiT2JqZWN0c1RvQ3N2IiwiY3N2IiwidG9EaXNrIiwiYWxsQ29sdW1ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBZUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7QUFwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFdBQVcsR0FBRyxPQUFwQjs7QUFJQSxNQUFNQyxPQUFPLEdBQUdDLE9BQU8sQ0FBQyxTQUFELENBQXZCOztBQUllLE1BQU1DLFdBQU4sU0FBMEJDLHFCQUExQixDQUF1QztBQUNsREMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLE9BQVYsRUFBbUJDLEVBQW5CLEVBQXVCQyxNQUF2QixFQUErQkMsT0FB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QUVFLE9BQU8rQixDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlOLG9CQUFKLENBQVlDLGdCQUFZQyxTQUFaLENBQXNCQyxTQUFsQyxFQUE2Q0csQ0FBQyxDQUFDTyxPQUEvQyxDQUFOO0FBQ0g7O0FBRUQsV0FBT0gsS0FBUDtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNrQixRQUFSSSxRQUFRLENBQUNwQixRQUFELEVBQVdVLElBQVgsRUFBaUI3QixPQUFPLEdBQUcsRUFBM0IsRUFBK0I7QUFDekMsUUFBSTtBQUNBLFlBQU13QyxZQUFZLEdBQUc1QyxPQUFPLENBQUMsZ0JBQUQsQ0FBNUI7O0FBQ0EsWUFBTTZDLEdBQUcsR0FBRyxJQUFJRCxZQUFKLENBQWlCWCxJQUFqQixDQUFaO0FBQ0EsWUFBTVksR0FBRyxDQUFDQyxNQUFKLENBQVd2QixRQUFYLEVBQXFCO0FBQUV3QixRQUFBQSxVQUFVLEVBQUUsSUFBZDtBQUFvQixXQUFHM0M7QUFBdkIsT0FBckIsQ0FBTjtBQUNILEtBSkQsQ0FJRSxPQUFPK0IsQ0FBUCxFQUFVO0FBQ1IsWUFBTSxJQUFJTixvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQkMsU0FBbEMsRUFBNkNHLENBQUMsQ0FBQ08sT0FBL0MsQ0FBTjtBQUNIO0FBQ0o7O0FBcklpRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIHV0aWxzXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtaXNjZWxsYW5lb3VzIHV0aWxpdHkgbWV0aG9kcy5cclxuICovXHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd1dGlscyc7XHJcbmltcG9ydCBPeHlnZW5Nb2R1bGUgZnJvbSAnLi4vY29yZS9PeHlnZW5Nb2R1bGUnO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBsaWJVdGlscyBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmNvbnN0IGRlYXN5bmMgPSByZXF1aXJlKCdkZWFzeW5jJyk7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFV0aWxzTW9kdWxlIGV4dGVuZHMgT3h5Z2VuTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMuX2Fsd2F5c0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogQHN1bW1hcnkgR2V0cyBtb2R1bGUgbmFtZVxyXG4gICAgICogQGZ1bmN0aW9uIG5hbWVcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gQ29uc3RhbnQgdmFsdWUgXCJ1dGlsc1wiLlxyXG4gICAgICovXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQYXVzZSB0ZXN0IGV4ZWN1dGlvbiBmb3IgdGhlIGdpdmVuIGFtb3VudCBvZiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gcGF1c2VcclxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBtcyAtIE1pbGxpc2Vjb25kcyB0byBwYXVzZSB0aGUgZXhlY3V0aW9uIGZvci5cclxuICAgICAqL1xyXG4gICAgcGF1c2UobXMpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlKG1zLCAnbXMnKTtcclxuICAgICAgICBkZWFzeW5jLnNsZWVwKG1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IERlY3J5cHQgdGV4dFxyXG4gICAgICogQGZ1bmN0aW9uIGRlY3J5cHRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IC0gVGV4dFxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBEZWNyeXB0UmVzdWx0IE9iamVjdCB3aXRoIGdldERlY3J5cHRSZXN1bHQgbWV0aG9kXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIHRvIGVuY3J5cHQgcGxhaW50ZXh0IGludG8gY2lwaGVydGV4dCBcclxuICAgICAqIGNvbnN0IGVuY3J5cHQgPSB1dGlscy5lbmNyeXB0KCdodHRwczovL3d3dy53aWtpcGVkaWEub3JnLycpO1xyXG4gICAgICogbG9nLmluZm8oZW5jcnlwdCk7IC8vIHdpbGwgcHJpbnQgYjc1N2JhMmMyZmM1MGZiYjUxMWQ1OTY4MTZjYTA2YzRmYTU2ZjRlOThjZTIyMmYzMGJjNThkNTI1MWVkNjM1ZVxyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBkZWNyeXB0IGNpcGhlcnRleHQgYW5kIHVzZSBpdCBpbiBzY3JpcHQgIFxyXG4gICAgICogY29uc3QgZGVjcnlwdCA9IHV0aWxzLmRlY3J5cHQoZW5jcnlwdCk7XHJcbiAgICAgKiBsb2cuaW5mbyhkZWNyeXB0KTsgLy8gd2lsbCBwcmludCBFTkNSWVBURURcclxuICAgICAqIFxyXG4gICAgICogd2ViLmluaXQoKTtcclxuICAgICAqIHdlYi5vcGVuKGRlY3J5cHQpOyAvLyB3aWxsIG9wZW4gaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZ2V0IG9yaWdpbmFsIHBsYWludGV4dCB1c2UgZ2V0RGVjcnlwdFJlc3VsdFxyXG4gICAgICogY29uc3QgdmFsdWUgPSBkZWNyeXB0LmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAqIGxvZy5pbmZvKHZhbHVlKTsgLy93aWxsIHByaW50IGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvXHJcbiAgICAgKi9cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHJldHVybiBsaWJVdGlscy5kZWNyeXB0KHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRW5jcnlwdCB0ZXh0XHJcbiAgICAgKiBAZnVuY3Rpb24gZW5jcnlwdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0XHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IEVuY3J5cHRlZCB0ZXh0XHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIHRvIGVuY3J5cHQgcGxhaW50ZXh0IGludG8gY2lwaGVydGV4dCBcclxuICAgICAqIGNvbnN0IGVuY3J5cHQgPSB1dGlscy5lbmNyeXB0KCdodHRwczovL3d3dy53aWtpcGVkaWEub3JnLycpO1xyXG4gICAgICogbG9nLmluZm8oZW5jcnlwdCk7IC8vIHdpbGwgcHJpbnQgYjc1N2JhMmMyZmM1MGZiYjUxMWQ1OTY4MTZjYTA2YzRmYTU2ZjRlOThjZTIyMmYzMGJjNThkNTI1MWVkNjM1ZVxyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBkZWNyeXB0IGNpcGhlcnRleHQgYW5kIHVzZSBpdCBpbiBzY3JpcHQgIFxyXG4gICAgICogY29uc3QgZGVjcnlwdCA9IHV0aWxzLmRlY3J5cHQoZW5jcnlwdCk7XHJcbiAgICAgKiBsb2cuaW5mbyhkZWNyeXB0KTsgLy8gd2lsbCBwcmludCBFTkNSWVBURURcclxuICAgICAqIFxyXG4gICAgICogd2ViLmluaXQoKTtcclxuICAgICAqIHdlYi5vcGVuKGRlY3J5cHQpOyAvLyB3aWxsIG9wZW4gaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZ2V0IG9yaWdpbmFsIHBsYWludGV4dCB1c2UgZ2V0RGVjcnlwdFJlc3VsdFxyXG4gICAgICogY29uc3QgdmFsdWUgPSBkZWNyeXB0LmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAqIGxvZy5pbmZvKHZhbHVlKTsgLy93aWxsIHByaW50IGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvXHJcbiAgICAgKi9cclxuICAgIGVuY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHJldHVybiBsaWJVdGlscy5lbmNyeXB0KHRleHQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZWFkcyBkYXRhIGZyb20gY3N2IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiByZWFkQ3N2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgKGh0dHBzOi8vY3N2LmpzLm9yZy9wYXJzZS9vcHRpb25zLylcclxuICAgICAqL1xyXG4gICAgcmVhZENzdihmaWxlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2UgPSByZXF1aXJlKCdjc3YtcGFyc2UvbGliL3N5bmMnKTtcclxuICAgICAgICB2YXIgZnMgPSByZXF1aXJlKCdmcycpO1xyXG4gICAgICAgIHZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5cclxuICAgICAgICB2YXIgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBpZiAoZXh0ICE9PSAnLmNzdicgJiYgZXh0ICE9PSAnLnR4dCcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgJ1Vuc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9uOiAnICsgZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCAnVW5hYmxlIHRvIHJlYWQgcGFyYW1ldGVycyBmaWxlOiAnICsgZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDU1ZzIHByb2R1Y2VkIGJ5IE9TIFggRXhjZWwgaGF2ZSBoZWFkZXIgdGVybWluYXRlZCB3aXRoIDBkMGQwYVxyXG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1xcclxcci9nLCAnXFxyJyk7XHJcblxyXG4gICAgICAgIC8vIHN0cmlwIEJPTSBmb3IgVVRGLThcclxuICAgICAgICB2YXIgYm9tID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2F0Y2hlcyAweEVGQkJCRiAoVVRGLTggQk9NKSBiZWNhdXNlIHRoZSBidWZmZXItdG8tc3RyaW5nXHJcbiAgICAgICAgLy8gY29udmVyc2lvbiB0cmFuc2xhdGVzIGl0IHRvIDB4RkVGRiAoVVRGLTE2IEJPTSlcclxuICAgICAgICBpZiAoZGF0YS5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcclxuICAgICAgICAgICAgYm9tID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciB0YWJsZSA9IHBhcnNlKGRhdGEsIHsgYm9tOiBib20sIGNvbHVtbnM6IHRydWUsIHRyaW06IHRydWUsIC4uLm9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgV3JpdGVzIGRhdGEgaW50byBjc3YgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHdyaXRlQ3N2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgLSBDU1YgZGF0YSBpbiBmb3JtYXQgW3tjb2x1bW5fbmFtZV8xOiAnZm9vJywgY29sdW1uX25hbWVfMjogJ2Jhcid9XVxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyAoaHR0cHM6Ly9naXRodWIuY29tL2FudG9uLWJvdC9vYmplY3RzLXRvLWNzdiNhc3luYy10b2Rpc2tmaWxlbmFtZS1vcHRpb25zKVxyXG4gICAgICovXHJcbiAgICBhc3luYyB3cml0ZUNzdihmaWxlUGF0aCwgZGF0YSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgT2JqZWN0c1RvQ3N2ID0gcmVxdWlyZSgnb2JqZWN0cy10by1jc3YnKTtcclxuICAgICAgICAgICAgY29uc3QgY3N2ID0gbmV3IE9iamVjdHNUb0NzdihkYXRhKTtcclxuICAgICAgICAgICAgYXdhaXQgY3N2LnRvRGlzayhmaWxlUGF0aCwgeyBhbGxDb2x1bW5zOiB0cnVlLCAuLi5vcHRpb25zIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
235
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS11dGlscy5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlV0aWxzTW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX2Fsd2F5c0luaXRpYWxpemVkIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwicGF1c2UiLCJtcyIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImxpYlV0aWxzIiwic2xlZXAiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHQiLCJyZWFkQ3N2IiwiZmlsZVBhdGgiLCJwYXJzZSIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJleHQiLCJleHRuYW1lIiwiT3hFcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1NWX0VSUk9SIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsImUiLCJyZXBsYWNlIiwiYm9tIiwiY2hhckNvZGVBdCIsInRhYmxlIiwiY29sdW1ucyIsInRyaW0iLCJtZXNzYWdlIiwid3JpdGVDc3YiLCJPYmplY3RzVG9Dc3YiLCJjc3YiLCJ0b0Rpc2siLCJhbGxDb2x1bW5zIiwicmVhZFhsc3giLCJyZWFkZXIiLCJFeGNlbFJlYWRlciIsInJlYWQiLCJkbnNSZXNvbHZlIiwiaG9zdG5hbWUiLCJyclR5cGUiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicnJUeXBlcyIsImluY2x1ZGVzIiwiU0NSSVBUX0VSUk9SIiwiam9pbiIsImRuc1Byb21pc2VzIiwicHJvbWlzZXMiLCJyZXNvbHZlIiwiRE5TX0VSUk9SIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFlQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQXBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFD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QTtBQUNBOzs7QUFDb0IsUUFBVjhCLFVBQVUsQ0FBQ0MsUUFBRCxFQUFXQyxNQUFNLEdBQUcsR0FBcEIsRUFBeUI7QUFDckN4QyxtQkFBTXlDLDRCQUFOLENBQW1DRixRQUFuQyxFQUE2QyxVQUE3Qzs7QUFDQSxVQUFNRyxPQUFPLEdBQUcsQ0FBQyxHQUFELEVBQU0sTUFBTixFQUFjLEtBQWQsRUFBcUIsT0FBckIsRUFBOEIsSUFBOUIsRUFBb0MsT0FBcEMsRUFBNkMsSUFBN0MsRUFBbUQsS0FBbkQsRUFBMEQsS0FBMUQsRUFBaUUsS0FBakUsRUFBd0UsS0FBeEUsQ0FBaEI7O0FBRUEsUUFBSSxDQUFDQSxPQUFPLENBQUNDLFFBQVIsQ0FBaUJILE1BQWpCLENBQUwsRUFBK0I7QUFDM0IsWUFBTSxJQUFJekIsb0JBQUosQ0FBWUMsZ0JBQVlDLFNBQVosQ0FBc0IyQixZQUFsQyxFQUFpRCx5REFBd0RGLE9BQU8sQ0FBQ0csSUFBUixDQUFhLElBQWIsQ0FBbUIsRUFBNUgsQ0FBTjtBQUNIOztBQUVELFVBQU1DLFdBQVcsR0FBR3BDLE9BQU8sQ0FBQyxLQUFELENBQVAsQ0FBZXFDLFFBQW5DOztBQUNBLFFBQUk7QUFDQSxhQUFPLE1BQU1ELFdBQVcsQ0FBQ0UsT0FBWixDQUFvQlQsUUFBcEIsRUFBOEJDLE1BQTlCLENBQWI7QUFDSCxLQUZELENBRUUsT0FBT25CLENBQVAsRUFBVTtBQUNSLFlBQU0sSUFBSU4sb0JBQUosQ0FBWUMsZ0JBQVlDLFNBQVosQ0FBc0JnQyxTQUFsQyxFQUE2QzVCLENBQUMsQ0FBQ08sT0FBL0MsQ0FBTjtBQUNIO0FBQ0o7O0FBdktpRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIHV0aWxzXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtaXNjZWxsYW5lb3VzIHV0aWxpdHkgbWV0aG9kcy5cclxuICovXHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd1dGlscyc7XHJcbmltcG9ydCBPeHlnZW5Nb2R1bGUgZnJvbSAnLi4vY29yZS9PeHlnZW5Nb2R1bGUnO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBsaWJVdGlscyBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IEV4Y2VsUmVhZGVyIGZyb20gJy4uL2xpYi9wYXJhbS1yZWFkZXItZXhjZWwnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHNNb2R1bGUgZXh0ZW5kcyBPeHlnZW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy5fYWx3YXlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBAc3VtbWFyeSBHZXRzIG1vZHVsZSBuYW1lXHJcbiAgICAgKiBAZnVuY3Rpb24gbmFtZVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBDb25zdGFudCB2YWx1ZSBcInV0aWxzXCIuXHJcbiAgICAgKi9cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBhdXNlIHRlc3QgZXhlY3V0aW9uIGZvciB0aGUgZ2l2ZW4gYW1vdW50IG9mIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBmdW5jdGlvbiBwYXVzZVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG1zIC0gTWlsbGlzZWNvbmRzIHRvIHBhdXNlIHRoZSBleGVjdXRpb24gZm9yLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwYXVzZShtcykge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUobXMsICdtcycpO1xyXG4gICAgICAgIGF3YWl0IGxpYlV0aWxzLnNsZWVwKG1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IERlY3J5cHQgdGV4dFxyXG4gICAgICogQGZ1bmN0aW9uIGRlY3J5cHRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IC0gVGV4dFxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBEZWNyeXB0UmVzdWx0IE9iamVjdCB3aXRoIGdldERlY3J5cHRSZXN1bHQgbWV0aG9kXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIHRvIGVuY3J5cHQgcGxhaW50ZXh0IGludG8gY2lwaGVydGV4dCBcclxuICAgICAqIGNvbnN0IGVuY3J5cHQgPSB1dGlscy5lbmNyeXB0KCdodHRwczovL3d3dy53aWtpcGVkaWEub3JnLycpO1xyXG4gICAgICogbG9nLmluZm8oZW5jcnlwdCk7IC8vIHdpbGwgcHJpbnQgYjc1N2JhMmMyZmM1MGZiYjUxMWQ1OTY4MTZjYTA2YzRmYTU2ZjRlOThjZTIyMmYzMGJjNThkNTI1MWVkNjM1ZVxyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBkZWNyeXB0IGNpcGhlcnRleHQgYW5kIHVzZSBpdCBpbiBzY3JpcHQgIFxyXG4gICAgICogY29uc3QgZGVjcnlwdCA9IHV0aWxzLmRlY3J5cHQoZW5jcnlwdCk7XHJcbiAgICAgKiBsb2cuaW5mbyhkZWNyeXB0KTsgLy8gd2lsbCBwcmludCBFTkNSWVBURURcclxuICAgICAqIFxyXG4gICAgICogd2ViLmluaXQoKTtcclxuICAgICAqIHdlYi5vcGVuKGRlY3J5cHQpOyAvLyB3aWxsIG9wZW4gaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZ2V0IG9yaWdpbmFsIHBsYWludGV4dCB1c2UgZ2V0RGVjcnlwdFJlc3VsdFxyXG4gICAgICogY29uc3QgdmFsdWUgPSBkZWNyeXB0LmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAqIGxvZy5pbmZvKHZhbHVlKTsgLy93aWxsIHByaW50IGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvXHJcbiAgICAgKi9cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHJldHVybiBsaWJVdGlscy5kZWNyeXB0KHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRW5jcnlwdCB0ZXh0XHJcbiAgICAgKiBAZnVuY3Rpb24gZW5jcnlwdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0XHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IEVuY3J5cHRlZCB0ZXh0XHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIHRvIGVuY3J5cHQgcGxhaW50ZXh0IGludG8gY2lwaGVydGV4dCBcclxuICAgICAqIGNvbnN0IGVuY3J5cHQgPSB1dGlscy5lbmNyeXB0KCdodHRwczovL3d3dy53aWtpcGVkaWEub3JnLycpO1xyXG4gICAgICogbG9nLmluZm8oZW5jcnlwdCk7IC8vIHdpbGwgcHJpbnQgYjc1N2JhMmMyZmM1MGZiYjUxMWQ1OTY4MTZjYTA2YzRmYTU2ZjRlOThjZTIyMmYzMGJjNThkNTI1MWVkNjM1ZVxyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBkZWNyeXB0IGNpcGhlcnRleHQgYW5kIHVzZSBpdCBpbiBzY3JpcHQgIFxyXG4gICAgICogY29uc3QgZGVjcnlwdCA9IHV0aWxzLmRlY3J5cHQoZW5jcnlwdCk7XHJcbiAgICAgKiBsb2cuaW5mbyhkZWNyeXB0KTsgLy8gd2lsbCBwcmludCBFTkNSWVBURURcclxuICAgICAqIFxyXG4gICAgICogd2ViLmluaXQoKTtcclxuICAgICAqIHdlYi5vcGVuKGRlY3J5cHQpOyAvLyB3aWxsIG9wZW4gaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZ2V0IG9yaWdpbmFsIHBsYWludGV4dCB1c2UgZ2V0RGVjcnlwdFJlc3VsdFxyXG4gICAgICogY29uc3QgdmFsdWUgPSBkZWNyeXB0LmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAqIGxvZy5pbmZvKHZhbHVlKTsgLy93aWxsIHByaW50IGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvXHJcbiAgICAgKi9cclxuICAgIGVuY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHJldHVybiBsaWJVdGlscy5lbmNyeXB0KHRleHQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZWFkcyBkYXRhIGZyb20gY3N2IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiByZWFkQ3N2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgKGh0dHBzOi8vY3N2LmpzLm9yZy9wYXJzZS9vcHRpb25zLylcclxuICAgICAqL1xyXG4gICAgcmVhZENzdihmaWxlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2UgPSByZXF1aXJlKCdjc3YtcGFyc2UvbGliL3N5bmMnKTtcclxuICAgICAgICB2YXIgZnMgPSByZXF1aXJlKCdmcycpO1xyXG4gICAgICAgIHZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5cclxuICAgICAgICB2YXIgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBpZiAoZXh0ICE9PSAnLmNzdicgJiYgZXh0ICE9PSAnLnR4dCcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgJ1Vuc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9uOiAnICsgZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCAnVW5hYmxlIHRvIHJlYWQgcGFyYW1ldGVycyBmaWxlOiAnICsgZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDU1ZzIHByb2R1Y2VkIGJ5IE9TIFggRXhjZWwgaGF2ZSBoZWFkZXIgdGVybWluYXRlZCB3aXRoIDBkMGQwYVxyXG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1xcclxcci9nLCAnXFxyJyk7XHJcblxyXG4gICAgICAgIC8vIHN0cmlwIEJPTSBmb3IgVVRGLThcclxuICAgICAgICB2YXIgYm9tID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2F0Y2hlcyAweEVGQkJCRiAoVVRGLTggQk9NKSBiZWNhdXNlIHRoZSBidWZmZXItdG8tc3RyaW5nXHJcbiAgICAgICAgLy8gY29udmVyc2lvbiB0cmFuc2xhdGVzIGl0IHRvIDB4RkVGRiAoVVRGLTE2IEJPTSlcclxuICAgICAgICBpZiAoZGF0YS5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcclxuICAgICAgICAgICAgYm9tID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciB0YWJsZSA9IHBhcnNlKGRhdGEsIHsgYm9tOiBib20sIGNvbHVtbnM6IHRydWUsIHRyaW06IHRydWUsIC4uLm9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgV3JpdGVzIGRhdGEgaW50byBjc3YgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHdyaXRlQ3N2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgLSBDU1YgZGF0YSBpbiBmb3JtYXQgW3tjb2x1bW5fbmFtZV8xOiAnZm9vJywgY29sdW1uX25hbWVfMjogJ2Jhcid9XVxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyAoaHR0cHM6Ly9naXRodWIuY29tL2FudG9uLWJvdC9vYmplY3RzLXRvLWNzdiNhc3luYy10b2Rpc2tmaWxlbmFtZS1vcHRpb25zKVxyXG4gICAgICovXHJcbiAgICBhc3luYyB3cml0ZUNzdihmaWxlUGF0aCwgZGF0YSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgT2JqZWN0c1RvQ3N2ID0gcmVxdWlyZSgnb2JqZWN0cy10by1jc3YnKTtcclxuICAgICAgICAgICAgY29uc3QgY3N2ID0gbmV3IE9iamVjdHNUb0NzdihkYXRhKTtcclxuICAgICAgICAgICAgYXdhaXQgY3N2LnRvRGlzayhmaWxlUGF0aCwgeyBhbGxDb2x1bW5zOiB0cnVlLCAuLi5vcHRpb25zIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZWFkcyBkYXRhIGZyb20gWGxzeCBmaWxlXHJcbiAgICAgKiBAZnVuY3Rpb24gcmVhZFhsc3hcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHJldHVybiB7QXJyYXl9IC0gQXJyYXkgb2YgeGxzeCBkYXRhXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlYWRYbHN4KGZpbGVQYXRoKSB7XHJcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEV4Y2VsUmVhZGVyKCk7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRlci5yZWFkKGZpbGVQYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFVzZXMgdGhlIEROUyBwcm90b2NvbCB0byByZXNvbHZlIGEgaG9zdCBuYW1lXHJcbiAgICAgKiBAZnVuY3Rpb24gZG5zUmVzb2x2ZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhvc3RuYW1lIC0gSG9zdCBuYW1lIHRvIHJlc29sdmUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHJyVHlwZSAtIFJlc291cmNlIHJlY29yZCB0eXBlLiBEZWZhdWx0OiAnQScuXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmdbXSB8IE9iamVjdH0gLSBBcnJheSBvciBPYmplY3Qgb2YgcmVzb3VyY2UgcmVjb3Jkcy4gVGhlIHR5cGUgYW5kIHN0cnVjdHVyZSBvZiBpbmRpdmlkdWFsIHJlc3VsdHMgdmFyeSBiYXNlZCBvbiBycnR5cGVcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZG5zUmVzb2x2ZShob3N0bmFtZSwgcnJUeXBlID0gJ0EnKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhob3N0bmFtZSwgJ2hvc3RuYW1lJyk7XHJcbiAgICAgICAgY29uc3QgcnJUeXBlcyA9IFsnQScsICdBQUFBJywgJ0FOWScsICdDTkFNRScsICdNWCcsICdOQVBUUicsICdOUycsICdQVFInLCAnU09BJywgJ1NSVicsICdUWFQnXTtcclxuXHJcbiAgICAgICAgaWYgKCFyclR5cGVzLmluY2x1ZGVzKHJyVHlwZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgYEludmFsaWQgYXJndW1lbnQgLSAncnJUeXBlJy4gQXZhaWxhYmxlIHJyVHlwZSB2YWx1ZXM6ICR7cnJUeXBlcy5qb2luKCcsICcpfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZG5zUHJvbWlzZXMgPSByZXF1aXJlKCdkbnMnKS5wcm9taXNlcztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZG5zUHJvbWlzZXMucmVzb2x2ZShob3N0bmFtZSwgcnJUeXBlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5ETlNfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19