appium 2.0.0-beta.35 → 2.0.0-beta.37

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 (122) hide show
  1. package/build/lib/appium.d.ts +41 -52
  2. package/build/lib/appium.d.ts.map +1 -1
  3. package/build/lib/appium.js +32 -15
  4. package/build/lib/cli/args.d.ts +1 -1
  5. package/build/lib/cli/args.d.ts.map +1 -1
  6. package/build/lib/cli/args.js +1 -1
  7. package/build/lib/cli/driver-command.d.ts +3 -3
  8. package/build/lib/cli/driver-command.d.ts.map +1 -1
  9. package/build/lib/cli/driver-command.js +1 -1
  10. package/build/lib/cli/extension-command.d.ts +60 -38
  11. package/build/lib/cli/extension-command.d.ts.map +1 -1
  12. package/build/lib/cli/extension-command.js +115 -59
  13. package/build/lib/cli/extension.d.ts +9 -5
  14. package/build/lib/cli/extension.d.ts.map +1 -1
  15. package/build/lib/cli/extension.js +5 -7
  16. package/build/lib/cli/parser.d.ts +3 -3
  17. package/build/lib/cli/parser.d.ts.map +1 -1
  18. package/build/lib/cli/parser.js +1 -1
  19. package/build/lib/cli/plugin-command.d.ts +1 -1
  20. package/build/lib/cli/plugin-command.d.ts.map +1 -1
  21. package/build/lib/cli/plugin-command.js +1 -1
  22. package/build/lib/cli/utils.js +1 -1
  23. package/build/lib/config-file.d.ts.map +1 -1
  24. package/build/lib/config-file.js +1 -1
  25. package/build/lib/config.d.ts +4 -4
  26. package/build/lib/config.d.ts.map +1 -1
  27. package/build/lib/config.js +1 -1
  28. package/build/lib/constants.d.ts.map +1 -1
  29. package/build/lib/constants.js +1 -1
  30. package/build/lib/extension/driver-config.d.ts +29 -32
  31. package/build/lib/extension/driver-config.d.ts.map +1 -1
  32. package/build/lib/extension/driver-config.js +7 -20
  33. package/build/lib/extension/extension-config.d.ts +108 -36
  34. package/build/lib/extension/extension-config.d.ts.map +1 -1
  35. package/build/lib/extension/extension-config.js +199 -60
  36. package/build/lib/extension/index.d.ts +16 -7
  37. package/build/lib/extension/index.d.ts.map +1 -1
  38. package/build/lib/extension/index.js +15 -18
  39. package/build/lib/extension/manifest.d.ts +12 -12
  40. package/build/lib/extension/manifest.d.ts.map +1 -1
  41. package/build/lib/extension/manifest.js +13 -3
  42. package/build/lib/extension/package-changed.d.ts.map +1 -1
  43. package/build/lib/extension/package-changed.js +1 -1
  44. package/build/lib/extension/plugin-config.d.ts +19 -24
  45. package/build/lib/extension/plugin-config.d.ts.map +1 -1
  46. package/build/lib/extension/plugin-config.js +9 -18
  47. package/build/lib/grid-register.d.ts.map +1 -1
  48. package/build/lib/grid-register.js +1 -1
  49. package/build/lib/logger.d.ts +1 -1
  50. package/build/lib/logger.d.ts.map +1 -1
  51. package/build/lib/logger.js +1 -1
  52. package/build/lib/logsink.d.ts.map +1 -1
  53. package/build/lib/logsink.js +3 -2
  54. package/build/lib/main.d.ts +13 -12
  55. package/build/lib/main.d.ts.map +1 -1
  56. package/build/lib/main.js +4 -4
  57. package/build/lib/schema/arg-spec.d.ts +4 -4
  58. package/build/lib/schema/arg-spec.d.ts.map +1 -1
  59. package/build/lib/schema/arg-spec.js +1 -1
  60. package/build/lib/schema/cli-args.d.ts.map +1 -1
  61. package/build/lib/schema/cli-args.js +1 -1
  62. package/build/lib/schema/cli-transformers.d.ts.map +1 -1
  63. package/build/lib/schema/cli-transformers.js +1 -1
  64. package/build/lib/schema/keywords.d.ts.map +1 -1
  65. package/build/lib/schema/keywords.js +1 -1
  66. package/build/lib/schema/schema.d.ts +2 -2
  67. package/build/lib/schema/schema.d.ts.map +1 -1
  68. package/build/lib/schema/schema.js +1 -1
  69. package/build/lib/utils.d.ts.map +1 -1
  70. package/build/lib/utils.js +1 -1
  71. package/build/tsconfig.tsbuildinfo +1 -1
  72. package/build/types/appium-manifest.d.ts +23 -4
  73. package/build/types/appium-manifest.d.ts.map +1 -1
  74. package/build/types/cli.d.ts.map +1 -1
  75. package/build/types/{external-manifest.d.ts → extension-manifest.d.ts} +15 -7
  76. package/build/types/extension-manifest.d.ts.map +1 -0
  77. package/build/types/index.d.ts +6 -5
  78. package/build/types/index.d.ts.map +1 -1
  79. package/driver.d.ts +1 -0
  80. package/driver.js +14 -0
  81. package/lib/appium.js +208 -124
  82. package/lib/cli/args.js +143 -93
  83. package/lib/cli/driver-command.js +10 -15
  84. package/lib/cli/extension-command.js +226 -175
  85. package/lib/cli/extension.js +15 -19
  86. package/lib/cli/parser.js +19 -31
  87. package/lib/cli/plugin-command.js +8 -8
  88. package/lib/cli/utils.js +8 -14
  89. package/lib/config-file.js +21 -25
  90. package/lib/config.js +82 -64
  91. package/lib/constants.js +4 -13
  92. package/lib/extension/driver-config.js +171 -171
  93. package/lib/extension/extension-config.js +347 -126
  94. package/lib/extension/index.js +72 -58
  95. package/lib/extension/manifest.js +48 -57
  96. package/lib/extension/package-changed.js +9 -8
  97. package/lib/extension/plugin-config.js +62 -62
  98. package/lib/grid-register.js +29 -18
  99. package/lib/logger.js +1 -2
  100. package/lib/logsink.js +29 -31
  101. package/lib/main.js +111 -73
  102. package/lib/schema/arg-spec.js +10 -13
  103. package/lib/schema/cli-args.js +14 -37
  104. package/lib/schema/cli-transformers.js +7 -14
  105. package/lib/schema/keywords.js +15 -13
  106. package/lib/schema/schema.js +58 -75
  107. package/lib/utils.js +50 -25
  108. package/package.json +25 -18
  109. package/plugin.d.ts +1 -0
  110. package/plugin.js +13 -0
  111. package/scripts/autoinstall-extensions.js +177 -0
  112. package/support.d.ts +1 -0
  113. package/support.js +13 -0
  114. package/types/appium-manifest.ts +27 -15
  115. package/types/cli.ts +2 -9
  116. package/types/{external-manifest.ts → extension-manifest.ts} +21 -15
  117. package/types/index.ts +12 -5
  118. package/build/types/extension.d.ts +0 -43
  119. package/build/types/extension.d.ts.map +0 -1
  120. package/build/types/external-manifest.d.ts.map +0 -1
  121. package/scripts/postinstall.js +0 -71
  122. package/types/extension.ts +0 -56
@@ -67,4 +67,4 @@ const keywords = {
67
67
  }
68
68
  };
69
69
  exports.keywords = keywords;
70
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJrZXl3b3JkcyIsImFwcGl1bUNsaUFsaWFzZXMiLCJrZXl3b3JkIiwibWV0YVNjaGVtYSIsInR5cGUiLCJpdGVtcyIsIm1pbkxlbmd0aCIsIm1pbkl0ZW1zIiwidW5pcXVlSXRlbXMiLCJkZXNjcmlwdGlvbiIsImFwcGl1bUNsaURlc3QiLCJhcHBpdW1DbGlEZXNjcmlwdGlvbiIsInNjaGVtYVR5cGUiLCJhcHBpdW1DbGlUcmFuc2Zvcm1lciIsImVudW0iLCJPYmplY3QiLCJrZXlzIiwidHJhbnNmb3JtZXJzIiwiYXBwaXVtQ2xpSWdub3JlZCIsImFwcGl1bURlcHJlY2F0ZWQiLCIkY29tbWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEva2V5d29yZHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyB0cmFuc2Zvcm1lcnMgfSBmcm9tICcuL2NsaS10cmFuc2Zvcm1lcnMnO1xuXG4vKipcbiAqIENvbGxlY3Rpb24gb2Yga2V5d29yZCBkZWZpbml0aW9ucyB0byBhZGQgdG8gdGhlIHNpbmdsZXRvbiBgQWp2YCBpbnN0YW5jZS5cbiAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLEtleXdvcmREZWZpbml0aW9uPn1cbiAqL1xuZXhwb3J0IGNvbnN0IGtleXdvcmRzID0ge1xuICAvKipcbiAgICogS2V5d29yZCB0byBwcm92aWRlIGEgbGlzdCBvZiBjb21tYW5kIGFsaWFzIG5hbWVzIGZvciB0aGUgQ0xJLlxuICAgKlxuICAgKiBJZiBkZWZpbmVkLCB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBpdGVtIGluIHRoZSBhcnJheSBhbmQgaXQgbXVzdCBiZSBub24tZW1wdHkuXG4gICAqIEFsbCBpdGVtcyBpbiB0aGUgYXJyYXkgbXVzdCBiZSB1bmlxdWUuXG4gICAqXG4gICAqIEB0b2RvIEF2b2lkIGFsaWFzIGNvbGxpc2lvbnMhXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICogQGV4YW1wbGVcbiAgICoge2FwcGl1bUNsaUFsaWFzZXM6IFsnQicsICdib2JieScsICdyb2JlcnQnXX1cbiAgICovXG4gIGFwcGl1bUNsaUFsaWFzZXM6IHtcbiAgICBrZXl3b3JkOiAnYXBwaXVtQ2xpQWxpYXNlcycsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIGl0ZW1zOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICB9LFxuICAgICAgbWluSXRlbXM6IDEsXG4gICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnTGlzdCBvZiBhbGlhc2VzIGZvciB0aGUgYXJndW1lbnQuIEFsaWFzZXMgc2hvcnRlciB0aGFuIHRocmVlICgzKSBjaGFyYWN0ZXJzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBhIHNpbmdsZSBkYXNoOyBvdGhlcndpc2UgdHdvICgyKS4nXG4gICAgfSxcbiAgfSxcbiAgLyoqXG4gICAqIEtleXdvcmQgdG8gcHJvdmlkZSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGRlc3RpbmF0aW9uIChwYXJzZWRcbiAgICogYXJncykgb2JqZWN0LiBCeSBkZWZhdWx0LCB0aGlzIHZhbHVlIHdpbGwgYmUgd2hhdGV2ZXIgdGhlIHByb3BlcnR5IG5hbWUgaXMsXG4gICAqIGJ1dCBjYW1lbC1jYXNlZC4gSWYgYSBmbGFnIG5lZWRzIHNvbWV0aGluZyBfb3RoZXJfIHRoYW4ganVzdCBjYW1lbC1jYXNpbmcsXG4gICAqIHVzZSB0aGlzLlxuICAgKiBAdHlwZSB7S2V5d29yZERlZmluaXRpb259XG4gICAqIEBleGFtcGxlXG4gICAqIC8vIGZvciBwcm9wICduby1jb2xvcidcbiAgICoge2FwcGl1bUNsaURlc3Q6ICdOT0NPTE9SJ30gLy8gdmFsdWUgd2lsbCBiZSBzdG9yZWQgYXMgcHJvcGVydHkgYE5PQ09MT1JgIGluc3RlYWQgb2YgYG5vQ29sb3JgXG4gICAqL1xuICBhcHBpdW1DbGlEZXN0OiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaURlc3QnLFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IGluIHRoZSBwYXJzZWQgQ0xJIGFyZ3VtZW50cyBvYmplY3QnXG4gICAgfSxcbiAgfSxcblxuICAvKipcbiAgICogQ0xJLXNwZWNpZmljIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm9wZXJ0eS4gIFNvbWV0aW1lcyB0aGUgYWxsb3dlZCB0eXBlIGNhblxuICAgKiBiZSBkaWZmZXJlbnQgZW5vdWdoIG9uIHRoZSBDTEkgdGhhdCBwcm92aWRpbmcgYSBkZXNjcmlwdGlvbiB3cml0dGVuIGZvciBhXG4gICAqIGNvbmZpZyBmaWxlIGNvbnRleHQgd291bGRuJ3QgbWFrZSBzZW5zZS5cbiAgICogQHR5cGUge0tleXdvcmREZWZpbml0aW9ufVxuICAgKiBAZXhhbXBsZVxuICAgKiB7YXBwaXVtQ2xpRGVzY3JpcHRpb246ICdUaGlzIGlzIGEgY29tbWEtZGVsaW1pdGVkIHN0cmluZywgYnV0IGluIHRoZSBjb25maWcgZmlsZSBpdCBpcyBhbiBhcnJheSd9XG4gICAqL1xuICBhcHBpdW1DbGlEZXNjcmlwdGlvbjoge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1DbGlEZXNjcmlwdGlvbicsXG4gICAgc2NoZW1hVHlwZTogJ3N0cmluZycsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uIHRvIHByb3ZpZGUgaW4gdGhlIC0taGVscCB0ZXh0IG9mIHRoZSBDTEkuIE92ZXJyaWRlcyBgZGVzY3JpcHRpb25gJ1xuICAgIH0sXG4gIH0sXG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybWVycyBmb3IgQ0xJIGFyZ3MuIFRoZXNlIHVzdWFsbHkgdGFrZSBzdHJpbmdzIHRoZW4gZG8gc29tZXRoaW5nIHdpdGggdGhlbSwgbGlrZVxuICAgKiByZWFkIGEgZmlsZSBvciBwYXJzZSBmdXJ0aGVyLlxuICAgKiBAdHlwZSB7S2V5d29yZERlZmluaXRpb259XG4gICAqL1xuICBhcHBpdW1DbGlUcmFuc2Zvcm1lcjoge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1DbGlUcmFuc2Zvcm1lcicsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBlbnVtOiBPYmplY3Qua2V5cyh0cmFuc2Zvcm1lcnMpLFxuICAgICAgZGVzY3JpcHRpb246ICdUaGUgbmFtZSBvZiBhIGN1c3RvbSB0cmFuc2Zvcm1lciB0byBydW4gYWdhaW5zdCB0aGUgdmFsdWUgYXMgcHJvdmlkZWQgdmlhIHRoZSBDTEkuJ1xuICAgIH0sXG4gIH0sXG5cbiAgLyoqXG4gICAqIEZsYWcgdG8gdGVsbCBBcHBpdW0gdG8gX25vdF8gcHJvdmlkZSB0aGlzIHByb3BlcnR5IGFzIGEgQ0xJIGFyZ3VtZW50LlxuICAgKiBAdHlwZSB7S2V5d29yZERlZmluaXRpb259XG4gICAqL1xuICBhcHBpdW1DbGlJZ25vcmVkOiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaUlnbm9yZWQnLFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnSWYgYHRydWVgLCBBcHBpdW0gd2lsbCBub3QgcHJvdmlkZSB0aGlzIHByb3BlcnR5IGFzIGEgQ0xJIGFyZ3VtZW50LiBUaGlzIGlzIE5PVCB0aGUgc2FtZSBhcyBhIFwiaGlkZGVuXCIgYXJndW1lbnQuJyxcbiAgICAgIGVudW06IFt0cnVlXVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogTWFyayB0aGlzIHByb3BlcnR5IGFzIGRlcHJlY2F0ZWQuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICovXG4gIGFwcGl1bURlcHJlY2F0ZWQ6IHtcbiAgICBrZXl3b3JkOiAnYXBwaXVtRGVwcmVjYXRlZCcsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgZGVzY3JpcHRpb246ICdJZiBgdHJ1ZWAsIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgXCJkZXByZWNhdGVkXCIgdG8gdGhlIHVzZXInLFxuICAgICAgZW51bTogW3RydWVdLFxuICAgICAgJGNvbW1lbnQ6ICdKU09OIHNjaGVtYSBkcmFmdC0yMDE5LTA5IGtleXdvcmQgYGRlcHJlY2F0ZWRgIHNlcnZlcyB0aGUgc2FtZSBwdXJwb3NlLiBUaGlzIGtleXdvcmQgc2hvdWxkIGl0c2VsZiBiZSBkZXByZWNhdGVkIGlmIHdlIG1vdmUgdG8gZHJhZnQtMjAxOS0wOSEnXG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIFRoZXNlIGFyZSB0aGUgdmFsaWQgdmFsdWVzIGZvciB0aGUgYGFwcGl1bUNsaVRyYW5zZm9ybWVyYCBrZXl3b3JkLlxuICogVW5mb3J0dW5hdGVseSwgVFMgY2Fubm90IGluZmVyIHRoaXMgaW4gYSBKUyBjb250ZXh0LiAgSW4gVFMsIHdlJ2QgdXNlXG4gKiBgYXMgY29uc3RgIHdoZW4gZGVmaW5pbmcgYGFyZ1RyYW5zZm9ybWVyc2AsIHRoZW4gZ2V0IGBrZXlvZiB0eXBlb2YgYXJnVHJhbnNmb3JtZXJzYC4gYWxhcy5cbiAqIEB0eXBlZGVmIHsnY3N2J3wnanNvbid9IEFwcGl1bUNsaVRyYW5zZm9ybWVyTmFtZVxuICovXG5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSBjdXN0b20ga2V5d29yZHMgdGhhdCBBcHBpdW0gcmVjb2duaXplcy5cbiAqXG4gKiBAdHlwZWRlZiBBcHBpdW1KU09OU2NoZW1hS2V5d29yZHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYXBwaXVtQ2xpRGVzdF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYXBwaXVtQ2xpRGVzY3JpcHRpb25dXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYXBwaXVtQ2xpQWxpYXNlc11cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FwcGl1bUNsaUlnbm9yZWRdXG4gKiBAcHJvcGVydHkge0FwcGl1bUNsaVRyYW5zZm9ybWVyTmFtZX0gW2FwcGl1bUNsaVRyYW5zZm9ybWVyXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXBwaXVtRGVwcmVjYXRlZF1cbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuS2V5d29yZERlZmluaXRpb259IEtleXdvcmREZWZpbml0aW9uXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0E7O0FBTU8sTUFBTUEsUUFBUSxHQUFHO0VBWXRCQyxnQkFBZ0IsRUFBRTtJQUNoQkMsT0FBTyxFQUFFLGtCQURPO0lBRWhCQyxVQUFVLEVBQUU7TUFDVkMsSUFBSSxFQUFFLE9BREk7TUFFVkMsS0FBSyxFQUFFO1FBQ0xELElBQUksRUFBRSxRQUREO1FBRUxFLFNBQVMsRUFBRTtNQUZOLENBRkc7TUFNVkMsUUFBUSxFQUFFLENBTkE7TUFPVkMsV0FBVyxFQUFFLElBUEg7TUFRVkMsV0FBVyxFQUFFO0lBUkg7RUFGSSxDQVpJO0VBbUN0QkMsYUFBYSxFQUFFO0lBQ2JSLE9BQU8sRUFBRSxlQURJO0lBRWJDLFVBQVUsRUFBRTtNQUNWQyxJQUFJLEVBQUUsUUFESTtNQUVWRSxTQUFTLEVBQUUsQ0FGRDtNQUdWRyxXQUFXLEVBQUU7SUFISDtFQUZDLENBbkNPO0VBb0R0QkUsb0JBQW9CLEVBQUU7SUFDcEJULE9BQU8sRUFBRSxzQkFEVztJQUVwQlUsVUFBVSxFQUFFLFFBRlE7SUFHcEJULFVBQVUsRUFBRTtNQUNWQyxJQUFJLEVBQUUsUUFESTtNQUVWRSxTQUFTLEVBQUUsQ0FGRDtNQUdWRyxXQUFXLEVBQUU7SUFISDtFQUhRLENBcERBO0VBbUV0Qkksb0JBQW9CLEVBQUU7SUFDcEJYLE9BQU8sRUFBRSxzQkFEVztJQUVwQkMsVUFBVSxFQUFFO01BQ1ZDLElBQUksRUFBRSxRQURJO01BRVZVLElBQUksRUFBRUMsTUFBTSxDQUFDQyxJQUFQLENBQVlDLDZCQUFaLENBRkk7TUFHVlIsV0FBVyxFQUFFO0lBSEg7RUFGUSxDQW5FQTtFQWdGdEJTLGdCQUFnQixFQUFFO0lBQ2hCaEIsT0FBTyxFQUFFLGtCQURPO0lBRWhCQyxVQUFVLEVBQUU7TUFDVkMsSUFBSSxFQUFFLFNBREk7TUFFVkssV0FBVyxFQUFFLGtIQUZIO01BR1ZLLElBQUksRUFBRSxDQUFDLElBQUQ7SUFISTtFQUZJLENBaEZJO0VBNkZ0QkssZ0JBQWdCLEVBQUU7SUFDaEJqQixPQUFPLEVBQUUsa0JBRE87SUFFaEJDLFVBQVUsRUFBRTtNQUNWQyxJQUFJLEVBQUUsU0FESTtNQUVWSyxXQUFXLEVBQUUsd0VBRkg7TUFHVkssSUFBSSxFQUFFLENBQUMsSUFBRCxDQUhJO01BSVZNLFFBQVEsRUFBRTtJQUpBO0VBRkk7QUE3RkksQ0FBakIifQ==
70
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJrZXl3b3JkcyIsImFwcGl1bUNsaUFsaWFzZXMiLCJrZXl3b3JkIiwibWV0YVNjaGVtYSIsInR5cGUiLCJpdGVtcyIsIm1pbkxlbmd0aCIsIm1pbkl0ZW1zIiwidW5pcXVlSXRlbXMiLCJkZXNjcmlwdGlvbiIsImFwcGl1bUNsaURlc3QiLCJhcHBpdW1DbGlEZXNjcmlwdGlvbiIsInNjaGVtYVR5cGUiLCJhcHBpdW1DbGlUcmFuc2Zvcm1lciIsImVudW0iLCJPYmplY3QiLCJrZXlzIiwidHJhbnNmb3JtZXJzIiwiYXBwaXVtQ2xpSWdub3JlZCIsImFwcGl1bURlcHJlY2F0ZWQiLCIkY29tbWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEva2V5d29yZHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt0cmFuc2Zvcm1lcnN9IGZyb20gJy4vY2xpLXRyYW5zZm9ybWVycyc7XG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBrZXl3b3JkIGRlZmluaXRpb25zIHRvIGFkZCB0byB0aGUgc2luZ2xldG9uIGBBanZgIGluc3RhbmNlLlxuICogQHR5cGUge1JlY29yZDxzdHJpbmcsS2V5d29yZERlZmluaXRpb24+fVxuICovXG5leHBvcnQgY29uc3Qga2V5d29yZHMgPSB7XG4gIC8qKlxuICAgKiBLZXl3b3JkIHRvIHByb3ZpZGUgYSBsaXN0IG9mIGNvbW1hbmQgYWxpYXMgbmFtZXMgZm9yIHRoZSBDTEkuXG4gICAqXG4gICAqIElmIGRlZmluZWQsIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGl0ZW0gaW4gdGhlIGFycmF5IGFuZCBpdCBtdXN0IGJlIG5vbi1lbXB0eS5cbiAgICogQWxsIGl0ZW1zIGluIHRoZSBhcnJheSBtdXN0IGJlIHVuaXF1ZS5cbiAgICpcbiAgICogQHRvZG8gQXZvaWQgYWxpYXMgY29sbGlzaW9ucyFcbiAgICogQHR5cGUge0tleXdvcmREZWZpbml0aW9ufVxuICAgKiBAZXhhbXBsZVxuICAgKiB7YXBwaXVtQ2xpQWxpYXNlczogWydCJywgJ2JvYmJ5JywgJ3JvYmVydCddfVxuICAgKi9cbiAgYXBwaXVtQ2xpQWxpYXNlczoge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1DbGlBbGlhc2VzJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIH0sXG4gICAgICBtaW5JdGVtczogMSxcbiAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdMaXN0IG9mIGFsaWFzZXMgZm9yIHRoZSBhcmd1bWVudC4gQWxpYXNlcyBzaG9ydGVyIHRoYW4gdGhyZWUgKDMpIGNoYXJhY3RlcnMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIGEgc2luZ2xlIGRhc2g7IG90aGVyd2lzZSB0d28gKDIpLicsXG4gICAgfSxcbiAgfSxcbiAgLyoqXG4gICAqIEtleXdvcmQgdG8gcHJvdmlkZSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIGRlc3RpbmF0aW9uIChwYXJzZWRcbiAgICogYXJncykgb2JqZWN0LiBCeSBkZWZhdWx0LCB0aGlzIHZhbHVlIHdpbGwgYmUgd2hhdGV2ZXIgdGhlIHByb3BlcnR5IG5hbWUgaXMsXG4gICAqIGJ1dCBjYW1lbC1jYXNlZC4gSWYgYSBmbGFnIG5lZWRzIHNvbWV0aGluZyBfb3RoZXJfIHRoYW4ganVzdCBjYW1lbC1jYXNpbmcsXG4gICAqIHVzZSB0aGlzLlxuICAgKiBAdHlwZSB7S2V5d29yZERlZmluaXRpb259XG4gICAqIEBleGFtcGxlXG4gICAqIC8vIGZvciBwcm9wICduby1jb2xvcidcbiAgICoge2FwcGl1bUNsaURlc3Q6ICdOT0NPTE9SJ30gLy8gdmFsdWUgd2lsbCBiZSBzdG9yZWQgYXMgcHJvcGVydHkgYE5PQ09MT1JgIGluc3RlYWQgb2YgYG5vQ29sb3JgXG4gICAqL1xuICBhcHBpdW1DbGlEZXN0OiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaURlc3QnLFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IGluIHRoZSBwYXJzZWQgQ0xJIGFyZ3VtZW50cyBvYmplY3QnLFxuICAgIH0sXG4gIH0sXG5cbiAgLyoqXG4gICAqIENMSS1zcGVjaWZpYyBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkuICBTb21ldGltZXMgdGhlIGFsbG93ZWQgdHlwZSBjYW5cbiAgICogYmUgZGlmZmVyZW50IGVub3VnaCBvbiB0aGUgQ0xJIHRoYXQgcHJvdmlkaW5nIGEgZGVzY3JpcHRpb24gd3JpdHRlbiBmb3IgYVxuICAgKiBjb25maWcgZmlsZSBjb250ZXh0IHdvdWxkbid0IG1ha2Ugc2Vuc2UuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICogQGV4YW1wbGVcbiAgICoge2FwcGl1bUNsaURlc2NyaXB0aW9uOiAnVGhpcyBpcyBhIGNvbW1hLWRlbGltaXRlZCBzdHJpbmcsIGJ1dCBpbiB0aGUgY29uZmlnIGZpbGUgaXQgaXMgYW4gYXJyYXknfVxuICAgKi9cbiAgYXBwaXVtQ2xpRGVzY3JpcHRpb246IHtcbiAgICBrZXl3b3JkOiAnYXBwaXVtQ2xpRGVzY3JpcHRpb24nLFxuICAgIHNjaGVtYVR5cGU6ICdzdHJpbmcnLFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbiB0byBwcm92aWRlIGluIHRoZSAtLWhlbHAgdGV4dCBvZiB0aGUgQ0xJLiBPdmVycmlkZXMgYGRlc2NyaXB0aW9uYCcsXG4gICAgfSxcbiAgfSxcblxuICAvKipcbiAgICogVHJhbnNmb3JtZXJzIGZvciBDTEkgYXJncy4gVGhlc2UgdXN1YWxseSB0YWtlIHN0cmluZ3MgdGhlbiBkbyBzb21ldGhpbmcgd2l0aCB0aGVtLCBsaWtlXG4gICAqIHJlYWQgYSBmaWxlIG9yIHBhcnNlIGZ1cnRoZXIuXG4gICAqIEB0eXBlIHtLZXl3b3JkRGVmaW5pdGlvbn1cbiAgICovXG4gIGFwcGl1bUNsaVRyYW5zZm9ybWVyOiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaVRyYW5zZm9ybWVyJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGVudW06IE9iamVjdC5rZXlzKHRyYW5zZm9ybWVycyksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ1RoZSBuYW1lIG9mIGEgY3VzdG9tIHRyYW5zZm9ybWVyIHRvIHJ1biBhZ2FpbnN0IHRoZSB2YWx1ZSBhcyBwcm92aWRlZCB2aWEgdGhlIENMSS4nLFxuICAgIH0sXG4gIH0sXG5cbiAgLyoqXG4gICAqIEZsYWcgdG8gdGVsbCBBcHBpdW0gdG8gX25vdF8gcHJvdmlkZSB0aGlzIHByb3BlcnR5IGFzIGEgQ0xJIGFyZ3VtZW50LlxuICAgKiBAdHlwZSB7S2V5d29yZERlZmluaXRpb259XG4gICAqL1xuICBhcHBpdW1DbGlJZ25vcmVkOiB7XG4gICAga2V5d29yZDogJ2FwcGl1bUNsaUlnbm9yZWQnLFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnSWYgYHRydWVgLCBBcHBpdW0gd2lsbCBub3QgcHJvdmlkZSB0aGlzIHByb3BlcnR5IGFzIGEgQ0xJIGFyZ3VtZW50LiBUaGlzIGlzIE5PVCB0aGUgc2FtZSBhcyBhIFwiaGlkZGVuXCIgYXJndW1lbnQuJyxcbiAgICAgIGVudW06IFt0cnVlXSxcbiAgICB9LFxuICB9LFxuXG4gIC8qKlxuICAgKiBNYXJrIHRoaXMgcHJvcGVydHkgYXMgZGVwcmVjYXRlZC5cbiAgICogQHR5cGUge0tleXdvcmREZWZpbml0aW9ufVxuICAgKi9cbiAgYXBwaXVtRGVwcmVjYXRlZDoge1xuICAgIGtleXdvcmQ6ICdhcHBpdW1EZXByZWNhdGVkJyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0lmIGB0cnVlYCwgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIGRpc3BsYXllZCBhcyBcImRlcHJlY2F0ZWRcIiB0byB0aGUgdXNlcicsXG4gICAgICBlbnVtOiBbdHJ1ZV0sXG4gICAgICAkY29tbWVudDpcbiAgICAgICAgJ0pTT04gc2NoZW1hIGRyYWZ0LTIwMTktMDkga2V5d29yZCBgZGVwcmVjYXRlZGAgc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UuIFRoaXMga2V5d29yZCBzaG91bGQgaXRzZWxmIGJlIGRlcHJlY2F0ZWQgaWYgd2UgbW92ZSB0byBkcmFmdC0yMDE5LTA5IScsXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSB2YWxpZCB2YWx1ZXMgZm9yIHRoZSBgYXBwaXVtQ2xpVHJhbnNmb3JtZXJgIGtleXdvcmQuXG4gKiBVbmZvcnR1bmF0ZWx5LCBUUyBjYW5ub3QgaW5mZXIgdGhpcyBpbiBhIEpTIGNvbnRleHQuICBJbiBUUywgd2UnZCB1c2VcbiAqIGBhcyBjb25zdGAgd2hlbiBkZWZpbmluZyBgYXJnVHJhbnNmb3JtZXJzYCwgdGhlbiBnZXQgYGtleW9mIHR5cGVvZiBhcmdUcmFuc2Zvcm1lcnNgLiBhbGFzLlxuICogQHR5cGVkZWYgeydjc3YnfCdqc29uJ30gQXBwaXVtQ2xpVHJhbnNmb3JtZXJOYW1lXG4gKi9cblxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIGN1c3RvbSBrZXl3b3JkcyB0aGF0IEFwcGl1bSByZWNvZ25pemVzLlxuICpcbiAqIEB0eXBlZGVmIEFwcGl1bUpTT05TY2hlbWFLZXl3b3Jkc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFthcHBpdW1DbGlEZXN0XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFthcHBpdW1DbGlEZXNjcmlwdGlvbl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFthcHBpdW1DbGlBbGlhc2VzXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXBwaXVtQ2xpSWdub3JlZF1cbiAqIEBwcm9wZXJ0eSB7QXBwaXVtQ2xpVHJhbnNmb3JtZXJOYW1lfSBbYXBwaXVtQ2xpVHJhbnNmb3JtZXJdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthcHBpdW1EZXByZWNhdGVkXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuS2V5d29yZERlZmluaXRpb259IEtleXdvcmREZWZpbml0aW9uXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBTU8sTUFBTUEsUUFBUSxHQUFHO0VBWXRCQyxnQkFBZ0IsRUFBRTtJQUNoQkMsT0FBTyxFQUFFLGtCQURPO0lBRWhCQyxVQUFVLEVBQUU7TUFDVkMsSUFBSSxFQUFFLE9BREk7TUFFVkMsS0FBSyxFQUFFO1FBQ0xELElBQUksRUFBRSxRQUREO1FBRUxFLFNBQVMsRUFBRTtNQUZOLENBRkc7TUFNVkMsUUFBUSxFQUFFLENBTkE7TUFPVkMsV0FBVyxFQUFFLElBUEg7TUFRVkMsV0FBVyxFQUNUO0lBVFE7RUFGSSxDQVpJO0VBb0N0QkMsYUFBYSxFQUFFO0lBQ2JSLE9BQU8sRUFBRSxlQURJO0lBRWJDLFVBQVUsRUFBRTtNQUNWQyxJQUFJLEVBQUUsUUFESTtNQUVWRSxTQUFTLEVBQUUsQ0FGRDtNQUdWRyxXQUFXLEVBQUU7SUFISDtFQUZDLENBcENPO0VBcUR0QkUsb0JBQW9CLEVBQUU7SUFDcEJULE9BQU8sRUFBRSxzQkFEVztJQUVwQlUsVUFBVSxFQUFFLFFBRlE7SUFHcEJULFVBQVUsRUFBRTtNQUNWQyxJQUFJLEVBQUUsUUFESTtNQUVWRSxTQUFTLEVBQUUsQ0FGRDtNQUdWRyxXQUFXLEVBQUU7SUFISDtFQUhRLENBckRBO0VBb0V0Qkksb0JBQW9CLEVBQUU7SUFDcEJYLE9BQU8sRUFBRSxzQkFEVztJQUVwQkMsVUFBVSxFQUFFO01BQ1ZDLElBQUksRUFBRSxRQURJO01BRVZVLElBQUksRUFBRUMsTUFBTSxDQUFDQyxJQUFQLENBQVlDLDZCQUFaLENBRkk7TUFHVlIsV0FBVyxFQUNUO0lBSlE7RUFGUSxDQXBFQTtFQWtGdEJTLGdCQUFnQixFQUFFO0lBQ2hCaEIsT0FBTyxFQUFFLGtCQURPO0lBRWhCQyxVQUFVLEVBQUU7TUFDVkMsSUFBSSxFQUFFLFNBREk7TUFFVkssV0FBVyxFQUNULGtIQUhRO01BSVZLLElBQUksRUFBRSxDQUFDLElBQUQ7SUFKSTtFQUZJLENBbEZJO0VBZ0d0QkssZ0JBQWdCLEVBQUU7SUFDaEJqQixPQUFPLEVBQUUsa0JBRE87SUFFaEJDLFVBQVUsRUFBRTtNQUNWQyxJQUFJLEVBQUUsU0FESTtNQUVWSyxXQUFXLEVBQUUsd0VBRkg7TUFHVkssSUFBSSxFQUFFLENBQUMsSUFBRCxDQUhJO01BSVZNLFFBQVEsRUFDTjtJQUxRO0VBRkk7QUFoR0ksQ0FBakIifQ==
@@ -114,7 +114,7 @@ export function getAllArgSpecs(): RoachHotelMap<string, ArgSpec<any>>;
114
114
  * @param {string} [extName] - Extension name
115
115
  * @returns {ArgSpec|undefined} ArgSpec or `undefined` if not found
116
116
  */
117
- export function getArgSpec(name: string, extType?: import("../../types").ExtensionType | undefined, extName?: string | undefined): ArgSpec<any> | undefined;
117
+ export function getArgSpec(name: string, extType?: import("../../../types/build").ExtensionType | undefined, extName?: string | undefined): ArgSpec<any> | undefined;
118
118
  /**
119
119
  * Returns `true` if the instance knows about an argument by the given `name`.
120
120
  * @param {string} name - CLI argument name
@@ -122,7 +122,7 @@ export function getArgSpec(name: string, extType?: import("../../types").Extensi
122
122
  * @param {string} [extName] - Extension name
123
123
  * @returns {boolean} `true` if such an {@link ArgSpec} exists
124
124
  */
125
- export function hasArgSpec(name: string, extType?: import("../../types").ExtensionType | undefined, extName?: string | undefined): boolean;
125
+ export function hasArgSpec(name: string, extType?: import("../../../types/build").ExtensionType | undefined, extName?: string | undefined): boolean;
126
126
  /**
127
127
  * Return `true` if {@link AppiumSchema.finalize finalize} has been called
128
128
  * successfully and {@link AppiumSchema.reset reset} has not been called since.
@@ -1 +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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../lib/schema/schema.js"],"names":[],"mappings":"AASA;;;;;GAKG;AACH;IAqCY,cAA2B;IAAA,uEAEV;IAsHL,cAA2B;IAAA,qEACP;CAvI3C;AAED;;GAEG;AACH,oDAA2E;AAuf3E;;;GAGG;AACH;IAME,cAEC;IAPD;;OAEG;IACH,MAFU,SAAS,MAAM,CAAC,CAEa;CAKxC;AAED;;;;GAIG;AACH;IAWE;;;OAGG;IACH,qBAHW,aAAa,WACb,MAAM,EAKhB;IAjBD;;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;CAUN;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;AAvWC;;;;;;;;;;;GAWG;AACH,wCANW,aAAa,WACb,MAAM,UACN,YAAY,GAEV,IAAI,CAmBhB;AAzKD,sEAEC;AAyKD;;;;;;GAMG;AACH,iCALW,MAAM,qGAGJ,eAAQ,SAAS,CAI7B;AAED;;;;;;GAMG;AACH,iCALW,MAAM,qGAGJ,OAAO,CAInB;AAxMD;;;;GAIG;AACH,+BAFa,OAAO,CAInB;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,kCAFa,SAAS,OAAO,MAAM,EAAC,kBAAkB,CAAC,CAAC,CAsEvD;AAuBD;;;;;;;;;;GAUG;AACH,+BAFa,IAAI,CAehB;AA2ND;;;;;;;GAOG;AACH,gCALW,GAAG,6BAGD,OAAO,KAAK,EAAE,WAAW,EAAE,CAKvC;AAxCD;;;;;;GAMG;AACH,qDAFa,YAAY,CAIxB;AA9ED;;;;;;;;;;;;;GAaG;AACH,iDAqDC;AArID;;;;;;;;;;;GAWG;AACH,uIA8BC;AAED;;;;;;GAMG;AACH,iDAJW,aAAa,WACb,MAAM,GACJ,OAAO,MAAM,EAAC,mBAAmB,CAAC,CAe9C;AAiHD;;;;GAIG;AACH,uDAHW,MAAM,GACJ,OAAO,CAInB;;;;;;;4BAoJU,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"}
@@ -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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb2FjaEhvdGVsTWFwIiwiTWFwIiwic2V0Iiwia2V5IiwidmFsdWUiLCJoYXMiLCJFcnJvciIsImRlbGV0ZSIsImNsZWFyIiwiQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyIsIlNldCIsIkFwcGl1bVNjaGVtYSIsIl9hcmdTcGVjcyIsIl9yZWdpc3RlcmVkU2NoZW1hcyIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJfYWp2IiwiX2luc3RhbmNlIiwiX2ZpbmFsaXplZFNjaGVtYXMiLCJjb25zdHJ1Y3RvciIsIl9pbnN0YW50aWF0ZUFqdiIsImNyZWF0ZSIsImluc3RhbmNlIiwiXyIsImJpbmRBbGwiLCJoYXNSZWdpc3RlcmVkU2NoZW1hIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJpc0ZpbmFsaXplZCIsIkJvb2xlYW4iLCJnZXRBbGxBcmdTcGVjcyIsImZpbmFsaXplIiwiYWp2IiwiYmFzZVNjaGVtYSIsImNsb25lRGVlcCIsIkFwcGl1bUNvbmZpZ0pzb25TY2hlbWEiLCJhZGRBcmdTcGVjcyIsInNjaGVtYSIsInByb3BOYW1lIiwicHJvcFNjaGVtYSIsIk9iamVjdCIsImVudHJpZXMiLCJhcmdTcGVjIiwiQXJnU3BlYyIsImRlc3QiLCJhcHBpdW1DbGlEZXN0IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdCIsImFyZyIsIm9taXQiLCJwcm9wZXJ0aWVzIiwic2VydmVyIiwiZmluYWxpemVkU2NoZW1hcyIsImZpbmFsU2NoZW1hIiwicmVkdWNlIiwiZXh0ZW5zaW9uU2NoZW1hcyIsImZvckVhY2giLCIkcmVmIiwidG9TY2hlbWFCYXNlUmVmIiwiJGlkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCIkY29tbWVudCIsInZhbGlkYXRlU2NoZW1hIiwiYWRkU2NoZW1hIiwiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJmcmVlemUiLCJBanYiLCJhbGxFcnJvcnMiLCJrZXl3b3JkcyIsImtleXdvcmQiLCJhZGRLZXl3b3JkIiwicmVzZXQiLCJzY2hlbWFJZCIsImtleXMiLCJyZW1vdmVTY2hlbWEiLCJyZWdpc3RlclNjaGVtYSIsImlzVW5kZWZpbmVkIiwiVHlwZUVycm9yIiwiaXNTdXBwb3J0ZWRTY2hlbWFUeXBlIiwiU2NoZW1hVW5zdXBwb3J0ZWRTY2hlbWFFcnJvciIsIm5vcm1hbGl6ZWRFeHROYW1lIiwia2ViYWJDYXNlIiwiZ2V0IiwiU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IiLCJnZXRBcmdTcGVjIiwibmFtZSIsInRvQXJnIiwiaGFzQXJnU3BlYyIsImdldERlZmF1bHRzIiwiZmxhdHRlbiIsIlNjaGVtYUZpbmFsaXphdGlvbkVycm9yIiwicmVkdWNlciIsImRlZmF1bHRzIiwicmV0dmFsIiwidmFsdWVzIiwiZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24iLCJzcGVjcyIsImZpbHRlciIsInNwZWMiLCJyYXdEZXN0IiwiZ2V0U2NoZW1hIiwic3RhY2siLCJwcmVmaXgiLCJmbGF0dGVuZWQiLCJwYWlycyIsInRvUGFpcnMiLCJwdXNoIiwiU0VSVkVSX1BST1BfTkFNRSIsInJlZlNjaGVtYSIsImVyciIsIlNjaGVtYVVua25vd25TY2hlbWFFcnJvciIsImV4dGVuc2lvbkluZm9Gcm9tUm9vdFNjaGVtYUlkIiwiUmVmZXJlbmNlRXJyb3IiLCJyZWYiLCJfZ2V0VmFsaWRhdG9yIiwiaWQiLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZSIsImlzQXJyYXkiLCJlcnJvcnMiLCJpc0FsbG93ZWRTY2hlbWFGaWxlRXh0ZW5zaW9uIiwiZmlsZW5hbWUiLCJwYXRoIiwiZXh0bmFtZSIsImlzUGxhaW5PYmplY3QiLCIkYXN5bmMiLCJjb2RlIiwiZGF0YSIsIm1zZyIsImlzQm9vbGVhbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJhcHBpdW1TY2hlbWEiLCJmaW5hbGl6ZVNjaGVtYSIsInJlc2V0U2NoZW1hIiwiZmxhdHRlblNjaGVtYSIsImdldERlZmF1bHRzRm9yU2NoZW1hIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NjaGVtYS9zY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgYWRkRm9ybWF0cyBmcm9tICdhanYtZm9ybWF0cyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwaXVtQ29uZmlnSnNvblNjaGVtYSB9IGZyb20gJ0BhcHBpdW0vc2NoZW1hJztcbmltcG9ydCB7IEFQUElVTV9DT05GSUdfU0NIRU1BX0lELCBBcmdTcGVjLCBTRVJWRVJfUFJPUF9OQU1FIH0gZnJvbSAnLi9hcmctc3BlYyc7XG5pbXBvcnQgeyBrZXl3b3JkcyB9IGZyb20gJy4va2V5d29yZHMnO1xuXG4vKipcbiAqIEtleS92YWx1ZSBwYWlycyBnbyBpbi4uLiBidXQgdGhleSBkb24ndCBjb21lIG91dC5cbiAqXG4gKiBAdGVtcGxhdGUgSyxWXG4gKiBAZXh0ZW5kcyB7TWFwPEssVj59XG4gKi9cbmV4cG9ydCBjbGFzcyBSb2FjaEhvdGVsTWFwIGV4dGVuZHMgTWFwIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7S30ga2V5XG4gICAqIEBwYXJhbSB7Vn0gdmFsdWVcbiAgICovXG4gIHNldCAoa2V5LCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7a2V5fSBpcyBhbHJlYWR5IHNldGApO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuc2V0KGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7S30ga2V5XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZGVsZXRlIChrZXkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgUm9hY2hIb3RlbE1hcGApO1xuICB9XG59XG5cbi8qKlxuICogRXh0ZW5zaW9ucyB0aGF0IGFuIGV4dGVuc2lvbiBzY2hlbWEgZmlsZSBjYW4gaGF2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFsnLmpzb24nLCAnLmpzJywgJy5janMnXSk7XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBBanYgYW5kIHNjaGVtYS1yZWxhdGVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBTaG91bGQgaGF2ZSBiZWVuIG5hbWVkIEhpZ2hsYW5kZXIsIGJlY2F1c2UgX3RoZXJlIGNhbiBvbmx5IGJlIG9uZV9cbiAqL1xuY2xhc3MgQXBwaXVtU2NoZW1hIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB1bmlxdWUgYXJndW1lbnQgSURzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcge0BsaW5rIEFyZ1NwZWN9cy5cbiAgICpcbiAgICogQW4gXCJhcmd1bWVudFwiIGlzIGEgQ0xJIGFyZ3VtZW50IG9yIGEgY29uZmlnIHByb3BlcnR5LlxuICAgKlxuICAgKiBVc2VkIHRvIHByb3ZpZGUgZWFzeSBsb29rdXBzIG9mIGFyZ3VtZW50IG1ldGFkYXRhIHdoZW4gY29udmVydGluZyBiZXR3ZWVuIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgb2YgdGhvc2UgYXJndW1lbnRzLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Um9hY2hIb3RlbE1hcDxzdHJpbmcsQXJnU3BlYz59XG4gICAqL1xuICBfYXJnU3BlY3MgPSBuZXcgUm9hY2hIb3RlbE1hcCgpO1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiBleHRlbnNpb24gdHlwZXMgdG8gZXh0ZW5zaW9uIG5hbWVzIHRvIHNjaGVtYSBvYmplY3RzLlxuICAgKlxuICAgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBuYW1pbmcgY29uZmxpY3RzLiBUaGUgc2NoZW1hc1xuICAgKiBhcmUgc3RvcmVkIGhlcmUgaW4gbWVtb3J5IHVudGlsIHRoZSBpbnN0YW5jZSBpcyBfZmluYWxpemVkXy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlY29yZDxFeHRlbnNpb25UeXBlLE1hcDxzdHJpbmcsU2NoZW1hT2JqZWN0Pj59XG4gICAqL1xuICBfcmVnaXN0ZXJlZFNjaGVtYXMgPSB7W0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLCBbUExVR0lOX1RZUEVdOiBuZXcgTWFwKCl9O1xuXG4gIC8qKlxuICAgKiBBanYgaW5zdGFuY2VcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Fqdn1cbiAgICovXG4gIF9hanY7XG5cbiAgLyoqXG4gICAqIFNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0FwcGl1bVNjaGVtYX1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFuY2U7XG5cbiAgLyoqXG4gICAqIExvb2t1cCBvZiBzY2hlbWEgSURzIHRvIGZpbmFsaXplZCBzY2hlbWFzLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcmVmZXJlbmNlcywgYnV0IHJhdGhlciB0aGUgcm9vdCBzY2hlbWFzIHRoZW1zZWx2ZXMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD4/fVxuICAgKi9cbiAgX2ZpbmFsaXplZFNjaGVtYXMgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBBanYsIGFkZHMgc3RhbmRhcmQgZm9ybWF0cyBhbmQgb3VyIGN1c3RvbSBrZXl3b3Jkcy5cbiAgICogQHNlZSBodHRwczovL25wbS5pbS9hanYtZm9ybWF0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuX2FqdiA9IEFwcGl1bVNjaGVtYS5faW5zdGFudGlhdGVBanYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IGZ1bmN0aW9uIGZvciB7QGxpbmsgQXBwaXVtU2NoZW1hfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIFJldHVybnMgYSBzaW5nbGV0b24gaW5zdGFuY2UgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIGNyZWF0ZXMgYSBuZXcgb25lLlxuICAgKiBCaW5kcyBwdWJsaWMgbWV0aG9kcyB0byB0aGUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtBcHBpdW1TY2hlbWF9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlICgpIHtcbiAgICBpZiAoIUFwcGl1bVNjaGVtYS5faW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEFwcGl1bVNjaGVtYSgpO1xuICAgICAgQXBwaXVtU2NoZW1hLl9pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgXy5iaW5kQWxsKGluc3RhbmNlLCBbXG4gICAgICAgICdmaW5hbGl6ZScsXG4gICAgICAgICdmbGF0dGVuJyxcbiAgICAgICAgJ2dldEFsbEFyZ1NwZWNzJyxcbiAgICAgICAgJ2dldEFyZ1NwZWMnLFxuICAgICAgICAnZ2V0RGVmYXVsdHMnLFxuICAgICAgICAnZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24nLFxuICAgICAgICAnZ2V0U2NoZW1hJyxcbiAgICAgICAgJ2hhc0FyZ1NwZWMnLFxuICAgICAgICAnaXNGaW5hbGl6ZWQnLFxuICAgICAgICAncmVnaXN0ZXJTY2hlbWEnLFxuICAgICAgICAnaGFzUmVnaXN0ZXJlZFNjaGVtYScsXG4gICAgICAgICdyZXNldCcsXG4gICAgICAgICd2YWxpZGF0ZScsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXBwaXVtU2NoZW1hLl9pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBhIHNjaGVtYSBoYXMgYmVlbiByZWdpc3RlcmVkIHVzaW5nIGdpdmVuIGV4dGVuc2lvbiB0eXBlIGFuZCBuYW1lLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGRlcGVuZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gX2ZpbmFsaXplZF8uXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gTmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgcmVnaXN0ZXJlZFxuICAgKi9cbiAgaGFzUmVnaXN0ZXJlZFNjaGVtYSAoZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5oYXMoZXh0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplIGZpbmFsaXplfSBoYXMgYmVlbiBjYWxsZWRcbiAgICogc3VjY2Vzc2Z1bGx5IGFuZCB7QGxpbmsgQXBwaXVtU2NoZW1hLnJlc2V0IHJlc2V0fSBoYXMgbm90IGJlZW4gY2FsbGVkIHNpbmNlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgZmluYWxpemVkXG4gICAqL1xuICBpc0ZpbmFsaXplZCAoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZmluYWxpemVkU2NoZW1hcyk7XG4gIH1cblxuICBnZXRBbGxBcmdTcGVjcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgdGhpcyB3aGVuIG5vIG1vcmUgc2NoZW1hcyB3aWxsIGJlIHJlZ2lzdGVyZWQuXG4gICAqXG4gICAqIFRoaXMgZG9lcyB0aHJlZSB0aGluZ3M6XG4gICAqIDEuIEl0IGNvbWJpbmVzIGFsbCBzY2hlbWFzIGZyb20gZXh0ZW5zaW9ucyBpbnRvIHRoZSBBcHBpdW0gY29uZmlnIHNjaGVtYSxcbiAgICogICAgdGhlbiBhZGRzIHRoZSByZXN1bHQgdG8gdGhlIGBBanZgIGluc3RhbmNlLlxuICAgKiAyLiBJdCBhZGRzIHNjaGVtYXMgZm9yIF9lYWNoXyBhcmd1bWVudC9wcm9wZXJ0eSBmb3IgdmFsaWRhdGlvbiBwdXJwb3Nlcy5cbiAgICogICAgVGhlIENMSSB1c2VzIHRoZXNlIHNjaGVtYXMgdG8gdmFsaWRhdGUgc3BlY2lmaWMgYXJndW1lbnRzLlxuICAgKiAzLiBUaGUgc2NoZW1hcyBhcmUgdmFsaWRhdGVkIGFnYWluc3QgSlNPTiBzY2hlbWEgZHJhZnQtMDcgKHdoaWNoIGlzIHRoZVxuICAgKiAgICBvbmx5IG9uZSBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKVxuICAgKlxuICAgKiBBbnkgbWV0aG9kIGluIHRoaXMgaW5zdGFuY2UgdGhhdCBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIHRoZSBgQWp2YCBpbnN0YW5jZVxuICAgKiB3aWxsIHRocm93IGlmIHRoaXMgbWV0aG9kIGhhcyBub3QgYmVlbiBjYWxsZWQuXG4gICAqXG4gICAqIElmIHRoZSBpbnN0YW5jZSBoYXMgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCwgdGhpcyBpcyBhIG5vLW9wLlxuICAgKiBAcHVibGljXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgc2NoZW1hIGlzIG5vdCB2YWxpZFxuICAgKiBAcmV0dXJucyB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+Pn0gUmVjb3JkIG9mIHNjaGVtYSBJRHMgdG8gZnVsbCBzY2hlbWEgb2JqZWN0c1xuICAgKi9cbiAgZmluYWxpemUgKCkge1xuICAgIGlmICh0aGlzLmlzRmluYWxpemVkKCkpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge05vbk51bGxhYmxlPHR5cGVvZiB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzPn0gKi8gKFxuICAgICAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFqdiA9IHRoaXMuX2FqdjtcblxuICAgIC8vIEFqdiB3aWxsIF9tdXRhdGVfIHRoZSBzY2hlbWEsIHNvIHdlIG5lZWQgdG8gY2xvbmUgaXQuXG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IF8uY2xvbmVEZWVwKEFwcGl1bUNvbmZpZ0pzb25TY2hlbWEpO1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hXG4gICAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV1cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdXG4gICAgICovXG4gICAgY29uc3QgYWRkQXJnU3BlY3MgPSAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSA9PiB7XG4gICAgICBmb3IgKGxldCBbcHJvcE5hbWUsIHByb3BTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYSkpIHtcbiAgICAgICAgY29uc3QgYXJnU3BlYyA9IEFyZ1NwZWMuY3JlYXRlKHByb3BOYW1lLCB7XG4gICAgICAgICAgZGVzdDogcHJvcFNjaGVtYS5hcHBpdW1DbGlEZXN0LFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcHJvcFNjaGVtYS5kZWZhdWx0LFxuICAgICAgICAgIGV4dFR5cGUsXG4gICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHthcmd9ID0gYXJnU3BlYztcbiAgICAgICAgdGhpcy5fYXJnU3BlY3Muc2V0KGFyZywgYXJnU3BlYyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGFkZEFyZ1NwZWNzKFxuICAgICAgXy5vbWl0KGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllcywgW1xuICAgICAgICBEUklWRVJfVFlQRSxcbiAgICAgICAgUExVR0lOX1RZUEUsXG4gICAgICBdKSxcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pn1cbiAgICAgKi9cbiAgICBjb25zdCBmaW5hbGl6ZWRTY2hlbWFzID0ge307XG5cbiAgICBjb25zdCBmaW5hbFNjaGVtYSA9IF8ucmVkdWNlKFxuICAgICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXMsXG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7dHlwZW9mIGJhc2VTY2hlbWF9IGJhc2VTY2hlbWFcbiAgICAgICAqIEBwYXJhbSB7TWFwPHN0cmluZyxTY2hlbWFPYmplY3Q+fSBleHRlbnNpb25TY2hlbWFzXG4gICAgICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGVcbiAgICAgICAqL1xuICAgICAgKGJhc2VTY2hlbWEsIGV4dGVuc2lvblNjaGVtYXMsIGV4dFR5cGUpID0+IHtcbiAgICAgICAgZXh0ZW5zaW9uU2NoZW1hcy5mb3JFYWNoKChzY2hlbWEsIGV4dE5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCAkcmVmID0gQXJnU3BlYy50b1NjaGVtYUJhc2VSZWYoZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgICAgICAgc2NoZW1hLiRpZCA9ICRyZWY7XG4gICAgICAgICAgc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2U7IC8vIHRoaXMgbWFrZXMgYHNjaGVtYWAgYmVjb21lIGEgYFN0cmljdFNjaGVtYU9iamVjdGBcbiAgICAgICAgICBiYXNlU2NoZW1hLnByb3BlcnRpZXMuc2VydmVyLnByb3BlcnRpZXNbZXh0VHlwZV0ucHJvcGVydGllc1tleHROYW1lXSA9XG4gICAgICAgICAgICB7JHJlZiwgJGNvbW1lbnQ6IGV4dE5hbWV9O1xuICAgICAgICAgIGFqdi52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuICAgICAgICAgIGFkZEFyZ1NwZWNzKHNjaGVtYS5wcm9wZXJ0aWVzLCBleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBhanYuYWRkU2NoZW1hKHNjaGVtYSwgJHJlZik7XG4gICAgICAgICAgZmluYWxpemVkU2NoZW1hc1skcmVmXSA9IC8qKiBAdHlwZSB7U3RyaWN0U2NoZW1hT2JqZWN0fSAqLyAoc2NoZW1hKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBiYXNlU2NoZW1hO1xuICAgICAgfSxcbiAgICAgIGJhc2VTY2hlbWEsXG4gICAgKTtcblxuICAgIGFqdi5hZGRTY2hlbWEoZmluYWxTY2hlbWEsIEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKTtcbiAgICBmaW5hbGl6ZWRTY2hlbWFzW0FQUElVTV9DT05GSUdfU0NIRU1BX0lEXSA9IGZpbmFsU2NoZW1hO1xuICAgIGFqdi52YWxpZGF0ZVNjaGVtYShmaW5hbFNjaGVtYSwgdHJ1ZSk7XG5cbiAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID0gZmluYWxpemVkU2NoZW1hcztcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShmaW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIGFuZCBjcmVhdGVzIGFuIEFqdiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge0Fqdn1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFudGlhdGVBanYgKCkge1xuICAgIGNvbnN0IGFqdiA9IGFkZEZvcm1hdHMoXG4gICAgICBuZXcgQWp2KHtcbiAgICAgICAgLy8gd2l0aG91dCB0aGlzIG5vdCBtdWNoIHZhbGlkYXRpb24gYWN0dWFsbHkgaGFwcGVuc1xuICAgICAgICBhbGxFcnJvcnM6IHRydWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gYWRkIGN1c3RvbSBrZXl3b3JkcyB0byBhanYuIHNlZSBzY2hlbWEta2V5d29yZHMuanNcbiAgICBfLmZvckVhY2goa2V5d29yZHMsIChrZXl3b3JkKSA9PiB7XG4gICAgICBhanYuYWRkS2V5d29yZChrZXl3b3JkKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBhanY7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoaXMgaW5zdGFuY2UgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLlxuICAgKlxuICAgKiAtIFJlbW92ZXMgYWxsIGFkZGVkIHNjaGVtYXMgZnJvbSB0aGUgYEFqdmAgaW5zdGFuY2VcbiAgICogLSBSZXNldHMgdGhlIG1hcCBvZiB7QGxpbmsgQXJnU3BlYyBBcmdTcGVjc31cbiAgICogLSBSZXNldHMgdGhlIG1hcCBvZiByZWdpc3RlcmVkIHNjaGVtYXNcbiAgICogLSBTZXRzIHRoZSB7QGxpbmsgQXBwaXVtU2NoZW1hLl9maW5hbGl6ZWQgX2ZpbmFsaXplZH0gZmxhZyB0byBgZmFsc2VgXG4gICAqXG4gICAqIElmIHlvdSBuZWVkIHRvIGNhbGwge0BsaW5rIEFwcGl1bVNjaGVtYS5maW5hbGl6ZX0gYWdhaW4sIHlvdSdsbCB3YW50IHRvIGNhbGwgdGhpcyBmaXJzdC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZXNldCAoKSB7XG4gICAgZm9yIChjb25zdCBzY2hlbWFJZCBvZiBPYmplY3Qua2V5cyh0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID8/IHt9KSkge1xuICAgICAgdGhpcy5fYWp2LnJlbW92ZVNjaGVtYShzY2hlbWFJZCk7XG4gICAgfVxuICAgIHRoaXMuX2FyZ1NwZWNzID0gbmV3IFJvYWNoSG90ZWxNYXAoKTtcbiAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hcyA9IHtcbiAgICAgIFtEUklWRVJfVFlQRV06IG5ldyBNYXAoKSxcbiAgICAgIFtQTFVHSU5fVFlQRV06IG5ldyBNYXAoKSxcbiAgICB9O1xuICAgIHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMgPSBudWxsO1xuXG4gICAgLy8gQWp2IHNlZW1zIHRvIGhhdmUgYW4gb3Zlci1lYWdlciBjYWNoZSwgc28gd2UgaGF2ZSB0byBkdW1wIHRoZSBvYmplY3QgZW50aXJlbHkuXG4gICAgdGhpcy5fYWp2ID0gQXBwaXVtU2NoZW1hLl9pbnN0YW50aWF0ZUFqdigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHNjaGVtYSBmcm9tIGFuIGV4dGVuc2lvbi5cbiAgICpcbiAgICogVGhpcyBpcyBcImZhaWwtZmFzdFwiIGluIHRoYXQgdGhlIHNjaGVtYSB3aWxsIGltbWVkaWF0ZWx5IGJlIHZhbGlkYXRlZCBhZ2FpbnN0IEpTT04gc2NoZW1hIGRyYWZ0LTA3IF9vcl8gd2hhdGV2ZXIgdGhlIHZhbHVlIG9mIHRoZSBzY2hlbWEncyBgJHNjaGVtYWAgcHJvcCBpcy5cbiAgICpcbiAgICogRG9lcyBfbm90XyBhZGQgdGhlIHNjaGVtYSB0byB0aGUgYGFqdmAgaW5zdGFuY2UgKHRoaXMgaXMgZG9uZSBieSB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSkuXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gVW5pcXVlIGV4dGVuc2lvbiBuYW1lIGZvciBgdHlwZWBcbiAgICogQHBhcmFtIHtTY2hlbWFPYmplY3R9IHNjaGVtYSAtIFNjaGVtYSBvYmplY3RcbiAgICogQHRocm93cyB7U2NoZW1hTmFtZUNvbmZsaWN0RXJyb3J9IElmIHRoZSBzY2hlbWEgaXMgYW4gaW52YWxpZFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlZ2lzdGVyU2NoZW1hIChleHRUeXBlLCBleHROYW1lLCBzY2hlbWEpIHtcbiAgICBpZiAoIShleHRUeXBlICYmIGV4dE5hbWUpIHx8IF8uaXNVbmRlZmluZWQoc2NoZW1hKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0V4cGVjdGVkIGV4dGVuc2lvbiB0eXBlLCBleHRlbnNpb24gbmFtZSwgYW5kIGEgZGVmaW5lZCBzY2hlbWEnLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFBcHBpdW1TY2hlbWEuaXNTdXBwb3J0ZWRTY2hlbWFUeXBlKHNjaGVtYSkpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWFVbnN1cHBvcnRlZFNjaGVtYUVycm9yKHNjaGVtYSwgZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFeHROYW1lID0gXy5rZWJhYkNhc2UoZXh0TmFtZSk7XG4gICAgaWYgKHRoaXMuaGFzUmVnaXN0ZXJlZFNjaGVtYShleHRUeXBlLCBub3JtYWxpemVkRXh0TmFtZSkpIHtcbiAgICAgIGlmICh0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5nZXQobm9ybWFsaXplZEV4dE5hbWUpID09PSBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFNjaGVtYU5hbWVDb25mbGljdEVycm9yKGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLl9hanYudmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0cnVlKTtcblxuICAgIHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLnNldChub3JtYWxpemVkRXh0TmFtZSwgc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEge0BsaW5rIEFyZ1NwZWN9IGZvciB0aGUgZ2l2ZW4gYXJndW1lbnQgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7QXJnU3BlY3x1bmRlZmluZWR9IEFyZ1NwZWMgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kXG4gICAqL1xuICBnZXRBcmdTcGVjIChuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FyZ1NwZWNzLmdldChBcmdTcGVjLnRvQXJnKG5hbWUsIGV4dFR5cGUsIGV4dE5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5zdGFuY2Uga25vd3MgYWJvdXQgYW4gYXJndW1lbnQgYnkgdGhlIGdpdmVuIGBuYW1lYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDTEkgYXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHN1Y2ggYW4ge0BsaW5rIEFyZ1NwZWN9IGV4aXN0c1xuICAgKi9cbiAgaGFzQXJnU3BlYyAobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9hcmdTcGVjcy5oYXMoQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGBSZWNvcmRgIG9mIGFyZ3VtZW50IFwiZGVzdFwiIHN0cmluZ3MgdG8gZGVmYXVsdCB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBcImRlc3RcIiBzdHJpbmcgaXMgdGhlIHByb3BlcnR5IG5hbWUgaW4gb2JqZWN0IHJldHVybmVkIGJ5XG4gICAqIGBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlclsncGFyc2VfYXJncyddYC5cbiAgICogQHRlbXBsYXRlIHtib29sZWFufHVuZGVmaW5lZH0gRmxhdHRlbmVkXG4gICAqIEBwYXJhbSB7RmxhdHRlbmVkfSBbZmxhdHRlbj10cnVlXSAtIElmIGB0cnVlYCwgZmxhdHRlbnMgdGhlIHJldHVybmVkIG9iamVjdFxuICAgKiB1c2luZyBcImtleXBhdGhcIi1zdHlsZSBrZXlzIG9mIHRoZSBmb3JtYXQgYDxleHRUeXBlPi48ZXh0TmFtZT4uPGFyZ05hbWU+YC5cbiAgICogT3RoZXJ3aXNlLCByZXR1cm5zIGEgbmVzdGVkIG9iamVjdCB1c2luZyBgZXh0VHlwZWAgYW5kIGBleHROYW1lYCBhc1xuICAgKiBwcm9wZXJ0aWVzLiBCYXNlIGFyZ3VtZW50cyAoc2VydmVyIGFyZ3VtZW50cykgYXJlIGFsd2F5cyBhdCB0aGUgdG9wIGxldmVsLlxuICAgKiBAcmV0dXJucyB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fVxuICAgKi9cbiAgZ2V0RGVmYXVsdHMgKGZsYXR0ZW4gPSAvKiogQHR5cGUge0ZsYXR0ZW5lZH0gKi8gKHRydWUpKSB7XG4gICAgaWYgKCF0aGlzLmlzRmluYWxpemVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNhbGxiYWNrIERlZmF1bHRSZWR1Y2VyXG4gICAgICogQHBhcmFtIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59IGRlZmF1bHRzXG4gICAgICogQHBhcmFtIHtBcmdTcGVjfSBhcmdTcGVjXG4gICAgICogQHJldHVybnMge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn1cbiAgICAgKi9cbiAgICAvKiogQHR5cGUge0RlZmF1bHRSZWR1Y2VyfSAqL1xuICAgIGNvbnN0IHJlZHVjZXIgPSBmbGF0dGVuXG4gICAgICA/IChkZWZhdWx0cywge2RlZmF1bHRWYWx1ZSwgZGVzdH0pID0+IHtcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICBkZWZhdWx0c1tkZXN0XSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICB9XG4gICAgICA6IChkZWZhdWx0cywge2RlZmF1bHRWYWx1ZSwgZGVzdH0pID0+IHtcbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICBfLnNldChkZWZhdWx0cywgZGVzdCwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgICB9O1xuXG4gICAgLyoqIEB0eXBlIHtEZWZhdWx0VmFsdWVzPEZsYXR0ZW5lZD59ICovXG4gICAgY29uc3QgcmV0dmFsID0ge307XG4gICAgcmV0dXJuIFsuLi50aGlzLl9hcmdTcGVjcy52YWx1ZXMoKV0ucmVkdWNlKHJlZHVjZXIsIHJldHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGZsYXR0ZW5lZCBSZWNvcmQgb2YgZGVmYXVsdHMgZm9yIGEgc3BlY2lmaWMgZXh0ZW5zaW9uLiBLZXlzIHdpbGxcbiAgICogYmUgb2YgZm9ybWF0IGA8YXJnTmFtZT5gLlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGUgLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLEFyZ1NwZWNEZWZhdWx0VmFsdWU+fVxuICAgKi9cbiAgZ2V0RGVmYXVsdHNGb3JFeHRlbnNpb24gKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBpZiAoIXRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgfVxuICAgIGNvbnN0IHNwZWNzID0gWy4uLnRoaXMuX2FyZ1NwZWNzLnZhbHVlcygpXS5maWx0ZXIoXG4gICAgICAoc3BlYykgPT4gc3BlYy5leHRUeXBlID09PSBleHRUeXBlICYmIHNwZWMuZXh0TmFtZSA9PT0gZXh0TmFtZSxcbiAgICApO1xuICAgIHJldHVybiBzcGVjcy5yZWR1Y2UoKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCByYXdEZXN0fSkgPT4ge1xuICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgZGVmYXVsdHNbcmF3RGVzdF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gc2NoZW1hIGludG8gYW4gYXJyYXkgb2YgYFNjaGVtYU9iamVjdGBzIGFuZCBhc3NvY2lhdGVkXG4gICAqIHtAbGluayBBcmdTcGVjIEFyZ1NwZWNzfS5cbiAgICpcbiAgICogQ29udmVydHMgbmVzdGVkIGV4dGVuc2lvbiBzY2hlbWFzIHRvIGtleXMgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiB0eXBlIGFuZFxuICAgKiBuYW1lLiBVc2VkIHdoZW4gdHJhbnNsYXRpbmcgdG8gYGFyZ3BhcnNlYCBvcHRpb25zIG9yIGdldHRpbmcgdGhlIGxpc3Qgb2ZcbiAgICogZGVmYXVsdCB2YWx1ZXMgKHNlZSB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfSkgZm9yIENMSSBvciBvdGhlcndpc2UuXG4gICAqXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gaW50ZXJtZWRpYXRlIHJlcHJzZW50YXRpb24gdXNlZCBieSBgY2xpLWFyZ3NgXG4gICAqIG1vZHVsZSdzIGB0b1BhcnNlckFyZ3NgLCB3aGljaCBjb252ZXJ0cyB0aGUgZmluYWxpemVkIHNjaGVtYSB0byBwYXJhbWV0ZXJzXG4gICAqIHVzZWQgYnkgYGFyZ3BhcnNlYC5cbiAgICogQHRocm93cyBJZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSBoYXMgbm90IGJlZW4gY2FsbGVkIHlldC5cbiAgICogQHJldHVybnMge0ZsYXR0ZW5lZFNjaGVtYX1cbiAgICovXG4gIGZsYXR0ZW4gKCkge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hKCk7XG5cbiAgICAvKiogQHR5cGUgeyB7cHJvcGVydGllczogU2NoZW1hT2JqZWN0LCBwcmVmaXg6IHN0cmluZ1tdfVtdIH0gKi9cbiAgICBjb25zdCBzdGFjayA9IFt7cHJvcGVydGllczogc2NoZW1hLnByb3BlcnRpZXMsIHByZWZpeDogW119XTtcbiAgICAvKiogQHR5cGUge0ZsYXR0ZW5lZFNjaGVtYX0gKi9cbiAgICBjb25zdCBmbGF0dGVuZWQgPSBbXTtcblxuICAgIC8vIHRoaXMgYml0IGlzIGEgcmVjdXJzaXZlIGFsZ29yaXRobSByZXdyaXR0ZW4gYXMgYSBmb3IgbG9vcC5cbiAgICAvLyB3aGVuIHdlIGZpbmQgc29tZXRoaW5nIHdlIHdhbnQgdG8gdHJhdmVyc2UsIHdlIGFkZCBpdCB0byBgc3RhY2tgXG4gICAgZm9yIChjb25zdCB7cHJvcGVydGllcywgcHJlZml4fSBvZiBzdGFjaykge1xuICAgICAgY29uc3QgcGFpcnMgPSBfLnRvUGFpcnMocHJvcGVydGllcyk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBwYWlycykge1xuICAgICAgICBjb25zdCB7cHJvcGVydGllcywgJHJlZn0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgICBwcmVmaXg6IGtleSA9PT0gU0VSVkVSX1BST1BfTkFNRSA/IFtdIDogWy4uLnByZWZpeCwga2V5XSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgkcmVmKSB7XG4gICAgICAgICAgbGV0IHJlZlNjaGVtYTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVmU2NoZW1hID0gdGhpcy5nZXRTY2hlbWEoJHJlZik7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gaWYgYW4gZXh0ZW5zaW9uIHNjaGVtYSBzdXBwbGllcyBhICRyZWYgdG8gYSBub24tZXhpc3RlbnQgc2NoZW1hXG4gICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yKCRyZWYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7bm9ybWFsaXplZEV4dE5hbWV9ID1cbiAgICAgICAgICAgIEFyZ1NwZWMuZXh0ZW5zaW9uSW5mb0Zyb21Sb290U2NoZW1hSWQoJHJlZik7XG4gICAgICAgICAgaWYgKCFub3JtYWxpemVkRXh0TmFtZSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgZXh0ZW5zaW9uIG5hbWUgZnJvbSBzY2hlbWEgSUQgJHskcmVmfS4gVGhpcyBpcyBhIGJ1Zy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiByZWZTY2hlbWEucHJvcGVydGllcyxcbiAgICAgICAgICAgIHByZWZpeDogWy4uLnByZWZpeCwga2V5LCBub3JtYWxpemVkRXh0TmFtZV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSBEUklWRVJfVFlQRSAmJiBrZXkgIT09IFBMVUdJTl9UWVBFKSB7XG4gICAgICAgICAgY29uc3QgW2V4dFR5cGUsIGV4dE5hbWVdID0gcHJlZml4O1xuICAgICAgICAgIGNvbnN0IGFyZ1NwZWMgPSB0aGlzLmdldEFyZ1NwZWMoXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAvKiogQHR5cGUge0V4dGVuc2lvblR5cGV9ICovIChleHRUeXBlKSxcbiAgICAgICAgICAgIGV4dE5hbWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWFyZ1NwZWMpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgICAgICAgIGBVbmtub3duIGFyZ3VtZW50IHdpdGgga2V5ICR7a2V5fSwgZXh0VHlwZSAke2V4dFR5cGV9IGFuZCBleHROYW1lICR7ZXh0TmFtZX0uIFRoaXMgaXMgYSBidWcuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHtzY2hlbWE6IF8uY2xvbmVEZWVwKHZhbHVlKSwgYXJnU3BlY30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHNjaGVtYSBpdHNlbGZcbiAgICogQHB1YmxpY1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZl0gLSBTY2hlbWEgSURcbiAgICogQHRocm93cyBJZiB0aGUgc2NoZW1hIGhhcyBub3QgeWV0IGJlZW4gZmluYWxpemVkXG4gICAqIEByZXR1cm5zIHtTY2hlbWFPYmplY3R9XG4gICAqL1xuICBnZXRTY2hlbWEgKHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7U2NoZW1hT2JqZWN0fSAqLyAodGhpcy5fZ2V0VmFsaWRhdG9yKHJlZikuc2NoZW1hKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgc2NoZW1hIHZhbGlkYXRvciBmdW5jdGlvbiBmcm9tIEFqdlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2lkXSAtIFNjaGVtYSBJRFxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCdhanYnKS5WYWxpZGF0ZUZ1bmN0aW9ufVxuICAgKi9cbiAgX2dldFZhbGlkYXRvciAoaWQgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuX2Fqdi5nZXRTY2hlbWEoaWQpO1xuICAgIGlmICghdmFsaWRhdG9yKSB7XG4gICAgICBpZiAoaWQgPT09IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcihpZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYW4gb2JqZWN0LCB2YWxpZGF0ZXMgaXQgYWdhaW5zdCB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEuXG4gICAqIElmIGVycm9ycyBvY2N1ciwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgbm9uLWVtcHR5LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgKGhvcGVmdWxseSBhbiBvYmplY3QpIHRvIHZhbGlkYXRlIGFnYWluc3QgdGhlIHNjaGVtYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZl0gLSBTY2hlbWEgSUQgb3IgcmVmLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IEFycmF5IG9mIGVycm9ycywgaWYgYW55LlxuICAgKi9cbiAgdmFsaWRhdGUgKHZhbHVlLCByZWYgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuX2dldFZhbGlkYXRvcihyZWYpO1xuICAgIHJldHVybiAhdmFsaWRhdG9yKHZhbHVlKSAmJiBfLmlzQXJyYXkodmFsaWRhdG9yLmVycm9ycylcbiAgICAgID8gWy4uLnZhbGlkYXRvci5lcnJvcnNdXG4gICAgICA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGBmaWxlbmFtZWAncyBmaWxlIGV4dGVuc2lvbiBpcyBhbGxvd2VkIChpbiB7QGxpbmsgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OU30pLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbiAoZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUy5oYXMocGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYHNjaGVtYWAgaXMgYSBwbGFpbiBvYmplY3Qgd2l0aCBhIG5vbi10cnVlIGAkYXN5bmNgIHByb3BlcnR5LlxuICAgKiBAcGFyYW0ge2FueX0gc2NoZW1hIC0gU2NoZW1hIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHtzY2hlbWEgaXMgU2NoZW1hT2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIGlzU3VwcG9ydGVkU2NoZW1hVHlwZSAoc2NoZW1hKSB7XG4gICAgcmV0dXJuIF8uaXNQbGFpbk9iamVjdChzY2hlbWEpICYmIHNjaGVtYS4kYXN5bmMgIT09IHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiB0aGUge0BsaW5rIEFwcGl1bVNjaGVtYX0gaW5zdGFuY2UgaGFzIG5vdCB5ZXQgYmVlbiBmaW5hbGl6ZWQsIGJ1dFxuICogdGhlIG1ldGhvZCBjYWxsZWQgcmVxdWlyZXMgaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgY29kZSA9ICdBUFBJVU1FUlJfU0NIRU1BX0ZJTkFMSVpBVElPTic7XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKCdTY2hlbWEgbm90IHlldCBmaW5hbGl6ZWQ7IGBmaW5hbGl6ZSgpYCBtdXN0IGJlIGNhbGxlZCBmaXJzdC4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgXCJ1bmlxdWVcIiBzY2hlbWEgSUQgY29uZmxpY3RzIHdpdGggYW4gZXhpc3Rpbmcgc2NoZW1hIElELlxuICpcbiAqIFRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGNhdXNlZCBieSBhdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIHRoZSBzYW1lIHNjaGVtYSB0d2ljZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYU5hbWVDb25mbGljdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfTkFNRV9DT05GTElDVCc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7ZXh0VHlwZTogRXh0ZW5zaW9uVHlwZSwgZXh0TmFtZTogc3RyaW5nfT59XG4gICAqL1xuICBkYXRhO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICovXG4gIGNvbnN0cnVjdG9yIChleHRUeXBlLCBleHROYW1lKSB7XG4gICAgc3VwZXIoXG4gICAgICBgTmFtZSBmb3IgJHtleHRUeXBlfSBzY2hlbWEgXCIke2V4dE5hbWV9XCIgY29uZmxpY3RzIHdpdGggYW4gZXhpc3Rpbmcgc2NoZW1hYCxcbiAgICApO1xuICAgIHRoaXMuZGF0YSA9IHtleHRUeXBlLCBleHROYW1lfTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgc2NoZW1hIElEIHdhcyBleHBlY3RlZCwgYnV0IGl0IGRvZXNuJ3QgZXhpc3Qgb24gdGhlIHtAbGluayBBanZ9IGluc3RhbmNlLlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hVW5rbm93blNjaGVtYUVycm9yIGV4dGVuZHMgUmVmZXJlbmNlRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfVU5LTk9XTl9TQ0hFTUEnO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8e3NjaGVtYUlkOiBzdHJpbmd9Pn1cbiAgICovXG4gIGRhdGE7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFJZFxuICAgKi9cbiAgY29uc3RydWN0b3IgKHNjaGVtYUlkKSB7XG4gICAgc3VwZXIoYFVua25vd24gc2NoZW1hOiBcIiR7c2NoZW1hSWR9XCJgKTtcbiAgICB0aGlzLmRhdGEgPSB7c2NoZW1hSWR9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgaXMgcHJvdmlkZWQsIGJ1dCBpdCdzIG9mIGFuIHVuc3VwcG9ydGVkIHR5cGUuXG4gKlxuICogXCJWYWxpZFwiIHNjaGVtYXMgd2hpY2ggYXJlIHVuc3VwcG9ydGVkIGluY2x1ZGUgYm9vbGVhbiBzY2hlbWFzIGFuZCBhc3luYyBzY2hlbWFzXG4gKiAoaGF2aW5nIGEgYHRydWVgIGAkYXN5bmNgIHByb3BlcnR5KS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3IgZXh0ZW5kcyBUeXBlRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfVU5TVVBQT1JURURfU0NIRU1BJztcblxuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHtzY2hlbWE6IGFueSwgZXh0VHlwZTogRXh0ZW5zaW9uVHlwZSwgZXh0TmFtZTogc3RyaW5nfT59XG4gICAqL1xuICBkYXRhO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gc2NoZW1hXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKHNjaGVtYSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvODI3N1xuICAgIHN1cGVyKFxuICAgICAgKCgpID0+IHtcbiAgICAgICAgbGV0IG1zZyA9IGBVbnN1cHBvcnRlZCBzY2hlbWEgZnJvbSAke2V4dFR5cGV9IFwiJHtleHROYW1lfVwiOmA7XG4gICAgICAgIGlmIChfLmlzQm9vbGVhbihzY2hlbWEpKSB7XG4gICAgICAgICAgcmV0dXJuIGAke21zZ30gc2NoZW1hIGNhbm5vdCBiZSBhIGJvb2xlYW5gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzUGxhaW5PYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICAgIGlmIChzY2hlbWEuJGFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgY2Fubm90IGJlIGFuIGFzeW5jIHNjaGVtYWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBzY2hlbWEgSVMgc3VwcG9ydGVkOyB0aGlzIGVycm9yIHNob3VsZCBub3QgYmUgdGhyb3duICh0aGlzIGlzIGEgYnVnKS4gdmFsdWUgb2Ygc2NoZW1hOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICApfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgbXVzdCBiZSBhIHBsYWluIG9iamVjdCB3aXRob3V0IGEgdHJ1ZSBcIiRhc3luY1wiIHByb3BlcnR5YDtcbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICB0aGlzLmRhdGEgPSB7c2NoZW1hLCBleHRUeXBlLCBleHROYW1lfTtcbiAgfVxufVxuXG5jb25zdCBhcHBpdW1TY2hlbWEgPSBBcHBpdW1TY2hlbWEuY3JlYXRlKCk7XG5cbmV4cG9ydCBjb25zdCB7XG4gIHJlZ2lzdGVyU2NoZW1hLFxuICBnZXRBbGxBcmdTcGVjcyxcbiAgZ2V0QXJnU3BlYyxcbiAgaGFzQXJnU3BlYyxcbiAgaXNGaW5hbGl6ZWQsXG4gIGZpbmFsaXplOiBmaW5hbGl6ZVNjaGVtYSxcbiAgcmVzZXQ6IHJlc2V0U2NoZW1hLFxuICB2YWxpZGF0ZSxcbiAgZ2V0U2NoZW1hLFxuICBmbGF0dGVuOiBmbGF0dGVuU2NoZW1hLFxuICBnZXREZWZhdWx0czogZ2V0RGVmYXVsdHNGb3JTY2hlbWEsXG4gIGdldERlZmF1bHRzRm9yRXh0ZW5zaW9uLFxufSA9IGFwcGl1bVNjaGVtYTtcbmV4cG9ydCBjb25zdCB7aXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbn0gPSBBcHBpdW1TY2hlbWE7XG5cbi8qKlxuICogQXBwaXVtIG9ubHkgc3VwcG9ydHMgc2NoZW1hcyB0aGF0IGFyZSBwbGFpbiBvYmplY3RzOyBub3QgYXJyYXlzLlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0ICYge1trZXk6IG51bWJlcl06IG5ldmVyfX0gU2NoZW1hT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9leHRlbnNpb24vbWFuaWZlc3QnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3QgaGF2aW5nIHByb3BlcnR5IGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiBTdHJpY3RQcm9wXG4gKiBAcHJvcGVydHkge2ZhbHNlfSBhZGRpdGlvbmFsUHJvcGVydGllc1xuICovXG5cbi8qKlxuICogQSB7QGxpbmsgU2NoZW1hT2JqZWN0fSB3aXRoIGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiB7U2NoZW1hT2JqZWN0ICYgU3RyaWN0UHJvcH0gU3RyaWN0U2NoZW1hT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBBIGxpc3Qgb2Ygc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY30gb2JqZWN0cy5cbiAqXG4gKiBJbnRlcm1lZGlhdGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB3aGVuIGNvbnZlcnRpbmcgdGhlIGVudGlyZSBzY2hlbWEgZG93biB0byBDTEkgYXJndW1lbnRzLlxuICogQHR5cGVkZWYgeyB7c2NoZW1hOiBTY2hlbWFPYmplY3QsIGFyZ1NwZWM6IEFyZ1NwZWN9W10gfSBGbGF0dGVuZWRTY2hlbWFcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtBcmdTcGVjWydkZWZhdWx0VmFsdWUnXX0gQXJnU3BlY0RlZmF1bHRWYWx1ZVxuICovXG5cbi8qKlxuICogZS5nLiBge2RyaXZlcjoge2ZvbzogJ2Jhcid9fWAgd2hlcmUgYGZvb2AgaXMgdGhlIGFyZyBuYW1lIGFuZCBgYmFyYCBpcyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLFJlY29yZDxzdHJpbmcsQXJnU3BlY0RlZmF1bHRWYWx1ZT4+fSBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBIZWxwZXIgdHlwZSBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfVxuICogQHRlbXBsYXRlIHtib29sZWFufHVuZGVmaW5lZH0gRmxhdHRlbmVkXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZyxGbGF0dGVuZWQgZXh0ZW5kcyB0cnVlID8gQXJnU3BlY0RlZmF1bHRWYWx1ZSA6IEFyZ1NwZWNEZWZhdWx0VmFsdWUgfCBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlPn0gRGVmYXVsdFZhbHVlc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBUU8sTUFBTUEsYUFBTixTQUE0QkMsR0FBNUIsQ0FBZ0M7RUFLckNDLEdBQUcsQ0FBRUMsR0FBRixFQUFPQyxLQUFQLEVBQWM7SUFDZixJQUFJLEtBQUtDLEdBQUwsQ0FBU0YsR0FBVCxDQUFKLEVBQW1CO01BQ2pCLE1BQU0sSUFBSUcsS0FBSixDQUFXLEdBQUVILEdBQUksaUJBQWpCLENBQU47SUFDRDs7SUFDRCxPQUFPLE1BQU1ELEdBQU4sQ0FBVUMsR0FBVixFQUFlQyxLQUFmLENBQVA7RUFDRDs7RUFNREcsTUFBTSxDQUFFSixHQUFGLEVBQU87SUFDWCxPQUFPLEtBQVA7RUFDRDs7RUFFREssS0FBSyxHQUFJO0lBQ1AsTUFBTSxJQUFJRixLQUFKLENBQVcsNEJBQVgsQ0FBTjtFQUNEOztBQXRCb0M7OztBQTRCaEMsTUFBTUcseUJBQXlCLEdBQUcsSUFBSUMsR0FBSixDQUFRLENBQUMsT0FBRCxFQUFVLEtBQVYsRUFBaUIsTUFBakIsQ0FBUixDQUFsQzs7O0FBT1AsTUFBTUMsWUFBTixDQUFtQjtFQVVqQkMsU0FBUyxHQUFHLElB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
452
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb2FjaEhvdGVsTWFwIiwiTWFwIiwic2V0Iiwia2V5IiwidmFsdWUiLCJoYXMiLCJFcnJvciIsImRlbGV0ZSIsImNsZWFyIiwiQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OUyIsIlNldCIsIkFwcGl1bVNjaGVtYSIsIl9hcmdTcGVjcyIsIl9yZWdpc3RlcmVkU2NoZW1hcyIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJfYWp2IiwiX2luc3RhbmNlIiwiX2ZpbmFsaXplZFNjaGVtYXMiLCJjb25zdHJ1Y3RvciIsIl9pbnN0YW50aWF0ZUFqdiIsImNyZWF0ZSIsImluc3RhbmNlIiwiXyIsImJpbmRBbGwiLCJoYXNSZWdpc3RlcmVkU2NoZW1hIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJpc0ZpbmFsaXplZCIsIkJvb2xlYW4iLCJnZXRBbGxBcmdTcGVjcyIsImZpbmFsaXplIiwiYWp2IiwiYmFzZVNjaGVtYSIsImNsb25lRGVlcCIsIkFwcGl1bUNvbmZpZ0pzb25TY2hlbWEiLCJhZGRBcmdTcGVjcyIsInNjaGVtYSIsInByb3BOYW1lIiwicHJvcFNjaGVtYSIsIk9iamVjdCIsImVudHJpZXMiLCJhcmdTcGVjIiwiQXJnU3BlYyIsImRlc3QiLCJhcHBpdW1DbGlEZXN0IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdCIsImFyZyIsIm9taXQiLCJwcm9wZXJ0aWVzIiwic2VydmVyIiwiZmluYWxpemVkU2NoZW1hcyIsImZpbmFsU2NoZW1hIiwicmVkdWNlIiwiZXh0ZW5zaW9uU2NoZW1hcyIsImZvckVhY2giLCIkcmVmIiwidG9TY2hlbWFCYXNlUmVmIiwiJGlkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCIkY29tbWVudCIsInZhbGlkYXRlU2NoZW1hIiwiYWRkU2NoZW1hIiwiQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQiLCJmcmVlemUiLCJhZGRGb3JtYXRzIiwiQWp2IiwiYWxsRXJyb3JzIiwia2V5d29yZHMiLCJrZXl3b3JkIiwiYWRkS2V5d29yZCIsInJlc2V0Iiwic2NoZW1hSWQiLCJrZXlzIiwicmVtb3ZlU2NoZW1hIiwicmVnaXN0ZXJTY2hlbWEiLCJpc1VuZGVmaW5lZCIsIlR5cGVFcnJvciIsImlzU3VwcG9ydGVkU2NoZW1hVHlwZSIsIlNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3IiLCJub3JtYWxpemVkRXh0TmFtZSIsImtlYmFiQ2FzZSIsImdldCIsIlNjaGVtYU5hbWVDb25mbGljdEVycm9yIiwiZ2V0QXJnU3BlYyIsIm5hbWUiLCJ0b0FyZyIsImhhc0FyZ1NwZWMiLCJnZXREZWZhdWx0cyIsImZsYXR0ZW4iLCJTY2hlbWFGaW5hbGl6YXRpb25FcnJvciIsInJlZHVjZXIiLCJkZWZhdWx0cyIsInJldHZhbCIsInZhbHVlcyIsImdldERlZmF1bHRzRm9yRXh0ZW5zaW9uIiwic3BlY3MiLCJmaWx0ZXIiLCJzcGVjIiwicmF3RGVzdCIsImdldFNjaGVtYSIsInN0YWNrIiwicHJlZml4IiwiZmxhdHRlbmVkIiwicGFpcnMiLCJ0b1BhaXJzIiwicHVzaCIsIlNFUlZFUl9QUk9QX05BTUUiLCJyZWZTY2hlbWEiLCJlcnIiLCJTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IiLCJleHRlbnNpb25JbmZvRnJvbVJvb3RTY2hlbWFJZCIsIlJlZmVyZW5jZUVycm9yIiwicmVmIiwiX2dldFZhbGlkYXRvciIsImlkIiwidmFsaWRhdG9yIiwidmFsaWRhdGUiLCJpc0FycmF5IiwiZXJyb3JzIiwiaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbiIsImZpbGVuYW1lIiwicGF0aCIsImV4dG5hbWUiLCJpc1BsYWluT2JqZWN0IiwiJGFzeW5jIiwiY29kZSIsImRhdGEiLCJtc2ciLCJpc0Jvb2xlYW4iLCJKU09OIiwic3RyaW5naWZ5IiwiYXBwaXVtU2NoZW1hIiwiZmluYWxpemVTY2hlbWEiLCJyZXNldFNjaGVtYSIsImZsYXR0ZW5TY2hlbWEiLCJnZXREZWZhdWx0c0ZvclNjaGVtYSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9zY2hlbWEvc2NoZW1hLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBanYgZnJvbSAnYWp2JztcbmltcG9ydCBhZGRGb3JtYXRzIGZyb20gJ2Fqdi1mb3JtYXRzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7RFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtBcHBpdW1Db25maWdKc29uU2NoZW1hfSBmcm9tICdAYXBwaXVtL3NjaGVtYSc7XG5pbXBvcnQge0FQUElVTV9DT05GSUdfU0NIRU1BX0lELCBBcmdTcGVjLCBTRVJWRVJfUFJPUF9OQU1FfSBmcm9tICcuL2FyZy1zcGVjJztcbmltcG9ydCB7a2V5d29yZHN9IGZyb20gJy4va2V5d29yZHMnO1xuXG4vKipcbiAqIEtleS92YWx1ZSBwYWlycyBnbyBpbi4uLiBidXQgdGhleSBkb24ndCBjb21lIG91dC5cbiAqXG4gKiBAdGVtcGxhdGUgSyxWXG4gKiBAZXh0ZW5kcyB7TWFwPEssVj59XG4gKi9cbmV4cG9ydCBjbGFzcyBSb2FjaEhvdGVsTWFwIGV4dGVuZHMgTWFwIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7S30ga2V5XG4gICAqIEBwYXJhbSB7Vn0gdmFsdWVcbiAgICovXG4gIHNldChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuaGFzKGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtrZXl9IGlzIGFscmVhZHkgc2V0YCk7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5zZXQoa2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtLfSBrZXlcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBkZWxldGUoa2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgUm9hY2hIb3RlbE1hcGApO1xuICB9XG59XG5cbi8qKlxuICogRXh0ZW5zaW9ucyB0aGF0IGFuIGV4dGVuc2lvbiBzY2hlbWEgZmlsZSBjYW4gaGF2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFMTE9XRURfU0NIRU1BX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFsnLmpzb24nLCAnLmpzJywgJy5janMnXSk7XG5cbi8qKlxuICogQSB3cmFwcGVyIGFyb3VuZCBBanYgYW5kIHNjaGVtYS1yZWxhdGVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBTaG91bGQgaGF2ZSBiZWVuIG5hbWVkIEhpZ2hsYW5kZXIsIGJlY2F1c2UgX3RoZXJlIGNhbiBvbmx5IGJlIG9uZV9cbiAqL1xuY2xhc3MgQXBwaXVtU2NoZW1hIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB1bmlxdWUgYXJndW1lbnQgSURzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcge0BsaW5rIEFyZ1NwZWN9cy5cbiAgICpcbiAgICogQW4gXCJhcmd1bWVudFwiIGlzIGEgQ0xJIGFyZ3VtZW50IG9yIGEgY29uZmlnIHByb3BlcnR5LlxuICAgKlxuICAgKiBVc2VkIHRvIHByb3ZpZGUgZWFzeSBsb29rdXBzIG9mIGFyZ3VtZW50IG1ldGFkYXRhIHdoZW4gY29udmVydGluZyBiZXR3ZWVuIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgb2YgdGhvc2UgYXJndW1lbnRzLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Um9hY2hIb3RlbE1hcDxzdHJpbmcsQXJnU3BlYz59XG4gICAqL1xuICBfYXJnU3BlY3MgPSBuZXcgUm9hY2hIb3RlbE1hcCgpO1xuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiBleHRlbnNpb24gdHlwZXMgdG8gZXh0ZW5zaW9uIG5hbWVzIHRvIHNjaGVtYSBvYmplY3RzLlxuICAgKlxuICAgKiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIHVzZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBuYW1pbmcgY29uZmxpY3RzLiBUaGUgc2NoZW1hc1xuICAgKiBhcmUgc3RvcmVkIGhlcmUgaW4gbWVtb3J5IHVudGlsIHRoZSBpbnN0YW5jZSBpcyBfZmluYWxpemVkXy5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1JlY29yZDxFeHRlbnNpb25UeXBlLE1hcDxzdHJpbmcsU2NoZW1hT2JqZWN0Pj59XG4gICAqL1xuICBfcmVnaXN0ZXJlZFNjaGVtYXMgPSB7W0RSSVZFUl9UWVBFXTogbmV3IE1hcCgpLCBbUExVR0lOX1RZUEVdOiBuZXcgTWFwKCl9O1xuXG4gIC8qKlxuICAgKiBBanYgaW5zdGFuY2VcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0Fqdn1cbiAgICovXG4gIF9hanY7XG5cbiAgLyoqXG4gICAqIFNpbmdsZXRvbiBpbnN0YW5jZS5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0FwcGl1bVNjaGVtYX1cbiAgICovXG4gIHN0YXRpYyBfaW5zdGFuY2U7XG5cbiAgLyoqXG4gICAqIExvb2t1cCBvZiBzY2hlbWEgSURzIHRvIGZpbmFsaXplZCBzY2hlbWFzLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcmVmZXJlbmNlcywgYnV0IHJhdGhlciB0aGUgcm9vdCBzY2hlbWFzIHRoZW1zZWx2ZXMuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLFN0cmljdFNjaGVtYU9iamVjdD4/fVxuICAgKi9cbiAgX2ZpbmFsaXplZFNjaGVtYXMgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBBanYsIGFkZHMgc3RhbmRhcmQgZm9ybWF0cyBhbmQgb3VyIGN1c3RvbSBrZXl3b3Jkcy5cbiAgICogQHNlZSBodHRwczovL25wbS5pbS9hanYtZm9ybWF0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fYWp2ID0gQXBwaXVtU2NoZW1hLl9pbnN0YW50aWF0ZUFqdigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvcnkgZnVuY3Rpb24gZm9yIHtAbGluayBBcHBpdW1TY2hlbWF9IGluc3RhbmNlcy5cbiAgICpcbiAgICogUmV0dXJucyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBpZiBvbmUgZXhpc3RzLCBvdGhlcndpc2UgY3JlYXRlcyBhIG5ldyBvbmUuXG4gICAqIEJpbmRzIHB1YmxpYyBtZXRob2RzIHRvIHRoZSBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge0FwcGl1bVNjaGVtYX1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUoKSB7XG4gICAgaWYgKCFBcHBpdW1TY2hlbWEuX2luc3RhbmNlKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBBcHBpdW1TY2hlbWEoKTtcbiAgICAgIEFwcGl1bVNjaGVtYS5faW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgIF8uYmluZEFsbChpbnN0YW5jZSwgW1xuICAgICAgICAnZmluYWxpemUnLFxuICAgICAgICAnZmxhdHRlbicsXG4gICAgICAgICdnZXRBbGxBcmdTcGVjcycsXG4gICAgICAgICdnZXRBcmdTcGVjJyxcbiAgICAgICAgJ2dldERlZmF1bHRzJyxcbiAgICAgICAgJ2dldERlZmF1bHRzRm9yRXh0ZW5zaW9uJyxcbiAgICAgICAgJ2dldFNjaGVtYScsXG4gICAgICAgICdoYXNBcmdTcGVjJyxcbiAgICAgICAgJ2lzRmluYWxpemVkJyxcbiAgICAgICAgJ3JlZ2lzdGVyU2NoZW1hJyxcbiAgICAgICAgJ2hhc1JlZ2lzdGVyZWRTY2hlbWEnLFxuICAgICAgICAncmVzZXQnLFxuICAgICAgICAndmFsaWRhdGUnLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwcGl1bVNjaGVtYS5faW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYSBzY2hlbWEgaGFzIGJlZW4gcmVnaXN0ZXJlZCB1c2luZyBnaXZlbiBleHRlbnNpb24gdHlwZSBhbmQgbmFtZS5cbiAgICpcbiAgICogVGhpcyBkb2VzIG5vdCBkZXBlbmQgb24gd2hldGhlciBvciBub3QgdGhlIGluc3RhbmNlIGhhcyBiZWVuIF9maW5hbGl6ZWRfLlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGUgLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIE5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IElmIHJlZ2lzdGVyZWRcbiAgICovXG4gIGhhc1JlZ2lzdGVyZWRTY2hlbWEoZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hc1tleHRUeXBlXS5oYXMoZXh0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplIGZpbmFsaXplfSBoYXMgYmVlbiBjYWxsZWRcbiAgICogc3VjY2Vzc2Z1bGx5IGFuZCB7QGxpbmsgQXBwaXVtU2NoZW1hLnJlc2V0IHJlc2V0fSBoYXMgbm90IGJlZW4gY2FsbGVkIHNpbmNlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgZmluYWxpemVkXG4gICAqL1xuICBpc0ZpbmFsaXplZCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9maW5hbGl6ZWRTY2hlbWFzKTtcbiAgfVxuXG4gIGdldEFsbEFyZ1NwZWNzKCkge1xuICAgIHJldHVybiB0aGlzLl9hcmdTcGVjcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgd2hlbiBubyBtb3JlIHNjaGVtYXMgd2lsbCBiZSByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBUaGlzIGRvZXMgdGhyZWUgdGhpbmdzOlxuICAgKiAxLiBJdCBjb21iaW5lcyBhbGwgc2NoZW1hcyBmcm9tIGV4dGVuc2lvbnMgaW50byB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEsXG4gICAqICAgIHRoZW4gYWRkcyB0aGUgcmVzdWx0IHRvIHRoZSBgQWp2YCBpbnN0YW5jZS5cbiAgICogMi4gSXQgYWRkcyBzY2hlbWFzIGZvciBfZWFjaF8gYXJndW1lbnQvcHJvcGVydHkgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMuXG4gICAqICAgIFRoZSBDTEkgdXNlcyB0aGVzZSBzY2hlbWFzIHRvIHZhbGlkYXRlIHNwZWNpZmljIGFyZ3VtZW50cy5cbiAgICogMy4gVGhlIHNjaGVtYXMgYXJlIHZhbGlkYXRlZCBhZ2FpbnN0IEpTT04gc2NoZW1hIGRyYWZ0LTA3ICh3aGljaCBpcyB0aGVcbiAgICogICAgb25seSBvbmUgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSlcbiAgICpcbiAgICogQW55IG1ldGhvZCBpbiB0aGlzIGluc3RhbmNlIHRoYXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgYEFqdmAgaW5zdGFuY2VcbiAgICogd2lsbCB0aHJvdyBpZiB0aGlzIG1ldGhvZCBoYXMgbm90IGJlZW4gY2FsbGVkLlxuICAgKlxuICAgKiBJZiB0aGUgaW5zdGFuY2UgaGFzIGFscmVhZHkgYmVlbiBmaW5hbGl6ZWQsIHRoaXMgaXMgYSBuby1vcC5cbiAgICogQHB1YmxpY1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHNjaGVtYSBpcyBub3QgdmFsaWRcbiAgICogQHJldHVybnMge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsU3RyaWN0U2NoZW1hT2JqZWN0Pj59IFJlY29yZCBvZiBzY2hlbWEgSURzIHRvIGZ1bGwgc2NoZW1hIG9iamVjdHNcbiAgICovXG4gIGZpbmFsaXplKCkge1xuICAgIGlmICh0aGlzLmlzRmluYWxpemVkKCkpIHtcbiAgICAgIHJldHVybiAvKiogQHR5cGUge05vbk51bGxhYmxlPHR5cGVvZiB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzPn0gKi8gKHRoaXMuX2ZpbmFsaXplZFNjaGVtYXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGFqdiA9IHRoaXMuX2FqdjtcblxuICAgIC8vIEFqdiB3aWxsIF9tdXRhdGVfIHRoZSBzY2hlbWEsIHNvIHdlIG5lZWQgdG8gY2xvbmUgaXQuXG4gICAgY29uc3QgYmFzZVNjaGVtYSA9IF8uY2xvbmVEZWVwKEFwcGl1bUNvbmZpZ0pzb25TY2hlbWEpO1xuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NjaGVtYU9iamVjdH0gc2NoZW1hXG4gICAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV1cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdXG4gICAgICovXG4gICAgY29uc3QgYWRkQXJnU3BlY3MgPSAoc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKSA9PiB7XG4gICAgICBmb3IgKGxldCBbcHJvcE5hbWUsIHByb3BTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYSkpIHtcbiAgICAgICAgY29uc3QgYXJnU3BlYyA9IEFyZ1NwZWMuY3JlYXRlKHByb3BOYW1lLCB7XG4gICAgICAgICAgZGVzdDogcHJvcFNjaGVtYS5hcHBpdW1DbGlEZXN0LFxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcHJvcFNjaGVtYS5kZWZhdWx0LFxuICAgICAgICAgIGV4dFR5cGUsXG4gICAgICAgICAgZXh0TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHthcmd9ID0gYXJnU3BlYztcbiAgICAgICAgdGhpcy5fYXJnU3BlY3Muc2V0KGFyZywgYXJnU3BlYyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGFkZEFyZ1NwZWNzKF8ub21pdChiYXNlU2NoZW1hLnByb3BlcnRpZXMuc2VydmVyLnByb3BlcnRpZXMsIFtEUklWRVJfVFlQRSwgUExVR0lOX1RZUEVdKSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxTdHJpY3RTY2hlbWFPYmplY3Q+fVxuICAgICAqL1xuICAgIGNvbnN0IGZpbmFsaXplZFNjaGVtYXMgPSB7fTtcblxuICAgIGNvbnN0IGZpbmFsU2NoZW1hID0gXy5yZWR1Y2UoXG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU2NoZW1hcyxcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHt0eXBlb2YgYmFzZVNjaGVtYX0gYmFzZVNjaGVtYVxuICAgICAgICogQHBhcmFtIHtNYXA8c3RyaW5nLFNjaGVtYU9iamVjdD59IGV4dGVuc2lvblNjaGVtYXNcbiAgICAgICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gZXh0VHlwZVxuICAgICAgICovXG4gICAgICAoYmFzZVNjaGVtYSwgZXh0ZW5zaW9uU2NoZW1hcywgZXh0VHlwZSkgPT4ge1xuICAgICAgICBleHRlbnNpb25TY2hlbWFzLmZvckVhY2goKHNjaGVtYSwgZXh0TmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0ICRyZWYgPSBBcmdTcGVjLnRvU2NoZW1hQmFzZVJlZihleHRUeXBlLCBleHROYW1lKTtcbiAgICAgICAgICBzY2hlbWEuJGlkID0gJHJlZjtcbiAgICAgICAgICBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTsgLy8gdGhpcyBtYWtlcyBgc2NoZW1hYCBiZWNvbWUgYSBgU3RyaWN0U2NoZW1hT2JqZWN0YFxuICAgICAgICAgIGJhc2VTY2hlbWEucHJvcGVydGllcy5zZXJ2ZXIucHJvcGVydGllc1tleHRUeXBlXS5wcm9wZXJ0aWVzW2V4dE5hbWVdID0ge1xuICAgICAgICAgICAgJHJlZixcbiAgICAgICAgICAgICRjb21tZW50OiBleHROYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYWp2LnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgICAgYWRkQXJnU3BlY3Moc2NoZW1hLnByb3BlcnRpZXMsIGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgICAgICAgIGFqdi5hZGRTY2hlbWEoc2NoZW1hLCAkcmVmKTtcbiAgICAgICAgICBmaW5hbGl6ZWRTY2hlbWFzWyRyZWZdID0gLyoqIEB0eXBlIHtTdHJpY3RTY2hlbWFPYmplY3R9ICovIChzY2hlbWEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJhc2VTY2hlbWE7XG4gICAgICB9LFxuICAgICAgYmFzZVNjaGVtYVxuICAgICk7XG5cbiAgICBhanYuYWRkU2NoZW1hKGZpbmFsU2NoZW1hLCBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCk7XG4gICAgZmluYWxpemVkU2NoZW1hc1tBUFBJVU1fQ09ORklHX1NDSEVNQV9JRF0gPSBmaW5hbFNjaGVtYTtcbiAgICBhanYudmFsaWRhdGVTY2hlbWEoZmluYWxTY2hlbWEsIHRydWUpO1xuXG4gICAgdGhpcy5fZmluYWxpemVkU2NoZW1hcyA9IGZpbmFsaXplZFNjaGVtYXM7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoZmluYWxpemVkU2NoZW1hcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlcyBhbmQgY3JlYXRlcyBhbiBBanYgaW5zdGFuY2UuXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtBanZ9XG4gICAqL1xuICBzdGF0aWMgX2luc3RhbnRpYXRlQWp2KCkge1xuICAgIGNvbnN0IGFqdiA9IGFkZEZvcm1hdHMoXG4gICAgICBuZXcgQWp2KHtcbiAgICAgICAgLy8gd2l0aG91dCB0aGlzIG5vdCBtdWNoIHZhbGlkYXRpb24gYWN0dWFsbHkgaGFwcGVuc1xuICAgICAgICBhbGxFcnJvcnM6IHRydWUsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBhZGQgY3VzdG9tIGtleXdvcmRzIHRvIGFqdi4gc2VlIHNjaGVtYS1rZXl3b3Jkcy5qc1xuICAgIF8uZm9yRWFjaChrZXl3b3JkcywgKGtleXdvcmQpID0+IHtcbiAgICAgIGFqdi5hZGRLZXl3b3JkKGtleXdvcmQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFqdjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhpcyBpbnN0YW5jZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuXG4gICAqXG4gICAqIC0gUmVtb3ZlcyBhbGwgYWRkZWQgc2NoZW1hcyBmcm9tIHRoZSBgQWp2YCBpbnN0YW5jZVxuICAgKiAtIFJlc2V0cyB0aGUgbWFwIG9mIHtAbGluayBBcmdTcGVjIEFyZ1NwZWNzfVxuICAgKiAtIFJlc2V0cyB0aGUgbWFwIG9mIHJlZ2lzdGVyZWQgc2NoZW1hc1xuICAgKiAtIFNldHMgdGhlIHtAbGluayBBcHBpdW1TY2hlbWEuX2ZpbmFsaXplZCBfZmluYWxpemVkfSBmbGFnIHRvIGBmYWxzZWBcbiAgICpcbiAgICogSWYgeW91IG5lZWQgdG8gY2FsbCB7QGxpbmsgQXBwaXVtU2NoZW1hLmZpbmFsaXplfSBhZ2FpbiwgeW91J2xsIHdhbnQgdG8gY2FsbCB0aGlzIGZpcnN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHJlc2V0KCkge1xuICAgIGZvciAoY29uc3Qgc2NoZW1hSWQgb2YgT2JqZWN0LmtleXModGhpcy5fZmluYWxpemVkU2NoZW1hcyA/PyB7fSkpIHtcbiAgICAgIHRoaXMuX2Fqdi5yZW1vdmVTY2hlbWEoc2NoZW1hSWQpO1xuICAgIH1cbiAgICB0aGlzLl9hcmdTcGVjcyA9IG5ldyBSb2FjaEhvdGVsTWFwKCk7XG4gICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXMgPSB7XG4gICAgICBbRFJJVkVSX1RZUEVdOiBuZXcgTWFwKCksXG4gICAgICBbUExVR0lOX1RZUEVdOiBuZXcgTWFwKCksXG4gICAgfTtcbiAgICB0aGlzLl9maW5hbGl6ZWRTY2hlbWFzID0gbnVsbDtcblxuICAgIC8vIEFqdiBzZWVtcyB0byBoYXZlIGFuIG92ZXItZWFnZXIgY2FjaGUsIHNvIHdlIGhhdmUgdG8gZHVtcCB0aGUgb2JqZWN0IGVudGlyZWx5LlxuICAgIHRoaXMuX2FqdiA9IEFwcGl1bVNjaGVtYS5faW5zdGFudGlhdGVBanYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBzY2hlbWEgZnJvbSBhbiBleHRlbnNpb24uXG4gICAqXG4gICAqIFRoaXMgaXMgXCJmYWlsLWZhc3RcIiBpbiB0aGF0IHRoZSBzY2hlbWEgd2lsbCBpbW1lZGlhdGVseSBiZSB2YWxpZGF0ZWQgYWdhaW5zdCBKU09OIHNjaGVtYSBkcmFmdC0wNyBfb3JfIHdoYXRldmVyIHRoZSB2YWx1ZSBvZiB0aGUgc2NoZW1hJ3MgYCRzY2hlbWFgIHByb3AgaXMuXG4gICAqXG4gICAqIERvZXMgX25vdF8gYWRkIHRoZSBzY2hlbWEgdG8gdGhlIGBhanZgIGluc3RhbmNlICh0aGlzIGlzIGRvbmUgYnkge0BsaW5rIEFwcGl1bVNjaGVtYS5maW5hbGl6ZX0pLlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGUgLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIFVuaXF1ZSBleHRlbnNpb24gbmFtZSBmb3IgYHR5cGVgXG4gICAqIEBwYXJhbSB7U2NoZW1hT2JqZWN0fSBzY2hlbWEgLSBTY2hlbWEgb2JqZWN0XG4gICAqIEB0aHJvd3Mge1NjaGVtYU5hbWVDb25mbGljdEVycm9yfSBJZiB0aGUgc2NoZW1hIGlzIGFuIGludmFsaWRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZWdpc3RlclNjaGVtYShleHRUeXBlLCBleHROYW1lLCBzY2hlbWEpIHtcbiAgICBpZiAoIShleHRUeXBlICYmIGV4dE5hbWUpIHx8IF8uaXNVbmRlZmluZWQoc2NoZW1hKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZXh0ZW5zaW9uIHR5cGUsIGV4dGVuc2lvbiBuYW1lLCBhbmQgYSBkZWZpbmVkIHNjaGVtYScpO1xuICAgIH1cbiAgICBpZiAoIUFwcGl1bVNjaGVtYS5pc1N1cHBvcnRlZFNjaGVtYVR5cGUoc2NoZW1hKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYVVuc3VwcG9ydGVkU2NoZW1hRXJyb3Ioc2NoZW1hLCBleHRUeXBlLCBleHROYW1lKTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZEV4dE5hbWUgPSBfLmtlYmFiQ2FzZShleHROYW1lKTtcbiAgICBpZiAodGhpcy5oYXNSZWdpc3RlcmVkU2NoZW1hKGV4dFR5cGUsIG5vcm1hbGl6ZWRFeHROYW1lKSkge1xuICAgICAgaWYgKHRoaXMuX3JlZ2lzdGVyZWRTY2hlbWFzW2V4dFR5cGVdLmdldChub3JtYWxpemVkRXh0TmFtZSkgPT09IHNjaGVtYSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hTmFtZUNvbmZsaWN0RXJyb3IoZXh0VHlwZSwgZXh0TmFtZSk7XG4gICAgfVxuICAgIHRoaXMuX2Fqdi52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gICAgdGhpcy5fcmVnaXN0ZXJlZFNjaGVtYXNbZXh0VHlwZV0uc2V0KG5vcm1hbGl6ZWRFeHROYW1lLCBzY2hlbWEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB7QGxpbmsgQXJnU3BlY30gZm9yIHRoZSBnaXZlbiBhcmd1bWVudCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENMSSBhcmd1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gW2V4dFR5cGVdIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHROYW1lXSAtIEV4dGVuc2lvbiBuYW1lXG4gICAqIEByZXR1cm5zIHtBcmdTcGVjfHVuZGVmaW5lZH0gQXJnU3BlYyBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmRcbiAgICovXG4gIGdldEFyZ1NwZWMobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9hcmdTcGVjcy5nZXQoQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGluc3RhbmNlIGtub3dzIGFib3V0IGFuIGFyZ3VtZW50IGJ5IHRoZSBnaXZlbiBgbmFtZWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQ0xJIGFyZ3VtZW50IG5hbWVcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV0gLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBzdWNoIGFuIHtAbGluayBBcmdTcGVjfSBleGlzdHNcbiAgICovXG4gIGhhc0FyZ1NwZWMobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9hcmdTcGVjcy5oYXMoQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGBSZWNvcmRgIG9mIGFyZ3VtZW50IFwiZGVzdFwiIHN0cmluZ3MgdG8gZGVmYXVsdCB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBcImRlc3RcIiBzdHJpbmcgaXMgdGhlIHByb3BlcnR5IG5hbWUgaW4gb2JqZWN0IHJldHVybmVkIGJ5XG4gICAqIGBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlclsncGFyc2VfYXJncyddYC5cbiAgICogQHRlbXBsYXRlIHtib29sZWFufHVuZGVmaW5lZH0gRmxhdHRlbmVkXG4gICAqIEBwYXJhbSB7RmxhdHRlbmVkfSBbZmxhdHRlbj10cnVlXSAtIElmIGB0cnVlYCwgZmxhdHRlbnMgdGhlIHJldHVybmVkIG9iamVjdFxuICAgKiB1c2luZyBcImtleXBhdGhcIi1zdHlsZSBrZXlzIG9mIHRoZSBmb3JtYXQgYDxleHRUeXBlPi48ZXh0TmFtZT4uPGFyZ05hbWU+YC5cbiAgICogT3RoZXJ3aXNlLCByZXR1cm5zIGEgbmVzdGVkIG9iamVjdCB1c2luZyBgZXh0VHlwZWAgYW5kIGBleHROYW1lYCBhc1xuICAgKiBwcm9wZXJ0aWVzLiBCYXNlIGFyZ3VtZW50cyAoc2VydmVyIGFyZ3VtZW50cykgYXJlIGFsd2F5cyBhdCB0aGUgdG9wIGxldmVsLlxuICAgKiBAcmV0dXJucyB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fVxuICAgKi9cbiAgZ2V0RGVmYXVsdHMoZmxhdHRlbiA9IC8qKiBAdHlwZSB7RmxhdHRlbmVkfSAqLyAodHJ1ZSkpIHtcbiAgICBpZiAoIXRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY2FsbGJhY2sgRGVmYXVsdFJlZHVjZXJcbiAgICAgKiBAcGFyYW0ge0RlZmF1bHRWYWx1ZXM8RmxhdHRlbmVkPn0gZGVmYXVsdHNcbiAgICAgKiBAcGFyYW0ge0FyZ1NwZWN9IGFyZ1NwZWNcbiAgICAgKiBAcmV0dXJucyB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fVxuICAgICAqL1xuICAgIC8qKiBAdHlwZSB7RGVmYXVsdFJlZHVjZXJ9ICovXG4gICAgY29uc3QgcmVkdWNlciA9IGZsYXR0ZW5cbiAgICAgID8gKGRlZmF1bHRzLCB7ZGVmYXVsdFZhbHVlLCBkZXN0fSkgPT4ge1xuICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgICBkZWZhdWx0c1tkZXN0XSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgICAgICB9XG4gICAgICA6IChkZWZhdWx0cywge2RlZmF1bHRWYWx1ZSwgZGVzdH0pID0+IHtcbiAgICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICAgICAgXy5zZXQoZGVmYXVsdHMsIGRlc3QsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICAgICAgfTtcblxuICAgIC8qKiBAdHlwZSB7RGVmYXVsdFZhbHVlczxGbGF0dGVuZWQ+fSAqL1xuICAgIGNvbnN0IHJldHZhbCA9IHt9O1xuICAgIHJldHVybiBbLi4udGhpcy5fYXJnU3BlY3MudmFsdWVzKCldLnJlZHVjZShyZWR1Y2VyLCByZXR2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBmbGF0dGVuZWQgUmVjb3JkIG9mIGRlZmF1bHRzIGZvciBhIHNwZWNpZmljIGV4dGVuc2lvbi4gS2V5cyB3aWxsXG4gICAqIGJlIG9mIGZvcm1hdCBgPGFyZ05hbWU+YC5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBleHRUeXBlIC0gRXh0ZW5zaW9uIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZyxBcmdTcGVjRGVmYXVsdFZhbHVlPn1cbiAgICovXG4gIGdldERlZmF1bHRzRm9yRXh0ZW5zaW9uKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBpZiAoIXRoaXMuaXNGaW5hbGl6ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYUZpbmFsaXphdGlvbkVycm9yKCk7XG4gICAgfVxuICAgIGNvbnN0IHNwZWNzID0gWy4uLnRoaXMuX2FyZ1NwZWNzLnZhbHVlcygpXS5maWx0ZXIoXG4gICAgICAoc3BlYykgPT4gc3BlYy5leHRUeXBlID09PSBleHRUeXBlICYmIHNwZWMuZXh0TmFtZSA9PT0gZXh0TmFtZVxuICAgICk7XG4gICAgcmV0dXJuIHNwZWNzLnJlZHVjZSgoZGVmYXVsdHMsIHtkZWZhdWx0VmFsdWUsIHJhd0Rlc3R9KSA9PiB7XG4gICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICBkZWZhdWx0c1tyYXdEZXN0XSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9LCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbiBzY2hlbWEgaW50byBhbiBhcnJheSBvZiBgU2NoZW1hT2JqZWN0YHMgYW5kIGFzc29jaWF0ZWRcbiAgICoge0BsaW5rIEFyZ1NwZWMgQXJnU3BlY3N9LlxuICAgKlxuICAgKiBDb252ZXJ0cyBuZXN0ZWQgZXh0ZW5zaW9uIHNjaGVtYXMgdG8ga2V5cyBiYXNlZCBvbiB0aGUgZXh0ZW5zaW9uIHR5cGUgYW5kXG4gICAqIG5hbWUuIFVzZWQgd2hlbiB0cmFuc2xhdGluZyB0byBgYXJncGFyc2VgIG9wdGlvbnMgb3IgZ2V0dGluZyB0aGUgbGlzdCBvZlxuICAgKiBkZWZhdWx0IHZhbHVlcyAoc2VlIHtAbGluayBBcHBpdW1TY2hlbWEuZ2V0RGVmYXVsdHN9KSBmb3IgQ0xJIG9yIG90aGVyd2lzZS5cbiAgICpcbiAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBpbnRlcm1lZGlhdGUgcmVwcnNlbnRhdGlvbiB1c2VkIGJ5IGBjbGktYXJnc2BcbiAgICogbW9kdWxlJ3MgYHRvUGFyc2VyQXJnc2AsIHdoaWNoIGNvbnZlcnRzIHRoZSBmaW5hbGl6ZWQgc2NoZW1hIHRvIHBhcmFtZXRlcnNcbiAgICogdXNlZCBieSBgYXJncGFyc2VgLlxuICAgKiBAdGhyb3dzIElmIHtAbGluayBBcHBpdW1TY2hlbWEuZmluYWxpemV9IGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0LlxuICAgKiBAcmV0dXJucyB7RmxhdHRlbmVkU2NoZW1hfVxuICAgKi9cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmdldFNjaGVtYSgpO1xuXG4gICAgLyoqIEB0eXBlIHsge3Byb3BlcnRpZXM6IFNjaGVtYU9iamVjdCwgcHJlZml4OiBzdHJpbmdbXX1bXSB9ICovXG4gICAgY29uc3Qgc3RhY2sgPSBbe3Byb3BlcnRpZXM6IHNjaGVtYS5wcm9wZXJ0aWVzLCBwcmVmaXg6IFtdfV07XG4gICAgLyoqIEB0eXBlIHtGbGF0dGVuZWRTY2hlbWF9ICovXG4gICAgY29uc3QgZmxhdHRlbmVkID0gW107XG5cbiAgICAvLyB0aGlzIGJpdCBpcyBhIHJlY3Vyc2l2ZSBhbGdvcml0aG0gcmV3cml0dGVuIGFzIGEgZm9yIGxvb3AuXG4gICAgLy8gd2hlbiB3ZSBmaW5kIHNvbWV0aGluZyB3ZSB3YW50IHRvIHRyYXZlcnNlLCB3ZSBhZGQgaXQgdG8gYHN0YWNrYFxuICAgIGZvciAoY29uc3Qge3Byb3BlcnRpZXMsIHByZWZpeH0gb2Ygc3RhY2spIHtcbiAgICAgIGNvbnN0IHBhaXJzID0gXy50b1BhaXJzKHByb3BlcnRpZXMpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcGFpcnMpIHtcbiAgICAgICAgY29uc3Qge3Byb3BlcnRpZXMsICRyZWZ9ID0gdmFsdWU7XG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJlZml4OiBrZXkgPT09IFNFUlZFUl9QUk9QX05BTUUgPyBbXSA6IFsuLi5wcmVmaXgsIGtleV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJHJlZikge1xuICAgICAgICAgIGxldCByZWZTY2hlbWE7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlZlNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hKCRyZWYpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gdGhpcyBjYW4gaGFwcGVuIGlmIGFuIGV4dGVuc2lvbiBzY2hlbWEgc3VwcGxpZXMgYSAkcmVmIHRvIGEgbm9uLWV4aXN0ZW50IHNjaGVtYVxuICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcigkcmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qge25vcm1hbGl6ZWRFeHROYW1lfSA9IEFyZ1NwZWMuZXh0ZW5zaW9uSW5mb0Zyb21Sb290U2NoZW1hSWQoJHJlZik7XG4gICAgICAgICAgaWYgKCFub3JtYWxpemVkRXh0TmFtZSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcbiAgICAgICAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgZXh0ZW5zaW9uIG5hbWUgZnJvbSBzY2hlbWEgSUQgJHskcmVmfS4gVGhpcyBpcyBhIGJ1Zy5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHJlZlNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJlZml4OiBbLi4ucHJlZml4LCBrZXksIG5vcm1hbGl6ZWRFeHROYW1lXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgIT09IERSSVZFUl9UWVBFICYmIGtleSAhPT0gUExVR0lOX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBbZXh0VHlwZSwgZXh0TmFtZV0gPSBwcmVmaXg7XG4gICAgICAgICAgY29uc3QgYXJnU3BlYyA9IHRoaXMuZ2V0QXJnU3BlYyhrZXksIC8qKiBAdHlwZSB7RXh0ZW5zaW9uVHlwZX0gKi8gKGV4dFR5cGUpLCBleHROYW1lKTtcbiAgICAgICAgICBpZiAoIWFyZ1NwZWMpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXG4gICAgICAgICAgICAgIGBVbmtub3duIGFyZ3VtZW50IHdpdGgga2V5ICR7a2V5fSwgZXh0VHlwZSAke2V4dFR5cGV9IGFuZCBleHROYW1lICR7ZXh0TmFtZX0uIFRoaXMgaXMgYSBidWcuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmxhdHRlbmVkLnB1c2goe3NjaGVtYTogXy5jbG9uZURlZXAodmFsdWUpLCBhcmdTcGVjfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc2NoZW1hIGl0c2VsZlxuICAgKiBAcHVibGljXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVmXSAtIFNjaGVtYSBJRFxuICAgKiBAdGhyb3dzIElmIHRoZSBzY2hlbWEgaGFzIG5vdCB5ZXQgYmVlbiBmaW5hbGl6ZWRcbiAgICogQHJldHVybnMge1NjaGVtYU9iamVjdH1cbiAgICovXG4gIGdldFNjaGVtYShyZWYgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIHJldHVybiAvKiogQHR5cGUge1NjaGVtYU9iamVjdH0gKi8gKHRoaXMuX2dldFZhbGlkYXRvcihyZWYpLnNjaGVtYSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHNjaGVtYSB2YWxpZGF0b3IgZnVuY3Rpb24gZnJvbSBBanZcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtpZF0gLSBTY2hlbWEgSURcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge2ltcG9ydCgnYWp2JykuVmFsaWRhdGVGdW5jdGlvbn1cbiAgICovXG4gIF9nZXRWYWxpZGF0b3IoaWQgPSBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMuX2Fqdi5nZXRTY2hlbWEoaWQpO1xuICAgIGlmICghdmFsaWRhdG9yKSB7XG4gICAgICBpZiAoaWQgPT09IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgICAgIHRocm93IG5ldyBTY2hlbWFGaW5hbGl6YXRpb25FcnJvcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVVua25vd25TY2hlbWFFcnJvcihpZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYW4gb2JqZWN0LCB2YWxpZGF0ZXMgaXQgYWdhaW5zdCB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEuXG4gICAqIElmIGVycm9ycyBvY2N1ciwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgbm9uLWVtcHR5LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgKGhvcGVmdWxseSBhbiBvYmplY3QpIHRvIHZhbGlkYXRlIGFnYWluc3QgdGhlIHNjaGVtYVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlZl0gLSBTY2hlbWEgSUQgb3IgcmVmLlxuICAgKiBAcHVibGljXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ2FqdicpLkVycm9yT2JqZWN0W119IEFycmF5IG9mIGVycm9ycywgaWYgYW55LlxuICAgKi9cbiAgdmFsaWRhdGUodmFsdWUsIHJlZiA9IEFQUElVTV9DT05GSUdfU0NIRU1BX0lEKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5fZ2V0VmFsaWRhdG9yKHJlZik7XG4gICAgcmV0dXJuICF2YWxpZGF0b3IodmFsdWUpICYmIF8uaXNBcnJheSh2YWxpZGF0b3IuZXJyb3JzKSA/IFsuLi52YWxpZGF0b3IuZXJyb3JzXSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGBmaWxlbmFtZWAncyBmaWxlIGV4dGVuc2lvbiBpcyBhbGxvd2VkIChpbiB7QGxpbmsgQUxMT1dFRF9TQ0hFTUFfRVhURU5TSU9OU30pLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbihmaWxlbmFtZSkge1xuICAgIHJldHVybiBBTExPV0VEX1NDSEVNQV9FWFRFTlNJT05TLmhhcyhwYXRoLmV4dG5hbWUoZmlsZW5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBgc2NoZW1hYCBpcyBhIHBsYWluIG9iamVjdCB3aXRoIGEgbm9uLXRydWUgYCRhc3luY2AgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB7YW55fSBzY2hlbWEgLSBTY2hlbWEgdG8gY2hlY2tcbiAgICogQHJldHVybnMge3NjaGVtYSBpcyBTY2hlbWFPYmplY3R9XG4gICAqL1xuICBzdGF0aWMgaXNTdXBwb3J0ZWRTY2hlbWFUeXBlKHNjaGVtYSkge1xuICAgIHJldHVybiBfLmlzUGxhaW5PYmplY3Qoc2NoZW1hKSAmJiBzY2hlbWEuJGFzeW5jICE9PSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gdGhlIHtAbGluayBBcHBpdW1TY2hlbWF9IGluc3RhbmNlIGhhcyBub3QgeWV0IGJlZW4gZmluYWxpemVkLCBidXRcbiAqIHRoZSBtZXRob2QgY2FsbGVkIHJlcXVpcmVzIGl0LlxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hRmluYWxpemF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9GSU5BTElaQVRJT04nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdTY2hlbWEgbm90IHlldCBmaW5hbGl6ZWQ7IGBmaW5hbGl6ZSgpYCBtdXN0IGJlIGNhbGxlZCBmaXJzdC4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgXCJ1bmlxdWVcIiBzY2hlbWEgSUQgY29uZmxpY3RzIHdpdGggYW4gZXhpc3Rpbmcgc2NoZW1hIElELlxuICpcbiAqIFRoaXMgaXMgbGlrZWx5IGdvaW5nIHRvIGJlIGNhdXNlZCBieSBhdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIHRoZSBzYW1lIHNjaGVtYSB0d2ljZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYU5hbWVDb25mbGljdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9TQ0hFTUFfTkFNRV9DT05GTElDVCc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7ZXh0VHlwZTogRXh0ZW5zaW9uVHlwZSwgZXh0TmFtZTogc3RyaW5nfT59XG4gICAqL1xuICBkYXRhO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICovXG4gIGNvbnN0cnVjdG9yKGV4dFR5cGUsIGV4dE5hbWUpIHtcbiAgICBzdXBlcihgTmFtZSBmb3IgJHtleHRUeXBlfSBzY2hlbWEgXCIke2V4dE5hbWV9XCIgY29uZmxpY3RzIHdpdGggYW4gZXhpc3Rpbmcgc2NoZW1hYCk7XG4gICAgdGhpcy5kYXRhID0ge2V4dFR5cGUsIGV4dE5hbWV9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBzY2hlbWEgSUQgd2FzIGV4cGVjdGVkLCBidXQgaXQgZG9lc24ndCBleGlzdCBvbiB0aGUge0BsaW5rIEFqdn0gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFVbmtub3duU2NoZW1hRXJyb3IgZXh0ZW5kcyBSZWZlcmVuY2VFcnJvciB7XG4gIC8qKlxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIGNvZGUgPSAnQVBQSVVNRVJSX1NDSEVNQV9VTktOT1dOX1NDSEVNQSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7c2NoZW1hSWQ6IHN0cmluZ30+fVxuICAgKi9cbiAgZGF0YTtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjaGVtYUlkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY2hlbWFJZCkge1xuICAgIHN1cGVyKGBVbmtub3duIHNjaGVtYTogXCIke3NjaGVtYUlkfVwiYCk7XG4gICAgdGhpcy5kYXRhID0ge3NjaGVtYUlkfTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgc2NoZW1hIGlzIHByb3ZpZGVkLCBidXQgaXQncyBvZiBhbiB1bnN1cHBvcnRlZCB0eXBlLlxuICpcbiAqIFwiVmFsaWRcIiBzY2hlbWFzIHdoaWNoIGFyZSB1bnN1cHBvcnRlZCBpbmNsdWRlIGJvb2xlYW4gc2NoZW1hcyBhbmQgYXN5bmMgc2NoZW1hc1xuICogKGhhdmluZyBhIGB0cnVlYCBgJGFzeW5jYCBwcm9wZXJ0eSkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFVbnN1cHBvcnRlZFNjaGVtYUVycm9yIGV4dGVuZHMgVHlwZUVycm9yIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgY29kZSA9ICdBUFBJVU1FUlJfU0NIRU1BX1VOU1VQUE9SVEVEX1NDSEVNQSc7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTx7c2NoZW1hOiBhbnksIGV4dFR5cGU6IEV4dGVuc2lvblR5cGUsIGV4dE5hbWU6IHN0cmluZ30+fVxuICAgKi9cbiAgZGF0YTtcblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IHNjaGVtYVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IGV4dFR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjaGVtYSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvODI3N1xuICAgIHN1cGVyKFxuICAgICAgKCgpID0+IHtcbiAgICAgICAgbGV0IG1zZyA9IGBVbnN1cHBvcnRlZCBzY2hlbWEgZnJvbSAke2V4dFR5cGV9IFwiJHtleHROYW1lfVwiOmA7XG4gICAgICAgIGlmIChfLmlzQm9vbGVhbihzY2hlbWEpKSB7XG4gICAgICAgICAgcmV0dXJuIGAke21zZ30gc2NoZW1hIGNhbm5vdCBiZSBhIGJvb2xlYW5gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzUGxhaW5PYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICAgIGlmIChzY2hlbWEuJGFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7bXNnfSBzY2hlbWEgY2Fubm90IGJlIGFuIGFzeW5jIHNjaGVtYWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBzY2hlbWEgSVMgc3VwcG9ydGVkOyB0aGlzIGVycm9yIHNob3VsZCBub3QgYmUgdGhyb3duICh0aGlzIGlzIGEgYnVnKS4gdmFsdWUgb2Ygc2NoZW1hOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgICl9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke21zZ30gc2NoZW1hIG11c3QgYmUgYSBwbGFpbiBvYmplY3Qgd2l0aG91dCBhIHRydWUgXCIkYXN5bmNcIiBwcm9wZXJ0eWA7XG4gICAgICB9KSgpXG4gICAgKTtcbiAgICB0aGlzLmRhdGEgPSB7c2NoZW1hLCBleHRUeXBlLCBleHROYW1lfTtcbiAgfVxufVxuXG5jb25zdCBhcHBpdW1TY2hlbWEgPSBBcHBpdW1TY2hlbWEuY3JlYXRlKCk7XG5cbmV4cG9ydCBjb25zdCB7XG4gIHJlZ2lzdGVyU2NoZW1hLFxuICBnZXRBbGxBcmdTcGVjcyxcbiAgZ2V0QXJnU3BlYyxcbiAgaGFzQXJnU3BlYyxcbiAgaXNGaW5hbGl6ZWQsXG4gIGZpbmFsaXplOiBmaW5hbGl6ZVNjaGVtYSxcbiAgcmVzZXQ6IHJlc2V0U2NoZW1hLFxuICB2YWxpZGF0ZSxcbiAgZ2V0U2NoZW1hLFxuICBmbGF0dGVuOiBmbGF0dGVuU2NoZW1hLFxuICBnZXREZWZhdWx0czogZ2V0RGVmYXVsdHNGb3JTY2hlbWEsXG4gIGdldERlZmF1bHRzRm9yRXh0ZW5zaW9uLFxufSA9IGFwcGl1bVNjaGVtYTtcbmV4cG9ydCBjb25zdCB7aXNBbGxvd2VkU2NoZW1hRmlsZUV4dGVuc2lvbn0gPSBBcHBpdW1TY2hlbWE7XG5cbi8qKlxuICogQXBwaXVtIG9ubHkgc3VwcG9ydHMgc2NoZW1hcyB0aGF0IGFyZSBwbGFpbiBvYmplY3RzOyBub3QgYXJyYXlzLlxuICogQHR5cGVkZWYge2ltcG9ydCgnYWp2JykuU2NoZW1hT2JqZWN0ICYge1trZXk6IG51bWJlcl06IG5ldmVyfX0gU2NoZW1hT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9leHRlbnNpb24vbWFuaWZlc3QnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cblxuLyoqXG4gKiBBbiBvYmplY3QgaGF2aW5nIHByb3BlcnR5IGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiBTdHJpY3RQcm9wXG4gKiBAcHJvcGVydHkge2ZhbHNlfSBhZGRpdGlvbmFsUHJvcGVydGllc1xuICovXG5cbi8qKlxuICogQSB7QGxpbmsgU2NoZW1hT2JqZWN0fSB3aXRoIGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gKiBAdHlwZWRlZiB7U2NoZW1hT2JqZWN0ICYgU3RyaWN0UHJvcH0gU3RyaWN0U2NoZW1hT2JqZWN0XG4gKi9cblxuLyoqXG4gKiBBIGxpc3Qgb2Ygc2NoZW1hcyBhc3NvY2lhdGVkIHdpdGggcHJvcGVydGllcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB7QGxpbmsgQXJnU3BlY30gb2JqZWN0cy5cbiAqXG4gKiBJbnRlcm1lZGlhdGUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB3aGVuIGNvbnZlcnRpbmcgdGhlIGVudGlyZSBzY2hlbWEgZG93biB0byBDTEkgYXJndW1lbnRzLlxuICogQHR5cGVkZWYgeyB7c2NoZW1hOiBTY2hlbWFPYmplY3QsIGFyZ1NwZWM6IEFyZ1NwZWN9W10gfSBGbGF0dGVuZWRTY2hlbWFcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtBcmdTcGVjWydkZWZhdWx0VmFsdWUnXX0gQXJnU3BlY0RlZmF1bHRWYWx1ZVxuICovXG5cbi8qKlxuICogZS5nLiBge2RyaXZlcjoge2ZvbzogJ2Jhcid9fWAgd2hlcmUgYGZvb2AgaXMgdGhlIGFyZyBuYW1lIGFuZCBgYmFyYCBpcyB0aGUgZGVmYXVsdCB2YWx1ZS5cbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLFJlY29yZDxzdHJpbmcsQXJnU3BlY0RlZmF1bHRWYWx1ZT4+fSBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBIZWxwZXIgdHlwZSBmb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB7QGxpbmsgQXBwaXVtU2NoZW1hLmdldERlZmF1bHRzfVxuICogQHRlbXBsYXRlIHtib29sZWFufHVuZGVmaW5lZH0gRmxhdHRlbmVkXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZyxGbGF0dGVuZWQgZXh0ZW5kcyB0cnVlID8gQXJnU3BlY0RlZmF1bHRWYWx1ZSA6IEFyZ1NwZWNEZWZhdWx0VmFsdWUgfCBOZXN0ZWRBcmdTcGVjRGVmYXVsdFZhbHVlPn0gRGVmYXVsdFZhbHVlc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBUU8sTUFBTUEsYUFBTixTQUE0QkMsR0FBNUIsQ0FBZ0M7RUFLckNDLEdBQUcsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEVBQWE7SUFDZCxJQUFJLEtBQUtDLEdBQUwsQ0FBU0YsR0FBVCxDQUFKLEVBQW1CO01BQ2pCLE1BQU0sSUFBSUcsS0FBSixDQUFXLEdBQUVILEdBQUksaUJBQWpCLENBQU47SUFDRDs7SUFDRCxPQUFPLE1BQU1ELEdBQU4sQ0FBVUMsR0FBVixFQUFlQyxLQUFmLENBQVA7RUFDRDs7RUFNREcsTUFBTSxDQUFDSixHQUFELEVBQU07SUFDVixPQUFPLEtBQVA7RUFDRDs7RUFFREssS0FBSyxHQUFHO0lBQ04sTUFBTSxJQUFJRixLQUFKLENBQVcsNEJBQVgsQ0FBTjtFQUNEOztBQXRCb0M7OztBQTRCaEMsTUFBTUcseUJBQXlCLEdBQUcsSUFBSUMsR0FBSixDQUFRLENBQUMsT0FBRCxFQUFVLEtBQVYsRUFBaUIsTUFBakIsQ0FBUixDQUFsQzs7O0FBT1AsTUFBTUMsWUFBTixDQUFtQjtFQVVqQkMsU0FBUyxHQUFHLElBQUlaLGFBQUosRUFBSDtFQVVUYSxrQkFBa0IsR0FBRztJQUFDLENBQUNDLHNCQUFELEdBQWUsSUFBSWIsR0FBSixFQUFoQjtJQUEyQixDQUFDYyxzQkFBRCxHQUFlLElBQUlkLEdBQUo7RUFBMUMsQ0FBSDtFQVFsQmUsSUFBSTtFQU9ZLE9BQVRDLFNBQVM7RUFTaEJDLGlCQUFpQixH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
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":";iBAwOc,YAAY;cACZ,MAAM;kCACN,GAAG;;;;WAOH,KAAK;cACL,MAAM;;;;kCAEN,GAAG;;;8BAKJ,OAAO,eAAe,EAAE,eAAe;2BACvC,OAAO,eAAe,EAAE,YAAY;oCACpC,OAAO,eAAe,EAAE,qBAAqB;AA1O1D;;;;GAIG;AACH,wCAOK;AAEL;;;;;;;;;GASG;AACH,4DANW,GAAG,mBACH,eAAe,gBACf,OAAO,eAAe,EAAE,WAAW,wFAEjC,gBAAgB,GAAC,WAAW,CA2FxC;AAED;;;;GAIG;AACH,2CAHW,YAAY,GACV,qBAAqB,CAyBjC;AAyBD,qDAGC;AAED;;;;;;;;;;;;;;;GAeG;AACH,oDAgBC;AA5DD;;;;GAIG;AACH,2CAHW,qBAAqB,GACnB,YAAY,CAaxB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils.js"],"names":[],"mappings":";iBAiQc,YAAY;cACZ,MAAM;kCACN,GAAG;;;;WAOH,KAAK;cACL,MAAM;;;;kCAEN,GAAG;;;8BAKJ,OAAO,eAAe,EAAE,eAAe;2BACvC,OAAO,eAAe,EAAE,YAAY;oCACpC,OAAO,eAAe,EAAE,qBAAqB;AApQ1D;;;;GAIG;AACH,wCAQE;AAEF;;;;;;;;;GASG;AACH,4DANW,GAAG,mBACH,eAAe,gBACf,OAAO,eAAe,EAAE,WAAW,wFAEjC,gBAAgB,GAAC,WAAW,CAgHxC;AAED;;;;GAIG;AACH,2CAHW,YAAY,GACV,qBAAqB,CAyBjC;AAyBD,qDAGC;AAED;;;;;;;;;;;;;;;GAeG;AACH,oDAgBC;AA5DD;;;;GAIG;AACH,2CAHW,qBAAqB,GACnB,YAAY,CAaxB"}
@@ -188,4 +188,4 @@ function pullSettings(caps) {
188
188
 
189
189
  return result;
190
190
  }
191
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImlzU3Rkb3V0VFRZIiwicHJvY2VzcyIsInN0ZG91dCIsImlzVFRZIiwiaW5zcGVjdCIsIl8iLCJmbG93IiwicGFydGlhbFJpZ2h0IiwiZHVtcCIsImNvbG9ycyIsImRlcHRoIiwiY29tcGFjdCIsImFyZ3MiLCJsb2dnZXIiLCJpbmZvIiwicGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIiLCJqc29ud3BDYXBhYmlsaXRpZXMiLCJ3M2NDYXBhYmlsaXRpZXMiLCJjb25zdHJhaW50cyIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJoYXNXM0NDYXBzIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImhhc0pTT05XUENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb3RvY29sIiwiUFJPVE9DT0xTIiwiVzNDIiwiZXJyb3IiLCJFcnJvciIsImNsb25lRGVlcCIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwS2V5IiwiZGVmYXVsdENhcFZhbHVlIiwidG9QYWlycyIsImlzQ2FwQWxyZWFkeVNldCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJyZW1vdmVBcHBpdW1QcmVmaXhlcyIsInJlbW92ZUFwcGl1bVByZWZpeCIsImFsd2F5c01hdGNoIiwibWVzc2FnZSIsImluc2VydEFwcGl1bVByZWZpeGVzIiwiY2FwcyIsIlNUQU5EQVJEX0NBUFMiLCJwcmVmaXhlZENhcHMiLCJuYW1lIiwidmFsdWUiLCJpbmNsdWRlcyIsImZpeGVkQ2FwcyIsImtleSIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJnZXRQYWNrYWdlVmVyc2lvbiIsInBrZ05hbWUiLCJwa2dJbmZvIiwicmVxdWlyZSIsInZlcnNpb24iLCJwdWxsU2V0dGluZ3MiLCJyZXN1bHQiLCJtYXRjaCIsImV4ZWMiXSwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBwcm9jZXNzQ2FwYWJpbGl0aWVzLCBQUk9UT0NPTFMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7IGluc3BlY3QgYXMgZHVtcCB9IGZyb20gJ3V0aWwnO1xuXG5jb25zdCBXM0NfQVBQSVVNX1BSRUZJWCA9ICdhcHBpdW0nO1xuXG4vKipcbiAqXG4gKiBJZiBgc3Rkb3V0YCBpcyBhIFRUWSwgdGhpcyBpcyBgdHJ1ZWAuXG4gKlxuICogVXNlZCBmb3IgdGlnaHRlciBjb250cm9sIG92ZXIgbG9nIG91dHB1dC5cbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5jb25zdCBpc1N0ZG91dFRUWSA9IHByb2Nlc3Muc3Rkb3V0LmlzVFRZO1xuXG4vKipcbiAqIER1bXBzIHRvIHZhbHVlIHRvIHRoZSBjb25zb2xlIHVzaW5nIGBpbmZvYCBsb2dnZXIuXG4gKlxuICogQHRvZG8gTWF5IHdhbnQgdG8gZm9yY2UgY29sb3IgdG8gYmUgYGZhbHNlYCBpZiB7QGxpbmsgaXNTdGRvdXRUVFl9IGlzIGBmYWxzZWAuXG4gKi9cbmNvbnN0IGluc3BlY3QgPSBfLmZsb3coXG4gIF8ucGFydGlhbFJpZ2h0KFxuICAgIC8qKiBAdHlwZSB7KG9iamVjdDogYW55LCBvcHRpb25zOiBpbXBvcnQoJ3V0aWwnKS5JbnNwZWN0T3B0aW9ucykgPT4gc3RyaW5nfSAqLyhkdW1wKSxcbiAgICB7Y29sb3JzOiB0cnVlLCBkZXB0aDogbnVsbCwgY29tcGFjdDogIWlzU3Rkb3V0VFRZfVxuICApLFxuICAoLi4uYXJncykgPT4ge1xuICAgIGxvZ2dlci5pbmZvKC4uLmFyZ3MpO1xuICB9KTtcblxuLyoqXG4gKiBUYWtlcyB0aGUgY2FwcyB0aGF0IHdlcmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYW5kIHRyYW5zbGF0ZXMgdGhlbVxuICogaW50byBjYXBzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGlubmVyIGRyaXZlcnMuXG4gKlxuICogQHBhcmFtIHthbnl9IGpzb253cENhcGFiaWxpdGllc1xuICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IHczY0NhcGFiaWxpdGllc1xuICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Db25zdHJhaW50c30gY29uc3RyYWludHNcbiAqIEBwYXJhbSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRGVmYXVsdENhcGFiaWxpdGllc0NvbmZpZ30gW2RlZmF1bHRDYXBhYmlsaXRpZXNdXG4gKiBAcmV0dXJucyB7UGFyc2VkRHJpdmVyQ2Fwc3xJbnZhbGlkQ2Fwc31cbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIgKGpzb253cENhcGFiaWxpdGllcywgdzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cyA9IHt9LCBkZWZhdWx0Q2FwYWJpbGl0aWVzID0ge30pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID0gXy5pc1BsYWluT2JqZWN0KHczY0NhcGFiaWxpdGllcykgJiZcbiAgICAoXy5oYXModzNjQ2FwYWJpbGl0aWVzLCAnYWx3YXlzTWF0Y2gnKSB8fCBfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdmaXJzdE1hdGNoJykpO1xuICBjb25zdCBoYXNKU09OV1BDYXBzID0gXy5pc1BsYWluT2JqZWN0KGpzb253cENhcGFiaWxpdGllcyk7XG4gIGxldCBkZXNpcmVkQ2FwcyA9IC8qKiBAdHlwZSB7UGFyc2VkRHJpdmVyQ2Fwc1snZGVzaXJlZENhcHMnXX0gKi8oe30pO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzO1xuXG4gIGlmICghaGFzVzNDQ2Fwcykge1xuICAgIHJldHVybiAvKiogQHR5cGUge0ludmFsaWRDYXBzfSAqLyh7XG4gICAgICBwcm90b2NvbDogUFJPVE9DT0xTLlczQyxcbiAgICAgIGVycm9yOiBuZXcgRXJyb3IoJ1czQyBjYXBhYmlsaXRpZXMgc2hvdWxkIGJlIHByb3ZpZGVkJyksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCB7VzNDfSA9IFBST1RPQ09MUztcbiAgY29uc3QgcHJvdG9jb2wgPSBXM0M7XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG4gIGpzb253cENhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKGpzb253cENhcGFiaWxpdGllcyk7XG4gIHczY0NhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHczY0NhcGFiaWxpdGllcyk7XG4gIGRlZmF1bHRDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChkZWZhdWx0Q2FwYWJpbGl0aWVzKTtcblxuICBpZiAoIV8uaXNFbXB0eShkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgIGlmIChoYXNXM0NDYXBzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtkZWZhdWx0Q2FwS2V5LCBkZWZhdWx0Q2FwVmFsdWVdIG9mIF8udG9QYWlycyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgICAgICBsZXQgaXNDYXBBbHJlYWR5U2V0ID0gZmFsc2U7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIGZpcnN0TWF0Y2ggZW50cmllc1xuICAgICAgICBmb3IgKGNvbnN0IGZpcnN0TWF0Y2hFbnRyeSBvZiAodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggfHwgW10pKSB7XG4gICAgICAgICAgaWYgKF8uaXNQbGFpbk9iamVjdChmaXJzdE1hdGNoRW50cnkpXG4gICAgICAgICAgICAgICYmIF8uaGFzKHJlbW92ZUFwcGl1bVByZWZpeGVzKGZpcnN0TWF0Y2hFbnRyeSksIHJlbW92ZUFwcGl1bVByZWZpeChkZWZhdWx0Q2FwS2V5KSkpIHtcbiAgICAgICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gYWx3YXlzTWF0Y2ggZW50cmllc1xuICAgICAgICBpc0NhcEFscmVhZHlTZXQgPSBpc0NhcEFscmVhZHlTZXQgfHwgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpXG4gICAgICAgICAgJiYgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKSk7XG4gICAgICAgIGlmIChpc0NhcEFscmVhZHlTZXQpIHtcbiAgICAgICAgICAvLyBTa2lwIGlmIHRoZSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBwcm92aWRlZCBjYXBzXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IGFkZCB0aGUgZGVmYXVsdCBjYXBhYmlsaXR5IGlmIGl0IGlzIG5vdCBvdmVycmlkZGVuXG4gICAgICAgIGlmIChfLmlzRW1wdHkodzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2gpKSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggPSBbe1tkZWZhdWx0Q2FwS2V5XTogZGVmYXVsdENhcFZhbHVlfV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2hbMF1bZGVmYXVsdENhcEtleV0gPSBkZWZhdWx0Q2FwVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc0pTT05XUENhcHMpIHtcbiAgICAgIGpzb253cENhcGFiaWxpdGllcyA9IHsuLi5yZW1vdmVBcHBpdW1QcmVmaXhlcyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSwgLi4uanNvbndwQ2FwYWJpbGl0aWVzfTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgTUpTT05XUCBjYXBzXG4gIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gey4uLmpzb253cENhcGFiaWxpdGllc307XG4gIH1cblxuICAvLyBHZXQgVzNDIGNhcHNcbiAgaWYgKGhhc1czQ0NhcHMpIHtcbiAgICAvLyBDYWxsIHRoZSBwcm9jZXNzIGNhcGFiaWxpdGllcyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGluZyBjYXBzIG9uIHRoZSBXM0NcbiAgICAvLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vamxpcHBzL3NpbXBsZS13ZC1zcGVjI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuICAgIHRyeSB7XG4gICAgICBkZXNpcmVkQ2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cywgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDb3VsZCBub3QgcGFyc2UgVzNDIGNhcGFiaWxpdGllczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7SW52YWxpZENhcHN9ICovKHtcbiAgICAgICAgZGVzaXJlZENhcHMsXG4gICAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBuZXcgdzNjIGNhcGFiaWxpdGllcyBwYXlsb2FkIHRoYXQgY29udGFpbnMgb25seSB0aGUgbWF0Y2hpbmcgY2FwcyBpbiBgYWx3YXlzTWF0Y2hgXG4gICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzID0ge1xuICAgICAgYWx3YXlzTWF0Y2g6IHsuLi5pbnNlcnRBcHBpdW1QcmVmaXhlcyhkZXNpcmVkQ2Fwcyl9LFxuICAgICAgZmlyc3RNYXRjaDogW3t9XSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UGFyc2VkRHJpdmVyQ2Fwc30gKi8oe2Rlc2lyZWRDYXBzLCBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcywgcHJvdG9jb2x9KTtcbn1cblxuLyoqXG4gKiBUYWtlcyBhIGNhcGFiaWxpdGllcyBvYmplY3RzIGFuZCBwcmVmaXhlcyBjYXBhYmlsaXRpZXMgd2l0aCBgYXBwaXVtOmBcbiAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBjYXBzIERlc2lyZWQgY2FwYWJpbGl0aWVzIG9iamVjdFxuICogQHJldHVybnMge0FwcGl1bVczQ0NhcGFiaWxpdGllc31cbiAqL1xuZnVuY3Rpb24gaW5zZXJ0QXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuICBjb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAgICdicm93c2VyTmFtZScsXG4gICAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgICAncGxhdGZvcm1OYW1lJyxcbiAgICAnYWNjZXB0SW5zZWN1cmVDZXJ0cycsXG4gICAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAgICdwcm94eScsXG4gICAgJ3NldFdpbmRvd1JlY3QnLFxuICAgICd0aW1lb3V0cycsXG4gICAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJ1xuICBdO1xuXG4gIGxldCBwcmVmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBpZiAoU1RBTkRBUkRfQ0FQUy5pbmNsdWRlcyhuYW1lKSB8fCBuYW1lLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgIHByZWZpeGVkQ2Fwc1tuYW1lXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVmaXhlZENhcHNbYCR7VzNDX0FQUElVTV9QUkVGSVh9OiR7bmFtZX1gXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJlZml4ZWRDYXBzO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0FwcGl1bVczQ0NhcGFiaWxpdGllc30gY2Fwc1xuICogQHJldHVybnMge0NhcGFiaWxpdGllc31cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXBwaXVtUHJlZml4ZXMgKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIC8qKiBAdHlwZSB7Q2FwYWJpbGl0aWVzfSAqL1xuICBjb25zdCBmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBmaXhlZENhcHNbcmVtb3ZlQXBwaXVtUHJlZml4KG5hbWUpXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBmaXhlZENhcHM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeCAoa2V5KSB7XG4gIGNvbnN0IHByZWZpeCA9IGAke1czQ19BUFBJVU1fUFJFRklYfTpgO1xuICByZXR1cm4gXy5zdGFydHNXaXRoKGtleSwgcHJlZml4KSA/IGtleS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkgOiBrZXk7XG59XG5cbmZ1bmN0aW9uIGdldFBhY2thZ2VWZXJzaW9uIChwa2dOYW1lKSB7XG4gIGNvbnN0IHBrZ0luZm8gPSByZXF1aXJlKGAke3BrZ05hbWV9L3BhY2thZ2UuanNvbmApIHx8IHt9O1xuICByZXR1cm4gcGtnSW5mby52ZXJzaW9uO1xufVxuXG4vKipcbiAqIFB1bGxzIHRoZSBpbml0aWFsIHZhbHVlcyBvZiBBcHBpdW0gc2V0dGluZ3MgZnJvbSB0aGUgZ2l2ZW4gY2FwYWJpbGl0aWVzIGFyZ3VtZW50LlxuICogRWFjaCBzZXR0aW5nIGl0ZW0gbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuICogYHNldHRpbmdbc2V0dGluZ19uYW1lXTogc2V0dGluZ192YWx1ZWBcbiAqIFRoZSBjYXBhYmlsaXRpZXMgYXJndW1lbnQgaXRzZWxmIGdldHMgbXV0YXRlZCwgc28gaXQgZG9lcyBub3QgY29udGFpbiBwYXJzZWRcbiAqIHNldHRpbmdzIGFueW1vcmUgdG8gYXZvaWQgZnVydGhlciBwYXJzaW5nIGlzc3Vlcy5cbiAqIENoZWNrXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9ibG9iL21hc3Rlci9kb2NzL2VuL2FkdmFuY2VkLWNvbmNlcHRzL3NldHRpbmdzLm1kXG4gKiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBhdmFpbGFibGUgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIHs/T2JqZWN0fSBjYXBzIC0gQ2FwYWJpbGl0aWVzIGRpY3Rpb25hcnkuIEl0IGlzIG11dGF0ZWQgaWZcbiAqIG9uZSBvciBtb3JlIHNldHRpbmdzIGhhdmUgYmVlbiBwdWxsZWQgZnJvbSBpdFxuICogQHJldHVybiB7T2JqZWN0fSAtIEFuIGVtcHR5IGRpY3Rpb25hcnkgaWYgdGhlIGdpdmVuIGNhcHMgY29udGFpbnMgbm9cbiAqIHNldHRpbmcgaXRlbXMgb3IgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgcGFyc2VkIEFwcGl1bSBzZXR0aW5nIG5hbWVzIGFsb25nIHdpdGhcbiAqIHRoZWlyIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gcHVsbFNldHRpbmdzIChjYXBzKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGNhcHMpIHx8IF8uaXNFbXB0eShjYXBzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBjb25zdCBtYXRjaCA9IC9cXGJzZXR0aW5nc1xcWyhcXFMrKVxcXSQvLmV4ZWMoa2V5KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXN1bHRbbWF0Y2hbMV1dID0gdmFsdWU7XG4gICAgZGVsZXRlIGNhcHNba2V5XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQge1xuICBpbnNwZWN0LCBwYXJzZUNhcHNGb3JJbm5lckRyaXZlciwgaW5zZXJ0QXBwaXVtUHJlZml4ZXMsXG4gIGdldFBhY2thZ2VWZXJzaW9uLCBwdWxsU2V0dGluZ3MsIHJlbW92ZUFwcGl1bVByZWZpeGVzXG59O1xuXG4vKipcbiAqIEB0b2RvIHByb3RvY29sIGlzIG1vcmUgc3BlY2lmaWNcbiAqIEB0eXBlZGVmIFBhcnNlZERyaXZlckNhcHNcbiAqIEBwcm9wZXJ0eSB7Q2FwYWJpbGl0aWVzfSBkZXNpcmVkQ2Fwc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb3RvY29sXG4gKiBAcHJvcGVydHkge2FueX0gW3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllc11cbiAqIEBwcm9wZXJ0eSB7VzNDQ2FwYWJpbGl0aWVzfSBbcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzXVxuICovXG5cbi8qKlxuICogQHRvZG8gcHJvdG9jb2wgaXMgbW9yZSBzcGVjaWZpY1xuICogQHR5cGVkZWYgSW52YWxpZENhcHNcbiAqIEBwcm9wZXJ0eSB7RXJyb3J9IGVycm9yXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvdG9jb2xcbiAqIEBwcm9wZXJ0eSB7Q2FwYWJpbGl0aWVzfSBbZGVzaXJlZENhcHNdXG4gKiBAcHJvcGVydHkge2FueX0gW3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllc11cbiAqIEBwcm9wZXJ0eSB7VzNDQ2FwYWJpbGl0aWVzfSBbcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllc30gVzNDQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ2FwYWJpbGl0aWVzfSBDYXBhYmlsaXRpZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1XM0NDYXBhYmlsaXRpZXN9IEFwcGl1bVczQ0NhcGFiaWxpdGllc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxpQkFBaUIsR0FBRyxRQUExQjtBQVNBLE1BQU1DLFdBQVcsR0FBR0MsT0FBTyxDQUFDQyxNQUFSLENBQWVDLEtBQW5DOztBQU9BLE1BQU1DLE9BQU8sR0FBR0MsZ0JBQUVDLElBQUYsQ0FDZEQsZ0JBQUVFLFlBQUYsQ0FDaUZDLGFBRGpGLEVBRUU7RUFBQ0MsTUFBTSxFQUFFLElBQVQ7RUFBZUMsS0FBSyxFQUFFLElBQXRCO0VBQTRCQyxPQUFPLEVBQUUsQ0FBQ1g7QUFBdEMsQ0FGRixDQURjLEVBS2QsQ0FBQyxHQUFHWSxJQUFKLEtBQWE7RUFDWEMsZ0JBQU9DLElBQVAsQ0FBWSxHQUFHRixJQUFmO0FBQ0QsQ0FQYSxDQUFoQjs7OztBQW1CQSxTQUFTRyx1QkFBVCxDQUFrQ0Msa0JBQWxDLEVBQXNEQyxlQUF0RCxFQUF1RUMsV0FBVyxHQUFHLEVBQXJGLEVBQXlGQyxtQkFBbUIsR0FBRyxFQUEvRyxFQUFtSDtFQUVqSCxNQUFNQyxVQUFVLEdBQUdmLGdCQUFFZ0IsYUFBRixDQUFnQkosZUFBaEIsTUFDaEJaLGdCQUFFaUIsR0FBRixDQUFNTCxlQUFOLEVBQXVCLGFBQXZCLEtBQXlDWixnQkFBRWlCLEdBQUYsQ0FBTUwsZUFBTixFQUF1QixZQUF2QixDQUR6QixDQUFuQjs7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
191
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfQVBQSVVNX1BSRUZJWCIsImlzU3Rkb3V0VFRZIiwicHJvY2VzcyIsInN0ZG91dCIsImlzVFRZIiwiaW5zcGVjdCIsIl8iLCJmbG93IiwicGFydGlhbFJpZ2h0IiwiZHVtcCIsImNvbG9ycyIsImRlcHRoIiwiY29tcGFjdCIsImFyZ3MiLCJsb2dnZXIiLCJpbmZvIiwicGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIiLCJqc29ud3BDYXBhYmlsaXRpZXMiLCJ3M2NDYXBhYmlsaXRpZXMiLCJjb25zdHJhaW50cyIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJoYXNXM0NDYXBzIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsImhhc0pTT05XUENhcHMiLCJkZXNpcmVkQ2FwcyIsInByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyIsInByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyIsInByb3RvY29sIiwiUFJPVE9DT0xTIiwiVzNDIiwiZXJyb3IiLCJFcnJvciIsImNsb25lRGVlcCIsImlzRW1wdHkiLCJkZWZhdWx0Q2FwS2V5IiwiZGVmYXVsdENhcFZhbHVlIiwidG9QYWlycyIsImlzQ2FwQWxyZWFkeVNldCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJyZW1vdmVBcHBpdW1QcmVmaXhlcyIsInJlbW92ZUFwcGl1bVByZWZpeCIsImFsd2F5c01hdGNoIiwicHJvY2Vzc0NhcGFiaWxpdGllcyIsIm1lc3NhZ2UiLCJpbnNlcnRBcHBpdW1QcmVmaXhlcyIsImNhcHMiLCJTVEFOREFSRF9DQVBTIiwicHJlZml4ZWRDYXBzIiwibmFtZSIsInZhbHVlIiwiaW5jbHVkZXMiLCJmaXhlZENhcHMiLCJrZXkiLCJwcmVmaXgiLCJzdGFydHNXaXRoIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiZ2V0UGFja2FnZVZlcnNpb24iLCJwa2dOYW1lIiwicGtnSW5mbyIsInJlcXVpcmUiLCJ2ZXJzaW9uIiwicHVsbFNldHRpbmdzIiwicmVzdWx0IiwibWF0Y2giLCJleGVjIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7cHJvY2Vzc0NhcGFiaWxpdGllcywgUFJPVE9DT0xTfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7aW5zcGVjdCBhcyBkdW1wfSBmcm9tICd1dGlsJztcblxuY29uc3QgVzNDX0FQUElVTV9QUkVGSVggPSAnYXBwaXVtJztcblxuLyoqXG4gKlxuICogSWYgYHN0ZG91dGAgaXMgYSBUVFksIHRoaXMgaXMgYHRydWVgLlxuICpcbiAqIFVzZWQgZm9yIHRpZ2h0ZXIgY29udHJvbCBvdmVyIGxvZyBvdXRwdXQuXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaXNTdGRvdXRUVFkgPSBwcm9jZXNzLnN0ZG91dC5pc1RUWTtcblxuLyoqXG4gKiBEdW1wcyB0byB2YWx1ZSB0byB0aGUgY29uc29sZSB1c2luZyBgaW5mb2AgbG9nZ2VyLlxuICpcbiAqIEB0b2RvIE1heSB3YW50IHRvIGZvcmNlIGNvbG9yIHRvIGJlIGBmYWxzZWAgaWYge0BsaW5rIGlzU3Rkb3V0VFRZfSBpcyBgZmFsc2VgLlxuICovXG5jb25zdCBpbnNwZWN0ID0gXy5mbG93KFxuICBfLnBhcnRpYWxSaWdodChcbiAgICAvKiogQHR5cGUgeyhvYmplY3Q6IGFueSwgb3B0aW9uczogaW1wb3J0KCd1dGlsJykuSW5zcGVjdE9wdGlvbnMpID0+IHN0cmluZ30gKi8gKGR1bXApLFxuICAgIHtjb2xvcnM6IHRydWUsIGRlcHRoOiBudWxsLCBjb21wYWN0OiAhaXNTdGRvdXRUVFl9XG4gICksXG4gICguLi5hcmdzKSA9PiB7XG4gICAgbG9nZ2VyLmluZm8oLi4uYXJncyk7XG4gIH1cbik7XG5cbi8qKlxuICogVGFrZXMgdGhlIGNhcHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGFuZCB0cmFuc2xhdGVzIHRoZW1cbiAqIGludG8gY2FwcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBpbm5lciBkcml2ZXJzLlxuICpcbiAqIEBwYXJhbSB7YW55fSBqc29ud3BDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7VzNDQ2FwYWJpbGl0aWVzfSB3M2NDYXBhYmlsaXRpZXNcbiAqIEBwYXJhbSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29uc3RyYWludHN9IGNvbnN0cmFpbnRzXG4gKiBAcGFyYW0ge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRlZmF1bHRDYXBhYmlsaXRpZXNDb25maWd9IFtkZWZhdWx0Q2FwYWJpbGl0aWVzXVxuICogQHJldHVybnMge1BhcnNlZERyaXZlckNhcHN8SW52YWxpZENhcHN9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyKFxuICBqc29ud3BDYXBhYmlsaXRpZXMsXG4gIHczY0NhcGFiaWxpdGllcyxcbiAgY29uc3RyYWludHMgPSB7fSxcbiAgZGVmYXVsdENhcGFiaWxpdGllcyA9IHt9XG4pIHtcbiAgLy8gQ2hlY2sgaWYgdGhlIGNhbGxlciBzZW50IEpTT05XUCBjYXBzLCBXM0MgY2Fwcywgb3IgYm90aFxuICBjb25zdCBoYXNXM0NDYXBzID1cbiAgICBfLmlzUGxhaW5PYmplY3QodzNjQ2FwYWJpbGl0aWVzKSAmJlxuICAgIChfLmhhcyh3M2NDYXBhYmlsaXRpZXMsICdhbHdheXNNYXRjaCcpIHx8IF8uaGFzKHczY0NhcGFiaWxpdGllcywgJ2ZpcnN0TWF0Y2gnKSk7XG4gIGNvbnN0IGhhc0pTT05XUENhcHMgPSBfLmlzUGxhaW5PYmplY3QoanNvbndwQ2FwYWJpbGl0aWVzKTtcbiAgbGV0IGRlc2lyZWRDYXBzID0gLyoqIEB0eXBlIHtQYXJzZWREcml2ZXJDYXBzWydkZXNpcmVkQ2FwcyddfSAqLyAoe30pO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzO1xuICAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHNbJ3Byb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyddfSAqL1xuICBsZXQgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzO1xuXG4gIGlmICghaGFzVzNDQ2Fwcykge1xuICAgIHJldHVybiAvKiogQHR5cGUge0ludmFsaWRDYXBzfSAqLyAoe1xuICAgICAgcHJvdG9jb2w6IFBST1RPQ09MUy5XM0MsXG4gICAgICBlcnJvcjogbmV3IEVycm9yKCdXM0MgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSBwcm92aWRlZCcpLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qge1czQ30gPSBQUk9UT0NPTFM7XG4gIGNvbnN0IHByb3RvY29sID0gVzNDO1xuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuICBqc29ud3BDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBhYmlsaXRpZXMpO1xuICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICBkZWZhdWx0Q2FwYWJpbGl0aWVzID0gXy5jbG9uZURlZXAoZGVmYXVsdENhcGFiaWxpdGllcyk7XG5cbiAgaWYgKCFfLmlzRW1wdHkoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBpZiAoaGFzVzNDQ2Fwcykge1xuICAgICAgZm9yIChjb25zdCBbZGVmYXVsdENhcEtleSwgZGVmYXVsdENhcFZhbHVlXSBvZiBfLnRvUGFpcnMoZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICAgICAgbGV0IGlzQ2FwQWxyZWFkeVNldCA9IGZhbHNlO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBmaXJzdE1hdGNoIGVudHJpZXNcbiAgICAgICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgdzNjQ2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggfHwgW10pIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfLmlzUGxhaW5PYmplY3QoZmlyc3RNYXRjaEVudHJ5KSAmJlxuICAgICAgICAgICAgXy5oYXMocmVtb3ZlQXBwaXVtUHJlZml4ZXMoZmlyc3RNYXRjaEVudHJ5KSwgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNDYXBBbHJlYWR5U2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiB0aGUga2V5IGlzIGFscmVhZHkgcHJlc2VudCBpbiBhbHdheXNNYXRjaCBlbnRyaWVzXG4gICAgICAgIGlzQ2FwQWxyZWFkeVNldCA9XG4gICAgICAgICAgaXNDYXBBbHJlYWR5U2V0IHx8XG4gICAgICAgICAgKF8uaXNQbGFpbk9iamVjdCh3M2NDYXBhYmlsaXRpZXMuYWx3YXlzTWF0Y2gpICYmXG4gICAgICAgICAgICBfLmhhcyhcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4ZXModzNjQ2FwYWJpbGl0aWVzLmFsd2F5c01hdGNoKSxcbiAgICAgICAgICAgICAgcmVtb3ZlQXBwaXVtUHJlZml4KGRlZmF1bHRDYXBLZXkpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgaWYgKGlzQ2FwQWxyZWFkeVNldCkge1xuICAgICAgICAgIC8vIFNraXAgaWYgdGhlIGtleSBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHByb3ZpZGVkIGNhcHNcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgYWRkIHRoZSBkZWZhdWx0IGNhcGFiaWxpdHkgaWYgaXQgaXMgbm90IG92ZXJyaWRkZW5cbiAgICAgICAgaWYgKF8uaXNFbXB0eSh3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCkpIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaCA9IFt7W2RlZmF1bHRDYXBLZXldOiBkZWZhdWx0Q2FwVmFsdWV9XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3M2NDYXBhYmlsaXRpZXMuZmlyc3RNYXRjaFswXVtkZWZhdWx0Q2FwS2V5XSA9IGRlZmF1bHRDYXBWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGFzSlNPTldQQ2Fwcykge1xuICAgICAganNvbndwQ2FwYWJpbGl0aWVzID0ge1xuICAgICAgICAuLi5yZW1vdmVBcHBpdW1QcmVmaXhlcyhkZWZhdWx0Q2FwYWJpbGl0aWVzKSxcbiAgICAgICAgLi4uanNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgTUpTT05XUCBjYXBzXG4gIGlmIChoYXNKU09OV1BDYXBzKSB7XG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzID0gey4uLmpzb253cENhcGFiaWxpdGllc307XG4gIH1cblxuICAvLyBHZXQgVzNDIGNhcHNcbiAgaWYgKGhhc1czQ0NhcHMpIHtcbiAgICAvLyBDYWxsIHRoZSBwcm9jZXNzIGNhcGFiaWxpdGllcyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGluZyBjYXBzIG9uIHRoZSBXM0NcbiAgICAvLyAoc2VlOiBodHRwczovL2dpdGh1Yi5jb20vamxpcHBzL3NpbXBsZS13ZC1zcGVjI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzKVxuICAgIHRyeSB7XG4gICAgICBkZXNpcmVkQ2FwcyA9IHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwYWJpbGl0aWVzLCBjb25zdHJhaW50cywgdHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBDb3VsZCBub3QgcGFyc2UgVzNDIGNhcGFiaWxpdGllczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIC8qKiBAdHlwZSB7SW52YWxpZENhcHN9ICovICh7XG4gICAgICAgIGRlc2lyZWRDYXBzLFxuICAgICAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsXG4gICAgICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHczYyBjYXBhYmlsaXRpZXMgcGF5bG9hZCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1hdGNoaW5nIGNhcHMgaW4gYGFsd2F5c01hdGNoYFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyA9IHtcbiAgICAgIGFsd2F5c01hdGNoOiB7Li4uaW5zZXJ0QXBwaXVtUHJlZml4ZXMoZGVzaXJlZENhcHMpfSxcbiAgICAgIGZpcnN0TWF0Y2g6IFt7fV0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiAvKiogQHR5cGUge1BhcnNlZERyaXZlckNhcHN9ICovICh7XG4gICAgZGVzaXJlZENhcHMsXG4gICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICBwcm90b2NvbCxcbiAgfSk7XG59XG5cbi8qKlxuICogVGFrZXMgYSBjYXBhYmlsaXRpZXMgb2JqZWN0cyBhbmQgcHJlZml4ZXMgY2FwYWJpbGl0aWVzIHdpdGggYGFwcGl1bTpgXG4gKiBAcGFyYW0ge0NhcGFiaWxpdGllc30gY2FwcyBEZXNpcmVkIGNhcGFiaWxpdGllcyBvYmplY3RcbiAqIEByZXR1cm5zIHtBcHBpdW1XM0NDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIGluc2VydEFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgLy8gU3RhbmRhcmQsIG5vbi1wcmVmaXhlZCBjYXBhYmlsaXRpZXMgKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tdGFibGUtb2Ytc3RhbmRhcmQtY2FwYWJpbGl0aWVzKVxuICBjb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAgICdicm93c2VyTmFtZScsXG4gICAgJ2Jyb3dzZXJWZXJzaW9uJyxcbiAgICAncGxhdGZvcm1OYW1lJyxcbiAgICAnYWNjZXB0SW5zZWN1cmVDZXJ0cycsXG4gICAgJ3BhZ2VMb2FkU3RyYXRlZ3knLFxuICAgICdwcm94eScsXG4gICAgJ3NldFdpbmRvd1JlY3QnLFxuICAgICd0aW1lb3V0cycsXG4gICAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJyxcbiAgXTtcblxuICBsZXQgcHJlZml4ZWRDYXBzID0ge307XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKGNhcHMpKSB7XG4gICAgaWYgKFNUQU5EQVJEX0NBUFMuaW5jbHVkZXMobmFtZSkgfHwgbmFtZS5pbmNsdWRlcygnOicpKSB7XG4gICAgICBwcmVmaXhlZENhcHNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZWRDYXBzW2Ake1czQ19BUFBJVU1fUFJFRklYfToke25hbWV9YF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByZWZpeGVkQ2Fwcztcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBcHBpdW1XM0NDYXBhYmlsaXRpZXN9IGNhcHNcbiAqIEByZXR1cm5zIHtDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeGVzKGNhcHMpIHtcbiAgaWYgKCFfLmlzUGxhaW5PYmplY3QoY2FwcykpIHtcbiAgICByZXR1cm4gY2FwcztcbiAgfVxuXG4gIC8qKiBAdHlwZSB7Q2FwYWJpbGl0aWVzfSAqL1xuICBjb25zdCBmaXhlZENhcHMgPSB7fTtcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBmaXhlZENhcHNbcmVtb3ZlQXBwaXVtUHJlZml4KG5hbWUpXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBmaXhlZENhcHM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFwcGl1bVByZWZpeChrZXkpIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7VzNDX0FQUElVTV9QUkVGSVh9OmA7XG4gIHJldHVybiBfLnN0YXJ0c1dpdGgoa2V5LCBwcmVmaXgpID8ga2V5LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSA6IGtleTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb24ocGtnTmFtZSkge1xuICBjb25zdCBwa2dJbmZvID0gcmVxdWlyZShgJHtwa2dOYW1lfS9wYWNrYWdlLmpzb25gKSB8fCB7fTtcbiAgcmV0dXJuIHBrZ0luZm8udmVyc2lvbjtcbn1cblxuLyoqXG4gKiBQdWxscyB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgQXBwaXVtIHNldHRpbmdzIGZyb20gdGhlIGdpdmVuIGNhcGFiaWxpdGllcyBhcmd1bWVudC5cbiAqIEVhY2ggc2V0dGluZyBpdGVtIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAqIGBzZXR0aW5nW3NldHRpbmdfbmFtZV06IHNldHRpbmdfdmFsdWVgXG4gKiBUaGUgY2FwYWJpbGl0aWVzIGFyZ3VtZW50IGl0c2VsZiBnZXRzIG11dGF0ZWQsIHNvIGl0IGRvZXMgbm90IGNvbnRhaW4gcGFyc2VkXG4gKiBzZXR0aW5ncyBhbnltb3JlIHRvIGF2b2lkIGZ1cnRoZXIgcGFyc2luZyBpc3N1ZXMuXG4gKiBDaGVja1xuICogaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi9hZHZhbmNlZC1jb25jZXB0cy9zZXR0aW5ncy5tZFxuICogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgYXZhaWxhYmxlIHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSB7P09iamVjdH0gY2FwcyAtIENhcGFiaWxpdGllcyBkaWN0aW9uYXJ5LiBJdCBpcyBtdXRhdGVkIGlmXG4gKiBvbmUgb3IgbW9yZSBzZXR0aW5ncyBoYXZlIGJlZW4gcHVsbGVkIGZyb20gaXRcbiAqIEByZXR1cm4ge09iamVjdH0gLSBBbiBlbXB0eSBkaWN0aW9uYXJ5IGlmIHRoZSBnaXZlbiBjYXBzIGNvbnRhaW5zIG5vXG4gKiBzZXR0aW5nIGl0ZW1zIG9yIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHBhcnNlZCBBcHBpdW0gc2V0dGluZyBuYW1lcyBhbG9uZyB3aXRoXG4gKiB0aGVpciB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHB1bGxTZXR0aW5ncyhjYXBzKSB7XG4gIGlmICghXy5pc1BsYWluT2JqZWN0KGNhcHMpIHx8IF8uaXNFbXB0eShjYXBzKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMoY2FwcykpIHtcbiAgICBjb25zdCBtYXRjaCA9IC9cXGJzZXR0aW5nc1xcWyhcXFMrKVxcXSQvLmV4ZWMoa2V5KTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXN1bHRbbWF0Y2hbMV1dID0gdmFsdWU7XG4gICAgZGVsZXRlIGNhcHNba2V5XTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQge1xuICBpbnNwZWN0LFxuICBwYXJzZUNhcHNGb3JJbm5lckRyaXZlcixcbiAgaW5zZXJ0QXBwaXVtUHJlZml4ZXMsXG4gIGdldFBhY2thZ2VWZXJzaW9uLFxuICBwdWxsU2V0dGluZ3MsXG4gIHJlbW92ZUFwcGl1bVByZWZpeGVzLFxufTtcblxuLyoqXG4gKiBAdG9kbyBwcm90b2NvbCBpcyBtb3JlIHNwZWNpZmljXG4gKiBAdHlwZWRlZiBQYXJzZWREcml2ZXJDYXBzXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllc30gZGVzaXJlZENhcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm90b2NvbFxuICogQHByb3BlcnR5IHthbnl9IFtwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge1czQ0NhcGFiaWxpdGllc30gW3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllc11cbiAqL1xuXG4vKipcbiAqIEB0b2RvIHByb3RvY29sIGlzIG1vcmUgc3BlY2lmaWNcbiAqIEB0eXBlZGVmIEludmFsaWRDYXBzXG4gKiBAcHJvcGVydHkge0Vycm9yfSBlcnJvclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb3RvY29sXG4gKiBAcHJvcGVydHkge0NhcGFiaWxpdGllc30gW2Rlc2lyZWRDYXBzXVxuICogQHByb3BlcnR5IHthbnl9IFtwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge1czQ0NhcGFiaWxpdGllc30gW3Byb2Nlc3NlZFczQ0NhcGFiaWxpdGllc11cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXN9IFczQ0NhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkNhcGFiaWxpdGllc30gQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtVzNDQ2FwYWJpbGl0aWVzfSBBcHBpdW1XM0NDYXBhYmlsaXRpZXNcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUcsUUFBMUI7QUFTQSxNQUFNQyxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxLQUFuQzs7QUFPQSxNQUFNQyxPQUFPLEdBQUdDLGVBQUEsQ0FBRUMsSUFBRixDQUNkRCxlQUFBLENBQUVFLFlBQUYsQ0FDa0ZDLGFBRGxGLEVBRUU7RUFBQ0MsTUFBTSxFQUFFLElBQVQ7RUFBZUMsS0FBSyxFQUFFLElBQXRCO0VBQTRCQyxPQUFPLEVBQUUsQ0FBQ1g7QUFBdEMsQ0FGRixDQURjLEVBS2QsQ0FBQyxHQUFHWSxJQUFKLEtBQWE7RUFDWEMsZUFBQSxDQUFPQyxJQUFQLENBQVksR0FBR0YsSUFBZjtBQUNELENBUGEsQ0FBaEI7Ozs7QUFvQkEsU0FBU0csdUJBQVQsQ0FDRUMsa0JBREYsRUFFRUMsZUFGRixFQUdFQyxXQUFXLEdBQUcsRUFIaEIsRUFJRUMsbUJBQW1CLEdBQUcsRUFKeEIsRUFLRTtFQUVBLE1BQU1DLFVBQVUsR0FDZGYsZUFBQSxDQUFFZ0IsYUFBRixDQUFnQkosZUFBaEIsTUFDQ1osZUFBQSxDQUFFaUIsR0FBRixDQUFNTCxlQUFOLEVBQXVCLGFBQXZCLEtBQXlDWixlQUFBLENBQUVpQixHQUFGLENBQU1MLGVBQU4sRUFBdUIsWUFBdkIsQ0FEMUMsQ0FERjs7RUFHQSxNQUFNTSxhQUFhLEdBQUdsQixlQUFBLENBQUVnQixhQUFGLENBQWdCTCxrQkFBaEIsQ0FBdEI7O0VBQ0EsSUFBSVEsV0FBVyxHQUFtRCxFQUFsRTtFQUVBLElBQUlDLHdCQUFKO0VBRUEsSUFBSUMsMkJBQUo7O0VBRUEsSUFBSSxDQUFDTixVQUFMLEVBQWlCO0lBQ2YsT0FBbUM7TUFDakNPLFFBQVEsRUFBRUMscUJBQUEsQ0FBVUMsR0FEYTtNQUVqQ0MsS0FBSyxFQUFFLElBQUlDLEtBQUosQ0FBVSxxQ0FBVjtJQUYwQixDQUFuQztFQUlEOztFQUVELE1BQU07SUFBQ0Y7RUFBRCxJQUFRRCxxQkFBZDtFQUNBLE1BQU1ELFFBQVEsR0FBR0UsR0FBakI7RUFHQWIsa0JBQWtCLEdBQUdYLGVBQUEsQ0FBRTJCLFNBQUYsQ0FBWWhCLGtCQUFaLENBQXJCO0VBQ0FDLGVBQWUsR0FBR1osZUFBQSxDQUFFMkIsU0FBRixDQUFZZixlQUFaLENBQWxCO0VBQ0FFLG1CQUFtQixHQUFHZCxlQUFBLENBQUUyQixTQUFGLENBQVliLG1CQUFaLENBQXRCOztFQUVBLElBQUksQ0FBQ2QsZUFBQSxDQUFFNEIsT0FBRixDQUFVZCxtQkFBVixDQUFMLEVBQXFDO0lBQ25DLElBQUlDLFVBQUosRUFBZ0I7TUFDZCxLQUFLLE1BQU0sQ0FBQ2MsYUFBRCxFQUFnQkMsZUFBaEIsQ0FBWCxJQUErQzlCLGVBQUEsQ0FBRStCLE9BQUYsQ0FBVWpCLG1CQUFWLENBQS9DLEVBQStFO1FBQzdFLElBQUlrQixlQUFlLEdBQUcsS0FBdEI7O1FBRUEsS0FBSyxNQUFNQyxlQUFYLElBQThCckIsZUFBZSxDQUFDc0IsVUFBaEIsSUFBOEIsRUFBNUQsRUFBZ0U7VUFDOUQsSUFDRWxDLGVBQUEsQ0FBRWdCLGFBQUYsQ0FBZ0JpQixlQUFoQixLQUNBakMsZUFBQSxDQUFFaUIsR0FBRixDQUFNa0Isb0JBQW9CLENBQUNGLGVBQUQsQ0FBMUIsRUFBNkNHLGtCQUFrQixDQUFDUCxhQUFELENBQS9ELENBRkYsRUFHRTtZQUNBRyxlQUFlLEdBQUcsSUFBbEI7WUFDQTtVQUNEO1FBQ0Y7O1FBRURBLGVBQWUsR0FDYkEsZUFBZSxJQUNkaEMsZUFBQSxDQUFFZ0IsYUFBRixDQUFnQkosZUFBZSxDQUFDeUIsV0FBaEMsS0FDQ3JDLGVBQUEsQ0FBRWlCLEdBQUYsQ0FDRWtCLG9CQUFvQixDQUFDdkIsZUFBZSxDQUFDeUIsV0FBakIsQ0FEdEIsRUFFRUQsa0JBQWtCLENBQUNQLGFBQUQsQ0FGcEIsQ0FISjs7UUFPQSxJQUFJRyxlQUFKLEVBQXFCO1VBRW5CO1FBQ0Q7O1FBR0QsSUFBSWhDLGVBQUEsQ0FBRTRCLE9BQUYsQ0FBVWhCLGVBQWUsQ0FBQ3NCLFVBQTFCLENBQUosRUFBMkM7VUFDekN0QixlQUFlLENBQUNzQixVQUFoQixHQUE2QixDQUFDO1lBQUMsQ0FBQ0wsYUFBRCxHQUFpQkM7VUFBbEIsQ0FBRCxDQUE3QjtRQUNELENBRkQsTUFFTztVQUNMbEIsZUFBZSxDQUFDc0IsVUFBaEIsQ0FBMkIsQ0FBM0IsRUFBOEJMLGFBQTlCLElBQStDQyxlQUEvQztRQUNEO01BQ0Y7SUFDRjs7SUFDRCxJQUFJWixhQUFKLEVBQW1CO01BQ2pCUCxrQkFBa0IsR0FBRyxFQUNuQixHQUFHd0Isb0JBQW9CLENBQUNyQixtQkFBRCxDQURKO1FBRW5CLEdBQUdIO01BRmdCLENBQXJCO0lBSUQ7RUFDRjs7RUFHRCxJQUFJTyxhQUFKLEVBQW1CO0lBQ2pCRywyQkFBMkIsR0FBRyxFQUFDLEdBQUdWO0lBQUosQ0FBOUI7RUFDRDs7RUFHRCxJQUFJSSxVQUFKLEVBQWdCO0lBR2QsSUFBSTtNQUNGSSxXQUFXLEdBQUcsSUFBQW1CLCtCQUFBLEVBQW9CMUIsZUFBcEIsRUFBcUNDLFdBQXJDLEVBQWtELElBQWxELENBQWQ7SUFDRCxDQUZELENBRUUsT0FBT1ksS0FBUCxFQUFjO01BQ2RqQixlQUFBLENBQU9DLElBQVAsQ0FBYSxxQ0FBb0NnQixLQUFLLENBQUNjLE9BQVEsRUFBL0Q7O01BQ0EsT0FBbUM7UUFDakNwQixXQURpQztRQUVqQ0UsMkJBRmlDO1FBR2pDRCx3QkFIaUM7UUFJakNFLFFBSmlDO1FBS2pDRztNQUxpQyxDQUFuQztJQU9EOztJQUdETCx3QkFBd0IsR0FBRztNQUN6QmlCLFdBQVcsRUFBRSxFQUFDLEdBQUdHLG9CQUFvQixDQUFDckIsV0FBRDtNQUF4QixDQURZO01BRXpCZSxVQUFVLEVBQUUsQ0FBQyxFQUFEO0lBRmEsQ0FBM0I7RUFJRDs7RUFFRCxPQUF3QztJQUN0Q2YsV0FEc0M7SUFFdENFLDJCQUZzQztJQUd0Q0Qsd0JBSHNDO0lBSXRDRTtFQUpzQyxDQUF4QztBQU1EOztBQU9ELFNBQVNrQixvQkFBVCxDQUE4QkMsSUFBOUIsRUFBb0M7RUFFbEMsTUFBTUMsYUFBYSxHQUFHLENBQ3BCLGFBRG9CLEVBRXBCLGdCQUZvQixFQUdwQixjQUhvQixFQUlwQixxQkFKb0IsRUFLcEIsa0JBTG9CLEVBTXBCLE9BTm9CLEVBT3BCLGVBUG9CLEVBUXBCLFVBUm9CLEVBU3BCLHlCQVRvQixDQUF0QjtFQVlBLElBQUlDLFlBQVksR0FBRyxFQUFuQjs7RUFDQSxLQUFLLElBQUksQ0FBQ0MsSUFBRCxFQUFPQyxLQUFQLENBQVQsSUFBMEI3QyxlQUFBLENBQUUrQixPQUFGLENBQVVVLElBQVYsQ0FBMUIsRUFBMkM7SUFDekMsSUFBSUMsYUFBYSxDQUFDSSxRQUFkLENBQXVCRixJQUF2QixLQUFnQ0EsSUFBSSxDQUFDRSxRQUFMLENBQWMsR0FBZCxDQUFwQyxFQUF3RDtNQUN0REgsWUFBWSxDQUFDQyxJQUFELENBQVosR0FBcUJDLEtBQXJCO0lBQ0QsQ0FGRCxNQUVPO01BQ0xGLFlBQVksQ0FBRSxHQUFFakQsaUJBQWtCLElBQUdrRCxJQUFLLEVBQTlCLENBQVosR0FBK0NDLEtBQS9DO0lBQ0Q7RUFDRjs7RUFDRCxPQUFPRixZQUFQO0FBQ0Q7O0FBT0QsU0FBU1Isb0JBQVQsQ0FBOEJNLElBQTlCLEVBQW9DO0VBQ2xDLElBQUksQ0FBQ3pDLGVBQUEsQ0FBRWdCLGFBQUYsQ0FBZ0J5QixJQUFoQixDQUFMLEVBQTRCO0lBQzFCLE9BQU9BLElBQVA7RUFDRDs7RUFHRCxNQUFNTSxTQUFTLEdBQUcsRUFBbEI7O0VBQ0EsS0FBSyxJQUFJLENBQUNILElBQUQsRUFBT0MsS0FBUCxDQUFULElBQTBCN0MsZUFBQSxDQUFFK0IsT0FBRixDQUFVVSxJQUFWLENBQTFCLEVBQTJDO0lBQ3pDTSxTQUFTLENBQUNYLGtCQUFrQixDQUFDUSxJQUFELENBQW5CLENBQVQsR0FBc0NDLEtBQXRDO0VBQ0Q7O0VBQ0QsT0FBT0UsU0FBUDtBQUNEOztBQUVELFNBQVNYLGtCQUFULENBQTRCWSxHQUE1QixFQUFpQztFQUMvQixNQUFNQyxNQUFNLEdBQUksR0FBRXZELGlCQUFrQixHQUFwQztFQUNBLE9BQU9NLGVBQUEsQ0FBRWtELFVBQUYsQ0FBYUYsR0FBYixFQUFrQkMsTUFBbEIsSUFBNEJELEdBQUcsQ0FBQ0csU0FBSixDQUFjRixNQUFNLENBQUNHLE1BQXJCLENBQTVCLEdBQTJESixHQUFsRTtBQUNEOztBQUVELFNBQVNLLGlCQUFULENBQTJCQyxPQUEzQixFQUFvQztFQUNsQyxNQUFNQyxPQUFPLEdBQUdDLE9BQU8sQ0FBRSxHQUFFRixPQUFRLGVBQVosQ0FBUCxJQUFzQyxFQUF0RDtFQUNBLE9BQU9DLE9BQU8sQ0FBQ0UsT0FBZjtBQUNEOztBQWtCRCxTQUFTQyxZQUFULENBQXNCakIsSUFBdEIsRUFBNEI7RUFDMUIsSUFBSSxDQUFDekMsZUFBQSxDQUFFZ0IsYUFBRixDQUFnQnlCLElBQWhCLENBQUQsSUFBMEJ6QyxlQUFBLENBQUU0QixPQUFGLENBQVVhLElBQVYsQ0FBOUIsRUFBK0M7SUFDN0MsT0FBTyxFQUFQO0VBQ0Q7O0VBRUQsTUFBTWtCLE1BQU0sR0FBRyxFQUFmOztFQUNBLEtBQUssTUFBTSxDQUFDWCxHQUFELEVBQU1ILEtBQU4sQ0FBWCxJQUEyQjdDLGVBQUEsQ0FBRStCLE9BQUYsQ0FBVVUsSUFBVixDQUEzQixFQUE0QztJQUMxQyxNQUFNbUIsS0FBSyxHQUFHLHVCQUF1QkMsSUFBdkIsQ0FBNEJiLEdBQTVCLENBQWQ7O0lBQ0EsSUFBSSxDQUFDWSxLQUFMLEVBQVk7TUFDVjtJQUNEOztJQUVERCxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFELENBQU4sQ0FBTixHQUFtQmYsS0FBbkI7SUFDQSxPQUFPSixJQUFJLENBQUNPLEdBQUQsQ0FBWDtFQUNEOztFQUNELE9BQU9XLE1BQVA7QUFDRCJ9