@appium/base-driver 8.3.0 → 8.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/basedriver/capabilities.js +2 -4
- package/build/lib/basedriver/commands/event.js +2 -4
- package/build/lib/basedriver/commands/find.js +2 -4
- package/build/lib/basedriver/commands/index.js +2 -4
- package/build/lib/basedriver/commands/log.js +2 -4
- package/build/lib/basedriver/commands/session.js +2 -4
- package/build/lib/basedriver/commands/settings.js +2 -4
- package/build/lib/basedriver/commands/timeout.js +2 -4
- package/build/lib/basedriver/desired-caps.js +2 -4
- package/build/lib/basedriver/device-settings.js +2 -4
- package/build/lib/basedriver/driver.js +17 -6
- package/build/lib/basedriver/helpers.js +2 -4
- package/build/lib/basedriver/logger.js +2 -4
- package/build/lib/constants.js +2 -4
- package/build/lib/express/crash.js +2 -4
- package/build/lib/express/express-logging.js +2 -4
- package/build/lib/express/idempotency.js +2 -4
- package/build/lib/express/logger.js +2 -4
- package/build/lib/express/middleware.js +2 -4
- package/build/lib/express/server.js +2 -4
- package/build/lib/express/static.js +2 -4
- package/build/lib/express/websocket.js +2 -4
- package/build/lib/helpers/capabilities.js +2 -4
- package/build/lib/index.js +2 -4
- package/build/lib/jsonwp-proxy/protocol-converter.js +2 -4
- package/build/lib/jsonwp-proxy/proxy.js +2 -4
- package/build/lib/jsonwp-status/status.js +2 -4
- package/build/lib/protocol/errors.js +2 -4
- package/build/lib/protocol/helpers.js +2 -4
- package/build/lib/protocol/index.js +2 -4
- package/build/lib/protocol/protocol.js +2 -4
- package/build/lib/protocol/routes.js +2 -4
- package/build/lib/protocol/validators.js +2 -4
- package/build/test/basedriver/README.md +5 -0
- package/build/test/basedriver/driver-e2e-tests.js +2 -4
- package/build/test/basedriver/driver-tests.js +2 -4
- package/build/test/basedriver/index.js +2 -4
- package/build/test/e2e/basedriver/driver.e2e.spec.js +15 -0
- package/build/test/e2e/basedriver/helpers.e2e.spec.js +192 -0
- package/build/test/e2e/basedriver/websockets.e2e.spec.js +82 -0
- package/build/test/e2e/express/server.e2e.spec.js +159 -0
- package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +59 -0
- package/build/test/e2e/protocol/fake-driver.js +163 -0
- package/build/test/e2e/protocol/helpers.js +25 -0
- package/build/test/e2e/protocol/protocol.e2e.spec.js +1186 -0
- package/build/test/helpers.js +2 -4
- package/build/test/unit/basedriver/capabilities.spec.js +672 -0
- package/build/test/unit/basedriver/capability.spec.js +353 -0
- package/build/test/unit/basedriver/commands/event.spec.js +110 -0
- package/build/test/unit/basedriver/commands/log.spec.js +85 -0
- package/build/test/unit/basedriver/driver.spec.js +15 -0
- package/build/test/unit/basedriver/helpers.spec.js +151 -0
- package/build/test/unit/basedriver/timeout.spec.js +135 -0
- package/build/test/unit/express/server.spec.js +155 -0
- package/build/test/unit/express/static.spec.js +26 -0
- package/build/test/unit/jsonwp-proxy/mock-request.js +91 -0
- package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +171 -0
- package/build/test/unit/jsonwp-proxy/proxy.spec.js +292 -0
- package/build/test/unit/jsonwp-proxy/url.spec.js +165 -0
- package/build/test/unit/jsonwp-status/status.spec.js +34 -0
- package/build/test/unit/protocol/errors.spec.js +390 -0
- package/build/test/unit/protocol/routes.spec.js +80 -0
- package/build/test/unit/protocol/validator.spec.js +149 -0
- package/lib/basedriver/driver.js +15 -4
- package/package.json +14 -9
- package/test/basedriver/README.md +5 -0
- package/test/basedriver/driver-e2e-tests.js +1 -1
- package/build/test/basedriver/capabilities-specs.js +0 -674
- package/build/test/basedriver/capability-specs.js +0 -355
- package/build/test/basedriver/commands/event-specs.js +0 -112
- package/build/test/basedriver/commands/log-specs.js +0 -87
- package/build/test/basedriver/driver-e2e-specs.js +0 -17
- package/build/test/basedriver/driver-specs.js +0 -17
- package/build/test/basedriver/helpers-e2e-specs.js +0 -194
- package/build/test/basedriver/helpers-specs.js +0 -153
- package/build/test/basedriver/timeout-specs.js +0 -137
- package/build/test/basedriver/websockets-e2e-specs.js +0 -84
- package/build/test/express/server-e2e-specs.js +0 -161
- package/build/test/express/server-specs.js +0 -157
- package/build/test/express/static-specs.js +0 -28
- package/build/test/jsonwp-proxy/mock-request.js +0 -93
- package/build/test/jsonwp-proxy/protocol-converter-specs.js +0 -173
- package/build/test/jsonwp-proxy/proxy-e2e-specs.js +0 -61
- package/build/test/jsonwp-proxy/proxy-specs.js +0 -294
- package/build/test/jsonwp-proxy/url-specs.js +0 -167
- package/build/test/jsonwp-status/status-specs.js +0 -36
- package/build/test/protocol/errors-specs.js +0 -388
- package/build/test/protocol/fake-driver.js +0 -165
- package/build/test/protocol/helpers.js +0 -27
- package/build/test/protocol/protocol-e2e-specs.js +0 -1188
- package/build/test/protocol/routes-specs.js +0 -82
- package/build/test/protocol/validator-specs.js +0 -151
- package/test/basedriver/capabilities-specs.js +0 -537
- package/test/basedriver/capability-specs.js +0 -383
- package/test/basedriver/commands/event-specs.js +0 -74
- package/test/basedriver/commands/log-specs.js +0 -79
- package/test/basedriver/driver-e2e-specs.js +0 -8
- package/test/basedriver/driver-specs.js +0 -8
- package/test/basedriver/fixtures/BadZippedApp.zip +0 -1
- package/test/basedriver/fixtures/FakeAndroidApp.apk +0 -1
- package/test/basedriver/fixtures/FakeAndroidApp.asd +0 -0
- package/test/basedriver/fixtures/FakeIOSApp.app +0 -1
- package/test/basedriver/fixtures/FakeIOSApp.app.zip +0 -0
- package/test/basedriver/fixtures/FakeIOSApp.ipa +0 -0
- package/test/basedriver/fixtures/custom-element-finder-bad.js +0 -5
- package/test/basedriver/fixtures/custom-element-finder.js +0 -29
- package/test/basedriver/helpers-e2e-specs.js +0 -187
- package/test/basedriver/helpers-specs.js +0 -137
- package/test/basedriver/timeout-specs.js +0 -128
- package/test/basedriver/websockets-e2e-specs.js +0 -75
|
@@ -91,8 +91,21 @@ class BaseDriver extends _protocol.Protocol {
|
|
|
91
91
|
|
|
92
92
|
get log() {
|
|
93
93
|
if (!this._log) {
|
|
94
|
-
const instanceName = `${this.constructor.name}@${_support.node.getObjectId(this).substring(0,
|
|
95
|
-
|
|
94
|
+
const instanceName = `${this.constructor.name}@${_support.node.getObjectId(this).substring(0, 4)}`;
|
|
95
|
+
const self = global.WeakRef ? new global.WeakRef(this) : this;
|
|
96
|
+
this._log = _support.logger.getLogger(() => {
|
|
97
|
+
let sessionId = self === null || self === void 0 ? void 0 : self.sessionId;
|
|
98
|
+
|
|
99
|
+
if (!sessionId && _lodash.default.isFunction(self.deref)) {
|
|
100
|
+
const ref = self.deref();
|
|
101
|
+
|
|
102
|
+
if (ref !== null && ref !== void 0 && ref.sessionId) {
|
|
103
|
+
sessionId = ref.sessionId;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return sessionId ? `${instanceName} (${sessionId.substring(0, 8)})` : instanceName;
|
|
108
|
+
});
|
|
96
109
|
}
|
|
97
110
|
|
|
98
111
|
return this._log;
|
|
@@ -387,7 +400,5 @@ for (let [cmd, fn] of _lodash.default.toPairs(_commands.default)) {
|
|
|
387
400
|
}
|
|
388
401
|
|
|
389
402
|
var _default = BaseDriver;
|
|
390
|
-
exports.default = _default;
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2RyaXZlci5qcyJdLCJuYW1lcyI6WyJ2ZXJzaW9uIiwiQkFTRURSSVZFUl9WRVIiLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJfX2Rpcm5hbWUiLCJCIiwiY29uZmlnIiwiY2FuY2VsbGF0aW9uIiwiTkVXX0NPTU1BTkRfVElNRU9VVF9NUyIsIkVWRU5UX1NFU1NJT05fSU5JVCIsIkVWRU5UX1NFU1NJT05fU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfRE9ORSIsIk9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQiLCJCYXNlRHJpdmVyIiwiUHJvdG9jb2wiLCJiYXNlVmVyc2lvbiIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsInNlc3Npb25JZCIsImNhcHMiLCJvcmlnaW5hbENhcHMiLCJoZWxwZXJzIiwiX2xvZyIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiYWxsb3dJbnNlY3VyZSIsImRlbnlJbnNlY3VyZSIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJpbXBsaWNpdFdhaXRNcyIsIl9jb25zdHJhaW50cyIsIl8iLCJjbG9uZURlZXAiLCJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsIm9zIiwidG1wZGlyIiwic2h1dGRvd25VbmV4cGVjdGVkbHkiLCJub0NvbW1hbmRUaW1lciIsImNvbW1hbmRzUXVldWVHdWFyZCIsIkFzeW5jTG9jayIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJub29wIiwiaW5pdGlhbE9wdHMiLCJtYW5hZ2VkRHJpdmVycyIsIl9ldmVudEhpc3RvcnkiLCJjb21tYW5kcyIsImV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlciIsInByb3RvY29sIiwibG9nIiwiaW5zdGFuY2VOYW1lIiwibmFtZSIsIm5vZGUiLCJnZXRPYmplY3RJZCIsInN1YnN0cmluZyIsImxvZ2dlciIsImdldExvZ2dlciIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwiaGFuZGxlciIsIm9uIiwiZHJpdmVyRGF0YSIsImlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQiLCJldmVudEhpc3RvcnkiLCJsb2dFdmVudCIsImV2ZW50TmFtZSIsIkVycm9yIiwidHMiLCJEYXRlIiwibm93IiwibG9nVGltZSIsInRvVGltZVN0cmluZyIsInB1c2giLCJkZWJ1ZyIsImdldFN0YXR1cyIsImRlc2lyZWRDYXBDb25zdHJhaW50cyIsImNvbnN0cmFpbnRzIiwiT2JqZWN0IiwiYXNzaWduIiwidmFsdWUiLCJ0b1BhaXJzIiwicHJlc2VuY2UiLCJhbGxvd0VtcHR5Iiwic2Vzc2lvbkV4aXN0cyIsImRyaXZlckZvclNlc3Npb24iLCJsb2dFeHRyYUNhcHMiLCJleHRyYUNhcHMiLCJkaWZmZXJlbmNlIiwia2V5cyIsImxlbmd0aCIsIndhcm4iLCJjYXAiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwiZSIsImVycm9yQW5kVGhyb3ciLCJlcnJvcnMiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwibWVzc2FnZSIsImlzTWpzb253cFByb3RvY29sIiwiUFJPVE9DT0xTIiwiTUpTT05XUCIsImlzVzNDUHJvdG9jb2wiLCJXM0MiLCJzZXRQcm90b2NvbE1KU09OV1AiLCJzZXRQcm90b2NvbFczQyIsImlzRmVhdHVyZUVuYWJsZWQiLCJpbmNsdWRlcyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiZXhlY3V0ZUNvbW1hbmQiLCJjbWQiLCJhcmdzIiwic3RhcnRUaW1lIiwiREVMRVRFX1NFU1NJT05fQ09NTUFORCIsImNsZWFyTmV3Q29tbWFuZFRpbWVvdXQiLCJOb1N1Y2hEcml2ZXJFcnJvciIsIk5vdFlldEltcGxlbWVudGVkRXJyb3IiLCJ1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lciIsImNvbW1hbmRFeGVjdXRvciIsInJhY2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZmluYWxseSIsInJlbW92ZUxpc3RlbmVyIiwicmVzIiwiYWNxdWlyZSIsInN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQiLCJlbmRUaW1lIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJlcnIiLCJlbWl0IiwiZGVsZXRlU2Vzc2lvbiIsInZhbGlkYXRlTG9jYXRvclN0cmF0ZWd5Iiwic3RyYXRlZ3kiLCJ3ZWJDb250ZXh0IiwidmFsaWRTdHJhdGVnaWVzIiwiam9pbiIsImNvbmNhdCIsIkludmFsaWRTZWxlY3RvckVycm9yIiwicmVzZXQiLCJjdXJyZW50Q29uZmlnIiwicHJvcGVydHkiLCJyZXNldE9uVW5leHBlY3RlZFNodXRkb3duIiwiY3JlYXRlU2Vzc2lvbiIsInVuZGVmaW5lZCIsImtleSIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJtZXRob2QiLCJ1cmwiLCJhdm9pZFNjaGVtYSIsImlzQXJyYXkiLCJhdm9pZE1ldGhvZCIsImF2b2lkUGF0aFJlZ2V4IiwiaXNSZWdFeHAiLCJub3JtYWxpemVkVXJsIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsInRlc3QiLCJhZGRNYW5hZ2VkRHJpdmVyIiwiZHJpdmVyIiwiZ2V0TWFuYWdlZERyaXZlcnMiLCJmbiIsInByb3RvdHlwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBR0EsTUFBTTtBQUFDQSxFQUFBQSxPQUFPLEVBQUVDO0FBQVYsSUFBNEJDLFlBQUdDLG1CQUFILENBQXVCQyxTQUF2QixDQUFsQzs7QUFFQUMsa0JBQUVDLE1BQUYsQ0FBUztBQUNQQyxFQUFBQSxZQUFZLEVBQUU7QUFEUCxD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LENBQU47QUFDRDs7QUFDRCxVQUFJMEYsYUFBYSxHQUFHTixHQUFHLENBQUNPLE9BQUosQ0FBWSxJQUFJQyxNQUFKLENBQVksSUFBR3JJLGdCQUFFc0ksWUFBRixDQUFlLEtBQUs5SSxRQUFwQixDQUE4QixFQUE3QyxDQUFaLEVBQTZELEVBQTdELENBQXBCOztBQUNBLFVBQUl3SSxXQUFXLEtBQUtKLE1BQWhCLElBQTBCSyxjQUFjLENBQUNNLElBQWYsQ0FBb0JKLGFBQXBCLENBQTlCLEVBQWtFO0FBQ2hFLGVBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBQ0QsV0FBTyxLQUFQO0FBQ0Q7O0FBRURLLEVBQUFBLGdCQUFnQixDQUFFQyxNQUFGLEVBQVU7QUFDeEIsU0FBS3RILGNBQUwsQ0FBb0I0QixJQUFwQixDQUF5QjBGLE1BQXpCO0FBQ0Q7O0FBRURDLEVBQUFBLGlCQUFpQixHQUFJO0FBQ25CLFdBQU8sS0FBS3ZILGNBQVo7QUFDRDs7QUF4YytCOzs7O0FBMmNsQyxLQUFLLElBQUksQ0FBQ2lFLEdBQUQsRUFBTXVELEVBQU4sQ0FBVCxJQUFzQjNJLGdCQUFFdUQsT0FBRixDQUFVbEMsaUJBQVYsQ0FBdEIsRUFBMkM7QUFDekN4QyxFQUFBQSxVQUFVLENBQUMrSixTQUFYLENBQXFCeEQsR0FBckIsSUFBNEJ1RCxFQUE1QjtBQUNEOztlQUdjOUosVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFByb3RvY29sLCBlcnJvcnMsIGRldGVybWluZVByb3RvY29sLCBERUxFVEVfU0VTU0lPTl9DT01NQU5ELFxufSBmcm9tICcuLi9wcm90b2NvbCc7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCBub2RlIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IFBST1RPQ09MUywgREVGQVVMVF9CQVNFX1BBVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCBEZXZpY2VTZXR0aW5ncyBmcm9tICcuL2RldmljZS1zZXR0aW5ncyc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVDYXBzIH0gZnJvbSAnLi9jYXBhYmlsaXRpZXMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG4vLyBmb3IgY29tcGF0IHdpdGggcnVubmluZyB0ZXN0cyB0cmFuc3BpbGVkIGFuZCBpbi1wbGFjZVxuY29uc3Qge3ZlcnNpb246IEJBU0VEUklWRVJfVkVSfSA9IGZzLnJlYWRQYWNrYWdlSnNvbkZyb20oX19kaXJuYW1lKTtcblxuQi5jb25maWcoe1xuICBjYW5jZWxsYXRpb246IHRydWUsXG59KTtcblxuY29uc3QgTkVXX0NPTU1BTkRfVElNRU9VVF9NUyA9IDYwICogMTAwMDtcblxuY29uc3QgRVZFTlRfU0VTU0lPTl9JTklUID0gJ25ld1Nlc3Npb25SZXF1ZXN0ZWQnO1xuY29uc3QgRVZFTlRfU0VTU0lPTl9TVEFSVCA9ICduZXdTZXNzaW9uU3RhcnRlZCc7XG5jb25zdCBFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQgPSAncXVpdFNlc3Npb25SZXF1ZXN0ZWQnO1xuY29uc3QgRVZFTlRfU0VTU0lPTl9RVUlUX0RPTkUgPSAncXVpdFNlc3Npb25GaW5pc2hlZCc7XG5jb25zdCBPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5UID0gJ29uVW5leHBlY3RlZFNodXRkb3duJztcblxuXG5jbGFzcyBCYXNlRHJpdmVyIGV4dGVuZHMgUHJvdG9jb2wge1xuXG4gIC8qKlxuICAgKiBNYWtlIHRoZSBiYXNlZHJpdmVyIHZlcnNpb24gYXZhaWxhYmxlIHNvIGZvciBhbnkgZHJpdmVyIHdoaWNoIGluaGVyaXRzIGZyb20gdGhpcyBwYWNrYWdlLCB3ZVxuICAgKiBrbm93IHdoaWNoIHZlcnNpb24gb2YgYmFzZWRyaXZlciBpdCBpbmhlcml0ZWQgZnJvbVxuICAgKi9cbiAgc3RhdGljIGJhc2VWZXJzaW9uID0gQkFTRURSSVZFUl9WRVI7XG5cbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBzZXR1cCBzdGF0ZVxuICAgIHRoaXMuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgIHRoaXMuY2FwcyA9IG51bGw7XG4gICAgdGhpcy5vcmlnaW5hbENhcHMgPSBudWxsOyAvLyBUbyBnaXZlIHRoZSBvcmlnaW5hbCBjYXBhYmlsaXRpZXMgdG8gcmVzZXRcbiAgICB0aGlzLmhlbHBlcnMgPSBoZWxwZXJzO1xuXG4gICAgdGhpcy5fbG9nID0gbnVsbDtcblxuICAgIC8vIGJhc2VQYXRoIGlzIHVzZWQgZm9yIHNldmVyYWwgcHVycG9zZXMsIGZvciBleGFtcGxlIGluIHNldHRpbmcgdXBcbiAgICAvLyBwcm94eWluZyB0byBvdGhlciBkcml2ZXJzLCBzaW5jZSB3ZSBuZWVkIHRvIGtub3cgd2hhdCB0aGUgYmFzZSBwYXRoXG4gICAgLy8gb2YgYW55IGluY29taW5nIHJlcXVlc3QgbWlnaHQgbG9vayBsaWtlLiBXZSBzZXQgaXQgdG8gdGhlIGRlZmF1bHRcbiAgICAvLyBpbml0aWFsbHkgYnV0IGl0IGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBkdXJpbmcgYW55IGFjdHVhbCBwcm9ncmFtXG4gICAgLy8gZXhlY3V0aW9uIGJ5IHRoZSByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sIHdoaWNoIGlzIG5lY2Vzc2FyaWx5IHJ1biBhc1xuICAgIC8vIHRoZSBlbnRyeXBvaW50IGZvciBhbnkgQXBwaXVtIHNlcnZlclxuICAgIHRoaXMuYmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSDtcblxuICAgIC8vIGluaXRpYWxpemUgc2VjdXJpdHkgbW9kZXNcbiAgICB0aGlzLnJlbGF4ZWRTZWN1cml0eUVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmFsbG93SW5zZWN1cmUgPSBbXTtcbiAgICB0aGlzLmRlbnlJbnNlY3VyZSA9IFtdO1xuXG4gICAgLy8gdGltZW91dCBpbml0aWFsaXphdGlvblxuICAgIHRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyA9IE5FV19DT01NQU5EX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5pbXBsaWNpdFdhaXRNcyA9IDA7XG5cbiAgICB0aGlzLl9jb25zdHJhaW50cyA9IF8uY2xvbmVEZWVwKGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMpO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXTtcbiAgICB0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzID0gW107XG5cbiAgICAvLyB1c2UgYSBjdXN0b20gdG1wIGRpciB0byBhdm9pZCBsb3NpbmcgZGF0YSBhbmQgYXBwIHdoZW4gY29tcHV0ZXIgaXNcbiAgICAvLyByZXN0YXJ0ZWRcbiAgICB0aGlzLm9wdHMudG1wRGlyID0gdGhpcy5vcHRzLnRtcERpciB8fFxuICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiB8fFxuICAgICAgICAgICAgICAgICAgICAgICBvcy50bXBkaXIoKTtcblxuICAgIC8vIGJhc2UtZHJpdmVyIGludGVybmFsc1xuICAgIHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkgPSBmYWxzZTtcbiAgICB0aGlzLm5vQ29tbWFuZFRpbWVyID0gbnVsbDtcbiAgICB0aGlzLnNob3VsZFZhbGlkYXRlQ2FwcyA9IHNob3VsZFZhbGlkYXRlQ2FwcztcbiAgICB0aGlzLmNvbW1hbmRzUXVldWVHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcblxuICAgIC8vIHNldHRpbmdzIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgYnkgZHJpdmVycyB3aGljaCBleHRlbmQgQmFzZURyaXZlciwgYnV0XG4gICAgLy8gd2Ugc2V0IGl0IHRvIGFuIGVtcHR5IERldmljZVNldHRpbmdzIGluc3RhbmNlIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlXG4gICAgLy8gZGVmYXVsdCBzZXR0aW5ncyBhcmUgYXBwbGllZCBldmVuIGlmIGFuIGV4dGVuZGluZyBkcml2ZXIgZG9lc24ndCB1dGlsaXplXG4gICAgLy8gdGhlIHNldHRpbmdzIGZ1bmN0aW9uYWxpdHkgaXRzZWxmXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7fSwgXy5ub29wKTtcblxuICAgIC8vIGtlZXBpbmcgdHJhY2sgb2YgaW5pdGlhbCBvcHRzXG4gICAgdGhpcy5pbml0aWFsT3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgICAvLyBhbGxvdyBzdWJjbGFzc2VzIHRvIGhhdmUgaW50ZXJuYWwgZHJpdmVyc1xuICAgIHRoaXMubWFuYWdlZERyaXZlcnMgPSBbXTtcblxuICAgIC8vIHN0b3JlIGV2ZW50IHRpbWluZ3NcbiAgICB0aGlzLl9ldmVudEhpc3RvcnkgPSB7XG4gICAgICBjb21tYW5kczogW10gLy8gY29tbWFuZHMgZ2V0IGEgc3BlY2lhbCBwbGFjZVxuICAgIH07XG5cbiAgICAvLyB1c2VkIHRvIGhhbmRsZSBkcml2ZXIgZXZlbnRzXG4gICAgdGhpcy5ldmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgfVxuXG4gIGdldCBsb2cgKCkge1xuICAgIGlmICghdGhpcy5fbG9nKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZU5hbWUgPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9QCR7bm9kZS5nZXRPYmplY3RJZCh0aGlzKS5zdWJzdHJpbmcoMCwgOCl9YDtcbiAgICAgIHRoaXMuX2xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoKCkgPT5cbiAgICAgICAgdGhpcy5zZXNzaW9uSWQgPyBgJHtpbnN0YW5jZU5hbWV9ICgke3RoaXMuc2Vzc2lvbklkLnN1YnN0cmluZygwLCA4KX0pYCA6IGluc3RhbmNlTmFtZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbG9nO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGNhbGxiYWNrIGhhbmRsZXIgaWYgbmVlZGVkIHRvIGV4ZWN1dGUgYSBjdXN0b20gcGllY2Ugb2YgY29kZVxuICAgKiB3aGVuIHRoZSBkcml2ZXIgaXMgc2h1dCBkb3duIHVuZXhwZWN0ZWRseS4gTXVsdGlwbGUgY2FsbHMgdG8gdGhpcyBtZXRob2RcbiAgICogd2lsbCBjYXVzZSB0aGUgaGFuZGxlciB0byBiZSBleGVjdXRlZCBtdXRpcGxlIHRpbWVzXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIGNvZGUgdG8gYmUgZXhlY3V0ZWQgb24gdW5leHBlY3RlZCBzaHV0ZG93bi5cbiAgICogVGhlIGZ1bmN0aW9uIG1heSBhY2NlcHQgb25lIGFyZ3VtZW50LCB3aGljaCBpcyB0aGUgYWN0dWFsIGVycm9yIGluc3RhbmNlLCB3aGljaFxuICAgKiBjYXVzZWQgdGhlIGRyaXZlciB0byBzaHV0IGRvd24uXG4gICAqL1xuICBvblVuZXhwZWN0ZWRTaHV0ZG93biAoaGFuZGxlcikge1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLm9uKE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQsIGhhbmRsZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBBcHBpdW1Ecml2ZXIgdG8gc3RvcmUgdGhlIGRhdGEgb2YgdGhlXG4gICAqIHNwZWNpZmljIGRyaXZlciBzZXNzaW9ucy4gVGhpcyBkYXRhIGNhbiBiZSBsYXRlciB1c2VkIHRvIGFkanVzdFxuICAgKiBwcm9wZXJ0aWVzIGZvciBkcml2ZXIgaW5zdGFuY2VzIHJ1bm5pbmcgaW4gcGFyYWxsZWwuXG4gICAqIE92ZXJyaWRlIGl0IGluIGluaGVyaXRlZCBkcml2ZXIgY2xhc3NlcyBpZiBuZWNlc3NhcnkuXG4gICAqXG4gICAqIEByZXR1cm4ge29iamVjdH0gRHJpdmVyIHByb3BlcnRpZXMgbWFwcGluZ1xuICAgKi9cbiAgZ2V0IGRyaXZlckRhdGEgKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIHRoZSB3YXkgeyNleGVjdXRlQ29tbWFuZH0gbWV0aG9kXG4gICAqIGhhbmRsZXMgbmV3IGRyaXZlciBjb21tYW5kcyByZWNlaXZlZCBmcm9tIHRoZSBjbGllbnQuXG4gICAqIE92ZXJyaWRlIGl0IGZvciBpbmhlcml0ZWQgY2xhc3NlcyBvbmx5IGluIHNwZWNpYWwgY2FzZXMuXG4gICAqXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyB0cnVlIChkZWZhdWx0KSB0aGVuIGFsbCB0aGUgY29tbWFuZHNcbiAgICogICByZWNlaXZlZCBieSB0aGUgcGFydGljdWxhciBkcml2ZXIgaW5zdGFuY2UgYXJlIGdvaW5nIHRvIGJlIHB1dCBpbnRvIHRoZSBxdWV1ZSxcbiAgICogICBzbyBlYWNoIGZvbGxvd2luZyBjb21tYW5kIHdpbGwgbm90IGJlIGV4ZWN1dGVkIHVudGlsIHRoZSBwcmV2aW91cyBjb21tYW5kXG4gICAqICAgZXhlY3V0aW9uIGlzIGNvbXBsZXRlZC4gRmFsc2UgdmFsdWUgZGlzYWJsZXMgdGhhdCBxdWV1ZSwgc28gZWFjaCBkcml2ZXIgY29tbWFuZFxuICAgKiAgIGlzIGV4ZWN1dGVkIGluZGVwZW5kZW50bHkgYW5kIGRvZXMgbm90IHdhaXQgZm9yIGFueXRoaW5nLlxuICAgKi9cbiAgZ2V0IGlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQgKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLypcbiAgICogbWFrZSBldmVudEhpc3RvcnkgYSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGEgY2xvbmVkIG9iamVjdCBzbyBhIGNvbnN1bWVyIGNhbid0XG4gICAqIGluYWR2ZXJ0ZW50bHkgY2hhbmdlIGRhdGEgb3V0c2lkZSBvZiBsb2dFdmVudFxuICAgKi9cbiAgZ2V0IGV2ZW50SGlzdG9yeSAoKSB7XG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKHRoaXMuX2V2ZW50SGlzdG9yeSk7XG4gIH1cblxuICAvKlxuICAgKiBBUEkgbWV0aG9kIGZvciBkcml2ZXIgZGV2ZWxvcGVycyB0byBsb2cgdGltaW5ncyBmb3IgaW1wb3J0YW50IGV2ZW50c1xuICAgKi9cbiAgbG9nRXZlbnQgKGV2ZW50TmFtZSkge1xuICAgIGlmIChldmVudE5hbWUgPT09ICdjb21tYW5kcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGxvZyBjb21tYW5kcyBkaXJlY3RseScpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV2ZW50TmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBldmVudE5hbWUgJHtldmVudE5hbWV9YCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0pIHtcbiAgICAgIHRoaXMuX2V2ZW50SGlzdG9yeVtldmVudE5hbWVdID0gW107XG4gICAgfVxuICAgIGNvbnN0IHRzID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBsb2dUaW1lID0gKG5ldyBEYXRlKHRzKSkudG9UaW1lU3RyaW5nKCk7XG4gICAgdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0ucHVzaCh0cyk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEV2ZW50ICcke2V2ZW50TmFtZX0nIGxvZ2dlZCBhdCAke3RzfSAoJHtsb2dUaW1lfSlgKTtcbiAgfVxuXG4gIC8qXG4gICAqIE92ZXJyaWRkZW4gaW4gYXBwaXVtIGRyaXZlciwgYnV0IGhlcmUgc28gdGhhdCBpbmRpdmlkdWFsIGRyaXZlcnMgY2FuIGJlXG4gICAqIHRlc3RlZCB3aXRoIGNsaWVudHMgdGhhdCBwb2xsXG4gICAqL1xuICBhc3luYyBnZXRTdGF0dXMgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvLyB3ZSBvbmx5IHdhbnQgc3ViY2xhc3NlcyB0byBldmVyIGV4dGVuZCB0aGUgY29udHJhaW50c1xuICBzZXQgZGVzaXJlZENhcENvbnN0cmFpbnRzIChjb25zdHJhaW50cykge1xuICAgIHRoaXMuX2NvbnN0cmFpbnRzID0gT2JqZWN0LmFzc2lnbih0aGlzLl9jb25zdHJhaW50cywgY29uc3RyYWludHMpO1xuICAgIC8vICdwcmVzZW5jZScgbWVhbnMgZGlmZmVyZW50IHRoaW5ncyBpbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHZhbGlkYXRvcixcbiAgICAvLyB3aGVuIHdlIHNheSAndHJ1ZScgd2UgbWVhbiB0aGF0IGl0IHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSBlbXB0eVxuICAgIGZvciAoY29uc3QgWywgdmFsdWVdIG9mIF8udG9QYWlycyh0aGlzLl9jb25zdHJhaW50cykpIHtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcmVzZW5jZSA9PT0gdHJ1ZSkge1xuICAgICAgICB2YWx1ZS5wcmVzZW5jZSA9IHtcbiAgICAgICAgICBhbGxvd0VtcHR5OiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgZGVzaXJlZENhcENvbnN0cmFpbnRzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uc3RyYWludHM7XG4gIH1cblxuICAvLyBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBzaG91bGRcbiAgLy8gcmVzcG9uZCB3aXRoIGFuIGludmFsaWQgc2Vzc2lvbiByZXNwb25zZVxuICBzZXNzaW9uRXhpc3RzIChzZXNzaW9uSWQpIHtcbiAgICBpZiAoIXNlc3Npb25JZCkgcmV0dXJuIGZhbHNlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGN1cmx5XG4gICAgcmV0dXJuIHNlc3Npb25JZCA9PT0gdGhpcy5zZXNzaW9uSWQ7XG4gIH1cblxuICAvLyBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbW1hbmQgc2hvdWxkXG4gIC8vIGJlIHByb3hpZWQgZGlyZWN0bHkgdG8gdGhlIGRyaXZlclxuICBkcml2ZXJGb3JTZXNzaW9uICgvKnNlc3Npb25JZCovKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsb2dFeHRyYUNhcHMgKGNhcHMpIHtcbiAgICBsZXQgZXh0cmFDYXBzID0gXy5kaWZmZXJlbmNlKF8ua2V5cyhjYXBzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ua2V5cyh0aGlzLl9jb25zdHJhaW50cykpO1xuICAgIGlmIChleHRyYUNhcHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBUaGUgZm9sbG93aW5nIGNhcGFiaWxpdGllcyB3ZXJlIHByb3ZpZGVkLCBidXQgYXJlIG5vdCBgICtcbiAgICAgICAgICAgICAgIGByZWNvZ25pemVkIGJ5IEFwcGl1bTpgKTtcbiAgICAgIGZvciAoY29uc3QgY2FwIG9mIGV4dHJhQ2Fwcykge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGAgICR7Y2FwfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlRGVzaXJlZENhcHMgKGNhcHMpIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVmFsaWRhdGVDYXBzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGVDYXBzKGNhcHMsIHRoaXMuX2NvbnN0cmFpbnRzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihgVGhlIGRlc2lyZWRDYXBhYmlsaXRpZXMgb2JqZWN0IHdhcyBub3QgdmFsaWQgZm9yIHRoZSBgICtcbiAgICAgICAgYGZvbGxvd2luZyByZWFzb24ocyk6ICR7ZS5tZXNzYWdlfWApKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ0V4dHJhQ2FwcyhjYXBzKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNNanNvbndwUHJvdG9jb2wgKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIGlzVzNDUHJvdG9jb2wgKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDO1xuICB9XG5cbiAgc2V0UHJvdG9jb2xNSlNPTldQICgpIHtcbiAgICB0aGlzLnByb3RvY29sID0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBzZXRQcm90b2NvbFczQyAoKSB7XG4gICAgdGhpcy5wcm90b2NvbCA9IFBST1RPQ09MUy5XM0M7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZCB2aWEgaXRzIG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICovXG4gIGlzRmVhdHVyZUVuYWJsZWQgKG5hbWUpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGV4cGxpY2l0bHkgZGVuaWVkIHRoaXMgZmVhdHVyZSwgcmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5XG4gICAgaWYgKHRoaXMuZGVueUluc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5kZW55SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugc3BlY2lmaWNhbGx5IGhhdmUgYWxsb3dlZCB0aGUgZmVhdHVyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5hbGxvd0luc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5hbGxvd0luc2VjdXJlLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBpZiB3ZSd2ZSBnbG9iYWxseSBhbGxvd2VkIGluc2VjdXJlIGZlYXR1cmVzIGFuZCBub3QgZGVuaWVkXG4gICAgLy8gdGhpcyBvbmUsIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBhbGxvd2VkIGFueXRoaW5nIGluc2VjdXJlLCB0aGVuIHJlamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlcnQgdGhhdCBhIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgdGhyb3cgYSBoZWxwZnVsIGVycm9yIGlmIGl0J3NcbiAgICogbm90XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gbmFtZSBvZiBmZWF0dXJlL2NvbW1hbmRcbiAgICovXG4gIGVuc3VyZUZlYXR1cmVFbmFibGVkIChuYW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzRmVhdHVyZUVuYWJsZWQobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsbHkgaW5zZWN1cmUgZmVhdHVyZSAnJHtuYW1lfScgaGFzIG5vdCBiZWVuIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGBlbmFibGVkLiBJZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBmZWF0dXJlIGFuZCBhY2NlcHQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHRoZSBzZWN1cml0eSByYW1pZmljYXRpb25zLCBwbGVhc2UgZG8gc28gYnkgZm9sbG93aW5nIGAgK1xuICAgICAgICAgICAgICAgICAgICAgIGB0aGUgZG9jdW1lbnRlZCBpbnN0cnVjdGlvbnMgYXQgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bWAgK1xuICAgICAgICAgICAgICAgICAgICAgIGAvYXBwaXVtL2Jsb2IvbWFzdGVyL2RvY3MvZW4vd3JpdGluZy1ydW5uaW5nLWFwcGl1bS9zZWN1cml0eS5tZGApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoaXMgaXMgdGhlIG1haW4gY29tbWFuZCBoYW5kbGVyIGZvciB0aGUgZHJpdmVyLiBJdCB3cmFwcyBjb21tYW5kXG4gIC8vIGV4ZWN1dGlvbiB3aXRoIHRpbWVvdXQgbG9naWMsIGNoZWNraW5nIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHNlc3Npb24sXG4gIC8vIGFuZCBlbnN1cmluZyB0aGF0IHdlIGV4ZWN1dGUgY29tbWFuZHMgb25lIGF0IGEgdGltZS4gVGhpcyBtZXRob2QgaXMgY2FsbGVkXG4gIC8vIGJ5IE1KU09OV1AncyBleHByZXNzIHJvdXRlci5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIC8vIGdldCBzdGFydCB0aW1lIGZvciB0aGlzIGNvbW1hbmQsIGFuZCBsb2cgaW4gc3BlY2lhbCBjYXNlc1xuICAgIGxldCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKGNtZCA9PT0gJ2NyZWF0ZVNlc3Npb24nKSB7XG4gICAgICAvLyBJZiBjcmVhdGluZyBhIHNlc3Npb24gZGV0ZXJtaW5lIGlmIFczQyBvciBNSlNPTldQIHByb3RvY29sIHdhcyByZXF1ZXN0ZWQgYW5kIHJlbWVtYmVyIHRoZSBjaG9pY2VcbiAgICAgIHRoaXMucHJvdG9jb2wgPSBkZXRlcm1pbmVQcm90b2NvbChhcmdzKTtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9JTklUKTtcbiAgICB9IGVsc2UgaWYgKGNtZCA9PT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQpO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGhhZCBhIGNvbW1hbmQgdGltZXIgcnVubmluZywgY2xlYXIgaXQgbm93IHRoYXQgd2UncmUgc3RhcnRpbmdcbiAgICAvLyBhIG5ldyBjb21tYW5kIGFuZCBzbyBkb24ndCB3YW50IHRvIHRpbWUgb3V0XG4gICAgdGhpcy5jbGVhck5ld0NvbW1hbmRUaW1lb3V0KCk7XG5cbiAgICBpZiAodGhpcy5zaHV0ZG93blVuZXhwZWN0ZWRseSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcignVGhlIGRyaXZlciB3YXMgdW5leHBlY3RlZGx5IHNodXQgZG93biEnKTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIHRoaXMgY29tbWFuZCwgaXQgbXVzdCBub3QgYmUgaW1wbGVtZW50ZWRcbiAgICBpZiAoIXRoaXNbY21kXSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RZZXRJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgbGV0IHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyO1xuICAgIGNvbnN0IGNvbW1hbmRFeGVjdXRvciA9IGFzeW5jICgpID0+IGF3YWl0IEIucmFjZShbXG4gICAgICB0aGlzW2NtZF0oLi4uYXJncyksXG4gICAgICBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyID0gcmVqZWN0O1xuICAgICAgICB0aGlzLmV2ZW50RW1pdHRlci5vbihPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5ULCB1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lcik7XG4gICAgICB9KVxuICAgIF0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLnJlbW92ZUxpc3RlbmVyKE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQsIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyKTtcbiAgICAgICAgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuaXNDb21tYW5kc1F1ZXVlRW5hYmxlZFxuICAgICAgPyBhd2FpdCB0aGlzLmNvbW1hbmRzUXVldWVHdWFyZC5hY3F1aXJlKEJhc2VEcml2ZXIubmFtZSwgY29tbWFuZEV4ZWN1dG9yKVxuICAgICAgOiBhd2FpdCBjb21tYW5kRXhlY3V0b3IoKTtcblxuICAgIC8vIGlmIHdlIGhhdmUgc2V0IGEgbmV3IGNvbW1hbmQgdGltZW91dCAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCBzdGFydCBhXG4gICAgLy8gdGltZXIgb25jZSB3ZSd2ZSBmaW5pc2hlZCBleGVjdXRpbmcgdGhpcyBjb21tYW5kLiBJZiB3ZSBkb24ndCBjbGVhclxuICAgIC8vIHRoZSB0aW1lciAod2hpY2ggaXMgZG9uZSB3aGVuIGEgbmV3IGNvbW1hbmQgY29tZXMgaW4pLCB3ZSB3aWxsIHRyaWdnZXJcbiAgICAvLyBhdXRvbWF0aWMgc2Vzc2lvbiBkZWxldGlvbiBpbiB0aGlzLm9uQ29tbWFuZFRpbWVvdXQuIE9mIGNvdXJzZSB3ZSBkb24ndFxuICAgIC8vIHdhbnQgdG8gdHJpZ2dlciB0aGUgdGltZXIgd2hlbiB0aGUgdXNlciBpcyBzaHV0dGluZyBkb3duIHRoZSBzZXNzaW9uXG4gICAgLy8gaW50ZW50aW9uYWxseVxuICAgIGlmICh0aGlzLmlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQgJiYgY21kICE9PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICAvLyByZXNldHRpbmcgZXhpc3RpbmcgdGltZW91dFxuICAgICAgdGhpcy5zdGFydE5ld0NvbW1hbmRUaW1lb3V0KCk7XG4gICAgfVxuXG4gICAgLy8gbG9nIHRpbWluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvbW1hbmRcbiAgICBjb25zdCBlbmRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9ldmVudEhpc3RvcnkuY29tbWFuZHMucHVzaCh7Y21kLCBzdGFydFRpbWUsIGVuZFRpbWV9KTtcbiAgICBpZiAoY21kID09PSAnY3JlYXRlU2Vzc2lvbicpIHtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9TVEFSVCk7XG4gICAgfSBlbHNlIGlmIChjbWQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgIHRoaXMubG9nRXZlbnQoRVZFTlRfU0VTU0lPTl9RVUlUX0RPTkUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBhc3luYyBzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biAoZXJyID0gbmV3IGVycm9ycy5Ob1N1Y2hEcml2ZXJFcnJvcignVGhlIGRyaXZlciB3YXMgdW5leHBlY3RlZGx5IHNodXQgZG93biEnKSkge1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgZXJyKTsgLy8gYWxsb3cgb3RoZXJzIHRvIGxpc3RlbiBmb3IgdGhpc1xuICAgIHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24odGhpcy5zZXNzaW9uSWQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNodXRkb3duVW5leHBlY3RlZGx5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kgKHN0cmF0ZWd5LCB3ZWJDb250ZXh0ID0gZmFsc2UpIHtcbiAgICBsZXQgdmFsaWRTdHJhdGVnaWVzID0gdGhpcy5sb2NhdG9yU3RyYXRlZ2llcztcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVmFsaWQgbG9jYXRvciBzdHJhdGVnaWVzIGZvciB0aGlzIHJlcXVlc3Q6ICR7dmFsaWRTdHJhdGVnaWVzLmpvaW4oJywgJyl9YCk7XG5cbiAgICBpZiAod2ViQ29udGV4dCkge1xuICAgICAgdmFsaWRTdHJhdGVnaWVzID0gdmFsaWRTdHJhdGVnaWVzLmNvbmNhdCh0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoIV8uaW5jbHVkZXModmFsaWRTdHJhdGVnaWVzLCBzdHJhdGVneSkpIHtcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZFNlbGVjdG9yRXJyb3IoYExvY2F0b3IgU3RyYXRlZ3kgJyR7c3RyYXRlZ3l9JyBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIHNlc3Npb25gKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgKiBSZXN0YXJ0IHRoZSBzZXNzaW9uIHdpdGggdGhlIG9yaWdpbmFsIGNhcHMsXG4gICAqIHByZXNlcnZpbmcgdGhlIHRpbWVvdXQgY29uZmlnLlxuICAgKi9cbiAgYXN5bmMgcmVzZXQgKCkge1xuICAgIHRoaXMubG9nLmRlYnVnKCdSZXNldHRpbmcgYXBwIG1pZC1zZXNzaW9uJyk7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1J1bm5pbmcgZ2VuZXJpYyBmdWxsIHJlc2V0Jyk7XG5cbiAgICAvLyBwcmVzZXJ2aW5nIHN0YXRlXG4gICAgbGV0IGN1cnJlbnRDb25maWcgPSB7fTtcbiAgICBmb3IgKGxldCBwcm9wZXJ0eSBvZiBbJ2ltcGxpY2l0V2FpdE1zJywgJ25ld0NvbW1hbmRUaW1lb3V0TXMnLCAnc2Vzc2lvbklkJywgJ3Jlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24nXSkge1xuICAgICAgY3VycmVudENvbmZpZ1twcm9wZXJ0eV0gPSB0aGlzW3Byb3BlcnR5XTtcbiAgICB9XG5cbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gcHJlc2VydmUgdGhlIHVuZXhwZWN0ZWQgc2h1dGRvd24sIGFuZCBtYWtlIHN1cmUgaXQgaXMgbm90IGNhbmNlbGxlZCBkdXJpbmcgcmVzZXQuXG4gICAgdGhpcy5yZXNldE9uVW5leHBlY3RlZFNodXRkb3duID0gKCkgPT4ge307XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKHRoaXMuc2Vzc2lvbklkKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdSZXN0YXJ0aW5nIGFwcCcpO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVTZXNzaW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLm9yaWdpbmFsQ2Fwcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIGFsd2F5cyByZXN0b3JlIHN0YXRlLlxuICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhjdXJyZW50Q29uZmlnKSkge1xuICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jbGVhck5ld0NvbW1hbmRUaW1lb3V0KCk7XG4gIH1cblxuICBwcm94eUFjdGl2ZSAoLyogc2Vzc2lvbklkICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0UHJveHlBdm9pZExpc3QgKC8qIHNlc3Npb25JZCAqLykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNhblByb3h5ICgvKiBzZXNzaW9uSWQgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBhIGdpdmVuIGNvbW1hbmQgcm91dGUgKGV4cHJlc3NlZCBhcyBtZXRob2QgYW5kIHVybCkgc2hvdWxkIG5vdCBiZVxuICAgKiBwcm94aWVkIGFjY29yZGluZyB0byB0aGlzIGRyaXZlclxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIGN1cnJlbnQgc2Vzc2lvbklkIChpbiBjYXNlIHRoZSBkcml2ZXIgcnVuc1xuICAgKiBtdWx0aXBsZSBzZXNzaW9uIGlkcyBhbmQgcmVxdWlyZXMgaXQpLiBUaGlzIGlzIG5vdCB1c2VkIGluIHRoaXMgbWV0aG9kIGJ1dFxuICAgKiBzaG91bGQgYmUgbWFkZSBhdmFpbGFibGUgdG8gb3ZlcnJpZGRlbiBtZXRob2RzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIC0gSFRUUCBtZXRob2Qgb2YgdGhlIHJvdXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgb2YgdGhlIHJvdXRlXG4gICAqIEBwYXJhbSB7Pyp9IGJvZHkgLSB3ZWJkcml2ZXIgcmVxdWVzdCBib2R5XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHdoZXRoZXIgdGhlIHJvdXRlIHNob3VsZCBiZSBhdm9pZGVkXG4gICAqL1xuICBwcm94eVJvdXRlSXNBdm9pZGVkIChzZXNzaW9uSWQsIG1ldGhvZCwgdXJsLyosIGJvZHkqLykge1xuICAgIGZvciAobGV0IGF2b2lkU2NoZW1hIG9mIHRoaXMuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKSkge1xuICAgICAgaWYgKCFfLmlzQXJyYXkoYXZvaWRTY2hlbWEpIHx8IGF2b2lkU2NoZW1hLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3h5IGF2b2lkYW5jZSBtdXN0IGJlIGEgbGlzdCBvZiBwYWlycycpO1xuICAgICAgfVxuICAgICAgbGV0IFthdm9pZE1ldGhvZCwgYXZvaWRQYXRoUmVnZXhdID0gYXZvaWRTY2hlbWE7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoWydHRVQnLCAnUE9TVCcsICdERUxFVEUnXSwgYXZvaWRNZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHByb3h5IGF2b2lkYW5jZSBtZXRob2QgJyR7YXZvaWRNZXRob2R9J2ApO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzUmVnRXhwKGF2b2lkUGF0aFJlZ2V4KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3h5IGF2b2lkYW5jZSBwYXRoIG11c3QgYmUgYSByZWd1bGFyIGV4cHJlc3Npb24nKTtcbiAgICAgIH1cbiAgICAgIGxldCBub3JtYWxpemVkVXJsID0gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7Xy5lc2NhcGVSZWdFeHAodGhpcy5iYXNlUGF0aCl9YCksICcnKTtcbiAgICAgIGlmIChhdm9pZE1ldGhvZCA9PT0gbWV0aG9kICYmIGF2b2lkUGF0aFJlZ2V4LnRlc3Qobm9ybWFsaXplZFVybCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFkZE1hbmFnZWREcml2ZXIgKGRyaXZlcikge1xuICAgIHRoaXMubWFuYWdlZERyaXZlcnMucHVzaChkcml2ZXIpO1xuICB9XG5cbiAgZ2V0TWFuYWdlZERyaXZlcnMgKCkge1xuICAgIHJldHVybiB0aGlzLm1hbmFnZWREcml2ZXJzO1xuICB9XG59XG5cbmZvciAobGV0IFtjbWQsIGZuXSBvZiBfLnRvUGFpcnMoY29tbWFuZHMpKSB7XG4gIEJhc2VEcml2ZXIucHJvdG90eXBlW2NtZF0gPSBmbjtcbn1cblxuZXhwb3J0IHsgQmFzZURyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgQmFzZURyaXZlcjtcbiJdLCJmaWxlIjoibGliL2Jhc2Vkcml2ZXIvZHJpdmVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
403
|
+
exports.default = _default;
|
|
404
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2RyaXZlci5qcyJdLCJuYW1lcyI6WyJ2ZXJzaW9uIiwiQkFTRURSSVZFUl9WRVIiLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJfX2Rpcm5hbWUiLCJCIiwiY29uZmlnIiwiY2FuY2VsbGF0aW9uIiwiTkVXX0NPTU1BTkRfVElNRU9VVF9NUyIsIkVWRU5UX1NFU1NJT05fSU5JVCIsIkVWRU5UX1NFU1NJT05fU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQiLCJFVkVOVF9TRVNTSU9OX1FVSVRfRE9ORSIsIk9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQiLCJCYXNlRHJpdmVyIiwiUHJvdG9jb2wiLCJiYXNlVmVyc2lvbiIsImNvbnN0cnVjdG9yIiwib3B0cyIsInNob3VsZFZhbGlkYXRlQ2FwcyIsInNlc3Npb25JZCIsImNhcHMiLCJvcmlnaW5hbENhcHMiLCJoZWxwZXJzIiwiX2xvZyIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiYWxsb3dJbnNlY3VyZSIsImRlbnlJbnNlY3VyZSIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJpbXBsaWNpdFdhaXRNcyIsIl9jb25zdHJhaW50cyIsIl8iLCJjbG9uZURlZXAiLCJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsIm9zIiwidG1wZGlyIiwic2h1dGRvd25VbmV4cGVjdGVkbHkiLCJub0NvbW1hbmRUaW1lciIsImNvbW1hbmRzUXVldWVHdWFyZCIsIkFzeW5jTG9jayIsInNldHRpbmdzIiwiRGV2aWNlU2V0dGluZ3MiLCJub29wIiwiaW5pdGlhbE9wdHMiLCJtYW5hZ2VkRHJpdmVycyIsIl9ldmVudEhpc3RvcnkiLCJjb21tYW5kcyIsImV2ZW50RW1pdHRlciIsIkV2ZW50RW1pdHRlciIsInByb3RvY29sIiwibG9nIiwiaW5zdGFuY2VOYW1lIiwibmFtZSIsIm5vZGUiLCJnZXRPYmplY3RJZCIsInN1YnN0cmluZyIsInNlbGYiLCJnbG9iYWwiLCJXZWFrUmVmIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiaXNGdW5jdGlvbiIsImRlcmVmIiwicmVmIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJoYW5kbGVyIiwib24iLCJkcml2ZXJEYXRhIiwiaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCIsImV2ZW50SGlzdG9yeSIsImxvZ0V2ZW50IiwiZXZlbnROYW1lIiwiRXJyb3IiLCJ0cyIsIkRhdGUiLCJub3ciLCJsb2dUaW1lIiwidG9UaW1lU3RyaW5nIiwicHVzaCIsImRlYnVnIiwiZ2V0U3RhdHVzIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iLCJ2YWx1ZSIsInRvUGFpcnMiLCJwcmVzZW5jZSIsImFsbG93RW1wdHkiLCJzZXNzaW9uRXhpc3RzIiwiZHJpdmVyRm9yU2Vzc2lvbiIsImxvZ0V4dHJhQ2FwcyIsImV4dHJhQ2FwcyIsImRpZmZlcmVuY2UiLCJrZXlzIiwibGVuZ3RoIiwid2FybiIsImNhcCIsInZhbGlkYXRlRGVzaXJlZENhcHMiLCJlIiwiZXJyb3JBbmRUaHJvdyIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJtZXNzYWdlIiwiaXNNanNvbndwUHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJNSlNPTldQIiwiaXNXM0NQcm90b2NvbCIsIlczQyIsInNldFByb3RvY29sTUpTT05XUCIsInNldFByb3RvY29sVzNDIiwiaXNGZWF0dXJlRW5hYmxlZCIsImluY2x1ZGVzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJleGVjdXRlQ29tbWFuZCIsImNtZCIsImFyZ3MiLCJzdGFydFRpbWUiLCJERUxFVEVfU0VTU0lPTl9DT01NQU5EIiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsIk5vU3VjaERyaXZlckVycm9yIiwiTm90WWV0SW1wbGVtZW50ZWRFcnJvciIsInVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyIiwiY29tbWFuZEV4ZWN1dG9yIiwicmFjZSIsInJlc29sdmUiLCJyZWplY3QiLCJmaW5hbGx5IiwicmVtb3ZlTGlzdGVuZXIiLCJyZXMiLCJhY3F1aXJlIiwic3RhcnROZXdDb21tYW5kVGltZW91dCIsImVuZFRpbWUiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImVyciIsImVtaXQiLCJkZWxldGVTZXNzaW9uIiwidmFsaWRhdGVMb2NhdG9yU3RyYXRlZ3kiLCJzdHJhdGVneSIsIndlYkNvbnRleHQiLCJ2YWxpZFN0cmF0ZWdpZXMiLCJqb2luIiwiY29uY2F0IiwiSW52YWxpZFNlbGVjdG9yRXJyb3IiLCJyZXNldCIsImN1cnJlbnRDb25maWciLCJwcm9wZXJ0eSIsInJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24iLCJjcmVhdGVTZXNzaW9uIiwidW5kZWZpbmVkIiwia2V5IiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5IiwicHJveHlSb3V0ZUlzQXZvaWRlZCIsIm1ldGhvZCIsInVybCIsImF2b2lkU2NoZW1hIiwiaXNBcnJheSIsImF2b2lkTWV0aG9kIiwiYXZvaWRQYXRoUmVnZXgiLCJpc1JlZ0V4cCIsIm5vcm1hbGl6ZWRVcmwiLCJyZXBsYWNlIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwidGVzdCIsImFkZE1hbmFnZWREcml2ZXIiLCJkcml2ZXIiLCJnZXRNYW5hZ2VkRHJpdmVycyIsImZuIiwicHJvdG90eXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFHQSxNQUFNO0FBQUNBLEVBQUFBLE9BQU8sRUFBRUM7QUFBVixJQUE0QkMsWUFBR0MsbUJBQUgsQ0FBdUJDLFNB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LElBQUksQ0FBQ3VFLEdBQUQsRUFBTXVELEVBQU4sQ0FBVCxJQUFzQmpKLGdCQUFFNkQsT0FBRixDQUFVeEMsaUJBQVYsQ0FBdEIsRUFBMkM7QUFDekN4QyxFQUFBQSxVQUFVLENBQUNxSyxTQUFYLENBQXFCeEQsR0FBckIsSUFBNEJ1RCxFQUE1QjtBQUNEOztlQUdjcEssVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFByb3RvY29sLCBlcnJvcnMsIGRldGVybWluZVByb3RvY29sLCBERUxFVEVfU0VTU0lPTl9DT01NQU5ELFxufSBmcm9tICcuLi9wcm90b2NvbCc7XG5pbXBvcnQgeyBmcywgbG9nZ2VyLCBub2RlIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IFBST1RPQ09MUywgREVGQVVMVF9CQVNFX1BBVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBjb21tYW5kcyBmcm9tICcuL2NvbW1hbmRzJztcbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCBEZXZpY2VTZXR0aW5ncyBmcm9tICcuL2RldmljZS1zZXR0aW5ncyc7XG5pbXBvcnQgeyBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIH0gZnJvbSAnLi9kZXNpcmVkLWNhcHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVDYXBzIH0gZnJvbSAnLi9jYXBhYmlsaXRpZXMnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuXG4vLyBmb3IgY29tcGF0IHdpdGggcnVubmluZyB0ZXN0cyB0cmFuc3BpbGVkIGFuZCBpbi1wbGFjZVxuY29uc3Qge3ZlcnNpb246IEJBU0VEUklWRVJfVkVSfSA9IGZzLnJlYWRQYWNrYWdlSnNvbkZyb20oX19kaXJuYW1lKTtcblxuQi5jb25maWcoe1xuICBjYW5jZWxsYXRpb246IHRydWUsXG59KTtcblxuY29uc3QgTkVXX0NPTU1BTkRfVElNRU9VVF9NUyA9IDYwICogMTAwMDtcblxuY29uc3QgRVZFTlRfU0VTU0lPTl9JTklUID0gJ25ld1Nlc3Npb25SZXF1ZXN0ZWQnO1xuY29uc3QgRVZFTlRfU0VTU0lPTl9TVEFSVCA9ICduZXdTZXNzaW9uU3RhcnRlZCc7XG5jb25zdCBFVkVOVF9TRVNTSU9OX1FVSVRfU1RBUlQgPSAncXVpdFNlc3Npb25SZXF1ZXN0ZWQnO1xuY29uc3QgRVZFTlRfU0VTU0lPTl9RVUlUX0RPTkUgPSAncXVpdFNlc3Npb25GaW5pc2hlZCc7XG5jb25zdCBPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5UID0gJ29uVW5leHBlY3RlZFNodXRkb3duJztcblxuXG5jbGFzcyBCYXNlRHJpdmVyIGV4dGVuZHMgUHJvdG9jb2wge1xuXG4gIC8qKlxuICAgKiBNYWtlIHRoZSBiYXNlZHJpdmVyIHZlcnNpb24gYXZhaWxhYmxlIHNvIGZvciBhbnkgZHJpdmVyIHdoaWNoIGluaGVyaXRzIGZyb20gdGhpcyBwYWNrYWdlLCB3ZVxuICAgKiBrbm93IHdoaWNoIHZlcnNpb24gb2YgYmFzZWRyaXZlciBpdCBpbmhlcml0ZWQgZnJvbVxuICAgKi9cbiAgc3RhdGljIGJhc2VWZXJzaW9uID0gQkFTRURSSVZFUl9WRVI7XG5cbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvLyBzZXR1cCBzdGF0ZVxuICAgIHRoaXMuc2Vzc2lvbklkID0gbnVsbDtcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgIHRoaXMuY2FwcyA9IG51bGw7XG4gICAgdGhpcy5vcmlnaW5hbENhcHMgPSBudWxsOyAvLyBUbyBnaXZlIHRoZSBvcmlnaW5hbCBjYXBhYmlsaXRpZXMgdG8gcmVzZXRcbiAgICB0aGlzLmhlbHBlcnMgPSBoZWxwZXJzO1xuXG4gICAgdGhpcy5fbG9nID0gbnVsbDtcblxuICAgIC8vIGJhc2VQYXRoIGlzIHVzZWQgZm9yIHNldmVyYWwgcHVycG9zZXMsIGZvciBleGFtcGxlIGluIHNldHRpbmcgdXBcbiAgICAvLyBwcm94eWluZyB0byBvdGhlciBkcml2ZXJzLCBzaW5jZSB3ZSBuZWVkIHRvIGtub3cgd2hhdCB0aGUgYmFzZSBwYXRoXG4gICAgLy8gb2YgYW55IGluY29taW5nIHJlcXVlc3QgbWlnaHQgbG9vayBsaWtlLiBXZSBzZXQgaXQgdG8gdGhlIGRlZmF1bHRcbiAgICAvLyBpbml0aWFsbHkgYnV0IGl0IGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBkdXJpbmcgYW55IGFjdHVhbCBwcm9ncmFtXG4gICAgLy8gZXhlY3V0aW9uIGJ5IHRoZSByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24sIHdoaWNoIGlzIG5lY2Vzc2FyaWx5IHJ1biBhc1xuICAgIC8vIHRoZSBlbnRyeXBvaW50IGZvciBhbnkgQXBwaXVtIHNlcnZlclxuICAgIHRoaXMuYmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSDtcblxuICAgIC8vIGluaXRpYWxpemUgc2VjdXJpdHkgbW9kZXNcbiAgICB0aGlzLnJlbGF4ZWRTZWN1cml0eUVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmFsbG93SW5zZWN1cmUgPSBbXTtcbiAgICB0aGlzLmRlbnlJbnNlY3VyZSA9IFtdO1xuXG4gICAgLy8gdGltZW91dCBpbml0aWFsaXphdGlvblxuICAgIHRoaXMubmV3Q29tbWFuZFRpbWVvdXRNcyA9IE5FV19DT01NQU5EX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5pbXBsaWNpdFdhaXRNcyA9IDA7XG5cbiAgICB0aGlzLl9jb25zdHJhaW50cyA9IF8uY2xvbmVEZWVwKGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHMpO1xuICAgIHRoaXMubG9jYXRvclN0cmF0ZWdpZXMgPSBbXTtcbiAgICB0aGlzLndlYkxvY2F0b3JTdHJhdGVnaWVzID0gW107XG5cbiAgICAvLyB1c2UgYSBjdXN0b20gdG1wIGRpciB0byBhdm9pZCBsb3NpbmcgZGF0YSBhbmQgYXBwIHdoZW4gY29tcHV0ZXIgaXNcbiAgICAvLyByZXN0YXJ0ZWRcbiAgICB0aGlzLm9wdHMudG1wRGlyID0gdGhpcy5vcHRzLnRtcERpciB8fFxuICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiB8fFxuICAgICAgICAgICAgICAgICAgICAgICBvcy50bXBkaXIoKTtcblxuICAgIC8vIGJhc2UtZHJpdmVyIGludGVybmFsc1xuICAgIHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkgPSBmYWxzZTtcbiAgICB0aGlzLm5vQ29tbWFuZFRpbWVyID0gbnVsbDtcbiAgICB0aGlzLnNob3VsZFZhbGlkYXRlQ2FwcyA9IHNob3VsZFZhbGlkYXRlQ2FwcztcbiAgICB0aGlzLmNvbW1hbmRzUXVldWVHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcblxuICAgIC8vIHNldHRpbmdzIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgYnkgZHJpdmVycyB3aGljaCBleHRlbmQgQmFzZURyaXZlciwgYnV0XG4gICAgLy8gd2Ugc2V0IGl0IHRvIGFuIGVtcHR5IERldmljZVNldHRpbmdzIGluc3RhbmNlIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlXG4gICAgLy8gZGVmYXVsdCBzZXR0aW5ncyBhcmUgYXBwbGllZCBldmVuIGlmIGFuIGV4dGVuZGluZyBkcml2ZXIgZG9lc24ndCB1dGlsaXplXG4gICAgLy8gdGhlIHNldHRpbmdzIGZ1bmN0aW9uYWxpdHkgaXRzZWxmXG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncyh7fSwgXy5ub29wKTtcblxuICAgIC8vIGtlZXBpbmcgdHJhY2sgb2YgaW5pdGlhbCBvcHRzXG4gICAgdGhpcy5pbml0aWFsT3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgICAvLyBhbGxvdyBzdWJjbGFzc2VzIHRvIGhhdmUgaW50ZXJuYWwgZHJpdmVyc1xuICAgIHRoaXMubWFuYWdlZERyaXZlcnMgPSBbXTtcblxuICAgIC8vIHN0b3JlIGV2ZW50IHRpbWluZ3NcbiAgICB0aGlzLl9ldmVudEhpc3RvcnkgPSB7XG4gICAgICBjb21tYW5kczogW10gLy8gY29tbWFuZHMgZ2V0IGEgc3BlY2lhbCBwbGFjZVxuICAgIH07XG5cbiAgICAvLyB1c2VkIHRvIGhhbmRsZSBkcml2ZXIgZXZlbnRzXG4gICAgdGhpcy5ldmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgfVxuXG4gIGdldCBsb2cgKCkge1xuICAgIGlmICghdGhpcy5fbG9nKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZU5hbWUgPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9QCR7bm9kZS5nZXRPYmplY3RJZCh0aGlzKS5zdWJzdHJpbmcoMCwgNCl9YDtcbiAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIHNlbGYgcmVmZXJlbmNlIHRvIGJlIGNhcHR1cmVkIGluc2lkZSB0aGUgYmVsb3cgY2xvc3VyZVxuICAgICAgLy8gdG8gYXZvaWQgcG9zc2libGUgbWVtb3J5IGxlYWtzLFxuICAgICAgLy8gYnV0IE5vZGVKUyBzdGFydGVkIHN1cHBvcnRpbmcgV2Vha1JlZiBvbmx5IHNpbmNlIHYuIDE0LjZcbiAgICAgIGNvbnN0IHNlbGYgPSBnbG9iYWwuV2Vha1JlZiA/IG5ldyBnbG9iYWwuV2Vha1JlZih0aGlzKSA6IHRoaXM7XG4gICAgICB0aGlzLl9sb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCgpID0+IHtcbiAgICAgICAgbGV0IHNlc3Npb25JZCA9IHNlbGY/LnNlc3Npb25JZDtcbiAgICAgICAgaWYgKCFzZXNzaW9uSWQgJiYgXy5pc0Z1bmN0aW9uKHNlbGYuZGVyZWYpKSB7XG4gICAgICAgICAgY29uc3QgcmVmID0gc2VsZi5kZXJlZigpO1xuICAgICAgICAgIGlmIChyZWY/LnNlc3Npb25JZCkge1xuICAgICAgICAgICAgc2Vzc2lvbklkID0gcmVmLnNlc3Npb25JZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlc3Npb25JZCA/IGAke2luc3RhbmNlTmFtZX0gKCR7c2Vzc2lvbklkLnN1YnN0cmluZygwLCA4KX0pYCA6IGluc3RhbmNlTmFtZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9sb2c7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgY2FsbGJhY2sgaGFuZGxlciBpZiBuZWVkZWQgdG8gZXhlY3V0ZSBhIGN1c3RvbSBwaWVjZSBvZiBjb2RlXG4gICAqIHdoZW4gdGhlIGRyaXZlciBpcyBzaHV0IGRvd24gdW5leHBlY3RlZGx5LiBNdWx0aXBsZSBjYWxscyB0byB0aGlzIG1ldGhvZFxuICAgKiB3aWxsIGNhdXNlIHRoZSBoYW5kbGVyIHRvIGJlIGV4ZWN1dGVkIG11dGlwbGUgdGltZXNcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgY29kZSB0byBiZSBleGVjdXRlZCBvbiB1bmV4cGVjdGVkIHNodXRkb3duLlxuICAgKiBUaGUgZnVuY3Rpb24gbWF5IGFjY2VwdCBvbmUgYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBhY3R1YWwgZXJyb3IgaW5zdGFuY2UsIHdoaWNoXG4gICAqIGNhdXNlZCB0aGUgZHJpdmVyIHRvIHNodXQgZG93bi5cbiAgICovXG4gIG9uVW5leHBlY3RlZFNodXRkb3duIChoYW5kbGVyKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgaGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IEFwcGl1bURyaXZlciB0byBzdG9yZSB0aGUgZGF0YSBvZiB0aGVcbiAgICogc3BlY2lmaWMgZHJpdmVyIHNlc3Npb25zLiBUaGlzIGRhdGEgY2FuIGJlIGxhdGVyIHVzZWQgdG8gYWRqdXN0XG4gICAqIHByb3BlcnRpZXMgZm9yIGRyaXZlciBpbnN0YW5jZXMgcnVubmluZyBpbiBwYXJhbGxlbC5cbiAgICogT3ZlcnJpZGUgaXQgaW4gaW5oZXJpdGVkIGRyaXZlciBjbGFzc2VzIGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fSBEcml2ZXIgcHJvcGVydGllcyBtYXBwaW5nXG4gICAqL1xuICBnZXQgZHJpdmVyRGF0YSAoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIHdheSB7I2V4ZWN1dGVDb21tYW5kfSBtZXRob2RcbiAgICogaGFuZGxlcyBuZXcgZHJpdmVyIGNvbW1hbmRzIHJlY2VpdmVkIGZyb20gdGhlIGNsaWVudC5cbiAgICogT3ZlcnJpZGUgaXQgZm9yIGluaGVyaXRlZCBjbGFzc2VzIG9ubHkgaW4gc3BlY2lhbCBjYXNlcy5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIHRydWUgKGRlZmF1bHQpIHRoZW4gYWxsIHRoZSBjb21tYW5kc1xuICAgKiAgIHJlY2VpdmVkIGJ5IHRoZSBwYXJ0aWN1bGFyIGRyaXZlciBpbnN0YW5jZSBhcmUgZ29pbmcgdG8gYmUgcHV0IGludG8gdGhlIHF1ZXVlLFxuICAgKiAgIHNvIGVhY2ggZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgdW50aWwgdGhlIHByZXZpb3VzIGNvbW1hbmRcbiAgICogICBleGVjdXRpb24gaXMgY29tcGxldGVkLiBGYWxzZSB2YWx1ZSBkaXNhYmxlcyB0aGF0IHF1ZXVlLCBzbyBlYWNoIGRyaXZlciBjb21tYW5kXG4gICAqICAgaXMgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseSBhbmQgZG9lcyBub3Qgd2FpdCBmb3IgYW55dGhpbmcuXG4gICAqL1xuICBnZXQgaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCAoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKlxuICAgKiBtYWtlIGV2ZW50SGlzdG9yeSBhIHByb3BlcnR5IGFuZCByZXR1cm4gYSBjbG9uZWQgb2JqZWN0IHNvIGEgY29uc3VtZXIgY2FuJ3RcbiAgICogaW5hZHZlcnRlbnRseSBjaGFuZ2UgZGF0YSBvdXRzaWRlIG9mIGxvZ0V2ZW50XG4gICAqL1xuICBnZXQgZXZlbnRIaXN0b3J5ICgpIHtcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodGhpcy5fZXZlbnRIaXN0b3J5KTtcbiAgfVxuXG4gIC8qXG4gICAqIEFQSSBtZXRob2QgZm9yIGRyaXZlciBkZXZlbG9wZXJzIHRvIGxvZyB0aW1pbmdzIGZvciBpbXBvcnRhbnQgZXZlbnRzXG4gICAqL1xuICBsb2dFdmVudCAoZXZlbnROYW1lKSB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NvbW1hbmRzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9nIGNvbW1hbmRzIGRpcmVjdGx5Jyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXZlbnROYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGV2ZW50TmFtZSAke2V2ZW50TmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXSkge1xuICAgICAgdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0gPSBbXTtcbiAgICB9XG4gICAgY29uc3QgdHMgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGxvZ1RpbWUgPSAobmV3IERhdGUodHMpKS50b1RpbWVTdHJpbmcoKTtcbiAgICB0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXS5wdXNoKHRzKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRXZlbnQgJyR7ZXZlbnROYW1lfScgbG9nZ2VkIGF0ICR7dHN9ICgke2xvZ1RpbWV9KWApO1xuICB9XG5cbiAgLypcbiAgICogT3ZlcnJpZGRlbiBpbiBhcHBpdW0gZHJpdmVyLCBidXQgaGVyZSBzbyB0aGF0IGluZGl2aWR1YWwgZHJpdmVycyBjYW4gYmVcbiAgICogdGVzdGVkIHdpdGggY2xpZW50cyB0aGF0IHBvbGxcbiAgICovXG4gIGFzeW5jIGdldFN0YXR1cyAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIHdlIG9ubHkgd2FudCBzdWJjbGFzc2VzIHRvIGV2ZXIgZXh0ZW5kIHRoZSBjb250cmFpbnRzXG4gIHNldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgKGNvbnN0cmFpbnRzKSB7XG4gICAgdGhpcy5fY29uc3RyYWludHMgPSBPYmplY3QuYXNzaWduKHRoaXMuX2NvbnN0cmFpbnRzLCBjb25zdHJhaW50cyk7XG4gICAgLy8gJ3ByZXNlbmNlJyBtZWFucyBkaWZmZXJlbnQgdGhpbmdzIGluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgdmFsaWRhdG9yLFxuICAgIC8vIHdoZW4gd2Ugc2F5ICd0cnVlJyB3ZSBtZWFuIHRoYXQgaXQgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIGVtcHR5XG4gICAgZm9yIChjb25zdCBbLCB2YWx1ZV0gb2YgXy50b1BhaXJzKHRoaXMuX2NvbnN0cmFpbnRzKSkge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnByZXNlbmNlID09PSB0cnVlKSB7XG4gICAgICAgIHZhbHVlLnByZXNlbmNlID0ge1xuICAgICAgICAgIGFsbG93RW1wdHk6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25zdHJhaW50cztcbiAgfVxuXG4gIC8vIG1ldGhvZCByZXF1aXJlZCBieSBNSlNPTldQIGluIG9yZGVyIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IHNob3VsZFxuICAvLyByZXNwb25kIHdpdGggYW4gaW52YWxpZCBzZXNzaW9uIHJlc3BvbnNlXG4gIHNlc3Npb25FeGlzdHMgKHNlc3Npb25JZCkge1xuICAgIGlmICghc2Vzc2lvbklkKSByZXR1cm4gZmFsc2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICByZXR1cm4gc2Vzc2lvbklkID09PSB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8vIG1ldGhvZCByZXF1aXJlZCBieSBNSlNPTldQIGluIG9yZGVyIHRvIGRldGVybWluZSBpZiB0aGUgY29tbWFuZCBzaG91bGRcbiAgLy8gYmUgcHJveGllZCBkaXJlY3RseSB0byB0aGUgZHJpdmVyXG4gIGRyaXZlckZvclNlc3Npb24gKC8qc2Vzc2lvbklkKi8pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxvZ0V4dHJhQ2FwcyAoY2Fwcykge1xuICAgIGxldCBleHRyYUNhcHMgPSBfLmRpZmZlcmVuY2UoXy5rZXlzKGNhcHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5rZXlzKHRoaXMuX2NvbnN0cmFpbnRzKSk7XG4gICAgaWYgKGV4dHJhQ2Fwcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYFRoZSBmb2xsb3dpbmcgY2FwYWJpbGl0aWVzIHdlcmUgcHJvdmlkZWQsIGJ1dCBhcmUgbm90IGAgK1xuICAgICAgICAgICAgICAgYHJlY29nbml6ZWQgYnkgQXBwaXVtOmApO1xuICAgICAgZm9yIChjb25zdCBjYXAgb2YgZXh0cmFDYXBzKSB7XG4gICAgICAgIHRoaXMubG9nLndhcm4oYCAgJHtjYXB9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICAgIGlmICghdGhpcy5zaG91bGRWYWxpZGF0ZUNhcHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB2YWxpZGF0ZUNhcHMoY2FwcywgdGhpcy5fY29uc3RyYWludHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3cobmV3IGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yKGBUaGUgZGVzaXJlZENhcGFiaWxpdGllcyBvYmplY3Qgd2FzIG5vdCB2YWxpZCBmb3IgdGhlIGAgK1xuICAgICAgICBgZm9sbG93aW5nIHJlYXNvbihzKTogJHtlLm1lc3NhZ2V9YCkpO1xuICAgIH1cblxuICAgIHRoaXMubG9nRXh0cmFDYXBzKGNhcHMpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc01qc29ud3BQcm90b2NvbCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2wgPT09IFBST1RPQ09MUy5NSlNPTldQO1xuICB9XG5cbiAgaXNXM0NQcm90b2NvbCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0M7XG4gIH1cblxuICBzZXRQcm90b2NvbE1KU09OV1AgKCkge1xuICAgIHRoaXMucHJvdG9jb2wgPSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIHNldFByb3RvY29sVzNDICgpIHtcbiAgICB0aGlzLnByb3RvY29sID0gUFJPVE9DT0xTLlczQztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIHZpYSBpdHMgbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIG5hbWUgb2YgZmVhdHVyZS9jb21tYW5kXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cbiAgaXNGZWF0dXJlRW5hYmxlZCAobmFtZSkge1xuICAgIC8vIGlmIHdlIGhhdmUgZXhwbGljaXRseSBkZW5pZWQgdGhpcyBmZWF0dXJlLCByZXR1cm4gZmFsc2UgaW1tZWRpYXRlbHlcbiAgICBpZiAodGhpcy5kZW55SW5zZWN1cmUgJiYgXy5pbmNsdWRlcyh0aGlzLmRlbnlJbnNlY3VyZSwgbmFtZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBzcGVjaWZpY2FsbHkgaGF2ZSBhbGxvd2VkIHRoZSBmZWF0dXJlLCByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzLmFsbG93SW5zZWN1cmUgJiYgXy5pbmNsdWRlcyh0aGlzLmFsbG93SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UsIGlmIHdlJ3ZlIGdsb2JhbGx5IGFsbG93ZWQgaW5zZWN1cmUgZmVhdHVyZXMgYW5kIG5vdCBkZW5pZWRcbiAgICAvLyB0aGlzIG9uZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5yZWxheGVkU2VjdXJpdHlFbmFibGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlbid0IGFsbG93ZWQgYW55dGhpbmcgaW5zZWN1cmUsIHRoZW4gcmVqZWN0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VydCB0aGF0IGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIGFuZCB0aHJvdyBhIGhlbHBmdWwgZXJyb3IgaWYgaXQnc1xuICAgKiBub3RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAgKi9cbiAgZW5zdXJlRmVhdHVyZUVuYWJsZWQgKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMuaXNGZWF0dXJlRW5hYmxlZChuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQb3RlbnRpYWxseSBpbnNlY3VyZSBmZWF0dXJlICcke25hbWV9JyBoYXMgbm90IGJlZW4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYGVuYWJsZWQuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgYW5kIGFjY2VwdCBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgdGhlIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMsIHBsZWFzZSBkbyBzbyBieSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHRoZSBkb2N1bWVudGVkIGluc3RydWN0aW9ucyBhdCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtYCArXG4gICAgICAgICAgICAgICAgICAgICAgYC9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3NlY3VyaXR5Lm1kYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyBpcyB0aGUgbWFpbiBjb21tYW5kIGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIuIEl0IHdyYXBzIGNvbW1hbmRcbiAgLy8gZXhlY3V0aW9uIHdpdGggdGltZW91dCBsb2dpYywgY2hlY2tpbmcgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgc2Vzc2lvbixcbiAgLy8gYW5kIGVuc3VyaW5nIHRoYXQgd2UgZXhlY3V0ZSBjb21tYW5kcyBvbmUgYXQgYSB0aW1lLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWRcbiAgLy8gYnkgTUpTT05XUCdzIGV4cHJlc3Mgcm91dGVyLlxuICBhc3luYyBleGVjdXRlQ29tbWFuZCAoY21kLCAuLi5hcmdzKSB7XG4gICAgLy8gZ2V0IHN0YXJ0IHRpbWUgZm9yIHRoaXMgY29tbWFuZCwgYW5kIGxvZyBpbiBzcGVjaWFsIGNhc2VzXG4gICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoY21kID09PSAnY3JlYXRlU2Vzc2lvbicpIHtcbiAgICAgIC8vIElmIGNyZWF0aW5nIGEgc2Vzc2lvbiBkZXRlcm1pbmUgaWYgVzNDIG9yIE1KU09OV1AgcHJvdG9jb2wgd2FzIHJlcXVlc3RlZCBhbmQgcmVtZW1iZXIgdGhlIGNob2ljZVxuICAgICAgdGhpcy5wcm90b2NvbCA9IGRldGVybWluZVByb3RvY29sKGFyZ3MpO1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX0lOSVQpO1xuICAgIH0gZWxzZSBpZiAoY21kID09PSBERUxFVEVfU0VTU0lPTl9DT01NQU5EKSB7XG4gICAgICB0aGlzLmxvZ0V2ZW50KEVWRU5UX1NFU1NJT05fUVVJVF9TVEFSVCk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGFkIGEgY29tbWFuZCB0aW1lciBydW5uaW5nLCBjbGVhciBpdCBub3cgdGhhdCB3ZSdyZSBzdGFydGluZ1xuICAgIC8vIGEgbmV3IGNvbW1hbmQgYW5kIHNvIGRvbid0IHdhbnQgdG8gdGltZSBvdXRcbiAgICB0aGlzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKTtcblxuICAgIGlmICh0aGlzLnNodXRkb3duVW5leHBlY3RlZGx5KSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaERyaXZlckVycm9yKCdUaGUgZHJpdmVyIHdhcyB1bmV4cGVjdGVkbHkgc2h1dCBkb3duIScpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdGhpcyBjb21tYW5kLCBpdCBtdXN0IG5vdCBiZSBpbXBsZW1lbnRlZFxuICAgIGlmICghdGhpc1tjbWRdKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdFlldEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBsZXQgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXI7XG4gICAgY29uc3QgY29tbWFuZEV4ZWN1dG9yID0gYXN5bmMgKCkgPT4gYXdhaXQgQi5yYWNlKFtcbiAgICAgIHRoaXNbY21kXSguLi5hcmdzKSxcbiAgICAgIG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIgPSByZWplY3Q7XG4gICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLm9uKE9OX1VORVhQRUNURURfU0hVVERPV05fRVZFTlQsIHVuZXhwZWN0ZWRTaHV0ZG93bkxpc3RlbmVyKTtcbiAgICAgIH0pXG4gICAgXSkuZmluYWxseSgoKSA9PiB7XG4gICAgICBpZiAodW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudCBtZW1vcnkgbGVha3NcbiAgICAgICAgdGhpcy5ldmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgdW5leHBlY3RlZFNodXRkb3duTGlzdGVuZXIpO1xuICAgICAgICB1bmV4cGVjdGVkU2h1dGRvd25MaXN0ZW5lciA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVzID0gdGhpcy5pc0NvbW1hbmRzUXVldWVFbmFibGVkXG4gICAgICA/IGF3YWl0IHRoaXMuY29tbWFuZHNRdWV1ZUd1YXJkLmFjcXVpcmUoQmFzZURyaXZlci5uYW1lLCBjb21tYW5kRXhlY3V0b3IpXG4gICAgICA6IGF3YWl0IGNvbW1hbmRFeGVjdXRvcigpO1xuXG4gICAgLy8gaWYgd2UgaGF2ZSBzZXQgYSBuZXcgY29tbWFuZCB0aW1lb3V0ICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIHN0YXJ0IGFcbiAgICAvLyB0aW1lciBvbmNlIHdlJ3ZlIGZpbmlzaGVkIGV4ZWN1dGluZyB0aGlzIGNvbW1hbmQuIElmIHdlIGRvbid0IGNsZWFyXG4gICAgLy8gdGhlIHRpbWVyICh3aGljaCBpcyBkb25lIHdoZW4gYSBuZXcgY29tbWFuZCBjb21lcyBpbiksIHdlIHdpbGwgdHJpZ2dlclxuICAgIC8vIGF1dG9tYXRpYyBzZXNzaW9uIGRlbGV0aW9uIGluIHRoaXMub25Db21tYW5kVGltZW91dC4gT2YgY291cnNlIHdlIGRvbid0XG4gICAgLy8gd2FudCB0byB0cmlnZ2VyIHRoZSB0aW1lciB3aGVuIHRoZSB1c2VyIGlzIHNodXR0aW5nIGRvd24gdGhlIHNlc3Npb25cbiAgICAvLyBpbnRlbnRpb25hbGx5XG4gICAgaWYgKHRoaXMuaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCAmJiBjbWQgIT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQpIHtcbiAgICAgIC8vIHJlc2V0dGluZyBleGlzdGluZyB0aW1lb3V0XG4gICAgICB0aGlzLnN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICAvLyBsb2cgdGltaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgY29tbWFuZFxuICAgIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX2V2ZW50SGlzdG9yeS5jb21tYW5kcy5wdXNoKHtjbWQsIHN0YXJ0VGltZSwgZW5kVGltZX0pO1xuICAgIGlmIChjbWQgPT09ICdjcmVhdGVTZXNzaW9uJykge1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX1NUQVJUKTtcbiAgICB9IGVsc2UgaWYgKGNtZCA9PT0gREVMRVRFX1NFU1NJT05fQ09NTUFORCkge1xuICAgICAgdGhpcy5sb2dFdmVudChFVkVOVF9TRVNTSU9OX1FVSVRfRE9ORSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VW5leHBlY3RlZFNodXRkb3duIChlcnIgPSBuZXcgZXJyb3JzLk5vU3VjaERyaXZlckVycm9yKCdUaGUgZHJpdmVyIHdhcyB1bmV4cGVjdGVkbHkgc2h1dCBkb3duIScpKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdChPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5ULCBlcnIpOyAvLyBhbGxvdyBvdGhlcnMgdG8gbGlzdGVuIGZvciB0aGlzXG4gICAgdGhpcy5zaHV0ZG93blVuZXhwZWN0ZWRseSA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbih0aGlzLnNlc3Npb25JZCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuc2h1dGRvd25VbmV4cGVjdGVkbHkgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSAoc3RyYXRlZ3ksIHdlYkNvbnRleHQgPSBmYWxzZSkge1xuICAgIGxldCB2YWxpZFN0cmF0ZWdpZXMgPSB0aGlzLmxvY2F0b3JTdHJhdGVnaWVzO1xuICAgIHRoaXMubG9nLmRlYnVnKGBWYWxpZCBsb2NhdG9yIHN0cmF0ZWdpZXMgZm9yIHRoaXMgcmVxdWVzdDogJHt2YWxpZFN0cmF0ZWdpZXMuam9pbignLCAnKX1gKTtcblxuICAgIGlmICh3ZWJDb250ZXh0KSB7XG4gICAgICB2YWxpZFN0cmF0ZWdpZXMgPSB2YWxpZFN0cmF0ZWdpZXMuY29uY2F0KHRoaXMud2ViTG9jYXRvclN0cmF0ZWdpZXMpO1xuICAgIH1cblxuICAgIGlmICghXy5pbmNsdWRlcyh2YWxpZFN0cmF0ZWdpZXMsIHN0cmF0ZWd5KSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkU2VsZWN0b3JFcnJvcihgTG9jYXRvciBTdHJhdGVneSAnJHtzdHJhdGVneX0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgc2Vzc2lvbmApO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIFJlc3RhcnQgdGhlIHNlc3Npb24gd2l0aCB0aGUgb3JpZ2luYWwgY2FwcyxcbiAgICogcHJlc2VydmluZyB0aGUgdGltZW91dCBjb25maWcuXG4gICAqL1xuICBhc3luYyByZXNldCAoKSB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1Jlc2V0dGluZyBhcHAgbWlkLXNlc3Npb24nKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnUnVubmluZyBnZW5lcmljIGZ1bGwgcmVzZXQnKTtcblxuICAgIC8vIHByZXNlcnZpbmcgc3RhdGVcbiAgICBsZXQgY3VycmVudENvbmZpZyA9IHt9O1xuICAgIGZvciAobGV0IHByb3BlcnR5IG9mIFsnaW1wbGljaXRXYWl0TXMnLCAnbmV3Q29tbWFuZFRpbWVvdXRNcycsICdzZXNzaW9uSWQnLCAncmVzZXRPblVuZXhwZWN0ZWRTaHV0ZG93biddKSB7XG4gICAgICBjdXJyZW50Q29uZmlnW3Byb3BlcnR5XSA9IHRoaXNbcHJvcGVydHldO1xuICAgIH1cblxuICAgIC8vIFdlIGFsc28gbmVlZCB0byBwcmVzZXJ2ZSB0aGUgdW5leHBlY3RlZCBzaHV0ZG93biwgYW5kIG1ha2Ugc3VyZSBpdCBpcyBub3QgY2FuY2VsbGVkIGR1cmluZyByZXNldC5cbiAgICB0aGlzLnJlc2V0T25VbmV4cGVjdGVkU2h1dGRvd24gPSAoKSA9PiB7fTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24odGhpcy5zZXNzaW9uSWQpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1Jlc3RhcnRpbmcgYXBwJyk7XG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZVNlc3Npb24odW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMub3JpZ2luYWxDYXBzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gYWx3YXlzIHJlc3RvcmUgc3RhdGUuXG4gICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGN1cnJlbnRDb25maWcpKSB7XG4gICAgICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsZWFyTmV3Q29tbWFuZFRpbWVvdXQoKTtcbiAgfVxuXG4gIHByb3h5QWN0aXZlICgvKiBzZXNzaW9uSWQgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoLyogc2Vzc2lvbklkICovKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY2FuUHJveHkgKC8qIHNlc3Npb25JZCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgZ2l2ZW4gY29tbWFuZCByb3V0ZSAoZXhwcmVzc2VkIGFzIG1ldGhvZCBhbmQgdXJsKSBzaG91bGQgbm90IGJlXG4gICAqIHByb3hpZWQgYWNjb3JkaW5nIHRvIHRoaXMgZHJpdmVyXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWQgLSB0aGUgY3VycmVudCBzZXNzaW9uSWQgKGluIGNhc2UgdGhlIGRyaXZlciBydW5zXG4gICAqIG11bHRpcGxlIHNlc3Npb24gaWRzIGFuZCByZXF1aXJlcyBpdCkuIFRoaXMgaXMgbm90IHVzZWQgaW4gdGhpcyBtZXRob2QgYnV0XG4gICAqIHNob3VsZCBiZSBtYWRlIGF2YWlsYWJsZSB0byBvdmVycmlkZGVuIG1ldGhvZHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgLSBIVFRQIG1ldGhvZCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIHVybCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIHs/Kn0gYm9keSAtIHdlYmRyaXZlciByZXF1ZXN0IGJvZHlcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gd2hldGhlciB0aGUgcm91dGUgc2hvdWxkIGJlIGF2b2lkZWRcbiAgICovXG4gIHByb3h5Um91dGVJc0F2b2lkZWQgKHNlc3Npb25JZCwgbWV0aG9kLCB1cmwvKiwgYm9keSovKSB7XG4gICAgZm9yIChsZXQgYXZvaWRTY2hlbWEgb2YgdGhpcy5nZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShhdm9pZFNjaGVtYSkgfHwgYXZvaWRTY2hlbWEubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJveHkgYXZvaWRhbmNlIG11c3QgYmUgYSBsaXN0IG9mIHBhaXJzJyk7XG4gICAgICB9XG4gICAgICBsZXQgW2F2b2lkTWV0aG9kLCBhdm9pZFBhdGhSZWdleF0gPSBhdm9pZFNjaGVtYTtcbiAgICAgIGlmICghXy5pbmNsdWRlcyhbJ0dFVCcsICdQT1NUJywgJ0RFTEVURSddLCBhdm9pZE1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgcHJveHkgYXZvaWRhbmNlIG1ldGhvZCAnJHthdm9pZE1ldGhvZH0nYCk7XG4gICAgICB9XG4gICAgICBpZiAoIV8uaXNSZWdFeHAoYXZvaWRQYXRoUmVnZXgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUHJveHkgYXZvaWRhbmNlIHBhdGggbXVzdCBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbicpO1xuICAgICAgfVxuICAgICAgbGV0IG5vcm1hbGl6ZWRVcmwgPSB1cmwucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtfLmVzY2FwZVJlZ0V4cCh0aGlzLmJhc2VQYXRoKX1gKSwgJycpO1xuICAgICAgaWYgKGF2b2lkTWV0aG9kID09PSBtZXRob2QgJiYgYXZvaWRQYXRoUmVnZXgudGVzdChub3JtYWxpemVkVXJsKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYWRkTWFuYWdlZERyaXZlciAoZHJpdmVyKSB7XG4gICAgdGhpcy5tYW5hZ2VkRHJpdmVycy5wdXNoKGRyaXZlcik7XG4gIH1cblxuICBnZXRNYW5hZ2VkRHJpdmVycyAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFuYWdlZERyaXZlcnM7XG4gIH1cbn1cblxuZm9yIChsZXQgW2NtZCwgZm5dIG9mIF8udG9QYWlycyhjb21tYW5kcykpIHtcbiAgQmFzZURyaXZlci5wcm90b3R5cGVbY21kXSA9IGZuO1xufVxuXG5leHBvcnQgeyBCYXNlRHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBCYXNlRHJpdmVyO1xuIl19
|
|
@@ -528,7 +528,5 @@ function parseCapsArray(cap) {
|
|
|
528
528
|
}
|
|
529
529
|
|
|
530
530
|
throw new Error(`must provide a string or JSON Array; received ${cap}`);
|
|
531
|
-
}
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiSVBBX0VYVCIsIlpJUF9FWFRTIiwiWklQX01JTUVfVFlQRVMiLCJDQUNIRURfQVBQU19NQVhfQUdFIiwiTUFYX0NBQ0hFRF9BUFBTIiwiQVBQTElDQVRJT05TX0NBQ0hFIiwiTFJVIiwibWF4IiwidHRsIiwidXBkYXRlQWdlT25HZXQiLCJkaXNwb3NlIiwiYXBwIiwiZnVsbFBhdGgiLCJsb2dnZXIiLCJpbmZvIiwiZnMiLCJyaW1yYWYiLCJub0Rpc3Bvc2VPblNldCIsIkFQUExJQ0FUSU9OU19DQUNIRV9HVUFSRCIsIkFzeW5jTG9jayIsIlNBTklUSVpFX1JFUExBQ0VNRU5UIiwiREVGQVVMVF9CQVNFTkFNRSIsIkFQUF9ET1dOTE9BRF9USU1FT1VUX01TIiwicHJvY2VzcyIsIm9uIiwic2l6ZSIsImFwcFBhdGhzIiwidmFsdWVzIiwibWFwIiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiYXBwUGF0aCIsInJpbXJhZlN5bmMiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJyZXRyaWV2ZUhlYWRlcnMiLCJsaW5rIiwidXJsIiwibWV0aG9kIiwidGltZW91dCIsImhlYWRlcnMiLCJnZXRDYWNoZWRBcHBsaWNhdGlvblBhdGgiLCJjdXJyZW50QXBwUHJvcHMiLCJjYWNoZWRBcHBJbmZvIiwicmVmcmVzaCIsIl8iLCJpc1BsYWluT2JqZWN0IiwibGFzdE1vZGlmaWVkIiwiY3VycmVudE1vZGlmaWVkIiwiaW1tdXRhYmxlIiwiY3VycmVudEltbXV0YWJsZSIsIm1heEFnZSIsImN1cnJlbnRNYXhBZ2UiLCJ0aW1lc3RhbXAiLCJnZXRUaW1lIiwibXNMZWZ0IiwiRGF0ZSIsIm5vdyIsInBhdGgiLCJiYXNlbmFtZSIsInZlcmlmeUFwcEV4dGVuc2lvbiIsInN1cHBvcnRlZEFwcEV4dGVuc2lvbnMiLCJ0b0xvd2VyIiwiaW5jbHVkZXMiLCJleHRuYW1lIiwiRXJyb3IiLCJjYWxjdWxhdGVGb2xkZXJJbnRlZ3JpdHkiLCJmb2xkZXJQYXRoIiwiZ2xvYiIsImN3ZCIsInN0cmljdCIsIm5vc29ydCIsImNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkiLCJmaWxlUGF0aCIsImhhc2giLCJpc0FwcEludGVncml0eU9rIiwiY3VycmVudFBhdGgiLCJleHBlY3RlZEludGVncml0eSIsImV4aXN0cyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImZvbGRlciIsImZpbGUiLCJjb25maWd1cmVBcHAiLCJvcHRpb25zIiwiaXNTdHJpbmciLCJvblBvc3RQcm9jZXNzIiwiaXNBcnJheSIsInN1cHBvcnRlZEV4dGVuc2lvbnMiLCJpc0VtcHR5IiwibmV3QXBwIiwic2hvdWxkVW56aXBBcHAiLCJwYWNrYWdlSGFzaCIsInJlbW90ZUFwcFByb3BzIiwicHJvdG9jb2wiLCJwYXRobmFtZSIsInBhcnNlIiwiaXNVcmwiLCJnZXQiLCJhY3F1aXJlIiwidGVzdCIsIm1heEFnZU1hdGNoIiwiZXhlYyIsInBhcnNlSW50IiwiY2FjaGVkUGF0aCIsImludGVncml0eSIsImRlbCIsImZpbGVOYW1lIiwic2FuaXRpemVOYW1lIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZW1lbnQiLCJjdCIsInNvbWUiLCJtaW1lVHlwZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsIm1hdGNoIiwicmVzdWx0aW5nTmFtZSIsInN1YnN0cmluZyIsInJlc3VsdGluZ0V4dCIsImZpcnN0IiwidGFyZ2V0UGF0aCIsInRlbXBEaXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJkb3dubG9hZEFwcCIsImVycm9yTWVzc2FnZSIsImlzUGFja2FnZUFGaWxlIiwiaXNGaWxlIiwiaXNGdW5jdGlvbiIsImFyY2hpdmVQYXRoIiwidG1wUm9vdCIsIm9wZW5EaXIiLCJ1bnppcEFwcCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwic3RvcmVBcHBJbkNhY2hlIiwiYXBwUGF0aFRvQ2FjaGUiLCJjYWNoZWRGdWxsUGF0aCIsInNldCIsInJlc3VsdCIsImNsb25lIiwiQm9vbGVhbiIsImhyZWYiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJlcnIiLCJ6aXBQYXRoIiwiZHN0Um9vdCIsInppcCIsImFzc2VydFZhbGlkWmlwIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidXNlU3lzdGVtVW56aXBFbnYiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwiZXh0cmFjdGlvbk9wdHMiLCJmaWxlTmFtZXNFbmNvZGluZyIsImV4dHJhY3RBbGxUbyIsImdsb2JQYXR0ZXJuIiwiZXh0IiwicmVwbGFjZSIsImpvaW4iLCJzb3J0ZWRCdW5kbGVJdGVtcyIsInNvcnQiLCJhIiwiYiIsInNwbGl0Iiwic2VwIiwiZXJyb3JBbmRUaHJvdyIsIk1hdGgiLCJyb3VuZCIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJtYXRjaGVkQnVuZGxlIiwiZHN0UGF0aCIsIm12IiwibWtkaXJwIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJkdXBsaWNhdGVLZXlzIiwiaW5wdXQiLCJmaXJzdEtleSIsInNlY29uZEtleSIsIml0ZW0iLCJyZXN1bHRPYmoiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJyZWN1cnNpdmVseUNhbGxlZFZhbHVlIiwicGFyc2VDYXBzQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwiSlNPTiIsImlnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxPQUFPLEdBQUcsTUFBaEI7QUFDQSxNQUFNQyxRQUFRLEdBQUcsQ0FBQyxNQUFELEVBQVNELE9BQVQsQ0FBakI7QUFDQSxNQUFNRSxjQUFjLEdBQUcsQ0FDckIsaUJBRHFCLEVBRXJCLDhCQUZxQixFQUdyQixpQkFIcUIsQ0FBdkI7QUFLQSxNQUFNQyxtQkFBbUIsR0FBRyxPQUFPLEVBQVAsR0FBWSxFQUFaLEdBQWlCLEVBQTdDO0FBQ0EsTUFBTUMsZUFB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OztBQVFELFNBQVNTLGNBQVQsQ0FBeUJDLEdBQXpCLEVBQThCO0FBQzVCLE1BQUlwSixnQkFBRTBDLE9BQUYsQ0FBVTBHLEdBQVYsQ0FBSixFQUFvQjtBQUNsQixXQUFPQSxHQUFQO0FBQ0Q7O0FBRUQsTUFBSUMsVUFBSjs7QUFDQSxNQUFJO0FBQ0ZBLElBQUFBLFVBQVUsR0FBR0MsSUFBSSxDQUFDbkcsS0FBTCxDQUFXaUcsR0FBWCxDQUFiOztBQUNBLFFBQUlwSixnQkFBRTBDLE9BQUYsQ0FBVTJHLFVBQVYsQ0FBSixFQUEyQjtBQUN6QixhQUFPQSxVQUFQO0FBQ0Q7QUFDRixHQUxELENBS0UsT0FBT0UsR0FBUCxFQUFZO0FBQ1oxTCxvQkFBT3VCLElBQVAsQ0FBYSwwQ0FBYjtBQUNEOztBQUNELE1BQUlZLGdCQUFFd0MsUUFBRixDQUFXNEcsR0FBWCxDQUFKLEVBQXFCO0FBQ25CLFdBQU8sQ0FBQ0EsR0FBRCxDQUFQO0FBQ0Q7O0FBQ0QsUUFBTSxJQUFJaEksS0FBSixDQUFXLGlEQUFnRGdJLEdBQUksRUFBL0QsQ0FBTjtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyB0ZW1wRGlyLCBmcywgdXRpbCwgemlwLCBuZXQsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuY29uc3QgSVBBX0VYVCA9ICcuaXBhJztcbmNvbnN0IFpJUF9FWFRTID0gWycuemlwJywgSVBBX0VYVF07XG5jb25zdCBaSVBfTUlNRV9UWVBFUyA9IFtcbiAgJ2FwcGxpY2F0aW9uL3ppcCcsXG4gICdhcHBsaWNhdGlvbi94LXppcC1jb21wcmVzc2VkJyxcbiAgJ211bHRpcGFydC94LXppcCcsXG5dO1xuY29uc3QgQ0FDSEVEX0FQUFNfTUFYX0FHRSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7IC8vIG1zXG5jb25zdCBNQVhfQ0FDSEVEX0FQUFMgPSAxMDI0O1xuY29uc3QgQVBQTElDQVRJT05TX0NBQ0hFID0gbmV3IExSVSh7XG4gIG1heDogTUFYX0NBQ0hFRF9BUFBTLFxuICB0dGw6IENBQ0hFRF9BUFBTX01BWF9BR0UsIC8vIGV4cGlyZSBhZnRlciAyNCBob3Vyc1xuICB1cGRhdGVBZ2VPbkdldDogdHJ1ZSxcbiAgZGlzcG9zZTogKGFwcCwge2Z1bGxQYXRofSkgPT4ge1xuICAgIGxvZ2dlci5pbmZvKGBUaGUgYXBwbGljYXRpb24gJyR7YXBwfScgY2FjaGVkIGF0ICcke2Z1bGxQYXRofScgaGFzIGAgK1xuICAgICAgYGV4cGlyZWQgYWZ0ZXIgJHtDQUNIRURfQVBQU19NQVhfQUdFfW1zYCk7XG4gICAgaWYgKGZ1bGxQYXRoKSB7XG4gICAgICBmcy5yaW1yYWYoZnVsbFBhdGgpO1xuICAgIH1cbiAgfSxcbiAgbm9EaXNwb3NlT25TZXQ6IHRydWUsXG59KTtcbmNvbnN0IEFQUExJQ0FUSU9OU19DQUNIRV9HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFNBTklUSVpFX1JFUExBQ0VNRU5UID0gJy0nO1xuY29uc3QgREVGQVVMVF9CQVNFTkFNRSA9ICdhcHBpdW0tYXBwJztcbmNvbnN0IEFQUF9ET1dOTE9BRF9USU1FT1VUX01TID0gMTIwICogMTAwMDtcblxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHtcbiAgaWYgKEFQUExJQ0FUSU9OU19DQUNIRS5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYXBwUGF0aHMgPSBbLi4uQVBQTElDQVRJT05TX0NBQ0hFLnZhbHVlcygpXVxuICAgIC5tYXAoKHtmdWxsUGF0aH0pID0+IGZ1bGxQYXRoKTtcbiAgbG9nZ2VyLmRlYnVnKGBQZXJmb3JtaW5nIGNsZWFudXAgb2YgJHthcHBQYXRocy5sZW5ndGh9IGNhY2hlZCBgICtcbiAgICB1dGlsLnBsdXJhbGl6ZSgnYXBwbGljYXRpb24nLCBhcHBQYXRocy5sZW5ndGgpKTtcbiAgZm9yIChjb25zdCBhcHBQYXRoIG9mIGFwcFBhdGhzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFzeW5jaHJvbm91cyBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBpbiBvbkV4aXQgaGFuZGxlclxuICAgICAgZnMucmltcmFmU3luYyhhcHBQYXRoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIud2FybihlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufSk7XG5cblxuYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVIZWFkZXJzIChsaW5rKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgICB1cmw6IGxpbmssXG4gICAgICBtZXRob2Q6ICdIRUFEJyxcbiAgICAgIHRpbWVvdXQ6IDUwMDAsXG4gICAgfSkpLmhlYWRlcnM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuaW5mbyhgQ2Fubm90IHNlbmQgSEVBRCByZXF1ZXN0IHRvICcke2xpbmt9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FjaGVkQXBwbGljYXRpb25QYXRoIChsaW5rLCBjdXJyZW50QXBwUHJvcHMgPSB7fSwgY2FjaGVkQXBwSW5mbyA9IHt9KSB7XG4gIGNvbnN0IHJlZnJlc2ggPSAoKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBBIGZyZXNoIGNvcHkgb2YgdGhlIGFwcGxpY2F0aW9uIGlzIGdvaW5nIHRvIGJlIGRvd25sb2FkZWQgZnJvbSAke2xpbmt9YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FjaGVkQXBwSW5mbykgfHwgIV8uaXNQbGFpbk9iamVjdChjdXJyZW50QXBwUHJvcHMpKSB7XG4gICAgLy8gaWYgYW4gaW52YWxpZCBhcmcgaXMgcGFzc2VkIHRoZW4gYXNzdW1lIGNhY2hlIG1pc3NcbiAgICByZXR1cm4gcmVmcmVzaCgpO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxhc3RNb2RpZmllZDogY3VycmVudE1vZGlmaWVkLFxuICAgIGltbXV0YWJsZTogY3VycmVudEltbXV0YWJsZSxcbiAgICAvLyBtYXhBZ2UgaXMgaW4gc2Vjb25kc1xuICAgIG1heEFnZTogY3VycmVudE1heEFnZSxcbiAgfSA9IGN1cnJlbnRBcHBQcm9wcztcbiAgY29uc3Qge1xuICAgIC8vIERhdGUgaW5zdGFuY2VcbiAgICBsYXN0TW9kaWZpZWQsXG4gICAgLy8gYm9vbGVhblxuICAgIGltbXV0YWJsZSxcbiAgICAvLyBVbml4IHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gICAgdGltZXN0YW1wLFxuICAgIGZ1bGxQYXRoLFxuICB9ID0gY2FjaGVkQXBwSW5mbztcbiAgaWYgKGxhc3RNb2RpZmllZCAmJiBjdXJyZW50TW9kaWZpZWQpIHtcbiAgICBpZiAoY3VycmVudE1vZGlmaWVkLmdldFRpbWUoKSA8PSBsYXN0TW9kaWZpZWQuZ2V0VGltZSgpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFRoZSBhcHBsaWNhdGlvbiBhdCAke2xpbmt9IGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSAke2xhc3RNb2RpZmllZH1gKTtcbiAgICAgIHJldHVybiBmdWxsUGF0aDtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBUaGUgYXBwbGljYXRpb24gYXQgJHtsaW5rfSBoYXMgYmVlbiBtb2RpZmllZCBzaW5jZSAke2xhc3RNb2RpZmllZH1gKTtcbiAgICByZXR1cm4gcmVmcmVzaCgpO1xuICB9XG4gIGlmIChpbW11dGFibGUgJiYgY3VycmVudEltbXV0YWJsZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgVGhlIGFwcGxpY2F0aW9uIGF0ICR7bGlua30gaXMgaW1tdXRhYmxlYCk7XG4gICAgcmV0dXJuIGZ1bGxQYXRoO1xuICB9XG4gIGlmIChjdXJyZW50TWF4QWdlICYmIHRpbWVzdGFtcCkge1xuICAgIGNvbnN0IG1zTGVmdCA9IHRpbWVzdGFtcCArIGN1cnJlbnRNYXhBZ2UgKiAxMDAwIC0gRGF0ZS5ub3coKTtcbiAgICBpZiAobXNMZWZ0ID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBUaGUgY2FjaGVkIGFwcGxpY2F0aW9uICcke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfScgd2lsbCBleHBpcmUgaW4gJHttc0xlZnQgLyAxMDAwfXNgKTtcbiAgICAgIHJldHVybiBmdWxsUGF0aDtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBUaGUgY2FjaGVkIGFwcGxpY2F0aW9uICcke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfScgaGFzIGV4cGlyZWRgKTtcbiAgfVxuICByZXR1cm4gcmVmcmVzaCgpO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlBcHBFeHRlbnNpb24gKGFwcCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucykge1xuICBpZiAoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucy5tYXAoXy50b0xvd2VyKS5pbmNsdWRlcyhfLnRvTG93ZXIocGF0aC5leHRuYW1lKGFwcCkpKSkge1xuICAgIHJldHVybiBhcHA7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBOZXcgYXBwIHBhdGggJyR7YXBwfScgZGlkIG5vdCBoYXZlIGAgK1xuICAgIGAke3V0aWwucGx1cmFsaXplKCdleHRlbnNpb24nLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLmxlbmd0aCwgZmFsc2UpfTogYCArXG4gICAgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGN1bGF0ZUZvbGRlckludGVncml0eSAoZm9sZGVyUGF0aCkge1xuICByZXR1cm4gKGF3YWl0IGZzLmdsb2IoJyoqLyonLCB7Y3dkOiBmb2xkZXJQYXRoLCBzdHJpY3Q6IGZhbHNlLCBub3NvcnQ6IHRydWV9KSkubGVuZ3RoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVGaWxlSW50ZWdyaXR5IChmaWxlUGF0aCkge1xuICByZXR1cm4gYXdhaXQgZnMuaGFzaChmaWxlUGF0aCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzQXBwSW50ZWdyaXR5T2sgKGN1cnJlbnRQYXRoLCBleHBlY3RlZEludGVncml0eSA9IHt9KSB7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGN1cnJlbnRQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEZvbGRlciBpbnRlZ3JpdHkgY2hlY2sgaXMgc2ltcGxlOlxuICAvLyBWZXJpZnkgdGhlIHByZXZpb3VzIGFtb3VudCBvZiBmaWxlcyBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZS5cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byB1c2UgZXF1YWxpdHkgY29tcGFyaXNvbiBiZWNhdXNlIG9mIGFuIGFzc3VtcHRpb24gdGhhdCB0aGUgT1MgbWlnaHRcbiAgLy8gY3JlYXRlIHNvbWUgdW53YW50ZWQgc2VydmljZSBmaWxlcy9jYWNoZWQgaW5zaWRlIG9mIHRoYXQgZm9sZGVyIG9yIGl0cyBzdWJmb2xkZXJzLlxuICAvLyBPZmMsIHZhbGlkYXRpbmcgdGhlIGhhc2ggc3VtIG9mIGVhY2ggZmlsZSAob3IgYXQgbGVhc3Qgb2YgZmlsZSBwYXRoKSB3b3VsZCBiZSBtdWNoXG4gIC8vIG1vcmUgcHJlY2lzZSwgYnV0IHdlIGRvbid0IG5lZWQgdG8gYmUgdmVyeSBwcmVjaXNlIGhlcmUgYW5kIGFsc28gZG9uJ3Qgd2FudCB0b1xuICAvLyBvdmVydXNlIFJBTSBhbmQgaGF2ZSBhIHBlcmZvcm1hbmNlIGRyb3AuXG4gIHJldHVybiAoYXdhaXQgZnMuc3RhdChjdXJyZW50UGF0aCkpLmlzRGlyZWN0b3J5KClcbiAgICA/IGF3YWl0IGNhbGN1bGF0ZUZvbGRlckludGVncml0eShjdXJyZW50UGF0aCkgPj0gZXhwZWN0ZWRJbnRlZ3JpdHk/LmZvbGRlclxuICAgIDogYXdhaXQgY2FsY3VsYXRlRmlsZUludGVncml0eShjdXJyZW50UGF0aCkgPT09IGV4cGVjdGVkSW50ZWdyaXR5Py5maWxlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIFBvc3RQcm9jZXNzT3B0aW9uc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fSBjYWNoZWRBcHBJbmZvIFRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJldmlvdXNseSBjYWNoZWQgYXBwIGluc3RhbmNlIChpZiBleGlzdHMpOlxuICogICAgLSBwYWNrYWdlSGFzaDogU0hBMSBoYXNoIG9mIHRoZSBwYWNrYWdlIGlmIGl0IGlzIGEgZmlsZSBhbmQgbm90IGEgZm9sZGVyXG4gKiAgICAtIGxhc3RNb2RpZmllZDogT3B0aW9uYWwgRGF0ZSBpbnN0YW5jZSwgdGhlIHZhbHVlIG9mIGZpbGUncyBgTGFzdC1Nb2RpZmllZGAgaGVhZGVyXG4gKiAgICAtIGltbXV0YWJsZTogT3B0aW9uYWwgYm9vbGVhbiB2YWx1ZS4gQ29udGFpbnMgdHJ1ZSBpZiB0aGUgZmlsZSBoYXMgYW4gYGltbXV0YWJsZWAgbWFya1xuICogICAgICAgICAgICAgICAgIGluIGBDYWNoZS1jb250cm9sYCBoZWFkZXJcbiAqICAgIC0gbWF4QWdlOiBPcHRpb25hbCBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGBtYXhBZ2VgIHBhcmFtZXRlciBpbiBgQ2FjaGUtY29udHJvbGAgaGVhZGVyXG4gKiAgICAtIHRpbWVzdGFtcDogVGhlIHRpbWVzdGFtcCB0aGlzIGl0ZW0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGNhY2hlIChtZWFzdXJlZCBpbiBVbml4IGVwb2NoXG4gKiAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzKVxuICogICAgLSBpbnRlZ3JpdHk6IEFuIG9iamVjdCBjb250YWluaW5nIGVpdGhlciBgZmlsZWAgcHJvcGVydHkgd2l0aCBTSEExIGhhc2ggb2YgdGhlIGZpbGVcbiAqICAgICAgICAgICAgICAgICBvciBgZm9sZGVyYCBwcm9wZXJ0eSB3aXRoIHRvdGFsIGFtb3VudCBvZiBjYWNoZWQgZmlsZXMgYW5kIHN1YmZvbGRlcnNcbiAqICAgIC0gZnVsbFBhdGg6IHRoZSBmdWxsIHBhdGggdG8gdGhlIGNhY2hlZCBhcHBcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNVcmwgV2hldGhlciB0aGUgYXBwIGhhcyBiZWVuIGRvd25sb2FkZWQgZnJvbSBhIHJlbW90ZSBVUkxcbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaGVhZGVycyBPcHRpb25hbCBoZWFkZXJzIG9iamVjdC4gT25seSBwcmVzZW50IGlmIGBpc1VybGAgaXMgdHJ1ZSBhbmQgaWYgdGhlIHNlcnZlclxuICogcmVzcG9uZHMgdG8gSEVBRCByZXF1ZXN0cy4gQWxsIGhlYWRlciBuYW1lcyBhcmUgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUGF0aCBBIHN0cmluZyBjb250YWluaW5nIGZ1bGwgcGF0aCB0byB0aGUgcHJlcHJvY2Vzc2VkIGFwcGxpY2F0aW9uIHBhY2thZ2UgKGVpdGhlclxuICogZG93bmxvYWRlZCBvciBhIGxvY2FsIG9uZSlcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBvc3RQcm9jZXNzUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUGF0aCBUaGUgZnVsbCBwYXN0IHRvIHRoZSBwb3N0LXByb2Nlc3NlZCBhcHBsaWNhdGlvbiBwYWNrYWdlIG9uIHRoZVxuICogbG9jYWwgZmlsZSBzeXN0ZW0gKG1pZ2h0IGJlIGEgZmlsZSBvciBhIGZvbGRlciBwYXRoKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgQ29uZmlndXJlQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHsob2JqOiBQb3N0UHJvY2Vzc09wdGlvbnMpID0+IChQcm9taXNlPFBvc3RQcm9jZXNzUmVzdWx0fHVuZGVmaW5lZD58UG9zdFByb2Nlc3NSZXN1bHR8dW5kZWZpbmVkKX0gb25Qb3N0UHJvY2Vzc1xuICogT3B0aW9uYWwgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBiZSBhcHBsaWVkXG4gKiB0byB0aGUgYXBwbGljYXRpb24gYWZ0ZXIgaXQgaXMgZG93bmxvYWRlZC9wcmVwcm9jZXNzZWQuIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGFzeW5jXG4gKiBhbmQgaXMgZXhwZWN0ZWQgdG8gYWNjZXB0IHNpbmdsZSBvYmplY3QgcGFyYW1ldGVyLlxuICogVGhlIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIGVpdGhlciByZXR1cm4gYSBmYWxzeSB2YWx1ZSwgd2hpY2ggbWVhbnMgdGhlIGFwcCBtdXN0IG5vdCBiZVxuICogY2FjaGVkIGFuZCBhIGZyZXNoIGNvcHkgb2YgaXQgaXMgZG93bmxvYWRlZCBlYWNoIHRpbWUuIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3RcbiAqIGNvbnRhaW5pbmcgYGFwcFBhdGhgIHByb3BlcnR5IHRoZW4gdGhlIGludGVncml0eSBvZiBpdCB3aWxsIGJlIHZlcmlmaWVkIGFuZCBzdG9yZWQgaW50b1xuICogdGhlIGNhY2hlLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gc3VwcG9ydGVkRXh0ZW5zaW9ucyBMaXN0IG9mIHN1cHBvcnRlZCBhcHBsaWNhdGlvbiBleHRlbnNpb25zIChcbiAqIGluY2x1ZGluZyBzdGFydGluZyBkb3RzKS4gVGhpcyBwcm9wZXJ0eSBpcyBtYW5kYXRvcnkgYW5kIG11c3Qgbm90IGJlIGVtcHR5LlxuICovXG5cbi8qKlxuICogUHJlcGFyZXMgYW4gYXBwIHRvIGJlIHVzZWQgaW4gYW4gYXV0b21hdGVkIHRlc3QuIFRoZSBhcHAgZ2V0cyBjYWNoZWQgYXV0b21hdGljYWxseVxuICogaWYgaXQgaXMgYW4gYXJjaGl2ZSBvciBpZiBpdCBpcyBkb3dubG9hZGVkIGZyb20gYW4gVVJMLlxuICogSWYgdGhlIGRvd25sb2FkZWQgYXBwIGhhcyBgLnppcGAgZXh0ZW5zaW9uLCB0aGlzIG1ldGhvZCB3aWxsIHVuemlwIGl0LlxuICogVGhlIHVuemlwIGRvZXMgbm90IHdvcmsgd2hlbiBgb25Qb3N0UHJvY2Vzc2AgaXMgcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcCBFaXRoZXIgYSBmdWxsIHBhdGggdG8gdGhlIGFwcCBvciBhIHJlbW90ZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfENvbmZpZ3VyZUFwcE9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlc3VsdGluZyBhcHBsaWNhdGlvbiBidW5kbGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlndXJlQXBwIChhcHAsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAoIV8uaXNTdHJpbmcoYXBwKSkge1xuICAgIC8vIGltbWVkaWF0ZWx5IHNob3J0Y2lyY3VpdCBpZiBub3QgZ2l2ZW4gYW4gYXBwXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHN1cHBvcnRlZEFwcEV4dGVuc2lvbnM7XG4gIGNvbnN0IHtcbiAgICBvblBvc3RQcm9jZXNzLFxuICB9ID0gXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMpID8gb3B0aW9ucyA6IHt9O1xuICBpZiAoXy5pc1N0cmluZyhvcHRpb25zKSkge1xuICAgIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMgPSBbb3B0aW9uc107XG4gIH0gZWxzZSBpZiAoXy5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyA9IG9wdGlvbnM7XG4gIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyA9IG9wdGlvbnMuc3VwcG9ydGVkRXh0ZW5zaW9ucztcbiAgfVxuICBpZiAoXy5pc0VtcHR5KHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBPbmUgb3IgbW9yZSBzdXBwb3J0ZWQgYXBwIGV4dGVuc2lvbnMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG5cbiAgbGV0IG5ld0FwcCA9IGFwcDtcbiAgbGV0IHNob3VsZFVuemlwQXBwID0gZmFsc2U7XG4gIGxldCBwYWNrYWdlSGFzaCA9IG51bGw7XG4gIGxldCBoZWFkZXJzID0gbnVsbDtcbiAgY29uc3QgcmVtb3RlQXBwUHJvcHMgPSB7XG4gICAgbGFzdE1vZGlmaWVkOiBudWxsLFxuICAgIGltbXV0YWJsZTogZmFsc2UsXG4gICAgbWF4QWdlOiBudWxsLFxuICB9O1xuICBjb25zdCB7cHJvdG9jb2wsIHBhdGhuYW1lfSA9IHVybC5wYXJzZShuZXdBcHApO1xuICBjb25zdCBpc1VybCA9IFsnaHR0cDonLCAnaHR0cHM6J10uaW5jbHVkZXMocHJvdG9jb2wpO1xuXG4gIGNvbnN0IGNhY2hlZEFwcEluZm8gPSBBUFBMSUNBVElPTlNfQ0FDSEUuZ2V0KGFwcCk7XG5cbiAgcmV0dXJuIGF3YWl0IEFQUExJQ0FUSU9OU19DQUNIRV9HVUFSRC5hY3F1aXJlKGFwcCwgYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc1VybCkge1xuICAgICAgLy8gVXNlIHRoZSBhcHAgZnJvbSByZW1vdGUgVVJMXG4gICAgICBsb2dnZXIuaW5mbyhgVXNpbmcgZG93bmxvYWRhYmxlIGFwcCAnJHtuZXdBcHB9J2ApO1xuICAgICAgaGVhZGVycyA9IGF3YWl0IHJldHJpZXZlSGVhZGVycyhuZXdBcHApO1xuICAgICAgaWYgKCFfLmlzRW1wdHkoaGVhZGVycykpIHtcbiAgICAgICAgaWYgKGhlYWRlcnNbJ2xhc3QtbW9kaWZpZWQnXSkge1xuICAgICAgICAgIHJlbW90ZUFwcFByb3BzLmxhc3RNb2RpZmllZCA9IG5ldyBEYXRlKGhlYWRlcnNbJ2xhc3QtbW9kaWZpZWQnXSk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBMYXN0LU1vZGlmaWVkOiAke2hlYWRlcnNbJ2xhc3QtbW9kaWZpZWQnXX1gKTtcbiAgICAgICAgaWYgKGhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXSkge1xuICAgICAgICAgIHJlbW90ZUFwcFByb3BzLmltbXV0YWJsZSA9IC9cXGJpbW11dGFibGVcXGIvaS50ZXN0KGhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXSk7XG4gICAgICAgICAgY29uc3QgbWF4QWdlTWF0Y2ggPSAvXFxibWF4LWFnZT0oXFxkKylcXGIvaS5leGVjKGhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXSk7XG4gICAgICAgICAgaWYgKG1heEFnZU1hdGNoKSB7XG4gICAgICAgICAgICByZW1vdGVBcHBQcm9wcy5tYXhBZ2UgPSBwYXJzZUludChtYXhBZ2VNYXRjaFsxXSwgMTApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuZGVidWcoYENhY2hlLUNvbnRyb2w6ICR7aGVhZGVyc1snY2FjaGUtY29udHJvbCddfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FjaGVkUGF0aCA9IGdldENhY2hlZEFwcGxpY2F0aW9uUGF0aChhcHAsIHJlbW90ZUFwcFByb3BzLCBjYWNoZWRBcHBJbmZvKTtcbiAgICAgIGlmIChjYWNoZWRQYXRoKSB7XG4gICAgICAgIGlmIChhd2FpdCBpc0FwcEludGVncml0eU9rKGNhY2hlZFBhdGgsIGNhY2hlZEFwcEluZm8/LmludGVncml0eSkpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV1c2luZyBwcmV2aW91c2x5IGRvd25sb2FkZWQgYXBwbGljYXRpb24gYXQgJyR7Y2FjaGVkUGF0aH0nYCk7XG4gICAgICAgICAgcmV0dXJuIHZlcmlmeUFwcEV4dGVuc2lvbihjYWNoZWRQYXRoLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuaW5mbyhgVGhlIGFwcGxpY2F0aW9uIGF0ICcke2NhY2hlZFBhdGh9JyBkb2VzIG5vdCBleGlzdCBhbnltb3JlIGAgK1xuICAgICAgICAgIGBvciBpdHMgaW50ZWdyaXR5IGhhcyBiZWVuIGRhbWFnZWQuIERlbGV0aW5nIGl0IGZyb20gdGhlIGludGVybmFsIGNhY2hlYCk7XG4gICAgICAgIEFQUExJQ0FUSU9OU19DQUNIRS5kZWwoYXBwKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGZpbGVOYW1lID0gbnVsbDtcbiAgICAgIGNvbnN0IGJhc2VuYW1lID0gZnMuc2FuaXRpemVOYW1lKHBhdGguYmFzZW5hbWUoZGVjb2RlVVJJQ29tcG9uZW50KHBhdGhuYW1lKSksIHtcbiAgICAgICAgcmVwbGFjZW1lbnQ6IFNBTklUSVpFX1JFUExBQ0VNRU5UXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGV4dG5hbWUgPSBwYXRoLmV4dG5hbWUoYmFzZW5hbWUpO1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gdW56aXAgdGhlIGFwcCwgd2UgaGF2ZSBhIG51bWJlciBvZiBwbGFjZXNcbiAgICAgIC8vIHRvIGxvb2s6IGNvbnRlbnQgdHlwZSwgY29udGVudCBkaXNwb3NpdGlvbiwgb3IgdGhlIGZpbGUgZXh0ZW5zaW9uXG4gICAgICBpZiAoWklQX0VYVFMuaW5jbHVkZXMoZXh0bmFtZSkpIHtcbiAgICAgICAgZmlsZU5hbWUgPSBiYXNlbmFtZTtcbiAgICAgICAgc2hvdWxkVW56aXBBcHAgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICAgIGNvbnN0IGN0ID0gaGVhZGVyc1snY29udGVudC10eXBlJ107XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29udGVudC1UeXBlOiAke2N0fWApO1xuICAgICAgICAvLyB0aGUgZmlsZXR5cGUgbWF5IG5vdCBiZSBvYnZpb3VzIGZvciBjZXJ0YWluIHVybHMsIHNvIGNoZWNrIHRoZSBtaW1lIHR5cGUgdG9vXG4gICAgICAgIGlmIChaSVBfTUlNRV9UWVBFUy5zb21lKChtaW1lVHlwZSkgPT4gbmV3IFJlZ0V4cChgXFxcXGIke18uZXNjYXBlUmVnRXhwKG1pbWVUeXBlKX1cXFxcYmApLnRlc3QoY3QpKSkge1xuICAgICAgICAgIGlmICghZmlsZU5hbWUpIHtcbiAgICAgICAgICAgIGZpbGVOYW1lID0gYCR7REVGQVVMVF9CQVNFTkFNRX0uemlwYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2hvdWxkVW56aXBBcHAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddICYmIC9eYXR0YWNobWVudC9pLnRlc3QoaGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddKSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYENvbnRlbnQtRGlzcG9zaXRpb246ICR7aGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddfWApO1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9maWxlbmFtZT1cIihbXlwiXSspL2kuZXhlYyhoZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10pO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBmaWxlTmFtZSA9IGZzLnNhbml0aXplTmFtZShtYXRjaFsxXSwge1xuICAgICAgICAgICAgcmVwbGFjZW1lbnQ6IFNBTklUSVpFX1JFUExBQ0VNRU5UXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2hvdWxkVW56aXBBcHAgPSBzaG91bGRVbnppcEFwcCB8fCBaSVBfRVhUUy5pbmNsdWRlcyhwYXRoLmV4dG5hbWUoZmlsZU5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFmaWxlTmFtZSkge1xuICAgICAgICAvLyBhc3NpZ24gdGhlIGRlZmF1bHQgZmlsZSBuYW1lIGFuZCB0aGUgZXh0ZW5zaW9uIGlmIG5vbmUgaGFzIGJlZW4gZGV0ZWN0ZWRcbiAgICAgICAgY29uc3QgcmVzdWx0aW5nTmFtZSA9IGJhc2VuYW1lXG4gICAgICAgICAgPyBiYXNlbmFtZS5zdWJzdHJpbmcoMCwgYmFzZW5hbWUubGVuZ3RoIC0gZXh0bmFtZS5sZW5ndGgpXG4gICAgICAgICAgOiBERUZBVUxUX0JBU0VOQU1FO1xuICAgICAgICBsZXQgcmVzdWx0aW5nRXh0ID0gZXh0bmFtZTtcbiAgICAgICAgaWYgKCFzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLmluY2x1ZGVzKHJlc3VsdGluZ0V4dCkpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgVGhlIGN1cnJlbnQgZmlsZSBleHRlbnNpb24gJyR7cmVzdWx0aW5nRXh0fScgaXMgbm90IHN1cHBvcnRlZC4gYCArXG4gICAgICAgICAgICBgRGVmYXVsdGluZyB0byAnJHtfLmZpcnN0KHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpfSdgKTtcbiAgICAgICAgICByZXN1bHRpbmdFeHQgPSBfLmZpcnN0KHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVOYW1lID0gYCR7cmVzdWx0aW5nTmFtZX0ke3Jlc3VsdGluZ0V4dH1gO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0UGF0aCA9IGF3YWl0IHRlbXBEaXIucGF0aCh7XG4gICAgICAgIHByZWZpeDogZmlsZU5hbWUsXG4gICAgICAgIHN1ZmZpeDogJycsXG4gICAgICB9KTtcbiAgICAgIG5ld0FwcCA9IGF3YWl0IGRvd25sb2FkQXBwKG5ld0FwcCwgdGFyZ2V0UGF0aCk7XG4gICAgfSBlbHNlIGlmIChhd2FpdCBmcy5leGlzdHMobmV3QXBwKSkge1xuICAgICAgLy8gVXNlIHRoZSBsb2NhbCBhcHBcbiAgICAgIGxvZ2dlci5pbmZvKGBVc2luZyBsb2NhbCBhcHAgJyR7bmV3QXBwfSdgKTtcbiAgICAgIHNob3VsZFVuemlwQXBwID0gWklQX0VYVFMuaW5jbHVkZXMocGF0aC5leHRuYW1lKG5ld0FwcCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtuZXdBcHB9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWA7XG4gICAgICAvLyBwcm90b2NvbCB2YWx1ZSBmb3IgJ0M6XFxcXHRlbXAnIGlzICdjOicsIHNvIHdlIGNoZWNrIHRoZSBsZW5ndGggYXMgd2VsbFxuICAgICAgaWYgKF8uaXNTdHJpbmcocHJvdG9jb2wpICYmIHByb3RvY29sLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYFRoZSBwcm90b2NvbCAnJHtwcm90b2NvbH0nIHVzZWQgaW4gJyR7bmV3QXBwfScgaXMgbm90IHN1cHBvcnRlZC4gYCArXG4gICAgICAgICAgYE9ubHkgaHR0cDogYW5kIGh0dHBzOiBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZGA7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1BhY2thZ2VBRmlsZSA9IChhd2FpdCBmcy5zdGF0KG5ld0FwcCkpLmlzRmlsZSgpO1xuICAgIGlmIChpc1BhY2thZ2VBRmlsZSkge1xuICAgICAgcGFja2FnZUhhc2ggPSBhd2FpdCBjYWxjdWxhdGVGaWxlSW50ZWdyaXR5KG5ld0FwcCk7XG4gICAgfVxuXG4gICAgaWYgKGlzUGFja2FnZUFGaWxlICYmIHNob3VsZFVuemlwQXBwICYmICFfLmlzRnVuY3Rpb24ob25Qb3N0UHJvY2VzcykpIHtcbiAgICAgIGNvbnN0IGFyY2hpdmVQYXRoID0gbmV3QXBwO1xuICAgICAgaWYgKHBhY2thZ2VIYXNoID09PSBjYWNoZWRBcHBJbmZvPy5wYWNrYWdlSGFzaCkge1xuICAgICAgICBjb25zdCB7ZnVsbFBhdGh9ID0gY2FjaGVkQXBwSW5mbztcbiAgICAgICAgaWYgKGF3YWl0IGlzQXBwSW50ZWdyaXR5T2soZnVsbFBhdGgsIGNhY2hlZEFwcEluZm8/LmludGVncml0eSkpIHtcbiAgICAgICAgICBpZiAoYXJjaGl2ZVBhdGggIT09IGFwcCkge1xuICAgICAgICAgICAgYXdhaXQgZnMucmltcmFmKGFyY2hpdmVQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgYXBwbGljYXRpb24gYXQgJyR7ZnVsbFBhdGh9J2ApO1xuICAgICAgICAgIHJldHVybiB2ZXJpZnlBcHBFeHRlbnNpb24oZnVsbFBhdGgsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgYXBwbGljYXRpb24gYXQgJyR7ZnVsbFBhdGh9JyBkb2VzIG5vdCBleGlzdCBhbnltb3JlIGAgK1xuICAgICAgICAgIGBvciBpdHMgaW50ZWdyaXR5IGhhcyBiZWVuIGRhbWFnZWQuIERlbGV0aW5nIGl0IGZyb20gdGhlIGNhY2hlYCk7XG4gICAgICAgIEFQUExJQ0FUSU9OU19DQUNIRS5kZWwoYXBwKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0FwcCA9IGF3YWl0IHVuemlwQXBwKGFyY2hpdmVQYXRoLCB0bXBSb290LCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChuZXdBcHAgIT09IGFyY2hpdmVQYXRoICYmIGFyY2hpdmVQYXRoICE9PSBhcHApIHtcbiAgICAgICAgICBhd2FpdCBmcy5yaW1yYWYoYXJjaGl2ZVBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuaW5mbyhgVW56aXBwZWQgbG9jYWwgYXBwIHRvICcke25ld0FwcH0nYCk7XG4gICAgfSBlbHNlIGlmICghcGF0aC5pc0Fic29sdXRlKG5ld0FwcCkpIHtcbiAgICAgIG5ld0FwcCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBuZXdBcHApO1xuICAgICAgbG9nZ2VyLndhcm4oYFRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHBhdGggJyR7YXBwfScgaXMgbm90IGFic29sdXRlIGAgK1xuICAgICAgICBgYW5kIGhhcyBiZWVuIHJld3JpdHRlbiB0byAnJHtuZXdBcHB9Jy4gQ29uc2lkZXIgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcmF0aGVyIHRoYW4gcmVsYXRpdmVgKTtcbiAgICAgIGFwcCA9IG5ld0FwcDtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yZUFwcEluQ2FjaGUgPSBhc3luYyAoYXBwUGF0aFRvQ2FjaGUpID0+IHtcbiAgICAgIGNvbnN0IGNhY2hlZEZ1bGxQYXRoID0gY2FjaGVkQXBwSW5mbz8uZnVsbFBhdGg7XG4gICAgICBpZiAoY2FjaGVkRnVsbFBhdGggJiYgY2FjaGVkRnVsbFBhdGggIT09IGFwcFBhdGhUb0NhY2hlKSB7XG4gICAgICAgIGF3YWl0IGZzLnJpbXJhZihjYWNoZWRGdWxsUGF0aCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnRlZ3JpdHkgPSB7fTtcbiAgICAgIGlmICgoYXdhaXQgZnMuc3RhdChhcHBQYXRoVG9DYWNoZSkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgaW50ZWdyaXR5LmZvbGRlciA9IGF3YWl0IGNhbGN1bGF0ZUZvbGRlckludGVncml0eShhcHBQYXRoVG9DYWNoZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlZ3JpdHkuZmlsZSA9IGF3YWl0IGNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkoYXBwUGF0aFRvQ2FjaGUpO1xuICAgICAgfVxuICAgICAgQVBQTElDQVRJT05TX0NBQ0hFLnNldChhcHAsIHtcbiAgICAgICAgLi4ucmVtb3RlQXBwUHJvcHMsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgcGFja2FnZUhhc2gsXG4gICAgICAgIGludGVncml0eSxcbiAgICAgICAgZnVsbFBhdGg6IGFwcFBhdGhUb0NhY2hlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYXBwUGF0aFRvQ2FjaGU7XG4gICAgfTtcblxuICAgIGlmIChfLmlzRnVuY3Rpb24ob25Qb3N0UHJvY2VzcykpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9uUG9zdFByb2Nlc3Moe1xuICAgICAgICBjYWNoZWRBcHBJbmZvOiBfLmNsb25lKGNhY2hlZEFwcEluZm8pLFxuICAgICAgICBpc1VybCxcbiAgICAgICAgaGVhZGVyczogXy5jbG9uZShoZWFkZXJzKSxcbiAgICAgICAgYXBwUGF0aDogbmV3QXBwLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKCFyZXN1bHQ/LmFwcFBhdGggfHwgYXBwID09PSByZXN1bHQ/LmFwcFBhdGggfHwgIWF3YWl0IGZzLmV4aXN0cyhyZXN1bHQ/LmFwcFBhdGgpKVxuICAgICAgICA/IG5ld0FwcFxuICAgICAgICA6IGF3YWl0IHN0b3JlQXBwSW5DYWNoZShyZXN1bHQuYXBwUGF0aCk7XG4gICAgfVxuXG4gICAgdmVyaWZ5QXBwRXh0ZW5zaW9uKG5ld0FwcCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG4gICAgcmV0dXJuIChhcHAgIT09IG5ld0FwcCAmJiAocGFja2FnZUhhc2ggfHwgXy52YWx1ZXMocmVtb3RlQXBwUHJvcHMpLnNvbWUoQm9vbGVhbikpKVxuICAgICAgPyBhd2FpdCBzdG9yZUFwcEluQ2FjaGUobmV3QXBwKVxuICAgICAgOiBuZXdBcHA7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEFwcCAoYXBwLCB0YXJnZXRQYXRoKSB7XG4gIGNvbnN0IHtocmVmfSA9IHVybC5wYXJzZShhcHApO1xuICB0cnkge1xuICAgIGF3YWl0IG5ldC5kb3dubG9hZEZpbGUoaHJlZiwgdGFyZ2V0UGF0aCwge1xuICAgICAgdGltZW91dDogQVBQX0RPV05MT0FEX1RJTUVPVVRfTVMsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRvd25sb2FkIHRoZSBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHRhcmdldFBhdGg7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGJ1bmRsZSBmcm9tIGFuIGFyY2hpdmUgaW50byB0aGUgZ2l2ZW4gZm9sZGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHppcFBhdGggRnVsbCBwYXRoIHRvIHRoZSBhcmNoaXZlIGNvbnRhaW5pbmcgdGhlIGJ1bmRsZVxuICogQHBhcmFtIHtzdHJpbmd9IGRzdFJvb3QgRnVsbCBwYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGV4dHJhY3RlZCBidW5kbGVcbiAqIHNob3VsZCBiZSBwbGFjZWRcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPnxzdHJpbmd9IHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMgVGhlIGxpc3Qgb2YgZXh0ZW5zaW9uc1xuICogdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBidW5kbGUgc3VwcG9ydHMsIGZvciBleGFtcGxlIFsnLmFwaycsICcuYXBrcyddIGZvclxuICogQW5kcm9pZCBwYWNrYWdlc1xuICogQHJldHVybnMge3N0cmluZ30gRnVsbCBwYXRoIHRvIHRoZSBidW5kbGUgaW4gdGhlIGRlc3RpbmF0aW9uIGZvbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBhcmNoaXZlIGlzIGludmFsaWQgb3Igbm8gYXBwbGljYXRpb24gYnVuZGxlc1xuICogaGF2ZSBiZWVuIGZvdW5kIGluc2lkZVxuICovXG5hc3luYyBmdW5jdGlvbiB1bnppcEFwcCAoemlwUGF0aCwgZHN0Um9vdCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucykge1xuICBhd2FpdCB6aXAuYXNzZXJ0VmFsaWRaaXAoemlwUGF0aCk7XG5cbiAgaWYgKCFfLmlzQXJyYXkoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucykpIHtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zID0gW3N1cHBvcnRlZEFwcEV4dGVuc2lvbnNdO1xuICB9XG5cbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICB0cnkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgVW56aXBwaW5nICcke3ppcFBhdGh9J2ApO1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3QgdXNlU3lzdGVtVW56aXBFbnYgPSBwcm9jZXNzLmVudi5BUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUDtcbiAgICBjb25zdCB1c2VTeXN0ZW1VbnppcCA9IF8uaXNFbXB0eSh1c2VTeXN0ZW1VbnppcEVudilcbiAgICAgIHx8ICFbJzAnLCAnZmFsc2UnXS5pbmNsdWRlcyhfLnRvTG93ZXIodXNlU3lzdGVtVW56aXBFbnYpKTtcbiAgICAvKipcbiAgICAgKiBBdHRlbXB0IHRvIHVzZSB1c2UgdGhlIHN5c3RlbSBgdW56aXBgIChlLmcuLCBgL3Vzci9iaW4vdW56aXBgKSBkdWVcbiAgICAgKiB0byB0aGUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgaXQgcHJvdmlkZXMgb3ZlciB0aGUgbmF0aXZlXG4gICAgICogSlMgXCJ1bnppcFwiIGltcGxlbWVudGF0aW9uLlxuICAgICAqIEB0eXBlIHtpbXBvcnQoJ0BhcHBpdW0vc3VwcG9ydC9saWIvemlwJykuRXh0cmFjdEFsbE9wdGlvbnN9XG4gICAgICovXG4gICAgY29uc3QgZXh0cmFjdGlvbk9wdHMgPSB7dXNlU3lzdGVtVW56aXB9O1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNDEwMFxuICAgIGlmIChwYXRoLmV4dG5hbWUoemlwUGF0aCkgPT09IElQQV9FWFQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRW5mb3JjaW5nIFVURi04IGVuY29kaW5nIG9uIHRoZSBleHRyYWN0ZWQgZmlsZSBuYW1lcyBmb3IgJyR7cGF0aC5iYXNlbmFtZSh6aXBQYXRoKX0nYCk7XG4gICAgICBleHRyYWN0aW9uT3B0cy5maWxlTmFtZXNFbmNvZGluZyA9ICd1dGY4JztcbiAgICB9XG4gICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyh6aXBQYXRoLCB0bXBSb290LCBleHRyYWN0aW9uT3B0cyk7XG4gICAgY29uc3QgZ2xvYlBhdHRlcm4gPSBgKiovKi4rKCR7c3VwcG9ydGVkQXBwRXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gZXh0LnJlcGxhY2UoL15cXC4vLCAnJykpLmpvaW4oJ3wnKX0pYDtcbiAgICBjb25zdCBzb3J0ZWRCdW5kbGVJdGVtcyA9IChhd2FpdCBmcy5nbG9iKGdsb2JQYXR0ZXJuLCB7XG4gICAgICBjd2Q6IHRtcFJvb3QsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgIC8vIEdldCB0aGUgdG9wIGxldmVsIG1hdGNoXG4gICAgfSkpLnNvcnQoKGEsIGIpID0+IGEuc3BsaXQocGF0aC5zZXApLmxlbmd0aCAtIGIuc3BsaXQocGF0aC5zZXApLmxlbmd0aCk7XG4gICAgaWYgKF8uaXNFbXB0eShzb3J0ZWRCdW5kbGVJdGVtcykpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBBcHAgdW56aXBwZWQgT0ssIGJ1dCB3ZSBjb3VsZCBub3QgZmluZCBhbnkgJyR7c3VwcG9ydGVkQXBwRXh0ZW5zaW9uc30nIGAgK1xuICAgICAgICB1dGlsLnBsdXJhbGl6ZSgnYnVuZGxlJywgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucy5sZW5ndGgsIGZhbHNlKSArXG4gICAgICAgIGAgaW4gaXQuIE1ha2Ugc3VyZSB5b3VyIGFyY2hpdmUgY29udGFpbnMgYXQgbGVhc3Qgb25lIHBhY2thZ2UgaGF2aW5nIGAgK1xuICAgICAgICBgJyR7c3VwcG9ydGVkQXBwRXh0ZW5zaW9uc30nICR7dXRpbC5wbHVyYWxpemUoJ2V4dGVuc2lvbicsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMubGVuZ3RoLCBmYWxzZSl9YCk7XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhgRXh0cmFjdGVkICR7dXRpbC5wbHVyYWxpemUoJ2J1bmRsZSBpdGVtJywgc29ydGVkQnVuZGxlSXRlbXMubGVuZ3RoLCB0cnVlKX0gYCArXG4gICAgICBgZnJvbSAnJHt6aXBQYXRofScgaW4gJHtNYXRoLnJvdW5kKHRpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMpfW1zOiAke3NvcnRlZEJ1bmRsZUl0ZW1zfWApO1xuICAgIGNvbnN0IG1hdGNoZWRCdW5kbGUgPSBfLmZpcnN0KHNvcnRlZEJ1bmRsZUl0ZW1zKTtcbiAgICBsb2dnZXIuaW5mbyhgQXNzdW1pbmcgJyR7bWF0Y2hlZEJ1bmRsZX0nIGlzIHRoZSBjb3JyZWN0IGJ1bmRsZWApO1xuICAgIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUoZHN0Um9vdCwgcGF0aC5iYXNlbmFtZShtYXRjaGVkQnVuZGxlKSk7XG4gICAgYXdhaXQgZnMubXYocGF0aC5yZXNvbHZlKHRtcFJvb3QsIG1hdGNoZWRCdW5kbGUpLCBkc3RQYXRoLCB7bWtkaXJwOiB0cnVlfSk7XG4gICAgcmV0dXJuIGRzdFBhdGg7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUGFja2FnZU9yQnVuZGxlIChhcHApIHtcbiAgcmV0dXJuICgvXihbYS16QS1aMC05XFwtX10rXFwuW2EtekEtWjAtOVxcLV9dKykrJC8pLnRlc3QoYXBwKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgaW5zdGFuY2VzICdmaXJzdEtleScgYW5kIGNyZWF0ZSBhIGR1cGxpY2F0ZSB3aXRoIHRoZSBrZXkgJ3NlY29uZEtleScsXG4gKiBEbyB0aGUgc2FtZSB0aGluZyBpbiByZXZlcnNlLiBJZiB3ZSBmaW5kICdzZWNvbmRLZXknLCBjcmVhdGUgYSBkdXBsaWNhdGUgd2l0aCB0aGUga2V5ICdmaXJzdEtleScuXG4gKlxuICogVGhpcyB3aWxsIGNhdXNlIGtleXMgdG8gYmUgb3ZlcndyaXR0ZW4gaWYgdGhlIG9iamVjdCBjb250YWlucyAnZmlyc3RLZXknIGFuZCAnc2Vjb25kS2V5Jy5cblxuICogQHBhcmFtIHsqfSBpbnB1dCBBbnkgdHlwZSBvZiBpbnB1dFxuICogQHBhcmFtIHtTdHJpbmd9IGZpcnN0S2V5IFRoZSBmaXJzdCBrZXkgdG8gZHVwbGljYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gc2Vjb25kS2V5IFRoZSBzZWNvbmQga2V5IHRvIGR1cGxpY2F0ZVxuICovXG5mdW5jdGlvbiBkdXBsaWNhdGVLZXlzIChpbnB1dCwgZmlyc3RLZXksIHNlY29uZEtleSkge1xuICAvLyBJZiBhcnJheSBwcm92aWRlZCwgcmVjdXJzaXZlbHkgY2FsbCBvbiBhbGwgZWxlbWVudHNcbiAgaWYgKF8uaXNBcnJheShpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXQubWFwKChpdGVtKSA9PiBkdXBsaWNhdGVLZXlzKGl0ZW0sIGZpcnN0S2V5LCBzZWNvbmRLZXkpKTtcbiAgfVxuXG4gIC8vIElmIG9iamVjdCwgY3JlYXRlIGR1cGxpY2F0ZXMgZm9yIGtleXMgYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2FsbCBvbiB2YWx1ZXNcbiAgaWYgKF8uaXNQbGFpbk9iamVjdChpbnB1dCkpIHtcbiAgICBjb25zdCByZXN1bHRPYmogPSB7fTtcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGlucHV0KSkge1xuICAgICAgY29uc3QgcmVjdXJzaXZlbHlDYWxsZWRWYWx1ZSA9IGR1cGxpY2F0ZUtleXModmFsdWUsIGZpcnN0S2V5LCBzZWNvbmRLZXkpO1xuICAgICAgaWYgKGtleSA9PT0gZmlyc3RLZXkpIHtcbiAgICAgICAgcmVzdWx0T2JqW3NlY29uZEtleV0gPSByZWN1cnNpdmVseUNhbGxlZFZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IHNlY29uZEtleSkge1xuICAgICAgICByZXN1bHRPYmpbZmlyc3RLZXldID0gcmVjdXJzaXZlbHlDYWxsZWRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdE9ialtrZXldID0gcmVjdXJzaXZlbHlDYWxsZWRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdE9iajtcbiAgfVxuXG4gIC8vIEJhc2UgY2FzZS4gUmV0dXJuIHByaW1pdGl2ZXMgd2l0aG91dCBkb2luZyBhbnl0aGluZy5cbiAgcmV0dXJuIGlucHV0O1xufVxuXG4vKipcbiAqIFRha2VzIGEgZGVzaXJlZCBjYXBhYmlsaXR5IGFuZCB0cmllcyB0byBKU09OLnBhcnNlIGl0IGFzIGFuIGFycmF5LFxuICogYW5kIGVpdGhlciByZXR1cm5zIHRoZSBwYXJzZWQgYXJyYXkgb3IgYSBzaW5nbGV0b24gYXJyYXkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXk8U3RyaW5nPn0gY2FwIEEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ2Fwc0FycmF5IChjYXApIHtcbiAgaWYgKF8uaXNBcnJheShjYXApKSB7XG4gICAgcmV0dXJuIGNhcDtcbiAgfVxuXG4gIGxldCBwYXJzZWRDYXBzO1xuICB0cnkge1xuICAgIHBhcnNlZENhcHMgPSBKU09OLnBhcnNlKGNhcCk7XG4gICAgaWYgKF8uaXNBcnJheShwYXJzZWRDYXBzKSkge1xuICAgICAgcmV0dXJuIHBhcnNlZENhcHM7XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHtcbiAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIGNhcGFiaWxpdHkgYXMgSlNPTiBhcnJheWApO1xuICB9XG4gIGlmIChfLmlzU3RyaW5nKGNhcCkpIHtcbiAgICByZXR1cm4gW2NhcF07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBtdXN0IHByb3ZpZGUgYSBzdHJpbmcgb3IgSlNPTiBBcnJheTsgcmVjZWl2ZWQgJHtjYXB9YCk7XG59XG5cbmV4cG9ydCB7XG4gIGNvbmZpZ3VyZUFwcCwgaXNQYWNrYWdlT3JCdW5kbGUsIGR1cGxpY2F0ZUtleXMsIHBhcnNlQ2Fwc0FycmF5XG59O1xuIl0sImZpbGUiOiJsaWIvYmFzZWRyaXZlci9oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
531
|
+
}
|
|
532
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2hlbHBlcnMuanMiXSwibmFtZXMiOlsiSVBBX0VYVCIsIlpJUF9FWFRTIiwiWklQX01JTUVfVFlQRVMiLCJDQUNIRURfQVBQU19NQVhfQUdFIiwiTUFYX0NBQ0hFRF9BUFBTIiwiQVBQTElDQVRJT05TX0NBQ0hFIiwiTFJVIiwibWF4IiwidHRsIiwidXBkYXRlQWdlT25HZXQiLCJkaXNwb3NlIiwiYXBwIiwiZnVsbFBhdGgiLCJsb2dnZXIiLCJpbmZvIiwiZnMiLCJyaW1yYWYiLCJub0Rpc3Bvc2VPblNldCIsIkFQUExJQ0FUSU9OU19DQUNIRV9HVUFSRCIsIkFzeW5jTG9jayIsIlNBTklUSVpFX1JFUExBQ0VNRU5UIiwiREVGQVVMVF9CQVNFTkFNRSIsIkFQUF9ET1dOTE9BRF9USU1FT1VUX01TIiwicHJvY2VzcyIsIm9uIiwic2l6ZSIsImFwcFBhdGhzIiwidmFsdWVzIiwibWFwIiwiZGVidWciLCJsZW5ndGgiLCJ1dGlsIiwicGx1cmFsaXplIiwiYXBwUGF0aCIsInJpbXJhZlN5bmMiLCJlIiwid2FybiIsIm1lc3NhZ2UiLCJyZXRyaWV2ZUhlYWRlcnMiLCJsaW5rIiwidXJsIiwibWV0aG9kIiwidGltZW91dCIsImhlYWRlcnMiLCJnZXRDYWNoZWRBcHBsaWNhdGlvblBhdGgiLCJjdXJyZW50QXBwUHJvcHMiLCJjYWNoZWRBcHBJbmZvIiwicmVmcmVzaCIsIl8iLCJpc1BsYWluT2JqZWN0IiwibGFzdE1vZGlmaWVkIiwiY3VycmVudE1vZGlmaWVkIiwiaW1tdXRhYmxlIiwiY3VycmVudEltbXV0YWJsZSIsIm1heEFnZSIsImN1cnJlbnRNYXhBZ2UiLCJ0aW1lc3RhbXAiLCJnZXRUaW1lIiwibXNMZWZ0IiwiRGF0ZSIsIm5vdyIsInBhdGgiLCJiYXNlbmFtZSIsInZlcmlmeUFwcEV4dGVuc2lvbiIsInN1cHBvcnRlZEFwcEV4dGVuc2lvbnMiLCJ0b0xvd2VyIiwiaW5jbHVkZXMiLCJleHRuYW1lIiwiRXJyb3IiLCJjYWxjdWxhdGVGb2xkZXJJbnRlZ3JpdHkiLCJmb2xkZXJQYXRoIiwiZ2xvYiIsImN3ZCIsInN0cmljdCIsIm5vc29ydCIsImNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkiLCJmaWxlUGF0aCIsImhhc2giLCJpc0FwcEludGVncml0eU9rIiwiY3VycmVudFBhdGgiLCJleHBlY3RlZEludGVncml0eSIsImV4aXN0cyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImZvbGRlciIsImZpbGUiLCJjb25maWd1cmVBcHAiLCJvcHRpb25zIiwiaXNTdHJpbmciLCJvblBvc3RQcm9jZXNzIiwiaXNBcnJheSIsInN1cHBvcnRlZEV4dGVuc2lvbnMiLCJpc0VtcHR5IiwibmV3QXBwIiwic2hvdWxkVW56aXBBcHAiLCJwYWNrYWdlSGFzaCIsInJlbW90ZUFwcFByb3BzIiwicHJvdG9jb2wiLCJwYXRobmFtZSIsInBhcnNlIiwiaXNVcmwiLCJnZXQiLCJhY3F1aXJlIiwidGVzdCIsIm1heEFnZU1hdGNoIiwiZXhlYyIsInBhcnNlSW50IiwiY2FjaGVkUGF0aCIsImludGVncml0eSIsImRlbCIsImZpbGVOYW1lIiwic2FuaXRpemVOYW1lIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZW1lbnQiLCJjdCIsInNvbWUiLCJtaW1lVHlwZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsIm1hdGNoIiwicmVzdWx0aW5nTmFtZSIsInN1YnN0cmluZyIsInJlc3VsdGluZ0V4dCIsImZpcnN0IiwidGFyZ2V0UGF0aCIsInRlbXBEaXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJkb3dubG9hZEFwcCIsImVycm9yTWVzc2FnZSIsImlzUGFja2FnZUFGaWxlIiwiaXNGaWxlIiwiaXNGdW5jdGlvbiIsImFyY2hpdmVQYXRoIiwidG1wUm9vdCIsIm9wZW5EaXIiLCJ1bnppcEFwcCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwic3RvcmVBcHBJbkNhY2hlIiwiYXBwUGF0aFRvQ2FjaGUiLCJjYWNoZWRGdWxsUGF0aCIsInNldCIsInJlc3VsdCIsImNsb25lIiwiQm9vbGVhbiIsImhyZWYiLCJuZXQiLCJkb3dubG9hZEZpbGUiLCJlcnIiLCJ6aXBQYXRoIiwiZHN0Um9vdCIsInppcCIsImFzc2VydFZhbGlkWmlwIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwidXNlU3lzdGVtVW56aXBFbnYiLCJlbnYiLCJBUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUCIsInVzZVN5c3RlbVVuemlwIiwiZXh0cmFjdGlvbk9wdHMiLCJmaWxlTmFtZXNFbmNvZGluZyIsImV4dHJhY3RBbGxUbyIsImdsb2JQYXR0ZXJuIiwiZXh0IiwicmVwbGFjZSIsImpvaW4iLCJzb3J0ZWRCdW5kbGVJdGVtcyIsInNvcnQiLCJhIiwiYiIsInNwbGl0Iiwic2VwIiwiZXJyb3JBbmRUaHJvdyIsIk1hdGgiLCJyb3VuZCIsImdldER1cmF0aW9uIiwiYXNNaWxsaVNlY29uZHMiLCJtYXRjaGVkQnVuZGxlIiwiZHN0UGF0aCIsIm12IiwibWtkaXJwIiwiaXNQYWNrYWdlT3JCdW5kbGUiLCJkdXBsaWNhdGVLZXlzIiwiaW5wdXQiLCJmaXJzdEtleSIsInNlY29uZEtleSIsIml0ZW0iLCJyZXN1bHRPYmoiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJyZWN1cnNpdmVseUNhbGxlZFZhbHVlIiwicGFyc2VDYXBzQXJyYXkiLCJjYXAiLCJwYXJzZWRDYXBzIiwiSlNPTiIsImlnbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxPQUFPLEdBQUcsTUFBaEI7QUFDQSxNQUFNQyxRQUFRLEdBQUcsQ0FBQyxNQUFELEVBQVNELE9BQVQsQ0FBakI7QUFDQSxNQUFNRSxjQUFjLEdBQUcsQ0FDckIsaUJBRHFCLEVBRXJCLDhCQUZxQixFQUdyQixpQkFIcUIsQ0FBdkI7QUFLQSxNQUFNQyxtQkFBbUIsR0FBRyxPQUFPLEVBQVAsR0FBWSxFQUFaLEdBQWlCLEVBQTdDO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLElBQXhCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsSUFBSUMsaUJBQUosQ0FBUTtBQUNqQ0MsRUFBQUEsR0FBRyxFQUFFSCxlQUQ0QjtBQUVqQ0ksRUFBQUEsR0FBRyxFQUFFTCxtQkFGNEI7QUFHakNNLEVBQUFBLGNBQWMsRUFBRSxJQUhpQjtBQUlqQ0MsRUFBQUEsT0FBTyxFQUFFLENBQUNDLEdBQUQsRUFBTTtBQUFDQyxJQUFBQTtBQUFELEdBQU4sS0FBcUI7QUFDNUJDLG9CQUFPQyxJQUFQLENBQWEsb0JBQW1CSCxHQUFJLGdCQUFlQyxRQUFTLFFBQWhELEdBQ1QsaUJBQWdCVCxtQkFBb0IsSUFEdkM7O0FBRUEsUUFBSVMsUUFBSixFQUFjO0FBQ1pHLGtCQUFHQyxNQUFILENBQVVKLFFBQVY7QUFDRDtBQUNGLEdBVmdDO0FBV2pDSyxFQUFBQSxjQUFjLEVBQUU7QUFYaUIsQ0FBUixDQUEzQjtBQWFBLE1BQU1DLHdCQUF3QixHQUFHLElBQUlDLGtCQUFKLEVBQWpDO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsR0FBN0I7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxZQUF6QjtBQUNBLE1BQU1DLHVCQUF1QixHQUFHLE1BQU0sSUFBdEM7QUFFQUMsT0FBTyxDQUFDQyxFQUFSLENBQVcsTUFBWCxFQUFtQixNQUFNO0FBQ3ZCLE1BQUluQixrQkFBa0IsQ0FBQ29CLElBQW5CLEtBQTRCLENBQWhDLEVBQW1DO0FBQ2pDO0FBQ0Q7O0FBRUQsUUFBTUMsUUFBUSxHQUFHLENBQUMsR0FBR3JCLGtCQUFrQixDQUFDc0IsTUFBbkIsRUFBSixFQUNkQyxHQURjLENBQ1YsQ0FBQztBQUFDaEIsSUFBQUE7QUFBRCxHQUFELEtBQWdCQSxRQUROLENBQWpCOztBQUVBQyxrQkFBT2dCLEtBQVAsQ0FBYyx5QkFBd0JILFFBQVEsQ0FBQ0ksTUFBTyxVQUF6QyxHQUNYQyxjQUFLQyxTQUFMLENBQWUsYUFBZixFQUE4Qk4sUUFBUSxDQUFDSSxNQUF2QyxDQURGOztBQUVBLE9BQUssTUFBTUcsT0FBWCxJQUFzQlAsUUFBdEIsRUFBZ0M7QUFDOUIsUUFBSTtBQUVGWCxrQkFBR21CLFVBQUgsQ0FBY0QsT0FBZDtBQUNELEtBSEQsQ0FHRSxPQUFPRSxDQUFQLEVBQVU7QUFDVnRCLHNCQUFPdUIsSUFBUCxDQUFZRCxDQUFDLENBQUNFLE9BQWQ7QUFDRDtBQUNGO0FBQ0YsQ0FqQkQ7O0FBb0JBLGVBQWVDLGVBQWYsQ0FBZ0NDLElBQWhDLEVBQXNDO0FBQ3BDLE1BQUk7QUFDRixXQUFPLENBQUMsTUFBTSxvQkFBTTtBQUNsQkMsTUFBQUEsR0FBRyxFQUFFRCxJQURhO0FBRWxCRSxNQUFBQSxNQUFNLEVBQUUsTUFGVTtBQUdsQkMsTUFBQUEsT0FBTyxFQUFFO0FBSFMsS0FBTixDQUFQLEVBSUhDLE9BSko7QUFLRCxHQU5ELENBTUUsT0FBT1IsQ0FBUCxFQUFVO0FBQ1Z0QixvQkFBT0MsSUFBUCxDQUFhLGdDQUErQnlCLElBQUssc0JBQXFCSixDQUFDLENBQUNFLE9BQVEsRUFBaEY7QUFDRDs7QUFDRCxTQUFPLEVBQVA7QUFDRDs7QUFFRCxTQUFTTyx3QkFBVCxDQUFtQ0wsSUFBbkMsRUFBeUNNLGVBQWUsR0FBRyxFQUEzRCxFQUErREMsYUFBYSxHQUFHLEVBQS9FLEVBQW1GO0FBQ2pGLFFBQU1DLE9BQU8sR0FBRyxNQUFNO0FBQ3BCbEMsb0JBQU9nQixLQUFQLENBQWMsa0VBQWlFVSxJQUFLLEVBQXBGOztBQUNBLFdBQU8sSUFBUDtBQUNELEdBSEQ7O0FBS0EsTUFBSSxDQUFDUyxnQkFBRUMsYUFBRixDQUFnQkgsYUFBaEIsQ0FBRCxJQUFtQyxDQUFDRSxnQkFBRUMsYUFBRixDQUFnQkosZUFBaEIsQ0FBeEMsRUFBMEU7QUFFeEUsV0FBT0UsT0FBTyxFQUFkO0FBQ0Q7O0FBRUQsUUFBTTtBQUNKRyxJQUFBQSxZQUFZLEVBQUVDLGVBRFY7QUFFSkMsSUFBQUEsU0FBUyxFQUFFQyxnQkFGUDtBQUlKQyxJQUFBQSxNQUFNLEVBQUVDO0FBSkosTUFLRlYsZUFMSjtBQU1BLFFBQU07QUFFSkssSUFBQUEsWUFGSTtBQUlKRSxJQUFBQSxTQUpJO0FBTUpJLElBQUFBLFNBTkk7QUFPSjVDLElBQUFBO0FBUEksTUFRRmtDLGFBUko7O0FBU0EsTUFBSUksWUFBWSxJQUFJQyxlQUFwQixFQUFxQztBQUNuQyxRQUFJQSxlQUFlLENBQUNNLE9BQWhCLE1BQTZCUCxZQUFZLENBQUNPLE9BQWIsRUFBakMsRUFBeUQ7QUFDdkQ1QyxzQkFBT2dCLEtBQVAsQ0FBYyxzQkFBcUJVLElBQUssZ0NBQStCVyxZQUFhLEVBQXBGOztBQUNBLGFBQU90QyxRQUFQO0FBQ0Q7O0FBQ0RDLG9CQUFPZ0IsS0FBUCxDQUFjLHNCQUFxQlUsSUFBSyw0QkFBMkJXLFlBQWEsRUFBaEY7O0FBQ0EsV0FBT0gsT0FBTyxFQUFkO0FBQ0Q7O0FBQ0QsTUFBSUssU0FBUyxJQUFJQyxnQkFBakIsRUFBbUM7QUFDakN4QyxvQkFBT2dCLEtBQVAsQ0FBYyxzQkFBcUJVLElBQUssZUFBeEM7O0FBQ0EsV0FBTzNCLFFBQVA7QUFDRDs7QUFDRCxNQUFJMkMsYUFBYSxJQUFJQyxTQUFyQixFQUFnQztBQUM5QixVQUFNRSxNQUFNLEdBQUdGLFNBQVMsR0FBR0QsYUFBYSxHQUFHLElBQTVCLEdBQW1DSSxJQUFJLENBQUNDLEdBQUwsRUFBbEQ7O0FBQ0EsUUFBSUYsTUFBTSxHQUFHLENBQWIsRUFBZ0I7QUFDZDdDLHNCQUFPZ0IsS0FBUCxDQUFjLDJCQUEwQmdDLGNBQUtDLFFBQUwsQ0FBY2xELFFBQWQsQ0FBd0Isb0JBQW1COEMsTUFBTSxHQUFHLElBQUssR0FBakc7O0FBQ0EsYUFBTzlDLFFBQVA7QUFDRDs7QUFDREMsb0JBQU9nQixLQUFQLENBQWMsMkJBQTBCZ0MsY0FBS0MsUUFBTCxDQUFjbEQsUUFBZCxDQUF3QixlQUFoRTtBQUNEOztBQUNELFNBQU9tQyxPQUFPLEVBQWQ7QUFDRDs7QUFFRCxTQUFTZ0Isa0JBQVQsQ0FBNkJwRCxHQUE3QixFQUFrQ3FELHNCQUFsQyxFQUEwRDtBQUN4RCxNQUFJQSxzQkFBc0IsQ0FBQ3BDLEdBQXZCLENBQTJCb0IsZ0JBQUVpQixPQUE3QixFQUFzQ0MsUUFBdEMsQ0FBK0NsQixnQkFBRWlCLE9BQUYsQ0FBVUosY0FBS00sT0FBTCxDQUFheEQsR0FBYixDQUFWLENBQS9DLENBQUosRUFBa0Y7QUFDaEYsV0FBT0EsR0FBUDtBQUNEOztBQUNELFFBQU0sSUFBSXlELEtBQUosQ0FBVyxpQkFBZ0J6RCxHQUFJLGlCQUFyQixHQUNiLEdBQUVvQixjQUFLQyxTQUFMLENBQWUsV0FBZixFQUE0QmdDLHNCQUFzQixDQUFDbEMsTUFBbkQsRUFBMkQsS0FBM0QsQ0FBa0UsSUFEdkQsR0FFZGtDLHNCQUZJLENBQU47QUFHRDs7QUFFRCxlQUFlSyx3QkFBZixDQUF5Q0MsVUFBekMsRUFBcUQ7QUFDbkQsU0FBTyxDQUFDLE1BQU12RCxZQUFHd0QsSUFBSCxDQUFRLE1BQVIsRUFBZ0I7QUFBQ0MsSUFBQUEsR0FBRyxFQUFFRixVQUFOO0FBQWtCRyxJQUFBQSxNQUFNLEVBQUUsS0FBMUI7QUFBaUNDLElBQUFBLE1BQU0sRUFBRTtBQUF6QyxHQUFoQixDQUFQLEVBQXdFNUMsTUFBL0U7QUFDRDs7QUFFRCxlQUFlNkMsc0JBQWYsQ0FBdUNDLFFBQXZDLEVBQWlEO0FBQy9DLFNBQU8sTUFBTTdELFlBQUc4RCxJQUFILENBQVFELFFBQVIsQ0FBYjtBQUNEOztBQUVELGVBQWVFLGdCQUFmLENBQWlDQyxXQUFqQyxFQUE4Q0MsaUJBQWlCLEdBQUcsRUFBbEUsRUFBc0U7QUFDcEUsTUFBSSxFQUFDLE1BQU1qRSxZQUFHa0UsTUFBSCxDQUFVRixXQUFWLENBQVAsQ0FBSixFQUFtQztBQUNqQyxXQUFPLEtBQVA7QUFDRDs7QUFTRCxTQUFPLENBQUMsTUFBTWhFLFlBQUdtRSxJQUFILENBQVFILFdBQVIsQ0FBUCxFQUE2QkksV0FBN0IsS0FDSCxPQUFNZCx3QkFBd0IsQ0FBQ1UsV0FBRCxDQUE5QixNQUErQ0MsaUJBQS9DLGFBQStDQSxpQkFBL0MsdUJBQStDQSxpQkFBaUIsQ0FBRUksTUFBbEUsQ0FERyxHQUVILE9BQU1ULHNCQUFzQixDQUFDSSxXQUFELENBQTVCLE9BQThDQyxpQkFBOUMsYUFBOENBLGlCQUE5Qyx1QkFBOENBLGlCQUFpQixDQUFFSyxJQUFqRSxDQUZKO0FBR0Q7O0FBb0RELGVBQWVDLFlBQWYsQ0FBNkIzRSxHQUE3QixFQUFrQzRFLE9BQU8sR0FBRyxFQUE1QyxFQUFnRDtBQUM5QyxNQUFJLENBQUN2QyxnQkFBRXdDLFFBQUYsQ0FBVzdFLEdBQVgsQ0FBTCxFQUFzQjtBQUVwQjtBQUNEOztBQUVELE1BQUlxRCxzQkFBSjtBQUNBLFFBQU07QUFDSnlCLElBQUFBO0FBREksTUFFRnpDLGdCQUFFQyxhQUFGLENBQWdCc0MsT0FBaEIsSUFBMkJBLE9BQTNCLEdBQXFDLEVBRnpDOztBQUdBLE1BQUl2QyxnQkFBRXdDLFFBQUYsQ0FBV0QsT0FBWCxDQUFKLEVBQXlCO0FBQ3ZCdkIsSUFBQUEsc0JBQXNCLEdBQUcsQ0FBQ3VCLE9BQUQsQ0FBekI7QUFDRCxHQUZELE1BRU8sSUFBSXZDLGdCQUFFMEMsT0FBRixDQUFVSCxPQUFWLENBQUosRUFBd0I7QUFDN0J2QixJQUFBQSxzQkFBc0IsR0FBR3VCLE9BQXpCO0FBQ0QsR0FGTSxNQUVBLElBQUl2QyxnQkFBRUMsYUFBRixDQUFnQnNDLE9BQWhCLENBQUosRUFBOEI7QUFDbkN2QixJQUFBQSxzQkFBc0IsR0FBR3VCLE9BQU8sQ0FBQ0ksbUJBQWpDO0FBQ0Q7O0FBQ0QsTUFBSTNDLGdCQUFFNEMsT0FBRixDQUFVNUIsc0JBQVYsQ0FBSixFQUF1QztBQUNyQyxVQUFNLElBQUlJLEtBQUosQ0FBVyx1REFBWCxDQUFOO0FBQ0Q7O0FBRUQsTUFBSXlCLE1BQU0sR0FBR2xGLEdBQWI7QUFDQSxNQUFJbUYsY0FBYyxHQUFHLEtBQXJCO0FBQ0EsTUFBSUMsV0FBVyxHQUFHLElBQWxCO0FBQ0EsTUFBSXBELE9BQU8sR0FBRyxJQUFkO0FBQ0EsUUFBTXFELGNBQWMsR0FBRztBQUNyQjlDLElBQUFBLFlBQVksRUFBRSxJQURPO0FBRXJCRSxJQUFBQSxTQUFTLEVBQUUsS0FGVTtBQUdyQkUsSUFBQUEsTUFBTSxFQUFFO0FBSGEsR0FBdkI7O0FBS0EsUUFBTTtBQUFDMkMsSUFBQUEsUUFBRDtBQUFXQyxJQUFBQTtBQUFYLE1BQXVCMUQsYUFBSTJELEtBQUosQ0FBVU4sTUFBVixDQUE3Qjs7QUFDQSxRQUFNTyxLQUFLLEdBQUcsQ0FBQyxPQUFELEVBQVUsUUFBVixFQUFvQmxDLFFBQXBCLENBQTZCK0IsUUFBN0IsQ0FBZDtBQUVBLFFBQU1uRCxhQUFhLEdBQUd6QyxrQkFBa0IsQ0FBQ2dHLEdBQW5CLENBQXVCMUYsR0FBdkIsQ0FBdEI7QUFFQSxTQUFPLE1BQU1PLHdCQUF3QixDQUFDb0YsT0FBekIsQ0FBaUMzRixHQUFqQyxFQUFzQyxZQUFZO0FBQzdELFFBQUl5RixLQUFKLEVBQVc7QUFFVHZGLHNCQUFPQyxJQUFQLENBQWEsMkJBQTBCK0UsTUFBTyxHQUE5Qzs7QUFDQWxELE1BQUFBLE9BQU8sR0FBRyxNQUFNTCxlQUFlLENBQUN1RCxNQUFELENBQS9COztBQUNBLFVBQUksQ0FBQzdDLGdCQUFFNEMsT0FBRixDQUFVakQsT0FBVixDQUFMLEVBQXlCO0FBQ3ZCLFlBQUlBLE9BQU8sQ0FBQyxlQUFELENBQVgsRUFBOEI7QUFDNUJxRCxVQUFBQSxjQUFjLENBQUM5QyxZQUFmLEdBQThCLElBQUlTLElBQUosQ0FBU2hCLE9BQU8sQ0FBQyxlQUFELENBQWhCLENBQTlCO0FBQ0Q7O0FBQ0Q5Qix3QkFBT2dCLEtBQVAsQ0FBYyxrQkFBaUJjLE9BQU8sQ0FBQyxlQUFELENBQWtCLEVBQXhEOztBQUNBLFlBQUlBLE9BQU8sQ0FBQyxlQUFELENBQVgsRUFBOEI7QUFDNUJxRCxVQUFBQSxjQUFjLENBQUM1QyxTQUFmLEdBQTJCLGlCQUFpQm1ELElBQWpCLENBQXNCNUQsT0FBTyxDQUFDLGVBQUQsQ0FBN0IsQ0FBM0I7QUFDQSxnQkFBTTZELFdBQVcsR0FBRyxxQkFBcUJDLElBQXJCLENBQTBCOUQsT0FBTyxDQUFDLGVBQUQsQ0FBakMsQ0FBcEI7O0FBQ0EsY0FBSTZELFdBQUosRUFBaUI7QUFDZlIsWUFBQUEsY0FBYyxDQUFDMUMsTUFBZixHQUF3Qm9ELFFBQVEsQ0FBQ0YsV0FBVyxDQUFDLENBQUQsQ0FBWixFQUFpQixFQUFqQixDQUFoQztBQUNEO0FBQ0Y7O0FBQ0QzRix3QkFBT2dCLEtBQVAsQ0FBYyxrQkFBaUJjLE9BQU8sQ0FBQyxlQUFELENBQWtCLEVBQXhEO0FBQ0Q7O0FBQ0QsWUFBTWdFLFVBQVUsR0FBRy9ELHdCQUF3QixDQUFDakMsR0FBRCxFQUFNcUYsY0FBTixFQUFzQmxELGFBQXRCLENBQTNDOztBQUNBLFVBQUk2RCxVQUFKLEVBQWdCO0FBQ2QsWUFBSSxNQUFNN0IsZ0JBQWdCLENBQUM2QixVQUFELEVBQWE3RCxhQUFiLGFBQWFBLGFBQWIsdUJBQWFBLGFBQWEsQ0FBRThELFNBQTVCLENBQTFCLEVBQWtFO0FBQ2hFL0YsMEJBQU9DLElBQVAsQ0FBYSxpREFBZ0Q2RixVQUFXLEdBQXhFOztBQUNBLGlCQUFPNUMsa0JBQWtCLENBQUM0QyxVQUFELEVBQWEzQyxzQkFBYixDQUF6QjtBQUNEOztBQUNEbkQsd0JBQU9DLElBQVAsQ0FBYSx1QkFBc0I2RixVQUFXLDJCQUFsQyxHQUNULHdFQURIOztBQUVBdEcsUUFBQUEsa0JBQWtCLENBQUN3RyxHQUFuQixDQUF1QmxHLEdBQXZCO0FBQ0Q7O0FBRUQsVUFBSW1HLFFBQVEsR0FBRyxJQUFmOztBQUNBLFlBQU1oRCxRQUFRLEdBQUcvQyxZQUFHZ0csWUFBSCxDQUFnQmxELGNBQUtDLFFBQUwsQ0FBY2tELGtCQUFrQixDQUFDZCxRQUFELENBQWhDLENBQWhCLEVBQTZEO0FBQzVFZSxRQUFBQSxXQUFXLEVBQUU3RjtBQUQrRCxPQUE3RCxDQUFqQjs7QUFHQSxZQUFNK0MsT0FBTyxHQUFHTixjQUFLTSxPQUFMLENBQWFMLFFBQWIsQ0FBaEI7O0FBR0EsVUFBSTdELFFBQVEsQ0FBQ2lFLFFBQVQsQ0FBa0JDLE9BQWxCLENBQUosRUFBZ0M7QUFDOUIyQyxRQUFBQSxRQUFRLEdBQUdoRCxRQUFYO0FBQ0FnQyxRQUFBQSxjQUFjLEdBQUcsSUFBakI7QUFDRDs7QUFDRCxVQUFJbkQsT0FBTyxDQUFDLGNBQUQsQ0FBWCxFQUE2QjtBQUMzQixjQUFNdUUsRUFBRSxHQUFHdkUsT0FBTyxDQUFDLGNBQUQsQ0FBbEI7O0FBQ0E5Qix3QkFBT2dCLEtBQVAsQ0FBYyxpQkFBZ0JxRixFQUFHLEVBQWpDOztBQUVBLFlBQUloSCxjQUFjLENBQUNpSCxJQUFmLENBQXFCQyxRQUFELElBQWMsSUFBSUMsTUFBSixDQUFZLE1BQUtyRSxnQkFBRXNFLFlBQUYsQ0FBZUYsUUFBZixDQUF5QixLQUExQyxFQUFnRGIsSUFBaEQsQ0FBcURXLEVBQXJELENBQWxDLENBQUosRUFBaUc7QUFDL0YsY0FBSSxDQUFDSixRQUFMLEVBQWU7QUFDYkEsWUFBQUEsUUFBUSxHQUFJLEdBQUV6RixnQkFBaUIsTUFBL0I7QUFDRDs7QUFDRHlFLFVBQUFBLGNBQWMsR0FBRyxJQUFqQjtBQUNEO0FBQ0Y7O0FBQ0QsVUFBSW5ELE9BQU8sQ0FBQyxxQkFBRCxDQUFQLElBQWtDLGVBQWU0RCxJQUFmLENBQW9CNUQsT0FBTyxDQUFDLHFCQUFELENBQTNCLENBQXRDLEVBQTJGO0FBQ3pGOUIsd0JBQU9nQixLQUFQLENBQWMsd0JBQXVCYyxPQUFPLENBQUMscUJBQUQsQ0FBd0IsRUFBcEU7O0FBQ0EsY0FBTTRFLEtBQUssR0FBRyxxQkFBcUJkLElBQXJCLENBQTBCOUQsT0FBTyxDQUFDLHFCQUFELENBQWpDLENBQWQ7O0FBQ0EsWUFBSTRFLEtBQUosRUFBVztBQUNUVCxVQUFBQSxRQUFRLEdBQUcvRixZQUFHZ0csWUFBSCxDQUFnQlEsS0FBSyxDQUFDLENBQUQsQ0FBckIsRUFBMEI7QUFDbkNOLFlBQUFBLFdBQVcsRUFBRTdGO0FBRHNCLFdBQTFCLENBQVg7QUFHQTBFLFVBQUFBLGNBQWMsR0FBR0EsY0FBYyxJQUFJN0YsUUFBUSxDQUFDaUUsUUFBVCxDQUFrQkwsY0FBS00sT0FBTCxDQUFhMkMsUUFBYixDQUFsQixDQUFuQztBQUNEO0FBQ0Y7O0FBQ0QsVUFBSSxDQUFDQSxRQUFMLEVBQWU7QUFFYixjQUFNVSxhQUFhLEdBQUcxRCxRQUFRLEdBQzFCQSxRQUFRLENBQUMyRCxTQUFULENBQW1CLENBQW5CLEVBQXNCM0QsUUFBUSxDQUFDaEMsTUFBVCxHQUFrQnFDLE9BQU8sQ0FBQ3JDLE1BQWhELENBRDBCLEdBRTFCVCxnQkFGSjtBQUdBLFlBQUlxRyxZQUFZLEdBQUd2RCxPQUFuQjs7QUFDQSxZQUFJLENBQUNILHNCQUFzQixDQUFDRSxRQUF2QixDQUFnQ3dELFlBQWhDLENBQUwsRUFBb0Q7QUFDbEQ3RywwQkFBT0MsSUFBUCxDQUFhLCtCQUE4QjRHLFlBQWEsc0JBQTVDLEdBQ1Qsa0JBQWlCMUUsZ0JBQUUyRSxLQUFGLENBQVEzRCxzQkFBUixDQUFnQyxHQURwRDs7QUFFQTBELFVBQUFBLFlBQVksR0FBRzFFLGdCQUFFMkUsS0FBRixDQUFRM0Qsc0JBQVIsQ0FBZjtBQUNEOztBQUNEOEMsUUFBQUEsUUFBUSxHQUFJLEdBQUVVLGFBQWMsR0FBRUUsWUFBYSxFQUEzQztBQUNEOztBQUNELFlBQU1FLFVBQVUsR0FBRyxNQUFNQyxpQkFBUWhFLElBQVIsQ0FBYTtBQUNwQ2lFLFFBQUFBLE1BQU0sRUFBRWhCLFFBRDRCO0FBRXBDaUIsUUFBQUEsTUFBTSxFQUFFO0FBRjRCLE9BQWIsQ0FBekI7QUFJQWxDLE1BQUFBLE1BQU0sR0FBRyxNQUFNbUMsV0FBVyxDQUFDbkMsTUFBRCxFQUFTK0IsVUFBVCxDQUExQjtBQUNELEtBL0VELE1BK0VPLElBQUksTUFBTTdHLFlBQUdrRSxNQUFILENBQVVZLE1BQVYsQ0FBVixFQUE2QjtBQUVsQ2hGLHNCQUFPQyxJQUFQLENBQWEsb0JBQW1CK0UsTUFBTyxHQUF2Qzs7QUFDQUMsTUFBQUEsY0FBYyxHQUFHN0YsUUFBUSxDQUFDaUUsUUFBVCxDQUFrQkwsY0FBS00sT0FBTCxDQUFhMEIsTUFBYixDQUFsQixDQUFqQjtBQUNELEtBSk0sTUFJQTtBQUNMLFVBQUlvQyxZQUFZLEdBQUksdUJBQXNCcEMsTUFBTyx1Q0FBakQ7O0FBRUEsVUFBSTdDLGdCQUFFd0MsUUFBRixDQUFXUyxRQUFYLEtBQXdCQSxRQUFRLENBQUNuRSxNQUFULEdBQWtCLENBQTlDLEVBQWlEO0FBQy9DbUcsUUFBQUEsWUFBWSxHQUFJLGlCQUFnQmhDLFFBQVMsY0FBYUosTUFBTyxzQkFBOUMsR0FDWiwrQ0FESDtBQUVEOztBQUNELFlBQU0sSUFBSXpCLEtBQUosQ0FBVTZELFlBQVYsQ0FBTjtBQUNEOztBQUVELFVBQU1DLGNBQWMsR0FBRyxDQUFDLE1BQU1uSCxZQUFHbUUsSUFBSCxDQUFRVyxNQUFSLENBQVAsRUFBd0JzQyxNQUF4QixFQUF2Qjs7QUFDQSxRQUFJRCxjQUFKLEVBQW9CO0FBQ2xCbkMsTUFBQUEsV0FBVyxHQUFHLE1BQU1wQixzQkFBc0IsQ0FBQ2tCLE1BQUQsQ0FBMUM7QUFDRDs7QUFFRCxRQUFJcUMsY0FBYyxJQUFJcEMsY0FBbEIsSUFBb0MsQ0FBQzlDLGdCQUFFb0YsVUFBRixDQUFhM0MsYUFBYixDQUF6QyxFQUFzRTtBQUNwRSxZQUFNNEMsV0FBVyxHQUFHeEMsTUFBcEI7O0FBQ0EsVUFBSUUsV0FBVyxNQUFLakQsYUFBTCxhQUFLQSxhQUFMLHVCQUFLQSxhQUFhLENBQUVpRCxXQUFwQixDQUFmLEVBQWdEO0FBQzlDLGNBQU07QUFBQ25GLFVBQUFBO0FBQUQsWUFBYWtDLGFBQW5COztBQUNBLFlBQUksTUFBTWdDLGdCQUFnQixDQUFDbEUsUUFBRCxFQUFXa0MsYUFBWCxhQUFXQSxhQUFYLHVCQUFXQSxhQUFhLENBQUU4RCxTQUExQixDQUExQixFQUFnRTtBQUM5RCxjQUFJeUIsV0FBVyxLQUFLMUgsR0FBcEIsRUFBeUI7QUFDdkIsa0JBQU1JLFlBQUdDLE1BQUgsQ0FBVXFILFdBQVYsQ0FBTjtBQUNEOztBQUNEeEgsMEJBQU9DLElBQVAsQ0FBYSxnREFBK0NGLFFBQVMsR0FBckU7O0FBQ0EsaUJBQU9tRCxrQkFBa0IsQ0FBQ25ELFFBQUQsRUFBV29ELHNCQUFYLENBQXpCO0FBQ0Q7O0FBQ0RuRCx3QkFBT0MsSUFBUCxDQUFhLHVCQUFzQkYsUUFBUywyQkFBaEMsR0FDVCwrREFESDs7QUFFQVAsUUFBQUEsa0JBQWtCLENBQUN3RyxHQUFuQixDQUF1QmxHLEdBQXZCO0FBQ0Q7O0FBQ0QsWUFBTTJILE9BQU8sR0FBRyxNQUFNVCxpQkFBUVUsT0FBUixFQUF0Qjs7QUFDQSxVQUFJO0FBQ0YxQyxRQUFBQSxNQUFNLEdBQUcsTUFBTTJDLFFBQVEsQ0FBQ0gsV0FBRCxFQUFjQyxPQUFkLEVBQXVCdEUsc0JBQXZCLENBQXZCO0FBQ0QsT0FGRCxTQUVVO0FBQ1IsWUFBSTZCLE1BQU0sS0FBS3dDLFdBQVgsSUFBMEJBLFdBQVcsS0FBSzFILEdBQTlDLEVBQW1EO0FBQ2pELGdCQUFNSSxZQUFHQyxNQUFILENBQVVxSCxXQUFWLENBQU47QUFDRDtBQUNGOztBQUNEeEgsc0JBQU9DLElBQVAsQ0FBYSwwQkFBeUIrRSxNQUFPLEdBQTdDO0FBQ0QsS0F4QkQsTUF3Qk8sSUFBSSxDQUFDaEMsY0FBSzRFLFVBQUwsQ0FBZ0I1QyxNQUFoQixDQUFMLEVBQThCO0FBQ25DQSxNQUFBQSxNQUFNLEdBQUdoQyxjQUFLNkUsT0FBTCxDQUFhbkgsT0FBTyxDQUFDaUQsR0FBUixFQUFiLEVBQTRCcUIsTUFBNUIsQ0FBVDs7QUFDQWhGLHNCQUFPdUIsSUFBUCxDQUFhLGlDQUFnQ3pCLEdBQUksb0JBQXJDLEdBQ1QsOEJBQTZCa0YsTUFBTyx1REFEdkM7O0FBRUFsRixNQUFBQSxHQUFHLEdBQUdrRixNQUFOO0FBQ0Q7O0FBRUQsVUFBTThDLGVBQWUsR0FBRyxNQUFPQyxjQUFQLElBQTBCO0FBQ2hELFlBQU1DLGNBQWMsR0FBRy9GLGFBQUgsYUFBR0EsYUFBSCx1QkFBR0EsYUFBYSxDQUFFbEMsUUFBdEM7O0FBQ0EsVUFBSWlJLGNBQWMsSUFBSUEsY0FBYyxLQUFLRCxjQUF6QyxFQUF5RDtBQUN2RCxjQUFNN0gsWUFBR0MsTUFBSCxDQUFVNkgsY0FBVixDQUFOO0FBQ0Q7O0FBQ0QsWUFBTWpDLFNBQVMsR0FBRyxFQUFsQjs7QUFDQSxVQUFJLENBQUMsTUFBTTdGLFlBQUdtRSxJQUFILENBQVEwRCxjQUFSLENBQVAsRUFBZ0N6RCxXQUFoQyxFQUFKLEVBQW1EO0FBQ2pEeUIsUUFBQUEsU0FBUyxDQUFDeEIsTUFBVixHQUFtQixNQUFNZix3QkFBd0IsQ0FBQ3VFLGNBQUQsQ0FBakQ7QUFDRCxPQUZELE1BRU87QUFDTGhDLFFBQUFBLFNBQVMsQ0FBQ3ZCLElBQVYsR0FBaUIsTUFBTVYsc0JBQXNCLENBQUNpRSxjQUFELENBQTdDO0FBQ0Q7O0FBQ0R2SSxNQUFBQSxrQkFBa0IsQ0FBQ3lJLEdBQW5CLENBQXVCbkksR0FBdkIsRUFBNEIsRUFDMUIsR0FBR3FGLGNBRHVCO0FBRTFCeEMsUUFBQUEsU0FBUyxFQUFFRyxJQUFJLENBQUNDLEdBQUwsRUFGZTtBQUcxQm1DLFFBQUFBLFdBSDBCO0FBSTFCYSxRQUFBQSxTQUowQjtBQUsxQmhHLFFBQUFBLFFBQVEsRUFBRWdJO0FBTGdCLE9BQTVCO0FBT0EsYUFBT0EsY0FBUDtBQUNELEtBbkJEOztBQXFCQSxRQUFJNUYsZ0JBQUVvRixVQUFGLENBQWEzQyxhQUFiLENBQUosRUFBaUM7QUFDL0IsWUFBTXNELE1BQU0sR0FBRyxNQUFNdEQsYUFBYSxDQUFDO0FBQ2pDM0MsUUFBQUEsYUFBYSxFQUFFRSxnQkFBRWdHLEtBQUYsQ0FBUWxHLGFBQVIsQ0FEa0I7QUFFakNzRCxRQUFBQSxLQUZpQztBQUdqQ3pELFFBQUFBLE9BQU8sRUFBRUssZ0JBQUVnRyxLQUFGLENBQVFyRyxPQUFSLENBSHdCO0FBSWpDVixRQUFBQSxPQUFPLEVBQUU0RDtBQUp3QixPQUFELENBQWxDO0FBTUEsYUFBUSxFQUFDa0QsTUFBRCxhQUFDQSxNQUFELGVBQUNBLE1BQU0sQ0FBRTlHLE9BQVQsS0FBb0J0QixHQUFHLE1BQUtvSSxNQUFMLGFBQUtBLE1BQUwsdUJBQUtBLE1BQU0sQ0FBRTlHLE9BQWIsQ0FBdkIsSUFBK0MsRUFBQyxNQUFNbEIsWUFBR2tFLE1BQUgsQ0FBVThELE1BQVYsYUFBVUEsTUFBVix1QkFBVUEsTUFBTSxDQUFFOUcsT0FBbEIsQ0FBUCxDQUFoRCxHQUNINEQsTUFERyxHQUVILE1BQU04QyxlQUFlLENBQUNJLE1BQU0sQ0FBQzlHLE9BQVIsQ0FGekI7QUFHRDs7QUFFRDhCLElBQUFBLGtCQUFrQixDQUFDOEIsTUFBRCxFQUFTN0Isc0JBQVQsQ0FBbEI7QUFDQSxXQUFRckQsR0FBRyxLQUFLa0YsTUFBUixLQUFtQkUsV0FBVyxJQUFJL0MsZ0JBQUVyQixNQUFGLENBQVNxRSxjQUFULEVBQXlCbUIsSUFBekIsQ0FBOEI4QixPQUE5QixDQUFsQyxDQUFELEdBQ0gsTUFBTU4sZUFBZSxDQUFDOUMsTUFBRCxDQURsQixHQUVIQSxNQUZKO0FBR0QsR0F2S1ksQ0FBYjtBQXdLRDs7QUFFRCxlQUFlbUMsV0FBZixDQUE0QnJILEdBQTVCLEVBQWlDaUgsVUFBakMsRUFBNkM7QUFDM0MsUUFBTTtBQUFDc0IsSUFBQUE7QUFBRCxNQUFTMUcsYUFBSTJELEtBQUosQ0FBVXhGLEdBQVYsQ0FBZjs7QUFDQSxNQUFJO0FBQ0YsVUFBTXdJLGFBQUlDLFlBQUosQ0FBaUJGLElBQWpCLEVBQXVCdEIsVUFBdkIsRUFBbUM7QUFDdkNsRixNQUFBQSxPQUFPLEVBQUVwQjtBQUQ4QixLQUFuQyxDQUFOO0FBR0QsR0FKRCxDQUlFLE9BQU8rSCxHQUFQLEVBQVk7QUFDWixVQUFNLElBQUlqRixLQUFKLENBQVcsK0JBQThCaUYsR0FBRyxDQUFDaEgsT0FBUSxFQUFyRCxDQUFOO0FBQ0Q7O0FBQ0QsU0FBT3VGLFVBQVA7QUFDRDs7QUFlRCxlQUFlWSxRQUFmLENBQXlCYyxPQUF6QixFQUFrQ0MsT0FBbEMsRUFBMkN2RixzQkFBM0MsRUFBbUU7QUFDakUsUUFBTXdGLGFBQUlDLGNBQUosQ0FBbUJILE9BQW5CLENBQU47O0FBRUEsTUFBSSxDQUFDdEcsZ0JBQUUwQyxPQUFGLENBQVUxQixzQkFBVixDQUFMLEVBQXdDO0FBQ3RDQSxJQUFBQSxzQkFBc0IsR0FBRyxDQUFDQSxzQkFBRCxDQUF6QjtBQUNEOztBQUVELFFBQU1zRSxPQUFPLEdBQUcsTUFBTVQsaUJBQVFVLE9BQVIsRUFBdEI7O0FBQ0EsTUFBSTtBQUNGMUgsb0JBQU9nQixLQUFQLENBQWMsY0FBYXlILE9BQVEsR0FBbkM7O0FBQ0EsVUFBTUksS0FBSyxHQUFHLElBQUlDLGdCQUFPQyxLQUFYLEdBQW1CQyxLQUFuQixFQUFkO0FBQ0EsVUFBTUMsaUJBQWlCLEdBQUd2SSxPQUFPLENBQUN3SSxHQUFSLENBQVlDLDBCQUF0QztBQUNBLFVBQU1DLGNBQWMsR0FBR2pILGdCQUFFNEMsT0FBRixDQUFVa0UsaUJBQVYsS0FDbEIsQ0FBQyxDQUFDLEdBQUQsRUFBTSxPQUFOLEVBQWU1RixRQUFmLENBQXdCbEIsZ0JBQUVpQixPQUFGLENBQVU2RixpQkFBVixDQUF4QixDQUROO0FBUUEsVUFBTUksY0FBYyxHQUFHO0FBQUNELE1BQUFBO0FBQUQsS0FBdkI7O0FBRUEsUUFBSXBHLGNBQUtNLE9BQUwsQ0FBYW1GLE9BQWIsTUFBMEJ0SixPQUE5QixFQUF1QztBQUNyQ2Esc0JBQU9nQixLQUFQLENBQWMsNkRBQTREZ0MsY0FBS0MsUUFBTCxDQUFjd0YsT0FBZCxDQUF1QixHQUFqRzs7QUFDQVksTUFBQUEsY0FBYyxDQUFDQyxpQkFBZixHQUFtQyxNQUFuQztBQUNEOztBQUNELFVBQU1YLGFBQUlZLFlBQUosQ0FBaUJkLE9BQWpCLEVBQTBCaEIsT0FBMUIsRUFBbUM0QixjQUFuQyxDQUFOO0FBQ0EsVUFBTUcsV0FBVyxHQUFJLFVBQVNyRyxzQkFBc0IsQ0FBQ3BDLEdBQXZCLENBQTRCMEksR0FBRCxJQUFTQSxHQUFHLENBQUNDLE9BQUosQ0FBWSxLQUFaLEVBQW1CLEVBQW5CLENBQXBDLEVBQTREQyxJQUE1RCxDQUFpRSxHQUFqRSxDQUFzRSxHQUFwRztBQUNBLFVBQU1DLGlCQUFpQixHQUFHLENBQUMsTUFBTTFKLFlBQUd3RCxJQUFILENBQVE4RixXQUFSLEVBQXFCO0FBQ3BEN0YsTUFBQUEsR0FBRyxFQUFFOEQsT0FEK0M7QUFFcEQ3RCxNQUFBQSxNQUFNLEVBQUU7QUFGNEMsS0FBckIsQ0FBUCxFQUl0QmlHLElBSnNCLENBSWpCLENBQUNDLENBQUQsRUFBSUMsQ0FBSixLQUFVRCxDQUFDLENBQUNFLEtBQUYsQ0FBUWhILGNBQUtpSCxHQUFiLEVBQWtCaEosTUFBbEIsR0FBMkI4SSxDQUFDLENBQUNDLEtBQUYsQ0FBUWhILGNBQUtpSCxHQUFiLEVBQWtCaEosTUFKdEMsQ0FBMUI7O0FBS0EsUUFBSWtCLGdCQUFFNEMsT0FBRixDQUFVNkUsaUJBQVYsQ0FBSixFQUFrQztBQUNoQzVKLHNCQUFPa0ssYUFBUCxDQUFzQiwrQ0FBOEMvRyxzQkFBdUIsSUFBdEUsR0FDbkJqQyxjQUFLQyxTQUFMLENBQWUsUUFBZixFQUF5QmdDLHNCQUFzQixDQUFDbEMsTUFBaEQsRUFBd0QsS0FBeEQsQ0FEbUIsR0FFbEIsc0VBRmtCLEdBR2xCLElBQUdrQyxzQkFBdUIsS0FBSWpDLGNBQUtDLFNBQUwsQ0FBZSxXQUFmLEVBQTRCZ0Msc0JBQXNCLENBQUNsQyxNQUFuRCxFQUEyRCxLQUEzRCxDQUFrRSxFQUhuRztBQUlEOztBQUNEakIsb0JBQU9nQixLQUFQLENBQWMsYUFBWUUsY0FBS0MsU0FBTCxDQUFlLGFBQWYsRUFBOEJ5SSxpQkFBaUIsQ0FBQzNJLE1BQWhELEVBQXdELElBQXhELENBQThELEdBQTNFLEdBQ1YsU0FBUXdILE9BQVEsUUFBTzBCLElBQUksQ0FBQ0MsS0FBTCxDQUFXdkIsS0FBSyxDQUFDd0IsV0FBTixHQUFvQkMsY0FBL0IsQ0FBK0MsT0FBTVYsaUJBQWtCLEVBRGpHOztBQUVBLFVBQU1XLGFBQWEsR0FBR3BJLGdCQUFFMkUsS0FBRixDQUFROEMsaUJBQVIsQ0FBdEI7O0FBQ0E1SixvQkFBT0MsSUFBUCxDQUFhLGFBQVlzSyxhQUFjLHlCQUF2Qzs7QUFDQSxVQUFNQyxPQUFPLEdBQUd4SCxjQUFLNkUsT0FBTCxDQUFhYSxPQUFiLEVBQXNCMUYsY0FBS0MsUUFBTCxDQUFjc0gsYUFBZCxDQUF0QixDQUFoQjs7QUFDQSxVQUFNckssWUFBR3VLLEVBQUgsQ0FBTXpILGNBQUs2RSxPQUFMLENBQWFKLE9BQWIsRUFBc0I4QyxhQUF0QixDQUFOLEVBQTRDQyxPQUE1QyxFQUFxRDtBQUFDRSxNQUFBQSxNQUFNLEVBQUU7QUFBVCxLQUFyRCxDQUFOO0FBQ0EsV0FBT0YsT0FBUDtBQUNELEdBdENELFNBc0NVO0FBQ1IsVUFBTXRLLFlBQUdDLE1BQUgsQ0FBVXNILE9BQVYsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQsU0FBU2tELGlCQUFULENBQTRCN0ssR0FBNUIsRUFBaUM7QUFDL0IsU0FBUSx1Q0FBRCxDQUEwQzRGLElBQTFDLENBQStDNUYsR0FBL0MsQ0FBUDtBQUNEOztBQVlELFNBQVM4SyxhQUFULENBQXdCQyxLQUF4QixFQUErQkMsUUFBL0IsRUFBeUNDLFNBQXpDLEVBQW9EO0FBRWxELE1BQUk1SSxnQkFBRTBDLE9BQUYsQ0FBVWdHLEtBQVYsQ0FBSixFQUFzQjtBQUNwQixXQUFPQSxLQUFLLENBQUM5SixHQUFOLENBQVdpSyxJQUFELElBQVVKLGFBQWEsQ0FBQ0ksSUFBRCxFQUFPRixRQUFQLEVBQWlCQyxTQUFqQixDQUFqQyxDQUFQO0FBQ0Q7O0FBR0QsTUFBSTVJLGdCQUFFQyxhQUFGLENBQWdCeUksS0FBaEIsQ0FBSixFQUE0QjtBQUMxQixVQUFNSSxTQUFTLEdBQUcsRUFBbEI7O0FBQ0EsU0FBSyxJQUFJLENBQUNDLEdBQUQsRUFBTUMsS0FBTixDQUFULElBQXlCaEosZ0JBQUVpSixPQUFGLENBQVVQLEtBQVYsQ0FBekIsRUFBMkM7QUFDekMsWUFBTVEsc0JBQXNCLEdBQUdULGFBQWEsQ0FBQ08sS0FBRCxFQUFRTCxRQUFSLEVBQWtCQyxTQUFsQixDQUE1Qzs7QUFDQSxVQUFJRyxHQUFHLEtBQUtKLFFBQVosRUFBc0I7QUFDcEJHLFFBQUFBLFNBQVMsQ0FBQ0YsU0FBRCxDQUFULEdBQXVCTSxzQkFBdkI7QUFDRCxPQUZELE1BRU8sSUFBSUgsR0FBRyxLQUFLSCxTQUFaLEVBQXVCO0FBQzVCRSxRQUFBQSxTQUFTLENBQUNILFFBQUQsQ0FBVCxHQUFzQk8sc0JBQXRCO0FBQ0Q7O0FBQ0RKLE1BQUFBLFNBQVMsQ0FBQ0MsR0FBRCxDQUFULEdBQWlCRyxzQkFBakI7QUFDRDs7QUFDRCxXQUFPSixTQUFQO0FBQ0Q7O0FBR0QsU0FBT0osS0FBUDtBQUNEOztBQVFELFNBQVNTLGNBQVQsQ0FBeUJDLEdBQXpCLEVBQThCO0FBQzVCLE1BQUlwSixnQkFBRTBDLE9BQUYsQ0FBVTBHLEdBQVYsQ0FBSixFQUFvQjtBQUNsQixXQUFPQSxHQUFQO0FBQ0Q7O0FBRUQsTUFBSUMsVUFBSjs7QUFDQSxNQUFJO0FBQ0ZBLElBQUFBLFVBQVUsR0FBR0MsSUFBSSxDQUFDbkcsS0FBTCxDQUFXaUcsR0FBWCxDQUFiOztBQUNBLFFBQUlwSixnQkFBRTBDLE9BQUYsQ0FBVTJHLFVBQVYsQ0FBSixFQUEyQjtBQUN6QixhQUFPQSxVQUFQO0FBQ0Q7QUFDRixHQUxELENBS0UsT0FBT0UsR0FBUCxFQUFZO0FBQ1oxTCxvQkFBT3VCLElBQVAsQ0FBYSwwQ0FBYjtBQUNEOztBQUNELE1BQUlZLGdCQUFFd0MsUUFBRixDQUFXNEcsR0FBWCxDQUFKLEVBQXFCO0FBQ25CLFdBQU8sQ0FBQ0EsR0FBRCxDQUFQO0FBQ0Q7O0FBQ0QsUUFBTSxJQUFJaEksS0FBSixDQUFXLGlEQUFnRGdJLEdBQUksRUFBL0QsQ0FBTjtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHVybCBmcm9tICd1cmwnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyB0ZW1wRGlyLCBmcywgdXRpbCwgemlwLCBuZXQsIHRpbWluZyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgQXN5bmNMb2NrIGZyb20gJ2FzeW5jLWxvY2snO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuY29uc3QgSVBBX0VYVCA9ICcuaXBhJztcbmNvbnN0IFpJUF9FWFRTID0gWycuemlwJywgSVBBX0VYVF07XG5jb25zdCBaSVBfTUlNRV9UWVBFUyA9IFtcbiAgJ2FwcGxpY2F0aW9uL3ppcCcsXG4gICdhcHBsaWNhdGlvbi94LXppcC1jb21wcmVzc2VkJyxcbiAgJ211bHRpcGFydC94LXppcCcsXG5dO1xuY29uc3QgQ0FDSEVEX0FQUFNfTUFYX0FHRSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7IC8vIG1zXG5jb25zdCBNQVhfQ0FDSEVEX0FQUFMgPSAxMDI0O1xuY29uc3QgQVBQTElDQVRJT05TX0NBQ0hFID0gbmV3IExSVSh7XG4gIG1heDogTUFYX0NBQ0hFRF9BUFBTLFxuICB0dGw6IENBQ0hFRF9BUFBTX01BWF9BR0UsIC8vIGV4cGlyZSBhZnRlciAyNCBob3Vyc1xuICB1cGRhdGVBZ2VPbkdldDogdHJ1ZSxcbiAgZGlzcG9zZTogKGFwcCwge2Z1bGxQYXRofSkgPT4ge1xuICAgIGxvZ2dlci5pbmZvKGBUaGUgYXBwbGljYXRpb24gJyR7YXBwfScgY2FjaGVkIGF0ICcke2Z1bGxQYXRofScgaGFzIGAgK1xuICAgICAgYGV4cGlyZWQgYWZ0ZXIgJHtDQUNIRURfQVBQU19NQVhfQUdFfW1zYCk7XG4gICAgaWYgKGZ1bGxQYXRoKSB7XG4gICAgICBmcy5yaW1yYWYoZnVsbFBhdGgpO1xuICAgIH1cbiAgfSxcbiAgbm9EaXNwb3NlT25TZXQ6IHRydWUsXG59KTtcbmNvbnN0IEFQUExJQ0FUSU9OU19DQUNIRV9HVUFSRCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IFNBTklUSVpFX1JFUExBQ0VNRU5UID0gJy0nO1xuY29uc3QgREVGQVVMVF9CQVNFTkFNRSA9ICdhcHBpdW0tYXBwJztcbmNvbnN0IEFQUF9ET1dOTE9BRF9USU1FT1VUX01TID0gMTIwICogMTAwMDtcblxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHtcbiAgaWYgKEFQUExJQ0FUSU9OU19DQUNIRS5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYXBwUGF0aHMgPSBbLi4uQVBQTElDQVRJT05TX0NBQ0hFLnZhbHVlcygpXVxuICAgIC5tYXAoKHtmdWxsUGF0aH0pID0+IGZ1bGxQYXRoKTtcbiAgbG9nZ2VyLmRlYnVnKGBQZXJmb3JtaW5nIGNsZWFudXAgb2YgJHthcHBQYXRocy5sZW5ndGh9IGNhY2hlZCBgICtcbiAgICB1dGlsLnBsdXJhbGl6ZSgnYXBwbGljYXRpb24nLCBhcHBQYXRocy5sZW5ndGgpKTtcbiAgZm9yIChjb25zdCBhcHBQYXRoIG9mIGFwcFBhdGhzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFzeW5jaHJvbm91cyBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBpbiBvbkV4aXQgaGFuZGxlclxuICAgICAgZnMucmltcmFmU3luYyhhcHBQYXRoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIud2FybihlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufSk7XG5cblxuYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVIZWFkZXJzIChsaW5rKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBheGlvcyh7XG4gICAgICB1cmw6IGxpbmssXG4gICAgICBtZXRob2Q6ICdIRUFEJyxcbiAgICAgIHRpbWVvdXQ6IDUwMDAsXG4gICAgfSkpLmhlYWRlcnM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuaW5mbyhgQ2Fubm90IHNlbmQgSEVBRCByZXF1ZXN0IHRvICcke2xpbmt9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2FjaGVkQXBwbGljYXRpb25QYXRoIChsaW5rLCBjdXJyZW50QXBwUHJvcHMgPSB7fSwgY2FjaGVkQXBwSW5mbyA9IHt9KSB7XG4gIGNvbnN0IHJlZnJlc2ggPSAoKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBBIGZyZXNoIGNvcHkgb2YgdGhlIGFwcGxpY2F0aW9uIGlzIGdvaW5nIHRvIGJlIGRvd25sb2FkZWQgZnJvbSAke2xpbmt9YCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FjaGVkQXBwSW5mbykgfHwgIV8uaXNQbGFpbk9iamVjdChjdXJyZW50QXBwUHJvcHMpKSB7XG4gICAgLy8gaWYgYW4gaW52YWxpZCBhcmcgaXMgcGFzc2VkIHRoZW4gYXNzdW1lIGNhY2hlIG1pc3NcbiAgICByZXR1cm4gcmVmcmVzaCgpO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxhc3RNb2RpZmllZDogY3VycmVudE1vZGlmaWVkLFxuICAgIGltbXV0YWJsZTogY3VycmVudEltbXV0YWJsZSxcbiAgICAvLyBtYXhBZ2UgaXMgaW4gc2Vjb25kc1xuICAgIG1heEFnZTogY3VycmVudE1heEFnZSxcbiAgfSA9IGN1cnJlbnRBcHBQcm9wcztcbiAgY29uc3Qge1xuICAgIC8vIERhdGUgaW5zdGFuY2VcbiAgICBsYXN0TW9kaWZpZWQsXG4gICAgLy8gYm9vbGVhblxuICAgIGltbXV0YWJsZSxcbiAgICAvLyBVbml4IHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gICAgdGltZXN0YW1wLFxuICAgIGZ1bGxQYXRoLFxuICB9ID0gY2FjaGVkQXBwSW5mbztcbiAgaWYgKGxhc3RNb2RpZmllZCAmJiBjdXJyZW50TW9kaWZpZWQpIHtcbiAgICBpZiAoY3VycmVudE1vZGlmaWVkLmdldFRpbWUoKSA8PSBsYXN0TW9kaWZpZWQuZ2V0VGltZSgpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYFRoZSBhcHBsaWNhdGlvbiBhdCAke2xpbmt9IGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSAke2xhc3RNb2RpZmllZH1gKTtcbiAgICAgIHJldHVybiBmdWxsUGF0aDtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBUaGUgYXBwbGljYXRpb24gYXQgJHtsaW5rfSBoYXMgYmVlbiBtb2RpZmllZCBzaW5jZSAke2xhc3RNb2RpZmllZH1gKTtcbiAgICByZXR1cm4gcmVmcmVzaCgpO1xuICB9XG4gIGlmIChpbW11dGFibGUgJiYgY3VycmVudEltbXV0YWJsZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgVGhlIGFwcGxpY2F0aW9uIGF0ICR7bGlua30gaXMgaW1tdXRhYmxlYCk7XG4gICAgcmV0dXJuIGZ1bGxQYXRoO1xuICB9XG4gIGlmIChjdXJyZW50TWF4QWdlICYmIHRpbWVzdGFtcCkge1xuICAgIGNvbnN0IG1zTGVmdCA9IHRpbWVzdGFtcCArIGN1cnJlbnRNYXhBZ2UgKiAxMDAwIC0gRGF0ZS5ub3coKTtcbiAgICBpZiAobXNMZWZ0ID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBUaGUgY2FjaGVkIGFwcGxpY2F0aW9uICcke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfScgd2lsbCBleHBpcmUgaW4gJHttc0xlZnQgLyAxMDAwfXNgKTtcbiAgICAgIHJldHVybiBmdWxsUGF0aDtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBUaGUgY2FjaGVkIGFwcGxpY2F0aW9uICcke3BhdGguYmFzZW5hbWUoZnVsbFBhdGgpfScgaGFzIGV4cGlyZWRgKTtcbiAgfVxuICByZXR1cm4gcmVmcmVzaCgpO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlBcHBFeHRlbnNpb24gKGFwcCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucykge1xuICBpZiAoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucy5tYXAoXy50b0xvd2VyKS5pbmNsdWRlcyhfLnRvTG93ZXIocGF0aC5leHRuYW1lKGFwcCkpKSkge1xuICAgIHJldHVybiBhcHA7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBOZXcgYXBwIHBhdGggJyR7YXBwfScgZGlkIG5vdCBoYXZlIGAgK1xuICAgIGAke3V0aWwucGx1cmFsaXplKCdleHRlbnNpb24nLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLmxlbmd0aCwgZmFsc2UpfTogYCArXG4gICAgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbGN1bGF0ZUZvbGRlckludGVncml0eSAoZm9sZGVyUGF0aCkge1xuICByZXR1cm4gKGF3YWl0IGZzLmdsb2IoJyoqLyonLCB7Y3dkOiBmb2xkZXJQYXRoLCBzdHJpY3Q6IGZhbHNlLCBub3NvcnQ6IHRydWV9KSkubGVuZ3RoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxjdWxhdGVGaWxlSW50ZWdyaXR5IChmaWxlUGF0aCkge1xuICByZXR1cm4gYXdhaXQgZnMuaGFzaChmaWxlUGF0aCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzQXBwSW50ZWdyaXR5T2sgKGN1cnJlbnRQYXRoLCBleHBlY3RlZEludGVncml0eSA9IHt9KSB7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGN1cnJlbnRQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEZvbGRlciBpbnRlZ3JpdHkgY2hlY2sgaXMgc2ltcGxlOlxuICAvLyBWZXJpZnkgdGhlIHByZXZpb3VzIGFtb3VudCBvZiBmaWxlcyBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZS5cbiAgLy8gV2UgZG9uJ3Qgd2FudCB0byB1c2UgZXF1YWxpdHkgY29tcGFyaXNvbiBiZWNhdXNlIG9mIGFuIGFzc3VtcHRpb24gdGhhdCB0aGUgT1MgbWlnaHRcbiAgLy8gY3JlYXRlIHNvbWUgdW53YW50ZWQgc2VydmljZSBmaWxlcy9jYWNoZWQgaW5zaWRlIG9mIHRoYXQgZm9sZGVyIG9yIGl0cyBzdWJmb2xkZXJzLlxuICAvLyBPZmMsIHZhbGlkYXRpbmcgdGhlIGhhc2ggc3VtIG9mIGVhY2ggZmlsZSAob3IgYXQgbGVhc3Qgb2YgZmlsZSBwYXRoKSB3b3VsZCBiZSBtdWNoXG4gIC8vIG1vcmUgcHJlY2lzZSwgYnV0IHdlIGRvbid0IG5lZWQgdG8gYmUgdmVyeSBwcmVjaXNlIGhlcmUgYW5kIGFsc28gZG9uJ3Qgd2FudCB0b1xuICAvLyBvdmVydXNlIFJBTSBhbmQgaGF2ZSBhIHBlcmZvcm1hbmNlIGRyb3AuXG4gIHJldHVybiAoYXdhaXQgZnMuc3RhdChjdXJyZW50UGF0aCkpLmlzRGlyZWN0b3J5KClcbiAgICA/IGF3YWl0IGNhbGN1bGF0ZUZvbGRlckludGVncml0eShjdXJyZW50UGF0aCkgPj0gZXhwZWN0ZWRJbnRlZ3JpdHk/LmZvbGRlclxuICAgIDogYXdhaXQgY2FsY3VsYXRlRmlsZUludGVncml0eShjdXJyZW50UGF0aCkgPT09IGV4cGVjdGVkSW50ZWdyaXR5Py5maWxlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIFBvc3RQcm9jZXNzT3B0aW9uc1xuICogQHByb3BlcnR5IHs/T2JqZWN0fSBjYWNoZWRBcHBJbmZvIFRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJldmlvdXNseSBjYWNoZWQgYXBwIGluc3RhbmNlIChpZiBleGlzdHMpOlxuICogICAgLSBwYWNrYWdlSGFzaDogU0hBMSBoYXNoIG9mIHRoZSBwYWNrYWdlIGlmIGl0IGlzIGEgZmlsZSBhbmQgbm90IGEgZm9sZGVyXG4gKiAgICAtIGxhc3RNb2RpZmllZDogT3B0aW9uYWwgRGF0ZSBpbnN0YW5jZSwgdGhlIHZhbHVlIG9mIGZpbGUncyBgTGFzdC1Nb2RpZmllZGAgaGVhZGVyXG4gKiAgICAtIGltbXV0YWJsZTogT3B0aW9uYWwgYm9vbGVhbiB2YWx1ZS4gQ29udGFpbnMgdHJ1ZSBpZiB0aGUgZmlsZSBoYXMgYW4gYGltbXV0YWJsZWAgbWFya1xuICogICAgICAgICAgICAgICAgIGluIGBDYWNoZS1jb250cm9sYCBoZWFkZXJcbiAqICAgIC0gbWF4QWdlOiBPcHRpb25hbCBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIGBtYXhBZ2VgIHBhcmFtZXRlciBpbiBgQ2FjaGUtY29udHJvbGAgaGVhZGVyXG4gKiAgICAtIHRpbWVzdGFtcDogVGhlIHRpbWVzdGFtcCB0aGlzIGl0ZW0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGNhY2hlIChtZWFzdXJlZCBpbiBVbml4IGVwb2NoXG4gKiAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzKVxuICogICAgLSBpbnRlZ3JpdHk6IEFuIG9iamVjdCBjb250YWluaW5nIGVpdGhlciBgZmlsZWAgcHJvcGVydHkgd2l0aCBTSEExIGhhc2ggb2YgdGhlIGZpbGVcbiAqICAgICAgICAgICAgICAgICBvciBgZm9sZGVyYCBwcm9wZXJ0eSB3aXRoIHRvdGFsIGFtb3VudCBvZiBjYWNoZWQgZmlsZXMgYW5kIHN1YmZvbGRlcnNcbiAqICAgIC0gZnVsbFBhdGg6IHRoZSBmdWxsIHBhdGggdG8gdGhlIGNhY2hlZCBhcHBcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNVcmwgV2hldGhlciB0aGUgYXBwIGhhcyBiZWVuIGRvd25sb2FkZWQgZnJvbSBhIHJlbW90ZSBVUkxcbiAqIEBwcm9wZXJ0eSB7P09iamVjdH0gaGVhZGVycyBPcHRpb25hbCBoZWFkZXJzIG9iamVjdC4gT25seSBwcmVzZW50IGlmIGBpc1VybGAgaXMgdHJ1ZSBhbmQgaWYgdGhlIHNlcnZlclxuICogcmVzcG9uZHMgdG8gSEVBRCByZXF1ZXN0cy4gQWxsIGhlYWRlciBuYW1lcyBhcmUgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUGF0aCBBIHN0cmluZyBjb250YWluaW5nIGZ1bGwgcGF0aCB0byB0aGUgcHJlcHJvY2Vzc2VkIGFwcGxpY2F0aW9uIHBhY2thZ2UgKGVpdGhlclxuICogZG93bmxvYWRlZCBvciBhIGxvY2FsIG9uZSlcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFBvc3RQcm9jZXNzUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUGF0aCBUaGUgZnVsbCBwYXN0IHRvIHRoZSBwb3N0LXByb2Nlc3NlZCBhcHBsaWNhdGlvbiBwYWNrYWdlIG9uIHRoZVxuICogbG9jYWwgZmlsZSBzeXN0ZW0gKG1pZ2h0IGJlIGEgZmlsZSBvciBhIGZvbGRlciBwYXRoKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgQ29uZmlndXJlQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHsob2JqOiBQb3N0UHJvY2Vzc09wdGlvbnMpID0+IChQcm9taXNlPFBvc3RQcm9jZXNzUmVzdWx0fHVuZGVmaW5lZD58UG9zdFByb2Nlc3NSZXN1bHR8dW5kZWZpbmVkKX0gb25Qb3N0UHJvY2Vzc1xuICogT3B0aW9uYWwgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBiZSBhcHBsaWVkXG4gKiB0byB0aGUgYXBwbGljYXRpb24gYWZ0ZXIgaXQgaXMgZG93bmxvYWRlZC9wcmVwcm9jZXNzZWQuIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGFzeW5jXG4gKiBhbmQgaXMgZXhwZWN0ZWQgdG8gYWNjZXB0IHNpbmdsZSBvYmplY3QgcGFyYW1ldGVyLlxuICogVGhlIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIGVpdGhlciByZXR1cm4gYSBmYWxzeSB2YWx1ZSwgd2hpY2ggbWVhbnMgdGhlIGFwcCBtdXN0IG5vdCBiZVxuICogY2FjaGVkIGFuZCBhIGZyZXNoIGNvcHkgb2YgaXQgaXMgZG93bmxvYWRlZCBlYWNoIHRpbWUuIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3RcbiAqIGNvbnRhaW5pbmcgYGFwcFBhdGhgIHByb3BlcnR5IHRoZW4gdGhlIGludGVncml0eSBvZiBpdCB3aWxsIGJlIHZlcmlmaWVkIGFuZCBzdG9yZWQgaW50b1xuICogdGhlIGNhY2hlLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gc3VwcG9ydGVkRXh0ZW5zaW9ucyBMaXN0IG9mIHN1cHBvcnRlZCBhcHBsaWNhdGlvbiBleHRlbnNpb25zIChcbiAqIGluY2x1ZGluZyBzdGFydGluZyBkb3RzKS4gVGhpcyBwcm9wZXJ0eSBpcyBtYW5kYXRvcnkgYW5kIG11c3Qgbm90IGJlIGVtcHR5LlxuICovXG5cbi8qKlxuICogUHJlcGFyZXMgYW4gYXBwIHRvIGJlIHVzZWQgaW4gYW4gYXV0b21hdGVkIHRlc3QuIFRoZSBhcHAgZ2V0cyBjYWNoZWQgYXV0b21hdGljYWxseVxuICogaWYgaXQgaXMgYW4gYXJjaGl2ZSBvciBpZiBpdCBpcyBkb3dubG9hZGVkIGZyb20gYW4gVVJMLlxuICogSWYgdGhlIGRvd25sb2FkZWQgYXBwIGhhcyBgLnppcGAgZXh0ZW5zaW9uLCB0aGlzIG1ldGhvZCB3aWxsIHVuemlwIGl0LlxuICogVGhlIHVuemlwIGRvZXMgbm90IHdvcmsgd2hlbiBgb25Qb3N0UHJvY2Vzc2AgaXMgcHJvdmlkZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcCBFaXRoZXIgYSBmdWxsIHBhdGggdG8gdGhlIGFwcCBvciBhIHJlbW90ZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfENvbmZpZ3VyZUFwcE9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlc3VsdGluZyBhcHBsaWNhdGlvbiBidW5kbGVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlndXJlQXBwIChhcHAsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAoIV8uaXNTdHJpbmcoYXBwKSkge1xuICAgIC8vIGltbWVkaWF0ZWx5IHNob3J0Y2lyY3VpdCBpZiBub3QgZ2l2ZW4gYW4gYXBwXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHN1cHBvcnRlZEFwcEV4dGVuc2lvbnM7XG4gIGNvbnN0IHtcbiAgICBvblBvc3RQcm9jZXNzLFxuICB9ID0gXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMpID8gb3B0aW9ucyA6IHt9O1xuICBpZiAoXy5pc1N0cmluZyhvcHRpb25zKSkge1xuICAgIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMgPSBbb3B0aW9uc107XG4gIH0gZWxzZSBpZiAoXy5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyA9IG9wdGlvbnM7XG4gIH0gZWxzZSBpZiAoXy5pc1BsYWluT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyA9IG9wdGlvbnMuc3VwcG9ydGVkRXh0ZW5zaW9ucztcbiAgfVxuICBpZiAoXy5pc0VtcHR5KHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBPbmUgb3IgbW9yZSBzdXBwb3J0ZWQgYXBwIGV4dGVuc2lvbnMgbXVzdCBiZSBwcm92aWRlZGApO1xuICB9XG5cbiAgbGV0IG5ld0FwcCA9IGFwcDtcbiAgbGV0IHNob3VsZFVuemlwQXBwID0gZmFsc2U7XG4gIGxldCBwYWNrYWdlSGFzaCA9IG51bGw7XG4gIGxldCBoZWFkZXJzID0gbnVsbDtcbiAgY29uc3QgcmVtb3RlQXBwUHJvcHMgPSB7XG4gICAgbGFzdE1vZGlmaWVkOiBudWxsLFxuICAgIGltbXV0YWJsZTogZmFsc2UsXG4gICAgbWF4QWdlOiBudWxsLFxuICB9O1xuICBjb25zdCB7cHJvdG9jb2wsIHBhdGhuYW1lfSA9IHVybC5wYXJzZShuZXdBcHApO1xuICBjb25zdCBpc1VybCA9IFsnaHR0cDonLCAnaHR0cHM6J10uaW5jbHVkZXMocHJvdG9jb2wpO1xuXG4gIGNvbnN0IGNhY2hlZEFwcEluZm8gPSBBUFBMSUNBVElPTlNfQ0FDSEUuZ2V0KGFwcCk7XG5cbiAgcmV0dXJuIGF3YWl0IEFQUExJQ0FUSU9OU19DQUNIRV9HVUFSRC5hY3F1aXJlKGFwcCwgYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc1VybCkge1xuICAgICAgLy8gVXNlIHRoZSBhcHAgZnJvbSByZW1vdGUgVVJMXG4gICAgICBsb2dnZXIuaW5mbyhgVXNpbmcgZG93bmxvYWRhYmxlIGFwcCAnJHtuZXdBcHB9J2ApO1xuICAgICAgaGVhZGVycyA9IGF3YWl0IHJldHJpZXZlSGVhZGVycyhuZXdBcHApO1xuICAgICAgaWYgKCFfLmlzRW1wdHkoaGVhZGVycykpIHtcbiAgICAgICAgaWYgKGhlYWRlcnNbJ2xhc3QtbW9kaWZpZWQnXSkge1xuICAgICAgICAgIHJlbW90ZUFwcFByb3BzLmxhc3RNb2RpZmllZCA9IG5ldyBEYXRlKGhlYWRlcnNbJ2xhc3QtbW9kaWZpZWQnXSk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBMYXN0LU1vZGlmaWVkOiAke2hlYWRlcnNbJ2xhc3QtbW9kaWZpZWQnXX1gKTtcbiAgICAgICAgaWYgKGhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXSkge1xuICAgICAgICAgIHJlbW90ZUFwcFByb3BzLmltbXV0YWJsZSA9IC9cXGJpbW11dGFibGVcXGIvaS50ZXN0KGhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXSk7XG4gICAgICAgICAgY29uc3QgbWF4QWdlTWF0Y2ggPSAvXFxibWF4LWFnZT0oXFxkKylcXGIvaS5leGVjKGhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXSk7XG4gICAgICAgICAgaWYgKG1heEFnZU1hdGNoKSB7XG4gICAgICAgICAgICByZW1vdGVBcHBQcm9wcy5tYXhBZ2UgPSBwYXJzZUludChtYXhBZ2VNYXRjaFsxXSwgMTApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuZGVidWcoYENhY2hlLUNvbnRyb2w6ICR7aGVhZGVyc1snY2FjaGUtY29udHJvbCddfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FjaGVkUGF0aCA9IGdldENhY2hlZEFwcGxpY2F0aW9uUGF0aChhcHAsIHJlbW90ZUFwcFByb3BzLCBjYWNoZWRBcHBJbmZvKTtcbiAgICAgIGlmIChjYWNoZWRQYXRoKSB7XG4gICAgICAgIGlmIChhd2FpdCBpc0FwcEludGVncml0eU9rKGNhY2hlZFBhdGgsIGNhY2hlZEFwcEluZm8/LmludGVncml0eSkpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgUmV1c2luZyBwcmV2aW91c2x5IGRvd25sb2FkZWQgYXBwbGljYXRpb24gYXQgJyR7Y2FjaGVkUGF0aH0nYCk7XG4gICAgICAgICAgcmV0dXJuIHZlcmlmeUFwcEV4dGVuc2lvbihjYWNoZWRQYXRoLCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuaW5mbyhgVGhlIGFwcGxpY2F0aW9uIGF0ICcke2NhY2hlZFBhdGh9JyBkb2VzIG5vdCBleGlzdCBhbnltb3JlIGAgK1xuICAgICAgICAgIGBvciBpdHMgaW50ZWdyaXR5IGhhcyBiZWVuIGRhbWFnZWQuIERlbGV0aW5nIGl0IGZyb20gdGhlIGludGVybmFsIGNhY2hlYCk7XG4gICAgICAgIEFQUExJQ0FUSU9OU19DQUNIRS5kZWwoYXBwKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGZpbGVOYW1lID0gbnVsbDtcbiAgICAgIGNvbnN0IGJhc2VuYW1lID0gZnMuc2FuaXRpemVOYW1lKHBhdGguYmFzZW5hbWUoZGVjb2RlVVJJQ29tcG9uZW50KHBhdGhuYW1lKSksIHtcbiAgICAgICAgcmVwbGFjZW1lbnQ6IFNBTklUSVpFX1JFUExBQ0VNRU5UXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGV4dG5hbWUgPSBwYXRoLmV4dG5hbWUoYmFzZW5hbWUpO1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gdW56aXAgdGhlIGFwcCwgd2UgaGF2ZSBhIG51bWJlciBvZiBwbGFjZXNcbiAgICAgIC8vIHRvIGxvb2s6IGNvbnRlbnQgdHlwZSwgY29udGVudCBkaXNwb3NpdGlvbiwgb3IgdGhlIGZpbGUgZXh0ZW5zaW9uXG4gICAgICBpZiAoWklQX0VYVFMuaW5jbHVkZXMoZXh0bmFtZSkpIHtcbiAgICAgICAgZmlsZU5hbWUgPSBiYXNlbmFtZTtcbiAgICAgICAgc2hvdWxkVW56aXBBcHAgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICAgIGNvbnN0IGN0ID0gaGVhZGVyc1snY29udGVudC10eXBlJ107XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29udGVudC1UeXBlOiAke2N0fWApO1xuICAgICAgICAvLyB0aGUgZmlsZXR5cGUgbWF5IG5vdCBiZSBvYnZpb3VzIGZvciBjZXJ0YWluIHVybHMsIHNvIGNoZWNrIHRoZSBtaW1lIHR5cGUgdG9vXG4gICAgICAgIGlmIChaSVBfTUlNRV9UWVBFUy5zb21lKChtaW1lVHlwZSkgPT4gbmV3IFJlZ0V4cChgXFxcXGIke18uZXNjYXBlUmVnRXhwKG1pbWVUeXBlKX1cXFxcYmApLnRlc3QoY3QpKSkge1xuICAgICAgICAgIGlmICghZmlsZU5hbWUpIHtcbiAgICAgICAgICAgIGZpbGVOYW1lID0gYCR7REVGQVVMVF9CQVNFTkFNRX0uemlwYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2hvdWxkVW56aXBBcHAgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddICYmIC9eYXR0YWNobWVudC9pLnRlc3QoaGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddKSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYENvbnRlbnQtRGlzcG9zaXRpb246ICR7aGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddfWApO1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9maWxlbmFtZT1cIihbXlwiXSspL2kuZXhlYyhoZWFkZXJzWydjb250ZW50LWRpc3Bvc2l0aW9uJ10pO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBmaWxlTmFtZSA9IGZzLnNhbml0aXplTmFtZShtYXRjaFsxXSwge1xuICAgICAgICAgICAgcmVwbGFjZW1lbnQ6IFNBTklUSVpFX1JFUExBQ0VNRU5UXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2hvdWxkVW56aXBBcHAgPSBzaG91bGRVbnppcEFwcCB8fCBaSVBfRVhUUy5pbmNsdWRlcyhwYXRoLmV4dG5hbWUoZmlsZU5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFmaWxlTmFtZSkge1xuICAgICAgICAvLyBhc3NpZ24gdGhlIGRlZmF1bHQgZmlsZSBuYW1lIGFuZCB0aGUgZXh0ZW5zaW9uIGlmIG5vbmUgaGFzIGJlZW4gZGV0ZWN0ZWRcbiAgICAgICAgY29uc3QgcmVzdWx0aW5nTmFtZSA9IGJhc2VuYW1lXG4gICAgICAgICAgPyBiYXNlbmFtZS5zdWJzdHJpbmcoMCwgYmFzZW5hbWUubGVuZ3RoIC0gZXh0bmFtZS5sZW5ndGgpXG4gICAgICAgICAgOiBERUZBVUxUX0JBU0VOQU1FO1xuICAgICAgICBsZXQgcmVzdWx0aW5nRXh0ID0gZXh0bmFtZTtcbiAgICAgICAgaWYgKCFzdXBwb3J0ZWRBcHBFeHRlbnNpb25zLmluY2x1ZGVzKHJlc3VsdGluZ0V4dCkpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgVGhlIGN1cnJlbnQgZmlsZSBleHRlbnNpb24gJyR7cmVzdWx0aW5nRXh0fScgaXMgbm90IHN1cHBvcnRlZC4gYCArXG4gICAgICAgICAgICBgRGVmYXVsdGluZyB0byAnJHtfLmZpcnN0KHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpfSdgKTtcbiAgICAgICAgICByZXN1bHRpbmdFeHQgPSBfLmZpcnN0KHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVOYW1lID0gYCR7cmVzdWx0aW5nTmFtZX0ke3Jlc3VsdGluZ0V4dH1gO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0UGF0aCA9IGF3YWl0IHRlbXBEaXIucGF0aCh7XG4gICAgICAgIHByZWZpeDogZmlsZU5hbWUsXG4gICAgICAgIHN1ZmZpeDogJycsXG4gICAgICB9KTtcbiAgICAgIG5ld0FwcCA9IGF3YWl0IGRvd25sb2FkQXBwKG5ld0FwcCwgdGFyZ2V0UGF0aCk7XG4gICAgfSBlbHNlIGlmIChhd2FpdCBmcy5leGlzdHMobmV3QXBwKSkge1xuICAgICAgLy8gVXNlIHRoZSBsb2NhbCBhcHBcbiAgICAgIGxvZ2dlci5pbmZvKGBVc2luZyBsb2NhbCBhcHAgJyR7bmV3QXBwfSdgKTtcbiAgICAgIHNob3VsZFVuemlwQXBwID0gWklQX0VYVFMuaW5jbHVkZXMocGF0aC5leHRuYW1lKG5ld0FwcCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYFRoZSBhcHBsaWNhdGlvbiBhdCAnJHtuZXdBcHB9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWA7XG4gICAgICAvLyBwcm90b2NvbCB2YWx1ZSBmb3IgJ0M6XFxcXHRlbXAnIGlzICdjOicsIHNvIHdlIGNoZWNrIHRoZSBsZW5ndGggYXMgd2VsbFxuICAgICAgaWYgKF8uaXNTdHJpbmcocHJvdG9jb2wpICYmIHByb3RvY29sLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYFRoZSBwcm90b2NvbCAnJHtwcm90b2NvbH0nIHVzZWQgaW4gJyR7bmV3QXBwfScgaXMgbm90IHN1cHBvcnRlZC4gYCArXG4gICAgICAgICAgYE9ubHkgaHR0cDogYW5kIGh0dHBzOiBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZGA7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1BhY2thZ2VBRmlsZSA9IChhd2FpdCBmcy5zdGF0KG5ld0FwcCkpLmlzRmlsZSgpO1xuICAgIGlmIChpc1BhY2thZ2VBRmlsZSkge1xuICAgICAgcGFja2FnZUhhc2ggPSBhd2FpdCBjYWxjdWxhdGVGaWxlSW50ZWdyaXR5KG5ld0FwcCk7XG4gICAgfVxuXG4gICAgaWYgKGlzUGFja2FnZUFGaWxlICYmIHNob3VsZFVuemlwQXBwICYmICFfLmlzRnVuY3Rpb24ob25Qb3N0UHJvY2VzcykpIHtcbiAgICAgIGNvbnN0IGFyY2hpdmVQYXRoID0gbmV3QXBwO1xuICAgICAgaWYgKHBhY2thZ2VIYXNoID09PSBjYWNoZWRBcHBJbmZvPy5wYWNrYWdlSGFzaCkge1xuICAgICAgICBjb25zdCB7ZnVsbFBhdGh9ID0gY2FjaGVkQXBwSW5mbztcbiAgICAgICAgaWYgKGF3YWl0IGlzQXBwSW50ZWdyaXR5T2soZnVsbFBhdGgsIGNhY2hlZEFwcEluZm8/LmludGVncml0eSkpIHtcbiAgICAgICAgICBpZiAoYXJjaGl2ZVBhdGggIT09IGFwcCkge1xuICAgICAgICAgICAgYXdhaXQgZnMucmltcmFmKGFyY2hpdmVQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFdpbGwgcmV1c2UgcHJldmlvdXNseSBjYWNoZWQgYXBwbGljYXRpb24gYXQgJyR7ZnVsbFBhdGh9J2ApO1xuICAgICAgICAgIHJldHVybiB2ZXJpZnlBcHBFeHRlbnNpb24oZnVsbFBhdGgsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci5pbmZvKGBUaGUgYXBwbGljYXRpb24gYXQgJyR7ZnVsbFBhdGh9JyBkb2VzIG5vdCBleGlzdCBhbnltb3JlIGAgK1xuICAgICAgICAgIGBvciBpdHMgaW50ZWdyaXR5IGhhcyBiZWVuIGRhbWFnZWQuIERlbGV0aW5nIGl0IGZyb20gdGhlIGNhY2hlYCk7XG4gICAgICAgIEFQUExJQ0FUSU9OU19DQUNIRS5kZWwoYXBwKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0FwcCA9IGF3YWl0IHVuemlwQXBwKGFyY2hpdmVQYXRoLCB0bXBSb290LCBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChuZXdBcHAgIT09IGFyY2hpdmVQYXRoICYmIGFyY2hpdmVQYXRoICE9PSBhcHApIHtcbiAgICAgICAgICBhd2FpdCBmcy5yaW1yYWYoYXJjaGl2ZVBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuaW5mbyhgVW56aXBwZWQgbG9jYWwgYXBwIHRvICcke25ld0FwcH0nYCk7XG4gICAgfSBlbHNlIGlmICghcGF0aC5pc0Fic29sdXRlKG5ld0FwcCkpIHtcbiAgICAgIG5ld0FwcCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBuZXdBcHApO1xuICAgICAgbG9nZ2VyLndhcm4oYFRoZSBjdXJyZW50IGFwcGxpY2F0aW9uIHBhdGggJyR7YXBwfScgaXMgbm90IGFic29sdXRlIGAgK1xuICAgICAgICBgYW5kIGhhcyBiZWVuIHJld3JpdHRlbiB0byAnJHtuZXdBcHB9Jy4gQ29uc2lkZXIgdXNpbmcgYWJzb2x1dGUgcGF0aHMgcmF0aGVyIHRoYW4gcmVsYXRpdmVgKTtcbiAgICAgIGFwcCA9IG5ld0FwcDtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yZUFwcEluQ2FjaGUgPSBhc3luYyAoYXBwUGF0aFRvQ2FjaGUpID0+IHtcbiAgICAgIGNvbnN0IGNhY2hlZEZ1bGxQYXRoID0gY2FjaGVkQXBwSW5mbz8uZnVsbFBhdGg7XG4gICAgICBpZiAoY2FjaGVkRnVsbFBhdGggJiYgY2FjaGVkRnVsbFBhdGggIT09IGFwcFBhdGhUb0NhY2hlKSB7XG4gICAgICAgIGF3YWl0IGZzLnJpbXJhZihjYWNoZWRGdWxsUGF0aCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnRlZ3JpdHkgPSB7fTtcbiAgICAgIGlmICgoYXdhaXQgZnMuc3RhdChhcHBQYXRoVG9DYWNoZSkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgaW50ZWdyaXR5LmZvbGRlciA9IGF3YWl0IGNhbGN1bGF0ZUZvbGRlckludGVncml0eShhcHBQYXRoVG9DYWNoZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlZ3JpdHkuZmlsZSA9IGF3YWl0IGNhbGN1bGF0ZUZpbGVJbnRlZ3JpdHkoYXBwUGF0aFRvQ2FjaGUpO1xuICAgICAgfVxuICAgICAgQVBQTElDQVRJT05TX0NBQ0hFLnNldChhcHAsIHtcbiAgICAgICAgLi4ucmVtb3RlQXBwUHJvcHMsXG4gICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgcGFja2FnZUhhc2gsXG4gICAgICAgIGludGVncml0eSxcbiAgICAgICAgZnVsbFBhdGg6IGFwcFBhdGhUb0NhY2hlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYXBwUGF0aFRvQ2FjaGU7XG4gICAgfTtcblxuICAgIGlmIChfLmlzRnVuY3Rpb24ob25Qb3N0UHJvY2VzcykpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9uUG9zdFByb2Nlc3Moe1xuICAgICAgICBjYWNoZWRBcHBJbmZvOiBfLmNsb25lKGNhY2hlZEFwcEluZm8pLFxuICAgICAgICBpc1VybCxcbiAgICAgICAgaGVhZGVyczogXy5jbG9uZShoZWFkZXJzKSxcbiAgICAgICAgYXBwUGF0aDogbmV3QXBwLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKCFyZXN1bHQ/LmFwcFBhdGggfHwgYXBwID09PSByZXN1bHQ/LmFwcFBhdGggfHwgIWF3YWl0IGZzLmV4aXN0cyhyZXN1bHQ/LmFwcFBhdGgpKVxuICAgICAgICA/IG5ld0FwcFxuICAgICAgICA6IGF3YWl0IHN0b3JlQXBwSW5DYWNoZShyZXN1bHQuYXBwUGF0aCk7XG4gICAgfVxuXG4gICAgdmVyaWZ5QXBwRXh0ZW5zaW9uKG5ld0FwcCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucyk7XG4gICAgcmV0dXJuIChhcHAgIT09IG5ld0FwcCAmJiAocGFja2FnZUhhc2ggfHwgXy52YWx1ZXMocmVtb3RlQXBwUHJvcHMpLnNvbWUoQm9vbGVhbikpKVxuICAgICAgPyBhd2FpdCBzdG9yZUFwcEluQ2FjaGUobmV3QXBwKVxuICAgICAgOiBuZXdBcHA7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEFwcCAoYXBwLCB0YXJnZXRQYXRoKSB7XG4gIGNvbnN0IHtocmVmfSA9IHVybC5wYXJzZShhcHApO1xuICB0cnkge1xuICAgIGF3YWl0IG5ldC5kb3dubG9hZEZpbGUoaHJlZiwgdGFyZ2V0UGF0aCwge1xuICAgICAgdGltZW91dDogQVBQX0RPV05MT0FEX1RJTUVPVVRfTVMsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGRvd25sb2FkIHRoZSBhcHA6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHRhcmdldFBhdGg7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGJ1bmRsZSBmcm9tIGFuIGFyY2hpdmUgaW50byB0aGUgZ2l2ZW4gZm9sZGVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHppcFBhdGggRnVsbCBwYXRoIHRvIHRoZSBhcmNoaXZlIGNvbnRhaW5pbmcgdGhlIGJ1bmRsZVxuICogQHBhcmFtIHtzdHJpbmd9IGRzdFJvb3QgRnVsbCBwYXRoIHRvIHRoZSBmb2xkZXIgd2hlcmUgdGhlIGV4dHJhY3RlZCBidW5kbGVcbiAqIHNob3VsZCBiZSBwbGFjZWRcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPnxzdHJpbmd9IHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMgVGhlIGxpc3Qgb2YgZXh0ZW5zaW9uc1xuICogdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBidW5kbGUgc3VwcG9ydHMsIGZvciBleGFtcGxlIFsnLmFwaycsICcuYXBrcyddIGZvclxuICogQW5kcm9pZCBwYWNrYWdlc1xuICogQHJldHVybnMge3N0cmluZ30gRnVsbCBwYXRoIHRvIHRoZSBidW5kbGUgaW4gdGhlIGRlc3RpbmF0aW9uIGZvbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBhcmNoaXZlIGlzIGludmFsaWQgb3Igbm8gYXBwbGljYXRpb24gYnVuZGxlc1xuICogaGF2ZSBiZWVuIGZvdW5kIGluc2lkZVxuICovXG5hc3luYyBmdW5jdGlvbiB1bnppcEFwcCAoemlwUGF0aCwgZHN0Um9vdCwgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucykge1xuICBhd2FpdCB6aXAuYXNzZXJ0VmFsaWRaaXAoemlwUGF0aCk7XG5cbiAgaWYgKCFfLmlzQXJyYXkoc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucykpIHtcbiAgICBzdXBwb3J0ZWRBcHBFeHRlbnNpb25zID0gW3N1cHBvcnRlZEFwcEV4dGVuc2lvbnNdO1xuICB9XG5cbiAgY29uc3QgdG1wUm9vdCA9IGF3YWl0IHRlbXBEaXIub3BlbkRpcigpO1xuICB0cnkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgVW56aXBwaW5nICcke3ppcFBhdGh9J2ApO1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgY29uc3QgdXNlU3lzdGVtVW56aXBFbnYgPSBwcm9jZXNzLmVudi5BUFBJVU1fUFJFRkVSX1NZU1RFTV9VTlpJUDtcbiAgICBjb25zdCB1c2VTeXN0ZW1VbnppcCA9IF8uaXNFbXB0eSh1c2VTeXN0ZW1VbnppcEVudilcbiAgICAgIHx8ICFbJzAnLCAnZmFsc2UnXS5pbmNsdWRlcyhfLnRvTG93ZXIodXNlU3lzdGVtVW56aXBFbnYpKTtcbiAgICAvKipcbiAgICAgKiBBdHRlbXB0IHRvIHVzZSB1c2UgdGhlIHN5c3RlbSBgdW56aXBgIChlLmcuLCBgL3Vzci9iaW4vdW56aXBgKSBkdWVcbiAgICAgKiB0byB0aGUgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgaXQgcHJvdmlkZXMgb3ZlciB0aGUgbmF0aXZlXG4gICAgICogSlMgXCJ1bnppcFwiIGltcGxlbWVudGF0aW9uLlxuICAgICAqIEB0eXBlIHtpbXBvcnQoJ0BhcHBpdW0vc3VwcG9ydC9saWIvemlwJykuRXh0cmFjdEFsbE9wdGlvbnN9XG4gICAgICovXG4gICAgY29uc3QgZXh0cmFjdGlvbk9wdHMgPSB7dXNlU3lzdGVtVW56aXB9O1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNDEwMFxuICAgIGlmIChwYXRoLmV4dG5hbWUoemlwUGF0aCkgPT09IElQQV9FWFQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRW5mb3JjaW5nIFVURi04IGVuY29kaW5nIG9uIHRoZSBleHRyYWN0ZWQgZmlsZSBuYW1lcyBmb3IgJyR7cGF0aC5iYXNlbmFtZSh6aXBQYXRoKX0nYCk7XG4gICAgICBleHRyYWN0aW9uT3B0cy5maWxlTmFtZXNFbmNvZGluZyA9ICd1dGY4JztcbiAgICB9XG4gICAgYXdhaXQgemlwLmV4dHJhY3RBbGxUbyh6aXBQYXRoLCB0bXBSb290LCBleHRyYWN0aW9uT3B0cyk7XG4gICAgY29uc3QgZ2xvYlBhdHRlcm4gPSBgKiovKi4rKCR7c3VwcG9ydGVkQXBwRXh0ZW5zaW9ucy5tYXAoKGV4dCkgPT4gZXh0LnJlcGxhY2UoL15cXC4vLCAnJykpLmpvaW4oJ3wnKX0pYDtcbiAgICBjb25zdCBzb3J0ZWRCdW5kbGVJdGVtcyA9IChhd2FpdCBmcy5nbG9iKGdsb2JQYXR0ZXJuLCB7XG4gICAgICBjd2Q6IHRtcFJvb3QsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgIC8vIEdldCB0aGUgdG9wIGxldmVsIG1hdGNoXG4gICAgfSkpLnNvcnQoKGEsIGIpID0+IGEuc3BsaXQocGF0aC5zZXApLmxlbmd0aCAtIGIuc3BsaXQocGF0aC5zZXApLmxlbmd0aCk7XG4gICAgaWYgKF8uaXNFbXB0eShzb3J0ZWRCdW5kbGVJdGVtcykpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBBcHAgdW56aXBwZWQgT0ssIGJ1dCB3ZSBjb3VsZCBub3QgZmluZCBhbnkgJyR7c3VwcG9ydGVkQXBwRXh0ZW5zaW9uc30nIGAgK1xuICAgICAgICB1dGlsLnBsdXJhbGl6ZSgnYnVuZGxlJywgc3VwcG9ydGVkQXBwRXh0ZW5zaW9ucy5sZW5ndGgsIGZhbHNlKSArXG4gICAgICAgIGAgaW4gaXQuIE1ha2Ugc3VyZSB5b3VyIGFyY2hpdmUgY29udGFpbnMgYXQgbGVhc3Qgb25lIHBhY2thZ2UgaGF2aW5nIGAgK1xuICAgICAgICBgJyR7c3VwcG9ydGVkQXBwRXh0ZW5zaW9uc30nICR7dXRpbC5wbHVyYWxpemUoJ2V4dGVuc2lvbicsIHN1cHBvcnRlZEFwcEV4dGVuc2lvbnMubGVuZ3RoLCBmYWxzZSl9YCk7XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhgRXh0cmFjdGVkICR7dXRpbC5wbHVyYWxpemUoJ2J1bmRsZSBpdGVtJywgc29ydGVkQnVuZGxlSXRlbXMubGVuZ3RoLCB0cnVlKX0gYCArXG4gICAgICBgZnJvbSAnJHt6aXBQYXRofScgaW4gJHtNYXRoLnJvdW5kKHRpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMpfW1zOiAke3NvcnRlZEJ1bmRsZUl0ZW1zfWApO1xuICAgIGNvbnN0IG1hdGNoZWRCdW5kbGUgPSBfLmZpcnN0KHNvcnRlZEJ1bmRsZUl0ZW1zKTtcbiAgICBsb2dnZXIuaW5mbyhgQXNzdW1pbmcgJyR7bWF0Y2hlZEJ1bmRsZX0nIGlzIHRoZSBjb3JyZWN0IGJ1bmRsZWApO1xuICAgIGNvbnN0IGRzdFBhdGggPSBwYXRoLnJlc29sdmUoZHN0Um9vdCwgcGF0aC5iYXNlbmFtZShtYXRjaGVkQnVuZGxlKSk7XG4gICAgYXdhaXQgZnMubXYocGF0aC5yZXNvbHZlKHRtcFJvb3QsIG1hdGNoZWRCdW5kbGUpLCBkc3RQYXRoLCB7bWtkaXJwOiB0cnVlfSk7XG4gICAgcmV0dXJuIGRzdFBhdGg7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUGFja2FnZU9yQnVuZGxlIChhcHApIHtcbiAgcmV0dXJuICgvXihbYS16QS1aMC05XFwtX10rXFwuW2EtekEtWjAtOVxcLV9dKykrJC8pLnRlc3QoYXBwKTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhbGwgaW5zdGFuY2VzICdmaXJzdEtleScgYW5kIGNyZWF0ZSBhIGR1cGxpY2F0ZSB3aXRoIHRoZSBrZXkgJ3NlY29uZEtleScsXG4gKiBEbyB0aGUgc2FtZSB0aGluZyBpbiByZXZlcnNlLiBJZiB3ZSBmaW5kICdzZWNvbmRLZXknLCBjcmVhdGUgYSBkdXBsaWNhdGUgd2l0aCB0aGUga2V5ICdmaXJzdEtleScuXG4gKlxuICogVGhpcyB3aWxsIGNhdXNlIGtleXMgdG8gYmUgb3ZlcndyaXR0ZW4gaWYgdGhlIG9iamVjdCBjb250YWlucyAnZmlyc3RLZXknIGFuZCAnc2Vjb25kS2V5Jy5cblxuICogQHBhcmFtIHsqfSBpbnB1dCBBbnkgdHlwZSBvZiBpbnB1dFxuICogQHBhcmFtIHtTdHJpbmd9IGZpcnN0S2V5IFRoZSBmaXJzdCBrZXkgdG8gZHVwbGljYXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gc2Vjb25kS2V5IFRoZSBzZWNvbmQga2V5IHRvIGR1cGxpY2F0ZVxuICovXG5mdW5jdGlvbiBkdXBsaWNhdGVLZXlzIChpbnB1dCwgZmlyc3RLZXksIHNlY29uZEtleSkge1xuICAvLyBJZiBhcnJheSBwcm92aWRlZCwgcmVjdXJzaXZlbHkgY2FsbCBvbiBhbGwgZWxlbWVudHNcbiAgaWYgKF8uaXNBcnJheShpbnB1dCkpIHtcbiAgICByZXR1cm4gaW5wdXQubWFwKChpdGVtKSA9PiBkdXBsaWNhdGVLZXlzKGl0ZW0sIGZpcnN0S2V5LCBzZWNvbmRLZXkpKTtcbiAgfVxuXG4gIC8vIElmIG9iamVjdCwgY3JlYXRlIGR1cGxpY2F0ZXMgZm9yIGtleXMgYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2FsbCBvbiB2YWx1ZXNcbiAgaWYgKF8uaXNQbGFpbk9iamVjdChpbnB1dCkpIHtcbiAgICBjb25zdCByZXN1bHRPYmogPSB7fTtcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKGlucHV0KSkge1xuICAgICAgY29uc3QgcmVjdXJzaXZlbHlDYWxsZWRWYWx1ZSA9IGR1cGxpY2F0ZUtleXModmFsdWUsIGZpcnN0S2V5LCBzZWNvbmRLZXkpO1xuICAgICAgaWYgKGtleSA9PT0gZmlyc3RLZXkpIHtcbiAgICAgICAgcmVzdWx0T2JqW3NlY29uZEtleV0gPSByZWN1cnNpdmVseUNhbGxlZFZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IHNlY29uZEtleSkge1xuICAgICAgICByZXN1bHRPYmpbZmlyc3RLZXldID0gcmVjdXJzaXZlbHlDYWxsZWRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdE9ialtrZXldID0gcmVjdXJzaXZlbHlDYWxsZWRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdE9iajtcbiAgfVxuXG4gIC8vIEJhc2UgY2FzZS4gUmV0dXJuIHByaW1pdGl2ZXMgd2l0aG91dCBkb2luZyBhbnl0aGluZy5cbiAgcmV0dXJuIGlucHV0O1xufVxuXG4vKipcbiAqIFRha2VzIGEgZGVzaXJlZCBjYXBhYmlsaXR5IGFuZCB0cmllcyB0byBKU09OLnBhcnNlIGl0IGFzIGFuIGFycmF5LFxuICogYW5kIGVpdGhlciByZXR1cm5zIHRoZSBwYXJzZWQgYXJyYXkgb3IgYSBzaW5nbGV0b24gYXJyYXkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8QXJyYXk8U3RyaW5nPn0gY2FwIEEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ2Fwc0FycmF5IChjYXApIHtcbiAgaWYgKF8uaXNBcnJheShjYXApKSB7XG4gICAgcmV0dXJuIGNhcDtcbiAgfVxuXG4gIGxldCBwYXJzZWRDYXBzO1xuICB0cnkge1xuICAgIHBhcnNlZENhcHMgPSBKU09OLnBhcnNlKGNhcCk7XG4gICAgaWYgKF8uaXNBcnJheShwYXJzZWRDYXBzKSkge1xuICAgICAgcmV0dXJuIHBhcnNlZENhcHM7XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHtcbiAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIGNhcGFiaWxpdHkgYXMgSlNPTiBhcnJheWApO1xuICB9XG4gIGlmIChfLmlzU3RyaW5nKGNhcCkpIHtcbiAgICByZXR1cm4gW2NhcF07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBtdXN0IHByb3ZpZGUgYSBzdHJpbmcgb3IgSlNPTiBBcnJheTsgcmVjZWl2ZWQgJHtjYXB9YCk7XG59XG5cbmV4cG9ydCB7XG4gIGNvbmZpZ3VyZUFwcCwgaXNQYWNrYWdlT3JCdW5kbGUsIGR1cGxpY2F0ZUtleXMsIHBhcnNlQ2Fwc0FycmF5XG59O1xuIl19
|
|
@@ -12,7 +12,5 @@ var _support = require("@appium/support");
|
|
|
12
12
|
const log = _support.logger.getLogger('BaseDriver');
|
|
13
13
|
|
|
14
14
|
var _default = log;
|
|
15
|
-
exports.default = _default;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2xvZ2dlci5qcyJdLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBLE1BQU1BLEdBQUcsR0FBR0MsZ0JBQU9DLFNBQVAsQ0FBaUIsWUFBakIsQ0FBWjs7ZUFDZUYsRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0Jhc2VEcml2ZXInKTtcbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdLCJmaWxlIjoibGliL2Jhc2Vkcml2ZXIvbG9nZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|
|
15
|
+
exports.default = _default;
|
|
16
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2xvZ2dlci5qcyJdLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBLE1BQU1BLEdBQUcsR0FBR0MsZ0JBQU9DLFNBQVAsQ0FBaUIsWUFBakIsQ0FBWjs7ZUFDZUYsRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0Jhc2VEcml2ZXInKTtcbmV4cG9ydCBkZWZhdWx0IGxvZztcbiJdfQ==
|
package/build/lib/constants.js
CHANGED
|
@@ -21,7 +21,5 @@ const PROTOCOLS = {
|
|
|
21
21
|
};
|
|
22
22
|
exports.PROTOCOLS = PROTOCOLS;
|
|
23
23
|
const DEFAULT_BASE_PATH = '';
|
|
24
|
-
exports.DEFAULT_BASE_PATH = DEFAULT_BASE_PATH;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb25zdGFudHMuanMiXSwibmFtZXMiOlsiTUFYX0xPR19CT0RZX0xFTkdUSCIsIk1KU09OV1BfRUxFTUVOVF9LRVkiLCJXM0NfRUxFTUVOVF9LRVkiLCJ1dGlsIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJQUk9UT0NPTFMiLCJXM0MiLCJNSlNPTldQIiwiREVGQVVMVF9CQVNFX1BBVEgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQVFBLE1BQU1BLG1CQUFtQixHQUFHLElBQTVCOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLFNBQTVCOztBQUNBLE1BQU1DLGVBQWUsR0FBR0MsY0FBS0MsMEJBQTdCOztBQUNBLE1BQU1DLFNBQVMsR0FBRztBQUNoQkMsRUFBQUEsR0FBRyxFQUFFLEtBRFc7QUFFaEJDLEVBQUFBLE9BQU8sRUFBRTtBQUZPLENBQWxCOztBQU1BLE1BQU1DLGlCQUFpQixHQUFHLEVBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbi8vIFRoZSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoIG9mIGEgc2luZ2xlIGxvZyByZWNvcmRcbi8vIGNvbnRhaW5pbmcgaHR0cCByZXF1ZXN0L3Jlc3BvbnNlIGJvZHlcbi8vIFRoaXMgdmFsdWUgY291bGQgYmUgZ2xvYmFsbHkgY3VzdG9taXplZCB1c2luZyB0aGUgLS1sb2ctZmlsdGVyc1xuLy8gc2VydmVyIGZlYXR1cmUuIEV4YW1wbGUgcnVsZTpcbi8vIFx0e1wicGF0dGVyblwiOiBcIiguezEsMTUwfSkuKlwiLCBcImZsYWdzXCI6IFwic1wiLCBcInJlcGxhY2VyXCI6IFwiJDFcIn1cbi8vIF4gY3V0cyBhbGwgbG9nIHJlY29yZHMgdG8gbWF4aW11bSAxNTAgY2hhcnNcbmNvbnN0IE1BWF9MT0dfQk9EWV9MRU5HVEggPSAxMDI0O1xuY29uc3QgTUpTT05XUF9FTEVNRU5UX0tFWSA9ICdFTEVNRU5UJztcbmNvbnN0IFczQ19FTEVNRU5UX0tFWSA9IHV0aWwuVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVI7XG5jb25zdCBQUk9UT0NPTFMgPSB7XG4gIFczQzogJ1czQycsXG4gIE1KU09OV1A6ICdNSlNPTldQJyxcbn07XG5cbi8vIEJlZm9yZSBBcHBpdW0gMi4wLCB0aGlzIGRlZmF1bHQgdmFsdWUgd2FzICcvd2QvaHViJyBieSBoaXN0b3JpY2FsIHJlYXNvbnMuXG5jb25zdCBERUZBVUxUX0JBU0VfUEFUSCA9ICcnO1xuXG5cbmV4cG9ydCB7XG4gIE1BWF9MT0dfQk9EWV9MRU5HVEgsIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSxcbiAgUFJPVE9DT0xTLCBERUZBVUxUX0JBU0VfUEFUSFxufTtcbiJdLCJmaWxlIjoibGliL2NvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
24
|
+
exports.DEFAULT_BASE_PATH = DEFAULT_BASE_PATH;
|
|
25
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb25zdGFudHMuanMiXSwibmFtZXMiOlsiTUFYX0xPR19CT0RZX0xFTkdUSCIsIk1KU09OV1BfRUxFTUVOVF9LRVkiLCJXM0NfRUxFTUVOVF9LRVkiLCJ1dGlsIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJQUk9UT0NPTFMiLCJXM0MiLCJNSlNPTldQIiwiREVGQVVMVF9CQVNFX1BBVEgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQVFBLE1BQU1BLG1CQUFtQixHQUFHLElBQTVCOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLFNBQTVCOztBQUNBLE1BQU1DLGVBQWUsR0FBR0MsY0FBS0MsMEJBQTdCOztBQUNBLE1BQU1DLFNBQVMsR0FBRztBQUNoQkMsRUFBQUEsR0FBRyxFQUFFLEtBRFc7QUFFaEJDLEVBQUFBLE9BQU8sRUFBRTtBQUZPLENBQWxCOztBQU1BLE1BQU1DLGlCQUFpQixHQUFHLEVBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbi8vIFRoZSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoIG9mIGEgc2luZ2xlIGxvZyByZWNvcmRcbi8vIGNvbnRhaW5pbmcgaHR0cCByZXF1ZXN0L3Jlc3BvbnNlIGJvZHlcbi8vIFRoaXMgdmFsdWUgY291bGQgYmUgZ2xvYmFsbHkgY3VzdG9taXplZCB1c2luZyB0aGUgLS1sb2ctZmlsdGVyc1xuLy8gc2VydmVyIGZlYXR1cmUuIEV4YW1wbGUgcnVsZTpcbi8vIFx0e1wicGF0dGVyblwiOiBcIiguezEsMTUwfSkuKlwiLCBcImZsYWdzXCI6IFwic1wiLCBcInJlcGxhY2VyXCI6IFwiJDFcIn1cbi8vIF4gY3V0cyBhbGwgbG9nIHJlY29yZHMgdG8gbWF4aW11bSAxNTAgY2hhcnNcbmNvbnN0IE1BWF9MT0dfQk9EWV9MRU5HVEggPSAxMDI0O1xuY29uc3QgTUpTT05XUF9FTEVNRU5UX0tFWSA9ICdFTEVNRU5UJztcbmNvbnN0IFczQ19FTEVNRU5UX0tFWSA9IHV0aWwuVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVI7XG5jb25zdCBQUk9UT0NPTFMgPSB7XG4gIFczQzogJ1czQycsXG4gIE1KU09OV1A6ICdNSlNPTldQJyxcbn07XG5cbi8vIEJlZm9yZSBBcHBpdW0gMi4wLCB0aGlzIGRlZmF1bHQgdmFsdWUgd2FzICcvd2QvaHViJyBieSBoaXN0b3JpY2FsIHJlYXNvbnMuXG5jb25zdCBERUZBVUxUX0JBU0VfUEFUSCA9ICcnO1xuXG5cbmV4cG9ydCB7XG4gIE1BWF9MT0dfQk9EWV9MRU5HVEgsIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSxcbiAgUFJPVE9DT0xTLCBERUZBVUxUX0JBU0VfUEFUSFxufTtcbiJdfQ==
|
|
@@ -16,7 +16,5 @@ function produceError() {
|
|
|
16
16
|
|
|
17
17
|
function produceCrash() {
|
|
18
18
|
throw new Error('We just tried to crash Appium!');
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leHByZXNzL2NyYXNoLmpzIl0sIm5hbWVzIjpbInByb2R1Y2VFcnJvciIsImVycm9ycyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJwcm9kdWNlQ3Jhc2giLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUdBLFNBQVNBLFlBQVQsR0FBeUI7QUFDdkIsUUFBTSxJQUFJQyxpQkFBT0MsbUJBQVgsQ0FBK0Isb0NBQS9CLENBQU47QUFDRDs7QUFFRCxTQUFTQyxZQUFULEdBQXlCO0FBQ3ZCLFFBQU0sSUFBSUMsS0FBSixDQUFVLGdDQUFWLENBQU47QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVycm9ycyB9IGZyb20gJy4uL3Byb3RvY29sJztcblxuXG5mdW5jdGlvbiBwcm9kdWNlRXJyb3IgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoJ1Byb2R1Y2VkIGdlbmVyaWMgZXJyb3IgZm9yIHRlc3RpbmcnKTtcbn1cblxuZnVuY3Rpb24gcHJvZHVjZUNyYXNoICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdXZSBqdXN0IHRyaWVkIHRvIGNyYXNoIEFwcGl1bSEnKTtcbn1cblxuXG5leHBvcnQgeyBwcm9kdWNlRXJyb3IsIHByb2R1Y2VDcmFzaCB9O1xuIl0sImZpbGUiOiJsaWIvZXhwcmVzcy9jcmFzaC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHByZXNzL2NyYXNoLmpzIl0sIm5hbWVzIjpbInByb2R1Y2VFcnJvciIsImVycm9ycyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJwcm9kdWNlQ3Jhc2giLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUdBLFNBQVNBLFlBQVQsR0FBeUI7QUFDdkIsUUFBTSxJQUFJQyxpQkFBT0MsbUJBQVgsQ0FBK0Isb0NBQS9CLENBQU47QUFDRDs7QUFFRCxTQUFTQyxZQUFULEdBQXlCO0FBQ3ZCLFFBQU0sSUFBSUMsS0FBSixDQUFVLGdDQUFWLENBQU47QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVycm9ycyB9IGZyb20gJy4uL3Byb3RvY29sJztcblxuXG5mdW5jdGlvbiBwcm9kdWNlRXJyb3IgKCkge1xuICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoJ1Byb2R1Y2VkIGdlbmVyaWMgZXJyb3IgZm9yIHRlc3RpbmcnKTtcbn1cblxuZnVuY3Rpb24gcHJvZHVjZUNyYXNoICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdXZSBqdXN0IHRyaWVkIHRvIGNyYXNoIEFwcGl1bSEnKTtcbn1cblxuXG5leHBvcnQgeyBwcm9kdWNlRXJyb3IsIHByb2R1Y2VDcmFzaCB9O1xuIl19
|
|
@@ -66,7 +66,5 @@ const startLogFormatter = (0, _morgan.default)((tokens, req, res) => {
|
|
|
66
66
|
}, {
|
|
67
67
|
immediate: true
|
|
68
68
|
});
|
|
69
|
-
exports.startLogFormatter = startLogFormatter;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9leHByZXNzL2V4cHJlc3MtbG9nZ2luZy5qcyJdLCJuYW1lcyI6WyJjb21waWxlIiwiZm10IiwicmVwbGFjZSIsIl8iLCJuYW1lIiwiYXJnIiwianMiLCJGdW5jdGlvbiIsInJlcXVlc3RFbmRMb2dnaW5nRm9ybWF0IiwidG9rZW5zIiwicmVxIiwicmVzIiwic3RhdHVzIiwic3RhdHVzQ29kZSIsInN0YXR1c1N0ciIsInJlZCIsInllbGxvdyIsImN5YW4iLCJncmVlbiIsImZuIiwid2hpdGUiLCJncmV5IiwiZW5kTG9nRm9ybWF0dGVyIiwibG9nIiwiaW5mbyIsImpzb25SZXNwIiwicmVxdWVzdFN0YXJ0TG9nZ2luZ0Zvcm1hdCIsInN0YXJ0TG9nRm9ybWF0dGVyIiwicmVxQm9keSIsImJvZHkiLCJ0cnVuY2F0ZSIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImxlbmd0aCIsIk1BWF9MT0dfQk9EWV9MRU5HVEgiLCJpZ24iLCJpbW1lZGlhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsU0FBU0EsT0FBVCxDQUFrQkMsR0FBbEIsRUFBdUI7QUFFckJBLEVBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDQyxPQUFKLENBQVksSUFBWixFQUFrQixLQUFsQixDQUFOO0FBQ0FELEVBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDQyxPQUFKLENBQVksZ0NBQVosRUFDSixTQUFTQSxPQUFULENBQWtCQyxDQUFsQixFQUFxQkMsSUFBckIsRUFBMkJDLEdBQTNCLEVBQWdDO0FBQzlCLFdBQVEscUJBQW9CRCxJQUFLLGlCQUFnQkMsR0FBSSxnQkFBckQ7QUFDRCxHQUhHLENBQU47QUFJQSxNQUFJQyxFQUFFLEdBQUksYUFBWUwsR0FBSSxJQUExQjtBQUNBLFNBQU8sSUFBSU0sUUFBSixDQUFhLGtCQUFiLEVBQWlDRCxFQUFqQyxDQUFQO0FBQ0Q7O0FBRUQsU0FBU0UsdUJBQVQsQ0FBa0NDLE1BQWxDLEVBQTBDQyxHQUExQyxFQUErQ0MsR0FBL0MsRUFBb0Q7QUFDbEQsTUFBSUMsTUFBTSxHQUFHRCxHQUFHLENBQUNFLFVBQWpCO0FBQ0EsTUFBSUMsU0FBUyxHQUFHLFNBQWhCOztBQUNBLE1BQUlGLE1BQU0sSUFBSSxHQUFkLEVBQW1CO0FBQ2pCRSxJQUFBQSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0MsR0FBdEI7QUFDRCxHQUZELE1BRU8sSUFBSUgsTUFBTSxJQUFJLEdBQWQsRUFBbUI7QUFDeEJFLElBQUFBLFNBQVMsR0FBR0EsU0FBUyxDQUFDRSxNQUF0QjtBQUNELEdBRk0sTUFFQSxJQUFJSixNQUFNLElBQUksR0FBZCxFQUFtQjtBQUN4QkUsSUFBQUEsU0FBUyxHQUFHQSxTQUFTLENBQUNHLElBQXRCO0FBQ0QsR0FGTSxNQUVBO0FBQ0xILElBQUFBLFNBQVMsR0FBR0EsU0FBUyxDQUFDSSxLQUF0QjtBQUNEOztBQUNELE1BQUlDLEVBQUUsR0FBR25CLE9BQU8sQ0FBRSxHQUFFLG9CQUFvQm9CLEtBQU0sR0FBRU4sU0FBVSxJQUFHLDJDQUEyQ08sSUFBSyxFQUE3RixDQUFoQjtBQUNBLFNBQU9GLEVBQUUsQ0FBQ1YsTUFBRCxFQUFTQyxHQUFULEVBQWNDLEdBQWQsQ0FBVDtBQUNEOztBQUVELE1BQU1XLGVBQWUsR0FBRyxxQkFBTyxDQUFDYixNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxLQUFzQjtBQUNuRFksa0JBQUlDLElBQUosQ0FBU2hCLHVCQUF1QixDQUFDQyxNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxDQUFoQyxFQUNFLENBQUNBLEdBQUcsQ0FBQ2MsUUFBSixJQUFnQixFQUFqQixFQUFxQkosSUFEdkI7QUFFRCxDQUh1QixDQUF4Qjs7QUFLQSxNQUFNSyx5QkFBeUIsR0FBRzFCLE9BQU8sQ0FBRSxHQUFFLE1BQU1vQixLQUFNLElBQUcsVUFBVUEsS0FBTSxJQUFHLE9BQU9BLEtBQU0sRUFBbkQsQ0FBekM7QUFFQSxNQUFNTyxpQkFBaUIsR0FBRyxxQkFBTyxDQUFDbEIsTUFBRCxFQUFTQyxHQUFULEVBQWNDLEdBQWQsS0FBc0I7QUFFckQsTUFBSWlCLE9BQU8sR0FBRyxFQUFkOztBQUNBLE1BQUlsQixHQUFHLENBQUNtQixJQUFSLEVBQWM7QUFDWixRQUFJO0FBQ0ZELE1BQUFBLE9BQU8sR0FBR3pCLGdCQUFFMkIsUUFBRixDQUFXM0IsZ0JBQUU0QixRQUFGLENBQVdyQixHQUFHLENBQUNtQixJQUFmLElBQXVCbkIsR0FBRyxDQUFDbUIsSUFBM0IsR0FBa0NHLElBQUksQ0FBQ0MsU0FBTCxDQUFldkIsR0FBRyxDQUFDbUIsSUFBbkIsQ0FBN0MsRUFBdUU7QUFDL0VLLFFBQUFBLE1BQU0sRUFBRUM7QUFEdUUsT0FBdkUsQ0FBVjtBQUdELEtBSkQsQ0FJRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFDRGIsa0JBQUlDLElBQUosQ0FBU0UseUJBQXlCLENBQUNqQixNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxDQUFsQyxFQUFzRGlCLE9BQU8sQ0FBQ1AsSUFBOUQ7QUFDRCxDQVh5QixFQVd2QjtBQUFDZ0IsRUFBQUEsU0FBUyxFQUFFO0FBQVosQ0FYdUIsQ0FBMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdAY29sb3JzL2NvbG9ycyc7XG5pbXBvcnQgbW9yZ2FuIGZyb20gJ21vcmdhbic7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IE1BWF9MT0dfQk9EWV9MRU5HVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5cbi8vIENvcGllZCB0aGUgbW9yZ2FuIGNvbXBpbGUgZnVuY3Rpb24gb3ZlciBzbyB0aGF0IGNvb2xlciBmb3JtYXRzXG4vLyBtYXkgYmUgY29uZmlndXJlZFxuZnVuY3Rpb24gY29tcGlsZSAoZm10KSB7XG4gIC8vIGVzY2FwZSBxdW90ZXNcbiAgZm10ID0gZm10LnJlcGxhY2UoL1wiL2csICdcXFxcXCInKTtcbiAgZm10ID0gZm10LnJlcGxhY2UoLzooWy1cXHddezIsfSkoPzpcXFsoW15cXF1dKylcXF0pPy9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2UgKF8sIG5hbWUsIGFyZykge1xuICAgICAgcmV0dXJuIGBcIlxcbiAgICArICh0b2tlbnNbXCIke25hbWV9XCJdKHJlcSwgcmVzLCBcIiR7YXJnfVwiKSB8fCBcIi1cIikgKyBcImA7XG4gICAgfSk7XG4gIGxldCBqcyA9IGAgIHJldHVybiBcIiR7Zm10fVwiO2A7XG4gIHJldHVybiBuZXcgRnVuY3Rpb24oJ3Rva2VucywgcmVxLCByZXMnLCBqcyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RFbmRMb2dnaW5nRm9ybWF0ICh0b2tlbnMsIHJlcSwgcmVzKSB7XG4gIGxldCBzdGF0dXMgPSByZXMuc3RhdHVzQ29kZTtcbiAgbGV0IHN0YXR1c1N0ciA9ICc6c3RhdHVzJztcbiAgaWYgKHN0YXR1cyA+PSA1MDApIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIucmVkO1xuICB9IGVsc2UgaWYgKHN0YXR1cyA+PSA0MDApIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIueWVsbG93O1xuICB9IGVsc2UgaWYgKHN0YXR1cyA+PSAzMDApIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIuY3lhbjtcbiAgfSBlbHNlIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIuZ3JlZW47XG4gIH1cbiAgbGV0IGZuID0gY29tcGlsZShgJHsnPC0tIDptZXRob2QgOnVybCAnLndoaXRlfSR7c3RhdHVzU3RyfSAkeyc6cmVzcG9uc2UtdGltZSBtcyAtIDpyZXNbY29udGVudC1sZW5ndGhdJy5ncmV5fWApO1xuICByZXR1cm4gZm4odG9rZW5zLCByZXEsIHJlcyk7XG59XG5cbmNvbnN0IGVuZExvZ0Zvcm1hdHRlciA9IG1vcmdhbigodG9rZW5zLCByZXEsIHJlcykgPT4ge1xuICBsb2cuaW5mbyhyZXF1ZXN0RW5kTG9nZ2luZ0Zvcm1hdCh0b2tlbnMsIHJlcSwgcmVzKSxcbiAgICAocmVzLmpzb25SZXNwIHx8ICcnKS5ncmV5KTtcbn0pO1xuXG5jb25zdCByZXF1ZXN0U3RhcnRMb2dnaW5nRm9ybWF0ID0gY29tcGlsZShgJHsnLS0+Jy53aGl0ZX0gJHsnOm1ldGhvZCcud2hpdGV9ICR7Jzp1cmwnLndoaXRlfWApO1xuXG5jb25zdCBzdGFydExvZ0Zvcm1hdHRlciA9IG1vcmdhbigodG9rZW5zLCByZXEsIHJlcykgPT4ge1xuICAvLyBtb3JnYW4gb3V0cHV0IGlzIHJlZGlyZWN0ZWQgc3RyYWlnaHQgdG8gd2luc3RvblxuICBsZXQgcmVxQm9keSA9ICcnO1xuICBpZiAocmVxLmJvZHkpIHtcbiAgICB0cnkge1xuICAgICAgcmVxQm9keSA9IF8udHJ1bmNhdGUoXy5pc1N0cmluZyhyZXEuYm9keSkgPyByZXEuYm9keSA6IEpTT04uc3RyaW5naWZ5KHJlcS5ib2R5KSwge1xuICAgICAgICBsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEgsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbiAgbG9nLmluZm8ocmVxdWVzdFN0YXJ0TG9nZ2luZ0Zvcm1hdCh0b2tlbnMsIHJlcSwgcmVzKSwgcmVxQm9keS5ncmV5KTtcbn0sIHtpbW1lZGlhdGU6IHRydWV9KTtcblxuZXhwb3J0IHsgZW5kTG9nRm9ybWF0dGVyLCBzdGFydExvZ0Zvcm1hdHRlciB9O1xuIl0sImZpbGUiOiJsaWIvZXhwcmVzcy9leHByZXNzLWxvZ2dpbmcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
69
|
+
exports.startLogFormatter = startLogFormatter;
|
|
70
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHByZXNzL2V4cHJlc3MtbG9nZ2luZy5qcyJdLCJuYW1lcyI6WyJjb21waWxlIiwiZm10IiwicmVwbGFjZSIsIl8iLCJuYW1lIiwiYXJnIiwianMiLCJGdW5jdGlvbiIsInJlcXVlc3RFbmRMb2dnaW5nRm9ybWF0IiwidG9rZW5zIiwicmVxIiwicmVzIiwic3RhdHVzIiwic3RhdHVzQ29kZSIsInN0YXR1c1N0ciIsInJlZCIsInllbGxvdyIsImN5YW4iLCJncmVlbiIsImZuIiwid2hpdGUiLCJncmV5IiwiZW5kTG9nRm9ybWF0dGVyIiwibG9nIiwiaW5mbyIsImpzb25SZXNwIiwicmVxdWVzdFN0YXJ0TG9nZ2luZ0Zvcm1hdCIsInN0YXJ0TG9nRm9ybWF0dGVyIiwicmVxQm9keSIsImJvZHkiLCJ0cnVuY2F0ZSIsImlzU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsImxlbmd0aCIsIk1BWF9MT0dfQk9EWV9MRU5HVEgiLCJpZ24iLCJpbW1lZGlhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsU0FBU0EsT0FBVCxDQUFrQkMsR0FBbEIsRUFBdUI7QUFFckJBLEVBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDQyxPQUFKLENBQVksSUFBWixFQUFrQixLQUFsQixDQUFOO0FBQ0FELEVBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDQyxPQUFKLENBQVksZ0NBQVosRUFDSixTQUFTQSxPQUFULENBQWtCQyxDQUFsQixFQUFxQkMsSUFBckIsRUFBMkJDLEdBQTNCLEVBQWdDO0FBQzlCLFdBQVEscUJBQW9CRCxJQUFLLGlCQUFnQkMsR0FBSSxnQkFBckQ7QUFDRCxHQUhHLENBQU47QUFJQSxNQUFJQyxFQUFFLEdBQUksYUFBWUwsR0FBSSxJQUExQjtBQUNBLFNBQU8sSUFBSU0sUUFBSixDQUFhLGtCQUFiLEVBQWlDRCxFQUFqQyxDQUFQO0FBQ0Q7O0FBRUQsU0FBU0UsdUJBQVQsQ0FBa0NDLE1BQWxDLEVBQTBDQyxHQUExQyxFQUErQ0MsR0FBL0MsRUFBb0Q7QUFDbEQsTUFBSUMsTUFBTSxHQUFHRCxHQUFHLENBQUNFLFVBQWpCO0FBQ0EsTUFBSUMsU0FBUyxHQUFHLFNBQWhCOztBQUNBLE1BQUlGLE1BQU0sSUFBSSxHQUFkLEVBQW1CO0FBQ2pCRSxJQUFBQSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0MsR0FBdEI7QUFDRCxHQUZELE1BRU8sSUFBSUgsTUFBTSxJQUFJLEdBQWQsRUFBbUI7QUFDeEJFLElBQUFBLFNBQVMsR0FBR0EsU0FBUyxDQUFDRSxNQUF0QjtBQUNELEdBRk0sTUFFQSxJQUFJSixNQUFNLElBQUksR0FBZCxFQUFtQjtBQUN4QkUsSUFBQUEsU0FBUyxHQUFHQSxTQUFTLENBQUNHLElBQXRCO0FBQ0QsR0FGTSxNQUVBO0FBQ0xILElBQUFBLFNBQVMsR0FBR0EsU0FBUyxDQUFDSSxLQUF0QjtBQUNEOztBQUNELE1BQUlDLEVBQUUsR0FBR25CLE9BQU8sQ0FBRSxHQUFFLG9CQUFvQm9CLEtBQU0sR0FBRU4sU0FBVSxJQUFHLDJDQUEyQ08sSUFBSyxFQUE3RixDQUFoQjtBQUNBLFNBQU9GLEVBQUUsQ0FBQ1YsTUFBRCxFQUFTQyxHQUFULEVBQWNDLEdBQWQsQ0FBVDtBQUNEOztBQUVELE1BQU1XLGVBQWUsR0FBRyxxQkFBTyxDQUFDYixNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxLQUFzQjtBQUNuRFksa0JBQUlDLElBQUosQ0FBU2hCLHVCQUF1QixDQUFDQyxNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxDQUFoQyxFQUNFLENBQUNBLEdBQUcsQ0FBQ2MsUUFBSixJQUFnQixFQUFqQixFQUFxQkosSUFEdkI7QUFFRCxDQUh1QixDQUF4Qjs7QUFLQSxNQUFNSyx5QkFBeUIsR0FBRzFCLE9BQU8sQ0FBRSxHQUFFLE1BQU1vQixLQUFNLElBQUcsVUFBVUEsS0FBTSxJQUFHLE9BQU9BLEtBQU0sRUFBbkQsQ0FBekM7QUFFQSxNQUFNTyxpQkFBaUIsR0FBRyxxQkFBTyxDQUFDbEIsTUFBRCxFQUFTQyxHQUFULEVBQWNDLEdBQWQsS0FBc0I7QUFFckQsTUFBSWlCLE9BQU8sR0FBRyxFQUFkOztBQUNBLE1BQUlsQixHQUFHLENBQUNtQixJQUFSLEVBQWM7QUFDWixRQUFJO0FBQ0ZELE1BQUFBLE9BQU8sR0FBR3pCLGdCQUFFMkIsUUFBRixDQUFXM0IsZ0JBQUU0QixRQUFGLENBQVdyQixHQUFHLENBQUNtQixJQUFmLElBQXVCbkIsR0FBRyxDQUFDbUIsSUFBM0IsR0FBa0NHLElBQUksQ0FBQ0MsU0FBTCxDQUFldkIsR0FBRyxDQUFDbUIsSUFBbkIsQ0FBN0MsRUFBdUU7QUFDL0VLLFFBQUFBLE1BQU0sRUFBRUM7QUFEdUUsT0FBdkUsQ0FBVjtBQUdELEtBSkQsQ0FJRSxPQUFPQyxHQUFQLEVBQVksQ0FBRTtBQUNqQjs7QUFDRGIsa0JBQUlDLElBQUosQ0FBU0UseUJBQXlCLENBQUNqQixNQUFELEVBQVNDLEdBQVQsRUFBY0MsR0FBZCxDQUFsQyxFQUFzRGlCLE9BQU8sQ0FBQ1AsSUFBOUQ7QUFDRCxDQVh5QixFQVd2QjtBQUFDZ0IsRUFBQUEsU0FBUyxFQUFFO0FBQVosQ0FYdUIsQ0FBMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdAY29sb3JzL2NvbG9ycyc7XG5pbXBvcnQgbW9yZ2FuIGZyb20gJ21vcmdhbic7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IE1BWF9MT0dfQk9EWV9MRU5HVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5cbi8vIENvcGllZCB0aGUgbW9yZ2FuIGNvbXBpbGUgZnVuY3Rpb24gb3ZlciBzbyB0aGF0IGNvb2xlciBmb3JtYXRzXG4vLyBtYXkgYmUgY29uZmlndXJlZFxuZnVuY3Rpb24gY29tcGlsZSAoZm10KSB7XG4gIC8vIGVzY2FwZSBxdW90ZXNcbiAgZm10ID0gZm10LnJlcGxhY2UoL1wiL2csICdcXFxcXCInKTtcbiAgZm10ID0gZm10LnJlcGxhY2UoLzooWy1cXHddezIsfSkoPzpcXFsoW15cXF1dKylcXF0pPy9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2UgKF8sIG5hbWUsIGFyZykge1xuICAgICAgcmV0dXJuIGBcIlxcbiAgICArICh0b2tlbnNbXCIke25hbWV9XCJdKHJlcSwgcmVzLCBcIiR7YXJnfVwiKSB8fCBcIi1cIikgKyBcImA7XG4gICAgfSk7XG4gIGxldCBqcyA9IGAgIHJldHVybiBcIiR7Zm10fVwiO2A7XG4gIHJldHVybiBuZXcgRnVuY3Rpb24oJ3Rva2VucywgcmVxLCByZXMnLCBqcyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RFbmRMb2dnaW5nRm9ybWF0ICh0b2tlbnMsIHJlcSwgcmVzKSB7XG4gIGxldCBzdGF0dXMgPSByZXMuc3RhdHVzQ29kZTtcbiAgbGV0IHN0YXR1c1N0ciA9ICc6c3RhdHVzJztcbiAgaWYgKHN0YXR1cyA+PSA1MDApIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIucmVkO1xuICB9IGVsc2UgaWYgKHN0YXR1cyA+PSA0MDApIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIueWVsbG93O1xuICB9IGVsc2UgaWYgKHN0YXR1cyA+PSAzMDApIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIuY3lhbjtcbiAgfSBlbHNlIHtcbiAgICBzdGF0dXNTdHIgPSBzdGF0dXNTdHIuZ3JlZW47XG4gIH1cbiAgbGV0IGZuID0gY29tcGlsZShgJHsnPC0tIDptZXRob2QgOnVybCAnLndoaXRlfSR7c3RhdHVzU3RyfSAkeyc6cmVzcG9uc2UtdGltZSBtcyAtIDpyZXNbY29udGVudC1sZW5ndGhdJy5ncmV5fWApO1xuICByZXR1cm4gZm4odG9rZW5zLCByZXEsIHJlcyk7XG59XG5cbmNvbnN0IGVuZExvZ0Zvcm1hdHRlciA9IG1vcmdhbigodG9rZW5zLCByZXEsIHJlcykgPT4ge1xuICBsb2cuaW5mbyhyZXF1ZXN0RW5kTG9nZ2luZ0Zvcm1hdCh0b2tlbnMsIHJlcSwgcmVzKSxcbiAgICAocmVzLmpzb25SZXNwIHx8ICcnKS5ncmV5KTtcbn0pO1xuXG5jb25zdCByZXF1ZXN0U3RhcnRMb2dnaW5nRm9ybWF0ID0gY29tcGlsZShgJHsnLS0+Jy53aGl0ZX0gJHsnOm1ldGhvZCcud2hpdGV9ICR7Jzp1cmwnLndoaXRlfWApO1xuXG5jb25zdCBzdGFydExvZ0Zvcm1hdHRlciA9IG1vcmdhbigodG9rZW5zLCByZXEsIHJlcykgPT4ge1xuICAvLyBtb3JnYW4gb3V0cHV0IGlzIHJlZGlyZWN0ZWQgc3RyYWlnaHQgdG8gd2luc3RvblxuICBsZXQgcmVxQm9keSA9ICcnO1xuICBpZiAocmVxLmJvZHkpIHtcbiAgICB0cnkge1xuICAgICAgcmVxQm9keSA9IF8udHJ1bmNhdGUoXy5pc1N0cmluZyhyZXEuYm9keSkgPyByZXEuYm9keSA6IEpTT04uc3RyaW5naWZ5KHJlcS5ib2R5KSwge1xuICAgICAgICBsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEgsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gIH1cbiAgbG9nLmluZm8ocmVxdWVzdFN0YXJ0TG9nZ2luZ0Zvcm1hdCh0b2tlbnMsIHJlcSwgcmVzKSwgcmVxQm9keS5ncmV5KTtcbn0sIHtpbW1lZGlhdGU6IHRydWV9KTtcblxuZXhwb3J0IHsgZW5kTG9nRm9ybWF0dGVyLCBzdGFydExvZ0Zvcm1hdHRlciB9O1xuIl19
|