@phenixrts/sdk 2025.0.1 → 2025.0.2-beta.404

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 (46) hide show
  1. package/channels/debug/channels.js +1306 -1285
  2. package/channels/debug/package.json +1 -1
  3. package/channels/debug.private/channels.js +1143 -1143
  4. package/channels/debug.private/package.json +1 -1
  5. package/channels/debug.provideGlobalScope/channels.js +1278 -1257
  6. package/channels/debug.provideGlobalScope/package.json +1 -1
  7. package/channels/es5.debug.private/channels.js +2 -2
  8. package/channels/es5.debug.private/package.json +1 -1
  9. package/channels/min/channels.js +1 -1
  10. package/channels/min/channels.js.map +1 -1
  11. package/channels/min/package.json +1 -1
  12. package/channels/min.private/channels.js +1 -1
  13. package/channels/min.private/channels.js.map +1 -1
  14. package/channels/min.private/package.json +1 -1
  15. package/channels/min.provideGlobalScope/channels.js +1 -1
  16. package/channels/min.provideGlobalScope/channels.js.map +1 -1
  17. package/channels/min.provideGlobalScope/package.json +1 -1
  18. package/channels/package.json +1 -1
  19. package/full/debug/full.js +1427 -1406
  20. package/full/debug/package.json +1 -1
  21. package/full/debug.private/full.js +1264 -1264
  22. package/full/debug.private/package.json +1 -1
  23. package/full/min/full.js +1 -1
  24. package/full/min/full.js.map +1 -1
  25. package/full/min/package.json +1 -1
  26. package/full/min.private/full.js +1 -1
  27. package/full/min.private/full.js.map +1 -1
  28. package/full/min.private/package.json +1 -1
  29. package/full/package.json +1 -1
  30. package/package.json +1 -1
  31. package/publish/debug/package.json +1 -1
  32. package/publish/debug/publish.js +819 -819
  33. package/publish/debug.private/package.json +1 -1
  34. package/publish/debug.private/publish.js +819 -819
  35. package/publish/min/package.json +1 -1
  36. package/publish/min/publish.js +1 -1
  37. package/publish/min/publish.js.map +1 -1
  38. package/publish/min.private/package.json +1 -1
  39. package/publish/min.private/publish.js +1 -1
  40. package/publish/min.private/publish.js.map +1 -1
  41. package/publish/package.json +1 -1
  42. package/types/sdk/streaming/ChunkedStream.d.ts +1 -0
  43. package/types/sdk/streaming/ChunkedStreaming.d.ts +1 -1
  44. package/types/sdk/streaming/IShakaPlayer.d.ts +2 -0
  45. package/types/sdk/streaming/ShakaPlayer.d.ts +3 -1
  46. package/types/sdk/streaming/WebPlayer.d.ts +2 -1
@@ -10411,7 +10411,7 @@ var VersionManager = /*#__PURE__*/function () {
10411
10411
  key: "sdkVersion",
10412
10412
  get: function get() {
10413
10413
  try {
10414
- return "2025-01-28T18:04:09.093Z (2025.0.1)";
10414
+ return "2025-01-27T22:27:15.872Z (2025.0.2-beta.404)";
10415
10415
  } catch (e) {
10416
10416
  return this._defaultVersion;
10417
10417
  }
@@ -12979,4 +12979,4 @@ __webpack_require__.r(__webpack_exports__);
12979
12979
  /******/ })()
12980
12980
  ;
12981
12981
  });
12982
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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YztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxj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RUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDcEMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQ3hLLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUM1RDtFQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUFFO0VBQ3hMc2IsR0FBRyxFQUFFLElBQUl0YixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGVBQWU7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNB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QUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixpQkFBaUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSLDRFQUE0RTtBQUM1RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLHFDQUFxQyw0QkFBNEI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsMEJBQTBCLGVBQWU7QUFDdEU7O0FBRU87QUFDUDtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pvQkE7QUFDQTtBQUNBOztBQUV5QjtBQUNTO0FBQ1E7QUFLNUI7QUFHZCwrREFBZTtFQUNibjdDLEdBQUcsRUFBSEEsNENBQUc7RUFDSHN6QixRQUFRLEVBQVJBLGlEQUFRO0VBQ1JsTixZQUFZLEVBQVpBLHFEQUFZQTtBQUNkLENBQUMsRSIsInNvdXJjZXMiOlsid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL1BsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9OdW1iZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvVWludDhBcnJheXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9TZHBQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9SZWFkT25seVN1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1N1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9FbnZpcm9ubWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1NESy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1RlbGVtZXRyeVVybC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9CaXRzdHJlYW1SZWFkZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvSDI2NEJpdHN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9uYWxVbml0L05hbFVuaXRUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L25hbFVuaXQvU2VpUGF5bG9hZFR5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9wYXJzZS9FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvUGljdHVyZVRpbWluZ1BhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9wYXJzZS92Y2wvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvdmNsL1ZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9kZWNvZGVycy9CaXRzdHJlYW1EZWNvZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvSDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2VuY29kaW5nLzIwMjMvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9ldmVudC9FdmVudEVtaXR0ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvZXZlbnQvRXZlbnRQdWJsaXNoZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvZXZlbnQvZXZlbnRzL0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZnJhbWVUaW1pbmcvSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0R1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0V4cG9uZW50aWFsQmFja29mZi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1RyYW5zZm9ybVN0cmVhbS53b3JrZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL3dvcmtlci1sb2FkZXIvZGlzdC9ydW50aW1lL2lubGluZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcblxuY29uc3QgdmlzaWJpbGl0eUNoYW5nZUV2ZW50ID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKSA9PiB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSAhR2xvYmFsU2NvcGUudmFsdWUuZG9jdW1lbnRJc0hpZGRlbjtcbiAgICBjb25zdCB1c2VFdmVudENhcHR1cmVQaGFzZSA9IGZhbHNlO1xuXG4gICAgR2xvYmFsU2NvcGUudmFsdWUuYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2VFdmVudCwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgdXNlRXZlbnRDYXB0dXJlUGhhc2UpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IEdsb2JhbFNjb3BlLnZhbHVlLnJlbW92ZURvY3VtZW50RXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlRXZlbnQsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHVzZUV2ZW50Q2FwdHVyZVBoYXNlKSkpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJEZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCA9IC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXC8pKFtcXGQuYXByZV0rKS9nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZSA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTWFqb3JWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc01vYmlsZSA9ICgvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQW5kcm9pZCA9ICgvQW5kcm9pZC9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNBbmRyb2lkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQW5kcm9pZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNNb2JpbGU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbi8vIFRoZSBQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZmlsZSBpcyB1c2VkIGluIHRoZSBzaWxlbnQgYnVpbGRcbi8vIHRvIGNvbnN0cmFpbiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWVzLlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgcHVibGljIHN0YXRpYyBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFBsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5kZWZhdWx0Qm9vbGVhblZhbHVlW25hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcyc6IHRydWVcbiAgICB9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciB7XG4gIHN0YXRpYyBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQpIHtcbiAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLnF1ZXVlTWljcm90YXNrKHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uLmJpbmQodGhpcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uLmJpbmQodGhpcyksIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgaW1nOiBIVE1MSW1hZ2VFbGVtZW50IHwgbnVsbCA9IEdsb2JhbFNjb3BlLnZhbHVlLmRvY3VtZW50Q3JlYXRlRWxlbWVudDxIVE1MSW1hZ2VFbGVtZW50PignaW1nJyk7XG5cbiAgICBpbWcuc3JjID0gR2xvYmFsU2NvcGUudmFsdWUuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEwZSs3KV0pKTsgLy8gMTAwTWIgb3IgbGVzcyBvciBtb3JlIGRlcGVuZGluZyBvbiBhcyB5b3Ugd2lzaCB0byBmb3JjZS9pbnZva2UgR0MgY3ljbGUgcnVuXG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLlVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5zcmMpO1xuXG4gICAgICBpbWcgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQ6IGJvb2xlYW4gPSBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JDb25uZWN0aW9uICE9PSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZmZlY3RpdmVUeXBlOiBTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4gPSBuZXcgU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD4gPSBuZXcgU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZG93bmxpbmsgPz8gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZG93bmxpbmtNYXggPz8gLTE7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZWZmZWN0aXZlVHlwZSA/PyBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy50eXBlID8/ICdVbmtub3duJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy5ydHQgPz8gLTE7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuXG4gICAgR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IEdsb2JhbFNjb3BlLnZhbHVlLm5hdmlnYXRvckNvbm5lY3Rpb24/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuXG5pbnRlcmZhY2UgSVRva2VuIHtcbiAgdXJpOiBVUkwgfCBudWxsO1xuICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSUVkZ2VUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgdG9rZW46IElUb2tlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZVRva2VuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbjogSVRva2VuO1xuXG4gIGNvbnN0cnVjdG9yKGVkZ2VUb2tlbjogSUVkZ2VUb2tlbiB8IG51bGwpIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7TG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmRlY2xhcmUgY29uc3QgX19GRUFUVVJFU19fOiB7XG4gIHNlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHNlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBzZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZEZlYXR1cmVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9ncygpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvZ3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRNZXRyaWNzKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRNZXRyaWNzO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dUb0NvbnNvbGUoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ1RvQ29uc29sZTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZlYXR1cmVzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IF9fRkVBVFVSRVNfXztcblxuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9ICdzZW5kTG9jYWxDYW5kaWRhdGVzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMgOiB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnc2VuZExvZ3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvZ3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ3NlbmRNZXRyaWNzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRNZXRyaWNzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnbG9nVG9Db25zb2xlJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLmxvZ1RvQ29uc29sZSA6ICdBbGwnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnQWxsJztcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRGZWF0dXJlcy5hcHBseUZlYXR1cmVzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0VHJhbnNjZWl2ZXJzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiB0eXBlb2YgR2xvYmFsU2NvcGUudmFsdWU/LmRvY3VtZW50Q3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0eXBlb2YgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yID09PSAndW5kZWZpbmVkJyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBSVENSdHBSZWNlaXZlci5wcm90b3R5cGUuY3JlYXRlRW5jb2RlZFN0cmVhbXMgIT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFja1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIEhUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2sgIT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0NoYW5uZWxGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBGZWF0dXJlRW5hYmxlbWVudC5pc1JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2tTdXBwb3J0ZWRcbiAgICAgICYmIChGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCB8fCBGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdTYWZhcmknO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmRlY2xhcmUgY29uc3QgX19QQVJBTUVURVJTX186IHtcbiAgZGlzY292ZXJ5OiBJRGlzY292ZXJ5UGFyYW1ldGVyO1xufTtcblxuaW50ZXJmYWNlIElEaXNjb3ZlcnlQYXJhbWV0ZXJ7XG4gIGludGVudGlvbnM6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIHByaXZhdGUgc3RhdGljIF9kaXNjb3ZlcnlQYXJhbWV0ZXJzOiBJRGlzY292ZXJ5UGFyYW1ldGVyIDtcblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVBhcmFtZXRlcnMoKTogSURpc2NvdmVyeVBhcmFtZXRlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnM7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gX19QQVJBTUVURVJTX187XG5cbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSAnZGlzY292ZXJ5JyBpbiBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy5kaXNjb3ZlcnkgOiB7aW50ZW50aW9uczogJyd9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSB7aW50ZW50aW9uczogJyd9O1xuICAgIH1cbiAgfVxufVxuXG5QYXJhbWV0ZXJzLmFwcGx5UGFyYW1ldGVycygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSUdsb2JhbFNjb3BlIGZyb20gJy4vSUdsb2JhbFNjb3BlJztcbmltcG9ydCBJRG9jdW1lbnQgZnJvbSAnLi9JRG9jdW1lbnQnO1xuaW1wb3J0IElMb2NhdGlvbiBmcm9tICcuL0lMb2NhdGlvbic7XG5pbXBvcnQgSU5ldHdvcmtJbmZvcm1hdGlvbiBmcm9tICcuL0lOZXR3b3JrSW5mb3JtYXRpb24nO1xuaW1wb3J0IElOYXZpZ2F0b3IgZnJvbSAnLi9JTmF2aWdhdG9yJztcbmltcG9ydCBJV2luZG93IGZyb20gJy4vSVdpbmRvdyc7XG5pbXBvcnQgSVByb3ZpZGVkR2xvYmFsU2NvcGUgZnJvbSAnLi9JUHJvdmlkZWRHbG9iYWxTY29wZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcblxudHlwZSBCcm93c2VyR2xvYmFsU2NvcGUgPSBJUHJvdmlkZWRHbG9iYWxTY29wZTtcblxuY29uc3QgYnJvd3Nlckdsb2JhbFNjb3BlOiBCcm93c2VyR2xvYmFsU2NvcGUgPSB7XG4gIGRvY3VtZW50LFxuICBsb2NhdGlvbixcbiAgbmF2aWdhdG9yLFxuICB3aW5kb3dcbn07XG5cbmV4cG9ydCBjbGFzcyBHbG9iYWxTY29wZSBpbXBsZW1lbnRzIElHbG9iYWxTY29wZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbnN0YW5jZSA9IG5ldyBTdWJqZWN0PElHbG9iYWxTY29wZT4obmV3IEdsb2JhbFNjb3BlKGJyb3dzZXJHbG9iYWxTY29wZSkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbnN0YW5jZTogUmVhZE9ubHlTdWJqZWN0PElHbG9iYWxTY29wZT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0KEdsb2JhbFNjb3BlLl9pbnN0YW5jZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50OiBJRG9jdW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvY2F0aW9uOiBJTG9jYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdmlnYXRvcjogSU5hdmlnYXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfd2luZG93OiBJV2luZG93O1xuXG4gIGNvbnN0cnVjdG9yKGdsb2JhbFNjb3BlOiBCcm93c2VyR2xvYmFsU2NvcGUpIHtcbiAgICB0aGlzLl9kb2N1bWVudCA9IGdsb2JhbFNjb3BlLmRvY3VtZW50O1xuICAgIHRoaXMuX2xvY2F0aW9uID0gZ2xvYmFsU2NvcGUubG9jYXRpb247XG4gICAgdGhpcy5fbmF2aWdhdG9yID0gZ2xvYmFsU2NvcGUubmF2aWdhdG9yO1xuICAgIHRoaXMuX3dpbmRvdyA9IGdsb2JhbFNjb3BlLndpbmRvdztcbiAgfVxuXG4gIC8vIFRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIHRvIG1haW50YWluIEFQSSBjb25zaXN0ZW5jeSB3aXRoIFByb3ZpZGVkR2xvYmFsU2NvcGVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcHVibGljIHN0YXRpYyBzZXRJbnN0YW5jZShwcm92aWRlZEdsb2JhbFNjb3BlOiBJUHJvdmlkZWRHbG9iYWxTY29wZSk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgdGhlIEdsb2JhbFNjb3BlJyk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IFJlYWRPbmx5U3ViamVjdDxJR2xvYmFsU2NvcGU+IHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUuX3JlYWRPbmx5SW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHN1YnNjcmliZShjYWxsYmFjazogKHZhbHVlOiBJR2xvYmFsU2NvcGUgfCBudWxsKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHJldHVybiBHbG9iYWxTY29wZS5fcmVhZE9ubHlJbnN0YW5jZS5zdWJzY3JpYmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZ2V0IEZvcm1EYXRhKCk6IHR5cGVvZiBGb3JtRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5Gb3JtRGF0YTtcbiAgfVxuXG4gIGdldCBNZWRpYVN0cmVhbSgpOiB0eXBlb2YgTWVkaWFTdHJlYW0ge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuTWVkaWFTdHJlYW07XG4gIH1cblxuICBnZXQgTWVkaWFTdHJlYW1UcmFjaygpOiB0eXBlb2YgTWVkaWFTdHJlYW1UcmFjayB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5NZWRpYVN0cmVhbVRyYWNrO1xuICB9XG5cbiAgZ2V0IFJUQ1BlZXJDb25uZWN0aW9uKCk6IHR5cGVvZiBSVENQZWVyQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5SVENQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBSVENTZXNzaW9uRGVzY3JpcHRpb24oKTogdHlwZW9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5SVENTZXNzaW9uRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgUlRDSWNlQ2FuZGlkYXRlKCk6IHR5cGVvZiBSVENJY2VDYW5kaWRhdGUge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuUlRDSWNlQ2FuZGlkYXRlO1xuICB9XG5cbiAgZ2V0IFVSTCgpOiB0eXBlb2YgVVJMIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LlVSTDtcbiAgfVxuXG4gIGdldCBVUkxTZWFyY2hQYXJhbXMoKTogdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5VUkxTZWFyY2hQYXJhbXM7XG4gIH1cblxuICBnZXQgYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCBhZGRXaW5kb3dFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmFkZEV2ZW50TGlzdGVuZXIuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IGNsZWFySW50ZXJ2YWwoKTogKGlkPzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmNsZWFySW50ZXJ2YWwuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IGNsZWFyVGltZW91dCgpOiAoaWQ/OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuY2xlYXJUaW1lb3V0LmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudENyZWF0ZUVsZW1lbnQoKTogPEVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudD4odGFnOiBzdHJpbmcpID0+IEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50LmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50SGFzRm9jdXMoKTogKCkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50Lmhhc0ZvY3VzLmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50SXNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fZG9jdW1lbnQuaGlkZGVuO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50UXVlcnlTZWxlY3RvcigpOiA8RWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50Pih0YWc6IHN0cmluZykgPT4gRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yLmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGZldGNoKCk6IChpbnB1dDogc3RyaW5nIHwgVVJMIHwgUmVxdWVzdCwgaW5pdD86IFJlcXVlc3RJbml0KSA9PiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5mZXRjaC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgbG9jYXRpb25Ib3N0bmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbi5ob3N0bmFtZTtcbiAgfVxuXG4gIGdldCBsb2NhdGlvblNlYXJjaCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2g7XG4gIH1cblxuICBnZXQgbmF2aWdhdG9yQ29ubmVjdGlvbigpOiBJTmV0d29ya0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgbmF2aWdhdG9ySXNPbkxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRvci5vbkxpbmU7XG4gIH1cblxuICBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvd1snX19waGVuaXhQYWdlTG9hZFRpbWUnXSB8fCB0aGlzLl93aW5kb3dbJ19fcGFnZUxvYWRUaW1lJ107XG4gIH1cblxuICBnZXQgcXVldWVNaWNyb3Rhc2soKTogKG1pY3JvdGFzazogKCkgPT4gdm9pZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5xdWV1ZU1pY3JvdGFzay5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgcmVtb3ZlRG9jdW1lbnRFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCByZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IHNldEludGVydmFsKCk6IChoYW5kbGVyOiBzdHJpbmcgfCBGdW5jdGlvbiwgdGltZW91dD86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnNldEludGVydmFsLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBzZXRUaW1lb3V0KCk6IChoYW5kbGVyOiBzdHJpbmcgfCBGdW5jdGlvbiwgdGltZW91dD86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnNldFRpbWVvdXQuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdsb2JhbFNjb3BlLmdldEluc3RhbmNlKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3Q6IElEaXNwb3NhYmxlW10gPSBbXTtcblxuICBhZGQoZGlzcG9zYWJsZTogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LnB1c2goZGlzcG9zYWJsZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QuZm9yRWFjaChkaXNwb3NhYmxlID0+IGRpc3Bvc2FibGUuZGlzcG9zZSgpKTtcbiAgICB0aGlzLl9saXN0Lmxlbmd0aCA9IDA7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRGlzcG9zYWJsZUxpc3RbZGlzcG9zYWJsZXM9JHt0aGlzLl9saXN0Lmxlbmd0aH1dYDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG4vLyBBcyBmbG9hdCBpbiBFQ01BU2NyaXB0IHVzZSA2NC1iaXQgZm9ybWF0IGl0IGNhbm5vdCBoYXZlL2hhbmRsZSBtb3JlIHRoYW4gMTUgc3ltYm9scyBhZnRlciBkb3QuXG5jb25zdCBtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QgPSAxNTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTnVtYmVycyB7XG4gIHN0YXRpYyBjb3VudE51bWJlckxlbmd0aCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSA9IDA7XG4gICAgbGV0IG51bWJlciA9IHZhbHVlO1xuXG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgIG51bWJlciAqPSAtMTtcbiAgICAgIGluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUrKztcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVycy5jb3VudERpZ2l0c0JlZm9yZURlY2ltYWwobnVtYmVyKSArIGluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUgKyAobnVtYmVyICE9PSBNYXRoLmZsb29yKG51bWJlcikgPyBOdW1iZXJzLmNvdW50RGlnaXRzQWZ0ZXJEZWNpbWFsKG51bWJlcikgKyAxIDogMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmaXhSb3VuZGluZyh2YWx1ZTogbnVtYmVyLCBwcmVjaXNpb246IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgcG93ZXIgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcblxuICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogcG93ZXIpIC8gcG93ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb3VudERpZ2l0c0JlZm9yZURlY2ltYWwodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGRpZ2l0c0JlZm9yZURlY2ltYWwgPSAxO1xuICAgIGxldCBudW1iZXIgPSB2YWx1ZTtcblxuICAgIHdoaWxlIChudW1iZXIgPj0gMTApIHtcbiAgICAgIG51bWJlciA9IG51bWJlciAvIDEwO1xuICAgICAgZGlnaXRzQmVmb3JlRGVjaW1hbCsrO1xuICAgIH1cblxuICAgIHJldHVybiBkaWdpdHNCZWZvcmVEZWNpbWFsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY291bnREaWdpdHNBZnRlckRlY2ltYWwodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlO1xuICAgIGxldCBtb2RpZmllZFZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSk7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIHdoaWxlIChtb2RpZmllZFZhbHVlICE9PSBvcmlnaW5hbFZhbHVlICYmIGNvdW50IDwgbWF4RGlnaXRzSW5GbG9hdEFmdGVyRG90KSB7XG4gICAgICBjb3VudCsrO1xuICAgICAgbW9kaWZpZWRWYWx1ZSA9IE51bWJlcnMuZml4Um91bmRpbmcob3JpZ2luYWxWYWx1ZSwgY291bnQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOdW1iZXJzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVpbnQ4QXJyYXlzIHtcbiAgcHVibGljIHN0YXRpYyBpc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZSh0YXJnZXRCeXRlU2VxdWVuY2U6IFVpbnQ4QXJyYXksIGRhdGE6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdGFyZ2V0Qnl0ZVNlcXVlbmNlLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgIGlmICh0YXJnZXRCeXRlU2VxdWVuY2VbaWR4XSAhPT0gZGF0YVtvZmZzZXQgKyBpZHhdKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZmluZFRhcmdldEJ5dGVTZXF1ZW5jZUluZGV4RnJvbU9mZnNldCh0YXJnZXRCeXRlU2VxdWVuY2U6IFVpbnQ4QXJyYXksIGRhdGE6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyLCByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCA9IC0xKTogbnVtYmVyIHtcbiAgICBmb3IgKGxldCBjdXJyZW50SW5kZXggPSBvZmZzZXQ7IGN1cnJlbnRJbmRleCA8PSBkYXRhLmJ5dGVMZW5ndGg7IGN1cnJlbnRJbmRleCsrKSB7XG4gICAgICBpZiAoVWludDhBcnJheXMuaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UodGFyZ2V0Qnl0ZVNlcXVlbmNlLCBkYXRhLCBjdXJyZW50SW5kZXgpKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRVdWlkU3RyaW5nRnJvbVVpbnQ4QXJyYXkoZGF0YTogVWludDhBcnJheSwgdXVpZEJ5dGVMZW5ndGggPSAxNik6IHN0cmluZyB7XG4gICAgY29uc3QgdXVpZDogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHV1aWRCeXRlTGVuZ3RoOyBpZHgrKykge1xuICAgICAgY29uc3QgYnl0ZUhleCA9IGRhdGFbaWR4XS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcblxuICAgICAgdXVpZC5wdXNoKGJ5dGVIZXgpO1xuXG4gICAgICBpZiAoaWR4ID09PSAzIHx8IGlkeCA9PT0gNSB8fCBpZHggPT09IDcgfHwgaWR4ID09PSA5KSB7XG4gICAgICAgIHV1aWQucHVzaCgnLScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1dWlkLmpvaW4oJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VpbnQ4QXJyYXlzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXI6IElBcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IHRoaXMuX2FwcGVuZGVycy5yZWR1Y2UoKGl0ZW1zLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIShpdGVtID09PSBhcHBlbmRlcikpIHtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sIFtdIGFzIEFycmF5PElBcHBlbmRlcj4pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yOiBzdHJpbmcsIGN1cnJlbnRWYWx1ZTogc3RyaW5nIHwgRXJyb3IsIGluZGV4OiBudW1iZXIsIGFycmF5OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZXJyb3JTdGFja0Fsc29IYXNFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUubWVzc2FnZSkgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlOiBvYmplY3RbXSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYXJnIGluc3RhbmNlb2YgRXJyb3IgPyB0aGlzLnRvU3RyaW5nKGFyZykgOiBhcmcsXG4gICAgICAgIChfLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckRlZmF1bHRzIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRMb2dzXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMubG9nVG9Db25zb2xlXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJykgYXMgTG9nZ2luZ0xldmVsVHlwZTtcblxuICAgIGlmIChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKSB7XG4gICAgICB0aGlzLl90aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwobmFtZTogc3RyaW5nLCBhcHBseUFwcGVuZGVyOiAobGV2ZWw6IExvZ2dpbmdMZXZlbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZShgcGhlbml4LSR7bmFtZX0tbG9nZ2luZy1sZXZlbGApIGFzIExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsVHlwZSk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ1RocmVzaG9sZCB7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbDtcblxuICBnZXQgdmFsdWUoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0VGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmcgPSAnLSc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nID0gJy0nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nID0gJy0nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVybCBtdXN0IGJlIGEgc3RyaW5nIGluc3RlYWQgcmVjZWl2ZWQgWyR7dHlwZW9mIHVybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRyaWNzRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuL01ldHJpY1R5cGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gMTAyNDtcbmNvbnN0IG1heEJ1ZmZlcmVkUmVjb3JkcyA9IDIwNDg7XG5cbmludGVyZmFjZSBJVmFsdWUge1xuICBzdHJpbmc/OiBzdHJpbmc7XG4gIHVpbnQ2ND86IG51bWJlcjtcbiAgZmxvYXQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJTWV0cmljUmVjb3JkIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIElNZXRyaWMge1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgbWV0cmljVHlwZTogTWV0cmljc1R5cGU7XG4gIHZhbHVlPzogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlPzogSVZhbHVlO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdNZXRyaWNzU2VydmljZScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIF9tZXRyaWNzOiBBcnJheTxJTWV0cmljUmVjb3JkPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmFpbHVyZUNvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZG9tYWluID0gR2xvYmFsU2NvcGUudmFsdWU/LmxvY2F0aW9uSG9zdG5hbWUgfHwgJyc7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYgPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKCk7XG4gIH1cblxuICBnZXQgbWV0cmljc0NvbmZpZ3VyYXRpb24oKTogTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobWV0cmljOiBJTWV0cmljKTogdm9pZCB7XG4gICAgY29uc3Qge3N0cmVhbUlkLCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSwgcnVudGltZSwgcmVzb3VyY2UsIGtpbmR9ID0gbWV0cmljO1xuICAgIGNvbnN0IG1ldHJpY1R5cGUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWMubWV0cmljVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID4gbWV0cmljVHlwZS5nZXRUZWxlbWV0cnlMZXZlbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpYzogbWV0cmljVHlwZS5nZXROYW1lKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtpbmRcbiAgICB9O1xuXG4gICAgdGhpcy5fbWV0cmljcy5wdXNoKG1ldHJpY1JlY29yZCk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXM6IEFycmF5PElNZXRyaWNSZWNvcmQ+KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLkZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcgfHwgIUdsb2JhbFNjb3BlLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IG1ldHJpY3NNZXNzYWdlcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UoMCwgcmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzID0gdGhpcy5fbWV0cmljcy5zbGljZShyZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZShyZXNwb25zZSkpIHtcbiAgICAgICAgaWYgKHRoaXMuX21ldHJpY3MubGVuZ3RoIDw9IG1heEJ1ZmZlcmVkUmVjb3Jkcykge1xuICAgICAgICAgIHRoaXMuX2ZhaWx1cmVDb3VudCsrO1xuXG4gICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9tZXRyaWNzID0gWy4uLm1ldHJpY3NNZXNzYWdlcywgLi4udGhpcy5fbWV0cmljc107XG5cbiAgICAgICAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgICAgICAgIH0sIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2ZhaWx1cmVDb3VudCkpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdUb28gbWFueSBjYWNoZWQgbWV0cmljIHJlY29yZHMgWyVzXSwgZHJvcHBpbmcgWyVzXSByZWNvcmRzJywgdGhpcy5fbWV0cmljcy5sZW5ndGgsIG1ldHJpY3NNZXNzYWdlcy5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2ZhaWx1cmVDb3VudCA9IDA7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUoe3N0YXR1c306IFJlc3BvbnNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eNVxcZHsyfSQvLnRlc3Qoc3RhdHVzLnRvU3RyaW5nKCkpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeURlZmF1bHQge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsW0J1aWxkRmVhdHVyZXMuc2VuZE1ldHJpY3NdO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9IHwgbnVsbDtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gZmFsc2UpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbiAmJiAhZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgPyB7ZW5jb2RlZEluc2VydGFibGVTdHJlYW1zfSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25maWd1cmF0aW9uTWFuYWdlciB7XG4gIHN0YXRpYyB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBpZiAoIWNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y01vbml0b3JTdGF0aXN0aWMge1xuICBba2luZDogc3RyaW5nXTogSVJ0Y1N0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWU6IHN0cmluZykgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmcgPSAndW5rbm93bic7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZyA9ICd1bmtub3duJztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljIHwgbnVsbD4gPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGw7XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkICYmIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24/LnNkcCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcnRjU3RhdGlzdGljO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc01vbml0b3JSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5nZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy51cGRhdGVTdGF0aXN0aWNMZWdhY3koKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW06IHtpZDogc3RyaW5nfSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uPy5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzUmVjZWl2ZWQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzUmVjZWl2ZWQgPSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8uYnl0ZXNSZWNlaXZlZCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNSZWNlaXZlZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gKHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy50aW1lc3RhbXAgfHwgMCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYml0cmF0ZSA9IGJ5dGVzRGVsdGEgJiYgdGltZURlbHRhID8gTWF0aC5mbG9vcig4ICogYnl0ZXNEZWx0YSAvXG4gICAgICAgICAgICAgICAgICB0aW1lRGVsdGEgKiAxMDAwKSA6IDA7XG5cbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBiaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgYnl0ZXNSZWNlaXZlZDogcmVwb3J0LmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzTG9zdDogcmVwb3J0LnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiByZXBvcnQucGFja2V0c1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgY29kZWM6IGNvZGVjIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUoa2luZCksXG4gICAgICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LnZpZGVvPy5mcmFtZXNEZWNvZGVkKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRGVjb2RlZDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZnBzID0gKHJlcG9ydC5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3Nba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcHMnXSA9IGZwcyA/IE1hdGgucm91bmQoZnBzICogMTAwKSAvIDEwMCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWNMZWdhY3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uPy5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LnZpZGVvPy5mcmFtZXNEZWNvZGVkKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgfHwgJ3Vua25vd24nO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyB8fCAndW5rbm93bic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZHBQYXJzZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZHA6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQXVkaW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzVmlkZW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2RwOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZHAgPSBzZHA7XG5cbiAgICBjb25zdCBzZHBTcGxpdEJ5TGluZXMgPSB0aGlzLl9zZHAuc3BsaXQoLyhcXHJcXG58XFxyfFxcbikvKTtcbiAgICBjb25zdCBzZHBTcGxpdEJ5VHJhY2tzID0gdGhpcy5fc2RwLnNwbGl0KC8oPzpefFtcXHJcXG5dKW09Lyk7XG5cbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCdhdWRpbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICAgIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCd2aWRlbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICB9XG5cbiAgZ2V0IGF1ZGlvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Db2RlYztcbiAgfVxuXG4gIGdldCB2aWRlb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvQ29kZWM7XG4gIH1cblxuICBnZXQgaXNBdWRpb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1ZpZGVvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyYWNrQnlUeXBlRW5hYmxlZCh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlUcmFja3M6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2RwU2VjdGlvbkZvclR5cGUgPSBzZHBTcGxpdEJ5VHJhY2tzLmZpbmQoc2RwVHJhY2sgPT4gc2RwVHJhY2suc3RhcnRzV2l0aCh0eXBlKSk7XG5cbiAgICBpZiAoIXNkcFNlY3Rpb25Gb3JUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICFzZHBTZWN0aW9uRm9yVHlwZS5pbmNsdWRlcyhgYT1pbmFjdGl2ZWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvZGVjKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeUxpbmVzOiBzdHJpbmcgW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHJ0bWFwID0gc2RwU3BsaXRCeUxpbmVzLmZpbmQoc2RwTGluZSA9PiBzZHBMaW5lLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSk/LnNwbGl0KCcgJylbM10gfHwgJyc7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtydG1hcH1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZT8uc3BsaXQoJyAnKVsxXSB8fCAnJztcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbiB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiBjbGFzcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuUlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBnZXQgbmF0aXZlKCk6IFJUQ1BlZXJDb25uZWN0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uY3VycmVudExvY2FsRGVzY3JpcHRpb24gfHwgbnVsbDtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gfHwgbnVsbDtcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uU3RhdGUoKTogUlRDUGVlckNvbm5lY3Rpb25TdGF0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uY29ubmVjdGlvblN0YXRlIHx8IG51bGw7XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uaWNlQ29ubmVjdGlvblN0YXRlIHx8IG51bGw7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24/LmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24/LnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRUcmFuc2NlaXZlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5nZXRUcmFuc2NlaXZlcnNEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24/LmdldFRyYW5zY2VpdmVycyA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlQW5zd2VyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgc2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVycygpO1xuICB9XG5cbiAgZ2V0UmVjZWl2ZXJzKCk6IFJUQ1J0cFJlY2VpdmVyW10ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0UmVjZWl2ZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBkdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGxlZ2FjeSAnZ2V0U3RhdHMnIG1ldGhvZCB0eXBlIGRlZmluaXRpb25cbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnZ2V0U3RhdHMnIG1ldGhvZCBmb3JcbiAgICAgIC8vIENocm9tZUA8PSA2NiBkZXRhaWxlZCBoZXJlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02Mjc4MTZcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBrZXlvZiBSVENQZWVyQ29ubmVjdGlvbkV2ZW50TWFwPih0eXBlOiBULCBsaXN0ZW5lcjogKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogUlRDUGVlckNvbm5lY3Rpb25FdmVudE1hcFtUXSkgPT4gdW5rbm93biwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI8VCBleHRlbmRzIGtleW9mIFJUQ1BlZXJDb25uZWN0aW9uRXZlbnRNYXA+KHR5cGU6IFQsIGxpc3RlbmVyOiAodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBSVENQZWVyQ29ubmVjdGlvbkV2ZW50TWFwW1RdKSA9PiB1bmtub3duLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0VHJhbnNjZWl2ZXJzKCk6IFJUQ1J0cFRyYW5zY2VpdmVyW10ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKG5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkU3RyZWFtKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IHZvaWQge1xuICAgIG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYWNrKHRyYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHNldCBvbnRyYWNrKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2VjYW5kaWRhdGUoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24/LmNsb3NlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+KHJlc29sdmVQZWVyQ29ubmVjdGlvblByb21pc2UgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IEdsb2JhbFNjb3BlLnN1YnNjcmliZShnbG9iYWxTY29wZSA9PiB7XG4gICAgICAgIGlmICghZ2xvYmFsU2NvcGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlUGVlckNvbm5lY3Rpb25Qcm9taXNlKG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbikpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZE9ubHlTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViamVjdDogU3ViamVjdDxUPjtcblxuICBjb25zdHJ1Y3RvcihzdWJqZWN0OiBTdWJqZWN0PFQ+KSB7XG4gICAgdGhpcy5fc3ViamVjdCA9IHN1YmplY3Q7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3QudmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6ICh2YWx1ZTogVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IFRbXSwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogKCh2YWx1ZTogVCkgPT4gdm9pZClbXTtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQ7XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBUKSB7XG4gICAgbGV0IGNoYW5nZWQgPSB0aGlzLl92YWx1ZSAhPT0gdmFsdWU7XG5cbiAgICBpZiAoY2hhbmdlZCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgY29tcGFyYWJsZSA9IHZhbHVlIGFzIHVua25vd24gYXMgSUNvbXBhcmFibGU8VD47XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcGFyYWJsZS5lcXVhbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2hhbmdlZCA9ICFjb21wYXJhYmxlLmVxdWFscyh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgIGxpc3RlbmVyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6ICh2YWx1ZTogVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwodmFsdWU6IFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0lHbG9iYWxTY29wZSc7XG5pbXBvcnQge0dsb2JhbFNjb3BlfSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi4vbG9nZ2VyL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQge1NoYWthUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvSVNoYWthUGxheWVyJztcbmltcG9ydCB7SGxzUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvSUhsc1BsYXllcic7XG5pbXBvcnQge1dlYlBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL0lXZWJQbGF5ZXInO1xuaW1wb3J0IElQcm92aWRlZEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0lQcm92aWRlZEdsb2JhbFNjb3BlJztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gR2xvYmFsU2NvcGUuZ2V0SW5zdGFuY2UoKS52YWx1ZT8ucGFnZUxvYWRUaW1lIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHZhbHVlOiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkO1xuICBzaGFrYVBsYXllckxvYWRlcj86ICh2YWx1ZTogKHBsYXllcjogU2hha2FQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86ICh2YWx1ZTogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCcpO1xuICBwcml2YXRlIHN0YXRpYyBfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcycpO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyOiAodmFsdWU6IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQpID0+IHZvaWQ7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYVBsYXllckxvYWRlcjogKHZhbHVlOiAocGxheWVyOiBTaGFrYVBsYXllclR5cGUpID0+IHZvaWQpID0+IHZvaWQ7XG4gIHByaXZhdGUgc3RhdGljIF9obHNKc0xvYWRlcjogKHZhbHVlOiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHwgbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdChCdWlsZEZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJQbGF5ZXJMb2FkZXIoKTogKHZhbHVlOiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2ViUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYVBsYXllckxvYWRlcigpOiAodmFsdWU6IChwbGF5ZXI6IFNoYWthUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAodmFsdWU6IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9obHNKc0xvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0cmljc1NlcnZpY2UoKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIHJldHVybiBTREsuX21ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5VXJsKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbGVtZXRyeVVybDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzO1xuICB9XG5cbiAgc3RhdGljIHNldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKHJldHJpZXNBbW91bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSByZXRyaWVzQW1vdW50O1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSh0aGlzLl9sb2dnZXIudGhyZXNob2xkLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyRGV0ZWN0b3IoKTogQnJvd3NlckRldGVjdG9yIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gTG9nZ2VyRmFjdG9yeS50ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ucGFnZUxvYWRUaW1lID0gU0RLLnBhZ2VMb2FkVGltZTtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJykgYXMgVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBjb25zdCBnbG9iYWxTY29wZSA9IEdsb2JhbFNjb3BlLmdldEluc3RhbmNlKCkudmFsdWU7XG4gICAgICBjb25zdCB1cmkgPSBuZXcgZ2xvYmFsU2NvcGUuVVJMKGJhc2VVUklWYWx1ZSk7XG5cbiAgICAgIHVyaS5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmkudG9TdHJpbmcoKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LWJhc2UtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBvbkxvYWQoZ2xvYmFsU2NvcGU6IElHbG9iYWxTY29wZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWdsb2JhbFNjb3BlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RLIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBnbG9iYWxTY29wZS5hZGRXaW5kb3dFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gICAgICBTREsuZGlzcG9zZSgpO1xuICAgIH0pO1xuXG4gICAgU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG4gICAgU0RLLmFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcbiAgICBTREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG5ldyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHRoaXMuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0KG9wdGlvbnM/OiBJSW5pdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zV2l0aE9wdGlvbmFsZ2xvYmFsU2NvcGU6IElJbml0T3B0aW9ucyAmIHtnbG9iYWxTY29wZT86IElQcm92aWRlZEdsb2JhbFNjb3BlfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAob3B0aW9uc1dpdGhPcHRpb25hbGdsb2JhbFNjb3BlLmdsb2JhbFNjb3BlKSB7XG4gICAgICBHbG9iYWxTY29wZS5zZXRJbnN0YW5jZShvcHRpb25zV2l0aE9wdGlvbmFsZ2xvYmFsU2NvcGUuZ2xvYmFsU2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IG9wdGlvbnMuZGlzY292ZXJ5VXJpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZSA9IG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICBTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICB0aGlzLl9sb2dnZXIudGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5sb2dnaW5nTGV2ZWwpKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICBjb25zdCBjb25zb2xlQXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBDb25zb2xlQXBwZW5kZXIpO1xuXG4gICAgICBpZiAoY29uc29sZUFwcGVuZGVyKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgIT09ICdPZmYnKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICB0aGlzLl93ZWJQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLndlYlBsYXllckxvYWRlcjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aGlzLl9obHNKc0xvYWRlciA9IG9wdGlvbnMuaGxzSnNMb2FkZXI7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yPy5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkdsb2JhbFNjb3BlLnN1YnNjcmliZShTREsub25Mb2FkLmJpbmQoU0RLKSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQsIHtDaGFubmVsQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IEVuY29kZWRTdHJlYW1TaW5rLCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQgU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB7U3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQnO1xuaW1wb3J0IHtEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiwgUmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9ufSBmcm9tICcuLi9mcmFtZVRpbWluZy9GcmFtZVRpbWluZ0luZm9ybWF0aW9uJztcbmltcG9ydCBTdHJlYW1GYWN0b3J5IGZyb20gJy4uL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xuICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHQ6IFN0YXRlQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ6IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uIHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQgfCBudWxsPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtIHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljIHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbSB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkVuYWJsZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogUmVhZE9ubHlTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uOiBSZWFkT25seVN1YmplY3Q8UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7dGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWd9O1xuICAgIGNvbnN0IHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IG5ldyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0KHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbiB8IG51bGw+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQgfCBudWxsPih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0gfCBudWxsPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0pO1xuICAgIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcyA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWMgfCBudWxsPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbSB8IG51bGw+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgPSBuZXcgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQoKTtcbiAgICB0aGlzLmNvbmZpZ3VyZUZyYW1lVGltaW5nSW5mb3JtYXRpb24oZWRnZVRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkVuYWJsZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmlzRW5hYmxlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPih0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5kZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+KHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgfSwgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnN1YnNjcmliZShyZXNvbHV0aW9uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkub25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKHJlc29sdXRpb24udG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnN1YnNjcmliZShiaXRyYXRlTGltaXQgPT4ge1xuICAgICAgICBpZiAoYml0cmF0ZUxpbWl0ICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBiaXRyYXRlTGltaXQsXG4gICAgICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgICAgIEJpdHJhdGVNb2RlLk5vcm1hbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBkZXN0cm95U3RyZWFtT25Vbm1vdW50ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbU9uVW5tb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsICdjbGllbnQ6dGVybWluYXRpb24tb24td2luZG93LXVubG9hZCcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBHbG9iYWxTY29wZS52YWx1ZS5hZGRXaW5kb3dFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgR2xvYmFsU2NvcGUudmFsdWUucmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdXRpb24udmFsdWUud2lkdGggIT09IHZpZGVvRWxlbWVudC52aWRlb1dpZHRoIHx8IHRoaXMucmVzb2x1dGlvbi52YWx1ZS5oZWlnaHQgIT09IHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcblxuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2VuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZUZyYW1lVGltaW5nSW5mb3JtYXRpb24oZWRnZVRva2VuKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBhdXRvTXV0ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQ7XG4gIH1cblxuICBnZXQgYXV0b1BhdXNlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQ7XG4gIH1cblxuICBnZXQgdG9rZW5FeHBpcmluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmc7XG4gIH1cblxuICBnZXQgYXV0aG9yaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQ7XG4gIH1cblxuICBnZXQgb25saW5lKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5T25saW5lO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHBsYXlpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQbGF5aW5nO1xuICB9XG5cbiAgZ2V0IHN0YW5kYnkoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGFuZGJ5O1xuICB9XG5cbiAgZ2V0IHN0b3BwZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdG9wcGVkO1xuICB9XG5cbiAgZ2V0IHRhcmdldExhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWc7XG4gIH1cblxuICBnZXQgbGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxhZztcbiAgfVxuXG4gIGdldCBiaXRyYXRlTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQudmFsdWU7XG4gIH1cblxuICBnZXQgcmVzb2x1dGlvbigpOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbjtcbiAgfVxuXG4gIGdldCBmYWlsdXJlQ291bnQoKTogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudDtcbiAgfVxuXG4gIGdldCBlbmRQb2ludCgpOiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzO1xuICB9XG5cbiAgZ2V0IG1lZGlhU3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIGdldCBpc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbigpOiBSZWFkT25seVN1YmplY3Q8RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb247XG4gIH1cblxuICBnZXQgcmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uO1xuICB9XG5cbiAgc2V0Qml0cmF0ZUxpbWl0KGJpdHJhdGVMaW1pdDogQml0c1BlclNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IGJpdHJhdGVMaW1pdDtcbiAgfVxuXG4gIGNsZWFyQml0cmF0ZUxpbWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQgPSAwO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICBCaXRyYXRlTW9kZS5SZXNldFxuICAgICAgKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhcmdldExhZyhsYWc6IE1pbGxpc2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnLnZhbHVlID0gbGFnO1xuICB9XG5cbiAgYXN5bmMgc3RvcChyZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmICghdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMocmVhc29uKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gIH1cblxuICBhc3luYyByZXN1bWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1bm11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3AoJ2NsaWVudDpjaGFubmVsLWRpc3Bvc2UnKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBnZXRVcmkodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBVUkwge1xuICAgIGNvbnN0IHVybCA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnVyaTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBkaXNjb3ZlciBVUkkgWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgc3RhcnQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6c3RhcnQnKTtcblxuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBTdHJlYW1UcmFja1RyYW5zZm9ybS52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4oJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gU3RyZWFtVHJhY2tUcmFuc2Zvcm0udmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4oJ2F1ZGlvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBFbmNvZGVkU3RyZWFtU2luay52YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgJiYgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBpbnNlcnRhYmxlLXN0cmVhbXMgYW5kIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGFyZSBlbmFibGVkLCBvbmx5IHVzZSBvbmUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPT09ICdmdW5jdGlvbic7XG4gICAgY29uc3QgaGFzRW5jb2RlZFN0cmVhbVNpbmsgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgJiYgaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGNhbGxiYWNrIGFuZCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgc2luayBmdW5jdGlvbiBmb3VuZCwgb25seSB1c2Ugb25lIHR5cGUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBTdHJlYW0gVHJhY2sgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBpbnNlcnRhYmxlLXN0cmVhbXMgaXMgZW5hYmxlZCcpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZDsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghKEZlYXR1cmVFbmFibGVtZW50LmlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkIHx8IEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBzaW5rIGZ1bmN0aW9uIGlzIG1pc3Npbmc7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIGVuYWJsZWQnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBmb3VuZDsgaG93ZXZlciwgZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMgaXMgbm90IGVuYWJsZWRgKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQsIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2spO1xuXG4gICAgaWYgKCFzdHJlYW1QbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtUGxheWVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLFxuICAgICAgdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudC5iaW5kKHRoaXMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUrKztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNsaWVudFN0YXJ0RXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkluaXRpYWxpemluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNsaWVudFN0YXJ0RXJyb3I6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXRyeSBzdGFydCB3aXRoIGluaXRpYWwgc3RhdGUgWyVzXSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUsIENoYW5uZWxTdGF0ZVt0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gcmVzdHJpY3RlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IGluaXRpYWxpemluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZUZyYW1lVGltaW5nSW5mb3JtYXRpb24odG9rZW46IEVkZ2VUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IGZyYW1lVGltaW5nSW5mb3JtYXRpb25DYXBhYmlsaXR5ID0gdG9rZW4uY2FwYWJpbGl0aWVzLmZpbmQoY2FwYWJpbGl0eSA9PiBjYXBhYmlsaXR5LnN0YXJ0c1dpdGgoJ2ZyYW1lLXRpbWluZy1pbmZvcm1hdGlvbj0nKSk7XG5cbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmlzRW5hYmxlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ2FwYWJpbGl0eSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2FibGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gYXMgbm8gY2FwYWJpbGl0eSB3YXMgZm91bmQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNDaGFubmVsRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2FibGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gYXMgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgaXQgWyVzXScsIGZyYW1lVGltaW5nSW5mb3JtYXRpb25DYXBhYmlsaXR5KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZyYW1lVGltaW5nSW5mb3JtYXRpb25DYXBhYmlsaXR5LnNwbGl0KCc9JylbMV1cbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKG9wdGlvbiA9PiBvcHRpb24udHJpbSgpKVxuICAgICAgLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgc3dpdGNoIChvcHRpb24pIHtcbiAgICAgICAgICBjYXNlICd0aW1lY29kZSc6XG4gICAgICAgICAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd0aW1lc3RhbXBzJzpcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lc3RhbXBzLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdJZ25vcmluZyB1bmtub3duIGZyYW1lIHRpbWluZyBpbmZvcm1hdGlvbiBvcHRpb24gWyVzXScsIG9wdGlvbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gY29uZmlndXJhdGlvbiBbKHRpbWVjb2RlIFslc10sIHRpbWVzdGFtcHMgWyVzXSldJywgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlLCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgfVxuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBjb25zdCBoYXNBdWRpb1RyYWNrID0gISFtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIodHJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gdHJhY2sua2luZCA9PT0gJ2F1ZGlvJztcbiAgICAgIH0pLmxlbmd0aDtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgSW5pdGlhbGl6aW5nID0gMCxcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nID0gMixcbiAgUGF1c2VkID0gMyxcbiAgUGxheWluZyA9IDQsXG4gIFJlY292ZXJpbmcgPSA1LFxuICBSZWNvbm5lY3RpbmcgPSA2LFxuICBTdGFuZEJ5ID0gNyxcbiAgU3RvcHBlZCA9IDgsXG4gIFVuYXV0aG9yaXplZCA9IDksXG4gIEdlb1Jlc3RyaWN0ZWQgPSAxMCxcbiAgR2VvQmxvY2tlZCA9IDExLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUgPSAxMixcbiAgQ29uZmlndXJhdGlvbkVycm9yID0gMTMsXG4gIFRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvciA9IDE0LFxuICBDb25uZWN0aW9uRXJyb3IgPSAxNSxcbiAgQ2xpZW50U3RhcnRFcnJvciA9IDE2LFxuICBFcnJvciA9IDE3XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBDaGFubmVsLCB7Q2hhbm5lbE9wdGlvbnN9IGZyb20gJy4vQ2hhbm5lbCc7XG5cbnR5cGUgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgdG9rZW46IEVuY29kZWRFZGdlVG9rZW47XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xuICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWxzIHtcbiAgc3RhdGljIGNyZWF0ZUNoYW5uZWwob3B0aW9uczogQ3JlYXRlQ2hhbm5lbE9wdGlvbnMpOiBDaGFubmVsIHtcbiAgICBpZiAoIVNESy5pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgbm90IGxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGFubmVsT3B0aW9uczogQ2hhbm5lbE9wdGlvbnMgPSB7XG4gICAgICB0YXJnZXRMYWc6IG9wdGlvbnMudGFyZ2V0TGFnLFxuICAgICAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLFxuICAgICAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogb3B0aW9ucy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgQ2hhbm5lbChvcHRpb25zLnZpZGVvRWxlbWVudCwgb3B0aW9ucy50b2tlbiwgY2hhbm5lbE9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXQgaXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBGZWF0dXJlRW5hYmxlbWVudC5pc0NoYW5uZWxGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWxzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljLCBJUnRjU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBkZWZhdWx0VGFyZ2V0TGFnID0gMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQ29udGV4dCB7XG4gIGNoYW5uZWxJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBjaGFubmVsRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICByZW5kZXJlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgdmlkZW9FbGVtZW50OiBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQgfCBudWxsPjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZCB8IHVuZGVmaW5lZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQgfCBudWxsPjtcbiAgc3RyZWFtOiBTdWJqZWN0PElTdHJlYW0gfCBudWxsPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnkgfCBudWxsO1xuICBydGNBdWRpb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYyB8IG51bGw7XG4gIHJ0Y1ZpZGVvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljIHwgbnVsbDtcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPihDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4ob3B0aW9ucz8udGFyZ2V0TGFnID8/IGRlZmF1bHRUYXJnZXRMYWcpO1xuICAgIHRoaXMubGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5iaXRyYXRlTGltaXQgPSBuZXcgU3ViamVjdDxCaXRzUGVyU2Vjb25kPigwKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBuZXcgU3ViamVjdDxEaW1lbnNpb24+KERpbWVuc2lvbi5lbXB0eSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludCB8IG51bGw+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbSB8IG51bGw+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljIHwgbnVsbD4obnVsbCk7XG4gICAgdGhpcy52aWRlb1RlbGVtZXRyeSA9IG51bGw7XG4gICAgdGhpcy5ydGNBdWRpb1N0YXRpc3RpYyA9IG51bGw7XG4gICAgdGhpcy5ydGNWaWRlb1N0YXRpc3RpYyA9IG51bGw7XG4gICAgdGhpcy5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQgPSAwO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LnZhbHVlICYmIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgIH1cbiAgfVxuXG4gIG1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YW5kQnk7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZvcmJpZGRlbi10YWcnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0RlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uLCBSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb259IGZyb20gJy4uL2ZyYW1lVGltaW5nL0ZyYW1lVGltaW5nSW5mb3JtYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCB7XG4gIHB1YmxpYyByZWFkb25seSBzaG91bGRFeHRyYWN0VGltZWNvZGU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyByZWFkb25seSBzaG91bGRFeHRyYWN0VGltZXN0YW1wczogU3ViamVjdDxib29sZWFuPjtcbiAgcHVibGljIHJlYWRvbmx5IGlzRW5hYmxlZDogU3ViamVjdDxib29sZWFuPjtcbiAgcHVibGljIHJlYWRvbmx5IGRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uOiBTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD47XG4gIHB1YmxpYyByZWFkb25seSByZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb246IFN1YmplY3Q8UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zaG91bGRFeHRyYWN0VGltZWNvZGUgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zaG91bGRFeHRyYWN0VGltZXN0YW1wcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmlzRW5hYmxlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gbmV3IFN1YmplY3Q8RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPihudWxsKTtcbiAgICB0aGlzLnJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IG5ldyBTdWJqZWN0PFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+KG51bGwpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uIHwgbnVsbD47XG4gIHBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1lZGlhU3RyZWFtID0gbmV3IFN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uIHwgbnVsbD4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcblxuZXhwb3J0IHR5cGUgU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMgPSB7XG4gIGhhc0luc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGJvb2xlYW47XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IHtcbiAgcmVhZG9ubHkgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcbiAgcmVhZG9ubHkgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPihvcHRpb25zLmhhc0luc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KG9wdGlvbnMuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s7XG4gICAgdGhpcy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gb3B0aW9ucy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luaztcbiAgICB0aGlzLmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbms7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkNvbnRleHQge1xuICB0b2tlbjogU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgdG9rZW5FeHBpcmluZzogU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3Rvcih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMudG9rZW4gPSBuZXcgU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy50b2tlbkV4cGlyaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHN0cmVhbVJlYWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGE6IFVpbnQ4QXJyYXk7XG4gIHByaXZhdGUgX2JpdE9mZnNldDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFVpbnQ4QXJyYXkpIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICB0aGlzLl9iaXRPZmZzZXQgPSAwO1xuICB9XG5cbiAgcHVibGljIHJlYWRCaXRzKGJpdHNUb1JlYWQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuX2JpdE9mZnNldCArIGJpdHNUb1JlYWQgPiB0aGlzLl9kYXRhLmxlbmd0aCAqIDgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlYWQgWyR7Yml0c1RvUmVhZH1dIGJpdHMgLSBvbmx5IFske3RoaXMuZ2V0UmVtYWluaW5nQml0cygpfV0gYml0cyByZW1haW5pbmcgaW4gc3RyZWFtYCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gMDtcbiAgICBsZXQgYml0c1JlbWFpbmluZyA9IGJpdHNUb1JlYWQ7XG5cbiAgICB3aGlsZSAoYml0c1JlbWFpbmluZyA+IDApIHtcbiAgICAgIGNvbnN0IGJ5dGVPZmZzZXQgPSBNYXRoLmZsb29yKHRoaXMuX2JpdE9mZnNldCAvIDgpO1xuICAgICAgY29uc3QgYml0UG9zaXRpb25JbkJ5dGUgPSB0aGlzLl9iaXRPZmZzZXQgJSA4O1xuICAgICAgY29uc3QgYml0c0F2YWlsYWJsZUluQnl0ZSA9IDggLSBiaXRQb3NpdGlvbkluQnl0ZTtcbiAgICAgIGNvbnN0IGJpdHNUb1JlYWQgPSBNYXRoLm1pbihiaXRzUmVtYWluaW5nLCBiaXRzQXZhaWxhYmxlSW5CeXRlKTtcbiAgICAgIC8vIENyZWF0ZSBhIG1hc2sgZm9yIHRoZSBiaXRzIHdlIHdhbnQgdG8gcmVhZFxuICAgICAgY29uc3QgbWFzayA9ICgxIDw8IGJpdHNUb1JlYWQpIC0gMTtcbiAgICAgIC8vIFNoaWZ0IHJpZ2h0IHRvIGdldCByaWQgb2YgbG93ZXIgYml0cyB3ZSBkb24ndCB3YW50XG4gICAgICBjb25zdCBieXRlVmFsdWUgPSAodGhpcy5fZGF0YVtieXRlT2Zmc2V0XSA+PiAoYml0c0F2YWlsYWJsZUluQnl0ZSAtIGJpdHNUb1JlYWQpKTtcbiAgICAgIC8vIE1hc2sgdG8ga2VlcCBvbmx5IHRoZSBiaXRzIHdlIHdhbnRcbiAgICAgIGNvbnN0IGJpdHMgPSBieXRlVmFsdWUgJiBtYXNrO1xuXG4gICAgICAvLyBBZGQgdGhlc2UgYml0cyB0byBvdXIgcmVzdWx0XG4gICAgICB2YWx1ZSA9ICh2YWx1ZSA8PCBiaXRzVG9SZWFkKSB8IGJpdHM7XG5cbiAgICAgIGJpdHNSZW1haW5pbmcgLT0gYml0c1RvUmVhZDtcbiAgICAgIHRoaXMuX2JpdE9mZnNldCArPSBiaXRzVG9SZWFkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBza2lwQml0cyhiaXRzVG9Ta2lwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYml0T2Zmc2V0ICsgYml0c1RvU2tpcCA+IHRoaXMuX2RhdGEubGVuZ3RoICogOCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2tpcCBbJHtiaXRzVG9Ta2lwfV0gYml0cyAtIG9ubHkgWyR7dGhpcy5nZXRSZW1haW5pbmdCaXRzKCl9XSBiaXRzIHJlbWFpbmluZyBpbiBzdHJlYW1gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9iaXRPZmZzZXQgKz0gYml0c1RvU2tpcDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW1haW5pbmdCaXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhLmxlbmd0aCAqIDgpIC0gdGhpcy5fYml0T2Zmc2V0O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnR9IGZyb20gJy4uLy4uLy4uL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgTmFsVW5pdCBmcm9tICcuL25hbFVuaXQvTmFsVW5pdCc7XG5pbXBvcnQgU2VpUGF5bG9hZCBmcm9tICcuL25hbFVuaXQvU2VpUGF5bG9hZCc7XG5pbXBvcnQgTmFsVW5pdFR5cGUgZnJvbSAnLi9uYWxVbml0L05hbFVuaXRUeXBlJztcbmltcG9ydCBTZWlQYXlsb2FkVHlwZSBmcm9tICcuL25hbFVuaXQvU2VpUGF5bG9hZFR5cGUnO1xuaW1wb3J0IEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCBmcm9tICcuLi8uLi9FbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIMjY0Qml0c3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICBjb25zdHJ1Y3RvcihldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXIpIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlciA9IGV2ZW50UHVibGlzaGVyO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvTmFsVW5pdChuYWxVbml0VHlwZTogTmFsVW5pdFR5cGUsIGhhbmRsZXI6IChldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PE5hbFVuaXQ+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxOYWxVbml0PihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5OYWxVbml0LCBuYWxVbml0RXZlbnQgPT4ge1xuICAgICAgaWYgKG5hbFVuaXRFdmVudC5kYXRhLnR5cGUgPT09IG5hbFVuaXRUeXBlKSB7XG4gICAgICAgIGhhbmRsZXIobmFsVW5pdEV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb1NlaVBheWxvYWRUeXBlKHNlaVBheWxvYWRUeXBlOiBTZWlQYXlsb2FkVHlwZSwgaGFuZGxlcjogKGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8U2VpUGF5bG9hZD4pID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPFNlaVBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlNlaVBheWxvYWQsIHNlaVBheWxvYWRFdmVudCA9PiB7XG4gICAgICBpZiAoc2VpUGF5bG9hZEV2ZW50LmRhdGEudHlwZSA9PT0gc2VpUGF5bG9hZFR5cGUpIHtcbiAgICAgICAgaGFuZGxlcihzZWlQYXlsb2FkRXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvUGF5bG9hZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHBheWxvYWRVdWlkOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4pID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPHN0cmluZz4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZFN1YnNjcmlwdGlvbiwge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IHBheWxvYWRVdWlkXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwgcGF5bG9hZEV2ZW50ID0+IHtcbiAgICAgIGlmIChwYXlsb2FkRXZlbnQuZGF0YS51dWlkID09PSBwYXlsb2FkVXVpZCkge1xuICAgICAgICBoYW5kbGVyKHBheWxvYWRFdmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZW51bSBOYWxVbml0VHlwZSB7XG4gIFVuc3BlY2lmaWVkID0gMCxcbiAgU2xpY2VMYXllck5vbklkckRhdGEgPSAxLFxuICBTbGljZURhdGFQYXJ0aXRpb25BTGF5ZXIgPSAyLFxuICBTbGljZURhdGFQYXJ0aXRpb25CTGF5ZXIgPSAzLFxuICBTbGljZURhdGFQYXJ0aXRpb25DTGF5ZXIgPSA0LFxuICBTbGljZUxheWVySWRyRGF0YSA9IDUsXG4gIFN1cHBsZW1lbnRhbEVuaGFuY2VtZW50SW5mb3JtYXRpb24gPSA2LFxuICBTZXF1ZW5jZVBhcmFtZXRlclNldCA9IDcsXG4gIFBpY3R1cmVQYXJhbWV0ZXJTZXQgPSA4LFxuICBBY2Nlc3NVbml0RGVsaW1pdGVyID0gOSxcbiAgRW5kT2ZTZXF1ZW5jZSA9IDEwLFxuICBFbmRPZlN0cmVhbSA9IDExLFxuICBGaWxsZXJEYXRhID0gMTIsXG4gIFNlcXVlbmNlUGFyYW10ZXJTZXRFeHRlbnNpb24gPSAxMyxcbiAgUHJlZml4TmFsVW5pdCA9IDE0LFxuICBTdWJzZXRTZXF1ZW5jZVBhcmFtdGVyU2V0ID0gMTUsXG4gIERlcHRoUGFyYW10ZXJTZXQgPSAxNixcbiAgUmVzZXJ2ZWQxNyA9IDE3LFxuICBSZXNlcnZlZDE4ID0gMTgsXG4gIFNsaWNlTGF5ZXJBdXhpbGlhcnkgPSAxOSxcbiAgU2xpY2VFeHRlbnNpb24gPSAyMCxcbiAgU2xpY2VFeHRlbnNpb25EZXB0aFZpZXdDb21wb25lbnQgPSAyMSxcbiAgUmVzZXJ2ZWQyMiA9IDIyLFxuICBSZXNlcnZlcmQyMyA9IDIzLFxuICBVbnNwZWNpZmllZDI0ID0gMjQsXG4gIFVuc3BlY2lmaWVkMjUgPSAyNSxcbiAgVW5zcGVjaWZpZWQyNiA9IDI2LFxuICBVbnNwZWNpZmllZDI3ID0gMjcsXG4gIFVuc3BlY2lmaWVkMjggPSAyOCxcbiAgVW5zcGVjaWZpZWQyOSA9IDI5LFxuICBVbnNwZWNpZmllZDMwID0gMzAsXG4gIFVuc3BlY2lmaWVkMzEgPSAzMVxufVxuXG5leHBvcnQgZGVmYXVsdCBOYWxVbml0VHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZW51bSBTZWlQYXlsb2FkVHlwZSB7XG4gIEJ1ZmZlcmluZ1BlcmlvZCA9IDAsXG4gIFBpY3R1cmVUaW1pbmcgPSAxLFxuICBQYW5TY2FuUmVjdCA9IDIsXG4gIEZpbGxlclBheWxvYWQgPSAzLFxuICBVc2VyRGF0YVJlZ2lzdGVyZWQgPSA0LFxuICBVc2VyRGF0YVVucmVnaXN0ZXJlZCA9IDUsXG4gIFJlY292ZXJ5UG9pbnQgPSA2LFxuICBEZWNSZWZQaWNNYXJraW5nUmVwZWl0aW9uID0gNyxcbiAgU3BhcmVQaWMgPSA4LFxuICBTY2VuZUluZm8gPSA5LFxuICBTdWJTZXFJbmZvID0gMTAsXG4gIFN1YlNlcUxheWVyQ2hhcmFjdGVyaXN0aWNzID0gMTEsXG4gIFN1YlNlcUNoYXJhY3RlcmlzdGljcyA9IDEyLFxuICBGdWxsRnJhbWVGcmVlemUgPSAxMyxcbiAgRnVsbEZyYW1lRnJlZXplUmVsZWFzZSA9IDE0LFxuICBGdWxsRnJhbWVTbmFwc2hvdCA9IDE1LFxuICBQcm9ncmVzc2l2ZVJlZmluZW1lbnRTZWdtZW50U3RhcnQgPSAxNixcbiAgUHJvZ3Jlc3NpdmVSZWZpbmVtZW50U2VnbWVudEVuZCA9IDE3LFxuICBNb3Rpb25Db25zdHJhaW5lZFNsaWNlR3JvdXBTZXQgPSAxOCxcbiAgRmlsbUdyYWluQ2hhcmFjdGVyaXN0aWMgPSAxOSxcbiAgRGVibG9ja2luZ0ZpbHRlckRpc3BsYXlSZWZlcmVuY2UgPSAyMCxcbiAgU3RlcmVvVmlkZW9JbmZvID0gMjEsXG4gIFBvc3RGaWx0ZXJIaW50ID0gMjIsXG4gIFRvbmVNYXBwaW5nSW5mbyA9IDIzLFxuICBTY2FsYWJpbGl0eUluZm8gPSAyNCxcbiAgU3ViUGljU2NhbGFibGVMYXllciA9IDI1LFxuICBOb25SZXF1aXJlZExheWVyUmVwID0gMjYsXG4gIFBhcmlvcml0eUxheWVySW5mbyA9IDI3LFxuICBMYXllcnNOb3RQcmVzZW50ID0gMjgsXG4gIExheWVyRGVwZW5kZW5jeUNoYW5nZSA9IDI5LFxuICBTY2FsYWJsZU5lc3RpbmcgPSAzMCxcbiAgQmFzZUxheWVyVGVtcG9yYWxIcmQgPSAzMSxcbiAgUXVhbGl0eUxheWVySW50ZWdyaXR5Q2hlY2sgPSAzMixcbiAgUmVkdW5kYW50UGljUHJvcGVydHkgPSAzMyxcbiAgVGwwRGVwUmVwSW5kZXggPSAzNCxcbiAgVGxTd2l0Y2hpbmdQb2ludCA9IDM1LFxuICBQYXJhbGxlbERlY29kaW5nSW5mbyA9IDM2LFxuICBNdmNTY2FsYWJsZU5lc3RpbmcgPSAzNyxcbiAgVmlld1NjYWxhYmlsaXR5SW5mbyA9IDM4LFxuICBNdWx0aXZpZXdTY2VuZUluZm8gPSAzOSxcbiAgTXVsdGl2aWV3QWNxdWlzaXRpb25JbmZvID0gNDAsXG4gIE5vblJlcXVpcmVkVmlld0NvbXBvbmVudCA9IDQxLFxuICBWaWV3RGVwZW5kZW5jeUNoYW5nZSA9IDQyLFxuICBPcGVyYXRpb25Qb2ludHNOb3RQcmVzZW50ID0gNDMsXG4gIEJhc2VWaWV3VGVtcG9yYWxIZHIgPSA0NCxcbiAgRnJhbWVQYWNraW5nQXJyYW5nZW1lbnQgPSA0NSxcbiAgTXVsdGl2aWV3Vmlld1Bvc2l0aW9uID0gNDYsXG4gIERpc3BsYXlPcmllbnRhdGlvbiA9IDQ3LFxuICBNdmNkU2NhbGFibGVOZXN0aW5nID0gNDgsXG4gIE12Y2RWaWV3U2NhbGFiaWxpdHlJbmZvID0gNDksXG4gIERlcHRoUmVwcmVzZW50YXRpb25JbmZvID0gNTAsXG4gIFRocmVlRGltZW5zaW9uYWxSZWZlcmVuY2VEaXNwbGF5c0luZm8gPSA1MSxcbiAgRGVwdGhUaW1pbmcgPSA1MixcbiAgRGVwdGhTYW1wbGluZ0luZm8gPSA1MyxcbiAgQ29uc3RyYWluZWREZXB0aFBhcmFtZXRlclNldElkZW50aWZpZXIgPSA1NCxcbiAgR3JlZW5NZXRhZGF0YSA9IDU1LFxuICBNYXN0ZXJpbmdEaXNwbGF5Q29sb3VyVm9sdW1ldiA9IDU2LFxuICBDb2xvdXJSZW1hcHBpbmdJbmZvID0gNTcsXG4gIENvbnRlbnRMaWdodExldmVsSW5mbyA9IDU4LFxuICBBbHRlcm5hdGl2ZVRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gNTksXG4gIEFtYmllbnRWaWV3aW5nRW52aXJvbm1lbnQgPSA2MCxcbiAgQ29udGVudENvbG91clZvbHVtZSA9IDYxLFxuICBFcXVpcmVjdGFuZ3VsYXJQcm9qZWN0aW9uID0gNjIsXG4gIEN1YmVtYXBQcm9qZWN0aW9uID0gNjMsXG4gIFNwaGVyZVJvdGF0aW9uID0gNjQsXG4gIFJlZ2lvbndpc2VQYWNraW5nID0gNjUsXG4gIE9tbmlWaWV3cG9ydCA9IDY2LFxuICBBbHRlcm5hdGl2ZURlcHRoSW5mbyA9IDY3LFxuICBTZWlNYW5pZmVzdCA9IDY4LFxuICBTZWlQcmVmaXhJbmRpY2F0aW9uID0gNjksXG4gIEFubm90YXRlZFJlZ2lvbnMgPSA3MCxcbiAgU2h1dHRlckludGVydmFsSW5mbyA9IDcxXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlaVBheWxvYWRUeXBlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IFVpbnQ4QXJyYXlzIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xhbmcvVWludDhBcnJheXMnO1xuaW1wb3J0IE5hbFVuaXQgZnJvbSAnLi4vbmFsVW5pdC9OYWxVbml0JztcbmltcG9ydCBOYWxVbml0VHlwZSBmcm9tICcuLi9uYWxVbml0L05hbFVuaXRUeXBlJztcbmltcG9ydCBTZWlQYXlsb2FkIGZyb20gJy4uL25hbFVuaXQvU2VpUGF5bG9hZCc7XG5pbXBvcnQgU2VpUGF5bG9hZFR5cGUgZnJvbSAnLi4vbmFsVW5pdC9TZWlQYXlsb2FkVHlwZSc7XG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnR9IGZyb20gJy4uLy4uLy4uLy4uL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkIGZyb20gJy4uLy4uLy4uL0VuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCc7XG5pbXBvcnQgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgZnJvbSAnLi92Y2wvSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3knO1xuaW1wb3J0IEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyBmcm9tICcuL0VtdWxhdGlvblByZXZlbnRpb25CeXRlcyc7XG5cbnR5cGUgRXh0cmFjdGVkRGF0YSA9IHtcbiAgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoOiAzIHwgNDtcbiAgbmFsVW5pdDogTmFsVW5pdDtcbiAgc2VpUGF5bG9hZHM/OiBTZWlQYXlsb2FkW107XG59O1xuXG50eXBlIEV4dHJhY3RlZE5hbFVuaXQgPSB7XG4gIG5hbFVuaXREYXRhOiBVaW50OEFycmF5O1xuICBzZWlQYXlsb2Fkcz86IFNlaVBheWxvYWRbXTtcbn07XG5cbnR5cGUgRXh0cmFjdGVkU2VpUGF5bG9hZCA9IHtcbiAgcGF5bG9hZFR5cGU6IFNlaVBheWxvYWRUeXBlO1xuICBwYXlsb2FkOiBVaW50OEFycmF5O1xuICBlbmRJbmRleDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlckNvbmZpZ3VyYXRpb24gPSB7XG4gIHRydW5jYXRlZFZjbE5hbFVuaXRCeXRlTGVuZ3RoOiBudW1iZXI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBhbm5leEIzQnl0ZVN0YXJ0Q29kZSA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAxXSk7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgYW5uZXhCNEJ5dGVTdGFydENvZGUgPSBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VpUGF5bG9hZDNCeXRlRW5kQ29kZSA9IG5ldyBVaW50OEFycmF5KFsweDgwLCAweDAwLCAweDAwLCAweDAxXSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZWlQYXlsb2FkNEJ5dGVFbmRDb2RlID0gbmV3IFVpbnQ4QXJyYXkoWzB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF92Y2xFeHRyYWN0aW9uU3RyYXRlZ3k6IElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICBjb25zdHJ1Y3RvcihldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXIsIHZjbEV4dHJhY3Rpb25TdHJhdGVneTogSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kpIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlciA9IGV2ZW50UHVibGlzaGVyO1xuICAgIHRoaXMuX3ZjbEV4dHJhY3Rpb25TdHJhdGVneSA9IHZjbEV4dHJhY3Rpb25TdHJhdGVneTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzKCkpO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8VWludDhBcnJheT4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmssIHRoaXMucGFyc2VFbmNvZGVkVmlkZW9TdHJlYW1DaHVuay5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayh7Y29udGV4dCwgZGF0YTogY2h1bmt9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8VWludDhBcnJheT4pOiB2b2lkIHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcblxuICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBjaHVuay5ieXRlTGVuZ3RoKSB7XG4gICAgICBjdXJyZW50SW5kZXggKz0gdGhpcy5oYW5kbGVFeHRyYWN0ZWREYXRhKGNvbnRleHQsIHRoaXMuZXh0cmFjdE5hbFVuaXRBdE9mZnNldChjaHVuaywgY3VycmVudEluZGV4KSk7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnlFbmRPZkNodW5rKGNvbnRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFeHRyYWN0ZWREYXRhKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwge2FubmV4QlN0YXJ0Q29kZUxlbmd0aCwgbmFsVW5pdCwgc2VpUGF5bG9hZHN9OiBFeHRyYWN0ZWREYXRhKTogbnVtYmVyIHtcbiAgICB0aGlzLnB1Ymxpc2hOYWxVbml0KGNvbnRleHQsIG5hbFVuaXQpO1xuICAgIHNlaVBheWxvYWRzPy5mb3JFYWNoKHNlaVBheWxvYWQgPT4gdGhpcy5oYW5kbGVTZWlQYXlsb2FkKGNvbnRleHQsIHNlaVBheWxvYWQpKTtcblxuICAgIHJldHVybiBuYWxVbml0LmRhdGEuYnl0ZUxlbmd0aCArIGFubmV4QlN0YXJ0Q29kZUxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VpUGF5bG9hZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHNlaVBheWxvYWQ6IFNlaVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLnB1Ymxpc2hTZWlQYXlsb2FkKGNvbnRleHQsIHNlaVBheWxvYWQpO1xuXG4gICAgc3dpdGNoIChzZWlQYXlsb2FkLnR5cGUpIHtcbiAgICAgIGNhc2UgU2VpUGF5bG9hZFR5cGUuVXNlckRhdGFVbnJlZ2lzdGVyZWQ6XG4gICAgICAgIHRoaXMuaGFuZGxlU2VpUGF5bG9hZFVzZXJEYXRhVW5yZWdpc3RlcmVkKGNvbnRleHQsIHNlaVBheWxvYWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VpUGF5bG9hZFVzZXJEYXRhVW5yZWdpc3RlcmVkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgc2VpUGF5bG9hZDogU2VpUGF5bG9hZCk6IHZvaWQge1xuICAgIGNvbnN0IHBheWxvYWRVdWlkID0gVWludDhBcnJheXMuZ2V0VXVpZFN0cmluZ0Zyb21VaW50OEFycmF5KHNlaVBheWxvYWQuZGF0YS5zdWJhcnJheSgwLCAxNikpO1xuICAgIGNvbnN0IHBheWxvYWREYXRhID0gc2VpUGF5bG9hZC5kYXRhLnN1YmFycmF5KDE2KTtcblxuICAgIHRoaXMucHVibGlzaFBheWxvYWQoY29udGV4dCwge1xuICAgICAgdXVpZDogcGF5bG9hZFV1aWQsXG4gICAgICBkYXRhOiBwYXlsb2FkRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwdWJsaXNoTmFsVW5pdChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIG5hbFVuaXQ6IE5hbFVuaXQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPE5hbFVuaXQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Lk5hbFVuaXQsIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBuYWxVbml0XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHB1Ymxpc2hTZWlQYXlsb2FkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgc2VpUGF5bG9hZDogU2VpUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyLnB1Ymxpc2g8U2VpUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuU2VpUGF5bG9hZCwge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IHNlaVBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGlzaFBheWxvYWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBwYXlsb2FkOiBFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IHBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5RW5kT2ZDaHVuayhjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPG51bGw+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LkVuZE9mQ2h1bmssIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBudWxsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3ROYWxVbml0QXRPZmZzZXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkRGF0YSB7XG4gICAgY29uc3QgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoID0gY2h1bmtbb2Zmc2V0ICsgMl0gPT09IDB4MDEgPyAzIDogNDtcbiAgICBjb25zdCBuYWxVbml0SGVhZGVySW5kZXggPSBvZmZzZXQgKyBhbm5leEJTdGFydENvZGVMZW5ndGg7XG4gICAgY29uc3QgbmFsVW5pdFR5cGUgPSBjaHVua1tuYWxVbml0SGVhZGVySW5kZXhdICYgMHgxZjtcbiAgICBsZXQgZXh0cmFjdGVkRGF0YTtcblxuICAgIHN3aXRjaCAobmFsVW5pdFR5cGUpIHtcbiAgICAgIGNhc2UgTmFsVW5pdFR5cGUuU2xpY2VMYXllck5vbklkckRhdGE6XG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlNsaWNlRGF0YVBhcnRpdGlvbkFMYXllcjpcbiAgICAgIGNhc2UgTmFsVW5pdFR5cGUuU2xpY2VEYXRhUGFydGl0aW9uQkxheWVyOlxuICAgICAgY2FzZSBOYWxVbml0VHlwZS5TbGljZURhdGFQYXJ0aXRpb25DTGF5ZXI6XG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlNsaWNlTGF5ZXJJZHJEYXRhOlxuICAgICAgICBleHRyYWN0ZWREYXRhID0gdGhpcy5fdmNsRXh0cmFjdGlvblN0cmF0ZWd5LmV4dHJhY3RWY2xOYWxVbml0KGNodW5rLCBuYWxVbml0SGVhZGVySW5kZXgpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlN1cHBsZW1lbnRhbEVuaGFuY2VtZW50SW5mb3JtYXRpb246XG4gICAgICAgIGV4dHJhY3RlZERhdGEgPSB0aGlzLmV4dHJhY3RTZWlOYWxVbml0KGNodW5rLCBuYWxVbml0SGVhZGVySW5kZXgpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBleHRyYWN0ZWREYXRhID0gdGhpcy5leHRyYWN0Tm9uVmNsTmFsVW5pdChjaHVuaywgbmFsVW5pdEhlYWRlckluZGV4KTtcblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoLFxuICAgICAgbmFsVW5pdDoge1xuICAgICAgICB0eXBlOiBuYWxVbml0VHlwZSxcbiAgICAgICAgZGF0YTogZXh0cmFjdGVkRGF0YS5uYWxVbml0RGF0YVxuICAgICAgfSxcbiAgICAgIHNlaVBheWxvYWRzOiBleHRyYWN0ZWREYXRhLnNlaVBheWxvYWRzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFNlaU5hbFVuaXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkTmFsVW5pdCB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IG9mZnNldCArIDE7XG4gICAgY29uc3Qgc2VpUGF5bG9hZHM6IFNlaVBheWxvYWRbXSA9IFtdO1xuXG4gICAgd2hpbGUgKFxuICAgICAgIVVpbnQ4QXJyYXlzLmlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlKEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuX3NlaVBheWxvYWQ0Qnl0ZUVuZENvZGUsIGNodW5rLCBjdXJyZW50SW5kZXgpXG4gICAgICAmJiAhVWludDhBcnJheXMuaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5fc2VpUGF5bG9hZDNCeXRlRW5kQ29kZSwgY2h1bmssIGN1cnJlbnRJbmRleClcbiAgICAgICYmIGN1cnJlbnRJbmRleCA8IGNodW5rLmJ5dGVMZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnN0IGV4dHJhY3RlZFNlaVBheWxvYWQgPSB0aGlzLmV4dHJhY3RTZWlQYXlsb2FkKGNodW5rLCBjdXJyZW50SW5kZXgpO1xuXG4gICAgICBzZWlQYXlsb2Fkcy5wdXNoKHtcbiAgICAgICAgZGF0YTogZXh0cmFjdGVkU2VpUGF5bG9hZC5wYXlsb2FkLFxuICAgICAgICB0eXBlOiBleHRyYWN0ZWRTZWlQYXlsb2FkLnBheWxvYWRUeXBlXG4gICAgICB9KTtcbiAgICAgIGN1cnJlbnRJbmRleCA9IGV4dHJhY3RlZFNlaVBheWxvYWQuZW5kSW5kZXg7XG4gICAgfVxuXG4gICAgY3VycmVudEluZGV4Kys7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCwgY3VycmVudEluZGV4KSxcbiAgICAgIHNlaVBheWxvYWRzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdE5vblZjbE5hbFVuaXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkTmFsVW5pdCB7XG4gICAgY29uc3QgbmV4dEFubmV4QlN0YXJ0Q29kZUluZGV4ID0gQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5maW5kQW5uZXhCU3RhcnRJbmRleEZyb21PZmZzZXQoY2h1bmssIG9mZnNldCwgY2h1bmsuYnl0ZUxlbmd0aCk7XG5cbiAgICByZXR1cm4ge25hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQsIG5leHRBbm5leEJTdGFydENvZGVJbmRleCl9O1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0U2VpUGF5bG9hZChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWRTZWlQYXlsb2FkIHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gb2Zmc2V0O1xuICAgIGxldCBmZkNvdW50ID0gMDtcblxuICAgIHdoaWxlIChjaHVua1tjdXJyZW50SW5kZXhdID09PSAweGZmKSB7XG4gICAgICBjdXJyZW50SW5kZXgrKztcbiAgICAgIGZmQ291bnQrKztcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkVHlwZSA9IGZmQ291bnQgKiAyNTUgKyBjaHVua1tjdXJyZW50SW5kZXhdO1xuXG4gICAgY3VycmVudEluZGV4Kys7XG4gICAgZmZDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoY2h1bmtbY3VycmVudEluZGV4XSA9PT0gMHhmZikge1xuICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgICBmZkNvdW50Kys7XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZFNpemUgPSBmZkNvdW50ICogMjU1ICsgY2h1bmtbY3VycmVudEluZGV4XTtcblxuICAgIGN1cnJlbnRJbmRleCsrO1xuXG4gICAgY29uc3QgZW5kSW5kZXggPSBjdXJyZW50SW5kZXggKyBFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMuZ2V0T2Zmc2V0V2l0aEV4cGFuZGVkRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzKGNodW5rLCBjdXJyZW50SW5kZXgsIHBheWxvYWRTaXplKTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXlsb2FkVHlwZSxcbiAgICAgIHBheWxvYWQ6IGNodW5rLnN1YmFycmF5KGN1cnJlbnRJbmRleCwgZW5kSW5kZXgpLFxuICAgICAgZW5kSW5kZXhcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmaW5kQW5uZXhCU3RhcnRJbmRleEZyb21PZmZzZXQoZGF0YTogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGluZGV4NCA9IFVpbnQ4QXJyYXlzLmZpbmRUYXJnZXRCeXRlU2VxdWVuY2VJbmRleEZyb21PZmZzZXQoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEI0Qnl0ZVN0YXJ0Q29kZSwgZGF0YSwgb2Zmc2V0LCByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCk7XG5cbiAgICBpZiAoaW5kZXg0ICE9PSByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCkge1xuICAgICAgcmV0dXJuIGluZGV4NDtcbiAgICB9XG5cbiAgICByZXR1cm4gVWludDhBcnJheXMuZmluZFRhcmdldEJ5dGVTZXF1ZW5jZUluZGV4RnJvbU9mZnNldChBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjNCeXRlU3RhcnRDb2RlLCBkYXRhLCBvZmZzZXQsIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMge1xuICBwdWJsaWMgc3RhdGljIGdldE9mZnNldFdpdGhFeHBhbmRlZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyhidWZmZXI6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyLCBudW1iZXJPZk5vbkVtdWxhdGlvblByZXZlbnRpb25CeXRlczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgbGVhZGluZ1plcm9CeXRlcyA9IDA7XG4gICAgbGV0IG51bWJlck9mQnl0ZXNWaXNpdGVkID0gMDtcbiAgICBsZXQgbnVtYmVyT2ZCeXRlc1RvU2VlayA9IG51bWJlck9mTm9uRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzO1xuXG4gICAgZm9yIChsZXQgaSA9IG9mZnNldDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKywgbnVtYmVyT2ZCeXRlc1Zpc2l0ZWQrKykge1xuICAgICAgaWYgKG51bWJlck9mQnl0ZXNUb1NlZWsgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChsZWFkaW5nWmVyb0J5dGVzID09PSAyICYmIGJ1ZmZlcltpXSA9PT0gMHgwMykge1xuICAgICAgICBsZWFkaW5nWmVyb0J5dGVzID0gMDtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJ1ZmZlcltpXSA9PT0gMHgwMCkge1xuICAgICAgICBsZWFkaW5nWmVyb0J5dGVzKys7XG4gICAgICB9IGVsc2UgaWYgKGxlYWRpbmdaZXJvQnl0ZXMgPiAwKSB7XG4gICAgICAgIGxlYWRpbmdaZXJvQnl0ZXMgPSAwO1xuICAgICAgfVxuXG4gICAgICBudW1iZXJPZkJ5dGVzVG9TZWVrLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bWJlck9mQnl0ZXNWaXNpdGVkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMoYnVmZmVyOiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgIGxldCBvdXRPZmZzZXQgPSAwO1xuICAgIGxldCBlYnNwT2Zmc2V0ID0gMDtcblxuICAgIGZvciAobGV0IHByZXZlbnRpb25CeXRlSWR4ID0gMjsgcHJldmVudGlvbkJ5dGVJZHggPCBidWZmZXIuYnl0ZUxlbmd0aDsgcHJldmVudGlvbkJ5dGVJZHgrKykge1xuICAgICAgaWYgKGJ1ZmZlcltwcmV2ZW50aW9uQnl0ZUlkeF0gPT09IDB4MDMgJiYgYnVmZmVyW3ByZXZlbnRpb25CeXRlSWR4IC0gMV0gPT09IDB4MDAgJiYgYnVmZmVyW3ByZXZlbnRpb25CeXRlSWR4IC0gMl0gPT09IDB4MDApIHtcbiAgICAgICAgb3V0cHV0LnNldChidWZmZXIuc3ViYXJyYXkoZWJzcE9mZnNldCwgcHJldmVudGlvbkJ5dGVJZHgpLCBvdXRPZmZzZXQpO1xuICAgICAgICBvdXRPZmZzZXQgKz0gcHJldmVudGlvbkJ5dGVJZHggLSBlYnNwT2Zmc2V0O1xuICAgICAgICBlYnNwT2Zmc2V0ID0gcHJldmVudGlvbkJ5dGVJZHggKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlYnNwT2Zmc2V0IDwgYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgIG91dHB1dC5zZXQoYnVmZmVyLnN1YmFycmF5KGVic3BPZmZzZXQpLCBvdXRPZmZzZXQpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQml0c3RyZWFtUmVhZGVyIGZyb20gJy4uLy4uLy4uL0JpdHN0cmVhbVJlYWRlcic7XG5pbXBvcnQgRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIGZyb20gJy4vRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzJztcblxuZW51bSBQaWNTdHJ1Y3Qge1xuICBQcm9ncmVzc2l2ZUZyYW1lID0gMCxcbiAgVG9wRmllbGQgPSAxLFxuICBCb3R0b21GaWVsZCA9IDIsXG4gIFRvcEZpZWxkQm90dG9tRmllbGQgPSAzLFxuICBCb3R0b21GaWVsZFRvcEZpZWxkID0gNCxcbiAgVG9wRmllbGRCb3R0b21GaWVsZFRvcEZpZWxkUmVwZWF0ZWQgPSA1LFxuICBCb3R0b21GaWVsZFRvcEZpZWxkQm90dG9tRmllbGRSZXBlYXRlZCA9IDYsXG4gIEZyYW1lRG91YmxpbmcgPSA3LFxuICBGcmFtZVRyaXBsaW5nID0gOFxufVxuXG5leHBvcnQgdHlwZSBQaWN0dXJlVGltaW5nUGFyc2luZ0NvbmZpZyA9IHtcbiAgcGljU3RydWN0UHJlc2VudEZsYWc6IGJvb2xlYW47XG59ICYgKFxuICB7XG4gICAgY3BiRHBiRGVsYXlzUHJlc2VudEZsYWc6IHRydWU7XG4gICAgY3BiUmVtb3ZhbERlbGF5TGVuZ3RoTWludXMxOiBudW1iZXI7XG4gICAgZHBiT3V0cHV0RGVsYXlMZW5ndGhNaW51czE6IG51bWJlcjtcbiAgfVxuICB8IHtcbiAgICBjcGJEcGJEZWxheXNQcmVzZW50RmxhZzogZmFsc2U7XG4gIH1cbik7XG5cbmV4cG9ydCB0eXBlIENsb2NrVGltZXN0YW1wID0ge1xuICBjdFR5cGU6IG51bWJlcjtcbiAgbnVpdEZpZWxkQmFzZWRGbGFnOiBib29sZWFuO1xuICBjb3VudGluZ1R5cGU6IG51bWJlcjtcbiAgZnVsbFRpbWVzdGFtcEZsYWc6IGJvb2xlYW47XG4gIGRpc2NvbnRpbnVpdHlGbGFnOiBib29sZWFuO1xuICBjbnREcm9wcGVkRmxhZzogYm9vbGVhbjtcbiAgbkZyYW1lczogbnVtYmVyO1xuICBzZWNvbmRzPzogbnVtYmVyO1xuICBtaW51dGVzPzogbnVtYmVyO1xuICBob3Vycz86IG51bWJlcjtcbiAgdGltZU9mZnNldD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFBpY3R1cmVUaW1pbmcgPSB7XG4gIHBpY1N0cnVjdDogdW5kZWZpbmVkIHwge1xuICAgIG51bUNsb2NrVFM6IG51bWJlcjtcbiAgICBjbG9ja1RpbWVzdGFtcHM6IEFycmF5PHtcbiAgICAgIGNsb2NrVGltZXN0YW1wRmxhZzogZmFsc2U7XG4gICAgfSB8IHtcbiAgICAgIGNsb2NrVGltZXN0YW1wRmxhZzogdHJ1ZTtcbiAgICAgIGNsb2NrVGltZXN0YW1wOiBDbG9ja1RpbWVzdGFtcDtcbiAgICB9PjtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBpY3R1cmVUaW1pbmdQYXJzZXIge1xuICBwdWJsaWMgcGFyc2UoZGF0YTogVWludDhBcnJheSwgY29uZmlnOiBQaWN0dXJlVGltaW5nUGFyc2luZ0NvbmZpZyk6IFBpY3R1cmVUaW1pbmcge1xuICAgIGNvbnN0IGJpdHN0cmVhbVJlYWRlciA9IG5ldyBCaXRzdHJlYW1SZWFkZXIoRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzLnJlbW92ZUVtdWxhdGlvblByZXZlbnRpb25CeXRlcyhkYXRhKSk7XG4gICAgY29uc3QgcGljdHVyZVRpbWluZzogUGljdHVyZVRpbWluZyA9IHtwaWNTdHJ1Y3Q6IHVuZGVmaW5lZH07XG5cbiAgICBpZiAoY29uZmlnLmNwYkRwYkRlbGF5c1ByZXNlbnRGbGFnKSB7XG4gICAgICAvLyBXZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhlIENQQiBhbmQgRFBCIGRlbGF5cyBhdCB0aGUgbW9tZW50XG4gICAgICBiaXRzdHJlYW1SZWFkZXIuc2tpcEJpdHMoY29uZmlnLmNwYlJlbW92YWxEZWxheUxlbmd0aE1pbnVzMSArIDEpO1xuICAgICAgYml0c3RyZWFtUmVhZGVyLnNraXBCaXRzKGNvbmZpZy5kcGJPdXRwdXREZWxheUxlbmd0aE1pbnVzMSArIDEpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcucGljU3RydWN0UHJlc2VudEZsYWcpIHtcbiAgICAgIGNvbnN0IG51bUNsb2NrVFMgPSB0aGlzLmNvbnZlcnRQaWNTdHJ1Y3RUb051bUNsb2NrVFMoYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDQpKTtcblxuICAgICAgcGljdHVyZVRpbWluZy5waWNTdHJ1Y3QgPSB7XG4gICAgICAgIG51bUNsb2NrVFMsXG4gICAgICAgIGNsb2NrVGltZXN0YW1wczogW11cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGljdHVyZVRpbWluZy5waWNTdHJ1Y3QubnVtQ2xvY2tUUzsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNsb2NrVGltZXN0YW1wRmxhZyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMTtcblxuICAgICAgICBpZiAoY2xvY2tUaW1lc3RhbXBGbGFnKSB7XG4gICAgICAgICAgY29uc3QgY2xvY2tUaW1lc3RhbXA6IENsb2NrVGltZXN0YW1wID0ge1xuICAgICAgICAgICAgY3RUeXBlOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMiksXG4gICAgICAgICAgICBudWl0RmllbGRCYXNlZEZsYWc6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMSxcbiAgICAgICAgICAgIGNvdW50aW5nVHlwZTogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDUpLFxuICAgICAgICAgICAgZnVsbFRpbWVzdGFtcEZsYWc6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMSxcbiAgICAgICAgICAgIGRpc2NvbnRpbnVpdHlGbGFnOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDEsXG4gICAgICAgICAgICBjbnREcm9wcGVkRmxhZzogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxLFxuICAgICAgICAgICAgbkZyYW1lczogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDgpXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjbG9ja1RpbWVzdGFtcC5mdWxsVGltZXN0YW1wRmxhZykge1xuICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuc2Vjb25kcyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg2KTtcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wLm1pbnV0ZXMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNik7XG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5ob3VycyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg1KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kc0ZsYWcgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDE7XG5cbiAgICAgICAgICAgIGlmIChzZWNvbmRzRmxhZykge1xuICAgICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5zZWNvbmRzID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDYpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG1pbnV0ZXNGbGFnID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxO1xuXG4gICAgICAgICAgICAgIGlmIChtaW51dGVzRmxhZykge1xuICAgICAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wLm1pbnV0ZXMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNik7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBob3Vyc0ZsYWcgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDE7XG5cbiAgICAgICAgICAgICAgICBpZiAoaG91cnNGbGFnKSB7XG4gICAgICAgICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5ob3VycyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg1KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbG9ja1RpbWVzdGFtcC50aW1lT2Zmc2V0ID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDI0KTtcblxuICAgICAgICAgIHBpY3R1cmVUaW1pbmcucGljU3RydWN0LmNsb2NrVGltZXN0YW1wcy5wdXNoKHtcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wRmxhZyxcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGljdHVyZVRpbWluZy5waWNTdHJ1Y3QuY2xvY2tUaW1lc3RhbXBzLnB1c2goe2Nsb2NrVGltZXN0YW1wRmxhZzogZmFsc2V9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwaWN0dXJlVGltaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UGljU3RydWN0VG9OdW1DbG9ja1RTKHBpY1N0cnVjdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHBpY1N0cnVjdCkge1xuICAgICAgY2FzZSBQaWNTdHJ1Y3QuUHJvZ3Jlc3NpdmVGcmFtZTpcbiAgICAgIGNhc2UgUGljU3RydWN0LlRvcEZpZWxkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuQm90dG9tRmllbGQ6XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgY2FzZSBQaWNTdHJ1Y3QuVG9wRmllbGRCb3R0b21GaWVsZDpcbiAgICAgIGNhc2UgUGljU3RydWN0LkJvdHRvbUZpZWxkVG9wRmllbGQ6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5GcmFtZURvdWJsaW5nOlxuICAgICAgICByZXR1cm4gMjtcbiAgICAgIGNhc2UgUGljU3RydWN0LlRvcEZpZWxkQm90dG9tRmllbGRUb3BGaWVsZFJlcGVhdGVkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuQm90dG9tRmllbGRUb3BGaWVsZEJvdHRvbUZpZWxkUmVwZWF0ZWQ6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5GcmFtZVRyaXBsaW5nOlxuICAgICAgICByZXR1cm4gMztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgVWludDhBcnJheXMgZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGFuZy9VaW50OEFycmF5cyc7XG5pbXBvcnQgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciBmcm9tICcuLi9Bbm5leEJCeXRlU3RyZWFtUGFyc2VyJztcbmltcG9ydCBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSwge0V4dHJhY3RlZE5hbFVuaXR9IGZyb20gJy4vSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3knO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSBpbXBsZW1lbnRzIElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RydW5jYXRlZFZjbE5hbFVuaXRCeXRlTGVuZ3RoID0gMzI7XG5cbiAgcHVibGljIGV4dHJhY3RWY2xOYWxVbml0KGNodW5rOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IEV4dHJhY3RlZE5hbFVuaXQge1xuICAgIGNvbnN0IG5leHRQb3RlbnRpYWw0Qnl0ZVN0YXJ0Q29kZUluZGV4ID0gb2Zmc2V0ICsgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEI0Qnl0ZVN0YXJ0Q29kZS5ieXRlTGVuZ3RoICsgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kuX3RydW5jYXRlZFZjbE5hbFVuaXRCeXRlTGVuZ3RoO1xuXG4gICAgaWYgKFVpbnQ4QXJyYXlzLmlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlKEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCNEJ5dGVTdGFydENvZGUsIGNodW5rLCBuZXh0UG90ZW50aWFsNEJ5dGVTdGFydENvZGVJbmRleCkpIHtcbiAgICAgIHJldHVybiB7bmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCArIEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCNEJ5dGVTdGFydENvZGUuYnl0ZUxlbmd0aCwgbmV4dFBvdGVudGlhbDRCeXRlU3RhcnRDb2RlSW5kZXgpfTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0UG90ZW50aWFsM0J5dGVTdGFydENvZGVJbmRleCA9IG9mZnNldCArIEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCM0J5dGVTdGFydENvZGUuYnl0ZUxlbmd0aCArIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5Ll90cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aDtcblxuICAgIGlmIChVaW50OEFycmF5cy5pc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZShBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjNCeXRlU3RhcnRDb2RlLCBjaHVuaywgbmV4dFBvdGVudGlhbDNCeXRlU3RhcnRDb2RlSW5kZXgpKSB7XG4gICAgICByZXR1cm4ge25hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQgKyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjNCeXRlU3RhcnRDb2RlLmJ5dGVMZW5ndGgsIG5leHRQb3RlbnRpYWwzQnl0ZVN0YXJ0Q29kZUluZGV4KX07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtuYWxVbml0RGF0YTogY2h1bmsuc3ViYXJyYXkob2Zmc2V0KX07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIgZnJvbSAnLi4vQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcic7XG5pbXBvcnQgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3ksIHtFeHRyYWN0ZWROYWxVbml0fSBmcm9tICcuL0lWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFuaWxsYVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgaW1wbGVtZW50cyBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSB7XG4gIHB1YmxpYyBleHRyYWN0VmNsTmFsVW5pdChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWROYWxVbml0IHtcbiAgICBjb25zdCBuZXh0QW5uZXhCU3RhcnRDb2RlSW5kZXggPSBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmZpbmRBbm5leEJTdGFydEluZGV4RnJvbU9mZnNldChjaHVuaywgb2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKTtcblxuICAgIHJldHVybiB7bmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCwgbmV4dEFubmV4QlN0YXJ0Q29kZUluZGV4KX07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBIMjY0Qml0c3RyZWFtIGZyb20gJy4uL2NvZGVjL2gyNjQvSDI2NEJpdHN0cmVhbSc7XG5pbXBvcnQgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciBmcm9tICcuLi9jb2RlYy9oMjY0L3BhcnNlL0FubmV4QkJ5dGVTdHJlYW1QYXJzZXInO1xuaW1wb3J0IFZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IGZyb20gJy4uL2NvZGVjL2gyNjQvcGFyc2UvdmNsL1ZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcbmltcG9ydCBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSBmcm9tICcuLi9jb2RlYy9oMjY0L3BhcnNlL3ZjbC9QaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSc7XG5pbXBvcnQgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyBmcm9tICcuLi9lbmNvZGluZy8yMDIzL1BoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMnO1xuaW1wb3J0IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgZnJvbSAnLi9IMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyJztcbmltcG9ydCBQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciBmcm9tICcuL1BoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0c3RyZWFtRGVjb2RlcnMge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIoKTogSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciB7XG4gICAgY29uc3QgZGVjb2RlckV2ZW50UHVibGlzaGVyID0gbmV3IEV2ZW50UHVibGlzaGVyKCk7XG4gICAgY29uc3QgYml0c3RyZWFtID0gbmV3IEgyNjRCaXRzdHJlYW0oZGVjb2RlckV2ZW50UHVibGlzaGVyKTtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcihkZWNvZGVyRXZlbnRQdWJsaXNoZXIsIG5ldyBWYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSgpKTtcblxuICAgIHJldHVybiBuZXcgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcihkZWNvZGVyRXZlbnRQdWJsaXNoZXIsIGJpdHN0cmVhbSwgcGFyc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIoKTogUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIge1xuICAgIGNvbnN0IGRlY29kZXJFdmVudFB1Ymxpc2hlciA9IG5ldyBFdmVudFB1Ymxpc2hlcigpO1xuICAgIGNvbnN0IGJpdHN0cmVhbSA9IG5ldyBIMjY0Qml0c3RyZWFtKGRlY29kZXJFdmVudFB1Ymxpc2hlcik7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIoZGVjb2RlckV2ZW50UHVibGlzaGVyLCBuZXcgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3koKSk7XG4gICAgY29uc3QgaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciA9IG5ldyBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyKGRlY29kZXJFdmVudFB1Ymxpc2hlciwgYml0c3RyZWFtLCBwYXJzZXIpO1xuICAgIGNvbnN0IGVuY29kaW5nID0gbmV3IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMoZGVjb2RlckV2ZW50UHVibGlzaGVyKTtcblxuICAgIHJldHVybiBuZXcgUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIoaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciwgZW5jb2RpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JpdHN0cmVhbURlY29kZXJzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCBmcm9tICcuLi8uLi9ldmVudC9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudH0gZnJvbSAnLi4vLi4vZXZlbnQvZXZlbnRzL0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCBIMjY0Qml0c3RyZWFtIGZyb20gJy4uL2NvZGVjL2gyNjQvSDI2NEJpdHN0cmVhbSc7XG5pbXBvcnQgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciBmcm9tICcuLi9jb2RlYy9oMjY0L3BhcnNlL0FubmV4QkJ5dGVTdHJlYW1QYXJzZXInO1xuaW1wb3J0IElCaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4vSUJpdHN0cmVhbURlY29kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIGltcGxlbWVudHMgSUJpdHN0cmVhbURlY29kZXI8SDI2NEJpdHN0cmVhbT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JpdHN0cmVhbTogSDI2NEJpdHN0cmVhbTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFyc2VyOiBBbm5leEJCeXRlU3RyZWFtUGFyc2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICBjb25zdHJ1Y3RvcihldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXIsIGJpdHN0cmVhbTogSDI2NEJpdHN0cmVhbSwgcGFyc2VyOiBBbm5leEJCeXRlU3RyZWFtUGFyc2VyKSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIgPSBldmVudFB1Ymxpc2hlcjtcbiAgICB0aGlzLl9iaXRzdHJlYW0gPSBiaXRzdHJlYW07XG4gICAgdGhpcy5fcGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9iaXRzdHJlYW0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9wYXJzZXIpO1xuICB9XG5cbiAgZ2V0IGJpdHN0cmVhbSgpOiBIMjY0Qml0c3RyZWFtIHtcbiAgICByZXR1cm4gdGhpcy5fYml0c3RyZWFtO1xuICB9XG5cbiAgcHVibGljIGRlY29kZShlbmNvZGVkTWVkaWFTdHJlYW1DaHVuazogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFVpbnQ4QXJyYXk+KTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxVaW50OEFycmF5PihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5FbmNvZGVkVmlkZW9TdHJlYW1DaHVuaywgZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bmspO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50IGZyb20gJy4uLy4uL2V2ZW50L0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgSDI2NEJpdHN0cmVhbSBmcm9tICcuLi9jb2RlYy9oMjY0L0gyNjRCaXRzdHJlYW0nO1xuaW1wb3J0IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMgZnJvbSAnLi4vZW5jb2RpbmcvMjAyMy9QaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzJztcbmltcG9ydCBJc29CbWZmU2VnbWVudCBmcm9tICcuLi9jb250YWluZXIvaXNvYm1mZi9zZWdtZW50L0lzb0JtZmZTZWdtZW50JztcbmltcG9ydCBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4vSDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlcic7XG5pbXBvcnQgSUJpdHN0cmVhbURlY29kZXIgZnJvbSAnLi9JQml0c3RyZWFtRGVjb2Rlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyIGltcGxlbWVudHMgSUJpdHN0cmVhbURlY29kZXI8SDI2NEJpdHN0cmVhbT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9oMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyOiBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbmNvZGluZzogUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMztcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKGgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXI6IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIsIGVuY29kaW5nOiBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzKSB7XG4gICAgdGhpcy5faDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciA9IGgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXI7XG4gICAgdGhpcy5fZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICB0aGlzLl9kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9oMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fZW5jb2RpbmcpO1xuICB9XG5cbiAgZ2V0IGJpdHN0cmVhbSgpOiBIMjY0Qml0c3RyZWFtIHtcbiAgICByZXR1cm4gdGhpcy5faDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlci5iaXRzdHJlYW07XG4gIH1cblxuICBwdWJsaWMgZGVjb2RlKGVuY29kZWRNZWRpYVN0cmVhbUNodW5rOiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8VWludDhBcnJheT4pOiB2b2lkIHtcbiAgICB0aGlzLl9oMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyLmRlY29kZShlbmNvZGVkTWVkaWFTdHJlYW1DaHVuayk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9FbWJlZGRlZERhdGEob25EZWNvZGVkTWVkaWFDaHVuazogKGVtYmVkZGVkRGF0YUV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8SXNvQm1mZlNlZ21lbnQ+KSA9PiB2b2lkLCB0cmFja0lkPzogc3RyaW5nKTogRGlzcG9zYWJsZSB7XG4gICAgaWYgKHRyYWNrSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbmNvZGluZy5zdWJzY3JpYmVUb0VtYmVkZGVkRGF0YShkZWNvZGVkTWVkaWFDaHVua0V2ZW50ID0+IHtcbiAgICAgICAgaWYgKGRlY29kZWRNZWRpYUNodW5rRXZlbnQudHJhY2tJZCA9PT0gdHJhY2tJZCkge1xuICAgICAgICAgIG9uRGVjb2RlZE1lZGlhQ2h1bmsoZGVjb2RlZE1lZGlhQ2h1bmtFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9lbmNvZGluZy5zdWJzY3JpYmVUb0VtYmVkZGVkRGF0YShvbkRlY29kZWRNZWRpYUNodW5rKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vLi4vLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTmFsVW5pdFR5cGUgZnJvbSAnLi4vLi4vY29kZWMvaDI2NC9uYWxVbml0L05hbFVuaXRUeXBlJztcbmltcG9ydCBOYWxVbml0IGZyb20gJy4uLy4uL2NvZGVjL2gyNjQvbmFsVW5pdC9OYWxVbml0JztcbmltcG9ydCBJc29CbWZmU2VnbWVudCBmcm9tICcuLi8uLi9jb250YWluZXIvaXNvYm1mZi9zZWdtZW50L0lzb0JtZmZTZWdtZW50JztcbmltcG9ydCBFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQgZnJvbSAnLi4vLi4vRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkJztcbmltcG9ydCBFdmVudFB1Ymxpc2hlciBmcm9tICcuLi8uLi8uLi9ldmVudC9FdmVudFB1Ymxpc2hlcic7XG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0fSBmcm9tICcuLi8uLi8uLi9ldmVudC9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvZXZlbnRzL0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcblxuY29uc3Qgbm9vcCA9ICgpOiB2b2lkID0+IHVuZGVmaW5lZDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90cnVuY2F0ZWRWY2xOYWxVbml0RGF0YUJ5dGVMZW5ndGggPSAzMjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BoZW5peFZjbEVtYmVkZGVkRGF0YVV1aWQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BoZW5peEluaXRpYWxpemF0aW9uU2VnbWVudFV1aWQgPSAnNTExZTIyYmQtMzRjMC00Y2VlLWI2YzMtM2M0ZDQwNzYyMmM3JztcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBlY3RlZFBheWxvYWRVdWlkOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5kT2ZDaHVua0hhbmRsZXJzQnlUcmFja0lkOiBNYXA8c3RyaW5nLCAodHJhY2tJZDogc3RyaW5nKSA9PiB2b2lkPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuYWJsZVdhcm5pbmdMb2dXaGVuVmNsRW1iZWRkZWREYXRhTm90Rm91bmQ6IERpc3Bvc2FibGUgPSBuZXcgRGlzcG9zYWJsZSh0aGlzLmVuYWJsZVdhcm5pbmdMb2dXaGVuVmNsRW1iZWRkZWREYXRhTm90Rm91bmQuYmluZCh0aGlzKSk7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyKSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIgPSBldmVudFB1Ymxpc2hlcjtcbiAgICB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmFkZChQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl9waGVuaXhWY2xFbWJlZGRlZERhdGFVdWlkKTtcbiAgICB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmFkZChQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl9waGVuaXhJbml0aWFsaXphdGlvblNlZ21lbnRVdWlkKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb1BheWxvYWRFdmVudHMoKSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9QYXlsb2FkU3Vic2NyaXB0aW9uRXZlbnRzKCkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLnN1YnNjcmliZVRvTmFsVW5pdEV2ZW50cygpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb0VtYmVkZGVkRGF0YShoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxJc29CbWZmU2VnbWVudD4pID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9lbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kLmRpc3Bvc2UoKTtcblxuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8RW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5QYXlsb2FkLCAoe2NvbnRleHQsIGRhdGE6IHBheWxvYWR9KSA9PiB7XG4gICAgICBzd2l0Y2ggKHBheWxvYWQudXVpZCkge1xuICAgICAgICBjYXNlIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3BoZW5peEluaXRpYWxpemF0aW9uU2VnbWVudFV1aWQ6XG4gICAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICB0eXBlOiAnSW5pdGlhbGl6YXRpb24nLFxuICAgICAgICAgICAgICBkYXRhOiBwYXlsb2FkLmRhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4VmNsRW1iZWRkZWREYXRhVXVpZDpcbiAgICAgICAgICBoYW5kbGVyKHtcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdNZWRpYScsXG4gICAgICAgICAgICAgIGRhdGE6IHBheWxvYWQuZGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQuY2xlYXIoKTtcbiAgICB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVdhcm5pbmdMb2dXaGVuVmNsRW1iZWRkZWREYXRhTm90Rm91bmQoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9FbmNvZGVkVmlkZW9TdHJlYW1DaHVua0V2ZW50cygpKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb0VuZE9mQ2h1bmtFdmVudHMoKSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvUGF5bG9hZFN1YnNjcmlwdGlvbkV2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPHN0cmluZz4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZFN1YnNjcmlwdGlvbiwgKHtkYXRhOiBwYXlsb2FkVXVpZH0pID0+IHRoaXMuX2V4cGVjdGVkUGF5bG9hZFV1aWQuYWRkKHBheWxvYWRVdWlkKSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmtFdmVudHMoKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxVaW50OEFycmF5PihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5FbmNvZGVkVmlkZW9TdHJlYW1DaHVuaywgdGhpcy5hcm1Mb2dnaW5nTm9WY2xFbWJlZGRlZERhdGFGb3VuZC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9OYWxVbml0RXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8TmFsVW5pdD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuTmFsVW5pdCwgdGhpcy5oYW5kbGVOYWxVbml0RXZlbnQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5hbFVuaXRFdmVudCh7Y29udGV4dCwgZGF0YTogbmFsVW5pdH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxOYWxVbml0Pik6IHZvaWQge1xuICAgIGlmIChuYWxVbml0LnR5cGUgPiBOYWxVbml0VHlwZS5TbGljZUxheWVySWRyRGF0YSB8fCBuYWxVbml0LmRhdGEuYnl0ZUxlbmd0aCA8IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3RydW5jYXRlZFZjbE5hbFVuaXREYXRhQnl0ZUxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVibGlzaFZjbEVtYmVkZGVkUGF5bG9hZChjb250ZXh0LCB7XG4gICAgICB1dWlkOiBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl9waGVuaXhWY2xFbWJlZGRlZERhdGFVdWlkLFxuICAgICAgZGF0YTogdGhpcy5leHRyYWN0VmNsRW1iZWRkZWREYXRhKG5hbFVuaXQpXG4gICAgfSk7XG4gICAgdGhpcy5kaXNhcm1Mb2dnaW5nTm9WY2xFbWJlZGRlZERhdGFGb3VuZChjb250ZXh0LnRyYWNrSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0VmNsRW1iZWRkZWREYXRhKG5hbFVuaXQ6IE5hbFVuaXQpOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gbmFsVW5pdC5kYXRhLnN1YmFycmF5KFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3RydW5jYXRlZFZjbE5hbFVuaXREYXRhQnl0ZUxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIHB1Ymxpc2hWY2xFbWJlZGRlZFBheWxvYWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBwYXlsb2FkOiBFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IHBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXJtTG9nZ2luZ05vVmNsRW1iZWRkZWREYXRhRm91bmQoe2NvbnRleHR9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8VWludDhBcnJheT4pOiB2b2lkIHtcbiAgICB0aGlzLl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQuc2V0KGNvbnRleHQudHJhY2tJZCwgdGhpcy5sb2dXYXJuaW5nVmNsRW1iZWRkZWREYXRhTm90Rm91bmQuYmluZCh0aGlzLCBjb250ZXh0KSk7XG4gIH1cblxuICBwcml2YXRlIGRpc2FybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kKHRyYWNrSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2VuZE9mQ2h1bmtIYW5kbGVyc0J5VHJhY2tJZC5zZXQodHJhY2tJZCwgbm9vcCk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1dhcm5pbmdWY2xFbWJlZGRlZERhdGFOb3RGb3VuZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBbJXNdIE5vIFZDTCBlbWJlZGRlZCBkYXRhIGZvdW5kIGluIGFuIGVuY29kZWQgdmlkZW8gc3RyZWFtIGNodW5rIGZyb20gdHJhY2sgd2l0aCBpZCBbJXNdJywgY29udGV4dC5zdHJlYW1JZCwgY29udGV4dC5jb250ZXh0SWQsIGNvbnRleHQudHJhY2tJZCk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvRW5kT2ZDaHVua0V2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPG51bGw+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LkVuZE9mQ2h1bmssIHRoaXMuaGFuZGxlRW5kT2ZFbmNvZGVkVmlkZW9TdHJlYW1DaHVuay5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRW5kT2ZFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayh7Y29udGV4dH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxudWxsPik6IHZvaWQge1xuICAgIGNvbnN0IGVuZE9mQ2h1bmtFdmVudEhhbmRsZXIgPSB0aGlzLl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQuZ2V0KGNvbnRleHQudHJhY2tJZCkgYXMgKCkgPT4gdm9pZDtcblxuICAgIGVuZE9mQ2h1bmtFdmVudEhhbmRsZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9QYXlsb2FkRXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8RW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5QYXlsb2FkLCB0aGlzLmhhbmRsZVBheWxvYWRFdmVudC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUGF5bG9hZEV2ZW50KHtjb250ZXh0LCBkYXRhOiBwYXlsb2FkfTogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4pIHtcbiAgICBpZiAoIXRoaXMuX2V4cGVjdGVkUGF5bG9hZFV1aWQuaGFzKHBheWxvYWQudXVpZCkpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KHRoaXMubG9nV2FybmluZ1VuZXhwZWN0ZWRQYXlsb2FkVXVpZFJlY2VpdmVkT25jZS5iaW5kKHRoaXMsIGNvbnRleHQsIHBheWxvYWQudXVpZCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9nV2FybmluZ1VuZXhwZWN0ZWRQYXlsb2FkVXVpZFJlY2VpdmVkT25jZShjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHBheWxvYWRVdWlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBbJXNdIFslc10gUmVjZWl2ZWQgdW5leHBlY3RlZCBwYXlsb2FkIHdpdGggdXVpZCBbJXNdJywgY29udGV4dC5zdHJlYW1JZCwgY29udGV4dC5jb250ZXh0SWQsIGNvbnRleHQudHJhY2tJZCwgcGF5bG9hZFV1aWQpO1xuICAgIHRoaXMuX2V4cGVjdGVkUGF5bG9hZFV1aWQuYWRkKHBheWxvYWRVdWlkKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhfSBmcm9tICcuL0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudEVtaXR0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IFNldDwoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KSA9PiB2b2lkPiA9IG5ldyBTZXQoKTtcblxuICBwdWJsaWMgc3Vic2NyaWJlPEV2ZW50RGF0YSBleHRlbmRzIEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YT4obGlzdGVuZXI6IChldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuYWRkKGxpc3RlbmVyIGFzIDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RXZlbnREYXRhPikgPT4gdm9pZCk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGUoKCkgPT4gdGhpcy5fbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lciBhcyA8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0PEV2ZW50RGF0YSBleHRlbmRzIEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YT4oZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuY2xlYXIoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhfSBmcm9tICcuL0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuL0V2ZW50RW1pdHRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50UHVibGlzaGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRFbWl0dGVyczogTWFwPHN0cmluZyB8IG51bWJlciwgRXZlbnRFbWl0dGVyPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVyczogU2V0PDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQ+ID0gbmV3IFNldCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICBwdWJsaWMgb25FdmVudFdpdGhOb1N1YnNjcmliZXIob25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVyOiAoZXZlbnRUeXBlOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQpID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzLmFkZChvbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXIpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlKCgpID0+IHRoaXMuX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnMuZGVsZXRlKG9uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcikpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZTxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgY29uc3QgZW1pdHRlciA9IHRoaXMuX2V2ZW50RW1pdHRlcnMuZ2V0KGV2ZW50VHlwZSkgfHwgdGhpcy5jcmVhdGVFbWl0dGVyKGV2ZW50VHlwZSk7XG4gICAgY29uc3QgZGlzcG9zYWJsZUxpc3RlbmVyID0gZW1pdHRlci5zdWJzY3JpYmUoaGFuZGxlcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZUxpc3RlbmVyKTtcblxuICAgIHJldHVybiBkaXNwb3NhYmxlTGlzdGVuZXI7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pOiB2b2lkIHtcbiAgICBjb25zdCBlbWl0dGVyID0gdGhpcy5fZXZlbnRFbWl0dGVycy5nZXQoZXZlbnRUeXBlKTtcblxuICAgIGlmICghZW1pdHRlcikge1xuICAgICAgdGhpcy5fb25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gaGFuZGxlcihldmVudFR5cGUsIGV2ZW50KSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbWl0dGVyLmVtaXQ8RXZlbnREYXRhPihldmVudCk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRFbWl0dGVycy5jbGVhcigpO1xuICAgIHRoaXMuX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnMuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW1pdHRlcihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlcik6IEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHRoaXMuX2V2ZW50RW1pdHRlcnMuc2V0KGV2ZW50VHlwZSwgZW1pdHRlcik7XG5cbiAgICByZXR1cm4gZW1pdHRlcjtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCB7XG4gIEVuY29kZWRWaWRlb1N0cmVhbUNodW5rID0gMCxcbiAgTmFsVW5pdCxcbiAgU2VpUGF5bG9hZCxcbiAgUGF5bG9hZCxcbiAgUGF5bG9hZFN1YnNjcmlwdGlvbixcbiAgRW5kT2ZDaHVua1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlTW9kZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVNb2RlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUpOiBCaXRyYXRlTW9kZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZU1vZGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuTm9ybWFsOlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLkZvcmNlOlxuICAgICAgICByZXR1cm4gJ0ZvcmNlJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZU1vZGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxFbmRQb2ludD4ocmVzb2x2ZUVuZFBvaW50UHJvbWlzZSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gR2xvYmFsU2NvcGUuc3Vic2NyaWJlKGdsb2JhbFNjb3BlID0+IHtcbiAgICAgICAgaWYgKCFnbG9iYWxTY29wZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBnbG9iYWxTY29wZS5VUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgICAgICAudGhlbihyZXNvbHZlRW5kUG9pbnRQcm9taXNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpOiBVUkwpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAodXJsIGluIERpc2NvdmVyeS5fY2FjaGUpIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG4gICAgY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9PT0gY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgICAgICB9XG4gICAgICB9LCBkaXNjb3ZlcnlDYWNoZUludGVydmFsKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaTogVVJMKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAodXJsIGluIERpc2NvdmVyeS5fY2FjaGUpIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dCkpXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBsZXQgZmFpbGVkUmVxdWVzdHMgPSAwO1xuICAgIGNvbnN0IHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZFJlcXVlc3RzID49IGVuZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGBEaXNjb3Zlcnkgb2YgWyR7ZW5kUG9pbnRzLmxlbmd0aH1dIGVuZHBvaW50cyBmcm9tIFske3VybH1dIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmdgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICBmYWlsZWRSZXF1ZXN0cysrO1xuXG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgndmVyc2lvbicsIHNka1ZlcnNpb24pO1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdpbnRlbnRpb25zJywgaW50ZW50aW9ucyk7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ18nLCBgJHtEYXRlLm5vdygpfWApO1xuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gJy8nKSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeVVyaSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVN1Y2Nlc3NSZXNwb25zZSxcbiAgSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QsXG4gIElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0XG59IGZyb20gJy4uL2FwaS9TdWJzY3JpYmUnO1xuaW1wb3J0IHtJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0LCBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZX0gZnJvbSAnLi4vYXBpL1NldFJlbW90ZURlc2NyaXB0aW9uJztcbmltcG9ydCB7SURlc3Ryb3lTdHJlYW1SZXF1ZXN0LCBJRGVzdHJveVN0cmVhbVJlc3BvbnNlfSBmcm9tICcuLi9hcGkvRGVzdHJveVN0cmVhbSc7XG5pbXBvcnQge0lBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCwgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZX0gZnJvbSAnLi4vYXBpL0FkZEljZUNhbmRpZGF0ZXMnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGUsIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBCaXRyYXRlTW9kZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlTW9kZU1hcHBpbmcnO1xuaW1wb3J0IEJpdHJhdGVTdGF0ZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlU3RhdGVNYXBwaW5nJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7XG4gIElQdWJsaXNoU3VjY2Vzc1Jlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA3O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZm9yYmlkZGVuLXRhZycgfCAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlU3VjY2Vzc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogJ29rJztcbiAgc3RyZWFtOiBJU3RyZWFtO1xuICBsYWc6IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVGYWlsdXJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiAnbm8tc3RyZWFtJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAnZ2VvLXJlc3RyaWN0ZWQnIHwgJ2dlby1ibG9ja2VkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmb3JiaWRkZW4tdGFnJyB8ICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCcgfCAnZmFpbGVkJztcbn1cblxuZXhwb3J0IHR5cGUgSVB1Ymxpc2hTdWNjZXNzUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6ICdvayc7XG4gIHN0cmVhbTogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBJUHVibGlzaEZhaWx1cmVSZXNwb25zZUluaXQgPSB7XG4gIHN0YXR1czogJ25vdC1mb3VuZCcgfCAnZ2VvLXJlc3RyaWN0ZWQnIHwgJ2dlby1ibG9ja2VkJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZvcmJpZGRlbi10YWcnIHwgJ21pc3NpbmctY2hhbm5lbC1vci1yb29tLWlkJyB8ICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCcgfCAnZmFpbGVkJztcbn07XG5cbmludGVyZmFjZSBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzO1xuICBzZXNzaW9uRGVzY3JpcHRpb24/OiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5pbnRlcmZhY2UgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXM7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kUG9pbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRW5kUG9pbnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcm91bmRUcmlwVGltZTogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQgfCBudWxsLCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVN1Y2Nlc3NSZXNwb25zZUluaXQgfCBJU3Vic2NyaWJlRmFpbHVyZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU3Vic2NyaWJlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzdWJzY3JpYmUgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgcHVibGlzaChuYW1lOiBzdHJpbmcsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCB8IG51bGwsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJUHVibGlzaFN1Y2Nlc3NSZXNwb25zZUluaXQgfCBJUHVibGlzaEZhaWx1cmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtPy5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtT25Vbm1vdW50KHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvcj8uc2VuZEJlYWNvbikge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKHVybCwgZm9ybURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgndHlwZScsICdodHRwJyk7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ3ZlcnNpb24nLCBzZGtWZXJzaW9uKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgnaW50ZW50aW9ucycsIGludGVudGlvbnMpO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCdfJywgYCR7RGF0ZS5ub3coKX1gKTtcblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBQdWJsaXNoU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwNjpcbiAgICAgICAgcmV0dXJuICdtaXNzaW5nLWNoYW5uZWwtb3Itcm9vbS1pZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4gJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJztcbiAgICAgIGNhc2UgNDE1OlxuICAgICAgICByZXR1cm4gJ2ZvcmJpZGRlbi10YWcnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA0MDk6XG4gICAgICAgIHJldHVybiAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnO1xuICAgICAgY2FzZSA0MTU6XG4gICAgICAgIHJldHVybiAnZm9yYmlkZGVuLXRhZyc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVTdWNjZXNzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlU3VjY2Vzc1Jlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlU3VjY2Vzc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBzdHJlYW06IHtcbiAgICAgICAgdGVuYW5jeSxcbiAgICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICAgIH0sXG4gICAgICBsYWc6IGRhdGEubGFnXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElQdWJsaXNoU3VjY2Vzc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVB1Ymxpc2hTdWNjZXNzUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFN1Y2Nlc3NSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgc3RyZWFtOiB7XG4gICAgICAgIHRlbmFuY3ksXG4gICAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCc7XG5pbXBvcnQgU2VpUGF5bG9hZCBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvbmFsVW5pdC9TZWlQYXlsb2FkJztcbmltcG9ydCBTZWlQYXlsb2FkVHlwZSBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvbmFsVW5pdC9TZWlQYXlsb2FkVHlwZSc7XG5pbXBvcnQgUGljdHVyZVRpbWluZ1BhcnNlciwge1BpY3R1cmVUaW1pbmdQYXJzaW5nQ29uZmlnfSBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvUGljdHVyZVRpbWluZ1BhcnNlcic7XG5pbXBvcnQgQml0c3RyZWFtRGVjb2RlcnMgZnJvbSAnLi4vZGVjb2RlL2JpdHN0cmVhbS9kZWNvZGVycy9CaXRzdHJlYW1EZWNvZGVycyc7XG5pbXBvcnQgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2RlY29kZXJzL0gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCBmcm9tICcuLi9kZWNvZGUvZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb259IGZyb20gJy4vRnJhbWVUaW1pbmdJbmZvcm1hdGlvbic7XG5cbnR5cGUgRnJhbWVUaW1pbmcgPSB7XG4gIG1pZDogc3RyaW5nO1xuICB0cmFja0lkOiBzdHJpbmc7XG4gIHJlY2VpdmVUaW1lc3RhbXA6IERhdGU7XG4gIGRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uPzogRGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb247XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9GUkFNRV9USU1JTkdfRU5UUklFUyA9IDYwICogMzA7IC8vIDMwcyAqIDYwZnBzID0gMTgwMCBlbnRyaWVzXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JpdHN0cmVhbURlY29kZXI6IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgPSBCaXRzdHJlYW1EZWNvZGVycy5jcmVhdGVIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wOiBNYXA8c3RyaW5nLCBGcmFtZVRpbWluZz4gPSBuZXcgTWFwKCk7XG4gIC8vIFdvcmtzIHdpdGggbXVsdGktYml0cmF0ZSBzdHJlYW1zIGFzIHdlIGFyZSBpbiBjb250cm9sIG9mIGhvdyB3ZSBnZW5lcmF0ZSB0aGUgcGljdHVyZSB0aW1pbmcgU0VJIHBheWxvYWRzXG4gIC8vIE1pZ2h0IG5vdCBhbHdheXMgd29yayB3aXRoIHNpbmdsZS1iaXRyYXRlIHN0cmVhbXMgd2hlbiB0aGUgY3BiRHBiRGVsYXlzUHJlc2VudEZsYWcgaXMgdHJ1ZVxuICAvLyBUT0RPIChOSCk6IE1vbml0b3IgU1BTIHRvIGR5bmFtaWNhbGx5IHNldCB0aGVzZSBmbGFnc1xuICBwcml2YXRlIHJlYWRvbmx5IF9waWN0dXJpbmdUaW1pbmdQYXJzaW5nQ29uZmlnOiBQaWN0dXJlVGltaW5nUGFyc2luZ0NvbmZpZyA9IHtcbiAgICBjcGJEcGJEZWxheXNQcmVzZW50RmxhZzogZmFsc2UsXG4gICAgcGljU3RydWN0UHJlc2VudEZsYWc6IHRydWVcbiAgfTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGljdHVyZVRpbWluZ1BhcnNlcjogUGljdHVyZVRpbWluZ1BhcnNlciA9IG5ldyBQaWN0dXJlVGltaW5nUGFyc2VyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9jdXJyZW50UGxheWJhY2tTdGF0ZTogJ3BsYXlpbmcnIHwgJ3BhdXNlZCcgfCAnc3RhbGxlZCcgfCAnZW5kZWQnIHwgJ2Vycm9yJyB8ICd3YWl0aW5nJyA9ICd3YWl0aW5nJztcbiAgcHJpdmF0ZSBfYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQsIGZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCkge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgPSBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9iaXRzdHJlYW1EZWNvZGVyKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuY2xlYXIoKSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcyk7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLnNldHVwVmlkZW9FdmVudExpc3RlbmVycyh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQuc3Vic2NyaWJlKHZpZGVvRWxlbWVudCA9PiB7XG4gICAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZXR1cFZpZGVvRXZlbnRMaXN0ZW5lcnModmlkZW9FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICBpZiAodGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlKSB7XG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYml0c3RyZWFtRGVjb2Rlci5iaXRzdHJlYW0uc3Vic2NyaWJlVG9TZWlQYXlsb2FkVHlwZShTZWlQYXlsb2FkVHlwZS5QaWN0dXJlVGltaW5nLCB0aGlzLm9uUGljdHVyZVRpbWluZ0V4dHJhY3RlZC5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByb2Nlc3NGcmFtZShzdHJlYW1JZDogc3RyaW5nLCBtaWQ6IHN0cmluZywgdHJhY2tJZDogc3RyaW5nLCBmcmFtZTogUlRDRW5jb2RlZFZpZGVvRnJhbWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmcmFtZVRpbWluZyA9IHtcbiAgICAgIG1pZCxcbiAgICAgIHRyYWNrSWQsXG4gICAgICByZWNlaXZlVGltZXN0YW1wOiBuZXcgRGF0ZSgpXG4gICAgfTtcblxuICAgIHRoaXMucmVtb3ZlRnJhbWVUaW1pbmdzRXhjZWVkaW5nTWF4Q2FwYWNpdHkoKTtcblxuICAgIGNvbnN0IHJ0cFRpbWVzdGFtcCA9IGZyYW1lLnRpbWVzdGFtcC50b1N0cmluZygxMCk7XG5cbiAgICBpZiAodGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuaGFzKHJ0cFRpbWVzdGFtcCkpIHtcbiAgICAgIC8vIFRPRE8gKE5IKTogQWRkIGEgdGhyb3R0bGVkIGxvZyBpbmRpY2F0aW5nIHRoYXQgYSBmcmFtZSB0aW1pbmcgd2FzIG92ZXJ3cml0dGVuXG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuc2V0KHJ0cFRpbWVzdGFtcCwgZnJhbWVUaW1pbmcpO1xuXG4gICAgLy8gVE9ETyAoTkgpOiBUaGF0IHNob3VsZCBiZSBkb25lIHdpdGhpbiBhIFdvcmtlclxuICAgIC8vIE5vdCBwb3NzaWJsZSB5ZXQgYmVjYXVzZSBpdCB3b24ndCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHNpbmsgYW5kIHRyYW5zZm9ybSBwaXBlbGluZSAod2UgY2Fubm90IGR5bmFtaWNhbGx5IGluamVjdCBjb2RlIGluIGEgd29ya2VyKVxuICAgIC8vIFdlIG5lZWQgdG8gcmVmaW5lIHRoZSBhcmNoaXRlY3R1cmUgdG8gbWFrZSBpdCBwb3NzaWJsZVxuICAgIHRoaXMuX2JpdHN0cmVhbURlY29kZXIuZGVjb2RlKHtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgIHRyYWNrSWQsXG4gICAgICAgIGNvbnRleHRJZDogcnRwVGltZXN0YW1wXG4gICAgICB9LFxuICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkoZnJhbWUuZGF0YSlcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIG9uUGljdHVyZVRpbWluZ0V4dHJhY3RlZCh7Y29udGV4dDoge2NvbnRleHRJZDogcnRwVGltZXN0YW1wLCB0cmFja0lkfSwgZGF0YTogc2VpUGF5bG9hZH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxTZWlQYXlsb2FkPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBpY3R1cmVUaW1pbmcgPSB0aGlzLl9waWN0dXJlVGltaW5nUGFyc2VyLnBhcnNlKHNlaVBheWxvYWQuZGF0YSwgdGhpcy5fcGljdHVyaW5nVGltaW5nUGFyc2luZ0NvbmZpZyk7XG4gICAgY29uc3QgY2xvY2tUaW1lc3RhbXAgPSBwaWN0dXJlVGltaW5nLnBpY1N0cnVjdD8uY2xvY2tUaW1lc3RhbXBzLmZpbmQoaSA9PiBpLmNsb2NrVGltZXN0YW1wRmxhZyA9PT0gdHJ1ZSk/LmNsb2NrVGltZXN0YW1wO1xuXG4gICAgaWYgKCFjbG9ja1RpbWVzdGFtcCkge1xuICAgICAgLy8gVE9ETyAoTkgpOiBBZGQgYSB0aHJvdHRsZWQgbG9nIGluZGljYXRpbmcgdGhhdCBubyBjbG9jayB0aW1lc3RhbXAgd2FzIGZvdW5kXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmcmFtZVRpbWluZyA9IHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmdldChydHBUaW1lc3RhbXApO1xuXG4gICAgaWYgKCFmcmFtZVRpbWluZykge1xuICAgICAgLy8gVE9ETyAoTkgpOiBBZGQgYSB0aHJvdHRsZWQgbG9nIGluZGljYXRpbmcgdGhhdCBubyBmcmFtZSB0aW1pbmcgd2FzIGZvdW5kXG4gICAgICAvLyBFeHBlY3RlZCBpZiB0aGUgY2lyY3VsYXIgZnJhbWUgdGltaW5ncyBidWZmZXIgaXMgZnVsbCBhbmQgYSBmcmFtZSBoYXMgYmVlbiBkcm9wcGVkXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogRGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSB7XG4gICAgICBtaWQ6IGZyYW1lVGltaW5nLm1pZCxcbiAgICAgIHRyYWNrSWQsXG4gICAgICBraW5kOiAndmlkZW8nLFxuICAgICAgY29kZWM6ICdIMjY0JyxcbiAgICAgIHRpbWVjb2RlOiB7XG4gICAgICAgIGhvdXJzOiBjbG9ja1RpbWVzdGFtcC5ob3VycyA/PyBudWxsLFxuICAgICAgICBtaW51dGVzOiBjbG9ja1RpbWVzdGFtcC5taW51dGVzID8/IG51bGwsXG4gICAgICAgIHNlY29uZHM6IGNsb2NrVGltZXN0YW1wLnNlY29uZHMgPz8gbnVsbCxcbiAgICAgICAgZnJhbWVzOiBjbG9ja1RpbWVzdGFtcC5uRnJhbWVzLFxuICAgICAgICBpc0ZyYW1lRHJvcDogY2xvY2tUaW1lc3RhbXAuY291bnRpbmdUeXBlID4gMVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVRpbWVzdGFtcDogbnVsbCxcbiAgICAgIGluZ2VzdFRpbWVzdGFtcDogbnVsbCxcbiAgICAgIGVuY29kZVRpbWVzdGFtcDogbnVsbCxcbiAgICAgIHRyYW5zY29kZVRpbWVzdGFtcDogbnVsbCxcbiAgICAgIHJlY2VpdmVUaW1lc3RhbXA6IG5ldyBEYXRlKGZyYW1lVGltaW5nLnJlY2VpdmVUaW1lc3RhbXApLFxuICAgICAgcGxheWJhY2tTdGF0ZTogdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGVcbiAgICB9O1xuXG4gICAgZnJhbWVUaW1pbmcuZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjtcblxuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uLnZhbHVlID0gZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb247XG4gIH1cblxuICBwcml2YXRlIHZpZGVvRnJhbWVDYWxsYmFjayhub3c6IERPTUhpZ2hSZXNUaW1lU3RhbXAsIG1ldGFkYXRhOiBWaWRlb0ZyYW1lQ2FsbGJhY2tNZXRhZGF0YSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlLXJlZ2lzdGVyIHRoZSBjYWxsYmFjayB0byBlbnN1cmUgaXQncyBjYWxsZWQgYWdhaW5cbiAgICB0aGlzLmFybVZpZGVvRnJhbWVDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgcnRwVGltZXN0YW1wID0gbWV0YWRhdGEucnRwVGltZXN0YW1wO1xuXG4gICAgaWYgKCFydHBUaW1lc3RhbXApIHtcbiAgICAgIC8vIFRPRE8gKE5IKTogQWRkIGEgdGhyb3R0bGVkIGxvZyBpbmRpY2F0aW5nIHRoYXQgbm8gUlRQIHRpbWVzdGFtcCB3YXMgZm91bmRcbiAgICAgIC8vIFRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBpdCdzIG51bGxhYmxlLCBidXQgd2UgYWx3YXlzIGhhdmUgaXQgaW4gYSBXZWJSVEMgY29udGV4dFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZXN0YW1wc1RvRGVsZXRlOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbdGltZXN0YW1wLCBmcmFtZVRpbWluZ10gb2YgdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXApIHtcbiAgICAgIGlmIChwYXJzZUludCh0aW1lc3RhbXAsIDEwKSA+IHJ0cFRpbWVzdGFtcCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQucmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uLnZhbHVlID0ge1xuICAgICAgICAgIC4uLmZyYW1lVGltaW5nLmRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uISxcbiAgICAgICAgICByZW5kZXJUaW1lc3RhbXA6IG5ldyBEYXRlKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBub3cpLFxuICAgICAgICAgIHBsYXliYWNrU3RhdGU6ICdwbGF5aW5nJ1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aW1lc3RhbXBzVG9EZWxldGUucHVzaCh0aW1lc3RhbXApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGltZXN0YW1wIG9mIHRpbWVzdGFtcHNUb0RlbGV0ZSkge1xuICAgICAgdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuZGVsZXRlKHRpbWVzdGFtcCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVGcmFtZVRpbWluZ3NFeGNlZWRpbmdNYXhDYXBhY2l0eSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50c1RvRGVsZXRlID0gdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuc2l6ZSAtIChIMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIuTUFYX0ZSQU1FX1RJTUlOR19FTlRSSUVTIC0gMSk7XG5cbiAgICBpZiAoZWxlbWVudHNUb0RlbGV0ZSA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5rZXlzKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzVG9EZWxldGU7IGkrKykge1xuICAgICAgY29uc3Qga2V5VG9EZWxldGUgPSBpdGVyYXRvci5uZXh0KCkudmFsdWU7XG5cbiAgICAgIHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmRlbGV0ZShrZXlUb0RlbGV0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFZpZGVvRXZlbnRMaXN0ZW5lcnModmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgb25QbGF5aW5nID0gKCkgPT4gdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGUgPSAncGxheWluZyc7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIG9uUGxheWluZyk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHZpZGVvRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgb25QbGF5aW5nKSkpO1xuXG4gICAgY29uc3Qgb25QYXVzZSA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ3BhdXNlZCc7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCBvblBhdXNlKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgb25QYXVzZSkpKTtcblxuICAgIGNvbnN0IG9uU3RhbGxlZCA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ3N0YWxsZWQnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCBvblN0YWxsZWQpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB2aWRlb0VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIG9uU3RhbGxlZCkpKTtcblxuICAgIGNvbnN0IG9uV2FpdGluZyA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ3dhaXRpbmcnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dhaXRpbmcnLCBvbldhaXRpbmcpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB2aWRlb0VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2FpdGluZycsIG9uV2FpdGluZykpKTtcblxuICAgIGNvbnN0IG9uRW5kZWQgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICdlbmRlZCc7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBvbkVuZGVkKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgb25FbmRlZCkpKTtcblxuICAgIGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICdlcnJvcic7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcikpKTtcblxuICAgIHRoaXMuYXJtVmlkZW9GcmFtZUNhbGxiYWNrKCk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9hcm1lZFZpZGVvRnJhbWVDYWxsYmFja0lkKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZT8uY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrKHRoaXMuX2FybWVkVmlkZW9GcmFtZUNhbGxiYWNrSWQpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXJtVmlkZW9GcmFtZUNhbGxiYWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlPy5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKHRoaXMudmlkZW9GcmFtZUNhbGxiYWNrLmJpbmQodGhpcykpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtTdHJlYW1TZXR1cExpc3RlbmVyfSBmcm9tICcuLi8uLi9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lcic7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuLi8uLi9ydGMvU2RwUGFyc2VyJztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBSdGNDb25uZWN0aW9uTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IEVuZFBvaW50LCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCc7XG5pbXBvcnQgSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyIGZyb20gJy4uL2ZyYW1lVGltaW5nL0gyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlcic7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMnO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuXG5jb25zdCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCA9IDEwMDtcbmNvbnN0IGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQgPSAzMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1JlYWxUaW1lU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gcGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQgPSBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0ID0gZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZywgbGlzdGVuT25TdHJlYW1TZXR1cDogU3RyZWFtU2V0dXBMaXN0ZW5lciwgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQ6IEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVxdWlyZXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZVxuICAgICAgfHwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlXG4gICAgICB8fCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3JlY3Zvbmx5JywgcmVxdWlyZXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpXG4gICAgICAgIC50aGVuKCh7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYWxPZmZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBsb2NhbE9mZmVyLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgY29uc3Qge3N0YXR1c30gPSByZXNwb25zZTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gdW5kZWZpbmVkIDtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgZmFpbGVkIHdpdGggc3RhdHVzIFslc10nLFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3N0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbiBhcyBSVENDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDogdW5kZWZpbmVkIHwgbnVtYmVyO1xuICAgICAgICAgICAgbGV0IGNhbmNlbERpc2NvdmVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRpc2NvdmVyeUNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10gPSBbXTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuc2VuZExvY2FsQ2FuZGlkYXRlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlLmNhbmRpZGF0ZSAmJiBlLmNhbmRpZGF0ZS5jYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goZS5jYW5kaWRhdGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIXN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWU/LmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JJc09uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgYXMgbmV2ZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCkpKTtcblxuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9udHJhY2sgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZTogUlRDUGVlckNvbm5lY3Rpb25FdmVudE1hcFsndHJhY2snIHwgJ2FkZHN0cmVhbSddKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoJ3N0cmVhbXMnIGluIGUpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKTtcbiAgICAgICAgICAgICAgfSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dElkKSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgYXMgRW5kUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBlbmRQb2ludC5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uIGFzIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlcXVpcmVzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zICYmIHBlZXJDb25uZWN0aW9uPy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24/LnNkcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uID0gbmV3IFNkcFBhcnNlcihwZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlcnMgPSBwZWVyQ29ubmVjdGlvbi5nZXRSZWNlaXZlcnMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7ZGlzcG9zYWJsZXMsIGVuY29kZWRWaWRlb0ZyYW1lfSA9IEluc2VydGFibGVTdHJlYW1zLmNvbmZpZ3VyZUVuY29kZWRTdHJlYW1QaXBlbGluZShtZWRpYVN0cmVhbSwgcmVjZWl2ZXJzLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaywgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24udmlkZW9Db2RlYywgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24uYXVkaW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWlyZXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24udmlkZW9Db2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCdcbiAgICAgICAgICAgICAgICAgICYmICh0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWUgfHwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMudmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIgPSBuZXcgSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyKHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChmcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlcik7XG5cbiAgICAgICAgICAgICAgICAgIG1lZGlhU3RyZWFtLmdldFZpZGVvVHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdGggYXJlIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQsIGJ1dCB0aGUgdHlwZSBzeXN0ZW0gbWFrZXMgdGhlbSBudWxsYWJsZSwgc28gd2UgaGF2ZSB0byBhc3NlcnQgdGhlIHByZXNlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXIgPSByZWNlaXZlcnMuZmlsdGVyKHJlY2VpdmVyID0+IHJlY2VpdmVyLnRyYWNrID09PSB0cmFjaylbMF07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gUGxhdGZvcm0gc3VwcG9ydGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gc2hvdWxkIGFsc28gc3VwcG9ydCBnZXRUcmFuc2NlaXZlcnNcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaWQgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldFRyYW5zY2VpdmVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBwZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKS5maWx0ZXIodHJhbnNjZWl2ZXIgPT4gdHJhbnNjZWl2ZXIucmVjZWl2ZXIgPT09IHJlY2VpdmVyKVswXT8ubWlkXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlY2VpdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBTa2lwcGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIHRyYWNrIFslc10gYmVjYXVzZSBubyByZWNlaXZlciB3YXMgZm91bmQnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgdHJhY2suaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIFNraXBwaW5nIGZyYW1lIHRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdHJhY2sgWyVzXSBiZWNhdXNlIG5vIG1pZCB3YXMgZm91bmQnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgdHJhY2suaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGVuY29kZWRWaWRlb0ZyYW1lLnN1YnNjcmliZShlbmNvZGVkVmlkZW9GcmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5jb2RlZFZpZGVvRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIucHJvY2Vzc0ZyYW1lKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBtaWQsIGVuY29kZWRWaWRlb0ZyYW1lLnRyYWNrLmlkLCBlbmNvZGVkVmlkZW9GcmFtZS5jaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmlzRW5hYmxlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChkaXNwb3NhYmxlcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt0cmFuc2Zvcm1lZFN0cmVhbSwgZGlzcG9zYWJsZXN9ID0gSW5zZXJ0YWJsZVN0cmVhbXMuY29uZmlndXJlSW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybWF0aW9uKG1lZGlhU3RyZWFtLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZXMpO1xuICAgICAgICAgICAgICAgIG1lZGlhU3RyZWFtID0gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlPy5yb3VuZFRyaXBUaW1lID8gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDQgOiAwKTtcblxuICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yU3RhdGlzdGljU3Vic2NyaXB0aW9uID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghc3RhdGlzdGljcykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JJc09uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gQXVkaW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLmF1ZGlvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWRlb1RyYWNrRmFpbGVkICYmIEdsb2JhbFNjb3BlLnZhbHVlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JJc09uTGluZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuT2ZmbGluZTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcblxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuT2ZmbGluZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA/IENoYW5uZWxTdGF0ZS5QbGF5aW5nIDogQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIHN0YXRlIHJlc3RvcmVkIHRvIFslc10gYWZ0ZXIgcmVjb25uZWN0aW5nJywgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCBSZWFsVGltZVN0cmVhbSBmcm9tICcuL1JlYWxUaW1lU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtaW5nJyk7XG5cbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0b2tlbkNhcGFiaWxpdGllcyA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLmNhcGFiaWxpdGllcztcblxuICAgIGlmICh0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnb24tZGVtYW5kJykpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IE9uLURlbWFuZCBTdHJlYW0gcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBMaXZlIFN0cmVhbSBwbGF5YmFjay4nKTtcbiAgICAgIGNoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWFsVGltZVN0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgZXh0ZW5kcyBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCk6IGJvb2xlYW4gfCBQcm9taXNlTGlrZTxib29sZWFuPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5jb2RlZFN0cmVhbVNpbmsge1xuICBzdGF0aWMgdmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luazxUIGV4dGVuZHMgUlRDRW5jb2RlZEF1ZGlvRnJhbWUgfCBSVENFbmNvZGVkVmlkZW9GcmFtZT4obW9kZTogJ2F1ZGlvJyB8ICd2aWRlbycsIGl0ZW06IElFbmNvZGVkU3RyZWFtU2luazxUPikge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gdHlwZS4gRm91bmQgWyR7dHlwZW9mIGl0ZW19XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSAyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gRW5jb2RlZCBTdHJlYW0gU2luayBmdW5jdGlvbiBwYXJhbWV0ZXIgbGVuZ3RoLiBFeHBlY3RlZCAyLiBGb3VuZCBbJHtpdGVtLmxlbmd0aH1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiAnb2snXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RlZFN0cmVhbVNpbmsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCB7U3Vycm9nYXRlRnJhbWVUeXBlLCBTa2lwRnJhbWV9IGZyb20gJy4vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcic7XG5pbXBvcnQgV29ya2VyVHJhbnNmb3JtU3RyZWFtLCB7Rm9yY2VJbnZhbGlkRnJhbWVQb3N0TWVzc2FnZX0gZnJvbSAnLi9UcmFuc2Zvcm1TdHJlYW0ud29ya2VyJztcblxudHlwZSBNZWRpYVN0cmVhbVRyYWNrS2luZCA9ICd2aWRlbycgfCAnYXVkaW8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSVENFbmNvZGVkRnJhbWU8VCBleHRlbmRzIFJUQ0VuY29kZWRWaWRlb0ZyYW1lIHwgUlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHtcbiAgdHJhY2s6IE1lZGlhU3RyZWFtVHJhY2s7XG4gIGNodW5rOiBUO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIHN0YXRpYyBjb25maWd1cmVFbmNvZGVkU3RyZWFtUGlwZWxpbmUoXG4gICAgc3RyZWFtOiBNZWRpYVN0cmVhbSxcbiAgICByZWNlaXZlcnM6IFJUQ1J0cFJlY2VpdmVyW10sXG4gICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZCwgLy8gQ2FuIGJlIHVuZGVmaW5lZCB3aGVuIHRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5IGEgc2lua1xuICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQsIC8vIENhbiBiZSB1bmRlZmluZWQgd2hlbiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhIHNpbmtcbiAgICB2aWRlb0NvZGVjOiBzdHJpbmcsXG4gICAgYXVkaW9Db2RlYzogc3RyaW5nXG4gICk6IHtcbiAgICBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gICAgZW5jb2RlZFZpZGVvRnJhbWU6IFN1YmplY3Q8SVJUQ0VuY29kZWRGcmFtZTxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCBudWxsPjtcbiAgICBlbmNvZGVkQXVkaW9GcmFtZTogU3ViamVjdDxJUlRDRW5jb2RlZEZyYW1lPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IG51bGw+O1xuICB9IHtcbiAgICBjb25zdCBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICBjb25zdCBlbmNvZGVkVmlkZW9GcmFtZSA9IG5ldyBTdWJqZWN0PElSVENFbmNvZGVkRnJhbWU8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgZW5jb2RlZEF1ZGlvRnJhbWUgPSBuZXcgU3ViamVjdDxJUlRDRW5jb2RlZEZyYW1lPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IG51bGw+KG51bGwpO1xuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSByZWNlaXZlcnMuZmlsdGVyKHJlY2VpdmUgPT4gcmVjZWl2ZS50cmFjayA9PT0gdHJhY2spWzBdO1xuICAgICAgY29uc3Qga2luZDogTWVkaWFTdHJlYW1UcmFja0tpbmQgPSB0cmFjay5raW5kIGFzIE1lZGlhU3RyZWFtVHJhY2tLaW5kO1xuXG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICAgICAgY29uc3QgbXVzdFNpbmsgPSAhIWVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG5cbiAgICAgICAgICAvLyBGaXJlZm94IGFuZCBTYWZhcmlcbiAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IFdvcmtlclRyYW5zZm9ybVN0cmVhbSgpO1xuXG4gICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXN5bmMoZXZlbnQ6IE1lc3NhZ2VFdmVudDxGb3JjZUludmFsaWRGcmFtZVBvc3RNZXNzYWdlPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPj4pID0+IHtcbiAgICAgICAgICAgICAgZW5jb2RlZFZpZGVvRnJhbWUudmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgdHJhY2ssXG4gICAgICAgICAgICAgICAgY2h1bms6IGV2ZW50LmRhdGEuY2h1bmtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAobXVzdFNpbmsgJiYgIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGV2ZW50LmRhdGEuY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtmb3JjZUludmFsaWRGcmFtZTogdHJ1ZX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZWNlaXZlci50cmFuc2Zvcm0gPSBuZXcgUlRDUnRwU2NyaXB0VHJhbnNmb3JtKHdvcmtlciwge1xuICAgICAgICAgICAgICBraW5kOiB0cmFjay5raW5kLFxuICAgICAgICAgICAgICBjb2RlYzogdmlkZW9Db2RlYyxcbiAgICAgICAgICAgICAgbXVzdFNpbmtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaHJvbWl1bSAoQ2hyb21lLCBFZGdlLCBPcGVyYSwgLi4uKVxuICAgICAgICAgIGNvbnN0IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkVmlkZW9GcmFtZSwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+ID0gYXN5bmMoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgIGVuY29kZWRWaWRlb0ZyYW1lLnZhbHVlID0ge1xuICAgICAgICAgICAgICB0cmFjayxcbiAgICAgICAgICAgICAgY2h1bmtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChtdXN0U2luaykge1xuICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSkge1xuICAgICAgICAgICAgICAgIGxldCBzdXJyb2dhdGU6IFN1cnJvZ2F0ZUZyYW1lVHlwZTtcblxuICAgICAgICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xuICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUodmlkZW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKHZpZGVvQ29kZWMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdXJyb2dhdGUgPT09IFNraXBGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBzdXJyb2dhdGUgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWModmlkZW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyh2aWRlb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMhKCk7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgICAgIGNvbnN0IG11c3RTaW5rID0gISFlbmNvZGVkQXVkaW9TdHJlYW1TaW5rO1xuXG4gICAgICAgICAgLy8gRmlyZWZveCBhbmQgU2FmYXJpXG4gICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0oKTtcblxuICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGFzeW5jKGV2ZW50OiBNZXNzYWdlRXZlbnQ8Rm9yY2VJbnZhbGlkRnJhbWVQb3N0TWVzc2FnZTxSVENFbmNvZGVkQXVkaW9GcmFtZT4+KSA9PiB7XG4gICAgICAgICAgICAgIGVuY29kZWRBdWRpb0ZyYW1lLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgIHRyYWNrLFxuICAgICAgICAgICAgICAgIGNodW5rOiBldmVudC5kYXRhLmNodW5rXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaWYgKG11c3RTaW5rICYmICFhd2FpdCBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rKHRyYWNrLCBldmVudC5kYXRhLmNodW5rKSkge1xuICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7Zm9yY2VJbnZhbGlkRnJhbWU6IHRydWV9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmVjZWl2ZXIudHJhbnNmb3JtID0gbmV3IFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSh3b3JrZXIsIHtcbiAgICAgICAgICAgICAga2luZDogdHJhY2sua2luZCxcbiAgICAgICAgICAgICAgY29kZWM6IGF1ZGlvQ29kZWMsXG4gICAgICAgICAgICAgIG11c3RTaW5rXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvUHVtcGVyID0gbmV3IEF1ZGlvKCk7XG5cbiAgICAgICAgICAgIGF1ZGlvUHVtcGVyLnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpb1B1bXBlcik7XG5cbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENocm9taXVtIChDaHJvbWUsIEVkZ2UsIE9wZXJhLCAuLi4pXG4gICAgICAgICAgY29uc3QgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRBdWRpb0ZyYW1lLCBSVENFbmNvZGVkQXVkaW9GcmFtZT4gPSBhc3luYyhjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgZW5jb2RlZEF1ZGlvRnJhbWUudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRyYWNrLFxuICAgICAgICAgICAgICBjaHVua1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG11c3RTaW5rKSB7XG4gICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZEF1ZGlvU3RyZWFtU2luayh0cmFjaywgY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoYXVkaW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMhKCk7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoa2luZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zYWJsZXMsXG4gICAgICBlbmNvZGVkVmlkZW9GcmFtZSxcbiAgICAgIGVuY29kZWRBdWRpb0ZyYW1lXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb25maWd1cmVJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24oc3RyZWFtOiBNZWRpYVN0cmVhbSwgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkLCBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZCk6IHt0cmFuc2Zvcm1lZFN0cmVhbTogTWVkaWFTdHJlYW07IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdH0ge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgY29uc3QgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICBjb25zdCBraW5kOiBNZWRpYVN0cmVhbVRyYWNrS2luZCA9IHRyYWNrLmtpbmQgYXMgTWVkaWFTdHJlYW1UcmFja0tpbmQ7XG5cbiAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgICAgICBpZiAodmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFZpZGVvRnJhbWUsIFZpZGVvRnJhbWU+ID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sodHJhY2ssIGNodW5rLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHZpZGVvVHJhY2sgPSB0cmFjayBhcyBNZWRpYVN0cmVhbVZpZGVvVHJhY2s7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IHZpZGVvVHJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiB2aWRlb1RyYWNrLmtpbmR9KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5yZW1vdmVUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdhdWRpbyc6IHtcbiAgICAgICAgICBpZiAoYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPEF1ZGlvRGF0YSwgQXVkaW9EYXRhPiA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKHRyYWNrLCBjaHVuaywgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhdWRpb1RyYWNrID0gdHJhY2sgYXMgTWVkaWFTdHJlYW1BdWRpb1RyYWNrO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiBhdWRpb1RyYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogYXVkaW9UcmFjay5raW5kfSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgICAgICAgICAgY29uc3QgYXVkaW9QdW1wZXIgPSBuZXcgQXVkaW8oKTtcblxuICAgICAgICAgICAgbWVkaWFTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgICAgYXVkaW9QdW1wZXIuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLnJlbW92ZVRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGtpbmQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLFxuICAgICAgZGlzcG9zYWJsZXNcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VCBleHRlbmRzIEF1ZGlvRGF0YSB8IFZpZGVvRnJhbWU+IHtcbiAgICAodHJhY2s6IE1lZGlhU3RyZWFtVHJhY2ssIGNodW5rOiBULCBjb250cm9sbGVyOiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcjxUPik6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhY2tUcmFuc2Zvcm0ge1xuICBzdGF0aWMgdmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgZXh0ZW5kcyBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPihtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQ+KSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDMuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBjb25zdCBTa2lwRnJhbWUgPSBTeW1ib2woKTtcblxuZXhwb3J0IHR5cGUgU3Vycm9nYXRlRnJhbWVUeXBlID0gQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQgfCB0eXBlb2YgU2tpcEZyYW1lO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzU2FmYXJpID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzTW9iaWxlQ2hyb21lID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQW5kcm9pZENocm9tZSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmlzQW5kcm9pZDtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NpbmdsZVplcm9CeXRlID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDBdKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYyA9IHtPUFVTOiBuZXcgVWludDhBcnJheShbMHg2OCwgMHgwNywgMHhkOSwgMHhhYiwgMHhiYywgMHg3OSwgMHg4NywgMHhhYiwgMHg4ZSwgMHg0YSwgMHgxNCwgMHhmMywgMHhhNywgMHgxYywgMHhmMiwgMHg5YSwgMHg3YSwgMHg0NSwgMHhhNywgMHgyZCwgMHg0NCwgMHgyNSwgMHg3NCwgMHg0YywgMHhhZCwgMHgxNiwgMHhiMywgMHgwZSwgMHg1MSwgMHg1NywgMHhlYSwgMHhlNywgMHhhZCwgMHgyYSwgMHgzOCwgMHhjZSwgMHgzM10pfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYyA9IHtcbiAgICBIMjY0OiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4ZjQsIDB4MDAsIDB4MGEsIDB4OTEsIDB4OWIsIDB4MmIsIDB4ZjEsIDB4ZjEsIDB4ZjgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDcsIDB4ODksIDB4MTIsIDB4Y2IsIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4ZWIsIDB4ZTMsIDB4YzQsIDB4NDgsIDB4NDQsIC8vIFBpY3R1cmUgcGFyYW10ZXIgc2V0XG4gICAgICAvKiAqLyAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDgyLCAweDAwLCAweDNmLCAweDcwLCAweDIzLCAweDg2LCAweGU2LCAweGQxLCAweDgwLCAweDA5LCAweGFmLCAweDBhLCAweDQxLCAweDY2LCAweDZiLCAweDU0LCAweDQ2LCAweGZiLCAweDcxLCAweGQ5LCAweDdmLCAweGZmLCAweGZmLCAweGY5XSksIC8vIFNsaWNlIGxheWVyOiBpZHIgZGF0YVxuICAgIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4YjAsIDB4MDIsIDB4MDAsIDB4OWQsIDB4MDEsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzksIDB4NmIsIDB4MDAsIDB4MjcsIDB4MWMsIDB4MjQsIDB4MGMsIDB4MmMsIDB4MmMsIDB4NDQsIDB4Y2MsIDB4MjQsIDB4NDEsIDB4YTgsIDB4MDAsIDB4MTMsIDB4YTcsIDB4YTMsIDB4N2EsIDB4NTAsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcbiAgICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDgyLCAweDQ5LCAweDgzLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDc2LCAweDM4LCAweDI0LCAweDFjLCAweDE5LCAweGEwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDExLCAweGJmLCAweGRkLCAweDc3LCAweGZmLCAweDQwLCAweDdmLCAweGIxLCAweDAwXSlcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYyA9IHtcbiAgICBIMjY0OiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4NjgsIDB4NDksIDB4YTgsIDB4NDEsIDB4NjgsIDB4OTksIDB4NGMsIDB4MGYsIDB4ZmYsIDB4OTIsIDB4ODFdKSwgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxuICAgIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4MzEsIDB4MDMsIDB4MDAsIDB4ZTQsIDB4ZTAsIDB4YTgsIDB4OWIsIDB4MzcsIDB4YWYsIDB4MTAsIDB4NGYsIDB4NGYsIDB4YjEsIDB4MGEsIDB4MmYsIDB4ZTQsIDB4OTIsIDB4YzAsIDB4MWYsIDB4ZTcsIDB4NGYsIDB4NDYsIDB4ZmYsIDB4ZWUsIDB4NTEsIDB4YzEsIDB4NWQsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcbiAgICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDg2LCAweDAwLCAweDQwLCAweDkyLCAweDljLCAweDI0LCAweDQ4LCAweDAwLCAweDAwLCAweDAzLCAweDcwLCAweDAwLCAweDAwLCAweDRiLCAweDQwXSlcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15ODJ4ODJIMjY0ID0ge1xuICAgIElGcmFtZTogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHg0MiwgMHhjMCwgMHgwZCwgMHhkYSwgMHgxOCwgMHhkZSwgMHgyMiwgMHgyMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMywgMHhjOCwgMHhmMSwgMHg0MiwgMHhhYSwgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhjZSwgMHgwZiwgMHhjOCwgLy8gUGljdHVyZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzLCAuLi5uZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSwgMHg1ZiwgLi4ubmV3IFVpbnQ4QXJyYXkoMTAyOTUpLmZpbGwoMHhmZiksIDB4ODAsIC8vIFN1cHBsZW1lbnRhbCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiAoU0VJKVxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4NCwgMHgwNSwgLi4ubmV3IFVpbnQ4QXJyYXkoMykuZmlsbCgweGZmKSwgMHgwZiwgMHg0NSwgMHgwMCwgMHgwMSwgMHg1NywgMHg5ZiwgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3OF0pLCAvLyBTbGljZSBsYXllcjogSWRyIGRhdGFcbiAgICBQRnJhbWU6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDMsIC4uLm5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpLCAweGE0LCAuLi5uZXcgVWludDhBcnJheSgxMDM2NCkuZmlsbCgweGZmKSwgMHg4MCwgLy8gU0VJXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDIwLCAweDE1LCAweGYwLCAweDRiXSkgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxuICB9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4ID0gMTA0MTg7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQgPSAxO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzTW9iaWxlQ2hyb21lIHx8IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzU2FmYXJpO1xuICBwcml2YXRlIHN0YXRpYyBfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnT1BVUyc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYy5PUFVTLmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCk6IEFycmF5QnVmZmVyIHtcbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ0gyNjQnOiB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5JRnJhbWUuYnVmZmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA4Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOSc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5WUDkuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZShjb2RlYzogc3RyaW5nKTogU3Vycm9nYXRlRnJhbWVUeXBlIHtcbiAgICBpZiAoKGNvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0JykgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzQW5kcm9pZENocm9tZSkge1xuICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnSDI2NCc6IHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgICAgICBjb25zdCBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcblxuICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLkgyNjQuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDgnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA5Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKGNvZGVjOiBzdHJpbmcpOiBTdXJyb2dhdGVGcmFtZVR5cGUge1xuICAgIGlmICgoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnKSAmJiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICBjb25zdCBzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcjtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpO1xuXG4gICAgICBpZiAoc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA+IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCkge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XG4gICAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIrKztcblxuICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpOiBBcnJheUJ1ZmZlciB7XG4gICAgY29uc3QgYml0TWFzazEgPSAweDBlO1xuICAgIGNvbnN0IGJpdE1hc2syID0gMHgwMTtcbiAgICBjb25zdCBiaXRTaGlmdFJpZ2h0QnkxID0gMTtcbiAgICBjb25zdCBiaXRTaGlmdExlZnRCeTcgPSA3O1xuICAgIGNvbnN0IGJ5dGUxID0gKChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazEpID4+IGJpdFNoaWZ0UmlnaHRCeTEpO1xuICAgIGNvbnN0IGJ5dGUyID0gKChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazIpIDw8IGJpdFNoaWZ0TGVmdEJ5Nyk7XG4gICAgY29uc3QgY29weU9mRHVtbXlQRnJhbWVzID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuUEZyYW1lLnNsaWNlKCk7XG4gICAgY29uc3QgYnVmZmVySW5kZXggPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXg7XG5cbiAgICBjb3B5T2ZEdW1teVBGcmFtZXNbYnVmZmVySW5kZXhdIHw9IGJ5dGUxO1xuICAgIGNvcHlPZkR1bW15UEZyYW1lc1tidWZmZXJJbmRleCArIDFdIHw9IGJ5dGUyO1xuICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIrKztcblxuICAgIHJldHVybiBjb3B5T2ZEdW1teVBGcmFtZXMuYnVmZmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmRlY2xhcmUgY29uc3QgX19CVUlMRF9WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX0JVSUxEX1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZyA9ICctJztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmcgPSAnLSc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmcgPSAnLSc7XG4gIHByaXZhdGUgX3BhZ2VMb2FkVGltZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHNldCBwYWdlTG9hZFRpbWUocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBOdW1iZXJzIGZyb20gJy4uL2xhbmcvTnVtYmVycyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RvbWFpbiA9IEdsb2JhbFNjb3BlLnZhbHVlPy5sb2NhdGlvbkhvc3RuYW1lIHx8ICcnO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBydW50aW1lID0gKHRpbWVzdGFtcC52YWx1ZU9mKCkgLSB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgcnVudGltZVxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZyB8fCAhR2xvYmFsU2NvcGUudmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0SXRlbVNpemUgPSAoaXRlbTogbnVtYmVyIHwgc3RyaW5nKSA9PiB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicgPyBOdW1iZXJzLmNvdW50TnVtYmVyTGVuZ3RoKGl0ZW0pIDogaXRlbS5sZW5ndGg7XG4gICAgY29uc3QgZ2V0TG9nU2l6ZSA9IChsb2c6IElMb2dJdGVtKTogbnVtYmVyID0+IE9iamVjdC52YWx1ZXMobG9nKVxuICAgICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbSA/IGdldEl0ZW1TaXplKGl0ZW0pIDogMCksIDApO1xuXG4gICAgd2hpbGUgKHRoaXMuX2xvZ3MubGVuZ3RoID4gbnVtYmVyT2ZMb2dzVG9TZW5kICYmIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIHNpemVPZkxvZ3NUb1NlbmQgPCByZXF1ZXN0U2l6ZUxpbWl0KSB7XG4gICAgICBzaXplT2ZMb2dzVG9TZW5kICs9IGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCsrO1xuICAgIH1cblxuICAgIGlmICghbnVtYmVyT2ZMb2dzVG9TZW5kKSB7XG4gICAgICB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZSA9IHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlLnN1YnN0cmluZygwLFxuICAgICAgICBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyAocmVxdWVzdFNpemVMaW1pdCAtIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSkpO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dNZXNzYWdlcyA9IHRoaXMuX2xvZ3Muc2xpY2UoMCwgbnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHRoaXMuX2xvZ3MgPSB0aGlzLl9sb2dzLnNsaWNlKG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTG9ncyhsb2dNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9ucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZHVyYXRpb24gPSAwKSB7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHRvSXNvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2R1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1AwUyc7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHRoaXMuX2R1cmF0aW9uIDwgMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlzTmVnYXRpdmUgPyBNYXRoLmFicyh0aGlzLl9kdXJhdGlvbikgOiB0aGlzLl9kdXJhdGlvbjtcbiAgICBsZXQgb2Zmc2V0ID0gTWF0aC5mbG9vcihkdXJhdGlvbik7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gb2Zmc2V0ICUgMTAwMDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gMTAwMCk7XG5cbiAgICBjb25zdCBzZWNvbmRzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgaG91cnMgPSBvZmZzZXQgJSAyNDtcbiAgICBjb25zdCBwYXJ0cyA9IFsnUFQnXTtcblxuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCctJyk7XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGhvdXJzICsgJ0gnKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcykge1xuICAgICAgcGFydHMucHVzaChtaW51dGVzICsgJ00nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyB8fCBtaWxsaXNlY29uZHMpIHtcbiAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHNlY29uZHMpKTtcblxuICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICBwYXJ0cy5wdXNoKCcuJyArIHRoaXMucGFkU3RhcnQobWlsbGlzZWNvbmRzLnRvU3RyaW5nKCksIDMsICcwJykpO1xuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKCdTJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgcGFkU3RhcnQoaXRlbTogc3RyaW5nLCB0YXJnZXRMZW5ndGg6IG51bWJlciwgcGFkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwO1xuICAgIHBhZFN0cmluZyA9IFN0cmluZygodHlwZW9mIHBhZFN0cmluZyAhPT0gJ3VuZGVmaW5lZCcgPyBwYWRTdHJpbmcgOiAnICcpKTtcblxuICAgIGlmIChpdGVtLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gaXRlbS5sZW5ndGg7XG5cbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgaXRlbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDIwMDA7XG5jb25zdCBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDE7XG5jb25zdCBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDMwMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb25lbnRpYWxCYWNrb2ZmIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZFxuICApIHtcbiAgICB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgfVxuXG4gIGdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQoZmFpbHVyZUNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyA9IHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgLyAxMDAwO1xuICAgIGNvbnN0IHJhbmRvbWl6YXRpb24gPSAwLjUgKyAoMC41ICogTWF0aC5yYW5kb20oKSk7IC8vIFswLjUsIDEpXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmID0gTWF0aC5wb3coYmFja29mZkludGVydmFsSW5TZWNvbmRzLCBmYWlsdXJlQ291bnQgLSAyKTsgLy8gIFsxLzQgMS8yIDEgMiA0IDggLi4uLl1cbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiA9IE1hdGguZmxvb3IoZXhwb25lbnRpYWxCYWNrb2ZmKSAqIHJhbmRvbWl6YXRpb247XG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kID0gTWF0aC5jZWlsKE1hdGgubWF4KGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uICogMTAwMCwgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCkpO1xuXG4gICAgcmV0dXJuIE1hdGgubWluKGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCwgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXNzaW9uVGVsZW1ldHJ5IEZhaWxlZDogTm8gYXBwbGljYXRpb24gbW9uaXRvciBpbml0aWFsaXplZC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcj8uZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgaWYgKCF0aW1lU2luY2VMYXN0Q2hhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbnR5cGUgQ29udGludWF0aW9uRXZlbnQgPSBIVE1MVmlkZW9FbGVtZW50RXZlbnRNYXBbJ3BsYXknIHwgJ3BsYXlpbmcnIHwgJ3Byb2dyZXNzJyB8ICd0aW1ldXBkYXRlJ107XG5jb25zdCBub29wID0gKCk6IHZvaWQgPT4gdW5kZWZpbmVkO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yQ29udGludWF0aW9uOiAoZXZlbnQ6IENvbnRpbnVhdGlvbkV2ZW50KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlID0gbmV3IERpc3Bvc2FibGUoKCkgPT4gbnVsbCk7XG4gIHByaXZhdGUgX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcjogRGlzcG9zYWJsZSA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQ6IENvbnRpbnVhdGlvbkV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuXG4gICAgdGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkdXJhdGlvblNpbmNlUGFnZUxvYWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGltZVRvRmlyc3RGcmFtZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5wdXNoVGltZVRvRmlyc3RGcmFtZShub3cpO1xuICAgIHRoaXMucHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50OiBDb250aW51YXRpb25FdmVudCwgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCJcbmltcG9ydCB3b3JrZXIgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlci1sb2FkZXIvZGlzdC9ydW50aW1lL2lubGluZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBXb3JrZXJfZm4oKSB7XG4gIHJldHVybiB3b3JrZXIoXCIvKioqKioqLyAoZnVuY3Rpb24oKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcXG4vKioqKioqLyBcXHRcXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqKioqKi8gXFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xcblxcbi8qKiovIFxcXCIuL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50cyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBCcm93c2VyRGV0ZWN0b3I7IH1cXG4vKiBoYXJtb255IGV4cG9ydCAqLyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjayAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eSAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanNcXFwiKTtcXG5cXG5cXG5cXG52YXIgX0Jyb3dzZXJEZXRlY3RvciwgX25hdmlnYXRvciwgX25hdmlnYXRvcjI7XFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gKi9cXG52YXIgQnJvd3NlckRldGVjdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcXG4gIGZ1bmN0aW9uIEJyb3dzZXJEZXRlY3RvcigpIHtcXG4gICAgKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKHRoaXMsIEJyb3dzZXJEZXRlY3Rvcik7XFxuICB9XFxuICByZXR1cm4gKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgbnVsbCwgW3tcXG4gICAga2V5OiBcXFwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImJyb3dzZXJOYW1lXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImJyb3dzZXJNYWpvclZlcnNpb25cXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0FuZHJvaWRcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0FuZHJvaWQ7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU2OVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNjk7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MFxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MlxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzI7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NFxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NlxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzY7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3N1xcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNNb2JpbGVcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNNb2JpbGUoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNNb2JpbGU7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKSB7XFxuICAgICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgICB9XFxuICAgICAgdmFyIGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XFxuICAgICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcXG4gICAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcInBhcnNlQnJvd3Nlck5hbWVcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTmFtZSgpIHtcXG4gICAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgfVxcbiAgICAgIHZhciBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xcbiAgICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCkge1xcbiAgICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcXG4gICAgICAgIHJldHVybiAwO1xcbiAgICAgIH1cXG4gICAgICB2YXIgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcXG4gICAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XFxuICAgICAgICByZXR1cm4gMDtcXG4gICAgICB9XFxuICAgICAgdmFyIGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xcbiAgICAgIGlmICghZnVsbFZlcnNpb24pIHtcXG4gICAgICAgIHJldHVybiAwO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCkge1xcbiAgICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgfVxcbiAgICAgIHZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xcbiAgICAgIHZhciBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XFxuICAgICAgaWYgKG1zaWUgPiAwKSB7XFxuICAgICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcXG4gICAgICAgIHJldHVybiBcXFwiSUUvXFxcIi5jb25jYXQocGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKSk7XFxuICAgICAgfVxcbiAgICAgIHZhciB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XFxuICAgICAgaWYgKHRyaWRlbnQgPiAwKSB7XFxuICAgICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcXG4gICAgICAgIHZhciB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJJRS9cXFwiLmNvbmNhdChwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuICcnO1xcbiAgICB9XFxuICB9XSk7XFxufSgpO1xcbl9Ccm93c2VyRGV0ZWN0b3IgPSBCcm93c2VyRGV0ZWN0b3I7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleFxcXCIsIC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXFxcLykoW1xcXFxkLmFwcmVdKykvZyk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9icm93c2VyTmFtZUFuZFZlcnNpb25cXFwiLCBfQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCkpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfYnJvd3Nlck5hbWVcXFwiLCBfQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9icm93c2VyTWFqb3JWZXJzaW9uXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc01vYmlsZVxcXCIsIC9BbmRyb2lkfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxPcGVyYSBNaW5pL2kudGVzdCgoX25hdmlnYXRvciA9IG5hdmlnYXRvcikgPT09IG51bGwgfHwgX25hdmlnYXRvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hdmlnYXRvci51c2VyQWdlbnQpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQW5kcm9pZFxcXCIsIC9BbmRyb2lkL2kudGVzdCgoX25hdmlnYXRvcjIgPSBuYXZpZ2F0b3IpID09PSBudWxsIHx8IF9uYXZpZ2F0b3IyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmF2aWdhdG9yMi51c2VyQWdlbnQpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQ2hyb21lNjlcXFwiLCBfQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS82OS4nKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTcwXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJykpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3MVxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQ2hyb21lNzJcXFwiLCBfQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Mi4nKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTc0XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJykpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3NVxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQ2hyb21lNzZcXFwiLCBfQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ni4nKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTc3XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJykpO1xcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50c1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50cyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgU2tpcEZyYW1lOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gU2tpcEZyYW1lOyB9LFxcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcjsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5ICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5ICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3RvciAqLyBcXFwiLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50c1xcXCIpO1xcblxcblxcblxcblxcbnZhciBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxcbiAqL1xcblxcblxcbnZhciBTa2lwRnJhbWUgPSBTeW1ib2woKTtcXG52YXIgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyKCkge1xcbiAgICAoMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXFxcImRlZmF1bHRcXFwiXSkodGhpcywgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcik7XFxuICAgIHRocm93IG5ldyBFcnJvcignU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XFxuICB9XFxuICByZXR1cm4gKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIG51bGwsIFt7XFxuICAgIGtleTogXFxcImdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWNcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhjb2RlYykge1xcbiAgICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xcbiAgICAgICAgY2FzZSAnT1BVUyc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjLk9QVVMuYnVmZmVyO1xcbiAgICAgICAgICB9XFxuICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEoKSB7XFxuICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMoY29kZWMpIHtcXG4gICAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcXG4gICAgICAgIGNhc2UgJ0gyNjQnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgICAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XFxuICAgICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuSUZyYW1lLmJ1ZmZlcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgY2FzZSAnVlA4JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgY2FzZSAnVlA5JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA5LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZShjb2RlYykge1xcbiAgICAgIGlmIChjb2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCcgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xcbiAgICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcXG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMoY29kZWMpIHtcXG4gICAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcXG4gICAgICAgIGNhc2UgJ0gyNjQnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgICAgICAgIHZhciBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcXG4gICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOCc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOSc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUoY29kZWMpIHtcXG4gICAgICBpZiAoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgIHZhciBzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcjtcXG4gICAgICAgIHZhciBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcXG4gICAgICAgIGlmIChzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0KSB7XFxuICAgICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XFxuICAgICAgICB9XFxuICAgICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XFxuICAgICAgICByZXR1cm4gYnVmZmVyO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXJcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpIHtcXG4gICAgICB2YXIgYml0TWFzazEgPSAweDBlO1xcbiAgICAgIHZhciBiaXRNYXNrMiA9IDB4MDE7XFxuICAgICAgdmFyIGJpdFNoaWZ0UmlnaHRCeTEgPSAxO1xcbiAgICAgIHZhciBiaXRTaGlmdExlZnRCeTcgPSA3O1xcbiAgICAgIHZhciBieXRlMSA9IChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazEpID4+IGJpdFNoaWZ0UmlnaHRCeTE7XFxuICAgICAgdmFyIGJ5dGUyID0gKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgJiBiaXRNYXNrMikgPDwgYml0U2hpZnRMZWZ0Qnk3O1xcbiAgICAgIHZhciBjb3B5T2ZEdW1teVBGcmFtZXMgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5QRnJhbWUuc2xpY2UoKTtcXG4gICAgICB2YXIgYnVmZmVySW5kZXggPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXg7XFxuICAgICAgY29weU9mRHVtbXlQRnJhbWVzW2J1ZmZlckluZGV4XSB8PSBieXRlMTtcXG4gICAgICBjb3B5T2ZEdW1teVBGcmFtZXNbYnVmZmVySW5kZXggKyAxXSB8PSBieXRlMjtcXG4gICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XFxuICAgICAgcmV0dXJuIGNvcHlPZkR1bW15UEZyYW1lcy5idWZmZXI7XFxuICAgIH1cXG4gIH1dKTtcXG59KCk7XFxuX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2lzU2FmYXJpXFxcIiwgX2RvbV9Ccm93c2VyRGV0ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcXFwiZGVmYXVsdFxcXCJdLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfaXNNb2JpbGVDaHJvbWVcXFwiLCBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXFxcImRlZmF1bHRcXFwiXS5pc01vYmlsZSgpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9pc0FuZHJvaWRDaHJvbWVcXFwiLCBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXFxcImRlZmF1bHRcXFwiXS5pc0FuZHJvaWQpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX3NpbmdsZVplcm9CeXRlXFxcIiwgbmV3IFVpbnQ4QXJyYXkoWzB4MDBdKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjXFxcIiwge1xcbiAgT1BVUzogbmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4MDcsIDB4ZDksIDB4YWIsIDB4YmMsIDB4NzksIDB4ODcsIDB4YWIsIDB4OGUsIDB4NGEsIDB4MTQsIDB4ZjMsIDB4YTcsIDB4MWMsIDB4ZjIsIDB4OWEsIDB4N2EsIDB4NDUsIDB4YTcsIDB4MmQsIDB4NDQsIDB4MjUsIDB4NzQsIDB4NGMsIDB4YWQsIDB4MTYsIDB4YjMsIDB4MGUsIDB4NTEsIDB4NTcsIDB4ZWEsIDB4ZTcsIDB4YWQsIDB4MmEsIDB4MzgsIDB4Y2UsIDB4MzNdKVxcbn0pO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlY1xcXCIsIHtcXG4gIEgyNjQ6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLFxcbiAgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXFxuICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweGY0LCAweDAwLCAweDBhLCAweDkxLCAweDliLCAweDJiLCAweGYxLCAweGYxLCAweGY4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDA3LCAweDg5LCAweDEyLCAweGNiLFxcbiAgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhlYiwgMHhlMywgMHhjNCwgMHg0OCwgMHg0NCxcXG4gIC8vIFBpY3R1cmUgcGFyYW10ZXIgc2V0XFxuICAvKiAqL1xcbiAgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4MiwgMHgwMCwgMHgzZiwgMHg3MCwgMHgyMywgMHg4NiwgMHhlNiwgMHhkMSwgMHg4MCwgMHgwOSwgMHhhZiwgMHgwYSwgMHg0MSwgMHg2NiwgMHg2YiwgMHg1NCwgMHg0NiwgMHhmYiwgMHg3MSwgMHhkOSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmOV0pLFxcbiAgLy8gU2xpY2UgbGF5ZXI6IGlkciBkYXRhXFxuICBWUDg6IG5ldyBVaW50OEFycmF5KFsweGIwLCAweDAyLCAweDAwLCAweDlkLCAweDAxLCAweDJhLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDM5LCAweDZiLCAweDAwLCAweDI3LCAweDFjLCAweDI0LCAweDBjLCAweDJjLCAweDJjLCAweDQ0LCAweGNjLCAweDI0LCAweDQxLCAweGE4LCAweDAwLCAweDEzLCAweGE3LCAweGEzLCAweDdhLCAweDUwLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXFxuICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDgyLCAweDQ5LCAweDgzLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDc2LCAweDM4LCAweDI0LCAweDFjLCAweDE5LCAweGEwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDExLCAweGJmLCAweGRkLCAweDc3LCAweGZmLCAweDQwLCAweDdmLCAweGIxLCAweDAwXSlcXG59KTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWNcXFwiLCB7XFxuICBIMjY0OiBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCxcXG4gIC8vIEFjY2VzcyB1bml0IGRlbGltaXRlclxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHg2OCwgMHg0OSwgMHhhOCwgMHg0MSwgMHg2OCwgMHg5OSwgMHg0YywgMHgwZiwgMHhmZiwgMHg5MiwgMHg4MV0pLFxcbiAgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxcbiAgVlA4OiBuZXcgVWludDhBcnJheShbMHgzMSwgMHgwMywgMHgwMCwgMHhlNCwgMHhlMCwgMHhhOCwgMHg5YiwgMHgzNywgMHhhZiwgMHgxMCwgMHg0ZiwgMHg0ZiwgMHhiMSwgMHgwYSwgMHgyZiwgMHhlNCwgMHg5MiwgMHhjMCwgMHgxZiwgMHhlNywgMHg0ZiwgMHg0NiwgMHhmZiwgMHhlZSwgMHg1MSwgMHhjMSwgMHg1ZCwgMHgwMCwgMHhmZSwgMHhlYiwgMHhkZSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg2YiwgMHg3YiwgMHgwNywgMHg3MiwgMHg2MywgMHgwOSwgMHhhNCwgMHg4ZSwgMHhjMF0pLFxcbiAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4NiwgMHgwMCwgMHg0MCwgMHg5MiwgMHg5YywgMHgyNCwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMywgMHg3MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0MF0pXFxufSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXk4Mng4MkgyNjRcXFwiLCB7XFxuICBJRnJhbWU6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweDQyLCAweGMwLCAweDBkLCAweGRhLCAweDE4LCAweGRlLCAweDIyLCAweDIyLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAzLCAweGM4LCAweGYxLCAweDQyLCAweGFhLFxcbiAgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhjZSwgMHgwZiwgMHhjOCxcXG4gIC8vIFBpY3R1cmUgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwM10uY29uY2F0KCgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfdG9Db25zdW1hYmxlQXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShuZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSksIFsweDVmXSwgKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKG5ldyBVaW50OEFycmF5KDEwMjk1KS5maWxsKDB4ZmYpKSwgWzB4ODAsXFxuICAvLyBTdXBwbGVtZW50YWwgZW5oYW5jZW1lbnQgaW5mb3JtYXRpb24gKFNFSSlcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4ODgsIDB4ODQsIDB4MDVdLCAoMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkobmV3IFVpbnQ4QXJyYXkoMykuZmlsbCgweGZmKSksIFsweDBmLCAweDQ1LCAweDAwLCAweDAxLCAweDU3LCAweDlmLCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc4XSkpLFxcbiAgLy8gU2xpY2UgbGF5ZXI6IElkciBkYXRhXFxuICBQRnJhbWU6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzXS5jb25jYXQoKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKG5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpKSwgWzB4YTRdLCAoMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkobmV3IFVpbnQ4QXJyYXkoMTAzNjQpLmZpbGwoMHhmZikpLCBbMHg4MCxcXG4gIC8vIFNFSVxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHgyMCwgMHgxNSwgMHhmMCwgMHg0Yl0pKSAvLyBTbGljZSBsYXllcjogbm9uIGlkciBkYXRhXFxufSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4XFxcIiwgMTA0MTgpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldFxcXCIsIDEpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJcXFwiLCBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNNb2JpbGVDaHJvbWUgfHwgX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzU2FmYXJpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyXFxcIiwgX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIF9hcnJheUxpa2VUb0FycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkge1xcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xcbiAgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07XFxuICByZXR1cm4gbjtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX19fd2VicGFja19tb2R1bGVfXywgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBfYXJyYXlXaXRob3V0SG9sZXM7IH1cXG4vKiBoYXJtb255IGV4cG9ydCAqLyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FycmF5TGlrZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXJyYXlMaWtlVG9BcnJheS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qc1xcXCIpO1xcblxcbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7XFxuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuICgwLF9hcnJheUxpa2VUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkocik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX2NsYXNzQ2FsbENoZWNrOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHtcXG4gIGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX2NyZWF0ZUNsYXNzOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b1Byb3BlcnR5S2V5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvUHJvcGVydHlLZXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7XFxuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcXG4gICAgdmFyIG8gPSByW3RdO1xcbiAgICBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFxcXCJ2YWx1ZVxcXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsICgwLF90b1Byb3BlcnR5S2V5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkoby5rZXkpLCBvKTtcXG4gIH1cXG59XFxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcXG4gIHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFxcXCJwcm90b3R5cGVcXFwiLCB7XFxuICAgIHdyaXRhYmxlOiAhMVxcbiAgfSksIGU7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX2RlZmluZVByb3BlcnR5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b1Byb3BlcnR5S2V5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvUHJvcGVydHlLZXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xcbiAgcmV0dXJuIChyID0gKDAsX3RvUHJvcGVydHlLZXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XFxuICAgIHZhbHVlOiB0LFxcbiAgICBlbnVtZXJhYmxlOiAhMCxcXG4gICAgY29uZmlndXJhYmxlOiAhMCxcXG4gICAgd3JpdGFibGU6ICEwXFxuICB9KSA6IGVbcl0gPSB0LCBlO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX19fd2VicGFja19tb2R1bGVfXywgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBfaXRlcmFibGVUb0FycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7XFxuICBpZiAoXFxcInVuZGVmaW5lZFxcXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXFxcIkBAaXRlcmF0b3JcXFwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX25vbkl0ZXJhYmxlU3ByZWFkOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXFxcIik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX3RvQ29uc3VtYWJsZUFycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcnJheVdpdGhvdXRIb2xlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcnJheVdpdGhvdXRIb2xlcy5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2l0ZXJhYmxlVG9BcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pdGVyYWJsZVRvQXJyYXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub25JdGVyYWJsZVNwcmVhZF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub25JdGVyYWJsZVNwcmVhZC5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanNcXFwiKTtcXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikge1xcbiAgcmV0dXJuICgwLF9hcnJheVdpdGhvdXRIb2xlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKHIpIHx8ICgwLF9pdGVyYWJsZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcXFwiZGVmYXVsdFxcXCJdKShyKSB8fCAoMCxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShyKSB8fCAoMCxfbm9uSXRlcmFibGVTcHJlYWRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKSgpO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIHRvUHJpbWl0aXZlOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90eXBlb2ZfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdHlwZW9mLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XFxuICBpZiAoXFxcIm9iamVjdFxcXCIgIT0gKDAsX3R5cGVvZl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKHQpIHx8ICF0KSByZXR1cm4gdDtcXG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFxcXCJkZWZhdWx0XFxcIik7XFxuICAgIGlmIChcXFwib2JqZWN0XFxcIiAhPSAoMCxfdHlwZW9mX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkoaSkpIHJldHVybiBpO1xcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlxcXCIpO1xcbiAgfVxcbiAgcmV0dXJuIChcXFwic3RyaW5nXFxcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX19fd2VicGFja19tb2R1bGVfXywgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyB0b1Byb3BlcnR5S2V5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90eXBlb2ZfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdHlwZW9mLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RvUHJpbWl0aXZlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvUHJpbWl0aXZlLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qc1xcXCIpO1xcblxcblxcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xcbiAgdmFyIGkgPSAoMCxfdG9QcmltaXRpdmVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcXFwiZGVmYXVsdFxcXCJdKSh0LCBcXFwic3RyaW5nXFxcIik7XFxuICByZXR1cm4gXFxcInN5bWJvbFxcXCIgPT0gKDAsX3R5cGVvZl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKGkpID8gaSA6IGkgKyBcXFwiXFxcIjtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX3R5cGVvZjsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xcbiAgXFxcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXFxcIjtcXG5cXG4gIHJldHVybiBfdHlwZW9mID0gXFxcImZ1bmN0aW9uXFxcIiA9PSB0eXBlb2YgU3ltYm9sICYmIFxcXCJzeW1ib2xcXFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xcbiAgICByZXR1cm4gdHlwZW9mIG87XFxuICB9IDogZnVuY3Rpb24gKG8pIHtcXG4gICAgcmV0dXJuIG8gJiYgXFxcImZ1bmN0aW9uXFxcIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXFxcInN5bWJvbFxcXCIgOiB0eXBlb2YgbztcXG4gIH0sIF90eXBlb2Yobyk7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcnJheUxpa2VUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FycmF5TGlrZVRvQXJyYXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkge1xcbiAgaWYgKHIpIHtcXG4gICAgaWYgKFxcXCJzdHJpbmdcXFwiID09IHR5cGVvZiByKSByZXR1cm4gKDAsX2FycmF5TGlrZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShyLCBhKTtcXG4gICAgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTtcXG4gICAgcmV0dXJuIFxcXCJPYmplY3RcXFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcXFwiTWFwXFxcIiA9PT0gdCB8fCBcXFwiU2V0XFxcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcXFwiQXJndW1lbnRzXFxcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/ICgwLF9hcnJheUxpa2VUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkociwgYSkgOiB2b2lkIDA7XFxuICB9XFxufVxcblxcblxcbi8qKiovIH0pXFxuXFxuLyoqKioqKi8gXFx0fSk7XFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgbW9kdWxlIGNhY2hlXFxuLyoqKioqKi8gXFx0dmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xcbi8qKioqKiovIFxcdFxcbi8qKioqKiovIFxcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXFxuLyoqKioqKi8gXFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xcbi8qKioqKiovIFxcdFxcdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xcbi8qKioqKiovIFxcdFxcdFxcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcXG4vKioqKioqLyBcXHRcXHR9XFxuLyoqKioqKi8gXFx0XFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcXG4vKioqKioqLyBcXHRcXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcXG4vKioqKioqLyBcXHRcXHRcXHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXFxuLyoqKioqKi8gXFx0XFx0XFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcXG4vKioqKioqLyBcXHRcXHRcXHRleHBvcnRzOiB7fVxcbi8qKioqKiovIFxcdFxcdH07XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKi8gXFx0XFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXFxuLyoqKioqKi8gXFx0XFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKi8gXFx0XFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcXG4vKioqKioqLyBcXHRcXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0fVxcbi8qKioqKiovIFxcdFxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gXFx0Lyogd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzICovXFxuLyoqKioqKi8gXFx0IWZ1bmN0aW9uKCkge1xcbi8qKioqKiovIFxcdFxcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdFxcdH1cXG4vKioqKioqLyBcXHRcXHR9O1xcbi8qKioqKiovIFxcdH0oKTtcXG4vKioqKioqLyBcXHRcXG4vKioqKioqLyBcXHQvKiB3ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kICovXFxuLyoqKioqKi8gXFx0IWZ1bmN0aW9uKCkge1xcbi8qKioqKiovIFxcdFxcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH1cXG4vKioqKioqLyBcXHR9KCk7XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IHt9O1xcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cnVsZVNldFsxXS5ydWxlc1sxXS51c2UhLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1RyYW5zZm9ybVN0cmVhbS53b3JrZXIudHMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2sgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgKi8gXFxcIi4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLnRzXFxcIik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gKi9cXG5cXG5cXG52YXIgd29ya2VyID0gc2VsZjtcXG53b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUgPSBldmVudC5kYXRhLmZvcmNlSW52YWxpZEZyYW1lO1xcbn07XFxuaWYgKHNlbGYuUlRDVHJhbnNmb3JtRXZlbnQpIHtcXG4gIHNlbGYub25ydGN0cmFuc2Zvcm0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgdmFyIHRyYW5zZm9ybWVyID0gZXZlbnQudHJhbnNmb3JtZXI7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYyA9IHRyYW5zZm9ybWVyLm9wdGlvbnMuY29kZWM7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS50cmFuc2Zvcm1GdW5jdGlvbiA9IHRyYW5zZm9ybWVyLm9wdGlvbnMua2luZCA9PT0gJ3ZpZGVvJyA/IFdvcmtlclRyYW5zZm9ybVN0cmVhbS52aWRlb1RyYW5zZm9ybUZ1bmN0aW9uIDogV29ya2VyVHJhbnNmb3JtU3RyZWFtLmF1ZGlvVHJhbnNmb3JtRnVuY3Rpb247XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5tdXN0U2luayA9IHRyYW5zZm9ybWVyLm9wdGlvbnMubXVzdFNpbms7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSA9IGZhbHNlO1xcbiAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7XFxuICAgICAgdHJhbnNmb3JtOiBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0udHJhbnNmb3JtRnVuY3Rpb25cXG4gICAgfSk7XFxuICAgIHZhciBzb3VyY2UgPSB0cmFuc2Zvcm1lci5yZWFkYWJsZTtcXG4gICAgdmFyIHNpbmsgPSB0cmFuc2Zvcm1lci53cml0YWJsZTtcXG4gICAgc291cmNlLnBpcGVUaHJvdWdoKHRyYW5zZm9ybVN0cmVhbSkucGlwZVRvKHNpbmspO1xcbiAgfTtcXG59XFxudmFyIFdvcmtlclRyYW5zZm9ybVN0cmVhbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0oKSB7XFxuICAgICgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKSh0aGlzLCBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0pO1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclRyYW5zZm9ybVN0cmVhbSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XFxuICB9XFxuICByZXR1cm4gKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1xcXCJkZWZhdWx0XFxcIl0pKFdvcmtlclRyYW5zZm9ybVN0cmVhbSwgbnVsbCwgW3tcXG4gICAga2V5OiBcXFwidmlkZW9UcmFuc2Zvcm1GdW5jdGlvblxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2aWRlb1RyYW5zZm9ybUZ1bmN0aW9uKGNodW5rLCBjb250cm9sbGVyKSB7XFxuICAgICAgcG9zdE1lc3NhZ2Uoe1xcbiAgICAgICAgY2h1bms6IHtcXG4gICAgICAgICAgdHlwZTogY2h1bmsudHlwZSxcXG4gICAgICAgICAgdGltZXN0YW1wOiBjaHVuay50aW1lc3RhbXAsXFxuICAgICAgICAgIGRhdGE6IGNodW5rLmRhdGFcXG4gICAgICAgIH1cXG4gICAgICB9KTtcXG4gICAgICBpZiAoV29ya2VyVHJhbnNmb3JtU3RyZWFtLm11c3RTaW5rKSB7XFxuICAgICAgICBpZiAoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmZvcmNlSW52YWxpZEZyYW1lKSB7XFxuICAgICAgICAgIHZhciBzdXJyb2dhdGU7XFxuICAgICAgICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSA9IGZhbHNlO1xcbiAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcXG4gICAgICAgICAgICBzdXJyb2dhdGUgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYyk7XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgc3Vycm9nYXRlID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIGlmIChzdXJyb2dhdGUgPT09IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18uU2tpcEZyYW1lKSB7XFxuICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIGNodW5rLmRhdGEgPSBzdXJyb2dhdGUgfHwgY2h1bmsuZGF0YTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xcbiAgICAgICAgICAgIGNodW5rLmRhdGEgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyhXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMpIHx8IGNodW5rLmRhdGE7XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2h1bmsuZGF0YSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYykgfHwgY2h1bmsuZGF0YTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImF1ZGlvVHJhbnNmb3JtRnVuY3Rpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYXVkaW9UcmFuc2Zvcm1GdW5jdGlvbihjaHVuaywgY29udHJvbGxlcikge1xcbiAgICAgIHBvc3RNZXNzYWdlKHtcXG4gICAgICAgIGNodW5rOiB7XFxuICAgICAgICAgIHRpbWVzdGFtcDogY2h1bmsudGltZXN0YW1wLFxcbiAgICAgICAgICBkYXRhOiBjaHVuay5kYXRhXFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgICAgaWYgKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5tdXN0U2luaykge1xcbiAgICAgICAgaWYgKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSkge1xcbiAgICAgICAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUgPSBmYWxzZTtcXG4gICAgICAgICAgY2h1bmsuZGF0YSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICBjaHVuay5kYXRhID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmNvZGVjKSB8fCBjaHVuay5kYXRhO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xcbiAgICB9XFxuICB9XSk7XFxufSgpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIFxcXCJjb2RlY1xcXCIsIHZvaWQgMCk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKFdvcmtlclRyYW5zZm9ybVN0cmVhbSwgXFxcInRyYW5zZm9ybUZ1bmN0aW9uXFxcIiwgdm9pZCAwKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoV29ya2VyVHJhbnNmb3JtU3RyZWFtLCBcXFwibXVzdFNpbmtcXFwiLCB2b2lkIDApO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIFxcXCJmb3JjZUludmFsaWRGcmFtZVxcXCIsIHZvaWQgMCk7XFxuLyogdW51c2VkIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIF9fV0VCUEFDS19ERUZBVUxUX0VYUE9SVF9fID0gKG51bGwpO1xcbi8qKioqKiovIH0pKClcXG47XFxuXCIsIFwiV29ya2VyXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYsIG5vLXVzZS1iZWZvcmUtZGVmaW5lLCBuZXctY2FwICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZW50LCB3b3JrZXJDb25zdHJ1Y3Rvciwgd29ya2VyT3B0aW9ucywgdXJsKSB7XG4gIHZhciBnbG9iYWxTY29wZSA9IHNlbGYgfHwgd2luZG93O1xuXG4gIHRyeSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBibG9iO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBOZXcgQVBJXG4gICAgICAgIGJsb2IgPSBuZXcgZ2xvYmFsU2NvcGUuQmxvYihbY29udGVudF0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBCbG9iQnVpbGRlciA9IERlcHJlY2F0ZWQsIGJ1dCB3aWRlbHkgaW1wbGVtZW50ZWRcbiAgICAgICAgdmFyIEJsb2JCdWlsZGVyID0gZ2xvYmFsU2NvcGUuQmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuV2ViS2l0QmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuTW96QmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuTVNCbG9iQnVpbGRlcjtcbiAgICAgICAgYmxvYiA9IG5ldyBCbG9iQnVpbGRlcigpO1xuICAgICAgICBibG9iLmFwcGVuZChjb250ZW50KTtcbiAgICAgICAgYmxvYiA9IGJsb2IuZ2V0QmxvYigpO1xuICAgICAgfVxuXG4gICAgICB2YXIgVVJMID0gZ2xvYmFsU2NvcGUuVVJMIHx8IGdsb2JhbFNjb3BlLndlYmtpdFVSTDtcbiAgICAgIHZhciBvYmplY3RVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgdmFyIHdvcmtlciA9IG5ldyBnbG9iYWxTY29wZVt3b3JrZXJDb25zdHJ1Y3Rvcl0ob2JqZWN0VVJMLCB3b3JrZXJPcHRpb25zKTtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VVJMKTtcbiAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG5ldyBnbG9iYWxTY29wZVt3b3JrZXJDb25zdHJ1Y3Rvcl0oXCJkYXRhOmFwcGxpY2F0aW9uL2phdmFzY3JpcHQsXCIuY29uY2F0KGVuY29kZVVSSUNvbXBvbmVudChjb250ZW50KSksIHdvcmtlck9wdGlvbnMpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghdXJsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIklubGluZSB3b3JrZXIgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IGdsb2JhbFNjb3BlW3dvcmtlckNvbnN0cnVjdG9yXSh1cmwsIHdvcmtlck9wdGlvbnMpO1xuICB9XG59OyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAobyA9PT0gcykge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBpKSB0aHJvdyBhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmb3IgKG4ubWV0aG9kID0gaSwgbi5hcmcgPSBhOzspIHtcbiAgICAgICAgdmFyIGMgPSBuLmRlbGVnYXRlO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgIHZhciB1ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShjLCBuKTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gbi5tZXRob2QpIG4uc2VudCA9IG4uX3NlbnQgPSBuLmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IG4ubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKG8gPT09IGgpIHRocm93IG8gPSBzLCBuLmFyZztcbiAgICAgICAgICBuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IG4ubWV0aG9kICYmIG4uYWJydXB0KFwicmV0dXJuXCIsIG4uYXJnKTtcbiAgICAgICAgbyA9IGY7XG4gICAgICAgIHZhciBwID0gdHJ5Q2F0Y2goZSwgciwgbik7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSBwLnR5cGUpIHtcbiAgICAgICAgICBpZiAobyA9IG4uZG9uZSA/IHMgOiBsLCBwLmFyZyA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBwLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IG4uZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSBwLnR5cGUgJiYgKG8gPSBzLCBuLm1ldGhvZCA9IFwidGhyb3dcIiwgbi5hcmcgPSBwLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpIHtcbiAgICB2YXIgbiA9IHIubWV0aG9kLFxuICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07XG4gICAgaWYgKG8gPT09IHQpIHJldHVybiByLmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBuICYmIGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKHIubWV0aG9kID0gXCJyZXR1cm5cIiwgci5hcmcgPSB0LCBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpLCBcInRocm93XCIgPT09IHIubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBuICYmIChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBuICsgXCInIG1ldGhvZFwiKSksIHk7XG4gICAgdmFyIGkgPSB0cnlDYXRjaChvLCBlLml0ZXJhdG9yLCByLmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gaS5hcmcsIHIuZGVsZWdhdGUgPSBudWxsLCB5O1xuICAgIHZhciBhID0gaS5hcmc7XG4gICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSByLm1ldGhvZCAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpIDogYSA6IChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIHIuZGVsZWdhdGUgPSBudWxsLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkge1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkge1xuICAgIHZhciBlID0gdC5jb21wbGV0aW9uIHx8IHt9O1xuICAgIGUudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHQpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCB0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBQcm9taXNlKTtcbiAgICB2YXIgYSA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAodCwgciwgbiwgbyksIGkpO1xuICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZG9uZSA/IHQudmFsdWUgOiBhLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShnLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoZywgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBlLmtleXMgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gT2JqZWN0KHQpLFxuICAgICAgciA9IFtdO1xuICAgIGZvciAodmFyIG4gaW4gZSkgci5wdXNoKG4pO1xuICAgIHJldHVybiByLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB0LCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtyLnNsaWNlKDEpKSAmJiAodGhpc1tyXSA9IHQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGUpIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGU7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykge1xuICAgICAgICByZXR1cm4gYS50eXBlID0gXCJ0aHJvd1wiLCBhLmFyZyA9IGUsIHIubmV4dCA9IG4sIG8gJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksICEhbztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG8gPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgbyA+PSAwOyAtLW8pIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sXG4gICAgICAgICAgYSA9IGkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICB1ID0gbi5jYWxsKGksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoYyAmJiB1KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdSkgdGhyb3cgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7XG4gIChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTtcbiAgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07XG4gIHJldHVybiBuO1xufVxuZXhwb3J0IHsgX2FycmF5TGlrZVRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIpO1xufVxuZXhwb3J0IHsgX2FycmF5V2l0aG91dEhvbGVzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChuLCB0LCBlLCByLCBvLCBhLCBjKSB7XG4gIHRyeSB7XG4gICAgdmFyIGkgPSBuW2FdKGMpLFxuICAgICAgdSA9IGkudmFsdWU7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gdm9pZCBlKG4pO1xuICB9XG4gIGkuZG9uZSA/IHQodSkgOiBQcm9taXNlLnJlc29sdmUodSkudGhlbihyLCBvKTtcbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdCA9IHRoaXMsXG4gICAgICBlID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAociwgbykge1xuICAgICAgdmFyIGEgPSBuLmFwcGx5KHQsIGUpO1xuICAgICAgZnVuY3Rpb24gX25leHQobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgbik7XG4gICAgICB9XG4gICAgICBfbmV4dCh2b2lkIDApO1xuICAgIH0pO1xuICB9O1xufVxuZXhwb3J0IHsgX2FzeW5jVG9HZW5lcmF0b3IgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7XG4gIGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbn1cbmV4cG9ydCB7IF9jbGFzc0NhbGxDaGVjayBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikge1xuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcbiAgICB2YXIgbyA9IHJbdF07XG4gICAgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHRvUHJvcGVydHlLZXkoby5rZXkpLCBvKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcbiAgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgZTtcbn1cbmV4cG9ydCB7IF9jcmVhdGVDbGFzcyBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7XG4gIH0sIF9nZXRQcm90b3R5cGVPZih0KTtcbn1cbmV4cG9ydCB7IF9nZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHQsXG4gICAgICB3cml0YWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfVxuICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGUgJiYgc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikge1xuICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpO1xufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheUxpbWl0IGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZXhwb3J0IHsgX25vbkl0ZXJhYmxlUmVzdCBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVNwcmVhZCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkge1xuICBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlO1xuICBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7XG59XG5leHBvcnQgeyBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuZXhwb3J0IHsgX3NsaWNlZFRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlU3ByZWFkIGZyb20gXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCI7XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMocikgfHwgaXRlcmFibGVUb0FycmF5KHIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5leHBvcnQgeyBfdG9Db25zdW1hYmxlQXJyYXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHtcbiAgaWYgKHIpIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkociwgYSk7XG4gICAgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTtcbiAgICByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBhcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwO1xuICB9XG59XG5leHBvcnQgeyBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH0iLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xudmFyIGcgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpIHx8XG4gIHt9XG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGcsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnICYmXG4gICAgJ0Jsb2InIGluIGcgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGcsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICBpZiAoaGVhZGVyLmxlbmd0aCAhPSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hlYWRlcnMgY29uc3RydWN0b3I6IGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQnICsgaGVhZGVyLmxlbmd0aClcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5Ll9ub0JvZHkpIHJldHVyblxuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHZhciBtYXRjaCA9IC9jaGFyc2V0PShbQS1aYS16MC05Xy1dKykvLmV4ZWMoYmxvYi50eXBlKVxuICB2YXIgZW5jb2RpbmcgPSBtYXRjaCA/IG1hdGNoWzFdIDogJ3V0Zi04J1xuICByZWFkZXIucmVhZEFzVGV4dChibG9iLCBlbmNvZGluZylcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ub0JvZHkgPSB0cnVlO1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBhcyBBcnJheUJ1ZmZlcicpXG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0NPTk5FQ1QnLCAnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUEFUQ0gnLCAnUE9TVCcsICdQVVQnLCAnVFJBQ0UnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbCB8fCAoZnVuY3Rpb24gKCkge1xuICAgIGlmICgnQWJvcnRDb250cm9sbGVyJyBpbiBnKSB7XG4gICAgICB2YXIgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIHJldHVybiBjdHJsLnNpZ25hbDtcbiAgICB9XG4gIH0oKSk7XG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1Jlc3BvbnNlICcgKyBlcnJvci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICBpZiAodGhpcy5zdGF0dXMgPCAyMDAgfHwgdGhpcy5zdGF0dXMgPiA1OTkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Jlc3BvbnNlJzogVGhlIHN0YXR1cyBwcm92aWRlZCAoMCkgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzIwMCwgNTk5XS5cIilcbiAgfVxuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAyMDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2Uub2sgPSBmYWxzZVxuICByZXNwb25zZS5zdGF0dXMgPSAwXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZy5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgY2hlY2sgaWYgc3BlY2lmaWNhbGx5IGZvciB3aGVuIGEgdXNlciBmZXRjaGVzIGEgZmlsZSBsb2NhbGx5IGZyb20gdGhlIGZpbGUgc3lzdGVtXG4gICAgICAvLyBPbmx5IGlmIHRoZSBzdGF0dXMgaXMgb3V0IG9mIGEgbm9ybWFsIHJhbmdlXG4gICAgICBpZiAocmVxdWVzdC51cmwuaW5kZXhPZignZmlsZTovLycpID09PSAwICYmICh4aHIuc3RhdHVzIDwgMjAwIHx8IHhoci5zdGF0dXMgPiA1OTkpKSB7XG4gICAgICAgIG9wdGlvbnMuc3RhdHVzID0gMjAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMgPSB4aHIuc3RhdHVzO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCB0aW1lZCBvdXQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZy5sb2NhdGlvbi5ocmVmID8gZy5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlclxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzIHx8IChnLkhlYWRlcnMgJiYgaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgZy5IZWFkZXJzKSkpIHtcbiAgICAgIHZhciBuYW1lcyA9IFtdO1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgbmFtZXMucHVzaChub3JtYWxpemVOYW1lKG5hbWUpKVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmIChuYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWcuZmV0Y2gpIHtcbiAgZy5mZXRjaCA9IGZldGNoXG4gIGcuSGVhZGVycyA9IEhlYWRlcnNcbiAgZy5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgQ2hhbm5lbHMgZnJvbSAnLi9DaGFubmVscyc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTsiXSwibmFtZXMiOlsiR2xvYmFsU2NvcGUiLCJEaXNwb3NhYmxlIiwiRGlzcG9zYWJsZUxpc3QiLCJTdWJqZWN0IiwiUmVhZE9ubHlTdWJqZWN0IiwidmlzaWJpbGl0eUNoYW5nZUV2ZW50IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsImluaXRpYWxpemUiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJnZXQiLCJ2YWx1ZSIsImdldFRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlIiwiZGlzcG9zZSIsIl9kaXNwb3NhYmxlcyIsIl90aGlzIiwiaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSIsImRvY3VtZW50SXNIaWRkZW4iLCJ1c2VFdmVudENhcHR1cmVQaGFzZSIsImFkZERvY3VtZW50RXZlbnRMaXN0ZW5lciIsImFkZCIsInJlbW92ZURvY3VtZW50RXZlbnRMaXN0ZW5lciIsImRlZmF1bHQiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNBbmRyb2lkIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsImlzTW9iaWxlIiwiX2lzTW9iaWxlIiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJicm93c2VyTmFtZUFuZFZlcnNpb24iLCJtYXRjaCIsIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUiLCJwYXJzZUJyb3dzZXJOYW1lIiwiYnJvd3Nlck5hbWVMaXN0Iiwic3BsaXQiLCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24iLCJicm93c2VyVmVyc2lvbkxpc3QiLCJmdWxsVmVyc2lvbiIsIk51bWJlciIsIm1zaWUiLCJpbmRleE9mIiwiY29uY2F0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ0cmlkZW50IiwidmVyc2lvbiIsIl9Ccm93c2VyRGV0ZWN0b3IiLCJ0ZXN0IiwiX25hdmlnYXRvciIsIl9uYXZpZ2F0b3IyIiwiaW5jbHVkZXMiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwiUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiZ2V0U3RyaW5nVmFsdWUiLCJuYW1lIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZ2V0Qm9vbGVhblZhbHVlIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiZGVmYXVsdFRlbGVtZXRyeUxldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSIsImRlZmF1bHRMb2dnaW5nTGV2ZWwiLCJkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCIsImRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwiLCJGZWF0dXJlRW5hYmxlbWVudCIsIkdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIiwiRXJyb3IiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uIiwiaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkIiwiZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbiIsImlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQiLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsImJpbmQiLCJzZXRUaW1lb3V0IiwiaW1nIiwiZG9jdW1lbnRDcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwibmF2aWdhdG9yQ29ubmVjdGlvbiIsInVuZGVmaW5lZCIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiX3JlZiIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYSIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTIiLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmEzIiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJfcmVmMiIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTQiLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmE1IiwiX0dsb2JhbFNjb3BlJHZhbHVlJG5hNiIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTciLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmE4IiwicnR0IiwiX0dsb2JhbFNjb3BlJHZhbHVlJG5hOSIsImxpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTEwIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIk1ldHJpY3NUeXBlIiwiTWV0cmljVHlwZSIsIkR1cmF0aW9ucyIsIlNESyIsIkxvZ2dlckZhY3RvcnkiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiZ2V0TG9nZ2VyIiwibWV0cmljc1NlcnZpY2UiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIlNldHVwQ29tcGxldGVkIiwiZmFpbCIsIlNldHVwRmFpbGVkIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiZ2V0TmFtZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJ0b0lzb1N0cmluZyIsIkVkZ2VUb2tlbiIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwiZSIsInN0YXJ0c1dpdGgiLCJfZWRnZVRva2VuJHRva2VuIiwiX2VkZ2VUb2tlbiR0b2tlbjIiLCJfYXBwbGljYXRpb25JZCIsImFwcGxpY2F0aW9uSWQiLCJfdG9rZW4iLCJ1cmkiLCJjYXBhYmlsaXRpZXMiLCJCdWlsZEZlYXR1cmVzIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfc2VuZExvZ3MiLCJfc2VuZE1ldHJpY3MiLCJfbG9nVG9Db25zb2xlIiwiYXBwbHlGZWF0dXJlcyIsImZlYXR1cmVzIiwiX19GRUFUVVJFU19fIiwic2VuZExvY2FsQ2FuZGlkYXRlcyIsInNlbmRMb2dzIiwic2VuZE1ldHJpY3MiLCJsb2dUb0NvbnNvbGUiLCJpc0Nocm9tZTc0IiwiaXNDaHJvbWU3NSIsImlzQ2hyb21lNzYiLCJpc0Nocm9tZTc3IiwiYWRkVHJhbmNlaXZlckRpc2FibGVkIiwiaXNDaHJvbWU2OSIsImlzQ2hyb21lNzAiLCJpc0Nocm9tZTcxIiwiaXNDaHJvbWU3MiIsImJyb3dzZXJOYW1lIiwiYnJvd3Nlck1ham9yVmVyc2lvbiIsIl9HbG9iYWxTY29wZSR2YWx1ZSIsIk1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IiLCJNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yIiwiUlRDUnRwUmVjZWl2ZXIiLCJwcm90b3R5cGUiLCJjcmVhdGVFbmNvZGVkU3RyZWFtcyIsIlJUQ1J0cFNjcmlwdFRyYW5zZm9ybSIsIkhUTUxWaWRlb0VsZW1lbnQiLCJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrIiwiaXNSZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrU3VwcG9ydGVkIiwiaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQiLCJpc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCIsIlBhcmFtZXRlcnMiLCJfZGlzY292ZXJ5UGFyYW1ldGVycyIsImFwcGx5UGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJfX1BBUkFNRVRFUlNfXyIsImRpc2NvdmVyeSIsImludGVudGlvbnMiLCJicm93c2VyR2xvYmFsU2NvcGUiLCJkb2N1bWVudCIsImxvY2F0aW9uIiwid2luZG93IiwiZ2xvYmFsU2NvcGUiLCJfZG9jdW1lbnQiLCJfbG9jYXRpb24iLCJfd2luZG93IiwiRm9ybURhdGEiLCJNZWRpYVN0cmVhbSIsIk1lZGlhU3RyZWFtVHJhY2siLCJSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsIlJUQ0ljZUNhbmRpZGF0ZSIsIlVSTFNlYXJjaFBhcmFtcyIsImNsZWFySW50ZXJ2YWwiLCJjbGVhclRpbWVvdXQiLCJjcmVhdGVFbGVtZW50IiwiaGFzRm9jdXMiLCJoaWRkZW4iLCJxdWVyeVNlbGVjdG9yIiwiZmV0Y2giLCJob3N0bmFtZSIsInNlYXJjaCIsImNvbm5lY3Rpb24iLCJvbkxpbmUiLCJzZXRJbnRlcnZhbCIsInNldEluc3RhbmNlIiwicHJvdmlkZWRHbG9iYWxTY29wZSIsImdldEluc3RhbmNlIiwiX3JlYWRPbmx5SW5zdGFuY2UiLCJzdWJzY3JpYmUiLCJjYWxsYmFjayIsIl9HbG9iYWxTY29wZSIsIl9pbnN0YW5jZSIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsImNhbGwiLCJfbGlzdCIsImZvckVhY2giLCJ0b1N0cmluZyIsIm1heERpZ2l0c0luRmxvYXRBZnRlckRvdCIsIk51bWJlcnMiLCJjb3VudE51bWJlckxlbmd0aCIsImluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUiLCJudW1iZXIiLCJjb3VudERpZ2l0c0JlZm9yZURlY2ltYWwiLCJNYXRoIiwiZmxvb3IiLCJjb3VudERpZ2l0c0FmdGVyRGVjaW1hbCIsImZpeFJvdW5kaW5nIiwicHJlY2lzaW9uIiwicG93ZXIiLCJwb3ciLCJyb3VuZCIsImRpZ2l0c0JlZm9yZURlY2ltYWwiLCJvcmlnaW5hbFZhbHVlIiwibW9kaWZpZWRWYWx1ZSIsImNvdW50IiwiU3RyaW5ncyIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsImxvb3BzIiwiY2VpbCIsIkFycmF5IiwiZmlsbCIsInJlZHVjZSIsInN0cmluZyIsImZ1bmMiLCJVaW50OEFycmF5cyIsImlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlIiwidGFyZ2V0Qnl0ZVNlcXVlbmNlIiwiZGF0YSIsIm9mZnNldCIsImlkeCIsImZpbmRUYXJnZXRCeXRlU2VxdWVuY2VJbmRleEZyb21PZmZzZXQiLCJyZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCIsImFyZ3VtZW50cyIsImN1cnJlbnRJbmRleCIsImJ5dGVMZW5ndGgiLCJnZXRVdWlkU3RyaW5nRnJvbVVpbnQ4QXJyYXkiLCJ1dWlkQnl0ZUxlbmd0aCIsInV1aWQiLCJieXRlSGV4IiwicGFkU3RhcnQiLCJqb2luIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiTG9nZ2luZ0xldmVsIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJXYXJuIiwiY29uc29sZSIsIkxvZ2dlciIsImFwcGVuZGVycyIsIl9jYXRlZ29yeSIsInRyYWNlIiwiVHJhY2UiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJkZWJ1ZyIsIkRlYnVnIiwiX2xlbjIiLCJfa2V5MiIsIkluZm8iLCJfbGVuMyIsIl9rZXkzIiwid2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJfdGhpczIiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5IiwiZXJyb3JTdGFja0Fsc29IYXNFcnJvck1lc3NhZ2UiLCJzdGFjayIsImFyZyIsImNhY2hlIiwiXyIsIk9iamVjdCIsImFyZ3VtZW50IiwidG9TdHJpbmdTdHIiLCJMb2dnaW5nVGhyZXNob2xkIiwiVGVsZW1ldHJ5QXBwZW5kZXIiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsIl90ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwibG9nZ2VyIiwiX2xvZ2dlcnMiLCJhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlMb2dnaW5nTGV2ZWwiLCJhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsIiwiYXBwbHlDb25zb2xlTG9nZ2VyIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsInNldFRocmVzaG9sZCIsImFwcGx5QXBwZW5kZXIiLCJsb2dnaW5nTGV2ZWwiLCJPZmYiLCJBbGwiLCJjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsIiwibG9nZ2luZ0xldmVsVHlwZSIsIlRlbGVtZXRyeUxldmVsIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJUaW1lVG9GaXJzdEZyYW1lIiwiRXNzZW50aWFsIiwiQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIlN0YWxsZWQiLCJCdWZmZXJpbmciLCJSb3VuZFRyaXBUaW1lIiwiRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJOZXR3b3JrVHlwZSIsIlJlc29sdXRpb25DaGFuZ2VkIiwiQXBwbGljYXRpb25Gb3JlZ3JvdW5kIiwiQXBwbGljYXRpb25CYWNrZ3JvdW5kIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc1NlcnZpY2UiLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NGYWN0b3J5IiwiZ2V0TWV0cmljc1NlcnZpY2UiLCJfdHlwZW9mIiwibWV0cmljc1NlcnZpY2VzIiwiX21ldHJpY3NTZXJ2aWNlcyIsIm1ldHJpY3NDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbCIsInNldFRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwiRXhwb25lbnRpYWxCYWNrb2ZmIiwiVmVyc2lvbk1hbmFnZXIiLCJyZXF1ZXN0U2l6ZUxpbWl0IiwibWF4QnVmZmVyZWRSZWNvcmRzIiwibG9jYXRpb25Ib3N0bmFtZSIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJtZXRyaWMiLCJwcmV2aW91c1ZhbHVlIiwicmVzb3VyY2UiLCJraW5kIiwibWV0cmljUmVjb3JkIiwidGltZXN0YW1wIiwiZnVsbFF1YWxpZmllZE5hbWUiLCJfZG9tYWluIiwic2RrVmVyc2lvbiIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwibWV0cmljc01lc3NhZ2VzIiwiZm9ybURhdGEiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiYXBwZW5kIiwicmVjb3JkcyIsIm1ldGhvZCIsImJvZHkiLCJhYnJ1cHQiLCJzZW50Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9pc1NlbmRpbmciLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsImlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlIiwiX2ZhaWx1cmVDb3VudCIsIl90b0NvbnN1bWFibGVBcnJheSIsImdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQiLCJzdGF0dXMiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJpc1ByZWNhY2hpbmdFbmFibGVkIiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWNoZWQiLCJkaXJlY3Rpb24iLCJwZWVyQ29ubmVjdGlvbiIsImNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWxsZWUzIiwiZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIiwiY29uZmlndXJhdGlvbiIsIl9hcmdzMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsInZpZGVvVHJhbnNjZWl2ZXIiLCJhdWRpb1RyYW5zY2VpdmVyIiwib3B0aW9ucyIsImFkZFRyYW5zY2VpdmVyIiwidDAiLCJ0MSIsInQyIiwiY3JlYXRlT2ZmZXIiLCJ0MyIsImxvY2FsT2ZmZXIiLCJvZmZlclRvUmVjZWl2ZUF1ZGlvIiwib2ZmZXJUb1JlY2VpdmVWaWRlbyIsInQ0IiwidDUiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJpIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsIlNkcFBhcnNlciIsInVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uMiIsImdldEN1cnJlbnRPZmZlckRpc2FibGVkIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwicGFyc2VkU0RQIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJfdXBkYXRlU3RhdGlzdGljIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uMyIsIl9pZ25vcmVkIiwiZ2V0S2luZEZvclNhZmFyaTExIiwiZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY2IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NyIsImJ5dGVzIiwiYnl0ZXNSZWNlaXZlZCIsInByZXZpb3VzQnl0ZXNSZWNlaXZlZCIsImJ5dGVzRGVsdGEiLCJ0aW1lRGVsdGEiLCJiaXRyYXRlIiwic3NyYyIsInBhY2tldHNMb3N0IiwicGFja2V0c1JlY2VpdmVkIiwiZ2V0Q29kZWNCeVR5cGUiLCJ2aWRlbyIsImZyYW1lc0RlY29kZWQiLCJmcHMiLCJfdXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uNCIsImdldFN0YXRzTGVnYWN5IiwicmVzdWx0IiwibmFtZXMiLCJzdGF0IiwiX3RoaXMyJF9ydGNTdGF0aXN0aWMkIiwiX3RoaXMyJF9ydGNTdGF0aXN0aWMkMiIsIl9zZHAiLCJzZHBTcGxpdEJ5TGluZXMiLCJzZHBTcGxpdEJ5VHJhY2tzIiwiX2F1ZGlvQ29kZWMiLCJhcHBseUNvZGVjIiwiX3ZpZGVvQ29kZWMiLCJfaXNBdWRpb1RyYWNrRW5hYmxlZCIsImlzVHJhY2tCeVR5cGVFbmFibGVkIiwiX2lzVmlkZW9UcmFja0VuYWJsZWQiLCJzZHBTZWN0aW9uRm9yVHlwZSIsImZpbmQiLCJzZHBUcmFjayIsIl9zZHBTcGxpdEJ5TGluZXMkZmluZCIsInJ0bWFwIiwic2RwTGluZSIsInVzZWRDb2RlY0xpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQiLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsImN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIiwiY29ubmVjdGlvblN0YXRlIiwiaWNlQ29ubmVjdGlvblN0YXRlIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uNSIsImdldENvbmZpZ3VyYXRpb24iLCJfdGhpcyRfcGVlckNvbm5lY3Rpb242Iiwic2V0Q29uZmlndXJhdGlvbiIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjciLCJnZXRUcmFuc2NlaXZlcnNEaXNhYmxlZCIsImdldFRyYW5zY2VpdmVycyIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjgiLCJfY3JlYXRlT2ZmZXIiLCJwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwiZ2V0UmVjZWl2ZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY2xvc2UiLCJfdGhpcyRfcGVlckNvbm5lY3Rpb245IiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uIiwicmVzb2x2ZVBlZXJDb25uZWN0aW9uUHJvbWlzZSIsInN1YmplY3QiLCJfc3ViamVjdCIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsIl9EaXNwb3NhYmxlIiwibGlzdGVuZXJzIiwiX2NhbGxTdXBlciIsIl9pbmhlcml0cyIsIl9saXN0ZW5lcnMiLCJfdmFsdWUiLCJjaGFuZ2VkIiwiY29tcGFyYWJsZSIsImVxdWFscyIsImJhc2VVUkwiLCJvcmlnaW4iLCJEaXNjb3ZlcnlVcmkiLCJfR2xvYmFsU2NvcGUkZ2V0SW5zdGEiLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0IiwiX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsIm9uTG9hZCIsIl9pbml0aWFsaXplZCIsImFkZFdpbmRvd0V2ZW50TGlzdGVuZXIiLCJpbml0Iiwib3B0aW9uc1dpdGhPcHRpb25hbGdsb2JhbFNjb3BlIiwicGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiY29uc29sZUxvZ2dpbmdMZXZlbCIsImNvbnNvbGVBcHBlbmRlciIsImF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIndlYlBsYXllckxvYWRlciIsInNoYWthUGxheWVyTG9hZGVyIiwiaGxzSnNMb2FkZXIiLCJfdGhpcyRfYXBwbGljYXRpb25BY3QiLCJfU0RLIiwic2VnbWVudHMiLCJwcm90b2NvbCIsInVuc2hpZnQiLCJlbmRzV2l0aCIsIkJpdHJhdGVTdGF0ZSIsIkJpdHJhdGVNb2RlIiwiRGltZW5zaW9uIiwiQ2hhbm5lbFN0YXRlIiwiVmlkZW9UZWxlbWV0cnkiLCJTZXNzaW9uVGVsZW1ldHJ5IiwiVG9rZW5Db250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJFbmNvZGVkU3RyZWFtU2luayIsIlN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiU3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIlBlZXJDb25uZWN0aW9uQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsIkZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IiwiU3RyZWFtRmFjdG9yeSIsIkRpc2NvdmVyeSIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwic3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiQ2hhbm5lbCIsInZpZGVvRWxlbWVudCIsImNoYW5uZWxDb250ZXh0T3B0aW9ucyIsInRhcmdldExhZyIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImVuY29kZWRWaWRlb1N0cmVhbVNpbmsiLCJlbmNvZGVkQXVkaW9TdHJlYW1TaW5rIiwiX3Rva2VuQ29udGV4dCIsIl9jaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9zdGF0ZUNvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uIiwiX3JlYWRPbmx5U3RhdGUiLCJzdGF0ZSIsIl9yZWFkT25seUF1dG9NdXRlZCIsImF1dG9NdXRlZCIsIl9yZWFkT25seUF1dG9QYXVzZWQiLCJhdXRvUGF1c2VkIiwiX3JlYWRPbmx5VG9rZW5FeHBpcmluZyIsInRva2VuRXhwaXJpbmciLCJfcmVhZE9ubHlBdXRob3JpemVkIiwiYXV0aG9yaXplZCIsIl9yZWFkT25seU9ubGluZSIsIm9ubGluZSIsIl9yZWFkT25seUxvYWRpbmciLCJsb2FkaW5nIiwiX3JlYWRPbmx5UGxheWluZyIsInBsYXlpbmciLCJfcmVhZE9ubHlTdGFuZGJ5Iiwic3RhbmRieSIsIl9yZWFkT25seVN0b3BwZWQiLCJzdG9wcGVkIiwiX3JlYWRPbmx5VGFyZ2V0TGFnIiwiX3JlYWRPbmx5TGFnIiwibGFnIiwiX3JlYWRPbmx5Qml0cmF0ZUxpbWl0IiwiYml0cmF0ZUxpbWl0IiwiX3JlYWRPbmx5UmVzb2x1dGlvbiIsInJlc29sdXRpb24iLCJfcmVhZE9ubHlGYWlsdXJlQ291bnQiLCJmYWlsdXJlQ291bnQiLCJfcmVhZE9ubHlFbmRQb2ludCIsImVuZFBvaW50IiwiX3JlYWRPbmx5U3RyZWFtIiwic3RyZWFtIiwiX3JlYWRPbmx5UnRjU3RhdGlzdGljcyIsIl9yZWFkT25seU1lZGlhU3RyZWFtIiwiX3Nlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJfZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQiLCJjb25maWd1cmVGcmFtZVRpbWluZ0luZm9ybWF0aW9uIiwiX3JlYWRPbmx5SXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uRW5hYmxlZCIsImlzRW5hYmxlZCIsIl9yZWFkT25seURlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIiwiZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJfcmVhZE9ubHlSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJyZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0Iiwic2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSIsInNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyIsIlN0b3BwZWQiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0IiwiUGxheWluZyIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJLZWVwIiwiTm9ybWFsIiwiZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInJlbW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIiLCJzdGFydCIsInBhdXNlIiwic3JjT2JqZWN0IiwiSW5pdGlhbGl6aW5nIiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJlbXB0eSIsImRpc3Bvc2FibGVzIiwic2V0Qml0cmF0ZUxpbWl0IiwiY2xlYXJCaXRyYXRlTGltaXQiLCJiaXRyYXRlSW5CaXRzUGVyU2Vjb25kIiwiUmVzZXQiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsInJlYXNvbiIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsImNsZWFuVXBSZXNvdXJjZXMiLCJfcmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJyZXN1bWUiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJfZGlzcG9zZSIsImlzRGlzcG9zZWQiLCJnZXRVcmkiLCJfc3RhcnQiLCJwcm9jZXNzU3RhcnQiLCJfcHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtIiwidmFsaWQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtMiIsIl92YWxpZCIsIl92YWxpZGF0aW9uUmVzdWx0IiwiX0VuY29kZWRTdHJlYW1TaW5rJHZhIiwiX3ZhbGlkMiIsIl92YWxpZGF0aW9uUmVzdWx0MiIsIl9FbmNvZGVkU3RyZWFtU2luayR2YTIiLCJfdmFsaWQzIiwiX3ZhbGlkYXRpb25SZXN1bHQzIiwiaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2siLCJoYXNFbmNvZGVkU3RyZWFtU2luayIsImhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayIsInN0cmVhbVBsYXllciIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIlN0YXJ0aW5nIiwiVW5hdXRob3JpemVkIiwidmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiQ29uZmlndXJhdGlvbkVycm9yIiwidmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luayIsImlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQiLCJVbnN1cHBvcnRlZEZlYXR1cmUiLCJSZWNvdmVyaW5nIiwiY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiY3JlYXRlIiwiQ2xpZW50U3RhcnRFcnJvciIsImF1dG9tYXRpY1JldHJ5T25GYWlsdXJlIiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsIlN0YW5kQnkiLCJPZmZsaW5lIiwiR2VvUmVzdHJpY3RlZCIsIkdlb0Jsb2NrZWQiLCJQYXVzZWQiLCJSZWNvbm5lY3RpbmciLCJUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiX3RoaXM2IiwiZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCIsInNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyIsImRlc3Ryb3lTdHJlYW0iLCJwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwiX3RoaXM3IiwiZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNhcGFiaWxpdHkiLCJjYXBhYmlsaXR5Iiwic2hvdWxkRXh0cmFjdFRpbWVjb2RlIiwic2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMiLCJpc0NoYW5uZWxGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkIiwib3B0aW9uIiwidHJpbSIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM4IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJpbml0aWFsaXplZCIsImNoYW5uZWxPcHRpb25zIiwiZGVmYXVsdFRhcmdldExhZyIsIl9vcHRpb25zJHRhcmdldExhZyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJhcHBseVN0YXR1cyIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsIkJpdHN0cmVhbVJlYWRlciIsIl9kYXRhIiwiX2JpdE9mZnNldCIsInJlYWRCaXRzIiwiYml0c1RvUmVhZCIsImdldFJlbWFpbmluZ0JpdHMiLCJiaXRzUmVtYWluaW5nIiwiYnl0ZU9mZnNldCIsImJpdFBvc2l0aW9uSW5CeXRlIiwiYml0c0F2YWlsYWJsZUluQnl0ZSIsIm1pbiIsIm1hc2siLCJieXRlVmFsdWUiLCJiaXRzIiwic2tpcEJpdHMiLCJiaXRzVG9Ta2lwIiwiRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQiLCJIMjY0Qml0c3RyZWFtIiwiZXZlbnRQdWJsaXNoZXIiLCJfZXZlbnRQdWJsaXNoZXIiLCJzdWJzY3JpYmVUb05hbFVuaXQiLCJuYWxVbml0VHlwZSIsIk5hbFVuaXQiLCJuYWxVbml0RXZlbnQiLCJzdWJzY3JpYmVUb1NlaVBheWxvYWRUeXBlIiwic2VpUGF5bG9hZFR5cGUiLCJTZWlQYXlsb2FkIiwic2VpUGF5bG9hZEV2ZW50Iiwic3Vic2NyaWJlVG9QYXlsb2FkIiwiY29udGV4dCIsInBheWxvYWRVdWlkIiwicHVibGlzaCIsIlBheWxvYWRTdWJzY3JpcHRpb24iLCJQYXlsb2FkIiwicGF5bG9hZEV2ZW50IiwiTmFsVW5pdFR5cGUiLCJTZWlQYXlsb2FkVHlwZSIsIkVtdWxhdGlvblByZXZlbnRpb25CeXRlcyIsIkFubmV4QkJ5dGVTdHJlYW1QYXJzZXIiLCJ2Y2xFeHRyYWN0aW9uU3RyYXRlZ3kiLCJfdmNsRXh0cmFjdGlvblN0cmF0ZWd5Iiwic3Vic2NyaWJlVG9FbmNvZGVkVmlkZW9TdHJlYW1DaHVua0V2ZW50cyIsIkVuY29kZWRWaWRlb1N0cmVhbUNodW5rIiwicGFyc2VFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayIsImNodW5rIiwiaGFuZGxlRXh0cmFjdGVkRGF0YSIsImV4dHJhY3ROYWxVbml0QXRPZmZzZXQiLCJub3RpZnlFbmRPZkNodW5rIiwiYW5uZXhCU3RhcnRDb2RlTGVuZ3RoIiwibmFsVW5pdCIsInNlaVBheWxvYWRzIiwicHVibGlzaE5hbFVuaXQiLCJzZWlQYXlsb2FkIiwiaGFuZGxlU2VpUGF5bG9hZCIsInB1Ymxpc2hTZWlQYXlsb2FkIiwiVXNlckRhdGFVbnJlZ2lzdGVyZWQiLCJoYW5kbGVTZWlQYXlsb2FkVXNlckRhdGFVbnJlZ2lzdGVyZWQiLCJzdWJhcnJheSIsInBheWxvYWREYXRhIiwicHVibGlzaFBheWxvYWQiLCJwYXlsb2FkIiwiRW5kT2ZDaHVuayIsIm5hbFVuaXRIZWFkZXJJbmRleCIsImV4dHJhY3RlZERhdGEiLCJTbGljZUxheWVyTm9uSWRyRGF0YSIsIlNsaWNlRGF0YVBhcnRpdGlvbkFMYXllciIsIlNsaWNlRGF0YVBhcnRpdGlvbkJMYXllciIsIlNsaWNlRGF0YVBhcnRpdGlvbkNMYXllciIsIlNsaWNlTGF5ZXJJZHJEYXRhIiwiZXh0cmFjdFZjbE5hbFVuaXQiLCJTdXBwbGVtZW50YWxFbmhhbmNlbWVudEluZm9ybWF0aW9uIiwiZXh0cmFjdFNlaU5hbFVuaXQiLCJleHRyYWN0Tm9uVmNsTmFsVW5pdCIsIm5hbFVuaXREYXRhIiwiX3NlaVBheWxvYWQ0Qnl0ZUVuZENvZGUiLCJfc2VpUGF5bG9hZDNCeXRlRW5kQ29kZSIsImV4dHJhY3RlZFNlaVBheWxvYWQiLCJleHRyYWN0U2VpUGF5bG9hZCIsInBheWxvYWRUeXBlIiwiZW5kSW5kZXgiLCJuZXh0QW5uZXhCU3RhcnRDb2RlSW5kZXgiLCJmaW5kQW5uZXhCU3RhcnRJbmRleEZyb21PZmZzZXQiLCJmZkNvdW50IiwicGF5bG9hZFNpemUiLCJnZXRPZmZzZXRXaXRoRXhwYW5kZWRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMiLCJpbmRleDQiLCJhbm5leEI0Qnl0ZVN0YXJ0Q29kZSIsImFubmV4QjNCeXRlU3RhcnRDb2RlIiwiVWludDhBcnJheSIsImJ1ZmZlciIsIm51bWJlck9mTm9uRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIiwibGVhZGluZ1plcm9CeXRlcyIsIm51bWJlck9mQnl0ZXNWaXNpdGVkIiwibnVtYmVyT2ZCeXRlc1RvU2VlayIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb25CeXRlcyIsIm91dHB1dCIsIm91dE9mZnNldCIsImVic3BPZmZzZXQiLCJwcmV2ZW50aW9uQnl0ZUlkeCIsIlBpY1N0cnVjdCIsIlBpY3R1cmVUaW1pbmdQYXJzZXIiLCJjb25maWciLCJiaXRzdHJlYW1SZWFkZXIiLCJwaWN0dXJlVGltaW5nIiwicGljU3RydWN0IiwiY3BiRHBiRGVsYXlzUHJlc2VudEZsYWciLCJjcGJSZW1vdmFsRGVsYXlMZW5ndGhNaW51czEiLCJkcGJPdXRwdXREZWxheUxlbmd0aE1pbnVzMSIsInBpY1N0cnVjdFByZXNlbnRGbGFnIiwibnVtQ2xvY2tUUyIsImNvbnZlcnRQaWNTdHJ1Y3RUb051bUNsb2NrVFMiLCJjbG9ja1RpbWVzdGFtcHMiLCJjbG9ja1RpbWVzdGFtcEZsYWciLCJjbG9ja1RpbWVzdGFtcCIsImN0VHlwZSIsIm51aXRGaWVsZEJhc2VkRmxhZyIsImNvdW50aW5nVHlwZSIsImZ1bGxUaW1lc3RhbXBGbGFnIiwiZGlzY29udGludWl0eUZsYWciLCJjbnREcm9wcGVkRmxhZyIsIm5GcmFtZXMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwic2Vjb25kc0ZsYWciLCJtaW51dGVzRmxhZyIsImhvdXJzRmxhZyIsInRpbWVPZmZzZXQiLCJQcm9ncmVzc2l2ZUZyYW1lIiwiVG9wRmllbGQiLCJCb3R0b21GaWVsZCIsIlRvcEZpZWxkQm90dG9tRmllbGQiLCJCb3R0b21GaWVsZFRvcEZpZWxkIiwiRnJhbWVEb3VibGluZyIsIlRvcEZpZWxkQm90dG9tRmllbGRUb3BGaWVsZFJlcGVhdGVkIiwiQm90dG9tRmllbGRUb3BGaWVsZEJvdHRvbUZpZWxkUmVwZWF0ZWQiLCJGcmFtZVRyaXBsaW5nIiwiUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kiLCJuZXh0UG90ZW50aWFsNEJ5dGVTdGFydENvZGVJbmRleCIsIl90cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aCIsIm5leHRQb3RlbnRpYWwzQnl0ZVN0YXJ0Q29kZUluZGV4IiwiVmFuaWxsYVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kiLCJFdmVudFB1Ymxpc2hlciIsIlBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMiLCJIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIiwiUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJCaXRzdHJlYW1EZWNvZGVycyIsImNyZWF0ZUgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJkZWNvZGVyRXZlbnRQdWJsaXNoZXIiLCJiaXRzdHJlYW0iLCJwYXJzZXIiLCJjcmVhdGVQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciIsImgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJlbmNvZGluZyIsIl9iaXRzdHJlYW0iLCJfcGFyc2VyIiwiZGVjb2RlIiwiZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bmsiLCJfaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciIsIl9lbmNvZGluZyIsInN1YnNjcmliZVRvRW1iZWRkZWREYXRhIiwib25EZWNvZGVkTWVkaWFDaHVuayIsInRyYWNrSWQiLCJkZWNvZGVkTWVkaWFDaHVua0V2ZW50Iiwibm9vcCIsIlNldCIsIk1hcCIsImVuYWJsZVdhcm5pbmdMb2dXaGVuVmNsRW1iZWRkZWREYXRhTm90Rm91bmQiLCJfZXhwZWN0ZWRQYXlsb2FkVXVpZCIsIl9waGVuaXhWY2xFbWJlZGRlZERhdGFVdWlkIiwiX3BoZW5peEluaXRpYWxpemF0aW9uU2VnbWVudFV1aWQiLCJzdWJzY3JpYmVUb1BheWxvYWRFdmVudHMiLCJzdWJzY3JpYmVUb1BheWxvYWRTdWJzY3JpcHRpb25FdmVudHMiLCJzdWJzY3JpYmVUb05hbFVuaXRFdmVudHMiLCJfZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZCIsIl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQiLCJjbGVhciIsInN1YnNjcmliZVRvRW5kT2ZDaHVua0V2ZW50cyIsImFybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kIiwiaGFuZGxlTmFsVW5pdEV2ZW50IiwiX3JlZjMiLCJfdHJ1bmNhdGVkVmNsTmFsVW5pdERhdGFCeXRlTGVuZ3RoIiwicHVibGlzaFZjbEVtYmVkZGVkUGF5bG9hZCIsImV4dHJhY3RWY2xFbWJlZGRlZERhdGEiLCJkaXNhcm1Mb2dnaW5nTm9WY2xFbWJlZGRlZERhdGFGb3VuZCIsIl9yZWY0IiwibG9nV2FybmluZ1ZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kIiwiY29udGV4dElkIiwiaGFuZGxlRW5kT2ZFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayIsIl9yZWY1IiwiZW5kT2ZDaHVua0V2ZW50SGFuZGxlciIsImhhbmRsZVBheWxvYWRFdmVudCIsIl9yZWY2IiwiaGFzIiwibG9nV2FybmluZ1VuZXhwZWN0ZWRQYXlsb2FkVXVpZFJlY2VpdmVkT25jZSIsIkV2ZW50RW1pdHRlciIsImVtaXQiLCJldmVudCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJlcnIiLCJmIiwib25FdmVudFdpdGhOb1N1YnNjcmliZXIiLCJvbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXIiLCJfb25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVycyIsImV2ZW50VHlwZSIsImVtaXR0ZXIiLCJfZXZlbnRFbWl0dGVycyIsImNyZWF0ZUVtaXR0ZXIiLCJkaXNwb3NhYmxlTGlzdGVuZXIiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkZvcmNlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsInJlc29sdmVFbmRQb2ludFByb21pc2UiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsImRpc2NvdmVyeVNlcnZpY2UiLCJjYWNoZWRWYWx1ZSIsIl9jYWNoZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiRW5kUG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJyYWNlIiwib2siLCJ0ZXh0IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJmYWlsZWRSZXF1ZXN0cyIsInByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkIiwiX2FyZ3MyIiwiYnVpbGREaXNjb3ZlcnlVcmwiLCJwaW5nIiwidGltZSIsIl9kaXNjb3ZlcnlVcmkiLCJkaXNjb3ZlcnlQYXJhbWV0ZXJzIiwic2VhcmNoUGFyYW1zIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiX3JvdW5kVHJpcFRpbWUiLCJfcGluZyIsImZpbmlzaGVkIiwiYnVpbGRQaW5nVXJsIiwiX3N1YnNjcmliZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJib2R5V2l0aG91dE9mZmVyIiwiaHR0cFJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJidWlsZFVybCIsImJlYXJlclRva2VuIiwiaHR0cFJvdW5kVHJpcFRpbWUiLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9wdWJsaXNoIiwibWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl94NSIsIl94NiIsIl94NyIsInNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJzaGFyZWRTZWNyZXQiLCJtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDgiLCJfeDkiLCJfbGltaXRCaXRyYXRlIiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsIl9hZGRJY2VDYW5kaWRhdGVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9hcmdzNiIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzIiwiX3gxNSIsIl94MTYiLCJfeDE3IiwiX2Rlc3Ryb3lTdHJlYW0iLCJkZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX3gxOCIsIl94MTkiLCJfZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyIiwiY2hhbm5lbENvbnRleHQiLCJmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCIsIl9iaXRzdHJlYW1EZWNvZGVyIiwiX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wIiwiX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzIiwic2V0dXBWaWRlb0V2ZW50TGlzdGVuZXJzIiwiUGljdHVyZVRpbWluZyIsIm9uUGljdHVyZVRpbWluZ0V4dHJhY3RlZCIsInByb2Nlc3NGcmFtZSIsIm1pZCIsImZyYW1lIiwiZnJhbWVUaW1pbmciLCJyZWNlaXZlVGltZXN0YW1wIiwicmVtb3ZlRnJhbWVUaW1pbmdzRXhjZWVkaW5nTWF4Q2FwYWNpdHkiLCJydHBUaW1lc3RhbXAiLCJfcGljdHVyZVRpbWluZyRwaWNTdHIiLCJfcGljdHVyZVRpbWluZyRwaWNTdHIyIiwiX2Nsb2NrVGltZXN0YW1wJGhvdXJzIiwiX2Nsb2NrVGltZXN0YW1wJG1pbnV0IiwiX2Nsb2NrVGltZXN0YW1wJHNlY29uIiwiX3JlZiRjb250ZXh0IiwiX3BpY3R1cmVUaW1pbmdQYXJzZXIiLCJfcGljdHVyaW5nVGltaW5nUGFyc2luZ0NvbmZpZyIsInRpbWVjb2RlIiwiZnJhbWVzIiwiaXNGcmFtZURyb3AiLCJzb3VyY2VUaW1lc3RhbXAiLCJpbmdlc3RUaW1lc3RhbXAiLCJlbmNvZGVUaW1lc3RhbXAiLCJ0cmFuc2NvZGVUaW1lc3RhbXAiLCJwbGF5YmFja1N0YXRlIiwiX2N1cnJlbnRQbGF5YmFja1N0YXRlIiwidmlkZW9GcmFtZUNhbGxiYWNrIiwibWV0YWRhdGEiLCJhcm1WaWRlb0ZyYW1lQ2FsbGJhY2siLCJ0aW1lc3RhbXBzVG9EZWxldGUiLCJfc3RlcCR2YWx1ZSIsIl9zbGljZWRUb0FycmF5IiwiX29iamVjdFNwcmVhZCIsInJlbmRlclRpbWVzdGFtcCIsInBlcmZvcm1hbmNlIiwidGltZU9yaWdpbiIsIl9pIiwiX3RpbWVzdGFtcHNUb0RlbGV0ZSIsImVsZW1lbnRzVG9EZWxldGUiLCJzaXplIiwiTUFYX0ZSQU1FX1RJTUlOR19FTlRSSUVTIiwiaXRlcmF0b3IiLCJrZXlzIiwia2V5VG9EZWxldGUiLCJvblBsYXlpbmciLCJvblBhdXNlIiwib25TdGFsbGVkIiwib25XYWl0aW5nIiwib25FbmRlZCIsIm9uRXJyb3IiLCJfYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZCIsIl90aGlzMiRfY2hhbm5lbENvbnRleCIsImNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjayIsIl90aGlzJF9jaGFubmVsQ29udGV4dCIsIkluc2VydGFibGVTdHJlYW1zIiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJwZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJzdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwicmVxdWlyZXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJhbGwiLCJfcmVmMyQiLCJjbGllbnRPZmZlckRpc2FibGVkIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJyZXRyeUNhbGxiYWNrIiwibmF2aWdhdG9ySXNPbkxpbmUiLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIm1lZGlhU3RyZWFtUHJvbWlzZSIsIm9uVHJhY2tEaXNhYmxlZCIsInN0cmVhbXMiLCJ0cmFja0xpc3RlbmVyIiwiYW5zd2VyIiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJfcGVlckNvbm5lY3Rpb24kY3VycmUiLCJfdGhpcyRfY2hhbm5lbENvbnRleHQyIiwicGFyc2VkUmVtb3RlRGVzY3JpcHRpb24iLCJyZWNlaXZlcnMiLCJfSW5zZXJ0YWJsZVN0cmVhbXMkY28iLCJjb25maWd1cmVFbmNvZGVkU3RyZWFtUGlwZWxpbmUiLCJlbmNvZGVkVmlkZW9GcmFtZSIsInJlcXVpcmVzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsInRvVXBwZXJDYXNlIiwiZnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIiLCJnZXRWaWRlb1RyYWNrcyIsIl9wZWVyQ29ubmVjdGlvbiRnZXRUciIsInJlY2VpdmVyIiwic3VwcG9ydHNHZXRUcmFuc2NlaXZlcnMiLCJ0cmFuc2NlaXZlciIsIl9JbnNlcnRhYmxlU3RyZWFtcyRjbzIiLCJjb25maWd1cmVJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24iLCJ0cmFuc2Zvcm1lZFN0cmVhbSIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24iLCJydGNTdGF0aXN0aWMiLCJzdGF0aXN0aWNzIiwiYXVkaW8iLCJhdWRpb1RyYWNrRmFpbGVkIiwidmlkZW9UcmFja0ZhaWxlZCIsIl9hcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJvcHRpb25hbFBlZXJDb25uZWN0aW9uIiwibmV3UnRjQ29uZmlndXJhdGlvbiIsIm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfcGVlckNvbm5lY3Rpb24kY3VycmUyIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJSZWFsVGltZVN0cmVhbUZhY3RvcnkiLCJ0b2tlbkNhcGFiaWxpdGllcyIsIm1vZGUiLCJTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIiwiU2tpcEZyYW1lIiwiV29ya2VyVHJhbnNmb3JtU3RyZWFtIiwiZW5jb2RlZEF1ZGlvRnJhbWUiLCJyZWNlaXZlIiwibXVzdFNpbmsiLCJ3b3JrZXIiLCJvbm1lc3NhZ2UiLCJwb3N0TWVzc2FnZSIsImZvcmNlSW52YWxpZEZyYW1lIiwidHJhbnNmb3JtIiwidGVybWluYXRlIiwiZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiY29udHJvbGxlciIsInN1cnJvZ2F0ZSIsImdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZSIsImdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZSIsImdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMiLCJnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjIiwiZW5xdWV1ZSIsInRyYW5zZm9ybWVyIiwiVHJhbnNmb3JtU3RyZWFtIiwicmVjZWl2ZXJTdHJlYW1zIiwic291cmNlIiwicmVhZGFibGUiLCJzaW5rIiwid3JpdGFibGUiLCJwaXBlVGhyb3VnaCIsInBpcGVUbyIsImF1ZGlvUHVtcGVyIiwiQXVkaW8iLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSIsImdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMiLCJpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJ2aWRlb1RyYWNrIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwicmVtb3ZlVHJhY2siLCJhdWRpb1RyYWNrIiwiU3ltYm9sIiwiX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYyIsIk9QVVMiLCJfc2luZ2xlWmVyb0J5dGUiLCJfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciIsIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyIiwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCIsIl9kdW1teTgyeDgySDI2NCIsIklGcmFtZSIsIl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMiLCJIMjY0IiwiVlA4IiwiVlA5IiwiX2lzQW5kcm9pZENocm9tZSIsImdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIiLCJfZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjIiwic2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciIsImJpdE1hc2sxIiwiYml0TWFzazIiLCJiaXRTaGlmdFJpZ2h0QnkxIiwiYml0U2hpZnRMZWZ0Qnk3IiwiYnl0ZTEiLCJieXRlMiIsImNvcHlPZkR1bW15UEZyYW1lcyIsIlBGcmFtZSIsImJ1ZmZlckluZGV4IiwiX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleCIsIl9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIiwiaXNBbmRyb2lkIiwiX2lzTW9iaWxlQ2hyb21lIiwiX2lzU2FmYXJpIiwiX19CVUlMRF9WRVJTSU9OX18iLCJfZGVmYXVsdFZlcnNpb24iLCJUZWxlbWV0cnlTZXJ2aWNlIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJ2YWx1ZU9mIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldEl0ZW1TaXplIiwiZ2V0TG9nU2l6ZSIsInN1bSIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm1pbGxpc2Vjb25kcyIsInBhcnRzIiwiU3RyaW5nIiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0IiwiZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5TZWNvbmRzIiwicmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kIiwibWF4Iiwib3RoZXIiLCJhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl9uZXR3b3JrTW9uaXRvciIsImlzRm9yZWdyb3VuZCIsInJlY29yZEZvcmVncm91bmRDaGFuZ2UiLCJyZWNvcmROZXR3b3JrUlRUVXBkYXRlIiwicmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUiLCJkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsInJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSIsInRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJuZXdSVFQiLCJvbGRSdHQiLCJfbGFzdE5ldHdvcmtTdGF0aXN0aWNzIiwibmV3TmV0d29ya1R5cGUiLCJvbGROZXR3b3JrVHlwZSIsIm5ld0NhcGFjaXR5Iiwib2xkQ2FwYWNpdHkiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0cmVhbUlkIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiZW5kIiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJzb3VyY2VSb290IjoiIn0=
12982
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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YztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxj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RUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDcEMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQ3hLLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUM1RDtFQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUFFO0VBQ3hMc2IsR0FBRyxFQUFFLElBQUl0YixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGVBQWU7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNB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QUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixpQkFBaUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSLDRFQUE0RTtBQUM1RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLHFDQUFxQyw0QkFBNEI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsMEJBQTBCLGVBQWU7QUFDdEU7O0FBRU87QUFDUDtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pvQkE7QUFDQTtBQUNBOztBQUV5QjtBQUNTO0FBQ1E7QUFLNUI7QUFHZCwrREFBZTtFQUNibjdDLEdBQUcsRUFBSEEsNENBQUc7RUFDSHN6QixRQUFRLEVBQVJBLGlEQUFRO0VBQ1JsTixZQUFZLEVBQVpBLHFEQUFZQTtBQUNkLENBQUMsRSIsInNvdXJjZXMiOlsid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL1BsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9OdW1iZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvVWludDhBcnJheXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9TZHBQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9SZWFkT25seVN1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1N1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9FbnZpcm9ubWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1NESy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1RlbGVtZXRyeVVybC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9CaXRzdHJlYW1SZWFkZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvSDI2NEJpdHN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9uYWxVbml0L05hbFVuaXRUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L25hbFVuaXQvU2VpUGF5bG9hZFR5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9wYXJzZS9FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvUGljdHVyZVRpbWluZ1BhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9wYXJzZS92Y2wvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvdmNsL1ZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9kZWNvZGVycy9CaXRzdHJlYW1EZWNvZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvSDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2VuY29kaW5nLzIwMjMvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9ldmVudC9FdmVudEVtaXR0ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvZXZlbnQvRXZlbnRQdWJsaXNoZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvZXZlbnQvZXZlbnRzL0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZnJhbWVUaW1pbmcvSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0R1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0V4cG9uZW50aWFsQmFja29mZi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1RyYW5zZm9ybVN0cmVhbS53b3JrZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL3dvcmtlci1sb2FkZXIvZGlzdC9ydW50aW1lL2lubGluZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL3doYXR3Zy1mZXRjaC9mZXRjaC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCBmdW5jdGlvbigpIHtcbnJldHVybiAiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcblxuY29uc3QgdmlzaWJpbGl0eUNoYW5nZUV2ZW50ID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKSA9PiB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSAhR2xvYmFsU2NvcGUudmFsdWUuZG9jdW1lbnRJc0hpZGRlbjtcbiAgICBjb25zdCB1c2VFdmVudENhcHR1cmVQaGFzZSA9IGZhbHNlO1xuXG4gICAgR2xvYmFsU2NvcGUudmFsdWUuYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2VFdmVudCwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgdXNlRXZlbnRDYXB0dXJlUGhhc2UpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IEdsb2JhbFNjb3BlLnZhbHVlLnJlbW92ZURvY3VtZW50RXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlRXZlbnQsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHVzZUV2ZW50Q2FwdHVyZVBoYXNlKSkpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJEZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCA9IC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXC8pKFtcXGQuYXByZV0rKS9nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZSA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTWFqb3JWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc01vYmlsZSA9ICgvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQW5kcm9pZCA9ICgvQW5kcm9pZC9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNBbmRyb2lkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQW5kcm9pZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNNb2JpbGU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbi8vIFRoZSBQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZmlsZSBpcyB1c2VkIGluIHRoZSBzaWxlbnQgYnVpbGRcbi8vIHRvIGNvbnN0cmFpbiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWVzLlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgcHVibGljIHN0YXRpYyBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBQbGFpbkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFBsYWluQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5kZWZhdWx0Qm9vbGVhblZhbHVlW25hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcyc6IHRydWVcbiAgICB9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciB7XG4gIHN0YXRpYyBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQpIHtcbiAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLnF1ZXVlTWljcm90YXNrKHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uLmJpbmQodGhpcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uLmJpbmQodGhpcyksIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgaW1nOiBIVE1MSW1hZ2VFbGVtZW50IHwgbnVsbCA9IEdsb2JhbFNjb3BlLnZhbHVlLmRvY3VtZW50Q3JlYXRlRWxlbWVudDxIVE1MSW1hZ2VFbGVtZW50PignaW1nJyk7XG5cbiAgICBpbWcuc3JjID0gR2xvYmFsU2NvcGUudmFsdWUuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEwZSs3KV0pKTsgLy8gMTAwTWIgb3IgbGVzcyBvciBtb3JlIGRlcGVuZGluZyBvbiBhcyB5b3Ugd2lzaCB0byBmb3JjZS9pbnZva2UgR0MgY3ljbGUgcnVuXG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLlVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5zcmMpO1xuXG4gICAgICBpbWcgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQ6IGJvb2xlYW4gPSBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JDb25uZWN0aW9uICE9PSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lZmZlY3RpdmVUeXBlOiBTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4gPSBuZXcgU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD4gPSBuZXcgU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZG93bmxpbmsgPz8gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZG93bmxpbmtNYXggPz8gLTE7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZWZmZWN0aXZlVHlwZSA/PyBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy50eXBlID8/ICdVbmtub3duJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy5ydHQgPz8gLTE7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuXG4gICAgR2xvYmFsU2NvcGUudmFsdWUubmF2aWdhdG9yQ29ubmVjdGlvbj8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IEdsb2JhbFNjb3BlLnZhbHVlLm5hdmlnYXRvckNvbm5lY3Rpb24/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuXG5leHBvcnQgY2xhc3MgU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1TZXR1cExpc3RlbmVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0cmljc1NlcnZpY2UgPSBTREsubWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbWV0cmljU3VibWl0dGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN1Y2Nlc3Moc3RyZWFtSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuXG5pbnRlcmZhY2UgSVRva2VuIHtcbiAgdXJpOiBVUkwgfCBudWxsO1xuICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSUVkZ2VUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgdG9rZW46IElUb2tlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZVRva2VuIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbjogSVRva2VuO1xuXG4gIGNvbnN0cnVjdG9yKGVkZ2VUb2tlbjogSUVkZ2VUb2tlbiB8IG51bGwpIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7TG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmRlY2xhcmUgY29uc3QgX19GRUFUVVJFU19fOiB7XG4gIHNlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHNlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBzZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsZEZlYXR1cmVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IGJvb2xlYW47XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dUb0NvbnNvbGU6IExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9ncygpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvZ3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRNZXRyaWNzKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRNZXRyaWNzO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dUb0NvbnNvbGUoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ1RvQ29uc29sZTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZlYXR1cmVzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IF9fRkVBVFVSRVNfXztcblxuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9ICdzZW5kTG9jYWxDYW5kaWRhdGVzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMgOiB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnc2VuZExvZ3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvZ3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ3NlbmRNZXRyaWNzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRNZXRyaWNzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnbG9nVG9Db25zb2xlJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLmxvZ1RvQ29uc29sZSA6ICdBbGwnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSB0cnVlO1xuICAgICAgdGhpcy5fc2VuZExvZ3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX3NlbmRNZXRyaWNzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9sb2dUb0NvbnNvbGUgPSAnQWxsJztcbiAgICB9XG4gIH1cbn1cblxuQnVpbGRGZWF0dXJlcy5hcHBseUZlYXR1cmVzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0VHJhbnNjZWl2ZXJzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiB0eXBlb2YgR2xvYmFsU2NvcGUudmFsdWU/LmRvY3VtZW50Q3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0eXBlb2YgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yID09PSAndW5kZWZpbmVkJyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBSVENSdHBSZWNlaXZlci5wcm90b3R5cGUuY3JlYXRlRW5jb2RlZFN0cmVhbXMgIT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFja1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIEhUTUxWaWRlb0VsZW1lbnQucHJvdG90eXBlLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2sgIT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0NoYW5uZWxGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBGZWF0dXJlRW5hYmxlbWVudC5pc1JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2tTdXBwb3J0ZWRcbiAgICAgICYmIChGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCB8fCBGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdTYWZhcmknO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmRlY2xhcmUgY29uc3QgX19QQVJBTUVURVJTX186IHtcbiAgZGlzY292ZXJ5OiBJRGlzY292ZXJ5UGFyYW1ldGVyO1xufTtcblxuaW50ZXJmYWNlIElEaXNjb3ZlcnlQYXJhbWV0ZXJ7XG4gIGludGVudGlvbnM6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIHByaXZhdGUgc3RhdGljIF9kaXNjb3ZlcnlQYXJhbWV0ZXJzOiBJRGlzY292ZXJ5UGFyYW1ldGVyIDtcblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVBhcmFtZXRlcnMoKTogSURpc2NvdmVyeVBhcmFtZXRlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnM7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gX19QQVJBTUVURVJTX187XG5cbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSAnZGlzY292ZXJ5JyBpbiBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy5kaXNjb3ZlcnkgOiB7aW50ZW50aW9uczogJyd9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSB7aW50ZW50aW9uczogJyd9O1xuICAgIH1cbiAgfVxufVxuXG5QYXJhbWV0ZXJzLmFwcGx5UGFyYW1ldGVycygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSUdsb2JhbFNjb3BlIGZyb20gJy4vSUdsb2JhbFNjb3BlJztcbmltcG9ydCBJRG9jdW1lbnQgZnJvbSAnLi9JRG9jdW1lbnQnO1xuaW1wb3J0IElMb2NhdGlvbiBmcm9tICcuL0lMb2NhdGlvbic7XG5pbXBvcnQgSU5ldHdvcmtJbmZvcm1hdGlvbiBmcm9tICcuL0lOZXR3b3JrSW5mb3JtYXRpb24nO1xuaW1wb3J0IElOYXZpZ2F0b3IgZnJvbSAnLi9JTmF2aWdhdG9yJztcbmltcG9ydCBJV2luZG93IGZyb20gJy4vSVdpbmRvdyc7XG5pbXBvcnQgSVByb3ZpZGVkR2xvYmFsU2NvcGUgZnJvbSAnLi9JUHJvdmlkZWRHbG9iYWxTY29wZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcblxudHlwZSBCcm93c2VyR2xvYmFsU2NvcGUgPSBJUHJvdmlkZWRHbG9iYWxTY29wZTtcblxuY29uc3QgYnJvd3Nlckdsb2JhbFNjb3BlOiBCcm93c2VyR2xvYmFsU2NvcGUgPSB7XG4gIGRvY3VtZW50LFxuICBsb2NhdGlvbixcbiAgbmF2aWdhdG9yLFxuICB3aW5kb3dcbn07XG5cbmV4cG9ydCBjbGFzcyBHbG9iYWxTY29wZSBpbXBsZW1lbnRzIElHbG9iYWxTY29wZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbnN0YW5jZSA9IG5ldyBTdWJqZWN0PElHbG9iYWxTY29wZT4obmV3IEdsb2JhbFNjb3BlKGJyb3dzZXJHbG9iYWxTY29wZSkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbnN0YW5jZTogUmVhZE9ubHlTdWJqZWN0PElHbG9iYWxTY29wZT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0KEdsb2JhbFNjb3BlLl9pbnN0YW5jZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50OiBJRG9jdW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvY2F0aW9uOiBJTG9jYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdmlnYXRvcjogSU5hdmlnYXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfd2luZG93OiBJV2luZG93O1xuXG4gIGNvbnN0cnVjdG9yKGdsb2JhbFNjb3BlOiBCcm93c2VyR2xvYmFsU2NvcGUpIHtcbiAgICB0aGlzLl9kb2N1bWVudCA9IGdsb2JhbFNjb3BlLmRvY3VtZW50O1xuICAgIHRoaXMuX2xvY2F0aW9uID0gZ2xvYmFsU2NvcGUubG9jYXRpb247XG4gICAgdGhpcy5fbmF2aWdhdG9yID0gZ2xvYmFsU2NvcGUubmF2aWdhdG9yO1xuICAgIHRoaXMuX3dpbmRvdyA9IGdsb2JhbFNjb3BlLndpbmRvdztcbiAgfVxuXG4gIC8vIFRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIHRvIG1haW50YWluIEFQSSBjb25zaXN0ZW5jeSB3aXRoIFByb3ZpZGVkR2xvYmFsU2NvcGVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcHVibGljIHN0YXRpYyBzZXRJbnN0YW5jZShwcm92aWRlZEdsb2JhbFNjb3BlOiBJUHJvdmlkZWRHbG9iYWxTY29wZSk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgdGhlIEdsb2JhbFNjb3BlJyk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IFJlYWRPbmx5U3ViamVjdDxJR2xvYmFsU2NvcGU+IHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUuX3JlYWRPbmx5SW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHN1YnNjcmliZShjYWxsYmFjazogKHZhbHVlOiBJR2xvYmFsU2NvcGUgfCBudWxsKSA9PiB2b2lkKTogSURpc3Bvc2FibGUge1xuICAgIHJldHVybiBHbG9iYWxTY29wZS5fcmVhZE9ubHlJbnN0YW5jZS5zdWJzY3JpYmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZ2V0IEZvcm1EYXRhKCk6IHR5cGVvZiBGb3JtRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5Gb3JtRGF0YTtcbiAgfVxuXG4gIGdldCBNZWRpYVN0cmVhbSgpOiB0eXBlb2YgTWVkaWFTdHJlYW0ge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuTWVkaWFTdHJlYW07XG4gIH1cblxuICBnZXQgTWVkaWFTdHJlYW1UcmFjaygpOiB0eXBlb2YgTWVkaWFTdHJlYW1UcmFjayB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5NZWRpYVN0cmVhbVRyYWNrO1xuICB9XG5cbiAgZ2V0IFJUQ1BlZXJDb25uZWN0aW9uKCk6IHR5cGVvZiBSVENQZWVyQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5SVENQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBSVENTZXNzaW9uRGVzY3JpcHRpb24oKTogdHlwZW9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5SVENTZXNzaW9uRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgUlRDSWNlQ2FuZGlkYXRlKCk6IHR5cGVvZiBSVENJY2VDYW5kaWRhdGUge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuUlRDSWNlQ2FuZGlkYXRlO1xuICB9XG5cbiAgZ2V0IFVSTCgpOiB0eXBlb2YgVVJMIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LlVSTDtcbiAgfVxuXG4gIGdldCBVUkxTZWFyY2hQYXJhbXMoKTogdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5VUkxTZWFyY2hQYXJhbXM7XG4gIH1cblxuICBnZXQgYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCBhZGRXaW5kb3dFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmFkZEV2ZW50TGlzdGVuZXIuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IGNsZWFySW50ZXJ2YWwoKTogKGlkPzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmNsZWFySW50ZXJ2YWwuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IGNsZWFyVGltZW91dCgpOiAoaWQ/OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuY2xlYXJUaW1lb3V0LmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudENyZWF0ZUVsZW1lbnQoKTogPEVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudD4odGFnOiBzdHJpbmcpID0+IEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50LmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50SGFzRm9jdXMoKTogKCkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50Lmhhc0ZvY3VzLmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50SXNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fZG9jdW1lbnQuaGlkZGVuO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50UXVlcnlTZWxlY3RvcigpOiA8RWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50Pih0YWc6IHN0cmluZykgPT4gRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yLmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGZldGNoKCk6IChpbnB1dDogc3RyaW5nIHwgVVJMIHwgUmVxdWVzdCwgaW5pdD86IFJlcXVlc3RJbml0KSA9PiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5mZXRjaC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgbG9jYXRpb25Ib3N0bmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbi5ob3N0bmFtZTtcbiAgfVxuXG4gIGdldCBsb2NhdGlvblNlYXJjaCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2g7XG4gIH1cblxuICBnZXQgbmF2aWdhdG9yQ29ubmVjdGlvbigpOiBJTmV0d29ya0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgbmF2aWdhdG9ySXNPbkxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRvci5vbkxpbmU7XG4gIH1cblxuICBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvd1snX19waGVuaXhQYWdlTG9hZFRpbWUnXSB8fCB0aGlzLl93aW5kb3dbJ19fcGFnZUxvYWRUaW1lJ107XG4gIH1cblxuICBnZXQgcXVldWVNaWNyb3Rhc2soKTogKG1pY3JvdGFzazogKCkgPT4gdm9pZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5xdWV1ZU1pY3JvdGFzay5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgcmVtb3ZlRG9jdW1lbnRFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCByZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IHNldEludGVydmFsKCk6IChoYW5kbGVyOiBzdHJpbmcgfCBGdW5jdGlvbiwgdGltZW91dD86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnNldEludGVydmFsLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBzZXRUaW1lb3V0KCk6IChoYW5kbGVyOiBzdHJpbmcgfCBGdW5jdGlvbiwgdGltZW91dD86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnNldFRpbWVvdXQuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdsb2JhbFNjb3BlLmdldEluc3RhbmNlKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3Q6IElEaXNwb3NhYmxlW10gPSBbXTtcblxuICBhZGQoZGlzcG9zYWJsZTogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LnB1c2goZGlzcG9zYWJsZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QuZm9yRWFjaChkaXNwb3NhYmxlID0+IGRpc3Bvc2FibGUuZGlzcG9zZSgpKTtcbiAgICB0aGlzLl9saXN0Lmxlbmd0aCA9IDA7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRGlzcG9zYWJsZUxpc3RbZGlzcG9zYWJsZXM9JHt0aGlzLl9saXN0Lmxlbmd0aH1dYDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG4vLyBBcyBmbG9hdCBpbiBFQ01BU2NyaXB0IHVzZSA2NC1iaXQgZm9ybWF0IGl0IGNhbm5vdCBoYXZlL2hhbmRsZSBtb3JlIHRoYW4gMTUgc3ltYm9scyBhZnRlciBkb3QuXG5jb25zdCBtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QgPSAxNTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTnVtYmVycyB7XG4gIHN0YXRpYyBjb3VudE51bWJlckxlbmd0aCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSA9IDA7XG4gICAgbGV0IG51bWJlciA9IHZhbHVlO1xuXG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgIG51bWJlciAqPSAtMTtcbiAgICAgIGluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUrKztcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVycy5jb3VudERpZ2l0c0JlZm9yZURlY2ltYWwobnVtYmVyKSArIGluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUgKyAobnVtYmVyICE9PSBNYXRoLmZsb29yKG51bWJlcikgPyBOdW1iZXJzLmNvdW50RGlnaXRzQWZ0ZXJEZWNpbWFsKG51bWJlcikgKyAxIDogMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmaXhSb3VuZGluZyh2YWx1ZTogbnVtYmVyLCBwcmVjaXNpb246IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgcG93ZXIgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcblxuICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogcG93ZXIpIC8gcG93ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb3VudERpZ2l0c0JlZm9yZURlY2ltYWwodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGRpZ2l0c0JlZm9yZURlY2ltYWwgPSAxO1xuICAgIGxldCBudW1iZXIgPSB2YWx1ZTtcblxuICAgIHdoaWxlIChudW1iZXIgPj0gMTApIHtcbiAgICAgIG51bWJlciA9IG51bWJlciAvIDEwO1xuICAgICAgZGlnaXRzQmVmb3JlRGVjaW1hbCsrO1xuICAgIH1cblxuICAgIHJldHVybiBkaWdpdHNCZWZvcmVEZWNpbWFsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY291bnREaWdpdHNBZnRlckRlY2ltYWwodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlO1xuICAgIGxldCBtb2RpZmllZFZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSk7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIHdoaWxlIChtb2RpZmllZFZhbHVlICE9PSBvcmlnaW5hbFZhbHVlICYmIGNvdW50IDwgbWF4RGlnaXRzSW5GbG9hdEFmdGVyRG90KSB7XG4gICAgICBjb3VudCsrO1xuICAgICAgbW9kaWZpZWRWYWx1ZSA9IE51bWJlcnMuZml4Um91bmRpbmcob3JpZ2luYWxWYWx1ZSwgY291bnQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOdW1iZXJzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVpbnQ4QXJyYXlzIHtcbiAgcHVibGljIHN0YXRpYyBpc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZSh0YXJnZXRCeXRlU2VxdWVuY2U6IFVpbnQ4QXJyYXksIGRhdGE6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdGFyZ2V0Qnl0ZVNlcXVlbmNlLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgIGlmICh0YXJnZXRCeXRlU2VxdWVuY2VbaWR4XSAhPT0gZGF0YVtvZmZzZXQgKyBpZHhdKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZmluZFRhcmdldEJ5dGVTZXF1ZW5jZUluZGV4RnJvbU9mZnNldCh0YXJnZXRCeXRlU2VxdWVuY2U6IFVpbnQ4QXJyYXksIGRhdGE6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyLCByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCA9IC0xKTogbnVtYmVyIHtcbiAgICBmb3IgKGxldCBjdXJyZW50SW5kZXggPSBvZmZzZXQ7IGN1cnJlbnRJbmRleCA8PSBkYXRhLmJ5dGVMZW5ndGg7IGN1cnJlbnRJbmRleCsrKSB7XG4gICAgICBpZiAoVWludDhBcnJheXMuaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UodGFyZ2V0Qnl0ZVNlcXVlbmNlLCBkYXRhLCBjdXJyZW50SW5kZXgpKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRVdWlkU3RyaW5nRnJvbVVpbnQ4QXJyYXkoZGF0YTogVWludDhBcnJheSwgdXVpZEJ5dGVMZW5ndGggPSAxNik6IHN0cmluZyB7XG4gICAgY29uc3QgdXVpZDogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHV1aWRCeXRlTGVuZ3RoOyBpZHgrKykge1xuICAgICAgY29uc3QgYnl0ZUhleCA9IGRhdGFbaWR4XS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcblxuICAgICAgdXVpZC5wdXNoKGJ5dGVIZXgpO1xuXG4gICAgICBpZiAoaWR4ID09PSAzIHx8IGlkeCA9PT0gNSB8fCBpZHggPT09IDcgfHwgaWR4ID09PSA5KSB7XG4gICAgICAgIHV1aWQucHVzaCgnLScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1dWlkLmpvaW4oJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VpbnQ4QXJyYXlzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXI6IElBcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IHRoaXMuX2FwcGVuZGVycy5yZWR1Y2UoKGl0ZW1zLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIShpdGVtID09PSBhcHBlbmRlcikpIHtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sIFtdIGFzIEFycmF5PElBcHBlbmRlcj4pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yOiBzdHJpbmcsIGN1cnJlbnRWYWx1ZTogc3RyaW5nIHwgRXJyb3IsIGluZGV4OiBudW1iZXIsIGFycmF5OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZXJyb3JTdGFja0Fsc29IYXNFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUubWVzc2FnZSkgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlOiBvYmplY3RbXSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYXJnIGluc3RhbmNlb2YgRXJyb3IgPyB0aGlzLnRvU3RyaW5nKGFyZykgOiBhcmcsXG4gICAgICAgIChfLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckRlZmF1bHRzIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRMb2dzXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMubG9nVG9Db25zb2xlXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJykgYXMgTG9nZ2luZ0xldmVsVHlwZTtcblxuICAgIGlmIChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKSB7XG4gICAgICB0aGlzLl90aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwobmFtZTogc3RyaW5nLCBhcHBseUFwcGVuZGVyOiAobGV2ZWw6IExvZ2dpbmdMZXZlbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZShgcGhlbml4LSR7bmFtZX0tbG9nZ2luZy1sZXZlbGApIGFzIExvZ2dpbmdMZXZlbFR5cGU7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsVHlwZSk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ1RocmVzaG9sZCB7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbDtcblxuICBnZXQgdmFsdWUoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0VGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmcgPSAnLSc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nID0gJy0nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nID0gJy0nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVybCBtdXN0IGJlIGEgc3RyaW5nIGluc3RlYWQgcmVjZWl2ZWQgWyR7dHlwZW9mIHVybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRyaWNzRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuL01ldHJpY1R5cGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gMTAyNDtcbmNvbnN0IG1heEJ1ZmZlcmVkUmVjb3JkcyA9IDIwNDg7XG5cbmludGVyZmFjZSBJVmFsdWUge1xuICBzdHJpbmc/OiBzdHJpbmc7XG4gIHVpbnQ2ND86IG51bWJlcjtcbiAgZmxvYXQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJTWV0cmljUmVjb3JkIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIElNZXRyaWMge1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgbWV0cmljVHlwZTogTWV0cmljc1R5cGU7XG4gIHZhbHVlPzogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlPzogSVZhbHVlO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdNZXRyaWNzU2VydmljZScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIF9tZXRyaWNzOiBBcnJheTxJTWV0cmljUmVjb3JkPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmFpbHVyZUNvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZG9tYWluID0gR2xvYmFsU2NvcGUudmFsdWU/LmxvY2F0aW9uSG9zdG5hbWUgfHwgJyc7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYgPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKCk7XG4gIH1cblxuICBnZXQgbWV0cmljc0NvbmZpZ3VyYXRpb24oKTogTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobWV0cmljOiBJTWV0cmljKTogdm9pZCB7XG4gICAgY29uc3Qge3N0cmVhbUlkLCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSwgcnVudGltZSwgcmVzb3VyY2UsIGtpbmR9ID0gbWV0cmljO1xuICAgIGNvbnN0IG1ldHJpY1R5cGUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWMubWV0cmljVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID4gbWV0cmljVHlwZS5nZXRUZWxlbWV0cnlMZXZlbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpYzogbWV0cmljVHlwZS5nZXROYW1lKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtpbmRcbiAgICB9O1xuXG4gICAgdGhpcy5fbWV0cmljcy5wdXNoKG1ldHJpY1JlY29yZCk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXM6IEFycmF5PElNZXRyaWNSZWNvcmQ+KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLkZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcgfHwgIUdsb2JhbFNjb3BlLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IG1ldHJpY3NNZXNzYWdlcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UoMCwgcmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzID0gdGhpcy5fbWV0cmljcy5zbGljZShyZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZShyZXNwb25zZSkpIHtcbiAgICAgICAgaWYgKHRoaXMuX21ldHJpY3MubGVuZ3RoIDw9IG1heEJ1ZmZlcmVkUmVjb3Jkcykge1xuICAgICAgICAgIHRoaXMuX2ZhaWx1cmVDb3VudCsrO1xuXG4gICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9tZXRyaWNzID0gWy4uLm1ldHJpY3NNZXNzYWdlcywgLi4udGhpcy5fbWV0cmljc107XG5cbiAgICAgICAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgICAgICAgIH0sIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2ZhaWx1cmVDb3VudCkpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdUb28gbWFueSBjYWNoZWQgbWV0cmljIHJlY29yZHMgWyVzXSwgZHJvcHBpbmcgWyVzXSByZWNvcmRzJywgdGhpcy5fbWV0cmljcy5sZW5ndGgsIG1ldHJpY3NNZXNzYWdlcy5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2ZhaWx1cmVDb3VudCA9IDA7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUoe3N0YXR1c306IFJlc3BvbnNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eNVxcZHsyfSQvLnRlc3Qoc3RhdHVzLnRvU3RyaW5nKCkpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeURlZmF1bHQge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsW0J1aWxkRmVhdHVyZXMuc2VuZE1ldHJpY3NdO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9IHwgbnVsbDtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gZmFsc2UpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbiAmJiAhZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgPyB7ZW5jb2RlZEluc2VydGFibGVTdHJlYW1zfSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25maWd1cmF0aW9uTWFuYWdlciB7XG4gIHN0YXRpYyB0cnVuY2F0ZUljZVNlcnZlcnMoY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICBpZiAoIWNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y01vbml0b3JTdGF0aXN0aWMge1xuICBba2luZDogc3RyaW5nXTogSVJ0Y1N0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWU6IHN0cmluZykgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmcgPSAndW5rbm93bic7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZyA9ICd1bmtub3duJztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljIHwgbnVsbD4gPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGw7XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkICYmIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24/LnNkcCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcnRjU3RhdGlzdGljO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc01vbml0b3JSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5nZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy51cGRhdGVTdGF0aXN0aWNMZWdhY3koKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW06IHtpZDogc3RyaW5nfSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uPy5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzUmVjZWl2ZWQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzUmVjZWl2ZWQgPSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8uYnl0ZXNSZWNlaXZlZCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNSZWNlaXZlZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gKHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy50aW1lc3RhbXAgfHwgMCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYml0cmF0ZSA9IGJ5dGVzRGVsdGEgJiYgdGltZURlbHRhID8gTWF0aC5mbG9vcig4ICogYnl0ZXNEZWx0YSAvXG4gICAgICAgICAgICAgICAgICB0aW1lRGVsdGEgKiAxMDAwKSA6IDA7XG5cbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBiaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgYnl0ZXNSZWNlaXZlZDogcmVwb3J0LmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzTG9zdDogcmVwb3J0LnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiByZXBvcnQucGFja2V0c1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgY29kZWM6IGNvZGVjIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUoa2luZCksXG4gICAgICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LnZpZGVvPy5mcmFtZXNEZWNvZGVkKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRGVjb2RlZDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZnBzID0gKHJlcG9ydC5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3Nba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcHMnXSA9IGZwcyA/IE1hdGgucm91bmQoZnBzICogMTAwKSAvIDEwMCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWNMZWdhY3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uPy5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LnZpZGVvPy5mcmFtZXNEZWNvZGVkKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgfHwgJ3Vua25vd24nO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyB8fCAndW5rbm93bic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZHBQYXJzZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZHA6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQXVkaW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzVmlkZW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2RwOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZHAgPSBzZHA7XG5cbiAgICBjb25zdCBzZHBTcGxpdEJ5TGluZXMgPSB0aGlzLl9zZHAuc3BsaXQoLyhcXHJcXG58XFxyfFxcbikvKTtcbiAgICBjb25zdCBzZHBTcGxpdEJ5VHJhY2tzID0gdGhpcy5fc2RwLnNwbGl0KC8oPzpefFtcXHJcXG5dKW09Lyk7XG5cbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCdhdWRpbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICAgIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCd2aWRlbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICB9XG5cbiAgZ2V0IGF1ZGlvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Db2RlYztcbiAgfVxuXG4gIGdldCB2aWRlb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvQ29kZWM7XG4gIH1cblxuICBnZXQgaXNBdWRpb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1ZpZGVvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyYWNrQnlUeXBlRW5hYmxlZCh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlUcmFja3M6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2RwU2VjdGlvbkZvclR5cGUgPSBzZHBTcGxpdEJ5VHJhY2tzLmZpbmQoc2RwVHJhY2sgPT4gc2RwVHJhY2suc3RhcnRzV2l0aCh0eXBlKSk7XG5cbiAgICBpZiAoIXNkcFNlY3Rpb25Gb3JUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICFzZHBTZWN0aW9uRm9yVHlwZS5pbmNsdWRlcyhgYT1pbmFjdGl2ZWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvZGVjKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeUxpbmVzOiBzdHJpbmcgW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHJ0bWFwID0gc2RwU3BsaXRCeUxpbmVzLmZpbmQoc2RwTGluZSA9PiBzZHBMaW5lLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSk/LnNwbGl0KCcgJylbM10gfHwgJyc7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtydG1hcH1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZT8uc3BsaXQoJyAnKVsxXSB8fCAnJztcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbiB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiBjbGFzcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuUlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBnZXQgbmF0aXZlKCk6IFJUQ1BlZXJDb25uZWN0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uY3VycmVudExvY2FsRGVzY3JpcHRpb24gfHwgbnVsbDtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uPy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gfHwgbnVsbDtcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uU3RhdGUoKTogUlRDUGVlckNvbm5lY3Rpb25TdGF0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uY29ubmVjdGlvblN0YXRlIHx8IG51bGw7XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uaWNlQ29ubmVjdGlvblN0YXRlIHx8IG51bGw7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24/LmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24/LnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRUcmFuc2NlaXZlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5nZXRUcmFuc2NlaXZlcnNEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24/LmdldFRyYW5zY2VpdmVycyA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbj8uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlQW5zd2VyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgc2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVycygpO1xuICB9XG5cbiAgZ2V0UmVjZWl2ZXJzKCk6IFJUQ1J0cFJlY2VpdmVyW10ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0UmVjZWl2ZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBkdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGxlZ2FjeSAnZ2V0U3RhdHMnIG1ldGhvZCB0eXBlIGRlZmluaXRpb25cbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnZ2V0U3RhdHMnIG1ldGhvZCBmb3JcbiAgICAgIC8vIENocm9tZUA8PSA2NiBkZXRhaWxlZCBoZXJlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02Mjc4MTZcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBrZXlvZiBSVENQZWVyQ29ubmVjdGlvbkV2ZW50TWFwPih0eXBlOiBULCBsaXN0ZW5lcjogKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogUlRDUGVlckNvbm5lY3Rpb25FdmVudE1hcFtUXSkgPT4gdW5rbm93biwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI8VCBleHRlbmRzIGtleW9mIFJUQ1BlZXJDb25uZWN0aW9uRXZlbnRNYXA+KHR5cGU6IFQsIGxpc3RlbmVyOiAodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBSVENQZWVyQ29ubmVjdGlvbkV2ZW50TWFwW1RdKSA9PiB1bmtub3duLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0VHJhbnNjZWl2ZXJzKCk6IFJUQ1J0cFRyYW5zY2VpdmVyW10ge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKG5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkU3RyZWFtKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IHZvaWQge1xuICAgIG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYWNrKHRyYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHNldCBvbnRyYWNrKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2VjYW5kaWRhdGUoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBQZWVyQ29ubmVjdGlvbiBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldmVudDogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gUGVlckNvbm5lY3Rpb24gaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXZlbnQ6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2ZW50OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFBlZXJDb25uZWN0aW9uIGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24/LmNsb3NlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+KHJlc29sdmVQZWVyQ29ubmVjdGlvblByb21pc2UgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IEdsb2JhbFNjb3BlLnN1YnNjcmliZShnbG9iYWxTY29wZSA9PiB7XG4gICAgICAgIGlmICghZ2xvYmFsU2NvcGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlUGVlckNvbm5lY3Rpb25Qcm9taXNlKG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbikpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhZE9ubHlTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViamVjdDogU3ViamVjdDxUPjtcblxuICBjb25zdHJ1Y3RvcihzdWJqZWN0OiBTdWJqZWN0PFQ+KSB7XG4gICAgdGhpcy5fc3ViamVjdCA9IHN1YmplY3Q7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3QudmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6ICh2YWx1ZTogVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IFRbXSwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogKCh2YWx1ZTogVCkgPT4gdm9pZClbXTtcbiAgcHJpdmF0ZSBfdmFsdWU6IFQ7XG5cbiAgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBUKSB7XG4gICAgbGV0IGNoYW5nZWQgPSB0aGlzLl92YWx1ZSAhPT0gdmFsdWU7XG5cbiAgICBpZiAoY2hhbmdlZCAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgY29tcGFyYWJsZSA9IHZhbHVlIGFzIHVua25vd24gYXMgSUNvbXBhcmFibGU8VD47XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcGFyYWJsZS5lcXVhbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2hhbmdlZCA9ICFjb21wYXJhYmxlLmVxdWFscyh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IHtcbiAgICAgIGxpc3RlbmVyKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzdWJzY3JpYmUobGlzdGVuZXI6ICh2YWx1ZTogVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwodmFsdWU6IFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0lHbG9iYWxTY29wZSc7XG5pbXBvcnQge0dsb2JhbFNjb3BlfSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgU3RyaW5ncyBmcm9tICcuLi9sYW5nL1N0cmluZ3MnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi4vbG9nZ2VyL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQge1NoYWthUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvSVNoYWthUGxheWVyJztcbmltcG9ydCB7SGxzUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvSUhsc1BsYXllcic7XG5pbXBvcnQge1dlYlBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL0lXZWJQbGF5ZXInO1xuaW1wb3J0IElQcm92aWRlZEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0lQcm92aWRlZEdsb2JhbFNjb3BlJztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gR2xvYmFsU2NvcGUuZ2V0SW5zdGFuY2UoKS52YWx1ZT8ucGFnZUxvYWRUaW1lIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHZhbHVlOiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkO1xuICBzaGFrYVBsYXllckxvYWRlcj86ICh2YWx1ZTogKHBsYXllcjogU2hha2FQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86ICh2YWx1ZTogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCcpO1xuICBwcml2YXRlIHN0YXRpYyBfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcycpO1xuICBwcml2YXRlIHN0YXRpYyBfd2ViUGxheWVyTG9hZGVyOiAodmFsdWU6IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQpID0+IHZvaWQ7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYVBsYXllckxvYWRlcjogKHZhbHVlOiAocGxheWVyOiBTaGFrYVBsYXllclR5cGUpID0+IHZvaWQpID0+IHZvaWQ7XG4gIHByaXZhdGUgc3RhdGljIF9obHNKc0xvYWRlcjogKHZhbHVlOiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHwgbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Vudmlyb25tZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeVVybDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSA4O1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5TGV2ZWw6IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+ID0gbmV3IFN1YmplY3Q8VGVsZW1ldHJ5TGV2ZWw+KFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlbmRMb2NhbENhbmRpZGF0ZXM6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdChCdWlsZEZlYXR1cmVzLnNlbmRMb2NhbENhbmRpZGF0ZXMpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJQbGF5ZXJMb2FkZXIoKTogKHZhbHVlOiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2ViUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYVBsYXllckxvYWRlcigpOiAodmFsdWU6IChwbGF5ZXI6IFNoYWthUGxheWVyVHlwZSkgPT4gdm9pZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAodmFsdWU6IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9obHNKc0xvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWV0cmljc1NlcnZpY2UoKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIHJldHVybiBTREsuX21ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpOiBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5VXJsKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbGVtZXRyeVVybDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzO1xuICB9XG5cbiAgc3RhdGljIHNldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKHJldHJpZXNBbW91bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSByZXRyaWVzQW1vdW50O1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSh0aGlzLl9sb2dnZXIudGhyZXNob2xkLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyRGV0ZWN0b3IoKTogQnJvd3NlckRldGVjdG9yIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gTG9nZ2VyRmFjdG9yeS50ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ucGFnZUxvYWRUaW1lID0gU0RLLnBhZ2VMb2FkVGltZTtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJykgYXMgVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBjb25zdCBnbG9iYWxTY29wZSA9IEdsb2JhbFNjb3BlLmdldEluc3RhbmNlKCkudmFsdWU7XG4gICAgICBjb25zdCB1cmkgPSBuZXcgZ2xvYmFsU2NvcGUuVVJMKGJhc2VVUklWYWx1ZSk7XG5cbiAgICAgIHVyaS5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmkudG9TdHJpbmcoKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LWJhc2UtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBvbkxvYWQoZ2xvYmFsU2NvcGU6IElHbG9iYWxTY29wZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWdsb2JhbFNjb3BlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RLIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBnbG9iYWxTY29wZS5hZGRXaW5kb3dFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gICAgICBTREsuZGlzcG9zZSgpO1xuICAgIH0pO1xuXG4gICAgU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG4gICAgU0RLLmFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcbiAgICBTREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG5ldyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHRoaXMuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0KG9wdGlvbnM/OiBJSW5pdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zV2l0aE9wdGlvbmFsZ2xvYmFsU2NvcGU6IElJbml0T3B0aW9ucyAmIHtnbG9iYWxTY29wZT86IElQcm92aWRlZEdsb2JhbFNjb3BlfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAob3B0aW9uc1dpdGhPcHRpb25hbGdsb2JhbFNjb3BlLmdsb2JhbFNjb3BlKSB7XG4gICAgICBHbG9iYWxTY29wZS5zZXRJbnN0YW5jZShvcHRpb25zV2l0aE9wdGlvbmFsZ2xvYmFsU2NvcGUuZ2xvYmFsU2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IG9wdGlvbnMuZGlzY292ZXJ5VXJpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZSA9IG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICBTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICB0aGlzLl9sb2dnZXIudGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5sb2dnaW5nTGV2ZWwpKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICBjb25zdCBjb25zb2xlQXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBDb25zb2xlQXBwZW5kZXIpO1xuXG4gICAgICBpZiAoY29uc29sZUFwcGVuZGVyKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgIT09ICdPZmYnKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICB0aGlzLl93ZWJQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLndlYlBsYXllckxvYWRlcjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aGlzLl9obHNKc0xvYWRlciA9IG9wdGlvbnMuaGxzSnNMb2FkZXI7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yPy5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkdsb2JhbFNjb3BlLnN1YnNjcmliZShTREsub25Mb2FkLmJpbmQoU0RLKSk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQsIHtDaGFubmVsQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IEVuY29kZWRTdHJlYW1TaW5rLCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQgU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB7U3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQnO1xuaW1wb3J0IHtEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiwgUmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9ufSBmcm9tICcuLi9mcmFtZVRpbWluZy9GcmFtZVRpbWluZ0luZm9ybWF0aW9uJztcbmltcG9ydCBTdHJlYW1GYWN0b3J5IGZyb20gJy4uL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xuICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHQ6IFN0YXRlQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ6IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uIHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQgfCBudWxsPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtIHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljIHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbSB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkVuYWJsZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogUmVhZE9ubHlTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uOiBSZWFkT25seVN1YmplY3Q8UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7dGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWd9O1xuICAgIGNvbnN0IHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IG5ldyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0KHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbiB8IG51bGw+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQgfCBudWxsPih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0gfCBudWxsPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0pO1xuICAgIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcyA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWMgfCBudWxsPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbSB8IG51bGw+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgPSBuZXcgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQoKTtcbiAgICB0aGlzLmNvbmZpZ3VyZUZyYW1lVGltaW5nSW5mb3JtYXRpb24oZWRnZVRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkVuYWJsZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmlzRW5hYmxlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPih0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5kZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+KHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgfSwgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnN1YnNjcmliZShyZXNvbHV0aW9uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkub25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKHJlc29sdXRpb24udG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnN1YnNjcmliZShiaXRyYXRlTGltaXQgPT4ge1xuICAgICAgICBpZiAoYml0cmF0ZUxpbWl0ICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBiaXRyYXRlTGltaXQsXG4gICAgICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgICAgIEJpdHJhdGVNb2RlLk5vcm1hbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBkZXN0cm95U3RyZWFtT25Vbm1vdW50ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbU9uVW5tb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsICdjbGllbnQ6dGVybWluYXRpb24tb24td2luZG93LXVubG9hZCcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBHbG9iYWxTY29wZS52YWx1ZS5hZGRXaW5kb3dFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgR2xvYmFsU2NvcGUudmFsdWUucmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdXRpb24udmFsdWUud2lkdGggIT09IHZpZGVvRWxlbWVudC52aWRlb1dpZHRoIHx8IHRoaXMucmVzb2x1dGlvbi52YWx1ZS5oZWlnaHQgIT09IHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcblxuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2VuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZUZyYW1lVGltaW5nSW5mb3JtYXRpb24oZWRnZVRva2VuKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBhdXRvTXV0ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQ7XG4gIH1cblxuICBnZXQgYXV0b1BhdXNlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQ7XG4gIH1cblxuICBnZXQgdG9rZW5FeHBpcmluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmc7XG4gIH1cblxuICBnZXQgYXV0aG9yaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQ7XG4gIH1cblxuICBnZXQgb25saW5lKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5T25saW5lO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHBsYXlpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQbGF5aW5nO1xuICB9XG5cbiAgZ2V0IHN0YW5kYnkoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGFuZGJ5O1xuICB9XG5cbiAgZ2V0IHN0b3BwZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdG9wcGVkO1xuICB9XG5cbiAgZ2V0IHRhcmdldExhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWc7XG4gIH1cblxuICBnZXQgbGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxhZztcbiAgfVxuXG4gIGdldCBiaXRyYXRlTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQudmFsdWU7XG4gIH1cblxuICBnZXQgcmVzb2x1dGlvbigpOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbjtcbiAgfVxuXG4gIGdldCBmYWlsdXJlQ291bnQoKTogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudDtcbiAgfVxuXG4gIGdldCBlbmRQb2ludCgpOiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzO1xuICB9XG5cbiAgZ2V0IG1lZGlhU3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIGdldCBpc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbigpOiBSZWFkT25seVN1YmplY3Q8RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb247XG4gIH1cblxuICBnZXQgcmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uO1xuICB9XG5cbiAgc2V0Qml0cmF0ZUxpbWl0KGJpdHJhdGVMaW1pdDogQml0c1BlclNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IGJpdHJhdGVMaW1pdDtcbiAgfVxuXG4gIGNsZWFyQml0cmF0ZUxpbWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQgPSAwO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICBCaXRyYXRlTW9kZS5SZXNldFxuICAgICAgKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhcmdldExhZyhsYWc6IE1pbGxpc2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnLnZhbHVlID0gbGFnO1xuICB9XG5cbiAgYXN5bmMgc3RvcChyZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmICghdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMocmVhc29uKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gIH1cblxuICBhc3luYyByZXN1bWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1bm11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3AoJ2NsaWVudDpjaGFubmVsLWRpc3Bvc2UnKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBnZXRVcmkodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBVUkwge1xuICAgIGNvbnN0IHVybCA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnVyaTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBkaXNjb3ZlciBVUkkgWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgc3RhcnQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6c3RhcnQnKTtcblxuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBTdHJlYW1UcmFja1RyYW5zZm9ybS52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4oJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gU3RyZWFtVHJhY2tUcmFuc2Zvcm0udmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4oJ2F1ZGlvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBFbmNvZGVkU3RyZWFtU2luay52YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgJiYgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBpbnNlcnRhYmxlLXN0cmVhbXMgYW5kIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGFyZSBlbmFibGVkLCBvbmx5IHVzZSBvbmUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPT09ICdmdW5jdGlvbic7XG4gICAgY29uc3QgaGFzRW5jb2RlZFN0cmVhbVNpbmsgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgJiYgaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGNhbGxiYWNrIGFuZCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgc2luayBmdW5jdGlvbiBmb3VuZCwgb25seSB1c2Ugb25lIHR5cGUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBTdHJlYW0gVHJhY2sgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBpbnNlcnRhYmxlLXN0cmVhbXMgaXMgZW5hYmxlZCcpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZDsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghKEZlYXR1cmVFbmFibGVtZW50LmlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkIHx8IEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBzaW5rIGZ1bmN0aW9uIGlzIG1pc3Npbmc7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIGVuYWJsZWQnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBmb3VuZDsgaG93ZXZlciwgZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMgaXMgbm90IGVuYWJsZWRgKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQsIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2spO1xuXG4gICAgaWYgKCFzdHJlYW1QbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtUGxheWVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLFxuICAgICAgdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudC5iaW5kKHRoaXMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUrKztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNsaWVudFN0YXJ0RXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkluaXRpYWxpemluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNsaWVudFN0YXJ0RXJyb3I6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXRyeSBzdGFydCB3aXRoIGluaXRpYWwgc3RhdGUgWyVzXSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUsIENoYW5uZWxTdGF0ZVt0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gcmVzdHJpY3RlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IGluaXRpYWxpemluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZUZyYW1lVGltaW5nSW5mb3JtYXRpb24odG9rZW46IEVkZ2VUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IGZyYW1lVGltaW5nSW5mb3JtYXRpb25DYXBhYmlsaXR5ID0gdG9rZW4uY2FwYWJpbGl0aWVzLmZpbmQoY2FwYWJpbGl0eSA9PiBjYXBhYmlsaXR5LnN0YXJ0c1dpdGgoJ2ZyYW1lLXRpbWluZy1pbmZvcm1hdGlvbj0nKSk7XG5cbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmlzRW5hYmxlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ2FwYWJpbGl0eSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2FibGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gYXMgbm8gY2FwYWJpbGl0eSB3YXMgZm91bmQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNDaGFubmVsRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2FibGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gYXMgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgaXQgWyVzXScsIGZyYW1lVGltaW5nSW5mb3JtYXRpb25DYXBhYmlsaXR5KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZyYW1lVGltaW5nSW5mb3JtYXRpb25DYXBhYmlsaXR5LnNwbGl0KCc9JylbMV1cbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKG9wdGlvbiA9PiBvcHRpb24udHJpbSgpKVxuICAgICAgLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgc3dpdGNoIChvcHRpb24pIHtcbiAgICAgICAgICBjYXNlICd0aW1lY29kZSc6XG4gICAgICAgICAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd0aW1lc3RhbXBzJzpcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lc3RhbXBzLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdJZ25vcmluZyB1bmtub3duIGZyYW1lIHRpbWluZyBpbmZvcm1hdGlvbiBvcHRpb24gWyVzXScsIG9wdGlvbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gY29uZmlndXJhdGlvbiBbKHRpbWVjb2RlIFslc10sIHRpbWVzdGFtcHMgWyVzXSldJywgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlLCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgfVxuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBjb25zdCBoYXNBdWRpb1RyYWNrID0gISFtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIodHJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gdHJhY2sua2luZCA9PT0gJ2F1ZGlvJztcbiAgICAgIH0pLmxlbmd0aDtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgSW5pdGlhbGl6aW5nID0gMCxcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nID0gMixcbiAgUGF1c2VkID0gMyxcbiAgUGxheWluZyA9IDQsXG4gIFJlY292ZXJpbmcgPSA1LFxuICBSZWNvbm5lY3RpbmcgPSA2LFxuICBTdGFuZEJ5ID0gNyxcbiAgU3RvcHBlZCA9IDgsXG4gIFVuYXV0aG9yaXplZCA9IDksXG4gIEdlb1Jlc3RyaWN0ZWQgPSAxMCxcbiAgR2VvQmxvY2tlZCA9IDExLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUgPSAxMixcbiAgQ29uZmlndXJhdGlvbkVycm9yID0gMTMsXG4gIFRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvciA9IDE0LFxuICBDb25uZWN0aW9uRXJyb3IgPSAxNSxcbiAgQ2xpZW50U3RhcnRFcnJvciA9IDE2LFxuICBFcnJvciA9IDE3XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBDaGFubmVsLCB7Q2hhbm5lbE9wdGlvbnN9IGZyb20gJy4vQ2hhbm5lbCc7XG5cbnR5cGUgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgdG9rZW46IEVuY29kZWRFZGdlVG9rZW47XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xuICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWxzIHtcbiAgc3RhdGljIGNyZWF0ZUNoYW5uZWwob3B0aW9uczogQ3JlYXRlQ2hhbm5lbE9wdGlvbnMpOiBDaGFubmVsIHtcbiAgICBpZiAoIVNESy5pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgbm90IGxvYWRlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGFubmVsT3B0aW9uczogQ2hhbm5lbE9wdGlvbnMgPSB7XG4gICAgICB0YXJnZXRMYWc6IG9wdGlvbnMudGFyZ2V0TGFnLFxuICAgICAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLFxuICAgICAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogb3B0aW9ucy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgQ2hhbm5lbChvcHRpb25zLnZpZGVvRWxlbWVudCwgb3B0aW9ucy50b2tlbiwgY2hhbm5lbE9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXQgaXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBGZWF0dXJlRW5hYmxlbWVudC5pc0NoYW5uZWxGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWxzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljLCBJUnRjU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBkZWZhdWx0VGFyZ2V0TGFnID0gMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQ29udGV4dCB7XG4gIGNoYW5uZWxJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBjaGFubmVsRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICByZW5kZXJlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgdmlkZW9FbGVtZW50OiBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQgfCBudWxsPjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZCB8IHVuZGVmaW5lZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQgfCBudWxsPjtcbiAgc3RyZWFtOiBTdWJqZWN0PElTdHJlYW0gfCBudWxsPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYyB8IG51bGw+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnkgfCBudWxsO1xuICBydGNBdWRpb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYyB8IG51bGw7XG4gIHJ0Y1ZpZGVvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljIHwgbnVsbDtcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPihDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4ob3B0aW9ucz8udGFyZ2V0TGFnID8/IGRlZmF1bHRUYXJnZXRMYWcpO1xuICAgIHRoaXMubGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5iaXRyYXRlTGltaXQgPSBuZXcgU3ViamVjdDxCaXRzUGVyU2Vjb25kPigwKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBuZXcgU3ViamVjdDxEaW1lbnNpb24+KERpbWVuc2lvbi5lbXB0eSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludCB8IG51bGw+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbSB8IG51bGw+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljIHwgbnVsbD4obnVsbCk7XG4gICAgdGhpcy52aWRlb1RlbGVtZXRyeSA9IG51bGw7XG4gICAgdGhpcy5ydGNBdWRpb1N0YXRpc3RpYyA9IG51bGw7XG4gICAgdGhpcy5ydGNWaWRlb1N0YXRpc3RpYyA9IG51bGw7XG4gICAgdGhpcy5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQgPSAwO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LnZhbHVlICYmIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgIH1cbiAgfVxuXG4gIG1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YW5kQnk7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZvcmJpZGRlbi10YWcnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0RlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uLCBSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb259IGZyb20gJy4uL2ZyYW1lVGltaW5nL0ZyYW1lVGltaW5nSW5mb3JtYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCB7XG4gIHB1YmxpYyByZWFkb25seSBzaG91bGRFeHRyYWN0VGltZWNvZGU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyByZWFkb25seSBzaG91bGRFeHRyYWN0VGltZXN0YW1wczogU3ViamVjdDxib29sZWFuPjtcbiAgcHVibGljIHJlYWRvbmx5IGlzRW5hYmxlZDogU3ViamVjdDxib29sZWFuPjtcbiAgcHVibGljIHJlYWRvbmx5IGRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uOiBTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD47XG4gIHB1YmxpYyByZWFkb25seSByZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb246IFN1YmplY3Q8UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zaG91bGRFeHRyYWN0VGltZWNvZGUgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zaG91bGRFeHRyYWN0VGltZXN0YW1wcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmlzRW5hYmxlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gbmV3IFN1YmplY3Q8RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPihudWxsKTtcbiAgICB0aGlzLnJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IG5ldyBTdWJqZWN0PFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+KG51bGwpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uIHwgbnVsbD47XG4gIHBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1lZGlhU3RyZWFtID0gbmV3IFN1YmplY3Q8TWVkaWFTdHJlYW0gfCBudWxsPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uIHwgbnVsbD4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcblxuZXhwb3J0IHR5cGUgU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMgPSB7XG4gIGhhc0luc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGJvb2xlYW47XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IHtcbiAgcmVhZG9ubHkgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcbiAgcmVhZG9ubHkgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPihvcHRpb25zLmhhc0luc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KG9wdGlvbnMuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s7XG4gICAgdGhpcy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gb3B0aW9ucy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luaztcbiAgICB0aGlzLmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbms7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkNvbnRleHQge1xuICB0b2tlbjogU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgdG9rZW5FeHBpcmluZzogU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3Rvcih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMudG9rZW4gPSBuZXcgU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy50b2tlbkV4cGlyaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHN0cmVhbVJlYWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGE6IFVpbnQ4QXJyYXk7XG4gIHByaXZhdGUgX2JpdE9mZnNldDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFVpbnQ4QXJyYXkpIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICB0aGlzLl9iaXRPZmZzZXQgPSAwO1xuICB9XG5cbiAgcHVibGljIHJlYWRCaXRzKGJpdHNUb1JlYWQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuX2JpdE9mZnNldCArIGJpdHNUb1JlYWQgPiB0aGlzLl9kYXRhLmxlbmd0aCAqIDgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlYWQgWyR7Yml0c1RvUmVhZH1dIGJpdHMgLSBvbmx5IFske3RoaXMuZ2V0UmVtYWluaW5nQml0cygpfV0gYml0cyByZW1haW5pbmcgaW4gc3RyZWFtYCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gMDtcbiAgICBsZXQgYml0c1JlbWFpbmluZyA9IGJpdHNUb1JlYWQ7XG5cbiAgICB3aGlsZSAoYml0c1JlbWFpbmluZyA+IDApIHtcbiAgICAgIGNvbnN0IGJ5dGVPZmZzZXQgPSBNYXRoLmZsb29yKHRoaXMuX2JpdE9mZnNldCAvIDgpO1xuICAgICAgY29uc3QgYml0UG9zaXRpb25JbkJ5dGUgPSB0aGlzLl9iaXRPZmZzZXQgJSA4O1xuICAgICAgY29uc3QgYml0c0F2YWlsYWJsZUluQnl0ZSA9IDggLSBiaXRQb3NpdGlvbkluQnl0ZTtcbiAgICAgIGNvbnN0IGJpdHNUb1JlYWQgPSBNYXRoLm1pbihiaXRzUmVtYWluaW5nLCBiaXRzQXZhaWxhYmxlSW5CeXRlKTtcbiAgICAgIC8vIENyZWF0ZSBhIG1hc2sgZm9yIHRoZSBiaXRzIHdlIHdhbnQgdG8gcmVhZFxuICAgICAgY29uc3QgbWFzayA9ICgxIDw8IGJpdHNUb1JlYWQpIC0gMTtcbiAgICAgIC8vIFNoaWZ0IHJpZ2h0IHRvIGdldCByaWQgb2YgbG93ZXIgYml0cyB3ZSBkb24ndCB3YW50XG4gICAgICBjb25zdCBieXRlVmFsdWUgPSAodGhpcy5fZGF0YVtieXRlT2Zmc2V0XSA+PiAoYml0c0F2YWlsYWJsZUluQnl0ZSAtIGJpdHNUb1JlYWQpKTtcbiAgICAgIC8vIE1hc2sgdG8ga2VlcCBvbmx5IHRoZSBiaXRzIHdlIHdhbnRcbiAgICAgIGNvbnN0IGJpdHMgPSBieXRlVmFsdWUgJiBtYXNrO1xuXG4gICAgICAvLyBBZGQgdGhlc2UgYml0cyB0byBvdXIgcmVzdWx0XG4gICAgICB2YWx1ZSA9ICh2YWx1ZSA8PCBiaXRzVG9SZWFkKSB8IGJpdHM7XG5cbiAgICAgIGJpdHNSZW1haW5pbmcgLT0gYml0c1RvUmVhZDtcbiAgICAgIHRoaXMuX2JpdE9mZnNldCArPSBiaXRzVG9SZWFkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBza2lwQml0cyhiaXRzVG9Ta2lwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYml0T2Zmc2V0ICsgYml0c1RvU2tpcCA+IHRoaXMuX2RhdGEubGVuZ3RoICogOCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2tpcCBbJHtiaXRzVG9Ta2lwfV0gYml0cyAtIG9ubHkgWyR7dGhpcy5nZXRSZW1haW5pbmdCaXRzKCl9XSBiaXRzIHJlbWFpbmluZyBpbiBzdHJlYW1gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9iaXRPZmZzZXQgKz0gYml0c1RvU2tpcDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW1haW5pbmdCaXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLl9kYXRhLmxlbmd0aCAqIDgpIC0gdGhpcy5fYml0T2Zmc2V0O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnR9IGZyb20gJy4uLy4uLy4uL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgTmFsVW5pdCBmcm9tICcuL25hbFVuaXQvTmFsVW5pdCc7XG5pbXBvcnQgU2VpUGF5bG9hZCBmcm9tICcuL25hbFVuaXQvU2VpUGF5bG9hZCc7XG5pbXBvcnQgTmFsVW5pdFR5cGUgZnJvbSAnLi9uYWxVbml0L05hbFVuaXRUeXBlJztcbmltcG9ydCBTZWlQYXlsb2FkVHlwZSBmcm9tICcuL25hbFVuaXQvU2VpUGF5bG9hZFR5cGUnO1xuaW1wb3J0IEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCBmcm9tICcuLi8uLi9FbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIMjY0Qml0c3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICBjb25zdHJ1Y3RvcihldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXIpIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlciA9IGV2ZW50UHVibGlzaGVyO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvTmFsVW5pdChuYWxVbml0VHlwZTogTmFsVW5pdFR5cGUsIGhhbmRsZXI6IChldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PE5hbFVuaXQ+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxOYWxVbml0PihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5OYWxVbml0LCBuYWxVbml0RXZlbnQgPT4ge1xuICAgICAgaWYgKG5hbFVuaXRFdmVudC5kYXRhLnR5cGUgPT09IG5hbFVuaXRUeXBlKSB7XG4gICAgICAgIGhhbmRsZXIobmFsVW5pdEV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb1NlaVBheWxvYWRUeXBlKHNlaVBheWxvYWRUeXBlOiBTZWlQYXlsb2FkVHlwZSwgaGFuZGxlcjogKGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8U2VpUGF5bG9hZD4pID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPFNlaVBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlNlaVBheWxvYWQsIHNlaVBheWxvYWRFdmVudCA9PiB7XG4gICAgICBpZiAoc2VpUGF5bG9hZEV2ZW50LmRhdGEudHlwZSA9PT0gc2VpUGF5bG9hZFR5cGUpIHtcbiAgICAgICAgaGFuZGxlcihzZWlQYXlsb2FkRXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvUGF5bG9hZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHBheWxvYWRVdWlkOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4pID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPHN0cmluZz4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZFN1YnNjcmlwdGlvbiwge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IHBheWxvYWRVdWlkXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwgcGF5bG9hZEV2ZW50ID0+IHtcbiAgICAgIGlmIChwYXlsb2FkRXZlbnQuZGF0YS51dWlkID09PSBwYXlsb2FkVXVpZCkge1xuICAgICAgICBoYW5kbGVyKHBheWxvYWRFdmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZW51bSBOYWxVbml0VHlwZSB7XG4gIFVuc3BlY2lmaWVkID0gMCxcbiAgU2xpY2VMYXllck5vbklkckRhdGEgPSAxLFxuICBTbGljZURhdGFQYXJ0aXRpb25BTGF5ZXIgPSAyLFxuICBTbGljZURhdGFQYXJ0aXRpb25CTGF5ZXIgPSAzLFxuICBTbGljZURhdGFQYXJ0aXRpb25DTGF5ZXIgPSA0LFxuICBTbGljZUxheWVySWRyRGF0YSA9IDUsXG4gIFN1cHBsZW1lbnRhbEVuaGFuY2VtZW50SW5mb3JtYXRpb24gPSA2LFxuICBTZXF1ZW5jZVBhcmFtZXRlclNldCA9IDcsXG4gIFBpY3R1cmVQYXJhbWV0ZXJTZXQgPSA4LFxuICBBY2Nlc3NVbml0RGVsaW1pdGVyID0gOSxcbiAgRW5kT2ZTZXF1ZW5jZSA9IDEwLFxuICBFbmRPZlN0cmVhbSA9IDExLFxuICBGaWxsZXJEYXRhID0gMTIsXG4gIFNlcXVlbmNlUGFyYW10ZXJTZXRFeHRlbnNpb24gPSAxMyxcbiAgUHJlZml4TmFsVW5pdCA9IDE0LFxuICBTdWJzZXRTZXF1ZW5jZVBhcmFtdGVyU2V0ID0gMTUsXG4gIERlcHRoUGFyYW10ZXJTZXQgPSAxNixcbiAgUmVzZXJ2ZWQxNyA9IDE3LFxuICBSZXNlcnZlZDE4ID0gMTgsXG4gIFNsaWNlTGF5ZXJBdXhpbGlhcnkgPSAxOSxcbiAgU2xpY2VFeHRlbnNpb24gPSAyMCxcbiAgU2xpY2VFeHRlbnNpb25EZXB0aFZpZXdDb21wb25lbnQgPSAyMSxcbiAgUmVzZXJ2ZWQyMiA9IDIyLFxuICBSZXNlcnZlcmQyMyA9IDIzLFxuICBVbnNwZWNpZmllZDI0ID0gMjQsXG4gIFVuc3BlY2lmaWVkMjUgPSAyNSxcbiAgVW5zcGVjaWZpZWQyNiA9IDI2LFxuICBVbnNwZWNpZmllZDI3ID0gMjcsXG4gIFVuc3BlY2lmaWVkMjggPSAyOCxcbiAgVW5zcGVjaWZpZWQyOSA9IDI5LFxuICBVbnNwZWNpZmllZDMwID0gMzAsXG4gIFVuc3BlY2lmaWVkMzEgPSAzMVxufVxuXG5leHBvcnQgZGVmYXVsdCBOYWxVbml0VHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZW51bSBTZWlQYXlsb2FkVHlwZSB7XG4gIEJ1ZmZlcmluZ1BlcmlvZCA9IDAsXG4gIFBpY3R1cmVUaW1pbmcgPSAxLFxuICBQYW5TY2FuUmVjdCA9IDIsXG4gIEZpbGxlclBheWxvYWQgPSAzLFxuICBVc2VyRGF0YVJlZ2lzdGVyZWQgPSA0LFxuICBVc2VyRGF0YVVucmVnaXN0ZXJlZCA9IDUsXG4gIFJlY292ZXJ5UG9pbnQgPSA2LFxuICBEZWNSZWZQaWNNYXJraW5nUmVwZWl0aW9uID0gNyxcbiAgU3BhcmVQaWMgPSA4LFxuICBTY2VuZUluZm8gPSA5LFxuICBTdWJTZXFJbmZvID0gMTAsXG4gIFN1YlNlcUxheWVyQ2hhcmFjdGVyaXN0aWNzID0gMTEsXG4gIFN1YlNlcUNoYXJhY3RlcmlzdGljcyA9IDEyLFxuICBGdWxsRnJhbWVGcmVlemUgPSAxMyxcbiAgRnVsbEZyYW1lRnJlZXplUmVsZWFzZSA9IDE0LFxuICBGdWxsRnJhbWVTbmFwc2hvdCA9IDE1LFxuICBQcm9ncmVzc2l2ZVJlZmluZW1lbnRTZWdtZW50U3RhcnQgPSAxNixcbiAgUHJvZ3Jlc3NpdmVSZWZpbmVtZW50U2VnbWVudEVuZCA9IDE3LFxuICBNb3Rpb25Db25zdHJhaW5lZFNsaWNlR3JvdXBTZXQgPSAxOCxcbiAgRmlsbUdyYWluQ2hhcmFjdGVyaXN0aWMgPSAxOSxcbiAgRGVibG9ja2luZ0ZpbHRlckRpc3BsYXlSZWZlcmVuY2UgPSAyMCxcbiAgU3RlcmVvVmlkZW9JbmZvID0gMjEsXG4gIFBvc3RGaWx0ZXJIaW50ID0gMjIsXG4gIFRvbmVNYXBwaW5nSW5mbyA9IDIzLFxuICBTY2FsYWJpbGl0eUluZm8gPSAyNCxcbiAgU3ViUGljU2NhbGFibGVMYXllciA9IDI1LFxuICBOb25SZXF1aXJlZExheWVyUmVwID0gMjYsXG4gIFBhcmlvcml0eUxheWVySW5mbyA9IDI3LFxuICBMYXllcnNOb3RQcmVzZW50ID0gMjgsXG4gIExheWVyRGVwZW5kZW5jeUNoYW5nZSA9IDI5LFxuICBTY2FsYWJsZU5lc3RpbmcgPSAzMCxcbiAgQmFzZUxheWVyVGVtcG9yYWxIcmQgPSAzMSxcbiAgUXVhbGl0eUxheWVySW50ZWdyaXR5Q2hlY2sgPSAzMixcbiAgUmVkdW5kYW50UGljUHJvcGVydHkgPSAzMyxcbiAgVGwwRGVwUmVwSW5kZXggPSAzNCxcbiAgVGxTd2l0Y2hpbmdQb2ludCA9IDM1LFxuICBQYXJhbGxlbERlY29kaW5nSW5mbyA9IDM2LFxuICBNdmNTY2FsYWJsZU5lc3RpbmcgPSAzNyxcbiAgVmlld1NjYWxhYmlsaXR5SW5mbyA9IDM4LFxuICBNdWx0aXZpZXdTY2VuZUluZm8gPSAzOSxcbiAgTXVsdGl2aWV3QWNxdWlzaXRpb25JbmZvID0gNDAsXG4gIE5vblJlcXVpcmVkVmlld0NvbXBvbmVudCA9IDQxLFxuICBWaWV3RGVwZW5kZW5jeUNoYW5nZSA9IDQyLFxuICBPcGVyYXRpb25Qb2ludHNOb3RQcmVzZW50ID0gNDMsXG4gIEJhc2VWaWV3VGVtcG9yYWxIZHIgPSA0NCxcbiAgRnJhbWVQYWNraW5nQXJyYW5nZW1lbnQgPSA0NSxcbiAgTXVsdGl2aWV3Vmlld1Bvc2l0aW9uID0gNDYsXG4gIERpc3BsYXlPcmllbnRhdGlvbiA9IDQ3LFxuICBNdmNkU2NhbGFibGVOZXN0aW5nID0gNDgsXG4gIE12Y2RWaWV3U2NhbGFiaWxpdHlJbmZvID0gNDksXG4gIERlcHRoUmVwcmVzZW50YXRpb25JbmZvID0gNTAsXG4gIFRocmVlRGltZW5zaW9uYWxSZWZlcmVuY2VEaXNwbGF5c0luZm8gPSA1MSxcbiAgRGVwdGhUaW1pbmcgPSA1MixcbiAgRGVwdGhTYW1wbGluZ0luZm8gPSA1MyxcbiAgQ29uc3RyYWluZWREZXB0aFBhcmFtZXRlclNldElkZW50aWZpZXIgPSA1NCxcbiAgR3JlZW5NZXRhZGF0YSA9IDU1LFxuICBNYXN0ZXJpbmdEaXNwbGF5Q29sb3VyVm9sdW1ldiA9IDU2LFxuICBDb2xvdXJSZW1hcHBpbmdJbmZvID0gNTcsXG4gIENvbnRlbnRMaWdodExldmVsSW5mbyA9IDU4LFxuICBBbHRlcm5hdGl2ZVRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gNTksXG4gIEFtYmllbnRWaWV3aW5nRW52aXJvbm1lbnQgPSA2MCxcbiAgQ29udGVudENvbG91clZvbHVtZSA9IDYxLFxuICBFcXVpcmVjdGFuZ3VsYXJQcm9qZWN0aW9uID0gNjIsXG4gIEN1YmVtYXBQcm9qZWN0aW9uID0gNjMsXG4gIFNwaGVyZVJvdGF0aW9uID0gNjQsXG4gIFJlZ2lvbndpc2VQYWNraW5nID0gNjUsXG4gIE9tbmlWaWV3cG9ydCA9IDY2LFxuICBBbHRlcm5hdGl2ZURlcHRoSW5mbyA9IDY3LFxuICBTZWlNYW5pZmVzdCA9IDY4LFxuICBTZWlQcmVmaXhJbmRpY2F0aW9uID0gNjksXG4gIEFubm90YXRlZFJlZ2lvbnMgPSA3MCxcbiAgU2h1dHRlckludGVydmFsSW5mbyA9IDcxXG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlaVBheWxvYWRUeXBlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IFVpbnQ4QXJyYXlzIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xhbmcvVWludDhBcnJheXMnO1xuaW1wb3J0IE5hbFVuaXQgZnJvbSAnLi4vbmFsVW5pdC9OYWxVbml0JztcbmltcG9ydCBOYWxVbml0VHlwZSBmcm9tICcuLi9uYWxVbml0L05hbFVuaXRUeXBlJztcbmltcG9ydCBTZWlQYXlsb2FkIGZyb20gJy4uL25hbFVuaXQvU2VpUGF5bG9hZCc7XG5pbXBvcnQgU2VpUGF5bG9hZFR5cGUgZnJvbSAnLi4vbmFsVW5pdC9TZWlQYXlsb2FkVHlwZSc7XG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnR9IGZyb20gJy4uLy4uLy4uLy4uL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkIGZyb20gJy4uLy4uLy4uL0VuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCc7XG5pbXBvcnQgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgZnJvbSAnLi92Y2wvSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3knO1xuaW1wb3J0IEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyBmcm9tICcuL0VtdWxhdGlvblByZXZlbnRpb25CeXRlcyc7XG5cbnR5cGUgRXh0cmFjdGVkRGF0YSA9IHtcbiAgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoOiAzIHwgNDtcbiAgbmFsVW5pdDogTmFsVW5pdDtcbiAgc2VpUGF5bG9hZHM/OiBTZWlQYXlsb2FkW107XG59O1xuXG50eXBlIEV4dHJhY3RlZE5hbFVuaXQgPSB7XG4gIG5hbFVuaXREYXRhOiBVaW50OEFycmF5O1xuICBzZWlQYXlsb2Fkcz86IFNlaVBheWxvYWRbXTtcbn07XG5cbnR5cGUgRXh0cmFjdGVkU2VpUGF5bG9hZCA9IHtcbiAgcGF5bG9hZFR5cGU6IFNlaVBheWxvYWRUeXBlO1xuICBwYXlsb2FkOiBVaW50OEFycmF5O1xuICBlbmRJbmRleDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlckNvbmZpZ3VyYXRpb24gPSB7XG4gIHRydW5jYXRlZFZjbE5hbFVuaXRCeXRlTGVuZ3RoOiBudW1iZXI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBhbm5leEIzQnl0ZVN0YXJ0Q29kZSA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAxXSk7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgYW5uZXhCNEJ5dGVTdGFydENvZGUgPSBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VpUGF5bG9hZDNCeXRlRW5kQ29kZSA9IG5ldyBVaW50OEFycmF5KFsweDgwLCAweDAwLCAweDAwLCAweDAxXSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZWlQYXlsb2FkNEJ5dGVFbmRDb2RlID0gbmV3IFVpbnQ4QXJyYXkoWzB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF92Y2xFeHRyYWN0aW9uU3RyYXRlZ3k6IElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICBjb25zdHJ1Y3RvcihldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXIsIHZjbEV4dHJhY3Rpb25TdHJhdGVneTogSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kpIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlciA9IGV2ZW50UHVibGlzaGVyO1xuICAgIHRoaXMuX3ZjbEV4dHJhY3Rpb25TdHJhdGVneSA9IHZjbEV4dHJhY3Rpb25TdHJhdGVneTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzKCkpO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8VWludDhBcnJheT4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmssIHRoaXMucGFyc2VFbmNvZGVkVmlkZW9TdHJlYW1DaHVuay5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayh7Y29udGV4dCwgZGF0YTogY2h1bmt9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8VWludDhBcnJheT4pOiB2b2lkIHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcblxuICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBjaHVuay5ieXRlTGVuZ3RoKSB7XG4gICAgICBjdXJyZW50SW5kZXggKz0gdGhpcy5oYW5kbGVFeHRyYWN0ZWREYXRhKGNvbnRleHQsIHRoaXMuZXh0cmFjdE5hbFVuaXRBdE9mZnNldChjaHVuaywgY3VycmVudEluZGV4KSk7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnlFbmRPZkNodW5rKGNvbnRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFeHRyYWN0ZWREYXRhKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwge2FubmV4QlN0YXJ0Q29kZUxlbmd0aCwgbmFsVW5pdCwgc2VpUGF5bG9hZHN9OiBFeHRyYWN0ZWREYXRhKTogbnVtYmVyIHtcbiAgICB0aGlzLnB1Ymxpc2hOYWxVbml0KGNvbnRleHQsIG5hbFVuaXQpO1xuICAgIHNlaVBheWxvYWRzPy5mb3JFYWNoKHNlaVBheWxvYWQgPT4gdGhpcy5oYW5kbGVTZWlQYXlsb2FkKGNvbnRleHQsIHNlaVBheWxvYWQpKTtcblxuICAgIHJldHVybiBuYWxVbml0LmRhdGEuYnl0ZUxlbmd0aCArIGFubmV4QlN0YXJ0Q29kZUxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VpUGF5bG9hZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHNlaVBheWxvYWQ6IFNlaVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLnB1Ymxpc2hTZWlQYXlsb2FkKGNvbnRleHQsIHNlaVBheWxvYWQpO1xuXG4gICAgc3dpdGNoIChzZWlQYXlsb2FkLnR5cGUpIHtcbiAgICAgIGNhc2UgU2VpUGF5bG9hZFR5cGUuVXNlckRhdGFVbnJlZ2lzdGVyZWQ6XG4gICAgICAgIHRoaXMuaGFuZGxlU2VpUGF5bG9hZFVzZXJEYXRhVW5yZWdpc3RlcmVkKGNvbnRleHQsIHNlaVBheWxvYWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VpUGF5bG9hZFVzZXJEYXRhVW5yZWdpc3RlcmVkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgc2VpUGF5bG9hZDogU2VpUGF5bG9hZCk6IHZvaWQge1xuICAgIGNvbnN0IHBheWxvYWRVdWlkID0gVWludDhBcnJheXMuZ2V0VXVpZFN0cmluZ0Zyb21VaW50OEFycmF5KHNlaVBheWxvYWQuZGF0YS5zdWJhcnJheSgwLCAxNikpO1xuICAgIGNvbnN0IHBheWxvYWREYXRhID0gc2VpUGF5bG9hZC5kYXRhLnN1YmFycmF5KDE2KTtcblxuICAgIHRoaXMucHVibGlzaFBheWxvYWQoY29udGV4dCwge1xuICAgICAgdXVpZDogcGF5bG9hZFV1aWQsXG4gICAgICBkYXRhOiBwYXlsb2FkRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwdWJsaXNoTmFsVW5pdChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIG5hbFVuaXQ6IE5hbFVuaXQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPE5hbFVuaXQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Lk5hbFVuaXQsIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBuYWxVbml0XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHB1Ymxpc2hTZWlQYXlsb2FkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgc2VpUGF5bG9hZDogU2VpUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyLnB1Ymxpc2g8U2VpUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuU2VpUGF5bG9hZCwge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IHNlaVBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGlzaFBheWxvYWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBwYXlsb2FkOiBFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IHBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5RW5kT2ZDaHVuayhjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPG51bGw+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LkVuZE9mQ2h1bmssIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBudWxsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3ROYWxVbml0QXRPZmZzZXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkRGF0YSB7XG4gICAgY29uc3QgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoID0gY2h1bmtbb2Zmc2V0ICsgMl0gPT09IDB4MDEgPyAzIDogNDtcbiAgICBjb25zdCBuYWxVbml0SGVhZGVySW5kZXggPSBvZmZzZXQgKyBhbm5leEJTdGFydENvZGVMZW5ndGg7XG4gICAgY29uc3QgbmFsVW5pdFR5cGUgPSBjaHVua1tuYWxVbml0SGVhZGVySW5kZXhdICYgMHgxZjtcbiAgICBsZXQgZXh0cmFjdGVkRGF0YTtcblxuICAgIHN3aXRjaCAobmFsVW5pdFR5cGUpIHtcbiAgICAgIGNhc2UgTmFsVW5pdFR5cGUuU2xpY2VMYXllck5vbklkckRhdGE6XG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlNsaWNlRGF0YVBhcnRpdGlvbkFMYXllcjpcbiAgICAgIGNhc2UgTmFsVW5pdFR5cGUuU2xpY2VEYXRhUGFydGl0aW9uQkxheWVyOlxuICAgICAgY2FzZSBOYWxVbml0VHlwZS5TbGljZURhdGFQYXJ0aXRpb25DTGF5ZXI6XG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlNsaWNlTGF5ZXJJZHJEYXRhOlxuICAgICAgICBleHRyYWN0ZWREYXRhID0gdGhpcy5fdmNsRXh0cmFjdGlvblN0cmF0ZWd5LmV4dHJhY3RWY2xOYWxVbml0KGNodW5rLCBuYWxVbml0SGVhZGVySW5kZXgpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlN1cHBsZW1lbnRhbEVuaGFuY2VtZW50SW5mb3JtYXRpb246XG4gICAgICAgIGV4dHJhY3RlZERhdGEgPSB0aGlzLmV4dHJhY3RTZWlOYWxVbml0KGNodW5rLCBuYWxVbml0SGVhZGVySW5kZXgpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBleHRyYWN0ZWREYXRhID0gdGhpcy5leHRyYWN0Tm9uVmNsTmFsVW5pdChjaHVuaywgbmFsVW5pdEhlYWRlckluZGV4KTtcblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoLFxuICAgICAgbmFsVW5pdDoge1xuICAgICAgICB0eXBlOiBuYWxVbml0VHlwZSxcbiAgICAgICAgZGF0YTogZXh0cmFjdGVkRGF0YS5uYWxVbml0RGF0YVxuICAgICAgfSxcbiAgICAgIHNlaVBheWxvYWRzOiBleHRyYWN0ZWREYXRhLnNlaVBheWxvYWRzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFNlaU5hbFVuaXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkTmFsVW5pdCB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IG9mZnNldCArIDE7XG4gICAgY29uc3Qgc2VpUGF5bG9hZHM6IFNlaVBheWxvYWRbXSA9IFtdO1xuXG4gICAgd2hpbGUgKFxuICAgICAgIVVpbnQ4QXJyYXlzLmlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlKEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuX3NlaVBheWxvYWQ0Qnl0ZUVuZENvZGUsIGNodW5rLCBjdXJyZW50SW5kZXgpXG4gICAgICAmJiAhVWludDhBcnJheXMuaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5fc2VpUGF5bG9hZDNCeXRlRW5kQ29kZSwgY2h1bmssIGN1cnJlbnRJbmRleClcbiAgICAgICYmIGN1cnJlbnRJbmRleCA8IGNodW5rLmJ5dGVMZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnN0IGV4dHJhY3RlZFNlaVBheWxvYWQgPSB0aGlzLmV4dHJhY3RTZWlQYXlsb2FkKGNodW5rLCBjdXJyZW50SW5kZXgpO1xuXG4gICAgICBzZWlQYXlsb2Fkcy5wdXNoKHtcbiAgICAgICAgZGF0YTogZXh0cmFjdGVkU2VpUGF5bG9hZC5wYXlsb2FkLFxuICAgICAgICB0eXBlOiBleHRyYWN0ZWRTZWlQYXlsb2FkLnBheWxvYWRUeXBlXG4gICAgICB9KTtcbiAgICAgIGN1cnJlbnRJbmRleCA9IGV4dHJhY3RlZFNlaVBheWxvYWQuZW5kSW5kZXg7XG4gICAgfVxuXG4gICAgY3VycmVudEluZGV4Kys7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCwgY3VycmVudEluZGV4KSxcbiAgICAgIHNlaVBheWxvYWRzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdE5vblZjbE5hbFVuaXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkTmFsVW5pdCB7XG4gICAgY29uc3QgbmV4dEFubmV4QlN0YXJ0Q29kZUluZGV4ID0gQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5maW5kQW5uZXhCU3RhcnRJbmRleEZyb21PZmZzZXQoY2h1bmssIG9mZnNldCwgY2h1bmsuYnl0ZUxlbmd0aCk7XG5cbiAgICByZXR1cm4ge25hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQsIG5leHRBbm5leEJTdGFydENvZGVJbmRleCl9O1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0U2VpUGF5bG9hZChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWRTZWlQYXlsb2FkIHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gb2Zmc2V0O1xuICAgIGxldCBmZkNvdW50ID0gMDtcblxuICAgIHdoaWxlIChjaHVua1tjdXJyZW50SW5kZXhdID09PSAweGZmKSB7XG4gICAgICBjdXJyZW50SW5kZXgrKztcbiAgICAgIGZmQ291bnQrKztcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkVHlwZSA9IGZmQ291bnQgKiAyNTUgKyBjaHVua1tjdXJyZW50SW5kZXhdO1xuXG4gICAgY3VycmVudEluZGV4Kys7XG4gICAgZmZDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoY2h1bmtbY3VycmVudEluZGV4XSA9PT0gMHhmZikge1xuICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgICBmZkNvdW50Kys7XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZFNpemUgPSBmZkNvdW50ICogMjU1ICsgY2h1bmtbY3VycmVudEluZGV4XTtcblxuICAgIGN1cnJlbnRJbmRleCsrO1xuXG4gICAgY29uc3QgZW5kSW5kZXggPSBjdXJyZW50SW5kZXggKyBFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMuZ2V0T2Zmc2V0V2l0aEV4cGFuZGVkRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzKGNodW5rLCBjdXJyZW50SW5kZXgsIHBheWxvYWRTaXplKTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXlsb2FkVHlwZSxcbiAgICAgIHBheWxvYWQ6IGNodW5rLnN1YmFycmF5KGN1cnJlbnRJbmRleCwgZW5kSW5kZXgpLFxuICAgICAgZW5kSW5kZXhcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmaW5kQW5uZXhCU3RhcnRJbmRleEZyb21PZmZzZXQoZGF0YTogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGluZGV4NCA9IFVpbnQ4QXJyYXlzLmZpbmRUYXJnZXRCeXRlU2VxdWVuY2VJbmRleEZyb21PZmZzZXQoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEI0Qnl0ZVN0YXJ0Q29kZSwgZGF0YSwgb2Zmc2V0LCByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCk7XG5cbiAgICBpZiAoaW5kZXg0ICE9PSByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCkge1xuICAgICAgcmV0dXJuIGluZGV4NDtcbiAgICB9XG5cbiAgICByZXR1cm4gVWludDhBcnJheXMuZmluZFRhcmdldEJ5dGVTZXF1ZW5jZUluZGV4RnJvbU9mZnNldChBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjNCeXRlU3RhcnRDb2RlLCBkYXRhLCBvZmZzZXQsIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMge1xuICBwdWJsaWMgc3RhdGljIGdldE9mZnNldFdpdGhFeHBhbmRlZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyhidWZmZXI6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyLCBudW1iZXJPZk5vbkVtdWxhdGlvblByZXZlbnRpb25CeXRlczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgbGVhZGluZ1plcm9CeXRlcyA9IDA7XG4gICAgbGV0IG51bWJlck9mQnl0ZXNWaXNpdGVkID0gMDtcbiAgICBsZXQgbnVtYmVyT2ZCeXRlc1RvU2VlayA9IG51bWJlck9mTm9uRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzO1xuXG4gICAgZm9yIChsZXQgaSA9IG9mZnNldDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKywgbnVtYmVyT2ZCeXRlc1Zpc2l0ZWQrKykge1xuICAgICAgaWYgKG51bWJlck9mQnl0ZXNUb1NlZWsgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChsZWFkaW5nWmVyb0J5dGVzID09PSAyICYmIGJ1ZmZlcltpXSA9PT0gMHgwMykge1xuICAgICAgICBsZWFkaW5nWmVyb0J5dGVzID0gMDtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJ1ZmZlcltpXSA9PT0gMHgwMCkge1xuICAgICAgICBsZWFkaW5nWmVyb0J5dGVzKys7XG4gICAgICB9IGVsc2UgaWYgKGxlYWRpbmdaZXJvQnl0ZXMgPiAwKSB7XG4gICAgICAgIGxlYWRpbmdaZXJvQnl0ZXMgPSAwO1xuICAgICAgfVxuXG4gICAgICBudW1iZXJPZkJ5dGVzVG9TZWVrLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bWJlck9mQnl0ZXNWaXNpdGVkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMoYnVmZmVyOiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgIGxldCBvdXRPZmZzZXQgPSAwO1xuICAgIGxldCBlYnNwT2Zmc2V0ID0gMDtcblxuICAgIGZvciAobGV0IHByZXZlbnRpb25CeXRlSWR4ID0gMjsgcHJldmVudGlvbkJ5dGVJZHggPCBidWZmZXIuYnl0ZUxlbmd0aDsgcHJldmVudGlvbkJ5dGVJZHgrKykge1xuICAgICAgaWYgKGJ1ZmZlcltwcmV2ZW50aW9uQnl0ZUlkeF0gPT09IDB4MDMgJiYgYnVmZmVyW3ByZXZlbnRpb25CeXRlSWR4IC0gMV0gPT09IDB4MDAgJiYgYnVmZmVyW3ByZXZlbnRpb25CeXRlSWR4IC0gMl0gPT09IDB4MDApIHtcbiAgICAgICAgb3V0cHV0LnNldChidWZmZXIuc3ViYXJyYXkoZWJzcE9mZnNldCwgcHJldmVudGlvbkJ5dGVJZHgpLCBvdXRPZmZzZXQpO1xuICAgICAgICBvdXRPZmZzZXQgKz0gcHJldmVudGlvbkJ5dGVJZHggLSBlYnNwT2Zmc2V0O1xuICAgICAgICBlYnNwT2Zmc2V0ID0gcHJldmVudGlvbkJ5dGVJZHggKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlYnNwT2Zmc2V0IDwgYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgIG91dHB1dC5zZXQoYnVmZmVyLnN1YmFycmF5KGVic3BPZmZzZXQpLCBvdXRPZmZzZXQpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQml0c3RyZWFtUmVhZGVyIGZyb20gJy4uLy4uLy4uL0JpdHN0cmVhbVJlYWRlcic7XG5pbXBvcnQgRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIGZyb20gJy4vRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzJztcblxuZW51bSBQaWNTdHJ1Y3Qge1xuICBQcm9ncmVzc2l2ZUZyYW1lID0gMCxcbiAgVG9wRmllbGQgPSAxLFxuICBCb3R0b21GaWVsZCA9IDIsXG4gIFRvcEZpZWxkQm90dG9tRmllbGQgPSAzLFxuICBCb3R0b21GaWVsZFRvcEZpZWxkID0gNCxcbiAgVG9wRmllbGRCb3R0b21GaWVsZFRvcEZpZWxkUmVwZWF0ZWQgPSA1LFxuICBCb3R0b21GaWVsZFRvcEZpZWxkQm90dG9tRmllbGRSZXBlYXRlZCA9IDYsXG4gIEZyYW1lRG91YmxpbmcgPSA3LFxuICBGcmFtZVRyaXBsaW5nID0gOFxufVxuXG5leHBvcnQgdHlwZSBQaWN0dXJlVGltaW5nUGFyc2luZ0NvbmZpZyA9IHtcbiAgcGljU3RydWN0UHJlc2VudEZsYWc6IGJvb2xlYW47XG59ICYgKFxuICB7XG4gICAgY3BiRHBiRGVsYXlzUHJlc2VudEZsYWc6IHRydWU7XG4gICAgY3BiUmVtb3ZhbERlbGF5TGVuZ3RoTWludXMxOiBudW1iZXI7XG4gICAgZHBiT3V0cHV0RGVsYXlMZW5ndGhNaW51czE6IG51bWJlcjtcbiAgfVxuICB8IHtcbiAgICBjcGJEcGJEZWxheXNQcmVzZW50RmxhZzogZmFsc2U7XG4gIH1cbik7XG5cbmV4cG9ydCB0eXBlIENsb2NrVGltZXN0YW1wID0ge1xuICBjdFR5cGU6IG51bWJlcjtcbiAgbnVpdEZpZWxkQmFzZWRGbGFnOiBib29sZWFuO1xuICBjb3VudGluZ1R5cGU6IG51bWJlcjtcbiAgZnVsbFRpbWVzdGFtcEZsYWc6IGJvb2xlYW47XG4gIGRpc2NvbnRpbnVpdHlGbGFnOiBib29sZWFuO1xuICBjbnREcm9wcGVkRmxhZzogYm9vbGVhbjtcbiAgbkZyYW1lczogbnVtYmVyO1xuICBzZWNvbmRzPzogbnVtYmVyO1xuICBtaW51dGVzPzogbnVtYmVyO1xuICBob3Vycz86IG51bWJlcjtcbiAgdGltZU9mZnNldD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFBpY3R1cmVUaW1pbmcgPSB7XG4gIHBpY1N0cnVjdDogdW5kZWZpbmVkIHwge1xuICAgIG51bUNsb2NrVFM6IG51bWJlcjtcbiAgICBjbG9ja1RpbWVzdGFtcHM6IEFycmF5PHtcbiAgICAgIGNsb2NrVGltZXN0YW1wRmxhZzogZmFsc2U7XG4gICAgfSB8IHtcbiAgICAgIGNsb2NrVGltZXN0YW1wRmxhZzogdHJ1ZTtcbiAgICAgIGNsb2NrVGltZXN0YW1wOiBDbG9ja1RpbWVzdGFtcDtcbiAgICB9PjtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBpY3R1cmVUaW1pbmdQYXJzZXIge1xuICBwdWJsaWMgcGFyc2UoZGF0YTogVWludDhBcnJheSwgY29uZmlnOiBQaWN0dXJlVGltaW5nUGFyc2luZ0NvbmZpZyk6IFBpY3R1cmVUaW1pbmcge1xuICAgIGNvbnN0IGJpdHN0cmVhbVJlYWRlciA9IG5ldyBCaXRzdHJlYW1SZWFkZXIoRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzLnJlbW92ZUVtdWxhdGlvblByZXZlbnRpb25CeXRlcyhkYXRhKSk7XG4gICAgY29uc3QgcGljdHVyZVRpbWluZzogUGljdHVyZVRpbWluZyA9IHtwaWNTdHJ1Y3Q6IHVuZGVmaW5lZH07XG5cbiAgICBpZiAoY29uZmlnLmNwYkRwYkRlbGF5c1ByZXNlbnRGbGFnKSB7XG4gICAgICAvLyBXZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhlIENQQiBhbmQgRFBCIGRlbGF5cyBhdCB0aGUgbW9tZW50XG4gICAgICBiaXRzdHJlYW1SZWFkZXIuc2tpcEJpdHMoY29uZmlnLmNwYlJlbW92YWxEZWxheUxlbmd0aE1pbnVzMSArIDEpO1xuICAgICAgYml0c3RyZWFtUmVhZGVyLnNraXBCaXRzKGNvbmZpZy5kcGJPdXRwdXREZWxheUxlbmd0aE1pbnVzMSArIDEpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcucGljU3RydWN0UHJlc2VudEZsYWcpIHtcbiAgICAgIGNvbnN0IG51bUNsb2NrVFMgPSB0aGlzLmNvbnZlcnRQaWNTdHJ1Y3RUb051bUNsb2NrVFMoYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDQpKTtcblxuICAgICAgcGljdHVyZVRpbWluZy5waWNTdHJ1Y3QgPSB7XG4gICAgICAgIG51bUNsb2NrVFMsXG4gICAgICAgIGNsb2NrVGltZXN0YW1wczogW11cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGljdHVyZVRpbWluZy5waWNTdHJ1Y3QubnVtQ2xvY2tUUzsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNsb2NrVGltZXN0YW1wRmxhZyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMTtcblxuICAgICAgICBpZiAoY2xvY2tUaW1lc3RhbXBGbGFnKSB7XG4gICAgICAgICAgY29uc3QgY2xvY2tUaW1lc3RhbXA6IENsb2NrVGltZXN0YW1wID0ge1xuICAgICAgICAgICAgY3RUeXBlOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMiksXG4gICAgICAgICAgICBudWl0RmllbGRCYXNlZEZsYWc6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMSxcbiAgICAgICAgICAgIGNvdW50aW5nVHlwZTogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDUpLFxuICAgICAgICAgICAgZnVsbFRpbWVzdGFtcEZsYWc6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMSxcbiAgICAgICAgICAgIGRpc2NvbnRpbnVpdHlGbGFnOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDEsXG4gICAgICAgICAgICBjbnREcm9wcGVkRmxhZzogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxLFxuICAgICAgICAgICAgbkZyYW1lczogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDgpXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjbG9ja1RpbWVzdGFtcC5mdWxsVGltZXN0YW1wRmxhZykge1xuICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuc2Vjb25kcyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg2KTtcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wLm1pbnV0ZXMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNik7XG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5ob3VycyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg1KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kc0ZsYWcgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDE7XG5cbiAgICAgICAgICAgIGlmIChzZWNvbmRzRmxhZykge1xuICAgICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5zZWNvbmRzID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDYpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG1pbnV0ZXNGbGFnID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxO1xuXG4gICAgICAgICAgICAgIGlmIChtaW51dGVzRmxhZykge1xuICAgICAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wLm1pbnV0ZXMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNik7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBob3Vyc0ZsYWcgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDE7XG5cbiAgICAgICAgICAgICAgICBpZiAoaG91cnNGbGFnKSB7XG4gICAgICAgICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5ob3VycyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg1KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbG9ja1RpbWVzdGFtcC50aW1lT2Zmc2V0ID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDI0KTtcblxuICAgICAgICAgIHBpY3R1cmVUaW1pbmcucGljU3RydWN0LmNsb2NrVGltZXN0YW1wcy5wdXNoKHtcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wRmxhZyxcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGljdHVyZVRpbWluZy5waWNTdHJ1Y3QuY2xvY2tUaW1lc3RhbXBzLnB1c2goe2Nsb2NrVGltZXN0YW1wRmxhZzogZmFsc2V9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwaWN0dXJlVGltaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UGljU3RydWN0VG9OdW1DbG9ja1RTKHBpY1N0cnVjdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHBpY1N0cnVjdCkge1xuICAgICAgY2FzZSBQaWNTdHJ1Y3QuUHJvZ3Jlc3NpdmVGcmFtZTpcbiAgICAgIGNhc2UgUGljU3RydWN0LlRvcEZpZWxkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuQm90dG9tRmllbGQ6XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgY2FzZSBQaWNTdHJ1Y3QuVG9wRmllbGRCb3R0b21GaWVsZDpcbiAgICAgIGNhc2UgUGljU3RydWN0LkJvdHRvbUZpZWxkVG9wRmllbGQ6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5GcmFtZURvdWJsaW5nOlxuICAgICAgICByZXR1cm4gMjtcbiAgICAgIGNhc2UgUGljU3RydWN0LlRvcEZpZWxkQm90dG9tRmllbGRUb3BGaWVsZFJlcGVhdGVkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuQm90dG9tRmllbGRUb3BGaWVsZEJvdHRvbUZpZWxkUmVwZWF0ZWQ6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5GcmFtZVRyaXBsaW5nOlxuICAgICAgICByZXR1cm4gMztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgVWludDhBcnJheXMgZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGFuZy9VaW50OEFycmF5cyc7XG5pbXBvcnQgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciBmcm9tICcuLi9Bbm5leEJCeXRlU3RyZWFtUGFyc2VyJztcbmltcG9ydCBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSwge0V4dHJhY3RlZE5hbFVuaXR9IGZyb20gJy4vSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3knO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSBpbXBsZW1lbnRzIElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RydW5jYXRlZFZjbE5hbFVuaXRCeXRlTGVuZ3RoID0gMzI7XG5cbiAgcHVibGljIGV4dHJhY3RWY2xOYWxVbml0KGNodW5rOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IEV4dHJhY3RlZE5hbFVuaXQge1xuICAgIGNvbnN0IG5leHRQb3RlbnRpYWw0Qnl0ZVN0YXJ0Q29kZUluZGV4ID0gb2Zmc2V0ICsgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEI0Qnl0ZVN0YXJ0Q29kZS5ieXRlTGVuZ3RoICsgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kuX3RydW5jYXRlZFZjbE5hbFVuaXRCeXRlTGVuZ3RoO1xuXG4gICAgaWYgKFVpbnQ4QXJyYXlzLmlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlKEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCNEJ5dGVTdGFydENvZGUsIGNodW5rLCBuZXh0UG90ZW50aWFsNEJ5dGVTdGFydENvZGVJbmRleCkpIHtcbiAgICAgIHJldHVybiB7bmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCArIEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCNEJ5dGVTdGFydENvZGUuYnl0ZUxlbmd0aCwgbmV4dFBvdGVudGlhbDRCeXRlU3RhcnRDb2RlSW5kZXgpfTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0UG90ZW50aWFsM0J5dGVTdGFydENvZGVJbmRleCA9IG9mZnNldCArIEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCM0J5dGVTdGFydENvZGUuYnl0ZUxlbmd0aCArIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5Ll90cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aDtcblxuICAgIGlmIChVaW50OEFycmF5cy5pc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZShBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjNCeXRlU3RhcnRDb2RlLCBjaHVuaywgbmV4dFBvdGVudGlhbDNCeXRlU3RhcnRDb2RlSW5kZXgpKSB7XG4gICAgICByZXR1cm4ge25hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQgKyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjNCeXRlU3RhcnRDb2RlLmJ5dGVMZW5ndGgsIG5leHRQb3RlbnRpYWwzQnl0ZVN0YXJ0Q29kZUluZGV4KX07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtuYWxVbml0RGF0YTogY2h1bmsuc3ViYXJyYXkob2Zmc2V0KX07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIgZnJvbSAnLi4vQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcic7XG5pbXBvcnQgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3ksIHtFeHRyYWN0ZWROYWxVbml0fSBmcm9tICcuL0lWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFuaWxsYVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgaW1wbGVtZW50cyBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSB7XG4gIHB1YmxpYyBleHRyYWN0VmNsTmFsVW5pdChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWROYWxVbml0IHtcbiAgICBjb25zdCBuZXh0QW5uZXhCU3RhcnRDb2RlSW5kZXggPSBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmZpbmRBbm5leEJTdGFydEluZGV4RnJvbU9mZnNldChjaHVuaywgb2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKTtcblxuICAgIHJldHVybiB7bmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCwgbmV4dEFubmV4QlN0YXJ0Q29kZUluZGV4KX07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBIMjY0Qml0c3RyZWFtIGZyb20gJy4uL2NvZGVjL2gyNjQvSDI2NEJpdHN0cmVhbSc7XG5pbXBvcnQgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciBmcm9tICcuLi9jb2RlYy9oMjY0L3BhcnNlL0FubmV4QkJ5dGVTdHJlYW1QYXJzZXInO1xuaW1wb3J0IFZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IGZyb20gJy4uL2NvZGVjL2gyNjQvcGFyc2UvdmNsL1ZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcbmltcG9ydCBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSBmcm9tICcuLi9jb2RlYy9oMjY0L3BhcnNlL3ZjbC9QaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSc7XG5pbXBvcnQgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyBmcm9tICcuLi9lbmNvZGluZy8yMDIzL1BoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMnO1xuaW1wb3J0IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgZnJvbSAnLi9IMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyJztcbmltcG9ydCBQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciBmcm9tICcuL1BoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0c3RyZWFtRGVjb2RlcnMge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIoKTogSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciB7XG4gICAgY29uc3QgZGVjb2RlckV2ZW50UHVibGlzaGVyID0gbmV3IEV2ZW50UHVibGlzaGVyKCk7XG4gICAgY29uc3QgYml0c3RyZWFtID0gbmV3IEgyNjRCaXRzdHJlYW0oZGVjb2RlckV2ZW50UHVibGlzaGVyKTtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcihkZWNvZGVyRXZlbnRQdWJsaXNoZXIsIG5ldyBWYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSgpKTtcblxuICAgIHJldHVybiBuZXcgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcihkZWNvZGVyRXZlbnRQdWJsaXNoZXIsIGJpdHN0cmVhbSwgcGFyc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIoKTogUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIge1xuICAgIGNvbnN0IGRlY29kZXJFdmVudFB1Ymxpc2hlciA9IG5ldyBFdmVudFB1Ymxpc2hlcigpO1xuICAgIGNvbnN0IGJpdHN0cmVhbSA9IG5ldyBIMjY0Qml0c3RyZWFtKGRlY29kZXJFdmVudFB1Ymxpc2hlcik7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIoZGVjb2RlckV2ZW50UHVibGlzaGVyLCBuZXcgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3koKSk7XG4gICAgY29uc3QgaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciA9IG5ldyBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyKGRlY29kZXJFdmVudFB1Ymxpc2hlciwgYml0c3RyZWFtLCBwYXJzZXIpO1xuICAgIGNvbnN0IGVuY29kaW5nID0gbmV3IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMoZGVjb2RlckV2ZW50UHVibGlzaGVyKTtcblxuICAgIHJldHVybiBuZXcgUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIoaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciwgZW5jb2RpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JpdHN0cmVhbURlY29kZXJzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCBmcm9tICcuLi8uLi9ldmVudC9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudH0gZnJvbSAnLi4vLi4vZXZlbnQvZXZlbnRzL0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCBIMjY0Qml0c3RyZWFtIGZyb20gJy4uL2NvZGVjL2gyNjQvSDI2NEJpdHN0cmVhbSc7XG5pbXBvcnQgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciBmcm9tICcuLi9jb2RlYy9oMjY0L3BhcnNlL0FubmV4QkJ5dGVTdHJlYW1QYXJzZXInO1xuaW1wb3J0IElCaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4vSUJpdHN0cmVhbURlY29kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIGltcGxlbWVudHMgSUJpdHN0cmVhbURlY29kZXI8SDI2NEJpdHN0cmVhbT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JpdHN0cmVhbTogSDI2NEJpdHN0cmVhbTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFyc2VyOiBBbm5leEJCeXRlU3RyZWFtUGFyc2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICBjb25zdHJ1Y3RvcihldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXIsIGJpdHN0cmVhbTogSDI2NEJpdHN0cmVhbSwgcGFyc2VyOiBBbm5leEJCeXRlU3RyZWFtUGFyc2VyKSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIgPSBldmVudFB1Ymxpc2hlcjtcbiAgICB0aGlzLl9iaXRzdHJlYW0gPSBiaXRzdHJlYW07XG4gICAgdGhpcy5fcGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9iaXRzdHJlYW0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9wYXJzZXIpO1xuICB9XG5cbiAgZ2V0IGJpdHN0cmVhbSgpOiBIMjY0Qml0c3RyZWFtIHtcbiAgICByZXR1cm4gdGhpcy5fYml0c3RyZWFtO1xuICB9XG5cbiAgcHVibGljIGRlY29kZShlbmNvZGVkTWVkaWFTdHJlYW1DaHVuazogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFVpbnQ4QXJyYXk+KTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxVaW50OEFycmF5PihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5FbmNvZGVkVmlkZW9TdHJlYW1DaHVuaywgZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bmspO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50IGZyb20gJy4uLy4uL2V2ZW50L0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgSDI2NEJpdHN0cmVhbSBmcm9tICcuLi9jb2RlYy9oMjY0L0gyNjRCaXRzdHJlYW0nO1xuaW1wb3J0IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMgZnJvbSAnLi4vZW5jb2RpbmcvMjAyMy9QaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzJztcbmltcG9ydCBJc29CbWZmU2VnbWVudCBmcm9tICcuLi9jb250YWluZXIvaXNvYm1mZi9zZWdtZW50L0lzb0JtZmZTZWdtZW50JztcbmltcG9ydCBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4vSDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlcic7XG5pbXBvcnQgSUJpdHN0cmVhbURlY29kZXIgZnJvbSAnLi9JQml0c3RyZWFtRGVjb2Rlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyIGltcGxlbWVudHMgSUJpdHN0cmVhbURlY29kZXI8SDI2NEJpdHN0cmVhbT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9oMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyOiBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbmNvZGluZzogUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMztcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKGgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXI6IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIsIGVuY29kaW5nOiBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzKSB7XG4gICAgdGhpcy5faDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciA9IGgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXI7XG4gICAgdGhpcy5fZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICB0aGlzLl9kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9oMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fZW5jb2RpbmcpO1xuICB9XG5cbiAgZ2V0IGJpdHN0cmVhbSgpOiBIMjY0Qml0c3RyZWFtIHtcbiAgICByZXR1cm4gdGhpcy5faDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlci5iaXRzdHJlYW07XG4gIH1cblxuICBwdWJsaWMgZGVjb2RlKGVuY29kZWRNZWRpYVN0cmVhbUNodW5rOiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8VWludDhBcnJheT4pOiB2b2lkIHtcbiAgICB0aGlzLl9oMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyLmRlY29kZShlbmNvZGVkTWVkaWFTdHJlYW1DaHVuayk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9FbWJlZGRlZERhdGEob25EZWNvZGVkTWVkaWFDaHVuazogKGVtYmVkZGVkRGF0YUV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8SXNvQm1mZlNlZ21lbnQ+KSA9PiB2b2lkLCB0cmFja0lkPzogc3RyaW5nKTogRGlzcG9zYWJsZSB7XG4gICAgaWYgKHRyYWNrSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbmNvZGluZy5zdWJzY3JpYmVUb0VtYmVkZGVkRGF0YShkZWNvZGVkTWVkaWFDaHVua0V2ZW50ID0+IHtcbiAgICAgICAgaWYgKGRlY29kZWRNZWRpYUNodW5rRXZlbnQudHJhY2tJZCA9PT0gdHJhY2tJZCkge1xuICAgICAgICAgIG9uRGVjb2RlZE1lZGlhQ2h1bmsoZGVjb2RlZE1lZGlhQ2h1bmtFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9lbmNvZGluZy5zdWJzY3JpYmVUb0VtYmVkZGVkRGF0YShvbkRlY29kZWRNZWRpYUNodW5rKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vLi4vLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTmFsVW5pdFR5cGUgZnJvbSAnLi4vLi4vY29kZWMvaDI2NC9uYWxVbml0L05hbFVuaXRUeXBlJztcbmltcG9ydCBOYWxVbml0IGZyb20gJy4uLy4uL2NvZGVjL2gyNjQvbmFsVW5pdC9OYWxVbml0JztcbmltcG9ydCBJc29CbWZmU2VnbWVudCBmcm9tICcuLi8uLi9jb250YWluZXIvaXNvYm1mZi9zZWdtZW50L0lzb0JtZmZTZWdtZW50JztcbmltcG9ydCBFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQgZnJvbSAnLi4vLi4vRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkJztcbmltcG9ydCBFdmVudFB1Ymxpc2hlciBmcm9tICcuLi8uLi8uLi9ldmVudC9FdmVudFB1Ymxpc2hlcic7XG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0fSBmcm9tICcuLi8uLi8uLi9ldmVudC9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvZXZlbnRzL0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcblxuY29uc3Qgbm9vcCA9ICgpOiB2b2lkID0+IHVuZGVmaW5lZDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90cnVuY2F0ZWRWY2xOYWxVbml0RGF0YUJ5dGVMZW5ndGggPSAzMjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BoZW5peFZjbEVtYmVkZGVkRGF0YVV1aWQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BoZW5peEluaXRpYWxpemF0aW9uU2VnbWVudFV1aWQgPSAnNTExZTIyYmQtMzRjMC00Y2VlLWI2YzMtM2M0ZDQwNzYyMmM3JztcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBlY3RlZFBheWxvYWRVdWlkOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5kT2ZDaHVua0hhbmRsZXJzQnlUcmFja0lkOiBNYXA8c3RyaW5nLCAodHJhY2tJZDogc3RyaW5nKSA9PiB2b2lkPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuYWJsZVdhcm5pbmdMb2dXaGVuVmNsRW1iZWRkZWREYXRhTm90Rm91bmQ6IERpc3Bvc2FibGUgPSBuZXcgRGlzcG9zYWJsZSh0aGlzLmVuYWJsZVdhcm5pbmdMb2dXaGVuVmNsRW1iZWRkZWREYXRhTm90Rm91bmQuYmluZCh0aGlzKSk7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyKSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIgPSBldmVudFB1Ymxpc2hlcjtcbiAgICB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmFkZChQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl9waGVuaXhWY2xFbWJlZGRlZERhdGFVdWlkKTtcbiAgICB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmFkZChQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl9waGVuaXhJbml0aWFsaXphdGlvblNlZ21lbnRVdWlkKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb1BheWxvYWRFdmVudHMoKSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9QYXlsb2FkU3Vic2NyaXB0aW9uRXZlbnRzKCkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLnN1YnNjcmliZVRvTmFsVW5pdEV2ZW50cygpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb0VtYmVkZGVkRGF0YShoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxJc29CbWZmU2VnbWVudD4pID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9lbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kLmRpc3Bvc2UoKTtcblxuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8RW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5QYXlsb2FkLCAoe2NvbnRleHQsIGRhdGE6IHBheWxvYWR9KSA9PiB7XG4gICAgICBzd2l0Y2ggKHBheWxvYWQudXVpZCkge1xuICAgICAgICBjYXNlIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3BoZW5peEluaXRpYWxpemF0aW9uU2VnbWVudFV1aWQ6XG4gICAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICB0eXBlOiAnSW5pdGlhbGl6YXRpb24nLFxuICAgICAgICAgICAgICBkYXRhOiBwYXlsb2FkLmRhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4VmNsRW1iZWRkZWREYXRhVXVpZDpcbiAgICAgICAgICBoYW5kbGVyKHtcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdNZWRpYScsXG4gICAgICAgICAgICAgIGRhdGE6IHBheWxvYWQuZGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQuY2xlYXIoKTtcbiAgICB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVdhcm5pbmdMb2dXaGVuVmNsRW1iZWRkZWREYXRhTm90Rm91bmQoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9FbmNvZGVkVmlkZW9TdHJlYW1DaHVua0V2ZW50cygpKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb0VuZE9mQ2h1bmtFdmVudHMoKSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvUGF5bG9hZFN1YnNjcmlwdGlvbkV2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPHN0cmluZz4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZFN1YnNjcmlwdGlvbiwgKHtkYXRhOiBwYXlsb2FkVXVpZH0pID0+IHRoaXMuX2V4cGVjdGVkUGF5bG9hZFV1aWQuYWRkKHBheWxvYWRVdWlkKSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmtFdmVudHMoKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxVaW50OEFycmF5PihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5FbmNvZGVkVmlkZW9TdHJlYW1DaHVuaywgdGhpcy5hcm1Mb2dnaW5nTm9WY2xFbWJlZGRlZERhdGFGb3VuZC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9OYWxVbml0RXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8TmFsVW5pdD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuTmFsVW5pdCwgdGhpcy5oYW5kbGVOYWxVbml0RXZlbnQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5hbFVuaXRFdmVudCh7Y29udGV4dCwgZGF0YTogbmFsVW5pdH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxOYWxVbml0Pik6IHZvaWQge1xuICAgIGlmIChuYWxVbml0LnR5cGUgPiBOYWxVbml0VHlwZS5TbGljZUxheWVySWRyRGF0YSB8fCBuYWxVbml0LmRhdGEuYnl0ZUxlbmd0aCA8IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3RydW5jYXRlZFZjbE5hbFVuaXREYXRhQnl0ZUxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHVibGlzaFZjbEVtYmVkZGVkUGF5bG9hZChjb250ZXh0LCB7XG4gICAgICB1dWlkOiBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl9waGVuaXhWY2xFbWJlZGRlZERhdGFVdWlkLFxuICAgICAgZGF0YTogdGhpcy5leHRyYWN0VmNsRW1iZWRkZWREYXRhKG5hbFVuaXQpXG4gICAgfSk7XG4gICAgdGhpcy5kaXNhcm1Mb2dnaW5nTm9WY2xFbWJlZGRlZERhdGFGb3VuZChjb250ZXh0LnRyYWNrSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0VmNsRW1iZWRkZWREYXRhKG5hbFVuaXQ6IE5hbFVuaXQpOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gbmFsVW5pdC5kYXRhLnN1YmFycmF5KFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3RydW5jYXRlZFZjbE5hbFVuaXREYXRhQnl0ZUxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIHB1Ymxpc2hWY2xFbWJlZGRlZFBheWxvYWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBwYXlsb2FkOiBFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IHBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXJtTG9nZ2luZ05vVmNsRW1iZWRkZWREYXRhRm91bmQoe2NvbnRleHR9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8VWludDhBcnJheT4pOiB2b2lkIHtcbiAgICB0aGlzLl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQuc2V0KGNvbnRleHQudHJhY2tJZCwgdGhpcy5sb2dXYXJuaW5nVmNsRW1iZWRkZWREYXRhTm90Rm91bmQuYmluZCh0aGlzLCBjb250ZXh0KSk7XG4gIH1cblxuICBwcml2YXRlIGRpc2FybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kKHRyYWNrSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2VuZE9mQ2h1bmtIYW5kbGVyc0J5VHJhY2tJZC5zZXQodHJhY2tJZCwgbm9vcCk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1dhcm5pbmdWY2xFbWJlZGRlZERhdGFOb3RGb3VuZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBbJXNdIE5vIFZDTCBlbWJlZGRlZCBkYXRhIGZvdW5kIGluIGFuIGVuY29kZWQgdmlkZW8gc3RyZWFtIGNodW5rIGZyb20gdHJhY2sgd2l0aCBpZCBbJXNdJywgY29udGV4dC5zdHJlYW1JZCwgY29udGV4dC5jb250ZXh0SWQsIGNvbnRleHQudHJhY2tJZCk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvRW5kT2ZDaHVua0V2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPG51bGw+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LkVuZE9mQ2h1bmssIHRoaXMuaGFuZGxlRW5kT2ZFbmNvZGVkVmlkZW9TdHJlYW1DaHVuay5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRW5kT2ZFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayh7Y29udGV4dH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxudWxsPik6IHZvaWQge1xuICAgIGNvbnN0IGVuZE9mQ2h1bmtFdmVudEhhbmRsZXIgPSB0aGlzLl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQuZ2V0KGNvbnRleHQudHJhY2tJZCkgYXMgKCkgPT4gdm9pZDtcblxuICAgIGVuZE9mQ2h1bmtFdmVudEhhbmRsZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9QYXlsb2FkRXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8RW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5QYXlsb2FkLCB0aGlzLmhhbmRsZVBheWxvYWRFdmVudC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUGF5bG9hZEV2ZW50KHtjb250ZXh0LCBkYXRhOiBwYXlsb2FkfTogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4pIHtcbiAgICBpZiAoIXRoaXMuX2V4cGVjdGVkUGF5bG9hZFV1aWQuaGFzKHBheWxvYWQudXVpZCkpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KHRoaXMubG9nV2FybmluZ1VuZXhwZWN0ZWRQYXlsb2FkVXVpZFJlY2VpdmVkT25jZS5iaW5kKHRoaXMsIGNvbnRleHQsIHBheWxvYWQudXVpZCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9nV2FybmluZ1VuZXhwZWN0ZWRQYXlsb2FkVXVpZFJlY2VpdmVkT25jZShjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHBheWxvYWRVdWlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBbJXNdIFslc10gUmVjZWl2ZWQgdW5leHBlY3RlZCBwYXlsb2FkIHdpdGggdXVpZCBbJXNdJywgY29udGV4dC5zdHJlYW1JZCwgY29udGV4dC5jb250ZXh0SWQsIGNvbnRleHQudHJhY2tJZCwgcGF5bG9hZFV1aWQpO1xuICAgIHRoaXMuX2V4cGVjdGVkUGF5bG9hZFV1aWQuYWRkKHBheWxvYWRVdWlkKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhfSBmcm9tICcuL0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudEVtaXR0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IFNldDwoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KSA9PiB2b2lkPiA9IG5ldyBTZXQoKTtcblxuICBwdWJsaWMgc3Vic2NyaWJlPEV2ZW50RGF0YSBleHRlbmRzIEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YT4obGlzdGVuZXI6IChldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuYWRkKGxpc3RlbmVyIGFzIDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RXZlbnREYXRhPikgPT4gdm9pZCk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGUoKCkgPT4gdGhpcy5fbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lciBhcyA8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0PEV2ZW50RGF0YSBleHRlbmRzIEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YT4oZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuY2xlYXIoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhfSBmcm9tICcuL0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuL0V2ZW50RW1pdHRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50UHVibGlzaGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRFbWl0dGVyczogTWFwPHN0cmluZyB8IG51bWJlciwgRXZlbnRFbWl0dGVyPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVyczogU2V0PDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQ+ID0gbmV3IFNldCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICBwdWJsaWMgb25FdmVudFdpdGhOb1N1YnNjcmliZXIob25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVyOiAoZXZlbnRUeXBlOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQpID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzLmFkZChvbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXIpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlKCgpID0+IHRoaXMuX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnMuZGVsZXRlKG9uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcikpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZTxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgY29uc3QgZW1pdHRlciA9IHRoaXMuX2V2ZW50RW1pdHRlcnMuZ2V0KGV2ZW50VHlwZSkgfHwgdGhpcy5jcmVhdGVFbWl0dGVyKGV2ZW50VHlwZSk7XG4gICAgY29uc3QgZGlzcG9zYWJsZUxpc3RlbmVyID0gZW1pdHRlci5zdWJzY3JpYmUoaGFuZGxlcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZUxpc3RlbmVyKTtcblxuICAgIHJldHVybiBkaXNwb3NhYmxlTGlzdGVuZXI7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pOiB2b2lkIHtcbiAgICBjb25zdCBlbWl0dGVyID0gdGhpcy5fZXZlbnRFbWl0dGVycy5nZXQoZXZlbnRUeXBlKTtcblxuICAgIGlmICghZW1pdHRlcikge1xuICAgICAgdGhpcy5fb25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gaGFuZGxlcihldmVudFR5cGUsIGV2ZW50KSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbWl0dGVyLmVtaXQ8RXZlbnREYXRhPihldmVudCk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRFbWl0dGVycy5jbGVhcigpO1xuICAgIHRoaXMuX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnMuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW1pdHRlcihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlcik6IEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHRoaXMuX2V2ZW50RW1pdHRlcnMuc2V0KGV2ZW50VHlwZSwgZW1pdHRlcik7XG5cbiAgICByZXR1cm4gZW1pdHRlcjtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCB7XG4gIEVuY29kZWRWaWRlb1N0cmVhbUNodW5rID0gMCxcbiAgTmFsVW5pdCxcbiAgU2VpUGF5bG9hZCxcbiAgUGF5bG9hZCxcbiAgUGF5bG9hZFN1YnNjcmlwdGlvbixcbiAgRW5kT2ZDaHVua1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlTW9kZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVNb2RlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUpOiBCaXRyYXRlTW9kZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZU1vZGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuTm9ybWFsOlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLkZvcmNlOlxuICAgICAgICByZXR1cm4gJ0ZvcmNlJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZU1vZGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxFbmRQb2ludD4ocmVzb2x2ZUVuZFBvaW50UHJvbWlzZSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gR2xvYmFsU2NvcGUuc3Vic2NyaWJlKGdsb2JhbFNjb3BlID0+IHtcbiAgICAgICAgaWYgKCFnbG9iYWxTY29wZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVyaSA9IG5ldyBnbG9iYWxTY29wZS5VUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgICAgICAudGhlbihyZXNvbHZlRW5kUG9pbnRQcm9taXNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpOiBVUkwpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAodXJsIGluIERpc2NvdmVyeS5fY2FjaGUpIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG4gICAgY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9PT0gY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgICAgICB9XG4gICAgICB9LCBkaXNjb3ZlcnlDYWNoZUludGVydmFsKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaTogVVJMKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAodXJsIGluIERpc2NvdmVyeS5fY2FjaGUpIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IEVuZFBvaW50IGZyb20gJy4vRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuXG5jb25zdCBkZWZhdWx0VGltZW91dCA9IDIwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0Rpc2NvdmVyeScpO1xuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX3VyaTogVVJMO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogVVJMKSB7XG4gICAgaWYgKCF1cmkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHVyaScpO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UodXJpLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKHVyaTogVVJMLCB0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPEVuZFBvaW50W10+IHtcbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5IHJlcXVpcmVzIHRpbWVvdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgRGlzY292ZXJ5IHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGltZW91dCkpXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBsZXQgZmFpbGVkUmVxdWVzdHMgPSAwO1xuICAgIGNvbnN0IHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZFJlcXVlc3RzID49IGVuZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGBEaXNjb3Zlcnkgb2YgWyR7ZW5kUG9pbnRzLmxlbmd0aH1dIGVuZHBvaW50cyBmcm9tIFske3VybH1dIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmdgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICBmYWlsZWRSZXF1ZXN0cysrO1xuXG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgndmVyc2lvbicsIHNka1ZlcnNpb24pO1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdpbnRlbnRpb25zJywgaW50ZW50aW9ucyk7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ18nLCBgJHtEYXRlLm5vdygpfWApO1xuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gJy8nKSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeVVyaSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVN1Y2Nlc3NSZXNwb25zZSxcbiAgSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QsXG4gIElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0XG59IGZyb20gJy4uL2FwaS9TdWJzY3JpYmUnO1xuaW1wb3J0IHtJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0LCBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZX0gZnJvbSAnLi4vYXBpL1NldFJlbW90ZURlc2NyaXB0aW9uJztcbmltcG9ydCB7SURlc3Ryb3lTdHJlYW1SZXF1ZXN0LCBJRGVzdHJveVN0cmVhbVJlc3BvbnNlfSBmcm9tICcuLi9hcGkvRGVzdHJveVN0cmVhbSc7XG5pbXBvcnQge0lBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCwgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZX0gZnJvbSAnLi4vYXBpL0FkZEljZUNhbmRpZGF0ZXMnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGUsIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBCaXRyYXRlTW9kZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlTW9kZU1hcHBpbmcnO1xuaW1wb3J0IEJpdHJhdGVTdGF0ZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlU3RhdGVNYXBwaW5nJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7XG4gIElQdWJsaXNoU3VjY2Vzc1Jlc3BvbnNlLFxuICBJUHVibGlzaFdpdGhPZmZlclJlcXVlc3QsXG4gIElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCxcbiAgUHVibGlzaFN0YXR1c1xufSBmcm9tICcuLi9hcGkvUHVibGlzaCc7XG5cbmNvbnN0IGFwaVZlcnNpb24gPSA3O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVTdGF0dXMgPSAnb2snIHwgJ25vLXN0cmVhbScgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ2dlby1yZXN0cmljdGVkJyB8ICdnZW8tYmxvY2tlZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZm9yYmlkZGVuLXRhZycgfCAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlU3VjY2Vzc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogJ29rJztcbiAgc3RyZWFtOiBJU3RyZWFtO1xuICBsYWc6IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVGYWlsdXJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiAnbm8tc3RyZWFtJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAnZ2VvLXJlc3RyaWN0ZWQnIHwgJ2dlby1ibG9ja2VkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmb3JiaWRkZW4tdGFnJyB8ICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCcgfCAnZmFpbGVkJztcbn1cblxuZXhwb3J0IHR5cGUgSVB1Ymxpc2hTdWNjZXNzUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6ICdvayc7XG4gIHN0cmVhbTogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBJUHVibGlzaEZhaWx1cmVSZXNwb25zZUluaXQgPSB7XG4gIHN0YXR1czogJ25vdC1mb3VuZCcgfCAnZ2VvLXJlc3RyaWN0ZWQnIHwgJ2dlby1ibG9ja2VkJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZvcmJpZGRlbi10YWcnIHwgJ21pc3NpbmctY2hhbm5lbC1vci1yb29tLWlkJyB8ICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCcgfCAnZmFpbGVkJztcbn07XG5cbmludGVyZmFjZSBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzO1xuICBzZXNzaW9uRGVzY3JpcHRpb24/OiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5pbnRlcmZhY2UgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXM7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kUG9pbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRW5kUG9pbnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcm91bmRUcmlwVGltZTogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQgfCBudWxsLCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVN1Y2Nlc3NSZXNwb25zZUluaXQgfCBJU3Vic2NyaWJlRmFpbHVyZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU3Vic2NyaWJlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzdWJzY3JpYmUgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgcHVibGlzaChuYW1lOiBzdHJpbmcsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCB8IG51bGwsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJUHVibGlzaFN1Y2Nlc3NSZXNwb25zZUluaXQgfCBJUHVibGlzaEZhaWx1cmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtPy5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUudmFsdWUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtT25Vbm1vdW50KHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvcj8uc2VuZEJlYWNvbikge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKHVybCwgZm9ybURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IEdsb2JhbFNjb3BlLnZhbHVlLlVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5VUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgndHlwZScsICdodHRwJyk7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ3ZlcnNpb24nLCBzZGtWZXJzaW9uKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgnaW50ZW50aW9ucycsIGludGVudGlvbnMpO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCdfJywgYCR7RGF0ZS5ub3coKX1gKTtcblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBQdWJsaXNoU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwNjpcbiAgICAgICAgcmV0dXJuICdtaXNzaW5nLWNoYW5uZWwtb3Itcm9vbS1pZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4gJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJztcbiAgICAgIGNhc2UgNDE1OlxuICAgICAgICByZXR1cm4gJ2ZvcmJpZGRlbi10YWcnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA0MDk6XG4gICAgICAgIHJldHVybiAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnO1xuICAgICAgY2FzZSA0MTU6XG4gICAgICAgIHJldHVybiAnZm9yYmlkZGVuLXRhZyc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVTdWNjZXNzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlU3VjY2Vzc1Jlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlU3VjY2Vzc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBzdHJlYW06IHtcbiAgICAgICAgdGVuYW5jeSxcbiAgICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICAgIH0sXG4gICAgICBsYWc6IGRhdGEubGFnXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElQdWJsaXNoU3VjY2Vzc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVB1Ymxpc2hTdWNjZXNzUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFN1Y2Nlc3NSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgc3RyZWFtOiB7XG4gICAgICAgIHRlbmFuY3ksXG4gICAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCc7XG5pbXBvcnQgU2VpUGF5bG9hZCBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvbmFsVW5pdC9TZWlQYXlsb2FkJztcbmltcG9ydCBTZWlQYXlsb2FkVHlwZSBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvbmFsVW5pdC9TZWlQYXlsb2FkVHlwZSc7XG5pbXBvcnQgUGljdHVyZVRpbWluZ1BhcnNlciwge1BpY3R1cmVUaW1pbmdQYXJzaW5nQ29uZmlnfSBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvUGljdHVyZVRpbWluZ1BhcnNlcic7XG5pbXBvcnQgQml0c3RyZWFtRGVjb2RlcnMgZnJvbSAnLi4vZGVjb2RlL2JpdHN0cmVhbS9kZWNvZGVycy9CaXRzdHJlYW1EZWNvZGVycyc7XG5pbXBvcnQgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2RlY29kZXJzL0gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCBmcm9tICcuLi9kZWNvZGUvZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb259IGZyb20gJy4vRnJhbWVUaW1pbmdJbmZvcm1hdGlvbic7XG5cbnR5cGUgRnJhbWVUaW1pbmcgPSB7XG4gIG1pZDogc3RyaW5nO1xuICB0cmFja0lkOiBzdHJpbmc7XG4gIHJlY2VpdmVUaW1lc3RhbXA6IERhdGU7XG4gIGRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uPzogRGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb247XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9GUkFNRV9USU1JTkdfRU5UUklFUyA9IDYwICogMzA7IC8vIDMwcyAqIDYwZnBzID0gMTgwMCBlbnRyaWVzXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JpdHN0cmVhbURlY29kZXI6IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgPSBCaXRzdHJlYW1EZWNvZGVycy5jcmVhdGVIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wOiBNYXA8c3RyaW5nLCBGcmFtZVRpbWluZz4gPSBuZXcgTWFwKCk7XG4gIC8vIFdvcmtzIHdpdGggbXVsdGktYml0cmF0ZSBzdHJlYW1zIGFzIHdlIGFyZSBpbiBjb250cm9sIG9mIGhvdyB3ZSBnZW5lcmF0ZSB0aGUgcGljdHVyZSB0aW1pbmcgU0VJIHBheWxvYWRzXG4gIC8vIE1pZ2h0IG5vdCBhbHdheXMgd29yayB3aXRoIHNpbmdsZS1iaXRyYXRlIHN0cmVhbXMgd2hlbiB0aGUgY3BiRHBiRGVsYXlzUHJlc2VudEZsYWcgaXMgdHJ1ZVxuICAvLyBUT0RPIChOSCk6IE1vbml0b3IgU1BTIHRvIGR5bmFtaWNhbGx5IHNldCB0aGVzZSBmbGFnc1xuICBwcml2YXRlIHJlYWRvbmx5IF9waWN0dXJpbmdUaW1pbmdQYXJzaW5nQ29uZmlnOiBQaWN0dXJlVGltaW5nUGFyc2luZ0NvbmZpZyA9IHtcbiAgICBjcGJEcGJEZWxheXNQcmVzZW50RmxhZzogZmFsc2UsXG4gICAgcGljU3RydWN0UHJlc2VudEZsYWc6IHRydWVcbiAgfTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGljdHVyZVRpbWluZ1BhcnNlcjogUGljdHVyZVRpbWluZ1BhcnNlciA9IG5ldyBQaWN0dXJlVGltaW5nUGFyc2VyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9jdXJyZW50UGxheWJhY2tTdGF0ZTogJ3BsYXlpbmcnIHwgJ3BhdXNlZCcgfCAnc3RhbGxlZCcgfCAnZW5kZWQnIHwgJ2Vycm9yJyB8ICd3YWl0aW5nJyA9ICd3YWl0aW5nJztcbiAgcHJpdmF0ZSBfYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQsIGZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCkge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgPSBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9iaXRzdHJlYW1EZWNvZGVyKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuY2xlYXIoKSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcyk7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLnNldHVwVmlkZW9FdmVudExpc3RlbmVycyh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQuc3Vic2NyaWJlKHZpZGVvRWxlbWVudCA9PiB7XG4gICAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZXR1cFZpZGVvRXZlbnRMaXN0ZW5lcnModmlkZW9FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICBpZiAodGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlKSB7XG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYml0c3RyZWFtRGVjb2Rlci5iaXRzdHJlYW0uc3Vic2NyaWJlVG9TZWlQYXlsb2FkVHlwZShTZWlQYXlsb2FkVHlwZS5QaWN0dXJlVGltaW5nLCB0aGlzLm9uUGljdHVyZVRpbWluZ0V4dHJhY3RlZC5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByb2Nlc3NGcmFtZShzdHJlYW1JZDogc3RyaW5nLCBtaWQ6IHN0cmluZywgdHJhY2tJZDogc3RyaW5nLCBmcmFtZTogUlRDRW5jb2RlZFZpZGVvRnJhbWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmcmFtZVRpbWluZyA9IHtcbiAgICAgIG1pZCxcbiAgICAgIHRyYWNrSWQsXG4gICAgICByZWNlaXZlVGltZXN0YW1wOiBuZXcgRGF0ZSgpXG4gICAgfTtcblxuICAgIHRoaXMucmVtb3ZlRnJhbWVUaW1pbmdzRXhjZWVkaW5nTWF4Q2FwYWNpdHkoKTtcblxuICAgIGNvbnN0IHJ0cFRpbWVzdGFtcCA9IGZyYW1lLnRpbWVzdGFtcC50b1N0cmluZygxMCk7XG5cbiAgICBpZiAodGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuaGFzKHJ0cFRpbWVzdGFtcCkpIHtcbiAgICAgIC8vIFRPRE8gKE5IKTogQWRkIGEgdGhyb3R0bGVkIGxvZyBpbmRpY2F0aW5nIHRoYXQgYSBmcmFtZSB0aW1pbmcgd2FzIG92ZXJ3cml0dGVuXG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuc2V0KHJ0cFRpbWVzdGFtcCwgZnJhbWVUaW1pbmcpO1xuXG4gICAgLy8gVE9ETyAoTkgpOiBUaGF0IHNob3VsZCBiZSBkb25lIHdpdGhpbiBhIFdvcmtlclxuICAgIC8vIE5vdCBwb3NzaWJsZSB5ZXQgYmVjYXVzZSBpdCB3b24ndCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHNpbmsgYW5kIHRyYW5zZm9ybSBwaXBlbGluZSAod2UgY2Fubm90IGR5bmFtaWNhbGx5IGluamVjdCBjb2RlIGluIGEgd29ya2VyKVxuICAgIC8vIFdlIG5lZWQgdG8gcmVmaW5lIHRoZSBhcmNoaXRlY3R1cmUgdG8gbWFrZSBpdCBwb3NzaWJsZVxuICAgIHRoaXMuX2JpdHN0cmVhbURlY29kZXIuZGVjb2RlKHtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgIHRyYWNrSWQsXG4gICAgICAgIGNvbnRleHRJZDogcnRwVGltZXN0YW1wXG4gICAgICB9LFxuICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkoZnJhbWUuZGF0YSlcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIG9uUGljdHVyZVRpbWluZ0V4dHJhY3RlZCh7Y29udGV4dDoge2NvbnRleHRJZDogcnRwVGltZXN0YW1wLCB0cmFja0lkfSwgZGF0YTogc2VpUGF5bG9hZH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxTZWlQYXlsb2FkPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBpY3R1cmVUaW1pbmcgPSB0aGlzLl9waWN0dXJlVGltaW5nUGFyc2VyLnBhcnNlKHNlaVBheWxvYWQuZGF0YSwgdGhpcy5fcGljdHVyaW5nVGltaW5nUGFyc2luZ0NvbmZpZyk7XG4gICAgY29uc3QgY2xvY2tUaW1lc3RhbXAgPSBwaWN0dXJlVGltaW5nLnBpY1N0cnVjdD8uY2xvY2tUaW1lc3RhbXBzLmZpbmQoaSA9PiBpLmNsb2NrVGltZXN0YW1wRmxhZyA9PT0gdHJ1ZSk/LmNsb2NrVGltZXN0YW1wO1xuXG4gICAgaWYgKCFjbG9ja1RpbWVzdGFtcCkge1xuICAgICAgLy8gVE9ETyAoTkgpOiBBZGQgYSB0aHJvdHRsZWQgbG9nIGluZGljYXRpbmcgdGhhdCBubyBjbG9jayB0aW1lc3RhbXAgd2FzIGZvdW5kXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmcmFtZVRpbWluZyA9IHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmdldChydHBUaW1lc3RhbXApO1xuXG4gICAgaWYgKCFmcmFtZVRpbWluZykge1xuICAgICAgLy8gVE9ETyAoTkgpOiBBZGQgYSB0aHJvdHRsZWQgbG9nIGluZGljYXRpbmcgdGhhdCBubyBmcmFtZSB0aW1pbmcgd2FzIGZvdW5kXG4gICAgICAvLyBFeHBlY3RlZCBpZiB0aGUgY2lyY3VsYXIgZnJhbWUgdGltaW5ncyBidWZmZXIgaXMgZnVsbCBhbmQgYSBmcmFtZSBoYXMgYmVlbiBkcm9wcGVkXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogRGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSB7XG4gICAgICBtaWQ6IGZyYW1lVGltaW5nLm1pZCxcbiAgICAgIHRyYWNrSWQsXG4gICAgICBraW5kOiAndmlkZW8nLFxuICAgICAgY29kZWM6ICdIMjY0JyxcbiAgICAgIHRpbWVjb2RlOiB7XG4gICAgICAgIGhvdXJzOiBjbG9ja1RpbWVzdGFtcC5ob3VycyA/PyBudWxsLFxuICAgICAgICBtaW51dGVzOiBjbG9ja1RpbWVzdGFtcC5taW51dGVzID8/IG51bGwsXG4gICAgICAgIHNlY29uZHM6IGNsb2NrVGltZXN0YW1wLnNlY29uZHMgPz8gbnVsbCxcbiAgICAgICAgZnJhbWVzOiBjbG9ja1RpbWVzdGFtcC5uRnJhbWVzLFxuICAgICAgICBpc0ZyYW1lRHJvcDogY2xvY2tUaW1lc3RhbXAuY291bnRpbmdUeXBlID4gMVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVRpbWVzdGFtcDogbnVsbCxcbiAgICAgIGluZ2VzdFRpbWVzdGFtcDogbnVsbCxcbiAgICAgIGVuY29kZVRpbWVzdGFtcDogbnVsbCxcbiAgICAgIHRyYW5zY29kZVRpbWVzdGFtcDogbnVsbCxcbiAgICAgIHJlY2VpdmVUaW1lc3RhbXA6IG5ldyBEYXRlKGZyYW1lVGltaW5nLnJlY2VpdmVUaW1lc3RhbXApLFxuICAgICAgcGxheWJhY2tTdGF0ZTogdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGVcbiAgICB9O1xuXG4gICAgZnJhbWVUaW1pbmcuZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjtcblxuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uLnZhbHVlID0gZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb247XG4gIH1cblxuICBwcml2YXRlIHZpZGVvRnJhbWVDYWxsYmFjayhub3c6IERPTUhpZ2hSZXNUaW1lU3RhbXAsIG1ldGFkYXRhOiBWaWRlb0ZyYW1lQ2FsbGJhY2tNZXRhZGF0YSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlLXJlZ2lzdGVyIHRoZSBjYWxsYmFjayB0byBlbnN1cmUgaXQncyBjYWxsZWQgYWdhaW5cbiAgICB0aGlzLmFybVZpZGVvRnJhbWVDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgcnRwVGltZXN0YW1wID0gbWV0YWRhdGEucnRwVGltZXN0YW1wO1xuXG4gICAgaWYgKCFydHBUaW1lc3RhbXApIHtcbiAgICAgIC8vIFRPRE8gKE5IKTogQWRkIGEgdGhyb3R0bGVkIGxvZyBpbmRpY2F0aW5nIHRoYXQgbm8gUlRQIHRpbWVzdGFtcCB3YXMgZm91bmRcbiAgICAgIC8vIFRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBpdCdzIG51bGxhYmxlLCBidXQgd2UgYWx3YXlzIGhhdmUgaXQgaW4gYSBXZWJSVEMgY29udGV4dFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZXN0YW1wc1RvRGVsZXRlOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbdGltZXN0YW1wLCBmcmFtZVRpbWluZ10gb2YgdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXApIHtcbiAgICAgIGlmIChwYXJzZUludCh0aW1lc3RhbXAsIDEwKSA+IHJ0cFRpbWVzdGFtcCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQucmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uLnZhbHVlID0ge1xuICAgICAgICAgIC4uLmZyYW1lVGltaW5nLmRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uISxcbiAgICAgICAgICByZW5kZXJUaW1lc3RhbXA6IG5ldyBEYXRlKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBub3cpLFxuICAgICAgICAgIHBsYXliYWNrU3RhdGU6ICdwbGF5aW5nJ1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aW1lc3RhbXBzVG9EZWxldGUucHVzaCh0aW1lc3RhbXApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGltZXN0YW1wIG9mIHRpbWVzdGFtcHNUb0RlbGV0ZSkge1xuICAgICAgdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuZGVsZXRlKHRpbWVzdGFtcCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVGcmFtZVRpbWluZ3NFeGNlZWRpbmdNYXhDYXBhY2l0eSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50c1RvRGVsZXRlID0gdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuc2l6ZSAtIChIMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIuTUFYX0ZSQU1FX1RJTUlOR19FTlRSSUVTIC0gMSk7XG5cbiAgICBpZiAoZWxlbWVudHNUb0RlbGV0ZSA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5rZXlzKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzVG9EZWxldGU7IGkrKykge1xuICAgICAgY29uc3Qga2V5VG9EZWxldGUgPSBpdGVyYXRvci5uZXh0KCkudmFsdWU7XG5cbiAgICAgIHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmRlbGV0ZShrZXlUb0RlbGV0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFZpZGVvRXZlbnRMaXN0ZW5lcnModmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgb25QbGF5aW5nID0gKCkgPT4gdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGUgPSAncGxheWluZyc7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIG9uUGxheWluZyk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHZpZGVvRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgb25QbGF5aW5nKSkpO1xuXG4gICAgY29uc3Qgb25QYXVzZSA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ3BhdXNlZCc7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCBvblBhdXNlKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgb25QYXVzZSkpKTtcblxuICAgIGNvbnN0IG9uU3RhbGxlZCA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ3N0YWxsZWQnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCBvblN0YWxsZWQpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB2aWRlb0VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIG9uU3RhbGxlZCkpKTtcblxuICAgIGNvbnN0IG9uV2FpdGluZyA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ3dhaXRpbmcnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dhaXRpbmcnLCBvbldhaXRpbmcpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB2aWRlb0VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2FpdGluZycsIG9uV2FpdGluZykpKTtcblxuICAgIGNvbnN0IG9uRW5kZWQgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICdlbmRlZCc7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBvbkVuZGVkKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgb25FbmRlZCkpKTtcblxuICAgIGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICdlcnJvcic7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcikpKTtcblxuICAgIHRoaXMuYXJtVmlkZW9GcmFtZUNhbGxiYWNrKCk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9hcm1lZFZpZGVvRnJhbWVDYWxsYmFja0lkKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZT8uY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrKHRoaXMuX2FybWVkVmlkZW9GcmFtZUNhbGxiYWNrSWQpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXJtVmlkZW9GcmFtZUNhbGxiYWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlPy5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKHRoaXMudmlkZW9GcmFtZUNhbGxiYWNrLmJpbmQodGhpcykpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtTdHJlYW1TZXR1cExpc3RlbmVyfSBmcm9tICcuLi8uLi9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lcic7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuLi8uLi9ydGMvU2RwUGFyc2VyJztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBSdGNDb25uZWN0aW9uTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IEVuZFBvaW50LCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCc7XG5pbXBvcnQgSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyIGZyb20gJy4uL2ZyYW1lVGltaW5nL0gyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlcic7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMnO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuXG5jb25zdCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCA9IDEwMDtcbmNvbnN0IGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQgPSAzMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVhbFRpbWVTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1JlYWxUaW1lU3RyZWFtJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gcGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQgPSBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0ID0gZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZywgbGlzdGVuT25TdHJlYW1TZXR1cDogU3RyZWFtU2V0dXBMaXN0ZW5lciwgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQ6IEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVxdWlyZXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZVxuICAgICAgfHwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlXG4gICAgICB8fCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3JlY3Zvbmx5JywgcmVxdWlyZXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpXG4gICAgICAgIC50aGVuKCh7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYWxPZmZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBsb2NhbE9mZmVyLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgY29uc3Qge3N0YXR1c30gPSByZXNwb25zZTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gdW5kZWZpbmVkIDtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgZmFpbGVkIHdpdGggc3RhdHVzIFslc10nLFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3N0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9ID0gcmVzcG9uc2U7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbiBhcyBSVENDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDogdW5kZWZpbmVkIHwgbnVtYmVyO1xuICAgICAgICAgICAgbGV0IGNhbmNlbERpc2NvdmVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRpc2NvdmVyeUNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10gPSBbXTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuc2VuZExvY2FsQ2FuZGlkYXRlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlLmNhbmRpZGF0ZSAmJiBlLmNhbmRpZGF0ZS5jYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goZS5jYW5kaWRhdGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIXN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQgPSBHbG9iYWxTY29wZS52YWx1ZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWU/LmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JJc09uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgYXMgbmV2ZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZTxNZWRpYVN0cmVhbT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50Lm9uVHJhY2tEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCkpKTtcblxuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9udHJhY2sgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgR2xvYmFsU2NvcGUudmFsdWUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZTogUlRDUGVlckNvbm5lY3Rpb25FdmVudE1hcFsndHJhY2snIHwgJ2FkZHN0cmVhbSddKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgICAgIEdsb2JhbFNjb3BlLnZhbHVlLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoJ3N0cmVhbXMnIGluIGUpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IEdsb2JhbFNjb3BlLnZhbHVlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignU3RyZWFtIHNldHVwIHRpbWVkIG91dCcpKTtcbiAgICAgICAgICAgICAgfSwgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCk7XG5cbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBHbG9iYWxTY29wZS52YWx1ZS5jbGVhclRpbWVvdXQodGltZW91dElkKSkpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgYXMgRW5kUG9pbnQ7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBlbmRQb2ludC5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uIGFzIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlcXVpcmVzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zICYmIHBlZXJDb25uZWN0aW9uPy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24/LnNkcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uID0gbmV3IFNkcFBhcnNlcihwZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlcnMgPSBwZWVyQ29ubmVjdGlvbi5nZXRSZWNlaXZlcnMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7ZGlzcG9zYWJsZXMsIGVuY29kZWRWaWRlb0ZyYW1lfSA9IEluc2VydGFibGVTdHJlYW1zLmNvbmZpZ3VyZUVuY29kZWRTdHJlYW1QaXBlbGluZShtZWRpYVN0cmVhbSwgcmVjZWl2ZXJzLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaywgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24udmlkZW9Db2RlYywgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24uYXVkaW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWlyZXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24udmlkZW9Db2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCdcbiAgICAgICAgICAgICAgICAgICYmICh0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWUgfHwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMudmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIgPSBuZXcgSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyKHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChmcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlcik7XG5cbiAgICAgICAgICAgICAgICAgIG1lZGlhU3RyZWFtLmdldFZpZGVvVHJhY2tzKClcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdGggYXJlIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQsIGJ1dCB0aGUgdHlwZSBzeXN0ZW0gbWFrZXMgdGhlbSBudWxsYWJsZSwgc28gd2UgaGF2ZSB0byBhc3NlcnQgdGhlIHByZXNlbmNlXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXIgPSByZWNlaXZlcnMuZmlsdGVyKHJlY2VpdmVyID0+IHJlY2VpdmVyLnRyYWNrID09PSB0cmFjaylbMF07XG4gICAgICAgICAgICAgICAgICAgICAgLy8gUGxhdGZvcm0gc3VwcG9ydGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gc2hvdWxkIGFsc28gc3VwcG9ydCBnZXRUcmFuc2NlaXZlcnNcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaWQgPSBwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldFRyYW5zY2VpdmVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBwZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKS5maWx0ZXIodHJhbnNjZWl2ZXIgPT4gdHJhbnNjZWl2ZXIucmVjZWl2ZXIgPT09IHJlY2VpdmVyKVswXT8ubWlkXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlY2VpdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBTa2lwcGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIHRyYWNrIFslc10gYmVjYXVzZSBubyByZWNlaXZlciB3YXMgZm91bmQnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgdHJhY2suaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFtaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIFNraXBwaW5nIGZyYW1lIHRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdHJhY2sgWyVzXSBiZWNhdXNlIG5vIG1pZCB3YXMgZm91bmQnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgdHJhY2suaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGVuY29kZWRWaWRlb0ZyYW1lLnN1YnNjcmliZShlbmNvZGVkVmlkZW9GcmFtZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5jb2RlZFZpZGVvRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIucHJvY2Vzc0ZyYW1lKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBtaWQsIGVuY29kZWRWaWRlb0ZyYW1lLnRyYWNrLmlkLCBlbmNvZGVkVmlkZW9GcmFtZS5jaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmlzRW5hYmxlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChkaXNwb3NhYmxlcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt0cmFuc2Zvcm1lZFN0cmVhbSwgZGlzcG9zYWJsZXN9ID0gSW5zZXJ0YWJsZVN0cmVhbXMuY29uZmlndXJlSW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybWF0aW9uKG1lZGlhU3RyZWFtLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZXMpO1xuICAgICAgICAgICAgICAgIG1lZGlhU3RyZWFtID0gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlPy5yb3VuZFRyaXBUaW1lID8gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDQgOiAwKTtcblxuICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yU3RhdGlzdGljU3Vic2NyaXB0aW9uID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghc3RhdGlzdGljcykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JJc09uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gQXVkaW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLmF1ZGlvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICB2aWRlb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWRlb1RyYWNrRmFpbGVkICYmIEdsb2JhbFNjb3BlLnZhbHVlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFHbG9iYWxTY29wZS52YWx1ZS5uYXZpZ2F0b3JJc09uTGluZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuT2ZmbGluZTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcblxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuT2ZmbGluZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA/IENoYW5uZWxTdGF0ZS5QbGF5aW5nIDogQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIHN0YXRlIHJlc3RvcmVkIHRvIFslc10gYWZ0ZXIgcmVjb25uZWN0aW5nJywgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCBSZWFsVGltZVN0cmVhbSBmcm9tICcuL1JlYWxUaW1lU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtaW5nJyk7XG5cbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0b2tlbkNhcGFiaWxpdGllcyA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLmNhcGFiaWxpdGllcztcblxuICAgIGlmICh0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnb24tZGVtYW5kJykpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVGhpcyBidWlsZCBkb2VzIG5vdCBzdXBwb3J0IE9uLURlbWFuZCBTdHJlYW0gcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RoaXMgYnVpbGQgZG9lcyBub3Qgc3VwcG9ydCBMaXZlIFN0cmVhbSBwbGF5YmFjay4nKTtcbiAgICAgIGNoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWFsVGltZVN0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgZXh0ZW5kcyBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCk6IGJvb2xlYW4gfCBQcm9taXNlTGlrZTxib29sZWFuPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5jb2RlZFN0cmVhbVNpbmsge1xuICBzdGF0aWMgdmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luazxUIGV4dGVuZHMgUlRDRW5jb2RlZEF1ZGlvRnJhbWUgfCBSVENFbmNvZGVkVmlkZW9GcmFtZT4obW9kZTogJ2F1ZGlvJyB8ICd2aWRlbycsIGl0ZW06IElFbmNvZGVkU3RyZWFtU2luazxUPikge1xuICAgIGlmICh0eXBlb2YgaXRlbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gdHlwZS4gRm91bmQgWyR7dHlwZW9mIGl0ZW19XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoICE9PSAyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gRW5jb2RlZCBTdHJlYW0gU2luayBmdW5jdGlvbiBwYXJhbWV0ZXIgbGVuZ3RoLiBFeHBlY3RlZCAyLiBGb3VuZCBbJHtpdGVtLmxlbmd0aH1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiAnb2snXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RlZFN0cmVhbVNpbmsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCB7U3Vycm9nYXRlRnJhbWVUeXBlLCBTa2lwRnJhbWV9IGZyb20gJy4vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcic7XG5pbXBvcnQgV29ya2VyVHJhbnNmb3JtU3RyZWFtLCB7Rm9yY2VJbnZhbGlkRnJhbWVQb3N0TWVzc2FnZX0gZnJvbSAnLi9UcmFuc2Zvcm1TdHJlYW0ud29ya2VyJztcblxudHlwZSBNZWRpYVN0cmVhbVRyYWNrS2luZCA9ICd2aWRlbycgfCAnYXVkaW8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSVENFbmNvZGVkRnJhbWU8VCBleHRlbmRzIFJUQ0VuY29kZWRWaWRlb0ZyYW1lIHwgUlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHtcbiAgdHJhY2s6IE1lZGlhU3RyZWFtVHJhY2s7XG4gIGNodW5rOiBUO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIHN0YXRpYyBjb25maWd1cmVFbmNvZGVkU3RyZWFtUGlwZWxpbmUoXG4gICAgc3RyZWFtOiBNZWRpYVN0cmVhbSxcbiAgICByZWNlaXZlcnM6IFJUQ1J0cFJlY2VpdmVyW10sXG4gICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZCwgLy8gQ2FuIGJlIHVuZGVmaW5lZCB3aGVuIHRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5IGEgc2lua1xuICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQsIC8vIENhbiBiZSB1bmRlZmluZWQgd2hlbiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhIHNpbmtcbiAgICB2aWRlb0NvZGVjOiBzdHJpbmcsXG4gICAgYXVkaW9Db2RlYzogc3RyaW5nXG4gICk6IHtcbiAgICBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gICAgZW5jb2RlZFZpZGVvRnJhbWU6IFN1YmplY3Q8SVJUQ0VuY29kZWRGcmFtZTxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCBudWxsPjtcbiAgICBlbmNvZGVkQXVkaW9GcmFtZTogU3ViamVjdDxJUlRDRW5jb2RlZEZyYW1lPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IG51bGw+O1xuICB9IHtcbiAgICBjb25zdCBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICBjb25zdCBlbmNvZGVkVmlkZW9GcmFtZSA9IG5ldyBTdWJqZWN0PElSVENFbmNvZGVkRnJhbWU8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgZW5jb2RlZEF1ZGlvRnJhbWUgPSBuZXcgU3ViamVjdDxJUlRDRW5jb2RlZEZyYW1lPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IG51bGw+KG51bGwpO1xuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSByZWNlaXZlcnMuZmlsdGVyKHJlY2VpdmUgPT4gcmVjZWl2ZS50cmFjayA9PT0gdHJhY2spWzBdO1xuICAgICAgY29uc3Qga2luZDogTWVkaWFTdHJlYW1UcmFja0tpbmQgPSB0cmFjay5raW5kIGFzIE1lZGlhU3RyZWFtVHJhY2tLaW5kO1xuXG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICAgICAgY29uc3QgbXVzdFNpbmsgPSAhIWVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG5cbiAgICAgICAgICAvLyBGaXJlZm94IGFuZCBTYWZhcmlcbiAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IFdvcmtlclRyYW5zZm9ybVN0cmVhbSgpO1xuXG4gICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXN5bmMoZXZlbnQ6IE1lc3NhZ2VFdmVudDxGb3JjZUludmFsaWRGcmFtZVBvc3RNZXNzYWdlPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPj4pID0+IHtcbiAgICAgICAgICAgICAgZW5jb2RlZFZpZGVvRnJhbWUudmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgdHJhY2ssXG4gICAgICAgICAgICAgICAgY2h1bms6IGV2ZW50LmRhdGEuY2h1bmtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAobXVzdFNpbmsgJiYgIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGV2ZW50LmRhdGEuY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtmb3JjZUludmFsaWRGcmFtZTogdHJ1ZX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZWNlaXZlci50cmFuc2Zvcm0gPSBuZXcgUlRDUnRwU2NyaXB0VHJhbnNmb3JtKHdvcmtlciwge1xuICAgICAgICAgICAgICBraW5kOiB0cmFjay5raW5kLFxuICAgICAgICAgICAgICBjb2RlYzogdmlkZW9Db2RlYyxcbiAgICAgICAgICAgICAgbXVzdFNpbmtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaHJvbWl1bSAoQ2hyb21lLCBFZGdlLCBPcGVyYSwgLi4uKVxuICAgICAgICAgIGNvbnN0IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkVmlkZW9GcmFtZSwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+ID0gYXN5bmMoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgIGVuY29kZWRWaWRlb0ZyYW1lLnZhbHVlID0ge1xuICAgICAgICAgICAgICB0cmFjayxcbiAgICAgICAgICAgICAgY2h1bmtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChtdXN0U2luaykge1xuICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSkge1xuICAgICAgICAgICAgICAgIGxldCBzdXJyb2dhdGU6IFN1cnJvZ2F0ZUZyYW1lVHlwZTtcblxuICAgICAgICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xuICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUodmlkZW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKHZpZGVvQ29kZWMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdXJyb2dhdGUgPT09IFNraXBGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBzdXJyb2dhdGUgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWModmlkZW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyh2aWRlb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMhKCk7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgICAgIGNvbnN0IG11c3RTaW5rID0gISFlbmNvZGVkQXVkaW9TdHJlYW1TaW5rO1xuXG4gICAgICAgICAgLy8gRmlyZWZveCBhbmQgU2FmYXJpXG4gICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0oKTtcblxuICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGFzeW5jKGV2ZW50OiBNZXNzYWdlRXZlbnQ8Rm9yY2VJbnZhbGlkRnJhbWVQb3N0TWVzc2FnZTxSVENFbmNvZGVkQXVkaW9GcmFtZT4+KSA9PiB7XG4gICAgICAgICAgICAgIGVuY29kZWRBdWRpb0ZyYW1lLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgIHRyYWNrLFxuICAgICAgICAgICAgICAgIGNodW5rOiBldmVudC5kYXRhLmNodW5rXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaWYgKG11c3RTaW5rICYmICFhd2FpdCBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rKHRyYWNrLCBldmVudC5kYXRhLmNodW5rKSkge1xuICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7Zm9yY2VJbnZhbGlkRnJhbWU6IHRydWV9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmVjZWl2ZXIudHJhbnNmb3JtID0gbmV3IFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSh3b3JrZXIsIHtcbiAgICAgICAgICAgICAga2luZDogdHJhY2sua2luZCxcbiAgICAgICAgICAgICAgY29kZWM6IGF1ZGlvQ29kZWMsXG4gICAgICAgICAgICAgIG11c3RTaW5rXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvUHVtcGVyID0gbmV3IEF1ZGlvKCk7XG5cbiAgICAgICAgICAgIGF1ZGlvUHVtcGVyLnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpb1B1bXBlcik7XG5cbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENocm9taXVtIChDaHJvbWUsIEVkZ2UsIE9wZXJhLCAuLi4pXG4gICAgICAgICAgY29uc3QgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRBdWRpb0ZyYW1lLCBSVENFbmNvZGVkQXVkaW9GcmFtZT4gPSBhc3luYyhjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgZW5jb2RlZEF1ZGlvRnJhbWUudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRyYWNrLFxuICAgICAgICAgICAgICBjaHVua1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG11c3RTaW5rKSB7XG4gICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZEF1ZGlvU3RyZWFtU2luayh0cmFjaywgY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoYXVkaW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMhKCk7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoa2luZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zYWJsZXMsXG4gICAgICBlbmNvZGVkVmlkZW9GcmFtZSxcbiAgICAgIGVuY29kZWRBdWRpb0ZyYW1lXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb25maWd1cmVJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24oc3RyZWFtOiBNZWRpYVN0cmVhbSwgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkLCBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZCk6IHt0cmFuc2Zvcm1lZFN0cmVhbTogTWVkaWFTdHJlYW07IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdH0ge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgY29uc3QgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICBjb25zdCBraW5kOiBNZWRpYVN0cmVhbVRyYWNrS2luZCA9IHRyYWNrLmtpbmQgYXMgTWVkaWFTdHJlYW1UcmFja0tpbmQ7XG5cbiAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgICAgICBpZiAodmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFZpZGVvRnJhbWUsIFZpZGVvRnJhbWU+ID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sodHJhY2ssIGNodW5rLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHZpZGVvVHJhY2sgPSB0cmFjayBhcyBNZWRpYVN0cmVhbVZpZGVvVHJhY2s7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IHZpZGVvVHJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiB2aWRlb1RyYWNrLmtpbmR9KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5yZW1vdmVUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdhdWRpbyc6IHtcbiAgICAgICAgICBpZiAoYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPEF1ZGlvRGF0YSwgQXVkaW9EYXRhPiA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKHRyYWNrLCBjaHVuaywgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhdWRpb1RyYWNrID0gdHJhY2sgYXMgTWVkaWFTdHJlYW1BdWRpb1RyYWNrO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiBhdWRpb1RyYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogYXVkaW9UcmFjay5raW5kfSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgICAgICAgICAgY29uc3QgYXVkaW9QdW1wZXIgPSBuZXcgQXVkaW8oKTtcblxuICAgICAgICAgICAgbWVkaWFTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgICAgYXVkaW9QdW1wZXIuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLnJlbW92ZVRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGtpbmQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLFxuICAgICAgZGlzcG9zYWJsZXNcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VCBleHRlbmRzIEF1ZGlvRGF0YSB8IFZpZGVvRnJhbWU+IHtcbiAgICAodHJhY2s6IE1lZGlhU3RyZWFtVHJhY2ssIGNodW5rOiBULCBjb250cm9sbGVyOiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcjxUPik6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhY2tUcmFuc2Zvcm0ge1xuICBzdGF0aWMgdmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgZXh0ZW5kcyBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPihtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQ+KSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDMuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBjb25zdCBTa2lwRnJhbWUgPSBTeW1ib2woKTtcblxuZXhwb3J0IHR5cGUgU3Vycm9nYXRlRnJhbWVUeXBlID0gQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQgfCB0eXBlb2YgU2tpcEZyYW1lO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzU2FmYXJpID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzTW9iaWxlQ2hyb21lID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQW5kcm9pZENocm9tZSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmlzQW5kcm9pZDtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NpbmdsZVplcm9CeXRlID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDBdKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYyA9IHtPUFVTOiBuZXcgVWludDhBcnJheShbMHg2OCwgMHgwNywgMHhkOSwgMHhhYiwgMHhiYywgMHg3OSwgMHg4NywgMHhhYiwgMHg4ZSwgMHg0YSwgMHgxNCwgMHhmMywgMHhhNywgMHgxYywgMHhmMiwgMHg5YSwgMHg3YSwgMHg0NSwgMHhhNywgMHgyZCwgMHg0NCwgMHgyNSwgMHg3NCwgMHg0YywgMHhhZCwgMHgxNiwgMHhiMywgMHgwZSwgMHg1MSwgMHg1NywgMHhlYSwgMHhlNywgMHhhZCwgMHgyYSwgMHgzOCwgMHhjZSwgMHgzM10pfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYyA9IHtcbiAgICBIMjY0OiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4ZjQsIDB4MDAsIDB4MGEsIDB4OTEsIDB4OWIsIDB4MmIsIDB4ZjEsIDB4ZjEsIDB4ZjgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDcsIDB4ODksIDB4MTIsIDB4Y2IsIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4ZWIsIDB4ZTMsIDB4YzQsIDB4NDgsIDB4NDQsIC8vIFBpY3R1cmUgcGFyYW10ZXIgc2V0XG4gICAgICAvKiAqLyAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDgyLCAweDAwLCAweDNmLCAweDcwLCAweDIzLCAweDg2LCAweGU2LCAweGQxLCAweDgwLCAweDA5LCAweGFmLCAweDBhLCAweDQxLCAweDY2LCAweDZiLCAweDU0LCAweDQ2LCAweGZiLCAweDcxLCAweGQ5LCAweDdmLCAweGZmLCAweGZmLCAweGY5XSksIC8vIFNsaWNlIGxheWVyOiBpZHIgZGF0YVxuICAgIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4YjAsIDB4MDIsIDB4MDAsIDB4OWQsIDB4MDEsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzksIDB4NmIsIDB4MDAsIDB4MjcsIDB4MWMsIDB4MjQsIDB4MGMsIDB4MmMsIDB4MmMsIDB4NDQsIDB4Y2MsIDB4MjQsIDB4NDEsIDB4YTgsIDB4MDAsIDB4MTMsIDB4YTcsIDB4YTMsIDB4N2EsIDB4NTAsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcbiAgICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDgyLCAweDQ5LCAweDgzLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDc2LCAweDM4LCAweDI0LCAweDFjLCAweDE5LCAweGEwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDExLCAweGJmLCAweGRkLCAweDc3LCAweGZmLCAweDQwLCAweDdmLCAweGIxLCAweDAwXSlcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYyA9IHtcbiAgICBIMjY0OiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4NjgsIDB4NDksIDB4YTgsIDB4NDEsIDB4NjgsIDB4OTksIDB4NGMsIDB4MGYsIDB4ZmYsIDB4OTIsIDB4ODFdKSwgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxuICAgIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4MzEsIDB4MDMsIDB4MDAsIDB4ZTQsIDB4ZTAsIDB4YTgsIDB4OWIsIDB4MzcsIDB4YWYsIDB4MTAsIDB4NGYsIDB4NGYsIDB4YjEsIDB4MGEsIDB4MmYsIDB4ZTQsIDB4OTIsIDB4YzAsIDB4MWYsIDB4ZTcsIDB4NGYsIDB4NDYsIDB4ZmYsIDB4ZWUsIDB4NTEsIDB4YzEsIDB4NWQsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcbiAgICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDg2LCAweDAwLCAweDQwLCAweDkyLCAweDljLCAweDI0LCAweDQ4LCAweDAwLCAweDAwLCAweDAzLCAweDcwLCAweDAwLCAweDAwLCAweDRiLCAweDQwXSlcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15ODJ4ODJIMjY0ID0ge1xuICAgIElGcmFtZTogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHg0MiwgMHhjMCwgMHgwZCwgMHhkYSwgMHgxOCwgMHhkZSwgMHgyMiwgMHgyMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMywgMHhjOCwgMHhmMSwgMHg0MiwgMHhhYSwgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhjZSwgMHgwZiwgMHhjOCwgLy8gUGljdHVyZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzLCAuLi5uZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSwgMHg1ZiwgLi4ubmV3IFVpbnQ4QXJyYXkoMTAyOTUpLmZpbGwoMHhmZiksIDB4ODAsIC8vIFN1cHBsZW1lbnRhbCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiAoU0VJKVxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4NCwgMHgwNSwgLi4ubmV3IFVpbnQ4QXJyYXkoMykuZmlsbCgweGZmKSwgMHgwZiwgMHg0NSwgMHgwMCwgMHgwMSwgMHg1NywgMHg5ZiwgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3OF0pLCAvLyBTbGljZSBsYXllcjogSWRyIGRhdGFcbiAgICBQRnJhbWU6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDMsIC4uLm5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpLCAweGE0LCAuLi5uZXcgVWludDhBcnJheSgxMDM2NCkuZmlsbCgweGZmKSwgMHg4MCwgLy8gU0VJXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDIwLCAweDE1LCAweGYwLCAweDRiXSkgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxuICB9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4ID0gMTA0MTg7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQgPSAxO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzTW9iaWxlQ2hyb21lIHx8IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzU2FmYXJpO1xuICBwcml2YXRlIHN0YXRpYyBfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnT1BVUyc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYy5PUFVTLmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCk6IEFycmF5QnVmZmVyIHtcbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ0gyNjQnOiB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5JRnJhbWUuYnVmZmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA4Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOSc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5WUDkuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZShjb2RlYzogc3RyaW5nKTogU3Vycm9nYXRlRnJhbWVUeXBlIHtcbiAgICBpZiAoKGNvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0JykgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzQW5kcm9pZENocm9tZSkge1xuICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnSDI2NCc6IHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgICAgICBjb25zdCBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcblxuICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLkgyNjQuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDgnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA5Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKGNvZGVjOiBzdHJpbmcpOiBTdXJyb2dhdGVGcmFtZVR5cGUge1xuICAgIGlmICgoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnKSAmJiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICBjb25zdCBzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcjtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpO1xuXG4gICAgICBpZiAoc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA+IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCkge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XG4gICAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIrKztcblxuICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpOiBBcnJheUJ1ZmZlciB7XG4gICAgY29uc3QgYml0TWFzazEgPSAweDBlO1xuICAgIGNvbnN0IGJpdE1hc2syID0gMHgwMTtcbiAgICBjb25zdCBiaXRTaGlmdFJpZ2h0QnkxID0gMTtcbiAgICBjb25zdCBiaXRTaGlmdExlZnRCeTcgPSA3O1xuICAgIGNvbnN0IGJ5dGUxID0gKChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazEpID4+IGJpdFNoaWZ0UmlnaHRCeTEpO1xuICAgIGNvbnN0IGJ5dGUyID0gKChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazIpIDw8IGJpdFNoaWZ0TGVmdEJ5Nyk7XG4gICAgY29uc3QgY29weU9mRHVtbXlQRnJhbWVzID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuUEZyYW1lLnNsaWNlKCk7XG4gICAgY29uc3QgYnVmZmVySW5kZXggPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXg7XG5cbiAgICBjb3B5T2ZEdW1teVBGcmFtZXNbYnVmZmVySW5kZXhdIHw9IGJ5dGUxO1xuICAgIGNvcHlPZkR1bW15UEZyYW1lc1tidWZmZXJJbmRleCArIDFdIHw9IGJ5dGUyO1xuICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIrKztcblxuICAgIHJldHVybiBjb3B5T2ZEdW1teVBGcmFtZXMuYnVmZmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmRlY2xhcmUgY29uc3QgX19CVUlMRF9WRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX0JVSUxEX1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZyA9ICctJztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmcgPSAnLSc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmcgPSAnLSc7XG4gIHByaXZhdGUgX3BhZ2VMb2FkVGltZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgR2xvYmFsU2NvcGUudmFsdWUuVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHNldCBwYWdlTG9hZFRpbWUocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBOdW1iZXJzIGZyb20gJy4uL2xhbmcvTnVtYmVycyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RvbWFpbiA9IEdsb2JhbFNjb3BlLnZhbHVlPy5sb2NhdGlvbkhvc3RuYW1lIHx8ICcnO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBydW50aW1lID0gKHRpbWVzdGFtcC52YWx1ZU9mKCkgLSB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgcnVudGltZVxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS52YWx1ZS5Gb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBHbG9iYWxTY29wZS52YWx1ZS5mZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZyB8fCAhR2xvYmFsU2NvcGUudmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0SXRlbVNpemUgPSAoaXRlbTogbnVtYmVyIHwgc3RyaW5nKSA9PiB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicgPyBOdW1iZXJzLmNvdW50TnVtYmVyTGVuZ3RoKGl0ZW0pIDogaXRlbS5sZW5ndGg7XG4gICAgY29uc3QgZ2V0TG9nU2l6ZSA9IChsb2c6IElMb2dJdGVtKTogbnVtYmVyID0+IE9iamVjdC52YWx1ZXMobG9nKVxuICAgICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbSA/IGdldEl0ZW1TaXplKGl0ZW0pIDogMCksIDApO1xuXG4gICAgd2hpbGUgKHRoaXMuX2xvZ3MubGVuZ3RoID4gbnVtYmVyT2ZMb2dzVG9TZW5kICYmIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIHNpemVPZkxvZ3NUb1NlbmQgPCByZXF1ZXN0U2l6ZUxpbWl0KSB7XG4gICAgICBzaXplT2ZMb2dzVG9TZW5kICs9IGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCsrO1xuICAgIH1cblxuICAgIGlmICghbnVtYmVyT2ZMb2dzVG9TZW5kKSB7XG4gICAgICB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZSA9IHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlLnN1YnN0cmluZygwLFxuICAgICAgICBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyAocmVxdWVzdFNpemVMaW1pdCAtIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSkpO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dNZXNzYWdlcyA9IHRoaXMuX2xvZ3Muc2xpY2UoMCwgbnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHRoaXMuX2xvZ3MgPSB0aGlzLl9sb2dzLnNsaWNlKG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTG9ncyhsb2dNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9ucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZHVyYXRpb24gPSAwKSB7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHRvSXNvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2R1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1AwUyc7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHRoaXMuX2R1cmF0aW9uIDwgMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlzTmVnYXRpdmUgPyBNYXRoLmFicyh0aGlzLl9kdXJhdGlvbikgOiB0aGlzLl9kdXJhdGlvbjtcbiAgICBsZXQgb2Zmc2V0ID0gTWF0aC5mbG9vcihkdXJhdGlvbik7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gb2Zmc2V0ICUgMTAwMDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gMTAwMCk7XG5cbiAgICBjb25zdCBzZWNvbmRzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgaG91cnMgPSBvZmZzZXQgJSAyNDtcbiAgICBjb25zdCBwYXJ0cyA9IFsnUFQnXTtcblxuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCctJyk7XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGhvdXJzICsgJ0gnKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcykge1xuICAgICAgcGFydHMucHVzaChtaW51dGVzICsgJ00nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyB8fCBtaWxsaXNlY29uZHMpIHtcbiAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHNlY29uZHMpKTtcblxuICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICBwYXJ0cy5wdXNoKCcuJyArIHRoaXMucGFkU3RhcnQobWlsbGlzZWNvbmRzLnRvU3RyaW5nKCksIDMsICcwJykpO1xuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKCdTJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgcGFkU3RhcnQoaXRlbTogc3RyaW5nLCB0YXJnZXRMZW5ndGg6IG51bWJlciwgcGFkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwO1xuICAgIHBhZFN0cmluZyA9IFN0cmluZygodHlwZW9mIHBhZFN0cmluZyAhPT0gJ3VuZGVmaW5lZCcgPyBwYWRTdHJpbmcgOiAnICcpKTtcblxuICAgIGlmIChpdGVtLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gaXRlbS5sZW5ndGg7XG5cbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgaXRlbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDIwMDA7XG5jb25zdCBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDE7XG5jb25zdCBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDMwMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb25lbnRpYWxCYWNrb2ZmIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZFxuICApIHtcbiAgICB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgfVxuXG4gIGdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQoZmFpbHVyZUNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyA9IHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgLyAxMDAwO1xuICAgIGNvbnN0IHJhbmRvbWl6YXRpb24gPSAwLjUgKyAoMC41ICogTWF0aC5yYW5kb20oKSk7IC8vIFswLjUsIDEpXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmID0gTWF0aC5wb3coYmFja29mZkludGVydmFsSW5TZWNvbmRzLCBmYWlsdXJlQ291bnQgLSAyKTsgLy8gIFsxLzQgMS8yIDEgMiA0IDggLi4uLl1cbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiA9IE1hdGguZmxvb3IoZXhwb25lbnRpYWxCYWNrb2ZmKSAqIHJhbmRvbWl6YXRpb247XG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kID0gTWF0aC5jZWlsKE1hdGgubWF4KGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uICogMTAwMCwgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCkpO1xuXG4gICAgcmV0dXJuIE1hdGgubWluKGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCwgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI1IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXNzaW9uVGVsZW1ldHJ5IEZhaWxlZDogTm8gYXBwbGljYXRpb24gbW9uaXRvciBpbml0aWFsaXplZC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcj8uZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgaWYgKCF0aW1lU2luY2VMYXN0Q2hhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbnR5cGUgQ29udGludWF0aW9uRXZlbnQgPSBIVE1MVmlkZW9FbGVtZW50RXZlbnRNYXBbJ3BsYXknIHwgJ3BsYXlpbmcnIHwgJ3Byb2dyZXNzJyB8ICd0aW1ldXBkYXRlJ107XG5jb25zdCBub29wID0gKCk6IHZvaWQgPT4gdW5kZWZpbmVkO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yQ29udGludWF0aW9uOiAoZXZlbnQ6IENvbnRpbnVhdGlvbkV2ZW50KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlID0gbmV3IERpc3Bvc2FibGUoKCkgPT4gbnVsbCk7XG4gIHByaXZhdGUgX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcjogRGlzcG9zYWJsZSA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQ6IENvbnRpbnVhdGlvbkV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuXG4gICAgdGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkdXJhdGlvblNpbmNlUGFnZUxvYWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGltZVRvRmlyc3RGcmFtZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5wdXNoVGltZVRvRmlyc3RGcmFtZShub3cpO1xuICAgIHRoaXMucHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50OiBDb250aW51YXRpb25FdmVudCwgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCJcbmltcG9ydCB3b3JrZXIgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlci1sb2FkZXIvZGlzdC9ydW50aW1lL2lubGluZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBXb3JrZXJfZm4oKSB7XG4gIHJldHVybiB3b3JrZXIoXCIvKioqKioqLyAoZnVuY3Rpb24oKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcXG4vKioqKioqLyBcXHRcXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqKioqKi8gXFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xcblxcbi8qKiovIFxcXCIuL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50cyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBCcm93c2VyRGV0ZWN0b3I7IH1cXG4vKiBoYXJtb255IGV4cG9ydCAqLyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjayAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eSAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanNcXFwiKTtcXG5cXG5cXG5cXG52YXIgX0Jyb3dzZXJEZXRlY3RvciwgX25hdmlnYXRvciwgX25hdmlnYXRvcjI7XFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gKi9cXG52YXIgQnJvd3NlckRldGVjdG9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcXG4gIGZ1bmN0aW9uIEJyb3dzZXJEZXRlY3RvcigpIHtcXG4gICAgKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKHRoaXMsIEJyb3dzZXJEZXRlY3Rvcik7XFxuICB9XFxuICByZXR1cm4gKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgbnVsbCwgW3tcXG4gICAga2V5OiBcXFwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImJyb3dzZXJOYW1lXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImJyb3dzZXJNYWpvclZlcnNpb25cXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0FuZHJvaWRcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0FuZHJvaWQ7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU2OVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNjk7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MFxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MlxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzI7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NFxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NlxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzY7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3N1xcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNNb2JpbGVcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNNb2JpbGUoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNNb2JpbGU7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKSB7XFxuICAgICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgICB9XFxuICAgICAgdmFyIGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XFxuICAgICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcXG4gICAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcInBhcnNlQnJvd3Nlck5hbWVcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTmFtZSgpIHtcXG4gICAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgfVxcbiAgICAgIHZhciBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xcbiAgICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCkge1xcbiAgICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcXG4gICAgICAgIHJldHVybiAwO1xcbiAgICAgIH1cXG4gICAgICB2YXIgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcXG4gICAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XFxuICAgICAgICByZXR1cm4gMDtcXG4gICAgICB9XFxuICAgICAgdmFyIGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xcbiAgICAgIGlmICghZnVsbFZlcnNpb24pIHtcXG4gICAgICAgIHJldHVybiAwO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCkge1xcbiAgICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgfVxcbiAgICAgIHZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xcbiAgICAgIHZhciBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XFxuICAgICAgaWYgKG1zaWUgPiAwKSB7XFxuICAgICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcXG4gICAgICAgIHJldHVybiBcXFwiSUUvXFxcIi5jb25jYXQocGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKSk7XFxuICAgICAgfVxcbiAgICAgIHZhciB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XFxuICAgICAgaWYgKHRyaWRlbnQgPiAwKSB7XFxuICAgICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcXG4gICAgICAgIHZhciB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJJRS9cXFwiLmNvbmNhdChwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuICcnO1xcbiAgICB9XFxuICB9XSk7XFxufSgpO1xcbl9Ccm93c2VyRGV0ZWN0b3IgPSBCcm93c2VyRGV0ZWN0b3I7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleFxcXCIsIC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXFxcLykoW1xcXFxkLmFwcmVdKykvZyk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9icm93c2VyTmFtZUFuZFZlcnNpb25cXFwiLCBfQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCkpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfYnJvd3Nlck5hbWVcXFwiLCBfQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9icm93c2VyTWFqb3JWZXJzaW9uXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc01vYmlsZVxcXCIsIC9BbmRyb2lkfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxPcGVyYSBNaW5pL2kudGVzdCgoX25hdmlnYXRvciA9IG5hdmlnYXRvcikgPT09IG51bGwgfHwgX25hdmlnYXRvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hdmlnYXRvci51c2VyQWdlbnQpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQW5kcm9pZFxcXCIsIC9BbmRyb2lkL2kudGVzdCgoX25hdmlnYXRvcjIgPSBuYXZpZ2F0b3IpID09PSBudWxsIHx8IF9uYXZpZ2F0b3IyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmF2aWdhdG9yMi51c2VyQWdlbnQpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQ2hyb21lNjlcXFwiLCBfQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS82OS4nKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTcwXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJykpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3MVxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQ2hyb21lNzJcXFwiLCBfQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Mi4nKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTc0XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJykpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3NVxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQ2hyb21lNzZcXFwiLCBfQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ni4nKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTc3XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJykpO1xcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50c1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50cyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgU2tpcEZyYW1lOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gU2tpcEZyYW1lOyB9LFxcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcjsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5ICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5ICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3RvciAqLyBcXFwiLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50c1xcXCIpO1xcblxcblxcblxcblxcbnZhciBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAyNSBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxcbiAqL1xcblxcblxcbnZhciBTa2lwRnJhbWUgPSBTeW1ib2woKTtcXG52YXIgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyKCkge1xcbiAgICAoMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bXFxcImRlZmF1bHRcXFwiXSkodGhpcywgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcik7XFxuICAgIHRocm93IG5ldyBFcnJvcignU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XFxuICB9XFxuICByZXR1cm4gKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIG51bGwsIFt7XFxuICAgIGtleTogXFxcImdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWNcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhjb2RlYykge1xcbiAgICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xcbiAgICAgICAgY2FzZSAnT1BVUyc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjLk9QVVMuYnVmZmVyO1xcbiAgICAgICAgICB9XFxuICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEoKSB7XFxuICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMoY29kZWMpIHtcXG4gICAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcXG4gICAgICAgIGNhc2UgJ0gyNjQnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgICAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XFxuICAgICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuSUZyYW1lLmJ1ZmZlcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgY2FzZSAnVlA4JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgY2FzZSAnVlA5JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA5LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZShjb2RlYykge1xcbiAgICAgIGlmIChjb2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCcgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xcbiAgICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcXG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMoY29kZWMpIHtcXG4gICAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcXG4gICAgICAgIGNhc2UgJ0gyNjQnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgICAgICAgIHZhciBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcXG4gICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOCc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOSc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUoY29kZWMpIHtcXG4gICAgICBpZiAoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgIHZhciBzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcjtcXG4gICAgICAgIHZhciBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcXG4gICAgICAgIGlmIChzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0KSB7XFxuICAgICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XFxuICAgICAgICB9XFxuICAgICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XFxuICAgICAgICByZXR1cm4gYnVmZmVyO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXJcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpIHtcXG4gICAgICB2YXIgYml0TWFzazEgPSAweDBlO1xcbiAgICAgIHZhciBiaXRNYXNrMiA9IDB4MDE7XFxuICAgICAgdmFyIGJpdFNoaWZ0UmlnaHRCeTEgPSAxO1xcbiAgICAgIHZhciBiaXRTaGlmdExlZnRCeTcgPSA3O1xcbiAgICAgIHZhciBieXRlMSA9IChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazEpID4+IGJpdFNoaWZ0UmlnaHRCeTE7XFxuICAgICAgdmFyIGJ5dGUyID0gKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgJiBiaXRNYXNrMikgPDwgYml0U2hpZnRMZWZ0Qnk3O1xcbiAgICAgIHZhciBjb3B5T2ZEdW1teVBGcmFtZXMgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5QRnJhbWUuc2xpY2UoKTtcXG4gICAgICB2YXIgYnVmZmVySW5kZXggPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXg7XFxuICAgICAgY29weU9mRHVtbXlQRnJhbWVzW2J1ZmZlckluZGV4XSB8PSBieXRlMTtcXG4gICAgICBjb3B5T2ZEdW1teVBGcmFtZXNbYnVmZmVySW5kZXggKyAxXSB8PSBieXRlMjtcXG4gICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XFxuICAgICAgcmV0dXJuIGNvcHlPZkR1bW15UEZyYW1lcy5idWZmZXI7XFxuICAgIH1cXG4gIH1dKTtcXG59KCk7XFxuX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2lzU2FmYXJpXFxcIiwgX2RvbV9Ccm93c2VyRGV0ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcXFwiZGVmYXVsdFxcXCJdLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfaXNNb2JpbGVDaHJvbWVcXFwiLCBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXFxcImRlZmF1bHRcXFwiXS5pc01vYmlsZSgpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9pc0FuZHJvaWRDaHJvbWVcXFwiLCBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXFxcImRlZmF1bHRcXFwiXS5pc0FuZHJvaWQpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX3NpbmdsZVplcm9CeXRlXFxcIiwgbmV3IFVpbnQ4QXJyYXkoWzB4MDBdKSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjXFxcIiwge1xcbiAgT1BVUzogbmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4MDcsIDB4ZDksIDB4YWIsIDB4YmMsIDB4NzksIDB4ODcsIDB4YWIsIDB4OGUsIDB4NGEsIDB4MTQsIDB4ZjMsIDB4YTcsIDB4MWMsIDB4ZjIsIDB4OWEsIDB4N2EsIDB4NDUsIDB4YTcsIDB4MmQsIDB4NDQsIDB4MjUsIDB4NzQsIDB4NGMsIDB4YWQsIDB4MTYsIDB4YjMsIDB4MGUsIDB4NTEsIDB4NTcsIDB4ZWEsIDB4ZTcsIDB4YWQsIDB4MmEsIDB4MzgsIDB4Y2UsIDB4MzNdKVxcbn0pO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlY1xcXCIsIHtcXG4gIEgyNjQ6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLFxcbiAgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXFxuICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweGY0LCAweDAwLCAweDBhLCAweDkxLCAweDliLCAweDJiLCAweGYxLCAweGYxLCAweGY4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDA3LCAweDg5LCAweDEyLCAweGNiLFxcbiAgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhlYiwgMHhlMywgMHhjNCwgMHg0OCwgMHg0NCxcXG4gIC8vIFBpY3R1cmUgcGFyYW10ZXIgc2V0XFxuICAvKiAqL1xcbiAgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4MiwgMHgwMCwgMHgzZiwgMHg3MCwgMHgyMywgMHg4NiwgMHhlNiwgMHhkMSwgMHg4MCwgMHgwOSwgMHhhZiwgMHgwYSwgMHg0MSwgMHg2NiwgMHg2YiwgMHg1NCwgMHg0NiwgMHhmYiwgMHg3MSwgMHhkOSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmOV0pLFxcbiAgLy8gU2xpY2UgbGF5ZXI6IGlkciBkYXRhXFxuICBWUDg6IG5ldyBVaW50OEFycmF5KFsweGIwLCAweDAyLCAweDAwLCAweDlkLCAweDAxLCAweDJhLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDM5LCAweDZiLCAweDAwLCAweDI3LCAweDFjLCAweDI0LCAweDBjLCAweDJjLCAweDJjLCAweDQ0LCAweGNjLCAweDI0LCAweDQxLCAweGE4LCAweDAwLCAweDEzLCAweGE3LCAweGEzLCAweDdhLCAweDUwLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXFxuICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDgyLCAweDQ5LCAweDgzLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDc2LCAweDM4LCAweDI0LCAweDFjLCAweDE5LCAweGEwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDExLCAweGJmLCAweGRkLCAweDc3LCAweGZmLCAweDQwLCAweDdmLCAweGIxLCAweDAwXSlcXG59KTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWNcXFwiLCB7XFxuICBIMjY0OiBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwOSwgMHhmMCxcXG4gIC8vIEFjY2VzcyB1bml0IGRlbGltaXRlclxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHg2OCwgMHg0OSwgMHhhOCwgMHg0MSwgMHg2OCwgMHg5OSwgMHg0YywgMHgwZiwgMHhmZiwgMHg5MiwgMHg4MV0pLFxcbiAgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxcbiAgVlA4OiBuZXcgVWludDhBcnJheShbMHgzMSwgMHgwMywgMHgwMCwgMHhlNCwgMHhlMCwgMHhhOCwgMHg5YiwgMHgzNywgMHhhZiwgMHgxMCwgMHg0ZiwgMHg0ZiwgMHhiMSwgMHgwYSwgMHgyZiwgMHhlNCwgMHg5MiwgMHhjMCwgMHgxZiwgMHhlNywgMHg0ZiwgMHg0NiwgMHhmZiwgMHhlZSwgMHg1MSwgMHhjMSwgMHg1ZCwgMHgwMCwgMHhmZSwgMHhlYiwgMHhkZSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg2YiwgMHg3YiwgMHgwNywgMHg3MiwgMHg2MywgMHgwOSwgMHhhNCwgMHg4ZSwgMHhjMF0pLFxcbiAgVlA5OiBuZXcgVWludDhBcnJheShbMHg4NiwgMHgwMCwgMHg0MCwgMHg5MiwgMHg5YywgMHgyNCwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMywgMHg3MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0MF0pXFxufSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXk4Mng4MkgyNjRcXFwiLCB7XFxuICBJRnJhbWU6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweDQyLCAweGMwLCAweDBkLCAweGRhLCAweDE4LCAweGRlLCAweDIyLCAweDIyLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAzLCAweGM4LCAweGYxLCAweDQyLCAweGFhLFxcbiAgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhjZSwgMHgwZiwgMHhjOCxcXG4gIC8vIFBpY3R1cmUgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwM10uY29uY2F0KCgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfdG9Db25zdW1hYmxlQXJyYXlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShuZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSksIFsweDVmXSwgKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKG5ldyBVaW50OEFycmF5KDEwMjk1KS5maWxsKDB4ZmYpKSwgWzB4ODAsXFxuICAvLyBTdXBwbGVtZW50YWwgZW5oYW5jZW1lbnQgaW5mb3JtYXRpb24gKFNFSSlcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4ODgsIDB4ODQsIDB4MDVdLCAoMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkobmV3IFVpbnQ4QXJyYXkoMykuZmlsbCgweGZmKSksIFsweDBmLCAweDQ1LCAweDAwLCAweDAxLCAweDU3LCAweDlmLCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc4XSkpLFxcbiAgLy8gU2xpY2UgbGF5ZXI6IElkciBkYXRhXFxuICBQRnJhbWU6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzXS5jb25jYXQoKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKG5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpKSwgWzB4YTRdLCAoMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkobmV3IFVpbnQ4QXJyYXkoMTAzNjQpLmZpbGwoMHhmZikpLCBbMHg4MCxcXG4gIC8vIFNFSVxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHgyMCwgMHgxNSwgMHhmMCwgMHg0Yl0pKSAvLyBTbGljZSBsYXllcjogbm9uIGlkciBkYXRhXFxufSk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0pKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4XFxcIiwgMTA0MTgpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldFxcXCIsIDEpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJcXFwiLCBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNNb2JpbGVDaHJvbWUgfHwgX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzU2FmYXJpKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXSkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyXFxcIiwgX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIF9hcnJheUxpa2VUb0FycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkge1xcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xcbiAgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07XFxuICByZXR1cm4gbjtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aG91dEhvbGVzLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX19fd2VicGFja19tb2R1bGVfXywgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBfYXJyYXlXaXRob3V0SG9sZXM7IH1cXG4vKiBoYXJtb255IGV4cG9ydCAqLyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2FycmF5TGlrZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXJyYXlMaWtlVG9BcnJheS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qc1xcXCIpO1xcblxcbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7XFxuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuICgwLF9hcnJheUxpa2VUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkocik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX2NsYXNzQ2FsbENoZWNrOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHtcXG4gIGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX2NyZWF0ZUNsYXNzOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b1Byb3BlcnR5S2V5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvUHJvcGVydHlLZXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7XFxuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcXG4gICAgdmFyIG8gPSByW3RdO1xcbiAgICBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFxcXCJ2YWx1ZVxcXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsICgwLF90b1Byb3BlcnR5S2V5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkoby5rZXkpLCBvKTtcXG4gIH1cXG59XFxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcXG4gIHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFxcXCJwcm90b3R5cGVcXFwiLCB7XFxuICAgIHdyaXRhYmxlOiAhMVxcbiAgfSksIGU7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX2RlZmluZVByb3BlcnR5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90b1Byb3BlcnR5S2V5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvUHJvcGVydHlLZXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xcbiAgcmV0dXJuIChyID0gKDAsX3RvUHJvcGVydHlLZXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XFxuICAgIHZhbHVlOiB0LFxcbiAgICBlbnVtZXJhYmxlOiAhMCxcXG4gICAgY29uZmlndXJhYmxlOiAhMCxcXG4gICAgd3JpdGFibGU6ICEwXFxuICB9KSA6IGVbcl0gPSB0LCBlO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX19fd2VicGFja19tb2R1bGVfXywgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyBfaXRlcmFibGVUb0FycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7XFxuICBpZiAoXFxcInVuZGVmaW5lZFxcXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXFxcIkBAaXRlcmF0b3JcXFwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVNwcmVhZC5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX25vbkl0ZXJhYmxlU3ByZWFkOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXFxcIik7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX3RvQ29uc3VtYWJsZUFycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcnJheVdpdGhvdXRIb2xlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcnJheVdpdGhvdXRIb2xlcy5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRob3V0SG9sZXMuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2l0ZXJhYmxlVG9BcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9pdGVyYWJsZVRvQXJyYXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9ub25JdGVyYWJsZVNwcmVhZF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub25JdGVyYWJsZVNwcmVhZC5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVTcHJlYWQuanNcXFwiKTtcXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikge1xcbiAgcmV0dXJuICgwLF9hcnJheVdpdGhvdXRIb2xlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKHIpIHx8ICgwLF9pdGVyYWJsZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcXFwiZGVmYXVsdFxcXCJdKShyKSB8fCAoMCxfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShyKSB8fCAoMCxfbm9uSXRlcmFibGVTcHJlYWRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdKSgpO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfX193ZWJwYWNrX21vZHVsZV9fLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIHRvUHJpbWl0aXZlOyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90eXBlb2ZfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdHlwZW9mLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XFxuICBpZiAoXFxcIm9iamVjdFxcXCIgIT0gKDAsX3R5cGVvZl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKHQpIHx8ICF0KSByZXR1cm4gdDtcXG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFxcXCJkZWZhdWx0XFxcIik7XFxuICAgIGlmIChcXFwib2JqZWN0XFxcIiAhPSAoMCxfdHlwZW9mX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkoaSkpIHJldHVybiBpO1xcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlxcXCIpO1xcbiAgfVxcbiAgcmV0dXJuIChcXFwic3RyaW5nXFxcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovIChmdW5jdGlvbihfX3VudXNlZF93ZWJwYWNrX19fd2VicGFja19tb2R1bGVfXywgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gLyogYmluZGluZyAqLyB0b1Byb3BlcnR5S2V5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF90eXBlb2ZfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdHlwZW9mLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanNcXFwiKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX3RvUHJpbWl0aXZlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvUHJpbWl0aXZlLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qc1xcXCIpO1xcblxcblxcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xcbiAgdmFyIGkgPSAoMCxfdG9QcmltaXRpdmVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1tcXFwiZGVmYXVsdFxcXCJdKSh0LCBcXFwic3RyaW5nXFxcIik7XFxuICByZXR1cm4gXFxcInN5bWJvbFxcXCIgPT0gKDAsX3R5cGVvZl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1xcXCJkZWZhdWx0XFxcIl0pKGkpID8gaSA6IGkgKyBcXFwiXFxcIjtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX3R5cGVvZjsgfVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xcbiAgXFxcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXFxcIjtcXG5cXG4gIHJldHVybiBfdHlwZW9mID0gXFxcImZ1bmN0aW9uXFxcIiA9PSB0eXBlb2YgU3ltYm9sICYmIFxcXCJzeW1ib2xcXFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xcbiAgICByZXR1cm4gdHlwZW9mIG87XFxuICB9IDogZnVuY3Rpb24gKG8pIHtcXG4gICAgcmV0dXJuIG8gJiYgXFxcImZ1bmN0aW9uXFxcIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXFxcInN5bWJvbFxcXCIgOiB0eXBlb2YgbztcXG4gIH0sIF90eXBlb2Yobyk7XFxufVxcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoZnVuY3Rpb24oX191bnVzZWRfd2VicGFja19fX3dlYnBhY2tfbW9kdWxlX18sIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiBmdW5jdGlvbigpIHsgcmV0dXJuIC8qIGJpbmRpbmcgKi8gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5OyB9XFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcnJheUxpa2VUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FycmF5TGlrZVRvQXJyYXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanNcXFwiKTtcXG5cXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkge1xcbiAgaWYgKHIpIHtcXG4gICAgaWYgKFxcXCJzdHJpbmdcXFwiID09IHR5cGVvZiByKSByZXR1cm4gKDAsX2FycmF5TGlrZVRvQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKShyLCBhKTtcXG4gICAgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTtcXG4gICAgcmV0dXJuIFxcXCJPYmplY3RcXFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcXFwiTWFwXFxcIiA9PT0gdCB8fCBcXFwiU2V0XFxcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcXFwiQXJndW1lbnRzXFxcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/ICgwLF9hcnJheUxpa2VUb0FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bXFxcImRlZmF1bHRcXFwiXSkociwgYSkgOiB2b2lkIDA7XFxuICB9XFxufVxcblxcblxcbi8qKiovIH0pXFxuXFxuLyoqKioqKi8gXFx0fSk7XFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgbW9kdWxlIGNhY2hlXFxuLyoqKioqKi8gXFx0dmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xcbi8qKioqKiovIFxcdFxcbi8qKioqKiovIFxcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXFxuLyoqKioqKi8gXFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xcbi8qKioqKiovIFxcdFxcdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xcbi8qKioqKiovIFxcdFxcdFxcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcXG4vKioqKioqLyBcXHRcXHR9XFxuLyoqKioqKi8gXFx0XFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcXG4vKioqKioqLyBcXHRcXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcXG4vKioqKioqLyBcXHRcXHRcXHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXFxuLyoqKioqKi8gXFx0XFx0XFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcXG4vKioqKioqLyBcXHRcXHRcXHRleHBvcnRzOiB7fVxcbi8qKioqKiovIFxcdFxcdH07XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKi8gXFx0XFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXFxuLyoqKioqKi8gXFx0XFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKi8gXFx0XFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcXG4vKioqKioqLyBcXHRcXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0fVxcbi8qKioqKiovIFxcdFxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gXFx0Lyogd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzICovXFxuLyoqKioqKi8gXFx0IWZ1bmN0aW9uKCkge1xcbi8qKioqKiovIFxcdFxcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdFxcdH1cXG4vKioqKioqLyBcXHRcXHR9O1xcbi8qKioqKiovIFxcdH0oKTtcXG4vKioqKioqLyBcXHRcXG4vKioqKioqLyBcXHQvKiB3ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kICovXFxuLyoqKioqKi8gXFx0IWZ1bmN0aW9uKCkge1xcbi8qKioqKiovIFxcdFxcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH1cXG4vKioqKioqLyBcXHR9KCk7XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IHt9O1xcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cnVsZVNldFsxXS5ydWxlc1sxXS51c2UhLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1RyYW5zZm9ybVN0cmVhbS53b3JrZXIudHMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2sgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIEBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgKi8gXFxcIi4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLnRzXFxcIik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gKi9cXG5cXG5cXG52YXIgd29ya2VyID0gc2VsZjtcXG53b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUgPSBldmVudC5kYXRhLmZvcmNlSW52YWxpZEZyYW1lO1xcbn07XFxuaWYgKHNlbGYuUlRDVHJhbnNmb3JtRXZlbnQpIHtcXG4gIHNlbGYub25ydGN0cmFuc2Zvcm0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgdmFyIHRyYW5zZm9ybWVyID0gZXZlbnQudHJhbnNmb3JtZXI7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYyA9IHRyYW5zZm9ybWVyLm9wdGlvbnMuY29kZWM7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS50cmFuc2Zvcm1GdW5jdGlvbiA9IHRyYW5zZm9ybWVyLm9wdGlvbnMua2luZCA9PT0gJ3ZpZGVvJyA/IFdvcmtlclRyYW5zZm9ybVN0cmVhbS52aWRlb1RyYW5zZm9ybUZ1bmN0aW9uIDogV29ya2VyVHJhbnNmb3JtU3RyZWFtLmF1ZGlvVHJhbnNmb3JtRnVuY3Rpb247XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5tdXN0U2luayA9IHRyYW5zZm9ybWVyLm9wdGlvbnMubXVzdFNpbms7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSA9IGZhbHNlO1xcbiAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7XFxuICAgICAgdHJhbnNmb3JtOiBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0udHJhbnNmb3JtRnVuY3Rpb25cXG4gICAgfSk7XFxuICAgIHZhciBzb3VyY2UgPSB0cmFuc2Zvcm1lci5yZWFkYWJsZTtcXG4gICAgdmFyIHNpbmsgPSB0cmFuc2Zvcm1lci53cml0YWJsZTtcXG4gICAgc291cmNlLnBpcGVUaHJvdWdoKHRyYW5zZm9ybVN0cmVhbSkucGlwZVRvKHNpbmspO1xcbiAgfTtcXG59XFxudmFyIFdvcmtlclRyYW5zZm9ybVN0cmVhbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0oKSB7XFxuICAgICgwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcXFwiZGVmYXVsdFxcXCJdKSh0aGlzLCBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0pO1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclRyYW5zZm9ybVN0cmVhbSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XFxuICB9XFxuICByZXR1cm4gKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fW1xcXCJkZWZhdWx0XFxcIl0pKFdvcmtlclRyYW5zZm9ybVN0cmVhbSwgbnVsbCwgW3tcXG4gICAga2V5OiBcXFwidmlkZW9UcmFuc2Zvcm1GdW5jdGlvblxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2aWRlb1RyYW5zZm9ybUZ1bmN0aW9uKGNodW5rLCBjb250cm9sbGVyKSB7XFxuICAgICAgcG9zdE1lc3NhZ2Uoe1xcbiAgICAgICAgY2h1bms6IHtcXG4gICAgICAgICAgdHlwZTogY2h1bmsudHlwZSxcXG4gICAgICAgICAgdGltZXN0YW1wOiBjaHVuay50aW1lc3RhbXAsXFxuICAgICAgICAgIGRhdGE6IGNodW5rLmRhdGFcXG4gICAgICAgIH1cXG4gICAgICB9KTtcXG4gICAgICBpZiAoV29ya2VyVHJhbnNmb3JtU3RyZWFtLm11c3RTaW5rKSB7XFxuICAgICAgICBpZiAoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmZvcmNlSW52YWxpZEZyYW1lKSB7XFxuICAgICAgICAgIHZhciBzdXJyb2dhdGU7XFxuICAgICAgICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSA9IGZhbHNlO1xcbiAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcXG4gICAgICAgICAgICBzdXJyb2dhdGUgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYyk7XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgc3Vycm9nYXRlID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIGlmIChzdXJyb2dhdGUgPT09IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18uU2tpcEZyYW1lKSB7XFxuICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIGNodW5rLmRhdGEgPSBzdXJyb2dhdGUgfHwgY2h1bmsuZGF0YTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xcbiAgICAgICAgICAgIGNodW5rLmRhdGEgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyhXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMpIHx8IGNodW5rLmRhdGE7XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2h1bmsuZGF0YSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYykgfHwgY2h1bmsuZGF0YTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImF1ZGlvVHJhbnNmb3JtRnVuY3Rpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gYXVkaW9UcmFuc2Zvcm1GdW5jdGlvbihjaHVuaywgY29udHJvbGxlcikge1xcbiAgICAgIHBvc3RNZXNzYWdlKHtcXG4gICAgICAgIGNodW5rOiB7XFxuICAgICAgICAgIHRpbWVzdGFtcDogY2h1bmsudGltZXN0YW1wLFxcbiAgICAgICAgICBkYXRhOiBjaHVuay5kYXRhXFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgICAgaWYgKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5tdXN0U2luaykge1xcbiAgICAgICAgaWYgKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSkge1xcbiAgICAgICAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUgPSBmYWxzZTtcXG4gICAgICAgICAgY2h1bmsuZGF0YSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICBjaHVuay5kYXRhID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmNvZGVjKSB8fCBjaHVuay5kYXRhO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xcbiAgICB9XFxuICB9XSk7XFxufSgpO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIFxcXCJjb2RlY1xcXCIsIHZvaWQgMCk7XFxuKDAsX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fW1xcXCJkZWZhdWx0XFxcIl0pKFdvcmtlclRyYW5zZm9ybVN0cmVhbSwgXFxcInRyYW5zZm9ybUZ1bmN0aW9uXFxcIiwgdm9pZCAwKTtcXG4oMCxfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bXFxcImRlZmF1bHRcXFwiXSkoV29ya2VyVHJhbnNmb3JtU3RyZWFtLCBcXFwibXVzdFNpbmtcXFwiLCB2b2lkIDApO1xcbigwLF9iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1tcXFwiZGVmYXVsdFxcXCJdKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIFxcXCJmb3JjZUludmFsaWRGcmFtZVxcXCIsIHZvaWQgMCk7XFxuLyogdW51c2VkIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIF9fV0VCUEFDS19ERUZBVUxUX0VYUE9SVF9fID0gKG51bGwpO1xcbi8qKioqKiovIH0pKClcXG47XFxuXCIsIFwiV29ya2VyXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYsIG5vLXVzZS1iZWZvcmUtZGVmaW5lLCBuZXctY2FwICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZW50LCB3b3JrZXJDb25zdHJ1Y3Rvciwgd29ya2VyT3B0aW9ucywgdXJsKSB7XG4gIHZhciBnbG9iYWxTY29wZSA9IHNlbGYgfHwgd2luZG93O1xuXG4gIHRyeSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBibG9iO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBOZXcgQVBJXG4gICAgICAgIGJsb2IgPSBuZXcgZ2xvYmFsU2NvcGUuQmxvYihbY29udGVudF0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBCbG9iQnVpbGRlciA9IERlcHJlY2F0ZWQsIGJ1dCB3aWRlbHkgaW1wbGVtZW50ZWRcbiAgICAgICAgdmFyIEJsb2JCdWlsZGVyID0gZ2xvYmFsU2NvcGUuQmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuV2ViS2l0QmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuTW96QmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuTVNCbG9iQnVpbGRlcjtcbiAgICAgICAgYmxvYiA9IG5ldyBCbG9iQnVpbGRlcigpO1xuICAgICAgICBibG9iLmFwcGVuZChjb250ZW50KTtcbiAgICAgICAgYmxvYiA9IGJsb2IuZ2V0QmxvYigpO1xuICAgICAgfVxuXG4gICAgICB2YXIgVVJMID0gZ2xvYmFsU2NvcGUuVVJMIHx8IGdsb2JhbFNjb3BlLndlYmtpdFVSTDtcbiAgICAgIHZhciBvYmplY3RVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgdmFyIHdvcmtlciA9IG5ldyBnbG9iYWxTY29wZVt3b3JrZXJDb25zdHJ1Y3Rvcl0ob2JqZWN0VVJMLCB3b3JrZXJPcHRpb25zKTtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VVJMKTtcbiAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG5ldyBnbG9iYWxTY29wZVt3b3JrZXJDb25zdHJ1Y3Rvcl0oXCJkYXRhOmFwcGxpY2F0aW9uL2phdmFzY3JpcHQsXCIuY29uY2F0KGVuY29kZVVSSUNvbXBvbmVudChjb250ZW50KSksIHdvcmtlck9wdGlvbnMpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghdXJsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIklubGluZSB3b3JrZXIgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IGdsb2JhbFNjb3BlW3dvcmtlckNvbnN0cnVjdG9yXSh1cmwsIHdvcmtlck9wdGlvbnMpO1xuICB9XG59OyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAobyA9PT0gcykge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBpKSB0aHJvdyBhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmb3IgKG4ubWV0aG9kID0gaSwgbi5hcmcgPSBhOzspIHtcbiAgICAgICAgdmFyIGMgPSBuLmRlbGVnYXRlO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgIHZhciB1ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShjLCBuKTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gbi5tZXRob2QpIG4uc2VudCA9IG4uX3NlbnQgPSBuLmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IG4ubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKG8gPT09IGgpIHRocm93IG8gPSBzLCBuLmFyZztcbiAgICAgICAgICBuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IG4ubWV0aG9kICYmIG4uYWJydXB0KFwicmV0dXJuXCIsIG4uYXJnKTtcbiAgICAgICAgbyA9IGY7XG4gICAgICAgIHZhciBwID0gdHJ5Q2F0Y2goZSwgciwgbik7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSBwLnR5cGUpIHtcbiAgICAgICAgICBpZiAobyA9IG4uZG9uZSA/IHMgOiBsLCBwLmFyZyA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBwLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IG4uZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSBwLnR5cGUgJiYgKG8gPSBzLCBuLm1ldGhvZCA9IFwidGhyb3dcIiwgbi5hcmcgPSBwLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpIHtcbiAgICB2YXIgbiA9IHIubWV0aG9kLFxuICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07XG4gICAgaWYgKG8gPT09IHQpIHJldHVybiByLmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBuICYmIGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKHIubWV0aG9kID0gXCJyZXR1cm5cIiwgci5hcmcgPSB0LCBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpLCBcInRocm93XCIgPT09IHIubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBuICYmIChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBuICsgXCInIG1ldGhvZFwiKSksIHk7XG4gICAgdmFyIGkgPSB0cnlDYXRjaChvLCBlLml0ZXJhdG9yLCByLmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gaS5hcmcsIHIuZGVsZWdhdGUgPSBudWxsLCB5O1xuICAgIHZhciBhID0gaS5hcmc7XG4gICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSByLm1ldGhvZCAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpIDogYSA6IChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIHIuZGVsZWdhdGUgPSBudWxsLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkge1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkge1xuICAgIHZhciBlID0gdC5jb21wbGV0aW9uIHx8IHt9O1xuICAgIGUudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHQpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCB0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBQcm9taXNlKTtcbiAgICB2YXIgYSA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAodCwgciwgbiwgbyksIGkpO1xuICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZG9uZSA/IHQudmFsdWUgOiBhLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShnLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoZywgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBlLmtleXMgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gT2JqZWN0KHQpLFxuICAgICAgciA9IFtdO1xuICAgIGZvciAodmFyIG4gaW4gZSkgci5wdXNoKG4pO1xuICAgIHJldHVybiByLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB0LCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtyLnNsaWNlKDEpKSAmJiAodGhpc1tyXSA9IHQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGUpIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGU7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykge1xuICAgICAgICByZXR1cm4gYS50eXBlID0gXCJ0aHJvd1wiLCBhLmFyZyA9IGUsIHIubmV4dCA9IG4sIG8gJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksICEhbztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG8gPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgbyA+PSAwOyAtLW8pIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sXG4gICAgICAgICAgYSA9IGkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICB1ID0gbi5jYWxsKGksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoYyAmJiB1KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdSkgdGhyb3cgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCJmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7XG4gIChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTtcbiAgZm9yICh2YXIgZSA9IDAsIG4gPSBBcnJheShhKTsgZSA8IGE7IGUrKykgbltlXSA9IHJbZV07XG4gIHJldHVybiBuO1xufVxuZXhwb3J0IHsgX2FycmF5TGlrZVRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gcjtcbn1cbmV4cG9ydCB7IF9hcnJheVdpdGhIb2xlcyBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIpO1xufVxuZXhwb3J0IHsgX2FycmF5V2l0aG91dEhvbGVzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChuLCB0LCBlLCByLCBvLCBhLCBjKSB7XG4gIHRyeSB7XG4gICAgdmFyIGkgPSBuW2FdKGMpLFxuICAgICAgdSA9IGkudmFsdWU7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gdm9pZCBlKG4pO1xuICB9XG4gIGkuZG9uZSA/IHQodSkgOiBQcm9taXNlLnJlc29sdmUodSkudGhlbihyLCBvKTtcbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdCA9IHRoaXMsXG4gICAgICBlID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAociwgbykge1xuICAgICAgdmFyIGEgPSBuLmFwcGx5KHQsIGUpO1xuICAgICAgZnVuY3Rpb24gX25leHQobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIG4pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgbik7XG4gICAgICB9XG4gICAgICBfbmV4dCh2b2lkIDApO1xuICAgIH0pO1xuICB9O1xufVxuZXhwb3J0IHsgX2FzeW5jVG9HZW5lcmF0b3IgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7XG4gIGlmICghKGEgaW5zdGFuY2VvZiBuKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbn1cbmV4cG9ydCB7IF9jbGFzc0NhbGxDaGVjayBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXMoZSwgcikge1xuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcbiAgICB2YXIgbyA9IHJbdF07XG4gICAgby5lbnVtZXJhYmxlID0gby5lbnVtZXJhYmxlIHx8ICExLCBvLmNvbmZpZ3VyYWJsZSA9ICEwLCBcInZhbHVlXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHRvUHJvcGVydHlLZXkoby5rZXkpLCBvKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcbiAgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgZTtcbn1cbmV4cG9ydCB7IF9jcmVhdGVDbGFzcyBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKHQpIHtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7XG4gIH0sIF9nZXRQcm90b3R5cGVPZih0KTtcbn1cbmV4cG9ydCB7IF9nZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHQsXG4gICAgICB3cml0YWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfVxuICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGUgJiYgc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikge1xuICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpO1xufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxuZXhwb3J0IHsgX2l0ZXJhYmxlVG9BcnJheUxpbWl0IGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxuZXhwb3J0IHsgX25vbkl0ZXJhYmxlUmVzdCBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbmV4cG9ydCB7IF9ub25JdGVyYWJsZVNwcmVhZCBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkge1xuICBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlO1xuICBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7XG59XG5leHBvcnQgeyBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCwgZSkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyA9IGUsIHQ7XG4gIH0sIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbmV4cG9ydCB7IF9zZXRQcm90b3R5cGVPZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxuZXhwb3J0IHsgX3NsaWNlZFRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBhcnJheVdpdGhvdXRIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlU3ByZWFkIGZyb20gXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCI7XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMocikgfHwgaXRlcmFibGVUb0FycmF5KHIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5leHBvcnQgeyBfdG9Db25zdW1hYmxlQXJyYXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gdHlwZW9mIG87XG4gIH0gOiBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiBvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvO1xuICB9LCBfdHlwZW9mKG8pO1xufVxuZXhwb3J0IHsgX3R5cGVvZiBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHtcbiAgaWYgKHIpIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkociwgYSk7XG4gICAgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTtcbiAgICByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBhcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwO1xuICB9XG59XG5leHBvcnQgeyBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgYXMgZGVmYXVsdCB9OyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iaiwgcHJvcCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7IH0iLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvdHlwZS1idWlsdGlucyAqL1xudmFyIGcgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpIHx8XG4gIHt9XG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGcsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnICYmXG4gICAgJ0Jsb2InIGluIGcgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGcsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICBpZiAoaGVhZGVyLmxlbmd0aCAhPSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hlYWRlcnMgY29uc3RydWN0b3I6IGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQnICsgaGVhZGVyLmxlbmd0aClcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5Ll9ub0JvZHkpIHJldHVyblxuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHZhciBtYXRjaCA9IC9jaGFyc2V0PShbQS1aYS16MC05Xy1dKykvLmV4ZWMoYmxvYi50eXBlKVxuICB2YXIgZW5jb2RpbmcgPSBtYXRjaCA/IG1hdGNoWzFdIDogJ3V0Zi04J1xuICByZWFkZXIucmVhZEFzVGV4dChibG9iLCBlbmNvZGluZylcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ub0JvZHkgPSB0cnVlO1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBhcyBBcnJheUJ1ZmZlcicpXG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0NPTk5FQ1QnLCAnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUEFUQ0gnLCAnUE9TVCcsICdQVVQnLCAnVFJBQ0UnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbCB8fCAoZnVuY3Rpb24gKCkge1xuICAgIGlmICgnQWJvcnRDb250cm9sbGVyJyBpbiBnKSB7XG4gICAgICB2YXIgY3RybCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIHJldHVybiBjdHJsLnNpZ25hbDtcbiAgICB9XG4gIH0oKSk7XG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1Jlc3BvbnNlICcgKyBlcnJvci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICBpZiAodGhpcy5zdGF0dXMgPCAyMDAgfHwgdGhpcy5zdGF0dXMgPiA1OTkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Jlc3BvbnNlJzogVGhlIHN0YXR1cyBwcm92aWRlZCAoMCkgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzIwMCwgNTk5XS5cIilcbiAgfVxuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAyMDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2Uub2sgPSBmYWxzZVxuICByZXNwb25zZS5zdGF0dXMgPSAwXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZy5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgY2hlY2sgaWYgc3BlY2lmaWNhbGx5IGZvciB3aGVuIGEgdXNlciBmZXRjaGVzIGEgZmlsZSBsb2NhbGx5IGZyb20gdGhlIGZpbGUgc3lzdGVtXG4gICAgICAvLyBPbmx5IGlmIHRoZSBzdGF0dXMgaXMgb3V0IG9mIGEgbm9ybWFsIHJhbmdlXG4gICAgICBpZiAocmVxdWVzdC51cmwuaW5kZXhPZignZmlsZTovLycpID09PSAwICYmICh4aHIuc3RhdHVzIDwgMjAwIHx8IHhoci5zdGF0dXMgPiA1OTkpKSB7XG4gICAgICAgIG9wdGlvbnMuc3RhdHVzID0gMjAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5zdGF0dXMgPSB4aHIuc3RhdHVzO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCB0aW1lZCBvdXQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZy5sb2NhdGlvbi5ocmVmID8gZy5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlclxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzIHx8IChnLkhlYWRlcnMgJiYgaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgZy5IZWFkZXJzKSkpIHtcbiAgICAgIHZhciBuYW1lcyA9IFtdO1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgbmFtZXMucHVzaChub3JtYWxpemVOYW1lKG5hbWUpKVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmIChuYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWcuZmV0Y2gpIHtcbiAgZy5mZXRjaCA9IGZldGNoXG4gIGcuSGVhZGVycyA9IEhlYWRlcnNcbiAgZy5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjUgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgQ2hhbm5lbHMgZnJvbSAnLi9DaGFubmVscyc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTsiXSwibmFtZXMiOlsiR2xvYmFsU2NvcGUiLCJEaXNwb3NhYmxlIiwiRGlzcG9zYWJsZUxpc3QiLCJTdWJqZWN0IiwiUmVhZE9ubHlTdWJqZWN0IiwidmlzaWJpbGl0eUNoYW5nZUV2ZW50IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEYXRlIiwibm93IiwiX2lzRm9yZWdyb3VuZCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsImluaXRpYWxpemUiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJnZXQiLCJ2YWx1ZSIsImdldFRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlIiwiZGlzcG9zZSIsIl9kaXNwb3NhYmxlcyIsIl90aGlzIiwiaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSIsImRvY3VtZW50SXNIaWRkZW4iLCJ1c2VFdmVudENhcHR1cmVQaGFzZSIsImFkZERvY3VtZW50RXZlbnRMaXN0ZW5lciIsImFkZCIsInJlbW92ZURvY3VtZW50RXZlbnRMaXN0ZW5lciIsImRlZmF1bHQiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNBbmRyb2lkIiwiX2lzQ2hyb21lNjkiLCJfaXNDaHJvbWU3MCIsIl9pc0Nocm9tZTcxIiwiX2lzQ2hyb21lNzIiLCJfaXNDaHJvbWU3NCIsIl9pc0Nocm9tZTc1IiwiX2lzQ2hyb21lNzYiLCJfaXNDaHJvbWU3NyIsImlzTW9iaWxlIiwiX2lzTW9iaWxlIiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJicm93c2VyTmFtZUFuZFZlcnNpb24iLCJtYXRjaCIsIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUiLCJwYXJzZUJyb3dzZXJOYW1lIiwiYnJvd3Nlck5hbWVMaXN0Iiwic3BsaXQiLCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24iLCJicm93c2VyVmVyc2lvbkxpc3QiLCJmdWxsVmVyc2lvbiIsIk51bWJlciIsIm1zaWUiLCJpbmRleE9mIiwiY29uY2F0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ0cmlkZW50IiwidmVyc2lvbiIsIl9Ccm93c2VyRGV0ZWN0b3IiLCJ0ZXN0IiwiX25hdmlnYXRvciIsIl9uYXZpZ2F0b3IyIiwiaW5jbHVkZXMiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwiUGxhaW5Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiZ2V0U3RyaW5nVmFsdWUiLCJuYW1lIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZ2V0Qm9vbGVhblZhbHVlIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiZGVmYXVsdFRlbGVtZXRyeUxldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSIsImRlZmF1bHRMb2dnaW5nTGV2ZWwiLCJkZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCIsImRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwiLCJGZWF0dXJlRW5hYmxlbWVudCIsIkdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIiwiRXJyb3IiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uIiwiaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkIiwiZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbiIsImlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQiLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsImJpbmQiLCJzZXRUaW1lb3V0IiwiaW1nIiwiZG9jdW1lbnRDcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwibmF2aWdhdG9yQ29ubmVjdGlvbiIsInVuZGVmaW5lZCIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiX3JlZiIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYSIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTIiLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmEzIiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJfcmVmMiIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTQiLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmE1IiwiX0dsb2JhbFNjb3BlJHZhbHVlJG5hNiIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTciLCJfR2xvYmFsU2NvcGUkdmFsdWUkbmE4IiwicnR0IiwiX0dsb2JhbFNjb3BlJHZhbHVlJG5hOSIsImxpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9HbG9iYWxTY29wZSR2YWx1ZSRuYTEwIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIk1ldHJpY3NUeXBlIiwiTWV0cmljVHlwZSIsIkR1cmF0aW9ucyIsIlNESyIsIkxvZ2dlckZhY3RvcnkiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiZ2V0TG9nZ2VyIiwibWV0cmljc1NlcnZpY2UiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIlNldHVwQ29tcGxldGVkIiwiZmFpbCIsIlNldHVwRmFpbGVkIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiZ2V0TmFtZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJ0b0lzb1N0cmluZyIsIkVkZ2VUb2tlbiIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwiZSIsInN0YXJ0c1dpdGgiLCJfZWRnZVRva2VuJHRva2VuIiwiX2VkZ2VUb2tlbiR0b2tlbjIiLCJfYXBwbGljYXRpb25JZCIsImFwcGxpY2F0aW9uSWQiLCJfdG9rZW4iLCJ1cmkiLCJjYXBhYmlsaXRpZXMiLCJCdWlsZEZlYXR1cmVzIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfc2VuZExvZ3MiLCJfc2VuZE1ldHJpY3MiLCJfbG9nVG9Db25zb2xlIiwiYXBwbHlGZWF0dXJlcyIsImZlYXR1cmVzIiwiX19GRUFUVVJFU19fIiwic2VuZExvY2FsQ2FuZGlkYXRlcyIsInNlbmRMb2dzIiwic2VuZE1ldHJpY3MiLCJsb2dUb0NvbnNvbGUiLCJpc0Nocm9tZTc0IiwiaXNDaHJvbWU3NSIsImlzQ2hyb21lNzYiLCJpc0Nocm9tZTc3IiwiYWRkVHJhbmNlaXZlckRpc2FibGVkIiwiaXNDaHJvbWU2OSIsImlzQ2hyb21lNzAiLCJpc0Nocm9tZTcxIiwiaXNDaHJvbWU3MiIsImJyb3dzZXJOYW1lIiwiYnJvd3Nlck1ham9yVmVyc2lvbiIsIl9HbG9iYWxTY29wZSR2YWx1ZSIsIk1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IiLCJNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yIiwiUlRDUnRwUmVjZWl2ZXIiLCJwcm90b3R5cGUiLCJjcmVhdGVFbmNvZGVkU3RyZWFtcyIsIlJUQ1J0cFNjcmlwdFRyYW5zZm9ybSIsIkhUTUxWaWRlb0VsZW1lbnQiLCJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrIiwiaXNSZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrU3VwcG9ydGVkIiwiaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQiLCJpc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCIsIlBhcmFtZXRlcnMiLCJfZGlzY292ZXJ5UGFyYW1ldGVycyIsImFwcGx5UGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJfX1BBUkFNRVRFUlNfXyIsImRpc2NvdmVyeSIsImludGVudGlvbnMiLCJicm93c2VyR2xvYmFsU2NvcGUiLCJkb2N1bWVudCIsImxvY2F0aW9uIiwid2luZG93IiwiZ2xvYmFsU2NvcGUiLCJfZG9jdW1lbnQiLCJfbG9jYXRpb24iLCJfd2luZG93IiwiRm9ybURhdGEiLCJNZWRpYVN0cmVhbSIsIk1lZGlhU3RyZWFtVHJhY2siLCJSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsIlJUQ0ljZUNhbmRpZGF0ZSIsIlVSTFNlYXJjaFBhcmFtcyIsImNsZWFySW50ZXJ2YWwiLCJjbGVhclRpbWVvdXQiLCJjcmVhdGVFbGVtZW50IiwiaGFzRm9jdXMiLCJoaWRkZW4iLCJxdWVyeVNlbGVjdG9yIiwiZmV0Y2giLCJob3N0bmFtZSIsInNlYXJjaCIsImNvbm5lY3Rpb24iLCJvbkxpbmUiLCJzZXRJbnRlcnZhbCIsInNldEluc3RhbmNlIiwicHJvdmlkZWRHbG9iYWxTY29wZSIsImdldEluc3RhbmNlIiwiX3JlYWRPbmx5SW5zdGFuY2UiLCJzdWJzY3JpYmUiLCJjYWxsYmFjayIsIl9HbG9iYWxTY29wZSIsIl9pbnN0YW5jZSIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsImNhbGwiLCJfbGlzdCIsImZvckVhY2giLCJ0b1N0cmluZyIsIm1heERpZ2l0c0luRmxvYXRBZnRlckRvdCIsIk51bWJlcnMiLCJjb3VudE51bWJlckxlbmd0aCIsImluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUiLCJudW1iZXIiLCJjb3VudERpZ2l0c0JlZm9yZURlY2ltYWwiLCJNYXRoIiwiZmxvb3IiLCJjb3VudERpZ2l0c0FmdGVyRGVjaW1hbCIsImZpeFJvdW5kaW5nIiwicHJlY2lzaW9uIiwicG93ZXIiLCJwb3ciLCJyb3VuZCIsImRpZ2l0c0JlZm9yZURlY2ltYWwiLCJvcmlnaW5hbFZhbHVlIiwibW9kaWZpZWRWYWx1ZSIsImNvdW50IiwiU3RyaW5ncyIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsImxvb3BzIiwiY2VpbCIsIkFycmF5IiwiZmlsbCIsInJlZHVjZSIsInN0cmluZyIsImZ1bmMiLCJVaW50OEFycmF5cyIsImlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlIiwidGFyZ2V0Qnl0ZVNlcXVlbmNlIiwiZGF0YSIsIm9mZnNldCIsImlkeCIsImZpbmRUYXJnZXRCeXRlU2VxdWVuY2VJbmRleEZyb21PZmZzZXQiLCJyZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCIsImFyZ3VtZW50cyIsImN1cnJlbnRJbmRleCIsImJ5dGVMZW5ndGgiLCJnZXRVdWlkU3RyaW5nRnJvbVVpbnQ4QXJyYXkiLCJ1dWlkQnl0ZUxlbmd0aCIsInV1aWQiLCJieXRlSGV4IiwicGFkU3RhcnQiLCJqb2luIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiTG9nZ2luZ0xldmVsIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJXYXJuIiwiY29uc29sZSIsIkxvZ2dlciIsImFwcGVuZGVycyIsIl9jYXRlZ29yeSIsInRyYWNlIiwiVHJhY2UiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJkZWJ1ZyIsIkRlYnVnIiwiX2xlbjIiLCJfa2V5MiIsIkluZm8iLCJfbGVuMyIsIl9rZXkzIiwid2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJfdGhpczIiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5IiwiZXJyb3JTdGFja0Fsc29IYXNFcnJvck1lc3NhZ2UiLCJzdGFjayIsImFyZyIsImNhY2hlIiwiXyIsIk9iamVjdCIsImFyZ3VtZW50IiwidG9TdHJpbmdTdHIiLCJMb2dnaW5nVGhyZXNob2xkIiwiVGVsZW1ldHJ5QXBwZW5kZXIiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsIl90ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwibG9nZ2VyIiwiX2xvZ2dlcnMiLCJhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlMb2dnaW5nTGV2ZWwiLCJhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsIiwiYXBwbHlDb25zb2xlTG9nZ2VyIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsInNldFRocmVzaG9sZCIsImFwcGx5QXBwZW5kZXIiLCJsb2dnaW5nTGV2ZWwiLCJPZmYiLCJBbGwiLCJjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsIiwibG9nZ2luZ0xldmVsVHlwZSIsIlRlbGVtZXRyeUxldmVsIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJUaW1lVG9GaXJzdEZyYW1lIiwiRXNzZW50aWFsIiwiQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIlN0YWxsZWQiLCJCdWZmZXJpbmciLCJSb3VuZFRyaXBUaW1lIiwiRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJOZXR3b3JrVHlwZSIsIlJlc29sdXRpb25DaGFuZ2VkIiwiQXBwbGljYXRpb25Gb3JlZ3JvdW5kIiwiQXBwbGljYXRpb25CYWNrZ3JvdW5kIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc1NlcnZpY2UiLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NGYWN0b3J5IiwiZ2V0TWV0cmljc1NlcnZpY2UiLCJfdHlwZW9mIiwibWV0cmljc1NlcnZpY2VzIiwiX21ldHJpY3NTZXJ2aWNlcyIsIm1ldHJpY3NDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbCIsInNldFRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwiRXhwb25lbnRpYWxCYWNrb2ZmIiwiVmVyc2lvbk1hbmFnZXIiLCJyZXF1ZXN0U2l6ZUxpbWl0IiwibWF4QnVmZmVyZWRSZWNvcmRzIiwibG9jYXRpb25Ib3N0bmFtZSIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJtZXRyaWMiLCJwcmV2aW91c1ZhbHVlIiwicmVzb3VyY2UiLCJraW5kIiwibWV0cmljUmVjb3JkIiwidGltZXN0YW1wIiwiZnVsbFF1YWxpZmllZE5hbWUiLCJfZG9tYWluIiwic2RrVmVyc2lvbiIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwibWV0cmljc01lc3NhZ2VzIiwiZm9ybURhdGEiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiYXBwZW5kIiwicmVjb3JkcyIsIm1ldGhvZCIsImJvZHkiLCJhYnJ1cHQiLCJzZW50Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9pc1NlbmRpbmciLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsImlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlIiwiX2ZhaWx1cmVDb3VudCIsIl90b0NvbnN1bWFibGVBcnJheSIsImdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQiLCJzdGF0dXMiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJpc1ByZWNhY2hpbmdFbmFibGVkIiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWNoZWQiLCJkaXJlY3Rpb24iLCJwZWVyQ29ubmVjdGlvbiIsImNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWxsZWUzIiwiZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIiwiY29uZmlndXJhdGlvbiIsIl9hcmdzMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsInZpZGVvVHJhbnNjZWl2ZXIiLCJhdWRpb1RyYW5zY2VpdmVyIiwib3B0aW9ucyIsImFkZFRyYW5zY2VpdmVyIiwidDAiLCJ0MSIsInQyIiwiY3JlYXRlT2ZmZXIiLCJ0MyIsImxvY2FsT2ZmZXIiLCJvZmZlclRvUmVjZWl2ZUF1ZGlvIiwib2ZmZXJUb1JlY2VpdmVWaWRlbyIsInQ0IiwidDUiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJpIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsIlNkcFBhcnNlciIsInVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uMiIsImdldEN1cnJlbnRPZmZlckRpc2FibGVkIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwicGFyc2VkU0RQIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJfdXBkYXRlU3RhdGlzdGljIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uMyIsIl9pZ25vcmVkIiwiZ2V0S2luZEZvclNhZmFyaTExIiwiZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY2IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NyIsImJ5dGVzIiwiYnl0ZXNSZWNlaXZlZCIsInByZXZpb3VzQnl0ZXNSZWNlaXZlZCIsImJ5dGVzRGVsdGEiLCJ0aW1lRGVsdGEiLCJiaXRyYXRlIiwic3NyYyIsInBhY2tldHNMb3N0IiwicGFja2V0c1JlY2VpdmVkIiwiZ2V0Q29kZWNCeVR5cGUiLCJ2aWRlbyIsImZyYW1lc0RlY29kZWQiLCJmcHMiLCJfdXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uNCIsImdldFN0YXRzTGVnYWN5IiwicmVzdWx0IiwibmFtZXMiLCJzdGF0IiwiX3RoaXMyJF9ydGNTdGF0aXN0aWMkIiwiX3RoaXMyJF9ydGNTdGF0aXN0aWMkMiIsIl9zZHAiLCJzZHBTcGxpdEJ5TGluZXMiLCJzZHBTcGxpdEJ5VHJhY2tzIiwiX2F1ZGlvQ29kZWMiLCJhcHBseUNvZGVjIiwiX3ZpZGVvQ29kZWMiLCJfaXNBdWRpb1RyYWNrRW5hYmxlZCIsImlzVHJhY2tCeVR5cGVFbmFibGVkIiwiX2lzVmlkZW9UcmFja0VuYWJsZWQiLCJzZHBTZWN0aW9uRm9yVHlwZSIsImZpbmQiLCJzZHBUcmFjayIsIl9zZHBTcGxpdEJ5TGluZXMkZmluZCIsInJ0bWFwIiwic2RwTGluZSIsInVzZWRDb2RlY0xpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQiLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsImN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIiwiY29ubmVjdGlvblN0YXRlIiwiaWNlQ29ubmVjdGlvblN0YXRlIiwiX3RoaXMkX3BlZXJDb25uZWN0aW9uNSIsImdldENvbmZpZ3VyYXRpb24iLCJfdGhpcyRfcGVlckNvbm5lY3Rpb242Iiwic2V0Q29uZmlndXJhdGlvbiIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjciLCJnZXRUcmFuc2NlaXZlcnNEaXNhYmxlZCIsImdldFRyYW5zY2VpdmVycyIsIl90aGlzJF9wZWVyQ29ubmVjdGlvbjgiLCJfY3JlYXRlT2ZmZXIiLCJwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwiZ2V0UmVjZWl2ZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY2xvc2UiLCJfdGhpcyRfcGVlckNvbm5lY3Rpb245IiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uIiwicmVzb2x2ZVBlZXJDb25uZWN0aW9uUHJvbWlzZSIsInN1YmplY3QiLCJfc3ViamVjdCIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsIl9EaXNwb3NhYmxlIiwibGlzdGVuZXJzIiwiX2NhbGxTdXBlciIsIl9pbmhlcml0cyIsIl9saXN0ZW5lcnMiLCJfdmFsdWUiLCJjaGFuZ2VkIiwiY29tcGFyYWJsZSIsImVxdWFscyIsImJhc2VVUkwiLCJvcmlnaW4iLCJEaXNjb3ZlcnlVcmkiLCJfR2xvYmFsU2NvcGUkZ2V0SW5zdGEiLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0IiwiX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsIm9uTG9hZCIsIl9pbml0aWFsaXplZCIsImFkZFdpbmRvd0V2ZW50TGlzdGVuZXIiLCJpbml0Iiwib3B0aW9uc1dpdGhPcHRpb25hbGdsb2JhbFNjb3BlIiwicGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiY29uc29sZUxvZ2dpbmdMZXZlbCIsImNvbnNvbGVBcHBlbmRlciIsImF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIndlYlBsYXllckxvYWRlciIsInNoYWthUGxheWVyTG9hZGVyIiwiaGxzSnNMb2FkZXIiLCJfdGhpcyRfYXBwbGljYXRpb25BY3QiLCJfU0RLIiwic2VnbWVudHMiLCJwcm90b2NvbCIsInVuc2hpZnQiLCJlbmRzV2l0aCIsIkJpdHJhdGVTdGF0ZSIsIkJpdHJhdGVNb2RlIiwiRGltZW5zaW9uIiwiQ2hhbm5lbFN0YXRlIiwiVmlkZW9UZWxlbWV0cnkiLCJTZXNzaW9uVGVsZW1ldHJ5IiwiVG9rZW5Db250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJFbmNvZGVkU3RyZWFtU2luayIsIlN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiU3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIlBlZXJDb25uZWN0aW9uQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsIkZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IiwiU3RyZWFtRmFjdG9yeSIsIkRpc2NvdmVyeSIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwic3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiQ2hhbm5lbCIsInZpZGVvRWxlbWVudCIsImNoYW5uZWxDb250ZXh0T3B0aW9ucyIsInRhcmdldExhZyIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImVuY29kZWRWaWRlb1N0cmVhbVNpbmsiLCJlbmNvZGVkQXVkaW9TdHJlYW1TaW5rIiwiX3Rva2VuQ29udGV4dCIsIl9jaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9zdGF0ZUNvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uIiwiX3JlYWRPbmx5U3RhdGUiLCJzdGF0ZSIsIl9yZWFkT25seUF1dG9NdXRlZCIsImF1dG9NdXRlZCIsIl9yZWFkT25seUF1dG9QYXVzZWQiLCJhdXRvUGF1c2VkIiwiX3JlYWRPbmx5VG9rZW5FeHBpcmluZyIsInRva2VuRXhwaXJpbmciLCJfcmVhZE9ubHlBdXRob3JpemVkIiwiYXV0aG9yaXplZCIsIl9yZWFkT25seU9ubGluZSIsIm9ubGluZSIsIl9yZWFkT25seUxvYWRpbmciLCJsb2FkaW5nIiwiX3JlYWRPbmx5UGxheWluZyIsInBsYXlpbmciLCJfcmVhZE9ubHlTdGFuZGJ5Iiwic3RhbmRieSIsIl9yZWFkT25seVN0b3BwZWQiLCJzdG9wcGVkIiwiX3JlYWRPbmx5VGFyZ2V0TGFnIiwiX3JlYWRPbmx5TGFnIiwibGFnIiwiX3JlYWRPbmx5Qml0cmF0ZUxpbWl0IiwiYml0cmF0ZUxpbWl0IiwiX3JlYWRPbmx5UmVzb2x1dGlvbiIsInJlc29sdXRpb24iLCJfcmVhZE9ubHlGYWlsdXJlQ291bnQiLCJmYWlsdXJlQ291bnQiLCJfcmVhZE9ubHlFbmRQb2ludCIsImVuZFBvaW50IiwiX3JlYWRPbmx5U3RyZWFtIiwic3RyZWFtIiwiX3JlYWRPbmx5UnRjU3RhdGlzdGljcyIsIl9yZWFkT25seU1lZGlhU3RyZWFtIiwiX3Nlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJfZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQiLCJjb25maWd1cmVGcmFtZVRpbWluZ0luZm9ybWF0aW9uIiwiX3JlYWRPbmx5SXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uRW5hYmxlZCIsImlzRW5hYmxlZCIsIl9yZWFkT25seURlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIiwiZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJfcmVhZE9ubHlSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJyZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0Iiwic2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSIsInNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyIsIlN0b3BwZWQiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0IiwiUGxheWluZyIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJLZWVwIiwiTm9ybWFsIiwiZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInJlbW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIiLCJzdGFydCIsInBhdXNlIiwic3JjT2JqZWN0IiwiSW5pdGlhbGl6aW5nIiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJlbXB0eSIsImRpc3Bvc2FibGVzIiwic2V0Qml0cmF0ZUxpbWl0IiwiY2xlYXJCaXRyYXRlTGltaXQiLCJiaXRyYXRlSW5CaXRzUGVyU2Vjb25kIiwiUmVzZXQiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsInJlYXNvbiIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsImNsZWFuVXBSZXNvdXJjZXMiLCJfcmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJyZXN1bWUiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJfZGlzcG9zZSIsImlzRGlzcG9zZWQiLCJnZXRVcmkiLCJfc3RhcnQiLCJwcm9jZXNzU3RhcnQiLCJfcHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtIiwidmFsaWQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtMiIsIl92YWxpZCIsIl92YWxpZGF0aW9uUmVzdWx0IiwiX0VuY29kZWRTdHJlYW1TaW5rJHZhIiwiX3ZhbGlkMiIsIl92YWxpZGF0aW9uUmVzdWx0MiIsIl9FbmNvZGVkU3RyZWFtU2luayR2YTIiLCJfdmFsaWQzIiwiX3ZhbGlkYXRpb25SZXN1bHQzIiwiaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2siLCJoYXNFbmNvZGVkU3RyZWFtU2luayIsImhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayIsInN0cmVhbVBsYXllciIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIlN0YXJ0aW5nIiwiVW5hdXRob3JpemVkIiwidmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiQ29uZmlndXJhdGlvbkVycm9yIiwidmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luayIsImlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQiLCJVbnN1cHBvcnRlZEZlYXR1cmUiLCJSZWNvdmVyaW5nIiwiY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiY3JlYXRlIiwiQ2xpZW50U3RhcnRFcnJvciIsImF1dG9tYXRpY1JldHJ5T25GYWlsdXJlIiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsIlN0YW5kQnkiLCJPZmZsaW5lIiwiR2VvUmVzdHJpY3RlZCIsIkdlb0Jsb2NrZWQiLCJQYXVzZWQiLCJSZWNvbm5lY3RpbmciLCJUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiX3RoaXM2IiwiZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCIsInNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyIsImRlc3Ryb3lTdHJlYW0iLCJwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwiX3RoaXM3IiwiZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNhcGFiaWxpdHkiLCJjYXBhYmlsaXR5Iiwic2hvdWxkRXh0cmFjdFRpbWVjb2RlIiwic2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMiLCJpc0NoYW5uZWxGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkIiwib3B0aW9uIiwidHJpbSIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM4IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJpbml0aWFsaXplZCIsImNoYW5uZWxPcHRpb25zIiwiZGVmYXVsdFRhcmdldExhZyIsIl9vcHRpb25zJHRhcmdldExhZyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJhcHBseVN0YXR1cyIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsIkJpdHN0cmVhbVJlYWRlciIsIl9kYXRhIiwiX2JpdE9mZnNldCIsInJlYWRCaXRzIiwiYml0c1RvUmVhZCIsImdldFJlbWFpbmluZ0JpdHMiLCJiaXRzUmVtYWluaW5nIiwiYnl0ZU9mZnNldCIsImJpdFBvc2l0aW9uSW5CeXRlIiwiYml0c0F2YWlsYWJsZUluQnl0ZSIsIm1pbiIsIm1hc2siLCJieXRlVmFsdWUiLCJiaXRzIiwic2tpcEJpdHMiLCJiaXRzVG9Ta2lwIiwiRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQiLCJIMjY0Qml0c3RyZWFtIiwiZXZlbnRQdWJsaXNoZXIiLCJfZXZlbnRQdWJsaXNoZXIiLCJzdWJzY3JpYmVUb05hbFVuaXQiLCJuYWxVbml0VHlwZSIsIk5hbFVuaXQiLCJuYWxVbml0RXZlbnQiLCJzdWJzY3JpYmVUb1NlaVBheWxvYWRUeXBlIiwic2VpUGF5bG9hZFR5cGUiLCJTZWlQYXlsb2FkIiwic2VpUGF5bG9hZEV2ZW50Iiwic3Vic2NyaWJlVG9QYXlsb2FkIiwiY29udGV4dCIsInBheWxvYWRVdWlkIiwicHVibGlzaCIsIlBheWxvYWRTdWJzY3JpcHRpb24iLCJQYXlsb2FkIiwicGF5bG9hZEV2ZW50IiwiTmFsVW5pdFR5cGUiLCJTZWlQYXlsb2FkVHlwZSIsIkVtdWxhdGlvblByZXZlbnRpb25CeXRlcyIsIkFubmV4QkJ5dGVTdHJlYW1QYXJzZXIiLCJ2Y2xFeHRyYWN0aW9uU3RyYXRlZ3kiLCJfdmNsRXh0cmFjdGlvblN0cmF0ZWd5Iiwic3Vic2NyaWJlVG9FbmNvZGVkVmlkZW9TdHJlYW1DaHVua0V2ZW50cyIsIkVuY29kZWRWaWRlb1N0cmVhbUNodW5rIiwicGFyc2VFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayIsImNodW5rIiwiaGFuZGxlRXh0cmFjdGVkRGF0YSIsImV4dHJhY3ROYWxVbml0QXRPZmZzZXQiLCJub3RpZnlFbmRPZkNodW5rIiwiYW5uZXhCU3RhcnRDb2RlTGVuZ3RoIiwibmFsVW5pdCIsInNlaVBheWxvYWRzIiwicHVibGlzaE5hbFVuaXQiLCJzZWlQYXlsb2FkIiwiaGFuZGxlU2VpUGF5bG9hZCIsInB1Ymxpc2hTZWlQYXlsb2FkIiwiVXNlckRhdGFVbnJlZ2lzdGVyZWQiLCJoYW5kbGVTZWlQYXlsb2FkVXNlckRhdGFVbnJlZ2lzdGVyZWQiLCJzdWJhcnJheSIsInBheWxvYWREYXRhIiwicHVibGlzaFBheWxvYWQiLCJwYXlsb2FkIiwiRW5kT2ZDaHVuayIsIm5hbFVuaXRIZWFkZXJJbmRleCIsImV4dHJhY3RlZERhdGEiLCJTbGljZUxheWVyTm9uSWRyRGF0YSIsIlNsaWNlRGF0YVBhcnRpdGlvbkFMYXllciIsIlNsaWNlRGF0YVBhcnRpdGlvbkJMYXllciIsIlNsaWNlRGF0YVBhcnRpdGlvbkNMYXllciIsIlNsaWNlTGF5ZXJJZHJEYXRhIiwiZXh0cmFjdFZjbE5hbFVuaXQiLCJTdXBwbGVtZW50YWxFbmhhbmNlbWVudEluZm9ybWF0aW9uIiwiZXh0cmFjdFNlaU5hbFVuaXQiLCJleHRyYWN0Tm9uVmNsTmFsVW5pdCIsIm5hbFVuaXREYXRhIiwiX3NlaVBheWxvYWQ0Qnl0ZUVuZENvZGUiLCJfc2VpUGF5bG9hZDNCeXRlRW5kQ29kZSIsImV4dHJhY3RlZFNlaVBheWxvYWQiLCJleHRyYWN0U2VpUGF5bG9hZCIsInBheWxvYWRUeXBlIiwiZW5kSW5kZXgiLCJuZXh0QW5uZXhCU3RhcnRDb2RlSW5kZXgiLCJmaW5kQW5uZXhCU3RhcnRJbmRleEZyb21PZmZzZXQiLCJmZkNvdW50IiwicGF5bG9hZFNpemUiLCJnZXRPZmZzZXRXaXRoRXhwYW5kZWRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMiLCJpbmRleDQiLCJhbm5leEI0Qnl0ZVN0YXJ0Q29kZSIsImFubmV4QjNCeXRlU3RhcnRDb2RlIiwiVWludDhBcnJheSIsImJ1ZmZlciIsIm51bWJlck9mTm9uRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIiwibGVhZGluZ1plcm9CeXRlcyIsIm51bWJlck9mQnl0ZXNWaXNpdGVkIiwibnVtYmVyT2ZCeXRlc1RvU2VlayIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb25CeXRlcyIsIm91dHB1dCIsIm91dE9mZnNldCIsImVic3BPZmZzZXQiLCJwcmV2ZW50aW9uQnl0ZUlkeCIsIlBpY1N0cnVjdCIsIlBpY3R1cmVUaW1pbmdQYXJzZXIiLCJjb25maWciLCJiaXRzdHJlYW1SZWFkZXIiLCJwaWN0dXJlVGltaW5nIiwicGljU3RydWN0IiwiY3BiRHBiRGVsYXlzUHJlc2VudEZsYWciLCJjcGJSZW1vdmFsRGVsYXlMZW5ndGhNaW51czEiLCJkcGJPdXRwdXREZWxheUxlbmd0aE1pbnVzMSIsInBpY1N0cnVjdFByZXNlbnRGbGFnIiwibnVtQ2xvY2tUUyIsImNvbnZlcnRQaWNTdHJ1Y3RUb051bUNsb2NrVFMiLCJjbG9ja1RpbWVzdGFtcHMiLCJjbG9ja1RpbWVzdGFtcEZsYWciLCJjbG9ja1RpbWVzdGFtcCIsImN0VHlwZSIsIm51aXRGaWVsZEJhc2VkRmxhZyIsImNvdW50aW5nVHlwZSIsImZ1bGxUaW1lc3RhbXBGbGFnIiwiZGlzY29udGludWl0eUZsYWciLCJjbnREcm9wcGVkRmxhZyIsIm5GcmFtZXMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwic2Vjb25kc0ZsYWciLCJtaW51dGVzRmxhZyIsImhvdXJzRmxhZyIsInRpbWVPZmZzZXQiLCJQcm9ncmVzc2l2ZUZyYW1lIiwiVG9wRmllbGQiLCJCb3R0b21GaWVsZCIsIlRvcEZpZWxkQm90dG9tRmllbGQiLCJCb3R0b21GaWVsZFRvcEZpZWxkIiwiRnJhbWVEb3VibGluZyIsIlRvcEZpZWxkQm90dG9tRmllbGRUb3BGaWVsZFJlcGVhdGVkIiwiQm90dG9tRmllbGRUb3BGaWVsZEJvdHRvbUZpZWxkUmVwZWF0ZWQiLCJGcmFtZVRyaXBsaW5nIiwiUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kiLCJuZXh0UG90ZW50aWFsNEJ5dGVTdGFydENvZGVJbmRleCIsIl90cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aCIsIm5leHRQb3RlbnRpYWwzQnl0ZVN0YXJ0Q29kZUluZGV4IiwiVmFuaWxsYVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kiLCJFdmVudFB1Ymxpc2hlciIsIlBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMiLCJIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIiwiUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJCaXRzdHJlYW1EZWNvZGVycyIsImNyZWF0ZUgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJkZWNvZGVyRXZlbnRQdWJsaXNoZXIiLCJiaXRzdHJlYW0iLCJwYXJzZXIiLCJjcmVhdGVQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciIsImgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJlbmNvZGluZyIsIl9iaXRzdHJlYW0iLCJfcGFyc2VyIiwiZGVjb2RlIiwiZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bmsiLCJfaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciIsIl9lbmNvZGluZyIsInN1YnNjcmliZVRvRW1iZWRkZWREYXRhIiwib25EZWNvZGVkTWVkaWFDaHVuayIsInRyYWNrSWQiLCJkZWNvZGVkTWVkaWFDaHVua0V2ZW50Iiwibm9vcCIsIlNldCIsIk1hcCIsImVuYWJsZVdhcm5pbmdMb2dXaGVuVmNsRW1iZWRkZWREYXRhTm90Rm91bmQiLCJfZXhwZWN0ZWRQYXlsb2FkVXVpZCIsIl9waGVuaXhWY2xFbWJlZGRlZERhdGFVdWlkIiwiX3BoZW5peEluaXRpYWxpemF0aW9uU2VnbWVudFV1aWQiLCJzdWJzY3JpYmVUb1BheWxvYWRFdmVudHMiLCJzdWJzY3JpYmVUb1BheWxvYWRTdWJzY3JpcHRpb25FdmVudHMiLCJzdWJzY3JpYmVUb05hbFVuaXRFdmVudHMiLCJfZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZCIsIl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQiLCJjbGVhciIsInN1YnNjcmliZVRvRW5kT2ZDaHVua0V2ZW50cyIsImFybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kIiwiaGFuZGxlTmFsVW5pdEV2ZW50IiwiX3JlZjMiLCJfdHJ1bmNhdGVkVmNsTmFsVW5pdERhdGFCeXRlTGVuZ3RoIiwicHVibGlzaFZjbEVtYmVkZGVkUGF5bG9hZCIsImV4dHJhY3RWY2xFbWJlZGRlZERhdGEiLCJkaXNhcm1Mb2dnaW5nTm9WY2xFbWJlZGRlZERhdGFGb3VuZCIsIl9yZWY0IiwibG9nV2FybmluZ1ZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kIiwiY29udGV4dElkIiwiaGFuZGxlRW5kT2ZFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayIsIl9yZWY1IiwiZW5kT2ZDaHVua0V2ZW50SGFuZGxlciIsImhhbmRsZVBheWxvYWRFdmVudCIsIl9yZWY2IiwiaGFzIiwibG9nV2FybmluZ1VuZXhwZWN0ZWRQYXlsb2FkVXVpZFJlY2VpdmVkT25jZSIsIkV2ZW50RW1pdHRlciIsImVtaXQiLCJldmVudCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJlcnIiLCJmIiwib25FdmVudFdpdGhOb1N1YnNjcmliZXIiLCJvbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXIiLCJfb25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVycyIsImV2ZW50VHlwZSIsImVtaXR0ZXIiLCJfZXZlbnRFbWl0dGVycyIsImNyZWF0ZUVtaXR0ZXIiLCJkaXNwb3NhYmxlTGlzdGVuZXIiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkZvcmNlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsInJlc29sdmVFbmRQb2ludFByb21pc2UiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsImRpc2NvdmVyeVNlcnZpY2UiLCJjYWNoZWRWYWx1ZSIsIl9jYWNoZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiRW5kUG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJyYWNlIiwib2siLCJ0ZXh0IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJmYWlsZWRSZXF1ZXN0cyIsInByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkIiwiX2FyZ3MyIiwiYnVpbGREaXNjb3ZlcnlVcmwiLCJwaW5nIiwidGltZSIsIl9kaXNjb3ZlcnlVcmkiLCJkaXNjb3ZlcnlQYXJhbWV0ZXJzIiwic2VhcmNoUGFyYW1zIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiX3JvdW5kVHJpcFRpbWUiLCJfcGluZyIsImZpbmlzaGVkIiwiYnVpbGRQaW5nVXJsIiwiX3N1YnNjcmliZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJib2R5V2l0aG91dE9mZmVyIiwiaHR0cFJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJidWlsZFVybCIsImJlYXJlclRva2VuIiwiaHR0cFJvdW5kVHJpcFRpbWUiLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9wdWJsaXNoIiwibWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl94NSIsIl94NiIsIl94NyIsInNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJzaGFyZWRTZWNyZXQiLCJtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDgiLCJfeDkiLCJfbGltaXRCaXRyYXRlIiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsIl9hZGRJY2VDYW5kaWRhdGVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9hcmdzNiIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzIiwiX3gxNSIsIl94MTYiLCJfeDE3IiwiX2Rlc3Ryb3lTdHJlYW0iLCJkZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX3gxOCIsIl94MTkiLCJfZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyIiwiY2hhbm5lbENvbnRleHQiLCJmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCIsIl9iaXRzdHJlYW1EZWNvZGVyIiwiX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wIiwiX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzIiwic2V0dXBWaWRlb0V2ZW50TGlzdGVuZXJzIiwiUGljdHVyZVRpbWluZyIsIm9uUGljdHVyZVRpbWluZ0V4dHJhY3RlZCIsInByb2Nlc3NGcmFtZSIsIm1pZCIsImZyYW1lIiwiZnJhbWVUaW1pbmciLCJyZWNlaXZlVGltZXN0YW1wIiwicmVtb3ZlRnJhbWVUaW1pbmdzRXhjZWVkaW5nTWF4Q2FwYWNpdHkiLCJydHBUaW1lc3RhbXAiLCJfcGljdHVyZVRpbWluZyRwaWNTdHIiLCJfcGljdHVyZVRpbWluZyRwaWNTdHIyIiwiX2Nsb2NrVGltZXN0YW1wJGhvdXJzIiwiX2Nsb2NrVGltZXN0YW1wJG1pbnV0IiwiX2Nsb2NrVGltZXN0YW1wJHNlY29uIiwiX3JlZiRjb250ZXh0IiwiX3BpY3R1cmVUaW1pbmdQYXJzZXIiLCJfcGljdHVyaW5nVGltaW5nUGFyc2luZ0NvbmZpZyIsInRpbWVjb2RlIiwiZnJhbWVzIiwiaXNGcmFtZURyb3AiLCJzb3VyY2VUaW1lc3RhbXAiLCJpbmdlc3RUaW1lc3RhbXAiLCJlbmNvZGVUaW1lc3RhbXAiLCJ0cmFuc2NvZGVUaW1lc3RhbXAiLCJwbGF5YmFja1N0YXRlIiwiX2N1cnJlbnRQbGF5YmFja1N0YXRlIiwidmlkZW9GcmFtZUNhbGxiYWNrIiwibWV0YWRhdGEiLCJhcm1WaWRlb0ZyYW1lQ2FsbGJhY2siLCJ0aW1lc3RhbXBzVG9EZWxldGUiLCJfc3RlcCR2YWx1ZSIsIl9zbGljZWRUb0FycmF5IiwiX29iamVjdFNwcmVhZCIsInJlbmRlclRpbWVzdGFtcCIsInBlcmZvcm1hbmNlIiwidGltZU9yaWdpbiIsIl9pIiwiX3RpbWVzdGFtcHNUb0RlbGV0ZSIsImVsZW1lbnRzVG9EZWxldGUiLCJzaXplIiwiTUFYX0ZSQU1FX1RJTUlOR19FTlRSSUVTIiwiaXRlcmF0b3IiLCJrZXlzIiwia2V5VG9EZWxldGUiLCJvblBsYXlpbmciLCJvblBhdXNlIiwib25TdGFsbGVkIiwib25XYWl0aW5nIiwib25FbmRlZCIsIm9uRXJyb3IiLCJfYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZCIsIl90aGlzMiRfY2hhbm5lbENvbnRleCIsImNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjayIsIl90aGlzJF9jaGFubmVsQ29udGV4dCIsIkluc2VydGFibGVTdHJlYW1zIiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJwZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJzdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwicmVxdWlyZXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJhbGwiLCJfcmVmMyQiLCJjbGllbnRPZmZlckRpc2FibGVkIiwic3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIiwic3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJyZXRyeUNhbGxiYWNrIiwibmF2aWdhdG9ySXNPbkxpbmUiLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIm1lZGlhU3RyZWFtUHJvbWlzZSIsIm9uVHJhY2tEaXNhYmxlZCIsInN0cmVhbXMiLCJ0cmFja0xpc3RlbmVyIiwiYW5zd2VyIiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJfcGVlckNvbm5lY3Rpb24kY3VycmUiLCJfdGhpcyRfY2hhbm5lbENvbnRleHQyIiwicGFyc2VkUmVtb3RlRGVzY3JpcHRpb24iLCJyZWNlaXZlcnMiLCJfSW5zZXJ0YWJsZVN0cmVhbXMkY28iLCJjb25maWd1cmVFbmNvZGVkU3RyZWFtUGlwZWxpbmUiLCJlbmNvZGVkVmlkZW9GcmFtZSIsInJlcXVpcmVzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsInRvVXBwZXJDYXNlIiwiZnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIiLCJnZXRWaWRlb1RyYWNrcyIsIl9wZWVyQ29ubmVjdGlvbiRnZXRUciIsInJlY2VpdmVyIiwic3VwcG9ydHNHZXRUcmFuc2NlaXZlcnMiLCJ0cmFuc2NlaXZlciIsIl9JbnNlcnRhYmxlU3RyZWFtcyRjbzIiLCJjb25maWd1cmVJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24iLCJ0cmFuc2Zvcm1lZFN0cmVhbSIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24iLCJydGNTdGF0aXN0aWMiLCJzdGF0aXN0aWNzIiwiYXVkaW8iLCJhdWRpb1RyYWNrRmFpbGVkIiwidmlkZW9UcmFja0ZhaWxlZCIsIl9hcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJvcHRpb25hbFBlZXJDb25uZWN0aW9uIiwibmV3UnRjQ29uZmlndXJhdGlvbiIsIm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfcGVlckNvbm5lY3Rpb24kY3VycmUyIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJSZWFsVGltZVN0cmVhbUZhY3RvcnkiLCJ0b2tlbkNhcGFiaWxpdGllcyIsIm1vZGUiLCJTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIiwiU2tpcEZyYW1lIiwiV29ya2VyVHJhbnNmb3JtU3RyZWFtIiwiZW5jb2RlZEF1ZGlvRnJhbWUiLCJyZWNlaXZlIiwibXVzdFNpbmsiLCJ3b3JrZXIiLCJvbm1lc3NhZ2UiLCJwb3N0TWVzc2FnZSIsImZvcmNlSW52YWxpZEZyYW1lIiwidHJhbnNmb3JtIiwidGVybWluYXRlIiwiZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiY29udHJvbGxlciIsInN1cnJvZ2F0ZSIsImdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZSIsImdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZSIsImdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMiLCJnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjIiwiZW5xdWV1ZSIsInRyYW5zZm9ybWVyIiwiVHJhbnNmb3JtU3RyZWFtIiwicmVjZWl2ZXJTdHJlYW1zIiwic291cmNlIiwicmVhZGFibGUiLCJzaW5rIiwid3JpdGFibGUiLCJwaXBlVGhyb3VnaCIsInBpcGVUbyIsImF1ZGlvUHVtcGVyIiwiQXVkaW8iLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSIsImdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMiLCJpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJ2aWRlb1RyYWNrIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwicmVtb3ZlVHJhY2siLCJhdWRpb1RyYWNrIiwiU3ltYm9sIiwiX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYyIsIk9QVVMiLCJfc2luZ2xlWmVyb0J5dGUiLCJfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciIsIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyIiwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCIsIl9kdW1teTgyeDgySDI2NCIsIklGcmFtZSIsIl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMiLCJIMjY0IiwiVlA4IiwiVlA5IiwiX2lzQW5kcm9pZENocm9tZSIsImdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIiLCJfZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjIiwic2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciIsImJpdE1hc2sxIiwiYml0TWFzazIiLCJiaXRTaGlmdFJpZ2h0QnkxIiwiYml0U2hpZnRMZWZ0Qnk3IiwiYnl0ZTEiLCJieXRlMiIsImNvcHlPZkR1bW15UEZyYW1lcyIsIlBGcmFtZSIsImJ1ZmZlckluZGV4IiwiX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleCIsIl9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIiwiaXNBbmRyb2lkIiwiX2lzTW9iaWxlQ2hyb21lIiwiX2lzU2FmYXJpIiwiX19CVUlMRF9WRVJTSU9OX18iLCJfZGVmYXVsdFZlcnNpb24iLCJUZWxlbWV0cnlTZXJ2aWNlIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJ2YWx1ZU9mIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldEl0ZW1TaXplIiwiZ2V0TG9nU2l6ZSIsInN1bSIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm1pbGxpc2Vjb25kcyIsInBhcnRzIiwiU3RyaW5nIiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0IiwiZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5TZWNvbmRzIiwicmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kIiwibWF4Iiwib3RoZXIiLCJhcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl9uZXR3b3JrTW9uaXRvciIsImlzRm9yZWdyb3VuZCIsInJlY29yZEZvcmVncm91bmRDaGFuZ2UiLCJyZWNvcmROZXR3b3JrUlRUVXBkYXRlIiwicmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUiLCJkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsInJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSIsInRpbWVTaW5jZUxhc3RDaGFuZ2UiLCJuZXdSVFQiLCJvbGRSdHQiLCJfbGFzdE5ldHdvcmtTdGF0aXN0aWNzIiwibmV3TmV0d29ya1R5cGUiLCJvbGROZXR3b3JrVHlwZSIsIm5ld0NhcGFjaXR5Iiwib2xkQ2FwYWNpdHkiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0cmVhbUlkIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiZW5kIiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJzb3VyY2VSb290IjoiIn0=