@appium/base-driver 8.7.1 → 8.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/build/lib/basedriver/capabilities.d.ts +207 -42
  2. package/build/lib/basedriver/capabilities.d.ts.map +1 -1
  3. package/build/lib/basedriver/capabilities.js +39 -44
  4. package/build/lib/basedriver/capabilities.js.map +1 -0
  5. package/build/lib/basedriver/commands/event.js +3 -3
  6. package/build/lib/basedriver/commands/event.js.map +1 -0
  7. package/build/lib/basedriver/commands/execute.js +3 -3
  8. package/build/lib/basedriver/commands/execute.js.map +1 -0
  9. package/build/lib/basedriver/commands/find.js.map +1 -0
  10. package/build/lib/basedriver/commands/index.js.map +1 -0
  11. package/build/lib/basedriver/commands/log.js +3 -3
  12. package/build/lib/basedriver/commands/log.js.map +1 -0
  13. package/build/lib/basedriver/commands/session.js +3 -3
  14. package/build/lib/basedriver/commands/session.js.map +1 -0
  15. package/build/lib/basedriver/commands/settings.js.map +1 -0
  16. package/build/lib/basedriver/commands/timeout.js +3 -3
  17. package/build/lib/basedriver/commands/timeout.js.map +1 -0
  18. package/build/lib/basedriver/core.d.ts +171 -20
  19. package/build/lib/basedriver/core.d.ts.map +1 -1
  20. package/build/lib/basedriver/core.js +4 -6
  21. package/build/lib/basedriver/core.js.map +1 -0
  22. package/build/lib/basedriver/desired-caps.d.ts +0 -2
  23. package/build/lib/basedriver/desired-caps.d.ts.map +1 -1
  24. package/build/lib/basedriver/desired-caps.js +4 -53
  25. package/build/lib/basedriver/desired-caps.js.map +1 -0
  26. package/build/lib/basedriver/device-settings.js +3 -3
  27. package/build/lib/basedriver/device-settings.js.map +1 -0
  28. package/build/lib/basedriver/driver.d.ts +323 -28
  29. package/build/lib/basedriver/driver.d.ts.map +1 -1
  30. package/build/lib/basedriver/driver.js +27 -30
  31. package/build/lib/basedriver/driver.js.map +1 -0
  32. package/build/lib/basedriver/helpers.d.ts +1 -1
  33. package/build/lib/basedriver/helpers.d.ts.map +1 -1
  34. package/build/lib/basedriver/helpers.js +3 -3
  35. package/build/lib/basedriver/helpers.js.map +1 -0
  36. package/build/lib/basedriver/logger.js.map +1 -0
  37. package/build/lib/constants.js.map +1 -0
  38. package/build/lib/express/crash.js.map +1 -0
  39. package/build/lib/express/express-logging.js +3 -3
  40. package/build/lib/express/express-logging.js.map +1 -0
  41. package/build/lib/express/idempotency.js +3 -3
  42. package/build/lib/express/idempotency.js.map +1 -0
  43. package/build/lib/express/logger.js.map +1 -0
  44. package/build/lib/express/middleware.js +3 -3
  45. package/build/lib/express/middleware.js.map +1 -0
  46. package/build/lib/express/server.js +3 -3
  47. package/build/lib/express/server.js.map +1 -0
  48. package/build/lib/express/static.js +3 -3
  49. package/build/lib/express/static.js.map +1 -0
  50. package/build/lib/express/websocket.js +3 -3
  51. package/build/lib/express/websocket.js.map +1 -0
  52. package/build/lib/helpers/capabilities.d.ts +66 -5
  53. package/build/lib/helpers/capabilities.d.ts.map +1 -1
  54. package/build/lib/helpers/capabilities.js +7 -7
  55. package/build/lib/helpers/capabilities.js.map +1 -0
  56. package/build/lib/index.d.ts +1 -1
  57. package/build/lib/index.d.ts.map +1 -1
  58. package/build/lib/index.js +10 -3
  59. package/build/lib/index.js.map +1 -0
  60. package/build/lib/jsonwp-proxy/protocol-converter.js +3 -3
  61. package/build/lib/jsonwp-proxy/protocol-converter.js.map +1 -0
  62. package/build/lib/jsonwp-proxy/proxy.js +3 -3
  63. package/build/lib/jsonwp-proxy/proxy.js.map +1 -0
  64. package/build/lib/jsonwp-status/status.js +3 -3
  65. package/build/lib/jsonwp-status/status.js.map +1 -0
  66. package/build/lib/protocol/errors.js +3 -3
  67. package/build/lib/protocol/errors.js.map +1 -0
  68. package/build/lib/protocol/helpers.js +3 -3
  69. package/build/lib/protocol/helpers.js.map +1 -0
  70. package/build/lib/protocol/index.js.map +1 -0
  71. package/build/lib/protocol/protocol.js +3 -3
  72. package/build/lib/protocol/protocol.js.map +1 -0
  73. package/build/lib/protocol/routes.js +3 -3
  74. package/build/lib/protocol/routes.js.map +1 -0
  75. package/build/lib/protocol/validators.js +3 -3
  76. package/build/lib/protocol/validators.js.map +1 -0
  77. package/build/tsconfig.tsbuildinfo +1 -1
  78. package/lib/basedriver/capabilities.js +151 -93
  79. package/lib/basedriver/core.js +34 -18
  80. package/lib/basedriver/desired-caps.js +1 -53
  81. package/lib/basedriver/driver.js +113 -51
  82. package/lib/helpers/capabilities.js +19 -9
  83. package/lib/index.js +1 -0
  84. package/package.json +9 -10
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -19,6 +17,7 @@ var _exportNames = {
19
17
  getSummaryByCode: true,
20
18
  statusCodes: true,
21
19
  PREFIXED_APPIUM_OPTS_CAP: true,
20
+ STANDARD_CAPS: true,
22
21
  processCapabilities: true,
23
22
  isStandardCap: true,
24
23
  validateCaps: true,
@@ -72,6 +71,12 @@ Object.defineProperty(exports, "PROTOCOLS", {
72
71
  return _constants.PROTOCOLS;
73
72
  }
74
73
  });
74
+ Object.defineProperty(exports, "STANDARD_CAPS", {
75
+ enumerable: true,
76
+ get: function () {
77
+ return _capabilities.STANDARD_CAPS;
78
+ }
79
+ });
75
80
  Object.defineProperty(exports, "STATIC_DIR", {
76
81
  enumerable: true,
77
82
  get: function () {
@@ -166,10 +171,12 @@ var _capabilities = require("./basedriver/capabilities");
166
171
 
167
172
  var _websocket = require("./express/websocket");
168
173
 
174
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
175
+
169
176
  _bluebird.default.config({
170
177
  cancellation: true
171
178
  });
172
179
 
173
180
  var _default = _driver.BaseDriver;
174
181
  exports.default = _default;
175
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCIiwiY29uZmlnIiwiY2FuY2VsbGF0aW9uIiwiQmFzZURyaXZlciJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbkIuY29uZmlnKHtcbiAgY2FuY2VsbGF0aW9uOiB0cnVlLFxufSk7XG5cbi8vIEJhc2VEcml2ZXIgZXhwb3J0c1xuaW1wb3J0IHtCYXNlRHJpdmVyfSBmcm9tICcuL2Jhc2Vkcml2ZXIvZHJpdmVyJztcbmV4cG9ydCB7RHJpdmVyQ29yZX0gZnJvbSAnLi9iYXNlZHJpdmVyL2NvcmUnO1xuZXhwb3J0IHtEZXZpY2VTZXR0aW5nc30gZnJvbSAnLi9iYXNlZHJpdmVyL2RldmljZS1zZXR0aW5ncyc7XG5cbmV4cG9ydCB7QmFzZURyaXZlcn07XG5leHBvcnQgZGVmYXVsdCBCYXNlRHJpdmVyO1xuXG4vLyBNSlNPTldQIGV4cG9ydHNcbmV4cG9ydCAqIGZyb20gJy4vcHJvdG9jb2wnO1xuZXhwb3J0IHtlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSBhcyBlcnJvckZyb21Db2RlfSBmcm9tICcuL3Byb3RvY29sJztcbmV4cG9ydCB7REVGQVVMVF9CQVNFX1BBVEgsIFBST1RPQ09MU30gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vLyBFeHByZXNzIGV4cG9ydHNcbmV4cG9ydCB7U1RBVElDX0RJUn0gZnJvbSAnLi9leHByZXNzL3N0YXRpYyc7XG5leHBvcnQge3NlcnZlciwgbm9ybWFsaXplQmFzZVBhdGh9IGZyb20gJy4vZXhwcmVzcy9zZXJ2ZXInO1xuXG4vLyBqc29ud3AtcHJveHkgZXhwb3J0c1xuZXhwb3J0IHtKV1Byb3h5fSBmcm9tICcuL2pzb253cC1wcm94eS9wcm94eSc7XG5cbi8vIGpzb253cC1zdGF0dXMgZXhwb3J0c1xuZXhwb3J0IHtnZXRTdW1tYXJ5QnlDb2RlLCBjb2RlcyBhcyBzdGF0dXNDb2Rlc30gZnJvbSAnLi9qc29ud3Atc3RhdHVzL3N0YXR1cyc7XG5cbi8vIFczQyBjYXBhYmlsaXRpZXMgcGFyc2VyXG5leHBvcnQge1xuICBQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVAsXG4gIHByb2Nlc3NDYXBhYmlsaXRpZXMsXG4gIGlzU3RhbmRhcmRDYXAsXG4gIHZhbGlkYXRlQ2Fwcyxcbn0gZnJvbSAnLi9iYXNlZHJpdmVyL2NhcGFiaWxpdGllcyc7XG5cbi8vIFdlYiBzb2NrZXQgaGVscGVyc1xuZXhwb3J0IHtERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWH0gZnJvbSAnLi9leHByZXNzL3dlYnNvY2tldCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9leHByZXNzL3NlcnZlcicpLlNlcnZlck9wdHN9IFNlcnZlck9wdHNcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFPQTs7QUFDQTs7QUFDQTs7QUFNQTs7QUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0lBQUE7SUFBQTtNQUFBO0lBQUE7RUFBQTtBQUFBOztBQUVBOztBQUdBOztBQUNBOztBQUdBOztBQUdBOztBQUdBOztBQVFBOztBQXBDQUEsaUJBQUEsQ0FBRUMsTUFBRixDQUFTO0VBQ1BDLFlBQVksRUFBRTtBQURQLENBQVQ7O2VBVWVDLGtCIn0=
182
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCIiwiY29uZmlnIiwiY2FuY2VsbGF0aW9uIiwiQmFzZURyaXZlciJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5cbkIuY29uZmlnKHtcbiAgY2FuY2VsbGF0aW9uOiB0cnVlLFxufSk7XG5cbi8vIEJhc2VEcml2ZXIgZXhwb3J0c1xuaW1wb3J0IHtCYXNlRHJpdmVyfSBmcm9tICcuL2Jhc2Vkcml2ZXIvZHJpdmVyJztcbmV4cG9ydCB7RHJpdmVyQ29yZX0gZnJvbSAnLi9iYXNlZHJpdmVyL2NvcmUnO1xuZXhwb3J0IHtEZXZpY2VTZXR0aW5nc30gZnJvbSAnLi9iYXNlZHJpdmVyL2RldmljZS1zZXR0aW5ncyc7XG5cbmV4cG9ydCB7QmFzZURyaXZlcn07XG5leHBvcnQgZGVmYXVsdCBCYXNlRHJpdmVyO1xuXG4vLyBNSlNPTldQIGV4cG9ydHNcbmV4cG9ydCAqIGZyb20gJy4vcHJvdG9jb2wnO1xuZXhwb3J0IHtlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSBhcyBlcnJvckZyb21Db2RlfSBmcm9tICcuL3Byb3RvY29sJztcbmV4cG9ydCB7REVGQVVMVF9CQVNFX1BBVEgsIFBST1RPQ09MU30gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vLyBFeHByZXNzIGV4cG9ydHNcbmV4cG9ydCB7U1RBVElDX0RJUn0gZnJvbSAnLi9leHByZXNzL3N0YXRpYyc7XG5leHBvcnQge3NlcnZlciwgbm9ybWFsaXplQmFzZVBhdGh9IGZyb20gJy4vZXhwcmVzcy9zZXJ2ZXInO1xuXG4vLyBqc29ud3AtcHJveHkgZXhwb3J0c1xuZXhwb3J0IHtKV1Byb3h5fSBmcm9tICcuL2pzb253cC1wcm94eS9wcm94eSc7XG5cbi8vIGpzb253cC1zdGF0dXMgZXhwb3J0c1xuZXhwb3J0IHtnZXRTdW1tYXJ5QnlDb2RlLCBjb2RlcyBhcyBzdGF0dXNDb2Rlc30gZnJvbSAnLi9qc29ud3Atc3RhdHVzL3N0YXR1cyc7XG5cbi8vIFczQyBjYXBhYmlsaXRpZXMgcGFyc2VyXG5leHBvcnQge1xuICBQUkVGSVhFRF9BUFBJVU1fT1BUU19DQVAsXG4gIFNUQU5EQVJEX0NBUFMsXG4gIHByb2Nlc3NDYXBhYmlsaXRpZXMsXG4gIGlzU3RhbmRhcmRDYXAsXG4gIHZhbGlkYXRlQ2Fwcyxcbn0gZnJvbSAnLi9iYXNlZHJpdmVyL2NhcGFiaWxpdGllcyc7XG5cbi8vIFdlYiBzb2NrZXQgaGVscGVyc1xuZXhwb3J0IHtERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWH0gZnJvbSAnLi9leHByZXNzL3dlYnNvY2tldCc7XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9leHByZXNzL3NlcnZlcicpLlNlcnZlck9wdHN9IFNlcnZlck9wdHNcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQU9BOztBQUNBOztBQUNBOztBQU1BOztBQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7SUFBQTtJQUFBO01BQUE7SUFBQTtFQUFBO0FBQUE7O0FBRUE7O0FBR0E7O0FBQ0E7O0FBR0E7O0FBR0E7O0FBR0E7O0FBU0E7Ozs7QUFyQ0FBLGlCQUFBLENBQUVDLE1BQUYsQ0FBUztFQUNQQyxZQUFZLEVBQUU7QUFEUCxDQUFUOztlQVVlQyxrQiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["B","config","cancellation","BaseDriver"],"sources":["../../lib/index.js"],"sourcesContent":["import B from 'bluebird';\n\nB.config({\n cancellation: true,\n});\n\n// BaseDriver exports\nimport {BaseDriver} from './basedriver/driver';\nexport {DriverCore} from './basedriver/core';\nexport {DeviceSettings} from './basedriver/device-settings';\n\nexport {BaseDriver};\nexport default BaseDriver;\n\n// MJSONWP exports\nexport * from './protocol';\nexport {errorFromMJSONWPStatusCode as errorFromCode} from './protocol';\nexport {DEFAULT_BASE_PATH, PROTOCOLS} from './constants';\n\n// Express exports\nexport {STATIC_DIR} from './express/static';\nexport {server, normalizeBasePath} from './express/server';\n\n// jsonwp-proxy exports\nexport {JWProxy} from './jsonwp-proxy/proxy';\n\n// jsonwp-status exports\nexport {getSummaryByCode, codes as statusCodes} from './jsonwp-status/status';\n\n// W3C capabilities parser\nexport {\n PREFIXED_APPIUM_OPTS_CAP,\n STANDARD_CAPS,\n processCapabilities,\n isStandardCap,\n validateCaps,\n} from './basedriver/capabilities';\n\n// Web socket helpers\nexport {DEFAULT_WS_PATHNAME_PREFIX} from './express/websocket';\n\n/**\n * @typedef {import('./express/server').ServerOpts} ServerOpts\n */\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAOA;;AACA;;AACA;;AAMA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AAGA;;AACA;;AAGA;;AAGA;;AAGA;;AASA;;;;AArCAA,iBAAA,CAAEC,MAAF,CAAS;EACPC,YAAY,EAAE;AADP,CAAT;;eAUeC,kB"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -17,6 +15,8 @@ var _helpers = require("../basedriver/helpers");
17
15
 
18
16
  var _constants = require("../constants");
19
17
 
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
20
20
  const COMMAND_URLS_CONFLICTS = [{
21
21
  commandNames: ['execute', 'executeAsync'],
22
22
  jsonwpConverter: url => url.replace(/\/execute.*/, url.includes('async') ? '/execute_async' : '/execute'),
@@ -236,4 +236,4 @@ class ProtocolConverter {
236
236
 
237
237
  var _default = ProtocolConverter;
238
238
  exports.default = _default;
239
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT01NQU5EX1VSTFNfQ09ORkxJQ1RTIiwiY29tbWFuZE5hbWVzIiwianNvbndwQ29udmVydGVyIiwidXJsIiwicmVwbGFjZSIsImluY2x1ZGVzIiwidzNjQ29udmVydGVyIiwidGVzdCIsInczY1VybCIsInczY1Byb3BlcnR5UmVnZXgiLCJqc29ud3BVcmwiLCJNSlNPTldQIiwiVzNDIiwiUFJPVE9DT0xTIiwiREVGQVVMVF9MT0ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJQcm90b2NvbENvbnZlcnRlciIsImNvbnN0cnVjdG9yIiwicHJveHlGdW5jIiwibG9nIiwiX2Rvd25zdHJlYW1Qcm90b2NvbCIsIl9sb2ciLCJkb3duc3RyZWFtUHJvdG9jb2wiLCJ2YWx1ZSIsImdldFRpbWVvdXRSZXF1ZXN0T2JqZWN0cyIsImJvZHkiLCJfIiwiaGFzIiwidHlwZVRvVzNDIiwieCIsInR5cGUiLCJtcyIsInR5cGVUb0pTT05XUCIsInRvUGFpcnMiLCJmaWx0ZXIiLCJwYWlyIiwibWFwIiwicHJveHlTZXRUaW1lb3V0cyIsIm1ldGhvZCIsInJlc3BvbnNlIiwicmVzQm9keSIsInRpbWVvdXRSZXF1ZXN0T2JqZWN0cyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInRpbWVvdXRPYmoiLCJzdGF0dXNDb2RlIiwicHJveHlTZXRXaW5kb3ciLCJib2R5T2JqIiwidXRpbCIsInNhZmVKc29uUGFyc2UiLCJpc1BsYWluT2JqZWN0IiwibmFtZSIsImhhbmRsZSIsInByb3h5U2V0VmFsdWUiLCJoYXNWYWx1ZSIsInRleHQiLCJpc1N0cmluZyIsImlzQXJyYXkiLCJqb2luIiwiT2JqZWN0IiwiYXNzaWduIiwicHJveHlTZXRGcmFtZSIsImlkIiwiZHVwbGljYXRlS2V5cyIsIk1KU09OV1BfRUxFTUVOVF9LRVkiLCJXM0NfRUxFTUVOVF9LRVkiLCJwcm94eVBlcmZvcm1BY3Rpb25zIiwicHJveHlSZWxlYXNlQWN0aW9ucyIsImNvbnZlcnRBbmRQcm94eSIsImNvbW1hbmROYW1lIiwicmV3cml0dGVuVXJsIiwiaW5mbyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9qc29ud3AtcHJveHkvcHJvdG9jb2wtY29udmVydGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge2xvZ2dlciwgdXRpbH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7ZHVwbGljYXRlS2V5c30gZnJvbSAnLi4vYmFzZWRyaXZlci9oZWxwZXJzJztcbmltcG9ydCB7TUpTT05XUF9FTEVNRU5UX0tFWSwgVzNDX0VMRU1FTlRfS0VZLCBQUk9UT0NPTFN9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBDT01NQU5EX1VSTFNfQ09ORkxJQ1RTID0gW1xuICB7XG4gICAgY29tbWFuZE5hbWVzOiBbJ2V4ZWN1dGUnLCAnZXhlY3V0ZUFzeW5jJ10sXG4gICAganNvbndwQ29udmVydGVyOiAodXJsKSA9PlxuICAgICAgdXJsLnJlcGxhY2UoL1xcL2V4ZWN1dGUuKi8sIHVybC5pbmNsdWRlcygnYXN5bmMnKSA/ICcvZXhlY3V0ZV9hc3luYycgOiAnL2V4ZWN1dGUnKSxcbiAgICB3M2NDb252ZXJ0ZXI6ICh1cmwpID0+XG4gICAgICB1cmwucmVwbGFjZSgvXFwvZXhlY3V0ZS4qLywgdXJsLmluY2x1ZGVzKCdhc3luYycpID8gJy9leGVjdXRlL2FzeW5jJyA6ICcvZXhlY3V0ZS9zeW5jJyksXG4gIH0sXG4gIHtcbiAgICBjb21tYW5kTmFtZXM6IFsnZ2V0RWxlbWVudFNjcmVlbnNob3QnXSxcbiAgICBqc29ud3BDb252ZXJ0ZXI6ICh1cmwpID0+IHVybC5yZXBsYWNlKC9cXC9lbGVtZW50XFwvKFteL10rKVxcL3NjcmVlbnNob3QkLywgJy9zY3JlZW5zaG90LyQxJyksXG4gICAgdzNjQ29udmVydGVyOiAodXJsKSA9PiB1cmwucmVwbGFjZSgvXFwvc2NyZWVuc2hvdFxcLyhbXi9dKykvLCAnL2VsZW1lbnQvJDEvc2NyZWVuc2hvdCcpLFxuICB9LFxuICB7XG4gICAgY29tbWFuZE5hbWVzOiBbJ2dldFdpbmRvd0hhbmRsZXMnLCAnZ2V0V2luZG93SGFuZGxlJ10sXG4gICAganNvbndwQ29udmVydGVyKHVybCkge1xuICAgICAgcmV0dXJuIC9cXC93aW5kb3ckLy50ZXN0KHVybClcbiAgICAgICAgPyB1cmwucmVwbGFjZSgvXFwvd2luZG93JC8sICcvd2luZG93X2hhbmRsZScpXG4gICAgICAgIDogdXJsLnJlcGxhY2UoL1xcL3dpbmRvd1xcL2hhbmRsZShzPykkLywgJy93aW5kb3dfaGFuZGxlJDEnKTtcbiAgICB9LFxuICAgIHczY0NvbnZlcnRlcih1cmwpIHtcbiAgICAgIHJldHVybiAvXFwvd2luZG93X2hhbmRsZSQvLnRlc3QodXJsKVxuICAgICAgICA/IHVybC5yZXBsYWNlKC9cXC93aW5kb3dfaGFuZGxlJC8sICcvd2luZG93JylcbiAgICAgICAgOiB1cmwucmVwbGFjZSgvXFwvd2luZG93X2hhbmRsZXMkLywgJy93aW5kb3cvaGFuZGxlcycpO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBjb21tYW5kTmFtZXM6IFsnZ2V0UHJvcGVydHknXSxcbiAgICBqc29ud3BDb252ZXJ0ZXI6ICh3M2NVcmwpID0+IHtcbiAgICAgIGNvbnN0IHczY1Byb3BlcnR5UmVnZXggPSAvXFwvZWxlbWVudFxcLyhbXi9dKylcXC9wcm9wZXJ0eVxcLyhbXi9dKykvO1xuICAgICAgY29uc3QganNvbndwVXJsID0gdzNjVXJsLnJlcGxhY2UodzNjUHJvcGVydHlSZWdleCwgJy9lbGVtZW50LyQxL2F0dHJpYnV0ZS8kMicpO1xuICAgICAgcmV0dXJuIGpzb253cFVybDtcbiAgICB9LFxuICAgIHczY0NvbnZlcnRlcjogKGpzb253cFVybCkgPT4ganNvbndwVXJsLCAvLyBEb24ndCBjb252ZXJ0IEpTT05XUCBVUkwgdG8gVzNDLiBXM0MgYWNjZXB0cyAvYXR0cmlidXRlIGFuZCAvcHJvcGVydHlcbiAgfSxcbl07XG5jb25zdCB7TUpTT05XUCwgVzNDfSA9IFBST1RPQ09MUztcbmNvbnN0IERFRkFVTFRfTE9HID0gbG9nZ2VyLmdldExvZ2dlcignUHJvdG9jb2wgQ29udmVydGVyJyk7XG5cbmNsYXNzIFByb3RvY29sQ29udmVydGVyIHtcbiAgY29uc3RydWN0b3IocHJveHlGdW5jLCBsb2cgPSBudWxsKSB7XG4gICAgdGhpcy5wcm94eUZ1bmMgPSBwcm94eUZ1bmM7XG4gICAgdGhpcy5fZG93bnN0cmVhbVByb3RvY29sID0gbnVsbDtcbiAgICB0aGlzLl9sb2cgPSBsb2c7XG4gIH1cblxuICBnZXQgbG9nKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2cgPz8gREVGQVVMVF9MT0c7XG4gIH1cblxuICBzZXQgZG93bnN0cmVhbVByb3RvY29sKHZhbHVlKSB7XG4gICAgdGhpcy5fZG93bnN0cmVhbVByb3RvY29sID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZG93bnN0cmVhbVByb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLl9kb3duc3RyZWFtUHJvdG9jb2w7XG4gIH1cblxuICAvKipcbiAgICogVzNDIC90aW1lb3V0cyBjYW4gdGFrZSBhcyBtYW55IGFzIDMgdGltZW91dCB0eXBlcyBhdCBvbmNlLCBNSlNPTldQIC90aW1lb3V0cyBvbmx5IHRha2VzIG9uZVxuICAgKiBhdCBhIHRpbWUuIFNvIGlmIHdlJ3JlIHVzaW5nIFczQyBhbmQgcHJveHlpbmcgdG8gTUpTT05XUCBhbmQgdGhlcmUncyBtb3JlIHRoYW4gb25lIHRpbWVvdXQgdHlwZVxuICAgKiBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCwgd2UgbmVlZCB0byBkbyAzIHByb3hpZXMgYW5kIGNvbWJpbmUgdGhlIHJlc3VsdFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gYm9keSBSZXF1ZXN0IGJvZHlcbiAgICogQHJldHVybiB7QXJyYXl9IEFycmF5IG9mIFczQyArIE1KU09OV1AgY29tcGF0aWJsZSB0aW1lb3V0IG9iamVjdHNcbiAgICovXG4gIGdldFRpbWVvdXRSZXF1ZXN0T2JqZWN0cyhib2R5KSB7XG4gICAgaWYgKHRoaXMuZG93bnN0cmVhbVByb3RvY29sID09PSBXM0MgJiYgXy5oYXMoYm9keSwgJ21zJykgJiYgXy5oYXMoYm9keSwgJ3R5cGUnKSkge1xuICAgICAgY29uc3QgdHlwZVRvVzNDID0gKHgpID0+ICh4ID09PSAncGFnZSBsb2FkJyA/ICdwYWdlTG9hZCcgOiB4KTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBbdHlwZVRvVzNDKGJvZHkudHlwZSldOiBib2R5Lm1zLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kb3duc3RyZWFtUHJvdG9jb2wgPT09IE1KU09OV1AgJiYgKCFfLmhhcyhib2R5LCAnbXMnKSB8fCAhXy5oYXMoYm9keSwgJ3R5cGUnKSkpIHtcbiAgICAgIGNvbnN0IHR5cGVUb0pTT05XUCA9ICh4KSA9PiAoeCA9PT0gJ3BhZ2VMb2FkJyA/ICdwYWdlIGxvYWQnIDogeCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBfLnRvUGFpcnMoYm9keSlcbiAgICAgICAgICAvLyBPbmx5IHRyYW5zZm9ybSB0aGUgZW50cnkgaWYgbXMgdmFsdWUgaXMgYSB2YWxpZCBwb3NpdGl2ZSBmbG9hdCBudW1iZXJcbiAgICAgICAgICAuZmlsdGVyKChwYWlyKSA9PiAvXlxcZCsoPzpbLixdXFxkKj8pPyQvLnRlc3QoYCR7cGFpclsxXX1gKSlcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uIChwYWlyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0eXBlOiB0eXBlVG9KU09OV1AocGFpclswXSksXG4gICAgICAgICAgICAgIG1zOiBwYWlyWzFdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2JvZHldO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3h5IGFuIGFycmF5IG9mIHRpbWVvdXQgb2JqZWN0cyBhbmQgbWVyZ2UgdGhlIHJlc3VsdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIEVuZHBvaW50IHVybFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIEVuZHBvaW50IG1ldGhvZFxuICAgKiBAcGFyYW0ge09iamVjdH0gYm9keSBSZXF1ZXN0IGJvZHlcbiAgICovXG4gIGFzeW5jIHByb3h5U2V0VGltZW91dHModXJsLCBtZXRob2QsIGJvZHkpIHtcbiAgICBsZXQgcmVzcG9uc2UsIHJlc0JvZHk7XG5cbiAgICBjb25zdCB0aW1lb3V0UmVxdWVzdE9iamVjdHMgPSB0aGlzLmdldFRpbWVvdXRSZXF1ZXN0T2JqZWN0cyhib2R5KTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhcbiAgICAgIGBXaWxsIHNlbmQgdGhlIGZvbGxvd2luZyByZXF1ZXN0IGJvZGllcyB0byAvdGltZW91dHM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRpbWVvdXRSZXF1ZXN0T2JqZWN0c1xuICAgICAgKX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IHRpbWVvdXRPYmogb2YgdGltZW91dFJlcXVlc3RPYmplY3RzKSB7XG4gICAgICBbcmVzcG9uc2UsIHJlc0JvZHldID0gYXdhaXQgdGhpcy5wcm94eUZ1bmModXJsLCBtZXRob2QsIHRpbWVvdXRPYmopO1xuXG4gICAgICAvLyBJZiB3ZSBnb3QgYSBub24tTUpTT05XUCByZXNwb25zZSwgcmV0dXJuIHRoZSByZXN1bHQsIG5vdGhpbmcgbGVmdCB0byBkb1xuICAgICAgaWYgKHRoaXMuZG93bnN0cmVhbVByb3RvY29sICE9PSBNSlNPTldQKSB7XG4gICAgICAgIHJldHVybiBbcmVzcG9uc2UsIHJlc0JvZHldO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSBnb3QgYW4gZXJyb3IsIHJldHVybiB0aGUgZXJyb3IgcmlnaHQgYXdheVxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICAgIHJldHVybiBbcmVzcG9uc2UsIHJlc0JvZHldO1xuICAgICAgfVxuXG4gICAgICAvLyAuLi5PdGhlcndpc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRpbWVvdXRzIGNhbGxcbiAgICB9XG4gICAgcmV0dXJuIFtyZXNwb25zZSwgcmVzQm9keV07XG4gIH1cblxuICBhc3luYyBwcm94eVNldFdpbmRvdyh1cmwsIG1ldGhvZCwgYm9keSkge1xuICAgIGNvbnN0IGJvZHlPYmogPSB1dGlsLnNhZmVKc29uUGFyc2UoYm9keSk7XG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChib2R5T2JqKSkge1xuICAgICAgaWYgKHRoaXMuZG93bnN0cmVhbVByb3RvY29sID09PSBXM0MgJiYgXy5oYXMoYm9keU9iaiwgJ25hbWUnKSAmJiAhXy5oYXMoYm9keU9iaiwgJ2hhbmRsZScpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDb3BpZWQgJ25hbWUnIHZhbHVlICcke2JvZHlPYmoubmFtZX0nIHRvICdoYW5kbGUnIGFzIHBlciBXM0Mgc3BlY2ApO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUZ1bmModXJsLCBtZXRob2QsIHtcbiAgICAgICAgICAuLi5ib2R5T2JqLFxuICAgICAgICAgIGhhbmRsZTogYm9keU9iai5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kb3duc3RyZWFtUHJvdG9jb2wgPT09IE1KU09OV1AgJiZcbiAgICAgICAgXy5oYXMoYm9keU9iaiwgJ2hhbmRsZScpICYmXG4gICAgICAgICFfLmhhcyhib2R5T2JqLCAnbmFtZScpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYENvcGllZCAnaGFuZGxlJyB2YWx1ZSAnJHtib2R5T2JqLmhhbmRsZX0nIHRvICduYW1lJyBhcyBwZXIgSlNPTldQIHNwZWNgKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kLCB7XG4gICAgICAgICAgLi4uYm9keU9iaixcbiAgICAgICAgICBuYW1lOiBib2R5T2JqLmhhbmRsZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxuXG4gIGFzeW5jIHByb3h5U2V0VmFsdWUodXJsLCBtZXRob2QsIGJvZHkpIHtcbiAgICBjb25zdCBib2R5T2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKGJvZHkpO1xuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoYm9keU9iaikgJiYgKHV0aWwuaGFzVmFsdWUoYm9keU9iai50ZXh0KSB8fCB1dGlsLmhhc1ZhbHVlKGJvZHlPYmoudmFsdWUpKSkge1xuICAgICAgbGV0IHt0ZXh0LCB2YWx1ZX0gPSBib2R5T2JqO1xuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGV4dCkgJiYgIXV0aWwuaGFzVmFsdWUodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gXy5pc1N0cmluZyh0ZXh0KSA/IFsuLi50ZXh0XSA6IF8uaXNBcnJheSh0ZXh0KSA/IHRleHQgOiBbXTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICAgICAgYEFkZGVkICd2YWx1ZScgcHJvcGVydHkgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9IHRvICdzZXRWYWx1ZScgcmVxdWVzdCBib2R5YFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICghdXRpbC5oYXNWYWx1ZSh0ZXh0KSAmJiB1dGlsLmhhc1ZhbHVlKHZhbHVlKSkge1xuICAgICAgICB0ZXh0ID0gXy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJycpIDogXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6ICcnO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQWRkZWQgJ3RleHQnIHByb3BlcnR5ICR7SlNPTi5zdHJpbmdpZnkodGV4dCl9IHRvICdzZXRWYWx1ZScgcmVxdWVzdCBib2R5YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUZ1bmMoXG4gICAgICAgIHVybCxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBib2R5T2JqLCB7XG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxuXG4gIGFzeW5jIHByb3h5U2V0RnJhbWUodXJsLCBtZXRob2QsIGJvZHkpIHtcbiAgICBjb25zdCBib2R5T2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKGJvZHkpO1xuICAgIHJldHVybiBfLmhhcyhib2R5T2JqLCAnaWQnKSAmJiBfLmlzUGxhaW5PYmplY3QoYm9keU9iai5pZClcbiAgICAgID8gYXdhaXQgdGhpcy5wcm94eUZ1bmModXJsLCBtZXRob2QsIHtcbiAgICAgICAgICAuLi5ib2R5T2JqLFxuICAgICAgICAgIGlkOiBkdXBsaWNhdGVLZXlzKGJvZHlPYmouaWQsIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSksXG4gICAgICAgIH0pXG4gICAgICA6IGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxuXG4gIGFzeW5jIHByb3h5UGVyZm9ybUFjdGlvbnModXJsLCBtZXRob2QsIGJvZHkpIHtcbiAgICBjb25zdCBib2R5T2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKGJvZHkpO1xuICAgIHJldHVybiBfLmlzUGxhaW5PYmplY3QoYm9keU9iailcbiAgICAgID8gYXdhaXQgdGhpcy5wcm94eUZ1bmMoXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBkdXBsaWNhdGVLZXlzKGJvZHlPYmosIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSlcbiAgICAgICAgKVxuICAgICAgOiBhd2FpdCB0aGlzLnByb3h5RnVuYyh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cblxuICBhc3luYyBwcm94eVJlbGVhc2VBY3Rpb25zKHVybCwgbWV0aG9kKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgXCJjcm9zc2luZ1wiIGVuZHBvaW50cyBmb3IgdGhlIGNhc2VcbiAgICogd2hlbiB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBkcml2ZXJzIG9wZXJhdGUgZGlmZmVyZW50IHByb3RvY29sc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZE5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG4gICAqIEBwYXJhbSB7P3N0cmluZ3xvYmplY3R9IGJvZHlcbiAgICogQHJldHVybnMgVGhlIHByb3h5ZnlpbmcgcmVzdWx0IGFzIFtyZXNwb25zZSwgcmVzcG9uc2VCb2R5XSB0dXBsZVxuICAgKi9cbiAgYXN5bmMgY29udmVydEFuZFByb3h5KGNvbW1hbmROYW1lLCB1cmwsIG1ldGhvZCwgYm9keSkge1xuICAgIGlmICghdGhpcy5kb3duc3RyZWFtUHJvdG9jb2wpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5RnVuYyh1cmwsIG1ldGhvZCwgYm9keSk7XG4gICAgfVxuXG4gICAgLy8gU2FtZSB1cmwsIGJ1dCBkaWZmZXJlbnQgYXJndW1lbnRzXG4gICAgc3dpdGNoIChjb21tYW5kTmFtZSkge1xuICAgICAgY2FzZSAndGltZW91dHMnOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eVNldFRpbWVvdXRzKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgICAgIGNhc2UgJ3NldFdpbmRvdyc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5U2V0V2luZG93KHVybCwgbWV0aG9kLCBib2R5KTtcbiAgICAgIGNhc2UgJ3NldFZhbHVlJzpcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlTZXRWYWx1ZSh1cmwsIG1ldGhvZCwgYm9keSk7XG4gICAgICBjYXNlICdwZXJmb3JtQWN0aW9ucyc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5UGVyZm9ybUFjdGlvbnModXJsLCBtZXRob2QsIGJvZHkpO1xuICAgICAgY2FzZSAncmVsZWFzZUFjdGlvbnMnOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eVJlbGVhc2VBY3Rpb25zKHVybCwgbWV0aG9kKTtcbiAgICAgIGNhc2UgJ3NldEZyYW1lJzpcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlTZXRGcmFtZSh1cmwsIG1ldGhvZCwgYm9keSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBTYW1lIGFyZ3VtZW50cywgYnV0IGRpZmZlcmVudCBVUkxzXG4gICAgZm9yIChjb25zdCB7Y29tbWFuZE5hbWVzLCBqc29ud3BDb252ZXJ0ZXIsIHczY0NvbnZlcnRlcn0gb2YgQ09NTUFORF9VUkxTX0NPTkZMSUNUUykge1xuICAgICAgaWYgKCFjb21tYW5kTmFtZXMuaW5jbHVkZXMoY29tbWFuZE5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXdyaXR0ZW5VcmwgPVxuICAgICAgICB0aGlzLmRvd25zdHJlYW1Qcm90b2NvbCA9PT0gTUpTT05XUCA/IGpzb253cENvbnZlcnRlcih1cmwpIDogdzNjQ29udmVydGVyKHVybCk7XG4gICAgICBpZiAocmV3cml0dGVuVXJsID09PSB1cmwpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICAgICAgYERpZCBub3Qga25vdyBob3cgdG8gcmV3cml0ZSB0aGUgb3JpZ2luYWwgVVJMICcke3VybH0nIGAgK1xuICAgICAgICAgICAgYGZvciAke3RoaXMuZG93bnN0cmVhbVByb3RvY29sfSBwcm90b2NvbGBcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgICBgUmV3cm90ZSB0aGUgb3JpZ2luYWwgVVJMICcke3VybH0nIHRvICcke3Jld3JpdHRlblVybH0nIGAgK1xuICAgICAgICAgIGBmb3IgJHt0aGlzLmRvd25zdHJlYW1Qcm90b2NvbH0gcHJvdG9jb2xgXG4gICAgICApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHJld3JpdHRlblVybCwgbWV0aG9kLCBib2R5KTtcbiAgICB9XG5cbiAgICAvLyBObyBtYXRjaGVzIGZvdW5kLiBQcm9jZWVkIG5vcm1hbGx5XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm90b2NvbENvbnZlcnRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFTyxNQUFNQSxzQkFBc0IsR0FBRyxDQUNwQztFQUNFQyxZQUFZLEVBQUUsQ0FBQyxTQUFELEVBQVksY0FBWixDQURoQjtFQUVFQyxlQUFlLEVBQUdDLEdBQUQsSUFDZkEsR0FBRyxDQUFDQyxPQUFKLENBQVksYUFBWixFQUEyQkQsR0FBRyxDQUFDRSxRQUFKLENBQWEsT0FBYixJQUF3QixnQkFBeEIsR0FBMkMsVUFBdEUsQ0FISjtFQUlFQyxZQUFZLEVBQUdILEdBQUQsSUFDWkEsR0FBRyxDQUFDQyxPQUFKLENBQVksYUFBWixFQUEyQkQsR0FBRyxDQUFDRSxRQUFKLENBQWEsT0FBYixJQUF3QixnQkFBeEIsR0FBMkMsZUFBdEU7QUFMSixDQURvQyxFQVFwQztFQUNFSixZQUFZLEVBQUUsQ0FBQyxzQkFBRCxDQURoQjtFQUVFQyxlQUFlLEVBQUdDLEdBQUQsSUFBU0EsR0FBRyxDQUFDQyxPQUFKLENBQVksaUNBQVosRUFBK0MsZ0JBQS9DLENBRjVCO0VBR0VFLFlBQVksRUFBR0gsR0FBRCxJQUFTQSxHQUFHLENBQUNDLE9BQUosQ0FBWSx1QkFBWixFQUFxQyx3QkFBckM7QUFIekIsQ0FSb0MsRUFh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
239
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT01NQU5EX1VSTFNfQ09ORkxJQ1RTIiwiY29tbWFuZE5hbWVzIiwianNvbndwQ29udmVydGVyIiwidXJsIiwicmVwbGFjZSIsImluY2x1ZGVzIiwidzNjQ29udmVydGVyIiwidGVzdCIsInczY1VybCIsInczY1Byb3BlcnR5UmVnZXgiLCJqc29ud3BVcmwiLCJNSlNPTldQIiwiVzNDIiwiUFJPVE9DT0xTIiwiREVGQVVMVF9MT0ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJQcm90b2NvbENvbnZlcnRlciIsImNvbnN0cnVjdG9yIiwicHJveHlGdW5jIiwibG9nIiwiX2Rvd25zdHJlYW1Qcm90b2NvbCIsIl9sb2ciLCJkb3duc3RyZWFtUHJvdG9jb2wiLCJ2YWx1ZSIsImdldFRpbWVvdXRSZXF1ZXN0T2JqZWN0cyIsImJvZHkiLCJfIiwiaGFzIiwidHlwZVRvVzNDIiwieCIsInR5cGUiLCJtcyIsInR5cGVUb0pTT05XUCIsInRvUGFpcnMiLCJmaWx0ZXIiLCJwYWlyIiwibWFwIiwicHJveHlTZXRUaW1lb3V0cyIsIm1ldGhvZCIsInJlc3BvbnNlIiwicmVzQm9keSIsInRpbWVvdXRSZXF1ZXN0T2JqZWN0cyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsInRpbWVvdXRPYmoiLCJzdGF0dXNDb2RlIiwicHJveHlTZXRXaW5kb3ciLCJib2R5T2JqIiwidXRpbCIsInNhZmVKc29uUGFyc2UiLCJpc1BsYWluT2JqZWN0IiwibmFtZSIsImhhbmRsZSIsInByb3h5U2V0VmFsdWUiLCJoYXNWYWx1ZSIsInRleHQiLCJpc1N0cmluZyIsImlzQXJyYXkiLCJqb2luIiwiT2JqZWN0IiwiYXNzaWduIiwicHJveHlTZXRGcmFtZSIsImlkIiwiZHVwbGljYXRlS2V5cyIsIk1KU09OV1BfRUxFTUVOVF9LRVkiLCJXM0NfRUxFTUVOVF9LRVkiLCJwcm94eVBlcmZvcm1BY3Rpb25zIiwicHJveHlSZWxlYXNlQWN0aW9ucyIsImNvbnZlcnRBbmRQcm94eSIsImNvbW1hbmROYW1lIiwicmV3cml0dGVuVXJsIiwiaW5mbyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9qc29ud3AtcHJveHkvcHJvdG9jb2wtY29udmVydGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge2xvZ2dlciwgdXRpbH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7ZHVwbGljYXRlS2V5c30gZnJvbSAnLi4vYmFzZWRyaXZlci9oZWxwZXJzJztcbmltcG9ydCB7TUpTT05XUF9FTEVNRU5UX0tFWSwgVzNDX0VMRU1FTlRfS0VZLCBQUk9UT0NPTFN9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBDT01NQU5EX1VSTFNfQ09ORkxJQ1RTID0gW1xuICB7XG4gICAgY29tbWFuZE5hbWVzOiBbJ2V4ZWN1dGUnLCAnZXhlY3V0ZUFzeW5jJ10sXG4gICAganNvbndwQ29udmVydGVyOiAodXJsKSA9PlxuICAgICAgdXJsLnJlcGxhY2UoL1xcL2V4ZWN1dGUuKi8sIHVybC5pbmNsdWRlcygnYXN5bmMnKSA/ICcvZXhlY3V0ZV9hc3luYycgOiAnL2V4ZWN1dGUnKSxcbiAgICB3M2NDb252ZXJ0ZXI6ICh1cmwpID0+XG4gICAgICB1cmwucmVwbGFjZSgvXFwvZXhlY3V0ZS4qLywgdXJsLmluY2x1ZGVzKCdhc3luYycpID8gJy9leGVjdXRlL2FzeW5jJyA6ICcvZXhlY3V0ZS9zeW5jJyksXG4gIH0sXG4gIHtcbiAgICBjb21tYW5kTmFtZXM6IFsnZ2V0RWxlbWVudFNjcmVlbnNob3QnXSxcbiAgICBqc29ud3BDb252ZXJ0ZXI6ICh1cmwpID0+IHVybC5yZXBsYWNlKC9cXC9lbGVtZW50XFwvKFteL10rKVxcL3NjcmVlbnNob3QkLywgJy9zY3JlZW5zaG90LyQxJyksXG4gICAgdzNjQ29udmVydGVyOiAodXJsKSA9PiB1cmwucmVwbGFjZSgvXFwvc2NyZWVuc2hvdFxcLyhbXi9dKykvLCAnL2VsZW1lbnQvJDEvc2NyZWVuc2hvdCcpLFxuICB9LFxuICB7XG4gICAgY29tbWFuZE5hbWVzOiBbJ2dldFdpbmRvd0hhbmRsZXMnLCAnZ2V0V2luZG93SGFuZGxlJ10sXG4gICAganNvbndwQ29udmVydGVyKHVybCkge1xuICAgICAgcmV0dXJuIC9cXC93aW5kb3ckLy50ZXN0KHVybClcbiAgICAgICAgPyB1cmwucmVwbGFjZSgvXFwvd2luZG93JC8sICcvd2luZG93X2hhbmRsZScpXG4gICAgICAgIDogdXJsLnJlcGxhY2UoL1xcL3dpbmRvd1xcL2hhbmRsZShzPykkLywgJy93aW5kb3dfaGFuZGxlJDEnKTtcbiAgICB9LFxuICAgIHczY0NvbnZlcnRlcih1cmwpIHtcbiAgICAgIHJldHVybiAvXFwvd2luZG93X2hhbmRsZSQvLnRlc3QodXJsKVxuICAgICAgICA/IHVybC5yZXBsYWNlKC9cXC93aW5kb3dfaGFuZGxlJC8sICcvd2luZG93JylcbiAgICAgICAgOiB1cmwucmVwbGFjZSgvXFwvd2luZG93X2hhbmRsZXMkLywgJy93aW5kb3cvaGFuZGxlcycpO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBjb21tYW5kTmFtZXM6IFsnZ2V0UHJvcGVydHknXSxcbiAgICBqc29ud3BDb252ZXJ0ZXI6ICh3M2NVcmwpID0+IHtcbiAgICAgIGNvbnN0IHczY1Byb3BlcnR5UmVnZXggPSAvXFwvZWxlbWVudFxcLyhbXi9dKylcXC9wcm9wZXJ0eVxcLyhbXi9dKykvO1xuICAgICAgY29uc3QganNvbndwVXJsID0gdzNjVXJsLnJlcGxhY2UodzNjUHJvcGVydHlSZWdleCwgJy9lbGVtZW50LyQxL2F0dHJpYnV0ZS8kMicpO1xuICAgICAgcmV0dXJuIGpzb253cFVybDtcbiAgICB9LFxuICAgIHczY0NvbnZlcnRlcjogKGpzb253cFVybCkgPT4ganNvbndwVXJsLCAvLyBEb24ndCBjb252ZXJ0IEpTT05XUCBVUkwgdG8gVzNDLiBXM0MgYWNjZXB0cyAvYXR0cmlidXRlIGFuZCAvcHJvcGVydHlcbiAgfSxcbl07XG5jb25zdCB7TUpTT05XUCwgVzNDfSA9IFBST1RPQ09MUztcbmNvbnN0IERFRkFVTFRfTE9HID0gbG9nZ2VyLmdldExvZ2dlcignUHJvdG9jb2wgQ29udmVydGVyJyk7XG5cbmNsYXNzIFByb3RvY29sQ29udmVydGVyIHtcbiAgY29uc3RydWN0b3IocHJveHlGdW5jLCBsb2cgPSBudWxsKSB7XG4gICAgdGhpcy5wcm94eUZ1bmMgPSBwcm94eUZ1bmM7XG4gICAgdGhpcy5fZG93bnN0cmVhbVByb3RvY29sID0gbnVsbDtcbiAgICB0aGlzLl9sb2cgPSBsb2c7XG4gIH1cblxuICBnZXQgbG9nKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2cgPz8gREVGQVVMVF9MT0c7XG4gIH1cblxuICBzZXQgZG93bnN0cmVhbVByb3RvY29sKHZhbHVlKSB7XG4gICAgdGhpcy5fZG93bnN0cmVhbVByb3RvY29sID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZG93bnN0cmVhbVByb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLl9kb3duc3RyZWFtUHJvdG9jb2w7XG4gIH1cblxuICAvKipcbiAgICogVzNDIC90aW1lb3V0cyBjYW4gdGFrZSBhcyBtYW55IGFzIDMgdGltZW91dCB0eXBlcyBhdCBvbmNlLCBNSlNPTldQIC90aW1lb3V0cyBvbmx5IHRha2VzIG9uZVxuICAgKiBhdCBhIHRpbWUuIFNvIGlmIHdlJ3JlIHVzaW5nIFczQyBhbmQgcHJveHlpbmcgdG8gTUpTT05XUCBhbmQgdGhlcmUncyBtb3JlIHRoYW4gb25lIHRpbWVvdXQgdHlwZVxuICAgKiBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCwgd2UgbmVlZCB0byBkbyAzIHByb3hpZXMgYW5kIGNvbWJpbmUgdGhlIHJlc3VsdFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gYm9keSBSZXF1ZXN0IGJvZHlcbiAgICogQHJldHVybiB7QXJyYXl9IEFycmF5IG9mIFczQyArIE1KU09OV1AgY29tcGF0aWJsZSB0aW1lb3V0IG9iamVjdHNcbiAgICovXG4gIGdldFRpbWVvdXRSZXF1ZXN0T2JqZWN0cyhib2R5KSB7XG4gICAgaWYgKHRoaXMuZG93bnN0cmVhbVByb3RvY29sID09PSBXM0MgJiYgXy5oYXMoYm9keSwgJ21zJykgJiYgXy5oYXMoYm9keSwgJ3R5cGUnKSkge1xuICAgICAgY29uc3QgdHlwZVRvVzNDID0gKHgpID0+ICh4ID09PSAncGFnZSBsb2FkJyA/ICdwYWdlTG9hZCcgOiB4KTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBbdHlwZVRvVzNDKGJvZHkudHlwZSldOiBib2R5Lm1zLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kb3duc3RyZWFtUHJvdG9jb2wgPT09IE1KU09OV1AgJiYgKCFfLmhhcyhib2R5LCAnbXMnKSB8fCAhXy5oYXMoYm9keSwgJ3R5cGUnKSkpIHtcbiAgICAgIGNvbnN0IHR5cGVUb0pTT05XUCA9ICh4KSA9PiAoeCA9PT0gJ3BhZ2VMb2FkJyA/ICdwYWdlIGxvYWQnIDogeCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBfLnRvUGFpcnMoYm9keSlcbiAgICAgICAgICAvLyBPbmx5IHRyYW5zZm9ybSB0aGUgZW50cnkgaWYgbXMgdmFsdWUgaXMgYSB2YWxpZCBwb3NpdGl2ZSBmbG9hdCBudW1iZXJcbiAgICAgICAgICAuZmlsdGVyKChwYWlyKSA9PiAvXlxcZCsoPzpbLixdXFxkKj8pPyQvLnRlc3QoYCR7cGFpclsxXX1gKSlcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uIChwYWlyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0eXBlOiB0eXBlVG9KU09OV1AocGFpclswXSksXG4gICAgICAgICAgICAgIG1zOiBwYWlyWzFdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2JvZHldO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3h5IGFuIGFycmF5IG9mIHRpbWVvdXQgb2JqZWN0cyBhbmQgbWVyZ2UgdGhlIHJlc3VsdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIEVuZHBvaW50IHVybFxuICAgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIEVuZHBvaW50IG1ldGhvZFxuICAgKiBAcGFyYW0ge09iamVjdH0gYm9keSBSZXF1ZXN0IGJvZHlcbiAgICovXG4gIGFzeW5jIHByb3h5U2V0VGltZW91dHModXJsLCBtZXRob2QsIGJvZHkpIHtcbiAgICBsZXQgcmVzcG9uc2UsIHJlc0JvZHk7XG5cbiAgICBjb25zdCB0aW1lb3V0UmVxdWVzdE9iamVjdHMgPSB0aGlzLmdldFRpbWVvdXRSZXF1ZXN0T2JqZWN0cyhib2R5KTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhcbiAgICAgIGBXaWxsIHNlbmQgdGhlIGZvbGxvd2luZyByZXF1ZXN0IGJvZGllcyB0byAvdGltZW91dHM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRpbWVvdXRSZXF1ZXN0T2JqZWN0c1xuICAgICAgKX1gXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IHRpbWVvdXRPYmogb2YgdGltZW91dFJlcXVlc3RPYmplY3RzKSB7XG4gICAgICBbcmVzcG9uc2UsIHJlc0JvZHldID0gYXdhaXQgdGhpcy5wcm94eUZ1bmModXJsLCBtZXRob2QsIHRpbWVvdXRPYmopO1xuXG4gICAgICAvLyBJZiB3ZSBnb3QgYSBub24tTUpTT05XUCByZXNwb25zZSwgcmV0dXJuIHRoZSByZXN1bHQsIG5vdGhpbmcgbGVmdCB0byBkb1xuICAgICAgaWYgKHRoaXMuZG93bnN0cmVhbVByb3RvY29sICE9PSBNSlNPTldQKSB7XG4gICAgICAgIHJldHVybiBbcmVzcG9uc2UsIHJlc0JvZHldO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB3ZSBnb3QgYW4gZXJyb3IsIHJldHVybiB0aGUgZXJyb3IgcmlnaHQgYXdheVxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICAgIHJldHVybiBbcmVzcG9uc2UsIHJlc0JvZHldO1xuICAgICAgfVxuXG4gICAgICAvLyAuLi5PdGhlcndpc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRpbWVvdXRzIGNhbGxcbiAgICB9XG4gICAgcmV0dXJuIFtyZXNwb25zZSwgcmVzQm9keV07XG4gIH1cblxuICBhc3luYyBwcm94eVNldFdpbmRvdyh1cmwsIG1ldGhvZCwgYm9keSkge1xuICAgIGNvbnN0IGJvZHlPYmogPSB1dGlsLnNhZmVKc29uUGFyc2UoYm9keSk7XG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChib2R5T2JqKSkge1xuICAgICAgaWYgKHRoaXMuZG93bnN0cmVhbVByb3RvY29sID09PSBXM0MgJiYgXy5oYXMoYm9keU9iaiwgJ25hbWUnKSAmJiAhXy5oYXMoYm9keU9iaiwgJ2hhbmRsZScpKSB7XG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDb3BpZWQgJ25hbWUnIHZhbHVlICcke2JvZHlPYmoubmFtZX0nIHRvICdoYW5kbGUnIGFzIHBlciBXM0Mgc3BlY2ApO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUZ1bmModXJsLCBtZXRob2QsIHtcbiAgICAgICAgICAuLi5ib2R5T2JqLFxuICAgICAgICAgIGhhbmRsZTogYm9keU9iai5uYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kb3duc3RyZWFtUHJvdG9jb2wgPT09IE1KU09OV1AgJiZcbiAgICAgICAgXy5oYXMoYm9keU9iaiwgJ2hhbmRsZScpICYmXG4gICAgICAgICFfLmhhcyhib2R5T2JqLCAnbmFtZScpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoYENvcGllZCAnaGFuZGxlJyB2YWx1ZSAnJHtib2R5T2JqLmhhbmRsZX0nIHRvICduYW1lJyBhcyBwZXIgSlNPTldQIHNwZWNgKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kLCB7XG4gICAgICAgICAgLi4uYm9keU9iaixcbiAgICAgICAgICBuYW1lOiBib2R5T2JqLmhhbmRsZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxuXG4gIGFzeW5jIHByb3h5U2V0VmFsdWUodXJsLCBtZXRob2QsIGJvZHkpIHtcbiAgICBjb25zdCBib2R5T2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKGJvZHkpO1xuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoYm9keU9iaikgJiYgKHV0aWwuaGFzVmFsdWUoYm9keU9iai50ZXh0KSB8fCB1dGlsLmhhc1ZhbHVlKGJvZHlPYmoudmFsdWUpKSkge1xuICAgICAgbGV0IHt0ZXh0LCB2YWx1ZX0gPSBib2R5T2JqO1xuICAgICAgaWYgKHV0aWwuaGFzVmFsdWUodGV4dCkgJiYgIXV0aWwuaGFzVmFsdWUodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gXy5pc1N0cmluZyh0ZXh0KSA/IFsuLi50ZXh0XSA6IF8uaXNBcnJheSh0ZXh0KSA/IHRleHQgOiBbXTtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICAgICAgYEFkZGVkICd2YWx1ZScgcHJvcGVydHkgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9IHRvICdzZXRWYWx1ZScgcmVxdWVzdCBib2R5YFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICghdXRpbC5oYXNWYWx1ZSh0ZXh0KSAmJiB1dGlsLmhhc1ZhbHVlKHZhbHVlKSkge1xuICAgICAgICB0ZXh0ID0gXy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJycpIDogXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6ICcnO1xuICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgQWRkZWQgJ3RleHQnIHByb3BlcnR5ICR7SlNPTi5zdHJpbmdpZnkodGV4dCl9IHRvICdzZXRWYWx1ZScgcmVxdWVzdCBib2R5YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eUZ1bmMoXG4gICAgICAgIHVybCxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBib2R5T2JqLCB7XG4gICAgICAgICAgdGV4dCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxuXG4gIGFzeW5jIHByb3h5U2V0RnJhbWUodXJsLCBtZXRob2QsIGJvZHkpIHtcbiAgICBjb25zdCBib2R5T2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKGJvZHkpO1xuICAgIHJldHVybiBfLmhhcyhib2R5T2JqLCAnaWQnKSAmJiBfLmlzUGxhaW5PYmplY3QoYm9keU9iai5pZClcbiAgICAgID8gYXdhaXQgdGhpcy5wcm94eUZ1bmModXJsLCBtZXRob2QsIHtcbiAgICAgICAgICAuLi5ib2R5T2JqLFxuICAgICAgICAgIGlkOiBkdXBsaWNhdGVLZXlzKGJvZHlPYmouaWQsIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSksXG4gICAgICAgIH0pXG4gICAgICA6IGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxuXG4gIGFzeW5jIHByb3h5UGVyZm9ybUFjdGlvbnModXJsLCBtZXRob2QsIGJvZHkpIHtcbiAgICBjb25zdCBib2R5T2JqID0gdXRpbC5zYWZlSnNvblBhcnNlKGJvZHkpO1xuICAgIHJldHVybiBfLmlzUGxhaW5PYmplY3QoYm9keU9iailcbiAgICAgID8gYXdhaXQgdGhpcy5wcm94eUZ1bmMoXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBkdXBsaWNhdGVLZXlzKGJvZHlPYmosIE1KU09OV1BfRUxFTUVOVF9LRVksIFczQ19FTEVNRU5UX0tFWSlcbiAgICAgICAgKVxuICAgICAgOiBhd2FpdCB0aGlzLnByb3h5RnVuYyh1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cblxuICBhc3luYyBwcm94eVJlbGVhc2VBY3Rpb25zKHVybCwgbWV0aG9kKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgXCJjcm9zc2luZ1wiIGVuZHBvaW50cyBmb3IgdGhlIGNhc2VcbiAgICogd2hlbiB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBkcml2ZXJzIG9wZXJhdGUgZGlmZmVyZW50IHByb3RvY29sc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZE5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG4gICAqIEBwYXJhbSB7P3N0cmluZ3xvYmplY3R9IGJvZHlcbiAgICogQHJldHVybnMgVGhlIHByb3h5ZnlpbmcgcmVzdWx0IGFzIFtyZXNwb25zZSwgcmVzcG9uc2VCb2R5XSB0dXBsZVxuICAgKi9cbiAgYXN5bmMgY29udmVydEFuZFByb3h5KGNvbW1hbmROYW1lLCB1cmwsIG1ldGhvZCwgYm9keSkge1xuICAgIGlmICghdGhpcy5kb3duc3RyZWFtUHJvdG9jb2wpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5RnVuYyh1cmwsIG1ldGhvZCwgYm9keSk7XG4gICAgfVxuXG4gICAgLy8gU2FtZSB1cmwsIGJ1dCBkaWZmZXJlbnQgYXJndW1lbnRzXG4gICAgc3dpdGNoIChjb21tYW5kTmFtZSkge1xuICAgICAgY2FzZSAndGltZW91dHMnOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eVNldFRpbWVvdXRzKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgICAgIGNhc2UgJ3NldFdpbmRvdyc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5U2V0V2luZG93KHVybCwgbWV0aG9kLCBib2R5KTtcbiAgICAgIGNhc2UgJ3NldFZhbHVlJzpcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlTZXRWYWx1ZSh1cmwsIG1ldGhvZCwgYm9keSk7XG4gICAgICBjYXNlICdwZXJmb3JtQWN0aW9ucyc6XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb3h5UGVyZm9ybUFjdGlvbnModXJsLCBtZXRob2QsIGJvZHkpO1xuICAgICAgY2FzZSAncmVsZWFzZUFjdGlvbnMnOlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm94eVJlbGVhc2VBY3Rpb25zKHVybCwgbWV0aG9kKTtcbiAgICAgIGNhc2UgJ3NldEZyYW1lJzpcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlTZXRGcmFtZSh1cmwsIG1ldGhvZCwgYm9keSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBTYW1lIGFyZ3VtZW50cywgYnV0IGRpZmZlcmVudCBVUkxzXG4gICAgZm9yIChjb25zdCB7Y29tbWFuZE5hbWVzLCBqc29ud3BDb252ZXJ0ZXIsIHczY0NvbnZlcnRlcn0gb2YgQ09NTUFORF9VUkxTX0NPTkZMSUNUUykge1xuICAgICAgaWYgKCFjb21tYW5kTmFtZXMuaW5jbHVkZXMoY29tbWFuZE5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXdyaXR0ZW5VcmwgPVxuICAgICAgICB0aGlzLmRvd25zdHJlYW1Qcm90b2NvbCA9PT0gTUpTT05XUCA/IGpzb253cENvbnZlcnRlcih1cmwpIDogdzNjQ29udmVydGVyKHVybCk7XG4gICAgICBpZiAocmV3cml0dGVuVXJsID09PSB1cmwpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICAgICAgYERpZCBub3Qga25vdyBob3cgdG8gcmV3cml0ZSB0aGUgb3JpZ2luYWwgVVJMICcke3VybH0nIGAgK1xuICAgICAgICAgICAgYGZvciAke3RoaXMuZG93bnN0cmVhbVByb3RvY29sfSBwcm90b2NvbGBcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgICBgUmV3cm90ZSB0aGUgb3JpZ2luYWwgVVJMICcke3VybH0nIHRvICcke3Jld3JpdHRlblVybH0nIGAgK1xuICAgICAgICAgIGBmb3IgJHt0aGlzLmRvd25zdHJlYW1Qcm90b2NvbH0gcHJvdG9jb2xgXG4gICAgICApO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHJld3JpdHRlblVybCwgbWV0aG9kLCBib2R5KTtcbiAgICB9XG5cbiAgICAvLyBObyBtYXRjaGVzIGZvdW5kLiBQcm9jZWVkIG5vcm1hbGx5XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHlGdW5jKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm90b2NvbENvbnZlcnRlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFTyxNQUFNQSxzQkFBc0IsR0FBRyxDQUNwQztFQUNFQyxZQUFZLEVBQUUsQ0FBQyxTQUFELEVBQVksY0FBWixDQURoQjtFQUVFQyxlQUFlLEVBQUdDLEdBQUQsSUFDZkEsR0FBRyxDQUFDQyxPQUFKLENBQVksYUFBWixFQUEyQkQsR0FBRyxDQUFDRSxRQUFKLENBQWEsT0FBYixJQUF3QixnQkFBeEIsR0FBMkMsVUFBdEUsQ0FISjtFQUlFQyxZQUFZLEVBQUdILEdBQUQsSUFDWkEsR0FBRyxDQUFDQyxPQUFKLENBQVksYUFBWixFQUEyQkQsR0FBRyxDQUFDRSxRQUFKLENBQWEsT0FBYixJQUF3QixnQkFBeEIsR0FBMkMsZUFBdEU7QUFMSixDQURvQyxFQVFwQztFQUNFSixZQUFZLEVBQUUsQ0FBQyxzQkFBRCxDQURoQjtFQUVFQyxlQUFlLEVBQUdDLEdBQUQsSUFBU0EsR0FBRyxDQUFDQyxPQUFKLENBQVksaUNBQVosRUFBK0MsZ0JBQS9DLENBRjVCO0VBR0VFLFlBQVksRUFBR0gsR0FBRCxJQUFTQSxHQUFHLENBQUNDLE9BQUosQ0FBWSx1QkFBWixFQUFxQyx3QkFBckM7QUFIekIsQ0FSb0MsRUFh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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-converter.js","names":["COMMAND_URLS_CONFLICTS","commandNames","jsonwpConverter","url","replace","includes","w3cConverter","test","w3cUrl","w3cPropertyRegex","jsonwpUrl","MJSONWP","W3C","PROTOCOLS","DEFAULT_LOG","logger","getLogger","ProtocolConverter","constructor","proxyFunc","log","_downstreamProtocol","_log","downstreamProtocol","value","getTimeoutRequestObjects","body","_","has","typeToW3C","x","type","ms","typeToJSONWP","toPairs","filter","pair","map","proxySetTimeouts","method","response","resBody","timeoutRequestObjects","debug","JSON","stringify","timeoutObj","statusCode","proxySetWindow","bodyObj","util","safeJsonParse","isPlainObject","name","handle","proxySetValue","hasValue","text","isString","isArray","join","Object","assign","proxySetFrame","id","duplicateKeys","MJSONWP_ELEMENT_KEY","W3C_ELEMENT_KEY","proxyPerformActions","proxyReleaseActions","convertAndProxy","commandName","rewrittenUrl","info"],"sources":["../../../lib/jsonwp-proxy/protocol-converter.js"],"sourcesContent":["import _ from 'lodash';\nimport {logger, util} from '@appium/support';\nimport {duplicateKeys} from '../basedriver/helpers';\nimport {MJSONWP_ELEMENT_KEY, W3C_ELEMENT_KEY, PROTOCOLS} from '../constants';\n\nexport const COMMAND_URLS_CONFLICTS = [\n {\n commandNames: ['execute', 'executeAsync'],\n jsonwpConverter: (url) =>\n url.replace(/\\/execute.*/, url.includes('async') ? '/execute_async' : '/execute'),\n w3cConverter: (url) =>\n url.replace(/\\/execute.*/, url.includes('async') ? '/execute/async' : '/execute/sync'),\n },\n {\n commandNames: ['getElementScreenshot'],\n jsonwpConverter: (url) => url.replace(/\\/element\\/([^/]+)\\/screenshot$/, '/screenshot/$1'),\n w3cConverter: (url) => url.replace(/\\/screenshot\\/([^/]+)/, '/element/$1/screenshot'),\n },\n {\n commandNames: ['getWindowHandles', 'getWindowHandle'],\n jsonwpConverter(url) {\n return /\\/window$/.test(url)\n ? url.replace(/\\/window$/, '/window_handle')\n : url.replace(/\\/window\\/handle(s?)$/, '/window_handle$1');\n },\n w3cConverter(url) {\n return /\\/window_handle$/.test(url)\n ? url.replace(/\\/window_handle$/, '/window')\n : url.replace(/\\/window_handles$/, '/window/handles');\n },\n },\n {\n commandNames: ['getProperty'],\n jsonwpConverter: (w3cUrl) => {\n const w3cPropertyRegex = /\\/element\\/([^/]+)\\/property\\/([^/]+)/;\n const jsonwpUrl = w3cUrl.replace(w3cPropertyRegex, '/element/$1/attribute/$2');\n return jsonwpUrl;\n },\n w3cConverter: (jsonwpUrl) => jsonwpUrl, // Don't convert JSONWP URL to W3C. W3C accepts /attribute and /property\n },\n];\nconst {MJSONWP, W3C} = PROTOCOLS;\nconst DEFAULT_LOG = logger.getLogger('Protocol Converter');\n\nclass ProtocolConverter {\n constructor(proxyFunc, log = null) {\n this.proxyFunc = proxyFunc;\n this._downstreamProtocol = null;\n this._log = log;\n }\n\n get log() {\n return this._log ?? DEFAULT_LOG;\n }\n\n set downstreamProtocol(value) {\n this._downstreamProtocol = value;\n }\n\n get downstreamProtocol() {\n return this._downstreamProtocol;\n }\n\n /**\n * W3C /timeouts can take as many as 3 timeout types at once, MJSONWP /timeouts only takes one\n * at a time. So if we're using W3C and proxying to MJSONWP and there's more than one timeout type\n * provided in the request, we need to do 3 proxies and combine the result\n *\n * @param {Object} body Request body\n * @return {Array} Array of W3C + MJSONWP compatible timeout objects\n */\n getTimeoutRequestObjects(body) {\n if (this.downstreamProtocol === W3C && _.has(body, 'ms') && _.has(body, 'type')) {\n const typeToW3C = (x) => (x === 'page load' ? 'pageLoad' : x);\n return [\n {\n [typeToW3C(body.type)]: body.ms,\n },\n ];\n }\n\n if (this.downstreamProtocol === MJSONWP && (!_.has(body, 'ms') || !_.has(body, 'type'))) {\n const typeToJSONWP = (x) => (x === 'pageLoad' ? 'page load' : x);\n return (\n _.toPairs(body)\n // Only transform the entry if ms value is a valid positive float number\n .filter((pair) => /^\\d+(?:[.,]\\d*?)?$/.test(`${pair[1]}`))\n .map(function (pair) {\n return {\n type: typeToJSONWP(pair[0]),\n ms: pair[1],\n };\n })\n );\n }\n\n return [body];\n }\n\n /**\n * Proxy an array of timeout objects and merge the result\n * @param {String} url Endpoint url\n * @param {String} method Endpoint method\n * @param {Object} body Request body\n */\n async proxySetTimeouts(url, method, body) {\n let response, resBody;\n\n const timeoutRequestObjects = this.getTimeoutRequestObjects(body);\n this.log.debug(\n `Will send the following request bodies to /timeouts: ${JSON.stringify(\n timeoutRequestObjects\n )}`\n );\n for (const timeoutObj of timeoutRequestObjects) {\n [response, resBody] = await this.proxyFunc(url, method, timeoutObj);\n\n // If we got a non-MJSONWP response, return the result, nothing left to do\n if (this.downstreamProtocol !== MJSONWP) {\n return [response, resBody];\n }\n\n // If we got an error, return the error right away\n if (response.statusCode >= 400) {\n return [response, resBody];\n }\n\n // ...Otherwise, continue to the next timeouts call\n }\n return [response, resBody];\n }\n\n async proxySetWindow(url, method, body) {\n const bodyObj = util.safeJsonParse(body);\n if (_.isPlainObject(bodyObj)) {\n if (this.downstreamProtocol === W3C && _.has(bodyObj, 'name') && !_.has(bodyObj, 'handle')) {\n this.log.debug(`Copied 'name' value '${bodyObj.name}' to 'handle' as per W3C spec`);\n return await this.proxyFunc(url, method, {\n ...bodyObj,\n handle: bodyObj.name,\n });\n }\n if (\n this.downstreamProtocol === MJSONWP &&\n _.has(bodyObj, 'handle') &&\n !_.has(bodyObj, 'name')\n ) {\n this.log.debug(`Copied 'handle' value '${bodyObj.handle}' to 'name' as per JSONWP spec`);\n return await this.proxyFunc(url, method, {\n ...bodyObj,\n name: bodyObj.handle,\n });\n }\n }\n\n return await this.proxyFunc(url, method, body);\n }\n\n async proxySetValue(url, method, body) {\n const bodyObj = util.safeJsonParse(body);\n if (_.isPlainObject(bodyObj) && (util.hasValue(bodyObj.text) || util.hasValue(bodyObj.value))) {\n let {text, value} = bodyObj;\n if (util.hasValue(text) && !util.hasValue(value)) {\n value = _.isString(text) ? [...text] : _.isArray(text) ? text : [];\n this.log.debug(\n `Added 'value' property ${JSON.stringify(value)} to 'setValue' request body`\n );\n } else if (!util.hasValue(text) && util.hasValue(value)) {\n text = _.isArray(value) ? value.join('') : _.isString(value) ? value : '';\n this.log.debug(`Added 'text' property ${JSON.stringify(text)} to 'setValue' request body`);\n }\n return await this.proxyFunc(\n url,\n method,\n Object.assign({}, bodyObj, {\n text,\n value,\n })\n );\n }\n\n return await this.proxyFunc(url, method, body);\n }\n\n async proxySetFrame(url, method, body) {\n const bodyObj = util.safeJsonParse(body);\n return _.has(bodyObj, 'id') && _.isPlainObject(bodyObj.id)\n ? await this.proxyFunc(url, method, {\n ...bodyObj,\n id: duplicateKeys(bodyObj.id, MJSONWP_ELEMENT_KEY, W3C_ELEMENT_KEY),\n })\n : await this.proxyFunc(url, method, body);\n }\n\n async proxyPerformActions(url, method, body) {\n const bodyObj = util.safeJsonParse(body);\n return _.isPlainObject(bodyObj)\n ? await this.proxyFunc(\n url,\n method,\n duplicateKeys(bodyObj, MJSONWP_ELEMENT_KEY, W3C_ELEMENT_KEY)\n )\n : await this.proxyFunc(url, method, body);\n }\n\n async proxyReleaseActions(url, method) {\n return await this.proxyFunc(url, method);\n }\n\n /**\n * Handle \"crossing\" endpoints for the case\n * when upstream and downstream drivers operate different protocols\n *\n * @param {string} commandName\n * @param {string} url\n * @param {string} method\n * @param {?string|object} body\n * @returns The proxyfying result as [response, responseBody] tuple\n */\n async convertAndProxy(commandName, url, method, body) {\n if (!this.downstreamProtocol) {\n return await this.proxyFunc(url, method, body);\n }\n\n // Same url, but different arguments\n switch (commandName) {\n case 'timeouts':\n return await this.proxySetTimeouts(url, method, body);\n case 'setWindow':\n return await this.proxySetWindow(url, method, body);\n case 'setValue':\n return await this.proxySetValue(url, method, body);\n case 'performActions':\n return await this.proxyPerformActions(url, method, body);\n case 'releaseActions':\n return await this.proxyReleaseActions(url, method);\n case 'setFrame':\n return await this.proxySetFrame(url, method, body);\n default:\n break;\n }\n\n // Same arguments, but different URLs\n for (const {commandNames, jsonwpConverter, w3cConverter} of COMMAND_URLS_CONFLICTS) {\n if (!commandNames.includes(commandName)) {\n continue;\n }\n\n const rewrittenUrl =\n this.downstreamProtocol === MJSONWP ? jsonwpConverter(url) : w3cConverter(url);\n if (rewrittenUrl === url) {\n this.log.debug(\n `Did not know how to rewrite the original URL '${url}' ` +\n `for ${this.downstreamProtocol} protocol`\n );\n break;\n }\n this.log.info(\n `Rewrote the original URL '${url}' to '${rewrittenUrl}' ` +\n `for ${this.downstreamProtocol} protocol`\n );\n return await this.proxyFunc(rewrittenUrl, method, body);\n }\n\n // No matches found. Proceed normally\n return await this.proxyFunc(url, method, body);\n }\n}\n\nexport default ProtocolConverter;\n"],"mappings":"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"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -31,6 +29,8 @@ var _http = _interopRequireDefault(require("http"));
31
29
 
32
30
  var _https = _interopRequireDefault(require("https"));
33
31
 
32
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
+
34
34
  const DEFAULT_LOG = _support.logger.getLogger('WD Proxy');
35
35
 
36
36
  const DEFAULT_REQUEST_TIMEOUT = 240000;
@@ -416,4 +416,4 @@ class JWProxy {
416
416
  exports.JWProxy = JWProxy;
417
417
  var _default = JWProxy;
418
418
  exports.default = _default;
419
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX0xPRyIsImxvZ2dlciIsImdldExvZ2dlciIsIkRFRkFVTFRfUkVRVUVTVF9USU1FT1VUIiwiQ09NUEFDVF9FUlJPUl9QQVRURVJOUyIsIk1KU09OV1AiLCJXM0MiLCJQUk9UT0NPTFMiLCJBTExPV0VEX09QVFMiLCJKV1Byb3h5Iiwic2NoZW1lIiwic2VydmVyIiwicG9ydCIsImJhc2UiLCJyZXFCYXNlUGF0aCIsInNlc3Npb25JZCIsInRpbWVvdXQiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJfIiwicGljayIsIm9wdGlvbnMiLCJkZWZhdWx0cyIsIm9taXQiLCJERUZBVUxUX0JBU0VfUEFUSCIsInRvTG93ZXJDYXNlIiwiT2JqZWN0IiwiYXNzaWduIiwiX2FjdGl2ZVJlcXVlc3RzIiwiX2Rvd25zdHJlYW1Qcm90b2NvbCIsImFnZW50T3B0cyIsImtlZXBBbGl2ZSIsIm1heFNvY2tldHMiLCJtYXhGcmVlU29ja2V0cyIsImh0dHBBZ2VudCIsImh0dHAiLCJBZ2VudCIsImh0dHBzQWdlbnQiLCJodHRwcyIsInByb3RvY29sQ29udmVydGVyIiwiUHJvdG9jb2xDb252ZXJ0ZXIiLCJwcm94eSIsImJpbmQiLCJsb2ciLCJfbG9nIiwicmVxdWVzdCIsInJlcXVlc3RDb25maWciLCJyZXFQcm9taXNlIiwiYXhpb3MiLCJwdXNoIiwicHVsbCIsImdldEFjdGl2ZVJlcXVlc3RzQ291bnQiLCJsZW5ndGgiLCJjYW5jZWxBY3RpdmVSZXF1ZXN0cyIsImVuZHBvaW50UmVxdWlyZXNTZXNzaW9uSWQiLCJlbmRwb2ludCIsImluY2x1ZGVzIiwiZG93bnN0cmVhbVByb3RvY29sIiwidmFsdWUiLCJnZXRVcmxGb3JQcm94eSIsInVybCIsInByb3h5QmFzZSIsImVuZHBvaW50UmUiLCJyZW1haW5pbmdVcmwiLCJ0ZXN0IiwiZmlyc3QiLCJSZWdFeHAiLCJleGVjIiwiRXJyb3IiLCJyZXBsYWNlIiwic3RyaXBQcmVmaXhSZSIsInJlcXVpcmVzU2Vzc2lvbklkIiwic2Vzc2lvbkJhc2VSZSIsIlJlZmVyZW5jZUVycm9yIiwibWF0Y2giLCJtZXRob2QiLCJib2R5IiwidG9VcHBlckNhc2UiLCJuZXdVcmwiLCJ0cnVuY2F0ZUJvZHkiLCJjb250ZW50IiwidHJ1bmNhdGUiLCJpc1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJNQVhfTE9HX0JPRFlfTEVOR1RIIiwicmVxT3B0cyIsImhlYWRlcnMiLCJhY2NlcHQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJkYXRhIiwicGFyc2UiLCJlIiwiZGVidWciLCJ0aHJvd1Byb3h5RXJyb3IiLCJlcnJvciIsImVyciIsInJlc3BvbnNlIiwic3RhdHVzIiwiaXNSZXNwb25zZUxvZ2dlZCIsImlzUGxhaW5PYmplY3QiLCJpc1Nlc3Npb25DcmVhdGlvblJlcXVlc3QiLCJnZXRQcm90b2NvbEZyb21SZXNCb2R5IiwiaW5mbyIsImhhcyIsInBhcnNlSW50IiwicmVzIiwic3RhdHVzQ29kZSIsInByb3h5RXJyb3JNc2ciLCJtZXNzYWdlIiwic29tZSIsInAiLCJzdGFjayIsImVycm9ycyIsIlByb3h5UmVxdWVzdEVycm9yIiwicmVzT2JqIiwiaXNJbnRlZ2VyIiwiaXNVbmRlZmluZWQiLCJyZXF1ZXN0VG9Db21tYW5kTmFtZSIsImV4dHJhY3RDb21tYW5kTmFtZSIsInBhdHRlcm4iLCJwYXRoTWF0Y2giLCJyb3V0ZVRvQ29tbWFuZE5hbWUiLCJjb21tYW5kTmFtZSIsImVzY2FwZVJlZ0V4cCIsInByb3h5Q29tbWFuZCIsImNvbnZlcnRBbmRQcm94eSIsImNvbW1hbmQiLCJyZXNCb2R5T2JqIiwiaXNFcnJvclR5cGUiLCJnZXRBY3R1YWxFcnJvciIsIlVua25vd25FcnJvciIsInByb3RvY29sIiwiaXNOYU4iLCJlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSIsImlzRW1wdHkiLCJnZXRTdW1tYXJ5QnlDb2RlIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwiZ2V0U2Vzc2lvbklkRnJvbVVybCIsInByb3h5UmVxUmVzIiwicmVxIiwib3JpZ2luYWxVcmwiLCJnZXRSZXNwb25zZUZvclczQ0Vycm9yIiwic2V0IiwicmVxU2Vzc2lvbklkIiwiZm9ybWF0UmVzcG9uc2VWYWx1ZSIsInNlbmQiLCJmb3JtYXRTdGF0dXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvanNvbndwLXByb3h5L3Byb3h5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge2xvZ2dlciwgdXRpbH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQge2dldFN1bW1hcnlCeUNvZGV9IGZyb20gJy4uL2pzb253cC1zdGF0dXMvc3RhdHVzJztcbmltcG9ydCB7XG4gIGVycm9ycyxcbiAgaXNFcnJvclR5cGUsXG4gIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLFxuICBlcnJvckZyb21XM0NKc29uQ29kZSxcbiAgZ2V0UmVzcG9uc2VGb3JXM0NFcnJvcixcbn0gZnJvbSAnLi4vcHJvdG9jb2wvZXJyb3JzJztcbmltcG9ydCB7cm91dGVUb0NvbW1hbmROYW1lfSBmcm9tICcuLi9wcm90b2NvbCc7XG5pbXBvcnQge01BWF9MT0dfQk9EWV9MRU5HVEgsIERFRkFVTFRfQkFTRV9QQVRILCBQUk9UT0NPTFN9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgUHJvdG9jb2xDb252ZXJ0ZXIgZnJvbSAnLi9wcm90b2NvbC1jb252ZXJ0ZXInO1xuaW1wb3J0IHtmb3JtYXRSZXNwb25zZVZhbHVlLCBmb3JtYXRTdGF0dXN9IGZyb20gJy4uL3Byb3RvY29sL2hlbHBlcnMnO1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuXG5jb25zdCBERUZBVUxUX0xPRyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1dEIFByb3h5Jyk7XG5jb25zdCBERUZBVUxUX1JFUVVFU1RfVElNRU9VVCA9IDI0MDAwMDtcbmNvbnN0IENPTVBBQ1RfRVJST1JfUEFUVEVSTlMgPSBbL1xcYkVDT05OUkVGVVNFRFxcYi8sIC9zb2NrZXQgaGFuZyB1cC9dO1xuXG5jb25zdCB7TUpTT05XUCwgVzNDfSA9IFBST1RPQ09MUztcblxuY29uc3QgQUxMT1dFRF9PUFRTID0gW1xuICAnc2NoZW1lJyxcbiAgJ3NlcnZlcicsXG4gICdwb3J0JyxcbiAgJ2Jhc2UnLFxuICAncmVxQmFzZVBhdGgnLFxuICAnc2Vzc2lvbklkJyxcbiAgJ3RpbWVvdXQnLFxuICAnbG9nJyxcbiAgJ2tlZXBBbGl2ZScsXG5dO1xuXG5jbGFzcyBKV1Byb3h5IHtcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIHNjaGVtZTtcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIHNlcnZlcjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHBvcnQ7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICBiYXNlO1xuICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgcmVxQmFzZVBhdGg7XG4gIC8qKiBAdHlwZSB7c3RyaW5nP30gKi9cbiAgc2Vzc2lvbklkO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdGltZW91dDtcblxuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBvcHRzID0gXy5waWNrKG9wdHMsIEFMTE9XRURfT1BUUyk7XG5cbiAgICAvLyBvbWl0ICdsb2cnIGluIHRoZSBkZWZhdWx0cyBhc3NpZ25tZW50IGhlcmUgYmVjYXVzZSAnbG9nJyBpcyBhIGdldHRlciBhbmQgd2UgYXJlIGdvaW5nIHRvIHNldFxuICAgIC8vIGl0IHRvIHRoaXMuX2xvZyAod2hpY2ggbGllcyBiZWhpbmQgdGhlIGdldHRlcikgZnVydGhlciBkb3duXG4gICAgY29uc3Qgb3B0aW9ucyA9IF8uZGVmYXVsdHMoXy5vbWl0KG9wdHMsICdsb2cnKSwge1xuICAgICAgc2NoZW1lOiAnaHR0cCcsXG4gICAgICBzZXJ2ZXI6ICdsb2NhbGhvc3QnLFxuICAgICAgcG9ydDogNDQ0NCxcbiAgICAgIGJhc2U6IERFRkFVTFRfQkFTRV9QQVRILFxuICAgICAgcmVxQmFzZVBhdGg6IERFRkFVTFRfQkFTRV9QQVRILFxuICAgICAgc2Vzc2lvbklkOiBudWxsLFxuICAgICAgdGltZW91dDogREVGQVVMVF9SRVFVRVNUX1RJTUVPVVQsXG4gICAgfSk7XG4gICAgb3B0aW9ucy5zY2hlbWUgPSBvcHRpb25zLnNjaGVtZS50b0xvd2VyQ2FzZSgpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0cyA9IFtdO1xuICAgIHRoaXMuX2Rvd25zdHJlYW1Qcm90b2NvbCA9IG51bGw7XG4gICAgY29uc3QgYWdlbnRPcHRzID0ge1xuICAgICAga2VlcEFsaXZlOiBvcHRzLmtlZXBBbGl2ZSA/PyB0cnVlLFxuICAgICAgbWF4U29ja2V0czogMTAsXG4gICAgICBtYXhGcmVlU29ja2V0czogNSxcbiAgICB9O1xuICAgIHRoaXMuaHR0cEFnZW50ID0gbmV3IGh0dHAuQWdlbnQoYWdlbnRPcHRzKTtcbiAgICB0aGlzLmh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoYWdlbnRPcHRzKTtcbiAgICB0aGlzLnByb3RvY29sQ29udmVydGVyID0gbmV3IFByb3RvY29sQ29udmVydGVyKHRoaXMucHJveHkuYmluZCh0aGlzKSwgb3B0cy5sb2cpO1xuICAgIHRoaXMuX2xvZyA9IG9wdHMubG9nO1xuICB9XG5cbiAgZ2V0IGxvZygpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nID8/IERFRkFVTFRfTE9HO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHJlcXVlc3RzIHRvIHRoZSBkb3duc3RyZWFtIHNlcnZlclxuICAgKlxuICAgKiBAcHJpdmF0ZSAtIERvIG5vdCBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5LFxuICAgKiBpdCB1c2VzIGNsaWVudC1zcGVjaWZpYyBhcmd1bWVudHMgYW5kIHJlc3BvbnNlcyFcbiAgICpcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2F4aW9zJykuQXhpb3NSZXF1ZXN0Q29uZmlnfSByZXF1ZXN0Q29uZmlnXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgnYXhpb3MnKS5BeGlvc1Jlc3BvbnNlPn1cbiAgICovXG4gIGFzeW5jIHJlcXVlc3QocmVxdWVzdENvbmZpZykge1xuICAgIGNvbnN0IHJlcVByb21pc2UgPSBheGlvcyhyZXF1ZXN0Q29uZmlnKTtcbiAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0cy5wdXNoKHJlcVByb21pc2UpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVxUHJvbWlzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgXy5wdWxsKHRoaXMuX2FjdGl2ZVJlcXVlc3RzLCByZXFQcm9taXNlKTtcbiAgICB9XG4gIH1cblxuICBnZXRBY3RpdmVSZXF1ZXN0c0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVSZXF1ZXN0cy5sZW5ndGg7XG4gIH1cblxuICBjYW5jZWxBY3RpdmVSZXF1ZXN0cygpIHtcbiAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0cyA9IFtdO1xuICB9XG5cbiAgZW5kcG9pbnRSZXF1aXJlc1Nlc3Npb25JZChlbmRwb2ludCkge1xuICAgIHJldHVybiAhXy5pbmNsdWRlcyhbJy9zZXNzaW9uJywgJy9zZXNzaW9ucycsICcvc3RhdHVzJ10sIGVuZHBvaW50KTtcbiAgfVxuXG4gIHNldCBkb3duc3RyZWFtUHJvdG9jb2wodmFsdWUpIHtcbiAgICB0aGlzLl9kb3duc3RyZWFtUHJvdG9jb2wgPSB2YWx1ZTtcbiAgICB0aGlzLnByb3RvY29sQ29udmVydGVyLmRvd25zdHJlYW1Qcm90b2NvbCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGRvd25zdHJlYW1Qcm90b2NvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZG93bnN0cmVhbVByb3RvY29sO1xuICB9XG5cbiAgZ2V0VXJsRm9yUHJveHkodXJsKSB7XG4gICAgaWYgKHVybCA9PT0gJycpIHtcbiAgICAgIHVybCA9ICcvJztcbiAgICB9XG4gICAgY29uc3QgcHJveHlCYXNlID0gYCR7dGhpcy5zY2hlbWV9Oi8vJHt0aGlzLnNlcnZlcn06JHt0aGlzLnBvcnR9JHt0aGlzLmJhc2V9YDtcbiAgICBjb25zdCBlbmRwb2ludFJlID0gJygvKHNlc3Npb258c3RhdHVzKSknO1xuICAgIGxldCByZW1haW5pbmdVcmwgPSAnJztcbiAgICBpZiAoL15odHRwLy50ZXN0KHVybCkpIHtcbiAgICAgIGNvbnN0IGZpcnN0ID0gbmV3IFJlZ0V4cChgKGh0dHBzPzovLy4rKSR7ZW5kcG9pbnRSZX1gKS5leGVjKHVybCk7XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignR290IGEgY29tcGxldGUgdXJsIGJ1dCBjb3VsZCBub3QgZXh0cmFjdCBKV1AgZW5kcG9pbnQnKTtcbiAgICAgIH1cbiAgICAgIHJlbWFpbmluZ1VybCA9IHVybC5yZXBsYWNlKGZpcnN0WzFdLCAnJyk7XG4gICAgfSBlbHNlIGlmIChuZXcgUmVnRXhwKCdeLycpLnRlc3QodXJsKSkge1xuICAgICAgcmVtYWluaW5nVXJsID0gdXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdXJsICcke3VybH0nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyaXBQcmVmaXhSZSA9IG5ldyBSZWdFeHAoJ14uKj8oLyhzZXNzaW9ufHN0YXR1cykuKikkJyk7XG4gICAgaWYgKHN0cmlwUHJlZml4UmUudGVzdChyZW1haW5pbmdVcmwpKSB7XG4gICAgICByZW1haW5pbmdVcmwgPSAvKiogQHR5cGUge1JlZ0V4cEV4ZWNBcnJheX0gKi8gKHN0cmlwUHJlZml4UmUuZXhlYyhyZW1haW5pbmdVcmwpKVsxXTtcbiAgICB9XG5cbiAgICBpZiAoIW5ldyBSZWdFeHAoZW5kcG9pbnRSZSkudGVzdChyZW1haW5pbmdVcmwpKSB7XG4gICAgICByZW1haW5pbmdVcmwgPSBgL3Nlc3Npb24vJHt0aGlzLnNlc3Npb25JZH0ke3JlbWFpbmluZ1VybH1gO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVpcmVzU2Vzc2lvbklkID0gdGhpcy5lbmRwb2ludFJlcXVpcmVzU2Vzc2lvbklkKHJlbWFpbmluZ1VybCk7XG5cbiAgICBpZiAocmVxdWlyZXNTZXNzaW9uSWQgJiYgdGhpcy5zZXNzaW9uSWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIHByb3h5IGEgc2Vzc2lvbiBjb21tYW5kIHdpdGhvdXQgc2Vzc2lvbiBpZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb25CYXNlUmUgPSBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vKFteL10rKScpO1xuICAgIGlmIChzZXNzaW9uQmFzZVJlLnRlc3QocmVtYWluaW5nVXJsKSkge1xuICAgICAgaWYgKHRoaXMuc2Vzc2lvbklkID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICBgU2Vzc2lvbiBJRCBpcyBub3Qgc2V0LCBidXQgc2F3IGEgVVJMIHBhdGggcmVmZXJlbmNpbmcgYSBzZXNzaW9uICgke3JlbWFpbmluZ1VybH0pLiBUaGlzIG1heSBiZSBhIGJ1ZyBpbiB5b3VyIGNsaWVudC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyB3ZSBoYXZlIHNvbWV0aGluZyBsaWtlIC9zZXNzaW9uLzppZC9mb29iYXIsIHNvIHdlIG5lZWQgdG8gcmVwbGFjZVxuICAgICAgLy8gdGhlIHNlc3Npb24gaWRcbiAgICAgIGNvbnN0IG1hdGNoID0gc2Vzc2lvbkJhc2VSZS5leGVjKHJlbWFpbmluZ1VybCk7XG4gICAgICAvLyBUT0RPOiBpZiBgcmVxdWlyZXNTZXNzaW9uSWRgIGlzIGBmYWxzZWAgYW5kIGBzZXNzaW9uSWRgIGlzIGBudWxsYCwgdGhpcyBpcyBhIGJ1Zy5cbiAgICAgIC8vIGFyZSB3ZSBzdXJlIGBzZXNzaW9uSWRgIGlzIG5vdCBgbnVsbGA/XG4gICAgICByZW1haW5pbmdVcmwgPSByZW1haW5pbmdVcmwucmVwbGFjZShcbiAgICAgICAgLyoqIEB0eXBlIHtSZWdFeHBFeGVjQXJyYXl9ICovIChtYXRjaClbMV0sXG4gICAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5zZXNzaW9uSWQpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAocmVxdWlyZXNTZXNzaW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgOnNlc3Npb24gc2VjdGlvbiBmb3IgdXJsOiAke3JlbWFpbmluZ1VybH1gKTtcbiAgICB9XG4gICAgcmVtYWluaW5nVXJsID0gcmVtYWluaW5nVXJsLnJlcGxhY2UoL1xcLyQvLCAnJyk7IC8vIGNhbid0IGhhdmUgdHJhaWxpbmcgc2xhc2hlc1xuXG4gICAgcmV0dXJuIHByb3h5QmFzZSArIHJlbWFpbmluZ1VybDtcbiAgfVxuXG4gIGFzeW5jIHByb3h5KHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IG5ld1VybCA9IHRoaXMuZ2V0VXJsRm9yUHJveHkodXJsKTtcbiAgICBjb25zdCB0cnVuY2F0ZUJvZHkgPSAoY29udGVudCkgPT5cbiAgICAgIF8udHJ1bmNhdGUoXy5pc1N0cmluZyhjb250ZW50KSA/IGNvbnRlbnQgOiBKU09OLnN0cmluZ2lmeShjb250ZW50KSwge1xuICAgICAgICBsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEgsXG4gICAgICB9KTtcbiAgICAvKiogQHR5cGUge2ltcG9ydCgnYXhpb3MnKS5BeGlvc1JlcXVlc3RDb25maWd9ICovXG4gICAgY29uc3QgcmVxT3B0cyA9IHtcbiAgICAgIHVybDogbmV3VXJsLFxuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLFxuICAgICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgICBhY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uLCAqLyonLFxuICAgICAgfSxcbiAgICAgIHByb3h5OiBmYWxzZSxcbiAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgIGh0dHBBZ2VudDogdGhpcy5odHRwQWdlbnQsXG4gICAgICBodHRwc0FnZW50OiB0aGlzLmh0dHBzQWdlbnQsXG4gICAgfTtcbiAgICAvLyBHRVQgbWV0aG9kcyBzaG91bGRuJ3QgaGF2ZSBhbnkgYm9keS4gTW9zdCBzZXJ2ZXJzIGFyZSBPSyB3aXRoIHRoaXMsIGJ1dCBXZWJEcml2ZXJBZ2VudCB0aHJvd3MgNDAwIGVycm9yc1xuICAgIGlmICh1dGlsLmhhc1ZhbHVlKGJvZHkpICYmIG1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXFPcHRzLmRhdGEgPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW50ZXJwcmV0IHRoZSByZXF1ZXN0IGJvZHkgYXMgdmFsaWQgSlNPTjogJHt0cnVuY2F0ZUJvZHkoYm9keSl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcU9wdHMuZGF0YSA9IGJvZHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICBgUHJveHlpbmcgWyR7bWV0aG9kfSAke3VybCB8fCAnLyd9XSB0byBbJHttZXRob2R9ICR7bmV3VXJsfV0gYCArXG4gICAgICAgIChyZXFPcHRzLmRhdGEgPyBgd2l0aCBib2R5OiAke3RydW5jYXRlQm9keShyZXFPcHRzLmRhdGEpfWAgOiAnd2l0aCBubyBib2R5JylcbiAgICApO1xuXG4gICAgY29uc3QgdGhyb3dQcm94eUVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSAvKiogQHR5cGUge1Byb3h5RXJyb3J9ICovIChuZXcgRXJyb3IoYFRoZSByZXF1ZXN0IHRvICR7dXJsfSBoYXMgZmFpbGVkYCkpO1xuICAgICAgZXJyLnJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiBlcnJvcixcbiAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICB9O1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH07XG4gICAgbGV0IGlzUmVzcG9uc2VMb2dnZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge2RhdGEsIHN0YXR1cywgaGVhZGVyc30gPSBhd2FpdCB0aGlzLnJlcXVlc3QocmVxT3B0cyk7XG4gICAgICAvLyBgZGF0YWAgbWlnaHQgYmUgcmVhbGx5IGJpZ1xuICAgICAgLy8gQmUgY2FyZWZ1bCB3aGlsZSBoYW5kbGluZyBpdCB0byBhdm9pZCBtZW1vcnkgbGVha3NcbiAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSByZXNwb25zZSBzaG91bGQgYmUgYSB2YWxpZCBKU09OIG9iamVjdFxuICAgICAgICAvLyBJZiBpdCBjYW5ub3QgYmUgY29lcmNlZCB0byBhbiBvYmplY3QgdGhlbiB0aGUgcmVzcG9uc2UgaXMgd3JvbmdcbiAgICAgICAgdGhyb3dQcm94eUVycm9yKGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYEdvdCByZXNwb25zZSB3aXRoIHN0YXR1cyAke3N0YXR1c306ICR7dHJ1bmNhdGVCb2R5KGRhdGEpfWApO1xuICAgICAgaXNSZXNwb25zZUxvZ2dlZCA9IHRydWU7XG4gICAgICBjb25zdCBpc1Nlc3Npb25DcmVhdGlvblJlcXVlc3QgPSAvXFwvc2Vzc2lvbiQvLnRlc3QodXJsKSAmJiBtZXRob2QgPT09ICdQT1NUJztcbiAgICAgIGlmIChpc1Nlc3Npb25DcmVhdGlvblJlcXVlc3QpIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBkYXRhLnNlc3Npb25JZCB8fCAoZGF0YS52YWx1ZSB8fCB7fSkuc2Vzc2lvbklkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG93bnN0cmVhbVByb3RvY29sID0gdGhpcy5nZXRQcm90b2NvbEZyb21SZXNCb2R5KGRhdGEpO1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBEZXRlcm1pbmVkIHRoZSBkb3duc3RyZWFtIHByb3RvY29sIGFzICcke3RoaXMuZG93bnN0cmVhbVByb3RvY29sfSdgKTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyhkYXRhLCAnc3RhdHVzJykgJiYgcGFyc2VJbnQoZGF0YS5zdGF0dXMsIDEwKSAhPT0gMCkge1xuICAgICAgICAvLyBTb21lIHNlcnZlcnMsIGxpa2UgY2hyb21lZHJpdmVyIG1heSByZXR1cm4gcmVzcG9uc2UgY29kZSAyMDAgZm9yIG5vbi16ZXJvIEpTT05XUCBzdGF0dXNlc1xuICAgICAgICB0aHJvd1Byb3h5RXJyb3IoZGF0YSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXMgPSB7c3RhdHVzQ29kZTogc3RhdHVzLCBoZWFkZXJzLCBib2R5OiBkYXRhfTtcbiAgICAgIHJldHVybiBbcmVzLCBkYXRhXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBXZSBvbmx5IGNvbnNpZGVyIGFuIGVycm9yIHVuZXhwZWN0ZWQgaWYgdGhpcyB3YXMgbm90XG4gICAgICAvLyBhbiBhc3luYyByZXF1ZXN0IG1vZHVsZSBlcnJvciBvciBpZiB0aGUgcmVzcG9uc2UgY2Fubm90IGJlIGNhc3QgdG9cbiAgICAgIC8vIGEgdmFsaWQgSlNPTlxuICAgICAgbGV0IHByb3h5RXJyb3JNc2cgPSBlLm1lc3NhZ2U7XG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZShlLnJlc3BvbnNlKSkge1xuICAgICAgICBpZiAoIWlzUmVzcG9uc2VMb2dnZWQpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHRydW5jYXRlQm9keShlLnJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oXG4gICAgICAgICAgICB1dGlsLmhhc1ZhbHVlKGUucmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgICAgICAgICA/IGBHb3QgcmVzcG9uc2Ugd2l0aCBzdGF0dXMgJHtlLnJlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3J9YFxuICAgICAgICAgICAgICA6IGBHb3QgcmVzcG9uc2Ugd2l0aCB1bmtub3duIHN0YXR1czogJHtlcnJvcn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJveHlFcnJvck1zZyA9IGBDb3VsZCBub3QgcHJveHkgY29tbWFuZCB0byB0aGUgcmVtb3RlIHNlcnZlci4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWA7XG4gICAgICAgIGlmIChDT01QQUNUX0VSUk9SX1BBVFRFUk5TLnNvbWUoKHApID0+IHAudGVzdChlLm1lc3NhZ2UpKSkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oZS5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGUuc3RhY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLlByb3h5UmVxdWVzdEVycm9yKHByb3h5RXJyb3JNc2csIGUucmVzcG9uc2U/LmRhdGEsIGUucmVzcG9uc2U/LnN0YXR1cyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJvdG9jb2xGcm9tUmVzQm9keShyZXNPYmopIHtcbiAgICBpZiAoXy5pc0ludGVnZXIocmVzT2JqLnN0YXR1cykpIHtcbiAgICAgIHJldHVybiBNSlNPTldQO1xuICAgIH1cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocmVzT2JqLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIFczQztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkhUVFBNZXRob2R9IG1ldGhvZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH1cbiAgICovXG4gIHJlcXVlc3RUb0NvbW1hbmROYW1lKHVybCwgbWV0aG9kKSB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcGF0dGVyblxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIGNvbnN0IGV4dHJhY3RDb21tYW5kTmFtZSA9IChwYXR0ZXJuKSA9PiB7XG4gICAgICBjb25zdCBwYXRoTWF0Y2ggPSBwYXR0ZXJuLmV4ZWModXJsKTtcbiAgICAgIGlmIChwYXRoTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHJvdXRlVG9Db21tYW5kTmFtZShwYXRoTWF0Y2hbMV0sIG1ldGhvZCwgdGhpcy5yZXFCYXNlUGF0aCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBsZXQgY29tbWFuZE5hbWUgPSByb3V0ZVRvQ29tbWFuZE5hbWUodXJsLCBtZXRob2QsIHRoaXMucmVxQmFzZVBhdGgpO1xuICAgIGlmICghY29tbWFuZE5hbWUgJiYgXy5pbmNsdWRlcyh1cmwsIGAke3RoaXMucmVxQmFzZVBhdGh9L3Nlc3Npb24vYCkpIHtcbiAgICAgIGNvbW1hbmROYW1lID0gZXh0cmFjdENvbW1hbmROYW1lKFxuICAgICAgICBuZXcgUmVnRXhwKGAke18uZXNjYXBlUmVnRXhwKHRoaXMucmVxQmFzZVBhdGgpfS9zZXNzaW9uL1teL10rKC4rKWApXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNvbW1hbmROYW1lICYmIF8uaW5jbHVkZXModXJsLCB0aGlzLnJlcUJhc2VQYXRoKSkge1xuICAgICAgY29tbWFuZE5hbWUgPSBleHRyYWN0Q29tbWFuZE5hbWUobmV3IFJlZ0V4cChgJHtfLmVzY2FwZVJlZ0V4cCh0aGlzLnJlcUJhc2VQYXRoKX0oLy4rKWApKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmROYW1lO1xuICB9XG5cbiAgYXN5bmMgcHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGNvbnN0IGNvbW1hbmROYW1lID0gdGhpcy5yZXF1ZXN0VG9Db21tYW5kTmFtZSh1cmwsIG1ldGhvZCk7XG4gICAgaWYgKCFjb21tYW5kTmFtZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHkodXJsLCBtZXRob2QsIGJvZHkpO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgTWF0Y2hlZCAnJHt1cmx9JyB0byBjb21tYW5kIG5hbWUgJyR7Y29tbWFuZE5hbWV9J2ApO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvdG9jb2xDb252ZXJ0ZXIuY29udmVydEFuZFByb3h5KGNvbW1hbmROYW1lLCB1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cblxuICBhc3luYyBjb21tYW5kKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBsZXQgcmVzQm9keU9iajtcbiAgICB0cnkge1xuICAgICAgW3Jlc3BvbnNlLCByZXNCb2R5T2JqXSA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Qcm94eVJlcXVlc3RFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgZXJyLmdldEFjdHVhbEVycm9yKCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25FcnJvcihlcnIubWVzc2FnZSk7XG4gICAgfVxuICAgIGNvbnN0IHByb3RvY29sID0gdGhpcy5nZXRQcm90b2NvbEZyb21SZXNCb2R5KHJlc0JvZHlPYmopO1xuICAgIGlmIChwcm90b2NvbCA9PT0gTUpTT05XUCkge1xuICAgICAgLy8gR290IHJlc3BvbnNlIGluIE1KU09OV1AgZm9ybWF0XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlc0JvZHlPYmouc3RhdHVzID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLnZhbHVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhdHVzID0gcGFyc2VJbnQocmVzQm9keU9iai5zdGF0dXMsIDEwKTtcbiAgICAgIGlmICghaXNOYU4oc3RhdHVzKSAmJiBzdGF0dXMgIT09IDApIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSByZXNCb2R5T2JqLnZhbHVlO1xuICAgICAgICBpZiAoXy5oYXMobWVzc2FnZSwgJ21lc3NhZ2UnKSkge1xuICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUoXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIF8uaXNFbXB0eShtZXNzYWdlKSA/IGdldFN1bW1hcnlCeUNvZGUoc3RhdHVzKSA6IG1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3RvY29sID09PSBXM0MpIHtcbiAgICAgIC8vIEdvdCByZXNwb25zZSBpbiBXM0MgZm9ybWF0XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA8IDMwMCkge1xuICAgICAgICByZXR1cm4gcmVzQm9keU9iai52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QocmVzQm9keU9iai52YWx1ZSkgJiYgcmVzQm9keU9iai52YWx1ZS5lcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvckZyb21XM0NKc29uQ29kZShcbiAgICAgICAgICByZXNCb2R5T2JqLnZhbHVlLmVycm9yLFxuICAgICAgICAgIHJlc0JvZHlPYmoudmFsdWUubWVzc2FnZSxcbiAgICAgICAgICByZXNCb2R5T2JqLnZhbHVlLnN0YWNrdHJhY2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgLy8gVW5rbm93biBwcm90b2NvbC4gS2VlcGluZyBpdCBiZWNhdXNlIG9mIHRoZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICByZXR1cm4gcmVzQm9keU9iajtcbiAgICB9XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoXG4gICAgICBgRGlkIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCByZXNwb25zZSBjb2RlICcke3Jlc3BvbnNlLnN0YXR1c0NvZGV9JyBgICtcbiAgICAgICAgYGFuZCByZXNwb25zZSBib2R5ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkocmVzQm9keU9iaiksIHtcbiAgICAgICAgICBsZW5ndGg6IDMwMCxcbiAgICAgICAgfSl9J2BcbiAgICApO1xuICB9XG5cbiAgZ2V0U2Vzc2lvbklkRnJvbVVybCh1cmwpIHtcbiAgICBjb25zdCBtYXRjaCA9IHVybC5tYXRjaCgvXFwvc2Vzc2lvblxcLyhbXi9dKykvKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IG51bGw7XG4gIH1cblxuICBhc3luYyBwcm94eVJlcVJlcyhyZXEsIHJlcykge1xuICAgIC8vICEgdGhpcyBtZXRob2QgbXVzdCBub3QgdGhyb3cgYW55IGV4Y2VwdGlvbnNcbiAgICAvLyAhIG1ha2Ugc3VyZSB0byBjYWxsIHJlcy5zZW5kIGJlZm9yZSByZXR1cm5cbiAgICBsZXQgc3RhdHVzQ29kZTtcbiAgICBsZXQgcmVzQm9keU9iajtcbiAgICB0cnkge1xuICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgW3Jlc3BvbnNlLCByZXNCb2R5T2JqXSA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKHJlcS5vcmlnaW5hbFVybCwgcmVxLm1ldGhvZCwgcmVxLmJvZHkpO1xuICAgICAgcmVzLmhlYWRlcnMgPSByZXNwb25zZS5oZWFkZXJzO1xuICAgICAgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBbc3RhdHVzQ29kZSwgcmVzQm9keU9ial0gPSBnZXRSZXNwb25zZUZvclczQ0Vycm9yKFxuICAgICAgICBpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Qcm94eVJlcXVlc3RFcnJvcikgPyBlcnIuZ2V0QWN0dWFsRXJyb3IoKSA6IGVyclxuICAgICAgKTtcbiAgICB9XG4gICAgcmVzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChyZXNCb2R5T2JqKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgZXJyb3JzLlVua25vd25FcnJvcihcbiAgICAgICAgYFRoZSBkb3duc3RyZWFtIHNlcnZlciByZXNwb25zZSB3aXRoIHRoZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9IGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0OiBgICtcbiAgICAgICAgICBfLnRydW5jYXRlKGAke3Jlc0JvZHlPYmp9YCwge2xlbmd0aDogMzAwfSlcbiAgICAgICk7XG4gICAgICBbc3RhdHVzQ29kZSwgcmVzQm9keU9ial0gPSBnZXRSZXNwb25zZUZvclczQ0Vycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcHJveGllZCByZXNwb25zZSBjb250YWlucyBhIHNlc3Npb25JZCB0aGF0IHRoZSBkb3duc3RyZWFtXG4gICAgLy8gZHJpdmVyIGhhcyBnZW5lcmF0ZWQsIHdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIHRoYXQgdG8gdGhlIGNsaWVudC5cbiAgICAvLyBJbnN0ZWFkLCByZXR1cm4gdGhlIGlkIGZyb20gdGhlIHJlcXVlc3Qgb3IgZnJvbSBjdXJyZW50IHNlc3Npb25cbiAgICBpZiAoXy5oYXMocmVzQm9keU9iaiwgJ3Nlc3Npb25JZCcpKSB7XG4gICAgICBjb25zdCByZXFTZXNzaW9uSWQgPSB0aGlzLmdldFNlc3Npb25JZEZyb21VcmwocmVxLm9yaWdpbmFsVXJsKTtcbiAgICAgIGlmIChyZXFTZXNzaW9uSWQpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUmVwbGFjaW5nIHNlc3Npb25JZCAke3Jlc0JvZHlPYmouc2Vzc2lvbklkfSB3aXRoICR7cmVxU2Vzc2lvbklkfWApO1xuICAgICAgICByZXNCb2R5T2JqLnNlc3Npb25JZCA9IHJlcVNlc3Npb25JZDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXNzaW9uSWQpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUmVwbGFjaW5nIHNlc3Npb25JZCAke3Jlc0JvZHlPYmouc2Vzc2lvbklkfSB3aXRoICR7dGhpcy5zZXNzaW9uSWR9YCk7XG4gICAgICAgIHJlc0JvZHlPYmouc2Vzc2lvbklkID0gdGhpcy5zZXNzaW9uSWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc0JvZHlPYmoudmFsdWUgPSBmb3JtYXRSZXNwb25zZVZhbHVlKHJlc0JvZHlPYmoudmFsdWUpO1xuICAgIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuc2VuZChKU09OLnN0cmluZ2lmeShmb3JtYXRTdGF0dXMocmVzQm9keU9iaikpKTtcbiAgfVxufVxuXG5leHBvcnQge0pXUHJveHl9O1xuZXhwb3J0IGRlZmF1bHQgSldQcm94eTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7RXJyb3IgJiB7cmVzcG9uc2U6IHtkYXRhOiBpbXBvcnQoJ3R5cGUtZmVzdCcpLkpzb25PYmplY3QsIHN0YXR1czogaW1wb3J0KCdodHRwLXN0YXR1cy1jb2RlcycpLlN0YXR1c0NvZGVzfX19IFByb3h5RXJyb3JcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU9BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLFdBQVcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLFVBQWpCLENBQXBCOztBQUNBLE1BQU1DLHVCQUF1QixHQUFHLE1BQWhDO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBQyxrQkFBRCxFQUFxQixnQkFBckIsQ0FBL0I7QUFFQSxNQUFNO0VBQUNDLE9B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
419
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX0xPRyIsImxvZ2dlciIsImdldExvZ2dlciIsIkRFRkFVTFRfUkVRVUVTVF9USU1FT1VUIiwiQ09NUEFDVF9FUlJPUl9QQVRURVJOUyIsIk1KU09OV1AiLCJXM0MiLCJQUk9UT0NPTFMiLCJBTExPV0VEX09QVFMiLCJKV1Byb3h5Iiwic2NoZW1lIiwic2VydmVyIiwicG9ydCIsImJhc2UiLCJyZXFCYXNlUGF0aCIsInNlc3Npb25JZCIsInRpbWVvdXQiLCJjb25zdHJ1Y3RvciIsIm9wdHMiLCJfIiwicGljayIsIm9wdGlvbnMiLCJkZWZhdWx0cyIsIm9taXQiLCJERUZBVUxUX0JBU0VfUEFUSCIsInRvTG93ZXJDYXNlIiwiT2JqZWN0IiwiYXNzaWduIiwiX2FjdGl2ZVJlcXVlc3RzIiwiX2Rvd25zdHJlYW1Qcm90b2NvbCIsImFnZW50T3B0cyIsImtlZXBBbGl2ZSIsIm1heFNvY2tldHMiLCJtYXhGcmVlU29ja2V0cyIsImh0dHBBZ2VudCIsImh0dHAiLCJBZ2VudCIsImh0dHBzQWdlbnQiLCJodHRwcyIsInByb3RvY29sQ29udmVydGVyIiwiUHJvdG9jb2xDb252ZXJ0ZXIiLCJwcm94eSIsImJpbmQiLCJsb2ciLCJfbG9nIiwicmVxdWVzdCIsInJlcXVlc3RDb25maWciLCJyZXFQcm9taXNlIiwiYXhpb3MiLCJwdXNoIiwicHVsbCIsImdldEFjdGl2ZVJlcXVlc3RzQ291bnQiLCJsZW5ndGgiLCJjYW5jZWxBY3RpdmVSZXF1ZXN0cyIsImVuZHBvaW50UmVxdWlyZXNTZXNzaW9uSWQiLCJlbmRwb2ludCIsImluY2x1ZGVzIiwiZG93bnN0cmVhbVByb3RvY29sIiwidmFsdWUiLCJnZXRVcmxGb3JQcm94eSIsInVybCIsInByb3h5QmFzZSIsImVuZHBvaW50UmUiLCJyZW1haW5pbmdVcmwiLCJ0ZXN0IiwiZmlyc3QiLCJSZWdFeHAiLCJleGVjIiwiRXJyb3IiLCJyZXBsYWNlIiwic3RyaXBQcmVmaXhSZSIsInJlcXVpcmVzU2Vzc2lvbklkIiwic2Vzc2lvbkJhc2VSZSIsIlJlZmVyZW5jZUVycm9yIiwibWF0Y2giLCJtZXRob2QiLCJib2R5IiwidG9VcHBlckNhc2UiLCJuZXdVcmwiLCJ0cnVuY2F0ZUJvZHkiLCJjb250ZW50IiwidHJ1bmNhdGUiLCJpc1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJNQVhfTE9HX0JPRFlfTEVOR1RIIiwicmVxT3B0cyIsImhlYWRlcnMiLCJhY2NlcHQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJkYXRhIiwicGFyc2UiLCJlIiwiZGVidWciLCJ0aHJvd1Byb3h5RXJyb3IiLCJlcnJvciIsImVyciIsInJlc3BvbnNlIiwic3RhdHVzIiwiaXNSZXNwb25zZUxvZ2dlZCIsImlzUGxhaW5PYmplY3QiLCJpc1Nlc3Npb25DcmVhdGlvblJlcXVlc3QiLCJnZXRQcm90b2NvbEZyb21SZXNCb2R5IiwiaW5mbyIsImhhcyIsInBhcnNlSW50IiwicmVzIiwic3RhdHVzQ29kZSIsInByb3h5RXJyb3JNc2ciLCJtZXNzYWdlIiwic29tZSIsInAiLCJzdGFjayIsImVycm9ycyIsIlByb3h5UmVxdWVzdEVycm9yIiwicmVzT2JqIiwiaXNJbnRlZ2VyIiwiaXNVbmRlZmluZWQiLCJyZXF1ZXN0VG9Db21tYW5kTmFtZSIsImV4dHJhY3RDb21tYW5kTmFtZSIsInBhdHRlcm4iLCJwYXRoTWF0Y2giLCJyb3V0ZVRvQ29tbWFuZE5hbWUiLCJjb21tYW5kTmFtZSIsImVzY2FwZVJlZ0V4cCIsInByb3h5Q29tbWFuZCIsImNvbnZlcnRBbmRQcm94eSIsImNvbW1hbmQiLCJyZXNCb2R5T2JqIiwiaXNFcnJvclR5cGUiLCJnZXRBY3R1YWxFcnJvciIsIlVua25vd25FcnJvciIsInByb3RvY29sIiwiaXNOYU4iLCJlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSIsImlzRW1wdHkiLCJnZXRTdW1tYXJ5QnlDb2RlIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJzdGFja3RyYWNlIiwiZ2V0U2Vzc2lvbklkRnJvbVVybCIsInByb3h5UmVxUmVzIiwicmVxIiwib3JpZ2luYWxVcmwiLCJnZXRSZXNwb25zZUZvclczQ0Vycm9yIiwic2V0IiwicmVxU2Vzc2lvbklkIiwiZm9ybWF0UmVzcG9uc2VWYWx1ZSIsInNlbmQiLCJmb3JtYXRTdGF0dXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvanNvbndwLXByb3h5L3Byb3h5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge2xvZ2dlciwgdXRpbH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQge2dldFN1bW1hcnlCeUNvZGV9IGZyb20gJy4uL2pzb253cC1zdGF0dXMvc3RhdHVzJztcbmltcG9ydCB7XG4gIGVycm9ycyxcbiAgaXNFcnJvclR5cGUsXG4gIGVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlLFxuICBlcnJvckZyb21XM0NKc29uQ29kZSxcbiAgZ2V0UmVzcG9uc2VGb3JXM0NFcnJvcixcbn0gZnJvbSAnLi4vcHJvdG9jb2wvZXJyb3JzJztcbmltcG9ydCB7cm91dGVUb0NvbW1hbmROYW1lfSBmcm9tICcuLi9wcm90b2NvbCc7XG5pbXBvcnQge01BWF9MT0dfQk9EWV9MRU5HVEgsIERFRkFVTFRfQkFTRV9QQVRILCBQUk9UT0NPTFN9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgUHJvdG9jb2xDb252ZXJ0ZXIgZnJvbSAnLi9wcm90b2NvbC1jb252ZXJ0ZXInO1xuaW1wb3J0IHtmb3JtYXRSZXNwb25zZVZhbHVlLCBmb3JtYXRTdGF0dXN9IGZyb20gJy4uL3Byb3RvY29sL2hlbHBlcnMnO1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuXG5jb25zdCBERUZBVUxUX0xPRyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1dEIFByb3h5Jyk7XG5jb25zdCBERUZBVUxUX1JFUVVFU1RfVElNRU9VVCA9IDI0MDAwMDtcbmNvbnN0IENPTVBBQ1RfRVJST1JfUEFUVEVSTlMgPSBbL1xcYkVDT05OUkVGVVNFRFxcYi8sIC9zb2NrZXQgaGFuZyB1cC9dO1xuXG5jb25zdCB7TUpTT05XUCwgVzNDfSA9IFBST1RPQ09MUztcblxuY29uc3QgQUxMT1dFRF9PUFRTID0gW1xuICAnc2NoZW1lJyxcbiAgJ3NlcnZlcicsXG4gICdwb3J0JyxcbiAgJ2Jhc2UnLFxuICAncmVxQmFzZVBhdGgnLFxuICAnc2Vzc2lvbklkJyxcbiAgJ3RpbWVvdXQnLFxuICAnbG9nJyxcbiAgJ2tlZXBBbGl2ZScsXG5dO1xuXG5jbGFzcyBKV1Byb3h5IHtcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIHNjaGVtZTtcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIHNlcnZlcjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHBvcnQ7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICBiYXNlO1xuICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgcmVxQmFzZVBhdGg7XG4gIC8qKiBAdHlwZSB7c3RyaW5nP30gKi9cbiAgc2Vzc2lvbklkO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdGltZW91dDtcblxuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBvcHRzID0gXy5waWNrKG9wdHMsIEFMTE9XRURfT1BUUyk7XG5cbiAgICAvLyBvbWl0ICdsb2cnIGluIHRoZSBkZWZhdWx0cyBhc3NpZ25tZW50IGhlcmUgYmVjYXVzZSAnbG9nJyBpcyBhIGdldHRlciBhbmQgd2UgYXJlIGdvaW5nIHRvIHNldFxuICAgIC8vIGl0IHRvIHRoaXMuX2xvZyAod2hpY2ggbGllcyBiZWhpbmQgdGhlIGdldHRlcikgZnVydGhlciBkb3duXG4gICAgY29uc3Qgb3B0aW9ucyA9IF8uZGVmYXVsdHMoXy5vbWl0KG9wdHMsICdsb2cnKSwge1xuICAgICAgc2NoZW1lOiAnaHR0cCcsXG4gICAgICBzZXJ2ZXI6ICdsb2NhbGhvc3QnLFxuICAgICAgcG9ydDogNDQ0NCxcbiAgICAgIGJhc2U6IERFRkFVTFRfQkFTRV9QQVRILFxuICAgICAgcmVxQmFzZVBhdGg6IERFRkFVTFRfQkFTRV9QQVRILFxuICAgICAgc2Vzc2lvbklkOiBudWxsLFxuICAgICAgdGltZW91dDogREVGQVVMVF9SRVFVRVNUX1RJTUVPVVQsXG4gICAgfSk7XG4gICAgb3B0aW9ucy5zY2hlbWUgPSBvcHRpb25zLnNjaGVtZS50b0xvd2VyQ2FzZSgpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0cyA9IFtdO1xuICAgIHRoaXMuX2Rvd25zdHJlYW1Qcm90b2NvbCA9IG51bGw7XG4gICAgY29uc3QgYWdlbnRPcHRzID0ge1xuICAgICAga2VlcEFsaXZlOiBvcHRzLmtlZXBBbGl2ZSA/PyB0cnVlLFxuICAgICAgbWF4U29ja2V0czogMTAsXG4gICAgICBtYXhGcmVlU29ja2V0czogNSxcbiAgICB9O1xuICAgIHRoaXMuaHR0cEFnZW50ID0gbmV3IGh0dHAuQWdlbnQoYWdlbnRPcHRzKTtcbiAgICB0aGlzLmh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoYWdlbnRPcHRzKTtcbiAgICB0aGlzLnByb3RvY29sQ29udmVydGVyID0gbmV3IFByb3RvY29sQ29udmVydGVyKHRoaXMucHJveHkuYmluZCh0aGlzKSwgb3B0cy5sb2cpO1xuICAgIHRoaXMuX2xvZyA9IG9wdHMubG9nO1xuICB9XG5cbiAgZ2V0IGxvZygpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nID8/IERFRkFVTFRfTE9HO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHJlcXVlc3RzIHRvIHRoZSBkb3duc3RyZWFtIHNlcnZlclxuICAgKlxuICAgKiBAcHJpdmF0ZSAtIERvIG5vdCBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5LFxuICAgKiBpdCB1c2VzIGNsaWVudC1zcGVjaWZpYyBhcmd1bWVudHMgYW5kIHJlc3BvbnNlcyFcbiAgICpcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2F4aW9zJykuQXhpb3NSZXF1ZXN0Q29uZmlnfSByZXF1ZXN0Q29uZmlnXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgnYXhpb3MnKS5BeGlvc1Jlc3BvbnNlPn1cbiAgICovXG4gIGFzeW5jIHJlcXVlc3QocmVxdWVzdENvbmZpZykge1xuICAgIGNvbnN0IHJlcVByb21pc2UgPSBheGlvcyhyZXF1ZXN0Q29uZmlnKTtcbiAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0cy5wdXNoKHJlcVByb21pc2UpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVxUHJvbWlzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgXy5wdWxsKHRoaXMuX2FjdGl2ZVJlcXVlc3RzLCByZXFQcm9taXNlKTtcbiAgICB9XG4gIH1cblxuICBnZXRBY3RpdmVSZXF1ZXN0c0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVSZXF1ZXN0cy5sZW5ndGg7XG4gIH1cblxuICBjYW5jZWxBY3RpdmVSZXF1ZXN0cygpIHtcbiAgICB0aGlzLl9hY3RpdmVSZXF1ZXN0cyA9IFtdO1xuICB9XG5cbiAgZW5kcG9pbnRSZXF1aXJlc1Nlc3Npb25JZChlbmRwb2ludCkge1xuICAgIHJldHVybiAhXy5pbmNsdWRlcyhbJy9zZXNzaW9uJywgJy9zZXNzaW9ucycsICcvc3RhdHVzJ10sIGVuZHBvaW50KTtcbiAgfVxuXG4gIHNldCBkb3duc3RyZWFtUHJvdG9jb2wodmFsdWUpIHtcbiAgICB0aGlzLl9kb3duc3RyZWFtUHJvdG9jb2wgPSB2YWx1ZTtcbiAgICB0aGlzLnByb3RvY29sQ29udmVydGVyLmRvd25zdHJlYW1Qcm90b2NvbCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGRvd25zdHJlYW1Qcm90b2NvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZG93bnN0cmVhbVByb3RvY29sO1xuICB9XG5cbiAgZ2V0VXJsRm9yUHJveHkodXJsKSB7XG4gICAgaWYgKHVybCA9PT0gJycpIHtcbiAgICAgIHVybCA9ICcvJztcbiAgICB9XG4gICAgY29uc3QgcHJveHlCYXNlID0gYCR7dGhpcy5zY2hlbWV9Oi8vJHt0aGlzLnNlcnZlcn06JHt0aGlzLnBvcnR9JHt0aGlzLmJhc2V9YDtcbiAgICBjb25zdCBlbmRwb2ludFJlID0gJygvKHNlc3Npb258c3RhdHVzKSknO1xuICAgIGxldCByZW1haW5pbmdVcmwgPSAnJztcbiAgICBpZiAoL15odHRwLy50ZXN0KHVybCkpIHtcbiAgICAgIGNvbnN0IGZpcnN0ID0gbmV3IFJlZ0V4cChgKGh0dHBzPzovLy4rKSR7ZW5kcG9pbnRSZX1gKS5leGVjKHVybCk7XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignR290IGEgY29tcGxldGUgdXJsIGJ1dCBjb3VsZCBub3QgZXh0cmFjdCBKV1AgZW5kcG9pbnQnKTtcbiAgICAgIH1cbiAgICAgIHJlbWFpbmluZ1VybCA9IHVybC5yZXBsYWNlKGZpcnN0WzFdLCAnJyk7XG4gICAgfSBlbHNlIGlmIChuZXcgUmVnRXhwKCdeLycpLnRlc3QodXJsKSkge1xuICAgICAgcmVtYWluaW5nVXJsID0gdXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdXJsICcke3VybH0nYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyaXBQcmVmaXhSZSA9IG5ldyBSZWdFeHAoJ14uKj8oLyhzZXNzaW9ufHN0YXR1cykuKikkJyk7XG4gICAgaWYgKHN0cmlwUHJlZml4UmUudGVzdChyZW1haW5pbmdVcmwpKSB7XG4gICAgICByZW1haW5pbmdVcmwgPSAvKiogQHR5cGUge1JlZ0V4cEV4ZWNBcnJheX0gKi8gKHN0cmlwUHJlZml4UmUuZXhlYyhyZW1haW5pbmdVcmwpKVsxXTtcbiAgICB9XG5cbiAgICBpZiAoIW5ldyBSZWdFeHAoZW5kcG9pbnRSZSkudGVzdChyZW1haW5pbmdVcmwpKSB7XG4gICAgICByZW1haW5pbmdVcmwgPSBgL3Nlc3Npb24vJHt0aGlzLnNlc3Npb25JZH0ke3JlbWFpbmluZ1VybH1gO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVpcmVzU2Vzc2lvbklkID0gdGhpcy5lbmRwb2ludFJlcXVpcmVzU2Vzc2lvbklkKHJlbWFpbmluZ1VybCk7XG5cbiAgICBpZiAocmVxdWlyZXNTZXNzaW9uSWQgJiYgdGhpcy5zZXNzaW9uSWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIHByb3h5IGEgc2Vzc2lvbiBjb21tYW5kIHdpdGhvdXQgc2Vzc2lvbiBpZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb25CYXNlUmUgPSBuZXcgUmVnRXhwKCdeL3Nlc3Npb24vKFteL10rKScpO1xuICAgIGlmIChzZXNzaW9uQmFzZVJlLnRlc3QocmVtYWluaW5nVXJsKSkge1xuICAgICAgaWYgKHRoaXMuc2Vzc2lvbklkID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICBgU2Vzc2lvbiBJRCBpcyBub3Qgc2V0LCBidXQgc2F3IGEgVVJMIHBhdGggcmVmZXJlbmNpbmcgYSBzZXNzaW9uICgke3JlbWFpbmluZ1VybH0pLiBUaGlzIG1heSBiZSBhIGJ1ZyBpbiB5b3VyIGNsaWVudC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyB3ZSBoYXZlIHNvbWV0aGluZyBsaWtlIC9zZXNzaW9uLzppZC9mb29iYXIsIHNvIHdlIG5lZWQgdG8gcmVwbGFjZVxuICAgICAgLy8gdGhlIHNlc3Npb24gaWRcbiAgICAgIGNvbnN0IG1hdGNoID0gc2Vzc2lvbkJhc2VSZS5leGVjKHJlbWFpbmluZ1VybCk7XG4gICAgICAvLyBUT0RPOiBpZiBgcmVxdWlyZXNTZXNzaW9uSWRgIGlzIGBmYWxzZWAgYW5kIGBzZXNzaW9uSWRgIGlzIGBudWxsYCwgdGhpcyBpcyBhIGJ1Zy5cbiAgICAgIC8vIGFyZSB3ZSBzdXJlIGBzZXNzaW9uSWRgIGlzIG5vdCBgbnVsbGA/XG4gICAgICByZW1haW5pbmdVcmwgPSByZW1haW5pbmdVcmwucmVwbGFjZShcbiAgICAgICAgLyoqIEB0eXBlIHtSZWdFeHBFeGVjQXJyYXl9ICovIChtYXRjaClbMV0sXG4gICAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAodGhpcy5zZXNzaW9uSWQpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAocmVxdWlyZXNTZXNzaW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgOnNlc3Npb24gc2VjdGlvbiBmb3IgdXJsOiAke3JlbWFpbmluZ1VybH1gKTtcbiAgICB9XG4gICAgcmVtYWluaW5nVXJsID0gcmVtYWluaW5nVXJsLnJlcGxhY2UoL1xcLyQvLCAnJyk7IC8vIGNhbid0IGhhdmUgdHJhaWxpbmcgc2xhc2hlc1xuXG4gICAgcmV0dXJuIHByb3h5QmFzZSArIHJlbWFpbmluZ1VybDtcbiAgfVxuXG4gIGFzeW5jIHByb3h5KHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIG1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IG5ld1VybCA9IHRoaXMuZ2V0VXJsRm9yUHJveHkodXJsKTtcbiAgICBjb25zdCB0cnVuY2F0ZUJvZHkgPSAoY29udGVudCkgPT5cbiAgICAgIF8udHJ1bmNhdGUoXy5pc1N0cmluZyhjb250ZW50KSA/IGNvbnRlbnQgOiBKU09OLnN0cmluZ2lmeShjb250ZW50KSwge1xuICAgICAgICBsZW5ndGg6IE1BWF9MT0dfQk9EWV9MRU5HVEgsXG4gICAgICB9KTtcbiAgICAvKiogQHR5cGUge2ltcG9ydCgnYXhpb3MnKS5BeGlvc1JlcXVlc3RDb25maWd9ICovXG4gICAgY29uc3QgcmVxT3B0cyA9IHtcbiAgICAgIHVybDogbmV3VXJsLFxuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLFxuICAgICAgICAndXNlci1hZ2VudCc6ICdhcHBpdW0nLFxuICAgICAgICBhY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uLCAqLyonLFxuICAgICAgfSxcbiAgICAgIHByb3h5OiBmYWxzZSxcbiAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgIGh0dHBBZ2VudDogdGhpcy5odHRwQWdlbnQsXG4gICAgICBodHRwc0FnZW50OiB0aGlzLmh0dHBzQWdlbnQsXG4gICAgfTtcbiAgICAvLyBHRVQgbWV0aG9kcyBzaG91bGRuJ3QgaGF2ZSBhbnkgYm9keS4gTW9zdCBzZXJ2ZXJzIGFyZSBPSyB3aXRoIHRoaXMsIGJ1dCBXZWJEcml2ZXJBZ2VudCB0aHJvd3MgNDAwIGVycm9yc1xuICAgIGlmICh1dGlsLmhhc1ZhbHVlKGJvZHkpICYmIG1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXFPcHRzLmRhdGEgPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaW50ZXJwcmV0IHRoZSByZXF1ZXN0IGJvZHkgYXMgdmFsaWQgSlNPTjogJHt0cnVuY2F0ZUJvZHkoYm9keSl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcU9wdHMuZGF0YSA9IGJvZHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICBgUHJveHlpbmcgWyR7bWV0aG9kfSAke3VybCB8fCAnLyd9XSB0byBbJHttZXRob2R9ICR7bmV3VXJsfV0gYCArXG4gICAgICAgIChyZXFPcHRzLmRhdGEgPyBgd2l0aCBib2R5OiAke3RydW5jYXRlQm9keShyZXFPcHRzLmRhdGEpfWAgOiAnd2l0aCBubyBib2R5JylcbiAgICApO1xuXG4gICAgY29uc3QgdGhyb3dQcm94eUVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSAvKiogQHR5cGUge1Byb3h5RXJyb3J9ICovIChuZXcgRXJyb3IoYFRoZSByZXF1ZXN0IHRvICR7dXJsfSBoYXMgZmFpbGVkYCkpO1xuICAgICAgZXJyLnJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiBlcnJvcixcbiAgICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICB9O1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH07XG4gICAgbGV0IGlzUmVzcG9uc2VMb2dnZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge2RhdGEsIHN0YXR1cywgaGVhZGVyc30gPSBhd2FpdCB0aGlzLnJlcXVlc3QocmVxT3B0cyk7XG4gICAgICAvLyBgZGF0YWAgbWlnaHQgYmUgcmVhbGx5IGJpZ1xuICAgICAgLy8gQmUgY2FyZWZ1bCB3aGlsZSBoYW5kbGluZyBpdCB0byBhdm9pZCBtZW1vcnkgbGVha3NcbiAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSByZXNwb25zZSBzaG91bGQgYmUgYSB2YWxpZCBKU09OIG9iamVjdFxuICAgICAgICAvLyBJZiBpdCBjYW5ub3QgYmUgY29lcmNlZCB0byBhbiBvYmplY3QgdGhlbiB0aGUgcmVzcG9uc2UgaXMgd3JvbmdcbiAgICAgICAgdGhyb3dQcm94eUVycm9yKGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZGVidWcoYEdvdCByZXNwb25zZSB3aXRoIHN0YXR1cyAke3N0YXR1c306ICR7dHJ1bmNhdGVCb2R5KGRhdGEpfWApO1xuICAgICAgaXNSZXNwb25zZUxvZ2dlZCA9IHRydWU7XG4gICAgICBjb25zdCBpc1Nlc3Npb25DcmVhdGlvblJlcXVlc3QgPSAvXFwvc2Vzc2lvbiQvLnRlc3QodXJsKSAmJiBtZXRob2QgPT09ICdQT1NUJztcbiAgICAgIGlmIChpc1Nlc3Npb25DcmVhdGlvblJlcXVlc3QpIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBkYXRhLnNlc3Npb25JZCB8fCAoZGF0YS52YWx1ZSB8fCB7fSkuc2Vzc2lvbklkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG93bnN0cmVhbVByb3RvY29sID0gdGhpcy5nZXRQcm90b2NvbEZyb21SZXNCb2R5KGRhdGEpO1xuICAgICAgICB0aGlzLmxvZy5pbmZvKGBEZXRlcm1pbmVkIHRoZSBkb3duc3RyZWFtIHByb3RvY29sIGFzICcke3RoaXMuZG93bnN0cmVhbVByb3RvY29sfSdgKTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmhhcyhkYXRhLCAnc3RhdHVzJykgJiYgcGFyc2VJbnQoZGF0YS5zdGF0dXMsIDEwKSAhPT0gMCkge1xuICAgICAgICAvLyBTb21lIHNlcnZlcnMsIGxpa2UgY2hyb21lZHJpdmVyIG1heSByZXR1cm4gcmVzcG9uc2UgY29kZSAyMDAgZm9yIG5vbi16ZXJvIEpTT05XUCBzdGF0dXNlc1xuICAgICAgICB0aHJvd1Byb3h5RXJyb3IoZGF0YSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXMgPSB7c3RhdHVzQ29kZTogc3RhdHVzLCBoZWFkZXJzLCBib2R5OiBkYXRhfTtcbiAgICAgIHJldHVybiBbcmVzLCBkYXRhXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBXZSBvbmx5IGNvbnNpZGVyIGFuIGVycm9yIHVuZXhwZWN0ZWQgaWYgdGhpcyB3YXMgbm90XG4gICAgICAvLyBhbiBhc3luYyByZXF1ZXN0IG1vZHVsZSBlcnJvciBvciBpZiB0aGUgcmVzcG9uc2UgY2Fubm90IGJlIGNhc3QgdG9cbiAgICAgIC8vIGEgdmFsaWQgSlNPTlxuICAgICAgbGV0IHByb3h5RXJyb3JNc2cgPSBlLm1lc3NhZ2U7XG4gICAgICBpZiAodXRpbC5oYXNWYWx1ZShlLnJlc3BvbnNlKSkge1xuICAgICAgICBpZiAoIWlzUmVzcG9uc2VMb2dnZWQpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHRydW5jYXRlQm9keShlLnJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oXG4gICAgICAgICAgICB1dGlsLmhhc1ZhbHVlKGUucmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgICAgICAgICA/IGBHb3QgcmVzcG9uc2Ugd2l0aCBzdGF0dXMgJHtlLnJlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3J9YFxuICAgICAgICAgICAgICA6IGBHb3QgcmVzcG9uc2Ugd2l0aCB1bmtub3duIHN0YXR1czogJHtlcnJvcn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJveHlFcnJvck1zZyA9IGBDb3VsZCBub3QgcHJveHkgY29tbWFuZCB0byB0aGUgcmVtb3RlIHNlcnZlci4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWA7XG4gICAgICAgIGlmIChDT01QQUNUX0VSUk9SX1BBVFRFUk5TLnNvbWUoKHApID0+IHAudGVzdChlLm1lc3NhZ2UpKSkge1xuICAgICAgICAgIHRoaXMubG9nLmluZm8oZS5tZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZy5pbmZvKGUuc3RhY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLlByb3h5UmVxdWVzdEVycm9yKHByb3h5RXJyb3JNc2csIGUucmVzcG9uc2U/LmRhdGEsIGUucmVzcG9uc2U/LnN0YXR1cyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJvdG9jb2xGcm9tUmVzQm9keShyZXNPYmopIHtcbiAgICBpZiAoXy5pc0ludGVnZXIocmVzT2JqLnN0YXR1cykpIHtcbiAgICAgIHJldHVybiBNSlNPTldQO1xuICAgIH1cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocmVzT2JqLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIFczQztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkhUVFBNZXRob2R9IG1ldGhvZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH1cbiAgICovXG4gIHJlcXVlc3RUb0NvbW1hbmROYW1lKHVybCwgbWV0aG9kKSB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlZ0V4cH0gcGF0dGVyblxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIGNvbnN0IGV4dHJhY3RDb21tYW5kTmFtZSA9IChwYXR0ZXJuKSA9PiB7XG4gICAgICBjb25zdCBwYXRoTWF0Y2ggPSBwYXR0ZXJuLmV4ZWModXJsKTtcbiAgICAgIGlmIChwYXRoTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHJvdXRlVG9Db21tYW5kTmFtZShwYXRoTWF0Y2hbMV0sIG1ldGhvZCwgdGhpcy5yZXFCYXNlUGF0aCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBsZXQgY29tbWFuZE5hbWUgPSByb3V0ZVRvQ29tbWFuZE5hbWUodXJsLCBtZXRob2QsIHRoaXMucmVxQmFzZVBhdGgpO1xuICAgIGlmICghY29tbWFuZE5hbWUgJiYgXy5pbmNsdWRlcyh1cmwsIGAke3RoaXMucmVxQmFzZVBhdGh9L3Nlc3Npb24vYCkpIHtcbiAgICAgIGNvbW1hbmROYW1lID0gZXh0cmFjdENvbW1hbmROYW1lKFxuICAgICAgICBuZXcgUmVnRXhwKGAke18uZXNjYXBlUmVnRXhwKHRoaXMucmVxQmFzZVBhdGgpfS9zZXNzaW9uL1teL10rKC4rKWApXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWNvbW1hbmROYW1lICYmIF8uaW5jbHVkZXModXJsLCB0aGlzLnJlcUJhc2VQYXRoKSkge1xuICAgICAgY29tbWFuZE5hbWUgPSBleHRyYWN0Q29tbWFuZE5hbWUobmV3IFJlZ0V4cChgJHtfLmVzY2FwZVJlZ0V4cCh0aGlzLnJlcUJhc2VQYXRoKX0oLy4rKWApKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmROYW1lO1xuICB9XG5cbiAgYXN5bmMgcHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGNvbnN0IGNvbW1hbmROYW1lID0gdGhpcy5yZXF1ZXN0VG9Db21tYW5kTmFtZSh1cmwsIG1ldGhvZCk7XG4gICAgaWYgKCFjb21tYW5kTmFtZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJveHkodXJsLCBtZXRob2QsIGJvZHkpO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgTWF0Y2hlZCAnJHt1cmx9JyB0byBjb21tYW5kIG5hbWUgJyR7Y29tbWFuZE5hbWV9J2ApO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvdG9jb2xDb252ZXJ0ZXIuY29udmVydEFuZFByb3h5KGNvbW1hbmROYW1lLCB1cmwsIG1ldGhvZCwgYm9keSk7XG4gIH1cblxuICBhc3luYyBjb21tYW5kKHVybCwgbWV0aG9kLCBib2R5ID0gbnVsbCkge1xuICAgIGxldCByZXNwb25zZTtcbiAgICBsZXQgcmVzQm9keU9iajtcbiAgICB0cnkge1xuICAgICAgW3Jlc3BvbnNlLCByZXNCb2R5T2JqXSA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKHVybCwgbWV0aG9kLCBib2R5KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Qcm94eVJlcXVlc3RFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgZXJyLmdldEFjdHVhbEVycm9yKCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25FcnJvcihlcnIubWVzc2FnZSk7XG4gICAgfVxuICAgIGNvbnN0IHByb3RvY29sID0gdGhpcy5nZXRQcm90b2NvbEZyb21SZXNCb2R5KHJlc0JvZHlPYmopO1xuICAgIGlmIChwcm90b2NvbCA9PT0gTUpTT05XUCkge1xuICAgICAgLy8gR290IHJlc3BvbnNlIGluIE1KU09OV1AgZm9ybWF0XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gMjAwICYmIHJlc0JvZHlPYmouc3RhdHVzID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXNCb2R5T2JqLnZhbHVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhdHVzID0gcGFyc2VJbnQocmVzQm9keU9iai5zdGF0dXMsIDEwKTtcbiAgICAgIGlmICghaXNOYU4oc3RhdHVzKSAmJiBzdGF0dXMgIT09IDApIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSByZXNCb2R5T2JqLnZhbHVlO1xuICAgICAgICBpZiAoXy5oYXMobWVzc2FnZSwgJ21lc3NhZ2UnKSkge1xuICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3JGcm9tTUpTT05XUFN0YXR1c0NvZGUoXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIF8uaXNFbXB0eShtZXNzYWdlKSA/IGdldFN1bW1hcnlCeUNvZGUoc3RhdHVzKSA6IG1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3RvY29sID09PSBXM0MpIHtcbiAgICAgIC8vIEdvdCByZXNwb25zZSBpbiBXM0MgZm9ybWF0XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA8IDMwMCkge1xuICAgICAgICByZXR1cm4gcmVzQm9keU9iai52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3QocmVzQm9keU9iai52YWx1ZSkgJiYgcmVzQm9keU9iai52YWx1ZS5lcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvckZyb21XM0NKc29uQ29kZShcbiAgICAgICAgICByZXNCb2R5T2JqLnZhbHVlLmVycm9yLFxuICAgICAgICAgIHJlc0JvZHlPYmoudmFsdWUubWVzc2FnZSxcbiAgICAgICAgICByZXNCb2R5T2JqLnZhbHVlLnN0YWNrdHJhY2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgLy8gVW5rbm93biBwcm90b2NvbC4gS2VlcGluZyBpdCBiZWNhdXNlIG9mIHRoZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICByZXR1cm4gcmVzQm9keU9iajtcbiAgICB9XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Vbmtub3duRXJyb3IoXG4gICAgICBgRGlkIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCByZXNwb25zZSBjb2RlICcke3Jlc3BvbnNlLnN0YXR1c0NvZGV9JyBgICtcbiAgICAgICAgYGFuZCByZXNwb25zZSBib2R5ICcke18udHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkocmVzQm9keU9iaiksIHtcbiAgICAgICAgICBsZW5ndGg6IDMwMCxcbiAgICAgICAgfSl9J2BcbiAgICApO1xuICB9XG5cbiAgZ2V0U2Vzc2lvbklkRnJvbVVybCh1cmwpIHtcbiAgICBjb25zdCBtYXRjaCA9IHVybC5tYXRjaCgvXFwvc2Vzc2lvblxcLyhbXi9dKykvKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IG51bGw7XG4gIH1cblxuICBhc3luYyBwcm94eVJlcVJlcyhyZXEsIHJlcykge1xuICAgIC8vICEgdGhpcyBtZXRob2QgbXVzdCBub3QgdGhyb3cgYW55IGV4Y2VwdGlvbnNcbiAgICAvLyAhIG1ha2Ugc3VyZSB0byBjYWxsIHJlcy5zZW5kIGJlZm9yZSByZXR1cm5cbiAgICBsZXQgc3RhdHVzQ29kZTtcbiAgICBsZXQgcmVzQm9keU9iajtcbiAgICB0cnkge1xuICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgW3Jlc3BvbnNlLCByZXNCb2R5T2JqXSA9IGF3YWl0IHRoaXMucHJveHlDb21tYW5kKHJlcS5vcmlnaW5hbFVybCwgcmVxLm1ldGhvZCwgcmVxLmJvZHkpO1xuICAgICAgcmVzLmhlYWRlcnMgPSByZXNwb25zZS5oZWFkZXJzO1xuICAgICAgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBbc3RhdHVzQ29kZSwgcmVzQm9keU9ial0gPSBnZXRSZXNwb25zZUZvclczQ0Vycm9yKFxuICAgICAgICBpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Qcm94eVJlcXVlc3RFcnJvcikgPyBlcnIuZ2V0QWN0dWFsRXJyb3IoKSA6IGVyclxuICAgICAgKTtcbiAgICB9XG4gICAgcmVzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnKTtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChyZXNCb2R5T2JqKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgZXJyb3JzLlVua25vd25FcnJvcihcbiAgICAgICAgYFRoZSBkb3duc3RyZWFtIHNlcnZlciByZXNwb25zZSB3aXRoIHRoZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9IGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0OiBgICtcbiAgICAgICAgICBfLnRydW5jYXRlKGAke3Jlc0JvZHlPYmp9YCwge2xlbmd0aDogMzAwfSlcbiAgICAgICk7XG4gICAgICBbc3RhdHVzQ29kZSwgcmVzQm9keU9ial0gPSBnZXRSZXNwb25zZUZvclczQ0Vycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgcHJveGllZCByZXNwb25zZSBjb250YWlucyBhIHNlc3Npb25JZCB0aGF0IHRoZSBkb3duc3RyZWFtXG4gICAgLy8gZHJpdmVyIGhhcyBnZW5lcmF0ZWQsIHdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIHRoYXQgdG8gdGhlIGNsaWVudC5cbiAgICAvLyBJbnN0ZWFkLCByZXR1cm4gdGhlIGlkIGZyb20gdGhlIHJlcXVlc3Qgb3IgZnJvbSBjdXJyZW50IHNlc3Npb25cbiAgICBpZiAoXy5oYXMocmVzQm9keU9iaiwgJ3Nlc3Npb25JZCcpKSB7XG4gICAgICBjb25zdCByZXFTZXNzaW9uSWQgPSB0aGlzLmdldFNlc3Npb25JZEZyb21VcmwocmVxLm9yaWdpbmFsVXJsKTtcbiAgICAgIGlmIChyZXFTZXNzaW9uSWQpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUmVwbGFjaW5nIHNlc3Npb25JZCAke3Jlc0JvZHlPYmouc2Vzc2lvbklkfSB3aXRoICR7cmVxU2Vzc2lvbklkfWApO1xuICAgICAgICByZXNCb2R5T2JqLnNlc3Npb25JZCA9IHJlcVNlc3Npb25JZDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXNzaW9uSWQpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUmVwbGFjaW5nIHNlc3Npb25JZCAke3Jlc0JvZHlPYmouc2Vzc2lvbklkfSB3aXRoICR7dGhpcy5zZXNzaW9uSWR9YCk7XG4gICAgICAgIHJlc0JvZHlPYmouc2Vzc2lvbklkID0gdGhpcy5zZXNzaW9uSWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc0JvZHlPYmoudmFsdWUgPSBmb3JtYXRSZXNwb25zZVZhbHVlKHJlc0JvZHlPYmoudmFsdWUpO1xuICAgIHJlcy5zdGF0dXMoc3RhdHVzQ29kZSkuc2VuZChKU09OLnN0cmluZ2lmeShmb3JtYXRTdGF0dXMocmVzQm9keU9iaikpKTtcbiAgfVxufVxuXG5leHBvcnQge0pXUHJveHl9O1xuZXhwb3J0IGRlZmF1bHQgSldQcm94eTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7RXJyb3IgJiB7cmVzcG9uc2U6IHtkYXRhOiBpbXBvcnQoJ3R5cGUtZmVzdCcpLkpzb25PYmplY3QsIHN0YXR1czogaW1wb3J0KCdodHRwLXN0YXR1cy1jb2RlcycpLlN0YXR1c0NvZGVzfX19IFByb3h5RXJyb3JcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFPQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLFdBQVcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLFVBQWpCLENBQXBCOztBQUNBLE1BQU1DLHVCQUF1QixHQUFHLE1BQWhDO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsQ0FBQyxrQkFBRCxFQUFxQixnQkFBckIsQ0FBL0I7QUFFQSxNQUFNO0VBQUNDLE9BQUQ7RUFBVUM7QUFBVixJQUFpQkMsb0JBQXZCO0FBRUEsTUFBTUMsWUFBWSxHQUFHLENBQ25CLFFBRG1CLEVBRW5CLFFBRm1CLEVBR25CLE1BSG1CLEVBSW5CLE1BSm1CLEVBS25CLGFBTG1CLEVBTW5CLFdBTm1CLEVBT25CLFNBUG1CLEVBUW5CLEtBUm1CLEVBU25CLFdBVG1CLENBQXJCOztBQVlBLE1BQU1DLE9BQU4sQ0FBYztFQUVaQyxNQUFNO0VBRU5DLE1BQU07RUFFTkMsSUFBSTtFQUVKQyxJQUFJO0VBRUpDLFdBQVc7RUFFWEMsU0FBUztFQUVUQyxPQUFPOztFQUVQQyxXQUFXLENBQUNDLElBQUksR0FBRyxFQUFSLEVBQVk7SUFDckJBLElBQUksR0FBR0MsZUFBQSxDQUFFQyxJQUFGLENBQU9GLElBQVAsRUFBYVYsWUFBYixDQUFQOztJQUlBLE1BQU1hLE9BQU8sR0FBR0YsZUFBQSxDQUFFRyxRQUFGLENBQVdILGVBQUEsQ0FBRUksSUFBRixDQUFPTCxJQUFQLEVBQWEsS0FBYixDQUFYLEVBQWdDO01BQzlDUixNQUFNLEVBQUUsTUFEc0M7TUFFOUNDLE1BQU0sRUFBRSxXQUZzQztNQUc5Q0MsSUFBSSxFQUFFLElBSHdDO01BSTlDQyxJQUFJLEVBQUVXLDRCQUp3QztNQUs5Q1YsV0FBVyxFQUFFVSw0QkFMaUM7TUFNOUNULFNBQVMsRUFBRSxJQU5tQztNQU85Q0MsT0FBTyxFQUFFYjtJQVBxQyxDQUFoQyxDQUFoQjs7SUFTQWtCLE9BQU8sQ0FBQ1gsTUFBUixHQUFpQlcsT0FBTyxDQUFDWCxNQUFSLENBQWVlLFdBQWYsRUFBakI7SUFDQUMsTUFBTSxDQUFDQyxNQUFQLENBQWMsSUFBZCxFQUFvQk4sT0FBcEI7SUFFQSxLQUFLTyxlQUFMLEdBQXVCLEVBQXZCO0lBQ0EsS0FBS0MsbUJBQUwsR0FBMkIsSUFBM0I7SUFDQSxNQUFNQyxTQUFTLEdBQUc7TUFDaEJDLFNBQVMsRUFBRWIsSUFBSSxDQUFDYSxTQUFMLElBQWtCLElBRGI7TUFFaEJDLFVBQVUsRUFBRSxFQUZJO01BR2hCQyxjQUFjLEVBQUU7SUFIQSxDQUFsQjtJQUtBLEtBQUtDLFNBQUwsR0FBaUIsSUFBSUMsYUFBQSxDQUFLQyxLQUFULENBQWVOLFNBQWYsQ0FBakI7SUFDQSxLQUFLTyxVQUFMLEdBQWtCLElBQUlDLGNBQUEsQ0FBTUYsS0FBVixDQUFnQk4sU0FBaEIsQ0FBbEI7SUFDQSxLQUFLUyxpQkFBTCxHQUF5QixJQUFJQywwQkFBSixDQUFzQixLQUFLQyxLQUFMLENBQVdDLElBQVgsQ0FBZ0IsSUFBaEIsQ0FBdEIsRUFBNkN4QixJQUFJLENBQUN5QixHQUFsRCxDQUF6QjtJQUNBLEtBQUtDLElBQUwsR0FBWTFCLElBQUksQ0FBQ3lCLEdBQWpCO0VBQ0Q7O0VBRU0sSUFBSEEsR0FBRyxHQUFHO0lBQ1IsT0FBTyxLQUFLQyxJQUFMLElBQWE1QyxXQUFwQjtFQUNEOztFQVdZLE1BQVA2QyxPQUFPLENBQUNDLGFBQUQsRUFBZ0I7SUFDM0IsTUFBTUMsVUFBVSxHQUFHLElBQUFDLGNBQUEsRUFBTUYsYUFBTixDQUFuQjs7SUFDQSxLQUFLbEIsZUFBTCxDQUFxQnFCLElBQXJCLENBQTBCRixVQUExQjs7SUFDQSxJQUFJO01BQ0YsT0FBTyxNQUFNQSxVQUFiO0lBQ0QsQ0FGRCxTQUVVO01BQ1I1QixlQUFBLENBQUUrQixJQUFGLENBQU8sS0FBS3RCLGVBQVosRUFBNkJtQixVQUE3QjtJQUNEO0VBQ0Y7O0VBRURJLHNCQUFzQixHQUFHO0lBQ3ZCLE9BQU8sS0FBS3ZCLGVBQUwsQ0FBcUJ3QixNQUE1QjtFQUNEOztFQUVEQyxvQkFBb0IsR0FBRztJQUNyQixLQUFLekIsZUFBTCxHQUF1QixFQUF2QjtFQUNEOztFQUVEMEIseUJBQXlCLENBQUNDLFFBQUQsRUFBVztJQUNsQyxPQUFPLENBQUNwQyxlQUFBLENBQUVxQyxRQUFGLENBQVcsQ0FBQyxVQUFELEVBQWEsV0FBYixFQUEwQixTQUExQixDQUFYLEVBQWlERCxRQUFqRCxDQUFSO0VBQ0Q7O0VBRXFCLElBQWxCRSxrQkFBa0IsQ0FBQ0MsS0FBRCxFQUFRO0lBQzVCLEtBQUs3QixtQkFBTCxHQUEyQjZCLEtBQTNCO0lBQ0EsS0FBS25CLGlCQUFMLENBQXVCa0Isa0JBQXZCLEdBQTRDQyxLQUE1QztFQUNEOztFQUVxQixJQUFsQkQsa0JBQWtCLEdBQUc7SUFDdkIsT0FBTyxLQUFLNUIsbUJBQVo7RUFDRDs7RUFFRDhCLGNBQWMsQ0FBQ0MsR0FBRCxFQUFNO0lBQ2xCLElBQUlBLEdBQUcsS0FBSyxFQUFaLEVBQWdCO01BQ2RBLEdBQUcsR0FBRyxHQUFOO0lBQ0Q7O0lBQ0QsTUFBTUMsU0FBUyxHQUFJLEdBQUUsS0FBS25ELE1BQU8sTUFBSyxLQUFLQyxNQUFPLElBQUcsS0FBS0MsSUFBSyxHQUFFLEtBQUtDLElBQUssRUFBM0U7SUFDQSxNQUFNaUQsVUFBVSxHQUFHLHFCQUFuQjtJQUNBLElBQUlDLFlBQVksR0FBRyxFQUFuQjs7SUFDQSxJQUFJLFFBQVFDLElBQVIsQ0FBYUosR0FBYixDQUFKLEVBQXVCO01BQ3JCLE1BQU1LLEtBQUssR0FBRyxJQUFJQyxNQUFKLENBQVksZ0JBQWVKLFVBQVcsRUFBdEMsRUFBeUNLLElBQXpDLENBQThDUCxHQUE5QyxDQUFkOztNQUNBLElBQUksQ0FBQ0ssS0FBTCxFQUFZO1FBQ1YsTUFBTSxJQUFJRyxLQUFKLENBQVUsdURBQVYsQ0FBTjtNQUNEOztNQUNETCxZQUFZLEdBQUdILEdBQUcsQ0FBQ1MsT0FBSixDQUFZSixLQUFLLENBQUMsQ0FBRCxDQUFqQixFQUFzQixFQUF0QixDQUFmO0lBQ0QsQ0FORCxNQU1PLElBQUksSUFBSUMsTUFBSixDQUFXLElBQVgsRUFBaUJGLElBQWpCLENBQXNCSixHQUF0QixDQUFKLEVBQWdDO01BQ3JDRyxZQUFZLEdBQUdILEdBQWY7SUFDRCxDQUZNLE1BRUE7TUFDTCxNQUFNLElBQUlRLEtBQUosQ0FBVyxxQ0FBb0NSLEdBQUksR0FBbkQsQ0FBTjtJQUNEOztJQUVELE1BQU1VLGFBQWEsR0FBRyxJQUFJSixNQUFKLENBQVcsNEJBQVgsQ0FBdEI7O0lBQ0EsSUFBSUksYUFBYSxDQUFDTixJQUFkLENBQW1CRCxZQUFuQixDQUFKLEVBQXNDO01BQ3BDQSxZQUFZLEdBQW1DTyxhQUFhLENBQUNILElBQWQsQ0FBbUJKLFlBQW5CLENBQUQsQ0FBbUMsQ0FBbkMsQ0FBOUM7SUFDRDs7SUFFRCxJQUFJLENBQUMsSUFBSUcsTUFBSixDQUFXSixVQUFYLEVBQXVCRSxJQUF2QixDQUE0QkQsWUFBNUIsQ0FBTCxFQUFnRDtNQUM5Q0EsWUFBWSxHQUFJLFlBQVcsS0FBS2hELFNBQVUsR0FBRWdELFlBQWEsRUFBekQ7SUFDRDs7SUFFRCxNQUFNUSxpQkFBaUIsR0FBRyxLQUFLakIseUJBQUwsQ0FBK0JTLFlBQS9CLENBQTFCOztJQUVBLElBQUlRLGlCQUFpQixJQUFJLEtBQUt4RCxTQUFMLEtBQW1CLElBQTVDLEVBQWtEO01BQ2hELE1BQU0sSUFBSXFELEtBQUosQ0FBVSxzREFBVixDQUFOO0lBQ0Q7O0lBRUQsTUFBTUksYUFBYSxHQUFHLElBQUlOLE1BQUosQ0FBVyxtQkFBWCxDQUF0Qjs7SUFDQSxJQUFJTSxhQUFhLENBQUNSLElBQWQsQ0FBbUJELFlBQW5CLENBQUosRUFBc0M7TUFDcEMsSUFBSSxLQUFLaEQsU0FBTCxLQUFtQixJQUF2QixFQUE2QjtRQUMzQixNQUFNLElBQUkwRCxjQUFKLENBQ0gsb0VBQW1FVixZQUFhLHNDQUQ3RSxDQUFOO01BR0Q7O01BR0QsTUFBTVcsS0FBSyxHQUFHRixhQUFhLENBQUNMLElBQWQsQ0FBbUJKLFlBQW5CLENBQWQ7TUFHQUEsWUFBWSxHQUFHQSxZQUFZLENBQUNNLE9BQWIsQ0FDbUJLLEtBQUQsQ0FBUSxDQUFSLENBRGxCLEVBRVUsS0FBSzNELFNBRmYsQ0FBZjtJQUlELENBZkQsTUFlTyxJQUFJd0QsaUJBQUosRUFBdUI7TUFDNUIsTUFBTSxJQUFJSCxLQUFKLENBQVcsNENBQTJDTCxZQUFhLEVBQW5FLENBQU47SUFDRDs7SUFDREEsWUFBWSxHQUFHQSxZQUFZLENBQUNNLE9BQWIsQ0FBcUIsS0FBckIsRUFBNEIsRUFBNUIsQ0FBZjtJQUVBLE9BQU9SLFNBQVMsR0FBR0UsWUFBbkI7RUFDRDs7RUFFVSxNQUFMdEIsS0FBSyxDQUFDbUIsR0FBRCxFQUFNZSxNQUFOLEVBQWNDLElBQUksR0FBRyxJQUFyQixFQUEyQjtJQUNwQ0QsTUFBTSxHQUFHQSxNQUFNLENBQUNFLFdBQVAsRUFBVDtJQUNBLE1BQU1DLE1BQU0sR0FBRyxLQUFLbkIsY0FBTCxDQUFvQkMsR0FBcEIsQ0FBZjs7SUFDQSxNQUFNbUIsWUFBWSxHQUFJQyxPQUFELElBQ25CN0QsZUFBQSxDQUFFOEQsUUFBRixDQUFXOUQsZUFBQSxDQUFFK0QsUUFBRixDQUFXRixPQUFYLElBQXNCQSxPQUF0QixHQUFnQ0csSUFBSSxDQUFDQyxTQUFMLENBQWVKLE9BQWYsQ0FBM0MsRUFBb0U7TUFDbEU1QixNQUFNLEVBQUVpQztJQUQwRCxDQUFwRSxDQURGOztJQUtBLE1BQU1DLE9BQU8sR0FBRztNQUNkMUIsR0FBRyxFQUFFa0IsTUFEUztNQUVkSCxNQUZjO01BR2RZLE9BQU8sRUFBRTtRQUNQLGdCQUFnQixpQ0FEVDtRQUVQLGNBQWMsUUFGUDtRQUdQQyxNQUFNLEVBQUU7TUFIRCxDQUhLO01BUWQvQyxLQUFLLEVBQUUsS0FSTztNQVNkekIsT0FBTyxFQUFFLEtBQUtBLE9BVEE7TUFVZGtCLFNBQVMsRUFBRSxLQUFLQSxTQVZGO01BV2RHLFVBQVUsRUFBRSxLQUFLQTtJQVhILENBQWhCOztJQWNBLElBQUlvRCxhQUFBLENBQUtDLFFBQUwsQ0FBY2QsSUFBZCxLQUF1QkQsTUFBTSxLQUFLLEtBQXRDLEVBQTZDO01BQzNDLElBQUksT0FBT0MsSUFBUCxLQUFnQixRQUFwQixFQUE4QjtRQUM1QixJQUFJO1VBQ0ZVLE9BQU8sQ0FBQ0ssSUFBUixHQUFlUixJQUFJLENBQUNTLEtBQUwsQ0FBV2hCLElBQVgsQ0FBZjtRQUNELENBRkQsQ0FFRSxPQUFPaUIsQ0FBUCxFQUFVO1VBQ1YsTUFBTSxJQUFJekIsS0FBSixDQUFXLG9EQUFtRFcsWUFBWSxDQUFDSCxJQUFELENBQU8sRUFBakYsQ0FBTjtRQUNEO01BQ0YsQ0FORCxNQU1PO1FBQ0xVLE9BQU8sQ0FBQ0ssSUFBUixHQUFlZixJQUFmO01BQ0Q7SUFDRjs7SUFFRCxLQUFLakMsR0FBTCxDQUFTbUQsS0FBVCxDQUNHLGFBQVluQixNQUFPLElBQUdmLEdBQUcsSUFBSSxHQUFJLFNBQVFlLE1BQU8sSUFBR0csTUFBTyxJQUEzRCxJQUNHUSxPQUFPLENBQUNLLElBQVIsR0FBZ0IsY0FBYVosWUFBWSxDQUFDTyxPQUFPLENBQUNLLElBQVQsQ0FBZSxFQUF4RCxHQUE0RCxjQUQvRCxDQURGOztJQUtBLE1BQU1JLGVBQWUsR0FBSUMsS0FBRCxJQUFXO01BQ2pDLE1BQU1DLEdBQUcsR0FBOEIsSUFBSTdCLEtBQUosQ0FBVyxrQkFBaUJSLEdBQUksYUFBaEMsQ0FBdkM7TUFDQXFDLEdBQUcsQ0FBQ0MsUUFBSixHQUFlO1FBQ2JQLElBQUksRUFBRUssS0FETztRQUViRyxNQUFNLEVBQUU7TUFGSyxDQUFmO01BSUEsTUFBTUYsR0FBTjtJQUNELENBUEQ7O0lBUUEsSUFBSUcsZ0JBQWdCLEdBQUcsS0FBdkI7O0lBQ0EsSUFBSTtNQUNGLE1BQU07UUFBQ1QsSUFBRDtRQUFPUSxNQUFQO1FBQWVaO01BQWYsSUFBMEIsTUFBTSxLQUFLMUMsT0FBTCxDQUFheUMsT0FBYixDQUF0Qzs7TUFHQSxJQUFJLENBQUNuRSxlQUFBLENBQUVrRixhQUFGLENBQWdCVixJQUFoQixDQUFMLEVBQTRCO1FBRzFCSSxlQUFlLENBQUNKLElBQUQsQ0FBZjtNQUNEOztNQUNELEtBQUtoRCxHQUFMLENBQVNtRCxLQUFULENBQWdCLDRCQUEyQkssTUFBTyxLQUFJcEIsWUFBWSxDQUFDWSxJQUFELENBQU8sRUFBekU7TUFDQVMsZ0JBQWdCLEdBQUcsSUFBbkI7TUFDQSxNQUFNRSx3QkFBd0IsR0FBRyxhQUFhdEMsSUFBYixDQUFrQkosR0FBbEIsS0FBMEJlLE1BQU0sS0FBSyxNQUF0RTs7TUFDQSxJQUFJMkIsd0JBQUosRUFBOEI7UUFDNUIsSUFBSUgsTUFBTSxLQUFLLEdBQWYsRUFBb0I7VUFDbEIsS0FBS3BGLFNBQUwsR0FBaUI0RSxJQUFJLENBQUM1RSxTQUFMLElBQWtCLENBQUM0RSxJQUFJLENBQUNqQyxLQUFMLElBQWMsRUFBZixFQUFtQjNDLFNBQXREO1FBQ0Q7O1FBQ0QsS0FBSzBDLGtCQUFMLEdBQTBCLEtBQUs4QyxzQkFBTCxDQUE0QlosSUFBNUIsQ0FBMUI7UUFDQSxLQUFLaEQsR0FBTCxDQUFTNkQsSUFBVCxDQUFlLDBDQUF5QyxLQUFLL0Msa0JBQW1CLEdBQWhGO01BQ0Q7O01BQ0QsSUFBSXRDLGVBQUEsQ0FBRXNGLEdBQUYsQ0FBTWQsSUFBTixFQUFZLFFBQVosS0FBeUJlLFFBQVEsQ0FBQ2YsSUFBSSxDQUFDUSxNQUFOLEVBQWMsRUFBZCxDQUFSLEtBQThCLENBQTNELEVBQThEO1FBRTVESixlQUFlLENBQUNKLElBQUQsQ0FBZjtNQUNEOztNQUNELE1BQU1nQixHQUFHLEdBQUc7UUFBQ0MsVUFBVSxFQUFFVCxNQUFiO1FBQXFCWixPQUFyQjtRQUE4QlgsSUFBSSxFQUFFZTtNQUFwQyxDQUFaO01BQ0EsT0FBTyxDQUFDZ0IsR0FBRCxFQUFNaEIsSUFBTixDQUFQO0lBQ0QsQ0F6QkQsQ0F5QkUsT0FBT0UsQ0FBUCxFQUFVO01BQUE7O01BSVYsSUFBSWdCLGFBQWEsR0FBR2hCLENBQUMsQ0FBQ2lCLE9BQXRCOztNQUNBLElBQUlyQixhQUFBLENBQUtDLFFBQUwsQ0FBY0csQ0FBQyxDQUFDSyxRQUFoQixDQUFKLEVBQStCO1FBQzdCLElBQUksQ0FBQ0UsZ0JBQUwsRUFBdUI7VUFDckIsTUFBTUosS0FBSyxHQUFHakIsWUFBWSxDQUFDYyxDQUFDLENBQUNLLFFBQUYsQ0FBV1AsSUFBWixDQUExQjtVQUNBLEtBQUtoRCxHQUFMLENBQVM2RCxJQUFULENBQ0VmLGFBQUEsQ0FBS0MsUUFBTCxDQUFjRyxDQUFDLENBQUNLLFFBQUYsQ0FBV0MsTUFBekIsSUFDSyw0QkFBMkJOLENBQUMsQ0FBQ0ssUUFBRixDQUFXQyxNQUFPLEtBQUlILEtBQU0sRUFENUQsR0FFSyxxQ0FBb0NBLEtBQU0sRUFIakQ7UUFLRDtNQUNGLENBVEQsTUFTTztRQUNMYSxhQUFhLEdBQUksaUVBQWdFaEIsQ0FBQyxDQUFDaUIsT0FBUSxFQUEzRjs7UUFDQSxJQUFJMUcsc0JBQXNCLENBQUMyRyxJQUF2QixDQUE2QkMsQ0FBRCxJQUFPQSxDQUFDLENBQUNoRCxJQUFGLENBQU82QixDQUFDLENBQUNpQixPQUFULENBQW5DLENBQUosRUFBMkQ7VUFDekQsS0FBS25FLEdBQUwsQ0FBUzZELElBQVQsQ0FBY1gsQ0FBQyxDQUFDaUIsT0FBaEI7UUFDRCxDQUZELE1BRU87VUFDTCxLQUFLbkUsR0FBTCxDQUFTNkQsSUFBVCxDQUFjWCxDQUFDLENBQUNvQixLQUFoQjtRQUNEO01BQ0Y7O01BQ0QsTUFBTSxJQUFJQyxjQUFBLENBQU9DLGlCQUFYLENBQTZCTixhQUE3QixpQkFBNENoQixDQUFDLENBQUNLLFFBQTlDLGdEQUE0QyxZQUFZUCxJQUF4RCxrQkFBOERFLENBQUMsQ0FBQ0ssUUFBaEUsaURBQThELGFBQVlDLE1BQTFFLENBQU47SUFDRDtFQUNGOztFQUVESSxzQkFBc0IsQ0FBQ2EsTUFBRCxFQUFTO0lBQzdCLElBQUlqRyxlQUFBLENBQUVrRyxTQUFGLENBQVlELE1BQU0sQ0FBQ2pCLE1BQW5CLENBQUosRUFBZ0M7TUFDOUIsT0FBTzlGLE9BQVA7SUFDRDs7SUFDRCxJQUFJLENBQUNjLGVBQUEsQ0FBRW1HLFdBQUYsQ0FBY0YsTUFBTSxDQUFDMUQsS0FBckIsQ0FBTCxFQUFrQztNQUNoQyxPQUFPcEQsR0FBUDtJQUNEO0VBQ0Y7O0VBUURpSCxvQkFBb0IsQ0FBQzNELEdBQUQsRUFBTWUsTUFBTixFQUFjO0lBTWhDLE1BQU02QyxrQkFBa0IsR0FBSUMsT0FBRCxJQUFhO01BQ3RDLE1BQU1DLFNBQVMsR0FBR0QsT0FBTyxDQUFDdEQsSUFBUixDQUFhUCxHQUFiLENBQWxCOztNQUNBLElBQUk4RCxTQUFKLEVBQWU7UUFDYixPQUFPLElBQUFDLDRCQUFBLEVBQW1CRCxTQUFTLENBQUMsQ0FBRCxDQUE1QixFQUFpQy9DLE1BQWpDLEVBQXlDLEtBQUs3RCxXQUE5QyxDQUFQO01BQ0Q7SUFDRixDQUxEOztJQU1BLElBQUk4RyxXQUFXLEdBQUcsSUFBQUQsNEJBQUEsRUFBbUIvRCxHQUFuQixFQUF3QmUsTUFBeEIsRUFBZ0MsS0FBSzdELFdBQXJDLENBQWxCOztJQUNBLElBQUksQ0FBQzhHLFdBQUQsSUFBZ0J6RyxlQUFBLENBQUVxQyxRQUFGLENBQVdJLEdBQVgsRUFBaUIsR0FBRSxLQUFLOUMsV0FBWSxXQUFwQyxDQUFwQixFQUFxRTtNQUNuRThHLFdBQVcsR0FBR0osa0JBQWtCLENBQzlCLElBQUl0RCxNQUFKLENBQVksR0FBRS9DLGVBQUEsQ0FBRTBHLFlBQUYsQ0FBZSxLQUFLL0csV0FBcEIsQ0FBaUMsb0JBQS9DLENBRDhCLENBQWhDO0lBR0Q7O0lBQ0QsSUFBSSxDQUFDOEcsV0FBRCxJQUFnQnpHLGVBQUEsQ0FBRXFDLFFBQUYsQ0FBV0ksR0FBWCxFQUFnQixLQUFLOUMsV0FBckIsQ0FBcEIsRUFBdUQ7TUFDckQ4RyxXQUFXLEdBQUdKLGtCQUFrQixDQUFDLElBQUl0RCxNQUFKLENBQVksR0FBRS9DLGVBQUEsQ0FBRTBHLFlBQUYsQ0FBZSxLQUFLL0csV0FBcEIsQ0FBaUMsT0FBL0MsQ0FBRCxDQUFoQztJQUNEOztJQUNELE9BQU84RyxXQUFQO0VBQ0Q7O0VBRWlCLE1BQVpFLFlBQVksQ0FBQ2xFLEdBQUQsRUFBTWUsTUFBTixFQUFjQyxJQUFJLEdBQUcsSUFBckIsRUFBMkI7SUFDM0MsTUFBTWdELFdBQVcsR0FBRyxLQUFLTCxvQkFBTCxDQUEwQjNELEdBQTFCLEVBQStCZSxNQUEvQixDQUFwQjs7SUFDQSxJQUFJLENBQUNpRCxXQUFMLEVBQWtCO01BQ2hCLE9BQU8sTUFBTSxLQUFLbkYsS0FBTCxDQUFXbUIsR0FBWCxFQUFnQmUsTUFBaEIsRUFBd0JDLElBQXhCLENBQWI7SUFDRDs7SUFDRCxLQUFLakMsR0FBTCxDQUFTbUQsS0FBVCxDQUFnQixZQUFXbEMsR0FBSSxzQkFBcUJnRSxXQUFZLEdBQWhFO0lBRUEsT0FBTyxNQUFNLEtBQUtyRixpQkFBTCxDQUF1QndGLGVBQXZCLENBQXVDSCxXQUF2QyxFQUFvRGhFLEdBQXBELEVBQXlEZSxNQUF6RCxFQUFpRUMsSUFBakUsQ0FBYjtFQUNEOztFQUVZLE1BQVBvRCxPQUFPLENBQUNwRSxHQUFELEVBQU1lLE1BQU4sRUFBY0MsSUFBSSxHQUFHLElBQXJCLEVBQTJCO0lBQ3RDLElBQUlzQixRQUFKO0lBQ0EsSUFBSStCLFVBQUo7O0lBQ0EsSUFBSTtNQUNGLENBQUMvQixRQUFELEVBQVcrQixVQUFYLElBQXlCLE1BQU0sS0FBS0gsWUFBTCxDQUFrQmxFLEdBQWxCLEVBQXVCZSxNQUF2QixFQUErQkMsSUFBL0IsQ0FBL0I7SUFDRCxDQUZELENBRUUsT0FBT3FCLEdBQVAsRUFBWTtNQUNaLElBQUksSUFBQWlDLG1CQUFBLEVBQVlqQyxHQUFaLEVBQWlCaUIsY0FBQSxDQUFPQyxpQkFBeEIsQ0FBSixFQUFnRDtRQUM5QyxNQUFNbEIsR0FBRyxDQUFDa0MsY0FBSixFQUFOO01BQ0Q7O01BQ0QsTUFBTSxJQUFJakIsY0FBQSxDQUFPa0IsWUFBWCxDQUF3Qm5DLEdBQUcsQ0FBQ2EsT0FBNUIsQ0FBTjtJQUNEOztJQUNELE1BQU11QixRQUFRLEdBQUcsS0FBSzlCLHNCQUFMLENBQTRCMEIsVUFBNUIsQ0FBakI7O0lBQ0EsSUFBSUksUUFBUSxLQUFLaEksT0FBakIsRUFBMEI7TUFFeEIsSUFBSTZGLFFBQVEsQ0FBQ1UsVUFBVCxLQUF3QixHQUF4QixJQUErQnFCLFVBQVUsQ0FBQzlCLE1BQVgsS0FBc0IsQ0FBekQsRUFBNEQ7UUFDMUQsT0FBTzhCLFVBQVUsQ0FBQ3ZFLEtBQWxCO01BQ0Q7O01BQ0QsTUFBTXlDLE1BQU0sR0FBR08sUUFBUSxDQUFDdUIsVUFBVSxDQUFDOUIsTUFBWixFQUFvQixFQUFwQixDQUF2Qjs7TUFDQSxJQUFJLENBQUNtQyxLQUFLLENBQUNuQyxNQUFELENBQU4sSUFBa0JBLE1BQU0sS0FBSyxDQUFqQyxFQUFvQztRQUNsQyxJQUFJVyxPQUFPLEdBQUdtQixVQUFVLENBQUN2RSxLQUF6Qjs7UUFDQSxJQUFJdkMsZUFBQSxDQUFFc0YsR0FBRixDQUFNSyxPQUFOLEVBQWUsU0FBZixDQUFKLEVBQStCO1VBQzdCQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0EsT0FBbEI7UUFDRDs7UUFDRCxNQUFNLElBQUF5QixrQ0FBQSxFQUNKcEMsTUFESSxFQUVKaEYsZUFBQSxDQUFFcUgsT0FBRixDQUFVMUIsT0FBVixJQUFxQixJQUFBMkIsd0JBQUEsRUFBaUJ0QyxNQUFqQixDQUFyQixHQUFnRFcsT0FGNUMsQ0FBTjtNQUlEO0lBQ0YsQ0FoQkQsTUFnQk8sSUFBSXVCLFFBQVEsS0FBSy9ILEdBQWpCLEVBQXNCO01BRTNCLElBQUk0RixRQUFRLENBQUNVLFVBQVQsR0FBc0IsR0FBMUIsRUFBK0I7UUFDN0IsT0FBT3FCLFVBQVUsQ0FBQ3ZFLEtBQWxCO01BQ0Q7O01BQ0QsSUFBSXZDLGVBQUEsQ0FBRWtGLGFBQUYsQ0FBZ0I0QixVQUFVLENBQUN2RSxLQUEzQixLQUFxQ3VFLFVBQVUsQ0FBQ3ZFLEtBQVgsQ0FBaUJzQyxLQUExRCxFQUFpRTtRQUMvRCxNQUFNLElBQUEwQyw0QkFBQSxFQUNKVCxVQUFVLENBQUN2RSxLQUFYLENBQWlCc0MsS0FEYixFQUVKaUMsVUFBVSxDQUFDdkUsS0FBWCxDQUFpQm9ELE9BRmIsRUFHSm1CLFVBQVUsQ0FBQ3ZFLEtBQVgsQ0FBaUJpRixVQUhiLENBQU47TUFLRDtJQUNGLENBWk0sTUFZQSxJQUFJekMsUUFBUSxDQUFDVSxVQUFULEtBQXdCLEdBQTVCLEVBQWlDO01BRXRDLE9BQU9xQixVQUFQO0lBQ0Q7O0lBQ0QsTUFBTSxJQUFJZixjQUFBLENBQU9rQixZQUFYLENBQ0gsK0NBQThDbEMsUUFBUSxDQUFDVSxVQUFXLElBQW5FLEdBQ0csc0JBQXFCekYsZUFBQSxDQUFFOEQsUUFBRixDQUFXRSxJQUFJLENBQUNDLFNBQUwsQ0FBZTZDLFVBQWYsQ0FBWCxFQUF1QztNQUMzRDdFLE1BQU0sRUFBRTtJQURtRCxDQUF2QyxDQUVuQixHQUpELENBQU47RUFNRDs7RUFFRHdGLG1CQUFtQixDQUFDaEYsR0FBRCxFQUFNO0lBQ3ZCLE1BQU1jLEtBQUssR0FBR2QsR0FBRyxDQUFDYyxLQUFKLENBQVUsb0JBQVYsQ0FBZDtJQUNBLE9BQU9BLEtBQUssR0FBR0EsS0FBSyxDQUFDLENBQUQsQ0FBUixHQUFjLElBQTFCO0VBQ0Q7O0VBRWdCLE1BQVhtRSxXQUFXLENBQUNDLEdBQUQsRUFBTW5DLEdBQU4sRUFBVztJQUcxQixJQUFJQyxVQUFKO0lBQ0EsSUFBSXFCLFVBQUo7O0lBQ0EsSUFBSTtNQUNGLElBQUkvQixRQUFKO01BQ0EsQ0FBQ0EsUUFBRCxFQUFXK0IsVUFBWCxJQUF5QixNQUFNLEtBQUtILFlBQUwsQ0FBa0JnQixHQUFHLENBQUNDLFdBQXRCLEVBQW1DRCxHQUFHLENBQUNuRSxNQUF2QyxFQUErQ21FLEdBQUcsQ0FBQ2xFLElBQW5ELENBQS9CO01BQ0ErQixHQUFHLENBQUNwQixPQUFKLEdBQWNXLFFBQVEsQ0FBQ1gsT0FBdkI7TUFDQXFCLFVBQVUsR0FBR1YsUUFBUSxDQUFDVSxVQUF0QjtJQUNELENBTEQsQ0FLRSxPQUFPWCxHQUFQLEVBQVk7TUFDWixDQUFDVyxVQUFELEVBQWFxQixVQUFiLElBQTJCLElBQUFlLDhCQUFBLEVBQ3pCLElBQUFkLG1CQUFBLEVBQVlqQyxHQUFaLEVBQWlCaUIsY0FBQSxDQUFPQyxpQkFBeEIsSUFBNkNsQixHQUFHLENBQUNrQyxjQUFKLEVBQTdDLEdBQW9FbEMsR0FEM0MsQ0FBM0I7SUFHRDs7SUFDRFUsR0FBRyxDQUFDc0MsR0FBSixDQUFRLGNBQVIsRUFBd0IsaUNBQXhCOztJQUNBLElBQUksQ0FBQzlILGVBQUEsQ0FBRWtGLGFBQUYsQ0FBZ0I0QixVQUFoQixDQUFMLEVBQWtDO01BQ2hDLE1BQU1qQyxLQUFLLEdBQUcsSUFBSWtCLGNBQUEsQ0FBT2tCLFlBQVgsQ0FDWCx1REFBc0R4QixVQUFXLCtCQUFsRSxHQUNFekYsZUFBQSxDQUFFOEQsUUFBRixDQUFZLEdBQUVnRCxVQUFXLEVBQXpCLEVBQTRCO1FBQUM3RSxNQUFNLEVBQUU7TUFBVCxDQUE1QixDQUZVLENBQWQ7TUFJQSxDQUFDd0QsVUFBRCxFQUFhcUIsVUFBYixJQUEyQixJQUFBZSw4QkFBQSxFQUF1QmhELEtBQXZCLENBQTNCO0lBQ0Q7O0lBS0QsSUFBSTdFLGVBQUEsQ0FBRXNGLEdBQUYsQ0FBTXdCLFVBQU4sRUFBa0IsV0FBbEIsQ0FBSixFQUFvQztNQUNsQyxNQUFNaUIsWUFBWSxHQUFHLEtBQUtOLG1CQUFMLENBQXlCRSxHQUFHLENBQUNDLFdBQTdCLENBQXJCOztNQUNBLElBQUlHLFlBQUosRUFBa0I7UUFDaEIsS0FBS3ZHLEdBQUwsQ0FBUzZELElBQVQsQ0FBZSx1QkFBc0J5QixVQUFVLENBQUNsSCxTQUFVLFNBQVFtSSxZQUFhLEVBQS9FO1FBQ0FqQixVQUFVLENBQUNsSCxTQUFYLEdBQXVCbUksWUFBdkI7TUFDRCxDQUhELE1BR08sSUFBSSxLQUFLbkksU0FBVCxFQUFvQjtRQUN6QixLQUFLNEIsR0FBTCxDQUFTNkQsSUFBVCxDQUFlLHVCQUFzQnlCLFVBQVUsQ0FBQ2xILFNBQVUsU0FBUSxLQUFLQSxTQUFVLEVBQWpGO1FBQ0FrSCxVQUFVLENBQUNsSCxTQUFYLEdBQXVCLEtBQUtBLFNBQTVCO01BQ0Q7SUFDRjs7SUFDRGtILFVBQVUsQ0FBQ3ZFLEtBQVgsR0FBbUIsSUFBQXlGLDRCQUFBLEVBQW9CbEIsVUFBVSxDQUFDdkUsS0FBL0IsQ0FBbkI7SUFDQWlELEdBQUcsQ0FBQ1IsTUFBSixDQUFXUyxVQUFYLEVBQXVCd0MsSUFBdkIsQ0FBNEJqRSxJQUFJLENBQUNDLFNBQUwsQ0FBZSxJQUFBaUUscUJBQUEsRUFBYXBCLFVBQWIsQ0FBZixDQUE1QjtFQUNEOztBQXhZVzs7O2VBNFlDeEgsTyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","names":["DEFAULT_LOG","logger","getLogger","DEFAULT_REQUEST_TIMEOUT","COMPACT_ERROR_PATTERNS","MJSONWP","W3C","PROTOCOLS","ALLOWED_OPTS","JWProxy","scheme","server","port","base","reqBasePath","sessionId","timeout","constructor","opts","_","pick","options","defaults","omit","DEFAULT_BASE_PATH","toLowerCase","Object","assign","_activeRequests","_downstreamProtocol","agentOpts","keepAlive","maxSockets","maxFreeSockets","httpAgent","http","Agent","httpsAgent","https","protocolConverter","ProtocolConverter","proxy","bind","log","_log","request","requestConfig","reqPromise","axios","push","pull","getActiveRequestsCount","length","cancelActiveRequests","endpointRequiresSessionId","endpoint","includes","downstreamProtocol","value","getUrlForProxy","url","proxyBase","endpointRe","remainingUrl","test","first","RegExp","exec","Error","replace","stripPrefixRe","requiresSessionId","sessionBaseRe","ReferenceError","match","method","body","toUpperCase","newUrl","truncateBody","content","truncate","isString","JSON","stringify","MAX_LOG_BODY_LENGTH","reqOpts","headers","accept","util","hasValue","data","parse","e","debug","throwProxyError","error","err","response","status","isResponseLogged","isPlainObject","isSessionCreationRequest","getProtocolFromResBody","info","has","parseInt","res","statusCode","proxyErrorMsg","message","some","p","stack","errors","ProxyRequestError","resObj","isInteger","isUndefined","requestToCommandName","extractCommandName","pattern","pathMatch","routeToCommandName","commandName","escapeRegExp","proxyCommand","convertAndProxy","command","resBodyObj","isErrorType","getActualError","UnknownError","protocol","isNaN","errorFromMJSONWPStatusCode","isEmpty","getSummaryByCode","errorFromW3CJsonCode","stacktrace","getSessionIdFromUrl","proxyReqRes","req","originalUrl","getResponseForW3CError","set","reqSessionId","formatResponseValue","send","formatStatus"],"sources":["../../../lib/jsonwp-proxy/proxy.js"],"sourcesContent":["import _ from 'lodash';\nimport {logger, util} from '@appium/support';\nimport axios from 'axios';\nimport {getSummaryByCode} from '../jsonwp-status/status';\nimport {\n errors,\n isErrorType,\n errorFromMJSONWPStatusCode,\n errorFromW3CJsonCode,\n getResponseForW3CError,\n} from '../protocol/errors';\nimport {routeToCommandName} from '../protocol';\nimport {MAX_LOG_BODY_LENGTH, DEFAULT_BASE_PATH, PROTOCOLS} from '../constants';\nimport ProtocolConverter from './protocol-converter';\nimport {formatResponseValue, formatStatus} from '../protocol/helpers';\nimport http from 'http';\nimport https from 'https';\n\nconst DEFAULT_LOG = logger.getLogger('WD Proxy');\nconst DEFAULT_REQUEST_TIMEOUT = 240000;\nconst COMPACT_ERROR_PATTERNS = [/\\bECONNREFUSED\\b/, /socket hang up/];\n\nconst {MJSONWP, W3C} = PROTOCOLS;\n\nconst ALLOWED_OPTS = [\n 'scheme',\n 'server',\n 'port',\n 'base',\n 'reqBasePath',\n 'sessionId',\n 'timeout',\n 'log',\n 'keepAlive',\n];\n\nclass JWProxy {\n /** @type {string} */\n scheme;\n /** @type {string} */\n server;\n /** @type {number} */\n port;\n /** @type {string} */\n base;\n /** @type {string} */\n reqBasePath;\n /** @type {string?} */\n sessionId;\n /** @type {number} */\n timeout;\n\n constructor(opts = {}) {\n opts = _.pick(opts, ALLOWED_OPTS);\n\n // omit 'log' in the defaults assignment here because 'log' is a getter and we are going to set\n // it to this._log (which lies behind the getter) further down\n const options = _.defaults(_.omit(opts, 'log'), {\n scheme: 'http',\n server: 'localhost',\n port: 4444,\n base: DEFAULT_BASE_PATH,\n reqBasePath: DEFAULT_BASE_PATH,\n sessionId: null,\n timeout: DEFAULT_REQUEST_TIMEOUT,\n });\n options.scheme = options.scheme.toLowerCase();\n Object.assign(this, options);\n\n this._activeRequests = [];\n this._downstreamProtocol = null;\n const agentOpts = {\n keepAlive: opts.keepAlive ?? true,\n maxSockets: 10,\n maxFreeSockets: 5,\n };\n this.httpAgent = new http.Agent(agentOpts);\n this.httpsAgent = new https.Agent(agentOpts);\n this.protocolConverter = new ProtocolConverter(this.proxy.bind(this), opts.log);\n this._log = opts.log;\n }\n\n get log() {\n return this._log ?? DEFAULT_LOG;\n }\n\n /**\n * Performs requests to the downstream server\n *\n * @private - Do not call this method directly,\n * it uses client-specific arguments and responses!\n *\n * @param {import('axios').AxiosRequestConfig} requestConfig\n * @returns {Promise<import('axios').AxiosResponse>}\n */\n async request(requestConfig) {\n const reqPromise = axios(requestConfig);\n this._activeRequests.push(reqPromise);\n try {\n return await reqPromise;\n } finally {\n _.pull(this._activeRequests, reqPromise);\n }\n }\n\n getActiveRequestsCount() {\n return this._activeRequests.length;\n }\n\n cancelActiveRequests() {\n this._activeRequests = [];\n }\n\n endpointRequiresSessionId(endpoint) {\n return !_.includes(['/session', '/sessions', '/status'], endpoint);\n }\n\n set downstreamProtocol(value) {\n this._downstreamProtocol = value;\n this.protocolConverter.downstreamProtocol = value;\n }\n\n get downstreamProtocol() {\n return this._downstreamProtocol;\n }\n\n getUrlForProxy(url) {\n if (url === '') {\n url = '/';\n }\n const proxyBase = `${this.scheme}://${this.server}:${this.port}${this.base}`;\n const endpointRe = '(/(session|status))';\n let remainingUrl = '';\n if (/^http/.test(url)) {\n const first = new RegExp(`(https?://.+)${endpointRe}`).exec(url);\n if (!first) {\n throw new Error('Got a complete url but could not extract JWP endpoint');\n }\n remainingUrl = url.replace(first[1], '');\n } else if (new RegExp('^/').test(url)) {\n remainingUrl = url;\n } else {\n throw new Error(`Did not know what to do with url '${url}'`);\n }\n\n const stripPrefixRe = new RegExp('^.*?(/(session|status).*)$');\n if (stripPrefixRe.test(remainingUrl)) {\n remainingUrl = /** @type {RegExpExecArray} */ (stripPrefixRe.exec(remainingUrl))[1];\n }\n\n if (!new RegExp(endpointRe).test(remainingUrl)) {\n remainingUrl = `/session/${this.sessionId}${remainingUrl}`;\n }\n\n const requiresSessionId = this.endpointRequiresSessionId(remainingUrl);\n\n if (requiresSessionId && this.sessionId === null) {\n throw new Error('Trying to proxy a session command without session id');\n }\n\n const sessionBaseRe = new RegExp('^/session/([^/]+)');\n if (sessionBaseRe.test(remainingUrl)) {\n if (this.sessionId === null) {\n throw new ReferenceError(\n `Session ID is not set, but saw a URL path referencing a session (${remainingUrl}). This may be a bug in your client.`\n );\n }\n // we have something like /session/:id/foobar, so we need to replace\n // the session id\n const match = sessionBaseRe.exec(remainingUrl);\n // TODO: if `requiresSessionId` is `false` and `sessionId` is `null`, this is a bug.\n // are we sure `sessionId` is not `null`?\n remainingUrl = remainingUrl.replace(\n /** @type {RegExpExecArray} */ (match)[1],\n /** @type {string} */ (this.sessionId)\n );\n } else if (requiresSessionId) {\n throw new Error(`Could not find :session section for url: ${remainingUrl}`);\n }\n remainingUrl = remainingUrl.replace(/\\/$/, ''); // can't have trailing slashes\n\n return proxyBase + remainingUrl;\n }\n\n async proxy(url, method, body = null) {\n method = method.toUpperCase();\n const newUrl = this.getUrlForProxy(url);\n const truncateBody = (content) =>\n _.truncate(_.isString(content) ? content : JSON.stringify(content), {\n length: MAX_LOG_BODY_LENGTH,\n });\n /** @type {import('axios').AxiosRequestConfig} */\n const reqOpts = {\n url: newUrl,\n method,\n headers: {\n 'content-type': 'application/json; charset=utf-8',\n 'user-agent': 'appium',\n accept: 'application/json, */*',\n },\n proxy: false,\n timeout: this.timeout,\n httpAgent: this.httpAgent,\n httpsAgent: this.httpsAgent,\n };\n // GET methods shouldn't have any body. Most servers are OK with this, but WebDriverAgent throws 400 errors\n if (util.hasValue(body) && method !== 'GET') {\n if (typeof body !== 'object') {\n try {\n reqOpts.data = JSON.parse(body);\n } catch (e) {\n throw new Error(`Cannot interpret the request body as valid JSON: ${truncateBody(body)}`);\n }\n } else {\n reqOpts.data = body;\n }\n }\n\n this.log.debug(\n `Proxying [${method} ${url || '/'}] to [${method} ${newUrl}] ` +\n (reqOpts.data ? `with body: ${truncateBody(reqOpts.data)}` : 'with no body')\n );\n\n const throwProxyError = (error) => {\n const err = /** @type {ProxyError} */ (new Error(`The request to ${url} has failed`));\n err.response = {\n data: error,\n status: 500,\n };\n throw err;\n };\n let isResponseLogged = false;\n try {\n const {data, status, headers} = await this.request(reqOpts);\n // `data` might be really big\n // Be careful while handling it to avoid memory leaks\n if (!_.isPlainObject(data)) {\n // The response should be a valid JSON object\n // If it cannot be coerced to an object then the response is wrong\n throwProxyError(data);\n }\n this.log.debug(`Got response with status ${status}: ${truncateBody(data)}`);\n isResponseLogged = true;\n const isSessionCreationRequest = /\\/session$/.test(url) && method === 'POST';\n if (isSessionCreationRequest) {\n if (status === 200) {\n this.sessionId = data.sessionId || (data.value || {}).sessionId;\n }\n this.downstreamProtocol = this.getProtocolFromResBody(data);\n this.log.info(`Determined the downstream protocol as '${this.downstreamProtocol}'`);\n }\n if (_.has(data, 'status') && parseInt(data.status, 10) !== 0) {\n // Some servers, like chromedriver may return response code 200 for non-zero JSONWP statuses\n throwProxyError(data);\n }\n const res = {statusCode: status, headers, body: data};\n return [res, data];\n } catch (e) {\n // We only consider an error unexpected if this was not\n // an async request module error or if the response cannot be cast to\n // a valid JSON\n let proxyErrorMsg = e.message;\n if (util.hasValue(e.response)) {\n if (!isResponseLogged) {\n const error = truncateBody(e.response.data);\n this.log.info(\n util.hasValue(e.response.status)\n ? `Got response with status ${e.response.status}: ${error}`\n : `Got response with unknown status: ${error}`\n );\n }\n } else {\n proxyErrorMsg = `Could not proxy command to the remote server. Original error: ${e.message}`;\n if (COMPACT_ERROR_PATTERNS.some((p) => p.test(e.message))) {\n this.log.info(e.message);\n } else {\n this.log.info(e.stack);\n }\n }\n throw new errors.ProxyRequestError(proxyErrorMsg, e.response?.data, e.response?.status);\n }\n }\n\n getProtocolFromResBody(resObj) {\n if (_.isInteger(resObj.status)) {\n return MJSONWP;\n }\n if (!_.isUndefined(resObj.value)) {\n return W3C;\n }\n }\n\n /**\n *\n * @param {string} url\n * @param {import('@appium/types').HTTPMethod} method\n * @returns {string|undefined}\n */\n requestToCommandName(url, method) {\n /**\n *\n * @param {RegExp} pattern\n * @returns {string|undefined}\n */\n const extractCommandName = (pattern) => {\n const pathMatch = pattern.exec(url);\n if (pathMatch) {\n return routeToCommandName(pathMatch[1], method, this.reqBasePath);\n }\n };\n let commandName = routeToCommandName(url, method, this.reqBasePath);\n if (!commandName && _.includes(url, `${this.reqBasePath}/session/`)) {\n commandName = extractCommandName(\n new RegExp(`${_.escapeRegExp(this.reqBasePath)}/session/[^/]+(.+)`)\n );\n }\n if (!commandName && _.includes(url, this.reqBasePath)) {\n commandName = extractCommandName(new RegExp(`${_.escapeRegExp(this.reqBasePath)}(/.+)`));\n }\n return commandName;\n }\n\n async proxyCommand(url, method, body = null) {\n const commandName = this.requestToCommandName(url, method);\n if (!commandName) {\n return await this.proxy(url, method, body);\n }\n this.log.debug(`Matched '${url}' to command name '${commandName}'`);\n\n return await this.protocolConverter.convertAndProxy(commandName, url, method, body);\n }\n\n async command(url, method, body = null) {\n let response;\n let resBodyObj;\n try {\n [response, resBodyObj] = await this.proxyCommand(url, method, body);\n } catch (err) {\n if (isErrorType(err, errors.ProxyRequestError)) {\n throw err.getActualError();\n }\n throw new errors.UnknownError(err.message);\n }\n const protocol = this.getProtocolFromResBody(resBodyObj);\n if (protocol === MJSONWP) {\n // Got response in MJSONWP format\n if (response.statusCode === 200 && resBodyObj.status === 0) {\n return resBodyObj.value;\n }\n const status = parseInt(resBodyObj.status, 10);\n if (!isNaN(status) && status !== 0) {\n let message = resBodyObj.value;\n if (_.has(message, 'message')) {\n message = message.message;\n }\n throw errorFromMJSONWPStatusCode(\n status,\n _.isEmpty(message) ? getSummaryByCode(status) : message\n );\n }\n } else if (protocol === W3C) {\n // Got response in W3C format\n if (response.statusCode < 300) {\n return resBodyObj.value;\n }\n if (_.isPlainObject(resBodyObj.value) && resBodyObj.value.error) {\n throw errorFromW3CJsonCode(\n resBodyObj.value.error,\n resBodyObj.value.message,\n resBodyObj.value.stacktrace\n );\n }\n } else if (response.statusCode === 200) {\n // Unknown protocol. Keeping it because of the backward compatibility\n return resBodyObj;\n }\n throw new errors.UnknownError(\n `Did not know what to do with response code '${response.statusCode}' ` +\n `and response body '${_.truncate(JSON.stringify(resBodyObj), {\n length: 300,\n })}'`\n );\n }\n\n getSessionIdFromUrl(url) {\n const match = url.match(/\\/session\\/([^/]+)/);\n return match ? match[1] : null;\n }\n\n async proxyReqRes(req, res) {\n // ! this method must not throw any exceptions\n // ! make sure to call res.send before return\n let statusCode;\n let resBodyObj;\n try {\n let response;\n [response, resBodyObj] = await this.proxyCommand(req.originalUrl, req.method, req.body);\n res.headers = response.headers;\n statusCode = response.statusCode;\n } catch (err) {\n [statusCode, resBodyObj] = getResponseForW3CError(\n isErrorType(err, errors.ProxyRequestError) ? err.getActualError() : err\n );\n }\n res.set('content-type', 'application/json; charset=utf-8');\n if (!_.isPlainObject(resBodyObj)) {\n const error = new errors.UnknownError(\n `The downstream server response with the status code ${statusCode} is not a valid JSON object: ` +\n _.truncate(`${resBodyObj}`, {length: 300})\n );\n [statusCode, resBodyObj] = getResponseForW3CError(error);\n }\n\n // if the proxied response contains a sessionId that the downstream\n // driver has generated, we don't want to return that to the client.\n // Instead, return the id from the request or from current session\n if (_.has(resBodyObj, 'sessionId')) {\n const reqSessionId = this.getSessionIdFromUrl(req.originalUrl);\n if (reqSessionId) {\n this.log.info(`Replacing sessionId ${resBodyObj.sessionId} with ${reqSessionId}`);\n resBodyObj.sessionId = reqSessionId;\n } else if (this.sessionId) {\n this.log.info(`Replacing sessionId ${resBodyObj.sessionId} with ${this.sessionId}`);\n resBodyObj.sessionId = this.sessionId;\n }\n }\n resBodyObj.value = formatResponseValue(resBodyObj.value);\n res.status(statusCode).send(JSON.stringify(formatStatus(resBodyObj)));\n }\n}\n\nexport {JWProxy};\nexport default JWProxy;\n\n/**\n * @typedef {Error & {response: {data: import('type-fest').JsonObject, status: import('http-status-codes').StatusCodes}}} ProxyError\n */\n"],"mappings":"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"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -12,6 +10,8 @@ require("source-map-support/register");
12
10
 
13
11
  var _lodash = _interopRequireDefault(require("lodash"));
14
12
 
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+
15
15
  const codes = {
16
16
  Success: {
17
17
  code: 0,
@@ -134,4 +134,4 @@ function getSummaryByCode(code) {
134
134
 
135
135
  var _default = codes;
136
136
  exports.default = _default;
137
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2RlcyIsIlN1Y2Nlc3MiLCJjb2RlIiwic3VtbWFyeSIsIk5vU3VjaERyaXZlciIsIk5vU3VjaEVsZW1lbnQiLCJOb1N1Y2hGcmFtZSIsIlVua25vd25Db21tYW5kIiwiU3RhbGVFbGVtZW50UmVmZXJlbmNlIiwiRWxlbWVudE5vdFZpc2libGUiLCJJbnZhbGlkRWxlbWVudFN0YXRlIiwiVW5rbm93bkVycm9yIiwiRWxlbWVudElzTm90U2VsZWN0YWJsZSIsIkphdmFTY3JpcHRFcnJvciIsIlhQYXRoTG9va3VwRXJyb3IiLCJUaW1lb3V0IiwiTm9TdWNoV2luZG93IiwiSW52YWxpZENvb2tpZURvbWFpbiIsIlVuYWJsZVRvU2V0Q29va2llIiwiVW5leHBlY3RlZEFsZXJ0T3BlbiIsIk5vQWxlcnRPcGVuRXJyb3IiLCJTY3JpcHRUaW1lb3V0IiwiSW52YWxpZEVsZW1lbnRDb29yZGluYXRlcyIsIklNRU5vdEF2YWlsYWJsZSIsIklNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWQiLCJJbnZhbGlkU2VsZWN0b3IiLCJTZXNzaW9uTm90Q3JlYXRlZEV4Y2VwdGlvbiIsIk1vdmVUYXJnZXRPdXRPZkJvdW5kcyIsIk5vU3VjaENvbnRleHQiLCJnZXRTdW1tYXJ5QnlDb2RlIiwicGFyc2VJbnQiLCJvYmoiLCJfIiwidmFsdWVzIiwiaXNVbmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvanNvbndwLXN0YXR1cy9zdGF0dXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgY29kZXMgPSB7XG4gIFN1Y2Nlc3M6IHtcbiAgICBjb2RlOiAwLFxuICAgIHN1bW1hcnk6ICdUaGUgY29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuJyxcbiAgfSxcbiAgTm9TdWNoRHJpdmVyOiB7XG4gICAgY29kZTogNixcbiAgICBzdW1tYXJ5OiAnQSBzZXNzaW9uIGlzIGVpdGhlciB0ZXJtaW5hdGVkIG9yIG5vdCBzdGFydGVkJyxcbiAgfSxcbiAgTm9TdWNoRWxlbWVudDoge1xuICAgIGNvZGU6IDcsXG4gICAgc3VtbWFyeTogJ0FuIGVsZW1lbnQgY291bGQgbm90IGJlIGxvY2F0ZWQgb24gdGhlIHBhZ2UgdXNpbmcgdGhlIGdpdmVuIHNlYXJjaCBwYXJhbWV0ZXJzLicsXG4gIH0sXG4gIE5vU3VjaEZyYW1lOiB7XG4gICAgY29kZTogOCxcbiAgICBzdW1tYXJ5OlxuICAgICAgJ0EgcmVxdWVzdCB0byBzd2l0Y2ggdG8gYSBmcmFtZSBjb3VsZCBub3QgYmUgc2F0aXNmaWVkIGJlY2F1c2UgdGhlIGZyYW1lIGNvdWxkIG5vdCBiZSBmb3VuZC4nLFxuICB9LFxuICBVbmtub3duQ29tbWFuZDoge1xuICAgIGNvZGU6IDksXG4gICAgc3VtbWFyeTpcbiAgICAgICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCwgb3IgYSByZXF1ZXN0IHdhcyByZWNlaXZlZCB1c2luZyBhbiBIVFRQIG1ldGhvZCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcHBlZCByZXNvdXJjZS4nLFxuICB9LFxuICBTdGFsZUVsZW1lbnRSZWZlcmVuY2U6IHtcbiAgICBjb2RlOiAxMCxcbiAgICBzdW1tYXJ5OlxuICAgICAgJ0FuIGVsZW1lbnQgY29tbWFuZCBmYWlsZWQgYmVjYXVzZSB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGlzIG5vIGxvbmdlciBhdHRhY2hlZCB0byB0aGUgRE9NLicsXG4gIH0sXG4gIEVsZW1lbnROb3RWaXNpYmxlOiB7XG4gICAgY29kZTogMTEsXG4gICAgc3VtbWFyeTpcbiAgICAgICdBbiBlbGVtZW50IGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIG5vdCB2aXNpYmxlIG9uIHRoZSBwYWdlLicsXG4gIH0sXG4gIEludmFsaWRFbGVtZW50U3RhdGU6IHtcbiAgICBjb2RlOiAxMixcbiAgICBzdW1tYXJ5OlxuICAgICAgJ0FuIGVsZW1lbnQgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZSAoZS5nLiBhdHRlbXB0aW5nIHRvIGNsaWNrIGEgZGlzYWJsZWQgZWxlbWVudCkuJyxcbiAgfSxcbiAgVW5rbm93bkVycm9yOiB7XG4gICAgY29kZTogMTMsXG4gICAgc3VtbWFyeTogJ0FuIHVua25vd24gc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4nLFxuICB9LFxuICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlOiB7XG4gICAgY29kZTogMTUsXG4gICAgc3VtbWFyeTogJ0FuIGF0dGVtcHQgd2FzIG1hZGUgdG8gc2VsZWN0IGFuIGVsZW1lbnQgdGhhdCBjYW5ub3QgYmUgc2VsZWN0ZWQuJyxcbiAgfSxcbiAgSmF2YVNjcmlwdEVycm9yOiB7XG4gICAgY29kZTogMTcsXG4gICAgc3VtbWFyeTogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB1c2VyIHN1cHBsaWVkIEphdmFTY3JpcHQuJyxcbiAgfSxcbiAgWFBhdGhMb29rdXBFcnJvcjoge1xuICAgIGNvZGU6IDE5LFxuICAgIHN1bW1hcnk6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZWFyY2hpbmcgZm9yIGFuIGVsZW1lbnQgYnkgWFBhdGguJyxcbiAgfSxcbiAgVGltZW91dDoge1xuICAgIGNvZGU6IDIxLFxuICAgIHN1bW1hcnk6ICdBbiBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZSBiZWZvcmUgaXRzIHRpbWVvdXQgZXhwaXJlZC4nLFxuICB9LFxuICBOb1N1Y2hXaW5kb3c6IHtcbiAgICBjb2RlOiAyMyxcbiAgICBzdW1tYXJ5OlxuICAgICAgJ0EgcmVxdWVzdCB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgd2luZG93IGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQgYmVjYXVzZSB0aGUgd2luZG93IGNvdWxkIG5vdCBiZSBmb3VuZC4nLFxuICB9LFxuICBJbnZhbGlkQ29va2llRG9tYWluOiB7XG4gICAgY29kZTogMjQsXG4gICAgc3VtbWFyeTpcbiAgICAgICdBbiBpbGxlZ2FsIGF0dGVtcHQgd2FzIG1hZGUgdG8gc2V0IGEgY29va2llIHVuZGVyIGEgZGlmZmVyZW50IGRvbWFpbiB0aGFuIHRoZSBjdXJyZW50IHBhZ2UuJyxcbiAgfSxcbiAgVW5hYmxlVG9TZXRDb29raWU6IHtcbiAgICBjb2RlOiAyNSxcbiAgICBzdW1tYXJ5OiBcIkEgcmVxdWVzdCB0byBzZXQgYSBjb29raWUncyB2YWx1ZSBjb3VsZCBub3QgYmUgc2F0aXNmaWVkLlwiLFxuICB9LFxuICBVbmV4cGVjdGVkQWxlcnRPcGVuOiB7XG4gICAgY29kZTogMjYsXG4gICAgc3VtbWFyeTogJ0EgbW9kYWwgZGlhbG9nIHdhcyBvcGVuLCBibG9ja2luZyB0aGlzIG9wZXJhdGlvbicsXG4gIH0sXG4gIE5vQWxlcnRPcGVuRXJyb3I6IHtcbiAgICBjb2RlOiAyNyxcbiAgICBzdW1tYXJ5OiAnQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBvcGVyYXRlIG9uIGEgbW9kYWwgZGlhbG9nIHdoZW4gb25lIHdhcyBub3Qgb3Blbi4nLFxuICB9LFxuICBTY3JpcHRUaW1lb3V0OiB7XG4gICAgY29kZTogMjgsXG4gICAgc3VtbWFyeTogJ0Egc2NyaXB0IGRpZCBub3QgY29tcGxldGUgYmVmb3JlIGl0cyB0aW1lb3V0IGV4cGlyZWQuJyxcbiAgfSxcbiAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlczoge1xuICAgIGNvZGU6IDI5LFxuICAgIHN1bW1hcnk6ICdUaGUgY29vcmRpbmF0ZXMgcHJvdmlkZWQgdG8gYW4gaW50ZXJhY3Rpb25zIG9wZXJhdGlvbiBhcmUgaW52YWxpZC4nLFxuICB9LFxuICBJTUVOb3RBdmFpbGFibGU6IHtcbiAgICBjb2RlOiAzMCxcbiAgICBzdW1tYXJ5OiAnSU1FIHdhcyBub3QgYXZhaWxhYmxlLicsXG4gIH0sXG4gIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWQ6IHtcbiAgICBjb2RlOiAzMSxcbiAgICBzdW1tYXJ5OiAnQW4gSU1FIGVuZ2luZSBjb3VsZCBub3QgYmUgc3RhcnRlZC4nLFxuICB9LFxuICBJbnZhbGlkU2VsZWN0b3I6IHtcbiAgICBjb2RlOiAzMixcbiAgICBzdW1tYXJ5OiAnQXJndW1lbnQgd2FzIGFuIGludmFsaWQgc2VsZWN0b3IgKGUuZy4gWFBhdGgvQ1NTKS4nLFxuICB9LFxuICBTZXNzaW9uTm90Q3JlYXRlZEV4Y2VwdGlvbjoge1xuICAgIGNvZGU6IDMzLFxuICAgIHN1bW1hcnk6ICdBIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicsXG4gIH0sXG4gIE1vdmVUYXJnZXRPdXRPZkJvdW5kczoge1xuICAgIGNvZGU6IDM0LFxuICAgIHN1bW1hcnk6ICdUYXJnZXQgcHJvdmlkZWQgZm9yIGEgbW92ZSBhY3Rpb24gaXMgb3V0IG9mIGJvdW5kcy4nLFxuICB9LFxuICBOb1N1Y2hDb250ZXh0OiB7XG4gICAgY29kZTogMzUsXG4gICAgc3VtbWFyeTogJ05vIHN1Y2ggY29udGV4dCBmb3VuZC4nLFxuICB9LFxufTtcblxuZnVuY3Rpb24gZ2V0U3VtbWFyeUJ5Q29kZShjb2RlKSB7XG4gIGNvZGUgPSBwYXJzZUludChjb2RlLCAxMCk7XG4gIGZvciAobGV0IG9iaiBvZiBfLnZhbHVlcyhjb2RlcykpIHtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQob2JqLmNvZGUpICYmIG9iai5jb2RlID09PSBjb2RlKSB7XG4gICAgICByZXR1cm4gb2JqLnN1bW1hcnk7XG4gICAgfVxuICB9XG4gIHJldHVybiAnQW4gZXJyb3Igb2NjdXJyZWQnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb2RlcztcbmV4cG9ydCB7Y29kZXMsIGdldFN1bW1hcnlCeUNvZGV9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxLQUFLLEdBQUc7RUFDWkMsT0FBTyxFQUFFO0lBQ1BDLElBQUksRUFBRSxDQURDO0lBRVBDLE9BQU8sRUFBRTtF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
137
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb2RlcyIsIlN1Y2Nlc3MiLCJjb2RlIiwic3VtbWFyeSIsIk5vU3VjaERyaXZlciIsIk5vU3VjaEVsZW1lbnQiLCJOb1N1Y2hGcmFtZSIsIlVua25vd25Db21tYW5kIiwiU3RhbGVFbGVtZW50UmVmZXJlbmNlIiwiRWxlbWVudE5vdFZpc2libGUiLCJJbnZhbGlkRWxlbWVudFN0YXRlIiwiVW5rbm93bkVycm9yIiwiRWxlbWVudElzTm90U2VsZWN0YWJsZSIsIkphdmFTY3JpcHRFcnJvciIsIlhQYXRoTG9va3VwRXJyb3IiLCJUaW1lb3V0IiwiTm9TdWNoV2luZG93IiwiSW52YWxpZENvb2tpZURvbWFpbiIsIlVuYWJsZVRvU2V0Q29va2llIiwiVW5leHBlY3RlZEFsZXJ0T3BlbiIsIk5vQWxlcnRPcGVuRXJyb3IiLCJTY3JpcHRUaW1lb3V0IiwiSW52YWxpZEVsZW1lbnRDb29yZGluYXRlcyIsIklNRU5vdEF2YWlsYWJsZSIsIklNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWQiLCJJbnZhbGlkU2VsZWN0b3IiLCJTZXNzaW9uTm90Q3JlYXRlZEV4Y2VwdGlvbiIsIk1vdmVUYXJnZXRPdXRPZkJvdW5kcyIsIk5vU3VjaENvbnRleHQiLCJnZXRTdW1tYXJ5QnlDb2RlIiwicGFyc2VJbnQiLCJvYmoiLCJfIiwidmFsdWVzIiwiaXNVbmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvanNvbndwLXN0YXR1cy9zdGF0dXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgY29kZXMgPSB7XG4gIFN1Y2Nlc3M6IHtcbiAgICBjb2RlOiAwLFxuICAgIHN1bW1hcnk6ICdUaGUgY29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuJyxcbiAgfSxcbiAgTm9TdWNoRHJpdmVyOiB7XG4gICAgY29kZTogNixcbiAgICBzdW1tYXJ5OiAnQSBzZXNzaW9uIGlzIGVpdGhlciB0ZXJtaW5hdGVkIG9yIG5vdCBzdGFydGVkJyxcbiAgfSxcbiAgTm9TdWNoRWxlbWVudDoge1xuICAgIGNvZGU6IDcsXG4gICAgc3VtbWFyeTogJ0FuIGVsZW1lbnQgY291bGQgbm90IGJlIGxvY2F0ZWQgb24gdGhlIHBhZ2UgdXNpbmcgdGhlIGdpdmVuIHNlYXJjaCBwYXJhbWV0ZXJzLicsXG4gIH0sXG4gIE5vU3VjaEZyYW1lOiB7XG4gICAgY29kZTogOCxcbiAgICBzdW1tYXJ5OlxuICAgICAgJ0EgcmVxdWVzdCB0byBzd2l0Y2ggdG8gYSBmcmFtZSBjb3VsZCBub3QgYmUgc2F0aXNmaWVkIGJlY2F1c2UgdGhlIGZyYW1lIGNvdWxkIG5vdCBiZSBmb3VuZC4nLFxuICB9LFxuICBVbmtub3duQ29tbWFuZDoge1xuICAgIGNvZGU6IDksXG4gICAgc3VtbWFyeTpcbiAgICAgICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCwgb3IgYSByZXF1ZXN0IHdhcyByZWNlaXZlZCB1c2luZyBhbiBIVFRQIG1ldGhvZCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcHBlZCByZXNvdXJjZS4nLFxuICB9LFxuICBTdGFsZUVsZW1lbnRSZWZlcmVuY2U6IHtcbiAgICBjb2RlOiAxMCxcbiAgICBzdW1tYXJ5OlxuICAgICAgJ0FuIGVsZW1lbnQgY29tbWFuZCBmYWlsZWQgYmVjYXVzZSB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGlzIG5vIGxvbmdlciBhdHRhY2hlZCB0byB0aGUgRE9NLicsXG4gIH0sXG4gIEVsZW1lbnROb3RWaXNpYmxlOiB7XG4gICAgY29kZTogMTEsXG4gICAgc3VtbWFyeTpcbiAgICAgICdBbiBlbGVtZW50IGNvbW1hbmQgY291bGQgbm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIG5vdCB2aXNpYmxlIG9uIHRoZSBwYWdlLicsXG4gIH0sXG4gIEludmFsaWRFbGVtZW50U3RhdGU6IHtcbiAgICBjb2RlOiAxMixcbiAgICBzdW1tYXJ5OlxuICAgICAgJ0FuIGVsZW1lbnQgY29tbWFuZCBjb3VsZCBub3QgYmUgY29tcGxldGVkIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZSAoZS5nLiBhdHRlbXB0aW5nIHRvIGNsaWNrIGEgZGlzYWJsZWQgZWxlbWVudCkuJyxcbiAgfSxcbiAgVW5rbm93bkVycm9yOiB7XG4gICAgY29kZTogMTMsXG4gICAgc3VtbWFyeTogJ0FuIHVua25vd24gc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB0aGUgY29tbWFuZC4nLFxuICB9LFxuICBFbGVtZW50SXNOb3RTZWxlY3RhYmxlOiB7XG4gICAgY29kZTogMTUsXG4gICAgc3VtbWFyeTogJ0FuIGF0dGVtcHQgd2FzIG1hZGUgdG8gc2VsZWN0IGFuIGVsZW1lbnQgdGhhdCBjYW5ub3QgYmUgc2VsZWN0ZWQuJyxcbiAgfSxcbiAgSmF2YVNjcmlwdEVycm9yOiB7XG4gICAgY29kZTogMTcsXG4gICAgc3VtbWFyeTogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyB1c2VyIHN1cHBsaWVkIEphdmFTY3JpcHQuJyxcbiAgfSxcbiAgWFBhdGhMb29rdXBFcnJvcjoge1xuICAgIGNvZGU6IDE5LFxuICAgIHN1bW1hcnk6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZWFyY2hpbmcgZm9yIGFuIGVsZW1lbnQgYnkgWFBhdGguJyxcbiAgfSxcbiAgVGltZW91dDoge1xuICAgIGNvZGU6IDIxLFxuICAgIHN1bW1hcnk6ICdBbiBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZSBiZWZvcmUgaXRzIHRpbWVvdXQgZXhwaXJlZC4nLFxuICB9LFxuICBOb1N1Y2hXaW5kb3c6IHtcbiAgICBjb2RlOiAyMyxcbiAgICBzdW1tYXJ5OlxuICAgICAgJ0EgcmVxdWVzdCB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgd2luZG93IGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQgYmVjYXVzZSB0aGUgd2luZG93IGNvdWxkIG5vdCBiZSBmb3VuZC4nLFxuICB9LFxuICBJbnZhbGlkQ29va2llRG9tYWluOiB7XG4gICAgY29kZTogMjQsXG4gICAgc3VtbWFyeTpcbiAgICAgICdBbiBpbGxlZ2FsIGF0dGVtcHQgd2FzIG1hZGUgdG8gc2V0IGEgY29va2llIHVuZGVyIGEgZGlmZmVyZW50IGRvbWFpbiB0aGFuIHRoZSBjdXJyZW50IHBhZ2UuJyxcbiAgfSxcbiAgVW5hYmxlVG9TZXRDb29raWU6IHtcbiAgICBjb2RlOiAyNSxcbiAgICBzdW1tYXJ5OiBcIkEgcmVxdWVzdCB0byBzZXQgYSBjb29raWUncyB2YWx1ZSBjb3VsZCBub3QgYmUgc2F0aXNmaWVkLlwiLFxuICB9LFxuICBVbmV4cGVjdGVkQWxlcnRPcGVuOiB7XG4gICAgY29kZTogMjYsXG4gICAgc3VtbWFyeTogJ0EgbW9kYWwgZGlhbG9nIHdhcyBvcGVuLCBibG9ja2luZyB0aGlzIG9wZXJhdGlvbicsXG4gIH0sXG4gIE5vQWxlcnRPcGVuRXJyb3I6IHtcbiAgICBjb2RlOiAyNyxcbiAgICBzdW1tYXJ5OiAnQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBvcGVyYXRlIG9uIGEgbW9kYWwgZGlhbG9nIHdoZW4gb25lIHdhcyBub3Qgb3Blbi4nLFxuICB9LFxuICBTY3JpcHRUaW1lb3V0OiB7XG4gICAgY29kZTogMjgsXG4gICAgc3VtbWFyeTogJ0Egc2NyaXB0IGRpZCBub3QgY29tcGxldGUgYmVmb3JlIGl0cyB0aW1lb3V0IGV4cGlyZWQuJyxcbiAgfSxcbiAgSW52YWxpZEVsZW1lbnRDb29yZGluYXRlczoge1xuICAgIGNvZGU6IDI5LFxuICAgIHN1bW1hcnk6ICdUaGUgY29vcmRpbmF0ZXMgcHJvdmlkZWQgdG8gYW4gaW50ZXJhY3Rpb25zIG9wZXJhdGlvbiBhcmUgaW52YWxpZC4nLFxuICB9LFxuICBJTUVOb3RBdmFpbGFibGU6IHtcbiAgICBjb2RlOiAzMCxcbiAgICBzdW1tYXJ5OiAnSU1FIHdhcyBub3QgYXZhaWxhYmxlLicsXG4gIH0sXG4gIElNRUVuZ2luZUFjdGl2YXRpb25GYWlsZWQ6IHtcbiAgICBjb2RlOiAzMSxcbiAgICBzdW1tYXJ5OiAnQW4gSU1FIGVuZ2luZSBjb3VsZCBub3QgYmUgc3RhcnRlZC4nLFxuICB9LFxuICBJbnZhbGlkU2VsZWN0b3I6IHtcbiAgICBjb2RlOiAzMixcbiAgICBzdW1tYXJ5OiAnQXJndW1lbnQgd2FzIGFuIGludmFsaWQgc2VsZWN0b3IgKGUuZy4gWFBhdGgvQ1NTKS4nLFxuICB9LFxuICBTZXNzaW9uTm90Q3JlYXRlZEV4Y2VwdGlvbjoge1xuICAgIGNvZGU6IDMzLFxuICAgIHN1bW1hcnk6ICdBIG5ldyBzZXNzaW9uIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicsXG4gIH0sXG4gIE1vdmVUYXJnZXRPdXRPZkJvdW5kczoge1xuICAgIGNvZGU6IDM0LFxuICAgIHN1bW1hcnk6ICdUYXJnZXQgcHJvdmlkZWQgZm9yIGEgbW92ZSBhY3Rpb24gaXMgb3V0IG9mIGJvdW5kcy4nLFxuICB9LFxuICBOb1N1Y2hDb250ZXh0OiB7XG4gICAgY29kZTogMzUsXG4gICAgc3VtbWFyeTogJ05vIHN1Y2ggY29udGV4dCBmb3VuZC4nLFxuICB9LFxufTtcblxuZnVuY3Rpb24gZ2V0U3VtbWFyeUJ5Q29kZShjb2RlKSB7XG4gIGNvZGUgPSBwYXJzZUludChjb2RlLCAxMCk7XG4gIGZvciAobGV0IG9iaiBvZiBfLnZhbHVlcyhjb2RlcykpIHtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQob2JqLmNvZGUpICYmIG9iai5jb2RlID09PSBjb2RlKSB7XG4gICAgICByZXR1cm4gb2JqLnN1bW1hcnk7XG4gICAgfVxuICB9XG4gIHJldHVybiAnQW4gZXJyb3Igb2NjdXJyZWQnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb2RlcztcbmV4cG9ydCB7Y29kZXMsIGdldFN1bW1hcnlCeUNvZGV9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUc7RUFDWkMsT0FBTyxFQUFFO0lBQ1BDLElBQUksRUFBRSxDQURDO0lBRVBDLE9BQU8sRUFBRTtF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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","names":["codes","Success","code","summary","NoSuchDriver","NoSuchElement","NoSuchFrame","UnknownCommand","StaleElementReference","ElementNotVisible","InvalidElementState","UnknownError","ElementIsNotSelectable","JavaScriptError","XPathLookupError","Timeout","NoSuchWindow","InvalidCookieDomain","UnableToSetCookie","UnexpectedAlertOpen","NoAlertOpenError","ScriptTimeout","InvalidElementCoordinates","IMENotAvailable","IMEEngineActivationFailed","InvalidSelector","SessionNotCreatedException","MoveTargetOutOfBounds","NoSuchContext","getSummaryByCode","parseInt","obj","_","values","isUndefined"],"sources":["../../../lib/jsonwp-status/status.js"],"sourcesContent":["import _ from 'lodash';\n\nconst codes = {\n Success: {\n code: 0,\n summary: 'The command executed successfully.',\n },\n NoSuchDriver: {\n code: 6,\n summary: 'A session is either terminated or not started',\n },\n NoSuchElement: {\n code: 7,\n summary: 'An element could not be located on the page using the given search parameters.',\n },\n NoSuchFrame: {\n code: 8,\n summary:\n 'A request to switch to a frame could not be satisfied because the frame could not be found.',\n },\n UnknownCommand: {\n code: 9,\n summary:\n 'The requested resource could not be found, or a request was received using an HTTP method that is not supported by the mapped resource.',\n },\n StaleElementReference: {\n code: 10,\n summary:\n 'An element command failed because the referenced element is no longer attached to the DOM.',\n },\n ElementNotVisible: {\n code: 11,\n summary:\n 'An element command could not be completed because the element is not visible on the page.',\n },\n InvalidElementState: {\n code: 12,\n summary:\n 'An element command could not be completed because the element is in an invalid state (e.g. attempting to click a disabled element).',\n },\n UnknownError: {\n code: 13,\n summary: 'An unknown server-side error occurred while processing the command.',\n },\n ElementIsNotSelectable: {\n code: 15,\n summary: 'An attempt was made to select an element that cannot be selected.',\n },\n JavaScriptError: {\n code: 17,\n summary: 'An error occurred while executing user supplied JavaScript.',\n },\n XPathLookupError: {\n code: 19,\n summary: 'An error occurred while searching for an element by XPath.',\n },\n Timeout: {\n code: 21,\n summary: 'An operation did not complete before its timeout expired.',\n },\n NoSuchWindow: {\n code: 23,\n summary:\n 'A request to switch to a different window could not be satisfied because the window could not be found.',\n },\n InvalidCookieDomain: {\n code: 24,\n summary:\n 'An illegal attempt was made to set a cookie under a different domain than the current page.',\n },\n UnableToSetCookie: {\n code: 25,\n summary: \"A request to set a cookie's value could not be satisfied.\",\n },\n UnexpectedAlertOpen: {\n code: 26,\n summary: 'A modal dialog was open, blocking this operation',\n },\n NoAlertOpenError: {\n code: 27,\n summary: 'An attempt was made to operate on a modal dialog when one was not open.',\n },\n ScriptTimeout: {\n code: 28,\n summary: 'A script did not complete before its timeout expired.',\n },\n InvalidElementCoordinates: {\n code: 29,\n summary: 'The coordinates provided to an interactions operation are invalid.',\n },\n IMENotAvailable: {\n code: 30,\n summary: 'IME was not available.',\n },\n IMEEngineActivationFailed: {\n code: 31,\n summary: 'An IME engine could not be started.',\n },\n InvalidSelector: {\n code: 32,\n summary: 'Argument was an invalid selector (e.g. XPath/CSS).',\n },\n SessionNotCreatedException: {\n code: 33,\n summary: 'A new session could not be created.',\n },\n MoveTargetOutOfBounds: {\n code: 34,\n summary: 'Target provided for a move action is out of bounds.',\n },\n NoSuchContext: {\n code: 35,\n summary: 'No such context found.',\n },\n};\n\nfunction getSummaryByCode(code) {\n code = parseInt(code, 10);\n for (let obj of _.values(codes)) {\n if (!_.isUndefined(obj.code) && obj.code === code) {\n return obj.summary;\n }\n }\n return 'An error occurred';\n}\n\nexport default codes;\nexport {codes, getSummaryByCode};\n"],"mappings":";;;;;;;;;;AAAA;;;;AAEA,MAAMA,KAAK,GAAG;EACZC,OAAO,EAAE;IACPC,IAAI,EAAE,CADC;IAEPC,OAAO,EAAE;EAFF,CADG;EAKZC,YAAY,EAAE;IACZF,IAAI,EAAE,CADM;IAEZC,OAAO,EAAE;EAFG,CALF;EASZE,aAAa,EAAE;IACbH,IAAI,EAAE,CADO;IAEbC,OAAO,EAAE;EAFI,CATH;EAaZG,WAAW,EAAE;IACXJ,IAAI,EAAE,CADK;IAEXC,OAAO,EACL;EAHS,CAbD;EAkBZI,cAAc,EAAE;IACdL,IAAI,EAAE,CADQ;IAEdC,OAAO,EACL;EAHY,CAlBJ;EAuBZK,qBAAqB,EAAE;IACrBN,IAAI,EAAE,EADe;IAErBC,OAAO,EACL;EAHmB,CAvBX;EA4BZM,iBAAiB,EAAE;IACjBP,IAAI,EAAE,EADW;IAEjBC,OAAO,EACL;EAHe,CA5BP;EAiCZO,mBAAmB,EAAE;IACnBR,IAAI,EAAE,EADa;IAEnBC,OAAO,EACL;EAHiB,CAjCT;EAsCZQ,YAAY,EAAE;IACZT,IAAI,EAAE,EADM;IAEZC,OAAO,EAAE;EAFG,CAtCF;EA0CZS,sBAAsB,EAAE;IACtBV,IAAI,EAAE,EADgB;IAEtBC,OAAO,EAAE;EAFa,CA1CZ;EA8CZU,eAAe,EAAE;IACfX,IAAI,EAAE,EADS;IAEfC,OAAO,EAAE;EAFM,CA9CL;EAkDZW,gBAAgB,EAAE;IAChBZ,IAAI,EAAE,EADU;IAEhBC,OAAO,EAAE;EAFO,CAlDN;EAsDZY,OAAO,EAAE;IACPb,IAAI,EAAE,EADC;IAEPC,OAAO,EAAE;EAFF,CAtDG;EA0DZa,YAAY,EAAE;IACZd,IAAI,EAAE,EADM;IAEZC,OAAO,EACL;EAHU,CA1DF;EA+DZc,mBAAmB,EAAE;IACnBf,IAAI,EAAE,EADa;IAEnBC,OAAO,EACL;EAHiB,CA/DT;EAoEZe,iBAAiB,EAAE;IACjBhB,IAAI,EAAE,EADW;IAEjBC,OAAO,EAAE;EAFQ,CApEP;EAwEZgB,mBAAmB,EAAE;IACnBjB,IAAI,EAAE,EADa;IAEnBC,OAAO,EAAE;EAFU,CAxET;EA4EZiB,gBAAgB,EAAE;IAChBlB,IAAI,EAAE,EADU;IAEhBC,OAAO,EAAE;EAFO,CA5EN;EAgFZkB,aAAa,EAAE;IACbnB,IAAI,EAAE,EADO;IAEbC,OAAO,EAAE;EAFI,CAhFH;EAoFZmB,yBAAyB,EAAE;IACzBpB,IAAI,EAAE,EADmB;IAEzBC,OAAO,EAAE;EAFgB,CApFf;EAwFZoB,eAAe,EAAE;IACfrB,IAAI,EAAE,EADS;IAEfC,OAAO,EAAE;EAFM,CAxFL;EA4FZqB,yBAAyB,EAAE;IACzBtB,IAAI,EAAE,EADmB;IAEzBC,OAAO,EAAE;EAFgB,CA5Ff;EAgGZsB,eAAe,EAAE;IACfvB,IAAI,EAAE,EADS;IAEfC,OAAO,EAAE;EAFM,CAhGL;EAoGZuB,0BAA0B,EAAE;IAC1BxB,IAAI,EAAE,EADoB;IAE1BC,OAAO,EAAE;EAFiB,CApGhB;EAwGZwB,qBAAqB,EAAE;IACrBzB,IAAI,EAAE,EADe;IAErBC,OAAO,EAAE;EAFY,CAxGX;EA4GZyB,aAAa,EAAE;IACb1B,IAAI,EAAE,EADO;IAEbC,OAAO,EAAE;EAFI;AA5GH,CAAd;;;AAkHA,SAAS0B,gBAAT,CAA0B3B,IAA1B,EAAgC;EAC9BA,IAAI,GAAG4B,QAAQ,CAAC5B,IAAD,EAAO,EAAP,CAAf;;EACA,KAAK,IAAI6B,GAAT,IAAgBC,eAAA,CAAEC,MAAF,CAASjC,KAAT,CAAhB,EAAiC;IAC/B,IAAI,CAACgC,eAAA,CAAEE,WAAF,CAAcH,GAAG,CAAC7B,IAAlB,CAAD,IAA4B6B,GAAG,CAAC7B,IAAJ,KAAaA,IAA7C,EAAmD;MACjD,OAAO6B,GAAG,CAAC5B,OAAX;IACD;EACF;;EACD,OAAO,mBAAP;AACD;;eAEcH,K"}