@getopenpay/openpay-js-react 0.1.11 → 0.1.12

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 (2) hide show
  1. package/dist/index.js +2 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1666,7 +1666,7 @@ const Tr = (e, t, o, r) => {
1666
1666
  google_pay: pe
1667
1667
  }), [an, cn] = C(null);
1668
1668
  J(() => {
1669
- const m = { version: "0.1.11", release_version: "0.1.11" };
1669
+ const m = { version: "0.1.12", release_version: "0.1.12" };
1670
1670
  window.ojs_version = m, console.log("OJS version:", m);
1671
1671
  }, []);
1672
1672
  const ln = Tr(
@@ -1971,4 +1971,4 @@ export {
1971
1971
  y as FieldName,
1972
1972
  gn as useOpenPayElements
1973
1973
  };
1974
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCByZXF1aXJlJCQwLCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggfSBmcm9tICdyZWFjdC9qc3gtcnVudGltZSc7XG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBjb25uZWN0VG9DaGlsZCB9IGZyb20gJ3BlbnBhbCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5jb25zdCBFbGVtZW50c0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgZm9ybUlkOiBcIlwiLFxuICBmb3JtSGVpZ2h0OiBcIlwiLFxuICByZWZlcmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBGUkFNRV9CQVNFX1VSTCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIjtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlID0gei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNvZGU6IHouc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIHBhdGg6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgWm9kRmllbGRFcnJvcnMgPSB6LmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogYENvbm5lY3Rpb24gZXJyb3I6IHBsZWFzZSBkb3VibGUgY2hlY2sgaWYgeW91IGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LCB0aGVuIHRyeSBhZ2FpbmBcbn07XG5jb25zdCBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSA9IChvZ0Vycm9yTWVzc2FnZSkgPT4ge1xuICBjb25zdCBrZXkgPSBvZ0Vycm9yTWVzc2FnZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIE1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0Vba2V5XSA/PyBvZ0Vycm9yTWVzc2FnZTtcbn07XG5jb25zdCBpc1N0cmluZ2lmaWVkSnNvbk9iamVjdCA9IChzdHIpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0cik7XG4gICAgcmV0dXJuIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UocmVzcG9uc2VbMF0ubXNnKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBidWxsZXRlZCA9IHJlc3BvbnNlLm1hcCgoZXJyKSA9PiBg4oCiICR7Z2V0SHVtYW5GcmllbmRseU1lc3NhZ2UoZXJyLm1zZyl9YCkuam9pbihcIlxcblwiKTtcbiAgICByZXR1cm4gYCR7YFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6YH1cbiR7YnVsbGV0ZWR9YDtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMgPSAoZXJyb3JzKSA9PiB7XG4gIGNvbnN0IGxpc3RPZkVycm9ycyA9IGVycm9ycy5tYXAoKGVycikgPT4gYC0gJHtlcnIucGF0aC5qb2luKFwiL1wiKX06ICR7ZXJyLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbiAgcmV0dXJuIGBFbmNvdW50ZXJlZCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7bGlzdE9mRXJyb3JzfWA7XG59O1xuY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGUpID0+IHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGlmIChpc1N0cmluZ2lmaWVkSnNvbk9iamVjdChlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGUubWVzc2FnZSk7XG4gICAgICBpZiAoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZS5zYWZlUGFyc2Uob2JqKS5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yKG9iaik7XG4gICAgICB9IGVsc2UgaWYgKFpvZEZpZWxkRXJyb3JzLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMob2JqKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4gZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbiAgICB9IGNhdGNoIChlMikge1xuICAgICAgcmV0dXJuIGUyICsgXCJcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGUgKyBcIlwiO1xuICB9XG59O1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IEVsZW1lbnRUeXBlID0gei5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6LmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogei5vcHRpb25hbCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6LmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xuY29uc3QgRWxlbWVudEV2ZW50ID0gei5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkc1xufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSlcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpXG59KTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbn0pO1xuY29uc3Qgb3VyQ3VycmVuY3lUb1RoZWlycyA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn07XG5jb25zdCBnZXRMb2FkZWRTdHJpcGUgPSBhc3luYyAocHVibGlzaGFibGVLZXkpID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgICBhd2FpdCBzbGVlcCg1MDApO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIEpTIG5vdCBmb3VuZC5gKTtcbiAgfVxuICBjb25zdCBzdHJpcGUgPSBuZXcgU3RyaXBlKHB1Ymxpc2hhYmxlS2V5KTtcbiAgcmV0dXJuIHN0cmlwZTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVFbGVtZW50cyA9IGFzeW5jIChzdHJpcGVQdWJLZXksIGVsZW1lbnRzT3B0aW9ucykgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogc3RyaXBlLmVsZW1lbnRzKGVsZW1lbnRzT3B0aW9ucyksXG4gICAgc3RyaXBlXG4gIH07XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QgPSBhc3luYyAoc3RyaXBlUHViS2V5LCB0b3RhbEFtb3VudEF0b20sIGN1cnJlbmN5LCBpc0Ftb3VudFBlbmRpbmcsIGlzTGlua09ubHkpID0+IHtcbiAgY29uc29sZS5sb2coaXNMaW5rT25seSk7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIHJlcXVlc3RQYXllck5hbWU6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6IHRydWUsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdIFxuICB9KTtcbiAgcmV0dXJuIHBheW1lbnRSZXF1ZXN0O1xufTtcbmNvbnN0IHNsZWVwID0gKHRpbWVvdXRNcykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7XG4gIH0pO1xufTtcbmNvbnN0IGlzU3RyaXBlSnNQcmVzZW50ID0gKCkgPT4ge1xuICByZXR1cm4gXCJTdHJpcGVcIiBpbiB3aW5kb3c7XG59O1xuY29uc3Qgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QgPSBhc3luYyAocGF5bWVudFJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGNvbmZpcm1QYXltZW50Rmxvd0ZvclN0cmlwZVBSTGVnYWN5ID0gYXN5bmMgKHBheWxvYWQsIHN0cmlwZVBtKSA9PiB7XG4gIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBheWxvYWQubmV4dEFjdGlvbk1ldGFkYXRhO1xuICBpZiAoIXBheWxvYWQucGF5bWVudEZsb3dNZXRhZGF0YSB8fCAhcGF5bG9hZC5wYXltZW50Rmxvd01ldGFkYXRhW1wic3RyaXBlUG1JZFwiXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXltZW50IGZsb3cgbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHBheWxvYWQucGF5bWVudEZsb3dNZXRhZGF0YSl9YCk7XG4gIH1cbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrIHx8ICFuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkobmV4dEFjdGlvbk1ldGFkYXRhKX1gKTtcbiAgfVxuICBpZiAoc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZCAhPT0gcGF5bG9hZC5wYXltZW50Rmxvd01ldGFkYXRhW1wic3RyaXBlUG1JZFwiXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUE0gSUQgbWlzbWF0Y2g6ICR7c3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZH0gIT0gJHtwYXlsb2FkLnBheW1lbnRGbG93TWV0YWRhdGFbXCJzdHJpcGVQbUlkXCJdfWApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHBheWxvYWQucGF5bWVudEZsb3dNZXRhZGF0YVtcInN0cmlwZVBtSWRcIl1cbiAgfSk7XG4gIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJmYWlsXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybVJlc3VsdC5lcnJvci5tZXNzYWdlID8/IGB1bmtub3duYH1gKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcInN1Y2Nlc3NcIik7XG4gIH1cbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBjb25maXJtUGF5bWVudEZsb3dGb3IzRFMgPSBhc3luYyAocGF5bG9hZCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocGF5bG9hZC5uZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBhd2FpdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93KG5leHRBY3Rpb25NZXRhZGF0YSk7XG59O1xuY29uc3QgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0U3RhdHVzID0gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAocmVzdWx0U3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50KTtcbiAgfSBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtID0gKGZvcm1EaXYsIGluaXRpYWxEaWN0KSA9PiB7XG4gIGNvbnN0IGluY2x1ZGVkSW5wdXRzID0gQXJyYXkuZnJvbShmb3JtRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSk7XG4gIGNvbnN0IGV4dHJhRGF0YSA9IGluY2x1ZGVkSW5wdXRzLnJlZHVjZSgoYWNjLCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGlucHV0LmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGFjYztcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiBpbnB1dC52YWx1ZSB9O1xuICB9LCBpbml0aWFsRGljdCA/PyB7fSk7XG4gIHJldHVybiBleHRyYURhdGE7XG59O1xuY29uc3QgY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkID0gKGV2ZW50VHlwZSwgc2Vzc2lvbklkLCBmb3JtRGl2LCBvblZhbGlkYXRpb25FcnJvciwgY2hlY2tvdXRQYXltZW50TWV0aG9kLCBkb05vdFVzZUxlZ2FjeUNDRmxvdywgcGF5bWVudEZsb3dNZXRhZGF0YSkgPT4ge1xuICBjb25zdCBleHRyYURhdGEgPSBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oZm9ybURpdiwge1xuICAgIHR5cGU6IGV2ZW50VHlwZSxcbiAgICBzZXNzaW9uSWQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIHBheW1lbnRGbG93TWV0YWRhdGEsXG4gICAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3dcbiAgfSk7XG4gIGNvbnNvbGUubG9nKGBbZm9ybV0gQ29uc3RydWN0aW5nICR7ZXZlbnRUeXBlfSBwYXlsb2FkOmAsIEpTT04uc3RyaW5naWZ5KGV4dHJhRGF0YSkpO1xuICBpZiAoY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyID09PSBcImFwcGxlX3BheVwiIHx8IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlciA9PT0gXCJnb29nbGVfcGF5XCIgfHwgY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyID09PSBcInN0cmlwZV9saW5rXCIpIHtcbiAgICBpZiAoIWV4dHJhRGF0YVtGaWVsZE5hbWUuWklQX0NPREVdKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIltmb3JtXSBPdmVycmlkaW5nIGVtcHR5IHppcCBjb2RlIChvbmx5IGZvciBnb29nbGUgcGF5LCBhcHBsZSBwYXksIGFuZCBzdHJpcGUgbGluaylcIik7XG4gICAgICBleHRyYURhdGFbRmllbGROYW1lLlpJUF9DT0RFXSA9IFwiMDAwMDBcIjtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGF5bG9hZCA9IFN1Ym1pdEV2ZW50UGF5bG9hZC5zYWZlUGFyc2UoZXh0cmFEYXRhKTtcbiAgaWYgKCFwYXlsb2FkLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBwYXlsb2FkLmVycm9yLmZvcm1hdCgpO1xuICAgIGNvbnN0IGlzc3VlcyA9IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZChmb3JtYXR0ZWQpO1xuICAgIGZvciAoY29uc3QgW2ZpZWxkTmFtZSwgZXJyb3JzXSBvZiBPYmplY3QuZW50cmllcyhpc3N1ZXMpKSB7XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coXCJbZm9ybV0gQ29uc3RydWN0ZWQgcGF5bG9hZCBpbiBGQUlMOlwiLCBwYXlsb2FkLmRhdGEpO1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFwiW2Zvcm1dIENvbnN0cnVjdGVkIHBheWxvYWQ6XCIsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQuZGF0YSkpO1xuICAgIHJldHVybiBwYXlsb2FkLmRhdGE7XG4gIH1cbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5jb25zdCBlbWl0RXZlbnQgPSAodGFyZ2V0LCBmb3JtSWQsIGVsZW1lbnRJZCwgcGF5bG9hZCwgYmFzZVVybCkgPT4ge1xuICBjb25zdCBldmVudCA9IHtcbiAgICBwYXlsb2FkLFxuICAgIG5vbmNlOiB2NCgpLFxuICAgIGZvcm1JZCxcbiAgICBlbGVtZW50SWRcbiAgfTtcbiAgY29uc29sZS5sb2coYFtmb3JtICR7Zm9ybUlkfV0gU2VuZGluZyBldmVudCB0byBjaGlsZCAke2VsZW1lbnRJZH06YCwgZXZlbnQpO1xuICB0YXJnZXQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQpLCBiYXNlVXJsKTtcbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDZGVDb25uZWN0aW9uKGlmcmFtZSkge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZVxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgaXNWYWxpZE9iamVjdCA9IGF3YWl0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QoY29ubmVjdGlvbk9iaik7XG4gIGlmICghaXNSZXN1bHRWYWxpZChjb25uZWN0aW9uT2JqLCBpc1ZhbGlkT2JqZWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0YCk7XG4gIH1cbiAgY29uc29sZS5sb2coXCJbT0pTXSBjb25uZWN0ZWQgdG8gaWZyYW1lXCIsIGlmcmFtZS5pZCk7XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBDREVSZXNwb25zZUVycm9yID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6LmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHouc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHouYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogei5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG56Lm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuXG5jb25zdCBzdW0gPSAoYXJyKSA9PiB7XG4gIHJldHVybiBhcnIucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG59O1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbnZhciBDdXN0b21FcnJvciA9IGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgW2NkZS1jbGllbnRdIEVycm9yIHF1ZXJ5aW5nIENERTogJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hKSA9PiB7XG4gIGNvbnNvbGUubG9nKFwiW2NkZS1jbGllbnRdIFF1ZXJ5aW5nIENERSB3aXRoIHBhdGggYW5kIGNvbm5lY3Rpb246XCIsIGRhdGEudHlwZSwgY2RlQ29ubik7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICBjb25zb2xlLmxvZyhcIltjZGUtY2xpZW50XSBHb3QgcmVzcG9uc2UgZnJvbSBDREU6XCIsIHJlc3BvbnNlKTtcbiAgaWYgKGlzQ0RFUmVzcG9uc2VFcnJvcihyZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgQ2RlRXJyb3IocmVzcG9uc2UpO1xuICB9XG4gIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZShyZXNwb25zZSk7XG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpO1xuICAgIGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHJlc3BvbnNlU2NoZW1hLCBcIkFjdHVhbDpcIiwgcmVzcG9uc2UpO1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuY29uc3QgY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEgPSAodmFsdWUsIHNjaGVtYSkgPT4ge1xuICByZXR1cm4gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzcztcbn07XG5jb25zdCBpc0NERVJlc3BvbnNlRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgcmV0dXJuIENERVJlc3BvbnNlRXJyb3Iuc2FmZVBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlldyA9IGFzeW5jIChjZGVDb25uLCByZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogcmVxdWVzdCB9LCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgZ2V0UHJlZmlsbCA9IGFzeW5jIChjZGVDb25uKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUGF5bWVudEZvcm1QcmVmaWxsKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yUFIgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xufTtcbmNvbnN0IGNvbmZpcm1QYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3Qgd2FpdEZvckZvcm1GaWVsZElucHV0ID0gYXN5bmMgKGZvcm1EaXYsIGZpZWxkTmFtZSwgd2FpdFRpbWVNcykgPT4ge1xuICBjb25zdCBzdGFydFdhaXRUaW1lID0gRGF0ZS5ub3coKTtcbiAgd2FpdFRpbWVNcyA9IHdhaXRUaW1lTXMgPz8gNWUzO1xuICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0V2FpdFRpbWUgPCB3YWl0VGltZU1zKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBmb3JtRGl2LnF1ZXJ5U2VsZWN0b3IoYGlucHV0W2RhdGEtb3BpZD0ke2ZpZWxkTmFtZX1dYCk7XG4gICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICBpZiAoIShtYXRjaCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZTogbWF0Y2hlZCBpbnB1dCBlbGVtZW50IGhhZCB3cm9uZyBjbGFzczogJHttYXRjaC50YWdOYW1lfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH1cbiAgICBhd2FpdCBzbGVlcCgzMDApO1xuICB9XG4gIGNvbnNvbGUud2FybihcIkNhbm5vdCBmaW5kIHByb21vIGNvZGUgaW5wdXRcIik7XG4gIHJldHVybiBudWxsO1xufTtcbmNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgIHNlY3VyZV90b2tlbjogc2VjdXJlVG9rZW4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICB9KTtcbiAgY29uc3QgY3VycmVuY2llcyA9IG5ldyBTZXQoY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5jdXJyZW5jeSkpO1xuICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICB9XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5LFxuICAgIGFtb3VudEF0b21cbiAgfTtcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwcm9tb0NvZGUgPSAhcHJvbW9Db2RlID8gdm9pZCAwIDogcHJvbW9Db2RlO1xuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgfVxufTtcbmNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgaWYgKGFsbENkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgKVxuICApO1xuICByZXR1cm4gcmVzcG9uc2VzO1xufTtcbmNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGVycm9yLCBKU09OLnN0cmluZ2lmeShlcnJvcikpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IHBlcmZvcm1DaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yM2RzU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4pID0+IHtcbiAgY29uc29sZS5sb2coY2hpbGRPcmlnaW4pO1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB0aW1lb3V0OiBDREVfUE9MTElOR19JTlRFUlZBTCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICByZXR1cm4gcmVzdWx0LnN0YXR1cztcbn07XG5cbmNvbnN0IGlzSnNvblN0cmluZyA9IChzdHIpID0+IHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBKU09OLnBhcnNlKHN0cik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzID0gKHNpbXBsZU9qc0Zsb3cpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25DaGVja291dFN0YXJ0ZWQoKTtcbiAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBhd2FpdCBzaW1wbGVPanNGbG93KHBhcmFtcyk7XG4gICAgICBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25DaGVja291dFN1Y2Nlc3MoXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuY3VzdG9tZXJfaWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7Zmxvd1Jlc3VsdH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25DaGVja291dEVycm9yKGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGFkZEVycm9yQ2F0Y2hlckZvckluaXQgPSAoaW5pdCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgaW5pdChwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgIGVycl9fKGVycm9yKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH07XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0uZXJyb3IoYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ1LCBlcnJfXzogZXJyX18kNSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb25cIik7XG5jb25zdCBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7cmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogcmVzcG9uc2UucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59O1xuY29uc3QgZmluZENwbU1hdGNoaW5nVHlwZSA9IChhbGxDUE1zLCB6b2RNb2RlbCkgPT4ge1xuICBjb25zdCBjcG0gPSBhbGxDUE1zLmZpbmQoKGNwbTIpID0+IHpvZE1vZGVsLnNhZmVQYXJzZShjcG0yKS5zdWNjZXNzKTtcbiAgaWYgKCFjcG0pIHtcbiAgICBlcnJfXyQ1KGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpgLCBhbGxDUE1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsYCk7XG4gIH1cbiAgcmV0dXJuIHpvZE1vZGVsLnBhcnNlKGNwbSk7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ0LCBlcnJfXzogZXJyX18kNCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICBjb25zdCBwYXlsb2FkID0gUmVxdWlyZWRGb3JtRmllbGRzLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFwYXlsb2FkLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBwYXlsb2FkLmVycm9yLmZvcm1hdCgpO1xuICAgIGNvbnN0IGlzc3VlcyA9IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZChmb3JtYXR0ZWQpO1xuICAgIGZvciAoY29uc3QgW2ZpZWxkTmFtZSwgZXJyb3JzXSBvZiBPYmplY3QuZW50cmllcyhpc3N1ZXMpKSB7XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kNChgR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNgLCBpc3N1ZXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBwYXlsb2FkLmRhdGE7XG59O1xuY29uc3QgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzID0gKHRva2VuaXplUmVzdWx0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgZm9yIChjb25zdCB0b2tlbml6ZVJlc3VsdCBvZiB0b2tlbml6ZVJlc3VsdHMpIHtcbiAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgIHRva2VuaXplUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBBbGxGaWVsZE5hbWVzLnNhZmVQYXJzZShlcnJvci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBlcnJfXyQ0KGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ZXJyb3IuZWxlbWVudFR5cGV9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcGFyc2VkLmRhdGE7XG4gICAgICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDQoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHRva2VuaXplUmVzdWx0LmVycm9ycyl9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kMywgZXJyX186IGVycl9fJDMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmbG93Q2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVMaW5rQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUxpbmtDcG0pO1xuICAgIGxvZ19fJDMoYFN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gQXJyYXkuZnJvbShjb250ZXh0LmNkZUNvbm5lY3Rpb25zLnZhbHVlcygpKVswXTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDMoYENyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLmApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHsgZWxlbWVudHMsIHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlTGlua0NwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgbG9nX18kMyhgQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLmApO1xuICAgIGNvbnN0IGV4cHJlc3NDaGVja291dEVsZW1lbnQgPSBlbGVtZW50cy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiBpbml0UGFyYW1zPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbW91bnRCdXR0b24gPSAoKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm1vdW50KGAjJHtPSlNfU1RSSVBFX0xJTktfQlROX0lEfWApO1xuICAgIH07XG4gICAgY29uc3QgZGlzbW91bnRCdXR0b24gPSAoKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50LnVubW91bnQoKTtcbiAgICB9O1xuICAgIGlmIChpbml0UGFyYW1zPy5kb05vdE1vdW50T25Jbml0KSB7XG4gICAgICBsb2dfXyQzKGBOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDMoYE1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLmApO1xuICAgICAgbW91bnRCdXR0b24oKTtcbiAgICB9XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNsaWNrXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kMyhcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpO1xuICAgICAgaWYgKGluaXRQYXJhbXM/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICBjb25zdCBzaG91bGRTdWJtaXQgPSBhd2FpdCBpbml0UGFyYW1zLm92ZXJyaWRlTGlua1N1Ym1pdCgpO1xuICAgICAgICBpZiAoIXNob3VsZFN1Ym1pdCkge1xuICAgICAgICAgIGxvZ19fJDMoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQzKFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBldmVudCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJpcGUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGV2ZW50LmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICBlcnJfXyQzKFwiZXJyb3JcIiwgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgZmxvd0NhbGxiYWNrcy5vbkNoZWNrb3V0RXJyb3IocmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kMyhcInBheW1lbnRNZXRob2RcIiwgcmVzdWx0LnBheW1lbnRNZXRob2QpO1xuICAgICAgICBPanNGbG93cy5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUxpbmtDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZmxvd0NhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHJlc3VsdC5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogdHJ1ZSB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b24sXG4gICAgICAgIGRpc21vdW50QnV0dG9uLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgZ2V0RWxlbWVudEJ5SWRBc3luYyhPSlNfU1RSSVBFX0xJTktfQlROX0lEKVxuICAgICAgfVxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVMaW5rRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZmxvd0NhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDMoYFJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gQXJyYXkuZnJvbShjb250ZXh0LmNkZUNvbm5lY3Rpb25zLnZhbHVlcygpKVswXTtcbiAgICBsb2dfXyQzKGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZsb3dDYWxsYmFja3Mub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGxvZ19fJDMoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBjdXN0b21QYXJhbXMuc3RyaXBlUE0uaWRcbiAgICB9KTtcbiAgICBsb2dfXyQzKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgY29uc3Qgb3VyRXhpc3RpbmdQbUlkID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDMoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBvdXJFeGlzdGluZ1BtSWRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDMoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJDMoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgZ2V0RWxlbWVudEJ5SWRBc3luYyA9IChpZCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgY29uc3QgZ2V0RWxlbWVudCA9ICgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXNvbHZlKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZ2V0RWxlbWVudCk7XG4gICAgfVxuICB9O1xuICBnZXRFbGVtZW50KCk7XG59KTtcblxuY29uc3Qgc3R5bGVzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZXttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIjtcblxuY29uc3QgY3JlYXRlQW5kT3BlbkZyYW1lID0gKHVybCkgPT4ge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5cbmZ1bmN0aW9uIHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgaGFuZGxlUG9sbGluZyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5sb2coXCLwn5SEIFBvbGxpbmcgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yM2RzU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4pO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLlwiKTtcbiAgICAgICAgY29uc29sZS5sb2coXCLinqHvuI8gR290IHN0YXR1czpcIiwgc3RhdHVzKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICBvblN1Y2Nlc3Moc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlUG9sbGluZygpO1xuICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVQb2xsaW5nLCBDREVfUE9MTElOR19JTlRFUlZBTCk7XG4gIHJldHVybiBwb2xsaW5nSW50ZXJ2YWw7XG59XG5mdW5jdGlvbiBoYW5kbGVFdmVudHMoe1xuICBlbGVtZW50cyxcbiAgcG9sbGluZ0ludGVydmFsLFxuICByZXNvbHZlXG59KSB7XG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICByZXNvbHZlKFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKTtcbiAgfTtcbiAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICB9O1xuICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xufVxuYXN5bmMgZnVuY3Rpb24gc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICB1cmwsXG4gIGJhc2VVcmxcbn0pIHtcbiAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHN0YXR1cykgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpO1xuICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzPy4oKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhlbGVtZW50cy5pZnJhbWUsIG9uU3VjY2VzcywgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4pO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoeyBjb250ZXh0LCBjaGVja291dFBheW1lbnRNZXRob2QsIG5vbkNkZUZvcm1JbnB1dHMsIGZsb3dDYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kMihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmbG93Q2FsbGJhY2tzLm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyQyKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICB9KTtcbiAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHNcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kMihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtwcmVmaWxsLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDIoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtyZXN1bHQucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kMihg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMihg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENkZUVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5vcmlnaW5hbEVycm9yTWVzc2FnZSA9PT0gXCIzRFNfUkVRVUlSRURcIikge1xuICAgICAgICAgIGxvZ19fJDIoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICBsb2dfXyQyKFwiZXJyb3IucmVzcG9uc2UuaGVhZGVyc1wiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBjb25zdCBzaG91bGRVc2VOZXdGbG93ID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycz8uW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kMihg4pScIG9wLXNob3VsZC11c2UtbmV3LWZsb3c6ICR7c2hvdWxkVXNlTmV3Rmxvd31gKTtcbiAgICAgICAgICBsb2dfXyQyKGDilJwgUGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBpZiAoc2hvdWxkVXNlTmV3Rmxvdykge1xuICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyQyKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3N0YXJ0UGZSZXN1bHQuY2NfcG1faWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kMihg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDIoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7c2hvdWxkVXNlTmV3RmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBzdGFydFBmUmVzdWx0LmNjX3BtX2lkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiAhc2hvdWxkVXNlTmV3Rmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyQyKGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJDIoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGxvZ19fJDIoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJDIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbn07XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0IH0pID0+IHtcbiAgICBsb2dfXyQxKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kMShgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQxKGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQxKGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kMShgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDEoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZmxvd0NhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kMShgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGlmIChjdXN0b21QYXJhbXMucHJvdmlkZXIgIT09IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtjdXN0b21QYXJhbXMucHJvdmlkZXJ9LCBnb3QgJHtjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgIGNvbnN0IHByID0gaW5pdFJlc3VsdC5wcjtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgbG9nX18kMShgT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aGAsIG92ZXJyaWRlKTtcbiAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nKTtcbiAgICB9XG4gICAgbG9nX18kMShgU2hvd2luZyBQUiBkaWFsb2cuLi5gKTtcbiAgICBwci5zaG93KCk7XG4gICAgY29uc3Qgc3RyaXBlUG1BZGRlZEV2ZW50ID0gYXdhaXQgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QocHIpO1xuICAgIGxvZ19fJDEoYFN0cmlwZSBQTSBhZGRlZCBldmVudDpgLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGxvZ19fJDEoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtKG5vbkNkZUZvcm1JbnB1dHMsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgbG9nX18kMShgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDEoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQxKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDEoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtRXZ0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHN0cmlwZVBtRXZ0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJDEoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgdXBkYXRlUHJXaXRoQW1vdW50ID0gKHByLCBhbW91bnQsIGlzUGVuZGluZykgPT4ge1xuICBwci51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IGFtb3VudC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgIH0sXG4gICAgY3VycmVuY3k6IGFtb3VudC5jdXJyZW5jeVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gdHJ1ZSA7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICB9XG4gIGlmIChtYXRjaGVzLmxlbmd0aCAhPT0gMSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNbMF07XG59O1xuY29uc3QgT2pzRmxvd3MgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIHJ1bjogcnVuQ29tbW9uQ2NGbG93XG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVQckZsb3csXG4gICAgcnVuOiBydW5TdHJpcGVQckZsb3dcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVMaW5rRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUxpbmtGbG93XG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyAoeCkge1xuXHRyZXR1cm4geCAmJiB4Ll9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdkZWZhdWx0JykgPyB4WydkZWZhdWx0J10gOiB4O1xufVxuXG52YXIgT2JzZXJ2YWJsZSQyID0ge307XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYnNlcnZhYmxlJDIsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9ic2VydmFibGUkMi5PYnNlcnZhYmxlID0gdm9pZCAwO1xuXG4vLyA9PT0gU3ltYm9sIFN1cHBvcnQgPT09XG5jb25zdCBoYXNTeW1ib2wgPSBuYW1lID0+IEJvb2xlYW4oU3ltYm9sW25hbWVdKTtcblxuY29uc3QgZ2V0U3ltYm9sID0gbmFtZSA9PiBoYXNTeW1ib2wobmFtZSkgPyBTeW1ib2xbbmFtZV0gOiAnQEAnICsgbmFtZTtcblxuY29uc3QgU3ltYm9sSXRlcmF0b3IgPSBnZXRTeW1ib2woJ2l0ZXJhdG9yJyk7XG5jb25zdCBTeW1ib2xPYnNlcnZhYmxlID0gZ2V0U3ltYm9sKCdvYnNlcnZhYmxlJyk7XG5jb25zdCBTeW1ib2xTcGVjaWVzID0gZ2V0U3ltYm9sKCdzcGVjaWVzJyk7IC8vID09PSBBYnN0cmFjdCBPcGVyYXRpb25zID09PVxuXG5mdW5jdGlvbiBnZXRNZXRob2Qob2JqLCBrZXkpIHtcbiAgbGV0IHZhbHVlID0gb2JqW2tleV07XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFNwZWNpZXMob2JqKSB7XG4gIGxldCBjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuXG4gIGlmIChjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICBjdG9yID0gY3RvcltTeW1ib2xTcGVjaWVzXTtcblxuICAgIGlmIChjdG9yID09PSBudWxsKSB7XG4gICAgICBjdG9yID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjdG9yICE9PSB1bmRlZmluZWQgPyBjdG9yIDogT2JzZXJ2YWJsZSQxO1xufVxuXG5mdW5jdGlvbiBpc09ic2VydmFibGUoeCkge1xuICByZXR1cm4geCBpbnN0YW5jZW9mIE9ic2VydmFibGUkMTsgLy8gU1BFQzogQnJhbmQgY2hlY2tcbn1cblxuZnVuY3Rpb24gaG9zdFJlcG9ydEVycm9yKGUpIHtcbiAgaWYgKGhvc3RSZXBvcnRFcnJvci5sb2cpIHtcbiAgICBob3N0UmVwb3J0RXJyb3IubG9nKGUpO1xuICB9IGVsc2Uge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnF1ZXVlKGZuKSB7XG4gIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBmbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhvc3RSZXBvcnRFcnJvcihlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikge1xuICBsZXQgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fY2xlYW51cDtcbiAgaWYgKGNsZWFudXAgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICBzdWJzY3JpcHRpb24uX2NsZWFudXAgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKCFjbGVhbnVwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHVuc3Vic2NyaWJlID0gZ2V0TWV0aG9kKGNsZWFudXAsICd1bnN1YnNjcmliZScpO1xuXG4gICAgICBpZiAodW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdW5zdWJzY3JpYmUuY2FsbChjbGVhbnVwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBob3N0UmVwb3J0RXJyb3IoZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSB7XG4gIHN1YnNjcmlwdGlvbi5fb2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gIHN1YnNjcmlwdGlvbi5fcXVldWUgPSB1bmRlZmluZWQ7XG4gIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAnY2xvc2VkJztcbn1cblxuZnVuY3Rpb24gZmx1c2hTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSB7XG4gIGxldCBxdWV1ZSA9IHN1YnNjcmlwdGlvbi5fcXVldWU7XG5cbiAgaWYgKCFxdWV1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN1YnNjcmlwdGlvbi5fcXVldWUgPSB1bmRlZmluZWQ7XG4gIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAncmVhZHknO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICBub3RpZnlTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uLCBxdWV1ZVtpXS50eXBlLCBxdWV1ZVtpXS52YWx1ZSk7XG4gICAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdjbG9zZWQnKSBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBub3RpZnlTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uLCB0eXBlLCB2YWx1ZSkge1xuICBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ3J1bm5pbmcnO1xuICBsZXQgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX29ic2VydmVyO1xuXG4gIHRyeSB7XG4gICAgbGV0IG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIsIHR5cGUpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgaWYgKG0pIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7ZWxzZSB0aHJvdyB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2NvbXBsZXRlJzpcbiAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgaWYgKG0pIG0uY2FsbChvYnNlcnZlcik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGhvc3RSZXBvcnRFcnJvcihlKTtcbiAgfVxuXG4gIGlmIChzdWJzY3JpcHRpb24uX3N0YXRlID09PSAnY2xvc2VkJykgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO2Vsc2UgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdydW5uaW5nJykgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdyZWFkeSc7XG59XG5cbmZ1bmN0aW9uIG9uTm90aWZ5KHN1YnNjcmlwdGlvbiwgdHlwZSwgdmFsdWUpIHtcbiAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdjbG9zZWQnKSByZXR1cm47XG5cbiAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdidWZmZXJpbmcnKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9xdWV1ZS5wdXNoKHtcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgIT09ICdyZWFkeScpIHtcbiAgICBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ2J1ZmZlcmluZyc7XG4gICAgc3Vic2NyaXB0aW9uLl9xdWV1ZSA9IFt7XG4gICAgICB0eXBlLFxuICAgICAgdmFsdWVcbiAgICB9XTtcbiAgICBlbnF1ZXVlKCgpID0+IGZsdXNoU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKTtcbn1cblxuY2xhc3MgU3Vic2NyaXB0aW9uIHtcbiAgY29uc3RydWN0b3Iob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgICAvLyBBU1NFUlQ6IG9ic2VydmVyIGlzIGFuIG9iamVjdFxuICAgIC8vIEFTU0VSVDogc3Vic2NyaWJlciBpcyBjYWxsYWJsZVxuICAgIHRoaXMuX2NsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICB0aGlzLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdGF0ZSA9ICdpbml0aWFsaXppbmcnO1xuICAgIGxldCBzZWxmID0gdGhpcztcbiAgICBsZXQgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSB7XG4gICAgICBnZXQgY2xvc2VkKCkge1xuICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgPT09ICdjbG9zZWQnO1xuICAgICAgfSxcblxuICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICBvbk5vdGlmeShzZWxmLCAnbmV4dCcsIHZhbHVlKTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKHZhbHVlKSB7XG4gICAgICAgIG9uTm90aWZ5KHNlbGYsICdlcnJvcicsIHZhbHVlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICBvbk5vdGlmeShzZWxmLCAnY29tcGxldGUnKTtcbiAgICAgIH1cblxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fY2xlYW51cCA9IHN1YnNjcmliZXIuY2FsbCh1bmRlZmluZWQsIHN1YnNjcmlwdGlvbk9ic2VydmVyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzdWJzY3JpcHRpb25PYnNlcnZlci5lcnJvcihlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdpbml0aWFsaXppbmcnKSB0aGlzLl9zdGF0ZSA9ICdyZWFkeSc7XG4gIH1cblxuICBnZXQgY2xvc2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PT0gJ2Nsb3NlZCc7XG4gIH1cblxuICB1bnN1YnNjcmliZSgpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdjbG9zZWQnKSB7XG4gICAgICBjbG9zZVN1YnNjcmlwdGlvbih0aGlzKTtcbiAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24odGhpcyk7XG4gICAgfVxuICB9XG5cbn1cblxubGV0IE9ic2VydmFibGUkMSA9IGNsYXNzIE9ic2VydmFibGUge1xuICBjb25zdHJ1Y3RvcihzdWJzY3JpYmVyKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9ic2VydmFibGUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYnNlcnZhYmxlIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbicpO1xuICAgIGlmICh0eXBlb2Ygc3Vic2NyaWJlciAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JzZXJ2YWJsZSBpbml0aWFsaXplciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVyID0gc3Vic2NyaWJlcjtcbiAgfVxuXG4gIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXIgIT09ICdvYmplY3QnIHx8IG9ic2VydmVyID09PSBudWxsKSB7XG4gICAgICBvYnNlcnZlciA9IHtcbiAgICAgICAgbmV4dDogb2JzZXJ2ZXIsXG4gICAgICAgIGVycm9yOiBhcmd1bWVudHNbMV0sXG4gICAgICAgIGNvbXBsZXRlOiBhcmd1bWVudHNbMl1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24ob2JzZXJ2ZXIsIHRoaXMuX3N1YnNjcmliZXIpO1xuICB9XG5cbiAgZm9yRWFjaChmbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZuKHZhbHVlLCBkb25lKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbWFwKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IGZuKHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgfSxcblxuICAgICAgZXJyb3IoZSkge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgfSkpO1xuICB9XG5cbiAgZmlsdGVyKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWZuKHZhbHVlKSkgcmV0dXJuO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICB9LFxuXG4gICAgICBlcnJvcihlKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfSxcblxuICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG5cbiAgICB9KSk7XG4gIH1cblxuICByZWR1Y2UoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICBsZXQgaGFzU2VlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxO1xuICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgIGxldCBzZWVkID0gYXJndW1lbnRzWzFdO1xuICAgIGxldCBhY2MgPSBzZWVkO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB0aGlzLnN1YnNjcmliZSh7XG4gICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgIGxldCBmaXJzdCA9ICFoYXNWYWx1ZTtcbiAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuXG4gICAgICAgIGlmICghZmlyc3QgfHwgaGFzU2VlZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhY2MgPSBmbihhY2MsIHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBlcnJvcihlKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfSxcblxuICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgIGlmICghaGFzVmFsdWUgJiYgIWhhc1NlZWQpIHJldHVybiBvYnNlcnZlci5lcnJvcihuZXcgVHlwZUVycm9yKCdDYW5ub3QgcmVkdWNlIGFuIGVtcHR5IHNlcXVlbmNlJykpO1xuICAgICAgICBvYnNlcnZlci5uZXh0KGFjYyk7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG5cbiAgICB9KSk7XG4gIH1cblxuICBhc3luYyBhbGwoKSB7XG4gICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgIGF3YWl0IHRoaXMuZm9yRWFjaCh2YWx1ZSA9PiB2YWx1ZXMucHVzaCh2YWx1ZSkpO1xuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICBjb25jYXQoLi4uc291cmNlcykge1xuICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbjtcbiAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0TmV4dChuZXh0KSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IG5leHQuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0KHYpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQodik7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gc291cmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhcnROZXh0KEMuZnJvbShzb3VyY2VzW2luZGV4KytdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzdGFydE5leHQodGhpcyk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZmxhdE1hcChmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICBsZXQgc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgICAgbGV0IG91dGVyID0gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGZuKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGZuKHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBpbm5lciA9IEMuZnJvbSh2YWx1ZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBlcnJvcihlKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgIGxldCBpID0gc3Vic2NyaXB0aW9ucy5pbmRleE9mKGlubmVyKTtcbiAgICAgICAgICAgICAgaWYgKGkgPj0gMCkgc3Vic2NyaXB0aW9ucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgIGNvbXBsZXRlSWZEb25lKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goaW5uZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICBjb21wbGV0ZUlmRG9uZSgpO1xuICAgICAgICB9XG5cbiAgICAgIH0pO1xuXG4gICAgICBmdW5jdGlvbiBjb21wbGV0ZUlmRG9uZSgpIHtcbiAgICAgICAgaWYgKG91dGVyLmNsb3NlZCAmJiBzdWJzY3JpcHRpb25zLmxlbmd0aCA9PT0gMCkgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgb3V0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBbU3ltYm9sT2JzZXJ2YWJsZV0oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh4KSB7XG4gICAgbGV0IEMgPSB0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBPYnNlcnZhYmxlO1xuICAgIGlmICh4ID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgIGxldCBtZXRob2QgPSBnZXRNZXRob2QoeCwgU3ltYm9sT2JzZXJ2YWJsZSk7XG5cbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICBsZXQgb2JzZXJ2YWJsZSA9IG1ldGhvZC5jYWxsKHgpO1xuICAgICAgaWYgKE9iamVjdChvYnNlcnZhYmxlKSAhPT0gb2JzZXJ2YWJsZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihvYnNlcnZhYmxlICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICBpZiAoaXNPYnNlcnZhYmxlKG9ic2VydmFibGUpICYmIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMpIHJldHVybiBvYnNlcnZhYmxlO1xuICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1N5bWJvbCgnaXRlcmF0b3InKSkge1xuICAgICAgbWV0aG9kID0gZ2V0TWV0aG9kKHgsIFN5bWJvbEl0ZXJhdG9yKTtcblxuICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgIGVucXVldWUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIG1ldGhvZC5jYWxsKHgpKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbSk7XG4gICAgICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICAgIGVucXVldWUoKCkgPT4ge1xuICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh4W2ldKTtcbiAgICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgbm90IG9ic2VydmFibGUnKTtcbiAgfVxuXG4gIHN0YXRpYyBvZiguLi5pdGVtcykge1xuICAgIGxldCBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogT2JzZXJ2YWJsZTtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tpXSk7XG4gICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldCBbU3ltYm9sU3BlY2llc10oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxufTtcblxuT2JzZXJ2YWJsZSQyLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlJDE7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoT2JzZXJ2YWJsZSQxLCBTeW1ib2woJ2V4dGVuc2lvbnMnKSwge1xuICB2YWx1ZToge1xuICAgIHN5bWJvbDogU3ltYm9sT2JzZXJ2YWJsZSxcbiAgICBob3N0UmVwb3J0RXJyb3JcbiAgfSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxudmFyIHplbk9ic2VydmFibGUgPSBPYnNlcnZhYmxlJDIuT2JzZXJ2YWJsZTtcblxuY29uc3QgT2JzZXJ2YWJsZSA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyh6ZW5PYnNlcnZhYmxlKTtcblxuY29uc3QgeyBsb2dfXywgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1mbG93c1wiKTtcbmNvbnN0IGdldE9qc0luaXRSZXN1bHRzRGVidWdPYmplY3QgPSAoKSA9PiB7XG4gIGlmICghKFwib2pzX2luaXRfcmVzdWx0c1wiIGluIHdpbmRvdykpIHtcbiAgICB3aW5kb3dbXCJvanNfaW5pdF9yZXN1bHRzXCJdID0ge307XG4gIH1cbiAgcmV0dXJuIHdpbmRvd1tcIm9qc19pbml0X3Jlc3VsdHNcIl07XG59O1xuY29uc3QgaW5pdGlhbGl6ZU9qc0Zsb3dzID0gKGNvbnRleHQsIGZsb3dDYWxsYmFja3MpID0+IHtcbiAgY29uc3QgaW5pdFBhcmFtcyA9IHsgY29udGV4dCwgZmxvd0NhbGxiYWNrcyB9O1xuICBjb25zb2xlLmxvZyhcIltPSlNdIGluaXRpYWxpemluZyBPSlMgZmxvd3MuLi5cIik7XG4gIHJldHVybiB7XG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IHJ1bkluaXRGbG93QXNPYnNlcnZhYmxlKFwic3RyaXBlUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdChpbml0UGFyYW1zKSksXG4gICAgLy8gU3RyaXBlIExpbmtcbiAgICBzdHJpcGVMaW5rOiBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZShcInN0cmlwZUxpbmtcIiwgT2pzRmxvd3Muc3RyaXBlTGluay5pbml0KGluaXRQYXJhbXMpKVxuICAgIC8vIPCfkYkgQWRkIGluaXRpYWxpemF0aW9uIGZsb3dzIGhlcmVcbiAgfTtcbn07XG5jb25zdCBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZSA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXM6IFwibG9hZGluZ1wiIH0pO1xuICAgIGluaXRGbG93LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCh7IHN0YXR1czogXCJsb2FkZWRcIiwgcmVzdWx0IH0pO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCh7IHN0YXR1czogXCJlcnJvclwiLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgb2JzZXJ2YWJsZS5zdWJzY3JpYmUoe1xuICAgIG5leHQ6IChyZXN1bHQpID0+IHtcbiAgICAgIGxvZ19fKGAke2Zsb3dOYW1lfSBmbG93IHJlc3VsdGAsIHJlc3VsdCk7XG4gICAgICBnZXRPanNJbml0UmVzdWx0c0RlYnVnT2JqZWN0KClbZmxvd05hbWVdID0gcmVzdWx0O1xuICAgIH0sXG4gICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgZXJyX18oYCR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZXJyb3I6XG4ke0pTT04uc3RyaW5naWZ5KGVycm9yKX1gKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvYnNlcnZhYmxlO1xufTtcblxuY29uc3QgUFJfTE9BRElORyA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5jb25zdCBQUl9FUlJPUiA9IHtcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoZW4gcGF5bWVudCByZXF1ZXN0IGlzIG5vdCBhdmFpbGFibGUuYCk7XG4gIH1cbn07XG5cbnZhciB1c2VBc3luY0VmZmVjdCQyID0ge2V4cG9ydHM6IHt9fTtcblxudmFyIFJlYWN0ID0gcmVxdWlyZSQkMDtcblxuZnVuY3Rpb24gdXNlQXN5bmNFZmZlY3QoZWZmZWN0LCBkZXN0cm95LCBpbnB1dHMpIHtcbiAgdmFyIGhhc0Rlc3Ryb3kgPSB0eXBlb2YgZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJztcblxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQ7XG4gICAgdmFyIG1vdW50ZWQgPSB0cnVlO1xuICAgIHZhciBtYXliZVByb21pc2UgPSBlZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG1vdW50ZWQ7XG4gICAgfSk7XG5cbiAgICBQcm9taXNlLnJlc29sdmUobWF5YmVQcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgbW91bnRlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoaGFzRGVzdHJveSkge1xuICAgICAgICBkZXN0cm95KHJlc3VsdCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgaGFzRGVzdHJveSA/IGlucHV0cyA6IGRlc3Ryb3kpO1xufVxuXG51c2VBc3luY0VmZmVjdCQyLmV4cG9ydHMgPSB1c2VBc3luY0VmZmVjdDtcbnVzZUFzeW5jRWZmZWN0JDIuZXhwb3J0cy51c2VBc3luY0VmZmVjdCA9IHVzZUFzeW5jRWZmZWN0O1xuXG52YXIgdXNlQXN5bmNFZmZlY3RFeHBvcnRzID0gdXNlQXN5bmNFZmZlY3QkMi5leHBvcnRzO1xuY29uc3QgdXNlQXN5bmNFZmZlY3QkMSA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyh1c2VBc3luY0VmZmVjdEV4cG9ydHMpO1xuXG5mdW5jdGlvbiB1c2VUaW1lb3V0Rm4oZm4sIG1zID0gMCkge1xuICBjb25zdCByZWFkeSA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHRpbWVvdXQgPSB1c2VSZWYoKTtcbiAgY29uc3QgY2FsbGJhY2sgPSB1c2VSZWYoZm4pO1xuICBjb25zdCBpc1JlYWR5ID0gdXNlQ2FsbGJhY2soKCkgPT4gcmVhZHkuY3VycmVudCwgW10pO1xuICBjb25zdCBzZXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmVhZHkuY3VycmVudCA9IGZhbHNlO1xuICAgIHRpbWVvdXQuY3VycmVudCAmJiBjbGVhclRpbWVvdXQodGltZW91dC5jdXJyZW50KTtcbiAgICB0aW1lb3V0LmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlYWR5LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgY2FsbGJhY2suY3VycmVudCgpO1xuICAgIH0sIG1zKTtcbiAgfSwgW21zXSk7XG4gIGNvbnN0IGNsZWFyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJlYWR5LmN1cnJlbnQgPSBudWxsO1xuICAgIHRpbWVvdXQuY3VycmVudCAmJiBjbGVhclRpbWVvdXQodGltZW91dC5jdXJyZW50KTtcbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNhbGxiYWNrLmN1cnJlbnQgPSBmbjtcbiAgfSwgW2ZuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0KCk7XG4gICAgcmV0dXJuIGNsZWFyO1xuICB9LCBbbXNdKTtcbiAgcmV0dXJuIFtpc1JlYWR5LCBjbGVhciwgc2V0XTtcbn1cblxuZnVuY3Rpb24gdXNlRGVib3VuY2UoZm4sIG1zID0gMCwgZGVwcyA9IFtdKSB7XG4gIGNvbnN0IFtpc1JlYWR5LCBjYW5jZWwsIHJlc2V0XSA9IHVzZVRpbWVvdXRGbihmbiwgbXMpO1xuICB1c2VFZmZlY3QocmVzZXQsIGRlcHMpO1xuICByZXR1cm4gW2lzUmVhZHksIGNhbmNlbF07XG59XG5cbmNvbnN0IHVzZUR5bmFtaWNQcmV2aWV3ID0gKGlzRW5hYmxlZCwgY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGZvcm1EaXYpID0+IHtcbiAgY29uc3QgW3Byb21vQ29kZUlucHV0LCBzZXRQcm9tb0NvZGVJbnB1dF0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgY29uc3QgW3Byb21vQ29kZURlYm91bmNlZCwgc2V0UHJvbW9Db2RlRGVib3VuY2VkXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbcHJldmlld0FtdCwgc2V0UHJldmlld0FtdF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2lzUHJldmlld0xvYWRpbmcsIHNldElzUHJldmlld0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcHJldmlld0Vycm9yLCBzZXRQcmV2aWV3RXJyb3JdID0gdXNlU3RhdGUobnVsbCk7XG4gIHVzZUFzeW5jRWZmZWN0JDEoYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZm9ybURpdiB8fCAhaXNFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb21vQ29kZUlucHV0MiA9IGF3YWl0IHdhaXRGb3JGb3JtRmllbGRJbnB1dChmb3JtRGl2LCBGaWVsZE5hbWUuUFJPTU9USU9OX0NPREUpO1xuICAgIHByb21vQ29kZUlucHV0Mj8uYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsICgpID0+IHtcbiAgICAgIHNldElzUHJldmlld0xvYWRpbmcodHJ1ZSk7XG4gICAgICBzZXRQcmV2aWV3RXJyb3IobnVsbCk7XG4gICAgICBzZXRQcm9tb0NvZGVJbnB1dChwcm9tb0NvZGVJbnB1dDIudmFsdWUpO1xuICAgIH0pO1xuICB9LCBbISFmb3JtRGl2LCBpc0VuYWJsZWRdKTtcbiAgdXNlRGVib3VuY2UoXG4gICAgKCkgPT4ge1xuICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0UHJvbW9Db2RlRGVib3VuY2VkKHByb21vQ29kZUlucHV0KTtcbiAgICB9LFxuICAgIDFlMyxcbiAgICBbcHJvbW9Db2RlSW5wdXQsIGlzRW5hYmxlZF1cbiAgKTtcbiAgdXNlQXN5bmNFZmZlY3QkMShcbiAgICBhc3luYyAoaXNNb3VudGVkKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWNkZUNvbm4gfHwgIXNlY3VyZVRva2VuIHx8ICFpc0VuYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoY2RlQ29ubik7XG4gICAgICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgICAgIGNvbnN0IHByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGVEZWJvdW5jZWQpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlt1c2VEeW5hbWljUHJldmlld10gUXVlcnlpbmcuIFByb21vIGNvZGU6XCIsIHByb21vQ29kZURlYm91bmNlZCk7XG4gICAgICAgIGlmIChpc01vdW50ZWQoKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiW3VzZUR5bmFtaWNQcmV2aWV3XSBTZXR0aW5nIHByZXZpZXc6XCIsIHByb21vQ29kZURlYm91bmNlZCwgcHJldmlldyk7XG4gICAgICAgICAgc2V0UHJldmlld0Vycm9yKG51bGwpO1xuICAgICAgICAgIHNldFByZXZpZXdBbXQocHJldmlldyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJbdXNlRHluYW1pY1ByZXZpZXddIERpc2NhcmRpbmc6XCIsIHByZXZpZXcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChpc01vdW50ZWQoKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFt1c2VEeW5hbWljUHJldmlld10gRXJyb3IgZG9pbmcgcHJldmlld2AsIGdldEVycm9yTWVzc2FnZShlKSk7XG4gICAgICAgICAgc2V0UHJldmlld0Vycm9yKGdldEVycm9yTWVzc2FnZShlKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChpc01vdW50ZWQoKSkge1xuICAgICAgICAgIHNldElzUHJldmlld0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbIWNkZUNvbm4sICFzZWN1cmVUb2tlbiwgcHJvbW9Db2RlRGVib3VuY2VkLCBpc0VuYWJsZWRdXG4gICk7XG4gIHJldHVybiB7XG4gICAgYW1vdW50OiBwcmV2aWV3QW10LFxuICAgIGlzTG9hZGluZzogaXNQcmV2aWV3TG9hZGluZyxcbiAgICBlcnJvcjogcHJldmlld0Vycm9yXG4gIH07XG59O1xuXG5jb25zdCB1c2VNYXAgPSAoaW5pdGlhbE1hcCA9IHt9KSA9PiB7XG4gIGNvbnN0IFttYXAsIHNldF0gPSB1c2VTdGF0ZShpbml0aWFsTWFwKTtcbiAgY29uc3Qgc3RhYmxlQWN0aW9ucyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHNldDogKGtleSwgZW50cnkpID0+IHtcbiAgICAgICAgc2V0KChwcmV2TWFwKSA9PiAoe1xuICAgICAgICAgIC4uLnByZXZNYXAsXG4gICAgICAgICAgW2tleV06IGVudHJ5XG4gICAgICAgIH0pKTtcbiAgICAgIH0sXG4gICAgICBzZXRBbGw6IChuZXdNYXApID0+IHtcbiAgICAgICAgc2V0KG5ld01hcCk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlOiAoa2V5KSA9PiB7XG4gICAgICAgIHNldCgocHJldk1hcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgW2tleV06IG9taXQsIC4uLnJlc3QgfSA9IHByZXZNYXA7XG4gICAgICAgICAgcmV0dXJuIHJlc3Q7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJlc2V0OiAoKSA9PiBzZXQoaW5pdGlhbE1hcClcbiAgICB9KSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW3NldF1cbiAgKTtcbiAgY29uc3QgdXRpbHMgPSB7XG4gICAgZ2V0OiB1c2VDYWxsYmFjaygoa2V5KSA9PiBtYXBba2V5XSwgW21hcF0pLFxuICAgIC4uLnN0YWJsZUFjdGlvbnNcbiAgfTtcbiAgcmV0dXJuIFttYXAsIHV0aWxzXTtcbn07XG5cbmNvbnN0IHVzZUNkZUNvbm5lY3Rpb24gPSAoKSA9PiB7XG4gIGNvbnN0IFtudW1DZGVDb25ucywgc2V0TnVtQ2RlQ29ubnNdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtjZGVDb25ucywgY2RlQ29ubnNTZXR0ZXJdID0gdXNlTWFwKHtcbiAgICBjYXJkOiB2b2lkIDAsXG4gICAgXCJjYXJkLWN2Y1wiOiB2b2lkIDAsXG4gICAgXCJjYXJkLWV4cGlyeVwiOiB2b2lkIDAsXG4gICAgXCJjYXJkLW51bWJlclwiOiB2b2lkIDBcbiAgfSk7XG4gIGNvbnN0IGFueUNkZUNvbm4gPSBPYmplY3QudmFsdWVzKGNkZUNvbm5zKS5maWx0ZXIoKGNkZUNvbm4pID0+IGNkZUNvbm4gIT09IHZvaWQgMClbMF0gPz8gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBjZGVDb25ucyxcbiAgICBhbnlDZGVDb25uLFxuICAgIGNvbm5lY3RUb0NkZUlmcmFtZTogYXN5bmMgKGVsZW1lbnRUeXBlLCBpZnJhbWUpID0+IHtcbiAgICAgIGNkZUNvbm5zU2V0dGVyLnNldChlbGVtZW50VHlwZSwgYXdhaXQgY3JlYXRlQ2RlQ29ubmVjdGlvbihpZnJhbWUpKTtcbiAgICAgIHNldE51bUNkZUNvbm5zKE9iamVjdC52YWx1ZXMoY2RlQ29ubnMpLmxlbmd0aCk7XG4gICAgfSxcbiAgICBudW1DZGVDb25uc1xuICB9O1xufTtcbmNvbnN0IGdldEVsZW1lbnRUeXBlRnJvbUlmcmFtZUlkID0gKGlmcmFtZUlkKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRUeXBlID0gaWZyYW1lSWQucmVwbGFjZShcIm9qcy1cIiwgXCJcIikucmVwbGFjZShcIi1lbGVtZW50XCIsIFwiXCIpO1xuICBjb25zdCBwYXJzZWQgPSBFbGVtZW50VHlwZS5zYWZlUGFyc2UoZWxlbWVudFR5cGUpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZWxlbWVudCBpZDogJHtpZnJhbWVJZH0sIGl0IG5lZWRzIHRvIGJlIGluIHRoZSBmb3JtYXQgXCJvanMte2VsZW1lbnRUeXBlfS1lbGVtZW50XCIgKGUuZy4gXCJvanMtY2FyZC1udW1iZXItZWxlbWVudFwiKWBcbiAgICApO1xuICB9XG4gIHJldHVybiBwYXJzZWQuZGF0YTtcbn07XG5cbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICBjbGFzc05hbWUsXG4gICAgb25Gb2N1cyxcbiAgICBvbkJsdXIsXG4gICAgb25DaGFuZ2UsXG4gICAgb25Mb2FkLFxuICAgIG9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgYmFzZVVybCxcbiAgICBlbmFibGVEeW5hbWljUHJldmlld3MsXG4gICAgY3VzdG9tSW5pdFBhcmFtc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGZyYW1lQmFzZVVybCA9IGJhc2VVcmwgPz8gRlJBTUVfQkFTRV9VUkw7XG4gIGNvbnN0IFtyZWZlcmVyLCBzZXRSZWZlcmVyXSA9IHVzZVN0YXRlKHZvaWQgMCk7XG4gIGNvbnN0IFtub25jZXMsIHNldE5vbmNlc10gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtmb3JtSGVpZ2h0LCBzZXRGb3JtSGVpZ2h0XSA9IHVzZVN0YXRlKFwiMXB4XCIpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZXh0cmFEYXRhLCBzZXRFeHRyYURhdGFdID0gdXNlU3RhdGUodm9pZCAwKTtcbiAgY29uc3QgW3ByZXZlbnRDbG9zZSwgc2V0UHJldmVudENsb3NlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lmcmFtZXMsIHNldElmcmFtZXNdID0gdXNlU3RhdGUoW10pO1xuICBjb25zdCBbZXZlbnRUYXJnZXRzLCBzZXRFdmVudFRhcmdldHNdID0gdXNlU3RhdGUoe30pO1xuICBjb25zdCBbdG9rZW5pemVkLCBzZXRUb2tlbml6ZWRdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtjaGVja291dEZpcmVkLCBzZXRDaGVja291dEZpcmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nlc3Npb25JZCwgc2V0U2Vzc2lvbklkXSA9IHVzZVN0YXRlKHZvaWQgMCk7XG4gIGNvbnN0IFtjdXJyZW5jeSwgc2V0Q3VycmVuY3ldID0gdXNlU3RhdGUodm9pZCAwKTtcbiAgY29uc3QgW3RvdGFsQW1vdW50QXRvbXMsIHNldFRvdGFsQW1vdW50QXRvbXNdID0gdXNlU3RhdGUodm9pZCAwKTtcbiAgY29uc3QgW2NoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHNldENoZWNrb3V0UGF5bWVudE1ldGhvZHNdID0gdXNlU3RhdGUodm9pZCAwKTtcbiAgY29uc3QgW3N0cmlwZVBtXSA9IHVzZVN0YXRlKHZvaWQgMCk7XG4gIGNvbnN0IGZvcm1JZCA9IHVzZU1lbW8oKCkgPT4gYG9wanMtZm9ybS0ke3Y0KCl9YCwgW10pO1xuICBjb25zdCBmb3JtUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCB7IGNkZUNvbm5zLCBhbnlDZGVDb25uLCBjb25uZWN0VG9DZGVJZnJhbWUsIG51bUNkZUNvbm5zIH0gPSB1c2VDZGVDb25uZWN0aW9uKCk7XG4gIGNvbnN0IFtvanNGbG93c0luaXRpYWxpemF0aW9uLCBzZXRPanNGbG93c0luaXRpYWxpemF0aW9uXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlTWFwKHtcbiAgICBhcHBsZV9wYXk6IFBSX0xPQURJTkcsXG4gICAgZ29vZ2xlX3BheTogUFJfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvanNfdmVyc2lvbiA9IHsgdmVyc2lvbjogXCIwLjEuMTFcIiwgcmVsZWFzZV92ZXJzaW9uOiBcIjAuMS4xMVwiIH07XG4gICAgd2luZG93W1wib2pzX3ZlcnNpb25cIl0gPSBvanNfdmVyc2lvbjtcbiAgICBjb25zb2xlLmxvZyhcIk9KUyB2ZXJzaW9uOlwiLCBvanNfdmVyc2lvbik7XG4gIH0sIFtdKTtcbiAgY29uc3QgZHluYW1pY1ByZXZpZXcgPSB1c2VEeW5hbWljUHJldmlldyhcbiAgICBlbmFibGVEeW5hbWljUHJldmlld3MgPz8gZmFsc2UsXG4gICAgYW55Q2RlQ29ubixcbiAgICBjaGVja291dFNlY3VyZVRva2VuLFxuICAgIGZvcm1SZWYuY3VycmVudFxuICApO1xuICBjb25zdCBvbk1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IGZyYW1lQmFzZVVybCkgcmV0dXJuO1xuICAgICAgaWYgKCFldmVudC5zb3VyY2UpIHJldHVybjtcbiAgICAgIGNvbnN0IGV2ZW50U291cmNlID0gZXZlbnQuc291cmNlO1xuICAgICAgaWYgKCFpc0pzb25TdHJpbmcoZXZlbnQuZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmF3ID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKHJhdyk7XG4gICAgICBjb25zdCBlbGVtZW50SWQgPSBldmVudERhdGEuZWxlbWVudElkO1xuICAgICAgY29uc3QgdGFyZ2V0Rm9ybUlkID0gZXZlbnREYXRhLmZvcm1JZDtcbiAgICAgIGlmICh0YXJnZXRGb3JtSWQgIT09IGZvcm1JZCB8fCAhZWxlbWVudElkKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnREYXRhLm5vbmNlIGluIG5vbmNlcykge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXROb25jZXMoKHByZXZOb25jZXMpID0+IFsuLi5wcmV2Tm9uY2VzLCBldmVudERhdGEubm9uY2VdKTtcbiAgICAgIGNvbnN0IGV2ZW50UGF5bG9hZCA9IGV2ZW50RGF0YS5wYXlsb2FkO1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRQYXlsb2FkLnR5cGU7XG4gICAgICBjb25zb2xlLmxvZyhgW2Zvcm1dIFJlY2VpdmVkICR7ZXZlbnRUeXBlfSBldmVudCBmcm9tICR7ZWxlbWVudElkfTpgLCBldmVudERhdGEucGF5bG9hZCk7XG4gICAgICBpZiAoZXZlbnRUeXBlID09PSBFdmVudFR5cGUuZW51bS5MQVlPVVQpIHtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZXZlbnRQYXlsb2FkLmhlaWdodCA/IGAke2V2ZW50UGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCI7XG4gICAgICAgIHNldEZvcm1IZWlnaHQoaGVpZ2h0KTtcbiAgICAgICAgY29uc29sZS5sb2coYFtmb3JtXSBFbGVtZW50IGhlaWdodCBzZXQgdG86ICR7aGVpZ2h0fWApO1xuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkZPQ1VTICYmICEhb25Gb2N1cykge1xuICAgICAgICBvbkZvY3VzKGV2ZW50RGF0YS5lbGVtZW50SWQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkJMVVIgJiYgISFvbkJsdXIpIHtcbiAgICAgICAgb25CbHVyKGV2ZW50RGF0YS5lbGVtZW50SWQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkNIQU5HRSAmJiAhIW9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKGV2ZW50RGF0YS5lbGVtZW50SWQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkxPQURFRCkge1xuICAgICAgICBjb25zdCBtYXRjaGluZ0lmcmFtZSA9IGlmcmFtZXMuZmluZCgoaWZyYW1lKSA9PiBpZnJhbWUuY29udGVudFdpbmRvdyA9PT0gZXZlbnRTb3VyY2UpO1xuICAgICAgICBzZXRQcmV2ZW50Q2xvc2UoZmFsc2UpO1xuICAgICAgICBpZiAoIW1hdGNoaW5nSWZyYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIExPQURFRCBldmVudCBmcm9tIHVucmVnaXN0ZXJlZCBpZnJhbWU6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldEV2ZW50VGFyZ2V0cygocHJldlRhcmdldHMpID0+ICh7IC4uLnByZXZUYXJnZXRzLCBbZWxlbWVudElkXTogZXZlbnRTb3VyY2UgfSkpO1xuICAgICAgICBzZXRUb3RhbEFtb3VudEF0b21zKGV2ZW50UGF5bG9hZC50b3RhbEFtb3VudEF0b21zKTtcbiAgICAgICAgc2V0Q3VycmVuY3koZXZlbnRQYXlsb2FkLmN1cnJlbmN5KTtcbiAgICAgICAgc2V0Q2hlY2tvdXRQYXltZW50TWV0aG9kcyhldmVudFBheWxvYWQuY2hlY2tvdXRQYXltZW50TWV0aG9kcyk7XG4gICAgICAgIGlmICghc2Vzc2lvbklkKSBzZXRTZXNzaW9uSWQoZXZlbnRQYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbZm9ybV0gRWxlbWVudCBsb2FkZWQgd2l0aCBwcmVmaWxsIGRhdGE6YCwgZXZlbnRQYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVEFSVEVEKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiW2Zvcm1dIFRva2VuaXphdGlvbiBzdGFydGVkXCIpO1xuICAgICAgICBzZXRQcmV2ZW50Q2xvc2UodHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1RBUlRFRCkge1xuICAgICAgICBpZiAob25DaGVja291dFN0YXJ0ZWQpIG9uQ2hlY2tvdXRTdGFydGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpIHtcbiAgICAgICAgaWYgKCFleHRyYURhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4dHJhRGF0YSBub3QgcG9wdWxhdGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhbnlDZGVDb25uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgY29ubmVjdGVkIHRvIENERWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZpcm1QYXltZW50RmxvdyQxID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHRBY3Rpb25UeXBlID0gZXZlbnRQYXlsb2FkLm5leHRBY3Rpb25NZXRhZGF0YVtcInR5cGVcIl07XG4gICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gQ29uZmlybSBwYXltZW50IGZsb3c6IG5leHQgYWN0aW9uczpcIiwgZXZlbnRQYXlsb2FkLm5leHRBY3Rpb25NZXRhZGF0YSk7XG4gICAgICAgICAgaWYgKG5leHRBY3Rpb25UeXBlID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiW2Zvcm1dIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IChOby1vcClcIik7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aW9uVHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiW2Zvcm1dIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IChTdHJpcGUgM0RTXCIpO1xuICAgICAgICAgICAgYXdhaXQgY29uZmlybVBheW1lbnRGbG93Rm9yM0RTKGV2ZW50UGF5bG9hZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aW9uVHlwZSA9PT0gXCJzdHJpcGVfcGF5bWVudF9yZXF1ZXN0XCIpIHtcbiAgICAgICAgICAgIGlmICghc3RyaXBlUG0pIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgUE0gbm90IHNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gQ29uZmlybWluZyBwYXltZW50IGZsb3cgKFN0cmlwZSBQUilcIik7XG4gICAgICAgICAgICBhd2FpdCBjb25maXJtUGF5bWVudEZsb3dGb3JTdHJpcGVQUkxlZ2FjeShldmVudFBheWxvYWQsIHN0cmlwZVBtKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG5leHQgYWN0aW9uIHR5cGU6ICR7bmV4dEFjdGlvblR5cGV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm4pO1xuICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgY29uc3QgeyBwYXltZW50X21ldGhvZHMgfSA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGV4dHJhRGF0YS5leGlzdGluZ0NDUE1JZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtwYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gUEYgc2V0dXAgcGF5bWVudCBtZXRob2QgY29tcGxldGU6XCIsIHBheW1lbnRfbWV0aG9kcyk7XG4gICAgICAgICAgICBzZXRQcmV2ZW50Q2xvc2UoZmFsc2UpO1xuICAgICAgICAgICAgc2V0VG9rZW5pemVkKDApO1xuICAgICAgICAgICAgc2V0Q2hlY2tvdXRGaXJlZChmYWxzZSk7XG4gICAgICAgICAgICBpZiAob25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKSB7XG4gICAgICAgICAgICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhwYXltZW50X21ldGhvZHNbMF0uaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcHJvY2VlZFRvQ2hlY2tvdXQ6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwcm9jZWVkVG9DaGVja291dDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbmZpcm1QYXltZW50RmxvdyQxKCkudGhlbigoeyBwcm9jZWVkVG9DaGVja291dCB9KSA9PiB7XG4gICAgICAgICAgaWYgKCFwcm9jZWVkVG9DaGVja291dCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gTk9UIHByb2NlZWRpbmcgdG8gY2hlY2tvdXQgYWZ0ZXIgY29uZmlybWF0aW9uLlwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gU3RhcnRpbmcgY2hlY2tvdXQgZnJvbSBwYXltZW50IGZsb3cuXCIpO1xuICAgICAgICAgIGxldCBleGlzdGluZ0NDUE1JZDtcbiAgICAgICAgICBpZiAoZXh0cmFEYXRhLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlciA9PT0gXCJjcmVkaXRfY2FyZFwiKSB7XG4gICAgICAgICAgICBleGlzdGluZ0NDUE1JZCA9IGV2ZW50UGF5bG9hZC5zdGFydFBGTWV0YWRhdGE/LmNjX3BtX2lkO1xuICAgICAgICAgICAgaWYgKCFleGlzdGluZ0NDUE1JZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENDIFBNIElEIG5vdCBmb3VuZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbWl0RXZlbnQoXG4gICAgICAgICAgICBldmVudFNvdXJjZSxcbiAgICAgICAgICAgIGZvcm1JZCxcbiAgICAgICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgICAgIHsgLi4uZXh0cmFEYXRhLCB0eXBlOiBcIkNIRUNLT1VUXCIsIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB0cnVlLCBleGlzdGluZ0NDUE1JZCB9LFxuICAgICAgICAgICAgZnJhbWVCYXNlVXJsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZXRDaGVja291dEZpcmVkKHRydWUpO1xuICAgICAgICAgIHNldEV4dHJhRGF0YSh2b2lkIDApO1xuICAgICAgICAgIGlmIChvbkNoZWNrb3V0U3RhcnRlZCkgb25DaGVja291dFN0YXJ0ZWQoKTtcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIltmb3JtXSBDb25maXJtYXRpb24gcGF5bWVudCBmbG93IGVycm9yXCIpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgY29uc3QgZXJyTXNnID0gZ2V0RXJyb3JNZXNzYWdlKGUpO1xuICAgICAgICAgIHNldFByZXZlbnRDbG9zZShmYWxzZSk7XG4gICAgICAgICAgc2V0Q2hlY2tvdXRGaXJlZChmYWxzZSk7XG4gICAgICAgICAgaWYgKG9uQ2hlY2tvdXRFcnJvcikgb25DaGVja291dEVycm9yKGVyck1zZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MgJiYgISFleHRyYURhdGEpIHtcbiAgICAgICAgY29uc3QgdG90YWxUb2tlbml6ZWQgPSB0b2tlbml6ZWQgKyAxO1xuICAgICAgICBjb25zdCBhbGxUb2tlbml6ZWQgPSB0b3RhbFRva2VuaXplZCA9PT0gT2JqZWN0LmtleXMoZXZlbnRUYXJnZXRzKS5sZW5ndGg7XG4gICAgICAgIGlmICghY2hlY2tvdXRGaXJlZCAmJiAoYWxsVG9rZW5pemVkIHx8IGV2ZW50UGF5bG9hZC5pc1JlYWR5Rm9yQ2hlY2tvdXQpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gVG9rZW5pemVkIGNhcmQgaXMgcmVhZHkgZm9yIGNoZWNrb3V0XCIpO1xuICAgICAgICAgIGVtaXRFdmVudChldmVudFNvdXJjZSwgZm9ybUlkLCBlbGVtZW50SWQsIGV4dHJhRGF0YSwgZnJhbWVCYXNlVXJsKTtcbiAgICAgICAgICBzZXRDaGVja291dEZpcmVkKHRydWUpO1xuICAgICAgICAgIHNldEV4dHJhRGF0YSh2b2lkIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbZm9ybV0gRWxlbWVudCAke2VsZW1lbnRJZH0gZmluaXNoZWQgdG9rZW5pemF0aW9uIGJ1dCBjYXJkIG5vdCB5ZXQgcmVhZHkgZm9yIGNoZWNrb3V0YCk7XG4gICAgICAgICAgc2V0VG9rZW5pemVkKHRvdGFsVG9rZW5pemVkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gQ2hlY2tvdXQgY29tcGxldGU6XCIsIGV2ZW50UGF5bG9hZCk7XG4gICAgICAgIHNldFByZXZlbnRDbG9zZShmYWxzZSk7XG4gICAgICAgIHNldFRva2VuaXplZCgwKTtcbiAgICAgICAgc2V0Q2hlY2tvdXRGaXJlZChmYWxzZSk7XG4gICAgICAgIGlmIChvbkNoZWNrb3V0U3VjY2Vzcykge1xuICAgICAgICAgIG9uQ2hlY2tvdXRTdWNjZXNzKGV2ZW50UGF5bG9hZC5pbnZvaWNlVXJscywgZXZlbnRQYXlsb2FkLnN1YnNjcmlwdGlvbklkcywgZXZlbnRQYXlsb2FkLmN1c3RvbWVySWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIltmb3JtXSBTZXR1cCBwYXltZW50IG1ldGhvZCBjb21wbGV0ZTpcIiwgZXZlbnRQYXlsb2FkKTtcbiAgICAgICAgc2V0UHJldmVudENsb3NlKGZhbHNlKTtcbiAgICAgICAgc2V0VG9rZW5pemVkKDApO1xuICAgICAgICBzZXRDaGVja291dEZpcmVkKGZhbHNlKTtcbiAgICAgICAgaWYgKG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2Vzcykge1xuICAgICAgICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhldmVudFBheWxvYWQucGF5bWVudE1ldGhvZElkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkxPQURfRVJST1IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBFcnJvciBsb2FkaW5nIGlmcmFtZTpcIiwgZXZlbnRQYXlsb2FkLm1lc3NhZ2UpO1xuICAgICAgICBpZiAob25Mb2FkRXJyb3IpIG9uTG9hZEVycm9yKGV2ZW50UGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBFdmVudFR5cGUuZW51bS5WQUxJREFUSU9OX0VSUk9SKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gZXh0cmFEYXRhPy5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXI7XG4gICAgICAgIGlmIChwcm92aWRlciA9PT0gXCJjcmVkaXRfY2FyZFwiIHx8IHByb3ZpZGVyID09PSB2b2lkIDApIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbZm9ybV0gVmFsaWRhdGlvbiBlcnJvciBmb3IgJHtldmVudFBheWxvYWQuZWxlbWVudFR5cGV9OmAsIGV2ZW50UGF5bG9hZC5lcnJvcnMpO1xuICAgICAgICAgIGlmIChvblZhbGlkYXRpb25FcnJvcikgb25WYWxpZGF0aW9uRXJyb3IoZXZlbnRQYXlsb2FkLmVsZW1lbnRUeXBlLCBldmVudFBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfRVJST1IgfHwgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuZW51bS5DSEVDS09VVF9FUlJPUikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW2Zvcm1dIEFQSSBlcnJvciBmcm9tIGVsZW1lbnQ6XCIsIGV2ZW50UGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgICAgaWYgKGV2ZW50UGF5bG9hZC5tZXNzYWdlID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgICAgICAgY29uc3QgY2FyZENwbSA9IGNoZWNrb3V0UGF5bWVudE1ldGhvZHM/LmZpbmQoKGNwbSkgPT4gY3BtLnByb3ZpZGVyID09PSBcImNyZWRpdF9jYXJkXCIpO1xuICAgICAgICAgIGlmICghc2Vzc2lvbklkIHx8ICFmb3JtUmVmLmN1cnJlbnQgfHwgIW9uVmFsaWRhdGlvbkVycm9yIHx8ICFjYXJkQ3BtKSByZXR1cm47XG4gICAgICAgICAgZm9yIChjb25zdCBbZWxlbWVudElkMiwgdGFyZ2V0XSBvZiBPYmplY3QuZW50cmllcyhldmVudFRhcmdldHMpKSB7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93RXZlbnQgPSBjb25zdHJ1Y3RTdWJtaXRFdmVudFBheWxvYWQoXG4gICAgICAgICAgICAgIEV2ZW50VHlwZS5lbnVtLlNUQVJUX1BBWU1FTlRfRkxPVyxcbiAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICBmb3JtUmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICAgICAgICAvLyBPbmx5IHN0cmlwZSBzdXBwb3J0cyBmcm9udGVuZCAzRFMgcmlnaHQgbm93LFxuICAgICAgICAgICAgICAvLyBzbyB3ZSBwYXNzIHByb2Nlc3Nvcl9uYW1lOiAnc3RyaXBlJyB0byB0ZWxsIGRlbGVnYXRvciB0byBvbmx5IHVzZSBzdHJpcGVcbiAgICAgICAgICAgICAgeyAuLi5jYXJkQ3BtLCBwcm9jZXNzb3JfbmFtZTogXCJzdHJpcGVcIiB9LFxuICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghc3RhcnRQYXltZW50Rmxvd0V2ZW50KSBjb250aW51ZTtcbiAgICAgICAgICAgIHNldENoZWNrb3V0RmlyZWQodHJ1ZSk7XG4gICAgICAgICAgICBzZXRFeHRyYURhdGEoc3RhcnRQYXltZW50Rmxvd0V2ZW50KTtcbiAgICAgICAgICAgIGVtaXRFdmVudCh0YXJnZXQsIGZvcm1JZCwgZWxlbWVudElkMiwgc3RhcnRQYXltZW50Rmxvd0V2ZW50LCBmcmFtZUJhc2VVcmwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFByZXZlbnRDbG9zZShmYWxzZSk7XG4gICAgICAgICAgc2V0Q2hlY2tvdXRGaXJlZChmYWxzZSk7XG4gICAgICAgICAgaWYgKG9uQ2hlY2tvdXRFcnJvcikgb25DaGVja291dEVycm9yKGV2ZW50UGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZm9ybUlkLFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgbm9uY2VzLFxuICAgICAgZXh0cmFEYXRhLFxuICAgICAgaWZyYW1lcyxcbiAgICAgIGV2ZW50VGFyZ2V0cyxcbiAgICAgIHRva2VuaXplZCxcbiAgICAgIGNoZWNrb3V0RmlyZWQsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkxvYWRFcnJvcixcbiAgICAgIG9uQ2hlY2tvdXRTdGFydGVkLFxuICAgICAgb25DaGVja291dFN1Y2Nlc3MsXG4gICAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgICBvbkNoZWNrb3V0RXJyb3IsXG4gICAgICBvblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGZyYW1lQmFzZVVybCxcbiAgICAgIHN0cmlwZVBtLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgIGFueUNkZUNvbm5cbiAgICBdXG4gICk7XG4gIGNvbnN0IG9qc0Zsb3dDYWxsYmFja3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBub09wID0gKCkgPT4ge1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIG9uQ2hlY2tvdXRFcnJvcjogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRFcnJvclwiLCBvbkNoZWNrb3V0RXJyb3IgPz8gbm9PcCksXG4gICAgICBvbkNoZWNrb3V0U3RhcnRlZDogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRTdGFydGVkXCIsIG9uQ2hlY2tvdXRTdGFydGVkID8/IG5vT3ApLFxuICAgICAgb25DaGVja291dFN1Y2Nlc3M6IG1ha2VDYWxsYmFja1NhZmUoXCJvbkNoZWNrb3V0U3VjY2Vzc1wiLCBvbkNoZWNrb3V0U3VjY2VzcyA/PyBub09wKSxcbiAgICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogbWFrZUNhbGxiYWNrU2FmZShcIm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2Vzc1wiLCBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MgPz8gbm9PcCksXG4gICAgICBvblZhbGlkYXRpb25FcnJvcjogbWFrZUNhbGxiYWNrU2FmZShcIm9uVmFsaWRhdGlvbkVycm9yXCIsIG9uVmFsaWRhdGlvbkVycm9yID8/IG5vT3ApXG4gICAgfTtcbiAgfSwgW29uQ2hlY2tvdXRFcnJvciwgb25DaGVja291dFN0YXJ0ZWQsIG9uQ2hlY2tvdXRTdWNjZXNzLCBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsIG9uVmFsaWRhdGlvbkVycm9yXSk7XG4gIGNvbnN0IGdlbmVyYXRlT2pzRmxvd0NvbnRleHQgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coZm9ybVJlZi5jdXJyZW50LCBzZXNzaW9uSWQsIGNoZWNrb3V0UGF5bWVudE1ldGhvZHMpO1xuICAgIGlmICghZm9ybVJlZi5jdXJyZW50IHx8ICFzZXNzaW9uSWQgfHwgIWNoZWNrb3V0UGF5bWVudE1ldGhvZHMpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNkZUNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICBPYmplY3QuZW50cmllcyhjZGVDb25ucykuZm9yRWFjaCgoW2VsZW1lbnRUeXBlLCBjZGVDb25uXSkgPT4ge1xuICAgICAgaWYgKGNkZUNvbm4pIHtcbiAgICAgICAgY2RlQ29ubmVjdGlvbnMuc2V0KGVsZW1lbnRUeXBlLCBjZGVDb25uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoY2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coXCJbT0pTXSBubyBDREUgY29ubmVjdGlvbnMhXCIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBmb3JtRGl2OiBmb3JtUmVmLmN1cnJlbnQsXG4gICAgICBlbGVtZW50c1Nlc3Npb25JZDogc2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgIGNkZUNvbm5lY3Rpb25zLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgICAgIGJhc2VVcmw6IG5ldyBVUkwoZnJhbWVCYXNlVXJsKS5vcmlnaW5cbiAgICB9O1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9O1xuICBjb25zdCBzdWJtaXRQUiA9IChwcm92aWRlciwgaW5pdFJlc3VsdCwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGdlbmVyYXRlT2pzRmxvd0NvbnRleHQoKTtcbiAgICBpZiAoIWNvbnRleHQgfHwgIWZvcm1SZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShmb3JtUmVmLmN1cnJlbnQpLFxuICAgICAgZmxvd0NhbGxiYWNrczogb2pzRmxvd0NhbGxiYWNrcyxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICBpbml0UmVzdWx0XG4gICAgfSk7XG4gIH07XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gIT09IG51bGwpIHJldHVybjtcbiAgICBjb25zb2xlLmxvZyhcIltPSlNdIG51bUNkZUNvbm5zXCIsIG51bUNkZUNvbm5zLCBjZGVDb25ucyk7XG4gICAgaWYgKG51bUNkZUNvbm5zID09PSAwKSByZXR1cm47XG4gICAgY29uc29sZS5sb2coXCJbT0pTXSBJbml0aWFsaXppbmdcIik7XG4gICAgY29uc3QgY29udGV4dCA9IGdlbmVyYXRlT2pzRmxvd0NvbnRleHQoKTtcbiAgICBpZiAoIWNvbnRleHQpIHJldHVybjtcbiAgICBjb25zb2xlLmxvZyhcIltPSlNdIFN0YXJ0aW5nIGluaXRcIik7XG4gICAgY29uc3QgaW5pdGlhbGl6YXRpb24gPSBpbml0aWFsaXplT2pzRmxvd3MoY29udGV4dCwgb2pzRmxvd0NhbGxiYWNrcyk7XG4gICAgc2V0T2pzRmxvd3NJbml0aWFsaXphdGlvbihpbml0aWFsaXphdGlvbik7XG4gICAgY29uc29sZS5sb2coXCJbT0pTXSBTdWJzY3JpYmVcIik7XG4gICAgaW5pdGlhbGl6YXRpb24uc3RyaXBlUFIuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiW09KU10gc2V0UGF5bWVudFJlcXVlc3RzXCIsIHN0YXR1cyk7XG4gICAgICBpZiAoc3RhdHVzLnN0YXR1cyA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgICAgc2V0UGF5bWVudFJlcXVlc3RzLnNldChcImFwcGxlX3BheVwiLCBQUl9MT0FESU5HKTtcbiAgICAgICAgc2V0UGF5bWVudFJlcXVlc3RzLnNldChcImdvb2dsZV9wYXlcIiwgUFJfTE9BRElORyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cy5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBzZXRQYXltZW50UmVxdWVzdHMuc2V0KFwiYXBwbGVfcGF5XCIsIFBSX0VSUk9SKTtcbiAgICAgICAgc2V0UGF5bWVudFJlcXVlc3RzLnNldChcImdvb2dsZV9wYXlcIiwgUFJfRVJST1IpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0dXMuc3RhdHVzID09PSBcImxvYWRlZFwiKSB7XG4gICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBzdGF0dXMucmVzdWx0O1xuICAgICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICAgIGNvbnN0IGNhbkdvb2dsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgICAgICBzZXRQYXltZW50UmVxdWVzdHMuc2V0KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiBjYW5BcHBsZVBheSA/IHN1Ym1pdFBSKFwiYXBwbGVfcGF5XCIsIGluaXRSZXN1bHQsIHVzZXJQYXJhbXMpIDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRQYXltZW50UmVxdWVzdHMuc2V0KFwiZ29vZ2xlX3BheVwiLCB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuR29vZ2xlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IGNhbkdvb2dsZVBheSA/IHN1Ym1pdFBSKFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCB1c2VyUGFyYW1zKSA6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGluaXRpYWxpemF0aW9uLnN0cmlwZUxpbmsuc3Vic2NyaWJlKChpbml0KSA9PiB7XG4gICAgICAgIGlmIChpbml0LnN0YXR1cyA9PT0gXCJsb2FkZWRcIiAmJiBpbml0LnJlc3VsdC5pc0F2YWlsYWJsZSkge1xuICAgICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKGluaXQucmVzdWx0LmNvbnRyb2xsZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgW2Zvcm1SZWYuY3VycmVudCwgc2Vzc2lvbklkLCBjaGVja291dFBheW1lbnRNZXRob2RzLCBudW1DZGVDb25ucyA9PT0gMF0pO1xuICBjb25zdCBzdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBnZW5lcmF0ZU9qc0Zsb3dDb250ZXh0KCk7XG4gICAgaWYgKCFmb3JtUmVmLmN1cnJlbnQgfHwgIXNlc3Npb25JZCB8fCAhYW55Q2RlQ29ubiB8fCAhY2hlY2tvdXRQYXltZW50TWV0aG9kcyB8fCAhY29udGV4dCkgcmV0dXJuO1xuICAgIE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oZm9ybVJlZi5jdXJyZW50KSxcbiAgICAgIGZsb3dDYWxsYmFja3M6IG9qc0Zsb3dDYWxsYmFja3MsXG4gICAgICBjdXN0b21QYXJhbXM6IHZvaWQgMCxcbiAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBjdXN0b20gcGFyYW1zXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgIH0pO1xuICB9O1xuICBjb25zdCBvbkJlZm9yZVVubG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChlKSA9PiB7XG4gICAgICBpZiAocHJldmVudENsb3NlKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSxcbiAgICBbcHJldmVudENsb3NlXVxuICApO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2FkZWQgfHwgIWZvcm1SZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIGNvbnN0IGFyZUlmcmFtZXNMb2FkZWQgPSBpZnJhbWVzLmxlbmd0aCA+IDAgJiYgaWZyYW1lcy5sZW5ndGggPT09IE9iamVjdC5rZXlzKGV2ZW50VGFyZ2V0cykubGVuZ3RoO1xuICAgIGlmIChhcmVJZnJhbWVzTG9hZGVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIltmb3JtXSBBbGwgZWxlbWVudHMgbG9hZGVkXCIpO1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgaWYgKG9uTG9hZCkgb25Mb2FkKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0sIFtpZnJhbWVzLCBldmVudFRhcmdldHMsIGxvYWRlZCwgb25Mb2FkLCB0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeV0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFJlZmVyZXIod2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uTWVzc2FnZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgb25CZWZvcmVVbmxvYWQpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBvbkJlZm9yZVVubG9hZCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcbiAgICB9O1xuICB9LCBbc2Vzc2lvbklkLCBvbk1lc3NhZ2UsIG9uQmVmb3JlVW5sb2FkXSk7XG4gIGNvbnN0IHJlZ2lzdGVySWZyYW1lID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGlmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmdJZnJhbWUgPSBpZnJhbWVzLmZpbmQoKGV4aXN0aW5nSWZyYW1lMikgPT4gZXhpc3RpbmdJZnJhbWUyLmNvbnRlbnRXaW5kb3cgPT09IGlmcmFtZS5jb250ZW50V2luZG93KTtcbiAgICAgIGNvbnNvbGUubG9nKFwiW09KU10gQ2FsbGluZyByZWdpc3RlciBpZnJhbWUuIEV4aXN0aW5nP1wiLCBleGlzdGluZ0lmcmFtZSk7XG4gICAgICBpZiAoZXhpc3RpbmdJZnJhbWUpIHJldHVybjtcbiAgICAgIHNldElmcmFtZXMoKHByZXZJZnJhbWVzKSA9PiBbLi4ucHJldklmcmFtZXMsIGlmcmFtZV0pO1xuICAgICAgY29uc29sZS5sb2coXCJbT0pTXVtmb3JtXSBSZWdpc3RlcmluZyBpZnJhbWU6XCIsIGlmcmFtZSk7XG4gICAgICBjb25zdCBlbGVtZW50VHlwZSA9IGdldEVsZW1lbnRUeXBlRnJvbUlmcmFtZUlkKGlmcmFtZS5pZCk7XG4gICAgICBhd2FpdCBjb25uZWN0VG9DZGVJZnJhbWUoZWxlbWVudFR5cGUsIGlmcmFtZSk7XG4gICAgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW2lmcmFtZXNdXG4gICk7XG4gIGNvbnN0IHZhbHVlID0ge1xuICAgIGZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0LFxuICAgIHJlZmVyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBmcmFtZUJhc2VVcmxcbiAgfTtcbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IHN1Ym1pdENhcmQsXG4gICAgYXBwbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5hcHBsZV9wYXksXG4gICAgZ29vZ2xlUGF5OiBwYXltZW50UmVxdWVzdHMuZ29vZ2xlX3BheSxcbiAgICBsb2FkZWQsXG4gICAgcHJldmlldzogZHluYW1pY1ByZXZpZXcsXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmxcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGNsYXNzTmFtZSwgcmVmOiBmb3JtUmVmLCBjaGlsZHJlbjogY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSk7XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBzdWJQYXRoLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJlciwgZm9ybUhlaWdodCwgY2hlY2tvdXRTZWN1cmVUb2tlbiwgcmVnaXN0ZXJJZnJhbWUsIGJhc2VVcmwgfSA9IHVzZU9wZW5QYXlFbGVtZW50cygpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVyZXIpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzdHlsZXNcIiwgZWxlbWVudFN0eWxlKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwiZm9ybUlkXCIsIGZvcm1JZCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIGNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSwgW2VsZW1lbnRTdHlsZSwgZm9ybUlkLCByZWZlcmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcIltPSlNdIGVsZW1lbnQgZnJhbWUgcmVnaXN0ZXIgYXR0ZW1wdFwiLCAhIWlmcmFtZVJlZi5jdXJyZW50LCAhIWhhc0xvYWRlZCk7XG4gICAgaWYgKCFpZnJhbWVSZWYuY3VycmVudCB8fCAhaGFzTG9hZGVkKSByZXR1cm47XG4gICAgcmVnaXN0ZXJJZnJhbWUoaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgc3ViUGF0aDogXCJjYXJkLWN2Y1wiIH0pO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBzdWJQYXRoOiBcImNhcmRcIiB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgc3ViUGF0aDogXCJjYXJkLWV4cGlyeVwiIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBzdWJQYXRoOiBcImNhcmQtbnVtYmVyXCIgfSk7XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCwgQ2FyZEVsZW1lbnQsIENhcmRFeHBpcnlFbGVtZW50LCBDYXJkTnVtYmVyRWxlbWVudCwgRWxlbWVudHNGb3JtLCBGaWVsZE5hbWUsIHVzZU9wZW5QYXlFbGVtZW50cyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLE9BQU9BLE1BQWMsaUJBQUFDLElBQWUsY0FBQUMsSUFBWSxVQUFBQyxJQUFRLGVBQUFDLEdBQWEsYUFBQUMsR0FBVyxZQUFBQyxHQUFVLFdBQUFDLFVBQWU7QUFDekcsU0FBUyxPQUFBQyxTQUFXO0FBQ3BCLFNBQVMsS0FBQUMsU0FBUztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsUUFBVztBQUVsQixNQUFNQyxLQUFrQlosR0FBYztBQUFBLEVBQ3BDLFFBQVE7QUFBQSxFQUNSLFlBQVk7QUFBQSxFQUNaLFNBQVM7QUFBQSxFQUNULHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQixNQUFNO0FBQUEsRUFDdEI7QUFBQSxFQUNBLFNBQVM7QUFDWCxDQUFDLEdBRUthLEtBQXFCLE1BQU07QUFDL0IsUUFBTUMsSUFBVWIsR0FBV1csRUFBZTtBQUMxQyxNQUFJLENBQUNFO0FBQ0gsVUFBTSxJQUFJLE1BQU0sbUVBQW1FO0FBRXJGLFNBQU9BO0FBQ1QsR0FFTUMsS0FBaUIsOEJBRWpCQyxLQUE0QlIsRUFBRSxPQUFPO0FBQUEsRUFDekMsTUFBTUEsRUFBRSxPQUFPO0FBQUEsRUFDZixLQUFLQSxFQUFFLE1BQU1BLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDdkIsS0FBS0EsRUFBRSxPQUFPO0FBQUEsRUFDZCxLQUFLQSxFQUFFLE9BQU87QUFDaEIsQ0FBQyxHQUNLUyxLQUFrQ1QsRUFBRSxNQUFNUSxFQUF5QixHQUNuRUUsS0FBZ0JWLEVBQUUsT0FBTztBQUFBLEVBQzdCLE1BQU1BLEVBQUUsT0FBTztBQUFBLEVBQ2YsU0FBU0EsRUFBRSxPQUFPO0FBQUEsRUFDbEIsTUFBTUEsRUFBRSxNQUFNQSxFQUFFLE9B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Q2hCLFdBQVc7QUFBQSxNQUNYLEtBQUssR0FBRzVaLENBQU8sV0FBVzRaLENBQU8sYUFBYU0sQ0FBVztBQUFBLE1BQ3pELE9BQU9EO0FBQUEsTUFDUCxLQUFLRjtBQUFBLElBQ1A7QUFBQSxFQUNGLEtBYkUsUUFBUSxNQUFNLGtEQUFrRCxHQUN6QyxnQkFBQTdpQixFQUFJLE9BQU8sQ0FBQyxDQUFDO0FBYXhDLEdBRU1pakIsS0FBaUIsQ0FBQyxFQUFFLFFBQUF6YixFQUFPLE1BQ1IsZ0JBQUF4SCxFQUFJeWlCLElBQWMsRUFBRSxRQUFBamIsR0FBUSxTQUFTLFdBQVcsQ0FBQyxHQUdwRTBiLEtBQWMsQ0FBQyxFQUFFLFFBQUExYixFQUFPLE1BQ0wsZ0JBQUF4SCxFQUFJeWlCLElBQWMsRUFBRSxRQUFBamIsR0FBUSxTQUFTLE9BQU8sQ0FBQyxHQUdoRTJiLEtBQW9CLENBQUMsRUFBRSxRQUFBM2IsRUFBTyxNQUNYLGdCQUFBeEgsRUFBSXlpQixJQUFjLEVBQUUsUUFBQWpiLEdBQVEsU0FBUyxjQUFjLENBQUMsR0FHdkU0YixLQUFvQixDQUFDLEVBQUUsUUFBQTViLEVBQU8sTUFDWCxnQkFBQXhILEVBQUl5aUIsSUFBYyxFQUFFLFFBQUFqYixHQUFRLFNBQVMsY0FBYyxDQUFDOyIsCiAgIm5hbWVzIjogWyJyZXF1aXJlJCQwIiwgImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VSZWYiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVN0YXRlIiwgInVzZU1lbW8iLCAianN4IiwgInoiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiY2hhbGsiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgIkZSQU1FX0JBU0VfVVJMIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSIsICJab2RGaWVsZEVycm9yIiwgIlpvZEZpZWxkRXJyb3JzIiwgIk1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0UiLCAiZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UiLCAib2dFcnJvck1lc3NhZ2UiLCAia2V5IiwgImlzU3RyaW5naWZpZWRKc29uT2JqZWN0IiwgInN0ciIsICJjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgInJlc3BvbnNlIiwgImVyciIsICJjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzIiwgImVycm9ycyIsICJnZXRFcnJvck1lc3NhZ2UiLCAib2JqIiwgImUyIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImZuIiwgImFyZ3MiLCAiZXJyb3IiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkVsZW1lbnRUeXBlIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJ2YWx1ZSIsICJmaWVsZE5hbWUiLCAiU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhIiwgIm91ckN1cnJlbmN5VG9UaGVpcnMiLCAiZ2V0TG9hZGVkU3RyaXBlIiwgInB1Ymxpc2hhYmxlS2V5IiwgImkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlRWxlbWVudHMiLCAic3RyaXBlUHViS2V5IiwgImVsZW1lbnRzT3B0aW9ucyIsICJzdHJpcGUiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAidG90YWxBbW91bnRBdG9tIiwgImN1cnJlbmN5IiwgImlzQW1vdW50UGVuZGluZyIsICJpc0xpbmtPbmx5IiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJyZXNvbHZlIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgInJlamVjdCIsICJldnQiLCAiZSIsICJjb25maXJtUGF5bWVudEZsb3dGb3JTdHJpcGVQUkxlZ2FjeSIsICJwYXlsb2FkIiwgInN0cmlwZVBtIiwgIm5leHRBY3Rpb25NZXRhZGF0YSIsICJjb25maXJtUmVzdWx0IiwgImNvbmZpcm1TdHJpcGVQclBNIiwgImNvbmZpcm1QYXltZW50Rmxvd0ZvcjNEUyIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgInJlc3VsdFN0YXR1cyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgImZvcm1EaXYiLCAiaW5pdGlhbERpY3QiLCAiYWNjIiwgImlucHV0IiwgImNvbnN0cnVjdFN1Ym1pdEV2ZW50UGF5bG9hZCIsICJldmVudFR5cGUiLCAic2Vzc2lvbklkIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJkb05vdFVzZUxlZ2FjeUNDRmxvdyIsICJwYXltZW50Rmxvd01ldGFkYXRhIiwgImV4dHJhRGF0YSIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImV2ZW50RGF0YSIsICJlbWl0RXZlbnQiLCAidGFyZ2V0IiwgImZvcm1JZCIsICJlbGVtZW50SWQiLCAiYmFzZVVybCIsICJldmVudCIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAicmVzdWx0IiwgImlzUmVzdWx0VmFsaWQiLCAiaXNWYWxpZCIsICJjcmVhdGVDZGVDb25uZWN0aW9uIiwgImlmcmFtZSIsICJjb25uZWN0aW9uT2JqIiwgImlzVmFsaWRPYmplY3QiLCAibnVsbE9yVW5kZWZPciIsICJDREVSZXNwb25zZUVycm9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJTZXR1cENoZWNrb3V0UmVzcG9uc2UiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgInN1bSIsICJhcnIiLCAiYSIsICJiIiwgImZpeFByb3RvIiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJwIiwgIl9fIiwgIkN1c3RvbUVycm9yIiwgIl9zdXBlciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJDZGVFcnJvciIsICJmcmllbmRseU1lc3NhZ2UiLCAicXVlcnlDREUiLCAiY2RlQ29ubiIsICJkYXRhIiwgInJlc3BvbnNlU2NoZW1hIiwgImlzQ0RFUmVzcG9uc2VFcnJvciIsICJjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSIsICJzY2hlbWEiLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3IiwgInJlcXVlc3QiLCAiZ2V0UHJlZmlsbCIsICJzdGFydFBheW1lbnRGbG93IiwgInN0YXJ0UGF5bWVudEZsb3dGb3JDQyIsICJzdGFydFBheW1lbnRGbG93Rm9yUFIiLCAiY29uZmlybVBheW1lbnRGbG93IiwgIndhaXRGb3JGb3JtRmllbGRJbnB1dCIsICJ3YWl0VGltZU1zIiwgInN0YXJ0V2FpdFRpbWUiLCAibWF0Y2giLCAiZ2V0Q2hlY2tvdXRWYWx1ZSIsICJzZWN1cmVUb2tlbiIsICJwcm9tb0NvZGUiLCAiY2hlY2tvdXRQcmV2aWV3IiwgImN1cnJlbmNpZXMiLCAiaW52IiwgImFtb3VudEF0b20iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvcjNkc1N0YXR1cyIsICJjaGlsZE9yaWdpbiIsICJpc0pzb25TdHJpbmciLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJwYXJhbXMiLCAiZmxvd1Jlc3VsdCIsICJhZGRFcnJvckNhdGNoZXJGb3JJbml0IiwgImluaXQiLCAiZXJyX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJsb2dfXyQ1IiwgImVycl9fJDUiLCAicGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5kQ3BtTWF0Y2hpbmdUeXBlIiwgImFsbENQTXMiLCAiem9kTW9kZWwiLCAiY3BtIiwgImNwbTIiLCAibG9nX18kNCIsICJlcnJfXyQ0IiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAidmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdCIsICJwYXJzZWQiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyQzIiwgImVycl9fJDMiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiZmxvd0NhbGxiYWNrcyIsICJpbml0UGFyYW1zIiwgInN0cmlwZUxpbmtDcG0iLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJwcmVmaWxsIiwgImluaXRpYWxQcmV2aWV3IiwgImVsZW1lbnRzIiwgImV4cHJlc3NDaGVja291dEVsZW1lbnQiLCAibW91bnRCdXR0b24iLCAiZGlzbW91bnRCdXR0b24iLCAiT2pzRmxvd3MiLCAiZ2V0RWxlbWVudEJ5SWRBc3luYyIsICJydW5TdHJpcGVMaW5rRmxvdyIsICJjdXN0b21QYXJhbXMiLCAibWVyZ2VkSW5wdXRzIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0iLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJzdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAib3VyRXhpc3RpbmdQbUlkIiwgImNoZWNrb3V0UmVxdWVzdCIsICJmb3JtSW5wdXRzIiwgIl9lIiwgImlucHV0cyIsICJwYXllckZpcnN0TmFtZSIsICJwYXllckxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJpZCIsICJnZXRFbGVtZW50IiwgImVsZW1lbnQiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgInN0YXJ0UG9sbGluZyIsICJvblN1Y2Nlc3MiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAicG9sbGluZ0ludGVydmFsIiwgImhhbmRsZUV2ZW50cyIsICJoYW5kbGVDYW5jZWwiLCAic3RhcnQzZHNWZXJpZmljYXRpb24iLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgImxvZ19fJDIiLCAiZXJyX18kMiIsICJzdHJpcGVMb2dfXyIsICJydW5Db21tb25DY0Zsb3ciLCAidG9rZW5pemVDYXJkUmVzdWx0cyIsICJjb21tb25DaGVja291dFBhcmFtcyIsICJzaG91bGRVc2VOZXdGbG93IiwgInN0YXJ0UGZSZXN1bHQiLCAiY29tbW9uQ0MzRFNGbG93IiwgInN0cmlwZUNDM0RTRmxvdyIsICJjcmVhdGVkUGF5bWVudE1ldGhvZCIsICJwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVBY3Rpb24iLCAiYWN0aW9uIiwgInBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbW1vbkFjdGlvbiIsICJsb2dfXyQxIiwgImVycl9fJDEiLCAiU3RyaXBlUHJDcG0iLCAiaW5pdFN0cmlwZVByRmxvdyIsICJwciIsICJjYW5NYWtlUGF5bWVudCIsICJydW5TdHJpcGVQckZsb3ciLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJ1cGRhdGVQcldpdGhBbW91bnQiLCAic3RyaXBlUG1BZGRlZEV2ZW50IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0iLCAicGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbUV2dCIsICJhbW91bnQiLCAiaXNQZW5kaW5nIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAiY3BtcyIsICJ3aXRoUHJvdmlkZXIiLCAid2l0aFByb2Nlc3NvciIsICJtYXRjaGVzIiwgImdldERlZmF1bHRFeHBvcnRGcm9tQ2pzIiwgIngiLCAiT2JzZXJ2YWJsZSQyIiwgImhhc1N5bWJvbCIsICJuYW1lIiwgImdldFN5bWJvbCIsICJTeW1ib2xJdGVyYXRvciIsICJTeW1ib2xPYnNlcnZhYmxlIiwgIlN5bWJvbFNwZWNpZXMiLCAiZ2V0TWV0aG9kIiwgImdldFNwZWNpZXMiLCAiY3RvciIsICJPYnNlcnZhYmxlJDEiLCAiaXNPYnNlcnZhYmxlIiwgImhvc3RSZXBvcnRFcnJvciIsICJlbnF1ZXVlIiwgImNsZWFudXBTdWJzY3JpcHRpb24iLCAic3Vic2NyaXB0aW9uIiwgImNsZWFudXAiLCAidW5zdWJzY3JpYmUiLCAiY2xvc2VTdWJzY3JpcHRpb24iLCAiZmx1c2hTdWJzY3JpcHRpb24iLCAicXVldWUiLCAibm90aWZ5U3Vic2NyaXB0aW9uIiwgInR5cGUiLCAib2JzZXJ2ZXIiLCAibSIsICJvbk5vdGlmeSIsICJTdWJzY3JpcHRpb24iLCAic3Vic2NyaWJlciIsICJzZWxmIiwgInN1YnNjcmlwdGlvbk9ic2VydmVyIiwgIk9ic2VydmFibGUiLCAiZG9uZSIsICJDIiwgImhhc1NlZWQiLCAiaGFzVmFsdWUiLCAiZmlyc3QiLCAidmFsdWVzIiwgInNvdXJjZXMiLCAiaW5kZXgiLCAic3RhcnROZXh0IiwgIm5leHQiLCAidiIsICJzdWJzY3JpcHRpb25zIiwgIm91dGVyIiwgImlubmVyIiwgImNvbXBsZXRlSWZEb25lIiwgInMiLCAibWV0aG9kIiwgIm9ic2VydmFibGUiLCAiaXRlbSIsICJpdGVtcyIsICJ6ZW5PYnNlcnZhYmxlIiwgImxvZ19fIiwgImdldE9qc0luaXRSZXN1bHRzRGVidWdPYmplY3QiLCAiaW5pdGlhbGl6ZU9qc0Zsb3dzIiwgInJ1bkluaXRGbG93QXNPYnNlcnZhYmxlIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgIlBSX0xPQURJTkciLCAiUFJfRVJST1IiLCAidXNlQXN5bmNFZmZlY3QkMiIsICJSZWFjdCIsICJ1c2VBc3luY0VmZmVjdCIsICJlZmZlY3QiLCAiZGVzdHJveSIsICJoYXNEZXN0cm95IiwgIm1vdW50ZWQiLCAibWF5YmVQcm9taXNlIiwgInVzZUFzeW5jRWZmZWN0RXhwb3J0cyIsICJ1c2VBc3luY0VmZmVjdCQxIiwgInVzZVRpbWVvdXRGbiIsICJtcyIsICJyZWFkeSIsICJ0aW1lb3V0IiwgImNhbGxiYWNrIiwgImlzUmVhZHkiLCAic2V0IiwgImNsZWFyIiwgInVzZURlYm91bmNlIiwgImRlcHMiLCAiY2FuY2VsIiwgInJlc2V0IiwgInVzZUR5bmFtaWNQcmV2aWV3IiwgImlzRW5hYmxlZCIsICJwcm9tb0NvZGVJbnB1dCIsICJzZXRQcm9tb0NvZGVJbnB1dCIsICJwcm9tb0NvZGVEZWJvdW5jZWQiLCAic2V0UHJvbW9Db2RlRGVib3VuY2VkIiwgInByZXZpZXdBbXQiLCAic2V0UHJldmlld0FtdCIsICJpc1ByZXZpZXdMb2FkaW5nIiwgInNldElzUHJldmlld0xvYWRpbmciLCAicHJldmlld0Vycm9yIiwgInNldFByZXZpZXdFcnJvciIsICJwcm9tb0NvZGVJbnB1dDIiLCAiaXNNb3VudGVkIiwgInByZXZpZXciLCAidXNlTWFwIiwgImluaXRpYWxNYXAiLCAibWFwIiwgInN0YWJsZUFjdGlvbnMiLCAiZW50cnkiLCAicHJldk1hcCIsICJuZXdNYXAiLCAib21pdCIsICJyZXN0IiwgInV0aWxzIiwgInVzZUNkZUNvbm5lY3Rpb24iLCAibnVtQ2RlQ29ubnMiLCAic2V0TnVtQ2RlQ29ubnMiLCAiY2RlQ29ubnMiLCAiY2RlQ29ubnNTZXR0ZXIiLCAiYW55Q2RlQ29ubiIsICJlbGVtZW50VHlwZSIsICJnZXRFbGVtZW50VHlwZUZyb21JZnJhbWVJZCIsICJpZnJhbWVJZCIsICJFbGVtZW50c0Zvcm0iLCAicHJvcHMiLCAiY2hpbGRyZW4iLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJjbGFzc05hbWUiLCAib25Gb2N1cyIsICJvbkJsdXIiLCAib25DaGFuZ2UiLCAib25Mb2FkIiwgIm9uTG9hZEVycm9yIiwgIm9uQ2hlY2tvdXRTdGFydGVkIiwgIm9uQ2hlY2tvdXRTdWNjZXNzIiwgIm9uQ2hlY2tvdXRFcnJvciIsICJvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MiLCAiZW5hYmxlRHluYW1pY1ByZXZpZXdzIiwgImN1c3RvbUluaXRQYXJhbXMiLCAiZnJhbWVCYXNlVXJsIiwgInJlZmVyZXIiLCAic2V0UmVmZXJlciIsICJub25jZXMiLCAic2V0Tm9uY2VzIiwgImZvcm1IZWlnaHQiLCAic2V0Rm9ybUhlaWdodCIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInNldEV4dHJhRGF0YSIsICJwcmV2ZW50Q2xvc2UiLCAic2V0UHJldmVudENsb3NlIiwgImlmcmFtZXMiLCAic2V0SWZyYW1lcyIsICJldmVudFRhcmdldHMiLCAic2V0RXZlbnRUYXJnZXRzIiwgInRva2VuaXplZCIsICJzZXRUb2tlbml6ZWQiLCAiY2hlY2tvdXRGaXJlZCIsICJzZXRDaGVja291dEZpcmVkIiwgInNldFNlc3Npb25JZCIsICJzZXRDdXJyZW5jeSIsICJ0b3RhbEFtb3VudEF0b21zIiwgInNldFRvdGFsQW1vdW50QXRvbXMiLCAiY2hlY2tvdXRQYXltZW50TWV0aG9kcyIsICJzZXRDaGVja291dFBheW1lbnRNZXRob2RzIiwgImZvcm1SZWYiLCAiY29ubmVjdFRvQ2RlSWZyYW1lIiwgIm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24iLCAic2V0T2pzRmxvd3NJbml0aWFsaXphdGlvbiIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgIm9qc192ZXJzaW9uIiwgImR5bmFtaWNQcmV2aWV3IiwgIm9uTWVzc2FnZSIsICJldmVudFNvdXJjZSIsICJyYXciLCAicHJldk5vbmNlcyIsICJldmVudFBheWxvYWQiLCAiaGVpZ2h0IiwgIm1hdGNoaW5nSWZyYW1lIiwgInByZXZUYXJnZXRzIiwgIm5leHRBY3Rpb25UeXBlIiwgInBheW1lbnRfbWV0aG9kcyIsICJwcm9jZWVkVG9DaGVja291dCIsICJleGlzdGluZ0NDUE1JZCIsICJlcnJNc2ciLCAidG90YWxUb2tlbml6ZWQiLCAiYWxsVG9rZW5pemVkIiwgInByb3ZpZGVyIiwgImNhcmRDcG0iLCAiZWxlbWVudElkMiIsICJzdGFydFBheW1lbnRGbG93RXZlbnQiLCAib2pzRmxvd0NhbGxiYWNrcyIsICJub09wIiwgImdlbmVyYXRlT2pzRmxvd0NvbnRleHQiLCAiY2RlQ29ubmVjdGlvbnMiLCAic3VibWl0UFIiLCAiaW5pdGlhbGl6YXRpb24iLCAiY2FuQXBwbGVQYXkiLCAiY2FuR29vZ2xlUGF5IiwgInVzZXJQYXJhbXMiLCAic3VibWl0Q2FyZCIsICJvbkJlZm9yZVVubG9hZCIsICJyZWdpc3RlcklmcmFtZSIsICJleGlzdGluZ0lmcmFtZSIsICJleGlzdGluZ0lmcmFtZTIiLCAicHJldklmcmFtZXMiLCAiY2hpbGRyZW5Qcm9wcyIsICJFbGVtZW50RnJhbWUiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJDYXJkQ3ZjRWxlbWVudCIsICJDYXJkRWxlbWVudCIsICJDYXJkRXhwaXJ5RWxlbWVudCIsICJDYXJkTnVtYmVyRWxlbWVudCJdCn0K
1974
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCByZXF1aXJlJCQwLCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3ggfSBmcm9tICdyZWFjdC9qc3gtcnVudGltZSc7XG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBjb25uZWN0VG9DaGlsZCB9IGZyb20gJ3BlbnBhbCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5jb25zdCBFbGVtZW50c0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgZm9ybUlkOiBcIlwiLFxuICBmb3JtSGVpZ2h0OiBcIlwiLFxuICByZWZlcmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBGUkFNRV9CQVNFX1VSTCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIjtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlID0gei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNvZGU6IHouc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIHBhdGg6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgWm9kRmllbGRFcnJvcnMgPSB6LmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogYENvbm5lY3Rpb24gZXJyb3I6IHBsZWFzZSBkb3VibGUgY2hlY2sgaWYgeW91IGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LCB0aGVuIHRyeSBhZ2FpbmBcbn07XG5jb25zdCBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSA9IChvZ0Vycm9yTWVzc2FnZSkgPT4ge1xuICBjb25zdCBrZXkgPSBvZ0Vycm9yTWVzc2FnZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIE1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0Vba2V5XSA/PyBvZ0Vycm9yTWVzc2FnZTtcbn07XG5jb25zdCBpc1N0cmluZ2lmaWVkSnNvbk9iamVjdCA9IChzdHIpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0cik7XG4gICAgcmV0dXJuIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UocmVzcG9uc2VbMF0ubXNnKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBidWxsZXRlZCA9IHJlc3BvbnNlLm1hcCgoZXJyKSA9PiBg4oCiICR7Z2V0SHVtYW5GcmllbmRseU1lc3NhZ2UoZXJyLm1zZyl9YCkuam9pbihcIlxcblwiKTtcbiAgICByZXR1cm4gYCR7YFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6YH1cbiR7YnVsbGV0ZWR9YDtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMgPSAoZXJyb3JzKSA9PiB7XG4gIGNvbnN0IGxpc3RPZkVycm9ycyA9IGVycm9ycy5tYXAoKGVycikgPT4gYC0gJHtlcnIucGF0aC5qb2luKFwiL1wiKX06ICR7ZXJyLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbiAgcmV0dXJuIGBFbmNvdW50ZXJlZCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7bGlzdE9mRXJyb3JzfWA7XG59O1xuY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKGUpID0+IHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGlmIChpc1N0cmluZ2lmaWVkSnNvbk9iamVjdChlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGUubWVzc2FnZSk7XG4gICAgICBpZiAoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZS5zYWZlUGFyc2Uob2JqKS5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yKG9iaik7XG4gICAgICB9IGVsc2UgaWYgKFpvZEZpZWxkRXJyb3JzLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMob2JqKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4gZS5tZXNzYWdlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbiAgICB9IGNhdGNoIChlMikge1xuICAgICAgcmV0dXJuIGUyICsgXCJcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGUgKyBcIlwiO1xuICB9XG59O1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbmNvbnN0IEVsZW1lbnRUeXBlID0gei5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6LmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogei5vcHRpb25hbCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6LmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xuY29uc3QgRWxlbWVudEV2ZW50ID0gei5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkc1xufSk7XG52YXIgVGhyZWVEU1N0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyAoKFRocmVlRFNTdGF0dXMyKSA9PiB7XG4gIFRocmVlRFNTdGF0dXMyW1wiU1VDQ0VTU1wiXSA9IFwic3VjY2Vzc1wiO1xuICBUaHJlZURTU3RhdHVzMltcIkZBSUxVUkVcIl0gPSBcImZhaWx1cmVcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJDQU5DRUxMRURcIl0gPSBcImNhbmNlbGxlZFwiO1xuICByZXR1cm4gVGhyZWVEU1N0YXR1czI7XG59KShUaHJlZURTU3RhdHVzIHx8IHt9KTtcbmNvbnN0IFBpbmczRFNTdGF0dXNSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSlcbn0pO1xuY29uc3QgQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpXG59KTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbn0pO1xuY29uc3Qgb3VyQ3VycmVuY3lUb1RoZWlycyA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn07XG5jb25zdCBnZXRMb2FkZWRTdHJpcGUgPSBhc3luYyAocHVibGlzaGFibGVLZXkpID0+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgICBhd2FpdCBzbGVlcCg1MDApO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU3RyaXBlSnNQcmVzZW50KCkpIHtcbiAgICBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIEpTIG5vdCBmb3VuZC5gKTtcbiAgfVxuICBjb25zdCBzdHJpcGUgPSBuZXcgU3RyaXBlKHB1Ymxpc2hhYmxlS2V5KTtcbiAgcmV0dXJuIHN0cmlwZTtcbn07XG5jb25zdCBjcmVhdGVTdHJpcGVFbGVtZW50cyA9IGFzeW5jIChzdHJpcGVQdWJLZXksIGVsZW1lbnRzT3B0aW9ucykgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUoc3RyaXBlUHViS2V5KTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogc3RyaXBlLmVsZW1lbnRzKGVsZW1lbnRzT3B0aW9ucyksXG4gICAgc3RyaXBlXG4gIH07XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QgPSBhc3luYyAoc3RyaXBlUHViS2V5LCB0b3RhbEFtb3VudEF0b20sIGN1cnJlbmN5LCBpc0Ftb3VudFBlbmRpbmcsIGlzTGlua09ubHkpID0+IHtcbiAgY29uc29sZS5sb2coaXNMaW5rT25seSk7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIHJlcXVlc3RQYXllck5hbWU6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6IHRydWUsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdIFxuICB9KTtcbiAgcmV0dXJuIHBheW1lbnRSZXF1ZXN0O1xufTtcbmNvbnN0IHNsZWVwID0gKHRpbWVvdXRNcykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcyk7XG4gIH0pO1xufTtcbmNvbnN0IGlzU3RyaXBlSnNQcmVzZW50ID0gKCkgPT4ge1xuICByZXR1cm4gXCJTdHJpcGVcIiBpbiB3aW5kb3c7XG59O1xuY29uc3Qgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QgPSBhc3luYyAocGF5bWVudFJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheWApKTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9XG4gIH0pO1xufTtcbmNvbnN0IGNvbmZpcm1QYXltZW50Rmxvd0ZvclN0cmlwZVBSTGVnYWN5ID0gYXN5bmMgKHBheWxvYWQsIHN0cmlwZVBtKSA9PiB7XG4gIGNvbnN0IG5leHRBY3Rpb25NZXRhZGF0YSA9IHBheWxvYWQubmV4dEFjdGlvbk1ldGFkYXRhO1xuICBpZiAoIXBheWxvYWQucGF5bWVudEZsb3dNZXRhZGF0YSB8fCAhcGF5bG9hZC5wYXltZW50Rmxvd01ldGFkYXRhW1wic3RyaXBlUG1JZFwiXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXltZW50IGZsb3cgbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHBheWxvYWQucGF5bWVudEZsb3dNZXRhZGF0YSl9YCk7XG4gIH1cbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrIHx8ICFuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkobmV4dEFjdGlvbk1ldGFkYXRhKX1gKTtcbiAgfVxuICBpZiAoc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZCAhPT0gcGF5bG9hZC5wYXltZW50Rmxvd01ldGFkYXRhW1wic3RyaXBlUG1JZFwiXSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUE0gSUQgbWlzbWF0Y2g6ICR7c3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZH0gIT0gJHtwYXlsb2FkLnBheW1lbnRGbG93TWV0YWRhdGFbXCJzdHJpcGVQbUlkXCJdfWApO1xuICB9XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BrKTtcbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IHN0cmlwZS5jb25maXJtQ2FyZFNldHVwKG5leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHBheWxvYWQucGF5bWVudEZsb3dNZXRhZGF0YVtcInN0cmlwZVBtSWRcIl1cbiAgfSk7XG4gIGlmIChjb25maXJtUmVzdWx0LmVycm9yKSB7XG4gICAgc3RyaXBlUG0uY29tcGxldGUoXCJmYWlsXCIpO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7Y29uZmlybVJlc3VsdC5lcnJvci5tZXNzYWdlID8/IGB1bmtub3duYH1gKTtcbiAgfSBlbHNlIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcInN1Y2Nlc3NcIik7XG4gIH1cbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBjb25maXJtUGF5bWVudEZsb3dGb3IzRFMgPSBhc3luYyAocGF5bG9hZCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEucGFyc2UocGF5bG9hZC5uZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBhd2FpdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93KG5leHRBY3Rpb25NZXRhZGF0YSk7XG59O1xuY29uc3QgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wbV9pZFxuICB9KTtcbiAgY29uc3QgcmVzdWx0U3RhdHVzID0gY29uZmlybVJlc3VsdC5zZXR1cEludGVudD8uc3RhdHVzO1xuICBpZiAocmVzdWx0U3RhdHVzID09PSBcInN1Y2NlZWRlZFwiKSB7XG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkKTtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50KTtcbiAgfSBlbHNlIGlmIChyZXN1bHRTdGF0dXMgPT09IFwiY2FuY2VsZWRcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29uZmlybVJlc3VsdC5lcnJvcj8ubWVzc2FnZSA/PyBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5sYXN0X3NldHVwX2Vycm9yPy5tZXNzYWdlID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtID0gKGZvcm1EaXYsIGluaXRpYWxEaWN0KSA9PiB7XG4gIGNvbnN0IGluY2x1ZGVkSW5wdXRzID0gQXJyYXkuZnJvbShmb3JtRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSk7XG4gIGNvbnN0IGV4dHJhRGF0YSA9IGluY2x1ZGVkSW5wdXRzLnJlZHVjZSgoYWNjLCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGlucHV0LmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGFjYztcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiBpbnB1dC52YWx1ZSB9O1xuICB9LCBpbml0aWFsRGljdCA/PyB7fSk7XG4gIHJldHVybiBleHRyYURhdGE7XG59O1xuY29uc3QgY29uc3RydWN0U3VibWl0RXZlbnRQYXlsb2FkID0gKGV2ZW50VHlwZSwgc2Vzc2lvbklkLCBmb3JtRGl2LCBvblZhbGlkYXRpb25FcnJvciwgY2hlY2tvdXRQYXltZW50TWV0aG9kLCBkb05vdFVzZUxlZ2FjeUNDRmxvdywgcGF5bWVudEZsb3dNZXRhZGF0YSkgPT4ge1xuICBjb25zdCBleHRyYURhdGEgPSBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oZm9ybURpdiwge1xuICAgIHR5cGU6IGV2ZW50VHlwZSxcbiAgICBzZXNzaW9uSWQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIHBheW1lbnRGbG93TWV0YWRhdGEsXG4gICAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3dcbiAgfSk7XG4gIGNvbnNvbGUubG9nKGBbZm9ybV0gQ29uc3RydWN0aW5nICR7ZXZlbnRUeXBlfSBwYXlsb2FkOmAsIEpTT04uc3RyaW5naWZ5KGV4dHJhRGF0YSkpO1xuICBpZiAoY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyID09PSBcImFwcGxlX3BheVwiIHx8IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlciA9PT0gXCJnb29nbGVfcGF5XCIgfHwgY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyID09PSBcInN0cmlwZV9saW5rXCIpIHtcbiAgICBpZiAoIWV4dHJhRGF0YVtGaWVsZE5hbWUuWklQX0NPREVdKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIltmb3JtXSBPdmVycmlkaW5nIGVtcHR5IHppcCBjb2RlIChvbmx5IGZvciBnb29nbGUgcGF5LCBhcHBsZSBwYXksIGFuZCBzdHJpcGUgbGluaylcIik7XG4gICAgICBleHRyYURhdGFbRmllbGROYW1lLlpJUF9DT0RFXSA9IFwiMDAwMDBcIjtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGF5bG9hZCA9IFN1Ym1pdEV2ZW50UGF5bG9hZC5zYWZlUGFyc2UoZXh0cmFEYXRhKTtcbiAgaWYgKCFwYXlsb2FkLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBwYXlsb2FkLmVycm9yLmZvcm1hdCgpO1xuICAgIGNvbnN0IGlzc3VlcyA9IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZChmb3JtYXR0ZWQpO1xuICAgIGZvciAoY29uc3QgW2ZpZWxkTmFtZSwgZXJyb3JzXSBvZiBPYmplY3QuZW50cmllcyhpc3N1ZXMpKSB7XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coXCJbZm9ybV0gQ29uc3RydWN0ZWQgcGF5bG9hZCBpbiBGQUlMOlwiLCBwYXlsb2FkLmRhdGEpO1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFwiW2Zvcm1dIENvbnN0cnVjdGVkIHBheWxvYWQ6XCIsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQuZGF0YSkpO1xuICAgIHJldHVybiBwYXlsb2FkLmRhdGE7XG4gIH1cbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5jb25zdCBlbWl0RXZlbnQgPSAodGFyZ2V0LCBmb3JtSWQsIGVsZW1lbnRJZCwgcGF5bG9hZCwgYmFzZVVybCkgPT4ge1xuICBjb25zdCBldmVudCA9IHtcbiAgICBwYXlsb2FkLFxuICAgIG5vbmNlOiB2NCgpLFxuICAgIGZvcm1JZCxcbiAgICBlbGVtZW50SWRcbiAgfTtcbiAgY29uc29sZS5sb2coYFtmb3JtICR7Zm9ybUlkfV0gU2VuZGluZyBldmVudCB0byBjaGlsZCAke2VsZW1lbnRJZH06YCwgZXZlbnQpO1xuICB0YXJnZXQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQpLCBiYXNlVXJsKTtcbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDZGVDb25uZWN0aW9uKGlmcmFtZSkge1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZVxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgaXNWYWxpZE9iamVjdCA9IGF3YWl0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QoY29ubmVjdGlvbk9iaik7XG4gIGlmICghaXNSZXN1bHRWYWxpZChjb25uZWN0aW9uT2JqLCBpc1ZhbGlkT2JqZWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0YCk7XG4gIH1cbiAgY29uc29sZS5sb2coXCJbT0pTXSBjb25uZWN0ZWQgdG8gaWZyYW1lXCIsIGlmcmFtZS5pZCk7XG4gIHJldHVybiBjb25uZWN0aW9uT2JqO1xufVxuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6Lm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBDREVSZXNwb25zZUVycm9yID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6LmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogei5udWxsYWJsZSh6LnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHoub2JqZWN0KHtcbiAgICBtb2RlOiB6LmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHouc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xuei5vYmplY3Qoe1xuICBsb2dvOiB6LnN0cmluZygpLFxuICBpY29uOiB6LnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6LnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHouYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogei5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG56Lm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd0ZvckNDUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuXG5jb25zdCBzdW0gPSAoYXJyKSA9PiB7XG4gIHJldHVybiBhcnIucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG59O1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbnZhciBDdXN0b21FcnJvciA9IGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0oRXJyb3IpO1xuXG5jbGFzcyBDZGVFcnJvciBleHRlbmRzIEN1c3RvbUVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBjb25zdCBmcmllbmRseU1lc3NhZ2UgPSBgW2NkZS1jbGllbnRdIEVycm9yIHF1ZXJ5aW5nIENERTogJHtyZXNwb25zZS5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZnJpZW5kbHlNZXNzYWdlKTtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IHF1ZXJ5Q0RFID0gYXN5bmMgKGNkZUNvbm4sIGRhdGEsIHJlc3BvbnNlU2NoZW1hKSA9PiB7XG4gIGNvbnNvbGUubG9nKFwiW2NkZS1jbGllbnRdIFF1ZXJ5aW5nIENERSB3aXRoIHBhdGggYW5kIGNvbm5lY3Rpb246XCIsIGRhdGEudHlwZSwgY2RlQ29ubik7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2RlQ29ubi5zZW5kKGRhdGEpO1xuICBjb25zb2xlLmxvZyhcIltjZGUtY2xpZW50XSBHb3QgcmVzcG9uc2UgZnJvbSBDREU6XCIsIHJlc3BvbnNlKTtcbiAgaWYgKGlzQ0RFUmVzcG9uc2VFcnJvcihyZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgQ2RlRXJyb3IocmVzcG9uc2UpO1xuICB9XG4gIGlmICghY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEocmVzcG9uc2UsIHJlc3BvbnNlU2NoZW1hKSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZShyZXNwb25zZSk7XG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpO1xuICAgIGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHJlc3BvbnNlU2NoZW1hLCBcIkFjdHVhbDpcIiwgcmVzcG9uc2UpO1xuICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2U7XG59O1xuY29uc3QgY2hlY2tJZkNvbmZvcm1zVG9TY2hlbWEgPSAodmFsdWUsIHNjaGVtYSkgPT4ge1xuICByZXR1cm4gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSkuc3VjY2Vzcztcbn07XG5jb25zdCBpc0NERVJlc3BvbnNlRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgcmV0dXJuIENERVJlc3BvbnNlRXJyb3Iuc2FmZVBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzO1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlldyA9IGFzeW5jIChjZGVDb25uLCByZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogcmVxdWVzdCB9LCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgZ2V0UHJlZmlsbCA9IGFzeW5jIChjZGVDb25uKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUGF5bWVudEZvcm1QcmVmaWxsKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xufTtcbmNvbnN0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkIH0sIFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yUFIgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xufTtcbmNvbnN0IGNvbmZpcm1QYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZCB9LCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSk7XG59O1xuY29uc3Qgd2FpdEZvckZvcm1GaWVsZElucHV0ID0gYXN5bmMgKGZvcm1EaXYsIGZpZWxkTmFtZSwgd2FpdFRpbWVNcykgPT4ge1xuICBjb25zdCBzdGFydFdhaXRUaW1lID0gRGF0ZS5ub3coKTtcbiAgd2FpdFRpbWVNcyA9IHdhaXRUaW1lTXMgPz8gNWUzO1xuICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0V2FpdFRpbWUgPCB3YWl0VGltZU1zKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBmb3JtRGl2LnF1ZXJ5U2VsZWN0b3IoYGlucHV0W2RhdGEtb3BpZD0ke2ZpZWxkTmFtZX1dYCk7XG4gICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICBpZiAoIShtYXRjaCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZTogbWF0Y2hlZCBpbnB1dCBlbGVtZW50IGhhZCB3cm9uZyBjbGFzczogJHttYXRjaC50YWdOYW1lfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH1cbiAgICBhd2FpdCBzbGVlcCgzMDApO1xuICB9XG4gIGNvbnNvbGUud2FybihcIkNhbm5vdCBmaW5kIHByb21vIGNvZGUgaW5wdXRcIik7XG4gIHJldHVybiBudWxsO1xufTtcbmNvbnN0IGdldENoZWNrb3V0VmFsdWUgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSkgPT4ge1xuICBjb25zdCBjaGVja291dFByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXcoY2RlQ29ubiwge1xuICAgIHNlY3VyZV90b2tlbjogc2VjdXJlVG9rZW4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHByb21vQ29kZVxuICB9KTtcbiAgY29uc3QgY3VycmVuY2llcyA9IG5ldyBTZXQoY2hlY2tvdXRQcmV2aWV3LnByZXZpZXcuaW52b2ljZXMubWFwKChpbnYpID0+IGludi5jdXJyZW5jeSkpO1xuICBpZiAoY3VycmVuY2llcy5zaXplICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7Y3VycmVuY2llcy5zaXplfWApO1xuICB9XG4gIGNvbnN0IGN1cnJlbmN5ID0gY3VycmVuY2llcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIjtcbiAgY29uc3QgYW1vdW50QXRvbSA9IHN1bShjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5LFxuICAgIGFtb3VudEF0b21cbiAgfTtcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQgPSBhc3luYyAoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGUpID0+IHtcbiAgaWYgKGlzU2V0dXBNb2RlKSB7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAgfSBlbHNlIHtcbiAgICBwcm9tb0NvZGUgPSAhcHJvbW9Db2RlID8gdm9pZCAwIDogcHJvbW9Db2RlO1xuICAgIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0VmFsdWUoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIHByb21vQ29kZSk7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogY2hlY2tvdXRQcmV2aWV3LmFtb3VudEF0b20sIGN1cnJlbmN5OiBjaGVja291dFByZXZpZXcuY3VycmVuY3kgfTtcbiAgfVxufTtcbmNvbnN0IHRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMgPSBhc3luYyAoYWxsQ2RlQ29ubmVjdGlvbnMsIHBheWxvYWQpID0+IHtcbiAgaWYgKGFsbENkZUNvbm5lY3Rpb25zLnNpemUgPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIH1cbiAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShhbGxDZGVDb25uZWN0aW9ucy52YWx1ZXMoKSkubWFwKFxuICAgICAgKGNkZUNvbm4pID0+IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQgfSwgVG9rZW5pemVDYXJkUmVzcG9uc2UpXG4gICAgKVxuICApO1xuICByZXR1cm4gcmVzcG9uc2VzO1xufTtcbmNvbnN0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGVycm9yLCBKU09OLnN0cmluZ2lmeShlcnJvcikpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuY29uc3Qgc2V0dXBDaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZCB9LCBTZXR1cENoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IHBlcmZvcm1DaGVja291dCA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZCB9LCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSk7XG59O1xuY29uc3QgQ0RFX1BPTExJTkdfSU5URVJWQUwgPSAxZTM7XG5jb25zdCBwaW5nQ2RlRm9yM2RzU3RhdHVzID0gYXN5bmMgKGlmcmFtZSwgY2hpbGRPcmlnaW4pID0+IHtcbiAgY29uc29sZS5sb2coY2hpbGRPcmlnaW4pO1xuICBjb25zdCBjb25uZWN0aW9uID0gY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZSxcbiAgICBkZWJ1ZzogdHJ1ZSxcbiAgICB0aW1lb3V0OiBDREVfUE9MTElOR19JTlRFUlZBTCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25PYmogPSBhd2FpdCBjb25uZWN0aW9uLnByb21pc2U7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHF1ZXJ5Q0RFKGNvbm5lY3Rpb25PYmosIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UpO1xuICByZXR1cm4gcmVzdWx0LnN0YXR1cztcbn07XG5cbmNvbnN0IGlzSnNvblN0cmluZyA9IChzdHIpID0+IHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBKU09OLnBhcnNlKHN0cik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzID0gKHNpbXBsZU9qc0Zsb3cpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25DaGVja291dFN0YXJ0ZWQoKTtcbiAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBhd2FpdCBzaW1wbGVPanNGbG93KHBhcmFtcyk7XG4gICAgICBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGZsb3dSZXN1bHQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIH0gZWxzZSBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcImNoZWNrb3V0XCIpIHtcbiAgICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25DaGVja291dFN1Y2Nlc3MoXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICAgIGZsb3dSZXN1bHQucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuY3VzdG9tZXJfaWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7Zmxvd1Jlc3VsdH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcGFyYW1zLmZsb3dDYWxsYmFja3Mub25DaGVja291dEVycm9yKGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGFkZEVycm9yQ2F0Y2hlckZvckluaXQgPSAoaW5pdCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgaW5pdChwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICAgIGVycl9fKGVycm9yKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH07XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0uZXJyb3IoYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ1LCBlcnJfXzogZXJyX18kNSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb25cIik7XG5jb25zdCBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7cmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogcmVzcG9uc2UucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59O1xuY29uc3QgZmluZENwbU1hdGNoaW5nVHlwZSA9IChhbGxDUE1zLCB6b2RNb2RlbCkgPT4ge1xuICBjb25zdCBjcG0gPSBhbGxDUE1zLmZpbmQoKGNwbTIpID0+IHpvZE1vZGVsLnNhZmVQYXJzZShjcG0yKS5zdWNjZXNzKTtcbiAgaWYgKCFjcG0pIHtcbiAgICBlcnJfXyQ1KGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpgLCBhbGxDUE1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsYCk7XG4gIH1cbiAgcmV0dXJuIHpvZE1vZGVsLnBhcnNlKGNwbSk7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ0LCBlcnJfXzogZXJyX18kNCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICBjb25zdCBwYXlsb2FkID0gUmVxdWlyZWRGb3JtRmllbGRzLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFwYXlsb2FkLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBwYXlsb2FkLmVycm9yLmZvcm1hdCgpO1xuICAgIGNvbnN0IGlzc3VlcyA9IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZChmb3JtYXR0ZWQpO1xuICAgIGZvciAoY29uc3QgW2ZpZWxkTmFtZSwgZXJyb3JzXSBvZiBPYmplY3QuZW50cmllcyhpc3N1ZXMpKSB7XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kNChgR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNgLCBpc3N1ZXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBwYXlsb2FkLmRhdGE7XG59O1xuY29uc3QgdmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzID0gKHRva2VuaXplUmVzdWx0cywgb25WYWxpZGF0aW9uRXJyb3IpID0+IHtcbiAgZm9yIChjb25zdCB0b2tlbml6ZVJlc3VsdCBvZiB0b2tlbml6ZVJlc3VsdHMpIHtcbiAgICBpZiAodG9rZW5pemVSZXN1bHQuc3VjY2VzcyA9PT0gZmFsc2UpIHtcbiAgICAgIHRva2VuaXplUmVzdWx0LmVycm9ycy5mb3JFYWNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBBbGxGaWVsZE5hbWVzLnNhZmVQYXJzZShlcnJvci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBlcnJfXyQ0KGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ZXJyb3IuZWxlbWVudFR5cGV9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcGFyc2VkLmRhdGE7XG4gICAgICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDQoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHRva2VuaXplUmVzdWx0LmVycm9ycyl9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kMywgZXJyX186IGVycl9fJDMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmbG93Q2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kMyhgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBzdHJpcGVMaW5rQ3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFN0cmlwZUxpbmtDcG0pO1xuICAgIGxvZ19fJDMoYFN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gQXJyYXkuZnJvbShjb250ZXh0LmNkZUNvbm5lY3Rpb25zLnZhbHVlcygpKVswXTtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBjb25zdCBpc1NldHVwTW9kZSA9IHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIGxvZ19fJDMoYENyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLmApO1xuICAgIGNvbnN0IGluaXRpYWxQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KGFueUNkZUNvbm5lY3Rpb24sIHByZWZpbGwudG9rZW4sIGlzU2V0dXBNb2RlLCB2b2lkIDApO1xuICAgIGNvbnN0IHsgZWxlbWVudHMsIHN0cmlwZSB9ID0gYXdhaXQgY3JlYXRlU3RyaXBlRWxlbWVudHMoc3RyaXBlTGlua0NwbS5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgbG9nX18kMyhgQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLmApO1xuICAgIGNvbnN0IGV4cHJlc3NDaGVja291dEVsZW1lbnQgPSBlbGVtZW50cy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiBpbml0UGFyYW1zPy5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgbW91bnRCdXR0b24gPSAoKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50Lm1vdW50KGAjJHtPSlNfU1RSSVBFX0xJTktfQlROX0lEfWApO1xuICAgIH07XG4gICAgY29uc3QgZGlzbW91bnRCdXR0b24gPSAoKSA9PiB7XG4gICAgICBleHByZXNzQ2hlY2tvdXRFbGVtZW50LnVubW91bnQoKTtcbiAgICB9O1xuICAgIGlmIChpbml0UGFyYW1zPy5kb05vdE1vdW50T25Jbml0KSB7XG4gICAgICBsb2dfXyQzKGBOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDMoYE1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLmApO1xuICAgICAgbW91bnRCdXR0b24oKTtcbiAgICB9XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNsaWNrXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kMyhcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpO1xuICAgICAgaWYgKGluaXRQYXJhbXM/Lm92ZXJyaWRlTGlua1N1Ym1pdCkge1xuICAgICAgICBjb25zdCBzaG91bGRTdWJtaXQgPSBhd2FpdCBpbml0UGFyYW1zLm92ZXJyaWRlTGlua1N1Ym1pdCgpO1xuICAgICAgICBpZiAoIXNob3VsZFN1Ym1pdCkge1xuICAgICAgICAgIGxvZ19fJDMoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICBsb2dfXyQzKFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBldmVudCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdHJpcGUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGV2ZW50LmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICBlcnJfXyQzKFwiZXJyb3JcIiwgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgZmxvd0NhbGxiYWNrcy5vbkNoZWNrb3V0RXJyb3IocmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kMyhcInBheW1lbnRNZXRob2RcIiwgcmVzdWx0LnBheW1lbnRNZXRob2QpO1xuICAgICAgICBPanNGbG93cy5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0cmlwZUxpbmtDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZmxvd0NhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHJlc3VsdC5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogdHJ1ZSB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b24sXG4gICAgICAgIGRpc21vdW50QnV0dG9uLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgZ2V0RWxlbWVudEJ5SWRBc3luYyhPSlNfU1RSSVBFX0xJTktfQlROX0lEKVxuICAgICAgfVxuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5TdHJpcGVMaW5rRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZmxvd0NhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXNcbiAgfSkgPT4ge1xuICAgIGxvZ19fJDMoYFJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5gKTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gQXJyYXkuZnJvbShjb250ZXh0LmNkZUNvbm5lY3Rpb25zLnZhbHVlcygpKVswXTtcbiAgICBsb2dfXyQzKGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZsb3dDYWxsYmFja3Mub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGxvZ19fJDMoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLmApO1xuICAgIGNvbnN0IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBjdXN0b21QYXJhbXMuc3RyaXBlUE0uaWRcbiAgICB9KTtcbiAgICBsb2dfXyQzKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgY29uc3Qgb3VyRXhpc3RpbmdQbUlkID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJDMoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBvdXJFeGlzdGluZ1BtSWRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDMoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJDMoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgZ2V0RWxlbWVudEJ5SWRBc3luYyA9IChpZCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgY29uc3QgZ2V0RWxlbWVudCA9ICgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXNvbHZlKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZ2V0RWxlbWVudCk7XG4gICAgfVxuICB9O1xuICBnZXRFbGVtZW50KCk7XG59KTtcblxuY29uc3Qgc3R5bGVzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZXttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIjtcblxuY29uc3QgY3JlYXRlQW5kT3BlbkZyYW1lID0gKHVybCkgPT4ge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5cbmZ1bmN0aW9uIHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgaGFuZGxlUG9sbGluZyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5sb2coXCLwn5SEIFBvbGxpbmcgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBwaW5nQ2RlRm9yM2RzU3RhdHVzKGlmcmFtZSwgY2hpbGRPcmlnaW4pO1xuICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLlwiKTtcbiAgICAgICAgY29uc29sZS5sb2coXCLinqHvuI8gR290IHN0YXR1czpcIiwgc3RhdHVzKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICBvblN1Y2Nlc3Moc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlUG9sbGluZygpO1xuICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVQb2xsaW5nLCBDREVfUE9MTElOR19JTlRFUlZBTCk7XG4gIHJldHVybiBwb2xsaW5nSW50ZXJ2YWw7XG59XG5mdW5jdGlvbiBoYW5kbGVFdmVudHMoe1xuICBlbGVtZW50cyxcbiAgcG9sbGluZ0ludGVydmFsLFxuICByZXNvbHZlXG59KSB7XG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICByZXNvbHZlKFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKTtcbiAgfTtcbiAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICB9O1xuICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xufVxuYXN5bmMgZnVuY3Rpb24gc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICB1cmwsXG4gIGJhc2VVcmxcbn0pIHtcbiAgY29uc3QgZWxlbWVudHMgPSBjcmVhdGVBbmRPcGVuRnJhbWUodXJsKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKHN0YXR1cykgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnRzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpO1xuICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgY2xlYW51cEV2ZW50TGlzdGVuZXJzPy4oKTtcbiAgICB9O1xuICAgIGNvbnN0IHBvbGxpbmdJbnRlcnZhbCA9IHN0YXJ0UG9sbGluZyhlbGVtZW50cy5pZnJhbWUsIG9uU3VjY2VzcywgbmV3IFVSTChiYXNlVXJsKS5vcmlnaW4pO1xuICAgIGNvbnN0IGNsZWFudXBFdmVudExpc3RlbmVycyA9IGhhbmRsZUV2ZW50cyh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbCxcbiAgICAgIHJlc29sdmVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbmNvbnN0IHJ1bkNvbW1vbkNjRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoeyBjb250ZXh0LCBjaGVja291dFBheW1lbnRNZXRob2QsIG5vbkNkZUZvcm1JbnB1dHMsIGZsb3dDYWxsYmFja3MgfSkgPT4ge1xuICAgIGxvZ19fJDIoYOKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uYCwgeyBjaGVja291dFBheW1lbnRNZXRob2QgfSk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kMihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtwcmVmaWxsLm1vZGV9XWApO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhub25DZGVGb3JtSW5wdXRzLCBmbG93Q2FsbGJhY2tzLm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyQyKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgIHNlc3Npb25faWQ6IGNvbnRleHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICB9KTtcbiAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgY29uc3QgY29tbW9uQ2hlY2tvdXRQYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IG5vbkNkZUZvcm1GaWVsZHNcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgbG9nX18kMihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtwcmVmaWxsLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2V0dXBDaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDIoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtyZXN1bHQucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nX18kMihg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7Y29udGV4dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIGNvbW1vbkNoZWNrb3V0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMihg4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuYCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENkZUVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5vcmlnaW5hbEVycm9yTWVzc2FnZSA9PT0gXCIzRFNfUkVRVUlSRURcIikge1xuICAgICAgICAgIGxvZ19fJDIoYOKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dgKTtcbiAgICAgICAgICBsb2dfXyQyKFwiZXJyb3IucmVzcG9uc2UuaGVhZGVyc1wiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBjb25zdCBzaG91bGRVc2VOZXdGbG93ID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycz8uW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgY29uc3Qgc3RhcnRQZlJlc3VsdCA9IGF3YWl0IHN0YXJ0UGF5bWVudEZsb3dGb3JDQyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgICAgbG9nX18kMihg4pScIG9wLXNob3VsZC11c2UtbmV3LWZsb3c6ICR7c2hvdWxkVXNlTmV3Rmxvd31gKTtcbiAgICAgICAgICBsb2dfXyQyKGDilJwgUGF5bWVudCBmbG93IHJlc3VsdDpgLCBzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICBpZiAoc2hvdWxkVXNlTmV3Rmxvdykge1xuICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyQyKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3N0YXJ0UGZSZXN1bHQuY2NfcG1faWR9XWApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbG9nX18kMihg4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6YCwgY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Y3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWR9XWApO1xuICAgICAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDIoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7c2hvdWxkVXNlTmV3RmxvdyA/IFwibmV3XCIgOiBcImxlZ2FjeVwifV1gKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrb3V0Q2FyZEVsZW1lbnRzKGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uQ2hlY2tvdXRQYXJhbXMsXG4gICAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBzdGFydFBmUmVzdWx0LmNjX3BtX2lkLFxuICAgICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiAhc2hvdWxkVXNlTmV3Rmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQyKGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyQyKGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJDIoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGxvZ19fJDIoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oeyB1cmw6IG5leHRBY3Rpb25NZXRhZGF0YS5yZWRpcmVjdF91cmwsIGJhc2VVcmwgfSk7XG4gIGxvZ19fJDIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbn07XG5jb25zdCBzdHJpcGVDQzNEU0Zsb3cgPSBhc3luYyAoc3RhcnRQZlJlc3VsdCkgPT4ge1xuICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YShzdGFydFBmUmVzdWx0KTtcbiAgc3RyaXBlTG9nX18oYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKTtcbiAgYXdhaXQgbGF1bmNoU3RyaXBlM0RTRGlhbG9nRmxvdyhuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBzdHJpcGVMb2dfXyhcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1wclwiKTtcbmNvbnN0IFN0cmlwZVByQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei51bmlvbihbei5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IGluaXRTdHJpcGVQckZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0IH0pID0+IHtcbiAgICBsb2dfXyQxKGBDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UGF5bWVudE1ldGhvZCA9IGZpbmRDcG1NYXRjaGluZ1R5cGUoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBTdHJpcGVQckNwbSk7XG4gICAgbG9nX18kMShgSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IEFycmF5LmZyb20oY29udGV4dC5jZGVDb25uZWN0aW9ucy52YWx1ZXMoKSlbMF07XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQxKGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQxKGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kMShgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDEoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgZmxvd0NhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXMsXG4gICAgaW5pdFJlc3VsdFxuICB9KSA9PiB7XG4gICAgbG9nX18kMShgUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGlmIChjdXN0b21QYXJhbXMucHJvdmlkZXIgIT09IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtjdXN0b21QYXJhbXMucHJvdmlkZXJ9LCBnb3QgJHtjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJ9YCk7XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBBcnJheS5mcm9tKGNvbnRleHQuY2RlQ29ubmVjdGlvbnMudmFsdWVzKCkpWzBdO1xuICAgIGNvbnN0IHByID0gaW5pdFJlc3VsdC5wcjtcbiAgICBpZiAoY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IGN1c3RvbVBhcmFtcy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgbG9nX18kMShgT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aGAsIG92ZXJyaWRlKTtcbiAgICAgIHVwZGF0ZVByV2l0aEFtb3VudChwciwgb3ZlcnJpZGUuYW1vdW50LCBvdmVycmlkZS5wZW5kaW5nKTtcbiAgICB9XG4gICAgbG9nX18kMShgU2hvd2luZyBQUiBkaWFsb2cuLi5gKTtcbiAgICBwci5zaG93KCk7XG4gICAgY29uc3Qgc3RyaXBlUG1BZGRlZEV2ZW50ID0gYXdhaXQgd2FpdEZvclVzZXJUb0FkZFBheW1lbnRNZXRob2QocHIpO1xuICAgIGxvZ19fJDEoYFN0cmlwZSBQTSBhZGRlZCBldmVudDpgLCBzdHJpcGVQbUFkZGVkRXZlbnQpO1xuICAgIGxvZ19fJDEoYE1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5gKTtcbiAgICBjb25zdCBtZXJnZWRJbnB1dHMgPSBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtKG5vbkNkZUZvcm1JbnB1dHMsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKG1lcmdlZElucHV0cywgZmxvd0NhbGxiYWNrcy5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgbG9nX18kMShgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDEoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQxKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDEoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtRXZ0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHN0cmlwZVBtRXZ0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gIGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldIHx8IHN0cmlwZVBtRXZ0LnNoaXBwaW5nQWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJDEoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgdXBkYXRlUHJXaXRoQW1vdW50ID0gKHByLCBhbW91bnQsIGlzUGVuZGluZykgPT4ge1xuICBwci51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IGFtb3VudC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGlzUGVuZGluZ1xuICAgIH0sXG4gICAgY3VycmVuY3k6IGFtb3VudC5jdXJyZW5jeVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdCA9IChjcG1zLCB3aXRoUHJvdmlkZXIsIHdpdGhQcm9jZXNzb3IpID0+IHtcbiAgY29uc3QgbWF0Y2hlcyA9IGNwbXMuZmlsdGVyKChjcG0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVzUHJvY2Vzc29yID0gdHJ1ZSA7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICB9XG4gIGlmIChtYXRjaGVzLmxlbmd0aCAhPT0gMSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNbMF07XG59O1xuY29uc3QgT2pzRmxvd3MgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIHJ1bjogcnVuQ29tbW9uQ2NGbG93XG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVQckZsb3csXG4gICAgcnVuOiBydW5TdHJpcGVQckZsb3dcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVMaW5rRmxvdyxcbiAgICBydW46IHJ1blN0cmlwZUxpbmtGbG93XG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RXhwb3J0RnJvbUNqcyAoeCkge1xuXHRyZXR1cm4geCAmJiB4Ll9fZXNNb2R1bGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdkZWZhdWx0JykgPyB4WydkZWZhdWx0J10gOiB4O1xufVxuXG52YXIgT2JzZXJ2YWJsZSQyID0ge307XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYnNlcnZhYmxlJDIsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9ic2VydmFibGUkMi5PYnNlcnZhYmxlID0gdm9pZCAwO1xuXG4vLyA9PT0gU3ltYm9sIFN1cHBvcnQgPT09XG5jb25zdCBoYXNTeW1ib2wgPSBuYW1lID0+IEJvb2xlYW4oU3ltYm9sW25hbWVdKTtcblxuY29uc3QgZ2V0U3ltYm9sID0gbmFtZSA9PiBoYXNTeW1ib2wobmFtZSkgPyBTeW1ib2xbbmFtZV0gOiAnQEAnICsgbmFtZTtcblxuY29uc3QgU3ltYm9sSXRlcmF0b3IgPSBnZXRTeW1ib2woJ2l0ZXJhdG9yJyk7XG5jb25zdCBTeW1ib2xPYnNlcnZhYmxlID0gZ2V0U3ltYm9sKCdvYnNlcnZhYmxlJyk7XG5jb25zdCBTeW1ib2xTcGVjaWVzID0gZ2V0U3ltYm9sKCdzcGVjaWVzJyk7IC8vID09PSBBYnN0cmFjdCBPcGVyYXRpb25zID09PVxuXG5mdW5jdGlvbiBnZXRNZXRob2Qob2JqLCBrZXkpIHtcbiAgbGV0IHZhbHVlID0gb2JqW2tleV07XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKHZhbHVlICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFNwZWNpZXMob2JqKSB7XG4gIGxldCBjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuXG4gIGlmIChjdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICBjdG9yID0gY3RvcltTeW1ib2xTcGVjaWVzXTtcblxuICAgIGlmIChjdG9yID09PSBudWxsKSB7XG4gICAgICBjdG9yID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjdG9yICE9PSB1bmRlZmluZWQgPyBjdG9yIDogT2JzZXJ2YWJsZSQxO1xufVxuXG5mdW5jdGlvbiBpc09ic2VydmFibGUoeCkge1xuICByZXR1cm4geCBpbnN0YW5jZW9mIE9ic2VydmFibGUkMTsgLy8gU1BFQzogQnJhbmQgY2hlY2tcbn1cblxuZnVuY3Rpb24gaG9zdFJlcG9ydEVycm9yKGUpIHtcbiAgaWYgKGhvc3RSZXBvcnRFcnJvci5sb2cpIHtcbiAgICBob3N0UmVwb3J0RXJyb3IubG9nKGUpO1xuICB9IGVsc2Uge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnF1ZXVlKGZuKSB7XG4gIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBmbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhvc3RSZXBvcnRFcnJvcihlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikge1xuICBsZXQgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fY2xlYW51cDtcbiAgaWYgKGNsZWFudXAgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICBzdWJzY3JpcHRpb24uX2NsZWFudXAgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKCFjbGVhbnVwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHVuc3Vic2NyaWJlID0gZ2V0TWV0aG9kKGNsZWFudXAsICd1bnN1YnNjcmliZScpO1xuXG4gICAgICBpZiAodW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdW5zdWJzY3JpYmUuY2FsbChjbGVhbnVwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBob3N0UmVwb3J0RXJyb3IoZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSB7XG4gIHN1YnNjcmlwdGlvbi5fb2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gIHN1YnNjcmlwdGlvbi5fcXVldWUgPSB1bmRlZmluZWQ7XG4gIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAnY2xvc2VkJztcbn1cblxuZnVuY3Rpb24gZmx1c2hTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSB7XG4gIGxldCBxdWV1ZSA9IHN1YnNjcmlwdGlvbi5fcXVldWU7XG5cbiAgaWYgKCFxdWV1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN1YnNjcmlwdGlvbi5fcXVldWUgPSB1bmRlZmluZWQ7XG4gIHN1YnNjcmlwdGlvbi5fc3RhdGUgPSAncmVhZHknO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICBub3RpZnlTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uLCBxdWV1ZVtpXS50eXBlLCBxdWV1ZVtpXS52YWx1ZSk7XG4gICAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdjbG9zZWQnKSBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBub3RpZnlTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uLCB0eXBlLCB2YWx1ZSkge1xuICBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ3J1bm5pbmcnO1xuICBsZXQgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX29ic2VydmVyO1xuXG4gIHRyeSB7XG4gICAgbGV0IG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIsIHR5cGUpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgaWYgKG0pIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICBpZiAobSkgbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7ZWxzZSB0aHJvdyB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2NvbXBsZXRlJzpcbiAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgaWYgKG0pIG0uY2FsbChvYnNlcnZlcik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGhvc3RSZXBvcnRFcnJvcihlKTtcbiAgfVxuXG4gIGlmIChzdWJzY3JpcHRpb24uX3N0YXRlID09PSAnY2xvc2VkJykgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO2Vsc2UgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdydW5uaW5nJykgc3Vic2NyaXB0aW9uLl9zdGF0ZSA9ICdyZWFkeSc7XG59XG5cbmZ1bmN0aW9uIG9uTm90aWZ5KHN1YnNjcmlwdGlvbiwgdHlwZSwgdmFsdWUpIHtcbiAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdjbG9zZWQnKSByZXR1cm47XG5cbiAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgPT09ICdidWZmZXJpbmcnKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9xdWV1ZS5wdXNoKHtcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHN1YnNjcmlwdGlvbi5fc3RhdGUgIT09ICdyZWFkeScpIHtcbiAgICBzdWJzY3JpcHRpb24uX3N0YXRlID0gJ2J1ZmZlcmluZyc7XG4gICAgc3Vic2NyaXB0aW9uLl9xdWV1ZSA9IFt7XG4gICAgICB0eXBlLFxuICAgICAgdmFsdWVcbiAgICB9XTtcbiAgICBlbnF1ZXVlKCgpID0+IGZsdXNoU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG5vdGlmeVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24sIHR5cGUsIHZhbHVlKTtcbn1cblxuY2xhc3MgU3Vic2NyaXB0aW9uIHtcbiAgY29uc3RydWN0b3Iob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgICAvLyBBU1NFUlQ6IG9ic2VydmVyIGlzIGFuIG9iamVjdFxuICAgIC8vIEFTU0VSVDogc3Vic2NyaWJlciBpcyBjYWxsYWJsZVxuICAgIHRoaXMuX2NsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICB0aGlzLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdGF0ZSA9ICdpbml0aWFsaXppbmcnO1xuICAgIGxldCBzZWxmID0gdGhpcztcbiAgICBsZXQgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSB7XG4gICAgICBnZXQgY2xvc2VkKCkge1xuICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgPT09ICdjbG9zZWQnO1xuICAgICAgfSxcblxuICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICBvbk5vdGlmeShzZWxmLCAnbmV4dCcsIHZhbHVlKTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKHZhbHVlKSB7XG4gICAgICAgIG9uTm90aWZ5KHNlbGYsICdlcnJvcicsIHZhbHVlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICBvbk5vdGlmeShzZWxmLCAnY29tcGxldGUnKTtcbiAgICAgIH1cblxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fY2xlYW51cCA9IHN1YnNjcmliZXIuY2FsbCh1bmRlZmluZWQsIHN1YnNjcmlwdGlvbk9ic2VydmVyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzdWJzY3JpcHRpb25PYnNlcnZlci5lcnJvcihlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdpbml0aWFsaXppbmcnKSB0aGlzLl9zdGF0ZSA9ICdyZWFkeSc7XG4gIH1cblxuICBnZXQgY2xvc2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9PT0gJ2Nsb3NlZCc7XG4gIH1cblxuICB1bnN1YnNjcmliZSgpIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09ICdjbG9zZWQnKSB7XG4gICAgICBjbG9zZVN1YnNjcmlwdGlvbih0aGlzKTtcbiAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24odGhpcyk7XG4gICAgfVxuICB9XG5cbn1cblxubGV0IE9ic2VydmFibGUkMSA9IGNsYXNzIE9ic2VydmFibGUge1xuICBjb25zdHJ1Y3RvcihzdWJzY3JpYmVyKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9ic2VydmFibGUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYnNlcnZhYmxlIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbicpO1xuICAgIGlmICh0eXBlb2Ygc3Vic2NyaWJlciAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JzZXJ2YWJsZSBpbml0aWFsaXplciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVyID0gc3Vic2NyaWJlcjtcbiAgfVxuXG4gIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXIgIT09ICdvYmplY3QnIHx8IG9ic2VydmVyID09PSBudWxsKSB7XG4gICAgICBvYnNlcnZlciA9IHtcbiAgICAgICAgbmV4dDogb2JzZXJ2ZXIsXG4gICAgICAgIGVycm9yOiBhcmd1bWVudHNbMV0sXG4gICAgICAgIGNvbXBsZXRlOiBhcmd1bWVudHNbMl1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24ob2JzZXJ2ZXIsIHRoaXMuX3N1YnNjcmliZXIpO1xuICB9XG5cbiAgZm9yRWFjaChmbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZuKHZhbHVlLCBkb25lKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbWFwKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IGZuKHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgfSxcblxuICAgICAgZXJyb3IoZSkge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNvbXBsZXRlKCkge1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfVxuXG4gICAgfSkpO1xuICB9XG5cbiAgZmlsdGVyKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICBsZXQgQyA9IGdldFNwZWNpZXModGhpcyk7XG4gICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IHRoaXMuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWZuKHZhbHVlKSkgcmV0dXJuO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICB9LFxuXG4gICAgICBlcnJvcihlKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfSxcblxuICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG5cbiAgICB9KSk7XG4gIH1cblxuICByZWR1Y2UoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICBsZXQgaGFzU2VlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxO1xuICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgIGxldCBzZWVkID0gYXJndW1lbnRzWzFdO1xuICAgIGxldCBhY2MgPSBzZWVkO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB0aGlzLnN1YnNjcmliZSh7XG4gICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgIGxldCBmaXJzdCA9ICFoYXNWYWx1ZTtcbiAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuXG4gICAgICAgIGlmICghZmlyc3QgfHwgaGFzU2VlZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhY2MgPSBmbihhY2MsIHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBlcnJvcihlKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgfSxcblxuICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgIGlmICghaGFzVmFsdWUgJiYgIWhhc1NlZWQpIHJldHVybiBvYnNlcnZlci5lcnJvcihuZXcgVHlwZUVycm9yKCdDYW5ub3QgcmVkdWNlIGFuIGVtcHR5IHNlcXVlbmNlJykpO1xuICAgICAgICBvYnNlcnZlci5uZXh0KGFjYyk7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG5cbiAgICB9KSk7XG4gIH1cblxuICBhc3luYyBhbGwoKSB7XG4gICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgIGF3YWl0IHRoaXMuZm9yRWFjaCh2YWx1ZSA9PiB2YWx1ZXMucHVzaCh2YWx1ZSkpO1xuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICBjb25jYXQoLi4uc291cmNlcykge1xuICAgIGxldCBDID0gZ2V0U3BlY2llcyh0aGlzKTtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgbGV0IHN1YnNjcmlwdGlvbjtcbiAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0TmV4dChuZXh0KSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IG5leHQuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0KHYpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQodik7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gc291cmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhcnROZXh0KEMuZnJvbShzb3VyY2VzW2luZGV4KytdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzdGFydE5leHQodGhpcyk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZmxhdE1hcChmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgbGV0IEMgPSBnZXRTcGVjaWVzKHRoaXMpO1xuICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICBsZXQgc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgICAgbGV0IG91dGVyID0gdGhpcy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0KHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGZuKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IGZuKHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBpbm5lciA9IEMuZnJvbSh2YWx1ZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQodmFsdWUpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBlcnJvcihlKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgICAgIGxldCBpID0gc3Vic2NyaXB0aW9ucy5pbmRleE9mKGlubmVyKTtcbiAgICAgICAgICAgICAgaWYgKGkgPj0gMCkgc3Vic2NyaXB0aW9ucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgIGNvbXBsZXRlSWZEb25lKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goaW5uZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVycm9yKGUpIHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjb21wbGV0ZSgpIHtcbiAgICAgICAgICBjb21wbGV0ZUlmRG9uZSgpO1xuICAgICAgICB9XG5cbiAgICAgIH0pO1xuXG4gICAgICBmdW5jdGlvbiBjb21wbGV0ZUlmRG9uZSgpIHtcbiAgICAgICAgaWYgKG91dGVyLmNsb3NlZCAmJiBzdWJzY3JpcHRpb25zLmxlbmd0aCA9PT0gMCkgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgb3V0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBbU3ltYm9sT2JzZXJ2YWJsZV0oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh4KSB7XG4gICAgbGV0IEMgPSB0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBPYnNlcnZhYmxlO1xuICAgIGlmICh4ID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgIGxldCBtZXRob2QgPSBnZXRNZXRob2QoeCwgU3ltYm9sT2JzZXJ2YWJsZSk7XG5cbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICBsZXQgb2JzZXJ2YWJsZSA9IG1ldGhvZC5jYWxsKHgpO1xuICAgICAgaWYgKE9iamVjdChvYnNlcnZhYmxlKSAhPT0gb2JzZXJ2YWJsZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihvYnNlcnZhYmxlICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICBpZiAoaXNPYnNlcnZhYmxlKG9ic2VydmFibGUpICYmIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMpIHJldHVybiBvYnNlcnZhYmxlO1xuICAgICAgcmV0dXJuIG5ldyBDKG9ic2VydmVyID0+IG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1N5bWJvbCgnaXRlcmF0b3InKSkge1xuICAgICAgbWV0aG9kID0gZ2V0TWV0aG9kKHgsIFN5bWJvbEl0ZXJhdG9yKTtcblxuICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgIGVucXVldWUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIG1ldGhvZC5jYWxsKHgpKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbSk7XG4gICAgICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIHJldHVybiBuZXcgQyhvYnNlcnZlciA9PiB7XG4gICAgICAgIGVucXVldWUoKCkgPT4ge1xuICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh4W2ldKTtcbiAgICAgICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgbm90IG9ic2VydmFibGUnKTtcbiAgfVxuXG4gIHN0YXRpYyBvZiguLi5pdGVtcykge1xuICAgIGxldCBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogT2JzZXJ2YWJsZTtcbiAgICByZXR1cm4gbmV3IEMob2JzZXJ2ZXIgPT4ge1xuICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tpXSk7XG4gICAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldCBbU3ltYm9sU3BlY2llc10oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxufTtcblxuT2JzZXJ2YWJsZSQyLk9ic2VydmFibGUgPSBPYnNlcnZhYmxlJDE7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoT2JzZXJ2YWJsZSQxLCBTeW1ib2woJ2V4dGVuc2lvbnMnKSwge1xuICB2YWx1ZToge1xuICAgIHN5bWJvbDogU3ltYm9sT2JzZXJ2YWJsZSxcbiAgICBob3N0UmVwb3J0RXJyb3JcbiAgfSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxudmFyIHplbk9ic2VydmFibGUgPSBPYnNlcnZhYmxlJDIuT2JzZXJ2YWJsZTtcblxuY29uc3QgT2JzZXJ2YWJsZSA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyh6ZW5PYnNlcnZhYmxlKTtcblxuY29uc3QgeyBsb2dfXywgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiaW5pdC1mbG93c1wiKTtcbmNvbnN0IGdldE9qc0luaXRSZXN1bHRzRGVidWdPYmplY3QgPSAoKSA9PiB7XG4gIGlmICghKFwib2pzX2luaXRfcmVzdWx0c1wiIGluIHdpbmRvdykpIHtcbiAgICB3aW5kb3dbXCJvanNfaW5pdF9yZXN1bHRzXCJdID0ge307XG4gIH1cbiAgcmV0dXJuIHdpbmRvd1tcIm9qc19pbml0X3Jlc3VsdHNcIl07XG59O1xuY29uc3QgaW5pdGlhbGl6ZU9qc0Zsb3dzID0gKGNvbnRleHQsIGZsb3dDYWxsYmFja3MpID0+IHtcbiAgY29uc3QgaW5pdFBhcmFtcyA9IHsgY29udGV4dCwgZmxvd0NhbGxiYWNrcyB9O1xuICBjb25zb2xlLmxvZyhcIltPSlNdIGluaXRpYWxpemluZyBPSlMgZmxvd3MuLi5cIik7XG4gIHJldHVybiB7XG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IHJ1bkluaXRGbG93QXNPYnNlcnZhYmxlKFwic3RyaXBlUFJcIiwgT2pzRmxvd3Muc3RyaXBlUFIuaW5pdChpbml0UGFyYW1zKSksXG4gICAgLy8gU3RyaXBlIExpbmtcbiAgICBzdHJpcGVMaW5rOiBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZShcInN0cmlwZUxpbmtcIiwgT2pzRmxvd3Muc3RyaXBlTGluay5pbml0KGluaXRQYXJhbXMpKVxuICAgIC8vIPCfkYkgQWRkIGluaXRpYWxpemF0aW9uIGZsb3dzIGhlcmVcbiAgfTtcbn07XG5jb25zdCBydW5Jbml0Rmxvd0FzT2JzZXJ2YWJsZSA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3Qgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXM6IFwibG9hZGluZ1wiIH0pO1xuICAgIGluaXRGbG93LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCh7IHN0YXR1czogXCJsb2FkZWRcIiwgcmVzdWx0IH0pO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgb2JzZXJ2ZXIubmV4dCh7IHN0YXR1czogXCJlcnJvclwiLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgb2JzZXJ2YWJsZS5zdWJzY3JpYmUoe1xuICAgIG5leHQ6IChyZXN1bHQpID0+IHtcbiAgICAgIGxvZ19fKGAke2Zsb3dOYW1lfSBmbG93IHJlc3VsdGAsIHJlc3VsdCk7XG4gICAgICBnZXRPanNJbml0UmVzdWx0c0RlYnVnT2JqZWN0KClbZmxvd05hbWVdID0gcmVzdWx0O1xuICAgIH0sXG4gICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgZXJyX18oYCR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZXJyb3I6XG4ke0pTT04uc3RyaW5naWZ5KGVycm9yKX1gKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvYnNlcnZhYmxlO1xufTtcblxuY29uc3QgUFJfTE9BRElORyA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5jb25zdCBQUl9FUlJPUiA9IHtcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLmVycm9yKGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoZW4gcGF5bWVudCByZXF1ZXN0IGlzIG5vdCBhdmFpbGFibGUuYCk7XG4gIH1cbn07XG5cbnZhciB1c2VBc3luY0VmZmVjdCQyID0ge2V4cG9ydHM6IHt9fTtcblxudmFyIFJlYWN0ID0gcmVxdWlyZSQkMDtcblxuZnVuY3Rpb24gdXNlQXN5bmNFZmZlY3QoZWZmZWN0LCBkZXN0cm95LCBpbnB1dHMpIHtcbiAgdmFyIGhhc0Rlc3Ryb3kgPSB0eXBlb2YgZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJztcblxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQ7XG4gICAgdmFyIG1vdW50ZWQgPSB0cnVlO1xuICAgIHZhciBtYXliZVByb21pc2UgPSBlZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG1vdW50ZWQ7XG4gICAgfSk7XG5cbiAgICBQcm9taXNlLnJlc29sdmUobWF5YmVQcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgbW91bnRlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoaGFzRGVzdHJveSkge1xuICAgICAgICBkZXN0cm95KHJlc3VsdCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgaGFzRGVzdHJveSA/IGlucHV0cyA6IGRlc3Ryb3kpO1xufVxuXG51c2VBc3luY0VmZmVjdCQyLmV4cG9ydHMgPSB1c2VBc3luY0VmZmVjdDtcbnVzZUFzeW5jRWZmZWN0JDIuZXhwb3J0cy51c2VBc3luY0VmZmVjdCA9IHVzZUFzeW5jRWZmZWN0O1xuXG52YXIgdXNlQXN5bmNFZmZlY3RFeHBvcnRzID0gdXNlQXN5bmNFZmZlY3QkMi5leHBvcnRzO1xuY29uc3QgdXNlQXN5bmNFZmZlY3QkMSA9IC8qQF9fUFVSRV9fKi9nZXREZWZhdWx0RXhwb3J0RnJvbUNqcyh1c2VBc3luY0VmZmVjdEV4cG9ydHMpO1xuXG5mdW5jdGlvbiB1c2VUaW1lb3V0Rm4oZm4sIG1zID0gMCkge1xuICBjb25zdCByZWFkeSA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHRpbWVvdXQgPSB1c2VSZWYoKTtcbiAgY29uc3QgY2FsbGJhY2sgPSB1c2VSZWYoZm4pO1xuICBjb25zdCBpc1JlYWR5ID0gdXNlQ2FsbGJhY2soKCkgPT4gcmVhZHkuY3VycmVudCwgW10pO1xuICBjb25zdCBzZXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmVhZHkuY3VycmVudCA9IGZhbHNlO1xuICAgIHRpbWVvdXQuY3VycmVudCAmJiBjbGVhclRpbWVvdXQodGltZW91dC5jdXJyZW50KTtcbiAgICB0aW1lb3V0LmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlYWR5LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgY2FsbGJhY2suY3VycmVudCgpO1xuICAgIH0sIG1zKTtcbiAgfSwgW21zXSk7XG4gIGNvbnN0IGNsZWFyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJlYWR5LmN1cnJlbnQgPSBudWxsO1xuICAgIHRpbWVvdXQuY3VycmVudCAmJiBjbGVhclRpbWVvdXQodGltZW91dC5jdXJyZW50KTtcbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNhbGxiYWNrLmN1cnJlbnQgPSBmbjtcbiAgfSwgW2ZuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0KCk7XG4gICAgcmV0dXJuIGNsZWFyO1xuICB9LCBbbXNdKTtcbiAgcmV0dXJuIFtpc1JlYWR5LCBjbGVhciwgc2V0XTtcbn1cblxuZnVuY3Rpb24gdXNlRGVib3VuY2UoZm4sIG1zID0gMCwgZGVwcyA9IFtdKSB7XG4gIGNvbnN0IFtpc1JlYWR5LCBjYW5jZWwsIHJlc2V0XSA9IHVzZVRpbWVvdXRGbihmbiwgbXMpO1xuICB1c2VFZmZlY3QocmVzZXQsIGRlcHMpO1xuICByZXR1cm4gW2lzUmVhZHksIGNhbmNlbF07XG59XG5cbmNvbnN0IHVzZUR5bmFtaWNQcmV2aWV3ID0gKGlzRW5hYmxlZCwgY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGZvcm1EaXYpID0+IHtcbiAgY29uc3QgW3Byb21vQ29kZUlucHV0LCBzZXRQcm9tb0NvZGVJbnB1dF0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgY29uc3QgW3Byb21vQ29kZURlYm91bmNlZCwgc2V0UHJvbW9Db2RlRGVib3VuY2VkXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbcHJldmlld0FtdCwgc2V0UHJldmlld0FtdF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2lzUHJldmlld0xvYWRpbmcsIHNldElzUHJldmlld0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcHJldmlld0Vycm9yLCBzZXRQcmV2aWV3RXJyb3JdID0gdXNlU3RhdGUobnVsbCk7XG4gIHVzZUFzeW5jRWZmZWN0JDEoYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZm9ybURpdiB8fCAhaXNFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByb21vQ29kZUlucHV0MiA9IGF3YWl0IHdhaXRGb3JGb3JtRmllbGRJbnB1dChmb3JtRGl2LCBGaWVsZE5hbWUuUFJPTU9USU9OX0NPREUpO1xuICAgIHByb21vQ29kZUlucHV0Mj8uYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsICgpID0+IHtcbiAgICAgIHNldElzUHJldmlld0xvYWRpbmcodHJ1ZSk7XG4gICAgICBzZXRQcmV2aWV3RXJyb3IobnVsbCk7XG4gICAgICBzZXRQcm9tb0NvZGVJbnB1dChwcm9tb0NvZGVJbnB1dDIudmFsdWUpO1xuICAgIH0pO1xuICB9LCBbISFmb3JtRGl2LCBpc0VuYWJsZWRdKTtcbiAgdXNlRGVib3VuY2UoXG4gICAgKCkgPT4ge1xuICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0UHJvbW9Db2RlRGVib3VuY2VkKHByb21vQ29kZUlucHV0KTtcbiAgICB9LFxuICAgIDFlMyxcbiAgICBbcHJvbW9Db2RlSW5wdXQsIGlzRW5hYmxlZF1cbiAgKTtcbiAgdXNlQXN5bmNFZmZlY3QkMShcbiAgICBhc3luYyAoaXNNb3VudGVkKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWNkZUNvbm4gfHwgIXNlY3VyZVRva2VuIHx8ICFpc0VuYWJsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoY2RlQ29ubik7XG4gICAgICAgIGNvbnN0IGlzU2V0dXBNb2RlID0gcHJlZmlsbC5tb2RlID09PSBcInNldHVwXCI7XG4gICAgICAgIGNvbnN0IHByZXZpZXcgPSBhd2FpdCBnZXRDaGVja291dFByZXZpZXdBbW91bnQoY2RlQ29ubiwgc2VjdXJlVG9rZW4sIGlzU2V0dXBNb2RlLCBwcm9tb0NvZGVEZWJvdW5jZWQpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlt1c2VEeW5hbWljUHJldmlld10gUXVlcnlpbmcuIFByb21vIGNvZGU6XCIsIHByb21vQ29kZURlYm91bmNlZCk7XG4gICAgICAgIGlmIChpc01vdW50ZWQoKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiW3VzZUR5bmFtaWNQcmV2aWV3XSBTZXR0aW5nIHByZXZpZXc6XCIsIHByb21vQ29kZURlYm91bmNlZCwgcHJldmlldyk7XG4gICAgICAgICAgc2V0UHJldmlld0Vycm9yKG51bGwpO1xuICAgICAgICAgIHNldFByZXZpZXdBbXQocHJldmlldyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJbdXNlRHluYW1pY1ByZXZpZXddIERpc2NhcmRpbmc6XCIsIHByZXZpZXcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChpc01vdW50ZWQoKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFt1c2VEeW5hbWljUHJldmlld10gRXJyb3IgZG9pbmcgcHJldmlld2AsIGdldEVycm9yTWVzc2FnZShlKSk7XG4gICAgICAgICAgc2V0UHJldmlld0Vycm9yKGdldEVycm9yTWVzc2FnZShlKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChpc01vdW50ZWQoKSkge1xuICAgICAgICAgIHNldElzUHJldmlld0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbIWNkZUNvbm4sICFzZWN1cmVUb2tlbiwgcHJvbW9Db2RlRGVib3VuY2VkLCBpc0VuYWJsZWRdXG4gICk7XG4gIHJldHVybiB7XG4gICAgYW1vdW50OiBwcmV2aWV3QW10LFxuICAgIGlzTG9hZGluZzogaXNQcmV2aWV3TG9hZGluZyxcbiAgICBlcnJvcjogcHJldmlld0Vycm9yXG4gIH07XG59O1xuXG5jb25zdCB1c2VNYXAgPSAoaW5pdGlhbE1hcCA9IHt9KSA9PiB7XG4gIGNvbnN0IFttYXAsIHNldF0gPSB1c2VTdGF0ZShpbml0aWFsTWFwKTtcbiAgY29uc3Qgc3RhYmxlQWN0aW9ucyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHNldDogKGtleSwgZW50cnkpID0+IHtcbiAgICAgICAgc2V0KChwcmV2TWFwKSA9PiAoe1xuICAgICAgICAgIC4uLnByZXZNYXAsXG4gICAgICAgICAgW2tleV06IGVudHJ5XG4gICAgICAgIH0pKTtcbiAgICAgIH0sXG4gICAgICBzZXRBbGw6IChuZXdNYXApID0+IHtcbiAgICAgICAgc2V0KG5ld01hcCk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlOiAoa2V5KSA9PiB7XG4gICAgICAgIHNldCgocHJldk1hcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgW2tleV06IG9taXQsIC4uLnJlc3QgfSA9IHByZXZNYXA7XG4gICAgICAgICAgcmV0dXJuIHJlc3Q7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJlc2V0OiAoKSA9PiBzZXQoaW5pdGlhbE1hcClcbiAgICB9KSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW3NldF1cbiAgKTtcbiAgY29uc3QgdXRpbHMgPSB7XG4gICAgZ2V0OiB1c2VDYWxsYmFjaygoa2V5KSA9PiBtYXBba2V5XSwgW21hcF0pLFxuICAgIC4uLnN0YWJsZUFjdGlvbnNcbiAgfTtcbiAgcmV0dXJuIFttYXAsIHV0aWxzXTtcbn07XG5cbmNvbnN0IHVzZUNkZUNvbm5lY3Rpb24gPSAoKSA9PiB7XG4gIGNvbnN0IFtudW1DZGVDb25ucywgc2V0TnVtQ2RlQ29ubnNdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtjZGVDb25ucywgY2RlQ29ubnNTZXR0ZXJdID0gdXNlTWFwKHtcbiAgICBjYXJkOiB2b2lkIDAsXG4gICAgXCJjYXJkLWN2Y1wiOiB2b2lkIDAsXG4gICAgXCJjYXJkLWV4cGlyeVwiOiB2b2lkIDAsXG4gICAgXCJjYXJkLW51bWJlclwiOiB2b2lkIDBcbiAgfSk7XG4gIGNvbnN0IGFueUNkZUNvbm4gPSBPYmplY3QudmFsdWVzKGNkZUNvbm5zKS5maWx0ZXIoKGNkZUNvbm4pID0+IGNkZUNvbm4gIT09IHZvaWQgMClbMF0gPz8gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBjZGVDb25ucyxcbiAgICBhbnlDZGVDb25uLFxuICAgIGNvbm5lY3RUb0NkZUlmcmFtZTogYXN5bmMgKGVsZW1lbnRUeXBlLCBpZnJhbWUpID0+IHtcbiAgICAgIGNkZUNvbm5zU2V0dGVyLnNldChlbGVtZW50VHlwZSwgYXdhaXQgY3JlYXRlQ2RlQ29ubmVjdGlvbihpZnJhbWUpKTtcbiAgICAgIHNldE51bUNkZUNvbm5zKE9iamVjdC52YWx1ZXMoY2RlQ29ubnMpLmxlbmd0aCk7XG4gICAgfSxcbiAgICBudW1DZGVDb25uc1xuICB9O1xufTtcbmNvbnN0IGdldEVsZW1lbnRUeXBlRnJvbUlmcmFtZUlkID0gKGlmcmFtZUlkKSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRUeXBlID0gaWZyYW1lSWQucmVwbGFjZShcIm9qcy1cIiwgXCJcIikucmVwbGFjZShcIi1lbGVtZW50XCIsIFwiXCIpO1xuICBjb25zdCBwYXJzZWQgPSBFbGVtZW50VHlwZS5zYWZlUGFyc2UoZWxlbWVudFR5cGUpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZWxlbWVudCBpZDogJHtpZnJhbWVJZH0sIGl0IG5lZWRzIHRvIGJlIGluIHRoZSBmb3JtYXQgXCJvanMte2VsZW1lbnRUeXBlfS1lbGVtZW50XCIgKGUuZy4gXCJvanMtY2FyZC1udW1iZXItZWxlbWVudFwiKWBcbiAgICApO1xuICB9XG4gIHJldHVybiBwYXJzZWQuZGF0YTtcbn07XG5cbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICBjbGFzc05hbWUsXG4gICAgb25Gb2N1cyxcbiAgICBvbkJsdXIsXG4gICAgb25DaGFuZ2UsXG4gICAgb25Mb2FkLFxuICAgIG9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgYmFzZVVybCxcbiAgICBlbmFibGVEeW5hbWljUHJldmlld3MsXG4gICAgY3VzdG9tSW5pdFBhcmFtc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGZyYW1lQmFzZVVybCA9IGJhc2VVcmwgPz8gRlJBTUVfQkFTRV9VUkw7XG4gIGNvbnN0IFtyZWZlcmVyLCBzZXRSZWZlcmVyXSA9IHVzZVN0YXRlKHZvaWQgMCk7XG4gIGNvbnN0IFtub25jZXMsIHNldE5vbmNlc10gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtmb3JtSGVpZ2h0LCBzZXRGb3JtSGVpZ2h0XSA9IHVzZVN0YXRlKFwiMXB4XCIpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZXh0cmFEYXRhLCBzZXRFeHRyYURhdGFdID0gdXNlU3RhdGUodm9pZCAwKTtcbiAgY29uc3QgW3ByZXZlbnRDbG9zZSwgc2V0UHJldmVudENsb3NlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lmcmFtZXMsIHNldElmcmFtZXNdID0gdXNlU3RhdGUoW10pO1xuICBjb25zdCBbZXZlbnRUYXJnZXRzLCBzZXRFdmVudFRhcmdldHNdID0gdXNlU3RhdGUoe30pO1xuICBjb25zdCBbdG9rZW5pemVkLCBzZXRUb2tlbml6ZWRdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtjaGVja291dEZpcmVkLCBzZXRDaGVja291dEZpcmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nlc3Npb25JZCwgc2V0U2Vzc2lvbklkXSA9IHVzZVN0YXRlKHZvaWQgMCk7XG4gIGNvbnN0IFtjdXJyZW5jeSwgc2V0Q3VycmVuY3ldID0gdXNlU3RhdGUodm9pZCAwKTtcbiAgY29uc3QgW3RvdGFsQW1vdW50QXRvbXMsIHNldFRvdGFsQW1vdW50QXRvbXNdID0gdXNlU3RhdGUodm9pZCAwKTtcbiAgY29uc3QgW2NoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHNldENoZWNrb3V0UGF5bWVudE1ldGhvZHNdID0gdXNlU3RhdGUodm9pZCAwKTtcbiAgY29uc3QgW3N0cmlwZVBtXSA9IHVzZVN0YXRlKHZvaWQgMCk7XG4gIGNvbnN0IGZvcm1JZCA9IHVzZU1lbW8oKCkgPT4gYG9wanMtZm9ybS0ke3Y0KCl9YCwgW10pO1xuICBjb25zdCBmb3JtUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCB7IGNkZUNvbm5zLCBhbnlDZGVDb25uLCBjb25uZWN0VG9DZGVJZnJhbWUsIG51bUNkZUNvbm5zIH0gPSB1c2VDZGVDb25uZWN0aW9uKCk7XG4gIGNvbnN0IFtvanNGbG93c0luaXRpYWxpemF0aW9uLCBzZXRPanNGbG93c0luaXRpYWxpemF0aW9uXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlTWFwKHtcbiAgICBhcHBsZV9wYXk6IFBSX0xPQURJTkcsXG4gICAgZ29vZ2xlX3BheTogUFJfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvanNfdmVyc2lvbiA9IHsgdmVyc2lvbjogXCIwLjEuMTJcIiwgcmVsZWFzZV92ZXJzaW9uOiBcIjAuMS4xMlwiIH07XG4gICAgd2luZG93W1wib2pzX3ZlcnNpb25cIl0gPSBvanNfdmVyc2lvbjtcbiAgICBjb25zb2xlLmxvZyhcIk9KUyB2ZXJzaW9uOlwiLCBvanNfdmVyc2lvbik7XG4gIH0sIFtdKTtcbiAgY29uc3QgZHluYW1pY1ByZXZpZXcgPSB1c2VEeW5hbWljUHJldmlldyhcbiAgICBlbmFibGVEeW5hbWljUHJldmlld3MgPz8gZmFsc2UsXG4gICAgYW55Q2RlQ29ubixcbiAgICBjaGVja291dFNlY3VyZVRva2VuLFxuICAgIGZvcm1SZWYuY3VycmVudFxuICApO1xuICBjb25zdCBvbk1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IGZyYW1lQmFzZVVybCkgcmV0dXJuO1xuICAgICAgaWYgKCFldmVudC5zb3VyY2UpIHJldHVybjtcbiAgICAgIGNvbnN0IGV2ZW50U291cmNlID0gZXZlbnQuc291cmNlO1xuICAgICAgaWYgKCFpc0pzb25TdHJpbmcoZXZlbnQuZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmF3ID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IHBhcnNlRXZlbnRQYXlsb2FkKHJhdyk7XG4gICAgICBjb25zdCBlbGVtZW50SWQgPSBldmVudERhdGEuZWxlbWVudElkO1xuICAgICAgY29uc3QgdGFyZ2V0Rm9ybUlkID0gZXZlbnREYXRhLmZvcm1JZDtcbiAgICAgIGlmICh0YXJnZXRGb3JtSWQgIT09IGZvcm1JZCB8fCAhZWxlbWVudElkKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnREYXRhLm5vbmNlIGluIG5vbmNlcykge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXROb25jZXMoKHByZXZOb25jZXMpID0+IFsuLi5wcmV2Tm9uY2VzLCBldmVudERhdGEubm9uY2VdKTtcbiAgICAgIGNvbnN0IGV2ZW50UGF5bG9hZCA9IGV2ZW50RGF0YS5wYXlsb2FkO1xuICAgICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRQYXlsb2FkLnR5cGU7XG4gICAgICBjb25zb2xlLmxvZyhgW2Zvcm1dIFJlY2VpdmVkICR7ZXZlbnRUeXBlfSBldmVudCBmcm9tICR7ZWxlbWVudElkfTpgLCBldmVudERhdGEucGF5bG9hZCk7XG4gICAgICBpZiAoZXZlbnRUeXBlID09PSBFdmVudFR5cGUuZW51bS5MQVlPVVQpIHtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZXZlbnRQYXlsb2FkLmhlaWdodCA/IGAke2V2ZW50UGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCI7XG4gICAgICAgIHNldEZvcm1IZWlnaHQoaGVpZ2h0KTtcbiAgICAgICAgY29uc29sZS5sb2coYFtmb3JtXSBFbGVtZW50IGhlaWdodCBzZXQgdG86ICR7aGVpZ2h0fWApO1xuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkZPQ1VTICYmICEhb25Gb2N1cykge1xuICAgICAgICBvbkZvY3VzKGV2ZW50RGF0YS5lbGVtZW50SWQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkJMVVIgJiYgISFvbkJsdXIpIHtcbiAgICAgICAgb25CbHVyKGV2ZW50RGF0YS5lbGVtZW50SWQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkNIQU5HRSAmJiAhIW9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKGV2ZW50RGF0YS5lbGVtZW50SWQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkxPQURFRCkge1xuICAgICAgICBjb25zdCBtYXRjaGluZ0lmcmFtZSA9IGlmcmFtZXMuZmluZCgoaWZyYW1lKSA9PiBpZnJhbWUuY29udGVudFdpbmRvdyA9PT0gZXZlbnRTb3VyY2UpO1xuICAgICAgICBzZXRQcmV2ZW50Q2xvc2UoZmFsc2UpO1xuICAgICAgICBpZiAoIW1hdGNoaW5nSWZyYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIExPQURFRCBldmVudCBmcm9tIHVucmVnaXN0ZXJlZCBpZnJhbWU6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldEV2ZW50VGFyZ2V0cygocHJldlRhcmdldHMpID0+ICh7IC4uLnByZXZUYXJnZXRzLCBbZWxlbWVudElkXTogZXZlbnRTb3VyY2UgfSkpO1xuICAgICAgICBzZXRUb3RhbEFtb3VudEF0b21zKGV2ZW50UGF5bG9hZC50b3RhbEFtb3VudEF0b21zKTtcbiAgICAgICAgc2V0Q3VycmVuY3koZXZlbnRQYXlsb2FkLmN1cnJlbmN5KTtcbiAgICAgICAgc2V0Q2hlY2tvdXRQYXltZW50TWV0aG9kcyhldmVudFBheWxvYWQuY2hlY2tvdXRQYXltZW50TWV0aG9kcyk7XG4gICAgICAgIGlmICghc2Vzc2lvbklkKSBzZXRTZXNzaW9uSWQoZXZlbnRQYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbZm9ybV0gRWxlbWVudCBsb2FkZWQgd2l0aCBwcmVmaWxsIGRhdGE6YCwgZXZlbnRQYXlsb2FkKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVEFSVEVEKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiW2Zvcm1dIFRva2VuaXphdGlvbiBzdGFydGVkXCIpO1xuICAgICAgICBzZXRQcmV2ZW50Q2xvc2UodHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1RBUlRFRCkge1xuICAgICAgICBpZiAob25DaGVja291dFN0YXJ0ZWQpIG9uQ2hlY2tvdXRTdGFydGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpIHtcbiAgICAgICAgaWYgKCFleHRyYURhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4dHJhRGF0YSBub3QgcG9wdWxhdGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhbnlDZGVDb25uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgY29ubmVjdGVkIHRvIENERWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbmZpcm1QYXltZW50RmxvdyQxID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHRBY3Rpb25UeXBlID0gZXZlbnRQYXlsb2FkLm5leHRBY3Rpb25NZXRhZGF0YVtcInR5cGVcIl07XG4gICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gQ29uZmlybSBwYXltZW50IGZsb3c6IG5leHQgYWN0aW9uczpcIiwgZXZlbnRQYXlsb2FkLm5leHRBY3Rpb25NZXRhZGF0YSk7XG4gICAgICAgICAgaWYgKG5leHRBY3Rpb25UeXBlID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiW2Zvcm1dIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IChOby1vcClcIik7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aW9uVHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiW2Zvcm1dIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IChTdHJpcGUgM0RTXCIpO1xuICAgICAgICAgICAgYXdhaXQgY29uZmlybVBheW1lbnRGbG93Rm9yM0RTKGV2ZW50UGF5bG9hZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXh0QWN0aW9uVHlwZSA9PT0gXCJzdHJpcGVfcGF5bWVudF9yZXF1ZXN0XCIpIHtcbiAgICAgICAgICAgIGlmICghc3RyaXBlUG0pIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgUE0gbm90IHNldGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gQ29uZmlybWluZyBwYXltZW50IGZsb3cgKFN0cmlwZSBQUilcIik7XG4gICAgICAgICAgICBhd2FpdCBjb25maXJtUGF5bWVudEZsb3dGb3JTdHJpcGVQUkxlZ2FjeShldmVudFBheWxvYWQsIHN0cmlwZVBtKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG5leHQgYWN0aW9uIHR5cGU6ICR7bmV4dEFjdGlvblR5cGV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm4pO1xuICAgICAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgICAgY29uc3QgeyBwYXltZW50X21ldGhvZHMgfSA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uLCB7XG4gICAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGV4dHJhRGF0YS5leGlzdGluZ0NDUE1JZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtwYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gUEYgc2V0dXAgcGF5bWVudCBtZXRob2QgY29tcGxldGU6XCIsIHBheW1lbnRfbWV0aG9kcyk7XG4gICAgICAgICAgICBzZXRQcmV2ZW50Q2xvc2UoZmFsc2UpO1xuICAgICAgICAgICAgc2V0VG9rZW5pemVkKDApO1xuICAgICAgICAgICAgc2V0Q2hlY2tvdXRGaXJlZChmYWxzZSk7XG4gICAgICAgICAgICBpZiAob25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKSB7XG4gICAgICAgICAgICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhwYXltZW50X21ldGhvZHNbMF0uaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcHJvY2VlZFRvQ2hlY2tvdXQ6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwcm9jZWVkVG9DaGVja291dDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbmZpcm1QYXltZW50RmxvdyQxKCkudGhlbigoeyBwcm9jZWVkVG9DaGVja291dCB9KSA9PiB7XG4gICAgICAgICAgaWYgKCFwcm9jZWVkVG9DaGVja291dCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gTk9UIHByb2NlZWRpbmcgdG8gY2hlY2tvdXQgYWZ0ZXIgY29uZmlybWF0aW9uLlwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gU3RhcnRpbmcgY2hlY2tvdXQgZnJvbSBwYXltZW50IGZsb3cuXCIpO1xuICAgICAgICAgIGxldCBleGlzdGluZ0NDUE1JZDtcbiAgICAgICAgICBpZiAoZXh0cmFEYXRhLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlciA9PT0gXCJjcmVkaXRfY2FyZFwiKSB7XG4gICAgICAgICAgICBleGlzdGluZ0NDUE1JZCA9IGV2ZW50UGF5bG9hZC5zdGFydFBGTWV0YWRhdGE/LmNjX3BtX2lkO1xuICAgICAgICAgICAgaWYgKCFleGlzdGluZ0NDUE1JZCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENDIFBNIElEIG5vdCBmb3VuZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbWl0RXZlbnQoXG4gICAgICAgICAgICBldmVudFNvdXJjZSxcbiAgICAgICAgICAgIGZvcm1JZCxcbiAgICAgICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAgICAgIHsgLi4uZXh0cmFEYXRhLCB0eXBlOiBcIkNIRUNLT1VUXCIsIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB0cnVlLCBleGlzdGluZ0NDUE1JZCB9LFxuICAgICAgICAgICAgZnJhbWVCYXNlVXJsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZXRDaGVja291dEZpcmVkKHRydWUpO1xuICAgICAgICAgIHNldEV4dHJhRGF0YSh2b2lkIDApO1xuICAgICAgICAgIGlmIChvbkNoZWNrb3V0U3RhcnRlZCkgb25DaGVja291dFN0YXJ0ZWQoKTtcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIltmb3JtXSBDb25maXJtYXRpb24gcGF5bWVudCBmbG93IGVycm9yXCIpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgY29uc3QgZXJyTXNnID0gZ2V0RXJyb3JNZXNzYWdlKGUpO1xuICAgICAgICAgIHNldFByZXZlbnRDbG9zZShmYWxzZSk7XG4gICAgICAgICAgc2V0Q2hlY2tvdXRGaXJlZChmYWxzZSk7XG4gICAgICAgICAgaWYgKG9uQ2hlY2tvdXRFcnJvcikgb25DaGVja291dEVycm9yKGVyck1zZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MgJiYgISFleHRyYURhdGEpIHtcbiAgICAgICAgY29uc3QgdG90YWxUb2tlbml6ZWQgPSB0b2tlbml6ZWQgKyAxO1xuICAgICAgICBjb25zdCBhbGxUb2tlbml6ZWQgPSB0b3RhbFRva2VuaXplZCA9PT0gT2JqZWN0LmtleXMoZXZlbnRUYXJnZXRzKS5sZW5ndGg7XG4gICAgICAgIGlmICghY2hlY2tvdXRGaXJlZCAmJiAoYWxsVG9rZW5pemVkIHx8IGV2ZW50UGF5bG9hZC5pc1JlYWR5Rm9yQ2hlY2tvdXQpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gVG9rZW5pemVkIGNhcmQgaXMgcmVhZHkgZm9yIGNoZWNrb3V0XCIpO1xuICAgICAgICAgIGVtaXRFdmVudChldmVudFNvdXJjZSwgZm9ybUlkLCBlbGVtZW50SWQsIGV4dHJhRGF0YSwgZnJhbWVCYXNlVXJsKTtcbiAgICAgICAgICBzZXRDaGVja291dEZpcmVkKHRydWUpO1xuICAgICAgICAgIHNldEV4dHJhRGF0YSh2b2lkIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbZm9ybV0gRWxlbWVudCAke2VsZW1lbnRJZH0gZmluaXNoZWQgdG9rZW5pemF0aW9uIGJ1dCBjYXJkIG5vdCB5ZXQgcmVhZHkgZm9yIGNoZWNrb3V0YCk7XG4gICAgICAgICAgc2V0VG9rZW5pemVkKHRvdGFsVG9rZW5pemVkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJbZm9ybV0gQ2hlY2tvdXQgY29tcGxldGU6XCIsIGV2ZW50UGF5bG9hZCk7XG4gICAgICAgIHNldFByZXZlbnRDbG9zZShmYWxzZSk7XG4gICAgICAgIHNldFRva2VuaXplZCgwKTtcbiAgICAgICAgc2V0Q2hlY2tvdXRGaXJlZChmYWxzZSk7XG4gICAgICAgIGlmIChvbkNoZWNrb3V0U3VjY2Vzcykge1xuICAgICAgICAgIG9uQ2hlY2tvdXRTdWNjZXNzKGV2ZW50UGF5bG9hZC5pbnZvaWNlVXJscywgZXZlbnRQYXlsb2FkLnN1YnNjcmlwdGlvbklkcywgZXZlbnRQYXlsb2FkLmN1c3RvbWVySWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIltmb3JtXSBTZXR1cCBwYXltZW50IG1ldGhvZCBjb21wbGV0ZTpcIiwgZXZlbnRQYXlsb2FkKTtcbiAgICAgICAgc2V0UHJldmVudENsb3NlKGZhbHNlKTtcbiAgICAgICAgc2V0VG9rZW5pemVkKDApO1xuICAgICAgICBzZXRDaGVja291dEZpcmVkKGZhbHNlKTtcbiAgICAgICAgaWYgKG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2Vzcykge1xuICAgICAgICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhldmVudFBheWxvYWQucGF5bWVudE1ldGhvZElkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09IEV2ZW50VHlwZS5lbnVtLkxPQURfRVJST1IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBFcnJvciBsb2FkaW5nIGlmcmFtZTpcIiwgZXZlbnRQYXlsb2FkLm1lc3NhZ2UpO1xuICAgICAgICBpZiAob25Mb2FkRXJyb3IpIG9uTG9hZEVycm9yKGV2ZW50UGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBFdmVudFR5cGUuZW51bS5WQUxJREFUSU9OX0VSUk9SKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gZXh0cmFEYXRhPy5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXI7XG4gICAgICAgIGlmIChwcm92aWRlciA9PT0gXCJjcmVkaXRfY2FyZFwiIHx8IHByb3ZpZGVyID09PSB2b2lkIDApIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbZm9ybV0gVmFsaWRhdGlvbiBlcnJvciBmb3IgJHtldmVudFBheWxvYWQuZWxlbWVudFR5cGV9OmAsIGV2ZW50UGF5bG9hZC5lcnJvcnMpO1xuICAgICAgICAgIGlmIChvblZhbGlkYXRpb25FcnJvcikgb25WYWxpZGF0aW9uRXJyb3IoZXZlbnRQYXlsb2FkLmVsZW1lbnRUeXBlLCBldmVudFBheWxvYWQuZXJyb3JzLCBlbGVtZW50SWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfRVJST1IgfHwgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuZW51bS5DSEVDS09VVF9FUlJPUikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW2Zvcm1dIEFQSSBlcnJvciBmcm9tIGVsZW1lbnQ6XCIsIGV2ZW50UGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgICAgaWYgKGV2ZW50UGF5bG9hZC5tZXNzYWdlID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgICAgICAgY29uc3QgY2FyZENwbSA9IGNoZWNrb3V0UGF5bWVudE1ldGhvZHM/LmZpbmQoKGNwbSkgPT4gY3BtLnByb3ZpZGVyID09PSBcImNyZWRpdF9jYXJkXCIpO1xuICAgICAgICAgIGlmICghc2Vzc2lvbklkIHx8ICFmb3JtUmVmLmN1cnJlbnQgfHwgIW9uVmFsaWRhdGlvbkVycm9yIHx8ICFjYXJkQ3BtKSByZXR1cm47XG4gICAgICAgICAgZm9yIChjb25zdCBbZWxlbWVudElkMiwgdGFyZ2V0XSBvZiBPYmplY3QuZW50cmllcyhldmVudFRhcmdldHMpKSB7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBzdGFydFBheW1lbnRGbG93RXZlbnQgPSBjb25zdHJ1Y3RTdWJtaXRFdmVudFBheWxvYWQoXG4gICAgICAgICAgICAgIEV2ZW50VHlwZS5lbnVtLlNUQVJUX1BBWU1FTlRfRkxPVyxcbiAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICBmb3JtUmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgIG9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICAgICAgICAvLyBPbmx5IHN0cmlwZSBzdXBwb3J0cyBmcm9udGVuZCAzRFMgcmlnaHQgbm93LFxuICAgICAgICAgICAgICAvLyBzbyB3ZSBwYXNzIHByb2Nlc3Nvcl9uYW1lOiAnc3RyaXBlJyB0byB0ZWxsIGRlbGVnYXRvciB0byBvbmx5IHVzZSBzdHJpcGVcbiAgICAgICAgICAgICAgeyAuLi5jYXJkQ3BtLCBwcm9jZXNzb3JfbmFtZTogXCJzdHJpcGVcIiB9LFxuICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghc3RhcnRQYXltZW50Rmxvd0V2ZW50KSBjb250aW51ZTtcbiAgICAgICAgICAgIHNldENoZWNrb3V0RmlyZWQodHJ1ZSk7XG4gICAgICAgICAgICBzZXRFeHRyYURhdGEoc3RhcnRQYXltZW50Rmxvd0V2ZW50KTtcbiAgICAgICAgICAgIGVtaXRFdmVudCh0YXJnZXQsIGZvcm1JZCwgZWxlbWVudElkMiwgc3RhcnRQYXltZW50Rmxvd0V2ZW50LCBmcmFtZUJhc2VVcmwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFByZXZlbnRDbG9zZShmYWxzZSk7XG4gICAgICAgICAgc2V0Q2hlY2tvdXRGaXJlZChmYWxzZSk7XG4gICAgICAgICAgaWYgKG9uQ2hlY2tvdXRFcnJvcikgb25DaGVja291dEVycm9yKGV2ZW50UGF5bG9hZC5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgZm9ybUlkLFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgbm9uY2VzLFxuICAgICAgZXh0cmFEYXRhLFxuICAgICAgaWZyYW1lcyxcbiAgICAgIGV2ZW50VGFyZ2V0cyxcbiAgICAgIHRva2VuaXplZCxcbiAgICAgIGNoZWNrb3V0RmlyZWQsXG4gICAgICBvbkJsdXIsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkxvYWRFcnJvcixcbiAgICAgIG9uQ2hlY2tvdXRTdGFydGVkLFxuICAgICAgb25DaGVja291dFN1Y2Nlc3MsXG4gICAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgICBvbkNoZWNrb3V0RXJyb3IsXG4gICAgICBvblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGZyYW1lQmFzZVVybCxcbiAgICAgIHN0cmlwZVBtLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgIGFueUNkZUNvbm5cbiAgICBdXG4gICk7XG4gIGNvbnN0IG9qc0Zsb3dDYWxsYmFja3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBub09wID0gKCkgPT4ge1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIG9uQ2hlY2tvdXRFcnJvcjogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRFcnJvclwiLCBvbkNoZWNrb3V0RXJyb3IgPz8gbm9PcCksXG4gICAgICBvbkNoZWNrb3V0U3RhcnRlZDogbWFrZUNhbGxiYWNrU2FmZShcIm9uQ2hlY2tvdXRTdGFydGVkXCIsIG9uQ2hlY2tvdXRTdGFydGVkID8/IG5vT3ApLFxuICAgICAgb25DaGVja291dFN1Y2Nlc3M6IG1ha2VDYWxsYmFja1NhZmUoXCJvbkNoZWNrb3V0U3VjY2Vzc1wiLCBvbkNoZWNrb3V0U3VjY2VzcyA/PyBub09wKSxcbiAgICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogbWFrZUNhbGxiYWNrU2FmZShcIm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2Vzc1wiLCBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MgPz8gbm9PcCksXG4gICAgICBvblZhbGlkYXRpb25FcnJvcjogbWFrZUNhbGxiYWNrU2FmZShcIm9uVmFsaWRhdGlvbkVycm9yXCIsIG9uVmFsaWRhdGlvbkVycm9yID8/IG5vT3ApXG4gICAgfTtcbiAgfSwgW29uQ2hlY2tvdXRFcnJvciwgb25DaGVja291dFN0YXJ0ZWQsIG9uQ2hlY2tvdXRTdWNjZXNzLCBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsIG9uVmFsaWRhdGlvbkVycm9yXSk7XG4gIGNvbnN0IGdlbmVyYXRlT2pzRmxvd0NvbnRleHQgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coZm9ybVJlZi5jdXJyZW50LCBzZXNzaW9uSWQsIGNoZWNrb3V0UGF5bWVudE1ldGhvZHMpO1xuICAgIGlmICghZm9ybVJlZi5jdXJyZW50IHx8ICFzZXNzaW9uSWQgfHwgIWNoZWNrb3V0UGF5bWVudE1ldGhvZHMpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGNkZUNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICBPYmplY3QuZW50cmllcyhjZGVDb25ucykuZm9yRWFjaCgoW2VsZW1lbnRUeXBlLCBjZGVDb25uXSkgPT4ge1xuICAgICAgaWYgKGNkZUNvbm4pIHtcbiAgICAgICAgY2RlQ29ubmVjdGlvbnMuc2V0KGVsZW1lbnRUeXBlLCBjZGVDb25uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoY2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coXCJbT0pTXSBubyBDREUgY29ubmVjdGlvbnMhXCIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBmb3JtRGl2OiBmb3JtUmVmLmN1cnJlbnQsXG4gICAgICBlbGVtZW50c1Nlc3Npb25JZDogc2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgIGNkZUNvbm5lY3Rpb25zLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgICAgIGJhc2VVcmw6IG5ldyBVUkwoZnJhbWVCYXNlVXJsKS5vcmlnaW5cbiAgICB9O1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9O1xuICBjb25zdCBzdWJtaXRQUiA9IChwcm92aWRlciwgaW5pdFJlc3VsdCwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgY29udGV4dCA9IGdlbmVyYXRlT2pzRmxvd0NvbnRleHQoKTtcbiAgICBpZiAoIWNvbnRleHQgfHwgIWZvcm1SZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIHJldHVybiBPanNGbG93cy5zdHJpcGVQUi5ydW4oe1xuICAgICAgY29udGV4dCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHByb3ZpZGVyKSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShmb3JtUmVmLmN1cnJlbnQpLFxuICAgICAgZmxvd0NhbGxiYWNrczogb2pzRmxvd0NhbGxiYWNrcyxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlciwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICBpbml0UmVzdWx0XG4gICAgfSk7XG4gIH07XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9qc0Zsb3dzSW5pdGlhbGl6YXRpb24gIT09IG51bGwpIHJldHVybjtcbiAgICBjb25zb2xlLmxvZyhcIltPSlNdIG51bUNkZUNvbm5zXCIsIG51bUNkZUNvbm5zLCBjZGVDb25ucyk7XG4gICAgaWYgKG51bUNkZUNvbm5zID09PSAwKSByZXR1cm47XG4gICAgY29uc29sZS5sb2coXCJbT0pTXSBJbml0aWFsaXppbmdcIik7XG4gICAgY29uc3QgY29udGV4dCA9IGdlbmVyYXRlT2pzRmxvd0NvbnRleHQoKTtcbiAgICBpZiAoIWNvbnRleHQpIHJldHVybjtcbiAgICBjb25zb2xlLmxvZyhcIltPSlNdIFN0YXJ0aW5nIGluaXRcIik7XG4gICAgY29uc3QgaW5pdGlhbGl6YXRpb24gPSBpbml0aWFsaXplT2pzRmxvd3MoY29udGV4dCwgb2pzRmxvd0NhbGxiYWNrcyk7XG4gICAgc2V0T2pzRmxvd3NJbml0aWFsaXphdGlvbihpbml0aWFsaXphdGlvbik7XG4gICAgY29uc29sZS5sb2coXCJbT0pTXSBTdWJzY3JpYmVcIik7XG4gICAgaW5pdGlhbGl6YXRpb24uc3RyaXBlUFIuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiW09KU10gc2V0UGF5bWVudFJlcXVlc3RzXCIsIHN0YXR1cyk7XG4gICAgICBpZiAoc3RhdHVzLnN0YXR1cyA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICAgICAgc2V0UGF5bWVudFJlcXVlc3RzLnNldChcImFwcGxlX3BheVwiLCBQUl9MT0FESU5HKTtcbiAgICAgICAgc2V0UGF5bWVudFJlcXVlc3RzLnNldChcImdvb2dsZV9wYXlcIiwgUFJfTE9BRElORyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cy5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBzZXRQYXltZW50UmVxdWVzdHMuc2V0KFwiYXBwbGVfcGF5XCIsIFBSX0VSUk9SKTtcbiAgICAgICAgc2V0UGF5bWVudFJlcXVlc3RzLnNldChcImdvb2dsZV9wYXlcIiwgUFJfRVJST1IpO1xuICAgICAgfSBlbHNlIGlmIChzdGF0dXMuc3RhdHVzID09PSBcImxvYWRlZFwiKSB7XG4gICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBzdGF0dXMucmVzdWx0O1xuICAgICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICAgIGNvbnN0IGNhbkdvb2dsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgICAgICBzZXRQYXltZW50UmVxdWVzdHMuc2V0KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiBjYW5BcHBsZVBheSA/IHN1Ym1pdFBSKFwiYXBwbGVfcGF5XCIsIGluaXRSZXN1bHQsIHVzZXJQYXJhbXMpIDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRQYXltZW50UmVxdWVzdHMuc2V0KFwiZ29vZ2xlX3BheVwiLCB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuR29vZ2xlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IGNhbkdvb2dsZVBheSA/IHN1Ym1pdFBSKFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCB1c2VyUGFyYW1zKSA6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGluaXRpYWxpemF0aW9uLnN0cmlwZUxpbmsuc3Vic2NyaWJlKChpbml0KSA9PiB7XG4gICAgICAgIGlmIChpbml0LnN0YXR1cyA9PT0gXCJsb2FkZWRcIiAmJiBpbml0LnJlc3VsdC5pc0F2YWlsYWJsZSkge1xuICAgICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKGluaXQucmVzdWx0LmNvbnRyb2xsZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgW2Zvcm1SZWYuY3VycmVudCwgc2Vzc2lvbklkLCBjaGVja291dFBheW1lbnRNZXRob2RzLCBudW1DZGVDb25ucyA9PT0gMF0pO1xuICBjb25zdCBzdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBnZW5lcmF0ZU9qc0Zsb3dDb250ZXh0KCk7XG4gICAgaWYgKCFmb3JtUmVmLmN1cnJlbnQgfHwgIXNlc3Npb25JZCB8fCAhYW55Q2RlQ29ubiB8fCAhY2hlY2tvdXRQYXltZW50TWV0aG9kcyB8fCAhY29udGV4dCkgcmV0dXJuO1xuICAgIE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0KGNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oZm9ybVJlZi5jdXJyZW50KSxcbiAgICAgIGZsb3dDYWxsYmFja3M6IG9qc0Zsb3dDYWxsYmFja3MsXG4gICAgICBjdXN0b21QYXJhbXM6IHZvaWQgMCxcbiAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBjdXN0b20gcGFyYW1zXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgIH0pO1xuICB9O1xuICBjb25zdCBvbkJlZm9yZVVubG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChlKSA9PiB7XG4gICAgICBpZiAocHJldmVudENsb3NlKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSxcbiAgICBbcHJldmVudENsb3NlXVxuICApO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2FkZWQgfHwgIWZvcm1SZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIGNvbnN0IGFyZUlmcmFtZXNMb2FkZWQgPSBpZnJhbWVzLmxlbmd0aCA+IDAgJiYgaWZyYW1lcy5sZW5ndGggPT09IE9iamVjdC5rZXlzKGV2ZW50VGFyZ2V0cykubGVuZ3RoO1xuICAgIGlmIChhcmVJZnJhbWVzTG9hZGVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIltmb3JtXSBBbGwgZWxlbWVudHMgbG9hZGVkXCIpO1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgaWYgKG9uTG9hZCkgb25Mb2FkKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0sIFtpZnJhbWVzLCBldmVudFRhcmdldHMsIGxvYWRlZCwgb25Mb2FkLCB0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeV0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFJlZmVyZXIod2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIG9uTWVzc2FnZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgb25CZWZvcmVVbmxvYWQpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBvbkJlZm9yZVVubG9hZCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25NZXNzYWdlKTtcbiAgICB9O1xuICB9LCBbc2Vzc2lvbklkLCBvbk1lc3NhZ2UsIG9uQmVmb3JlVW5sb2FkXSk7XG4gIGNvbnN0IHJlZ2lzdGVySWZyYW1lID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGlmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmdJZnJhbWUgPSBpZnJhbWVzLmZpbmQoKGV4aXN0aW5nSWZyYW1lMikgPT4gZXhpc3RpbmdJZnJhbWUyLmNvbnRlbnRXaW5kb3cgPT09IGlmcmFtZS5jb250ZW50V2luZG93KTtcbiAgICAgIGNvbnNvbGUubG9nKFwiW09KU10gQ2FsbGluZyByZWdpc3RlciBpZnJhbWUuIEV4aXN0aW5nP1wiLCBleGlzdGluZ0lmcmFtZSk7XG4gICAgICBpZiAoZXhpc3RpbmdJZnJhbWUpIHJldHVybjtcbiAgICAgIHNldElmcmFtZXMoKHByZXZJZnJhbWVzKSA9PiBbLi4ucHJldklmcmFtZXMsIGlmcmFtZV0pO1xuICAgICAgY29uc29sZS5sb2coXCJbT0pTXVtmb3JtXSBSZWdpc3RlcmluZyBpZnJhbWU6XCIsIGlmcmFtZSk7XG4gICAgICBjb25zdCBlbGVtZW50VHlwZSA9IGdldEVsZW1lbnRUeXBlRnJvbUlmcmFtZUlkKGlmcmFtZS5pZCk7XG4gICAgICBhd2FpdCBjb25uZWN0VG9DZGVJZnJhbWUoZWxlbWVudFR5cGUsIGlmcmFtZSk7XG4gICAgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW2lmcmFtZXNdXG4gICk7XG4gIGNvbnN0IHZhbHVlID0ge1xuICAgIGZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0LFxuICAgIHJlZmVyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBmcmFtZUJhc2VVcmxcbiAgfTtcbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IHN1Ym1pdENhcmQsXG4gICAgYXBwbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5hcHBsZV9wYXksXG4gICAgZ29vZ2xlUGF5OiBwYXltZW50UmVxdWVzdHMuZ29vZ2xlX3BheSxcbiAgICBsb2FkZWQsXG4gICAgcHJldmlldzogZHluYW1pY1ByZXZpZXcsXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmxcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGNsYXNzTmFtZSwgcmVmOiBmb3JtUmVmLCBjaGlsZHJlbjogY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSk7XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBzdWJQYXRoLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJlciwgZm9ybUhlaWdodCwgY2hlY2tvdXRTZWN1cmVUb2tlbiwgcmVnaXN0ZXJJZnJhbWUsIGJhc2VVcmwgfSA9IHVzZU9wZW5QYXlFbGVtZW50cygpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVyZXIpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzdHlsZXNcIiwgZWxlbWVudFN0eWxlKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwiZm9ybUlkXCIsIGZvcm1JZCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIGNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSwgW2VsZW1lbnRTdHlsZSwgZm9ybUlkLCByZWZlcmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcIltPSlNdIGVsZW1lbnQgZnJhbWUgcmVnaXN0ZXIgYXR0ZW1wdFwiLCAhIWlmcmFtZVJlZi5jdXJyZW50LCAhIWhhc0xvYWRlZCk7XG4gICAgaWYgKCFpZnJhbWVSZWYuY3VycmVudCB8fCAhaGFzTG9hZGVkKSByZXR1cm47XG4gICAgcmVnaXN0ZXJJZnJhbWUoaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgc3ViUGF0aDogXCJjYXJkLWN2Y1wiIH0pO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBzdWJQYXRoOiBcImNhcmRcIiB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgc3ViUGF0aDogXCJjYXJkLWV4cGlyeVwiIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBzdWJQYXRoOiBcImNhcmQtbnVtYmVyXCIgfSk7XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCwgQ2FyZEVsZW1lbnQsIENhcmRFeHBpcnlFbGVtZW50LCBDYXJkTnVtYmVyRWxlbWVudCwgRWxlbWVudHNGb3JtLCBGaWVsZE5hbWUsIHVzZU9wZW5QYXlFbGVtZW50cyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLE9BQU9BLE1BQWMsaUJBQUFDLElBQWUsY0FBQUMsSUFBWSxVQUFBQyxJQUFRLGVBQUFDLEdBQWEsYUFBQUMsR0FBVyxZQUFBQyxHQUFVLFdBQUFDLFVBQWU7QUFDekcsU0FBUyxPQUFBQyxTQUFXO0FBQ3BCLFNBQVMsS0FBQUMsU0FBUztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsUUFBVztBQUVsQixNQUFNQyxLQUFrQlosR0FBYztBQUFBLEVBQ3BDLFFBQVE7QUFBQSxFQUNSLFlBQVk7QUFBQSxFQUNaLFNBQVM7QUFBQSxFQUNULHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQixNQUFNO0FBQUEsRUFDdEI7QUFBQSxFQUNBLFNBQVM7QUFDWCxDQUFDLEdBRUthLEtBQXFCLE1BQU07QUFDL0IsUUFBTUMsSUFBVWIsR0FBV1csRUFBZTtBQUMxQyxNQUFJLENBQUNFO0FBQ0gsVUFBTSxJQUFJLE1BQU0sbUVBQW1FO0FBRXJGLFNBQU9BO0FBQ1QsR0FFTUMsS0FBaUIsOEJBRWpCQyxLQUE0QlIsRUFBRSxPQUFPO0FBQUEsRUFDekMsTUFBTUEsRUFBRSxPQUFPO0FBQUEsRUFDZixLQUFLQSxFQUFFLE1BQU1BLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDdkIsS0FBS0EsRUFBRSxPQUFPO0FBQUEsRUFDZCxLQUFLQSxFQUFFLE9BQU87QUFDaEIsQ0FBQyxHQUNLUyxLQUFrQ1QsRUFBRSxNQUFNUSxFQUF5QixHQUNuRUUsS0FBZ0JWLEVBQUUsT0FBTztBQUFBLEVBQzdCLE1BQU1BLEVBQUUsT0FBTztBQUFBLEVBQ2YsU0FBU0EsRUFBRSxPQUFPO0FBQUEsRUFDbEIsTUFBTUEsRUFBRSxNQUFNQSxFQUFFLE9B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Q2hCLFdBQVc7QUFBQSxNQUNYLEtBQUssR0FBRzVaLENBQU8sV0FBVzRaLENBQU8sYUFBYU0sQ0FBVztBQUFBLE1BQ3pELE9BQU9EO0FBQUEsTUFDUCxLQUFLRjtBQUFBLElBQ1A7QUFBQSxFQUNGLEtBYkUsUUFBUSxNQUFNLGtEQUFrRCxHQUN6QyxnQkFBQTdpQixFQUFJLE9BQU8sQ0FBQyxDQUFDO0FBYXhDLEdBRU1pakIsS0FBaUIsQ0FBQyxFQUFFLFFBQUF6YixFQUFPLE1BQ1IsZ0JBQUF4SCxFQUFJeWlCLElBQWMsRUFBRSxRQUFBamIsR0FBUSxTQUFTLFdBQVcsQ0FBQyxHQUdwRTBiLEtBQWMsQ0FBQyxFQUFFLFFBQUExYixFQUFPLE1BQ0wsZ0JBQUF4SCxFQUFJeWlCLElBQWMsRUFBRSxRQUFBamIsR0FBUSxTQUFTLE9BQU8sQ0FBQyxHQUdoRTJiLEtBQW9CLENBQUMsRUFBRSxRQUFBM2IsRUFBTyxNQUNYLGdCQUFBeEgsRUFBSXlpQixJQUFjLEVBQUUsUUFBQWpiLEdBQVEsU0FBUyxjQUFjLENBQUMsR0FHdkU0YixLQUFvQixDQUFDLEVBQUUsUUFBQTViLEVBQU8sTUFDWCxnQkFBQXhILEVBQUl5aUIsSUFBYyxFQUFFLFFBQUFqYixHQUFRLFNBQVMsY0FBYyxDQUFDOyIsCiAgIm5hbWVzIjogWyJyZXF1aXJlJCQwIiwgImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VSZWYiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVN0YXRlIiwgInVzZU1lbW8iLCAianN4IiwgInoiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiY2hhbGsiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgIkZSQU1FX0JBU0VfVVJMIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3JSZXNwb25zZSIsICJab2RGaWVsZEVycm9yIiwgIlpvZEZpZWxkRXJyb3JzIiwgIk1BUF9UT19IVU1BTl9GUklFTkRMWV9MT1dFUkNBU0UiLCAiZ2V0SHVtYW5GcmllbmRseU1lc3NhZ2UiLCAib2dFcnJvck1lc3NhZ2UiLCAia2V5IiwgImlzU3RyaW5naWZpZWRKc29uT2JqZWN0IiwgInN0ciIsICJjcmVhdGVNZXNzYWdlRnJvbVB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgInJlc3BvbnNlIiwgImVyciIsICJjcmVhdGVNZXNzYWdlRnJvbVpvZEZpZWxkRXJyb3JzIiwgImVycm9ycyIsICJnZXRFcnJvck1lc3NhZ2UiLCAib2JqIiwgImUyIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImZuIiwgImFyZ3MiLCAiZXJyb3IiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkVsZW1lbnRUeXBlIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiRWxlbWVudEV2ZW50IiwgIkNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiVG9rZW5pemVDYXJkUmVzcG9uc2UiLCAiVGhyZWVEU1N0YXR1cyIsICJUaHJlZURTU3RhdHVzMiIsICJQaW5nM0RTU3RhdHVzUmVzcG9uc2UiLCAiQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJ2YWx1ZSIsICJmaWVsZE5hbWUiLCAiU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgIlBheW1lbnRSZXF1ZXN0TmV4dEFjdGlvbk1ldGFkYXRhIiwgIm91ckN1cnJlbmN5VG9UaGVpcnMiLCAiZ2V0TG9hZGVkU3RyaXBlIiwgInB1Ymxpc2hhYmxlS2V5IiwgImkiLCAiaXNTdHJpcGVKc1ByZXNlbnQiLCAic2xlZXAiLCAiY3JlYXRlU3RyaXBlRWxlbWVudHMiLCAic3RyaXBlUHViS2V5IiwgImVsZW1lbnRzT3B0aW9ucyIsICJzdHJpcGUiLCAiY3JlYXRlU3RyaXBlUGF5bWVudFJlcXVlc3QiLCAidG90YWxBbW91bnRBdG9tIiwgImN1cnJlbmN5IiwgImlzQW1vdW50UGVuZGluZyIsICJpc0xpbmtPbmx5IiwgInN0cmlwZUN1cnJlbmN5IiwgInRpbWVvdXRNcyIsICJyZXNvbHZlIiwgIndhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kIiwgInBheW1lbnRSZXF1ZXN0IiwgInJlamVjdCIsICJldnQiLCAiZSIsICJjb25maXJtUGF5bWVudEZsb3dGb3JTdHJpcGVQUkxlZ2FjeSIsICJwYXlsb2FkIiwgInN0cmlwZVBtIiwgIm5leHRBY3Rpb25NZXRhZGF0YSIsICJjb25maXJtUmVzdWx0IiwgImNvbmZpcm1TdHJpcGVQclBNIiwgImNvbmZpcm1QYXltZW50Rmxvd0ZvcjNEUyIsICJsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93IiwgIl9hIiwgIl9iIiwgIl9jIiwgIl9kIiwgInJlc3VsdFN0YXR1cyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgImZvcm1EaXYiLCAiaW5pdGlhbERpY3QiLCAiYWNjIiwgImlucHV0IiwgImNvbnN0cnVjdFN1Ym1pdEV2ZW50UGF5bG9hZCIsICJldmVudFR5cGUiLCAic2Vzc2lvbklkIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJkb05vdFVzZUxlZ2FjeUNDRmxvdyIsICJwYXltZW50Rmxvd01ldGFkYXRhIiwgImV4dHJhRGF0YSIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgInBhcnNlRXZlbnRQYXlsb2FkIiwgImV2ZW50RGF0YSIsICJlbWl0RXZlbnQiLCAidGFyZ2V0IiwgImZvcm1JZCIsICJlbGVtZW50SWQiLCAiYmFzZVVybCIsICJldmVudCIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgInBpbmciLCAicmVzdWx0IiwgImlzUmVzdWx0VmFsaWQiLCAiaXNWYWxpZCIsICJjcmVhdGVDZGVDb25uZWN0aW9uIiwgImlmcmFtZSIsICJjb25uZWN0aW9uT2JqIiwgImlzVmFsaWRPYmplY3QiLCAibnVsbE9yVW5kZWZPciIsICJDREVSZXNwb25zZUVycm9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJTZXR1cENoZWNrb3V0UmVzcG9uc2UiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgInN1bSIsICJhcnIiLCAiYSIsICJiIiwgImZpeFByb3RvIiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJwIiwgIl9fIiwgIkN1c3RvbUVycm9yIiwgIl9zdXBlciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJDZGVFcnJvciIsICJmcmllbmRseU1lc3NhZ2UiLCAicXVlcnlDREUiLCAiY2RlQ29ubiIsICJkYXRhIiwgInJlc3BvbnNlU2NoZW1hIiwgImlzQ0RFUmVzcG9uc2VFcnJvciIsICJjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSIsICJzY2hlbWEiLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3IiwgInJlcXVlc3QiLCAiZ2V0UHJlZmlsbCIsICJzdGFydFBheW1lbnRGbG93IiwgInN0YXJ0UGF5bWVudEZsb3dGb3JDQyIsICJzdGFydFBheW1lbnRGbG93Rm9yUFIiLCAiY29uZmlybVBheW1lbnRGbG93IiwgIndhaXRGb3JGb3JtRmllbGRJbnB1dCIsICJ3YWl0VGltZU1zIiwgInN0YXJ0V2FpdFRpbWUiLCAibWF0Y2giLCAiZ2V0Q2hlY2tvdXRWYWx1ZSIsICJzZWN1cmVUb2tlbiIsICJwcm9tb0NvZGUiLCAiY2hlY2tvdXRQcmV2aWV3IiwgImN1cnJlbmNpZXMiLCAiaW52IiwgImFtb3VudEF0b20iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvcjNkc1N0YXR1cyIsICJjaGlsZE9yaWdpbiIsICJpc0pzb25TdHJpbmciLCAiYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMiLCAic2ltcGxlT2pzRmxvdyIsICJwYXJhbXMiLCAiZmxvd1Jlc3VsdCIsICJhZGRFcnJvckNhdGNoZXJGb3JJbml0IiwgImluaXQiLCAiZXJyX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJsb2dfXyQ1IiwgImVycl9fJDUiLCAicGFyc2VDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJmaW5kQ3BtTWF0Y2hpbmdUeXBlIiwgImFsbENQTXMiLCAiem9kTW9kZWwiLCAiY3BtIiwgImNwbTIiLCAibG9nX18kNCIsICJlcnJfXyQ0IiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAidmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdCIsICJwYXJzZWQiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyQzIiwgImVycl9fJDMiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiZmxvd0NhbGxiYWNrcyIsICJpbml0UGFyYW1zIiwgInN0cmlwZUxpbmtDcG0iLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJwcmVmaWxsIiwgImluaXRpYWxQcmV2aWV3IiwgImVsZW1lbnRzIiwgImV4cHJlc3NDaGVja291dEVsZW1lbnQiLCAibW91bnRCdXR0b24iLCAiZGlzbW91bnRCdXR0b24iLCAiT2pzRmxvd3MiLCAiZ2V0RWxlbWVudEJ5SWRBc3luYyIsICJydW5TdHJpcGVMaW5rRmxvdyIsICJjdXN0b21QYXJhbXMiLCAibWVyZ2VkSW5wdXRzIiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUE0iLCAibm9uQ2RlRm9ybUZpZWxkcyIsICJzdGFydFBheW1lbnRGbG93UmVzcG9uc2UiLCAib3VyRXhpc3RpbmdQbUlkIiwgImNoZWNrb3V0UmVxdWVzdCIsICJmb3JtSW5wdXRzIiwgIl9lIiwgImlucHV0cyIsICJwYXllckZpcnN0TmFtZSIsICJwYXllckxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJpZCIsICJnZXRFbGVtZW50IiwgImVsZW1lbnQiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgInN0YXJ0UG9sbGluZyIsICJvblN1Y2Nlc3MiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAicG9sbGluZ0ludGVydmFsIiwgImhhbmRsZUV2ZW50cyIsICJoYW5kbGVDYW5jZWwiLCAic3RhcnQzZHNWZXJpZmljYXRpb24iLCAiY2xlYW51cEV2ZW50TGlzdGVuZXJzIiwgImxvZ19fJDIiLCAiZXJyX18kMiIsICJzdHJpcGVMb2dfXyIsICJydW5Db21tb25DY0Zsb3ciLCAidG9rZW5pemVDYXJkUmVzdWx0cyIsICJjb21tb25DaGVja291dFBhcmFtcyIsICJzaG91bGRVc2VOZXdGbG93IiwgInN0YXJ0UGZSZXN1bHQiLCAiY29tbW9uQ0MzRFNGbG93IiwgInN0cmlwZUNDM0RTRmxvdyIsICJjcmVhdGVkUGF5bWVudE1ldGhvZCIsICJwYXJzZVN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVBY3Rpb24iLCAiYWN0aW9uIiwgInBhcnNlQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbW1vbkFjdGlvbiIsICJsb2dfXyQxIiwgImVycl9fJDEiLCAiU3RyaXBlUHJDcG0iLCAiaW5pdFN0cmlwZVByRmxvdyIsICJwciIsICJjYW5NYWtlUGF5bWVudCIsICJydW5TdHJpcGVQckZsb3ciLCAiaW5pdFJlc3VsdCIsICJvdmVycmlkZSIsICJ1cGRhdGVQcldpdGhBbW91bnQiLCAic3RyaXBlUG1BZGRlZEV2ZW50IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0iLCAicGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbUV2dCIsICJhbW91bnQiLCAiaXNQZW5kaW5nIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAiY3BtcyIsICJ3aXRoUHJvdmlkZXIiLCAid2l0aFByb2Nlc3NvciIsICJtYXRjaGVzIiwgImdldERlZmF1bHRFeHBvcnRGcm9tQ2pzIiwgIngiLCAiT2JzZXJ2YWJsZSQyIiwgImhhc1N5bWJvbCIsICJuYW1lIiwgImdldFN5bWJvbCIsICJTeW1ib2xJdGVyYXRvciIsICJTeW1ib2xPYnNlcnZhYmxlIiwgIlN5bWJvbFNwZWNpZXMiLCAiZ2V0TWV0aG9kIiwgImdldFNwZWNpZXMiLCAiY3RvciIsICJPYnNlcnZhYmxlJDEiLCAiaXNPYnNlcnZhYmxlIiwgImhvc3RSZXBvcnRFcnJvciIsICJlbnF1ZXVlIiwgImNsZWFudXBTdWJzY3JpcHRpb24iLCAic3Vic2NyaXB0aW9uIiwgImNsZWFudXAiLCAidW5zdWJzY3JpYmUiLCAiY2xvc2VTdWJzY3JpcHRpb24iLCAiZmx1c2hTdWJzY3JpcHRpb24iLCAicXVldWUiLCAibm90aWZ5U3Vic2NyaXB0aW9uIiwgInR5cGUiLCAib2JzZXJ2ZXIiLCAibSIsICJvbk5vdGlmeSIsICJTdWJzY3JpcHRpb24iLCAic3Vic2NyaWJlciIsICJzZWxmIiwgInN1YnNjcmlwdGlvbk9ic2VydmVyIiwgIk9ic2VydmFibGUiLCAiZG9uZSIsICJDIiwgImhhc1NlZWQiLCAiaGFzVmFsdWUiLCAiZmlyc3QiLCAidmFsdWVzIiwgInNvdXJjZXMiLCAiaW5kZXgiLCAic3RhcnROZXh0IiwgIm5leHQiLCAidiIsICJzdWJzY3JpcHRpb25zIiwgIm91dGVyIiwgImlubmVyIiwgImNvbXBsZXRlSWZEb25lIiwgInMiLCAibWV0aG9kIiwgIm9ic2VydmFibGUiLCAiaXRlbSIsICJpdGVtcyIsICJ6ZW5PYnNlcnZhYmxlIiwgImxvZ19fIiwgImdldE9qc0luaXRSZXN1bHRzRGVidWdPYmplY3QiLCAiaW5pdGlhbGl6ZU9qc0Zsb3dzIiwgInJ1bkluaXRGbG93QXNPYnNlcnZhYmxlIiwgImZsb3dOYW1lIiwgImluaXRGbG93IiwgIlBSX0xPQURJTkciLCAiUFJfRVJST1IiLCAidXNlQXN5bmNFZmZlY3QkMiIsICJSZWFjdCIsICJ1c2VBc3luY0VmZmVjdCIsICJlZmZlY3QiLCAiZGVzdHJveSIsICJoYXNEZXN0cm95IiwgIm1vdW50ZWQiLCAibWF5YmVQcm9taXNlIiwgInVzZUFzeW5jRWZmZWN0RXhwb3J0cyIsICJ1c2VBc3luY0VmZmVjdCQxIiwgInVzZVRpbWVvdXRGbiIsICJtcyIsICJyZWFkeSIsICJ0aW1lb3V0IiwgImNhbGxiYWNrIiwgImlzUmVhZHkiLCAic2V0IiwgImNsZWFyIiwgInVzZURlYm91bmNlIiwgImRlcHMiLCAiY2FuY2VsIiwgInJlc2V0IiwgInVzZUR5bmFtaWNQcmV2aWV3IiwgImlzRW5hYmxlZCIsICJwcm9tb0NvZGVJbnB1dCIsICJzZXRQcm9tb0NvZGVJbnB1dCIsICJwcm9tb0NvZGVEZWJvdW5jZWQiLCAic2V0UHJvbW9Db2RlRGVib3VuY2VkIiwgInByZXZpZXdBbXQiLCAic2V0UHJldmlld0FtdCIsICJpc1ByZXZpZXdMb2FkaW5nIiwgInNldElzUHJldmlld0xvYWRpbmciLCAicHJldmlld0Vycm9yIiwgInNldFByZXZpZXdFcnJvciIsICJwcm9tb0NvZGVJbnB1dDIiLCAiaXNNb3VudGVkIiwgInByZXZpZXciLCAidXNlTWFwIiwgImluaXRpYWxNYXAiLCAibWFwIiwgInN0YWJsZUFjdGlvbnMiLCAiZW50cnkiLCAicHJldk1hcCIsICJuZXdNYXAiLCAib21pdCIsICJyZXN0IiwgInV0aWxzIiwgInVzZUNkZUNvbm5lY3Rpb24iLCAibnVtQ2RlQ29ubnMiLCAic2V0TnVtQ2RlQ29ubnMiLCAiY2RlQ29ubnMiLCAiY2RlQ29ubnNTZXR0ZXIiLCAiYW55Q2RlQ29ubiIsICJlbGVtZW50VHlwZSIsICJnZXRFbGVtZW50VHlwZUZyb21JZnJhbWVJZCIsICJpZnJhbWVJZCIsICJFbGVtZW50c0Zvcm0iLCAicHJvcHMiLCAiY2hpbGRyZW4iLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJjbGFzc05hbWUiLCAib25Gb2N1cyIsICJvbkJsdXIiLCAib25DaGFuZ2UiLCAib25Mb2FkIiwgIm9uTG9hZEVycm9yIiwgIm9uQ2hlY2tvdXRTdGFydGVkIiwgIm9uQ2hlY2tvdXRTdWNjZXNzIiwgIm9uQ2hlY2tvdXRFcnJvciIsICJvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MiLCAiZW5hYmxlRHluYW1pY1ByZXZpZXdzIiwgImN1c3RvbUluaXRQYXJhbXMiLCAiZnJhbWVCYXNlVXJsIiwgInJlZmVyZXIiLCAic2V0UmVmZXJlciIsICJub25jZXMiLCAic2V0Tm9uY2VzIiwgImZvcm1IZWlnaHQiLCAic2V0Rm9ybUhlaWdodCIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInNldEV4dHJhRGF0YSIsICJwcmV2ZW50Q2xvc2UiLCAic2V0UHJldmVudENsb3NlIiwgImlmcmFtZXMiLCAic2V0SWZyYW1lcyIsICJldmVudFRhcmdldHMiLCAic2V0RXZlbnRUYXJnZXRzIiwgInRva2VuaXplZCIsICJzZXRUb2tlbml6ZWQiLCAiY2hlY2tvdXRGaXJlZCIsICJzZXRDaGVja291dEZpcmVkIiwgInNldFNlc3Npb25JZCIsICJzZXRDdXJyZW5jeSIsICJ0b3RhbEFtb3VudEF0b21zIiwgInNldFRvdGFsQW1vdW50QXRvbXMiLCAiY2hlY2tvdXRQYXltZW50TWV0aG9kcyIsICJzZXRDaGVja291dFBheW1lbnRNZXRob2RzIiwgImZvcm1SZWYiLCAiY29ubmVjdFRvQ2RlSWZyYW1lIiwgIm9qc0Zsb3dzSW5pdGlhbGl6YXRpb24iLCAic2V0T2pzRmxvd3NJbml0aWFsaXphdGlvbiIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgIm9qc192ZXJzaW9uIiwgImR5bmFtaWNQcmV2aWV3IiwgIm9uTWVzc2FnZSIsICJldmVudFNvdXJjZSIsICJyYXciLCAicHJldk5vbmNlcyIsICJldmVudFBheWxvYWQiLCAiaGVpZ2h0IiwgIm1hdGNoaW5nSWZyYW1lIiwgInByZXZUYXJnZXRzIiwgIm5leHRBY3Rpb25UeXBlIiwgInBheW1lbnRfbWV0aG9kcyIsICJwcm9jZWVkVG9DaGVja291dCIsICJleGlzdGluZ0NDUE1JZCIsICJlcnJNc2ciLCAidG90YWxUb2tlbml6ZWQiLCAiYWxsVG9rZW5pemVkIiwgInByb3ZpZGVyIiwgImNhcmRDcG0iLCAiZWxlbWVudElkMiIsICJzdGFydFBheW1lbnRGbG93RXZlbnQiLCAib2pzRmxvd0NhbGxiYWNrcyIsICJub09wIiwgImdlbmVyYXRlT2pzRmxvd0NvbnRleHQiLCAiY2RlQ29ubmVjdGlvbnMiLCAic3VibWl0UFIiLCAiaW5pdGlhbGl6YXRpb24iLCAiY2FuQXBwbGVQYXkiLCAiY2FuR29vZ2xlUGF5IiwgInVzZXJQYXJhbXMiLCAic3VibWl0Q2FyZCIsICJvbkJlZm9yZVVubG9hZCIsICJyZWdpc3RlcklmcmFtZSIsICJleGlzdGluZ0lmcmFtZSIsICJleGlzdGluZ0lmcmFtZTIiLCAicHJldklmcmFtZXMiLCAiY2hpbGRyZW5Qcm9wcyIsICJFbGVtZW50RnJhbWUiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJDYXJkQ3ZjRWxlbWVudCIsICJDYXJkRWxlbWVudCIsICJDYXJkRXhwaXJ5RWxlbWVudCIsICJDYXJkTnVtYmVyRWxlbWVudCJdCn0K
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getopenpay/openpay-js-react",
3
- "version": "0.1.11",
3
+ "version": "0.1.12",
4
4
  "description": "Accept payments through OpenPay, right on your site",
5
5
  "author": "OpenPay <info@getopenpay.com> (https://getopenpay.com)",
6
6
  "private": false,