appium 2.0.0-beta.26 → 2.0.0-beta.29

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 (118) hide show
  1. package/build/lib/appium.d.ts +215 -0
  2. package/build/lib/appium.d.ts.map +1 -0
  3. package/build/lib/appium.js +62 -54
  4. package/build/lib/cli/args.d.ts +20 -0
  5. package/build/lib/cli/args.d.ts.map +1 -0
  6. package/build/lib/cli/args.js +1 -1
  7. package/build/lib/cli/driver-command.d.ts +36 -0
  8. package/build/lib/cli/driver-command.d.ts.map +1 -0
  9. package/build/lib/cli/driver-command.js +8 -7
  10. package/build/lib/cli/extension-command.d.ts +345 -0
  11. package/build/lib/cli/extension-command.d.ts.map +1 -0
  12. package/build/lib/cli/extension-command.js +52 -38
  13. package/build/lib/cli/extension.d.ts +14 -0
  14. package/build/lib/cli/extension.d.ts.map +1 -0
  15. package/build/lib/cli/extension.js +7 -2
  16. package/build/lib/cli/parser.d.ts +79 -0
  17. package/build/lib/cli/parser.d.ts.map +1 -0
  18. package/build/lib/cli/parser.js +1 -1
  19. package/build/lib/cli/plugin-command.d.ts +39 -0
  20. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  21. package/build/lib/cli/plugin-command.js +6 -7
  22. package/build/lib/cli/utils.d.ts +29 -0
  23. package/build/lib/cli/utils.d.ts.map +1 -0
  24. package/build/lib/cli/utils.js +1 -1
  25. package/build/lib/config-file.d.ts +100 -0
  26. package/build/lib/config-file.d.ts.map +1 -0
  27. package/build/lib/config-file.js +1 -1
  28. package/build/lib/config.d.ts +40 -0
  29. package/build/lib/config.d.ts.map +1 -0
  30. package/build/lib/config.js +2 -2
  31. package/build/lib/constants.d.ts +48 -0
  32. package/build/lib/constants.d.ts.map +1 -0
  33. package/build/lib/constants.js +1 -1
  34. package/build/lib/extension/driver-config.d.ts +84 -0
  35. package/build/lib/extension/driver-config.d.ts.map +1 -0
  36. package/build/lib/extension/driver-config.js +1 -1
  37. package/build/lib/extension/extension-config.d.ts +170 -0
  38. package/build/lib/extension/extension-config.d.ts.map +1 -0
  39. package/build/lib/extension/extension-config.js +2 -2
  40. package/build/lib/extension/index.d.ts +39 -0
  41. package/build/lib/extension/index.d.ts.map +1 -0
  42. package/build/lib/extension/index.js +1 -1
  43. package/build/lib/extension/manifest.d.ts +174 -0
  44. package/build/lib/extension/manifest.d.ts.map +1 -0
  45. package/build/lib/extension/manifest.js +1 -1
  46. package/build/lib/extension/package-changed.d.ts +11 -0
  47. package/build/lib/extension/package-changed.d.ts.map +1 -0
  48. package/build/lib/extension/package-changed.js +1 -1
  49. package/build/lib/extension/plugin-config.d.ts +62 -0
  50. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  51. package/build/lib/extension/plugin-config.js +1 -1
  52. package/build/lib/grid-register.d.ts +10 -0
  53. package/build/lib/grid-register.d.ts.map +1 -0
  54. package/build/lib/logger.d.ts +3 -0
  55. package/build/lib/logger.d.ts.map +1 -0
  56. package/build/lib/logsink.d.ts +4 -0
  57. package/build/lib/logsink.d.ts.map +1 -0
  58. package/build/lib/logsink.js +1 -1
  59. package/build/lib/main.d.ts +51 -0
  60. package/build/lib/main.d.ts.map +1 -0
  61. package/build/lib/main.js +1 -1
  62. package/build/lib/schema/arg-spec.d.ts +143 -0
  63. package/build/lib/schema/arg-spec.d.ts.map +1 -0
  64. package/build/lib/schema/arg-spec.js +1 -1
  65. package/build/lib/schema/cli-args.d.ts +19 -0
  66. package/build/lib/schema/cli-args.d.ts.map +1 -0
  67. package/build/lib/schema/cli-args.js +1 -1
  68. package/build/lib/schema/cli-transformers.d.ts +5 -0
  69. package/build/lib/schema/cli-transformers.d.ts.map +1 -0
  70. package/build/lib/schema/cli-transformers.js +1 -1
  71. package/build/lib/schema/index.d.ts +3 -0
  72. package/build/lib/schema/index.d.ts.map +1 -0
  73. package/build/lib/schema/keywords.d.ts +24 -0
  74. package/build/lib/schema/keywords.d.ts.map +1 -0
  75. package/build/lib/schema/keywords.js +1 -1
  76. package/build/lib/schema/schema.d.ts +259 -0
  77. package/build/lib/schema/schema.d.ts.map +1 -0
  78. package/build/lib/schema/schema.js +3 -3
  79. package/build/lib/utils.d.ts +66 -0
  80. package/build/lib/utils.d.ts.map +1 -0
  81. package/build/lib/utils.js +6 -4
  82. package/build/tsconfig.tsbuildinfo +1 -0
  83. package/lib/appium.js +163 -81
  84. package/lib/cli/args.js +1 -2
  85. package/lib/cli/driver-command.js +11 -8
  86. package/lib/cli/extension-command.js +129 -80
  87. package/lib/cli/extension.js +13 -3
  88. package/lib/cli/parser.js +1 -2
  89. package/lib/cli/plugin-command.js +16 -6
  90. package/lib/cli/utils.js +1 -1
  91. package/lib/config-file.js +3 -4
  92. package/lib/config.js +12 -8
  93. package/lib/constants.js +0 -1
  94. package/lib/extension/driver-config.js +31 -12
  95. package/lib/extension/extension-config.js +21 -22
  96. package/lib/extension/index.js +1 -2
  97. package/lib/extension/manifest.js +23 -127
  98. package/lib/extension/package-changed.js +0 -1
  99. package/lib/extension/plugin-config.js +9 -7
  100. package/lib/logsink.js +4 -0
  101. package/lib/main.js +9 -10
  102. package/lib/schema/arg-spec.js +10 -6
  103. package/lib/schema/cli-args.js +0 -1
  104. package/lib/schema/cli-transformers.js +0 -1
  105. package/lib/schema/keywords.js +0 -1
  106. package/lib/schema/schema.js +2 -3
  107. package/lib/utils.js +49 -16
  108. package/package.json +12 -14
  109. package/types/appium-manifest.d.ts +61 -0
  110. package/types/cli.d.ts +134 -0
  111. package/types/extension.d.ts +56 -0
  112. package/types/external-manifest.d.ts +58 -0
  113. package/types/index.d.ts +7 -0
  114. package/build/lib/appium-config.schema.json +0 -278
  115. package/build/lib/schema/appium-config-schema.js +0 -251
  116. package/lib/schema/appium-config-schema.js +0 -287
  117. package/types/appium-config.d.ts +0 -197
  118. package/types/types.d.ts +0 -245
@@ -71,4 +71,4 @@ const transformers = {
71
71
  }
72
72
  };
73
73
  exports.transformers = transformers;
74
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEvY2xpLXRyYW5zZm9ybWVycy5qcyJdLCJuYW1lcyI6WyJwYXJzZUNzdkxpbmUiLCJ2YWx1ZSIsInNwbGl0IiwibWFwIiwidiIsInRyaW0iLCJmaWx0ZXIiLCJCb29sZWFuIiwicGFyc2VDc3ZGaWxlIiwiZmxhdE1hcCIsInRyYW5zZm9ybWVycyIsImNzdiIsImJvZHkiLCJlcnIiLCJjb2RlIiwiQXJndW1lbnRUeXBlRXJyb3IiLCJtZXNzYWdlIiwianNvbiIsImpzb25PclBhdGgiLCJsb2FkZWRGcm9tRmlsZSIsInJlc3VsdCIsIkpTT04iLCJwYXJzZSIsIl8iLCJpc1BsYWluT2JqZWN0IiwiRXJyb3IiLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImUiLCJtc2ciLCJUeXBlRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBZ0JBLFNBQVNBLFlBQVQsQ0FBdUJDLEtBQXZCLEVBQThCO0FBQzVCLFNBQU9BLEtBQUssQ0FDVEMsS0FESSxDQUNFLEdBREYsRUFFSkMsR0FGSSxDQUVDQyxDQUFELElBQU9BLENBQUMsQ0FBQ0MsSUFBRixFQUZQLEVBR0pDLE1BSEksQ0FHR0MsT0FISCxDQUFQO0FBSUQ7O0FBT0QsU0FBU0MsWUFBVCxDQUF1QlAsS0FBdkIsRUFBOEI7QUFDNUIsU0FBT0EsS0FBSyxDQUNUQyxLQURJLENBQ0UsT0FERixFQUVKQyxHQUZJLENBRUNDLENBQUQsSUFBT0EsQ0FBQyxDQUFDQyxJQUFGLEVBRlAsRUFHSkMsTUFISSxDQUdHQyxPQUhILEVBSUpFLE9BSkksQ0FJSVQsWUFKSixDQUFQO0FBS0Q7O0FBaUJNLE1BQU1VLFlBQVksR0FBRztBQU8xQkMsRUFBQUEsR0FBRyxFQUFHVixLQUFELElBQVc7QUFDZCxRQUFJVyxJQUFKOztBQUdBLFFBQUk7QUFDRkEsTUFBQUEsSUFBSSxHQUFHLHNCQUFhWCxLQUFiLEVBQW9CLE1BQXBCLENBQVA7QUFDRCxLQUZELENBRUUsT0FBT1ksR0FBUCxFQUFZO0FBQ1osVUFBSUEsR0FBRyxDQUFDQyxJQUFKLEtBQWEsUUFBakIsRUFBMkI7QUFDekIsY0FBTSxJQUFJQywyQkFBSixDQUNILHVCQUFzQkgsSUFBSyxLQUFJQyxHQUFHLENBQUNHLE9BQVEsRUFEeEMsQ0FBTjtBQUdEO0FBQ0Y7O0FBRUQsUUFBSTtBQUNGLGFBQU9KLElBQUksR0FBR0osWUFBWSxDQUFDSSxJQUFELENBQWYsR0FBd0JaLFlBQVksQ0FBQ0MsS0FBRCxDQUEvQztBQUNELEtBRkQsQ0FFRSxPQUFPWSxHQUFQLEVBQVk7QUFDWixZQUFNLElBQUlFLDJCQUFKLENBQ0osdURBREksQ0FBTjtBQUdEO0FBQ0YsR0E1QnlCO0FBbUMxQkUsRUFBQUEsSUFBSSxFQUFHQyxVQUFELElBQWdCO0FBQ3BCLFFBQUlELElBQUksR0FBR0MsVUFBWDtBQUNBLFFBQUlDLGNBQWMsR0FBRyxLQUFyQjs7QUFDQSxRQUFJO0FBTUZGLE1BQUFBLElBQUksR0FBRyxzQkFBYUMsVUFBYixFQUF5QixNQUF6QixDQUFQO0FBQ0FDLE1BQUFBLGNBQWMsR0FBRyxJQUFqQjtBQUNELEtBUkQsQ0FRRSxPQUFPTixHQUFQLEVBQVk7QUFFWixVQUFJQSxHQUFHLENBQUNDLElBQUosS0FBYSxRQUFqQixFQUEyQjtBQUN6QixjQUFNRCxHQUFOO0FBQ0Q7QUFDRjs7QUFDRCxRQUFJO0FBQ0YsWUFBTU8sTUFBTSxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0wsSUFBWCxDQUFmOztBQUNBLFVBQUksQ0FBQ00sZ0JBQUVDLGFBQUYsQ0FBZ0JKLE1BQWhCLENBQUwsRUFBOEI7QUFDNUIsY0FBTSxJQUFJSyxLQUFKLENBQ0gsSUFBR0YsZ0JBQUVHLFFBQUYsQ0FBV04sTUFBWCxFQUFtQjtBQUFDTyxVQUFBQSxNQUFNLEVBQUU7QUFBVCxTQUFuQixDQUFrQyxvQkFEbEMsQ0FBTjtBQUdEOztBQUNELGFBQU9QLE1BQVA7QUFDRCxLQVJELENBUUUsT0FBT1EsQ0FBUCxFQUFVO0FBQ1YsWUFBTUMsR0FBRyxHQUFHVixjQUFjLEdBQ3JCLDBCQUF5QkQsVUFBVyx3QkFEZixHQUVyQix5Q0FGTDtBQUdBLFlBQU0sSUFBSVksU0FBSixDQUFlLEdBQUVELEdBQUkscUJBQW9CRCxDQUFDLENBQUNaLE9BQVEsRUFBbkQsQ0FBTjtBQUNEO0FBQ0Y7QUFsRXlCLENBQXJCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IEFyZ3VtZW50VHlwZUVycm9yIH0gZnJvbSAnYXJncGFyc2UnO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjdXN0b20ga2V5d29yZHMgZm9yIEFwcGl1bSBzY2hlbWFzLCBhcyB3ZWxsIGFzXG4gKiBcInRyYW5zZm9ybWVyc1wiIChzZWUgYGFyZ1RyYW5zZm9ybWVyc2AgYmVsb3cpLlxuICpcbiAqIEN1c3RvbSBrZXl3b3JkcyBhcmUganVzdCBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBhcHBlYXIgaW4gYSBzY2hlbWEgKGUuZy4sXG4gKiBgYXBwaXVtLWNvbmZpZy1zY2hlbWEuanNgKSBiZXlvbmQgd2hhdCB0aGUgSlNPTiBTY2hlbWEgc3BlYyBvZmZlcnMuICBUaGVzZVxuICogYXJlIHVzYWJsZSBieSBleHRlbnNpb25zLCBhcyB3ZWxsLlxuICovXG5cbi8qKlxuICogU3BsaXRzIGEgQ1NWIHN0cmluZyBpbnRvIGFuIGFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqL1xuZnVuY3Rpb24gcGFyc2VDc3ZMaW5lICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWVcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoKHYpID0+IHYudHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG59XG5cbi8qKlxuICogU3BsaXQgYSBmaWxlIGJ5IG5ld2xpbmUgdGhlbiBjYWxscyB7QGxpbmsgcGFyc2VDc3ZMaW5lfSBvbiBlYWNoIGxpbmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqL1xuZnVuY3Rpb24gcGFyc2VDc3ZGaWxlICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWVcbiAgICAuc3BsaXQoL1xccj9cXG4vKVxuICAgIC5tYXAoKHYpID0+IHYudHJpbSgpKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuZmxhdE1hcChwYXJzZUNzdkxpbmUpO1xufVxuXG4vKipcbiAqIE5hbWVzcGFjZSBjb250YWluaW5nIF90cmFuc2Zvcm1lcnNfIGZvciBDTEkgYXJndW1lbnRzLiAgXCJWYWxpZGF0b3JzXCIgYW5kXG4gKiBcImZvcm1hdHRlcnNcIiBkbyBub3QgYWN0dWFsbHkgbW9kaWZ5IHRoZSB2YWx1ZSwgYnV0IHRoZXNlIGRvLlxuICpcbiAqIFVzZSBjYXNlIGlzIGZvciB3aGVuIHRoZSBjb25maWcgZmlsZSBjYW4gYWNjZXB0IGUuZy4sIGEgYHN0cmluZ1tdYCwgYnV0IHRoZVxuICogQ0xJIGNhbiBvbmx5IHRha2UgYSBgc3RyaW5nYCAoYXMgYGFyZ3BhcnNlYCBzZWVtcyB0byBiZSBsaW1pdGVkIGluIHRoYXRcbiAqIGZhc2hpb247IGl0IGFsc28gY2Fubm90IHVuZGVyc3RhbmQgYW4gYXJndW1lbnQgaGF2aW5nIG11bHRpcGxlIHR5cGVzKS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGBjc3ZgIHRyYW5zZm9ybSB0YWtlcyBhIGBzdHJpbmdgIGFuZCByZXR1cm5zIGEgYHN0cmluZ1tdYCBieVxuICogc3BsaXR0aW5nIGl0IGJ5IGNvbW1hLS1fb3JfIGlmIHRoYXQgYHN0cmluZ2AgaGFwcGVucyB0byBiZSBhXG4gKiBmaWxlcGF0aC0tcmVhZGluZyB0aGUgZmlsZSBhcyBhIGAuY3N2YC5cbiAqXG4gKiBUaGlzIGNvbnRhaW5zIHNvbWUgY29weS1wYXN0ZWQgY29kZSBmcm9tIGBsaWIvY2xpL3BhcnNlci1oZWxwZXJzLmpzYCwgd2hpY2ggd2FzXG4gKiBvYmxpdGVyYXRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybWVycyA9IHtcbiAgLyoqXG4gICAqIEdpdmVuIGEgQ1NWLXN0eWxlIHN0cmluZyBvciBwYXRobmFtZSwgcGFyc2UgaXQgaW50byBhbiBhcnJheS5cbiAgICogVGhlIGZpbGUgY2FuIGFsc28gYmUgc3BsaXQgb24gbmV3bGluZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBjc3Y6ICh2YWx1ZSkgPT4ge1xuICAgIGxldCBib2R5O1xuICAgIC8vIHNpbmNlIHRoaXMgdmFsdWUgY291bGQgYmUgYSBzaW5nbGUgc3RyaW5nIChubyBjb21tYXMpIF9vcl8gYSBwYXRobmFtZSwgd2Ugd2lsbCBuZWVkXG4gICAgLy8gdG8gYXR0ZW1wdCB0byBwYXJzZSBpdCBhcyBhIGZpbGUgX2ZpcnN0Xy5cbiAgICB0cnkge1xuICAgICAgYm9keSA9IHJlYWRGaWxlU3luYyh2YWx1ZSwgJ3V0ZjgnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50VHlwZUVycm9yKFxuICAgICAgICAgIGBDb3VsZCBub3QgcmVhZCBmaWxlICR7Ym9keX06ICR7ZXJyLm1lc3NhZ2V9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJvZHkgPyBwYXJzZUNzdkZpbGUoYm9keSkgOiBwYXJzZUNzdkxpbmUodmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50VHlwZUVycm9yKFxuICAgICAgICAnTXVzdCBiZSBhIGNvbW1hLWRlbGltaXRlZCBzdHJpbmcsIGUuZy4sIFwiZm9vLGJhcixiYXpcIicsXG4gICAgICApO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogUGFyc2UgYSBzdHJpbmcgd2hpY2ggY291bGQgYmUgYSBwYXRoIHRvIGEgSlNPTiBmaWxlIG9yIGEgSlNPTiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBqc29uT3JQYXRoXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBqc29uOiAoanNvbk9yUGF0aCkgPT4ge1xuICAgIGxldCBqc29uID0ganNvbk9yUGF0aDtcbiAgICBsZXQgbG9hZGVkRnJvbUZpbGUgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgLy8gdXNlIHN5bmNocm9ub3VzIGZpbGUgYWNjZXNzLCBhcyBgYXJncGFyc2VgIHByb3ZpZGVzIG5vIHdheSBvZiBlaXRoZXJcbiAgICAgIC8vIGF3YWl0aW5nIG9yIHVzaW5nIGNhbGxiYWNrcy4gVGhpcyBzdGVwIGhhcHBlbnMgaW4gc3RhcnR1cCwgaW4gd2hhdCBpc1xuICAgICAgLy8gZWZmZWN0aXZlbHkgY29tbWFuZC1saW5lIGNvZGUsIHNvIG5vdGhpbmcgaXMgYmxvY2tlZCBpbiB0ZXJtcyBvZlxuICAgICAgLy8gc2Vzc2lvbnMsIHNvIGhvbGRpbmcgdXAgdGhlIGV2ZW50IGxvb3AgZG9lcyBub3QgaW5jdXIgdGhlIHVzdWFsXG4gICAgICAvLyBkcmF3YmFja3MuXG4gICAgICBqc29uID0gcmVhZEZpbGVTeW5jKGpzb25PclBhdGgsICd1dGY4Jyk7XG4gICAgICBsb2FkZWRGcm9tRmlsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyB1bnJlYWRhYmxlIGZpbGVzIGRvbid0IGNvdW50Li4uIGJ1dCBvdGhlciBwcm9ibGVtcyBkby5cbiAgICAgIGlmIChlcnIuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShqc29uKTtcbiAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGAnJHtfLnRydW5jYXRlKHJlc3VsdCwge2xlbmd0aDogMTAwfSl9JyBpcyBub3QgYW4gb2JqZWN0YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gbG9hZGVkRnJvbUZpbGVcbiAgICAgICAgPyBgVGhlIHByb3ZpZGVkIHZhbHVlIG9mICcke2pzb25PclBhdGh9JyBtdXN0IGJlIGEgdmFsaWQgSlNPTmBcbiAgICAgICAgOiBgVGhlIHByb3ZpZGVkIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBKU09OYDtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7bXNnfS4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfSxcbn07XG4iXX0=
74
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEvY2xpLXRyYW5zZm9ybWVycy5qcyJdLCJuYW1lcyI6WyJwYXJzZUNzdkxpbmUiLCJ2YWx1ZSIsInNwbGl0IiwibWFwIiwidiIsInRyaW0iLCJmaWx0ZXIiLCJCb29sZWFuIiwicGFyc2VDc3ZGaWxlIiwiZmxhdE1hcCIsInRyYW5zZm9ybWVycyIsImNzdiIsImJvZHkiLCJlcnIiLCJjb2RlIiwiQXJndW1lbnRUeXBlRXJyb3IiLCJtZXNzYWdlIiwianNvbiIsImpzb25PclBhdGgiLCJsb2FkZWRGcm9tRmlsZSIsInJlc3VsdCIsIkpTT04iLCJwYXJzZSIsIl8iLCJpc1BsYWluT2JqZWN0IiwiRXJyb3IiLCJ0cnVuY2F0ZSIsImxlbmd0aCIsImUiLCJtc2ciLCJUeXBlRXJyb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBZ0JBLFNBQVNBLFlBQVQsQ0FBdUJDLEtBQXZCLEVBQThCO0FBQzVCLFNBQU9BLEtBQUssQ0FDVEMsS0FESSxDQUNFLEdBREYsRUFFSkMsR0FGSSxDQUVDQyxDQUFELElBQU9BLENBQUMsQ0FBQ0MsSUFBRixFQUZQLEVBR0pDLE1BSEksQ0FHR0MsT0FISCxDQUFQO0FBSUQ7O0FBT0QsU0FBU0MsWUFBVCxDQUF1QlAsS0FBdkIsRUFBOEI7QUFDNUIsU0FBT0EsS0FBSyxDQUNUQyxLQURJLENBQ0UsT0FERixFQUVKQyxHQUZJLENBRUNDLENBQUQsSUFBT0EsQ0FBQyxDQUFDQyxJQUFGLEVBRlAsRUFHSkMsTUFISSxDQUdHQyxPQUhILEVBSUpFLE9BSkksQ0FJSVQsWUFKSixDQUFQO0FBS0Q7O0FBaUJNLE1BQU1VLFlBQVksR0FBRztBQU8xQkMsRUFBQUEsR0FBRyxFQUFHVixLQUFELElBQVc7QUFDZCxRQUFJVyxJQUFKOztBQUdBLFFBQUk7QUFDRkEsTUFBQUEsSUFBSSxHQUFHLHNCQUFhWCxLQUFiLEVBQW9CLE1BQXBCLENBQVA7QUFDRCxLQUZELENBRUUsT0FBT1ksR0FBUCxFQUFZO0FBQ1osVUFBSUEsR0FBRyxDQUFDQyxJQUFKLEtBQWEsUUFBakIsRUFBMkI7QUFDekIsY0FBTSxJQUFJQywyQkFBSixDQUNILHVCQUFzQkgsSUFBSyxLQUFJQyxHQUFHLENBQUNHLE9BQVEsRUFEeEMsQ0FBTjtBQUdEO0FBQ0Y7O0FBRUQsUUFBSTtBQUNGLGFBQU9KLElBQUksR0FBR0osWUFBWSxDQUFDSSxJQUFELENBQWYsR0FBd0JaLFlBQVksQ0FBQ0MsS0FBRCxDQUEvQztBQUNELEtBRkQsQ0FFRSxPQUFPWSxHQUFQLEVBQVk7QUFDWixZQUFNLElBQUlFLDJCQUFKLENBQ0osdURBREksQ0FBTjtBQUdEO0FBQ0YsR0E1QnlCO0FBbUMxQkUsRUFBQUEsSUFBSSxFQUFHQyxVQUFELElBQWdCO0FBQ3BCLFFBQUlELElBQUksR0FBR0MsVUFBWDtBQUNBLFFBQUlDLGNBQWMsR0FBRyxLQUFyQjs7QUFDQSxRQUFJO0FBTUZGLE1BQUFBLElBQUksR0FBRyxzQkFBYUMsVUFBYixFQUF5QixNQUF6QixDQUFQO0FBQ0FDLE1BQUFBLGNBQWMsR0FBRyxJQUFqQjtBQUNELEtBUkQsQ0FRRSxPQUFPTixHQUFQLEVBQVk7QUFFWixVQUFJQSxHQUFHLENBQUNDLElBQUosS0FBYSxRQUFqQixFQUEyQjtBQUN6QixjQUFNRCxHQUFOO0FBQ0Q7QUFDRjs7QUFDRCxRQUFJO0FBQ0YsWUFBTU8sTUFBTSxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0wsSUFBWCxDQUFmOztBQUNBLFVBQUksQ0FBQ00sZ0JBQUVDLGFBQUYsQ0FBZ0JKLE1BQWhCLENBQUwsRUFBOEI7QUFDNUIsY0FBTSxJQUFJSyxLQUFKLENBQ0gsSUFBR0YsZ0JBQUVHLFFBQUYsQ0FBV04sTUFBWCxFQUFtQjtBQUFDTyxVQUFBQSxNQUFNLEVBQUU7QUFBVCxTQUFuQixDQUFrQyxvQkFEbEMsQ0FBTjtBQUdEOztBQUNELGFBQU9QLE1BQVA7QUFDRCxLQVJELENBUUUsT0FBT1EsQ0FBUCxFQUFVO0FBQ1YsWUFBTUMsR0FBRyxHQUFHVixjQUFjLEdBQ3JCLDBCQUF5QkQsVUFBVyx3QkFEZixHQUVyQix5Q0FGTDtBQUdBLFlBQU0sSUFBSVksU0FBSixDQUFlLEdBQUVELEdBQUkscUJBQW9CRCxDQUFDLENBQUNaLE9BQVEsRUFBbkQsQ0FBTjtBQUNEO0FBQ0Y7QUFsRXlCLENBQXJCIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBBcmd1bWVudFR5cGVFcnJvciB9IGZyb20gJ2FyZ3BhcnNlJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbi8qKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgY3VzdG9tIGtleXdvcmRzIGZvciBBcHBpdW0gc2NoZW1hcywgYXMgd2VsbCBhc1xuICogXCJ0cmFuc2Zvcm1lcnNcIiAoc2VlIGBhcmdUcmFuc2Zvcm1lcnNgIGJlbG93KS5cbiAqXG4gKiBDdXN0b20ga2V5d29yZHMgYXJlIGp1c3QgcHJvcGVydGllcyB0aGF0IHdpbGwgYXBwZWFyIGluIGEgc2NoZW1hIChlLmcuLFxuICogYGFwcGl1bS1jb25maWctc2NoZW1hLmpzYCkgYmV5b25kIHdoYXQgdGhlIEpTT04gU2NoZW1hIHNwZWMgb2ZmZXJzLiAgVGhlc2VcbiAqIGFyZSB1c2FibGUgYnkgZXh0ZW5zaW9ucywgYXMgd2VsbC5cbiAqL1xuXG4vKipcbiAqIFNwbGl0cyBhIENTViBzdHJpbmcgaW50byBhbiBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ3N2TGluZSAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLnNwbGl0KCcsJylcbiAgICAubWFwKCh2KSA9PiB2LnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xufVxuXG4vKipcbiAqIFNwbGl0IGEgZmlsZSBieSBuZXdsaW5lIHRoZW4gY2FsbHMge0BsaW5rIHBhcnNlQ3N2TGluZX0gb24gZWFjaCBsaW5lLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ3N2RmlsZSAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLnNwbGl0KC9cXHI/XFxuLylcbiAgICAubWFwKCh2KSA9PiB2LnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmZsYXRNYXAocGFyc2VDc3ZMaW5lKTtcbn1cblxuLyoqXG4gKiBOYW1lc3BhY2UgY29udGFpbmluZyBfdHJhbnNmb3JtZXJzXyBmb3IgQ0xJIGFyZ3VtZW50cy4gIFwiVmFsaWRhdG9yc1wiIGFuZFxuICogXCJmb3JtYXR0ZXJzXCIgZG8gbm90IGFjdHVhbGx5IG1vZGlmeSB0aGUgdmFsdWUsIGJ1dCB0aGVzZSBkby5cbiAqXG4gKiBVc2UgY2FzZSBpcyBmb3Igd2hlbiB0aGUgY29uZmlnIGZpbGUgY2FuIGFjY2VwdCBlLmcuLCBhIGBzdHJpbmdbXWAsIGJ1dCB0aGVcbiAqIENMSSBjYW4gb25seSB0YWtlIGEgYHN0cmluZ2AgKGFzIGBhcmdwYXJzZWAgc2VlbXMgdG8gYmUgbGltaXRlZCBpbiB0aGF0XG4gKiBmYXNoaW9uOyBpdCBhbHNvIGNhbm5vdCB1bmRlcnN0YW5kIGFuIGFyZ3VtZW50IGhhdmluZyBtdWx0aXBsZSB0eXBlcykuXG4gKlxuICogRm9yIGV4YW1wbGUsIHRoZSBgY3N2YCB0cmFuc2Zvcm0gdGFrZXMgYSBgc3RyaW5nYCBhbmQgcmV0dXJucyBhIGBzdHJpbmdbXWAgYnlcbiAqIHNwbGl0dGluZyBpdCBieSBjb21tYS0tX29yXyBpZiB0aGF0IGBzdHJpbmdgIGhhcHBlbnMgdG8gYmUgYVxuICogZmlsZXBhdGgtLXJlYWRpbmcgdGhlIGZpbGUgYXMgYSBgLmNzdmAuXG4gKlxuICogVGhpcyBjb250YWlucyBzb21lIGNvcHktcGFzdGVkIGNvZGUgZnJvbSBgbGliL2NsaS9wYXJzZXItaGVscGVycy5qc2AsIHdoaWNoIHdhc1xuICogb2JsaXRlcmF0ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1lcnMgPSB7XG4gIC8qKlxuICAgKiBHaXZlbiBhIENTVi1zdHlsZSBzdHJpbmcgb3IgcGF0aG5hbWUsIHBhcnNlIGl0IGludG8gYW4gYXJyYXkuXG4gICAqIFRoZSBmaWxlIGNhbiBhbHNvIGJlIHNwbGl0IG9uIG5ld2xpbmVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgY3N2OiAodmFsdWUpID0+IHtcbiAgICBsZXQgYm9keTtcbiAgICAvLyBzaW5jZSB0aGlzIHZhbHVlIGNvdWxkIGJlIGEgc2luZ2xlIHN0cmluZyAobm8gY29tbWFzKSBfb3JfIGEgcGF0aG5hbWUsIHdlIHdpbGwgbmVlZFxuICAgIC8vIHRvIGF0dGVtcHQgdG8gcGFyc2UgaXQgYXMgYSBmaWxlIF9maXJzdF8uXG4gICAgdHJ5IHtcbiAgICAgIGJvZHkgPSByZWFkRmlsZVN5bmModmFsdWUsICd1dGY4Jyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIHRocm93IG5ldyBBcmd1bWVudFR5cGVFcnJvcihcbiAgICAgICAgICBgQ291bGQgbm90IHJlYWQgZmlsZSAke2JvZHl9OiAke2Vyci5tZXNzYWdlfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBib2R5ID8gcGFyc2VDc3ZGaWxlKGJvZHkpIDogcGFyc2VDc3ZMaW5lKHZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBBcmd1bWVudFR5cGVFcnJvcihcbiAgICAgICAgJ011c3QgYmUgYSBjb21tYS1kZWxpbWl0ZWQgc3RyaW5nLCBlLmcuLCBcImZvbyxiYXIsYmF6XCInLFxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIHdoaWNoIGNvdWxkIGJlIGEgcGF0aCB0byBhIEpTT04gZmlsZSBvciBhIEpTT04gc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ganNvbk9yUGF0aFxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAganNvbjogKGpzb25PclBhdGgpID0+IHtcbiAgICBsZXQganNvbiA9IGpzb25PclBhdGg7XG4gICAgbGV0IGxvYWRlZEZyb21GaWxlID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIC8vIHVzZSBzeW5jaHJvbm91cyBmaWxlIGFjY2VzcywgYXMgYGFyZ3BhcnNlYCBwcm92aWRlcyBubyB3YXkgb2YgZWl0aGVyXG4gICAgICAvLyBhd2FpdGluZyBvciB1c2luZyBjYWxsYmFja3MuIFRoaXMgc3RlcCBoYXBwZW5zIGluIHN0YXJ0dXAsIGluIHdoYXQgaXNcbiAgICAgIC8vIGVmZmVjdGl2ZWx5IGNvbW1hbmQtbGluZSBjb2RlLCBzbyBub3RoaW5nIGlzIGJsb2NrZWQgaW4gdGVybXMgb2ZcbiAgICAgIC8vIHNlc3Npb25zLCBzbyBob2xkaW5nIHVwIHRoZSBldmVudCBsb29wIGRvZXMgbm90IGluY3VyIHRoZSB1c3VhbFxuICAgICAgLy8gZHJhd2JhY2tzLlxuICAgICAganNvbiA9IHJlYWRGaWxlU3luYyhqc29uT3JQYXRoLCAndXRmOCcpO1xuICAgICAgbG9hZGVkRnJvbUZpbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gdW5yZWFkYWJsZSBmaWxlcyBkb24ndCBjb3VudC4uLiBidXQgb3RoZXIgcHJvYmxlbXMgZG8uXG4gICAgICBpZiAoZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UoanNvbik7XG4gICAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChyZXN1bHQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJyR7Xy50cnVuY2F0ZShyZXN1bHQsIHtsZW5ndGg6IDEwMH0pfScgaXMgbm90IGFuIG9iamVjdGAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGxvYWRlZEZyb21GaWxlXG4gICAgICAgID8gYFRoZSBwcm92aWRlZCB2YWx1ZSBvZiAnJHtqc29uT3JQYXRofScgbXVzdCBiZSBhIHZhbGlkIEpTT05gXG4gICAgICAgIDogYFRoZSBwcm92aWRlZCB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSlNPTmA7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke21zZ30uIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH0sXG59O1xuIl19
@@ -0,0 +1,3 @@
1
+ export * from "./schema";
2
+ export * from "./cli-args";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/schema/index.js"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Collection of keyword definitions to add to the singleton `Ajv` instance.
3
+ * @type {Record<string,KeywordDefinition>}
4
+ */
5
+ export const keywords: Record<string, KeywordDefinition>;
6
+ /**
7
+ * These are the valid values for the `appiumCliTransformer` keyword.
8
+ * Unfortunately, TS cannot infer this in a JS context. In TS, we'd use
9
+ * `as const` when defining `argTransformers`, then get `keyof typeof argTransformers`. alas.
10
+ */
11
+ export type AppiumCliTransformerName = 'csv' | 'json';
12
+ /**
13
+ * These are the custom keywords that Appium recognizes.
14
+ */
15
+ export type AppiumJSONSchemaKeywords = {
16
+ appiumCliDest?: string | undefined;
17
+ appiumCliDescription?: string | undefined;
18
+ appiumCliAliases?: string[] | undefined;
19
+ appiumCliIgnored?: boolean | undefined;
20
+ appiumCliTransformer?: AppiumCliTransformerName | undefined;
21
+ appiumDeprecated?: boolean | undefined;
22
+ };
23
+ export type KeywordDefinition = import('ajv').KeywordDefinition;
24
+ //# sourceMappingURL=keywords.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../../../lib/schema/keywords.js"],"names":[],"mappings":"AAGA;;;GAGG;AACH,uBAFU,OAAO,MAAM,EAAC,iBAAiB,CAAC,CAwGxC;;;;;;uCAMW,KAAK,GAAC,MAAM;;;;;;;;;;;;gCAiBZ,OAAO,KAAK,EAAE,iBAAiB"}
@@ -67,4 +67,4 @@ const keywords = {
67
67
  }
68
68
  };
69
69
  exports.keywords = keywords;
70
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEva2V5d29yZHMuanMiXSwibmFtZXMiOlsia2V5d29yZHMiLCJhcHBpdW1DbGlBbGlhc2VzIiwia2V5d29yZCIsIm1ldGFTY2hlbWEiLCJ0eXBlIiwiaXRlbXMiLCJtaW5MZW5ndGgiLCJtaW5JdGVtcyIsInVuaXF1ZUl0ZW1zIiwiZGVzY3JpcHRpb24iLCJhcHBpdW1DbGlEZXN0IiwiYXBwaXVtQ2xpRGVzY3JpcHRpb24iLCJzY2hlbWFUeXBlIiwiYXBwaXVtQ2xpVHJhbnNmb3JtZXIiLCJlbnVtIiwiT2JqZWN0Iiwia2V5cyIsInRyYW5zZm9ybWVycyIsImFwcGl1bUNsaUlnbm9yZWQiLCJhcHBpdW1EZXByZWNhdGVkIiwiJGNvbW1lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBOztBQU1PLE1BQU1BLFFBQVEsR0FBRztBQVl0QkMsRUFBQUEsZ0JBQWdCLEVBQUU7QUFDaEJDLElBQUFBLE9BQU8sRUFBRSxrQkFETztBQUVoQkMsSUFBQUEsVUFBVSxFQUFFO0FBQ1ZDLE1BQUFBLElBQUksRUFBRSxPQURJO0FBRVZDLE1BQUFBLEtBQUssRUFBRTtBQUNMRCxRQUFBQSxJQUFJLEVBQUUsUUFERDtBQUVMRSxRQUFBQSxTQUFTLEVBQUU7QUFGTixPQUZHO0FBTVZDLE1BQUFBLFFBQVEsRUFBRSxDQU5BO0FBT1ZDLE1BQUFBLFdBQVcsRUFBRSxJQVBIO0FBUVZDLE1BQUFBLFdBQVcsRUFBRTtBQVJIO0FBRkksR0FaSTtBQW1DdEJDLEVBQUFBLGFBQWEsRUFBRTtBQUNiUixJQUFBQSxPQUFPLEVBQUUsZUFESTtBQUViQyxJQUFBQSxVQUFVLEVBQUU7QUFDVkMsTUFBQUEsSUFBSSxFQUFFLFFBREk7QUFFVkUsTUFBQUEsU0FBUyxFQUFFLENBRkQ7QUFHVkcsTUFBQUEsV0FBVyxFQUFFO0FBSEg7QUFGQyxHQW5DTztBQW9EdEJFLEVBQUFBLG9CQUFvQixFQUFFO0FBQ3BCVCxJQUFBQSxPQUFPLEVBQUUsc0JBRFc7QUFFcEJVLElBQUFBLFVBQVUsRUFBRSxRQUZRO0FBR3BCVCxJQUFBQSxVQUFVLEVBQUU7QUFDVkMsTUFBQUEsSUFBSSxFQUFFLFFBREk7QUFFVkUsTUFBQUEsU0FBUyxFQUFFLENBRkQ7QUFHVkcsTUFBQUEsV0FBVyxFQUFFO0FBSEg7QUFIUSxHQXBEQTtBQW1FdEJJLEVBQUFBLG9CQUFvQixFQUFFO0FBQ3BCWCxJQUFBQSxPQUFPLEVBQUUsc0JBRFc7QUFFcEJDLElBQUFBLFVBQVUsRUFBRTtBQUNWQyxNQUFBQSxJQUFJLEVBQUUsUUFESTtBQUVWVSxNQUFBQSxJQUFJLEVBQUVDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZQyw2QkFBWixDQUZJO0FBR1ZSLE1BQUFBLFdBQVcsRUFBRTtBQUhIO0FBRlEsR0FuRUE7QUFnRnRCUyxFQUFBQSxnQkFBZ0IsRUFBRTtBQUNoQmhCLElBQUFBLE9BQU8sRUFBRSxrQkFETztBQUVoQkMsSUFBQUEsVUFBVSxFQUFFO0FBQ1ZDLE1BQUFBLElBQUksRUFBRSxTQURJO0FBRVZLLE1BQUFBLFdBQVcsRUFBRSxrSEFGSDtBQUdWSyxNQUFBQSxJQUFJLEVBQUUsQ0FBQyxJQUFEO0FBSEk7QUFGSSxHQWhGSTtBQTZGdEJLLEVBQUFBLGdCQUFnQixFQUFFO0FBQ2hCakIsSUFBQUEsT0FBTyxFQUFFLGtCQURPO0FBRWhCQyxJQUFBQSxVQUFVLEVBQUU7QUFDVkMsTUFBQUEsSUFBSSxFQUFFLFNBREk7QUFFVkssTUFBQUEsV0FBVyxFQUFFLHdFQUZIO0FBR1ZLLE1BQUFBLElBQUksRUFBRSxDQUFDLElBQUQsQ0FISTtBQUlWTSxNQUFBQSxRQUFRLEVBQUU7QUFKQTtBQUZJO0FBN0ZJLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHRyYW5zZm9ybWVycyB9IGZyb20gJy4vY2xpLXRyYW5zZm9ybWVycyc7XG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBrZXl3b3JkIGRlZmluaXRpb25zIHRvIGFkZCB0byB0aGUgc2luZ2xldG9uIGBBanZgIGluc3RhbmNlLlxuICogQHR5cGUge1JlY29yZDxzdHJpbmcsS2V5d29yZERlZmluaXRpb24+fVxuICovXG5leHBvcnQgY29uc3Qga2V5d29yZHMgPSB7XG4gIC8qKlxuICAgKiBLZXl3b3JkIHRvIHByb3ZpZGUgYSBsaXN0IG9mIGNvbW1hbmQgYWxpYXMgbmFtZXMgZm9yIHRoZSBDTEkuXG4gICAqXG4gICAqIElmIGRlZmluZWQsIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGl0ZW0gaW4gdGhlIGFycmF5IGFuZCBpdCBtdXN0IGJlIG5vbi1lbXB0eS5cbiAgICogQWxsIGl0ZW1zIGluIHRoZSBhcnJheSBtdXN0IGJlIHVuaXF1ZS5cbiAgICpcbiAgICogQHRvZG8gQXZvaWQgYWxpYXMgY29sbGlzaW9ucyFcbiAgICogQHR5cGUge0tleXdvcmREZWZpbml0aW9ufVxuICAgKiBAZXhhbXBsZVxuICAgKiB7YXBwaXVtQ2xpQWxpYXNlczogWydCJywgJ2JvYmJ5JywgJ3JvYmVydCddfVxuICAgKi9cbiAgYXBwaXVtQ2xpQWxpYXNlczoge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1DbGlBbGlhc2VzJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIH0sXG4gICAgICBtaW5JdGVtczogMSxcbiAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246ICdMaXN0IG9mIGFsaWFzZXMgZm9yIHRoZSBhcmd1bWVudC4gQWxpYXNlcyBzaG9ydGVyIHRoYW4gdGhyZWUgKDMpIGNoYXJhY3RlcnMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIGEgc2luZ2xlIGRhc2g7IG90aGVyd2lzZSB0d28gKDIpLidcbiAgICB9LFxuICB9LFxuICAvKipcbiAgICogS2V5d29yZCB0byBwcm92aWRlIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgZGVzdGluYXRpb24gKHBhcnNlZFxuICAgKiBhcmdzKSBvYmplY3QuIEJ5IGRlZmF1bHQsIHRoaXMgdmFsdWUgd2lsbCBiZSB3aGF0ZXZlciB0aGUgcHJvcGVydHkgbmFtZSBpcyxcbiAgICogYnV0IGNhbWVsLWNhc2VkLiBJZiBhIGZsYWcgbmVlZHMgc29tZXRoaW5nIF9vdGhlcl8gdGhhbiBqdXN0IGNhbWVsLWNhc2luZyxcbiAgICogdXNlIHRoaXMuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICogQGV4YW1wbGVcbiAgICogLy8gZm9yIHByb3AgJ25vLWNvbG9yJ1xuICAgKiB7YXBwaXVtQ2xpRGVzdDogJ05PQ09MT1InfSAvLyB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBhcyBwcm9wZXJ0eSBgTk9DT0xPUmAgaW5zdGVhZCBvZiBgbm9Db2xvcmBcbiAgICovXG4gIGFwcGl1bUNsaURlc3Q6IHtcbiAgICBrZXl3b3JkOiAnYXBwaXVtQ2xpRGVzdCcsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBkZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIHBhcnNlZCBDTEkgYXJndW1lbnRzIG9iamVjdCdcbiAgICB9LFxuICB9LFxuXG4gIC8qKlxuICAgKiBDTEktc3BlY2lmaWMgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5LiAgU29tZXRpbWVzIHRoZSBhbGxvd2VkIHR5cGUgY2FuXG4gICAqIGJlIGRpZmZlcmVudCBlbm91Z2ggb24gdGhlIENMSSB0aGF0IHByb3ZpZGluZyBhIGRlc2NyaXB0aW9uIHdyaXR0ZW4gZm9yIGFcbiAgICogY29uZmlnIGZpbGUgY29udGV4dCB3b3VsZG4ndCBtYWtlIHNlbnNlLlxuICAgKiBAdHlwZSB7S2V5d29yZERlZmluaXRpb259XG4gICAqIEBleGFtcGxlXG4gICAqIHthcHBpdW1DbGlEZXNjcmlwdGlvbjogJ1RoaXMgaXMgYSBjb21tYS1kZWxpbWl0ZWQgc3RyaW5nLCBidXQgaW4gdGhlIGNvbmZpZyBmaWxlIGl0IGlzIGFuIGFycmF5J31cbiAgICovXG4gIGFwcGl1bUNsaURlc2NyaXB0aW9uOiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaURlc2NyaXB0aW9uJyxcbiAgICBzY2hlbWFUeXBlOiAnc3RyaW5nJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24gdG8gcHJvdmlkZSBpbiB0aGUgLS1oZWxwIHRleHQgb2YgdGhlIENMSS4gT3ZlcnJpZGVzIGBkZXNjcmlwdGlvbmAnXG4gICAgfSxcbiAgfSxcblxuICAvKipcbiAgICogVHJhbnNmb3JtZXJzIGZvciBDTEkgYXJncy4gVGhlc2UgdXN1YWxseSB0YWtlIHN0cmluZ3MgdGhlbiBkbyBzb21ldGhpbmcgd2l0aCB0aGVtLCBsaWtlXG4gICAqIHJlYWQgYSBmaWxlIG9yIHBhcnNlIGZ1cnRoZXIuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICovXG4gIGFwcGl1bUNsaVRyYW5zZm9ybWVyOiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaVRyYW5zZm9ybWVyJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGVudW06IE9iamVjdC5rZXlzKHRyYW5zZm9ybWVycyksXG4gICAgICBkZXNjcmlwdGlvbjogJ1RoZSBuYW1lIG9mIGEgY3VzdG9tIHRyYW5zZm9ybWVyIHRvIHJ1biBhZ2FpbnN0IHRoZSB2YWx1ZSBhcyBwcm92aWRlZCB2aWEgdGhlIENMSS4nXG4gICAgfSxcbiAgfSxcblxuICAvKipcbiAgICogRmxhZyB0byB0ZWxsIEFwcGl1bSB0byBfbm90XyBwcm92aWRlIHRoaXMgcHJvcGVydHkgYXMgYSBDTEkgYXJndW1lbnQuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICovXG4gIGFwcGl1bUNsaUlnbm9yZWQ6IHtcbiAgICBrZXl3b3JkOiAnYXBwaXVtQ2xpSWdub3JlZCcsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVzY3JpcHRpb246ICdJZiBgdHJ1ZWAsIEFwcGl1bSB3aWxsIG5vdCBwcm92aWRlIHRoaXMgcHJvcGVydHkgYXMgYSBDTEkgYXJndW1lbnQuIFRoaXMgaXMgTk9UIHRoZSBzYW1lIGFzIGEgXCJoaWRkZW5cIiBhcmd1bWVudC4nLFxuICAgICAgZW51bTogW3RydWVdXG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBNYXJrIHRoaXMgcHJvcGVydHkgYXMgZGVwcmVjYXRlZC5cbiAgICogQHR5cGUge0tleXdvcmREZWZpbml0aW9ufVxuICAgKi9cbiAgYXBwaXVtRGVwcmVjYXRlZDoge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1EZXByZWNhdGVkJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0lmIGB0cnVlYCwgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGRpc3BsYXllZCBhcyBcImRlcHJlY2F0ZWRcIiB0byB0aGUgdXNlcicsXG4gICAgICBlbnVtOiBbdHJ1ZV0sXG4gICAgICAkY29tbWVudDogJ0pTT04gc2NoZW1hIGRyYWZ0LTIwMTktMDkga2V5d29yZCBgZGVwcmVjYXRlZGAgc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UuIFRoaXMga2V5d29yZCBzaG91bGQgaXRzZWxmIGJlIGRlcHJlY2F0ZWQgaWYgd2UgbW92ZSB0byBkcmFmdC0yMDE5LTA5ISdcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSB2YWxpZCB2YWx1ZXMgZm9yIHRoZSBgYXBwaXVtQ2xpVHJhbnNmb3JtZXJgIGtleXdvcmQuXG4gKiBVbmZvcnR1bmF0ZWx5LCBUUyBjYW5ub3QgaW5mZXIgdGhpcyBpbiBhIEpTIGNvbnRleHQuICBJbiBUUywgd2UnZCB1c2VcbiAqIGBhcyBjb25zdGAgd2hlbiBkZWZpbmluZyBgYXJnVHJhbnNmb3JtZXJzYCwgdGhlbiBnZXQgYGtleW9mIHR5cGVvZiBhcmdUcmFuc2Zvcm1lcnNgLiBhbGFzLlxuICogQHR5cGVkZWYgeydjc3YnfCdqc29uJ30gQXBwaXVtQ2xpVHJhbnNmb3JtZXJOYW1lXG4gKi9cblxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIGN1c3RvbSBrZXl3b3JkcyB0aGF0IEFwcGl1bSByZWNvZ25pemVzLlxuICpcbiAqIEB0eXBlZGVmIEFwcGl1bUpTT05TY2hlbWFLZXl3b3Jkc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFthcHBpdW1DbGlEZXN0XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFthcHBpdW1DbGlEZXNjcmlwdGlvbl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthcHBpdW1DbGlBbGlhc2VzXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXBwaXVtQ2xpSWdub3JlZF1cbiAqIEBwcm9wZXJ0eSB7QXBwaXVtQ2xpVHJhbnNmb3JtZXJOYW1lfSBbYXBwaXVtQ2xpVHJhbnNmb3JtZXJdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthcHBpdW1EZXByZWNhdGVkXVxuICovXG5cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYnKS5LZXl3b3JkRGVmaW5pdGlvbn0gS2V5d29yZERlZmluaXRpb25cbiAqL1xuIl19
70
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEva2V5d29yZHMuanMiXSwibmFtZXMiOlsia2V5d29yZHMiLCJhcHBpdW1DbGlBbGlhc2VzIiwia2V5d29yZCIsIm1ldGFTY2hlbWEiLCJ0eXBlIiwiaXRlbXMiLCJtaW5MZW5ndGgiLCJtaW5JdGVtcyIsInVuaXF1ZUl0ZW1zIiwiZGVzY3JpcHRpb24iLCJhcHBpdW1DbGlEZXN0IiwiYXBwaXVtQ2xpRGVzY3JpcHRpb24iLCJzY2hlbWFUeXBlIiwiYXBwaXVtQ2xpVHJhbnNmb3JtZXIiLCJlbnVtIiwiT2JqZWN0Iiwia2V5cyIsInRyYW5zZm9ybWVycyIsImFwcGl1bUNsaUlnbm9yZWQiLCJhcHBpdW1EZXByZWNhdGVkIiwiJGNvbW1lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBOztBQU1PLE1BQU1BLFFBQVEsR0FBRztBQVl0QkMsRUFBQUEsZ0JBQWdCLEVBQUU7QUFDaEJDLElBQUFBLE9BQU8sRUFBRSxrQkFETztBQUVoQkMsSUFBQUEsVUFBVSxFQUFFO0FBQ1ZDLE1BQUFBLElBQUksRUFBRSxPQURJO0FBRVZDLE1BQUFBLEtBQUssRUFBRTtBQUNMRCxRQUFBQSxJQUFJLEVBQUUsUUFERDtBQUVMRSxRQUFBQSxTQUFTLEVBQUU7QUFGTixPQUZHO0FBTVZDLE1BQUFBLFFBQVEsRUFBRSxDQU5BO0FBT1ZDLE1BQUFBLFdBQVcsRUFBRSxJQVBIO0FBUVZDLE1BQUFBLFdBQVcsRUFBRTtBQVJIO0FBRkksR0FaSTtBQW1DdEJDLEVBQUFBLGFBQWEsRUFBRTtBQUNiUixJQUFBQSxPQUFPLEVBQUUsZUFESTtBQUViQyxJQUFBQSxVQUFVLEVBQUU7QUFDVkMsTUFBQUEsSUFBSSxFQUFFLFFBREk7QUFFVkUsTUFBQUEsU0FBUyxFQUFFLENBRkQ7QUFHVkcsTUFBQUEsV0FBVyxFQUFFO0FBSEg7QUFGQyxHQW5DTztBQW9EdEJFLEVBQUFBLG9CQUFvQixFQUFFO0FBQ3BCVCxJQUFBQSxPQUFPLEVBQUUsc0JBRFc7QUFFcEJVLElBQUFBLFVBQVUsRUFBRSxRQUZRO0FBR3BCVCxJQUFBQSxVQUFVLEVBQUU7QUFDVkMsTUFBQUEsSUFBSSxFQUFFLFFBREk7QUFFVkUsTUFBQUEsU0FBUyxFQUFFLENBRkQ7QUFHVkcsTUFBQUEsV0FBVyxFQUFFO0FBSEg7QUFIUSxHQXBEQTtBQW1FdEJJLEVBQUFBLG9CQUFvQixFQUFFO0FBQ3BCWCxJQUFBQSxPQUFPLEVBQUUsc0JBRFc7QUFFcEJDLElBQUFBLFVBQVUsRUFBRTtBQUNWQyxNQUFBQSxJQUFJLEVBQUUsUUFESTtBQUVWVSxNQUFBQSxJQUFJLEVBQUVDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZQyw2QkFBWixDQUZJO0FBR1ZSLE1BQUFBLFdBQVcsRUFBRTtBQUhIO0FBRlEsR0FuRUE7QUFnRnRCUyxFQUFBQSxnQkFBZ0IsRUFBRTtBQUNoQmhCLElBQUFBLE9BQU8sRUFBRSxrQkFETztBQUVoQkMsSUFBQUEsVUFBVSxFQUFFO0FBQ1ZDLE1BQUFBLElBQUksRUFBRSxTQURJO0FBRVZLLE1BQUFBLFdBQVcsRUFBRSxrSEFGSDtBQUdWSyxNQUFBQSxJQUFJLEVBQUUsQ0FBQyxJQUFEO0FBSEk7QUFGSSxHQWhGSTtBQTZGdEJLLEVBQUFBLGdCQUFnQixFQUFFO0FBQ2hCakIsSUFBQUEsT0FBTyxFQUFFLGtCQURPO0FBRWhCQyxJQUFBQSxVQUFVLEVBQUU7QUFDVkMsTUFBQUEsSUFBSSxFQUFFLFNBREk7QUFFVkssTUFBQUEsV0FBVyxFQUFFLHdFQUZIO0FBR1ZLLE1BQUFBLElBQUksRUFBRSxDQUFDLElBQUQsQ0FISTtBQUlWTSxNQUFBQSxRQUFRLEVBQUU7QUFKQTtBQUZJO0FBN0ZJLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyB0cmFuc2Zvcm1lcnMgfSBmcm9tICcuL2NsaS10cmFuc2Zvcm1lcnMnO1xuXG4vKipcbiAqIENvbGxlY3Rpb24gb2Yga2V5d29yZCBkZWZpbml0aW9ucyB0byBhZGQgdG8gdGhlIHNpbmdsZXRvbiBgQWp2YCBpbnN0YW5jZS5cbiAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLEtleXdvcmREZWZpbml0aW9uPn1cbiAqL1xuZXhwb3J0IGNvbnN0IGtleXdvcmRzID0ge1xuICAvKipcbiAgICogS2V5d29yZCB0byBwcm92aWRlIGEgbGlzdCBvZiBjb21tYW5kIGFsaWFzIG5hbWVzIGZvciB0aGUgQ0xJLlxuICAgKlxuICAgKiBJZiBkZWZpbmVkLCB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBpdGVtIGluIHRoZSBhcnJheSBhbmQgaXQgbXVzdCBiZSBub24tZW1wdHkuXG4gICAqIEFsbCBpdGVtcyBpbiB0aGUgYXJyYXkgbXVzdCBiZSB1bmlxdWUuXG4gICAqXG4gICAqIEB0b2RvIEF2b2lkIGFsaWFzIGNvbGxpc2lvbnMhXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICogQGV4YW1wbGVcbiAgICoge2FwcGl1bUNsaUFsaWFzZXM6IFsnQicsICdib2JieScsICdyb2JlcnQnXX1cbiAgICovXG4gIGFwcGl1bUNsaUFsaWFzZXM6IHtcbiAgICBrZXl3b3JkOiAnYXBwaXVtQ2xpQWxpYXNlcycsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIGl0ZW1zOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICB9LFxuICAgICAgbWluSXRlbXM6IDEsXG4gICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBvZiBhbGlhc2VzIGZvciB0aGUgYXJndW1lbnQuIEFsaWFzZXMgc2hvcnRlciB0aGFuIHRocmVlICgzKSBjaGFyYWN0ZXJzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBhIHNpbmdsZSBkYXNoOyBvdGhlcndpc2UgdHdvICgyKS4nXG4gICAgfSxcbiAgfSxcbiAgLyoqXG4gICAqIEtleXdvcmQgdG8gcHJvdmlkZSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGRlc3RpbmF0aW9uIChwYXJzZWRcbiAgICogYXJncykgb2JqZWN0LiBCeSBkZWZhdWx0LCB0aGlzIHZhbHVlIHdpbGwgYmUgd2hhdGV2ZXIgdGhlIHByb3BlcnR5IG5hbWUgaXMsXG4gICAqIGJ1dCBjYW1lbC1jYXNlZC4gSWYgYSBmbGFnIG5lZWRzIHNvbWV0aGluZyBfb3RoZXJfIHRoYW4ganVzdCBjYW1lbC1jYXNpbmcsXG4gICAqIHVzZSB0aGlzLlxuICAgKiBAdHlwZSB7S2V5d29yZERlZmluaXRpb259XG4gICAqIEBleGFtcGxlXG4gICAqIC8vIGZvciBwcm9wICduby1jb2xvcidcbiAgICoge2FwcGl1bUNsaURlc3Q6ICdOT0NPTE9SJ30gLy8gdmFsdWUgd2lsbCBiZSBzdG9yZWQgYXMgcHJvcGVydHkgYE5PQ09MT1JgIGluc3RlYWQgb2YgYG5vQ29sb3JgXG4gICAqL1xuICBhcHBpdW1DbGlEZXN0OiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaURlc3QnLFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IGluIHRoZSBwYXJzZWQgQ0xJIGFyZ3VtZW50cyBvYmplY3QnXG4gICAgfSxcbiAgfSxcblxuICAvKipcbiAgICogQ0xJLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eS4gIFNvbWV0aW1lcyB0aGUgYWxsb3dlZCB0eXBlIGNhblxuICAgKiBiZSBkaWZmZXJlbnQgZW5vdWdoIG9uIHRoZSBDTEkgdGhhdCBwcm92aWRpbmcgYSBkZXNjcmlwdGlvbiB3cml0dGVuIGZvciBhXG4gICAqIGNvbmZpZyBmaWxlIGNvbnRleHQgd291bGRuJ3QgbWFrZSBzZW5zZS5cbiAgICogQHR5cGUge0tleXdvcmREZWZpbml0aW9ufVxuICAgKiBAZXhhbXBsZVxuICAgKiB7YXBwaXVtQ2xpRGVzY3JpcHRpb246ICdUaGlzIGlzIGEgY29tbWEtZGVsaW1pdGVkIHN0cmluZywgYnV0IGluIHRoZSBjb25maWcgZmlsZSBpdCBpcyBhbiBhcnJheSd9XG4gICAqL1xuICBhcHBpdW1DbGlEZXNjcmlwdGlvbjoge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1DbGlEZXNjcmlwdGlvbicsXG4gICAgc2NoZW1hVHlwZTogJ3N0cmluZycsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uIHRvIHByb3ZpZGUgaW4gdGhlIC0taGVscCB0ZXh0IG9mIHRoZSBDTEkuIE92ZXJyaWRlcyBgZGVzY3JpcHRpb25gJ1xuICAgIH0sXG4gIH0sXG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybWVycyBmb3IgQ0xJIGFyZ3MuIFRoZXNlIHVzdWFsbHkgdGFrZSBzdHJpbmdzIHRoZW4gZG8gc29tZXRoaW5nIHdpdGggdGhlbSwgbGlrZVxuICAgKiByZWFkIGEgZmlsZSBvciBwYXJzZSBmdXJ0aGVyLlxuICAgKiBAdHlwZSB7S2V5d29yZERlZmluaXRpb259XG4gICAqL1xuICBhcHBpdW1DbGlUcmFuc2Zvcm1lcjoge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1DbGlUcmFuc2Zvcm1lcicsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBlbnVtOiBPYmplY3Qua2V5cyh0cmFuc2Zvcm1lcnMpLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGUgbmFtZSBvZiBhIGN1c3RvbSB0cmFuc2Zvcm1lciB0byBydW4gYWdhaW5zdCB0aGUgdmFsdWUgYXMgcHJvdmlkZWQgdmlhIHRoZSBDTEkuJ1xuICAgIH0sXG4gIH0sXG5cbiAgLyoqXG4gICAqIEZsYWcgdG8gdGVsbCBBcHBpdW0gdG8gX25vdF8gcHJvdmlkZSB0aGlzIHByb3BlcnR5IGFzIGEgQ0xJIGFyZ3VtZW50LlxuICAgKiBAdHlwZSB7S2V5d29yZERlZmluaXRpb259XG4gICAqL1xuICBhcHBpdW1DbGlJZ25vcmVkOiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaUlnbm9yZWQnLFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSWYgYHRydWVgLCBBcHBpdW0gd2lsbCBub3QgcHJvdmlkZSB0aGlzIHByb3BlcnR5IGFzIGEgQ0xJIGFyZ3VtZW50LiBUaGlzIGlzIE5PVCB0aGUgc2FtZSBhcyBhIFwiaGlkZGVuXCIgYXJndW1lbnQuJyxcbiAgICAgIGVudW06IFt0cnVlXVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogTWFyayB0aGlzIHByb3BlcnR5IGFzIGRlcHJlY2F0ZWQuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICovXG4gIGFwcGl1bURlcHJlY2F0ZWQ6IHtcbiAgICBrZXl3b3JkOiAnYXBwaXVtRGVwcmVjYXRlZCcsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVzY3JpcHRpb246ICdJZiBgdHJ1ZWAsIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgXCJkZXByZWNhdGVkXCIgdG8gdGhlIHVzZXInLFxuICAgICAgZW51bTogW3RydWVdLFxuICAgICAgJGNvbW1lbnQ6ICdKU09OIHNjaGVtYSBkcmFmdC0yMDE5LTA5IGtleXdvcmQgYGRlcHJlY2F0ZWRgIHNlcnZlcyB0aGUgc2FtZSBwdXJwb3NlLiBUaGlzIGtleXdvcmQgc2hvdWxkIGl0c2VsZiBiZSBkZXByZWNhdGVkIGlmIHdlIG1vdmUgdG8gZHJhZnQtMjAxOS0wOSEnXG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFRoZXNlIGFyZSB0aGUgdmFsaWQgdmFsdWVzIGZvciB0aGUgYGFwcGl1bUNsaVRyYW5zZm9ybWVyYCBrZXl3b3JkLlxuICogVW5mb3J0dW5hdGVseSwgVFMgY2Fubm90IGluZmVyIHRoaXMgaW4gYSBKUyBjb250ZXh0LiAgSW4gVFMsIHdlJ2QgdXNlXG4gKiBgYXMgY29uc3RgIHdoZW4gZGVmaW5pbmcgYGFyZ1RyYW5zZm9ybWVyc2AsIHRoZW4gZ2V0IGBrZXlvZiB0eXBlb2YgYXJnVHJhbnNmb3JtZXJzYC4gYWxhcy5cbiAqIEB0eXBlZGVmIHsnY3N2J3wnanNvbid9IEFwcGl1bUNsaVRyYW5zZm9ybWVyTmFtZVxuICovXG5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSBjdXN0b20ga2V5d29yZHMgdGhhdCBBcHBpdW0gcmVjb2duaXplcy5cbiAqXG4gKiBAdHlwZWRlZiBBcHBpdW1KU09OU2NoZW1hS2V5d29yZHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYXBwaXVtQ2xpRGVzdF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYXBwaXVtQ2xpRGVzY3JpcHRpb25dXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYXBwaXVtQ2xpQWxpYXNlc11cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FwcGl1bUNsaUlnbm9yZWRdXG4gKiBAcHJvcGVydHkge0FwcGl1bUNsaVRyYW5zZm9ybWVyTmFtZX0gW2FwcGl1bUNsaVRyYW5zZm9ybWVyXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXBwaXVtRGVwcmVjYXRlZF1cbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuS2V5d29yZERlZmluaXRpb259IEtleXdvcmREZWZpbml0aW9uXG4gKi9cbiJdfQ==
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Key/value pairs go in... but they don't come out.
3
+ *
4
+ * @template K,V
5
+ * @extends {Map<K,V>}
6
+ */
7
+ export class RoachHotelMap<K, V> extends Map<K, V> {
8
+ constructor();
9
+ constructor(entries?: readonly (readonly [K, V])[] | null | undefined);
10
+ constructor();
11
+ constructor(iterable?: Iterable<readonly [K, V]> | null | undefined);
12
+ }
13
+ /**
14
+ * Extensions that an extension schema file can have.
15
+ */
16
+ export const ALLOWED_SCHEMA_EXTENSIONS: Set<string>;
17
+ /**
18
+ * Thrown when the {@link AppiumSchema} instance has not yet been finalized, but
19
+ * the method called requires it.
20
+ */
21
+ export class SchemaFinalizationError extends Error {
22
+ constructor();
23
+ /**
24
+ * @type {Readonly<string>}
25
+ */
26
+ code: Readonly<string>;
27
+ }
28
+ /**
29
+ * Thrown when a "unique" schema ID conflicts with an existing schema ID.
30
+ *
31
+ * This is likely going to be caused by attempting to register the same schema twice.
32
+ */
33
+ export class SchemaNameConflictError extends Error {
34
+ /**
35
+ * @param {ExtensionType} extType
36
+ * @param {string} extName
37
+ */
38
+ constructor(extType: ExtensionType, extName: string);
39
+ /**
40
+ * @type {Readonly<string>}
41
+ */
42
+ code: Readonly<string>;
43
+ /**
44
+ * @type {Readonly<{extType: ExtensionType, extName: string}>}
45
+ */
46
+ data: Readonly<{
47
+ extType: ExtensionType;
48
+ extName: string;
49
+ }>;
50
+ }
51
+ /**
52
+ * Thrown when a schema ID was expected, but it doesn't exist on the {@link Ajv} instance.
53
+ */
54
+ export class SchemaUnknownSchemaError extends ReferenceError {
55
+ /**
56
+ * @param {string} schemaId
57
+ */
58
+ constructor(schemaId: string);
59
+ /**
60
+ * @type {Readonly<string>}
61
+ */
62
+ code: Readonly<string>;
63
+ /**
64
+ * @type {Readonly<{schemaId: string}>}
65
+ */
66
+ data: Readonly<{
67
+ schemaId: string;
68
+ }>;
69
+ }
70
+ /**
71
+ * Thrown when a schema is provided, but it's of an unsupported type.
72
+ *
73
+ * "Valid" schemas which are unsupported include boolean schemas and async schemas
74
+ * (having a `true` `$async` property).
75
+ */
76
+ export class SchemaUnsupportedSchemaError extends TypeError {
77
+ /**
78
+ * @param {any} schema
79
+ * @param {ExtensionType} extType
80
+ * @param {string} extName
81
+ */
82
+ constructor(schema: any, extType: ExtensionType, extName: string);
83
+ /**
84
+ * @type {Readonly<string>}
85
+ */
86
+ code: Readonly<string>;
87
+ /**
88
+ * @type {Readonly<{schema: any, extType: ExtensionType, extName: string}>}
89
+ */
90
+ data: Readonly<{
91
+ schema: any;
92
+ extType: ExtensionType;
93
+ extName: string;
94
+ }>;
95
+ }
96
+ /**
97
+ * Registers a schema from an extension.
98
+ *
99
+ * This is "fail-fast" in that the schema will immediately be validated against JSON schema draft-07 _or_ whatever the value of the schema's `$schema` prop is.
100
+ *
101
+ * Does _not_ add the schema to the `ajv` instance (this is done by {@link AppiumSchema.finalize}).
102
+ * @param {ExtensionType} extType - Extension type
103
+ * @param {string} extName - Unique extension name for `type`
104
+ * @param {SchemaObject} schema - Schema object
105
+ * @throws {SchemaNameConflictError} If the schema is an invalid
106
+ * @returns {void}
107
+ */
108
+ export function registerSchema(extType: ExtensionType, extName: string, schema: SchemaObject): void;
109
+ export function getAllArgSpecs(): RoachHotelMap<string, ArgSpec<any>>;
110
+ /**
111
+ * Returns a {@link ArgSpec} for the given argument name.
112
+ * @param {string} name - CLI argument name
113
+ * @param {ExtensionType} [extType] - Extension type
114
+ * @param {string} [extName] - Extension name
115
+ * @returns {ArgSpec|undefined} ArgSpec or `undefined` if not found
116
+ */
117
+ export function getArgSpec(name: string, extType?: import("../../types").ExtensionType | undefined, extName?: string | undefined): ArgSpec<any> | undefined;
118
+ /**
119
+ * Returns `true` if the instance knows about an argument by the given `name`.
120
+ * @param {string} name - CLI argument name
121
+ * @param {ExtensionType} [extType] - Extension type
122
+ * @param {string} [extName] - Extension name
123
+ * @returns {boolean} `true` if such an {@link ArgSpec} exists
124
+ */
125
+ export function hasArgSpec(name: string, extType?: import("../../types").ExtensionType | undefined, extName?: string | undefined): boolean;
126
+ /**
127
+ * Return `true` if {@link AppiumSchema.finalize finalize} has been called
128
+ * successfully and {@link AppiumSchema.reset reset} has not been called since.
129
+ * @returns {boolean} If finalized
130
+ */
131
+ export function isFinalized(): boolean;
132
+ /**
133
+ * Call this when no more schemas will be registered.
134
+ *
135
+ * This does three things:
136
+ * 1. It combines all schemas from extensions into the Appium config schema,
137
+ * then adds the result to the `Ajv` instance.
138
+ * 2. It adds schemas for _each_ argument/property for validation purposes.
139
+ * The CLI uses these schemas to validate specific arguments.
140
+ * 3. The schemas are validated against JSON schema draft-07 (which is the
141
+ * only one supported at this time)
142
+ *
143
+ * Any method in this instance that needs to interact with the `Ajv` instance
144
+ * will throw if this method has not been called.
145
+ *
146
+ * If the instance has already been finalized, this is a no-op.
147
+ * @public
148
+ * @throws {Error} If the schema is not valid
149
+ * @returns {Readonly<Record<string,StrictSchemaObject>>} Record of schema IDs to full schema objects
150
+ */
151
+ export function finalizeSchema(): Readonly<Record<string, StrictSchemaObject>>;
152
+ /**
153
+ * Resets this instance to its original state.
154
+ *
155
+ * - Removes all added schemas from the `Ajv` instance
156
+ * - Resets the map of {@link ArgSpec ArgSpecs}
157
+ * - Resets the map of registered schemas
158
+ * - Sets the {@link AppiumSchema._finalized _finalized} flag to `false`
159
+ *
160
+ * If you need to call {@link AppiumSchema.finalize} again, you'll want to call this first.
161
+ * @returns {void}
162
+ */
163
+ export function resetSchema(): void;
164
+ /**
165
+ * Given an object, validates it against the Appium config schema.
166
+ * If errors occur, the returned array will be non-empty.
167
+ * @param {any} value - The value (hopefully an object) to validate against the schema
168
+ * @param {string} [ref] - Schema ID or ref.
169
+ * @public
170
+ * @returns {import('ajv').ErrorObject[]} Array of errors, if any.
171
+ */
172
+ export function validate(value: any, ref?: string | undefined): import('ajv').ErrorObject[];
173
+ /**
174
+ * Retrieves the schema itself
175
+ * @public
176
+ * @param {string} [ref] - Schema ID
177
+ * @throws If the schema has not yet been finalized
178
+ * @returns {SchemaObject}
179
+ */
180
+ export function getSchema(ref?: string | undefined): SchemaObject;
181
+ /**
182
+ * Flatten schema into an array of `SchemaObject`s and associated
183
+ * {@link ArgSpec ArgSpecs}.
184
+ *
185
+ * Converts nested extension schemas to keys based on the extension type and
186
+ * name. Used when translating to `argparse` options or getting the list of
187
+ * default values (see {@link AppiumSchema.getDefaults}) for CLI or otherwise.
188
+ *
189
+ * The return value is an intermediate reprsentation used by `cli-args`
190
+ * module's `toParserArgs`, which converts the finalized schema to parameters
191
+ * used by `argparse`.
192
+ * @throws If {@link AppiumSchema.finalize} has not been called yet.
193
+ * @returns {FlattenedSchema}
194
+ */
195
+ export function flattenSchema(): FlattenedSchema;
196
+ /**
197
+ * Returns a `Record` of argument "dest" strings to default values.
198
+ *
199
+ * The "dest" string is the property name in object returned by
200
+ * `argparse.ArgumentParser['parse_args']`.
201
+ * @template {boolean|undefined} Flattened
202
+ * @param {Flattened} [flatten=true] - If `true`, flattens the returned object
203
+ * using "keypath"-style keys of the format `<extType>.<extName>.<argName>`.
204
+ * Otherwise, returns a nested object using `extType` and `extName` as
205
+ * properties. Base arguments (server arguments) are always at the top level.
206
+ * @returns {DefaultValues<Flattened>}
207
+ */
208
+ export function getDefaultsForSchema<Flattened extends boolean | undefined>(flatten?: Flattened | undefined): DefaultValues<Flattened>;
209
+ /**
210
+ * Returns a flattened Record of defaults for a specific extension. Keys will
211
+ * be of format `<argName>`.
212
+ * @param {ExtensionType} extType - Extension type
213
+ * @param {string} extName - Extension name
214
+ * @returns {Record<string,ArgSpecDefaultValue>}
215
+ */
216
+ export function getDefaultsForExtension(extType: ExtensionType, extName: string): Record<string, ArgSpecDefaultValue>;
217
+ /**
218
+ * Returns `true` if `filename`'s file extension is allowed (in {@link ALLOWED_SCHEMA_EXTENSIONS}).
219
+ * @param {string} filename
220
+ * @returns {boolean}
221
+ */
222
+ export function isAllowedSchemaFileExtension(filename: string): boolean;
223
+ /**
224
+ * Appium only supports schemas that are plain objects; not arrays.
225
+ */
226
+ export type SchemaObject = import("ajv").SchemaObject & {
227
+ [key: number]: never;
228
+ };
229
+ export type ExtensionType = import('../extension/manifest').ExtensionType;
230
+ /**
231
+ * An object having property `additionalProperties: false`
232
+ */
233
+ export type StrictProp = {
234
+ additionalProperties: false;
235
+ };
236
+ /**
237
+ * A {@link SchemaObject } with `additionalProperties: false`
238
+ */
239
+ export type StrictSchemaObject = SchemaObject & StrictProp;
240
+ /**
241
+ * A list of schemas associated with properties and their corresponding {@link ArgSpec } objects.
242
+ *
243
+ * Intermediate data structure used when converting the entire schema down to CLI arguments.
244
+ */
245
+ export type FlattenedSchema = {
246
+ schema: SchemaObject;
247
+ argSpec: ArgSpec<any>;
248
+ }[];
249
+ export type ArgSpecDefaultValue = ArgSpec<any>['defaultValue'];
250
+ /**
251
+ * e.g. `{driver: {foo: 'bar'}}` where `foo` is the arg name and `bar` is the default value.
252
+ */
253
+ export type NestedArgSpecDefaultValue = Record<string, Record<string, ArgSpecDefaultValue>>;
254
+ /**
255
+ * Helper type for the return value of {@link AppiumSchema.getDefaults }
256
+ */
257
+ export type DefaultValues<Flattened extends boolean | undefined> = Record<string, Flattened extends true ? ArgSpecDefaultValue : ArgSpecDefaultValue | NestedArgSpecDefaultValue>;
258
+ import { ArgSpec } from "./arg-spec";
259
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../lib/schema/schema.js"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH;IAqCG,cAAwB;IAAA,uEAEV;IAsHV,cAA2B;IAAA,qEACP;CAvI1B;AAED;;GAEG;AACH,oDAA2E;AAqgB3E;;;GAGG;AACH;IAME,cAEC;IAPD;;OAEG;IACH,MAFU,SAAS,MAAM,CAAC,CAEa;CAKxC;AAED;;;;GAIG;AACH;IAWE;;;OAGG;IACH,qBAHW,aAAa,WACb,MAAM,EAOhB;IAnBD;;OAEG;IACH,MAFU,SAAS,MAAM,CAAC,CAEc;IAExC;;OAEG;IACH,MAFU,SAAS;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAC,CAExD;CAYN;AAED;;GAEG;AACH;IAWE;;OAEG;IACH,sBAFW,MAAM,EAKhB;IAhBD;;OAEG;IACH,MAFU,SAAS,MAAM,CAAC,CAEe;IAEzC;;OAEG;IACH,MAFU,SAAS;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,CAAC,CAEjC;CASN;AAED;;;;;GAKG;AACH;IAWE;;;;OAIG;IACH,oBAJW,GAAG,WACH,aAAa,WACb,MAAM,EAyBhB;IAtCD;;OAEG;IACH,MAFU,SAAS,MAAM,CAAC,CAEmB;IAE7C;;OAEG;IACH,MAFU,SAAS;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,aAAa,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAC,CAErE;CA+BN;AAlXC;;;;;;;;;;;GAWG;AACH,wCANW,aAAa,WACb,MAAM,UACN,YAAY,GAEV,IAAI,CAqBhB;AAhLD,sEAEC;AAgLD;;;;;;GAMG;AACH,iCALW,MAAM,4FAGJ,eAAQ,SAAS,CAI7B;AAED;;;;;;GAMG;AACH,iCALW,MAAM,4FAGJ,OAAO,CAInB;AA/MD;;;;GAIG;AACH,+BAFa,OAAO,CAInB;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,kCAFa,SAAS,OAAO,MAAM,EAAC,kBAAkB,CAAC,CAAC,CA2EvD;AAuBD;;;;;;;;;;GAUG;AACH,+BAFa,IAAI,CAehB;AAkOD;;;;;;;GAOG;AACH,gCALW,GAAG,6BAGD,OAAO,KAAK,EAAE,WAAW,EAAE,CAOvC;AA1CD;;;;;;GAMG;AACH,qDAFa,YAAY,CAIxB;AAnFD;;;;;;;;;;;;;GAaG;AACH,iDA0DC;AA1ID;;;;;;;;;;;GAWG;AACH,uIA8BC;AAED;;;;;;GAMG;AACH,iDAJW,aAAa,WACb,MAAM,GACJ,OAAO,MAAM,EAAC,mBAAmB,CAAC,CAe9C;AAwHD;;;;GAIG;AACH,uDAHW,MAAM,GACJ,OAAO,CAInB;;;;;;;4BAsJU,OAAO,uBAAuB,EAAE,aAAa;;;;;0BAM5C,KAAK;;;;;iCAKN,YAAY,GAAG,UAAU;;;;;;8BAOxB;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,eAAS;CAAC,EAAE;kCAI3C,aAAQ,cAAc,CAAC;;;;wCAKvB,OAAO,MAAM,EAAC,OAAO,MAAM,EAAC,mBAAmB,CAAC,CAAC;;;;mEAMjD,OAAO,MAAM,EAAC,SAAS,SAAS,IAAI,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,yBAAyB,CAAC"}
@@ -19,7 +19,7 @@ var _path = _interopRequireDefault(require("path"));
19
19
 
20
20
  var _constants = require("../constants");
21
21
 
22
- var _appiumConfigSchema = _interopRequireDefault(require("./appium-config-schema"));
22
+ var _schema = require("@appium/schema");
23
23
 
24
24
  var _argSpec = require("./arg-spec");
25
25
 
@@ -92,7 +92,7 @@ class AppiumSchema {
92
92
 
93
93
  const ajv = this._ajv;
94
94
 
95
- const baseSchema = _lodash.default.cloneDeep(_appiumConfigSchema.default);
95
+ const baseSchema = _lodash.default.cloneDeep(_schema.AppiumConfigJsonSchema);
96
96
 
97
97
  const addArgSpecs = (schema, extType, extName) => {
98
98
  for (let [propName, propSchema] of Object.entries(schema)) {
@@ -449,4 +449,4 @@ const {
449
449
  isAllowedSchemaFileExtension
450
450
  } = AppiumSchema;
451
451
  exports.isAllowedSchemaFileExtension = isAllowedSchemaFileExtension;
452
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEvc2NoZW1hLmpzIl0sIm5hbWVzIjpbIlJvYWNoSG90ZWxNYXAiLCJNYXAiLCJzZXQiLCJrZXkiLCJ2YWx1ZSIsImhhcyIsIkVycm9yIiwiZGVsZXRlIiwiY2xlYXIiLCJBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TIiwiU2V0IiwiQXBwaXVtU2NoZW1hIiwiX2FyZ1NwZWNzIiwiX3JlZ2lzdGVyZWRTY2hlbWFzIiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsIl9hanYiLCJfaW5zdGFuY2UiLCJfZmluYWxpemVkU2NoZW1hcyIsImNvbnN0cnVjdG9yIiwiX2luc3RhbnRpYXRlQWp2IiwiY3JlYXRlIiwiaW5zdGFuY2UiLCJfIiwiYmluZEFsbCIsImhhc1JlZ2lzdGVyZWRTY2hlbWEiLCJleHRUeXBlIiwiZXh0TmFtZSIsImlzRmluYWxpemVkIiwiQm9vbGVhbiIsImdldEFsbEFyZ1NwZWNzIiwiZmluYWxpemUiLCJhanYiLCJiYXNlU2NoZW1hIiwiY2xvbmVEZWVwIiwiYXBwaXVtQ29uZmlnU2NoZW1hIiwiYWRkQXJnU3BlY3MiLCJzY2hlbWEiLCJwcm9wTmFtZSIsInByb3BTY2hlbWEiLCJPYmplY3QiLCJlbnRyaWVzIiwiYXJnU3BlYyIsIkFyZ1NwZWMiLCJkZXN0IiwiYXBwaXVtQ2xpRGVzdCIsImRlZmF1bHRWYWx1ZSIsImRlZmF1bHQiLCJhcmciLCJvbWl0IiwicHJvcGVydGllcyIsInNlcnZlciIsImZpbmFsaXplZFNjaGVtYXMiLCJmaW5hbFNjaGVtYSIsInJlZHVjZSIsImV4dGVuc2lvblNjaGVtYXMiLCJmb3JFYWNoIiwiJHJlZiIsInRvU2NoZW1hQmFzZVJlZiIsIiRpZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiJGNvbW1lbnQiLCJ2YWxpZGF0ZVNjaGVtYSIsImFkZFNjaGVtYSIsIkFQUElVTV9DT05GSUdfU0NIRU1BX0lEIiwiZnJlZXplIiwiQWp2IiwiYWxsRXJyb3JzIiwia2V5d29yZHMiLCJrZXl3b3JkIiwiYWRkS2V5d29yZCIsInJlc2V0Iiwic2NoZW1hSWQiLCJrZXlzIiwicmVtb3ZlU2NoZW1hIiwicmVnaXN0ZXJTY2hlbWEiLCJpc1VuZGVmaW5lZCIsIlR5cGVFcnJvciIsImlzU3VwcG9ydGVkU2NoZW1hVHlwZSIsIlNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3IiLCJub3JtYWxpemVkRXh0TmFtZSIsImtlYmFiQ2FzZSIsImdldCIsIlNjaGVtYU5hbWVDb25mbGljdEVycm9yIiwiZ2V0QXJnU3BlYyIsIm5hbWUiLCJ0b0FyZyIsImhhc0FyZ1NwZWMiLCJnZXREZWZhdWx0cyIsImZsYXR0ZW4iLCJTY2hlbWFGaW5hbGl6YXRpb25FcnJvciIsInJlZHVjZXIiLCJkZWZhdWx0cyIsInJldHZhbCIsInZhbHVlcyIsImdldERlZmF1bHRzRm9yRXh0ZW5zaW9uIiwic3BlY3MiLCJmaWx0ZXIiLCJzcGVjIiwicmF3RGVzdCIsImdldFNjaGVtYSIsInN0YWNrIiwicHJlZml4IiwiZmxhdHRlbmVkIiwicGFpcnMiLCJ0b1BhaXJzIiwicHVzaCIsIlNFUlZFUl9QUk9QX05BTUUiLCJyZWZTY2hlbWEiLCJlcnIiLCJTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IiLCJleHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCIsIlJlZmVyZW5jZUVycm9yIiwicmVmIiwiX2dldFZhbGlkYXRvciIsImlkIiwidmFsaWRhdG9yIiwidmFsaWRhdGUiLCJpc0FycmF5IiwiZXJyb3JzIiwiaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbiIsImZpbGVuYW1lIiwicGF0aCIsImV4dG5hbWUiLCJpc1BsYWluT2JqZWN0IiwiJGFzeW5jIiwiY29kZSIsImRhdGEiLCJtc2ciLCJpc0Jvb2xlYW4iLCJKU09OIiwic3RyaW5naWZ5IiwiYXBwaXVtU2NoZW1hIiwiZmluYWxpemVTY2hlbWEiLCJyZXNldFNjaGVtYSIsImZsYXR0ZW5TY2hlbWEiLCJnZXREZWZhdWx0c0ZvclNjaGVtYSJdLCJtYXBwaW5ncyI6Ijs7Ozs7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QUFNeUcsWUFBWSxHQUFHekgsWUFBWSxDQUFDVSxNQUFiLEVBQXJCO0FBRU8sTUFBTTtBQUNYc0QsRUFBQUEsY0FEVztBQUVYN0MsRUFBQUEsY0FGVztBQUdYc0QsRUFBQUEsVUFIVztBQUlYRyxFQUFBQSxVQUpXO0FBS1gzRCxFQUFBQSxXQUxXO0FBTVhHLEVBQUFBLFFBQVEsRUFBRXNHLGNBTkM7QUFPWDlELEVBQUFBLEtBQUssRUFBRStELFdBUEk7QUFRWGpCLEVBQUFBLFFBUlc7QUFTWGpCLEVBQUFBLFNBVFc7QUFVWFgsRUFBQUEsT0FBTyxFQUFFOEMsYUFWRTtBQVdYL0MsRUFBQUEsV0FBVyxFQUFFZ0Qsb0JBWEY7QUFZWHpDLEVBQUFBO0FBWlcsSUFhVHFDLFlBYkc7Ozs7Ozs7Ozs7Ozs7QUFjQSxNQUFNO0FBQUNaLEVBQUFBO0FBQUQsSUFBaUM3RyxZQUF2QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgYWRkRm9ybWF0cyBmcm9tICdhanYtZm9ybWF0cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IGFwcGl1bUNvbmZpZ1NjaGVtYSBmcm9tICcuL2FwcGl1bS1jb25maWctc2NoZW1hJztcbmltcG9ydCB7IEFQUElVTV9DT05GSUdfU0NIRU1BX0lELCBBcmdTcGVjLCBTRVJWRVJfUFJPUF9OQU1FIH0gZnJvbSAnLi9hcmctc3BlYyc7XG5pbXBvcnQgeyBrZXl3b3JkcyB9IGZyb20gJy4va2V5d29yZHMnO1xuXG4vKipcbiAqIEtleS92YWx1ZSBwYWlycyBnbyBpbi4uLiBidXQgdGhleSBkb24ndCBjb21lIG91dC5cbiAqXG4gKiBAdGVtcGxhdGUgSyxWXG4gKiBAZXh0ZW5kcyB7TWFwPEssVj59XG4gKi9cbmV4cG9ydCBjbGFzcyBSb2FjaEhvdGVsTWFwIGV4dGVuZHMgTWFwIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7S30ga2V5XG4gICAqIEBwYXJhbSB7Vn0gdmFsdWVcbiAgICovXG4gIHNldCAoa2V5LCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5fSBpcyBhbHJlYWR5IHNldGApO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuc2V0KGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7S30ga2V5XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZGVsZXRlIChrZXkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgUm9hY2hIb3RlbE1hcGApO1xuICB9XG59XG5cbi8qKlxuICogRXh0ZW5zaW9ucyB0aGF0IGFuIGV4dGVuc2lvbiBzY2hlbWEgZmlsZSBjYW4gaGF2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFsnLmpzb24nLCAnLmpzJywgJy5janMnXSk7XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBBanYgYW5kIHNjaGVtYS1yZWxhdGVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBTaG91bGQgaGF2ZSBiZWVuIG5hbWVkIEhpZ2hsYW5kZXIsIGJlY2F1c2UgX3RoZXJlIGNhbiBvbmx5IGJlIG9uZV9cbiAqL1xuY2xhc3MgQXBwaXVtU2NoZW1hIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB1bmlxdWUgYXJndW1lbnQgSURzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcge0BsaW5rIEFyZ1NwZWN9cy5cbiAgICpcbiAgICogQW4gXCJhcmd1bWVudFwiIGlzIGEgQ0xJIGFyZ3VtZW50IG9yIGEgY29uZmlnIHByb3BlcnR5LlxuICAgKlxuICAgKiBVc2VkIHRvIHByb3ZpZGUgZWFzeSBsb29rdXBzIG9mIGFyZ3VtZW50IG1ldGFkYXRhIHdoZW4gY29udmVydGluZyBiZXR3ZWVuIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgb2YgdGhvc2UgYXJndW1lbnRzLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Um9hY2hIb3RlbE1hcDxzdHJpbmcsQXJnU3BlYz59XG4gICAqL1xuICBfYXJnU3BlY3MgPSBuZXcgUm9hY2hIb3RlbE1hcCgpO1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiBleHRlbnNpb24gdHlwZXMgdG8gZXh0ZW5zaW9uIG5hbWVzIHRvIHNjaGVtYSBvYmplY3RzLlxuICAgKlxuICAgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBuYW1pbmcgY29uZmxpY3RzLiBUaGUgc2NoZW1hc1xuICAgKiBhcmUgc3RvcmVkIGhlcmUgaW4gbWVtb3J5IHVudGlsIHRoZSBpbnN0YW5jZSBpcyBfZmluYWxpemVkXy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlY29yZDxFeHRlbnNpb25UeXBlLE1hcDxzdHJpbmcsU2NoZW1hT2JqZWN0Pj59XG4gICAqL1xuICBfcmVnaXN0ZXJlZFNjaGVtYXMgPSB7W0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLCBbUExVR0lOX1RZUEVdOiBuZXcgTWFwKCl9O1xuXG4gIC8qKlxuICAgKiBBanYgaW5zdGFuY2VcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Fqdn1cbiAgICovXG4gIF9hanY7XG5cbiAgLyoqXG4gICAqIFNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0FwcGl1bVNjaGVtYX1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFuY2U7XG5cbiAgLyoqXG4gICAqIExvb2t1cCBvZiBzY2hlbWEgSURzIHRvIGZpbmFsaXplZCBzY2hlbWFzLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcmVmZXJlbmNlcywgYnV0IHJhdGhlciB0aGUgcm9vdCBzY2hlbWFzIHRoZW1zZWx2ZXMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD4/fVxuICAgKi9cbiAgX2ZpbmFsaXplZFNjaGVtYXMgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBBanYsIGFkZHMgc3RhbmRhcmQgZm9ybWF0cyBhbmQgb3VyIGN1c3RvbSBrZXl3b3Jkcy5cbiAgICogQHNlZSBodHRwczovL25wbS5pbS9hanYtZm9ybWF0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuX2FqdiA9IEFwcGl1bVNjaGVtYS5faW5zdGFudGlhdGVBanYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IGZ1bmN0aW9uIGZvciB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2UgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIGNyZWF0ZXMgYSBuZXcgb25lLlxuICAgKiBCaW5kcyBwdWJsaWMgbWV0aG9kcyB0byB0aGUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtBcHBpdW1TY2hlbWF9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlICgpIHtcbiAgICBpZiAoIUFwcGl1bVNjaGVtYS5faW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEFwcGl1bVNjaGVtYSgpO1xuICAgICAgQXBwaXVtU2NoZW1hLl9pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgXy5iaW5kQWxsKGluc3RhbmNlLCBbXG4gICAgICAgICdmaW5hbGl6ZScsXG4gICAgICAgICdmbGF0dGVuJyxcbiAgICAgICAgJ2dldEFsbEFyZ1NwZWNzJyxcbiAgICAgICAgJ2dldEFyZ1NwZWMnLFxuICAgICAgICAnZ2V0RGVmYXVsdHMnLFxuICAgICAgICAnZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24nLFxuICAgICAgICAnZ2V0U2NoZW1hJyxcbiAgICAgICAgJ2hhc0FyZ1NwZWMnLFxuICAgICAgICAnaXNGaW5hbGl6ZWQnLFxuICAgICAgICAncmVnaXN0ZXJTY2hlbWEnLFxuICAgICAgICAnaGFzUmVnaXN0ZXJlZFNjaGVtYScsXG4gICAgICAgICdyZXNldCcsXG4gICAgICAgICd2YWxpZGF0ZScsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXBwaXVtU2NoZW1hLl9pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhIHNjaGVtYSBoYXMgYmVlbiByZWdpc3RlcmVkIHVzaW5nIGdpdmVuIGV4dGVuc2lvbiB0eXBlIGFuZCBuYW1lLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGRlcGVuZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gX2ZpbmFsaXplZF8uXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gTmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgcmVnaXN0ZXJlZFxuICAgKi9cbiAgaGFzUmVnaXN0ZXJlZFNjaGVtYSAoZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5oYXMoZXh0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplIGZpbmFsaXplfSBoYXMgYmVlbiBjYWxsZWRcbiAgICogc3VjY2Vzc2Z1bGx5IGFuZCB7QGxpbmsgQXBwaXVtU2NoZW1hLnJlc2V0IHJlc2V0fSBoYXMgbm90IGJlZW4gY2FsbGVkIHNpbmNlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgZmluYWxpemVkXG4gICAqL1xuICBpc0ZpbmFsaXplZCAoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZmluYWxpemVkU2NoZW1hcyk7XG4gIH1cblxuICBnZXRBbGxBcmdTcGVjcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgdGhpcyB3aGVuIG5vIG1vcmUgc2NoZW1hcyB3aWxsIGJlIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIFRoaXMgZG9lcyB0aHJlZSB0aGluZ3M6XG4gICAqIDEuIEl0IGNvbWJpbmVzIGFsbCBzY2hlbWFzIGZyb20gZXh0ZW5zaW9ucyBpbnRvIHRoZSBBcHBpdW0gY29uZmlnIHNjaGVtYSxcbiAgICogICAgdGhlbiBhZGRzIHRoZSByZXN1bHQgdG8gdGhlIGBBanZgIGluc3RhbmNlLlxuICAgKiAyLiBJdCBhZGRzIHNjaGVtYXMgZm9yIF9lYWNoXyBhcmd1bWVudC9wcm9wZXJ0eSBmb3IgdmFsaWRhdGlvbiBwdXJwb3Nlcy5cbiAgICogICAgVGhlIENMSSB1c2VzIHRoZXNlIHNjaGVtYXMgdG8gdmFsaWRhdGUgc3BlY2lmaWMgYXJndW1lbnRzLlxuICAgKiAzLiBUaGUgc2NoZW1hcyBhcmUgdmFsaWRhdGVkIGFnYWluc3QgSlNPTiBzY2hlbWEgZHJhZnQtMDcgKHdoaWNoIGlzIHRoZVxuICAgKiAgICBvbmx5IG9uZSBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKVxuICAgKlxuICAgKiBBbnkgbWV0aG9kIGluIHRoaXMgaW5zdGFuY2UgdGhhdCBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIHRoZSBgQWp2YCBpbnN0YW5jZVxuICAgKiB3aWxsIHRocm93IGlmIHRoaXMgbWV0aG9kIGhhcyBub3QgYmVlbiBjYWxsZWQuXG4gICAqXG4gICAqIElmIHRoZSBpbnN0YW5jZSBoYXMgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCwgdGhpcyBpcyBhIG5vLW9wLlxuICAgKiBAcHVibGljXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgc2NoZW1hIGlzIG5vdCB2YWxpZFxuICAgKiBAcmV0dXJucyB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+Pn0gUmVjb3JkIG9mIHNjaGVtYSBJRHMgdG8gZnVsbCBzY2hlbWEgb2JqZWN0c1xuICAgKi9cbiAgZmluYWxpemUgKCkge1xuICAgIGlmICh0aGlzLmlzRmluYWxpemVkKCkpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge05vbk51bGxhYmxlPHR5cGVvZiB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzPn0gKi8gKFxuICAgICAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFqdiA9IHRoaXMuX2FqdjtcblxuICAgIC8vIEFqdiB3aWxsIF9tdXRhdGVfIHRoZSBzY2hlbWEsIHNvIHdlIG5lZWQgdG8gY2xvbmUgaXQuXG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IF8uY2xvbmVEZWVwKGFwcGl1bUNvbmZpZ1NjaGVtYSk7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2NoZW1hT2JqZWN0fSBzY2hlbWFcbiAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV1cbiAgICAgKi9cbiAgICBjb25zdCBhZGRBcmdTcGVjcyA9IChzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWUpID0+IHtcbiAgICAgIGZvciAobGV0IFtwcm9wTmFtZSwgcHJvcFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgICAgICBjb25zdCBhcmdTcGVjID0gQXJnU3BlYy5jcmVhdGUocHJvcE5hbWUsIHtcbiAgICAgICAgICBkZXN0OiBwcm9wU2NoZW1hLmFwcGl1bUNsaURlc3QsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBwcm9wU2NoZW1hLmRlZmF1bHQsXG4gICAgICAgICAgZXh0VHlwZSxcbiAgICAgICAgICBleHROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qge2FyZ30gPSBhcmdTcGVjO1xuICAgICAgICB0aGlzLl9hcmdTcGVjcy5zZXQoYXJnLCBhcmdTcGVjKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWRkQXJnU3BlY3MoXG4gICAgICBfLm9taXQoYmFzZVNjaGVtYS5wcm9wZXJ0aWVzLnNlcnZlci5wcm9wZXJ0aWVzLCBbXG4gICAgICAgIERSSVZFUl9UWVBFLFxuICAgICAgICBQTFVHSU5fVFlQRSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+fVxuICAgICAqL1xuICAgIGNvbnN0IGZpbmFsaXplZFNjaGVtYXMgPSB7fTtcblxuICAgIGNvbnN0IGZpbmFsU2NoZW1hID0gXy5yZWR1Y2UoXG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hcyxcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHt0eXBlb2YgYmFzZVNjaGVtYX0gYmFzZVNjaGVtYVxuICAgICAgICogQHBhcmFtIHtNYXA8c3RyaW5nLFNjaGVtYU9iamVjdD59IGV4dGVuc2lvblNjaGVtYXNcbiAgICAgICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgICAgICovXG4gICAgICAoYmFzZVNjaGVtYSwgZXh0ZW5zaW9uU2NoZW1hcywgZXh0VHlwZSkgPT4ge1xuICAgICAgICBleHRlbnNpb25TY2hlbWFzLmZvckVhY2goKHNjaGVtYSwgZXh0TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0ICRyZWYgPSBBcmdTcGVjLnRvU2NoZW1hQmFzZVJlZihleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBzY2hlbWEuJGlkID0gJHJlZjtcbiAgICAgICAgICBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTsgLy8gdGhpcyBtYWtlcyBgc2NoZW1hYCBiZWNvbWUgYSBgU3RyaWN0U2NoZW1hT2JqZWN0YFxuICAgICAgICAgIGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllc1tleHRUeXBlXS5wcm9wZXJ0aWVzW2V4dE5hbWVdID1cbiAgICAgICAgICAgIHskcmVmLCAkY29tbWVudDogZXh0TmFtZX07XG4gICAgICAgICAgYWp2LnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgICAgYWRkQXJnU3BlY3Moc2NoZW1hLnByb3BlcnRpZXMsIGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgICAgICAgIGFqdi5hZGRTY2hlbWEoc2NoZW1hLCAkcmVmKTtcbiAgICAgICAgICBmaW5hbGl6ZWRTY2hlbWFzWyRyZWZdID0gLyoqIEB0eXBlIHtTdHJpY3RTY2hlbWFPYmplY3R9ICovIChzY2hlbWEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJhc2VTY2hlbWE7XG4gICAgICB9LFxuICAgICAgYmFzZVNjaGVtYSxcbiAgICApO1xuXG4gICAgYWp2LmFkZFNjaGVtYShmaW5hbFNjaGVtYSwgQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpO1xuICAgIGZpbmFsaXplZFNjaGVtYXNbQVBQSVVNX0NPTkZJR19TQ0hFTUFfSURdID0gZmluYWxTY2hlbWE7XG4gICAgYWp2LnZhbGlkYXRlU2NoZW1hKGZpbmFsU2NoZW1hLCB0cnVlKTtcblxuICAgIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMgPSBmaW5hbGl6ZWRTY2hlbWFzO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKGZpbmFsaXplZFNjaGVtYXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgYW5kIGNyZWF0ZXMgYW4gQWp2IGluc3RhbmNlLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7QWp2fVxuICAgKi9cbiAgc3RhdGljIF9pbnN0YW50aWF0ZUFqdiAoKSB7XG4gICAgY29uc3QgYWp2ID0gYWRkRm9ybWF0cyhcbiAgICAgIG5ldyBBanYoe1xuICAgICAgICAvLyB3aXRob3V0IHRoaXMgbm90IG11Y2ggdmFsaWRhdGlvbiBhY3R1YWxseSBoYXBwZW5zXG4gICAgICAgIGFsbEVycm9yczogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBhZGQgY3VzdG9tIGtleXdvcmRzIHRvIGFqdi4gc2VlIHNjaGVtYS1rZXl3b3Jkcy5qc1xuICAgIF8uZm9yRWFjaChrZXl3b3JkcywgKGtleXdvcmQpID0+IHtcbiAgICAgIGFqdi5hZGRLZXl3b3JkKGtleXdvcmQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFqdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhpcyBpbnN0YW5jZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuXG4gICAqXG4gICAqIC0gUmVtb3ZlcyBhbGwgYWRkZWQgc2NoZW1hcyBmcm9tIHRoZSBgQWp2YCBpbnN0YW5jZVxuICAgKiAtIFJlc2V0cyB0aGUgbWFwIG9mIHtAbGluayBBcmdTcGVjIEFyZ1NwZWNzfVxuICAgKiAtIFJlc2V0cyB0aGUgbWFwIG9mIHJlZ2lzdGVyZWQgc2NoZW1hc1xuICAgKiAtIFNldHMgdGhlIHtAbGluayBBcHBpdW1TY2hlbWEuX2ZpbmFsaXplZCBfZmluYWxpemVkfSBmbGFnIHRvIGBmYWxzZWBcbiAgICpcbiAgICogSWYgeW91IG5lZWQgdG8gY2FsbCB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSBhZ2FpbiwgeW91J2xsIHdhbnQgdG8gY2FsbCB0aGlzIGZpcnN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlc2V0ICgpIHtcbiAgICBmb3IgKGNvbnN0IHNjaGVtYUlkIG9mIE9iamVjdC5rZXlzKHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMgPz8ge30pKSB7XG4gICAgICB0aGlzLl9hanYucmVtb3ZlU2NoZW1hKHNjaGVtYUlkKTtcbiAgICB9XG4gICAgdGhpcy5fYXJnU3BlY3MgPSBuZXcgUm9hY2hIb3RlbE1hcCgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzID0ge1xuICAgICAgW0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLFxuICAgICAgW1BMVUdJTl9UWVBFXTogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgdGhpcy5fZmluYWxpemVkU2NoZW1hcyA9IG51bGw7XG5cbiAgICAvLyBBanYgc2VlbXMgdG8gaGF2ZSBhbiBvdmVyLWVhZ2VyIGNhY2hlLCBzbyB3ZSBoYXZlIHRvIGR1bXAgdGhlIG9iamVjdCBlbnRpcmVseS5cbiAgICB0aGlzLl9hanYgPSBBcHBpdW1TY2hlbWEuX2luc3RhbnRpYXRlQWp2KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc2NoZW1hIGZyb20gYW4gZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBUaGlzIGlzIFwiZmFpbC1mYXN0XCIgaW4gdGhhdCB0aGUgc2NoZW1hIHdpbGwgaW1tZWRpYXRlbHkgYmUgdmFsaWRhdGVkIGFnYWluc3QgSlNPTiBzY2hlbWEgZHJhZnQtMDcgX29yXyB3aGF0ZXZlciB0aGUgdmFsdWUgb2YgdGhlIHNjaGVtYSdzIGAkc2NoZW1hYCBwcm9wIGlzLlxuICAgKlxuICAgKiBEb2VzIF9ub3RfIGFkZCB0aGUgc2NoZW1hIHRvIHRoZSBgYWp2YCBpbnN0YW5jZSAodGhpcyBpcyBkb25lIGJ5IHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9KS5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBVbmlxdWUgZXh0ZW5zaW9uIG5hbWUgZm9yIGB0eXBlYFxuICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hIC0gU2NoZW1hIG9iamVjdFxuICAgKiBAdGhyb3dzIHtTY2hlbWFOYW1lQ29uZmxpY3RFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBhbiBpbnZhbGlkXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVnaXN0ZXJTY2hlbWEgKGV4dFR5cGUsIGV4dE5hbWUsIHNjaGVtYSkge1xuICAgIGlmICghKGV4dFR5cGUgJiYgZXh0TmFtZSkgfHwgXy5pc1VuZGVmaW5lZChzY2hlbWEpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnRXhwZWN0ZWQgZXh0ZW5zaW9uIHR5cGUsIGV4dGVuc2lvbiBuYW1lLCBhbmQgYSBkZWZpbmVkIHNjaGVtYScsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIUFwcGl1bVNjaGVtYS5pc1N1cHBvcnRlZFNjaGVtYVR5cGUoc2NoZW1hKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3Ioc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZEV4dE5hbWUgPSBfLmtlYmFiQ2FzZShleHROYW1lKTtcbiAgICBpZiAodGhpcy5oYXNSZWdpc3RlcmVkU2NoZW1hKGV4dFR5cGUsIG5vcm1hbGl6ZWRFeHROYW1lKSkge1xuICAgICAgaWYgKHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmdldChub3JtYWxpemVkRXh0TmFtZSkgPT09IHNjaGVtYSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IoZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgfVxuICAgIHRoaXMuX2Fqdi52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXNbZXh0VHlwZV0uc2V0KG5vcm1hbGl6ZWRFeHROYW1lLCBzY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB7QGxpbmsgQXJnU3BlY30gZm9yIHRoZSBnaXZlbiBhcmd1bWVudCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENMSSBhcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtBcmdTcGVjfHVuZGVmaW5lZH0gQXJnU3BlYyBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmRcbiAgICovXG4gIGdldEFyZ1NwZWMgKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJnU3BlY3MuZ2V0KEFyZ1NwZWMudG9BcmcobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnN0YW5jZSBrbm93cyBhYm91dCBhbiBhcmd1bWVudCBieSB0aGUgZ2l2ZW4gYG5hbWVgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENMSSBhcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgc3VjaCBhbiB7QGxpbmsgQXJnU3BlY30gZXhpc3RzXG4gICAqL1xuICBoYXNBcmdTcGVjIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzLmhhcyhBcmdTcGVjLnRvQXJnKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYFJlY29yZGAgb2YgYXJndW1lbnQgXCJkZXN0XCIgc3RyaW5ncyB0byBkZWZhdWx0IHZhbHVlcy5cbiAgICpcbiAgICogVGhlIFwiZGVzdFwiIHN0cmluZyBpcyB0aGUgcHJvcGVydHkgbmFtZSBpbiBvYmplY3QgcmV0dXJuZWQgYnlcbiAgICogYGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyWydwYXJzZV9hcmdzJ11gLlxuICAgKiBAdGVtcGxhdGUge2Jvb2xlYW58dW5kZWZpbmVkfSBGbGF0dGVuZWRcbiAgICogQHBhcmFtIHtGbGF0dGVuZWR9IFtmbGF0dGVuPXRydWVdIC0gSWYgYHRydWVgLCBmbGF0dGVucyB0aGUgcmV0dXJuZWQgb2JqZWN0XG4gICAqIHVzaW5nIFwia2V5cGF0aFwiLXN0eWxlIGtleXMgb2YgdGhlIGZvcm1hdCBgPGV4dFR5cGU+LjxleHROYW1lPi48YXJnTmFtZT5gLlxuICAgKiBPdGhlcndpc2UsIHJldHVybnMgYSBuZXN0ZWQgb2JqZWN0IHVzaW5nIGBleHRUeXBlYCBhbmQgYGV4dE5hbWVgIGFzXG4gICAqIHByb3BlcnRpZXMuIEJhc2UgYXJndW1lbnRzIChzZXJ2ZXIgYXJndW1lbnRzKSBhcmUgYWx3YXlzIGF0IHRoZSB0b3AgbGV2ZWwuXG4gICAqIEByZXR1cm5zIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59XG4gICAqL1xuICBnZXREZWZhdWx0cyAoZmxhdHRlbiA9IC8qKiBAdHlwZSB7RmxhdHRlbmVkfSAqLyAodHJ1ZSkpIHtcbiAgICBpZiAoIXRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY2FsbGJhY2sgRGVmYXVsdFJlZHVjZXJcbiAgICAgKiBAcGFyYW0ge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn0gZGVmYXVsdHNcbiAgICAgKiBAcGFyYW0ge0FyZ1NwZWN9IGFyZ1NwZWNcbiAgICAgKiBAcmV0dXJucyB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fVxuICAgICAqL1xuICAgIC8qKiBAdHlwZSB7RGVmYXVsdFJlZHVjZXJ9ICovXG4gICAgY29uc3QgcmVkdWNlciA9IGZsYXR0ZW5cbiAgICAgID8gKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIGRlZmF1bHRzW2Rlc3RdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH1cbiAgICAgIDogKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIF8uc2V0KGRlZmF1bHRzLCBkZXN0LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH07XG5cbiAgICAvKiogQHR5cGUge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn0gKi9cbiAgICBjb25zdCByZXR2YWwgPSB7fTtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2FyZ1NwZWNzLnZhbHVlcygpXS5yZWR1Y2UocmVkdWNlciwgcmV0dmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZmxhdHRlbmVkIFJlY29yZCBvZiBkZWZhdWx0cyBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uIEtleXMgd2lsbFxuICAgKiBiZSBvZiBmb3JtYXQgYDxhcmdOYW1lPmAuXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsQXJnU3BlY0RlZmF1bHRWYWx1ZT59XG4gICAqL1xuICBnZXREZWZhdWx0c0ZvckV4dGVuc2lvbiAoZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIGlmICghdGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hRmluYWxpemF0aW9uRXJyb3IoKTtcbiAgICB9XG4gICAgY29uc3Qgc3BlY3MgPSBbLi4udGhpcy5fYXJnU3BlY3MudmFsdWVzKCldLmZpbHRlcihcbiAgICAgIChzcGVjKSA9PiBzcGVjLmV4dFR5cGUgPT09IGV4dFR5cGUgJiYgc3BlYy5leHROYW1lID09PSBleHROYW1lLFxuICAgICk7XG4gICAgcmV0dXJuIHNwZWNzLnJlZHVjZSgoZGVmYXVsdHMsIHtkZWZhdWx0VmFsdWUsIHJhd0Rlc3R9KSA9PiB7XG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0c1tyYXdEZXN0XSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9LCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbiBzY2hlbWEgaW50byBhbiBhcnJheSBvZiBgU2NoZW1hT2JqZWN0YHMgYW5kIGFzc29jaWF0ZWRcbiAgICoge0BsaW5rIEFyZ1NwZWMgQXJnU3BlY3N9LlxuICAgKlxuICAgKiBDb252ZXJ0cyBuZXN0ZWQgZXh0ZW5zaW9uIHNjaGVtYXMgdG8ga2V5cyBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIHR5cGUgYW5kXG4gICAqIG5hbWUuIFVzZWQgd2hlbiB0cmFuc2xhdGluZyB0byBgYXJncGFyc2VgIG9wdGlvbnMgb3IgZ2V0dGluZyB0aGUgbGlzdCBvZlxuICAgKiBkZWZhdWx0IHZhbHVlcyAoc2VlIHtAbGluayBBcHBpdW1TY2hlbWEuZ2V0RGVmYXVsdHN9KSBmb3IgQ0xJIG9yIG90aGVyd2lzZS5cbiAgICpcbiAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBpbnRlcm1lZGlhdGUgcmVwcnNlbnRhdGlvbiB1c2VkIGJ5IGBjbGktYXJnc2BcbiAgICogbW9kdWxlJ3MgYHRvUGFyc2VyQXJnc2AsIHdoaWNoIGNvbnZlcnRzIHRoZSBmaW5hbGl6ZWQgc2NoZW1hIHRvIHBhcmFtZXRlcnNcbiAgICogdXNlZCBieSBgYXJncGFyc2VgLlxuICAgKiBAdGhyb3dzIElmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9IGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICAgKiBAcmV0dXJucyB7RmxhdHRlbmVkU2NoZW1hfVxuICAgKi9cbiAgZmxhdHRlbiAoKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5nZXRTY2hlbWEoKTtcblxuICAgIC8qKiBAdHlwZSB7IHtwcm9wZXJ0aWVzOiBTY2hlbWFPYmplY3QsIHByZWZpeDogc3RyaW5nW119W10gfSAqL1xuICAgIGNvbnN0IHN0YWNrID0gW3twcm9wZXJ0aWVzOiBzY2hlbWEucHJvcGVydGllcywgcHJlZml4OiBbXX1dO1xuICAgIC8qKiBAdHlwZSB7RmxhdHRlbmVkU2NoZW1hfSAqL1xuICAgIGNvbnN0IGZsYXR0ZW5lZCA9IFtdO1xuXG4gICAgLy8gdGhpcyBiaXQgaXMgYSByZWN1cnNpdmUgYWxnb3JpdGhtIHJld3JpdHRlbiBhcyBhIGZvciBsb29wLlxuICAgIC8vIHdoZW4gd2UgZmluZCBzb21ldGhpbmcgd2Ugd2FudCB0byB0cmF2ZXJzZSwgd2UgYWRkIGl0IHRvIGBzdGFja2BcbiAgICBmb3IgKGNvbnN0IHtwcm9wZXJ0aWVzLCBwcmVmaXh9IG9mIHN0YWNrKSB7XG4gICAgICBjb25zdCBwYWlycyA9IF8udG9QYWlycyhwcm9wZXJ0aWVzKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IHtwcm9wZXJ0aWVzLCAkcmVmfSA9IHZhbHVlO1xuICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIHByZWZpeDoga2V5ID09PSBTRVJWRVJfUFJPUF9OQU1FID8gW10gOiBbLi4ucHJlZml4LCBrZXldLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCRyZWYpIHtcbiAgICAgICAgICBsZXQgcmVmU2NoZW1hO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZWZTY2hlbWEgPSB0aGlzLmdldFNjaGVtYSgkcmVmKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBpZiBhbiBleHRlbnNpb24gc2NoZW1hIHN1cHBsaWVzIGEgJHJlZiB0byBhIG5vbi1leGlzdGVudCBzY2hlbWFcbiAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IoJHJlZik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHtub3JtYWxpemVkRXh0TmFtZX0gPVxuICAgICAgICAgICAgQXJnU3BlYy5leHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCgkcmVmKTtcbiAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWRFeHROYW1lKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBleHRlbnNpb24gbmFtZSBmcm9tIHNjaGVtYSBJRCAkeyRyZWZ9LiBUaGlzIGlzIGEgYnVnLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHJlZlNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJlZml4OiBbLi4ucHJlZml4LCBrZXksIG5vcm1hbGl6ZWRFeHROYW1lXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT09IERSSVZFUl9UWVBFICYmIGtleSAhPT0gUExVR0lOX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBbZXh0VHlwZSwgZXh0TmFtZV0gPSBwcmVmaXg7XG4gICAgICAgICAgY29uc3QgYXJnU3BlYyA9IHRoaXMuZ2V0QXJnU3BlYyhcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIC8qKiBAdHlwZSB7RXh0ZW5zaW9uVHlwZX0gKi8gKGV4dFR5cGUpLFxuICAgICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghYXJnU3BlYykge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICAgICAgYFVua25vd24gYXJndW1lbnQgd2l0aCBrZXkgJHtrZXl9LCBleHRUeXBlICR7ZXh0VHlwZX0gYW5kIGV4dE5hbWUgJHtleHROYW1lfS4gVGhpcyBpcyBhIGJ1Zy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmxhdHRlbmVkLnB1c2goe3NjaGVtYTogXy5jbG9uZURlZXAodmFsdWUpLCBhcmdTcGVjfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc2NoZW1hIGl0c2VsZlxuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRFxuICAgKiBAdGhyb3dzIElmIHRoZSBzY2hlbWEgaGFzIG5vdCB5ZXQgYmVlbiBmaW5hbGl6ZWRcbiAgICogQHJldHVybnMge1NjaGVtYU9iamVjdH1cbiAgICovXG4gIGdldFNjaGVtYSAocmVmID0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtTY2hlbWFPYmplY3R9ICovICh0aGlzLl9nZXRWYWxpZGF0b3IocmVmKS5zY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBzY2hlbWEgdmFsaWRhdG9yIGZ1bmN0aW9uIGZyb20gQWp2XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaWRdIC0gU2NoZW1hIElEXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLlZhbGlkYXRlRnVuY3Rpb259XG4gICAqL1xuICBfZ2V0VmFsaWRhdG9yIChpZCA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fYWp2LmdldFNjaGVtYShpZCk7XG4gICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgIGlmIChpZCA9PT0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhbiBvYmplY3QsIHZhbGlkYXRlcyBpdCBhZ2FpbnN0IHRoZSBBcHBpdW0gY29uZmlnIHNjaGVtYS5cbiAgICogSWYgZXJyb3JzIG9jY3VyLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBub24tZW1wdHkuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSB2YWx1ZSAoaG9wZWZ1bGx5IGFuIG9iamVjdCkgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRCBvciByZWYuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge2ltcG9ydCgnYWp2JykuRXJyb3JPYmplY3RbXX0gQXJyYXkgb2YgZXJyb3JzLCBpZiBhbnkuXG4gICAqL1xuICB2YWxpZGF0ZSAodmFsdWUsIHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fZ2V0VmFsaWRhdG9yKHJlZik7XG4gICAgcmV0dXJuICF2YWxpZGF0b3IodmFsdWUpICYmIF8uaXNBcnJheSh2YWxpZGF0b3IuZXJyb3JzKVxuICAgICAgPyBbLi4udmFsaWRhdG9yLmVycm9yc11cbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYGZpbGVuYW1lYCdzIGZpbGUgZXh0ZW5zaW9uIGlzIGFsbG93ZWQgKGluIHtAbGluayBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TfSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIChmaWxlbmFtZSkge1xuICAgIHJldHVybiBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TLmhhcyhwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBgc2NoZW1hYCBpcyBhIHBsYWluIG9iamVjdCB3aXRoIGEgbm9uLXRydWUgYCRhc3luY2AgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWEgLSBTY2hlbWEgdG8gY2hlY2tcbiAgICogQHJldHVybnMge3NjaGVtYSBpcyBTY2hlbWFPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgaXNTdXBwb3J0ZWRTY2hlbWFUeXBlIChzY2hlbWEpIHtcbiAgICByZXR1cm4gXy5pc1BsYWluT2JqZWN0KHNjaGVtYSkgJiYgc2NoZW1hLiRhc3luYyAhPT0gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZSBoYXMgbm90IHlldCBiZWVuIGZpbmFsaXplZCwgYnV0XG4gKiB0aGUgbWV0aG9kIGNhbGxlZCByZXF1aXJlcyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYUZpbmFsaXphdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfRklOQUxJWkFUSU9OJztcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoJ1NjaGVtYSBub3QgeWV0IGZpbmFsaXplZDsgYGZpbmFsaXplKClgIG11c3QgYmUgY2FsbGVkIGZpcnN0LicpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBcInVuaXF1ZVwiIHNjaGVtYSBJRCBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWEgSUQuXG4gKlxuICogVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgY2F1c2VkIGJ5IGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgc2NoZW1hIHR3aWNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9OQU1FX0NPTkZMSUNUJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBzdXBlcihcbiAgICAgIGBOYW1lIGZvciAke2V4dFR5cGV9IHNjaGVtYSBcIiR7ZXh0TmFtZX1cIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWFgLFxuICAgICk7XG4gICAgdGhpcy5kYXRhID0ge2V4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgSUQgd2FzIGV4cGVjdGVkLCBidXQgaXQgZG9lc24ndCBleGlzdCBvbiB0aGUge0BsaW5rIEFqdn0gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IgZXh0ZW5kcyBSZWZlcmVuY2VFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTktOT1dOX1NDSEVNQSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7c2NoZW1hSWQ6IHN0cmluZ30+fVxuICAgKi9cbiAgZGF0YTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUlkXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hSWQpIHtcbiAgICBzdXBlcihgVW5rbm93biBzY2hlbWE6IFwiJHtzY2hlbWFJZH1cImApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWFJZH07XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgYnV0IGl0J3Mgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZS5cbiAqXG4gKiBcIlZhbGlkXCIgc2NoZW1hcyB3aGljaCBhcmUgdW5zdXBwb3J0ZWQgaW5jbHVkZSBib29sZWFuIHNjaGVtYXMgYW5kIGFzeW5jIHNjaGVtYXNcbiAqIChoYXZpbmcgYSBgdHJ1ZWAgYCRhc3luY2AgcHJvcGVydHkpLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvciBleHRlbmRzIFR5cGVFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTlNVUFBPUlRFRF9TQ0hFTUEnO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8e3NjaGVtYTogYW55LCBleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWFcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy84Mjc3XG4gICAgc3VwZXIoXG4gICAgICAoKCkgPT4ge1xuICAgICAgICBsZXQgbXNnID0gYFVuc3VwcG9ydGVkIHNjaGVtYSBmcm9tICR7ZXh0VHlwZX0gXCIke2V4dE5hbWV9XCI6YDtcbiAgICAgICAgaWYgKF8uaXNCb29sZWFuKHNjaGVtYSkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgY2Fubm90IGJlIGEgYm9vbGVhbmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChzY2hlbWEpKSB7XG4gICAgICAgICAgaWYgKHNjaGVtYS4kYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBjYW5ub3QgYmUgYW4gYXN5bmMgc2NoZW1hYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYHNjaGVtYSBJUyBzdXBwb3J0ZWQ7IHRoaXMgZXJyb3Igc2hvdWxkIG5vdCBiZSB0aHJvd24gKHRoaXMgaXMgYSBidWcpLiB2YWx1ZSBvZiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0IHdpdGhvdXQgYSB0cnVlIFwiJGFzeW5jXCIgcHJvcGVydHlgO1xuICAgICAgfSkoKSxcbiAgICApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbmNvbnN0IGFwcGl1bVNjaGVtYSA9IEFwcGl1bVNjaGVtYS5jcmVhdGUoKTtcblxuZXhwb3J0IGNvbnN0IHtcbiAgcmVnaXN0ZXJTY2hlbWEsXG4gIGdldEFsbEFyZ1NwZWNzLFxuICBnZXRBcmdTcGVjLFxuICBoYXNBcmdTcGVjLFxuICBpc0ZpbmFsaXplZCxcbiAgZmluYWxpemU6IGZpbmFsaXplU2NoZW1hLFxuICByZXNldDogcmVzZXRTY2hlbWEsXG4gIHZhbGlkYXRlLFxuICBnZXRTY2hlbWEsXG4gIGZsYXR0ZW46IGZsYXR0ZW5TY2hlbWEsXG4gIGdldERlZmF1bHRzOiBnZXREZWZhdWx0c0ZvclNjaGVtYSxcbiAgZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24sXG59ID0gYXBwaXVtU2NoZW1hO1xuZXhwb3J0IGNvbnN0IHtpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9ufSA9IEFwcGl1bVNjaGVtYTtcblxuLyoqXG4gKiBBcHBpdW0gb25seSBzdXBwb3J0cyBzY2hlbWFzIHRoYXQgYXJlIHBsYWluIG9iamVjdHM7IG5vdCBhcnJheXMuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYnKS5TY2hlbWFPYmplY3QgJiB7W2tleTogbnVtYmVyXTogbmV2ZXJ9fSBTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2V4dGVuc2lvbi9tYW5pZmVzdCcpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuXG4vKipcbiAqIEFuIG9iamVjdCBoYXZpbmcgcHJvcGVydHkgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIFN0cmljdFByb3BcbiAqIEBwcm9wZXJ0eSB7ZmFsc2V9IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXG4gKi9cblxuLyoqXG4gKiBBIHtAbGluayBTY2hlbWFPYmplY3R9IHdpdGggYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIHtTY2hlbWFPYmplY3QgJiBTdHJpY3RQcm9wfSBTdHJpY3RTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEEgbGlzdCBvZiBzY2hlbWFzIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHtAbGluayBBcmdTcGVjfSBvYmplY3RzLlxuICpcbiAqIEludGVybWVkaWF0ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIHdoZW4gY29udmVydGluZyB0aGUgZW50aXJlIHNjaGVtYSBkb3duIHRvIENMSSBhcmd1bWVudHMuXG4gKiBAdHlwZWRlZiB7IHtzY2hlbWE6IFNjaGVtYU9iamVjdCwgYXJnU3BlYzogQXJnU3BlY31bXSB9IEZsYXR0ZW5lZFNjaGVtYVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0FyZ1NwZWNbJ2RlZmF1bHRWYWx1ZSddfSBBcmdTcGVjRGVmYXVsdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBlLmcuIGB7ZHJpdmVyOiB7Zm9vOiAnYmFyJ319YCB3aGVyZSBgZm9vYCBpcyB0aGUgYXJnIG5hbWUgYW5kIGBiYXJgIGlzIHRoZSBkZWZhdWx0IHZhbHVlLlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsUmVjb3JkPHN0cmluZyxBcmdTcGVjRGVmYXVsdFZhbHVlPj59IE5lc3RlZEFyZ1NwZWNEZWZhdWx0VmFsdWVcbiAqL1xuXG4vKipcbiAqIEhlbHBlciB0eXBlIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHtAbGluayBBcHBpdW1TY2hlbWEuZ2V0RGVmYXVsdHN9XG4gKiBAdGVtcGxhdGUge2Jvb2xlYW58dW5kZWZpbmVkfSBGbGF0dGVuZWRcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLEZsYXR0ZW5lZCBleHRlbmRzIHRydWUgPyBBcmdTcGVjRGVmYXVsdFZhbHVlIDogQXJnU3BlY0RlZmF1bHRWYWx1ZSB8IE5lc3RlZEFyZ1NwZWNEZWZhdWx0VmFsdWU+fSBEZWZhdWx0VmFsdWVzXG4gKi9cbiJdfQ==
452
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEvc2NoZW1hLmpzIl0sIm5hbWVzIjpbIlJvYWNoSG90ZWxNYXAiLCJNYXAiLCJzZXQiLCJrZXkiLCJ2YWx1ZSIsImhhcyIsIkVycm9yIiwiZGVsZXRlIiwiY2xlYXIiLCJBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TIiwiU2V0IiwiQXBwaXVtU2NoZW1hIiwiX2FyZ1NwZWNzIiwiX3JlZ2lzdGVyZWRTY2hlbWFzIiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsIl9hanYiLCJfaW5zdGFuY2UiLCJfZmluYWxpemVkU2NoZW1hcyIsImNvbnN0cnVjdG9yIiwiX2luc3RhbnRpYXRlQWp2IiwiY3JlYXRlIiwiaW5zdGFuY2UiLCJfIiwiYmluZEFsbCIsImhhc1JlZ2lzdGVyZWRTY2hlbWEiLCJleHRUeXBlIiwiZXh0TmFtZSIsImlzRmluYWxpemVkIiwiQm9vbGVhbiIsImdldEFsbEFyZ1NwZWNzIiwiZmluYWxpemUiLCJhanYiLCJiYXNlU2NoZW1hIiwiY2xvbmVEZWVwIiwiQXBwaXVtQ29uZmlnSnNvblNjaGVtYSIsImFkZEFyZ1NwZWNzIiwic2NoZW1hIiwicHJvcE5hbWUiLCJwcm9wU2NoZW1hIiwiT2JqZWN0IiwiZW50cmllcyIsImFyZ1NwZWMiLCJBcmdTcGVjIiwiZGVzdCIsImFwcGl1bUNsaURlc3QiLCJkZWZhdWx0VmFsdWUiLCJkZWZhdWx0IiwiYXJnIiwib21pdCIsInByb3BlcnRpZXMiLCJzZXJ2ZXIiLCJmaW5hbGl6ZWRTY2hlbWFzIiwiZmluYWxTY2hlbWEiLCJyZWR1Y2UiLCJleHRlbnNpb25TY2hlbWFzIiwiZm9yRWFjaCIsIiRyZWYiLCJ0b1NjaGVtYUJhc2VSZWYiLCIkaWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsIiRjb21tZW50IiwidmFsaWRhdGVTY2hlbWEiLCJhZGRTY2hlbWEiLCJBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCIsImZyZWV6ZSIsIkFqdiIsImFsbEVycm9ycyIsImtleXdvcmRzIiwia2V5d29yZCIsImFkZEtleXdvcmQiLCJyZXNldCIsInNjaGVtYUlkIiwia2V5cyIsInJlbW92ZVNjaGVtYSIsInJlZ2lzdGVyU2NoZW1hIiwiaXNVbmRlZmluZWQiLCJUeXBlRXJyb3IiLCJpc1N1cHBvcnRlZFNjaGVtYVR5cGUiLCJTY2hlbWFVbnN1cHBvcnRlZFNjaGVtYUVycm9yIiwibm9ybWFsaXplZEV4dE5hbWUiLCJrZWJhYkNhc2UiLCJnZXQiLCJTY2hlbWFOYW1lQ29uZmxpY3RFcnJvciIsImdldEFyZ1NwZWMiLCJuYW1lIiwidG9BcmciLCJoYXNBcmdTcGVjIiwiZ2V0RGVmYXVsdHMiLCJmbGF0dGVuIiwiU2NoZW1hRmluYWxpemF0aW9uRXJyb3IiLCJyZWR1Y2VyIiwiZGVmYXVsdHMiLCJyZXR2YWwiLCJ2YWx1ZXMiLCJnZXREZWZhdWx0c0ZvckV4dGVuc2lvbiIsInNwZWNzIiwiZmlsdGVyIiwic3BlYyIsInJhd0Rlc3QiLCJnZXRTY2hlbWEiLCJzdGFjayIsInByZWZpeCIsImZsYXR0ZW5lZCIsInBhaXJzIiwidG9QYWlycyIsInB1c2giLCJTRVJWRVJfUFJPUF9OQU1FIiwicmVmU2NoZW1hIiwiZXJyIiwiU2NoZW1hVW5rbm93blNjaGVtYUVycm9yIiwiZXh0ZW5zaW9uSW5mb0Zyb21Sb290U2NoZW1hSWQiLCJSZWZlcmVuY2VFcnJvciIsInJlZiIsIl9nZXRWYWxpZGF0b3IiLCJpZCIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwiaXNBcnJheSIsImVycm9ycyIsImlzQWxsb3dlZFNjaGVtYUZpbGVFeHRlbnNpb24iLCJmaWxlbmFtZSIsInBhdGgiLCJleHRuYW1lIiwiaXNQbGFpbk9iamVjdCIsIiRhc3luYyIsImNvZGUiLCJkYXRhIiwibXNnIiwiaXNCb29sZWFuIiwiSlNPTiIsInN0cmluZ2lmeSIsImFwcGl1bVNjaGVtYSIsImZpbmFsaXplU2NoZW1hIiwicmVzZXRTY2hlbWEiLCJmbGF0dGVuU2NoZW1hIiwiZ2V0RGVmYXVsdHNGb3JTY2hlbWEiXSwibWFwcGluZ3MiOiI7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NUQsTUFBTXlHLFlBQVksR0FBR3pILFlBQVksQ0FBQ1UsTUFBYixFQUFyQjtBQUVPLE1BQU07QUFDWHNELEVBQUFBLGNBRFc7QUFFWDdDLEVBQUFBLGNBRlc7QUFHWHNELEVBQUFBLFVBSFc7QUFJWEcsRUFBQUEsVUFKVztBQUtYM0QsRUFBQUEsV0FMVztBQU1YRyxFQUFBQSxRQUFRLEVBQUVzRyxjQU5DO0FBT1g5RCxFQUFBQSxLQUFLLEVBQUUrRCxXQVBJO0FBUVhqQixFQUFBQSxRQVJXO0FBU1hqQixFQUFBQSxTQVRXO0FBVVhYLEVBQUFBLE9BQU8sRUFBRThDLGFBVkU7QUFXWC9DLEVBQUFBLFdBQVcsRUFBRWdELG9CQVhGO0FBWVh6QyxFQUFBQTtBQVpXLElBYVRxQyxZQWJHOzs7Ozs7Ozs7Ozs7O0FBY0EsTUFBTTtBQUFDWixFQUFBQTtBQUFELElBQWlDN0csWUFBdkMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBBanYgZnJvbSAnYWp2JztcbmltcG9ydCBhZGRGb3JtYXRzIGZyb20gJ2Fqdi1mb3JtYXRzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IERSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBpdW1Db25maWdKc29uU2NoZW1hIH0gZnJvbSAnQGFwcGl1bS9zY2hlbWEnO1xuaW1wb3J0IHsgQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQsIEFyZ1NwZWMsIFNFUlZFUl9QUk9QX05BTUUgfSBmcm9tICcuL2FyZy1zcGVjJztcbmltcG9ydCB7IGtleXdvcmRzIH0gZnJvbSAnLi9rZXl3b3Jkcyc7XG5cbi8qKlxuICogS2V5L3ZhbHVlIHBhaXJzIGdvIGluLi4uIGJ1dCB0aGV5IGRvbid0IGNvbWUgb3V0LlxuICpcbiAqIEB0ZW1wbGF0ZSBLLFZcbiAqIEBleHRlbmRzIHtNYXA8SyxWPn1cbiAqL1xuZXhwb3J0IGNsYXNzIFJvYWNoSG90ZWxNYXAgZXh0ZW5kcyBNYXAge1xuICAvKipcbiAgICogQHBhcmFtIHtLfSBrZXlcbiAgICogQHBhcmFtIHtWfSB2YWx1ZVxuICAgKi9cbiAgc2V0IChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuaGFzKGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtrZXl9IGlzIGFscmVhZHkgc2V0YCk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5zZXQoa2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtLfSBrZXlcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBkZWxldGUgKGtleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjbGVhciBSb2FjaEhvdGVsTWFwYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRlbnNpb25zIHRoYXQgYW4gZXh0ZW5zaW9uIHNjaGVtYSBmaWxlIGNhbiBoYXZlLlxuICovXG5leHBvcnQgY29uc3QgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyA9IG5ldyBTZXQoWycuanNvbicsICcuanMnLCAnLmNqcyddKTtcblxuLyoqXG4gKiBBIHdyYXBwZXIgYXJvdW5kIEFqdiBhbmQgc2NoZW1hLXJlbGF0ZWQgZnVuY3Rpb25zLlxuICpcbiAqIFNob3VsZCBoYXZlIGJlZW4gbmFtZWQgSGlnaGxhbmRlciwgYmVjYXVzZSBfdGhlcmUgY2FuIG9ubHkgYmUgb25lX1xuICovXG5jbGFzcyBBcHBpdW1TY2hlbWEge1xuICAvKipcbiAgICogQSBtYXBwaW5nIG9mIHVuaXF1ZSBhcmd1bWVudCBJRHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY31zLlxuICAgKlxuICAgKiBBbiBcImFyZ3VtZW50XCIgaXMgYSBDTEkgYXJndW1lbnQgb3IgYSBjb25maWcgcHJvcGVydHkuXG4gICAqXG4gICAqIFVzZWQgdG8gcHJvdmlkZSBlYXN5IGxvb2t1cHMgb2YgYXJndW1lbnQgbWV0YWRhdGEgd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucyBvZiB0aG9zZSBhcmd1bWVudHMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSb2FjaEhvdGVsTWFwPHN0cmluZyxBcmdTcGVjPn1cbiAgICovXG4gIF9hcmdTcGVjcyA9IG5ldyBSb2FjaEhvdGVsTWFwKCk7XG5cbiAgLyoqXG4gICAqIEEgbWFwIG9mIGV4dGVuc2lvbiB0eXBlcyB0byBleHRlbnNpb24gbmFtZXMgdG8gc2NoZW1hIG9iamVjdHMuXG4gICAqXG4gICAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG5hbWluZyBjb25mbGljdHMuIFRoZSBzY2hlbWFzXG4gICAqIGFyZSBzdG9yZWQgaGVyZSBpbiBtZW1vcnkgdW50aWwgdGhlIGluc3RhbmNlIGlzIF9maW5hbGl6ZWRfLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UmVjb3JkPEV4dGVuc2lvblR5cGUsTWFwPHN0cmluZyxTY2hlbWFPYmplY3Q+Pn1cbiAgICovXG4gIF9yZWdpc3RlcmVkU2NoZW1hcyA9IHtbRFJJVkVSX1RZUEVdOiBuZXcgTWFwKCksIFtQTFVHSU5fVFlQRV06IG5ldyBNYXAoKX07XG5cbiAgLyoqXG4gICAqIEFqdiBpbnN0YW5jZVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7QWp2fVxuICAgKi9cbiAgX2FqdjtcblxuICAvKipcbiAgICogU2luZ2xldG9uIGluc3RhbmNlLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7QXBwaXVtU2NoZW1hfVxuICAgKi9cbiAgc3RhdGljIF9pbnN0YW5jZTtcblxuICAvKipcbiAgICogTG9va3VwIG9mIHNjaGVtYSBJRHMgdG8gZmluYWxpemVkIHNjaGVtYXMuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgaW5jbHVkZSByZWZlcmVuY2VzLCBidXQgcmF0aGVyIHRoZSByb290IHNjaGVtYXMgdGhlbXNlbHZlcy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pj99XG4gICAqL1xuICBfZmluYWxpemVkU2NoZW1hcyA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIEFqdiwgYWRkcyBzdGFuZGFyZCBmb3JtYXRzIGFuZCBvdXIgY3VzdG9tIGtleXdvcmRzLlxuICAgKiBAc2VlIGh0dHBzOi8vbnBtLmltL2Fqdi1mb3JtYXRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fYWp2ID0gQXBwaXVtU2NoZW1hLl9pbnN0YW50aWF0ZUFqdigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvcnkgZnVuY3Rpb24gZm9yIHtAbGluayBBcHBpdW1TY2hlbWF9IGluc3RhbmNlcy5cbiAgICpcbiAgICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBpZiBvbmUgZXhpc3RzLCBvdGhlcndpc2UgY3JlYXRlcyBhIG5ldyBvbmUuXG4gICAqIEJpbmRzIHB1YmxpYyBtZXRob2RzIHRvIHRoZSBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge0FwcGl1bVNjaGVtYX1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUgKCkge1xuICAgIGlmICghQXBwaXVtU2NoZW1hLl9pbnN0YW5jZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgQXBwaXVtU2NoZW1hKCk7XG4gICAgICBBcHBpdW1TY2hlbWEuX2luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICBfLmJpbmRBbGwoaW5zdGFuY2UsIFtcbiAgICAgICAgJ2ZpbmFsaXplJyxcbiAgICAgICAgJ2ZsYXR0ZW4nLFxuICAgICAgICAnZ2V0QWxsQXJnU3BlY3MnLFxuICAgICAgICAnZ2V0QXJnU3BlYycsXG4gICAgICAgICdnZXREZWZhdWx0cycsXG4gICAgICAgICdnZXREZWZhdWx0c0ZvckV4dGVuc2lvbicsXG4gICAgICAgICdnZXRTY2hlbWEnLFxuICAgICAgICAnaGFzQXJnU3BlYycsXG4gICAgICAgICdpc0ZpbmFsaXplZCcsXG4gICAgICAgICdyZWdpc3RlclNjaGVtYScsXG4gICAgICAgICdoYXNSZWdpc3RlcmVkU2NoZW1hJyxcbiAgICAgICAgJ3Jlc2V0JyxcbiAgICAgICAgJ3ZhbGlkYXRlJyxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHJldHVybiBBcHBpdW1TY2hlbWEuX2luc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgc2NoZW1hIGhhcyBiZWVuIHJlZ2lzdGVyZWQgdXNpbmcgZ2l2ZW4gZXh0ZW5zaW9uIHR5cGUgYW5kIG5hbWUuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgZGVwZW5kIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBfZmluYWxpemVkXy5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiByZWdpc3RlcmVkXG4gICAqL1xuICBoYXNSZWdpc3RlcmVkU2NoZW1hIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmhhcyhleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemUgZmluYWxpemV9IGhhcyBiZWVuIGNhbGxlZFxuICAgKiBzdWNjZXNzZnVsbHkgYW5kIHtAbGluayBBcHBpdW1TY2hlbWEucmVzZXQgcmVzZXR9IGhhcyBub3QgYmVlbiBjYWxsZWQgc2luY2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBJZiBmaW5hbGl6ZWRcbiAgICovXG4gIGlzRmluYWxpemVkICgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9maW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIGdldEFsbEFyZ1NwZWNzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJnU3BlY3M7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGlzIHdoZW4gbm8gbW9yZSBzY2hlbWFzIHdpbGwgYmUgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogVGhpcyBkb2VzIHRocmVlIHRoaW5nczpcbiAgICogMS4gSXQgY29tYmluZXMgYWxsIHNjaGVtYXMgZnJvbSBleHRlbnNpb25zIGludG8gdGhlIEFwcGl1bSBjb25maWcgc2NoZW1hLFxuICAgKiAgICB0aGVuIGFkZHMgdGhlIHJlc3VsdCB0byB0aGUgYEFqdmAgaW5zdGFuY2UuXG4gICAqIDIuIEl0IGFkZHMgc2NoZW1hcyBmb3IgX2VhY2hfIGFyZ3VtZW50L3Byb3BlcnR5IGZvciB2YWxpZGF0aW9uIHB1cnBvc2VzLlxuICAgKiAgICBUaGUgQ0xJIHVzZXMgdGhlc2Ugc2NoZW1hcyB0byB2YWxpZGF0ZSBzcGVjaWZpYyBhcmd1bWVudHMuXG4gICAqIDMuIFRoZSBzY2hlbWFzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCBKU09OIHNjaGVtYSBkcmFmdC0wNyAod2hpY2ggaXMgdGhlXG4gICAqICAgIG9ubHkgb25lIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUpXG4gICAqXG4gICAqIEFueSBtZXRob2QgaW4gdGhpcyBpbnN0YW5jZSB0aGF0IG5lZWRzIHRvIGludGVyYWN0IHdpdGggdGhlIGBBanZgIGluc3RhbmNlXG4gICAqIHdpbGwgdGhyb3cgaWYgdGhpcyBtZXRob2QgaGFzIG5vdCBiZWVuIGNhbGxlZC5cbiAgICpcbiAgICogSWYgdGhlIGluc3RhbmNlIGhhcyBhbHJlYWR5IGJlZW4gZmluYWxpemVkLCB0aGlzIGlzIGEgbm8tb3AuXG4gICAqIEBwdWJsaWNcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBzY2hlbWEgaXMgbm90IHZhbGlkXG4gICAqIEByZXR1cm5zIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD4+fSBSZWNvcmQgb2Ygc2NoZW1hIElEcyB0byBmdWxsIHNjaGVtYSBvYmplY3RzXG4gICAqL1xuICBmaW5hbGl6ZSAoKSB7XG4gICAgaWYgKHRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8dHlwZW9mIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXM+fSAqLyAoXG4gICAgICAgIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYWp2ID0gdGhpcy5fYWp2O1xuXG4gICAgLy8gQWp2IHdpbGwgX211dGF0ZV8gdGhlIHNjaGVtYSwgc28gd2UgbmVlZCB0byBjbG9uZSBpdC5cbiAgICBjb25zdCBiYXNlU2NoZW1hID0gXy5jbG9uZURlZXAoQXBwaXVtQ29uZmlnSnNvblNjaGVtYSk7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2NoZW1hT2JqZWN0fSBzY2hlbWFcbiAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV1cbiAgICAgKi9cbiAgICBjb25zdCBhZGRBcmdTcGVjcyA9IChzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWUpID0+IHtcbiAgICAgIGZvciAobGV0IFtwcm9wTmFtZSwgcHJvcFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgICAgICBjb25zdCBhcmdTcGVjID0gQXJnU3BlYy5jcmVhdGUocHJvcE5hbWUsIHtcbiAgICAgICAgICBkZXN0OiBwcm9wU2NoZW1hLmFwcGl1bUNsaURlc3QsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBwcm9wU2NoZW1hLmRlZmF1bHQsXG4gICAgICAgICAgZXh0VHlwZSxcbiAgICAgICAgICBleHROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qge2FyZ30gPSBhcmdTcGVjO1xuICAgICAgICB0aGlzLl9hcmdTcGVjcy5zZXQoYXJnLCBhcmdTcGVjKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWRkQXJnU3BlY3MoXG4gICAgICBfLm9taXQoYmFzZVNjaGVtYS5wcm9wZXJ0aWVzLnNlcnZlci5wcm9wZXJ0aWVzLCBbXG4gICAgICAgIERSSVZFUl9UWVBFLFxuICAgICAgICBQTFVHSU5fVFlQRSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+fVxuICAgICAqL1xuICAgIGNvbnN0IGZpbmFsaXplZFNjaGVtYXMgPSB7fTtcblxuICAgIGNvbnN0IGZpbmFsU2NoZW1hID0gXy5yZWR1Y2UoXG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hcyxcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHt0eXBlb2YgYmFzZVNjaGVtYX0gYmFzZVNjaGVtYVxuICAgICAgICogQHBhcmFtIHtNYXA8c3RyaW5nLFNjaGVtYU9iamVjdD59IGV4dGVuc2lvblNjaGVtYXNcbiAgICAgICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgICAgICovXG4gICAgICAoYmFzZVNjaGVtYSwgZXh0ZW5zaW9uU2NoZW1hcywgZXh0VHlwZSkgPT4ge1xuICAgICAgICBleHRlbnNpb25TY2hlbWFzLmZvckVhY2goKHNjaGVtYSwgZXh0TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0ICRyZWYgPSBBcmdTcGVjLnRvU2NoZW1hQmFzZVJlZihleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBzY2hlbWEuJGlkID0gJHJlZjtcbiAgICAgICAgICBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTsgLy8gdGhpcyBtYWtlcyBgc2NoZW1hYCBiZWNvbWUgYSBgU3RyaWN0U2NoZW1hT2JqZWN0YFxuICAgICAgICAgIGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllc1tleHRUeXBlXS5wcm9wZXJ0aWVzW2V4dE5hbWVdID1cbiAgICAgICAgICAgIHskcmVmLCAkY29tbWVudDogZXh0TmFtZX07XG4gICAgICAgICAgYWp2LnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgICAgYWRkQXJnU3BlY3Moc2NoZW1hLnByb3BlcnRpZXMsIGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgICAgICAgIGFqdi5hZGRTY2hlbWEoc2NoZW1hLCAkcmVmKTtcbiAgICAgICAgICBmaW5hbGl6ZWRTY2hlbWFzWyRyZWZdID0gLyoqIEB0eXBlIHtTdHJpY3RTY2hlbWFPYmplY3R9ICovIChzY2hlbWEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJhc2VTY2hlbWE7XG4gICAgICB9LFxuICAgICAgYmFzZVNjaGVtYSxcbiAgICApO1xuXG4gICAgYWp2LmFkZFNjaGVtYShmaW5hbFNjaGVtYSwgQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpO1xuICAgIGZpbmFsaXplZFNjaGVtYXNbQVBQSVVNX0NPTkZJR19TQ0hFTUFfSURdID0gZmluYWxTY2hlbWE7XG4gICAgYWp2LnZhbGlkYXRlU2NoZW1hKGZpbmFsU2NoZW1hLCB0cnVlKTtcblxuICAgIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMgPSBmaW5hbGl6ZWRTY2hlbWFzO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKGZpbmFsaXplZFNjaGVtYXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgYW5kIGNyZWF0ZXMgYW4gQWp2IGluc3RhbmNlLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7QWp2fVxuICAgKi9cbiAgc3RhdGljIF9pbnN0YW50aWF0ZUFqdiAoKSB7XG4gICAgY29uc3QgYWp2ID0gYWRkRm9ybWF0cyhcbiAgICAgIG5ldyBBanYoe1xuICAgICAgICAvLyB3aXRob3V0IHRoaXMgbm90IG11Y2ggdmFsaWRhdGlvbiBhY3R1YWxseSBoYXBwZW5zXG4gICAgICAgIGFsbEVycm9yczogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBhZGQgY3VzdG9tIGtleXdvcmRzIHRvIGFqdi4gc2VlIHNjaGVtYS1rZXl3b3Jkcy5qc1xuICAgIF8uZm9yRWFjaChrZXl3b3JkcywgKGtleXdvcmQpID0+IHtcbiAgICAgIGFqdi5hZGRLZXl3b3JkKGtleXdvcmQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFqdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhpcyBpbnN0YW5jZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuXG4gICAqXG4gICAqIC0gUmVtb3ZlcyBhbGwgYWRkZWQgc2NoZW1hcyBmcm9tIHRoZSBgQWp2YCBpbnN0YW5jZVxuICAgKiAtIFJlc2V0cyB0aGUgbWFwIG9mIHtAbGluayBBcmdTcGVjIEFyZ1NwZWNzfVxuICAgKiAtIFJlc2V0cyB0aGUgbWFwIG9mIHJlZ2lzdGVyZWQgc2NoZW1hc1xuICAgKiAtIFNldHMgdGhlIHtAbGluayBBcHBpdW1TY2hlbWEuX2ZpbmFsaXplZCBfZmluYWxpemVkfSBmbGFnIHRvIGBmYWxzZWBcbiAgICpcbiAgICogSWYgeW91IG5lZWQgdG8gY2FsbCB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSBhZ2FpbiwgeW91J2xsIHdhbnQgdG8gY2FsbCB0aGlzIGZpcnN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlc2V0ICgpIHtcbiAgICBmb3IgKGNvbnN0IHNjaGVtYUlkIG9mIE9iamVjdC5rZXlzKHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMgPz8ge30pKSB7XG4gICAgICB0aGlzLl9hanYucmVtb3ZlU2NoZW1hKHNjaGVtYUlkKTtcbiAgICB9XG4gICAgdGhpcy5fYXJnU3BlY3MgPSBuZXcgUm9hY2hIb3RlbE1hcCgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzID0ge1xuICAgICAgW0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLFxuICAgICAgW1BMVUdJTl9UWVBFXTogbmV3IE1hcCgpLFxuICAgIH07XG4gICAgdGhpcy5fZmluYWxpemVkU2NoZW1hcyA9IG51bGw7XG5cbiAgICAvLyBBanYgc2VlbXMgdG8gaGF2ZSBhbiBvdmVyLWVhZ2VyIGNhY2hlLCBzbyB3ZSBoYXZlIHRvIGR1bXAgdGhlIG9iamVjdCBlbnRpcmVseS5cbiAgICB0aGlzLl9hanYgPSBBcHBpdW1TY2hlbWEuX2luc3RhbnRpYXRlQWp2KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc2NoZW1hIGZyb20gYW4gZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBUaGlzIGlzIFwiZmFpbC1mYXN0XCIgaW4gdGhhdCB0aGUgc2NoZW1hIHdpbGwgaW1tZWRpYXRlbHkgYmUgdmFsaWRhdGVkIGFnYWluc3QgSlNPTiBzY2hlbWEgZHJhZnQtMDcgX29yXyB3aGF0ZXZlciB0aGUgdmFsdWUgb2YgdGhlIHNjaGVtYSdzIGAkc2NoZW1hYCBwcm9wIGlzLlxuICAgKlxuICAgKiBEb2VzIF9ub3RfIGFkZCB0aGUgc2NoZW1hIHRvIHRoZSBgYWp2YCBpbnN0YW5jZSAodGhpcyBpcyBkb25lIGJ5IHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9KS5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBVbmlxdWUgZXh0ZW5zaW9uIG5hbWUgZm9yIGB0eXBlYFxuICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hIC0gU2NoZW1hIG9iamVjdFxuICAgKiBAdGhyb3dzIHtTY2hlbWFOYW1lQ29uZmxpY3RFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBhbiBpbnZhbGlkXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcmVnaXN0ZXJTY2hlbWEgKGV4dFR5cGUsIGV4dE5hbWUsIHNjaGVtYSkge1xuICAgIGlmICghKGV4dFR5cGUgJiYgZXh0TmFtZSkgfHwgXy5pc1VuZGVmaW5lZChzY2hlbWEpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnRXhwZWN0ZWQgZXh0ZW5zaW9uIHR5cGUsIGV4dGVuc2lvbiBuYW1lLCBhbmQgYSBkZWZpbmVkIHNjaGVtYScsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIUFwcGl1bVNjaGVtYS5pc1N1cHBvcnRlZFNjaGVtYVR5cGUoc2NoZW1hKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3Ioc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZEV4dE5hbWUgPSBfLmtlYmFiQ2FzZShleHROYW1lKTtcbiAgICBpZiAodGhpcy5oYXNSZWdpc3RlcmVkU2NoZW1hKGV4dFR5cGUsIG5vcm1hbGl6ZWRFeHROYW1lKSkge1xuICAgICAgaWYgKHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmdldChub3JtYWxpemVkRXh0TmFtZSkgPT09IHNjaGVtYSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IoZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgfVxuICAgIHRoaXMuX2Fqdi52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXNbZXh0VHlwZV0uc2V0KG5vcm1hbGl6ZWRFeHROYW1lLCBzY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB7QGxpbmsgQXJnU3BlY30gZm9yIHRoZSBnaXZlbiBhcmd1bWVudCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENMSSBhcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtBcmdTcGVjfHVuZGVmaW5lZH0gQXJnU3BlYyBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmRcbiAgICovXG4gIGdldEFyZ1NwZWMgKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJnU3BlY3MuZ2V0KEFyZ1NwZWMudG9BcmcobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnN0YW5jZSBrbm93cyBhYm91dCBhbiBhcmd1bWVudCBieSB0aGUgZ2l2ZW4gYG5hbWVgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENMSSBhcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgc3VjaCBhbiB7QGxpbmsgQXJnU3BlY30gZXhpc3RzXG4gICAqL1xuICBoYXNBcmdTcGVjIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzLmhhcyhBcmdTcGVjLnRvQXJnKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYFJlY29yZGAgb2YgYXJndW1lbnQgXCJkZXN0XCIgc3RyaW5ncyB0byBkZWZhdWx0IHZhbHVlcy5cbiAgICpcbiAgICogVGhlIFwiZGVzdFwiIHN0cmluZyBpcyB0aGUgcHJvcGVydHkgbmFtZSBpbiBvYmplY3QgcmV0dXJuZWQgYnlcbiAgICogYGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyWydwYXJzZV9hcmdzJ11gLlxuICAgKiBAdGVtcGxhdGUge2Jvb2xlYW58dW5kZWZpbmVkfSBGbGF0dGVuZWRcbiAgICogQHBhcmFtIHtGbGF0dGVuZWR9IFtmbGF0dGVuPXRydWVdIC0gSWYgYHRydWVgLCBmbGF0dGVucyB0aGUgcmV0dXJuZWQgb2JqZWN0XG4gICAqIHVzaW5nIFwia2V5cGF0aFwiLXN0eWxlIGtleXMgb2YgdGhlIGZvcm1hdCBgPGV4dFR5cGU+LjxleHROYW1lPi48YXJnTmFtZT5gLlxuICAgKiBPdGhlcndpc2UsIHJldHVybnMgYSBuZXN0ZWQgb2JqZWN0IHVzaW5nIGBleHRUeXBlYCBhbmQgYGV4dE5hbWVgIGFzXG4gICAqIHByb3BlcnRpZXMuIEJhc2UgYXJndW1lbnRzIChzZXJ2ZXIgYXJndW1lbnRzKSBhcmUgYWx3YXlzIGF0IHRoZSB0b3AgbGV2ZWwuXG4gICAqIEByZXR1cm5zIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59XG4gICAqL1xuICBnZXREZWZhdWx0cyAoZmxhdHRlbiA9IC8qKiBAdHlwZSB7RmxhdHRlbmVkfSAqLyAodHJ1ZSkpIHtcbiAgICBpZiAoIXRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY2FsbGJhY2sgRGVmYXVsdFJlZHVjZXJcbiAgICAgKiBAcGFyYW0ge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn0gZGVmYXVsdHNcbiAgICAgKiBAcGFyYW0ge0FyZ1NwZWN9IGFyZ1NwZWNcbiAgICAgKiBAcmV0dXJucyB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fVxuICAgICAqL1xuICAgIC8qKiBAdHlwZSB7RGVmYXVsdFJlZHVjZXJ9ICovXG4gICAgY29uc3QgcmVkdWNlciA9IGZsYXR0ZW5cbiAgICAgID8gKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIGRlZmF1bHRzW2Rlc3RdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH1cbiAgICAgIDogKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgIF8uc2V0KGRlZmF1bHRzLCBkZXN0LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgIH07XG5cbiAgICAvKiogQHR5cGUge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn0gKi9cbiAgICBjb25zdCByZXR2YWwgPSB7fTtcbiAgICByZXR1cm4gWy4uLnRoaXMuX2FyZ1NwZWNzLnZhbHVlcygpXS5yZWR1Y2UocmVkdWNlciwgcmV0dmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZmxhdHRlbmVkIFJlY29yZCBvZiBkZWZhdWx0cyBmb3IgYSBzcGVjaWZpYyBleHRlbnNpb24uIEtleXMgd2lsbFxuICAgKiBiZSBvZiBmb3JtYXQgYDxhcmdOYW1lPmAuXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsQXJnU3BlY0RlZmF1bHRWYWx1ZT59XG4gICAqL1xuICBnZXREZWZhdWx0c0ZvckV4dGVuc2lvbiAoZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIGlmICghdGhpcy5pc0ZpbmFsaXplZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hRmluYWxpemF0aW9uRXJyb3IoKTtcbiAgICB9XG4gICAgY29uc3Qgc3BlY3MgPSBbLi4udGhpcy5fYXJnU3BlY3MudmFsdWVzKCldLmZpbHRlcihcbiAgICAgIChzcGVjKSA9PiBzcGVjLmV4dFR5cGUgPT09IGV4dFR5cGUgJiYgc3BlYy5leHROYW1lID09PSBleHROYW1lLFxuICAgICk7XG4gICAgcmV0dXJuIHNwZWNzLnJlZHVjZSgoZGVmYXVsdHMsIHtkZWZhdWx0VmFsdWUsIHJhd0Rlc3R9KSA9PiB7XG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0c1tyYXdEZXN0XSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9LCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbiBzY2hlbWEgaW50byBhbiBhcnJheSBvZiBgU2NoZW1hT2JqZWN0YHMgYW5kIGFzc29jaWF0ZWRcbiAgICoge0BsaW5rIEFyZ1NwZWMgQXJnU3BlY3N9LlxuICAgKlxuICAgKiBDb252ZXJ0cyBuZXN0ZWQgZXh0ZW5zaW9uIHNjaGVtYXMgdG8ga2V5cyBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIHR5cGUgYW5kXG4gICAqIG5hbWUuIFVzZWQgd2hlbiB0cmFuc2xhdGluZyB0byBgYXJncGFyc2VgIG9wdGlvbnMgb3IgZ2V0dGluZyB0aGUgbGlzdCBvZlxuICAgKiBkZWZhdWx0IHZhbHVlcyAoc2VlIHtAbGluayBBcHBpdW1TY2hlbWEuZ2V0RGVmYXVsdHN9KSBmb3IgQ0xJIG9yIG90aGVyd2lzZS5cbiAgICpcbiAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBpbnRlcm1lZGlhdGUgcmVwcnNlbnRhdGlvbiB1c2VkIGJ5IGBjbGktYXJnc2BcbiAgICogbW9kdWxlJ3MgYHRvUGFyc2VyQXJnc2AsIHdoaWNoIGNvbnZlcnRzIHRoZSBmaW5hbGl6ZWQgc2NoZW1hIHRvIHBhcmFtZXRlcnNcbiAgICogdXNlZCBieSBgYXJncGFyc2VgLlxuICAgKiBAdGhyb3dzIElmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9IGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICAgKiBAcmV0dXJucyB7RmxhdHRlbmVkU2NoZW1hfVxuICAgKi9cbiAgZmxhdHRlbiAoKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5nZXRTY2hlbWEoKTtcblxuICAgIC8qKiBAdHlwZSB7IHtwcm9wZXJ0aWVzOiBTY2hlbWFPYmplY3QsIHByZWZpeDogc3RyaW5nW119W10gfSAqL1xuICAgIGNvbnN0IHN0YWNrID0gW3twcm9wZXJ0aWVzOiBzY2hlbWEucHJvcGVydGllcywgcHJlZml4OiBbXX1dO1xuICAgIC8qKiBAdHlwZSB7RmxhdHRlbmVkU2NoZW1hfSAqL1xuICAgIGNvbnN0IGZsYXR0ZW5lZCA9IFtdO1xuXG4gICAgLy8gdGhpcyBiaXQgaXMgYSByZWN1cnNpdmUgYWxnb3JpdGhtIHJld3JpdHRlbiBhcyBhIGZvciBsb29wLlxuICAgIC8vIHdoZW4gd2UgZmluZCBzb21ldGhpbmcgd2Ugd2FudCB0byB0cmF2ZXJzZSwgd2UgYWRkIGl0IHRvIGBzdGFja2BcbiAgICBmb3IgKGNvbnN0IHtwcm9wZXJ0aWVzLCBwcmVmaXh9IG9mIHN0YWNrKSB7XG4gICAgICBjb25zdCBwYWlycyA9IF8udG9QYWlycyhwcm9wZXJ0aWVzKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IHtwcm9wZXJ0aWVzLCAkcmVmfSA9IHZhbHVlO1xuICAgICAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIHByZWZpeDoga2V5ID09PSBTRVJWRVJfUFJPUF9OQU1FID8gW10gOiBbLi4ucHJlZml4LCBrZXldLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCRyZWYpIHtcbiAgICAgICAgICBsZXQgcmVmU2NoZW1hO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZWZTY2hlbWEgPSB0aGlzLmdldFNjaGVtYSgkcmVmKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBpZiBhbiBleHRlbnNpb24gc2NoZW1hIHN1cHBsaWVzIGEgJHJlZiB0byBhIG5vbi1leGlzdGVudCBzY2hlbWFcbiAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IoJHJlZik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHtub3JtYWxpemVkRXh0TmFtZX0gPVxuICAgICAgICAgICAgQXJnU3BlYy5leHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCgkcmVmKTtcbiAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWRFeHROYW1lKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxuICAgICAgICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBleHRlbnNpb24gbmFtZSBmcm9tIHNjaGVtYSBJRCAkeyRyZWZ9LiBUaGlzIGlzIGEgYnVnLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHJlZlNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJlZml4OiBbLi4ucHJlZml4LCBrZXksIG5vcm1hbGl6ZWRFeHROYW1lXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT09IERSSVZFUl9UWVBFICYmIGtleSAhPT0gUExVR0lOX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBbZXh0VHlwZSwgZXh0TmFtZV0gPSBwcmVmaXg7XG4gICAgICAgICAgY29uc3QgYXJnU3BlYyA9IHRoaXMuZ2V0QXJnU3BlYyhcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIC8qKiBAdHlwZSB7RXh0ZW5zaW9uVHlwZX0gKi8gKGV4dFR5cGUpLFxuICAgICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghYXJnU3BlYykge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICAgICAgYFVua25vd24gYXJndW1lbnQgd2l0aCBrZXkgJHtrZXl9LCBleHRUeXBlICR7ZXh0VHlwZX0gYW5kIGV4dE5hbWUgJHtleHROYW1lfS4gVGhpcyBpcyBhIGJ1Zy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmxhdHRlbmVkLnB1c2goe3NjaGVtYTogXy5jbG9uZURlZXAodmFsdWUpLCBhcmdTcGVjfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc2NoZW1hIGl0c2VsZlxuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRFxuICAgKiBAdGhyb3dzIElmIHRoZSBzY2hlbWEgaGFzIG5vdCB5ZXQgYmVlbiBmaW5hbGl6ZWRcbiAgICogQHJldHVybnMge1NjaGVtYU9iamVjdH1cbiAgICovXG4gIGdldFNjaGVtYSAocmVmID0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtTY2hlbWFPYmplY3R9ICovICh0aGlzLl9nZXRWYWxpZGF0b3IocmVmKS5zY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBzY2hlbWEgdmFsaWRhdG9yIGZ1bmN0aW9uIGZyb20gQWp2XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaWRdIC0gU2NoZW1hIElEXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLlZhbGlkYXRlRnVuY3Rpb259XG4gICAqL1xuICBfZ2V0VmFsaWRhdG9yIChpZCA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fYWp2LmdldFNjaGVtYShpZCk7XG4gICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgIGlmIChpZCA9PT0gQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhbiBvYmplY3QsIHZhbGlkYXRlcyBpdCBhZ2FpbnN0IHRoZSBBcHBpdW0gY29uZmlnIHNjaGVtYS5cbiAgICogSWYgZXJyb3JzIG9jY3VyLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBub24tZW1wdHkuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSB2YWx1ZSAoaG9wZWZ1bGx5IGFuIG9iamVjdCkgdG8gdmFsaWRhdGUgYWdhaW5zdCB0aGUgc2NoZW1hXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRCBvciByZWYuXG4gICAqIEBwdWJsaWNcbiAgICogQHJldHVybnMge2ltcG9ydCgnYWp2JykuRXJyb3JPYmplY3RbXX0gQXJyYXkgb2YgZXJyb3JzLCBpZiBhbnkuXG4gICAqL1xuICB2YWxpZGF0ZSAodmFsdWUsIHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fZ2V0VmFsaWRhdG9yKHJlZik7XG4gICAgcmV0dXJuICF2YWxpZGF0b3IodmFsdWUpICYmIF8uaXNBcnJheSh2YWxpZGF0b3IuZXJyb3JzKVxuICAgICAgPyBbLi4udmFsaWRhdG9yLmVycm9yc11cbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYGZpbGVuYW1lYCdzIGZpbGUgZXh0ZW5zaW9uIGlzIGFsbG93ZWQgKGluIHtAbGluayBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TfSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIChmaWxlbmFtZSkge1xuICAgIHJldHVybiBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TLmhhcyhwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBgc2NoZW1hYCBpcyBhIHBsYWluIG9iamVjdCB3aXRoIGEgbm9uLXRydWUgYCRhc3luY2AgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWEgLSBTY2hlbWEgdG8gY2hlY2tcbiAgICogQHJldHVybnMge3NjaGVtYSBpcyBTY2hlbWFPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgaXNTdXBwb3J0ZWRTY2hlbWFUeXBlIChzY2hlbWEpIHtcbiAgICByZXR1cm4gXy5pc1BsYWluT2JqZWN0KHNjaGVtYSkgJiYgc2NoZW1hLiRhc3luYyAhPT0gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZSBoYXMgbm90IHlldCBiZWVuIGZpbmFsaXplZCwgYnV0XG4gKiB0aGUgbWV0aG9kIGNhbGxlZCByZXF1aXJlcyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYUZpbmFsaXphdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfRklOQUxJWkFUSU9OJztcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoJ1NjaGVtYSBub3QgeWV0IGZpbmFsaXplZDsgYGZpbmFsaXplKClgIG11c3QgYmUgY2FsbGVkIGZpcnN0LicpO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBcInVuaXF1ZVwiIHNjaGVtYSBJRCBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWEgSUQuXG4gKlxuICogVGhpcyBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgY2F1c2VkIGJ5IGF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgdGhlIHNhbWUgc2NoZW1hIHR3aWNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9OQU1FX0NPTkZMSUNUJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBzdXBlcihcbiAgICAgIGBOYW1lIGZvciAke2V4dFR5cGV9IHNjaGVtYSBcIiR7ZXh0TmFtZX1cIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBzY2hlbWFgLFxuICAgICk7XG4gICAgdGhpcy5kYXRhID0ge2V4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgSUQgd2FzIGV4cGVjdGVkLCBidXQgaXQgZG9lc24ndCBleGlzdCBvbiB0aGUge0BsaW5rIEFqdn0gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IgZXh0ZW5kcyBSZWZlcmVuY2VFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTktOT1dOX1NDSEVNQSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7c2NoZW1hSWQ6IHN0cmluZ30+fVxuICAgKi9cbiAgZGF0YTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUlkXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hSWQpIHtcbiAgICBzdXBlcihgVW5rbm93biBzY2hlbWE6IFwiJHtzY2hlbWFJZH1cImApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWFJZH07XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIHNjaGVtYSBpcyBwcm92aWRlZCwgYnV0IGl0J3Mgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZS5cbiAqXG4gKiBcIlZhbGlkXCIgc2NoZW1hcyB3aGljaCBhcmUgdW5zdXBwb3J0ZWQgaW5jbHVkZSBib29sZWFuIHNjaGVtYXMgYW5kIGFzeW5jIHNjaGVtYXNcbiAqIChoYXZpbmcgYSBgdHJ1ZWAgYCRhc3luY2AgcHJvcGVydHkpLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvciBleHRlbmRzIFR5cGVFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTlNVUFBPUlRFRF9TQ0hFTUEnO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8e3NjaGVtYTogYW55LCBleHRUeXBlOiBFeHRlbnNpb25UeXBlLCBleHROYW1lOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWFcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy84Mjc3XG4gICAgc3VwZXIoXG4gICAgICAoKCkgPT4ge1xuICAgICAgICBsZXQgbXNnID0gYFVuc3VwcG9ydGVkIHNjaGVtYSBmcm9tICR7ZXh0VHlwZX0gXCIke2V4dE5hbWV9XCI6YDtcbiAgICAgICAgaWYgKF8uaXNCb29sZWFuKHNjaGVtYSkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgY2Fubm90IGJlIGEgYm9vbGVhbmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChzY2hlbWEpKSB7XG4gICAgICAgICAgaWYgKHNjaGVtYS4kYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBjYW5ub3QgYmUgYW4gYXN5bmMgc2NoZW1hYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgYHNjaGVtYSBJUyBzdXBwb3J0ZWQ7IHRoaXMgZXJyb3Igc2hvdWxkIG5vdCBiZSB0aHJvd24gKHRoaXMgaXMgYSBidWcpLiB2YWx1ZSBvZiBzY2hlbWE6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHttc2d9IHNjaGVtYSBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0IHdpdGhvdXQgYSB0cnVlIFwiJGFzeW5jXCIgcHJvcGVydHlgO1xuICAgICAgfSkoKSxcbiAgICApO1xuICAgIHRoaXMuZGF0YSA9IHtzY2hlbWEsIGV4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbmNvbnN0IGFwcGl1bVNjaGVtYSA9IEFwcGl1bVNjaGVtYS5jcmVhdGUoKTtcblxuZXhwb3J0IGNvbnN0IHtcbiAgcmVnaXN0ZXJTY2hlbWEsXG4gIGdldEFsbEFyZ1NwZWNzLFxuICBnZXRBcmdTcGVjLFxuICBoYXNBcmdTcGVjLFxuICBpc0ZpbmFsaXplZCxcbiAgZmluYWxpemU6IGZpbmFsaXplU2NoZW1hLFxuICByZXNldDogcmVzZXRTY2hlbWEsXG4gIHZhbGlkYXRlLFxuICBnZXRTY2hlbWEsXG4gIGZsYXR0ZW46IGZsYXR0ZW5TY2hlbWEsXG4gIGdldERlZmF1bHRzOiBnZXREZWZhdWx0c0ZvclNjaGVtYSxcbiAgZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24sXG59ID0gYXBwaXVtU2NoZW1hO1xuZXhwb3J0IGNvbnN0IHtpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9ufSA9IEFwcGl1bVNjaGVtYTtcblxuLyoqXG4gKiBBcHBpdW0gb25seSBzdXBwb3J0cyBzY2hlbWFzIHRoYXQgYXJlIHBsYWluIG9iamVjdHM7IG5vdCBhcnJheXMuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhanYnKS5TY2hlbWFPYmplY3QgJiB7W2tleTogbnVtYmVyXTogbmV2ZXJ9fSBTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2V4dGVuc2lvbi9tYW5pZmVzdCcpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuXG4vKipcbiAqIEFuIG9iamVjdCBoYXZpbmcgcHJvcGVydHkgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIFN0cmljdFByb3BcbiAqIEBwcm9wZXJ0eSB7ZmFsc2V9IGFkZGl0aW9uYWxQcm9wZXJ0aWVzXG4gKi9cblxuLyoqXG4gKiBBIHtAbGluayBTY2hlbWFPYmplY3R9IHdpdGggYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAqIEB0eXBlZGVmIHtTY2hlbWFPYmplY3QgJiBTdHJpY3RQcm9wfSBTdHJpY3RTY2hlbWFPYmplY3RcbiAqL1xuXG4vKipcbiAqIEEgbGlzdCBvZiBzY2hlbWFzIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHtAbGluayBBcmdTcGVjfSBvYmplY3RzLlxuICpcbiAqIEludGVybWVkaWF0ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIHdoZW4gY29udmVydGluZyB0aGUgZW50aXJlIHNjaGVtYSBkb3duIHRvIENMSSBhcmd1bWVudHMuXG4gKiBAdHlwZWRlZiB7IHtzY2hlbWE6IFNjaGVtYU9iamVjdCwgYXJnU3BlYzogQXJnU3BlY31bXSB9IEZsYXR0ZW5lZFNjaGVtYVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0FyZ1NwZWNbJ2RlZmF1bHRWYWx1ZSddfSBBcmdTcGVjRGVmYXVsdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBlLmcuIGB7ZHJpdmVyOiB7Zm9vOiAnYmFyJ319YCB3aGVyZSBgZm9vYCBpcyB0aGUgYXJnIG5hbWUgYW5kIGBiYXJgIGlzIHRoZSBkZWZhdWx0IHZhbHVlLlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsUmVjb3JkPHN0cmluZyxBcmdTcGVjRGVmYXVsdFZhbHVlPj59IE5lc3RlZEFyZ1NwZWNEZWZhdWx0VmFsdWVcbiAqL1xuXG4vKipcbiAqIEhlbHBlciB0eXBlIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIHtAbGluayBBcHBpdW1TY2hlbWEuZ2V0RGVmYXVsdHN9XG4gKiBAdGVtcGxhdGUge2Jvb2xlYW58dW5kZWZpbmVkfSBGbGF0dGVuZWRcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLEZsYXR0ZW5lZCBleHRlbmRzIHRydWUgPyBBcmdTcGVjRGVmYXVsdFZhbHVlIDogQXJnU3BlY0RlZmF1bHRWYWx1ZSB8IE5lc3RlZEFyZ1NwZWNEZWZhdWx0VmFsdWU+fSBEZWZhdWx0VmFsdWVzXG4gKi9cbiJdfQ==