@phenixrts/sdk 2022.0.2 → 2022.0.5

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 (50) hide show
  1. package/dist/debug/channels.js +277 -135
  2. package/dist/debug/full.js +277 -135
  3. package/dist/debug/groups.js +1 -1
  4. package/dist/debug/messaging.js +1 -1
  5. package/dist/debug/publish.js +1 -1
  6. package/dist/debug.private/channels.js +277 -135
  7. package/dist/debug.private/full.js +277 -135
  8. package/dist/debug.private/groups.js +1 -1
  9. package/dist/debug.private/messaging.js +1 -1
  10. package/dist/debug.private/publish.js +1 -1
  11. package/dist/es5.debug.private/channels.js +276 -135
  12. package/dist/es5.debug.private/full.js +276 -135
  13. package/dist/es5.debug.private/groups.js +1 -1
  14. package/dist/es5.debug.private/messaging.js +1 -1
  15. package/dist/es5.debug.private/publish.js +1 -1
  16. package/dist/legacy.debug/channels.js +277 -135
  17. package/dist/legacy.debug/full.js +277 -135
  18. package/dist/legacy.debug/groups.js +1 -1
  19. package/dist/legacy.debug/messaging.js +1 -1
  20. package/dist/legacy.debug/publish.js +1 -1
  21. package/dist/legacy.debug.private/channels.js +276 -135
  22. package/dist/legacy.debug.private/full.js +276 -135
  23. package/dist/legacy.debug.private/groups.js +1 -1
  24. package/dist/legacy.debug.private/messaging.js +1 -1
  25. package/dist/legacy.debug.private/publish.js +1 -1
  26. package/dist/legacy.min/channels.js +1 -1
  27. package/dist/legacy.min/channels.js.map +1 -1
  28. package/dist/legacy.min/full.js +1 -1
  29. package/dist/legacy.min/full.js.map +1 -1
  30. package/dist/legacy.min/groups.js +1 -1
  31. package/dist/legacy.min/messaging.js +1 -1
  32. package/dist/legacy.min/publish.js +1 -1
  33. package/dist/min/channels.js +1 -1
  34. package/dist/min/channels.js.map +1 -1
  35. package/dist/min/full.js +1 -1
  36. package/dist/min/full.js.map +1 -1
  37. package/dist/min/groups.js +1 -1
  38. package/dist/min/messaging.js +1 -1
  39. package/dist/min/publish.js +1 -1
  40. package/dist/min.private/channels.js +1 -1
  41. package/dist/min.private/channels.js.map +1 -1
  42. package/dist/min.private/full.js +1 -1
  43. package/dist/min.private/full.js.map +1 -1
  44. package/dist/min.private/groups.js +1 -1
  45. package/dist/min.private/messaging.js +1 -1
  46. package/dist/min.private/publish.js +1 -1
  47. package/dist/types/rtc/RtcConnectionMonitor.d.ts +1 -0
  48. package/dist/types/sdk/channels/Channel.d.ts +4 -2
  49. package/dist/types/sdk/channels/ChannelContext.d.ts +1 -0
  50. package/package.json +1 -1
@@ -3329,36 +3329,61 @@ var RtcConnectionMonitor = /*#__PURE__*/function () {
3329
3329
 
3330
3330
  if (stats) {
3331
3331
  var roundTripTime = _this._estimatedRoundTripTime;
3332
- stats.forEach(function (i) {
3333
- if (i.type === 'candidate-pair' && i.currentRoundTripTime) {
3334
- roundTripTime = i.currentRoundTripTime * 1000;
3332
+ var lastPacketReceivedTimestamp;
3333
+ stats.forEach(function (report) {
3334
+ if (report.type === 'candidate-pair' && report.currentRoundTripTime) {
3335
+ roundTripTime = report.currentRoundTripTime * 1000;
3336
+
3337
+ if (rtcStats['audio']) {
3338
+ rtcStats['audio'].roundTripTime = roundTripTime;
3339
+ }
3340
+
3341
+ if (rtcStats['video']) {
3342
+ rtcStats['video'].roundTripTime = roundTripTime;
3343
+ }
3335
3344
  }
3336
3345
 
3337
- if (i.type === 'inbound-rtp') {
3338
- var _kind = i.kind || i.mediaType || getKindForSafari11(i);
3346
+ if (report.type === 'candidate-pair' && report.lastPacketReceivedTimestamp) {
3347
+ lastPacketReceivedTimestamp = report.lastPacketReceivedTimestamp;
3348
+
3349
+ if (rtcStats['audio']) {
3350
+ rtcStats['audio'].lastPacketReceivedTimestamp = lastPacketReceivedTimestamp;
3351
+ }
3352
+
3353
+ if (rtcStats['video']) {
3354
+ rtcStats['video'].lastPacketReceivedTimestamp = lastPacketReceivedTimestamp;
3355
+ }
3356
+ }
3357
+
3358
+ if (report.type === 'inbound-rtp') {
3359
+ var _kind = report.kind || report.mediaType || getKindForSafari11(report);
3339
3360
 
3340
3361
  var codec = '';
3341
3362
  stats.forEach(function (item) {
3342
- if (item.id === i.codecId) {
3363
+ if (item.id === report.codecId) {
3343
3364
  codec = item.mimeType;
3344
3365
  }
3345
3366
  });
3346
3367
 
3347
3368
  if (_kind && _this._tracksToMonitor.includes(_kind)) {
3348
3369
  rtcStats[_kind] = {
3349
- ssrc: i.ssrc,
3370
+ ssrc: report.ssrc,
3350
3371
  mediaType: _kind,
3351
- timestamp: i.timestamp,
3352
- bytesReceived: i.bytesReceived,
3353
- packetsLost: i.packetsLost,
3354
- packetsReceived: i.packetsReceived,
3372
+ timestamp: report.timestamp,
3373
+ bytesReceived: report.bytesReceived,
3374
+ packetsLost: report.packetsLost,
3375
+ packetsReceived: report.packetsReceived,
3355
3376
  codec: codec || _this.getCodecByType(_kind),
3356
3377
  roundTripTime: roundTripTime
3357
3378
  };
3358
3379
 
3380
+ if (report.lastPacketReceivedTimestamp || lastPacketReceivedTimestamp) {
3381
+ rtcStats[_kind].lastPacketReceivedTimestamp = report.lastPacketReceivedTimestamp || lastPacketReceivedTimestamp;
3382
+ }
3383
+
3359
3384
  if (_kind === 'video' && _this._rtcStatistic.value && _this._rtcStatistic.value.video) {
3360
- rtcStats[_kind].framesDecoded = i.framesDecoded;
3361
- rtcStats[_kind]['fps'] = (i.framesDecoded - _this._rtcStatistic.value.video.framesDecoded) / (rtcStats[_kind].timestamp - _this._rtcStatistic.value.video.timestamp) * 1000 || 0;
3385
+ rtcStats[_kind]['framesDecoded'] = report.framesDecoded;
3386
+ rtcStats[_kind]['fps'] = (report.framesDecoded - _this._rtcStatistic.value.video.framesDecoded) / (rtcStats[_kind].timestamp - _this._rtcStatistic.value.video.timestamp) * 1000 || 0;
3362
3387
  }
3363
3388
  }
3364
3389
  }
@@ -4722,6 +4747,7 @@ var BitrateMode;
4722
4747
  /* harmony import */ var _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../streaming/StreamFactory */ "./src/sdk/streaming/StreamFactory.ts");
4723
4748
  /* harmony import */ var _discovery_DiscoveryUri__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../discovery/DiscoveryUri */ "./src/sdk/discovery/DiscoveryUri.ts");
4724
4749
  /* harmony import */ var _metrics_MetricsFactory__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../metrics/MetricsFactory */ "./src/metrics/MetricsFactory.ts");
4750
+ /* provided dependency */ var Promise = __webpack_require__(/*! ./src/promise/Promise */ "./src/promise/Promise.ts")["default"];
4725
4751
 
4726
4752
 
4727
4753
 
@@ -4973,7 +4999,48 @@ var Channel = /*#__PURE__*/function () {
4973
4999
  }
4974
5000
  }, {
4975
5001
  key: "stop",
4976
- value: function stop(reason) {
5002
+ value: function () {
5003
+ var _stop = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee(reason) {
5004
+ var _this3 = this;
5005
+
5006
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee$(_context) {
5007
+ while (1) {
5008
+ switch (_context.prev = _context.next) {
5009
+ case 0:
5010
+ return _context.abrupt("return", new Promise(function (resolve) {
5011
+ if (!_this3._context.isStarting.value) {
5012
+ _this3.processStop(reason);
5013
+
5014
+ resolve();
5015
+ return;
5016
+ }
5017
+
5018
+ _this3._context.rendererDisposables.add(_this3._context.isStarting.subscribe(function (isStarting) {
5019
+ if (!isStarting) {
5020
+ _this3.processStop(reason);
5021
+
5022
+ resolve();
5023
+ }
5024
+ }));
5025
+ }));
5026
+
5027
+ case 1:
5028
+ case "end":
5029
+ return _context.stop();
5030
+ }
5031
+ }
5032
+ }, _callee);
5033
+ }));
5034
+
5035
+ function stop(_x) {
5036
+ return _stop.apply(this, arguments);
5037
+ }
5038
+
5039
+ return stop;
5040
+ }()
5041
+ }, {
5042
+ key: "processStop",
5043
+ value: function processStop(reason) {
4977
5044
  if (this._context.videoElement.value) {
4978
5045
  this._context.videoElement.value.pause();
4979
5046
 
@@ -4988,25 +5055,25 @@ var Channel = /*#__PURE__*/function () {
4988
5055
  }, {
4989
5056
  key: "resume",
4990
5057
  value: function () {
4991
- var _resume = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee() {
4992
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee$(_context) {
5058
+ var _resume = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee2() {
5059
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee2$(_context2) {
4993
5060
  while (1) {
4994
- switch (_context.prev = _context.next) {
5061
+ switch (_context2.prev = _context2.next) {
4995
5062
  case 0:
4996
5063
  if (!this._context.mediaStream.value) {
4997
- _context.next = 3;
5064
+ _context2.next = 3;
4998
5065
  break;
4999
5066
  }
5000
5067
 
5001
5068
  this._context.autoPaused.value = false;
5002
- return _context.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5069
+ return _context2.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5003
5070
 
5004
5071
  case 3:
5005
5072
  case "end":
5006
- return _context.stop();
5073
+ return _context2.stop();
5007
5074
  }
5008
5075
  }
5009
- }, _callee, this);
5076
+ }, _callee2, this);
5010
5077
  }));
5011
5078
 
5012
5079
  function resume() {
@@ -5036,13 +5103,34 @@ var Channel = /*#__PURE__*/function () {
5036
5103
  }
5037
5104
  }, {
5038
5105
  key: "dispose",
5039
- value: function dispose() {
5040
- this.stop('client:channel-dispose');
5106
+ value: function () {
5107
+ var _dispose = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee3() {
5108
+ var _this4 = this;
5041
5109
 
5042
- this._context.channelDisposables.dispose();
5110
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee3$(_context3) {
5111
+ while (1) {
5112
+ switch (_context3.prev = _context3.next) {
5113
+ case 0:
5114
+ return _context3.abrupt("return", this.stop('client:channel-dispose').then(function () {
5115
+ _this4._context.channelDisposables.dispose();
5043
5116
 
5044
- this._context.isDisposed = true;
5045
- }
5117
+ _this4._context.isDisposed = true;
5118
+ }));
5119
+
5120
+ case 1:
5121
+ case "end":
5122
+ return _context3.stop();
5123
+ }
5124
+ }
5125
+ }, _callee3, this);
5126
+ }));
5127
+
5128
+ function dispose() {
5129
+ return _dispose.apply(this, arguments);
5130
+ }
5131
+
5132
+ return dispose;
5133
+ }()
5046
5134
  }, {
5047
5135
  key: "getUri",
5048
5136
  value: function getUri(token) {
@@ -5060,27 +5148,66 @@ var Channel = /*#__PURE__*/function () {
5060
5148
  }, {
5061
5149
  key: "start",
5062
5150
  value: function () {
5063
- var _start = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee2() {
5064
- var _this3 = this;
5151
+ var _start = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee4() {
5152
+ var _this5 = this;
5065
5153
 
5066
- var token, listenOnStreamSetup, uri, streamPlayer;
5067
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee2$(_context2) {
5154
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee4$(_context4) {
5068
5155
  while (1) {
5069
- switch (_context2.prev = _context2.next) {
5156
+ switch (_context4.prev = _context4.next) {
5070
5157
  case 0:
5071
5158
  if (!this._context.isDisposed) {
5072
- _context2.next = 2;
5159
+ _context4.next = 2;
5073
5160
  break;
5074
5161
  }
5075
5162
 
5076
5163
  throw new Error('Channel was already disposed');
5077
5164
 
5078
5165
  case 2:
5166
+ if (!this._context.isStarting.value) {
5167
+ _context4.next = 5;
5168
+ break;
5169
+ }
5170
+
5171
+ this._logger.info('Channel is already starting, skipping start');
5172
+
5173
+ return _context4.abrupt("return");
5174
+
5175
+ case 5:
5176
+ this._context.isStarting.value = true;
5177
+ return _context4.abrupt("return", this.processStart().finally(function () {
5178
+ _this5._context.isStarting.value = false;
5179
+ }));
5180
+
5181
+ case 7:
5182
+ case "end":
5183
+ return _context4.stop();
5184
+ }
5185
+ }
5186
+ }, _callee4, this);
5187
+ }));
5188
+
5189
+ function start() {
5190
+ return _start.apply(this, arguments);
5191
+ }
5192
+
5193
+ return start;
5194
+ }()
5195
+ }, {
5196
+ key: "processStart",
5197
+ value: function () {
5198
+ var _processStart = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee5() {
5199
+ var _this6 = this;
5200
+
5201
+ var token, listenOnStreamSetup, uri, handleStreamFailureCallback, streamPlayer;
5202
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee5$(_context5) {
5203
+ while (1) {
5204
+ switch (_context5.prev = _context5.next) {
5205
+ case 0:
5079
5206
  token = this._context.token.value;
5080
5207
  listenOnStreamSetup = this._context.sessionTelemetry.listenOnStreamSetup();
5081
5208
 
5082
5209
  if (_edgeAuth_EdgeAuth__WEBPACK_IMPORTED_MODULE_12__.default.isValidToken(token)) {
5083
- _context2.next = 9;
5210
+ _context5.next = 7;
5084
5211
  break;
5085
5212
  }
5086
5213
 
@@ -5088,78 +5215,85 @@ var Channel = /*#__PURE__*/function () {
5088
5215
 
5089
5216
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Unauthorized;
5090
5217
  this._context.authorized.value = false;
5091
- return _context2.abrupt("return");
5218
+ return _context5.abrupt("return");
5092
5219
 
5093
- case 9:
5220
+ case 7:
5094
5221
  this.cleanUpResources('client:start');
5095
5222
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Starting;
5096
5223
  this._context.loading.value = true;
5097
5224
  uri = this.getUri(token);
5098
- streamPlayer = _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_17__.default.create(token, this._context, this.handleStreamFailure.bind(this));
5225
+
5226
+ handleStreamFailureCallback = function handleStreamFailureCallback() {
5227
+ return new Promise(function (resolve) {
5228
+ // Need to set isStarting to false and call handleStreamFailure if stream monitors found an issue
5229
+ _this6._context.isStarting.value = false;
5230
+ return resolve(_this6.handleStreamFailure());
5231
+ });
5232
+ };
5233
+
5234
+ streamPlayer = _streaming_StreamFactory__WEBPACK_IMPORTED_MODULE_17__.default.create(token, this._context, handleStreamFailureCallback);
5099
5235
 
5100
5236
  if (streamPlayer) {
5101
- _context2.next = 16;
5237
+ _context5.next = 15;
5102
5238
  break;
5103
5239
  }
5104
5240
 
5105
- return _context2.abrupt("return");
5241
+ return _context5.abrupt("return");
5106
5242
 
5107
- case 16:
5108
- return _context2.abrupt("return", streamPlayer.start(uri, token, listenOnStreamSetup, this.playMediaStreamInVideoElement.bind(this)).then(function () {
5109
- _this3._context.loading.value = false;
5110
- }).then(function () {
5111
- _this3._context.loading.value = false;
5243
+ case 15:
5244
+ return _context5.abrupt("return", streamPlayer.start(uri, token, listenOnStreamSetup, this.playMediaStreamInVideoElement.bind(this)).then(function () {
5245
+ _this6._context.loading.value = false;
5112
5246
  }).catch(function (e) {
5113
5247
  listenOnStreamSetup.fail();
5114
- _this3._context.failureCount.value++;
5115
- _this3._context.online.value = false;
5248
+ _this6._context.failureCount.value++;
5249
+ _this6._context.online.value = false;
5116
5250
 
5117
- _this3.cleanUpResources('client:cleanup-after-failed-setup');
5251
+ _this6.cleanUpResources('client:cleanup-after-failed-setup');
5118
5252
 
5119
- _this3._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error;
5253
+ _this6._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error;
5120
5254
 
5121
- _this3._logger.error('Failed to discover end point, marking as offline', e);
5255
+ _this6._logger.error('Failed to start channel', e);
5122
5256
  }).finally(function () {
5123
- if (_this3._context.state.value === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing || !_SDK__WEBPACK_IMPORTED_MODULE_8__.default.automaticRetryOnFailure) {
5257
+ if (_this6._context.state.value === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing || !_SDK__WEBPACK_IMPORTED_MODULE_8__.default.automaticRetryOnFailure) {
5124
5258
  return;
5125
5259
  }
5126
5260
 
5127
5261
  var timeoutId = setTimeout(function () {
5128
- var ignored = _this3.handleStreamFailure().catch(function (e) {
5129
- _this3._logger.error('Failed handling stream failure', e);
5262
+ var ignored = _this6.handleStreamFailure().catch(function (e) {
5263
+ _this6._logger.error('Failed handling stream failure', e);
5130
5264
  });
5131
- }, _this3.getRetryInterval());
5265
+ }, _this6.getRetryInterval());
5132
5266
 
5133
- _this3._context.disposables.add(new _lang_Disposable__WEBPACK_IMPORTED_MODULE_11__.default(function () {
5267
+ _this6._context.disposables.add(new _lang_Disposable__WEBPACK_IMPORTED_MODULE_11__.default(function () {
5134
5268
  clearTimeout(timeoutId);
5135
5269
  }));
5136
5270
  }));
5137
5271
 
5138
- case 17:
5272
+ case 16:
5139
5273
  case "end":
5140
- return _context2.stop();
5274
+ return _context5.stop();
5141
5275
  }
5142
5276
  }
5143
- }, _callee2, this);
5277
+ }, _callee5, this);
5144
5278
  }));
5145
5279
 
5146
- function start() {
5147
- return _start.apply(this, arguments);
5280
+ function processStart() {
5281
+ return _processStart.apply(this, arguments);
5148
5282
  }
5149
5283
 
5150
- return start;
5284
+ return processStart;
5151
5285
  }()
5152
5286
  }, {
5153
5287
  key: "restartAfterStop",
5154
5288
  value: function () {
5155
- var _restartAfterStop = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee3() {
5289
+ var _restartAfterStop = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee6() {
5156
5290
  var ignored;
5157
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee3$(_context3) {
5291
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee6$(_context6) {
5158
5292
  while (1) {
5159
- switch (_context3.prev = _context3.next) {
5293
+ switch (_context6.prev = _context6.next) {
5160
5294
  case 0:
5161
5295
  if (!this._context.isDisposed) {
5162
- _context3.next = 2;
5296
+ _context6.next = 2;
5163
5297
  break;
5164
5298
  }
5165
5299
 
@@ -5167,11 +5301,11 @@ var Channel = /*#__PURE__*/function () {
5167
5301
 
5168
5302
  case 2:
5169
5303
  if (!this._context.mediaStream.value) {
5170
- _context3.next = 4;
5304
+ _context6.next = 4;
5171
5305
  break;
5172
5306
  }
5173
5307
 
5174
- return _context3.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5308
+ return _context6.abrupt("return", this.playMediaStreamInVideoElement(this._context.mediaStream.value));
5175
5309
 
5176
5310
  case 4:
5177
5311
  if (this._context.token.value) {
@@ -5180,10 +5314,10 @@ var Channel = /*#__PURE__*/function () {
5180
5314
 
5181
5315
  case 5:
5182
5316
  case "end":
5183
- return _context3.stop();
5317
+ return _context6.stop();
5184
5318
  }
5185
5319
  }
5186
- }, _callee3, this);
5320
+ }, _callee6, this);
5187
5321
  }));
5188
5322
 
5189
5323
  function restartAfterStop() {
@@ -5195,30 +5329,30 @@ var Channel = /*#__PURE__*/function () {
5195
5329
  }, {
5196
5330
  key: "play",
5197
5331
  value: function () {
5198
- var _play = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee4() {
5332
+ var _play = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee7() {
5199
5333
  var mediaStream;
5200
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee4$(_context4) {
5334
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee7$(_context7) {
5201
5335
  while (1) {
5202
- switch (_context4.prev = _context4.next) {
5336
+ switch (_context7.prev = _context7.next) {
5203
5337
  case 0:
5204
5338
  mediaStream = this._context.mediaStream.value;
5205
5339
 
5206
5340
  if (mediaStream) {
5207
- _context4.next = 3;
5341
+ _context7.next = 3;
5208
5342
  break;
5209
5343
  }
5210
5344
 
5211
- return _context4.abrupt("return", this.start());
5345
+ return _context7.abrupt("return", this.start());
5212
5346
 
5213
5347
  case 3:
5214
- return _context4.abrupt("return", this.playMediaStreamInVideoElement(mediaStream));
5348
+ return _context7.abrupt("return", this.playMediaStreamInVideoElement(mediaStream));
5215
5349
 
5216
5350
  case 4:
5217
5351
  case "end":
5218
- return _context4.stop();
5352
+ return _context7.stop();
5219
5353
  }
5220
5354
  }
5221
- }, _callee4, this);
5355
+ }, _callee7, this);
5222
5356
  }));
5223
5357
 
5224
5358
  function play() {
@@ -5256,72 +5390,72 @@ var Channel = /*#__PURE__*/function () {
5256
5390
  }, {
5257
5391
  key: "handleStreamFailure",
5258
5392
  value: function () {
5259
- var _handleStreamFailure = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee5() {
5260
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee5$(_context5) {
5393
+ var _handleStreamFailure = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee8() {
5394
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee8$(_context8) {
5261
5395
  while (1) {
5262
- switch (_context5.prev = _context5.next) {
5396
+ switch (_context8.prev = _context8.next) {
5263
5397
  case 0:
5264
- _context5.t0 = this._context.state.value;
5265
- _context5.next = _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Reconnecting ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.StandBy ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Offline ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Recovering ? 3 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Unauthorized ? 5 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoRestricted ? 7 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoBlocked ? 9 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Stopped ? 11 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing ? 13 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused ? 15 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Starting ? 17 : _context5.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.UnsupportedFeature ? 19 : 21;
5398
+ _context8.t0 = this._context.state.value;
5399
+ _context8.next = _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Error ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Reconnecting ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.StandBy ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Offline ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Recovering ? 3 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Unauthorized ? 5 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoRestricted ? 7 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.GeoBlocked ? 9 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Stopped ? 11 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing ? 13 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused ? 15 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Starting ? 17 : _context8.t0 === _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.UnsupportedFeature ? 19 : 21;
5266
5400
  break;
5267
5401
 
5268
5402
  case 3:
5269
5403
  this._logger.info('Retry start with initial state [%s] [%s]', this._context.state.value, _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default[this._context.state.value]);
5270
5404
 
5271
- return _context5.abrupt("break", 22);
5405
+ return _context8.abrupt("break", 22);
5272
5406
 
5273
5407
  case 5:
5274
5408
  this._logger.info('Channel is unauthorized, skipping retry of start. Please provide a new token and invoke start()');
5275
5409
 
5276
- return _context5.abrupt("return");
5410
+ return _context8.abrupt("return");
5277
5411
 
5278
5412
  case 7:
5279
5413
  this._logger.info('Channel is geo restricted, skipping retry of start. Please provide a new token and invoke start()');
5280
5414
 
5281
- return _context5.abrupt("return");
5415
+ return _context8.abrupt("return");
5282
5416
 
5283
5417
  case 9:
5284
5418
  this._logger.info('Channel is geo blocked, skipping retry of start. Please provide a new token and invoke start()');
5285
5419
 
5286
- return _context5.abrupt("return");
5420
+ return _context8.abrupt("return");
5287
5421
 
5288
5422
  case 11:
5289
5423
  this._logger.info('Channel is stopped, skipping retry of start.');
5290
5424
 
5291
- return _context5.abrupt("return");
5425
+ return _context8.abrupt("return");
5292
5426
 
5293
5427
  case 13:
5294
5428
  this._logger.info('Channel is playing, skipping retry of start');
5295
5429
 
5296
- return _context5.abrupt("return");
5430
+ return _context8.abrupt("return");
5297
5431
 
5298
5432
  case 15:
5299
5433
  this._logger.info('Channel is paused, skipping retry of start. Please invoke play()');
5300
5434
 
5301
- return _context5.abrupt("return");
5435
+ return _context8.abrupt("return");
5302
5436
 
5303
5437
  case 17:
5304
5438
  this._logger.info('Channel is already starting, skipping retry of start');
5305
5439
 
5306
- return _context5.abrupt("return");
5440
+ return _context8.abrupt("return");
5307
5441
 
5308
5442
  case 19:
5309
5443
  this._logger.info('Channel is stopped due to unsupported feature, skipping retry of start.');
5310
5444
 
5311
- return _context5.abrupt("return");
5445
+ return _context8.abrupt("return");
5312
5446
 
5313
5447
  case 21:
5314
5448
  (0,_lang_assertUnreachable__WEBPACK_IMPORTED_MODULE_10__.default)(this._context.state.value);
5315
5449
 
5316
5450
  case 22:
5317
- return _context5.abrupt("return", this.start());
5451
+ return _context8.abrupt("return", this.start());
5318
5452
 
5319
5453
  case 23:
5320
5454
  case "end":
5321
- return _context5.stop();
5455
+ return _context8.stop();
5322
5456
  }
5323
5457
  }
5324
- }, _callee5, this);
5458
+ }, _callee8, this);
5325
5459
  }));
5326
5460
 
5327
5461
  function handleStreamFailure() {
@@ -5333,7 +5467,7 @@ var Channel = /*#__PURE__*/function () {
5333
5467
  }, {
5334
5468
  key: "cleanUpResources",
5335
5469
  value: function cleanUpResources() {
5336
- var _this4 = this;
5470
+ var _this7 = this;
5337
5471
 
5338
5472
  var reason = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultStreamTerminationReason;
5339
5473
 
@@ -5365,14 +5499,14 @@ var Channel = /*#__PURE__*/function () {
5365
5499
  var status = _ref2.status;
5366
5500
 
5367
5501
  if (status !== 'ok') {
5368
- _this4._logger.warn('[%s] Failed to destroy stream with reason [%s]', _this4.streamId, status);
5502
+ _this7._logger.warn('[%s] Failed to destroy stream with reason [%s]', _this7.streamId, status);
5369
5503
 
5370
5504
  return;
5371
5505
  }
5372
5506
 
5373
- _this4._logger.info('[%s] Destroyed stream with reason [%s]', _this4.streamId, status);
5507
+ _this7._logger.info('[%s] Destroyed stream with reason [%s]', _this7.streamId, status);
5374
5508
  }).catch(function (e) {
5375
- _this4._logger.error('[%s] Failed to destroy stream', _this4.streamId, e);
5509
+ _this7._logger.error('[%s] Failed to destroy stream', _this7.streamId, e);
5376
5510
  });
5377
5511
  }
5378
5512
 
@@ -5383,22 +5517,23 @@ var Channel = /*#__PURE__*/function () {
5383
5517
 
5384
5518
  this._context.stream.value = null;
5385
5519
  this._context.endPoint.value = null;
5520
+ this._context.peerConnectionReconnectAttempts = 0;
5386
5521
  }
5387
5522
  }, {
5388
5523
  key: "playMediaStreamInVideoElement",
5389
5524
  value: function () {
5390
- var _playMediaStreamInVideoElement = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee6(mediaStream) {
5391
- var _this5 = this;
5525
+ var _playMediaStreamInVideoElement = _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/_home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee9(mediaStream) {
5526
+ var _this8 = this;
5392
5527
 
5393
5528
  var videoElement, playPromise;
5394
- return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee6$(_context6) {
5529
+ return _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee9$(_context9) {
5395
5530
  while (1) {
5396
- switch (_context6.prev = _context6.next) {
5531
+ switch (_context9.prev = _context9.next) {
5397
5532
  case 0:
5398
5533
  videoElement = this._context.videoElement.value;
5399
5534
 
5400
5535
  if (videoElement) {
5401
- _context6.next = 8;
5536
+ _context9.next = 8;
5402
5537
  break;
5403
5538
  }
5404
5539
 
@@ -5407,14 +5542,14 @@ var Channel = /*#__PURE__*/function () {
5407
5542
  this._context.loading.value = false;
5408
5543
  this._context.playing.value = false;
5409
5544
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Stopped;
5410
- return _context6.abrupt("return");
5545
+ return _context9.abrupt("return");
5411
5546
 
5412
5547
  case 8:
5413
5548
  videoElement.srcObject = mediaStream;
5414
5549
  playPromise = videoElement.play();
5415
5550
 
5416
5551
  if (!(playPromise === undefined)) {
5417
- _context6.next = 17;
5552
+ _context9.next = 17;
5418
5553
  break;
5419
5554
  }
5420
5555
 
@@ -5423,15 +5558,15 @@ var Channel = /*#__PURE__*/function () {
5423
5558
  this._context.loading.value = false;
5424
5559
  this._context.playing.value = true;
5425
5560
  this._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5426
- return _context6.abrupt("return");
5561
+ return _context9.abrupt("return");
5427
5562
 
5428
5563
  case 17:
5429
- return _context6.abrupt("return", playPromise.then(function () {
5430
- _this5._context.autoMuted.value = false;
5431
- _this5._context.autoPaused.value = false;
5432
- _this5._context.loading.value = false;
5433
- _this5._context.playing.value = true;
5434
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5564
+ return _context9.abrupt("return", playPromise.then(function () {
5565
+ _this8._context.autoMuted.value = false;
5566
+ _this8._context.autoPaused.value = false;
5567
+ _this8._context.loading.value = false;
5568
+ _this8._context.playing.value = true;
5569
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5435
5570
  }).catch(function (e) {
5436
5571
  var hasAudioTrack = !!mediaStream.getTracks().filter(function (track) {
5437
5572
  return track.kind === 'audio';
@@ -5439,61 +5574,61 @@ var Channel = /*#__PURE__*/function () {
5439
5574
  var automaticallyMuteVideoOnPlayFailureOff = !_SDK__WEBPACK_IMPORTED_MODULE_8__.default.automaticallyMuteVideoOnPlayFailure;
5440
5575
 
5441
5576
  if (automaticallyMuteVideoOnPlayFailureOff || videoElement.muted || !hasAudioTrack) {
5442
- _this5._context.autoMuted.value = false;
5443
- _this5._context.autoPaused.value = true;
5444
- _this5._context.loading.value = false;
5445
- _this5._context.playing.value = false;
5446
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused;
5577
+ _this8._context.autoMuted.value = false;
5578
+ _this8._context.autoPaused.value = true;
5579
+ _this8._context.loading.value = false;
5580
+ _this8._context.playing.value = false;
5581
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused;
5447
5582
 
5448
5583
  if (automaticallyMuteVideoOnPlayFailureOff) {
5449
- _this5._logger.info('[%s] Paused video after play failed. Manual user action required.', _this5.streamId, e);
5584
+ _this8._logger.info('[%s] Paused video after play failed. Manual user action required.', _this8.streamId, e);
5450
5585
 
5451
5586
  videoElement.srcObject = null;
5452
5587
  return;
5453
5588
  }
5454
5589
 
5455
5590
  if (hasAudioTrack) {
5456
- _this5._logger.info('[%s] Failed to play video. Manual user action required.', _this5.streamId, e);
5591
+ _this8._logger.info('[%s] Failed to play video. Manual user action required.', _this8.streamId, e);
5457
5592
 
5458
5593
  return;
5459
5594
  }
5460
5595
 
5461
- _this5._logger.info('[%s] Failed to play muted video. Manual user action required.', _this5.streamId, e);
5596
+ _this8._logger.info('[%s] Failed to play muted video. Manual user action required.', _this8.streamId, e);
5462
5597
 
5463
5598
  return;
5464
5599
  }
5465
5600
 
5466
5601
  videoElement.muted = true;
5467
5602
  return videoElement.play().then(function () {
5468
- _this5._logger.info('[%s] Played video after auto muting. Manual user action required to unmute.', _this5.streamId);
5603
+ _this8._logger.info('[%s] Played video after auto muting. Manual user action required to unmute.', _this8.streamId);
5469
5604
 
5470
- _this5._context.autoMuted.value = true;
5471
- _this5._context.autoPaused.value = false;
5472
- _this5._context.loading.value = false;
5473
- _this5._context.playing.value = true;
5474
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5605
+ _this8._context.autoMuted.value = true;
5606
+ _this8._context.autoPaused.value = false;
5607
+ _this8._context.loading.value = false;
5608
+ _this8._context.playing.value = true;
5609
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5475
5610
  }).catch(function (e) {
5476
5611
  videoElement.muted = false;
5477
5612
 
5478
- _this5._logger.info('[%s] Failed to play video. Manual user action required.', _this5.streamId, e);
5613
+ _this8._logger.info('[%s] Failed to play video. Manual user action required.', _this8.streamId, e);
5479
5614
 
5480
- _this5._context.autoMuted.value = false;
5481
- _this5._context.autoPaused.value = true;
5482
- _this5._context.loading.value = false;
5483
- _this5._context.playing.value = false;
5484
- _this5._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Playing;
5615
+ _this8._context.autoMuted.value = false;
5616
+ _this8._context.autoPaused.value = true;
5617
+ _this8._context.loading.value = false;
5618
+ _this8._context.playing.value = false;
5619
+ _this8._context.state.value = _ChannelState__WEBPACK_IMPORTED_MODULE_9__.default.Paused;
5485
5620
  });
5486
5621
  }));
5487
5622
 
5488
5623
  case 18:
5489
5624
  case "end":
5490
- return _context6.stop();
5625
+ return _context9.stop();
5491
5626
  }
5492
5627
  }
5493
- }, _callee6, this);
5628
+ }, _callee9, this);
5494
5629
  }));
5495
5630
 
5496
- function playMediaStreamInVideoElement(_x) {
5631
+ function playMediaStreamInVideoElement(_x2) {
5497
5632
  return _playMediaStreamInVideoElement.apply(this, arguments);
5498
5633
  }
5499
5634
 
@@ -5766,6 +5901,8 @@ var ChannelContext = /*#__PURE__*/function () {
5766
5901
 
5767
5902
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "isDisposed", void 0);
5768
5903
 
5904
+ _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "isStarting", void 0);
5905
+
5769
5906
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "videoTelemetry", void 0);
5770
5907
 
5771
5908
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "sessionTelemetry", void 0);
@@ -5777,6 +5914,7 @@ var ChannelContext = /*#__PURE__*/function () {
5777
5914
  _home_sempi_dev_sbi_JsSDK_node_modules_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2___default()(this, "clearFailureCountTimeout", void 0);
5778
5915
 
5779
5916
  this.isDisposed = false;
5917
+ this.isStarting = new _rx_Subject__WEBPACK_IMPORTED_MODULE_3__.default(false);
5780
5918
  this.disposables = new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_8__.default();
5781
5919
  this.channelDisposables = new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_8__.default();
5782
5920
  this.rendererDisposables = new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_8__.default();
@@ -7971,6 +8109,10 @@ var RealTimeStream = /*#__PURE__*/function () {
7971
8109
  var discoveryCompleted = false;
7972
8110
  var candidates = [];
7973
8111
 
8112
+ if (!_this._channelContext.peerConnection.value) {
8113
+ _this._channelContext.peerConnection.value = peerConnection;
8114
+ }
8115
+
7974
8116
  peerConnection.onicecandidate = function (e) {
7975
8117
  if (_this._channelContext.stream.value !== stream) {
7976
8118
  return;
@@ -8501,7 +8643,7 @@ var VersionManager = /*#__PURE__*/function () {
8501
8643
  key: "sdkVersion",
8502
8644
  get: function get() {
8503
8645
  try {
8504
- return "2022-01-10T19:09:12.604Z (2022.0.2)";
8646
+ return "2022-05-05T18:02:55.793Z (2022.0.5)";
8505
8647
  } catch (e) {
8506
8648
  return this._defaultVersion;
8507
8649
  }
@@ -10275,4 +10417,4 @@ try {
10275
10417
  /******/ })()
10276
10418
  ;
10277
10419
  });
10278
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9Qcml2YWN5TW9kZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL1N0cmVhbVNldHVwTGlzdGVuZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZWRnZUF1dGgvRWRnZUF1dGgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL0RpbWVuc2lvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vU2Vzc2lvblRlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vVmlkZW9UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiRGlzcG9zYWJsZUxpc3QiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIlN1YmplY3QiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJSZWFkT25seVN1YmplY3QiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJfZGlzcG9zYWJsZXMiLCJkaXNwb3NlIiwiaGlkZGVuIiwidmlzaWJpbGl0eUNoYW5nZSIsImRvY3VtZW50IiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJEaXNwb3NhYmxlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbkZvckRvY3VtZW50Rm9jdXMiLCJjYWxsIiwiX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCIsIndpbmRvdyIsInNldEludGVydmFsIiwiaGFzRm9jdXMiLCJjbGVhckludGVydmFsIiwidmFsdWUiLCJCcm93c2VyRGV0ZWN0b3IiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJicm93c2VyTmFtZUFuZFZlcnNpb24iLCJtYXRjaCIsIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiYnJvd3Nlck5hbWVMaXN0Iiwic3BsaXQiLCJicm93c2VyVmVyc2lvbkxpc3QiLCJmdWxsVmVyc2lvbiIsIk51bWJlciIsIm1zaWUiLCJpbmRleE9mIiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ0cmlkZW50IiwidmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwicGFyc2VCcm93c2VyTmFtZSIsInBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbiIsImluY2x1ZGVzIiwiUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwibmFtZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwiTmV0d29ya01vbml0b3IiLCJ1bmRlZmluZWQiLCJpc1N1cHBvcnRlZCIsInNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycyIsInVwZGF0ZVN0YXRpc3RpY3MiLCJkb3dubGluayIsImRvd25saW5rTWF4IiwiZWZmZWN0aXZlVHlwZSIsInR5cGUiLCJydHQiLCJsaXN0ZW5lciIsIl9ydHQiLCJnZXRSb3VuZFRyaXBUaW1lIiwiX2VmZmVjdGl2ZVR5cGUiLCJnZXRFZmZlY3RpdmVUeXBlIiwiX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJfaXNTdXBwb3J0ZWQiLCJQcml2YWN5TW9kZSIsIl9pc1ByaXZhdGUiLCJfX1BSSVZBQ1lfTU9ERV9fIiwiZSIsImFwcGx5SXNQcml2YXRlIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN0cmVhbUlkIiwicmVjb3JkU3RyZWFtTWV0cmljIiwiTWV0cmljc1R5cGUiLCJtZXRyaWNUeXBlIiwiX21ldHJpY1N1Ym1pdHRlZCIsInNldHVwVGltZSIsIm1ldHJpY05hbWUiLCJNZXRyaWNUeXBlIiwiZ2V0TmFtZSIsIm1ldHJpY3NTZXJ2aWNlIiwicHVzaCIsInJ1bnRpbWUiLCJ1aW50NjQiLCJfbG9nZ2VyIiwiaW5mbyIsIkR1cmF0aW9ucyIsInRvSXNvU3RyaW5nIiwiZGlzcG9zYWJsZSIsIl9kaXNwb3NlZCIsIl9kaXNwb3NhYmxlIiwiX2xpc3QiLCJmb3JFYWNoIiwibGVuZ3RoIiwiU3RyaW5ncyIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsImxvb3BzIiwiY2VpbCIsIkFycmF5IiwiZmlsbCIsInJlZHVjZSIsInN0cmluZyIsImZ1bmMiLCJFcnJvciIsImFzc2VydFVucmVhY2hhYmxlIiwieCIsIkFwcGVuZGVycyIsImFwcGVuZGVyIiwiX2FwcGVuZGVycyIsIml0ZW1zIiwiaXRlbSIsIkNvbnNvbGVBcHBlbmRlciIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsIl90aHJlc2hvbGQiLCJmdWxsTWVzc2FnZSIsInRvSVNPU3RyaW5nIiwiTG9nZ2luZ0xldmVsIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwidGhyZXNob2xkIiwiTG9nZ2VyIiwiVHJhY2UiLCJhcmdzIiwiRGVidWciLCJJbmZvIiwiV2FybiIsIkZhdGFsIiwibGV2ZWwiLCJyZXBsYWNlUGxhY2Vob2xkZXJzIiwicmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyIsImluZGV4IiwicmVwbGFjZUFyZ3VtZW50Iiwic3BsaWNlIiwic3RyaW5naWZ5IiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJhcnJheSIsInN0YWNrIiwiYXJnIiwiY2FjaGUiLCJKU09OIiwia2V5IiwiT2JqZWN0IiwiYXJndW1lbnQiLCJkYXRhIiwidG9TdHJpbmdTdHIiLCJfY2F0ZWdvcnkiLCJhcHBlbmRlcnMiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2luZ0xldmVsIiwiYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCIsImFwcGx5Q29uc29sZUxvZ2dlciIsImJpbmQiLCJhcHBseVRlbGVtZXRyeUxvZ2dlciIsInBhcmFtZXRlclZhbHVlIiwiX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsInNldFRocmVzaG9sZCIsImFwcGx5QXBwZW5kZXIiLCJfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsIkxvZ2dpbmdUaHJlc2hvbGQiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImxvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJUZWxlbWV0cnlMZXZlbCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInVybCIsIm1ldHJpY3NVcmwiLCJVUkwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NGYWN0b3J5IiwibWV0cmljc1NlcnZpY2VzIiwiX21ldHJpY3NTZXJ2aWNlcyIsIm1ldHJpY3NDb25maWd1cmF0aW9uIiwiVGVsZW1ldHJ5VXJsIiwiRW52aXJvbm1lbnQiLCJNZXRyaWNzU2VydmljZSIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImxvY2F0aW9uIiwiaG9zdG5hbWUiLCJfbWV0cmljc0NvbmZpZ3VyYXRpb24iLCJtZXRyaWMiLCJwcmV2aW91c1ZhbHVlIiwicmVzb3VyY2UiLCJraW5kIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJtZXRyaWNSZWNvcmQiLCJ0aW1lc3RhbXAiLCJmdWxsUXVhbGlmaWVkTmFtZSIsIl9kb21haW4iLCJWZXJzaW9uTWFuYWdlciIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiX2lzU2VuZGluZyIsInNsaWNlIiwic2VuZE1ldHJpY3MiLCJ0aGVuIiwicmVzcG9uc2UiLCJjYXRjaCIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2UiLCJjYWxsYmFjayIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwiX2RlZmVycmVkcyIsImRvUmVzb2x2ZSIsImRvbmUiLCJwcm9taXNlUmVzb2x2ZSIsInJlYXNvbiIsInByb21pc2VSZWplY3QiLCJuZXdWYWx1ZSIsInByb21pc2UiLCJmaW5hbGUiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9pbW1lZGlhdGUiLCJfdW5oYW5kbGVkUmVqZWN0aW9uIiwiaSIsImxlbiIsImhhbmRsZSIsImRlZmVycmVkIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwicmVzdWx0IiwiYXJyIiwicmVzb2x2ZSIsInJlamVjdCIsImlzQXJyYXkiLCJwcm90b3R5cGUiLCJyZW1haW5pbmciLCJtYW5hZ2VSZXNwb25zZSIsImNvbnN0cnVjdG9yIiwiXyIsInNldFRpbWVvdXQiLCJ3YXJuIiwiUHJvbWlzZUhhbmRsZXIiLCJQZWVyQ29ubmVjdGlvblNlcnZpY2UiLCJGZWF0dXJlRW5hYmxlbWVudCIsInByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWNoZWQiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwicGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJwZWVyQ29ubmVjdGlvbiIsInN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIiLCJhdWRpb1RyYW5zY2VpdmVyIiwiYWRkVHJhbnNjZWl2ZXIiLCJkaXJlY3Rpb24iLCJ2aWRlb1RyYW5zY2VpdmVyIiwiY3JlYXRlT2ZmZXIiLCJvZmZlclRvUmVjZWl2ZUF1ZGlvIiwib2ZmZXJUb1JlY2VpdmVWaWRlbyIsImxvY2FsT2ZmZXIiLCJpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nIiwidXBkYXRlU3RhdGlzdGljVGltZU91dCIsIlJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwibWVkaWFTdHJlYW0iLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfdHJhY2tzVG9Nb25pdG9yIiwiZ2V0VHJhY2tzIiwibWFwIiwidHJhY2siLCJwYXJzZWRTRFAiLCJTZHBQYXJzZXIiLCJjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24iLCJzZHAiLCJfZXN0aW1hdGVkQXVkaW9Db2RlYyIsImF1ZGlvQ29kZWMiLCJfZXN0aW1hdGVkVmlkZW9Db2RlYyIsInZpZGVvQ29kZWMiLCJ1cGRhdGVTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lT3V0IiwiY2xlYXJUaW1lb3V0IiwidXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiZ2V0S2luZEZvclNhZmFyaTExIiwiaWQiLCJnZXRTdGF0cyIsInN0YXRzIiwicnRjU3RhdHMiLCJyb3VuZFRyaXBUaW1lIiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsInNzcmMiLCJieXRlc1JlY2VpdmVkIiwicGFja2V0c0xvc3QiLCJwYWNrZXRzUmVjZWl2ZWQiLCJnZXRDb2RlY0J5VHlwZSIsIl9ydGNTdGF0aXN0aWMiLCJ2aWRlbyIsImZyYW1lc0RlY29kZWQiLCJnZXRTdGF0c0xlZ2FjeSIsInJlcG9ydCIsIm5hbWVzIiwic3RhdCIsIl9zZHAiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsInNwbGl0U2RwIiwidXNlZENvZGVjTGluZSIsImZpbmQiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJjb25maWd1cmF0aW9uIiwid2Via2l0UlRDUGVlckNvbm5lY3Rpb24iLCJSVENQZWVyQ29ubmVjdGlvbiIsIm9wdGlvbnMiLCJjcmVhdGVBbnN3ZXIiLCJkZXNjcmlwdGlvbiIsInNldExvY2FsRGVzY3JpcHRpb24iLCJSVENTZXNzaW9uRGVzY3JpcHRpb24iLCJoYXNDcnlwdG8iLCJzZXRSZW1vdGVEZXNjcmlwdGlvbiIsInNlbGVjdG9yIiwiZ2V0Q29uZmlndXJhdGlvbiIsInNldENvbmZpZ3VyYXRpb24iLCJjbG9zZSIsImN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIiwiaWNlQ29ubmVjdGlvblN0YXRlIiwiaGFuZGxlciIsIm9udHJhY2siLCJvbmljZWNhbmRpZGF0ZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsInN1YmplY3QiLCJfc3ViamVjdCIsInN1YnNjcmliZSIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsImxpc3RlbmVycyIsImlkeCIsIl9saXN0ZW5lcnMiLCJjaGFuZ2VkIiwiY29tcGFyYWJsZSIsImVxdWFscyIsImJhc2VVUkwiLCJvcmlnaW4iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwicmVtb3ZlIiwiaWdub3JlZFRlbmFuY3kiLCJfbWV0cmljc1NlcnZpY2UiLCJEaXNjb3ZlcnlVcmkiLCJpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiZ2V0Qm9vbGVhblZhbHVlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsImRpc2NvdmVyeVVyaSIsImdldFRlbGVtZXRyeVVybCIsImNoYW5uZWxUb2tlbiIsInBhcnNlZFRva2VuIiwiRWRnZUF1dGgiLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsIl9pbml0aWFsaXplZCIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJ3ZWJQbGF5ZXJMb2FkZXIiLCJfd2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsIl9obHNKc0xvYWRlciIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX2NsaWVudFNlc3Npb25JZCIsIl9sb2FkZWRUaW1lc3RhbXAiLCJfcmVhZE9ubHlJbml0aWFsaXplZCIsIl9yZWFkT25seURpc2NvdmVyeVVyaSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24iLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImluaXQiLCJzZWdtZW50cyIsInByb3RvY29sIiwidW5zaGlmdCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImpvaW4iLCJCaXRyYXRlU3RhdGUiLCJCaXRyYXRlTW9kZSIsImRlZmF1bHRUYXJnZXRMYWciLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsImZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMiLCJzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMiLCJDaGFubmVsIiwidmlkZW9FbGVtZW50IiwidG9rZW4iLCJ0YXJnZXRMYWciLCJfY29udGV4dCIsIkNoYW5uZWxDb250ZXh0IiwiX2NoYW5uZWxTdGFydFRpbWUiLCJfcmVhZE9ubHlWaWRlb0VsZW1lbnQiLCJfcmVhZE9ubHlUb2tlbiIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uIiwiX3JlYWRPbmx5U3RhdGUiLCJzdGF0ZSIsIl9yZWFkT25seUF1dG9NdXRlZCIsImF1dG9NdXRlZCIsIl9yZWFkT25seUF1dG9QYXVzZWQiLCJhdXRvUGF1c2VkIiwiX3JlYWRPbmx5VG9rZW5FeHBpcmluZyIsInRva2VuRXhwaXJpbmciLCJfcmVhZE9ubHlBdXRob3JpemVkIiwiYXV0aG9yaXplZCIsIl9yZWFkT25seU9ubGluZSIsIm9ubGluZSIsIl9yZWFkT25seUxvYWRpbmciLCJsb2FkaW5nIiwiX3JlYWRPbmx5UGxheWluZyIsInBsYXlpbmciLCJfcmVhZE9ubHlTdGFuZGJ5Iiwic3RhbmRieSIsIl9yZWFkT25seVN0b3BwZWQiLCJzdG9wcGVkIiwiX3JlYWRPbmx5VGFyZ2V0TGFnIiwiX3JlYWRPbmx5TGFnIiwibGFnIiwiX3JlYWRPbmx5Qml0cmF0ZUxpbWl0IiwiYml0cmF0ZUxpbWl0IiwiX3JlYWRPbmx5UmVzb2x1dGlvbiIsInJlc29sdXRpb24iLCJfcmVhZE9ubHlGYWlsdXJlQ291bnQiLCJmYWlsdXJlQ291bnQiLCJfcmVhZE9ubHlFbmRQb2ludCIsImVuZFBvaW50IiwiX3JlYWRPbmx5U3RyZWFtIiwic3RyZWFtIiwiX3JlYWRPbmx5UnRjU3RhdGlzdGljcyIsInJ0Y1N0YXRpc3RpY3MiLCJfcmVhZE9ubHlNZWRpYVN0cmVhbSIsInNlc3Npb25UZWxlbWV0cnkiLCJTZXNzaW9uVGVsZW1ldHJ5IiwiY2hhbm5lbERpc3Bvc2FibGVzIiwiX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciIsImhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkIiwicmVuZGVyZXJEaXNwb3NhYmxlcyIsInZpZGVvVGVsZW1ldHJ5IiwiZGF0YXNldCIsIlZpZGVvVGVsZW1ldHJ5Iiwic2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSIsInNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyIsIkNoYW5uZWxTdGF0ZSIsInJlc3RhcnRBZnRlclN0b3AiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMiLCJlbGFwc2VkSW5NaWxsaXNlY29uZHMiLCJjaGFubmVsSW5pdGlhbGl6YXRpb24iLCJnZXRUaW1lIiwibGltaXRCaXRyYXRlIiwic3RhcnQiLCJ3aWR0aCIsInZpZGVvV2lkdGgiLCJoZWlnaHQiLCJ2aWRlb0hlaWdodCIsIkRpbWVuc2lvbiIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJzdGF0dXMiLCJwYXVzZSIsInNyY09iamVjdCIsImNsZWFuVXBSZXNvdXJjZXMiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIm11dGVkIiwic3RvcCIsImlzRGlzcG9zZWQiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwidXJpIiwiZ2V0VXJpIiwic3RyZWFtUGxheWVyIiwiU3RyZWFtRmFjdG9yeSIsImhhbmRsZVN0cmVhbUZhaWx1cmUiLCJmYWlsIiwiZmluYWxseSIsInRpbWVvdXRJZCIsImdldFJldHJ5SW50ZXJ2YWwiLCJkaXNwb3NhYmxlcyIsIm1pbiIsInBvdyIsIm1heCIsImRlc3Ryb3lTdHJlYW0iLCJwbGF5UHJvbWlzZSIsInBsYXkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwiQ2hhbm5lbHMiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiYml0cmF0ZU1vZGUiLCJCaXRyYXRlU3RhdGVNYXBwaW5nIiwiYml0cmF0ZVN0YXRlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIkRpc2NvdmVyeSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJfY2FjaGUiLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiRGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsImRlZmF1bHRUaW1lb3V0IiwiX3VyaSIsInRpbWVvdXQiLCJyYWNlIiwib2siLCJ0ZXh0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJFbmRQb2ludCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwibmV2ZXJSZXNvbHZlIiwicGluZyIsInRpbWUiLCJzZGtWZXJzaW9uIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwiX2Rpc2NvdmVyeVVyaSIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsImJ1aWxkUGluZ1VybCIsImZpbmlzaGVkIiwiX3JvdW5kVHJpcFRpbWUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImFwcGxpY2F0aW9uSWQiLCJidWlsZFVybCIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiZWRnZUF1dGhUb2tlbiIsInNlc3Npb25EZXNjcmlwdGlvbiIsImNvbnZlcnRSVENTZHBUeXBlVG9TZHBUeXBlIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJib2R5V2l0aG91dE9mZmVyIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbiIsImh0dHBSZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJkZWJ1ZyIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsImNhbmRpZGF0ZXMiLCJkaXNjb3ZlcnlDb21wbGV0ZWQiLCJtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsInBhdGgiLCJwYXRoQXNBcnJheSIsImNvbmNhdCIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiYnVuZGxlUG9saWN5IiwiaWNlQ2FuZGlkYXRlUG9vbFNpemUiLCJpY2VTZXJ2ZXJzIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsImljZVRyYW5zcG9ydFBvbGljeSIsInBlZXJJZGVudGl0eSIsInJ0Y3BNdXhQb2xpY3kiLCJjb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsInJ0Y1Nlc3Npb25EZXNjcmlwdGlvbiIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJpc1ZhbGlkVG9rZW4iLCJlbmNvZGVkRWRnZUF1dGhUb2tlbiIsImF0b2IiLCJzdWJzdHIiLCJwYXJzZSIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwiY2hhbm5lbENvbnRleHQiLCJfY2hhbm5lbENvbnRleHQiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsImFsbCIsInN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiIsInN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImFwcGx5U3RhdHVzIiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJhZGRJY2VDYW5kaWRhdGVzIiwicmV0cnlDYWxsYmFjayIsIm9uTGluZSIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwic3RyZWFtcyIsInRyYWNrTGlzdGVuZXIiLCJhbnN3ZXIiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInN1Y2Nlc3MiLCJydGNDb25uZWN0aW9uTW9uaXRvciIsInJ0Y1N0YXRpc3RpYyIsInN0YXRpc3RpY3MiLCJydGNWaWRlb1N0YXRpc3RpYyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwiYXVkaW8iLCJhdWRpb1RyYWNrRmFpbGVkIiwidmlkZW9UcmFja0ZhaWxlZCIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJ0cnVuY2F0ZUljZVNlcnZlcnMiLCJuZXdSdGNDb25maWd1cmF0aW9uIiwiaWNlUmVzdGFydCIsIm9mZmVyIiwiUmVhbFRpbWVTdHJlYW1GYWN0b3J5IiwiaXNSdG1wIiwiY2FwYWJpbGl0aWVzIiwiaXNTdHJlYW1pbmciLCJfX1NES1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJsb2dNZXNzYWdlcyIsIm51bWJlck9mTG9nc1RvU2VuZCIsInNpemVPZkxvZ3NUb1NlbmQiLCJnZXRMb2dTaXplIiwic3VtIiwic2VuZExvZ3MiLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJmbG9vciIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0Iiwib3RoZXIiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdHJlYW1JZCIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwiZXZlbnQiLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiZW5kIiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBO0FBQ0E7O0FBRUEsd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1DOzs7Ozs7Ozs7O0FDVkE7QUFDQTtBQUNBOztBQUVBLGlDOzs7Ozs7Ozs7O0FDSkEsdUJBQXVCLG1CQUFPLENBQUMscUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7O0FBRUEsb0M7Ozs7Ozs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDOzs7Ozs7Ozs7OztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNILElBQUksT0FBTztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLG1DOzs7Ozs7Ozs7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7QUNOQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Qjs7Ozs7Ozs7OztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlDOzs7Ozs7Ozs7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztB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OztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0EsOENBQThDLE9BQU87O0FBRXJEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxLQUEwQixvQkFBb0IsQ0FBRTtBQUNsRDs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7VUN4dEJBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7OztXQ3JCQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsZ0NBQWdDLFlBQVk7V0FDNUM7V0FDQSxFOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0Esd0NBQXdDLHlDQUF5QztXQUNqRjtXQUNBO1dBQ0EsRTs7Ozs7V0NQQSxzRjs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSxzREFBc0Qsa0JBQWtCO1dBQ3hFO1dBQ0EsK0NBQStDLGNBQWM7V0FDN0QsRTs7OztVQ05BO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6ImNoYW5uZWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheTsiLCJmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheVwiKTtcblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlczsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQ7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3I7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2s7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzczsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHk7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mXCIpO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuICB2YXIgX2UgPSB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQ7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCIpO1xuXG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpO1xuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuOyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdFwiKTtcblxudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3RcIik7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXk7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXNcIik7XG5cbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZFwiKTtcblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5OyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfdHlwZW9mKG9iaik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZjsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXlcIik7XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWlnbm9yZSAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlICovXG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gIWRvY3VtZW50W2hpZGRlbl07XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudFtoaWRkZW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG5cbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbkZvckRvY3VtZW50Rm9jdXMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9IGRvY3VtZW50Lmhhc0ZvY3VzKCk7XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH0sIGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gbnVsbDtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzRm9yZWdyb3VuZCA9PT0gaXNGb3JlZ3JvdW5kKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gaXNGb3JlZ3JvdW5kO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG4vLyBUaGlzIGZpbGUgaXMgdXNlZCBvbmx5IGZvciB0aGUgc2lsZW50IGJ1aWxkIHRvIG1vY2sgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBjbGFzc1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgZ2V0U3RyaW5nVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0U3RyaW5nVmFsdWVbbmFtZV07XG4gIH1cblxuICBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlXG4gICAgfTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yWydjb25uZWN0aW9uJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmsgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmtNYXg7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAnVW5rbm93bic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmVmZmVjdGl2ZVR5cGUgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10udHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5ydHQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICAgIH07XG5cbiAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19QUklWQUNZX01PREVfXzogYm9vbGVhbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJpdmFjeU1vZGUge1xuICBwcml2YXRlIHN0YXRpYyBfaXNQcml2YXRlOiBib29sZWFuO1xuXG4gIHN0YXRpYyBnZXQgaXNQcml2YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ByaXZhdGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlJc1ByaXZhdGUoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2lzUHJpdmF0ZSA9IF9fUFJJVkFDWV9NT0RFX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5faXNQcml2YXRlID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cblByaXZhY3lNb2RlLmFwcGx5SXNQcml2YXRlKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZCwgc3RyZWFtSWQpO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZFN0cmVhbU1ldHJpYyhNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZFN0cmVhbU1ldHJpYyhtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZSwgc3RyZWFtSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWV0cmljU3VibWl0dGVkKSB7XG4gICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY1N1Ym1pdHRlZCA9IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldHVwVGltZSA9IG5vdyAtIHRoaXMuX3N0YXJ0VGltZTtcbiAgICBjb25zdCBtZXRyaWNOYW1lID0gbmV3IE1ldHJpY1R5cGUobWV0cmljVHlwZSkuZ2V0TmFtZSgpO1xuXG4gICAgdGhpcy5tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogc2V0dXBUaW1lfSxcbiAgICAgIHN0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gU3RyZWFtIG1ldHJpYyBbJXNdIGluIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBuZXcgRHVyYXRpb25zKHNldHVwVGltZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbElucHV0VHlwZXMgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcml2YWN5TW9kZSBmcm9tICcuLi9kb20vUHJpdmFjeU1vZGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBQcml2YWN5TW9kZS5pc1ByaXZhdGUgPyBMb2dnaW5nTGV2ZWwuT2ZmIDogTG9nZ2luZ0xldmVsLkFsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gTG9nZ2luZ0xldmVsLk9mZiA6IExvZ2dpbmdMZXZlbC5BbGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJyk7XG5cbiAgICBpZiAoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSkge1xuICAgICAgdGhpcy5fdGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKG5hbWU6IHN0cmluZywgYXBwbHlBcHBlbmRlcjogKGxldmVsOiBMb2dnaW5nTGV2ZWwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoYHBoZW5peC0ke25hbWV9LWxvZ2dpbmctbGV2ZWxgKTtcblxuICAgIGlmIChwYXJhbWV0ZXJWYWx1ZSA9PT0gJ09mZicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcHBseUFwcGVuZGVyKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlDb25zb2xlTG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIobGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5VGVsZW1ldHJ5TG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsSW5wdXRUeXBlc30gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsSW5wdXRUeXBlcyk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdUaHJlc2hvbGQge1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHZhbHVlKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldFRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY1R5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzVHlwZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzOiBNZXRyaWNzVHlwZSkge1xuICAgIHRoaXMuX21ldHJpY3MgPSBtZXRyaWNzO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNZXRyaWNzVHlwZVt0aGlzLl9tZXRyaWNzXTtcbiAgfVxuXG4gIGdldFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU3RhbGxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQnVmZmVyaW5nOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fbWV0cmljcyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi9NZXRyaWNUeXBlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDEwMjQ7XG5cbmludGVyZmFjZSBJVmFsdWUge1xuICBzdHJpbmc/OiBzdHJpbmc7XG4gIHVpbnQ2ND86IG51bWJlcjtcbiAgZmxvYXQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJTWV0cmljUmVjb3JkIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIG1ldHJpYzogc3RyaW5nO1xuICB2YWx1ZTogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlOiBJVmFsdWU7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIElNZXRyaWMge1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgbWV0cmljVHlwZTogTWV0cmljc1R5cGU7XG4gIHZhbHVlPzogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlPzogSVZhbHVlO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBfbWV0cmljczogQXJyYXk8SU1ldHJpY1JlY29yZD4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgZ2V0IG1ldHJpY3NDb25maWd1cmF0aW9uKCk6IE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKG1ldHJpYzogSU1ldHJpYyk6IHZvaWQge1xuICAgIGNvbnN0IHtzdHJlYW1JZCwgdmFsdWUsIHByZXZpb3VzVmFsdWUsIHJ1bnRpbWUsIHJlc291cmNlLCBraW5kfSA9IG1ldHJpYztcbiAgICBjb25zdCBtZXRyaWNUeXBlID0gbmV3IE1ldHJpY1R5cGUobWV0cmljLm1ldHJpY1R5cGUpO1xuXG4gICAgaWYgKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA+IG1ldHJpY1R5cGUuZ2V0VGVsZW1ldHJ5TGV2ZWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWM6IG1ldHJpY1R5cGUuZ2V0TmFtZSgpLFxuICAgICAgdmFsdWUsXG4gICAgICBwcmV2aW91c1ZhbHVlLFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBydW50aW1lLFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBraW5kXG4gICAgfTtcblxuICAgIHRoaXMuX21ldHJpY3MucHVzaChtZXRyaWNSZWNvcmQpO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzOiBBcnJheTxJTWV0cmljUmVjb3JkPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBQcml2YWN5TW9kZS5pc1ByaXZhdGUgPyBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWwgOiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8qIGVzbGludC1kaXNhYmxlICovXG4gIC8vIEB0cy1pZ25vcmVcbiAgdGhlbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQ7XG4gIC8qIGVzbGludC1lbmFibGUqL1xuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICB0aGlzLmRvUmVzb2x2ZShjYWxsYmFjayk7XG4gIH1cblxuICBkb1Jlc29sdmUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvbWlzZVJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlc29sdmUobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9taXNlcy1hcGx1cy9Qcm9taXNlcy1zcGVjI3RoZS1Qcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBQcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0IHNlbGYuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9taXNlLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICBwcm9taXNlLmZpbmFsZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcHJvbWlzZS5kb1Jlc29sdmUoZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICB0aGVuLmFwcGx5KG5ld1ZhbHVlLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N0YXRlID0gMTtcbiAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBwcm9taXNlLmZpbmFsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucHJvbWlzZVJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVqZWN0KG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZHtcbiAgICB0aGlzLl9zdGF0ZSA9IDI7XG4gICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLmZpbmFsZSgpO1xuICB9XG5cbiAgZmluYWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gMiAmJiB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICBQcm9taXNlLl91bmhhbmRsZWRSZWplY3Rpb24odGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5fZGVmZXJyZWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmhhbmRsZSh0aGlzLl9kZWZlcnJlZHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmVycmVkcyA9IG51bGw7XG4gIH1cblxuICBoYW5kbGUoZGVmZXJyZWQ6IFByb21pc2VIYW5kbGVyKTogdm9pZCB7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB3aGlsZSAocHJvbWlzZS5fc3RhdGUgPT09IDMpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLl92YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDApIHtcbiAgICAgIHByb21pc2UuX2RlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21pc2UuX2hhbmRsZWQgPSB0cnVlO1xuICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHByb21pc2UuX3N0YXRlID09PSAxID8gZGVmZXJyZWQub25GdWxmaWxsZWQgOiBkZWZlcnJlZC5vblJlamVjdGVkO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAxKSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2socHJvbWlzZS5fdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYWxsKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLmFsbCBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKTtcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKFtdKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlbWFpbmluZyA9IGFyZ3MubGVuZ3RoO1xuICAgICAgY29uc3QgbWFuYWdlUmVzcG9uc2UgPSAoaSwgdmFsdWUpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgY29uc3QgdGhlbiA9IHZhbHVlLnRoZW47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gbWFuYWdlUmVzcG9uc2UoaSwgdmFsdWUpLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhcmdzW2ldID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYW5hZ2VSZXNwb25zZShpLCBhcmdzW2ldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlKHZhbHVlKTogUHJvbWlzZSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmVqZWN0KHZhbHVlKTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHJlamVjdCh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJhY2UoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UucmFjZSBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShhcnJbaV0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW1tZWRpYXRlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBfdW5oYW5kbGVkUmVqZWN0aW9uKGVycm9yKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjonLCBlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ3RoZW4nXSA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigoKSA9PiBudWxsKTtcblxuICB0aGlzLmhhbmRsZShuZXcgUHJvbWlzZUhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpKTtcblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmdW5jdGlvbihjYWxsYmFjazogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIHZhbHVlID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB2YWx1ZSksXG4gICAgcmVhc29uID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKSlcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL1Byb21pc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlSGFuZGxlciB7XG4gIG9uRnVsZmlsbGVkOiBGdW5jdGlvbjtcbiAgb25SZWplY3RlZDogRnVuY3Rpb247XG4gIHByb21pc2U6IFByb21pc2U7XG5cbiAgY29uc3RydWN0b3Iob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpIHtcbiAgICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHtcbiAgYXVkaW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICB2aWRlb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIGxvY2FsT2ZmZXI6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlJyk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXJcIicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQ7XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSA9IFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWU7XG5cbiAgICByZXR1cm4gcGVlckNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKClcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb246ICdyZWN2b25seSd9KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbjogJ3JlY3Zvbmx5J30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyLFxuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgIGxvY2FsT2ZmZXI6IGF3YWl0IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPyB1bmRlZmluZWQgOiB7XG4gICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cblBlZXJDb25uZWN0aW9uU2VydmljZS5pbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lT3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZU91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVPdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZU91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICBpZiAoaS50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIGkuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IGkuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaS50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSBpLmtpbmQgfHwgaS5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKGkpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSBpLmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogaS5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBpLnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IGkuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiBpLnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiBpLnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXS5mcmFtZXNEZWNvZGVkID0gaS5mcmFtZXNEZWNvZGVkO1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdHNba2luZF1bJ2ZwcyddID0gKGkuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0c1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZU91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdHM6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXSA9IHt0aW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydieXRlc1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgnYnl0ZXNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydjb2RlYyddID0gcmVwb3J0LnN0YXQoJ2dvb2dDb2RlY05hbWUnKS50b1N0cmluZygpIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUobWVkaWFUeXBlKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnZnBzJ10gPSAocnRjU3RhdHNbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0cztcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVPdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lT3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNwbGl0U2RwID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNwbGl0U2RwLmZpbmQoaXRlbSA9PiBpdGVtLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NwbGl0U2RwLmZpbmQoaSA9PiBpLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSkuc3BsaXQoJyAnKVszXX1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZS5zcGxpdCgnICcpWzFdO1xuICAgIGNvbnN0IGNvZGVjTmFtZSA9IHVzZWRDb2RlYy5zcGxpdCgnLycpWzBdO1xuXG4gICAgcmV0dXJuIGNvZGVjTmFtZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiwge1BlZXJDb25uZWN0aW9uRXZlbnRzfSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBpY2VDb25uZWN0aW9uU3RhdGUoKTogUlRDSWNlQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmVyKG9wdGlvbnM/OiBSVENPZmZlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgdHlwZXNjcmlwdCBkb2VzIG5vdCBoYXZlIGxlZ2FjeSBnZXRTdGF0cyB0eXBlc1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbnN3ZXIob3B0aW9ucz86IFJUQ0Fuc3dlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgdHlwZXNjcmlwdCBkb2VzIG5vdCBoYXZlIGxlZ2FjeSBnZXRTdGF0cyB0eXBlc1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzQ3J5cHRvID0gZGVzY3JpcHRpb24uc2RwLm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgYXMgdHlwZXNjcmlwdCBkb2VzIG5vdCBoYXZlIGxlZ2FjeSBnZXRTdGF0cyB0eXBlc1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhyZXNvbHZlKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICB9KTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkVHJhbnNjZWl2ZXIobmFtZTogc3RyaW5nLCBvcHRpb25zOiBSVENSdHBUcmFuc2NlaXZlckluaXQpOiBSVENSdHBUcmFuc2NlaXZlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKG5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHNldCBvbnRyYWNrKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbnRyYWNrKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrO1xuICB9XG5cbiAgc2V0IG9uaWNlY2FuZGlkYXRlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2VjYW5kaWRhdGUoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlO1xuICB9XG5cbiAgc2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBFZGdlQXV0aCBmcm9tICcuL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsSW5wdXRUeXBlc30gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciBmcm9tICcuLi9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3InO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsSW5wdXRUeXBlcztcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbElucHV0VHlwZXM7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthUGxheWVyTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc0pzTG9hZGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCFQcml2YWN5TW9kZS5pc1ByaXZhdGUpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFNESy5fcGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbElucHV0VHlwZXMge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gRWRnZUF1dGguZ2V0VGVuYW5jeShwYXJzZWRUb2tlbik7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbikgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBgJHtiYXNlVVJJVmFsdWV9L3BjYXN0L2VuZFBvaW50c2A7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZGlzY292ZXJ5VXJpKSB7XG4gICAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgIFNESy5fcGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbX0gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5cbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuLi9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4vQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMjAwMDtcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VmlkZW9FbGVtZW50OiBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW46IFJlYWRPbmx5U3ViamVjdDxFZGdlVG9rZW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGF0ZTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b011dGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b1BhdXNlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuRXhwaXJpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRob3JpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5T25saW5lOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TG9hZGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBsYXlpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGFuZGJ5OiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RvcHBlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRhcmdldExhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5Qml0cmF0ZUxpbWl0OiBSZWFkT25seVN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVzb2x1dGlvbjogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSdGNTdGF0aXN0aWNzOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgdG9rZW46IHN0cmluZywgdGFyZ2V0TGFnOiBudW1iZXIgPSBkZWZhdWx0VGFyZ2V0TGFnKSB7XG4gICAgdGhpcy5fY29udGV4dCA9IG5ldyBDaGFubmVsQ29udGV4dCh0b2tlbiwgdGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fY29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9jb250ZXh0LnBlZXJDb25uZWN0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YXRlID0gbmV3IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+KHRoaXMuX2NvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQuYXV0aG9yaXplZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlPbmxpbmUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LnBsYXlpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhbmRieSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY29udGV4dC50YXJnZXRMYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY29udGV4dC5zdHJlYW0pO1xuICAgIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcyA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHRoaXMuX2NvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0pO1xuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRoaXMuX2NvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IEVkZ2VBdXRoLmdldFRlbmFuY3kocGFyc2VkVG9rZW4pIHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX2NvbnRleHQuc2Vzc2lvblRlbGVtZXRyeSA9IG5ldyBTZXNzaW9uVGVsZW1ldHJ5KFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkuZGlzcG9zZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLnZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHRoaXMudmlkZW9FbGVtZW50KTtcblxuICAgICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2NvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY29udGV4dC5yZXNvbHV0aW9uLnN1YnNjcmliZShyZXNvbHV0aW9uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBiaXRyYXRlTGltaXQsXG4gICAgICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgICAgIEJpdHJhdGVNb2RlLk5vcm1hbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgdmlkZW9FbGVtZW50KCk6IEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gRGltZW5zaW9uLmVtcHR5O1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b2tlbigpOiBFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuOiBFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX2NvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl9jb250ZXh0LnRva2VuRXhwaXJpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBFZGdlQXV0aC5nZXRUZW5hbmN5KHBhcnNlZFRva2VuKSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdHMoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IGJpdHJhdGVMaW1pdDtcbiAgfVxuXG4gIGNsZWFyQml0cmF0ZUxpbWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICBCaXRyYXRlTW9kZS5SZXNldFxuICAgICAgKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIHN0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMocmVhc29uKTtcblxuICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9jb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuKTogVVJMIHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IHVybCA9IEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbik7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9jb250ZXh0LnNlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aC5pc1ZhbGlkVG9rZW4odG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG4gICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuICAgIGNvbnN0IHN0cmVhbVBsYXllciA9IFN0cmVhbUZhY3RvcnkuY3JlYXRlKHRva2VuLCB0aGlzLl9jb250ZXh0LCB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUuYmluZCh0aGlzKSk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRpc2NvdmVyIGVuZCBwb2ludCwgbWFya2luZyBhcyBvZmZsaW5lJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0YXJ0QWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXR0ZW1wdCBmYXN0LCBhZnRlciB0aGF0IGV4cG9uZW50aWFsIHdpdGggYmFja29mZiBpbnRlcnZhbFxuICAgICAgICByZXR1cm4gTWF0aC5taW4obWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMsIE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRzLCBNYXRoLm1heCgwLCB0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSAtIDEpKSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbUZhaWx1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gcmVzdHJpY3RlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGxheWluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBhdXNlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBpbnZva2UgcGxheSgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKHJlYXNvbjogc3RyaW5nID0gZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX2NvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWU7XG5cbiAgICBpZiAocGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX2NvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY29udGV4dC5zdGFuZGJ5LnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbSh0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG5cbiAgICBjb25zdCBwbGF5UHJvbWlzZSA9IHZpZGVvRWxlbWVudC5wbGF5KCk7XG5cbiAgICBpZiAocGxheVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWMsIElSdGNTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgdG9rZW46IFN1YmplY3Q8RWRnZVRva2VuPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG5cbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHNlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodG9rZW46IHN0cmluZywgdGFyZ2V0TGFnOiBudW1iZXIpIHtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnJlbmRlcmVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSBuZXcgU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PihudWxsKTtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPihDaGFubmVsU3RhdGUuU3RhcnRpbmcpO1xuICAgIHRoaXMuYXV0b011dGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0b1BhdXNlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4odGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LnZhbHVlICYmIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgIH1cbiAgfVxuXG4gIG1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YW5kQnk7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBDaGFubmVsU3RhdGUge1xuICBPZmZsaW5lID0gMSxcbiAgU3RhcnRpbmcsXG4gIFBhdXNlZCxcbiAgUGxheWluZyxcbiAgUmVjb3ZlcmluZyxcbiAgUmVjb25uZWN0aW5nLFxuICBTdGFuZEJ5LFxuICBTdG9wcGVkLFxuICBVbmF1dGhvcml6ZWQsXG4gIEdlb1Jlc3RyaWN0ZWQsXG4gIEdlb0Jsb2NrZWQsXG4gIEVycm9yLFxuICBVbnN1cHBvcnRlZEZlYXR1cmVcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQ2hhbm5lbCBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFZGdlVG9rZW59IGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VUb2tlbic7XG5pbXBvcnQge01pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbnR5cGUgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgdG9rZW46IEVkZ2VUb2tlbjtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWxzIHtcbiAgc3RhdGljIGNyZWF0ZUNoYW5uZWwob3B0aW9uczogQ3JlYXRlQ2hhbm5lbE9wdGlvbnMpOiBDaGFubmVsIHtcbiAgICBpZiAoIVNESy5pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgbm90IGxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIG9wdGlvbnMudGFyZ2V0TGFnKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IENoYW5uZWxzIGZyb20gJy4vQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHREaXNjb3ZlcnlVcmkgPSAnaHR0cHM6Ly9wY2FzdC5waGVuaXhydHMuY29tL3BjYXN0L2VuZFBvaW50cyc7XG5cbmV4cG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlTW9kZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVNb2RlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUpOiBCaXRyYXRlTW9kZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZU1vZGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuTm9ybWFsOlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLkZvcmNlOlxuICAgICAgICByZXR1cm4gJ0ZvcmNlJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZU1vZGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlU3RhdGUsIEJpdHJhdGVTdGF0ZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVTdGF0ZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSk6IEJpdHJhdGVTdGF0ZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZVN0YXRlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5LZWVwOlxuICAgICAgICByZXR1cm4gJ0tlZXAnO1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmk6IFVSTCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG5cbiAgICBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuXG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGNvbnN0IG5ldmVyUmVzb2x2ZSA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IG5ldyBQcm9taXNlKCgpID0+IHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXF1ZXN0IFslc10gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZycsIHVybCk7XG4gICAgfSk7XG4gICAgY29uc3QgZW5kUG9pbnQgPSBhd2FpdCBQcm9taXNlLnJhY2UoZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBlbmRQb2ludFxuICAgICAgLnBpbmcoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIud2FybignRmFpbGVkIHRvIHBpbmcgZW5kIHBvaW50IFslc10nLCBlbmRQb2ludCwgZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldmVyUmVzb2x2ZSgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVybC5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJU2Vzc2lvbkRlc2NyaXB0aW9uLCBTZHBUeXBlfSBmcm9tICcuLi9hcGkvU2Vzc2lvbkRlc2NyaXB0aW9uJztcbmltcG9ydCB7SURlc3Ryb3lTdHJlYW1SZXF1ZXN0LCBJRGVzdHJveVN0cmVhbVJlc3BvbnNlfSBmcm9tICcuLi9hcGkvRGVzdHJveVN0cmVhbSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0lBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCwgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZX0gZnJvbSAnLi4vYXBpL0FkZEljZUNhbmRpZGF0ZXMnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNjtcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykgeyAvKiBIYW5kbGUgKi9cbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGluZyBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3VuZFRyaXBUaW1lID0gZmluaXNoZWQgLSBzdGFydDtcblxuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlKHRva2VuOiBzdHJpbmcsIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0b2tlbik7XG5cbiAgICBpZiAoIXBhcnNlZFRva2VuIHx8ICFwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHRlbmFuY3kgPSBwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBlZGdlQXV0aFRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLmNvbnZlcnRSVENTZHBUeXBlVG9TZHBUeXBlKGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBlZGdlQXV0aFRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5LCBodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc3Vic2NyaWJlIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogdGhpcy5jb252ZXJ0UlRDU2RwVHlwZVRvU2RwVHlwZShzZXNzaW9uRGVzY3JpcHRpb24udHlwZSksXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBuZXcgRXJyb3IoYFNldCByZW1vdGUgZGVzY3JpcHRpb24gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IHNldCBsaW1pdCBiaXRyYXRlIHJlc3BvbnNlIFslc10gaW4gWyVzXSBtcycsIHN0YXR1cywgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4ge3N0YXR1c307XG4gIH1cblxuICBhc3luYyBhZGRJY2VDYW5kaWRhdGVzKHN0cmVhbTogSVN0cmVhbSwgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10sIGRpc2NvdmVyeUNvbXBsZXRlZDogYm9vbGVhbiwgb3B0aW9uczogc3RyaW5nW10gPSBbXSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2ljZScsICdjYW5kaWRhdGVzJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgY2FuZGlkYXRlcyxcbiAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgRGVsZXRlIHN0cmVhbSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgdXJpLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3R5cGUnLCAnaHR0cCddLCBbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydfJywgYCR7RGF0ZS5ub3coKX1gXV0pLnRvU3RyaW5nKCl9YDtcblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTdWJzY3JpYmVSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2UubGFnID0gZGF0YS5sYWc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25zdCBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge307XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ0J1bmRsZVBvbGljeUJhbGFuY2VkJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSAnYmFsYW5jZWQnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQnVuZGxlUG9saWN5TWF4Q29tcGF0JzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSAnbWF4LWNvbXBhdCc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCdW5kbGVQb2xpY3lNYXhCdW5kbGUnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9ICdtYXgtYnVuZGxlJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGRhdGEucnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgICAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICAgICAgdXJsczogZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICAgICAgdXNlcm5hbWU6IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgICAgICBjcmVkZW50aWFsOiBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ0ljZVRyYW5zcG9ydFBvbGljeUFsbCc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gJ2FsbCc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJY2VUcmFuc3BvcnRQb2xpY3lSZWxheSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gJ3JlbGF5JztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0ljZVRyYW5zcG9ydFBvbGljeVB1YmxpYyc6XG4gICAgICAgICAgICAgIC8vIERlcHJlY2F0ZWQgLSBOb3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHkpIHtcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLnBlZXJJZGVudGl0eSA9IGRhdGEucnRjQ29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRhdGEucnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICAgICAgICBjYXNlICdSdGNwTXV4UG9saWN5TmVnb3RpYXRlJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gJ25lZ290aWF0ZSc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSdGNwTXV4UG9saWN5UmVxdWlyZSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9ICdyZXF1aXJlJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGRhdGEucnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gcnRjQ29uZmlndXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IHRoaXMuY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKX07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb246IElTZXNzaW9uRGVzY3JpcHRpb24pOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0IHtcbiAgICBjb25zdCBydGNTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQgPSB7c2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwfTtcblxuICAgIHN3aXRjaCAoc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZmVyJzpcbiAgICAgICAgcnRjU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgPSAnb2ZmZXInO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQW5zd2VyJzpcbiAgICAgICAgcnRjU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgPSAnYW5zd2VyJztcblxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHNlc3Npb25EZXNjcmlwdGlvbi50eXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnRjU2Vzc2lvbkRlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U6IElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5vcHRpb25zKSB7XG4gICAgICAgIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZS5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJRGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW06IElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW07XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRSVENTZHBUeXBlVG9TZHBUeXBlKHR5cGU6IFJUQ1NkcFR5cGUpOiBTZHBUeXBlIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Fuc3dlcic6XG4gICAgICAgIHJldHVybiAnQW5zd2VyJztcbiAgICAgIGNhc2UgJ29mZmVyJzpcbiAgICAgICAgcmV0dXJuICdPZmZlcic7XG4gICAgICBjYXNlICdwcmFuc3dlcic6XG4gICAgICBjYXNlICdyb2xsYmFjayc6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU0RQIHR5cGUgWyR7dHlwZX1dIGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJRWRnZUF1dGh9IGZyb20gJy4vRWRnZUF1dGhUb2tlbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtFZGdlVG9rZW59IGZyb20gJy4vRWRnZVRva2VuJztcblxuY29uc3QgZWRnZUF1dGhUb2tlblByZWZpeCA9ICdESUdFU1Q6JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZUF1dGgge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VkZ2VBdXRoJyk7XG5cbiAgc3RhdGljIHBhcnNlVG9rZW4odG9rZW46IEVkZ2VUb2tlbik6IElFZGdlQXV0aCB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRUb2tlbih0b2tlbikpIHtcbiAgICAgIEVkZ2VBdXRoLl9sb2dnZXIuZXJyb3IoJ1Rva2VuIGlzIG5vdCB2YWxpZCBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbmNvZGVkRWRnZUF1dGhUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlQXV0aFRva2VuID0gSlNPTi5wYXJzZShlbmNvZGVkRWRnZUF1dGhUb2tlbik7XG5cbiAgICAgIGVkZ2VBdXRoVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VBdXRoVG9rZW4udG9rZW4pO1xuXG4gICAgICByZXR1cm4gZWRnZUF1dGhUb2tlbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aC5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0VXJpKHBhcnNlZFRva2VuOiBJRWRnZUF1dGgpOiBVUkwge1xuICAgIHJldHVybiBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi51cmkgP1xuICAgICAgbmV3IFVSTChwYXJzZWRUb2tlbi50b2tlbi51cmkpIDogbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZW5hbmN5KHBhcnNlZFRva2VuOiBJRWRnZUF1dGgpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkID9cbiAgICAgIHBhcnNlZFRva2VuLmFwcGxpY2F0aW9uSWQgOiAnJztcbiAgfVxuXG4gIHN0YXRpYyBpc1ZhbGlkVG9rZW4odG9rZW46IEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUlRNUEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8IDg0KSB8fFxuICAgICAgKEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPCA3MCkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0VkZ2UnIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFbmRQb2ludCwge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSwge0lQZWVyQ29ubmVjdGlvbk9mZmVySW5pdH0gZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsQ29udGV4dCc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsPEVuZFBvaW50LCBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+KFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgbG9jYWxPZmZlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB0cmFja0xpc3RlbmVyID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICAgIGlmIChlLnN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKTtcbiAgICAgICAgICAgICAgfSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBhbnN3ZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbik7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5zdWNjZXNzKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkKTtcblxuICAgICAgICAgICAgICByZXR1cm4gbWVkaWFTdHJlYW1Qcm9taXNlO1xuICAgICAgICAgICAgfSkudGhlbihtZWRpYVN0cmVhbSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IHRoaXMudHJ1bmNhdGVJY2VTZXJ2ZXJzKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm4gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSdGNDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4ub3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAuLi5ydGNDb25maWd1cmF0aW9uXG4gICAgfTtcblxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihuZXdSdGNDb25maWd1cmF0aW9uKTtcblxuICAgIHJldHVybiBvcHRpb25hbFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB1cmxzLnB1c2goY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICB1cmxzOiB1cmxzLFxuICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWVcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGxvY2FsT2ZmZXIgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24obG9jYWxPZmZlcik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCBpc1J0bXAgPSBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMgJiYgcGFyc2VkVG9rZW4udG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdydG1wJyk7XG5cbiAgICBpZiAoaXNSdG1wKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBSVE1QIHBsYXliYWNrLicpO1xuICAgICAgY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNTdHJlYW1pbmcgPSBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMgJiYgcGFyc2VkVG9rZW4udG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKTtcblxuICAgIGlmIChpc1N0cmVhbWluZykge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdUaGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgTGl2ZSBTdHJlYW0gcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVhbFRpbWVTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1NES1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fU0RLVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGltZW5zaW9uIGltcGxlbWVudHMgSUNvbXBhcmFibGU8RGltZW5zaW9uPiB7XG4gIHJlYWRvbmx5IHdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuXG4gIHN0YXRpYyBnZXQgZW1wdHkoKTogRGltZW5zaW9uIHtcbiAgICByZXR1cm4gbmV3IERpbWVuc2lvbigwLCAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBEaW1lbnNpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgJiYgdGhpcy53aWR0aCA9PT0gb3RoZXIud2lkdGggJiYgdGhpcy5oZWlnaHQgPT09IG90aGVyLmhlaWdodDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMud2lkdGh9eCR7dGhpcy5oZWlnaHR9YDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtTdHJlYW1TZXR1cExpc3RlbmVyfSBmcm9tICcuLi9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IE5ldHdvcmtNb25pdG9yIGZyb20gJy4uL2RvbS9OZXR3b3JrTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuaW50ZXJmYWNlIElOZXR3b3JrU3RhdGlzdGljcyB7XG4gIHJ0dD86IG51bWJlcjtcbiAgZWZmZWN0aXZlVHlwZT86IHN0cmluZztcbiAgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlc3Npb25UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTZXNzaW9uVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBTREsuYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtNb25pdG9yOiBOZXR3b3JrTW9uaXRvciA9IG5ldyBOZXR3b3JrTW9uaXRvcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgX2xhc3ROZXR3b3JrU3RhdGlzdGljczogSU5ldHdvcmtTdGF0aXN0aWNzID0ge307XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtSVFRVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZWZmZWN0aXZlVHlwZS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5nZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IGlzRm9yZWdyb3VuZCA/IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZCA6IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZCxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VMYXN0Q2hhbmdlfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnQXBwbGljYXRpb24gaGFzIGdvbmUgaW50byB0aGUgWyVzXSBhZnRlciBbJXNdIG1zJyxcbiAgICAgIGlzRm9yZWdyb3VuZCA/ICdmb3JlZ3JvdW5kJyA6ICdiYWNrZ3JvdW5kJyxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlTGFzdENoYW5nZSkudG9Jc29TdHJpbmcoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrUlRUVXBkYXRlKG5ld1JUVDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRSdHQgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dCA9IG5ld1JUVDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBuZXdSVFR9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkUnR0ID8ge3VpbnQ2NDogb2xkUnR0fSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc291cmNlOiAnbmF2aWdhdG9yJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIFJUVCBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3UlRULFxuICAgICAgb2xkUnR0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUobmV3TmV0d29ya1R5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkTmV0d29ya1R5cGUgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlID0gbmV3TmV0d29ya1R5cGU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld05ldHdvcmtUeXBlfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZE5ldHdvcmtUeXBlID8ge3N0cmluZzogb2xkTmV0d29ya1R5cGV9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZWZmZWN0aXZlIHR5cGUgaGFzIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdOZXR3b3JrVHlwZSxcbiAgICAgIG9sZE5ldHdvcmtUeXBlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKG5ld0NhcGFjaXR5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZENhcGFjaXR5ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtmbG9hdDogbmV3Q2FwYWNpdHl9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkQ2FwYWNpdHkgPyB7ZmxvYXQ6IG9sZENhcGFjaXR5fSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGRvd25saW5rIHRocm91Z2hwdXQgY2FwYWNpdHkgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld0NhcGFjaXR5LFxuICAgICAgb2xkQ2FwYWNpdHlcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZGVvVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX2xpc3RlblRvRmlyc3RUaW1lOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JTdGFsbDogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yQ29udGludWF0aW9uOiAoZXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9TdGFsbGVkOiBudW1iZXI7XG4gIHByaXZhdGUgX2xhc3RQcm9ncmVzczogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1Jlc29sdXRpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXI6IERpc3Bvc2FibGU7XG4gIHByaXZhdGUgX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcjogRGlzcG9zYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzdHJlYW1JZDogc3RyaW5nLCBwYWdlTG9hZFRpbWU6IG51bWJlciwgY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lID0gKCk6IHZvaWQgPT4gdGhpcy5jYWxsVGltZVRvRmlyc3RGcmFtZSgpO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIH0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcik7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5Gb3JTdGFsbCA9ICgpOiB2b2lkID0+IHRoaXMub25TdGFsbCgpO1xuXG4gICAgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uID0gKGV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuXG4gICAgdGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkdXJhdGlvblNpbmNlUGFnZUxvYWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGltZVRvRmlyc3RGcmFtZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5wdXNoVGltZVRvRmlyc3RGcmFtZShub3cpO1xuICAgIHRoaXMucHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fdGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl90aW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIEZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fdGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9jaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gQ2hhbm5lbCBjcmVhdGlvbiB0byBmaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblN0YWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl92aWRlb1N0YWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlN0YWxsZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgc3RhbGxlZCcsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTogdm9pZCB7XG4gICAgaWYgKCF2aWRlby5idWZmZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHZpZGVvLmJ1ZmZlcmVkLmxlbmd0aDtcbiAgICBjb25zdCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdwbGF5aW5nJ1xuICAgIHx8IGJ1ZmZlckxlbmd0aCA+IDAgPyAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJ1xuICAgICAgfHwgZXZlbnQudHlwZSA9PT0gJ3RpbWV1cGRhdGUnKVxuICAgICAgJiYgdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpID09PSB0aGlzLl9sYXN0UHJvZ3Jlc3MgOiB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl92aWRlb1N0YWxsZWQgfHwgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJykge1xuICAgICAgdGhpcy5fbGFzdFByb2dyZXNzID0gdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZVN0b3AgPSBEYXRlLm5vdygpIC0gdGhpcy5fdmlkZW9TdGFsbGVkO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5CdWZmZXJpbmcsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZVN0b3B9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyByZWNvdmVyZWQgZnJvbSBzdGFsbCBhZnRlciBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZVN0b3ApLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IG51bGw7XG4gIH1cblxuICBvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMobmV3UmVzb2x1dGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3UmVzb2x1dGlvbn0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLl92aWRlb1Jlc29sdXRpb24gPyB7c3RyaW5nOiB0aGlzLl92aWRlb1Jlc29sdXRpb259IDogdW5kZWZpbmVkLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1Jlc29sdXRpb24gPSBuZXdSZXNvbHV0aW9uO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgcnVudGltZSA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgYSByZWplY3RlZCBQcm9taXNlIHdhcyB5aWVsZGVkLCB0aHJvdyB0aGUgcmVqZWN0aW9uIGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGhhbmRsZWQgdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIGlmIChQcm9taXNlSW1wbCA9PT0gdm9pZCAwKSBQcm9taXNlSW1wbCA9IFByb21pc2U7XG5cbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksXG4gICAgICBQcm9taXNlSW1wbFxuICAgICk7XG5cbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgLy8gTm90ZTogW1wicmV0dXJuXCJdIG11c3QgYmUgdXNlZCBmb3IgRVMzIHBhcnNpbmcgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4gIC8vIGFzIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IGVtcHR5XG4gIC8vIG9iamVjdC4gRWl0aGVyIHdheSwgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbiAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzIDoge31cbikpO1xuXG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgLy8gVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSBydW5uaW5nIGluIHN0cmljdCBtb2RlLCBzbyB0aGUgYWJvdmVcbiAgLy8gYXNzaWdubWVudCBzaG91bGQgYWx3YXlzIHdvcmsgdW5sZXNzIHNvbWV0aGluZyBpcyBtaXNjb25maWd1cmVkLiBKdXN0XG4gIC8vIGluIGNhc2UgcnVudGltZS5qcyBhY2NpZGVudGFsbHkgcnVucyBpbiBzdHJpY3QgbW9kZSwgd2UgY2FuIGVzY2FwZVxuICAvLyBzdHJpY3QgbW9kZSB1c2luZyBhIGdsb2JhbCBGdW5jdGlvbiBjYWxsLiBUaGlzIGNvdWxkIGNvbmNlaXZhYmx5IGZhaWxcbiAgLy8gaWYgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBmb3JiaWRzIHVzaW5nIEZ1bmN0aW9uLCBidXQgaW4gdGhhdCBjYXNlXG4gIC8vIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZSBhY2NpZGVudGFsIHN0cmljdCBtb2RlIHByb2JsZW0uIElmXG4gIC8vIHlvdSd2ZSBtaXNjb25maWd1cmVkIHlvdXIgYnVuZGxlciB0byBmb3JjZSBzdHJpY3QgbW9kZSBhbmQgYXBwbGllZCBhXG4gIC8vIENTUCB0byBmb3JiaWQgRnVuY3Rpb24sIGFuZCB5b3UncmUgbm90IHdpbGxpbmcgdG8gZml4IGVpdGhlciBvZiB0aG9zZVxuICAvLyBwcm9ibGVtcywgcGxlYXNlIGRldGFpbCB5b3VyIHVuaXF1ZSBwcmVkaWNhbWVudCBpbiBhIEdpdEh1YiBpc3N1ZS5cbiAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gbW9kdWxlWydkZWZhdWx0J10gOlxuXHRcdCgpID0+IG1vZHVsZTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
10420
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9Qcml2YWN5TW9kZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL1N0cmVhbVNldHVwTGlzdGVuZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZWRnZUF1dGgvRWRnZUF1dGgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL0RpbWVuc2lvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vU2Vzc2lvblRlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vVmlkZW9UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiRGlzcG9zYWJsZUxpc3QiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIlN1YmplY3QiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJSZWFkT25seVN1YmplY3QiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJfZGlzcG9zYWJsZXMiLCJkaXNwb3NlIiwiaGlkZGVuIiwidmlzaWJpbGl0eUNoYW5nZSIsImRvY3VtZW50IiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJEaXNwb3NhYmxlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbkZvckRvY3VtZW50Rm9jdXMiLCJjYWxsIiwiX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCIsIndpbmRvdyIsInNldEludGVydmFsIiwiaGFzRm9jdXMiLCJjbGVhckludGVydmFsIiwidmFsdWUiLCJCcm93c2VyRGV0ZWN0b3IiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJicm93c2VyTmFtZUFuZFZlcnNpb24iLCJtYXRjaCIsIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiYnJvd3Nlck5hbWVMaXN0Iiwic3BsaXQiLCJicm93c2VyVmVyc2lvbkxpc3QiLCJmdWxsVmVyc2lvbiIsIk51bWJlciIsIm1zaWUiLCJpbmRleE9mIiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ0cmlkZW50IiwidmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwicGFyc2VCcm93c2VyTmFtZSIsInBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbiIsImluY2x1ZGVzIiwiUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwibmFtZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwiTmV0d29ya01vbml0b3IiLCJ1bmRlZmluZWQiLCJpc1N1cHBvcnRlZCIsInNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycyIsInVwZGF0ZVN0YXRpc3RpY3MiLCJkb3dubGluayIsImRvd25saW5rTWF4IiwiZWZmZWN0aXZlVHlwZSIsInR5cGUiLCJydHQiLCJsaXN0ZW5lciIsIl9ydHQiLCJnZXRSb3VuZFRyaXBUaW1lIiwiX2VmZmVjdGl2ZVR5cGUiLCJnZXRFZmZlY3RpdmVUeXBlIiwiX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJfaXNTdXBwb3J0ZWQiLCJQcml2YWN5TW9kZSIsIl9pc1ByaXZhdGUiLCJfX1BSSVZBQ1lfTU9ERV9fIiwiZSIsImFwcGx5SXNQcml2YXRlIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN0cmVhbUlkIiwicmVjb3JkU3RyZWFtTWV0cmljIiwiTWV0cmljc1R5cGUiLCJtZXRyaWNUeXBlIiwiX21ldHJpY1N1Ym1pdHRlZCIsInNldHVwVGltZSIsIm1ldHJpY05hbWUiLCJNZXRyaWNUeXBlIiwiZ2V0TmFtZSIsIm1ldHJpY3NTZXJ2aWNlIiwicHVzaCIsInJ1bnRpbWUiLCJ1aW50NjQiLCJfbG9nZ2VyIiwiaW5mbyIsIkR1cmF0aW9ucyIsInRvSXNvU3RyaW5nIiwiZGlzcG9zYWJsZSIsIl9kaXNwb3NlZCIsIl9kaXNwb3NhYmxlIiwiX2xpc3QiLCJmb3JFYWNoIiwibGVuZ3RoIiwiU3RyaW5ncyIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsImxvb3BzIiwiY2VpbCIsIkFycmF5IiwiZmlsbCIsInJlZHVjZSIsInN0cmluZyIsImZ1bmMiLCJFcnJvciIsImFzc2VydFVucmVhY2hhYmxlIiwieCIsIkFwcGVuZGVycyIsImFwcGVuZGVyIiwiX2FwcGVuZGVycyIsIml0ZW1zIiwiaXRlbSIsIkNvbnNvbGVBcHBlbmRlciIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsIl90aHJlc2hvbGQiLCJmdWxsTWVzc2FnZSIsInRvSVNPU3RyaW5nIiwiTG9nZ2luZ0xldmVsIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwidGhyZXNob2xkIiwiTG9nZ2VyIiwiVHJhY2UiLCJhcmdzIiwiRGVidWciLCJJbmZvIiwiV2FybiIsIkZhdGFsIiwibGV2ZWwiLCJyZXBsYWNlUGxhY2Vob2xkZXJzIiwicmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyIsImluZGV4IiwicmVwbGFjZUFyZ3VtZW50Iiwic3BsaWNlIiwic3RyaW5naWZ5IiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJhcnJheSIsInN0YWNrIiwiYXJnIiwiY2FjaGUiLCJKU09OIiwia2V5IiwiT2JqZWN0IiwiYXJndW1lbnQiLCJkYXRhIiwidG9TdHJpbmdTdHIiLCJfY2F0ZWdvcnkiLCJhcHBlbmRlcnMiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2luZ0xldmVsIiwiYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCIsImFwcGx5Q29uc29sZUxvZ2dlciIsImJpbmQiLCJhcHBseVRlbGVtZXRyeUxvZ2dlciIsInBhcmFtZXRlclZhbHVlIiwiX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsInNldFRocmVzaG9sZCIsImFwcGx5QXBwZW5kZXIiLCJfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsIkxvZ2dpbmdUaHJlc2hvbGQiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImxvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJUZWxlbWV0cnlMZXZlbCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInVybCIsIm1ldHJpY3NVcmwiLCJVUkwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NGYWN0b3J5IiwibWV0cmljc1NlcnZpY2VzIiwiX21ldHJpY3NTZXJ2aWNlcyIsIm1ldHJpY3NDb25maWd1cmF0aW9uIiwiVGVsZW1ldHJ5VXJsIiwiRW52aXJvbm1lbnQiLCJNZXRyaWNzU2VydmljZSIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImxvY2F0aW9uIiwiaG9zdG5hbWUiLCJfbWV0cmljc0NvbmZpZ3VyYXRpb24iLCJtZXRyaWMiLCJwcmV2aW91c1ZhbHVlIiwicmVzb3VyY2UiLCJraW5kIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJtZXRyaWNSZWNvcmQiLCJ0aW1lc3RhbXAiLCJmdWxsUXVhbGlmaWVkTmFtZSIsIl9kb21haW4iLCJWZXJzaW9uTWFuYWdlciIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiX2lzU2VuZGluZyIsInNsaWNlIiwic2VuZE1ldHJpY3MiLCJ0aGVuIiwicmVzcG9uc2UiLCJjYXRjaCIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2UiLCJjYWxsYmFjayIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwiX2RlZmVycmVkcyIsImRvUmVzb2x2ZSIsImRvbmUiLCJwcm9taXNlUmVzb2x2ZSIsInJlYXNvbiIsInByb21pc2VSZWplY3QiLCJuZXdWYWx1ZSIsInByb21pc2UiLCJmaW5hbGUiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9pbW1lZGlhdGUiLCJfdW5oYW5kbGVkUmVqZWN0aW9uIiwiaSIsImxlbiIsImhhbmRsZSIsImRlZmVycmVkIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwicmVzdWx0IiwiYXJyIiwicmVzb2x2ZSIsInJlamVjdCIsImlzQXJyYXkiLCJwcm90b3R5cGUiLCJyZW1haW5pbmciLCJtYW5hZ2VSZXNwb25zZSIsImNvbnN0cnVjdG9yIiwiXyIsInNldFRpbWVvdXQiLCJ3YXJuIiwiUHJvbWlzZUhhbmRsZXIiLCJQZWVyQ29ubmVjdGlvblNlcnZpY2UiLCJGZWF0dXJlRW5hYmxlbWVudCIsInByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWNoZWQiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwicGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJwZWVyQ29ubmVjdGlvbiIsInN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIiLCJhdWRpb1RyYW5zY2VpdmVyIiwiYWRkVHJhbnNjZWl2ZXIiLCJkaXJlY3Rpb24iLCJ2aWRlb1RyYW5zY2VpdmVyIiwiY3JlYXRlT2ZmZXIiLCJvZmZlclRvUmVjZWl2ZUF1ZGlvIiwib2ZmZXJUb1JlY2VpdmVWaWRlbyIsImxvY2FsT2ZmZXIiLCJpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nIiwidXBkYXRlU3RhdGlzdGljVGltZU91dCIsIlJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwibWVkaWFTdHJlYW0iLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfdHJhY2tzVG9Nb25pdG9yIiwiZ2V0VHJhY2tzIiwibWFwIiwidHJhY2siLCJwYXJzZWRTRFAiLCJTZHBQYXJzZXIiLCJjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24iLCJzZHAiLCJfZXN0aW1hdGVkQXVkaW9Db2RlYyIsImF1ZGlvQ29kZWMiLCJfZXN0aW1hdGVkVmlkZW9Db2RlYyIsInZpZGVvQ29kZWMiLCJ1cGRhdGVTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lT3V0IiwiY2xlYXJUaW1lb3V0IiwidXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiZ2V0S2luZEZvclNhZmFyaTExIiwiaWQiLCJnZXRTdGF0cyIsInN0YXRzIiwicnRjU3RhdHMiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsInNzcmMiLCJieXRlc1JlY2VpdmVkIiwicGFja2V0c0xvc3QiLCJwYWNrZXRzUmVjZWl2ZWQiLCJnZXRDb2RlY0J5VHlwZSIsIl9ydGNTdGF0aXN0aWMiLCJ2aWRlbyIsImZyYW1lc0RlY29kZWQiLCJnZXRTdGF0c0xlZ2FjeSIsIm5hbWVzIiwic3RhdCIsIl9zZHAiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsInNwbGl0U2RwIiwidXNlZENvZGVjTGluZSIsImZpbmQiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJjb25maWd1cmF0aW9uIiwid2Via2l0UlRDUGVlckNvbm5lY3Rpb24iLCJSVENQZWVyQ29ubmVjdGlvbiIsIm9wdGlvbnMiLCJjcmVhdGVBbnN3ZXIiLCJkZXNjcmlwdGlvbiIsInNldExvY2FsRGVzY3JpcHRpb24iLCJSVENTZXNzaW9uRGVzY3JpcHRpb24iLCJoYXNDcnlwdG8iLCJzZXRSZW1vdGVEZXNjcmlwdGlvbiIsInNlbGVjdG9yIiwiZ2V0Q29uZmlndXJhdGlvbiIsInNldENvbmZpZ3VyYXRpb24iLCJjbG9zZSIsImN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIiwiaWNlQ29ubmVjdGlvblN0YXRlIiwiaGFuZGxlciIsIm9udHJhY2siLCJvbmljZWNhbmRpZGF0ZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsInN1YmplY3QiLCJfc3ViamVjdCIsInN1YnNjcmliZSIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsImxpc3RlbmVycyIsImlkeCIsIl9saXN0ZW5lcnMiLCJjaGFuZ2VkIiwiY29tcGFyYWJsZSIsImVxdWFscyIsImJhc2VVUkwiLCJvcmlnaW4iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwicmVtb3ZlIiwiaWdub3JlZFRlbmFuY3kiLCJfbWV0cmljc1NlcnZpY2UiLCJEaXNjb3ZlcnlVcmkiLCJpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiZ2V0Qm9vbGVhblZhbHVlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsImRpc2NvdmVyeVVyaSIsImdldFRlbGVtZXRyeVVybCIsImNoYW5uZWxUb2tlbiIsInBhcnNlZFRva2VuIiwiRWRnZUF1dGgiLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsIl9pbml0aWFsaXplZCIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJ3ZWJQbGF5ZXJMb2FkZXIiLCJfd2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsIl9obHNKc0xvYWRlciIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX2NsaWVudFNlc3Npb25JZCIsIl9sb2FkZWRUaW1lc3RhbXAiLCJfcmVhZE9ubHlJbml0aWFsaXplZCIsIl9yZWFkT25seURpc2NvdmVyeVVyaSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24iLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImluaXQiLCJzZWdtZW50cyIsInByb3RvY29sIiwidW5zaGlmdCIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImpvaW4iLCJCaXRyYXRlU3RhdGUiLCJCaXRyYXRlTW9kZSIsImRlZmF1bHRUYXJnZXRMYWciLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsImZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMiLCJzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMiLCJDaGFubmVsIiwidmlkZW9FbGVtZW50IiwidG9rZW4iLCJ0YXJnZXRMYWciLCJfY29udGV4dCIsIkNoYW5uZWxDb250ZXh0IiwiX2NoYW5uZWxTdGFydFRpbWUiLCJfcmVhZE9ubHlWaWRlb0VsZW1lbnQiLCJfcmVhZE9ubHlUb2tlbiIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uIiwiX3JlYWRPbmx5U3RhdGUiLCJzdGF0ZSIsIl9yZWFkT25seUF1dG9NdXRlZCIsImF1dG9NdXRlZCIsIl9yZWFkT25seUF1dG9QYXVzZWQiLCJhdXRvUGF1c2VkIiwiX3JlYWRPbmx5VG9rZW5FeHBpcmluZyIsInRva2VuRXhwaXJpbmciLCJfcmVhZE9ubHlBdXRob3JpemVkIiwiYXV0aG9yaXplZCIsIl9yZWFkT25seU9ubGluZSIsIm9ubGluZSIsIl9yZWFkT25seUxvYWRpbmciLCJsb2FkaW5nIiwiX3JlYWRPbmx5UGxheWluZyIsInBsYXlpbmciLCJfcmVhZE9ubHlTdGFuZGJ5Iiwic3RhbmRieSIsIl9yZWFkT25seVN0b3BwZWQiLCJzdG9wcGVkIiwiX3JlYWRPbmx5VGFyZ2V0TGFnIiwiX3JlYWRPbmx5TGFnIiwibGFnIiwiX3JlYWRPbmx5Qml0cmF0ZUxpbWl0IiwiYml0cmF0ZUxpbWl0IiwiX3JlYWRPbmx5UmVzb2x1dGlvbiIsInJlc29sdXRpb24iLCJfcmVhZE9ubHlGYWlsdXJlQ291bnQiLCJmYWlsdXJlQ291bnQiLCJfcmVhZE9ubHlFbmRQb2ludCIsImVuZFBvaW50IiwiX3JlYWRPbmx5U3RyZWFtIiwic3RyZWFtIiwiX3JlYWRPbmx5UnRjU3RhdGlzdGljcyIsInJ0Y1N0YXRpc3RpY3MiLCJfcmVhZE9ubHlNZWRpYVN0cmVhbSIsInNlc3Npb25UZWxlbWV0cnkiLCJTZXNzaW9uVGVsZW1ldHJ5IiwiY2hhbm5lbERpc3Bvc2FibGVzIiwiX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciIsImhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkIiwicmVuZGVyZXJEaXNwb3NhYmxlcyIsInZpZGVvVGVsZW1ldHJ5IiwiZGF0YXNldCIsIlZpZGVvVGVsZW1ldHJ5Iiwic2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSIsInNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyIsIkNoYW5uZWxTdGF0ZSIsInJlc3RhcnRBZnRlclN0b3AiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMiLCJlbGFwc2VkSW5NaWxsaXNlY29uZHMiLCJjaGFubmVsSW5pdGlhbGl6YXRpb24iLCJnZXRUaW1lIiwibGltaXRCaXRyYXRlIiwic3RhcnQiLCJ3aWR0aCIsInZpZGVvV2lkdGgiLCJoZWlnaHQiLCJ2aWRlb0hlaWdodCIsIkRpbWVuc2lvbiIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJzdGF0dXMiLCJpc1N0YXJ0aW5nIiwicHJvY2Vzc1N0b3AiLCJwYXVzZSIsInNyY09iamVjdCIsImNsZWFuVXBSZXNvdXJjZXMiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIm11dGVkIiwic3RvcCIsImlzRGlzcG9zZWQiLCJwcm9jZXNzU3RhcnQiLCJmaW5hbGx5IiwibGlzdGVuT25TdHJlYW1TZXR1cCIsInVyaSIsImdldFVyaSIsImhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayIsImhhbmRsZVN0cmVhbUZhaWx1cmUiLCJzdHJlYW1QbGF5ZXIiLCJTdHJlYW1GYWN0b3J5IiwiZmFpbCIsInRpbWVvdXRJZCIsImdldFJldHJ5SW50ZXJ2YWwiLCJkaXNwb3NhYmxlcyIsIm1pbiIsInBvdyIsIm1heCIsImRlc3Ryb3lTdHJlYW0iLCJwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicGxheVByb21pc2UiLCJwbGF5IiwiaGFzQXVkaW9UcmFjayIsImZpbHRlciIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIiwiQ2hhbm5lbHMiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiYml0cmF0ZU1vZGUiLCJCaXRyYXRlU3RhdGVNYXBwaW5nIiwiYml0cmF0ZVN0YXRlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIkRpc2NvdmVyeSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJfY2FjaGUiLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiRGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsImRlZmF1bHRUaW1lb3V0IiwiX3VyaSIsInRpbWVvdXQiLCJyYWNlIiwib2siLCJ0ZXh0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJFbmRQb2ludCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwibmV2ZXJSZXNvbHZlIiwicGluZyIsInRpbWUiLCJzZGtWZXJzaW9uIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwiX2Rpc2NvdmVyeVVyaSIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsImJ1aWxkUGluZ1VybCIsImZpbmlzaGVkIiwiX3JvdW5kVHJpcFRpbWUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImFwcGxpY2F0aW9uSWQiLCJidWlsZFVybCIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiZWRnZUF1dGhUb2tlbiIsInNlc3Npb25EZXNjcmlwdGlvbiIsImNvbnZlcnRSVENTZHBUeXBlVG9TZHBUeXBlIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJib2R5V2l0aG91dE9mZmVyIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbiIsImh0dHBSZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJkZWJ1ZyIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsImNhbmRpZGF0ZXMiLCJkaXNjb3ZlcnlDb21wbGV0ZWQiLCJtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwibWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsInBhdGgiLCJwYXRoQXNBcnJheSIsImNvbmNhdCIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiYnVuZGxlUG9saWN5IiwiaWNlQ2FuZGlkYXRlUG9vbFNpemUiLCJpY2VTZXJ2ZXJzIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsImljZVRyYW5zcG9ydFBvbGljeSIsInBlZXJJZGVudGl0eSIsInJ0Y3BNdXhQb2xpY3kiLCJjb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsInJ0Y1Nlc3Npb25EZXNjcmlwdGlvbiIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJpc1ZhbGlkVG9rZW4iLCJlbmNvZGVkRWRnZUF1dGhUb2tlbiIsImF0b2IiLCJzdWJzdHIiLCJwYXJzZSIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwiY2hhbm5lbENvbnRleHQiLCJfY2hhbm5lbENvbnRleHQiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsImFsbCIsInN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiIsInN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImFwcGx5U3RhdHVzIiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJhZGRJY2VDYW5kaWRhdGVzIiwicmV0cnlDYWxsYmFjayIsIm9uTGluZSIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwic3RyZWFtcyIsInRyYWNrTGlzdGVuZXIiLCJhbnN3ZXIiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInN1Y2Nlc3MiLCJydGNDb25uZWN0aW9uTW9uaXRvciIsInJ0Y1N0YXRpc3RpYyIsInN0YXRpc3RpY3MiLCJydGNWaWRlb1N0YXRpc3RpYyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwiYXVkaW8iLCJhdWRpb1RyYWNrRmFpbGVkIiwidmlkZW9UcmFja0ZhaWxlZCIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJ0cnVuY2F0ZUljZVNlcnZlcnMiLCJuZXdSdGNDb25maWd1cmF0aW9uIiwiaWNlUmVzdGFydCIsIm9mZmVyIiwiUmVhbFRpbWVTdHJlYW1GYWN0b3J5IiwiaXNSdG1wIiwiY2FwYWJpbGl0aWVzIiwiaXNTdHJlYW1pbmciLCJfX1NES1ZFUlNJT05fXyIsIl9kZWZhdWx0VmVyc2lvbiIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwiVGVsZW1ldHJ5U2VydmljZSIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJsb2dNZXNzYWdlcyIsIm51bWJlck9mTG9nc1RvU2VuZCIsInNpemVPZkxvZ3NUb1NlbmQiLCJnZXRMb2dTaXplIiwic3VtIiwic2VuZExvZ3MiLCJkdXJhdGlvbiIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJmbG9vciIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0Iiwib3RoZXIiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdHJlYW1JZCIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwiZXZlbnQiLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiZW5kIiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBO0FBQ0E7O0FBRUEsd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1DOzs7Ozs7Ozs7O0FDVkE7QUFDQTtBQUNBOztBQUVBLGlDOzs7Ozs7Ozs7O0FDSkEsdUJBQXVCLG1CQUFPLENBQUMscUZBQW9COztBQUVuRDtBQUNBO0FBQ0E7O0FBRUEsb0M7Ozs7Ozs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDOzs7Ozs7Ozs7OztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNILElBQUksT0FBTztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFDdEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLG1DOzs7Ozs7Ozs7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUM7Ozs7Ozs7Ozs7QUNOQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Qjs7Ozs7Ozs7OztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxXQUFXO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLDhDQUE4QyxPQUFPOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsS0FBMEIsb0JBQW9CLENBQUU7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O1VDeHRCQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0NyQkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGdDQUFnQyxZQUFZO1dBQzVDO1dBQ0EsRTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLHdDQUF3Qyx5Q0FBeUM7V0FDakY7V0FDQTtXQUNBLEU7Ozs7O1dDUEEsc0Y7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0Esc0RBQXNELGtCQUFrQjtXQUN4RTtXQUNBLCtDQUErQyxjQUFjO1dBQzdELEU7Ozs7VUNOQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJjaGFubmVscy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5TGlrZVRvQXJyYXk7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlczsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXlcIik7XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkoYXJyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXM7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcblxuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBfdGhyb3coZXJyKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZjsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZlwiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheTsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcbiAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheUxpbWl0OyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlUmVzdDsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZDsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZlwiKTtcblxudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTtcblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjsiLCJ2YXIgYXJyYXlXaXRoSG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXRcIik7XG5cbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgbm9uSXRlcmFibGVSZXN0ID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVSZXN0XCIpO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5OyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzXCIpO1xuXG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5XCIpO1xuXG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheVwiKTtcblxudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWRcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheTsiLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2Y7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5XCIpO1xuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lXCIpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmNvbnN0IGRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0ID0gMzAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZvcmVncm91bmQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNGb3JlZ3JvdW5kOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIF90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U6IG51bWJlciA9IERhdGUubm93KCk7XG4gIHByaXZhdGUgX2RvY3VtZW50Rm9jdXNJbnRlcnZhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2lzRm9yZWdyb3VuZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kID0gbmV3IFJlYWRPbmx5U3ViamVjdCh0aGlzLl9pc0ZvcmVncm91bmQpO1xuICAgIHRoaXMuZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBnZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0VGFiRm9jdXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgbGV0IGhpZGRlbjtcbiAgICBsZXQgdmlzaWJpbGl0eUNoYW5nZTtcblxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWdub3JlZCBhcyB0eXBlc2NyaXB0IGRvZXMgbm90IGhhdmUgbGVnYWN5IGdldFN0YXRzIHR5cGVzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5tc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICdtc0hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ21zdmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQud2Via2l0SGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ3dlYmtpdEhpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3dlYmtpdHZpc2liaWxpdHljaGFuZ2UnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LmhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gT3BlcmEgMTIuMTAgYW5kIEZpcmVmb3ggMTggYW5kIGxhdGVyIHN1cHBvcnRcbiAgICAgIGhpZGRlbiA9ICdoaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuLy8gVGhpcyBmaWxlIGlzIHVzZWQgb25seSBmb3IgdGhlIHNpbGVudCBidWlsZCB0byBtb2NrIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgY2xhc3NcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LW1ldHJpY3MtbGV2ZWwnOiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpLFxuICAgICAgJ3BoZW5peC1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jb25zb2xlLWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC10ZWxlbWV0cnktbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY2hhbm5lbC10b2tlbic6ICcnLFxuICAgICAgJ3BoZW5peC11cmknOiAnJyxcbiAgICAgICdwaGVuaXgtYmFzZS11cmknOiAnJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZVxuICAgIH07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUFJJVkFDWV9NT0RFX186IGJvb2xlYW47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByaXZhY3lNb2RlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2lzUHJpdmF0ZTogYm9vbGVhbjtcblxuICBzdGF0aWMgZ2V0IGlzUHJpdmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNQcml2YXRlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5SXNQcml2YXRlKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9pc1ByaXZhdGUgPSBfX1BSSVZBQ1lfTU9ERV9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2lzUHJpdmF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5Qcml2YWN5TW9kZS5hcHBseUlzUHJpdmF0ZSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gTG9nZ2luZ0xldmVsLk9mZiA6IExvZ2dpbmdMZXZlbC5BbGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIFByaXZhY3lNb2RlLmlzUHJpdmF0ZSA/IExvZ2dpbmdMZXZlbC5PZmYgOiBMb2dnaW5nTGV2ZWwuQWxsO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbElucHV0VHlwZXN9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsSW5wdXRUeXBlcyB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbElucHV0VHlwZXMpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsIDogVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZUhhbmRsZXIgZnJvbSAnLi9Qcm9taXNlSGFuZGxlcic7XG5cbmNsYXNzIFByb21pc2Uge1xuICBfc3RhdGU6IG51bWJlcjtcbiAgX2hhbmRsZWQ6IGJvb2xlYW47XG4gIF92YWx1ZTogUHJvbWlzZTtcbiAgX2RlZmVycmVkczogQXJyYXk8UHJvbWlzZUhhbmRsZXI+O1xuICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAvLyBAdHMtaWdub3JlXG4gIHRoZW4ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkO1xuICAvKiBlc2xpbnQtZW5hYmxlKi9cblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWR7XG4gICAgdGhpcy5fc3RhdGUgPSAyO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5maW5hbGUoKTtcbiAgfVxuXG4gIGZpbmFsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IDIgJiYgdGhpcy5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5oYW5kbGUodGhpcy5fZGVmZXJyZWRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuICB9XG5cbiAgaGFuZGxlKGRlZmVycmVkOiBQcm9taXNlSGFuZGxlcik6IHZvaWQge1xuICAgIGxldCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgd2hpbGUgKHByb21pc2UuX3N0YXRlID09PSAzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5fdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAwKSB7XG4gICAgICBwcm9taXNlLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9taXNlLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9taXNlLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcblxuICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMSkge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFsbChhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1hbmFnZVJlc3BvbnNlID0gKGksIHZhbHVlKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW4gPSB2YWx1ZS50aGVuO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlID0+IG1hbmFnZVJlc3BvbnNlKGksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJnc1tpXSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFuYWdlUmVzcG9uc2UoaSwgYXJnc1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSk6IFByb21pc2Uge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJlamVjdCh2YWx1ZSk6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByYWNlKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYXJyW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2ltbWVkaWF0ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG4gIH1cblxuICBzdGF0aWMgX3VuaGFuZGxlZFJlamVjdGlvbihlcnJvcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246JywgZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbihvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWyd0aGVuJ10gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBwcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKCkgPT4gbnVsbCk7XG5cbiAgdGhpcy5oYW5kbGUobmV3IFByb21pc2VIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSk7XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZnVuY3Rpb24oY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICB2YWx1ZSA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gdmFsdWUpLFxuICAgIHJlYXNvbiA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbikpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9Qcm9taXNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbWlzZUhhbmRsZXIge1xuICBvbkZ1bGZpbGxlZDogRnVuY3Rpb247XG4gIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uO1xuICBwcm9taXNlOiBQcm9taXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vc2RrL2ZlYXR1cmUvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD47XG5cbiAgc3RhdGljIGluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUHJlY2FjaGluZ0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UucHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwcmUtY2FjaGUgcGVlciBjb25uZWN0aW9uIG9mZmVyXCInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICAgIHRocm93IGU7XG4gICAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgaWYgKFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkgPSBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlO1xuXG4gICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbigpXG4gICAgICAudGhlbihhc3luYyBwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0FkZFRyYW5zY2VpdmVyO1xuICAgICAgICBsZXQgdmlkZW9UcmFuc2NlaXZlciwgYXVkaW9UcmFuc2NlaXZlcjtcblxuICAgICAgICBpZiAoc3VwcG9ydHNBZGRUcmFuc2NlaXZlcikge1xuICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcignYXVkaW8nLCB7ZGlyZWN0aW9uOiAncmVjdm9ubHknfSk7XG4gICAgICAgICAgdmlkZW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCd2aWRlbycsIHtkaXJlY3Rpb246ICdyZWN2b25seSd9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID8gdW5kZWZpbmVkIDoge1xuICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgIG9mZmVyVG9SZWNlaXZlVmlkZW86IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVPdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lT3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZU91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVPdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZU91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdHNbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0c1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0c1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdHNbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdHNbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiByZXBvcnQuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiByZXBvcnQucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IHJlcG9ydC5wYWNrZXRzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0c1traW5kXVsnZnBzJ10gPSAocmVwb3J0LmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdHNba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0cztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVPdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lT3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuXG4gICAgICBzdGF0cy5yZXN1bHQoKS5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgIHJlcG9ydC5uYW1lcygpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdnb29nUlRUJykge1xuICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5zdGF0KG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnc3NyYycpIHtcbiAgICAgICAgICBjb25zdCBtZWRpYVR5cGUgPSByZXBvcnQuc3RhdCgnbWVkaWFUeXBlJykudG9TdHJpbmcoKTtcblxuICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnbWVkaWFUeXBlJ10gPSBtZWRpYVR5cGU7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0c1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsncGFja2V0c1JlY2VpdmVkJ10gPSByZXBvcnQuc3RhdCgncGFja2V0c1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgcnRjU3RhdHNbbWVkaWFUeXBlXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LnN0YXQoJ2ZyYW1lc0RlY29kZWQnKTtcbiAgICAgICAgICAgIHJ0Y1N0YXRzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0c1ttZWRpYVR5cGVdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgIDEwMDAgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdHM7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lT3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZU91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGFwcGx5Q29kZWModHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzcGxpdFNkcCA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzcGxpdFNkcC5maW5kKGl0ZW0gPT4gaXRlbS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzcGxpdFNkcC5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9zZGsvZmVhdHVyZS9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlICovXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlICovXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcC5tYXRjaCgvYT1jcnlwdG86L2kpO1xuXG4gICAgaWYgKGhhc0NyeXB0bykge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NEUCBhPWNyeXB0byBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBJZ25vcmVkIGFzIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBsZWdhY3kgZ2V0U3RhdHMgdHlwZXNcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlICovXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlICovXG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi9lZGdlQXV0aC9FZGdlQXV0aCc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbElucHV0VHlwZXN9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBQcml2YWN5TW9kZSBmcm9tICcuLi9kb20vUHJpdmFjeU1vZGUnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vRW52aXJvbm1lbnQnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL1N0cmVhbVR5cGVzJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmNvbnN0IHBhZ2VMb2FkVGltZSA9IHdpbmRvd1snX19waGVuaXhQYWdlTG9hZFRpbWUnXSB8fCB3aW5kb3dbJ19fcGFnZUxvYWRUaW1lJ10gfHwgRGF0ZS5ub3coKTtcblxuaW50ZXJmYWNlIElJbml0T3B0aW9ucyB7XG4gIGRpc2NvdmVyeVVyaT86IHN0cmluZztcbiAgcGVlckNvbm5lY3Rpb25GYWN0b3J5PzogSVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgdGVsZW1ldHJ5TGV2ZWw/OiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbElucHV0VHlwZXM7XG4gIGNvbnNvbGVMb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzO1xuICBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtPzogYm9vbGVhbjtcbiAgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU/OiBib29sZWFuO1xuICB3ZWJQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkO1xuICBzaGFrYVBsYXllckxvYWRlcj86IChwbGF5ZXI6IFNoYWthVHlwZSkgPT4gdm9pZDtcbiAgaGxzSnNMb2FkZXI/OiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTREsge1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dlYlBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYVBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9obHNKc0xvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgc3RhdGljIF9lbnZpcm9ubWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlVcmw6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gODtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUxldmVsOiBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPiA9IG5ldyBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPihUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCk7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb25cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCghUHJpdmFjeU1vZGUuaXNQcml2YXRlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RlbmFuY3k6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfY2xpZW50U2Vzc2lvbklkOiBzdHJpbmcgPSBTdHJpbmdzLnJhbmRvbSgzMik7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2FkZWRUaW1lc3RhbXA6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NESycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5pdGlhbGl6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSgpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihTREsuX3BlZXJDb25uZWN0aW9uRmFjdG9yeSk7XG5cbiAgc3RhdGljIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IFN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZW5hbmN5KCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGNsaWVudFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTREsuX2NsaWVudFNlc3Npb25JZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9hZGVkVGltZXN0YW1wKCk6IERhdGUge1xuICAgIHJldHVybiBTREsuX2xvYWRlZFRpbWVzdGFtcDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaW5pdGlhbGl6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seUluaXRpYWxpemVkO1xuICB9XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlVcmkoKTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5RGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljUmV0cnlPbkZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJQbGF5ZXJMb2FkZXIoKTogKFdlYlBsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93ZWJQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthUGxheWVyTG9hZGVyKCk6IChTaGFrYVR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYVBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaGxzSnNMb2FkZXIoKTogKEhsc1BsYXllclR5cGUpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9obHNKc0xvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0cmljc1NlcnZpY2UoKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIHJldHVybiBTREsuX21ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlVcmwoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVsZW1ldHJ5VXJsO1xuICB9XG5cbiAgc3RhdGljIGdldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM7XG4gIH1cblxuICBzdGF0aWMgc2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMocmV0cmllc0Ftb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IHJldHJpZXNBbW91bnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWxJbnB1dFR5cGVzIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKHRoaXMuX2xvZ2dlci50aHJlc2hvbGQudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJEZXRlY3RvcigpOiBCcm93c2VyRGV0ZWN0b3Ige1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3I7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBMb2dnZXJGYWN0b3J5LnRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLmRpc2NvdmVyeVVyaS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgU0RLLnRlbGVtZXRyeVVybC52YWx1ZSA9IFNESy5nZXRUZWxlbWV0cnlVcmwodmFsdWUpO1xuICAgICAgU0RLLl9lbnZpcm9ubWVudC52YWx1ZSA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjaGFubmVsVG9rZW4gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtY2hhbm5lbC10b2tlbicpO1xuXG4gICAgaWYgKGNoYW5uZWxUb2tlbikge1xuICAgICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IEVkZ2VBdXRoLmdldFRlbmFuY3kocGFyc2VkVG9rZW4pO1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gYCR7YmFzZVVSSVZhbHVlfS9wY2FzdC9lbmRQb2ludHNgO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBTREsuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZSA9IG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCAmJiBUZWxlbWV0cnlMZXZlbFtvcHRpb25zLnRlbGVtZXRyeUxldmVsXSkge1xuICAgICAgICBTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nTGV2ZWwgJiYgTG9nZ2luZ0xldmVsW29wdGlvbnMubG9nZ2luZ0xldmVsXSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIudGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5sb2dnaW5nTGV2ZWwpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAmJlxuICAgICAgICBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsXSkge1xuICAgICAgICBjb25zdCBjb25zb2xlQXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBDb25zb2xlQXBwZW5kZXIpO1xuXG4gICAgICAgIGlmIChjb25zb2xlQXBwZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZShjb25zb2xlQXBwZW5kZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAhPT0gJ09mZicpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl93ZWJQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLndlYlBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9obHNKc0xvYWRlciA9IG9wdGlvbnMuaGxzSnNMb2FkZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJywgKCkgPT4ge1xuICBTREsuZGlzcG9zZSgpO1xufSk7XG5cblNESy5hcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmluaXQoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5VXJsIHtcbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgVVJMKHVybCk7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IGJhc2VVUkwuaG9zdG5hbWUuc3BsaXQoJy4nKTtcblxuICAgICAgc3dpdGNoIChiYXNlVVJMLnByb3RvY29sKSB7XG4gICAgICAgIGNhc2UgJ3dzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwOic7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd3NzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwczonO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMiB8fFxuICAgICAgICAgIChzZWdtZW50cy5sZW5ndGggPT09IDMgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMl0ubGVuZ3RoIDw9IDIgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDw9IDMpXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudHMudW5zaGlmdCgndGVsZW1ldHJ5Jyk7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ3N0Zy0nKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLXN0ZycpIHx8IHNlZ21lbnRzWzBdLmluY2x1ZGVzKCctc3RnLScpIHx8IHNlZ21lbnRzWzBdID09PSAnc3RnJykge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnktc3RnJztcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnbG9jYWwnKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLWxvY2FsJykpIHtcbiAgICAgICAgLy8gTGVhdmUgVVJMIHVuY2hhbmdlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5JztcbiAgICAgIH1cblxuICAgICAgYmFzZVVSTC5ob3N0bmFtZSA9IHNlZ21lbnRzLmpvaW4oJy4nKTtcblxuICAgICAgcmV0dXJuIGAke2Jhc2VVUkwub3JpZ2lufS90ZWxlbWV0cnlgO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCB0eXBlIEJpdHJhdGVTdGF0ZVR5cGUgPSAnS2VlcCcgfCAnUmVzZXQnO1xuZXhwb3J0IHR5cGUgQml0cmF0ZU1vZGVUeXBlID0gJ05vcm1hbCcgfCAnRm9yY2UnIHwgJ1Jlc2V0JztcblxuZXhwb3J0IGVudW0gQml0cmF0ZVN0YXRlIHtcbiAgS2VlcCxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGVudW0gQml0cmF0ZU1vZGUge1xuICBOb3JtYWwsXG4gIEZvcmNlLFxuICBSZXNldFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSB7XG4gIGFwaVZlcnNpb246IG51bWJlcjtcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBudW1iZXI7XG4gIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlVHlwZTtcbiAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlVHlwZTtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IEVkZ2VBdXRoIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IFNlc3Npb25UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vU2Vzc2lvblRlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuXG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuL0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBTdHJlYW1GYWN0b3J5IGZyb20gJy4uL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmNvbnN0IGRlZmF1bHRUYXJnZXRMYWcgPSAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDIwMDA7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2hhbm5lbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RWRnZVRva2VuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUJpdHJhdGVMaW1pdDogUmVhZE9ubHlTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlc29sdXRpb246IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcblxuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcjogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHRva2VuOiBzdHJpbmcsIHRhcmdldExhZzogbnVtYmVyID0gZGVmYXVsdFRhcmdldExhZykge1xuICAgIHRoaXMuX2NvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQodG9rZW4sIHRhcmdldExhZyk7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcmVhZE9ubHlWaWRlb0VsZW1lbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX2NvbnRleHQudG9rZW4pO1xuICAgIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4odGhpcy5fY29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jb250ZXh0LnN0YXRlKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9NdXRlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0Lm9ubGluZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlMb2FkaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NvbnRleHQuc3RhbmRieSk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdG9wcGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jb250ZXh0LmxhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50KTtcbiAgICB0aGlzLl9yZWFkT25seUVuZFBvaW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4odGhpcy5fY29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jb250ZXh0LnJ0Y1N0YXRpc3RpY3MpO1xuICAgIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPih0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gRWRnZUF1dGgucGFyc2VUb2tlbih0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoRWRnZUF1dGguZ2V0VXJpKHBhcnNlZFRva2VuKSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBFZGdlQXV0aC5nZXRUZW5hbmN5KHBhcnNlZFRva2VuKSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9jb250ZXh0LnNlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NvbnRleHQuc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQuc3Vic2NyaWJlKHZpZGVvRWxlbWVudCA9PiB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NvbnRleHQuc3RyZWFtLnN1YnNjcmliZShzdHJlYW0gPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeSA9IG5ldyBWaWRlb1RlbGVtZXRyeSh0aGlzLnN0cmVhbUlkLCBTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9jaGFubmVsU3RhcnRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnJlc3RhcnRBZnRlclN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgfSwgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NvbnRleHQuYml0cmF0ZUxpbWl0LnN1YnNjcmliZShiaXRyYXRlTGltaXQgPT4ge1xuICAgICAgICBpZiAoYml0cmF0ZUxpbWl0ICYmIHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXQgdmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMucmVzb2x1dGlvbi52YWx1ZS53aWR0aCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvV2lkdGggfHwgdGhpcy5yZXNvbHV0aW9uLnZhbHVlLmhlaWdodCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRWRnZVRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fY29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlID0gdG9rZW47XG4gICAgdGhpcy5fY29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odGhpcy5fY29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKEVkZ2VBdXRoLmdldFVyaShwYXJzZWRUb2tlbikgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gRWRnZUF1dGguZ2V0VGVuYW5jeShwYXJzZWRUb2tlbikgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgJiYgdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQgPSAwO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhcmdldExhZyhsYWc6IE1pbGxpc2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fY29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fY29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbik6IFVSTCB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aC5nZXRVcmkocGFyc2VkVG9rZW4pO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KClcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5fY29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fY29udGV4dC5zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGguaXNWYWxpZFRva2VuKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0VXJpKHRva2VuKTtcbiAgICBjb25zdCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8dm9pZD4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgLy8gTmVlZCB0byBzZXQgaXNTdGFydGluZyB0byBmYWxzZSBhbmQgY2FsbCBoYW5kbGVTdHJlYW1GYWlsdXJlIGlmIHN0cmVhbSBtb25pdG9ycyBmb3VuZCBhbiBpc3N1ZVxuICAgICAgdGhpcy5fY29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdHJlYW1QbGF5ZXIgPSBTdHJlYW1GYWN0b3J5LmNyZWF0ZSh0b2tlbiwgdGhpcy5fY29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrKTtcblxuICAgIGlmICghc3RyZWFtUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbVBsYXllci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cCxcbiAgICAgIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQuYmluZCh0aGlzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGNoYW5uZWwnLCBlKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZyB8fCAhU0RLLmF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdGhpcy5nZXRSZXRyeUludGVydmFsKCkpO1xuXG4gICAgICAgIHRoaXMuX2NvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2NvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0LnRva2VuLnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zdGFydCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwbGF5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gdGhpcy5fY29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgICAgcmV0dXJuIHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcywgTWF0aC5wb3coYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZHMsIE1hdGgubWF4KDAsIHRoaXMuX2NvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlIC0gMSkpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUsIENoYW5uZWxTdGF0ZVt0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fY29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgIHRoaXMuX2NvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dC5zdG9wcGVkLnZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLl9jb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRleHQuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9jb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGNvbnN0IGhhc0F1ZGlvVHJhY2sgPSAhIW1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcih0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB0cmFjay5raW5kID09PSAnYXVkaW8nO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiA9ICFTREsuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG5cbiAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiB8fCB2aWRlb0VsZW1lbnQubXV0ZWQgfHwgIWhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQYXVzZWQgdmlkZW8gYWZ0ZXIgcGxheSBmYWlsZWQuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IG11dGVkIHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmlkZW9FbGVtZW50LnBsYXkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGxheWVkIHZpZGVvIGFmdGVyIGF1dG8gbXV0aW5nLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQgdG8gdW5tdXRlLicsIHRoaXMuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgdGhpcy5fY29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWMsIElSdGNTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQge0VkZ2VUb2tlbn0gZnJvbSAnLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgdG9rZW46IFN1YmplY3Q8RWRnZVRva2VuPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG5cbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuICBpc1N0YXJ0aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHNlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodG9rZW46IHN0cmluZywgdGFyZ2V0TGFnOiBudW1iZXIpIHtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbERpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5yZW5kZXJlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsSW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gbmV3IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4obnVsbCk7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb24gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KG51bGwpO1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50b2tlbkV4cGlyaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KHRhcmdldExhZyk7XG4gICAgdGhpcy5sYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4oMCk7XG4gICAgdGhpcy5iaXRyYXRlTGltaXQgPSBuZXcgU3ViamVjdDxCaXRzUGVyU2Vjb25kPigwKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBuZXcgU3ViamVjdDxEaW1lbnNpb24+KERpbWVuc2lvbi5lbXB0eSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludD4obnVsbCk7XG4gICAgdGhpcy5zdHJlYW0gPSBuZXcgU3ViamVjdDxJU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBFcnJvcixcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlXG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IENoYW5uZWwgZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuLi9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFZGdlVG9rZW47XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBvcHRpb25zLnRhcmdldExhZyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgRGlzY292ZXJ5U2VydmljZSBmcm9tICcuL0Rpc2NvdmVyeVNlcnZpY2UnO1xuXG5jb25zdCBkaXNjb3ZlcnlDYWNoZUludGVydmFsID0gNjAwMDA7XG5cbmludGVyZmFjZSBJUGVyVVJJRW5kcG9pbnQgeyBbeDogc3RyaW5nXTogUHJvbWlzZTxFbmRQb2ludD4gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3Zlcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IElQZXJVUklFbmRwb2ludCA9IHt9O1xuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpOiBVUkwpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICByZXR1cm4gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdmVyeVNlcnZpY2UgPSBuZXcgRGlzY292ZXJ5U2VydmljZSh1cmkpO1xuICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID0gZGlzY292ZXJ5U2VydmljZS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCgpO1xuXG4gICAgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcblxuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBjb25zdCBuZXZlclJlc29sdmUgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVxdWVzdCBbJXNdIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmcnLCB1cmwpO1xuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIHJldHVybiBuZXZlclJlc29sdmUoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbih0aW1lID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJlZCBlbmQgcG9pbnQgWyVzXSB3aXRoIHRpbWUgWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCksIHRpbWUpO1xuICAgICAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgICAgIHJ1bnRpbWU6IChub3cgLSBTREsucGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWUgfHwgMH0sXG4gICAgICAgICAgcmVzb3VyY2U6IGVuZFBvaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAga2luZDogJ3BpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludDtcbiAgICAgIH0pKSk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfSBmcm9tICcuLi9kZWZhdWx0cyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5VXJpIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Rpc2NvdmVyeVVyaTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPihkZWZhdWx0RGlzY292ZXJ5VXJpKTtcblxuICBzdGF0aWMgZ2V0IHVyaSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBEaXNjb3ZlcnlVcmkuX2Rpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZERpc2NvdmVyeVVybCh1cmk6IFVSTCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmkudG9TdHJpbmcoKSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICB1cmwuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gJy8nKSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeVVyaSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmltcG9ydCB7XG4gIElTdWJzY3JpYmVSZXNwb25zZSxcbiAgSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QsXG4gIElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0XG59IGZyb20gJy4uL2FwaS9TdWJzY3JpYmUnO1xuaW1wb3J0IHtJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0LCBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZX0gZnJvbSAnLi4vYXBpL1NldFJlbW90ZURlc2NyaXB0aW9uJztcbmltcG9ydCB7SVNlc3Npb25EZXNjcmlwdGlvbiwgU2RwVHlwZX0gZnJvbSAnLi4vYXBpL1Nlc3Npb25EZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBFZGdlQXV0aCBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aCc7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGUsIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBCaXRyYXRlTW9kZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlTW9kZU1hcHBpbmcnO1xuaW1wb3J0IEJpdHJhdGVTdGF0ZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlU3RhdGVNYXBwaW5nJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgYXBpVmVyc2lvbiA9IDY7XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmliZVN0YXR1cyA9ICdvaycgfCAnbm8tc3RyZWFtJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAnZ2VvLXJlc3RyaWN0ZWQnIHwgJ2dlby1ibG9ja2VkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBEZXN0cm95U3RyZWFtU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbSB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1YnNjcmliZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU3Vic2NyaWJlU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KVxuICAgICAgKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogc3RyaW5nLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IEVkZ2VBdXRoLnBhcnNlVG9rZW4odG9rZW4pO1xuXG4gICAgaWYgKCFwYXJzZWRUb2tlbiB8fCAhcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZCkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZW5hbmN5ID0gcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZDtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3N1YnNjcmliZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgZWRnZUF1dGhUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogdGhpcy5jb252ZXJ0UlRDU2RwVHlwZVRvU2RwVHlwZShsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlKSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgZWRnZUF1dGhUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYFN1YnNjcmliZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW06IElTdHJlYW0sIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXNjcmlwdGlvbicsICdyZW1vdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHR5cGU6IHRoaXMuY29udmVydFJUQ1NkcFR5cGVUb1NkcFR5cGUoc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUpLFxuICAgICAgICBzZHA6IHNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBuZXcgRXJyb3IoYFNldCBsaW1pdCBiaXRyYXRlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBhZGQgSUNFIGNhbmRpZGF0ZXMgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtKHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLFxuICAgICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVyaS5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd0eXBlJywgJ2h0dHAnXSwgWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHt9O1xuXG4gICAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICAgICAgc3dpdGNoIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICAgICAgICBjYXNlICdCdW5kbGVQb2xpY3lCYWxhbmNlZCc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gJ2JhbGFuY2VkJztcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0J1bmRsZVBvbGljeU1heENvbXBhdCc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gJ21heC1jb21wYXQnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQnVuZGxlUG9saWN5TWF4QnVuZGxlJzpcbiAgICAgICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSAnbWF4LWJ1bmRsZSc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID0gZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzKSB7XG4gICAgICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgICAgIHVybHM6IGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgICAgIHVzZXJuYW1lOiBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICAgICAgY3JlZGVudGlhbDogZGF0YS5ydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7XG4gICAgICAgICAgc3dpdGNoIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7XG4gICAgICAgICAgICBjYXNlICdJY2VUcmFuc3BvcnRQb2xpY3lBbGwnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9ICdhbGwnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnSWNlVHJhbnNwb3J0UG9saWN5UmVsYXknOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9ICdyZWxheSc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJY2VUcmFuc3BvcnRQb2xpY3lQdWJsaWMnOlxuICAgICAgICAgICAgICAvLyBEZXByZWNhdGVkIC0gTm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGRhdGEucnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24ucGVlcklkZW50aXR5KSB7XG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbi5wZWVySWRlbnRpdHkgPSBkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24ucGVlcklkZW50aXR5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICAgICAgc3dpdGNoIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgICAgICAgY2FzZSAnUnRjcE11eFBvbGljeU5lZ290aWF0ZSc6XG4gICAgICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9ICduZWdvdGlhdGUnO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUnRjcE11eFBvbGljeVJlcXVpcmUnOlxuICAgICAgICAgICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSAncmVxdWlyZSc7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHJ0Y0NvbmZpZ3VyYXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiB0aGlzLmNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbil9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IHRoaXMuY29udmVydElTZXNzaW9uRGVzY3JpcHRpb25Ub1JUQ1Nlc3Npb25EZXNjcmlwdGlvbihkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJU2Vzc2lvbkRlc2NyaXB0aW9uVG9SVENTZXNzaW9uRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uOiBJU2Vzc2lvbkRlc2NyaXB0aW9uKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCB7XG4gICAgY29uc3QgcnRjU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0ID0ge3NkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcH07XG5cbiAgICBzd2l0Y2ggKHNlc3Npb25EZXNjcmlwdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdPZmZlcic6XG4gICAgICAgIHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbi50eXBlID0gJ29mZmVyJztcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fuc3dlcic6XG4gICAgICAgIHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbi50eXBlID0gJ2Fuc3dlcic7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzZXNzaW9uRGVzY3JpcHRpb24udHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y1Nlc3Npb25EZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gdGhpcy5jb252ZXJ0SVNlc3Npb25EZXNjcmlwdGlvblRvUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UlRDU2RwVHlwZVRvU2RwVHlwZSh0eXBlOiBSVENTZHBUeXBlKTogU2RwVHlwZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhbnN3ZXInOlxuICAgICAgICByZXR1cm4gJ0Fuc3dlcic7XG4gICAgICBjYXNlICdvZmZlcic6XG4gICAgICAgIHJldHVybiAnT2ZmZXInO1xuICAgICAgY2FzZSAncHJhbnN3ZXInOlxuICAgICAgY2FzZSAncm9sbGJhY2snOlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNEUCB0eXBlIFske3R5cGV9XSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0eXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUVkZ2VBdXRofSBmcm9tICcuL0VkZ2VBdXRoVG9rZW4nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7RWRnZVRva2VufSBmcm9tICcuL0VkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aCcpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFZGdlVG9rZW4pOiBJRWRnZUF1dGgge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkVG9rZW4odG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aC5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5jb2RlZEVkZ2VBdXRoVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZUF1dGhUb2tlbiA9IEpTT04ucGFyc2UoZW5jb2RlZEVkZ2VBdXRoVG9rZW4pO1xuXG4gICAgICBlZGdlQXV0aFRva2VuLnRva2VuID0gSlNPTi5wYXJzZShlZGdlQXV0aFRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIGVkZ2VBdXRoVG9rZW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGguX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFVyaShwYXJzZWRUb2tlbjogSUVkZ2VBdXRoKTogVVJMIHtcbiAgICByZXR1cm4gcGFyc2VkVG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4gJiYgcGFyc2VkVG9rZW4udG9rZW4udXJpID9cbiAgICAgIG5ldyBVUkwocGFyc2VkVG9rZW4udG9rZW4udXJpKSA6IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVuYW5jeShwYXJzZWRUb2tlbjogSUVkZ2VBdXRoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGFyc2VkVG9rZW4gJiYgcGFyc2VkVG9rZW4uYXBwbGljYXRpb25JZCA/XG4gICAgICBwYXJzZWRUb2tlbi5hcHBsaWNhdGlvbklkIDogJyc7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZFRva2VuKHRva2VuOiBFZGdlVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi5zdGFydHNXaXRoKGVkZ2VBdXRoVG9rZW5QcmVmaXgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uLy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1JUTVBFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPCA4NCkgfHxcbiAgICAgIChCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDwgNzApIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdFZGdlJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnSUUnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgRW5kUG9pbnQsIHtTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UsIHtJUGVlckNvbm5lY3Rpb25PZmZlckluaXR9IGZyb20gJy4uLy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9mZWF0dXJlL0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBSdGNDb25uZWN0aW9uTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi8uLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbENvbnRleHQnO1xuXG5jb25zdCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCA9IDEwMDtcbmNvbnN0IGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQgPSAzMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1JlYWxUaW1lU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbDxFbmRQb2ludCwgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PihbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdMb2NhbCBvZmZlcjpcXG4nICsgbG9jYWxPZmZlci5zZHApO1xuXG4gICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBsb2NhbE9mZmVyLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIHJ0Y0NvbmZpZ3VyYXRpb24sIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2VcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5UnRjQ29uZmlndXJhdGlvbih0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ7XG4gICAgICAgICAgICBsZXQgY2FuY2VsRGlzY292ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGlzY292ZXJ5Q29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB0cmFja0xpc3RlbmVyID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICAgIGlmIChlLnN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKTtcbiAgICAgICAgICAgICAgfSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCBsb2NhbCBTRFAgb2ZmZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBhbnN3ZXIgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbik7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5zdWNjZXNzKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkKTtcblxuICAgICAgICAgICAgICByZXR1cm4gbWVkaWFTdHJlYW1Qcm9taXNlO1xuICAgICAgICAgICAgfSkudGhlbihtZWRpYVN0cmVhbSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IHRoaXMudHJ1bmNhdGVJY2VTZXJ2ZXJzKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm4gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSdGNDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4ub3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAuLi5ydGNDb25maWd1cmF0aW9uXG4gICAgfTtcblxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihuZXdSdGNDb25maWd1cmF0aW9uKTtcblxuICAgIHJldHVybiBvcHRpb25hbFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdXJsczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDI7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgdXJsID0gY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdO1xuXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICB1cmxzLnB1c2goY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHNbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICB1cmxzOiB1cmxzLFxuICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcblxuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWVcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGxvY2FsT2ZmZXIgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24obG9jYWxPZmZlcik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgRWRnZUF1dGggZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGgnO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBFZGdlQXV0aC5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCBpc1J0bXAgPSBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMgJiYgcGFyc2VkVG9rZW4udG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdydG1wJyk7XG5cbiAgICBpZiAoaXNSdG1wKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBSVE1QIHBsYXliYWNrLicpO1xuICAgICAgY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNTdHJlYW1pbmcgPSBwYXJzZWRUb2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbiAmJiBwYXJzZWRUb2tlbi50b2tlbi5jYXBhYmlsaXRpZXMgJiYgcGFyc2VkVG9rZW4udG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKTtcblxuICAgIGlmIChpc1N0cmVhbWluZykge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdUaGlzIGJ1aWxkIGRvZXMgbm90IHN1cHBvcnQgTGl2ZSBTdHJlYW0gcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVhbFRpbWVTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1NES1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fU0RLVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIyIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGltZW5zaW9uIGltcGxlbWVudHMgSUNvbXBhcmFibGU8RGltZW5zaW9uPiB7XG4gIHJlYWRvbmx5IHdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuXG4gIHN0YXRpYyBnZXQgZW1wdHkoKTogRGltZW5zaW9uIHtcbiAgICByZXR1cm4gbmV3IERpbWVuc2lvbigwLCAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBEaW1lbnNpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgJiYgdGhpcy53aWR0aCA9PT0gb3RoZXIud2lkdGggJiYgdGhpcy5oZWlnaHQgPT09IG90aGVyLmhlaWdodDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMud2lkdGh9eCR7dGhpcy5oZWlnaHR9YDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjIgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtTdHJlYW1TZXR1cExpc3RlbmVyfSBmcm9tICcuLi9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IE5ldHdvcmtNb25pdG9yIGZyb20gJy4uL2RvbS9OZXR3b3JrTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuaW50ZXJmYWNlIElOZXR3b3JrU3RhdGlzdGljcyB7XG4gIHJ0dD86IG51bWJlcjtcbiAgZWZmZWN0aXZlVHlwZT86IHN0cmluZztcbiAgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlc3Npb25UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTZXNzaW9uVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBTREsuYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtNb25pdG9yOiBOZXR3b3JrTW9uaXRvciA9IG5ldyBOZXR3b3JrTW9uaXRvcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgX2xhc3ROZXR3b3JrU3RhdGlzdGljczogSU5ldHdvcmtTdGF0aXN0aWNzID0ge307XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtSVFRVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZWZmZWN0aXZlVHlwZS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5nZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IGlzRm9yZWdyb3VuZCA/IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZCA6IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZCxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VMYXN0Q2hhbmdlfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnQXBwbGljYXRpb24gaGFzIGdvbmUgaW50byB0aGUgWyVzXSBhZnRlciBbJXNdIG1zJyxcbiAgICAgIGlzRm9yZWdyb3VuZCA/ICdmb3JlZ3JvdW5kJyA6ICdiYWNrZ3JvdW5kJyxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlTGFzdENoYW5nZSkudG9Jc29TdHJpbmcoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrUlRUVXBkYXRlKG5ld1JUVDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRSdHQgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dCA9IG5ld1JUVDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBuZXdSVFR9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkUnR0ID8ge3VpbnQ2NDogb2xkUnR0fSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc291cmNlOiAnbmF2aWdhdG9yJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIFJUVCBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3UlRULFxuICAgICAgb2xkUnR0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUobmV3TmV0d29ya1R5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkTmV0d29ya1R5cGUgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlID0gbmV3TmV0d29ya1R5cGU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld05ldHdvcmtUeXBlfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZE5ldHdvcmtUeXBlID8ge3N0cmluZzogb2xkTmV0d29ya1R5cGV9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZWZmZWN0aXZlIHR5cGUgaGFzIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdOZXR3b3JrVHlwZSxcbiAgICAgIG9sZE5ldHdvcmtUeXBlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKG5ld0NhcGFjaXR5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZENhcGFjaXR5ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtmbG9hdDogbmV3Q2FwYWNpdHl9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkQ2FwYWNpdHkgPyB7ZmxvYXQ6IG9sZENhcGFjaXR5fSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGRvd25saW5rIHRocm91Z2hwdXQgY2FwYWNpdHkgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld0NhcGFjaXR5LFxuICAgICAgb2xkQ2FwYWNpdHlcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZGVvVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX2xpc3RlblRvRmlyc3RUaW1lOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JTdGFsbDogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yQ29udGludWF0aW9uOiAoZXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9TdGFsbGVkOiBudW1iZXI7XG4gIHByaXZhdGUgX2xhc3RQcm9ncmVzczogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1Jlc29sdXRpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXI6IERpc3Bvc2FibGU7XG4gIHByaXZhdGUgX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcjogRGlzcG9zYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzdHJlYW1JZDogc3RyaW5nLCBwYWdlTG9hZFRpbWU6IG51bWJlciwgY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lID0gKCk6IHZvaWQgPT4gdGhpcy5jYWxsVGltZVRvRmlyc3RGcmFtZSgpO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIH0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcik7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5Gb3JTdGFsbCA9ICgpOiB2b2lkID0+IHRoaXMub25TdGFsbCgpO1xuXG4gICAgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uID0gKGV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuXG4gICAgdGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkdXJhdGlvblNpbmNlUGFnZUxvYWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGltZVRvRmlyc3RGcmFtZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5wdXNoVGltZVRvRmlyc3RGcmFtZShub3cpO1xuICAgIHRoaXMucHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fdGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl90aW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIEZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fdGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9jaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gQ2hhbm5lbCBjcmVhdGlvbiB0byBmaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblN0YWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl92aWRlb1N0YWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlN0YWxsZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgc3RhbGxlZCcsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTogdm9pZCB7XG4gICAgaWYgKCF2aWRlby5idWZmZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHZpZGVvLmJ1ZmZlcmVkLmxlbmd0aDtcbiAgICBjb25zdCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdwbGF5aW5nJ1xuICAgIHx8IGJ1ZmZlckxlbmd0aCA+IDAgPyAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJ1xuICAgICAgfHwgZXZlbnQudHlwZSA9PT0gJ3RpbWV1cGRhdGUnKVxuICAgICAgJiYgdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpID09PSB0aGlzLl9sYXN0UHJvZ3Jlc3MgOiB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl92aWRlb1N0YWxsZWQgfHwgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJykge1xuICAgICAgdGhpcy5fbGFzdFByb2dyZXNzID0gdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZVN0b3AgPSBEYXRlLm5vdygpIC0gdGhpcy5fdmlkZW9TdGFsbGVkO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5CdWZmZXJpbmcsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZVN0b3B9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyByZWNvdmVyZWQgZnJvbSBzdGFsbCBhZnRlciBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZVN0b3ApLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IG51bGw7XG4gIH1cblxuICBvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMobmV3UmVzb2x1dGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3UmVzb2x1dGlvbn0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLl92aWRlb1Jlc29sdXRpb24gPyB7c3RyaW5nOiB0aGlzLl92aWRlb1Jlc29sdXRpb259IDogdW5kZWZpbmVkLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1Jlc29sdXRpb24gPSBuZXdSZXNvbHV0aW9uO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgcnVudGltZSA9IChmdW5jdGlvbiAoZXhwb3J0cykge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgYSByZWplY3RlZCBQcm9taXNlIHdhcyB5aWVsZGVkLCB0aHJvdyB0aGUgcmVqZWN0aW9uIGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGhhbmRsZWQgdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0LCBQcm9taXNlSW1wbCkge1xuICAgIGlmIChQcm9taXNlSW1wbCA9PT0gdm9pZCAwKSBQcm9taXNlSW1wbCA9IFByb21pc2U7XG5cbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksXG4gICAgICBQcm9taXNlSW1wbFxuICAgICk7XG5cbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgLy8gTm90ZTogW1wicmV0dXJuXCJdIG11c3QgYmUgdXNlZCBmb3IgRVMzIHBhcnNpbmcgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4gIC8vIGFzIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IGVtcHR5XG4gIC8vIG9iamVjdC4gRWl0aGVyIHdheSwgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbiAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzIDoge31cbikpO1xuXG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgLy8gVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSBydW5uaW5nIGluIHN0cmljdCBtb2RlLCBzbyB0aGUgYWJvdmVcbiAgLy8gYXNzaWdubWVudCBzaG91bGQgYWx3YXlzIHdvcmsgdW5sZXNzIHNvbWV0aGluZyBpcyBtaXNjb25maWd1cmVkLiBKdXN0XG4gIC8vIGluIGNhc2UgcnVudGltZS5qcyBhY2NpZGVudGFsbHkgcnVucyBpbiBzdHJpY3QgbW9kZSwgd2UgY2FuIGVzY2FwZVxuICAvLyBzdHJpY3QgbW9kZSB1c2luZyBhIGdsb2JhbCBGdW5jdGlvbiBjYWxsLiBUaGlzIGNvdWxkIGNvbmNlaXZhYmx5IGZhaWxcbiAgLy8gaWYgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBmb3JiaWRzIHVzaW5nIEZ1bmN0aW9uLCBidXQgaW4gdGhhdCBjYXNlXG4gIC8vIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZSBhY2NpZGVudGFsIHN0cmljdCBtb2RlIHByb2JsZW0uIElmXG4gIC8vIHlvdSd2ZSBtaXNjb25maWd1cmVkIHlvdXIgYnVuZGxlciB0byBmb3JjZSBzdHJpY3QgbW9kZSBhbmQgYXBwbGllZCBhXG4gIC8vIENTUCB0byBmb3JiaWQgRnVuY3Rpb24sIGFuZCB5b3UncmUgbm90IHdpbGxpbmcgdG8gZml4IGVpdGhlciBvZiB0aG9zZVxuICAvLyBwcm9ibGVtcywgcGxlYXNlIGRldGFpbCB5b3VyIHVuaXF1ZSBwcmVkaWNhbWVudCBpbiBhIEdpdEh1YiBpc3N1ZS5cbiAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gbW9kdWxlWydkZWZhdWx0J10gOlxuXHRcdCgpID0+IG1vZHVsZTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9