@curless/hotel-storefront 0.2.0 → 0.3.0

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.
@@ -2,7 +2,7 @@
2
2
  // The hotel booking MCP App card - a single self-contained HTML (Vite +
3
3
  // vite-plugin-singlefile, with the MCP Apps SDK bundled), base64-embedded so it
4
4
  // is bundler-safe. Regenerate after changing the widget UI.
5
- export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgVmY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLEpmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxnYz17fSxLZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24obCl7cmV0dXJuIFByb21pc2UuYWxsKGwubWFwKHA9PlByb21pc2UucmVzb2x2ZShwKS50aGVuKG09Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOm19KSxtPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjptfSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLHU9Yz8ubm9uY2V8fGM/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAobD0+e2lmKGw9SmYobCxvKSxsIGluIGdjKXJldHVybjtnY1tsXT0hMDtjb25zdCBwPWwuZW5kc1dpdGgoIi5jc3MiKSxtPXA/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgaz1hLmxlbmd0aC0xO2s+PTA7ay0tKXtjb25zdCAkPWFba107aWYoJC5ocmVmPT09bCYmKCFwfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2x9Il0ke219YCkpcmV0dXJuO2NvbnN0IHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKHkucmVsPXA/InN0eWxlc2hlZXQiOlZmLHB8fCh5LmFzPSJzY3JpcHQiKSx5LmNyb3NzT3JpZ2luPSIiLHkuaHJlZj1sLHUmJnkuc2V0QXR0cmlidXRlKCJub25jZSIsdSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5KSxwKXJldHVybiBuZXcgUHJvbWlzZSgoaywkKT0+e3kuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsaykseS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7bH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBXZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBHZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBvbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIFlmKGUpe31mdW5jdGlvbiBRZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIFhmKGUpe31mdW5jdGlvbiBPcihlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBBcihlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+WHIobikpLmpvaW4odCl9ZnVuY3Rpb24gS24oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIGVoe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gT3QoZSl7cmV0dXJuIG5ldyBlaChlKX1mdW5jdGlvbiBZcihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBFZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gb3UoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgdmM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gcnUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT12YylyZXR1cm4gbz09PXZvaWQgMCYmKG89dmMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIHRoKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gRmUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBybyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBTZShlKXtyZXR1cm4gcm8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gc3UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBGZSh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBpdShlLHQsbil7dCBpbiBlP0ZlKGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gTWUoZSx0LG4sbyl7Y29uc3Qgcj1TZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9zdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTppdShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiBuaChlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/c3UoZSxuLCgpPT50W25dKTppdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBYKC4uLmUpe2NvbnN0IHQ9e307Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKTtPYmplY3QuYXNzaWduKHQsbyl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LHQpfWZ1bmN0aW9uIG9oKGUpe3JldHVybiBYKGUuX3pvZC5kZWYpfWZ1bmN0aW9uIHJoKGUsdCl7cmV0dXJuIHQ/dC5yZWR1Y2UoKG4sbyk9Pm4/LltvXSxlKTplfWZ1bmN0aW9uIHNoKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZSksbj10Lm1hcChvPT5lW29dKTtyZXR1cm4gUHJvbWlzZS5hbGwobikudGhlbihvPT57Y29uc3Qgcj17fTtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKylyW3Rbc11dPW9bc107cmV0dXJuIHJ9KX1mdW5jdGlvbiBpaChlPTEwKXtjb25zdCB0PSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7bGV0IG49IiI7Zm9yKGxldCBvPTA7bzxlO28rKyluKz10W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSp0Lmxlbmd0aCldO3JldHVybiBufWZ1bmN0aW9uIGF1KGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX1mdW5jdGlvbiBjdShlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC9bXlx3XHMtXS9nLCIiKS5yZXBsYWNlKC9bXHNfLV0rL2csIi0iKS5yZXBsYWNlKC9eLSt8LSskL2csIiIpfWNvbnN0IFFyPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZTooLi4uZSk9Pnt9O2Z1bmN0aW9uIFllKGUpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiYhQXJyYXkuaXNBcnJheShlKX1jb25zdCB1dT1PdCgoKT0+e2lmKG5lLmppdGxlc3N8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/LnVzZXJBZ2VudD8uaW5jbHVkZXMoIkNsb3VkZmxhcmUiKSlyZXR1cm4hMTt0cnl7Y29uc3QgZT1GdW5jdGlvbjtyZXR1cm4gbmV3IGUoIiIpLCEwfWNhdGNoe3JldHVybiExfX0pO2Z1bmN0aW9uIENlKGUpe2lmKFllKGUpPT09ITEpcmV0dXJuITE7Y29uc3QgdD1lLmNvbnN0cnVjdG9yO2lmKHQ9PT12b2lkIDB8fHR5cGVvZiB0IT0iZnVuY3Rpb24iKXJldHVybiEwO2NvbnN0IG49dC5wcm90b3R5cGU7cmV0dXJuIShZZShuKT09PSExfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwiaXNQcm90b3R5cGVPZiIpPT09ITEpfWZ1bmN0aW9uIHNvKGUpe3JldHVybiBDZShlKT97Li4uZX06QXJyYXkuaXNBcnJheShlKT9bLi4uZV06ZSBpbnN0YW5jZW9mIE1hcD9uZXcgTWFwKGUpOmUgaW5zdGFuY2VvZiBTZXQ/bmV3IFNldChlKTplfWZ1bmN0aW9uIGFoKGUpe2xldCB0PTA7Zm9yKGNvbnN0IG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdCsrO3JldHVybiB0fWNvbnN0IGNoPWU9Pntjb25zdCB0PXR5cGVvZiBlO3N3aXRjaCh0KXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuInVuZGVmaW5lZCI7Y2FzZSJzdHJpbmciOnJldHVybiJzdHJpbmciO2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UiZnVuY3Rpb24iOnJldHVybiJmdW5jdGlvbiI7Y2FzZSJiaWdpbnQiOnJldHVybiJiaWdpbnQiO2Nhc2Uic3ltYm9sIjpyZXR1cm4ic3ltYm9sIjtjYXNlIm9iamVjdCI6cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5IjplPT09bnVsbD8ibnVsbCI6ZS50aGVuJiZ0eXBlb2YgZS50aGVuPT0iZnVuY3Rpb24iJiZlLmNhdGNoJiZ0eXBlb2YgZS5jYXRjaD09ImZ1bmN0aW9uIj8icHJvbWlzZSI6dHlwZW9mIE1hcDwidSImJmUgaW5zdGFuY2VvZiBNYXA/Im1hcCI6dHlwZW9mIFNldDwidSImJmUgaW5zdGFuY2VvZiBTZXQ/InNldCI6dHlwZW9mIERhdGU8InUiJiZlIGluc3RhbmNlb2YgRGF0ZT8iZGF0ZSI6dHlwZW9mIEZpbGU8InUiJiZlIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6Im9iamVjdCI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YSB0eXBlOiAke3R9YCl9fSxXbj1uZXcgU2V0KFsic3RyaW5nIiwibnVtYmVyIiwic3ltYm9sIl0pLGx1PW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJiaWdpbnQiLCJib29sZWFuIiwic3ltYm9sIiwidW5kZWZpbmVkIl0pO2Z1bmN0aW9uICRlKGUpe3JldHVybiBlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9ZnVuY3Rpb24gSChlLHQsbil7Y29uc3Qgbz1uZXcgZS5fem9kLmNvbnN0cih0Pz9lLl96b2QuZGVmKTtyZXR1cm4oIXR8fG4/LnBhcmVudCkmJihvLl96b2QucGFyZW50PWUpLG99ZnVuY3Rpb24gXyhlKXtjb25zdCB0PWU7aWYoIXQpcmV0dXJue307aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybntlcnJvcjooKT0+dH07aWYodD8ubWVzc2FnZSE9PXZvaWQgMCl7aWYodD8uZXJyb3IhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGBtZXNzYWdlYCBhbmQgYGVycm9yYCBwYXJhbXMiKTt0LmVycm9yPXQubWVzc2FnZX1yZXR1cm4gZGVsZXRlIHQubWVzc2FnZSx0eXBlb2YgdC5lcnJvcj09InN0cmluZyI/ey4uLnQsZXJyb3I6KCk9PnQuZXJyb3J9OnR9ZnVuY3Rpb24gdWgoZSl7bGV0IHQ7cmV0dXJuIG5ldyBQcm94eSh7fSx7Z2V0KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmdldCh0LG8scil9LHNldChuLG8scixzKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LnNldCh0LG8scixzKX0saGFzKG4sbyl7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5oYXModCxvKX0sZGVsZXRlUHJvcGVydHkobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHQsbyl9LG93bktleXMobil7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5vd25LZXlzKHQpfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG8pfSxkZWZpbmVQcm9wZXJ0eShuLG8scil7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8scil9fSl9ZnVuY3Rpb24gWHIoZSl7cmV0dXJuIHR5cGVvZiBlPT0iYmlnaW50Ij9lLnRvU3RyaW5nKCkrIm4iOnR5cGVvZiBlPT0ic3RyaW5nIj9gIiR7ZX0iYDpgJHtlfWB9ZnVuY3Rpb24gZHUoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZpbHRlcih0PT5lW3RdLl96b2Qub3B0aW4hPT12b2lkIDAmJmVbdF0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKX1jb25zdCBwdT17c2FmZWludDpbTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJdLGludDMyOlstMjE0NzQ4MzY0OCwyMTQ3NDgzNjQ3XSx1aW50MzI6WzAsNDI5NDk2NzI5NV0sZmxvYXQzMjpbLTM0MDI4MjM0NjYzODUyODg2ZTIyLDM0MDI4MjM0NjYzODUyODg2ZTIyXSxmbG9hdDY0OlstTnVtYmVyLk1BWF9WQUxVRSxOdW1iZXIuTUFYX1ZBTFVFXX0sZnU9e2ludDY0OltCaWdJbnQoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IiksQmlnSW50KCI5MjIzMzcyMDM2ODU0Nzc1ODA3IildLHVpbnQ2NDpbQmlnSW50KDApLEJpZ0ludCgiMTg0NDY3NDQwNzM3MDk1NTE2MTUiKV19O2Z1bmN0aW9uIGh1KGUsdCl7Y29uc3Qgbj1lLl96b2QuZGVmLG89bi5jaGVja3M7aWYobyYmby5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoIi5waWNrKCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cyIpO2NvbnN0IHM9e307cmV0dXJuIE1lKHMsZSxpbyhlLHQpKSxIKGUsWChuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBpbyhlLHQpe2NvbnN0IG49U2UoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBtdShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoaW8oZSx0KSksaT17fTtyZXR1cm4gTWUoaSxlLFJlZmxlY3Qub3duS2V5cyhTZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLEgoZSxYKG4se3NoYXBlOmksY2hlY2tzOltdfSkpfWZ1bmN0aW9uIGd1KGUsdCl7aWYoIUNlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBleHRlbmQ6IGV4cGVjdGVkIGEgcGxhaW4gb2JqZWN0Iik7Y29uc3Qgbj1lLl96b2QuZGVmLmNoZWNrcztpZihuJiZuLmxlbmd0aD4wKXtjb25zdCByPVNlKGUpO2Zvcihjb25zdCBzIG9mIFJlZmxlY3Qub3duS2V5cyh0KSlpZihPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIscykhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgb3ZlcndyaXRlIGtleXMgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cy4gVXNlIGAuc2FmZUV4dGVuZCgpYCBpbnN0ZWFkLiIpfXJldHVybiBIKGUsWChlLl96b2QuZGVmLHtzaGFwZTp2dShlLHQpfSkpfWZ1bmN0aW9uIHZ1KGUsdCl7Y29uc3Qgbj17fTtyZXR1cm4gTWUobixlLFJlZmxlY3Qub3duS2V5cyhTZShlKSkpLG5oKG4sdCksbn1mdW5jdGlvbiBidShlLHQpe2lmKCFDZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gc2FmZUV4dGVuZDogZXhwZWN0ZWQgYSBwbGFpbiBvYmplY3QiKTtyZXR1cm4gSChlLFgoZS5fem9kLmRlZix7c2hhcGU6dnUoZSx0KX0pKX1mdW5jdGlvbiBfdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtNZShuLGUsUmVmbGVjdC5vd25LZXlzKFNlKGUpKSksTWUobix0LFJlZmxlY3Qub3duS2V5cyhTZSh0KSkpO2NvbnN0IG89WChlLl96b2QuZGVmLHtzaGFwZTpuLGdldCBjYXRjaGFsbCgpe3JldHVybiB0Ll96b2QuZGVmLmNhdGNoYWxsfSxjaGVja3M6dC5fem9kLmRlZi5jaGVja3M/P1tdfSk7cmV0dXJuIEgoZSxvKX1mdW5jdGlvbiBOcihlLHQsbixvPSJwYXJ0aWFsIil7Y29uc3Qgcz10Ll96b2QuZGVmLmNoZWNrcztpZihzJiZzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihgLiR7b30oKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzYCk7Y29uc3QgYT1uP25ldyBTZXQoaW8odCxuKSk6dm9pZCAwLGM9e307cmV0dXJuIE1lKGMsdCxSZWZsZWN0Lm93bktleXMoU2UodCkpLGUmJigodSxsKT0+YSYmIWEuaGFzKGwpP3U6bmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dX0pKSksSCh0LFgodC5fem9kLmRlZix7c2hhcGU6YyxjaGVja3M6W119KSl9ZnVuY3Rpb24geXUoZSx0LG4pe2NvbnN0IG89bj9uZXcgU2V0KGlvKHQsbikpOnZvaWQgMCxyPXt9O3JldHVybiBNZShyLHQsUmVmbGVjdC5vd25LZXlzKFNlKHQpKSwocyxpKT0+byYmIW8uaGFzKGkpP3M6bmV3IGUoe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6c30pKSxIKHQsWCh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIHJlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gd3UoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBkZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIEtlKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIGpyKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBoZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOktlKGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9LZShzPy4oZSkpPz9LZSh0Py5lcnJvcj8uKGUpKT8/S2Uobi5jdXN0b21FcnJvcj8uKGUpKT8/S2Uobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoZSkpYz09PSJpbnN0Inx8Yz09PSJzY2hlbWEifHxjPT09ImNvbnRpbnVlInx8Yz09PSJpbnB1dCJ8fGM9PT0iX19wcm90b19fInx8KGFbY109ZVtjXSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gYW8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IGxoPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIGNvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIWxoLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gdW8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIGt1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gUWUoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBkaChlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gU3UoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uICR1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gcGgoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gU3UodCtuKX1mdW5jdGlvbiBmaChlKXtyZXR1cm4gJHUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIGhoKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBtaChlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBnaHtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIHp1KGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6dmgoZSxuLG8udmFsdWUpfX1mdW5jdGlvbiB6ZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBsbyhlLHQsbil7cmV0dXJuIHplKGUsdCxuLCExKX1mdW5jdGlvbiBBdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gemUodGhpcyxuLG8odGhpcykpfSxzZXQocil7emUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIHZoKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjp6ZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe3plKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBiaChlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IElyLHhlPSExO2NvbnN0IF9oPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7eGU9ITB9fTtmdW5jdGlvbiB4KGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmSXIhPT1lLl96b2Qpe0lyPXZvaWQgMDtyZXR1cm59SXI9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LF9oKTtjb25zdCByPXhlO3hlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIHhlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSkseGU9eGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSx4ZT14ZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gVHUoZSx0LG4sbyl7Y29uc3Qgcj1iaChlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IFB1PSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gZXMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtQdV09ITAsdH1jb25zdCB0cz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6ZnUsQ09OU1RBTlRfQ0FUQ0g6UHUsQ2xhc3M6Z2gsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6cHUsYWJvcnRlZDpyZSxhbGxvd3NFdmFsOnV1LGFzc2VydDpYZixhc3NlcnRFcXVhbDpXZixhc3NlcnRJczpZZixhc3NlcnROZXZlcjpRZixhc3NlcnROb3RFcXVhbDpHZixhc3NpZ25Qcm9wOkZlLGF0dGFjaFNjaGVtYTpqcixiYXNlNjRUb1VpbnQ4QXJyYXk6U3UsYmFzZTY0dXJsVG9VaW50OEFycmF5OnBoLGNhY2hlZDpPdCxjYXB0dXJlU3RhY2tUcmFjZTpRcixjbGVhbkVudW06ZGgsY2xlYW5SZWdleDpFZSxjbG9uZTpILGNsb25lRGVmOm9oLGNvZGVQb2ludExlbmd0aDpjbyxjb25zdGFudENhdGNoOmVzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6dWgsZGVmaW5lTGF6eTpydSxkZWZpbmVMYXp5SW50ZXJuYWw6eCxkZXJpdmVkOkF0LGVzYzphdSxlc2NhcGVSZWdleDokZSxleHBsaWNpdGx5QWJvcnRlZDp3dSxleHRlbmQ6Z3UsZmluYWxpemVJc3N1ZTpoZSxmbG9hdFNhZmVSZW1haW5kZXI6b3UsZ2V0RWxlbWVudEF0UGF0aDpyaCxnZXRFbnVtVmFsdWVzOk9yLGdldExlbmd0aGFibGVPcmlnaW46dW8sZ2V0UGFyc2VkVHlwZTpjaCxnZXRTaXphYmxlT3JpZ2luOmFvLGhleFRvVWludDhBcnJheTpoaCxoaWRlOmxvLGluc3RhbGxMYXp5UHJvcDpUdSxpc09iamVjdDpZZSxpc1BsYWluT2JqZWN0OkNlLGlzc3VlOlFlLGpvaW5WYWx1ZXM6QXIsanNvblN0cmluZ2lmeVJlcGxhY2VyOktuLG1lbWJlcnM6enUsbWVyZ2U6X3UsbWVyZ2VEZWZzOlgsbm9ybWFsaXplUGFyYW1zOl8sbnVsbGlzaDpZcixudW1LZXlzOmFoLG9iamVjdENsb25lOnRoLG9taXQ6bXUsb3B0aW9uYWxLZXlzOmR1LG93bjp6ZSxwYXJzZWRUeXBlOmt1LHBhcnRpYWw6TnIscGljazpodSxwcmVmaXhJc3N1ZXM6ZGUscHJpbWl0aXZlVHlwZXM6bHUscHJvbWlzZUFsbE9iamVjdDpzaCxwcm9wZXJ0eUtleVR5cGVzOlduLHJhbmRvbVN0cmluZzppaCxyYXdTaGFwZTpybyxyZXF1aXJlZDp5dSxzYWZlRXh0ZW5kOmJ1LHNoYWxsb3dDbG9uZTpzbyxzbHVnaWZ5OmN1LHN0cmluZ2lmeVByaW1pdGl2ZTpYcix0b1pvZDpvbyx1aW50OEFycmF5VG9CYXNlNjQ6JHUsdWludDhBcnJheVRvQmFzZTY0dXJsOmZoLHVpbnQ4QXJyYXlUb0hleDptaCx1bndyYXBNZXNzYWdlOktlfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBiYztjb25zdCBucz1PYmplY3QuZnJlZXplKHtzdGF0dXM6ImFib3J0ZWQifSkseHI9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfTtsZXQgX2M9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yOm51bGw7ZnVuY3Rpb24geWgoZSl7Y29uc3QgdD1fYztpZih0KXtjb25zdCBuPXQuc3RhY2tUcmFjZUxpbWl0O2lmKHR5cGVvZiBuPT0ibnVtYmVyIil7dHJ5e3Quc3RhY2tUcmFjZUxpbWl0PTB9Y2F0Y2h7cmV0dXJuIF9jPW51bGwsbmV3IGV9dHJ5e3JldHVybiBuZXcgZX1maW5hbGx5e3Quc3RhY2tUcmFjZUxpbWl0PW59fX1yZXR1cm4gbmV3IGV9ZnVuY3Rpb24gZChlLHQsbixvKXtjb25zdCByPXt9O2Z1bmN0aW9uIHMobSl7dGhpcy5kZWY9bSx0aGlzLmNvbnN0cj1wLHRoaXMudHJhaXRzPW5ldyBTZXR9cy5wcm90b3R5cGU9cjtjb25zdCBpPW4sYT1pJiZuZXcgV2Vha1NldDtmdW5jdGlvbiBjKG0sYil7aWYobS5fem9kKXtpZihtLl96b2QudHJhaXRzLmhhcyhlKSlyZXR1cm59ZWxzZXt4ci52YWx1ZT1uZXcgcyhiKTt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIl96b2QiLHhyKX1maW5hbGx5e3hyLnZhbHVlPXZvaWQgMH19aWYobS5fem9kLnRyYWl0cy5hZGQoZSksdChtLGIpLGEpe2NvbnN0IGs9T2JqZWN0LmdldFByb3RvdHlwZU9mKG0pLCQ9bS5fem9kLmNvbnN0ci5wcm90b3R5cGU7bGV0IE49aztmb3IoO04mJk4hPT0kOylOPU9iamVjdC5nZXRQcm90b3R5cGVPZihOKTtjb25zdCBSPU4/P2s7YS5oYXMoUil8fChhLmFkZChSKSx6dShSLGkpKX1jb25zdCB5PXAucHJvdG90eXBlO2Zvcihjb25zdCBrIGluIHkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHksaykmJihrIGluIG18fChtW2tdPXlba10uYmluZChtKSkpfWNvbnN0IHU9bz8uUGFyZW50Pz9PYmplY3Q7Y2xhc3MgbCBleHRlbmRzIHV7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJuYW1lIix7dmFsdWU6ZX0pO2Z1bmN0aW9uIHAobSl7Y29uc3QgYj1vPy5QYXJlbnQ/eWgobCk6dGhpcztjKGIsbSk7Y29uc3QgeT1iLl96b2QuZGVmZXJyZWQ7aWYoeSl7Zm9yKGNvbnN0ICQgb2YgeSkkKCk7Yi5fem9kLmRlZmVycmVkPXZvaWQgMH1jb25zdCBrPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnPy5wb3N0UHJvY2Vzc29yO3JldHVybiBrJiZrKGIpLGJ9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJpbml0Iix7dmFsdWU6Y30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6bT0+bz8uUGFyZW50JiZtIGluc3RhbmNlb2Ygby5QYXJlbnQ/ITA6bT8uX3pvZD8udHJhaXRzPy5oYXMoZSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCwibmFtZSIse3ZhbHVlOmV9KSxwfWNvbnN0IG9zPVN5bWJvbCgiem9kX2JyYW5kIik7Y2xhc3MgUmUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJFbmNvdW50ZXJlZCBQcm9taXNlIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZS4gVXNlIC5wYXJzZUFzeW5jKCkgaW5zdGVhZC4iKX19Y2xhc3MgcG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcihgRW5jb3VudGVyZWQgdW5pZGlyZWN0aW9uYWwgdHJhbnNmb3JtIGR1cmluZyBlbmNvZGU6ICR7dH1gKSx0aGlzLm5hbWU9IlpvZEVuY29kZUVycm9yIn19KGJjPWdsb2JhbFRoaXMpLl9fem9kX2dsb2JhbENvbmZpZz8/KGJjLl9fem9kX2dsb2JhbENvbmZpZz17fSk7Y29uc3QgbmU9Z2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxDb25maWc7ZnVuY3Rpb24gSihlKXtyZXR1cm4gZSYmT2JqZWN0LmFzc2lnbihuZSxlKSxuZX1mdW5jdGlvbiB3aCgpe2NvbnN0IGU9dGhpcy5fem9kO3JldHVybiBlLm1lc3NhZ2U/PyhlLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoZS5kZWYsS24sMikpLGUubWVzc2FnZX1mdW5jdGlvbiBraChlKXt0aGlzLl96b2QubWVzc2FnZT1lfWNvbnN0IFNoPXtnZXQ6d2gsc2V0OmtoLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxFcj17dmFsdWU6dm9pZCAwLGVudW1lcmFibGU6ITF9LHljPW5ldyBXZWFrU2V0KFtPYmplY3QucHJvdG90eXBlLEVycm9yLnByb3RvdHlwZV0pLEl1PShlLHQpPT57ZS5uYW1lPSIkWm9kRXJyb3IiLEVyLnZhbHVlPXQsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlzc3VlcyIsRXIpLEVyLnZhbHVlPXZvaWQgMCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibWVzc2FnZSIsU2gpO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3ljLmhhcyhuKXx8KHljLmFkZChuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtjb25zdCBvPSgpPT50aGlzLm1lc3NhZ2U7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ0b1N0cmluZyIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksb30sc2V0KG8pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ0b1N0cmluZyIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9fSkpfSx4dT1kKCIkWm9kRXJyb3IiLEl1KSxjZT1kKCIkWm9kRXJyb3IiLEl1LHZvaWQgMCx7UGFyZW50OkVycm9yfSk7ZnVuY3Rpb24gJGgoZSx0LG4pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KXx8KHQ9PT0iX19wcm90b19fIj9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuKCksd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTplW3RdPW4oKSksZVt0XX1mdW5jdGlvbiBmbyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXt9LG89W107Zm9yKGNvbnN0IHIgb2YgZS5pc3N1ZXMpci5wYXRoLmxlbmd0aD4wPyRoKG4sci5wYXRoWzBdLCgpPT5bXSkucHVzaCh0KHIpKTpvLnB1c2godChyKSk7cmV0dXJue2Zvcm1FcnJvcnM6byxmaWVsZEVycm9yczpufX1mdW5jdGlvbiBobyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtfZXJyb3JzOltdfSxvPShyLHM9W10pPT57Zm9yKGNvbnN0IGkgb2Ygci5pc3N1ZXMpaWYoaS5jb2RlPT09ImludmFsaWRfdW5pb24iJiZpLmVycm9ycy5sZW5ndGgpaS5lcnJvcnMubWFwKGE9Pm8oe2lzc3VlczphfSxbLi4ucywuLi5pLnBhdGhdKSk7ZWxzZSBpZihpLmNvZGU9PT0iaW52YWxpZF9rZXkiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZSBpZihpLmNvZGU9PT0iaW52YWxpZF9lbGVtZW50IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2V7Y29uc3QgYT1bLi4ucywuLi5pLnBhdGhdO2lmKGEubGVuZ3RoPT09MCluLl9lcnJvcnMucHVzaCh0KGkpKTtlbHNle2xldCBjPW4sdT0wO2Zvcig7dTxhLmxlbmd0aDspe2NvbnN0IGw9YVt1XSxwPXU9PT1hLmxlbmd0aC0xO2lmKGw9PT0iX2Vycm9ycyIpe3AmJmMuX2Vycm9ycy5wdXNoKHQoaSkpLHUrKztjb250aW51ZX1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxsKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6e19lcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7Y29uc3QgbT1jW2xdO3AmJm0uX2Vycm9ycy5wdXNoKHQoaSkpLGM9bSx1Kyt9fX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gcnMoZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17ZXJyb3JzOltdfSxvPShyLHM9W10pPT57dmFyIGk7Zm9yKGNvbnN0IGEgb2Ygci5pc3N1ZXMpaWYoYS5jb2RlPT09ImludmFsaWRfdW5pb24iJiZhLmVycm9ycy5sZW5ndGgpYS5lcnJvcnMubWFwKGM9Pm8oe2lzc3VlczpjfSxbLi4ucywuLi5hLnBhdGhdKSk7ZWxzZSBpZihhLmNvZGU9PT0iaW52YWxpZF9rZXkiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZSBpZihhLmNvZGU9PT0iaW52YWxpZF9lbGVtZW50IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2V7Y29uc3QgYz1bLi4ucywuLi5hLnBhdGhdO2lmKGMubGVuZ3RoPT09MCl7bi5lcnJvcnMucHVzaCh0KGEpKTtjb250aW51ZX1sZXQgdT1uLGw9MDtmb3IoO2w8Yy5sZW5ndGg7KXtjb25zdCBwPWNbbF0sbT1sPT09Yy5sZW5ndGgtMTt0eXBlb2YgcD09InN0cmluZyI/KHUucHJvcGVydGllcz8/KHUucHJvcGVydGllcz17fSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUucHJvcGVydGllcyxwKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHUucHJvcGVydGllcyxwLHt2YWx1ZTp7ZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHU9dS5wcm9wZXJ0aWVzW3BdKToodS5pdGVtcz8/KHUuaXRlbXM9W10pLChpPXUuaXRlbXMpW3BdPz8oaVtwXT17ZXJyb3JzOltdfSksdT11Lml0ZW1zW3BdKSxtJiZ1LmVycm9ycy5wdXNoKHQoYSkpLGwrK319fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIEV1KGUpe2NvbnN0IHQ9W10sbj1lLm1hcChvPT50eXBlb2Ygbz09Im9iamVjdCI/by5rZXk6byk7Zm9yKGNvbnN0IG8gb2Ygbil0eXBlb2Ygbz09Im51bWJlciI/dC5wdXNoKGBbJHtvfV1gKTp0eXBlb2Ygbz09InN5bWJvbCI/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShTdHJpbmcobykpfV1gKTovW15cdyRdLy50ZXN0KG8pP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkobyl9XWApOih0Lmxlbmd0aCYmdC5wdXNoKCIuIiksdC5wdXNoKG8pKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5jdGlvbiBzcyhlKXtjb25zdCB0PVtdLG49Wy4uLmUuaXNzdWVzXS5zb3J0KChvLHIpPT4oby5wYXRoPz9bXSkubGVuZ3RoLShyLnBhdGg/P1tdKS5sZW5ndGgpO2Zvcihjb25zdCBvIG9mIG4pdC5wdXNoKGDinJYgJHtvLm1lc3NhZ2V9YCksby5wYXRoPy5sZW5ndGgmJnQucHVzaChgICDihpIgYXQgJHtFdShvLnBhdGgpfWApO3JldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiBtbyhlLHQpe3JldHVybntjYWxsZWU6dD8uY2FsbGVlPz9lLEVycjp0Py5FcnJ9fWNvbnN0IE50PWU9Pntjb25zdCB0PShuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMX06e2FzeW5jOiExfSxhPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxpKTtpZihhIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgUmU7aWYoYS5pc3N1ZXMubGVuZ3RoKXtjb25zdCBjPW5ldyhzPy5FcnI/P2UpKGEuaXNzdWVzLm1hcCh1PT5oZSh1LGksSigpKSkpO3Rocm93IFFyKGMscz8uY2FsbGVlPz90KSxjfXJldHVybiBhLnZhbHVlfTtyZXR1cm4gdH0sTXI9TnQoY2UpLGp0PWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgaT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBhPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxpKTtpZihhIGluc3RhbmNlb2YgUHJvbWlzZSYmKGE9YXdhaXQgYSksYS5pc3N1ZXMubGVuZ3RoKXtjb25zdCBjPW5ldyhzPy5FcnI/P2UpKGEuaXNzdWVzLm1hcCh1PT5oZSh1LGksSigpKSkpO3Rocm93IFFyKGMscz8uY2FsbGVlPz90KSxjfXJldHVybiBhLnZhbHVlfTtyZXR1cm4gdH0sRHI9anQoY2UpLE10PWU9Pih0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITF9Onthc3luYzohMX0scz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7aWYocyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFJlO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg/Q3UoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxSdT1NdChjZSk7ZnVuY3Rpb24gQ3UoZSx0LG4pe2xldCBvO3JldHVybntzdWNjZXNzOiExLGdldCBlcnJvcigpe3JldHVybiBvfHwobz1uZXcgZSh0Lm1hcChyPT5oZShyLG4sSigpKSkpLHQ9dm9pZCAwLG49dm9pZCAwKSxvfSxzZXQgZXJyb3Iocil7bz1yLHQ9dm9pZCAwLG49dm9pZCAwfX19Y29uc3QgRHQ9ZT0+YXN5bmModCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBzPXQuX3pvZC5ydW4oe3ZhbHVlOm4saXNzdWVzOltdfSxyKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2UmJihzPWF3YWl0IHMpLHMuaXNzdWVzLmxlbmd0aD9DdShlLHMuaXNzdWVzLHIpOntzdWNjZXNzOiEwLGRhdGE6cy52YWx1ZX19LHpoPUR0KGNlKSxUaD1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5pbnZhbGlkIiksUGg9U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuZmFsbGJhY2siKSxnbz0oKGUsdCxuKT0+e2NvbnN0IG89ZS5fem9kLmJhZy52YWxpZGF0b3I7aWYobyE9PXZvaWQgMCl7aWYobyh0KSE9PVRoKXJldHVybiEwO2lmKG8uZGVmaW5pdGU9PT0hMCYmbj09PXZvaWQgMClyZXR1cm4hMX1yZXR1cm4gSWgoZSx0LG4pfSk7ZnVuY3Rpb24gSWgoZSx0LG4pe2NvbnN0IG89bj97Li4ubixhc3luYzohMSxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITEsYWJvcnRFYXJseTohMH0scj1lLl96b2QuYmFnLmZhbGxiYWNrUnVuO2xldCBzO2lmKHI/KG9bUGhdPSEwLHM9cih7dmFsdWU6dCxpc3N1ZXM6W119LG8pKTpzPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSxzIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgUmU7cmV0dXJuIHMuaXNzdWVzLmxlbmd0aD09PTB9Y29uc3Qgdm89YXN5bmMoZSx0LG4pPT57Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiEwLGFib3J0RWFybHk6ITB9Onthc3luYzohMCxhYm9ydEVhcmx5OiEwfTtsZXQgcj1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlJiYocj1hd2FpdCByKSxyLmlzc3Vlcy5sZW5ndGg9PT0wfSxpcz1lPT57Y29uc3QgdD1OdChlKSxuPShvLHIscyxpKT0+e2NvbnN0IGE9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gdChvLHIsYSxtbyhuLGkpKX07cmV0dXJuIG59LHhoPWlzKGNlKSxhcz1lPT57Y29uc3QgdD1OdChlKSxuPShvLHIscyxpKT0+dChvLHIscyxtbyhuLGkpKTtyZXR1cm4gbn0sRWg9YXMoY2UpLGNzPWU9Pntjb25zdCB0PWp0KGUpLG49YXN5bmMobyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIGF3YWl0IHQobyxyLGEsbW8obixpKSl9O3JldHVybiBufSxSaD1jcyhjZSksdXM9ZT0+e2NvbnN0IHQ9anQoZSksbj1hc3luYyhvLHIscyxpKT0+YXdhaXQgdChvLHIscyxtbyhuLGkpKTtyZXR1cm4gbn0sQ2g9dXMoY2UpLGxzPWU9Pih0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIE10KGUpKHQsbixyKX0sWmg9bHMoY2UpLGRzPWU9Pih0LG4sbyk9Pk10KGUpKHQsbixvKSxPaD1kcyhjZSkscHM9ZT0+YXN5bmModCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBEdChlKSh0LG4scil9LEFoPXBzKGNlKSxmcz1lPT5hc3luYyh0LG4sbyk9PkR0KGUpKHQsbixvKSxOaD1mcyhjZSksWnU9L15bY0NdWzAtOWEtel17Nix9JC8sT3U9L15bMC05YS16XSskLyxBdT0vXlswLTddWzAtOUEtSEpLTU5QLVRWLVphLWhqa21ucC10di16XXsyNX0kLyxOdT0vXlswLTlhLXZBLVZdezIwfSQvLGp1PS9eW0EtWmEtejAtOV17Mjd9JC8sTXU9L15bYS16QS1aMC05Xy1dezIxfSQvO2Z1bmN0aW9uIER1KGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW2EtekEtWjAtOV8tXXske2V9fSRgKX1jb25zdCBxdT0vXlAoPzooXGQrVyl8KD8hLipXKSg/PVxkfFRcZCkoXGQrWSk/KFxkK00pPyhcZCtEKT8oVCg/PVxkKShcZCtIKT8oXGQrTSk/KFxkKyhbLixdXGQrKT9TKT8pPykkLyxqaD0vXlstK10/UCg/ISQpKD86KD86Wy0rXT9cZCtZKXwoPzpbLStdP1xkK1suLF1cZCtZJCkpPyg/Oig/OlstK10/XGQrTSl8KD86Wy0rXT9cZCtbLixdXGQrTSQpKT8oPzooPzpbLStdP1xkK1cpfCg/OlstK10/XGQrWy4sXVxkK1ckKSk/KD86KD86Wy0rXT9cZCtEKXwoPzpbLStdP1xkK1suLF1cZCtEJCkpPyg/OlQoPz1bXGQrLV0pKD86KD86Wy0rXT9cZCtIKXwoPzpbLStdP1xkK1suLF1cZCtIJCkpPyg/Oig/OlstK10/XGQrTSl8KD86Wy0rXT9cZCtbLixdXGQrTSQpKT8oPzpbLStdP1xkKyg/OlsuLF1cZCspP1MpPyk/PyQvLEx1PS9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSkkLyxYZT1lPT5lP25ldyBSZWdFeHAoYF4oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tJHtlfVswLTlhLWZBLUZdezN9LVs4OWFiQUJdWzAtOWEtZkEtRl17M30tWzAtOWEtZkEtRl17MTJ9KSRgKTovXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMS04XVswLTlhLWZBLUZdezN9LVs4OWFiQUJdWzAtOWEtZkEtRl17M30tWzAtOWEtZkEtRl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMHxmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYpJC8sTWg9WGUoNCksRGg9WGUoNikscWg9WGUoNyksVXU9L14oPzpbQS1aYS16MC05XycrXC1dK1wuKSpbQS1aYS16MC05XycrXC1dKltBLVphLXowLTlfKy1dQCg/OltBLVphLXowLTldW0EtWmEtejAtOVwtXSpcLikrW0EtWmEtel17Mix9JC8sTGg9L15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sVWg9L14oKFtePD4oKVxbXF1cXC4sOzpcc0AiXSsoXC5bXjw+KClcW1xdXFwuLDs6XHNAIl0rKSopfCgiLisiKSlAKChcW1swLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31dKXwoKFthLXpBLVpcLTAtOV0rXC4pK1thLXpBLVpdezIsfSkpJC8sSHU9L15bXlxzQCJdezEsNjR9QFteXHNAXXsxLDI1NX0kL3UsSGg9SHUsRmg9L15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sQmg9Il4oPz1bXFxzXFxTXSpbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7UmVnaW9uYWxfSW5kaWNhdG9yfVxcdTIwRTNdKVtcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtFbW9qaV9Db21wb25lbnR9XSskIjtmdW5jdGlvbiBGdSgpe3JldHVybiBuZXcgUmVnRXhwKEJoLCJ1Iil9Y29uc3QgQnU9L14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvLFZ1PS9eKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318OikpJC8sSnU9ZT0+e2NvbnN0IHQ9JGUoZT8/IjoiKTtyZXR1cm4gbmV3IFJlZ0V4cChgXig/OlswLTlBLUZdezJ9JHt0fSl7NX1bMC05QS1GXXsyfSR8Xig/OlswLTlhLWZdezJ9JHt0fSl7NX1bMC05YS1mXXsyfSRgKX0sS3U9L14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwvKFswLTldfFsxLTJdWzAtOV18M1swLTJdKSQvLFd1PS9eKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318OikpXC8oMTJbMC04XXwxWzAxXVswLTldfFsxLTldP1swLTldKSQvLFZoPS9eJHxeKD86WzAtOWEtekEtWisvXXs0fSkqKD86KD86WzAtOWEtekEtWisvXXsyfT09KXwoPzpbMC05YS16QS1aKy9dezN9PSkpPyQvLEpoPS9eKD86W0EtWmEtejAtOV8tXXs0fSkqKD86W0EtWmEtejAtOV8tXXsyLDN9KT8kLyxHdT0vXig/PS57MSwyNTN9XC4/JClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86Wy0wLTlhLXpBLVpdezAsNjF9WzAtOWEtekEtWl0pPykqXC4/JC8sWXU9L14oPz0uezEsMjUzfSQpKFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pP1wuKStbYS16QS1aXXsyLDYzfSQvLGhzPS9eaHR0cHM/JC8sUXU9L15cK1sxLTldXGR7NiwxNH0kLyxtcz0vXlxkKD86WyAtXT9cZCl7MTEsMTh9JC8sWHU9L14oPzpBRUR8QUZOfEFMTHxBTUR8QU9BfEFSU3xBVUR8QVdHfEFaTnxCQU18QkJEfEJEVHxCSER8QklGfEJNRHxCTkR8Qk9CfEJPVnxCUkx8QlNEfEJUTnxCV1B8QllOfEJaRHxDQUR8Q0RGfENIRXxDSEZ8Q0hXfENMRnxDTFB8Q05ZfENPUHxDT1V8Q1JDfENVUHxDVkV8Q1pLfERKRnxES0t8RE9QfERaRHxFR1B8RVJOfEVUQnxFVVJ8RkpEfEZLUHxHQlB8R0VMfEdIU3xHSVB8R01EfEdORnxHVFF8R1lEfEhLRHxITkx8SFRHfEhVRnxJRFJ8SUxTfElOUnxJUUR8SVJSfElTS3xKTUR8Sk9EfEpQWXxLRVN8S0dTfEtIUnxLTUZ8S1BXfEtSV3xLV0R8S1lEfEtaVHxMQUt8TEJQfExLUnxMUkR8TFNMfExZRHxNQUR8TURMfE1HQXxNS0R8TU1LfE1OVHxNT1B8TVJVfE1VUnxNVlJ8TVdLfE1YTnxNWFZ8TVlSfE1aTnxOQUR8TkdOfE5JT3xOT0t8TlBSfE5aRHxPTVJ8UEFCfFBFTnxQR0t8UEhQfFBLUnxQTE58UFlHfFFBUnxST058UlNEfFJVQnxSV0Z8U0FSfFNCRHxTQ1J8U0RHfFNFS3xTR0R8U0hQfFNMRXxTT1N8U1JEfFNTUHxTVE58U1ZDfFNZUHxTWkx8VEhCfFRKU3xUTVR8VE5EfFRPUHxUUll8VFREfFRXRHxUWlN8VUFIfFVHWHxVU0R8VVNOfFVZSXxVWVV8VVlXfFVaU3xWRUR8VkVTfFZORHxWVVZ8V1NUfFhBRHxYQUZ8WEFHfFhBVXxYQkF8WEJCfFhCQ3xYQkR8WENEfFhDR3xYRFJ8WE9GfFhQRHxYUEZ8WFBUfFhTVXxYVFN8WFVBfFhYWHxZRVJ8WkFSfFpNV3xaV0cpJC8sZ3M9L15bQS1aXXsyfSg/ITAwfDAxfDk5KVxkezJ9W0EtWjAtOV17MTEsMzB9JC8sZWw9Iig/Oig/OlxcZFxcZFsyNDY4XVswNDhdfFxcZFxcZFsxMzU3OV1bMjZdfFxcZFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcZHs0fS0oPzooPzowWzEzNTc4XXwxWzAyXSktKD86MFsxLTldfFsxMl1cXGR8M1swMV0pfCg/OjBbNDY5XXwxMSktKD86MFsxLTldfFsxMl1cXGR8MzApfCg/OjAyKS0oPzowWzEtOV18MVxcZHwyWzAtOF0pKSkiO2Z1bmN0aW9uIEtoKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtlfSRgKX1jb25zdCB0bD1LaChlbCk7ZnVuY3Rpb24gcXIoZSl7Y29uc3QgdD0iKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkIjtyZXR1cm4gdHlwZW9mIGUucHJlY2lzaW9uPT0ibnVtYmVyIj9lLnByZWNpc2lvbj09PS0xP2Ake3R9YDplLnByZWNpc2lvbj09PTA/YCR7dH06WzAtNV1cXGRgOmAke3R9OlswLTVdXFxkXFwuXFxkeyR7ZS5wcmVjaXNpb259fWA6ZS5zZWNvbmRzP2Ake3R9OlswLTVdXFxkKD86XFwuXFxkKyk/YDpgJHt0fSg/OjpbMC01XVxcZCg/OlxcLlxcZCspPyk/YH1mdW5jdGlvbiBubChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7cXIoZSl9JGApfWZ1bmN0aW9uIG9sKGUpe2NvbnN0IHQ9WyJaIl07ZS5vZmZzZXQmJnQucHVzaCgiKFsrLV0oPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQpIik7Y29uc3Qgbj1gJHtxcih7cHJlY2lzaW9uOmUucHJlY2lzaW9uLHNlY29uZHM6ITB9KX0oPzoke3Quam9pbigifCIpfSlgLG89ZS5sb2NhbD9gJHtufXwke3FyKHtwcmVjaXNpb246ZS5wcmVjaXNpb259KX1gOm47cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2VsfVQoPzoke299KSRgKX1jb25zdCBybD0vXltcc1xTXXswLH0kLyxzbD1lPT57Y29uc3QgdD1lP2BbXFxzXFxTXXske2U/Lm1pbmltdW0/PzB9LCR7ZT8ubWF4aW11bT8/IiJ9fWA6IltcXHNcXFNdKiI7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke3R9JGApfSxpbD0vXi0/XGQrbj8kLyxhbD0vXi0/XGQrJC8sYm89L14tP1xkKyg/OlwuXGQrKT8kLyxjbD0vXig/OnRydWV8ZmFsc2UpJC9pLHVsPS9ebnVsbCQvaSxsbD0vXnVuZGVmaW5lZCQvaSxkbD0vXlteQS1aXSokLyxwbD0vXlteYS16XSokLyxmbD0vXlswLTlhLWZBLUZdKiQvO2Z1bmN0aW9uIHF0KGUsdCl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Ky9deyR7ZX19JHt0fSRgKX1mdW5jdGlvbiBMdChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTlfLV17JHtlfX0kYCl9Y29uc3QgV2g9L15bMC05YS1mQS1GXXszMn0kLyxHaD1xdCgyMiwiPT0iKSxZaD1MdCgyMiksUWg9L15bMC05YS1mQS1GXXs0MH0kLyxYaD1xdCgyNywiPSIpLGVtPUx0KDI3KSx0bT0vXlswLTlhLWZBLUZdezY0fSQvLG5tPXF0KDQzLCI9Iiksb209THQoNDMpLHJtPS9eWzAtOWEtZkEtRl17OTZ9JC8sc209cXQoNjQsIiIpLGltPUx0KDY0KSxhbT0vXlswLTlhLWZBLUZdezEyOH0kLyxjbT1xdCg4NiwiPT0iKSx1bT1MdCg4NiksX289T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFueVN0cmluZzpybCxiYXNlNjQ6VmgsYmFzZTY0dXJsOkpoLGJpZ2ludDppbCxib29sZWFuOmNsLGJyb3dzZXJFbWFpbDpGaCxjaWRydjQ6S3UsY2lkcnY2Old1LGNyZWRpdENhcmQ6bXMsY3VpZDpadSxjdWlkMjpPdSxjdXJyZW5jeUNvZGU6WHUsZGF0ZTp0bCxkYXRldGltZTpvbCxkb21haW46WXUsZHVyYXRpb246cXUsZTE2NDpRdSxlbWFpbDpVdSxlbW9qaTpGdSxleHRlbmRlZER1cmF0aW9uOmpoLGd1aWQ6THUsaGV4OmZsLGhvc3RuYW1lOkd1LGh0bWw1RW1haWw6TGgsaHR0cFByb3RvY29sOmhzLGliYW46Z3MsaWRuRW1haWw6SGgsaW50ZWdlcjphbCxpcHY0OkJ1LGlwdjY6VnUsa3N1aWQ6anUsbG93ZXJjYXNlOmRsLG1hYzpKdSxtZDVfYmFzZTY0OkdoLG1kNV9iYXNlNjR1cmw6WWgsbWQ1X2hleDpXaCxuYW5vaWQ6TXUsbmFub2lkT2ZMZW5ndGg6RHUsbnVsbDp1bCxudW1iZXI6Ym8scmZjNTMyMkVtYWlsOlVoLHNoYTFfYmFzZTY0OlhoLHNoYTFfYmFzZTY0dXJsOmVtLHNoYTFfaGV4OlFoLHNoYTI1Nl9iYXNlNjQ6bm0sc2hhMjU2X2Jhc2U2NHVybDpvbSxzaGEyNTZfaGV4OnRtLHNoYTM4NF9iYXNlNjQ6c20sc2hhMzg0X2Jhc2U2NHVybDppbSxzaGEzODRfaGV4OnJtLHNoYTUxMl9iYXNlNjQ6Y20sc2hhNTEyX2Jhc2U2NHVybDp1bSxzaGE1MTJfaGV4OmFtLHN0cmluZzpzbCx0aW1lOm5sLHVsaWQ6QXUsdW5kZWZpbmVkOmxsLHVuaWNvZGVFbWFpbDpIdSx1cHBlcmNhc2U6cGwsdXVpZDpYZSx1dWlkNDpNaCx1dWlkNjpEaCx1dWlkNzpxaCx4aWQ6TnV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksVT1kKCIkWm9kQ2hlY2siLChlLHQpPT57dmFyIG47ZS5fem9kPz8oZS5fem9kPXt9KSxlLl96b2QuZGVmPXQsKG49ZS5fem9kKS5vbmF0dGFjaD8/KG4ub25hdHRhY2g9W10pfSksdnM9ZT0+e2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4hWXIodCkmJnQuc2l6ZSE9PXZvaWQgMH0sYnM9ZT0+e2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4hWXIodCkmJnQubGVuZ3RoIT09dm9pZCAwfSxHbj17bnVtYmVyOiJudW1iZXIiLGJpZ2ludDoiYmlnaW50IixvYmplY3Q6ImRhdGUifSxfcz1kKCIkWm9kQ2hlY2tMZXNzVGhhbiIsKGUsdCk9PntVLmluaXQoZSx0KTtjb25zdCBuPUduW3R5cGVvZiB0LnZhbHVlXTtlLl96b2QuY2hlY2s9bz0+eyh0LmluY2x1c2l2ZT9vLnZhbHVlPD10LnZhbHVlOm8udmFsdWU8dC52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjpHblt0eXBlb2Ygby52YWx1ZV0/P24sY29kZToidG9vX2JpZyIsbWF4aW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx5cz1kKCIkWm9kQ2hlY2tHcmVhdGVyVGhhbiIsKGUsdCk9PntVLmluaXQoZSx0KTtjb25zdCBuPUduW3R5cGVvZiB0LnZhbHVlXTtlLl96b2QuY2hlY2s9bz0+eyh0LmluY2x1c2l2ZT9vLnZhbHVlPj10LnZhbHVlOm8udmFsdWU+dC52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjpHblt0eXBlb2Ygby52YWx1ZV0/P24sY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGhsPWQoIiRab2RDaGVja011bHRpcGxlT2YiLChlLHQpPT57VS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntpZih0eXBlb2Ygbi52YWx1ZSE9dHlwZW9mIHQudmFsdWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbWl4IG51bWJlciBhbmQgYmlnaW50IGluIG11bHRpcGxlX29mIGNoZWNrLiIpOyh0eXBlb2Ygbi52YWx1ZT09ImJpZ2ludCI/dC52YWx1ZSE9PUJpZ0ludCgwKSYmbi52YWx1ZSV0LnZhbHVlPT09QmlnSW50KDApOm91KG4udmFsdWUsdC52YWx1ZSk9PT0wKXx8bi5pc3N1ZXMucHVzaCh7b3JpZ2luOnR5cGVvZiBuLnZhbHVlLGNvZGU6Im5vdF9tdWx0aXBsZV9vZiIsZGl2aXNvcjp0LnZhbHVlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksbWw9ZCgiJFpvZENoZWNrTnVtYmVyRm9ybWF0IiwoZSx0KT0+e1UuaW5pdChlLHQpLHQuZm9ybWF0PXQuZm9ybWF0fHwiZmxvYXQ2NCI7Y29uc3Qgbj10LmZvcm1hdD8uaW5jbHVkZXMoImludCIpLG89bj8iaW50IjoibnVtYmVyIixbcixzXT1wdVt0LmZvcm1hdF07ZS5fem9kLmNoZWNrPWk9Pntjb25zdCBhPWkudmFsdWU7aWYobil7aWYoIU51bWJlci5pc0ludGVnZXIoYSkpe2kuaXNzdWVzLnB1c2goe2V4cGVjdGVkOm8sZm9ybWF0OnQuZm9ybWF0LGNvZGU6ImludmFsaWRfdHlwZSIsY29udGludWU6ITEsaW5wdXQ6YSxpbnN0OmV9KTtyZXR1cm59aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGEpKXthPjA/aS5pc3N1ZXMucHVzaCh7aW5wdXQ6YSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk6aS5pc3N1ZXMucHVzaCh7aW5wdXQ6YSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59fWE8ciYmaS5pc3N1ZXMucHVzaCh7b3JpZ2luOiJudW1iZXIiLGlucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnIsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLGE+cyYmaS5pc3N1ZXMucHVzaCh7b3JpZ2luOiJudW1iZXIiLGlucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpzLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxnbD1kKCIkWm9kQ2hlY2tCaWdJbnRGb3JtYXQiLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3RbbixvXT1mdVt0LmZvcm1hdF07ZS5fem9kLmNoZWNrPXI9Pntjb25zdCBzPXIudmFsdWU7czxuJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46ImJpZ2ludCIsaW5wdXQ6cyxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06bixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSkscz5vJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46ImJpZ2ludCIsaW5wdXQ6cyxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOm8saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHZsPWQoIiRab2RDaGVja01heFNpemUiLChlLHQpPT57dmFyIG47VS5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj12cyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPD10Lm1heGltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjphbyhyKSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4aW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxibD1kKCIkWm9kQ2hlY2tNaW5TaXplIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49dnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZT49dC5taW5pbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YW8ociksY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxfbD1kKCIkWm9kQ2hlY2tTaXplRXF1YWxzIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49dnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5zaXplO2lmKHM9PT10LnNpemUpcmV0dXJuO2NvbnN0IGk9cz50LnNpemU7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmFvKHIpLC4uLmk/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5zaXplfTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQuc2l6ZX0saW5jbHVzaXZlOiEwLGV4YWN0OiEwLGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSkseWw9ZCgiJFpvZENoZWNrTWF4TGVuZ3RoIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49YnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz50Lm1heGltdW0/Y28ocik6cyk8PXQubWF4aW11bSlyZXR1cm47Y29uc3QgYT11byhyKTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4aW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx3bD1kKCIkWm9kQ2hlY2tNaW5MZW5ndGgiLChlLHQpPT57dmFyIG47VS5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1icyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPj10Lm1pbmltdW0mJnM8dC5taW5pbXVtKjI/Y28ocik6cyk+PXQubWluaW11bSlyZXR1cm47Y29uc3QgYT11byhyKTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGtsPWQoIiRab2RDaGVja0xlbmd0aEVxdWFscyIsKGUsdCk9Pnt2YXIgbjtVLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPWJzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoLGk9dHlwZW9mIHI9PSJzdHJpbmciJiZzPj10Lmxlbmd0aCYmczw9dC5sZW5ndGgqMj9jbyhyKTpzO2lmKGk9PT10Lmxlbmd0aClyZXR1cm47Y29uc3QgYT11byhyKSxjPWk+dC5sZW5ndGg7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsLi4uYz97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0Lmxlbmd0aH06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lmxlbmd0aH0saW5jbHVzaXZlOiEwLGV4YWN0OiEwLGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksVXQ9ZCgiJFpvZENoZWNrU3RyaW5nRm9ybWF0IiwoZSx0KT0+e3ZhciBuLG87VS5pbml0KGUsdCksdC5wYXR0ZXJuPyhuPWUuX3pvZCkuY2hlY2s/PyhuLmNoZWNrPXI9Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KHIudmFsdWUpJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpyLnZhbHVlLC4uLnQucGF0dGVybj97cGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKX06e30saW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9KToobz1lLl96b2QpLmNoZWNrPz8oby5jaGVjaz0oKT0+e30pfSksU2w9ZCgiJFpvZENoZWNrUmVnZXgiLChlLHQpPT57VXQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChuLnZhbHVlKSYmbi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InJlZ2V4IixpbnB1dDpuLnZhbHVlLHBhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCksaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksJGw9ZCgiJFpvZENoZWNrTG93ZXJDYXNlIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1kbCksVXQuaW5pdChlLHQpfSksemw9ZCgiJFpvZENoZWNrVXBwZXJDYXNlIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1wbCksVXQuaW5pdChlLHQpfSksVGw9ZCgiJFpvZENoZWNrSW5jbHVkZXMiLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj0kZSh0LmluY2x1ZGVzKSxvPW5ldyBSZWdFeHAodHlwZW9mIHQucG9zaXRpb249PSJudW1iZXIiP2BeLnske3QucG9zaXRpb259LH0ke259YDpuKTt0LnBhdHRlcm49byxlLl96b2QuY2hlY2s9cj0+e3IudmFsdWUuaW5jbHVkZXModC5pbmNsdWRlcyx0LnBvc2l0aW9uKXx8ci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIixpbmNsdWRlczp0LmluY2x1ZGVzLGlucHV0OnIudmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksUGw9ZCgiJFpvZENoZWNrU3RhcnRzV2l0aCIsKGUsdCk9PntVLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYF4keyRlKHQucHJlZml4KX0uKmApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuc3RhcnRzV2l0aCh0LnByZWZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJzdGFydHNfd2l0aCIscHJlZml4OnQucHJlZml4LGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksSWw9ZCgiJFpvZENoZWNrRW5kc1dpdGgiLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGAuKiR7JGUodC5zdWZmaXgpfSRgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLmVuZHNXaXRoKHQuc3VmZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImVuZHNfd2l0aCIsc3VmZml4OnQuc3VmZml4LGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gWW4oZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5kZShuLGUuaXNzdWVzKSl9Y29uc3QgeGw9ZCgiJFpvZENoZWNrUHJvcGVydHkiLChlLHQpPT57VS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pntjb25zdCBvPXQuc2NoZW1hLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlW3QucHJvcGVydHldLGlzc3VlczpbXX0se30pO2lmKG8gaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiBvLnRoZW4ocj0+WW4ocixuLHQucHJvcGVydHkpKTtZbihvLG4sdC5wcm9wZXJ0eSl9fSksRWw9ZCgiJFpvZENoZWNrUHJvcGVydGllcyIsKGUsdCk9PntVLmluaXQoZSx0KSxsbyhlLFN5bWJvbC5pdGVyYXRvcixmdW5jdGlvbiooKXt5aWVsZCBlfSk7bGV0IG47ZS5fem9kLmNoZWNrPW89PntpZihvLnZhbHVlPT1udWxsKXtvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om8udmFsdWUsaW5zdDplfSk7cmV0dXJufW4/PyhuPVJlZmxlY3Qub3duS2V5cyh0LnNoYXBlKS5tYXAoaT0+W2ksdC5zaGFwZVtpXV0pKTtjb25zdCByPW8udmFsdWU7bGV0IHM7Zm9yKGNvbnN0W2ksYV1vZiBuKXtjb25zdCBjPWEuX3pvZC5ydW4oe3ZhbHVlOnJbaV0saXNzdWVzOltdfSx7fSk7YyBpbnN0YW5jZW9mIFByb21pc2U/KHM/PyhzPVtdKSxzLnB1c2goYy50aGVuKHU9PlluKHUsbyxpKSkpKTpZbihjLG8saSl9aWYocylyZXR1cm4gUHJvbWlzZS5hbGwocykudGhlbigoKT0+e30pfX0pLFJsPWQoIiRab2RDaGVja01pbWVUeXBlIiwoZSx0KT0+e1UuaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0Lm1pbWUpO2UuX3pvZC5jaGVjaz1vPT57bi5oYXMoby52YWx1ZS50eXBlKXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOnQubWltZSxpbnB1dDpvLnZhbHVlLnR5cGUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksQ2w9ZCgiJFpvZENoZWNrT3ZlcndyaXRlIiwoZSx0KT0+e1UuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57bi52YWx1ZT10LnR4KG4udmFsdWUpfX0pO2NsYXNzIFpse2NvbnN0cnVjdG9yKHQ9W10sbj17fSl7dGhpcy5jb250ZW50PVtdLHRoaXMuaW5kZW50PTAsdGhpcy5hcmdzPXQsdGhpcy5jbG9zZWQ9bn1pbmRlbnRlZCh0KXt0aGlzLmluZGVudCs9MTt0cnl7dCh0aGlzKX1maW5hbGx5e3RoaXMuaW5kZW50LT0xfX13cml0ZSh0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil7dCh0aGlzLHtleGVjdXRpb246InN5bmMifSksdCh0aGlzLHtleGVjdXRpb246ImFzeW5jIn0pO3JldHVybn1jb25zdCBvPXQuc3BsaXQoYApgKS5maWx0ZXIoaT0+aSkscj1NYXRoLm1pbiguLi5vLm1hcChpPT5pLmxlbmd0aC1pLnRyaW1TdGFydCgpLmxlbmd0aCkpLHM9by5tYXAoaT0+aS5zbGljZShyKSkubWFwKGk9PiIgIi5yZXBlYXQodGhpcy5pbmRlbnQqMikraSk7Zm9yKGNvbnN0IGkgb2Ygcyl0aGlzLmNvbnRlbnQucHVzaChpKX1jb21waWxlKCl7Y29uc3QgdD1GdW5jdGlvbixuPXRoaXM/LmNvbnRlbnQ/P1siIl07cmV0dXJuIG5ldyB0KC4uLk9iamVjdC5rZXlzKHRoaXMuY2xvc2VkKSxgcmV0dXJuIGZ1bmN0aW9uICgke3RoaXMuYXJncy5qb2luKCIsICIpfSkgewoke24uam9pbihgCmApfQp9O2ApKC4uLk9iamVjdC52YWx1ZXModGhpcy5jbG9zZWQpKX19Y29uc3QgT2w9e21ham9yOjQsbWlub3I6NixwYXRjaDo1fSx6PWQoIiRab2RUeXBlIiwoZSx0KT0+e3ZhciBuO2U/PyhlPXt9KSxlLl96b2QuZGVmPXQsZS5fem9kLmJhZz1lLl96b2QuYmFnfHx7fSxlLl96b2QudmVyc2lvbj1PbDtjb25zdCBvPWUuX3pvZC5kZWYuY2hlY2tzLHI9ZS5fem9kLnRyYWl0cy5oYXMoIiRab2RDaGVjayIpP1tlLC4uLm8/P1tdXTpvPy5sZW5ndGg/Wy4uLm9dOltdO2Zvcihjb25zdCBzIG9mIHIpZm9yKGNvbnN0IGkgb2Ygcy5fem9kLm9uYXR0YWNoKWkoZSk7aWYoci5sZW5ndGg9PT0wKShuPWUuX3pvZCkuZGVmZXJyZWQ/PyhuLmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQ/LnB1c2goKCk9PntlLl96b2QucnVuPWUuX3pvZC5wYXJzZX0pO2Vsc2V7Y29uc3Qgcz0oYSxjLHUpPT57aWYoYS5tZW1vKXJldHVybiBhO2xldCBsPXJlKGEpLHA7Zm9yKGNvbnN0IG0gb2YgYyl7aWYobS5fem9kLmRlZi53aGVuKXtpZih3dShhKXx8IW0uX3pvZC5kZWYud2hlbihhKSljb250aW51ZX1lbHNlIGlmKGwpY29udGludWU7Y29uc3QgYj1hLmlzc3Vlcy5sZW5ndGgseT1tLl96b2QuY2hlY2soYSk7aWYoeSBpbnN0YW5jZW9mIFByb21pc2UmJnU/LmFzeW5jPT09ITEpdGhyb3cgbmV3IFJlO2lmKHB8fHkgaW5zdGFuY2VvZiBQcm9taXNlKXA9KHA/P1Byb21pc2UucmVzb2x2ZSgpKS50aGVuKGFzeW5jKCk9Pnthd2FpdCB5LGEuaXNzdWVzLmxlbmd0aCE9PWImJihqcihhLmlzc3VlcyxiLGUpLGx8fChsPXJlKGEsYikpKX0pO2Vsc2V7aWYoYS5pc3N1ZXMubGVuZ3RoPT09Yiljb250aW51ZTtqcihhLmlzc3VlcyxiLGUpLGx8fChsPXJlKGEsYikpfX1yZXR1cm4gcD9wLnRoZW4oKCk9PmEpOmF9LGk9KGEsYyx1KT0+e2lmKHJlKGEpKXJldHVybiBhLmFib3J0ZWQ9ITAsYTtjb25zdCBsPXMoYyxyLHUpO2lmKGwgaW5zdGFuY2VvZiBQcm9taXNlKXtpZih1LmFzeW5jPT09ITEpdGhyb3cgbmV3IFJlO3JldHVybiBsLnRoZW4ocD0+ZS5fem9kLnBhcnNlKHAsdSkpfXJldHVybiBlLl96b2QucGFyc2UobCx1KX07ZS5fem9kLnJ1bj0oYSxjKT0+e2lmKGMuc2tpcENoZWNrcylyZXR1cm4gZS5fem9kLnBhcnNlKGEsYyk7aWYoYy5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXtjb25zdCBsPWUuX3pvZC5wYXJzZSh7dmFsdWU6YS52YWx1ZSxpc3N1ZXM6W119LHsuLi5jLHNraXBDaGVja3M6ITB9KTtyZXR1cm4gbCBpbnN0YW5jZW9mIFByb21pc2U/bC50aGVuKHA9PmkocCxhLGMpKTppKGwsYSxjKX1jb25zdCB1PWUuX3pvZC5wYXJzZShhLGMpO2lmKHUgaW5zdGFuY2VvZiBQcm9taXNlKXtpZihjLmFzeW5jPT09ITEpdGhyb3cgbmV3IFJlO3JldHVybiB1LnRoZW4obD0+cyhsLHIsYykpfXJldHVybiBzKHUscixjKX19fSx7Z2V0In5zdGFuZGFyZCIoKXtyZXR1cm4gbG8odGhpcywifnN0YW5kYXJkIix3cyh0aGlzKSl9LHNldCJ+c3RhbmRhcmQiKGUpe3plKHRoaXMsIn5zdGFuZGFyZCIsZSl9fSksQWw9KGUsdCk9PmUuaXNzdWVzLmxlbmd0aD97aXNzdWVzOmUuaXNzdWVzLm1hcChuPT5oZShuLHQsSigpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBsbShlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gQWwoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIHdzKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gQWwobyxuKX1jYXRjaHt9cmV0dXJuIGxtKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IEh0PWQoIiRab2RTdHJpbmciLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9ybCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLEQ9ZCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntVdC5pbml0KGUsdCksSHQuaW5pdChlLHQpfSksTmw9ZCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUx1KSxELmluaXQoZSx0KX0pLGpsPWQoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49WGUobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVhlKCkpO0QuaW5pdChlLHQpfSksTWw9ZCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1VdSksRC5pbml0KGUsdCl9KSxrcz0xLHh0PTI7ZnVuY3Rpb24gU3MoZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBEbChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP1NzKGUpfHx4dDpxbChlLHQpfWZ1bmN0aW9uIHFsKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1ocy5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4ga3M7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/eHR9cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIHh0fX1jb25zdCBkbT0vW1x0XG5ccl0vZztmdW5jdGlvbiBMcihlKXtyZXR1cm4gZS5yZXBsYWNlKGRtLCIiKX1mdW5jdGlvbiBMbChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBVbChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBIbD1kKCIkWm9kVVJMIiwoZSx0KT0+e0QuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1EbChvLHQpO2lmKHI9PT1rcyl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT14dCl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9THIobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFMbChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhVWwocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6THIobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksRmw9ZCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1GdSgpKSxELmluaXQoZSx0KX0pLEJsPWQoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9NdTpEdSh0Lmxlbmd0aCkpLEQuaW5pdChlLHQpfSksVmw9ZCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVp1KSxELmluaXQoZSx0KX0pLEpsPWQoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49T3UpLEQuaW5pdChlLHQpfSksS2w9ZCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUF1KSxELmluaXQoZSx0KX0pLFdsPWQoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU51KSxELmluaXQoZSx0KX0pLEdsPWQoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49anUpLEQuaW5pdChlLHQpfSksWWw9ZCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1vbCh0KSksRC5pbml0KGUsdCl9KSxRbD1kKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dGwpLEQuaW5pdChlLHQpfSksWGw9ZCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW5sKHQpKSxELmluaXQoZSx0KX0pLGVkPWQoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49cXUpLEQuaW5pdChlLHQpfSksdGQ9ZCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUJ1KSxELmluaXQoZSx0KX0pLHBtPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiAkcyhlKXtyZXR1cm4gcG0udGVzdChlKT9TcyhgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IG5kPWQoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1WdSksRC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PnskcyhuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxvZD1kKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1KdSh0LmRlbGltaXRlcikpLEQuaW5pdChlLHQpfSkscmQ9ZCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49S3UpLEQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gc2QoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOiRzKG4pfWNvbnN0IGlkPWQoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVd1KSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3NkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24genMoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCBhZD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sY2Q9ZCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YWQpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57enMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxUcz0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gdWQoZSl7aWYoIVRzLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4genMobil9Y29uc3QgbGQ9ZCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VHMpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dWQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxkZD1kKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49UXUpLEQuaW5pdChlLHQpfSksZm09L1stIF0vZztmdW5jdGlvbiBobShlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBwZChlKXtyZXR1cm4gbXMudGVzdChlKT9obShlLnJlcGxhY2UoZm0sIiIpKTohMX1jb25zdCBmZD1kKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49bXMpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57cGQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIG1tKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIGhkKGUpe3JldHVybiBncy50ZXN0KGUpP21tKGUpOiExfWNvbnN0IG1kPWQoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1ncyksRC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntoZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBnZChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IHZkPWQoIiRab2RKV1QiLChlLHQpPT57RC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntnZChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGJkPWQoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57RC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksUHM9ZCgiJFpvZE51bWJlciIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1ibyxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSxfZD1kKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e21sLmluaXQoZSx0KSxQcy5pbml0KGUsdCl9KSxJcz1kKCIkWm9kQm9vbGVhbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1jbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHhzPWQoIiRab2RCaWdJbnQiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49aWwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSx5ZD1kKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e2dsLmluaXQoZSx0KSx4cy5pbml0KGUsdCl9KSx3ZD1kKCIkWm9kU3ltYm9sIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxrZD1kKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPWxsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLFNkPWQoIiRab2ROdWxsIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXVsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSwkZD1kKCIkWm9kQW55IiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksemQ9ZCgiJFpvZFVua25vd24iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSxUZD1kKCIkWm9kTmV2ZXIiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxQZD1kKCIkWm9kVm9pZCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLElkPWQoIiRab2REYXRlIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gd2MoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5kZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IHhkPWQoIiRab2RBcnJheSIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPW5lLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgaT1bXSxhPXI/LmFib3J0RWFybHk7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspe2NvbnN0IHU9c1tjXSxsPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6dSxpc3N1ZXM6W119LHIpO2lmKGwgaW5zdGFuY2VvZiBQcm9taXNlKWkucHVzaChsLnRoZW4ocD0+d2MocCxvLGMpKSk7ZWxzZSBpZih3YyhsLG8sYyksYSYmbC5pc3N1ZXMubGVuZ3RoIT09MCYmcmUobCkpYnJlYWt9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gUW4oZSx0LG4sbyxyLHMpe2NvbnN0IGk9biBpbiBvLGE9cz09PSJvcHRpb25hbCI7aWYoISghaSYmYSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmEmJiFpKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLmRlKG4sZS5pc3N1ZXMpKX1pZighaSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGl8fHI9PT0iZGVmYXVsdGVkIiYmIWEpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgZ209W107ZnVuY3Rpb24gRWQoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOmdtLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgaSBvZiByKWlmKCFlLnNoYXBlPy5baV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoaSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1kdShlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIFJkKGUsdCxuLG8scixzLGkpe2NvbnN0IGE9W10sYz1yLmtleVNldCx1PXIuY2F0Y2hhbGwuX3pvZCxsPXUuZGVmLnR5cGUscD11Lm9wdGluLG09dS5vcHRvdXQ7bGV0IGI9MDtmb3IoY29uc3QgeSBpbiB0KXtpZihpJiZuLmlzc3Vlcy5sZW5ndGghPT1iKXtpZihyZShuLGIpKWJyZWFrO2I9bi5pc3N1ZXMubGVuZ3RofWlmKGMuaGFzKHkpKWNvbnRpbnVlO2lmKHk9PT0iX19wcm90b19fIil7bD09PSJuZXZlciImJmEucHVzaCh5KTtjb250aW51ZX1pZihsPT09Im5ldmVyIil7YS5wdXNoKHkpO2NvbnRpbnVlfWNvbnN0IGs9dS5ydW4oe3ZhbHVlOnRbeV0saXNzdWVzOltdfSxvKTtrIGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2goay50aGVuKCQ9PlFuKCQsbix5LHQscCxtKSkpOlFuKGssbix5LHQscCxtKX1yZXR1cm4gYS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmEsaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IENkPWQoIiRab2RPYmplY3QiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IHU9KCk9Pntjb25zdCBsPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6bH0pLHUucmF3PWwsbH07dS5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6dX0pfWNvbnN0IHI9T3QoKCk9PkVkKHQpKTt4KGUsInByb3BWYWx1ZXMiLHU9Pntjb25zdCBsPXUuZGVmLnNoYXBlLHA9e307Zm9yKGNvbnN0IG0gaW4gbCl7Y29uc3QgYj1sW21dLl96b2Q7aWYoYi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLG0pfHxGZShwLG0sbmV3IFNldCk7Zm9yKGNvbnN0IHkgb2YgYi52YWx1ZXMpcFttXS5hZGQoeSk7Yi5vcHRpbiE9PXZvaWQgMCYmcFttXS5hZGQodm9pZCAwKX19cmV0dXJuIHB9KTtjb25zdCBzPVllLGk9dC5jYXRjaGFsbDtsZXQgYTtjb25zdCBjPW5lLm1lbW9pemVyO2M/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHUsbCk9PnthPz8oYT1yLnZhbHVlKTtjb25zdCBwPXUudmFsdWU7aWYoIXMocCkpcmV0dXJuIHUuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cCxpbnN0OmV9KSx1O3UudmFsdWU9Yz9jLmFsbG9jKGUsdSx7fSxsKTp7fTtjb25zdCBtPVtdLGI9YS5zaGFwZSx5PWw/LmFib3J0RWFybHk7bGV0IGs9dS5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGEuYWxsS2V5cyl7aWYoeSYmdS5pc3N1ZXMubGVuZ3RoIT09ayl7aWYocmUodSxrKSlicmVhaztrPXUuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgTj1iWyRdLFI9Ti5fem9kLm9wdGluLEY9Ti5fem9kLm9wdG91dCxvZT1OLl96b2QucnVuKHt2YWx1ZTpwWyRdLGlzc3VlczpbXX0sbCk7b2UgaW5zdGFuY2VvZiBQcm9taXNlP20ucHVzaChvZS50aGVuKEI9PlFuKEIsdSwkLHAsUixGKSkpOlFuKG9lLHUsJCxwLFIsRil9cmV0dXJuIGk/UmQobSxwLHUsbCxyLnZhbHVlLGUseT09PSEwKTptLmxlbmd0aD9Qcm9taXNlLmFsbChtKS50aGVuKCgpPT51KTp1fX0pLFpkPWQoIiRab2RPYmplY3RKSVQiLChlLHQpPT57Q2QuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89T3QoKCk9PkVkKHQpKSxyPW5lLm1lbW9pemVyLHM9Yj0+e2NvbnN0IHk9by52YWx1ZSxrPXkuc3ltYm9sS2V5cywkPW5ldyBabChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6YixpbnN0OmUsbWVtbzpyLHN5bXM6a30pLE49Qj0+YHNoYXBlWyR7Qn1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7Qn1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLFI9KEIsTCk9PmAKICAgICAgICAgIGxldCAke0J9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7Qn0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7Qn0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7TH0sIC4uLmlzcy5wYXRoXSA6IFske0x9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0J9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0J9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBGPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG9lPTA7Zm9yKGNvbnN0IEIgb2YgeS5hbGxLZXlzKUZbQl09YGtleV8ke29lKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IEIgb2YgeS5hbGxLZXlzKXtpZihCPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgTD1GW0JdLHllPXR5cGVvZiBCPT0ic3ltYm9sIj9gc3ltc1ske2suaW5kZXhPZihCKX1dYDphdShCKSxUcj1gJHt5ZX0gaW4gaW5wdXRgLGhjPWJbQl0sUHI9aGM/Ll96b2Q/Lm9wdGluLG1jPVByIT09dm9pZCAwLEZmPWhjPy5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7TH0gPSAke04oeWUpfTtgKSxtYyYmRmYpe2NvbnN0IEJmPVByPT09Im9wdGlvbmFsIj9gJHtMfV9wcmVzZW50YDpgJHtMfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7TH1fcHJlc2VudGA7JC53cml0ZShgCiAgICAgICAgY29uc3QgJHtMfV9wcmVzZW50ID0gJHtUcn07CiAgICAgICAgaWYgKCEke0x9Lmlzc3Vlcy5sZW5ndGggfHwgJHtMfV9wcmVzZW50KSB7CiAgICAgICAgICBpZiAoJHtMfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKEwseWUpfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICgke0JmfSkgewogICAgICAgICAgICBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBgKX1lbHNlIG1jPygkLndyaXRlKGAKICAgICAgICBpZiAoJHtMfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKEwseWUpfQogICAgICAgIH0KICAgICAgYCksUHI9PT0iZGVmYXVsdGVkIj8kLndyaXRlKGBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtMfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7VHJ9KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTsKICAgICAgICB9CiAgICAgIGApKTokLndyaXRlKGAKICAgICAgICBjb25zdCAke0x9X3ByZXNlbnQgPSAke1RyfTsKICAgICAgICBpZiAoJHtMfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKEwseWUpfQogICAgICAgIH0KICAgICAgICBpZiAoISR7TH1fcHJlc2VudCAmJiAhJHtMfS5pc3N1ZXMubGVuZ3RoKSB7CiAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHsKICAgICAgICAgICAgY29kZTogImludmFsaWRfdHlwZSIsCiAgICAgICAgICAgIGV4cGVjdGVkOiAibm9ub3B0aW9uYWwiLAogICAgICAgICAgICBpbnB1dDogdW5kZWZpbmVkLAogICAgICAgICAgICBwYXRoOiBbJHt5ZX1dCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChjdHggJiYgY3R4LmFib3J0RWFybHkpIHsKICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJHtMfV9wcmVzZW50KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTsKICAgICAgICB9CgogICAgICBgKX1yZXR1cm4gJC53cml0ZSgicGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsiKSwkLndyaXRlKCJyZXR1cm4gcGF5bG9hZDsiKSwkLmNvbXBpbGUoKX07bGV0IGk7Y29uc3QgYT1ZZSxjPSFuZS5qaXRsZXNzLGw9YyYmdXUudmFsdWUscD10LmNhdGNoYWxsO2xldCBtO2UuX3pvZC5wYXJzZT0oYix5KT0+e20/PyhtPW8udmFsdWUpO2NvbnN0IGs9Yi52YWx1ZTtyZXR1cm4gYShrKT9jJiZsJiZ5Py5hc3luYz09PSExJiZ5LmppdGxlc3MhPT0hMD8oaXx8KGk9cyh0LnNoYXBlKSksYj1pKGIseSkscD9SZChbXSxrLGIseSxtLGUseT8uYWJvcnRFYXJseT09PSEwKTpiKTpuKGIseSk6KGIuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6ayxpbnN0OmV9KSxiKX19KTtmdW5jdGlvbiBrYyhlLHQsbixvKXtmb3IoY29uc3QgcyBvZiBlKWlmKHMuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIHQudmFsdWU9cy52YWx1ZSx0O2NvbnN0IHI9ZS5maWx0ZXIocz0+IXJlKHMpKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPXJbMF0udmFsdWUsclswXSk6KHQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoaT0+aGUoaSxvLEooKSkpKX0pLHQpfWNvbnN0IHlvPWQoIiRab2RVbmlvbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsIm9wdGluIixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluPT09ImRlZmF1bHRlZCIpPyJkZWZhdWx0ZWQiOm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW4hPT12b2lkIDApPyJvcHRpb25hbCI6dm9pZCAwKSx4KGUsIm9wdG91dCIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKT8ib3B0aW9uYWwiOnZvaWQgMCkseChlLCJ2YWx1ZXMiLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC52YWx1ZXMpKXJldHVybiBuZXcgU2V0KG8uZGVmLm9wdGlvbnMuZmxhdE1hcChyPT5BcnJheS5mcm9tKHIuX3pvZC52YWx1ZXMpKSl9KSx4KGUsInBhdHRlcm4iLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC5wYXR0ZXJuKSl7Y29uc3Qgcj1vLmRlZi5vcHRpb25zLm1hcChzPT5zLl96b2QucGF0dGVybik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oJHtyLm1hcChzPT5FZShzLnNvdXJjZSkpLmpvaW4oInwiKX0pJGApfX0pO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGk9W107Zm9yKGNvbnN0IGEgb2YgdC5vcHRpb25zKXtjb25zdCBjPWEuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTtpZihjIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2goYykscz0hMDtlbHNle2lmKGMuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIGM7aS5wdXNoKGMpfX1yZXR1cm4gcz9Qcm9taXNlLmFsbChpKS50aGVuKGE9PmtjKGEsbyxlLHIpKTprYyhpLG8sZSxyKX19KTtmdW5jdGlvbiBTYyhlLHQsbixvKXtjb25zdCByPVtdO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKWVbc10uaXNzdWVzLmxlbmd0aD09PTAmJnIucHVzaChzKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPWVbclswXV0udmFsdWUsdCk6KHIubGVuZ3RoPT09MD90Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGk9PmhlKGksbyxKKCkpKSl9KTp0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6W10saW5jbHVzaXZlOiExLG1hdGNoZXM6cn0pLHQpfWNvbnN0IE9kPWQoIiRab2RYb3IiLChlLHQpPT57eW8uaW5pdChlLHQpLHQuaW5jbHVzaXZlPSExO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGk9W107Zm9yKGNvbnN0IGEgb2YgdC5vcHRpb25zKXtjb25zdCBjPWEuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTtjIGluc3RhbmNlb2YgUHJvbWlzZT8oaS5wdXNoKGMpLHM9ITApOmkucHVzaChjKX1yZXR1cm4gcz9Qcm9taXNlLmFsbChpKS50aGVuKGE9PlNjKGEsbyxlLHIpKTpTYyhpLG8sZSxyKX19KTtmdW5jdGlvbiBFcyhlLHQpe2NvbnN0IG49ZS5fem9kO2xldCBvPW4uYmFnLm9wdGlvbnNNYXA7b3x8KG89QWQobi5kZWYpLG4uYmFnLm9wdGlvbnNNYXA9byk7Y29uc3Qgcj1vLmdldCh0KTtpZihyPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoYEFtYmlndW91cyBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyh0KX0iYCk7cmV0dXJuIHJ9ZnVuY3Rpb24gQWQoZSl7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdCBuIG9mIGUub3B0aW9ucyl7Y29uc3Qgbz1uLl96b2QucHJvcFZhbHVlcz8uW2UuZGlzY3JpbWluYXRvcl07aWYoIW98fG8uc2l6ZT09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke2Uub3B0aW9ucy5pbmRleE9mKG4pfSJgKTtmb3IoY29uc3QgciBvZiBvKWlmKHQuaGFzKHIpKXtpZihyIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHIpfSJgKTt0LnNldChyLG51bGwpfWVsc2UgdC5zZXQocixuKX1yZXR1cm4gdH1jb25zdCBOZD1kKCIkWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e3QuaW5jbHVzaXZlPSExLHlvLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZTt4KGUsInByb3BWYWx1ZXMiLHI9Pntjb25zdCBzPXt9O2xldCBpPTA7Zm9yKGNvbnN0IGEgb2Ygci5kZWYub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucHJvcFZhbHVlcztpZighY3x8T2JqZWN0LmtleXMoYykubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ci5kZWYub3B0aW9ucy5pbmRleE9mKGEpfSJgKTtjW3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5oYXModm9pZCAwKSYmaSsrO2Zvcihjb25zdFt1LGxdb2YgT2JqZWN0LmVudHJpZXMoYykpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLHUpfHxGZShzLHUsbmV3IFNldCk7Zm9yKGNvbnN0IHAgb2YgbClzW3VdLmFkZChwKX19cmV0dXJuIXIuZGVmLnVuaW9uRmFsbGJhY2smJmk+MSYmc1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uZGVsZXRlKHZvaWQgMCksc30pLHQub3B0aW9ucy5mb3JFYWNoKChyLHMpPT57Y29uc3QgaT1ybyhyLl96b2QuZGVmKTtpZihpJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksdC5kaXNjcmltaW5hdG9yKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7c30iYCl9KTtjb25zdCBvPU90KCgpPT5BZCh0KSk7ZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO2lmKCFZZShpKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoib2JqZWN0IixpbnB1dDppLGluc3Q6ZX0pLHI7Y29uc3QgYT1pPy5bdC5kaXNjcmltaW5hdG9yXSxjPW8udmFsdWUuZ2V0KGEpO3JldHVybiBjJiYoYSE9PXZvaWQgMHx8cy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiKT9jLl96b2QucnVuKHIscyk6dC51bmlvbkZhbGxiYWNrfHxzLmRpcmVjdGlvbj09PSJiYWNrd2FyZCI/bihyLHMpOihyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixlcnJvcnM6W10sbm90ZToiTm8gbWF0Y2hpbmcgZGlzY3JpbWluYXRvciIsZGlzY3JpbWluYXRvcjp0LmRpc2NyaW1pbmF0b3Isb3B0aW9uczpBcnJheS5mcm9tKG8udmFsdWUua2V5cygpKS5maWx0ZXIodT0+by52YWx1ZS5nZXQodSkhPT1udWxsKSxpbnB1dDppLHBhdGg6W3QuZGlzY3JpbWluYXRvcl0saW5zdDplfSkscil9fSksamQ9ZCgiJFpvZEludGVyc2VjdGlvbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWUscz10LmxlZnQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSxpPXQucmlnaHQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2V8fGkgaW5zdGFuY2VvZiBQcm9taXNlP1Byb21pc2UuYWxsKFtzLGldKS50aGVuKChbYyx1XSk9PiRjKG4sYyx1KSk6JGMobixzLGkpfX0pO2Z1bmN0aW9uIFhuKGUsdCl7aWYoZT09PXQpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoZSBpbnN0YW5jZW9mIERhdGUmJnQgaW5zdGFuY2VvZiBEYXRlJiYrZT09K3QpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoQ2UoZSkmJkNlKHQpKXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89T2JqZWN0LmtleXMoZSkuZmlsdGVyKHM9Pm4uaW5kZXhPZihzKSE9PS0xKSxyPXsuLi5lLC4uLnR9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJfX3Byb3RvX18iKSYmZGVsZXRlIHIuX19wcm90b19fO2Zvcihjb25zdCBzIG9mIG8pe2lmKHM9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBpPVhuKGVbc10sdFtzXSk7aWYoIWkudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltzLC4uLmkubWVyZ2VFcnJvclBhdGhdfTtyW3NdPWkuZGF0YX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpyfX1pZihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX07Y29uc3Qgbj1bXTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3Qgcj1lW29dLHM9dFtvXSxpPVhuKHIscyk7aWYoIWkudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltvLC4uLmkubWVyZ2VFcnJvclBhdGhdfTtuLnB1c2goaS5kYXRhKX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpufX1yZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119fWZ1bmN0aW9uICRjKGUsdCxuKXtjb25zdCBvPW5ldyBNYXA7bGV0IHI7Y29uc3Qgcz1uZXcgTWFwLGk9KHUsbCk9PntsZXQgcDtpZih1LmNvZGU9PT0idW5yZWNvZ25pemVkX2tleXMiJiYhdS5wYXRoPy5sZW5ndGgpcj8/KHI9dSkscD11LmtleXM7ZWxzZSBpZih1LmNvZGU9PT0iaW52YWxpZF9rZXkiJiZ1Lm9yaWdpbj09PSJyZWNvcmQiJiZ1LnBhdGg/Lmxlbmd0aD09PTEpe2NvbnN0IG09U3RyaW5nKHUucGF0aFswXSk7cy5oYXMobSl8fHMuc2V0KG0sdSkscD1bbV19ZWxzZSByZXR1cm4hMTtmb3IoY29uc3QgbSBvZiBwKW8uaGFzKG0pfHxvLnNldChtLHt9KSxvLmdldChtKVtsXT0hMDtyZXR1cm4hMH07Zm9yKGNvbnN0IHUgb2YgdC5pc3N1ZXMpaSh1LCJsIil8fGUuaXNzdWVzLnB1c2godSk7Zm9yKGNvbnN0IHUgb2Ygbi5pc3N1ZXMpaSh1LCJyIil8fGUuaXNzdWVzLnB1c2godSk7Y29uc3QgYT1bLi4ub10uZmlsdGVyKChbLHVdKT0+dS5sJiZ1LnIpLm1hcCgoW3VdKT0+dSk7aWYoYS5sZW5ndGgpe2NvbnN0IHU9cj9hLmZpbHRlcihsPT5yLmtleXMuaW5jbHVkZXMobCkpOltdO3UubGVuZ3RoJiZlLmlzc3Vlcy5wdXNoKHsuLi5yLGtleXM6dX0pO2Zvcihjb25zdCBsIG9mIGEpIXUuaW5jbHVkZXMobCkmJnMuaGFzKGwpJiZlLmlzc3Vlcy5wdXNoKHMuZ2V0KGwpKX1jb25zdCBjPVhuKHQudmFsdWUsbi52YWx1ZSk7aWYoIWMudmFsaWQpe2lmKHJlKGUpKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5tZXJnYWJsZSBpbnRlcnNlY3Rpb24uIEVycm9yIHBhdGg6ICR7SlNPTi5zdHJpbmdpZnkoYy5tZXJnZUVycm9yUGF0aCl9YCl9cmV0dXJuIGUudmFsdWU9Yy5kYXRhLGV9Y29uc3QgUnM9ZCgiJFpvZFR1cGxlIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49dC5pdGVtcyxvPW5lLm1lbW9pemVyO28/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7aWYoIUFycmF5LmlzQXJyYXkoaSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2lucHV0OmksaW5zdDplLGV4cGVjdGVkOiJ0dXBsZSIsY29kZToiaW52YWxpZF90eXBlIn0pLHI7ci52YWx1ZT1vP28uYWxsb2MoZSxyLFtdLHMpOltdO2NvbnN0IGE9W10sYz16YyhuLCJvcHRpbiIpLHU9emMobiwib3B0b3V0Iik7aWYoIXQucmVzdCl7aWYoaS5sZW5ndGg8YylyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOmMsaW5jbHVzaXZlOiEwLGlucHV0OmksaW5zdDplLG9yaWdpbjoiYXJyYXkifSkscjtpLmxlbmd0aD5uLmxlbmd0aCYmci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX2JpZyIsbWF4aW11bTpuLmxlbmd0aCxpbmNsdXNpdmU6ITAsaW5wdXQ6aSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KX1jb25zdCBsPW5ldyBBcnJheShuLmxlbmd0aCkscD10LnJlc3Q/cz8uYWJvcnRFYXJseTp2b2lkIDA7bGV0IG09ITE7Zm9yKGxldCBiPTA7YjxuLmxlbmd0aDtiKyspe2NvbnN0IHk9bltiXS5fem9kLnJ1bih7dmFsdWU6aVtiXSxpc3N1ZXM6W119LHMpO3kgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaCh5LnRoZW4oaz0+e2xbYl09a30pKToobFtiXT15LHAmJiFtJiZ5Lmlzc3Vlcy5sZW5ndGgmJihtPXJlKHkpKSl9aWYodC5yZXN0JiYhbSl7bGV0IGI9bi5sZW5ndGgtMTtjb25zdCB5PWkuc2xpY2Uobi5sZW5ndGgpO2xldCBrPXIuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiB5KXtpZihwJiZyLmlzc3Vlcy5sZW5ndGghPT1rKXtpZihyZShyLGspKWJyZWFrO2s9ci5pc3N1ZXMubGVuZ3RofWIrKztjb25zdCBOPXQucmVzdC5fem9kLnJ1bih7dmFsdWU6JCxpc3N1ZXM6W119LHMpO04gaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaChOLnRoZW4oUj0+VGMoUixyLGIpKSk6VGMoTixyLGIpfX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+UGMobCxyLG4saSx1KSk6UGMobCxyLG4saSx1KX19KTtmdW5jdGlvbiB6YyhlLHQpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKCEodD09PSJvcHRpbiI/ZVtuXS5fem9kLm9wdGluIT09dm9pZCAwOmVbbl0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKSlyZXR1cm4gbisxO3JldHVybiAwfWZ1bmN0aW9uIFRjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZGUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1mdW5jdGlvbiBQYyhlLHQsbixvLHIpe2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtjb25zdCBpPWVbc10sYT1zPG8ubGVuZ3RoO2lmKCFhJiZzPj1yJiZuW3NdLl96b2Qub3B0aW49PT0ib3B0aW9uYWwiKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfWlmKGkuaXNzdWVzLmxlbmd0aCl7aWYoIWEmJnM+PXIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9dC5pc3N1ZXMucHVzaCguLi5kZShzLGkuaXNzdWVzKSl9dC52YWx1ZVtzXT1pLnZhbHVlfWZvcihsZXQgcz10LnZhbHVlLmxlbmd0aC0xO3M+PW8ubGVuZ3RoJiYobltzXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCImJnQudmFsdWVbc109PT12b2lkIDApO3MtLSl0LnZhbHVlLmxlbmd0aD1zO3JldHVybiB0fWNvbnN0IE1kPWQoIiRab2RSZWNvcmQiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1uZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFDZShzKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InJlY29yZCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXSxhPXQua2V5VHlwZS5fem9kLnZhbHVlcztpZihhJiYhdC5wYXJ0aWFsKXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307Y29uc3QgYz1uZXcgU2V0O2Zvcihjb25zdCBsIG9mIGEpaWYodHlwZW9mIGw9PSJzdHJpbmcifHx0eXBlb2YgbD09Im51bWJlciJ8fHR5cGVvZiBsPT0ic3ltYm9sIil7aWYoYy5hZGQodHlwZW9mIGw9PSJudW1iZXIiP2wudG9TdHJpbmcoKTpsKSxsPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgcD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtpZihwIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZihwLmlzc3Vlcy5sZW5ndGgpe28uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOnAuaXNzdWVzLm1hcCh5PT5oZSh5LHIsSigpKSksaW5wdXQ6bCxwYXRoOltsXSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBtPXAudmFsdWU7aWYobT09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbbF0saXNzdWVzOltdfSxyKTtiIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goYi50aGVuKHk9Pnt5Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4uZGUobCx5Lmlzc3VlcykpLG8udmFsdWVbbV09eS52YWx1ZX0pKTooYi5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmRlKGwsYi5pc3N1ZXMpKSxvLnZhbHVlW21dPWIudmFsdWUpfWxldCB1O2Zvcihjb25zdCBsIGluIHMpaWYoIWMuaGFzKGwpKWlmKHQubW9kZT09PSJsb29zZSIpe2lmKGw9PT0iX19wcm90b19fIiljb250aW51ZTtvLnZhbHVlW2xdPXNbbF19ZWxzZSB1PXU/P1tdLHUucHVzaChsKTt1JiZ1Lmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czp1LGNvbnRpbnVlOiEwfSl9ZWxzZXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307bGV0IGM7Zm9yKGNvbnN0IHUgb2YgUmVmbGVjdC5vd25LZXlzKHMpKXtpZih1PT09Il9fcHJvdG9fXyJ8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocyx1KSljb250aW51ZTtsZXQgbD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZih0eXBlb2YgdT09InN0cmluZyImJmJvLnRlc3QodSkmJmwuaXNzdWVzLmxlbmd0aCl7Y29uc3QgeT10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOk51bWJlcih1KSxpc3N1ZXM6W119LHIpO2lmKHkgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO3kuaXNzdWVzLmxlbmd0aD09PTAmJihsPXkpfWlmKGwuaXNzdWVzLmxlbmd0aCl7dC5tb2RlPT09Imxvb3NlIj9vLnZhbHVlW3VdPXNbdV06YT8oYz1jPz9bXSxjLnB1c2godSkpOm8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmwuaXNzdWVzLm1hcCh5PT5oZSh5LHIsSigpKSksaW5wdXQ6dSxwYXRoOlt1XSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBtPWwudmFsdWU7aWYobT09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbdV0saXNzdWVzOltdfSxyKTtiIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goYi50aGVuKHk9Pnt5Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4uZGUodSx5Lmlzc3VlcykpLG8udmFsdWVbbV09eS52YWx1ZX0pKTooYi5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmRlKHUsYi5pc3N1ZXMpKSxvLnZhbHVlW21dPWIudmFsdWUpfWMmJmMubGVuZ3RoPjAmJm8uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixpbnB1dDpzLGluc3Q6ZSxrZXlzOmMsY29udGludWU6ITB9KX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KSxEZD1kKCIkWm9kTWFwIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49bmUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBNYXApKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibWFwIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnMsaW5zdDplfSksbztjb25zdCBpPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgTWFwLHIpOm5ldyBNYXA7Y29uc3QgYT1yPy5hYm9ydEVhcmx5O2xldCBjPW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3RbdSxsXW9mIHMpe2lmKGEmJm8uaXNzdWVzLmxlbmd0aCE9PWMpe2lmKHJlKG8sYykpYnJlYWs7Yz1vLmlzc3Vlcy5sZW5ndGh9Y29uc3QgcD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKSxtPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7cCBpbnN0YW5jZW9mIFByb21pc2V8fG0gaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChQcm9taXNlLmFsbChbcCxtXSkudGhlbigoW2IseV0pPT57SWMoYix5LG8sdSxzLGUscil9KSk6SWMocCxtLG8sdSxzLGUscil9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gSWMoZSx0LG4sbyxyLHMsaSl7ZS5pc3N1ZXMubGVuZ3RoJiYoV24uaGFzKHR5cGVvZiBvKT9uLmlzc3Vlcy5wdXNoKC4uLmRlKG8sZS5pc3N1ZXMpKTpuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJtYXAiLGlucHV0OnIsaW5zdDpzLGlzc3VlczplLmlzc3Vlcy5tYXAoYT0+aGUoYSxpLEooKSkpfSkpLHQuaXNzdWVzLmxlbmd0aCYmKFduLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5kZShvLHQuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJtYXAiLGNvZGU6ImludmFsaWRfZWxlbWVudCIsaW5wdXQ6cixpbnN0OnMsa2V5Om8saXNzdWVzOnQuaXNzdWVzLm1hcChhPT5oZShhLGksSigpKSl9KSksbi52YWx1ZS5zZXQoZS52YWx1ZSx0LnZhbHVlKX1jb25zdCBxZD1kKCIkWm9kU2V0IiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49bmUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBTZXQpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtpbnB1dDpzLGluc3Q6ZSxleHBlY3RlZDoic2V0Iixjb2RlOiJpbnZhbGlkX3R5cGUifSksbztjb25zdCBpPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgU2V0LHIpOm5ldyBTZXQ7Y29uc3QgYT1yPy5hYm9ydEVhcmx5O2xldCBjPW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgdSBvZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihyZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IGw9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtsIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2gobC50aGVuKHA9PnhjKHAsbykpKTp4YyhsLG8pfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIHhjKGUsdCl7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmUuaXNzdWVzKSx0LnZhbHVlLmFkZChlLnZhbHVlKX1jb25zdCBMZD1kKCIkWm9kRW51bSIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPU9yKHQuZW50cmllcyksbz1uZXcgU2V0KG4pO2UuX3pvZC52YWx1ZXM9byx4KGUsInBhdHRlcm4iLHI9Pntjb25zdCBzPU9yKHIuZGVmLmVudHJpZXMpLmZpbHRlcihpPT5Xbi5oYXModHlwZW9mIGkpKTtyZXR1cm4gbmV3IFJlZ0V4cChzLmxlbmd0aD9gXigke3MubWFwKGk9PiRlKGkudG9TdHJpbmcoKSkpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7cmV0dXJuIG8uaGFzKGkpfHxyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6bixpbnB1dDppLGluc3Q6ZX0pLHJ9fSksVWQ9ZCgiJFpvZExpdGVyYWwiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQudmFsdWVzKTtlLl96b2QudmFsdWVzPW4seChlLCJwYXR0ZXJuIixvPT57Y29uc3Qgcj1vLmRlZi52YWx1ZXM7cmV0dXJuIG5ldyBSZWdFeHAoci5sZW5ndGg/YF4oJHtyLm1hcChzPT50eXBlb2Ygcz09InN0cmluZyI/JGUocyk6cz8kZShzLnRvU3RyaW5nKCkpOlN0cmluZyhzKSkuam9pbigifCIpfSkkYDoiXlteXFxzXFxTXSQiKX0pLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtyZXR1cm4gbi5oYXMocyl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0LnZhbHVlcyxpbnB1dDpzLGluc3Q6ZX0pLG99fSksSGQ9ZCgiJFpvZEZpbGUiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiByIGluc3RhbmNlb2YgRmlsZXx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImZpbGUiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLEZkPWQoIiRab2RUcmFuc2Zvcm0iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLm9wdGluPSJvcHRpb25hbCIsbmUubWVtb2l6ZXI/Lmd1YXJkKGUpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgcG8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7aWYoby5hc3luYylyZXR1cm4ociBpbnN0YW5jZW9mIFByb21pc2U/cjpQcm9taXNlLnJlc29sdmUocikpLnRoZW4oaT0+KG4udmFsdWU9aSxuKSk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFJlO3JldHVybiBuLnZhbHVlPXIsbn19KTtmdW5jdGlvbiBFYyhlLHQpe3JldHVybiBlLnZhbHVlPXQuaXNzdWVzLmxlbmd0aD92b2lkIDA6dC52YWx1ZSxlfWNvbnN0IENzPWQoIiRab2RPcHRpb25hbCIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLGUuX3pvZC5vcHRvdXQ9Im9wdGlvbmFsIix4KGUsInZhbHVlcyIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzO3JldHVybiBvP25ldyBTZXQoWy4uLm8sdm9pZCAwXSk6dm9pZCAwfSkseChlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtFZShvLnNvdXJjZSl9KT8kYCk6dm9pZCAwfSksZS5fem9kLnBhcnNlPShuLG8pPT57aWYobi52YWx1ZT09PXZvaWQgMCl7aWYodC5pbm5lclR5cGUuX3pvZC5vcHRpbiE9PSJkZWZhdWx0ZWQiKXJldHVybiBuO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PkVjKG4scykpOkVjKG4scil9cmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9fSksQmQ9ZCgiJFpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57Q3MuaW5pdChlLHQpLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLHgoZSwicGF0dGVybiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybiksZS5fem9kLnBhcnNlPShuLG8pPT50LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksVmQ9ZCgiJFpvZE51bGxhYmxlIiwoZSx0KT0+e3ouaW5pdChlLHQpLHgoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluKSx4KGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSx4KGUsInBhdHRlcm4iLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47cmV0dXJuIG8/bmV3IFJlZ0V4cChgXigke0VlKG8uc291cmNlKX18bnVsbCkkYCk6dm9pZCAwfSkseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcz9uZXcgU2V0KFsuLi5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMsbnVsbF0pOnZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5uLnZhbHVlPT09bnVsbD9uOnQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxKZD1kKCIkWm9kRGVmYXVsdCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2lmKG4udmFsdWU9PT12b2lkIDApcmV0dXJuIG4udmFsdWU9dC5kZWZhdWx0VmFsdWUsbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5SYyhzLHQpKTpSYyhyLHQpfX0pO2Z1bmN0aW9uIFJjKGUsdCl7cmV0dXJuIGUudmFsdWU9PT12b2lkIDAmJihlLnZhbHVlPXQuZGVmYXVsdFZhbHVlKSxlfWNvbnN0IEtkPWQoIiRab2RQcmVmYXVsdCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT4oby5kaXJlY3Rpb249PT0iYmFja3dhcmQifHxuLnZhbHVlPT09dm9pZCAwJiYobi52YWx1ZT10LmRlZmF1bHRWYWx1ZSksdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKSl9KSxXZD1kKCIkWm9kTm9uT3B0aW9uYWwiLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vXS5maWx0ZXIocj0+ciE9PXZvaWQgMCkpOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PkNjKHMsZSkpOkNjKHIsZSl9fSk7ZnVuY3Rpb24gQ2MoZSx0KXtyZXR1cm4hZS5pc3N1ZXMubGVuZ3RoJiZlLnZhbHVlPT09dm9pZCAwJiZlLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6ZS52YWx1ZSxpbnN0OnR9KSxlfWNvbnN0IEdkPWQoIiRab2RTdWNjZXNzIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgcG8oIlpvZFN1Y2Nlc3MiKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLmlzc3Vlcy5sZW5ndGg9PT0wLG4pKToobi52YWx1ZT1yLmlzc3Vlcy5sZW5ndGg9PT0wLG4pfX0pO2Z1bmN0aW9uIFpjKGUsdCxuLG8pe3JldHVybiB0Lmlzc3Vlcy5sZW5ndGg/KGUudmFsdWU9bi5jYXRjaFZhbHVlKHsuLi50LHZhbHVlOmUudmFsdWUsZXJyb3I6e2lzc3Vlczp0Lmlzc3Vlcy5tYXAocj0+aGUocixvLEooKSkpfSxpbnB1dDplLnZhbHVlfSksZSk6KGUudmFsdWU9dC52YWx1ZSx0Lm1lbW8mJihlLm1lbW89ITApLGUpfWNvbnN0IFlkPWQoIiRab2RDYXRjaCIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLHgoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5aYyhuLHMsdCxvKSk6WmMobixyLHQsbyl9fSksUWQ9ZCgiJFpvZE5hTiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PigodHlwZW9mIG4udmFsdWUhPSJudW1iZXIifHwhTnVtYmVyLmlzTmFOKG4udmFsdWUpKSYmbi5pc3N1ZXMucHVzaCh7aW5wdXQ6bi52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6Im5hbiIsY29kZToiaW52YWxpZF90eXBlIn0pLG4pfSksWnM9ZCgiJFpvZFBpcGUiLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSx4KGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSx4KGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihpPT5EbihpLHQuaW4sbykpOkRuKHMsdC5pbixvKX1jb25zdCByPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PkRuKHMsdC5vdXQsbykpOkRuKHIsdC5vdXQsbyl9fSk7ZnVuY3Rpb24gRG4oZSx0LG4pe3JldHVybiBlLmlzc3Vlcy5zb21lKG89Pm8uY29kZSE9PSJ1bnJlY29nbml6ZWRfa2V5cyIpPyhlLmFib3J0ZWQ9ITAsZSk6dC5fem9kLnJ1bih7dmFsdWU6ZS52YWx1ZSxpc3N1ZXM6ZS5pc3N1ZXN9LG4pfWNvbnN0IE9zPWQoIiRab2RDb2RlYyIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLHgoZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLHgoZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLHgoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZigoby5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHM9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+cW4oaSx0LG8pKTpxbihzLHQsbyl9ZWxzZXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihpPT5xbihpLHQsbykpOnFuKHMsdCxvKX19fSk7ZnVuY3Rpb24gcW4oZSx0LG4pe2lmKGUuaXNzdWVzLmxlbmd0aClyZXR1cm4gZS5hYm9ydGVkPSEwLGU7aWYoKG4uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCByPXQudHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5MbihlLHMsdC5vdXQsbikpOkxuKGUscix0Lm91dCxuKX1lbHNle2NvbnN0IHI9dC5yZXZlcnNlVHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5MbihlLHMsdC5pbixuKSk6TG4oZSxyLHQuaW4sbil9fWZ1bmN0aW9uIExuKGUsdCxuLG8pe3JldHVybiBlLmlzc3Vlcy5sZW5ndGg/KGUuYWJvcnRlZD0hMCxlKTpuLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczplLmlzc3Vlc30sbyl9Y29uc3QgWGQ9ZCgiJFpvZFByZXByb2Nlc3MiLChlLHQpPT57WnMuaW5pdChlLHQpfSksZXA9ZCgiJFpvZFJlYWRvbmx5IiwoZSx0KT0+e3ouaW5pdChlLHQpLHgoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucHJvcFZhbHVlcykseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcykseChlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRpbikseChlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4oT2MpOk9jKHIpfX0pO2Z1bmN0aW9uIE9jKGUpe3JldHVybiBlLm1lbW98fChlLnZhbHVlPU9iamVjdC5mcmVlemUoZS52YWx1ZSkpLGV9ZnVuY3Rpb24gdm0oZSl7Y29uc3QgdD1lLl96b2QuZGVmO2xldCBuPXQucGF0dGVybixvPSEhdC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxyLHM7Zm9yKGNvbnN0IGEgb2YgdC5jaGVja3M/P1tdKXtjb25zdCBjPWEuX3pvZC5kZWY7Yy5wYXR0ZXJuJiYobj1jLnBhdHRlcm4pLG98fChvPSEhYy5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSk7Y29uc3QgdT1jLm1pbmltdW0/P2MubGVuZ3RoLGw9Yy5tYXhpbXVtPz9jLmxlbmd0aDt1IT09dm9pZCAwJiYocj09PXZvaWQgMHx8dT5yKSYmKHI9dSksbCE9PXZvaWQgMCYmKHM9PT12b2lkIDB8fGw8cykmJihzPWwpfWlmKG4pcmV0dXJuIG4uc291cmNlO2lmKHIhPT12b2lkIDAmJnMhPT12b2lkIDAmJnI+cylyZXR1cm4iKD8hKSI7aWYociE9PXZvaWQgMHx8cyE9PXZvaWQgMClyZXR1cm4gc2woe21pbmltdW06cixtYXhpbXVtOnN9KS5zb3VyY2U7Y29uc3QgaT1lLl96b2QucGF0dGVybjtyZXR1cm4obyYmaT09PWJvP2FsOmkpPy5zb3VyY2V9ZnVuY3Rpb24gVXIoZSl7Y29uc3QgdD1lLl96b2QuZGVmLG49ZS5fem9kLnBhdHRlcm4/LnNvdXJjZSxvPXQuaW5uZXJUeXBlPz9lLl96b2QuaW5uZXJUeXBlO2lmKG8pe2NvbnN0IHI9by5fem9kLnBhdHRlcm4/LnNvdXJjZSxzPVVyKG8pO3JldHVybiBuJiZyJiZzJiZzIT09cj9uLnJlcGxhY2UoRWUociksKCk9PkVlKHMpKTpufWlmKHQub3B0aW9ucyl7Y29uc3Qgcj10Lm9wdGlvbnMubWFwKFVyKTtpZihyLmV2ZXJ5KEJvb2xlYW4pKXJldHVybmBeKCR7ci5tYXAocz0+RWUocykpLmpvaW4oInwiKX0pJGB9cmV0dXJuIHZtKGUpfWNvbnN0IHRwPWQoIiRab2RUZW1wbGF0ZUxpdGVyYWwiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiB0LnBhcnRzKWlmKHR5cGVvZiBvPT0ib2JqZWN0IiYmbyE9PW51bGwpe2NvbnN0IHI9VXIobyk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydCwgbm8gcGF0dGVybiBmb3VuZDogJHtbLi4uby5fem9kLnRyYWl0c10uc2hpZnQoKX1gKTtuLnB1c2goRWUocikpfWVsc2UgaWYobz09PW51bGx8fGx1Lmhhcyh0eXBlb2Ygbykpbi5wdXNoKCRlKGAke299YCkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydDogJHtvfWApO2UuX3pvZC5wYXR0ZXJuPW5ldyBSZWdFeHAoYF4ke24uam9pbigiIil9JGApLGUuX3pvZC5wYXJzZT0obyxyKT0+dHlwZW9mIG8udmFsdWUhPSJzdHJpbmciPyhvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbyk6KGUuX3pvZC5wYXR0ZXJuLmxhc3RJbmRleD0wLGUuX3pvZC5wYXR0ZXJuLnRlc3Qoby52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQ/PyJ0ZW1wbGF0ZV9saXRlcmFsIixwYXR0ZXJuOmUuX3pvZC5wYXR0ZXJuLnNvdXJjZX0pLG8pfSksbnA9ZCgiJFpvZEZ1bmN0aW9uIiwoZSx0KT0+KHouaW5pdChlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfZGVmIix7dmFsdWU6dH0pLGUuX3pvZC5kZWY9dCxlLmltcGxlbWVudD1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P01yKGUuX2RlZi5pbnB1dCxvKTpvLHM9UmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/TXIoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuaW1wbGVtZW50QXN5bmM9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50QXN5bmMoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGFzeW5jIGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P2F3YWl0IERyKGUuX2RlZi5pbnB1dCxvKTpvLHM9YXdhaXQgUmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/YXdhaXQgRHIoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuX3pvZC5wYXJzZT0obixvKT0+dHlwZW9mIG4udmFsdWUhPSJmdW5jdGlvbiI/KG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ImZ1bmN0aW9uIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pOihlLl9kZWYub3V0cHV0JiZlLl9kZWYub3V0cHV0Ll96b2QuZGVmLnR5cGU9PT0icHJvbWlzZSI/bi52YWx1ZT1lLmltcGxlbWVudEFzeW5jKG4udmFsdWUpOm4udmFsdWU9ZS5pbXBsZW1lbnQobi52YWx1ZSksbiksZS5pbnB1dD0oLi4ubik9Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIEFycmF5LmlzQXJyYXkoblswXSk/bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuZXcgUnMoe3R5cGU6InR1cGxlIixpdGVtczpuWzBdLHJlc3Q6blsxXX0pLG91dHB1dDplLl9kZWYub3V0cHV0fSk6bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuWzBdLG91dHB1dDplLl9kZWYub3V0cHV0fSl9LGUub3V0cHV0PW49Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIG5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6ZS5fZGVmLmlucHV0LG91dHB1dDpufSl9LGUpKSxvcD1kKCIkWm9kUHJvbWlzZSIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PlByb21pc2UucmVzb2x2ZShuLnZhbHVlKS50aGVuKHI9PnQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbykpfSksQXM9ZCgiJFpvZExhenkiLChlLHQpPT57ei5pbml0KGUsdCkscnUoZS5fem9kLCJpbm5lclR5cGUiLCgpPT57Y29uc3Qgbj10O3JldHVybiBuLl9jYWNoZWRJbm5lcnx8KG4uX2NhY2hlZElubmVyPXQuZ2V0dGVyKCkpLG4uX2NhY2hlZElubmVyfSkseChlLCJwYXR0ZXJuIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucGF0dGVybikseChlLCJwcm9wVmFsdWVzIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucHJvcFZhbHVlcykseChlLCJvcHRpbiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluPz92b2lkIDApLHgoZSwib3B0b3V0IixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0Pz92b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+ZS5fem9kLmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSkscnA9ZCgiJFpvZEN1c3RvbSIsKGUsdCk9PntVLmluaXQoZSx0KSx6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pm4sZS5fem9kLmNoZWNrPW49Pntjb25zdCBvPW4udmFsdWUscj10LmZuKG8pO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiByLnRoZW4ocz0+QWMocyxuLG8sZSkpO0FjKHIsbixvLGUpfX0pO2Z1bmN0aW9uIEFjKGUsdCxuLG8pe2lmKCFlKXtjb25zdCByPXtjb2RlOiJjdXN0b20iLGlucHV0Om4saW5zdDpvLHBhdGg6Wy4uLm8uX3pvZC5kZWYucGF0aD8/W11dLGNvbnRpbnVlOiFvLl96b2QuZGVmLmFib3J0fTtvLl96b2QuZGVmLnBhcmFtcyYmKHIucGFyYW1zPW8uX3pvZC5kZWYucGFyYW1zKSx0Lmlzc3Vlcy5wdXNoKFFlKHIpKX19Y2xhc3Mgc3AgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJDYW5ub3QgcGFyc2UgYSByZWZlcmVuY2UgY3ljbGUgdGhhdCBjbG9zZXMgdGhyb3VnaCBhIHRyYW5zZm9ybSIpLHRoaXMubmFtZT0iWm9kQ3ljbGljRXJyb3IifX1jb25zdCBIcj0ifm1lbW8iLE5jPVtdO2Z1bmN0aW9uIGlwKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifWZ1bmN0aW9uIFJyKGUpe3JldHVybiBlLm1hcCh0PT50LnBhdGg/ey4uLnQscGF0aDp0LnBhdGguc2xpY2UoKX06ey4uLnR9KX1jb25zdCBhcD1uZXcgV2Vha01hcCxXZT0wLFZuPTEsenQ9MjtmdW5jdGlvbiBUdChlLHQsbil7Y29uc3Qgbz1hcC5nZXQoZSk7aWYobyE9PXZvaWQgMClyZXR1cm4gbz96dDpXZTtpZih0LmhhcyhlKSlyZXR1cm4genQ7dC5hZGQoZSk7bGV0IHI9V2U7Y29uc3Qgcz1sPT57aWYociE9PXp0JiZsPy5fem9kKXtjb25zdCBwPVR0KGwsdCxuKTtwPnImJihyPXApfX0saT0obCxwKT0+e2xldCBtPVdlO2Zvcihjb25zdCBiIG9mIFJlZmxlY3Qub3duS2V5cyhsKSl7Y29uc3QgeT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsYik7aWYoIXkuZW51bWVyYWJsZSljb250aW51ZTtjb25zdCBrPXkuZ2V0P1ZuOnkudmFsdWU/Ll96b2Q/VHQoeS52YWx1ZSx0LG4pOldlO2s+bSYmKG09ayl9cmV0dXJuIG19LGE9bD0+e2w+ciYmKHI9bCl9LGM9ZS5fem9kLmRlZjtzd2l0Y2goYy50eXBlKXtjYXNlIm9iamVjdCI6e2NvbnN0IGw9cm8oYyk7YShsP2kobCk6Vm4pLHMoYy5jYXRjaGFsbCk7YnJlYWt9Y2FzZSJhcnJheSI6cyhjLmVsZW1lbnQpO2JyZWFrO2Nhc2UidHVwbGUiOmZvcihjb25zdCBsIG9mIGMuaXRlbXMpcyhsKTtzKGMucmVzdCk7YnJlYWs7Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjpzKGMua2V5VHlwZSkscyhjLnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJzZXQiOnMoYy52YWx1ZVR5cGUpO2JyZWFrO2Nhc2UidW5pb24iOmZvcihjb25zdCBsIG9mIGMub3B0aW9ucylzKGwpO2JyZWFrO2Nhc2UiaW50ZXJzZWN0aW9uIjpzKGMubGVmdCkscyhjLnJpZ2h0KTticmVhaztjYXNlIm9wdGlvbmFsIjpjYXNlIm51bGxhYmxlIjpjYXNlImRlZmF1bHQiOmNhc2UicHJlZmF1bHQiOmNhc2UiY2F0Y2giOmNhc2UicmVhZG9ubHkiOmNhc2Uibm9ub3B0aW9uYWwiOmNhc2UicHJvbWlzZSI6Y2FzZSJzdWNjZXNzIjpzKGMuaW5uZXJUeXBlKTticmVhaztjYXNlInBpcGUiOnMoYy5pbikscyhjLm91dCk7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6cyhjLmlucHV0KSxzKGMub3V0cHV0KTticmVhaztjYXNlImxhenkiOntjb25zdCBsPWMuX2NhY2hlZElubmVyPz8obj9lLl96b2QuaW5uZXJUeXBlOnZvaWQgMCk7YShsP1R0KGwsdCwhMSk6Vm4pO2JyZWFrfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpicmVhaztkZWZhdWx0OmZvcihjb25zdCBsIGluIGMpe2NvbnN0IHA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGwpO2lmKCFwfHxwLmdldCljb250aW51ZTtjb25zdCBtPXAudmFsdWU7aWYoISghbXx8dHlwZW9mIG0hPSJvYmplY3QiKSl7aWYobS5fem9kKXMobSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KG0pKWZvcihjb25zdCBiIG9mIG0pcyhiKX19fXJldHVybiB0LmRlbGV0ZShlKSxibShlLHIpfWZ1bmN0aW9uIGJtKGUsdCl7cmV0dXJuIHQhPT1WbiYmYXAuc2V0KGUsdD09PXp0KSx0fWZ1bmN0aW9uIF9tKGUpe3JldHVybiBUdChlLG5ldyBTZXQsITApIT09V2V9ZnVuY3Rpb24geW0oZSx0KXtsZXQgbj1lLmJ1Y2tldHMuZ2V0KHQpO3JldHVybiBufHwobj1uZXcgV2Vha01hcCxlLmJ1Y2tldHMuc2V0KHQsbikpLG59bGV0IFVuO2NvbnN0IEhuPVtdLHdtPXthbGxvYyhlLHQsbil7Y29uc3Qgbz1VbjtpZighbylyZXR1cm4gbjtVbj12b2lkIDA7Y29uc3Qgcj17dmFsdWU6bixpc3N1ZXM6bnVsbH07cmV0dXJuIG8uc2V0KHQudmFsdWUsciksSG4ucHVzaChyKSxufSxndWFyZChlKXt2YXIgdDsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBuPWUuX3pvZC5wYXJzZSxvPShyLHMpPT57aWYocy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiJiZjcChzLHIudmFsdWUpKXRocm93IG5ldyBzcDtyZXR1cm4gbihyLHMpfTtlLl96b2QucGFyc2U9byxlLl96b2QucnVuPT09biYmKGUuX3pvZC5ydW49byl9KX0sYXR0YWNoKGUpe3ZhciB0O2xldCBuLG89ITEscixzOyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IGk9ZS5fem9kLnBhcnNlLGE9KGMsdSk9PntpZihuPT09dm9pZCAwKXtjb25zdCBOPVR0KGUsbmV3IFNldCwhMSk7aWYoTj09PVdlKXJldHVybiBlLl96b2QucGFyc2U9aSxlLl96b2QucnVuPT09YSYmKGUuX3pvZC5ydW49aSksaShjLHUpO049PT16dHx8bz9uPSEwOm89ITB9Y29uc3QgbD1jLnZhbHVlO2lmKCFpcChsKSlyZXR1cm4gaShjLHUpO2xldCBwPXVbSHJdO3B8fChwPXtidWNrZXRzOm5ldyBXZWFrTWFwLGJhY2tFZGdlczp2b2lkIDB9LHVbSHJdPXApO2xldCBtO3I9PT11P209czoobT15bShwLGUpLHI9dSxzPW0pO2NvbnN0IGI9bS5nZXQobCk7aWYoYilyZXR1cm4gYy52YWx1ZT1iLnZhbHVlLGIuaXNzdWVzP2IuaXNzdWVzLmxlbmd0aCYmYy5pc3N1ZXMucHVzaCguLi5ScihiLmlzc3VlcykpOihjLm1lbW89ITAscC5iYWNrRWRnZXM/PyhwLmJhY2tFZGdlcz1uZXcgV2Vha1NldCkscC5iYWNrRWRnZXMuYWRkKGIudmFsdWUpKSxjO1VuPW07Y29uc3QgeT1Ibi5sZW5ndGgsaz1pKGMsdSk7VW49dm9pZCAwO2NvbnN0ICQ9SG4ubGVuZ3RoPnk/SG4ucG9wKCk6dm9pZCAwO3JldHVybiBrIGluc3RhbmNlb2YgUHJvbWlzZT9rLnRoZW4oTj0+KCQmJigkLmlzc3Vlcz1OLmlzc3Vlcy5sZW5ndGg/UnIoTi5pc3N1ZXMpOk5jKSxOKSk6KCQmJigkLmlzc3Vlcz1rLmlzc3Vlcy5sZW5ndGg/UnIoay5pc3N1ZXMpOk5jKSxrKX07ZS5fem9kLnBhcnNlPWEsZS5fem9kLnJ1bj09PWkmJihlLl96b2QucnVuPWEpfSl9fTtmdW5jdGlvbiB3bygpe3JldHVybiB3bX1mdW5jdGlvbiBjcChlLHQpe2NvbnN0IG49ZVtIcl0/LmJhY2tFZGdlcztyZXR1cm4gbiE9PXZvaWQgMCYmaXAodCkmJm4uaGFzKHQpfWNvbnN0IGttPSgpPT57Y29uc3QgZT17c3RyaW5nOnt1bml0OiJjaGFyYWN0ZXJzIix2ZXJiOiJ0byBoYXZlIn0sZmlsZTp7dW5pdDoiYnl0ZXMiLHZlcmI6InRvIGhhdmUifSxhcnJheTp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxzZXQ6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sbWFwOnt1bml0OiJlbnRyaWVzIix2ZXJiOiJ0byBoYXZlIn19O2Z1bmN0aW9uIHQocyl7cmV0dXJuIGVbc10/P251bGx9Y29uc3Qgbj17cmVnZXg6ImlucHV0IixlbWFpbDoiZW1haWwgYWRkcmVzcyIsdXJsOiJVUkwiLGVtb2ppOiJlbW9qaSIsdXVpZDoiVVVJRCIsdXVpZHY0OiJVVUlEdjQiLHV1aWR2NjoiVVVJRHY2IixuYW5vaWQ6Im5hbm9pZCIsZ3VpZDoiR1VJRCIsY3VpZDoiY3VpZCIsY3VpZDI6ImN1aWQyIix1bGlkOiJVTElEIix4aWQ6IlhJRCIsa3N1aWQ6IktTVUlEIixkYXRldGltZToiSVNPIGRhdGV0aW1lIixkYXRlOiJJU08gZGF0ZSIsdGltZToiSVNPIHRpbWUiLGR1cmF0aW9uOiJJU08gZHVyYXRpb24iLGlwdjQ6IklQdjQgYWRkcmVzcyIsaXB2NjoiSVB2NiBhZGRyZXNzIixtYWM6Ik1BQyBhZGRyZXNzIixjaWRydjQ6IklQdjQgcmFuZ2UiLGNpZHJ2NjoiSVB2NiByYW5nZSIsYmFzZTY0OiJiYXNlNjQtZW5jb2RlZCBzdHJpbmciLGJhc2U2NHVybDoiYmFzZTY0dXJsLWVuY29kZWQgc3RyaW5nIixqc29uX3N0cmluZzoiSlNPTiBzdHJpbmciLGUxNjQ6IkUuMTY0IG51bWJlciIsY3VycmVuY3lfY29kZToiY3VycmVuY3kgY29kZSIsY3JlZGl0X2NhcmQ6ImNyZWRpdCBjYXJkIG51bWJlciIsaWJhbjoiSUJBTiIsand0OiJKV1QiLHRlbXBsYXRlX2xpdGVyYWw6ImlucHV0In0sbz17bmFuOiJOYU4ifTtmdW5jdGlvbiByKHMsaSl7cmV0dXJuIHM9PT0ibnVtYmVyIiYmdHlwZW9mIGk9PSJudW1iZXIiJiYhTnVtYmVyLmlzRmluaXRlKGkpP1N0cmluZyhpKTpvW3NdPz9zfXJldHVybiBzPT57c3dpdGNoKHMuY29kZSl7Y2FzZSJpbnZhbGlkX3R5cGUiOntjb25zdCBpPXIocy5leHBlY3RlZCksYT1rdShzLmlucHV0KSxjPXIoYSxzLmlucHV0KTtyZXR1cm5gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHtpfSwgcmVjZWl2ZWQgJHtjfWB9Y2FzZSJpbnZhbGlkX3ZhbHVlIjpyZXR1cm4gcy52YWx1ZXMubGVuZ3RoPT09MT9gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHtYcihzLnZhbHVlc1swXSl9YDpgSW52YWxpZCBvcHRpb246IGV4cGVjdGVkIG9uZSBvZiAke0FyKHMudmFsdWVzLCJ8Iil9YDtjYXNlInRvb19iaWciOntjb25zdCBpPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPD0iOiI8IixhPXQocy5vcmlnaW4pO3JldHVybiBhP2BUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBoYXZlICR7aX0ke3MubWF4aW11bS50b1N0cmluZygpfSAke2EudW5pdD8/ImVsZW1lbnRzIn1gOmBUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBiZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX1gfWNhc2UidG9vX3NtYWxsIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ij49IjoiPiIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBoYXZlICR7aX0ke3MubWluaW11bS50b1N0cmluZygpfSAke2EudW5pdH1gOmBUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGJlICR7aX0ke3MubWluaW11bS50b1N0cmluZygpfWB9Y2FzZSJpbnZhbGlkX2Zvcm1hdCI6e2NvbnN0IGk9cztyZXR1cm4gaS5mb3JtYXQ9PT0ic3RhcnRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBzdGFydCB3aXRoICIke2kucHJlZml4fSJgOmkuZm9ybWF0PT09ImVuZHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGVuZCB3aXRoICIke2kuc3VmZml4fSJgOmkuZm9ybWF0PT09ImluY2x1ZGVzIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgaW5jbHVkZSAiJHtpLmluY2x1ZGVzfSJgOmkuZm9ybWF0PT09InJlZ2V4Ij9gSW52YWxpZCBzdHJpbmc6IG11c3QgbWF0Y2ggcGF0dGVybiAke2kucGF0dGVybn1gOmBJbnZhbGlkICR7bltpLmZvcm1hdF0/P3MuZm9ybWF0fWB9Y2FzZSJub3RfbXVsdGlwbGVfb2YiOnJldHVybmBJbnZhbGlkIG51bWJlcjogbXVzdCBiZSBhIG11bHRpcGxlIG9mICR7cy5kaXZpc29yfWA7Y2FzZSJ1bnJlY29nbml6ZWRfa2V5cyI6cmV0dXJuYFVucmVjb2duaXplZCBrZXkke3Mua2V5cy5sZW5ndGg+MT8icyI6IiJ9OiAke0FyKHMua2V5cywiLCAiKX1gO2Nhc2UiaW52YWxpZF9rZXkiOnJldHVybmBJbnZhbGlkIGtleSBpbiAke3Mub3JpZ2lufWA7Y2FzZSJpbnZhbGlkX3VuaW9uIjpyZXR1cm4gcy5vcHRpb25zJiZBcnJheS5pc0FycmF5KHMub3B0aW9ucykmJnMub3B0aW9ucy5sZW5ndGg+MD9gSW52YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlLiBFeHBlY3RlZCAke3Mub3B0aW9ucy5tYXAoYT0+YCcke2F9J2ApLmpvaW4oIiB8ICIpfWA6cy5pbmNsdXNpdmU9PT0hMT8iSW52YWxpZCBpbnB1dDogbW9yZSB0aGFuIG9uZSBvcHRpb24gbWF0Y2hlZCI6IkludmFsaWQgaW5wdXQiO2Nhc2UiaW52YWxpZF9lbGVtZW50IjpyZXR1cm5gSW52YWxpZCB2YWx1ZSBpbiAke3Mub3JpZ2lufWA7ZGVmYXVsdDpyZXR1cm4iSW52YWxpZCBpbnB1dCJ9fX07ZnVuY3Rpb24gdXAoKXtyZXR1cm57bG9jYWxlRXJyb3I6a20oKX19Y29uc3QgTnM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGVuOnVwfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBqYztjb25zdCBqcz1TeW1ib2woIlpvZE91dHB1dCIpLE1zPVN5bWJvbCgiWm9kSW5wdXQiKTtjbGFzcyBscHtjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwfWFkZCh0LC4uLm4pe2NvbnN0IG89blswXTtyZXR1cm4gdGhpcy5fbWFwLnNldCh0LG8pLG8mJnR5cGVvZiBvPT0ib2JqZWN0IiYmImlkImluIG8mJnRoaXMuX2lkbWFwLnNldChvLmlkLHQpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXAsdGhpc31yZW1vdmUodCl7Y29uc3Qgbj10aGlzLl9tYXAuZ2V0KHQpO3JldHVybiBuJiZ0eXBlb2Ygbj09Im9iamVjdCImJiJpZCJpbiBuJiZ0aGlzLl9pZG1hcC5kZWxldGUobi5pZCksdGhpcy5fbWFwLmRlbGV0ZSh0KSx0aGlzfWdldCh0KXtjb25zdCBuPXQuX3pvZC5wYXJlbnQ7aWYobil7Y29uc3Qgbz17Li4udGhpcy5nZXQobik/P3t9fTtkZWxldGUgby5pZDtjb25zdCByPXsuLi5vLC4uLnRoaXMuX21hcC5nZXQodCl9O3JldHVybiBPYmplY3Qua2V5cyhyKS5sZW5ndGg/cjp2b2lkIDB9cmV0dXJuIHRoaXMuX21hcC5nZXQodCl9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfX1mdW5jdGlvbiBrbygpe3JldHVybiBuZXcgbHB9KGpjPWdsb2JhbFRoaXMpLl9fem9kX2dsb2JhbFJlZ2lzdHJ5Pz8oamMuX196b2RfZ2xvYmFsUmVnaXN0cnk9a28oKSk7Y29uc3QgcGU9Z2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxSZWdpc3RyeSxEcz0oKT0+e3Rocm93IG5ldyBFcnJvcigiem9kIGNvbXBpbGUoKSBpcyBub3QgYnVuZGxlZCBpbnRvIGNhcmRzIC0gc2VlIHBhY2thZ2VzL2ludGVybmFsL2NhcmQta2l0L3ZpdGUtc2xpbS5tanMiKX07Y2xhc3MgcXMgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgTHMgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgVXMgZXh0ZW5kcyBFcnJvcnt9Y29uc3QgSHM9RHMsRnM9RHMsU209RHM7ZnVuY3Rpb24gU28oZSl7cmV0dXJuIGUuY2hlY2tzJiYoZS5jaGVja3M9Wy4uLmUuY2hlY2tzXSksZX1mdW5jdGlvbiBkcChlLHQpe3JldHVybiBuZXcgZShTbyh7dHlwZToic3RyaW5nIiwuLi5fKHQpfSkpfWZ1bmN0aW9uIHBwKGUsdCl7cmV0dXJuIG5ldyBlKFNvKHt0eXBlOiJzdHJpbmciLGNvZXJjZTohMCwuLi5fKHQpfSkpfWZ1bmN0aW9uIEJzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1haWwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gVnMoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJndWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIEpzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBLcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIFdzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY2IiwuLi5fKHQpfSl9ZnVuY3Rpb24gR3MoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjciLC4uLl8odCl9KX1mdW5jdGlvbiAkbyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBZcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtb2ppIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFFzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibmFub2lkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFhzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBlaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQyIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidWxpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBuaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InhpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBvaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImtzdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHJpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBzaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gZnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJtYWMiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gaWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gYWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gY2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gdWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjR1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gbGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlMTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3JlZGl0X2NhcmQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gbXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpYmFuIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiand0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWNvbnN0IHBpPXtBbnk6bnVsbCxNaW51dGU6LTEsU2Vjb25kOjAsTWlsbGlzZWNvbmQ6MyxNaWNyb3NlY29uZDo2fTtmdW5jdGlvbiBmaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGV0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsb2Zmc2V0OiExLGxvY2FsOiExLHByZWNpc2lvbjpudWxsLC4uLl8odCl9KX1mdW5jdGlvbiBoaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gbWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIscHJlY2lzaW9uOm51bGwsLi4uXyh0KX0pfWZ1bmN0aW9uIGdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZHVyYXRpb24iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gZ3AoZSx0KXtyZXR1cm4gbmV3IGUoU28oe3R5cGU6Im51bWJlciIsY2hlY2tzOltdLC4uLl8odCl9KSl9ZnVuY3Rpb24gdnAoZSx0KXtyZXR1cm4gbmV3IGUoU28oe3R5cGU6Im51bWJlciIsY29lcmNlOiEwLGNoZWNrczpbXSwuLi5fKHQpfSkpfWZ1bmN0aW9uIGJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InNhZmVpbnQiLC4uLl8odCl9KX1mdW5jdGlvbiBfcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDMyIiwuLi5fKHQpfSl9ZnVuY3Rpb24geXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIHdwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDMyIiwuLi5fKHQpfSl9ZnVuY3Rpb24ga3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDMyIiwuLi5fKHQpfSl9ZnVuY3Rpb24gU3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLC4uLl8odCl9KX1mdW5jdGlvbiAkcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsY29lcmNlOiEwLC4uLl8odCl9KX1mdW5jdGlvbiB6cChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IiwuLi5fKHQpfSl9ZnVuY3Rpb24gVHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY29lcmNlOiEwLC4uLl8odCl9KX1mdW5jdGlvbiBQcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIElwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIHhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzeW1ib2wiLC4uLl8odCl9KX1mdW5jdGlvbiBFcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidW5kZWZpbmVkIiwuLi5fKHQpfSl9ZnVuY3Rpb24gUnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGwiLC4uLl8odCl9KX1mdW5jdGlvbiBDcChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFueSJ9KX1mdW5jdGlvbiBacChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVua25vd24ifSl9ZnVuY3Rpb24gT3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5ldmVyIiwuLi5fKHQpfSl9ZnVuY3Rpb24gQXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InZvaWQiLC4uLl8odCl9KX1mdW5jdGlvbiBOcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsLi4uXyh0KX0pfWZ1bmN0aW9uIGpwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIixjb2VyY2U6ITAsLi4uXyh0KX0pfWZ1bmN0aW9uIE1wKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuYW4iLC4uLl8odCl9KX1mdW5jdGlvbiBUZShlLHQpe3JldHVybiBuZXcgX3Moe2NoZWNrOiJsZXNzX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiBpZShlLHQpe3JldHVybiBuZXcgX3Moe2NoZWNrOiJsZXNzX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiBQZShlLHQpe3JldHVybiBuZXcgeXMoe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiBhZShlLHQpe3JldHVybiBuZXcgeXMoe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiB6byhlKXtyZXR1cm4gUGUoMCxlKX1mdW5jdGlvbiBUbyhlKXtyZXR1cm4gVGUoMCxlKX1mdW5jdGlvbiBQbyhlKXtyZXR1cm4gaWUoMCxlKX1mdW5jdGlvbiBJbyhlKXtyZXR1cm4gYWUoMCxlKX1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBuZXcgaGwoe2NoZWNrOiJtdWx0aXBsZV9vZiIsLi4uXyh0KSx2YWx1ZTplfSl9ZnVuY3Rpb24gQmUoZSx0KXtyZXR1cm4gbmV3IHZsKHtjaGVjazoibWF4X3NpemUiLC4uLl8odCksbWF4aW11bTplfSl9ZnVuY3Rpb24gSWUoZSx0KXtyZXR1cm4gbmV3IGJsKHtjaGVjazoibWluX3NpemUiLC4uLl8odCksbWluaW11bTplfSl9ZnVuY3Rpb24gcnQoZSx0KXtyZXR1cm4gbmV3IF9sKHtjaGVjazoic2l6ZV9lcXVhbHMiLC4uLl8odCksc2l6ZTplfSl9ZnVuY3Rpb24gc3QoZSx0KXtyZXR1cm4gbmV3IHlsKHtjaGVjazoibWF4X2xlbmd0aCIsLi4uXyh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBaZShlLHQpe3JldHVybiBuZXcgd2woe2NoZWNrOiJtaW5fbGVuZ3RoIiwuLi5fKHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIGl0KGUsdCl7cmV0dXJuIG5ldyBrbCh7Y2hlY2s6Imxlbmd0aF9lcXVhbHMiLC4uLl8odCksbGVuZ3RoOmV9KX1mdW5jdGlvbiBGdChlLHQpe3JldHVybiBuZXcgU2woe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InJlZ2V4IiwuLi5fKHQpLHBhdHRlcm46ZX0pfWZ1bmN0aW9uIEJ0KGUpe3JldHVybiBuZXcgJGwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6Imxvd2VyY2FzZSIsLi4uXyhlKX0pfWZ1bmN0aW9uIFZ0KGUpe3JldHVybiBuZXcgemwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InVwcGVyY2FzZSIsLi4uXyhlKX0pfWZ1bmN0aW9uIEp0KGUsdCl7cmV0dXJuIG5ldyBUbCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLC4uLl8odCksaW5jbHVkZXM6ZX0pfWZ1bmN0aW9uIEt0KGUsdCl7cmV0dXJuIG5ldyBQbCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLC4uLl8odCkscHJlZml4OmV9KX1mdW5jdGlvbiBXdChlLHQpe3JldHVybiBuZXcgSWwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImVuZHNfd2l0aCIsLi4uXyh0KSxzdWZmaXg6ZX0pfWZ1bmN0aW9uIHhvKGUsdCxuKXtyZXR1cm4gbmV3IHhsKHtjaGVjazoicHJvcGVydHkiLHByb3BlcnR5OmUsc2NoZW1hOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIEd0KGUsdCl7cmV0dXJuIG5ldyBFbCh7Y2hlY2s6InByb3BlcnRpZXMiLHNoYXBlOmUsLi4uXyh0KX0pfWZ1bmN0aW9uIFl0KGUsdCl7cmV0dXJuIG5ldyBSbCh7Y2hlY2s6Im1pbWVfdHlwZSIsbWltZTplLC4uLl8odCl9KX1mdW5jdGlvbiB3ZShlKXtyZXR1cm4gbmV3IENsKHtjaGVjazoib3ZlcndyaXRlIix0eDplfSl9ZnVuY3Rpb24gUXQoZSl7cmV0dXJuIHdlKHQ9PnQubm9ybWFsaXplKGUpKX1mdW5jdGlvbiBYdCgpe3JldHVybiB3ZShlPT5lLnRyaW0oKSl9ZnVuY3Rpb24gZW4oKXtyZXR1cm4gd2UoZT0+ZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiB0bigpe3JldHVybiB3ZShlPT5lLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIG5uKCl7cmV0dXJuIHdlKGU9PmN1KGUpKX1mdW5jdGlvbiBEcChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJhcnJheSIsZWxlbWVudDp0LC4uLl8obil9KX1mdW5jdGlvbiAkbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LC4uLl8obil9KX1mdW5jdGlvbiB6bShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGluY2x1c2l2ZTohMSwuLi5fKG4pfSl9ZnVuY3Rpb24gVG0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczpuLGRpc2NyaW1pbmF0b3I6dCwuLi5fKG8pfSl9ZnVuY3Rpb24gUG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OnQscmlnaHQ6bn0pfWZ1bmN0aW9uIEltKGUsdCxuLG8pe2NvbnN0IHI9biBpbnN0YW5jZW9mIHoscz1yP286bixpPXI/bjpudWxsO3JldHVybiBuZXcgZSh7dHlwZToidHVwbGUiLGl0ZW1zOnQscmVzdDppLC4uLl8ocyl9KX1mdW5jdGlvbiB4bShlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLl8obyl9KX1mdW5jdGlvbiBFbShlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im1hcCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLl8obyl9KX1mdW5jdGlvbiBSbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTp0LC4uLl8obil9KX1mdW5jdGlvbiBDbShlLHQsbil7Y29uc3Qgbz1BcnJheS5pc0FycmF5KHQpP09iamVjdC5mcm9tRW50cmllcyh0Lm1hcChyPT5bcixyXSkpOnQ7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm8sLi4uXyhuKX0pfWZ1bmN0aW9uIFptKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gT20oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkodCk/dDpbdF0sLi4uXyhuKX0pfWZ1bmN0aW9uIHFwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJmaWxlIiwuLi5fKHQpfSl9ZnVuY3Rpb24gQW0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOnR9KX1mdW5jdGlvbiBObShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gam0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGxhYmxlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIE1tKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTp0LGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/bigpOnNvKG4pfX0pfWZ1bmN0aW9uIERtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gcW0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gTG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY2F0Y2giLGlubmVyVHlwZTp0LGNhdGNoVmFsdWU6dHlwZW9mIG49PSJmdW5jdGlvbiI/bjplcyhuKX0pfWZ1bmN0aW9uIFVtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InBpcGUiLGluOnQsb3V0Om59KX1mdW5jdGlvbiBIbShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gRm0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gQm0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxhenkiLGdldHRlcjp0fSl9ZnVuY3Rpb24gVm0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gTHAoZSx0LG4pe2NvbnN0IG89XyhuKTtyZXR1cm4gby5hYm9ydD8/KG8uYWJvcnQ9ITApLG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ub30pfWZ1bmN0aW9uIFVwKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi5fKG4pfSl9ZnVuY3Rpb24gSHAoZSx0KXtjb25zdCBuPUZwKG89PihvLmFkZElzc3VlPXI9PntpZih0eXBlb2Ygcj09InN0cmluZyIpby5pc3N1ZXMucHVzaChRZShyLG8udmFsdWUsbi5fem9kLmRlZikpO2Vsc2V7Y29uc3Qgcz1yO3MuZmF0YWwmJihzLmNvbnRpbnVlPSExKSxzLmNvZGU/PyhzLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBzfHwocy5pbnB1dD1vLnZhbHVlKSxzLmluc3Q/PyhzLmluc3Q9bikscy5jb250aW51ZT8/KHMuY29udGludWU9IW4uX3pvZC5kZWYuYWJvcnQpLG8uaXNzdWVzLnB1c2goUWUocykpfX0sZShvLnZhbHVlLG8pKSx0KTtyZXR1cm4gbn1mdW5jdGlvbiBGcChlLHQpe2NvbnN0IG49bmV3IFUoe2NoZWNrOiJjdXN0b20iLC4uLl8odCl9KTtyZXR1cm4gbi5fem9kLmNoZWNrPWUsbn1mdW5jdGlvbiBCcChlKXtjb25zdCB0PW5ldyBVKHtjaGVjazoiZGVzY3JpYmUifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89cGUuZ2V0KG4pPz97fTtwZS5hZGQobix7Li4ubyxkZXNjcmlwdGlvbjplfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24gVnAoZSl7Y29uc3QgdD1uZXcgVSh7Y2hlY2s6Im1ldGEifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89cGUuZ2V0KG4pPz97fTtwZS5hZGQobix7Li4ubywuLi5lfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24gSnAoZSx0KXtjb25zdCBuPV8odCk7bGV0IG89bi50cnV0aHk/P1sidHJ1ZSIsIjEiLCJ5ZXMiLCJvbiIsInkiLCJlbmFibGVkIl0scj1uLmZhbHN5Pz9bImZhbHNlIiwiMCIsIm5vIiwib2ZmIiwibiIsImRpc2FibGVkIl07bi5jYXNlIT09InNlbnNpdGl2ZSImJihvPW8ubWFwKGI9PnR5cGVvZiBiPT0ic3RyaW5nIj9iLnRvTG93ZXJDYXNlKCk6Yikscj1yLm1hcChiPT50eXBlb2YgYj09InN0cmluZyI/Yi50b0xvd2VyQ2FzZSgpOmIpKTtjb25zdCBzPW5ldyBTZXQobyksaT1uZXcgU2V0KHIpLGE9ZS5Db2RlYz8/T3MsYz1lLkJvb2xlYW4/P0lzLHU9ZS5TdHJpbmc/P0h0LGw9bmV3IHUoe3R5cGU6InN0cmluZyIsZXJyb3I6bi5lcnJvcn0pLHA9bmV3IGMoe3R5cGU6ImJvb2xlYW4iLGVycm9yOm4uZXJyb3J9KSxtPW5ldyBhKHt0eXBlOiJwaXBlIixpbjpsLG91dDpwLHRyYW5zZm9ybTooKGIseSk9PntsZXQgaz1iO3JldHVybiBuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKGs9ay50b0xvd2VyQ2FzZSgpKSxzLmhhcyhrKT8hMDppLmhhcyhrKT8hMTooeS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsZXhwZWN0ZWQ6InN0cmluZ2Jvb2wiLHZhbHVlczpbLi4ucywuLi5pXSxpbnB1dDp5LnZhbHVlLGluc3Q6bSxjb250aW51ZTohMX0pLHt9KX0pLHJldmVyc2VUcmFuc2Zvcm06KChiLHkpPT5iPT09ITA/b1swXXx8InRydWUiOnJbMF18fCJmYWxzZSIpLGVycm9yOm4uZXJyb3J9KTtyZXR1cm4gbS5fem9kLmJhZy50cnV0aHk9byxtLl96b2QuYmFnLmZhbHN5PXIsbS5fem9kLmJhZy5jYXNlPW4uY2FzZT8/Imluc2Vuc2l0aXZlIixtfWZ1bmN0aW9uIGF0KGUsdCxuLG89e30pe2NvbnN0IHI9XyhvKSxzPXtjaGVjazoic3RyaW5nX2Zvcm1hdCIsdHlwZToic3RyaW5nIixmb3JtYXQ6dCxmbjp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOmE9Pm4udGVzdChhKSwuLi5yfTtyZXR1cm4gbiBpbnN0YW5jZW9mIFJlZ0V4cCYmKHMucGF0dGVybj1uKSxuZXcgZShzKX1jb25zdCBKbT0oKT0+KHt9KSxLbT0oKT0+KHt9KSxXbT0oKT0+KHt9KSxHbT0oKT0+KHt9KSxZbT0oKT0+KHt9KSxLcD0oKT0+KCk9Pih7fSksRnI9KCk9PigpPT4oe30pLFFtPSgpPT4oe30pLGZlPSgpPT4oe30pLFhtPSgpPT4oe30pLGVnPSgpPT4oe30pLHRnPSgpPT4oe30pLG5nPSgpPT4oe30pLG9nPSgpPT4oe30pLHJnPSgpPT4oe30pLHNnPSgpPT4oe30pLGlnPSgpPT4oe30pLGFnPSgpPT4oe30pLGNnPSgpPT4oe30pLHVnPSgpPT4oe30pLGxnPSgpPT4oe30pLGRnPSgpPT4oe30pLHBnPSgpPT4oe30pLGZnPSgpPT4oe30pLGhnPSgpPT4oe30pLG1nPSgpPT4oe30pLGdnPSgpPT4oe30pLHZnPSgpPT4oe30pLGJnPSgpPT4oe30pLF9nPSgpPT4oe30pLHlnPSgpPT4oe30pLHdnPSgpPT4oe30pLGtnPSgpPT4oe30pLFNnPSgpPT4oe30pLFdwPSgpPT4oe30pLCRnPSgpPT4oe30pLHpnPSgpPT4oe30pLFRnPSgpPT4oe30pLFBnPSgpPT4oe30pLElnPSgpPT4oe30pLHhnPSgpPT4oe30pLEVnPSgpPT4oe30pLFJnPSgpPT4oe30pLENnPSgpPT4oe30pLFpnPSgpPT4oe30pLE9nPSgpPT4oe30pLEdwPSgpPT4oe30pLEFnPSgpPT4oe30pLHZpPSgpPT4oe30pO2NsYXNzIE5ne31jb25zdCBqZz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGx9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksWXA9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRab2RBbnk6JGQsJFpvZEFycmF5OnhkLCRab2RBc3luY0Vycm9yOlJlLCRab2RCYXNlNjQ6Y2QsJFpvZEJhc2U2NFVSTDpsZCwkWm9kQmlnSW50OnhzLCRab2RCaWdJbnRGb3JtYXQ6eWQsJFpvZEJvb2xlYW46SXMsJFpvZENJRFJ2NDpyZCwkWm9kQ0lEUnY2OmlkLCRab2RDVUlEOlZsLCRab2RDVUlEMjpKbCwkWm9kQ2F0Y2g6WWQsJFpvZENoZWNrOlUsJFpvZENoZWNrQmlnSW50Rm9ybWF0OmdsLCRab2RDaGVja0VuZHNXaXRoOklsLCRab2RDaGVja0dyZWF0ZXJUaGFuOnlzLCRab2RDaGVja0luY2x1ZGVzOlRsLCRab2RDaGVja0xlbmd0aEVxdWFsczprbCwkWm9kQ2hlY2tMZXNzVGhhbjpfcywkWm9kQ2hlY2tMb3dlckNhc2U6JGwsJFpvZENoZWNrTWF4TGVuZ3RoOnlsLCRab2RDaGVja01heFNpemU6dmwsJFpvZENoZWNrTWltZVR5cGU6UmwsJFpvZENoZWNrTWluTGVuZ3RoOndsLCRab2RDaGVja01pblNpemU6YmwsJFpvZENoZWNrTXVsdGlwbGVPZjpobCwkWm9kQ2hlY2tOdW1iZXJGb3JtYXQ6bWwsJFpvZENoZWNrT3ZlcndyaXRlOkNsLCRab2RDaGVja1Byb3BlcnRpZXM6RWwsJFpvZENoZWNrUHJvcGVydHk6eGwsJFpvZENoZWNrUmVnZXg6U2wsJFpvZENoZWNrU2l6ZUVxdWFsczpfbCwkWm9kQ2hlY2tTdGFydHNXaXRoOlBsLCRab2RDaGVja1N0cmluZ0Zvcm1hdDpVdCwkWm9kQ2hlY2tVcHBlckNhc2U6emwsJFpvZENvZGVjOk9zLCRab2RDcmVkaXRDYXJkOmZkLCRab2RDdXN0b206cnAsJFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpiZCwkWm9kQ3ljbGljRXJyb3I6c3AsJFpvZERhdGU6SWQsJFpvZERlZmF1bHQ6SmQsJFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpOZCwkWm9kRTE2NDpkZCwkWm9kRW1haWw6TWwsJFpvZEVtb2ppOkZsLCRab2RFbmNvZGVFcnJvcjpwbywkWm9kRW51bTpMZCwkWm9kRXJyb3I6eHUsJFpvZEV4YWN0T3B0aW9uYWw6QmQsJFpvZEZpbGU6SGQsJFpvZEZ1bmN0aW9uOm5wLCRab2RHVUlEOk5sLCRab2RJQkFOOm1kLCRab2RJUHY0OnRkLCRab2RJUHY2Om5kLCRab2RJU09EYXRlOlFsLCRab2RJU09EYXRlVGltZTpZbCwkWm9kSVNPRHVyYXRpb246ZWQsJFpvZElTT1RpbWU6WGwsJFpvZEludGVyc2VjdGlvbjpqZCwkWm9kSldUOnZkLCRab2RLU1VJRDpHbCwkWm9kTGF6eTpBcywkWm9kTGl0ZXJhbDpVZCwkWm9kTUFDOm9kLCRab2RNYXA6RGQsJFpvZE5hTjpRZCwkWm9kTmFub0lEOkJsLCRab2ROZXZlcjpUZCwkWm9kTm9uT3B0aW9uYWw6V2QsJFpvZE51bGw6U2QsJFpvZE51bGxhYmxlOlZkLCRab2ROdW1iZXI6UHMsJFpvZE51bWJlckZvcm1hdDpfZCwkWm9kT2JqZWN0OkNkLCRab2RPYmplY3RKSVQ6WmQsJFpvZE9wdGlvbmFsOkNzLCRab2RQaXBlOlpzLCRab2RQcmVmYXVsdDpLZCwkWm9kUHJlcHJvY2VzczpYZCwkWm9kUHJvbWlzZTpvcCwkWm9kUmVhZG9ubHk6ZXAsJFpvZFJlYWxFcnJvcjpjZSwkWm9kUmVjb3JkOk1kLCRab2RSZWdpc3RyeTpscCwkWm9kU2V0OnFkLCRab2RTdHJpbmc6SHQsJFpvZFN0cmluZ0Zvcm1hdDpELCRab2RTdWNjZXNzOkdkLCRab2RTeW1ib2w6d2QsJFpvZFRlbXBsYXRlTGl0ZXJhbDp0cCwkWm9kVHJhbnNmb3JtOkZkLCRab2RUdXBsZTpScywkWm9kVHlwZTp6LCRab2RVTElEOktsLCRab2RVUkw6SGwsJFpvZFVVSUQ6amwsJFpvZFVuZGVmaW5lZDprZCwkWm9kVW5pb246eW8sJFpvZFVua25vd246emQsJFpvZFZvaWQ6UGQsJFpvZFhJRDpXbCwkWm9kWG9yOk9kLCRicmFuZDpvcywkY29uc3RydWN0b3I6ZCwkaW5wdXQ6TXMsJG91dHB1dDpqcyxEb2M6WmwsSU5WQUxJRDpxcyxKU09OU2NoZW1hOmpnLEpTT05TY2hlbWFHZW5lcmF0b3I6TmcsTkVWRVI6bnMsVGltZVByZWNpc2lvbjpwaSxVUkxfQkFEX0ZPUk1BVDprcyxVUkxfVU5QQVJTRUFCTEU6eHQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6THMsWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6VXMsX2FueTpDcCxfYXJyYXk6RHAsX2Jhc2U2NDpjaSxfYmFzZTY0dXJsOnVpLF9iaWdpbnQ6enAsX2Jvb2xlYW46U3AsX2NhdGNoOkxtLF9jaGVjazpGcCxfY2lkcnY0OmlpLF9jaWRydjY6YWksX2NvZXJjZWRCaWdpbnQ6VHAsX2NvZXJjZWRCb29sZWFuOiRwLF9jb2VyY2VkRGF0ZTpqcCxfY29lcmNlZE51bWJlcjp2cCxfY29lcmNlZFN0cmluZzpwcCxfY3JlZGl0Q2FyZDpocCxfY3VpZDpYcyxfY3VpZDI6ZWksX2N1c3RvbTpMcCxfZGF0ZTpOcCxfZGVjb2RlOmFzLF9kZWNvZGVBc3luYzp1cyxfZGVmYXVsdDpNbSxfZGlzY3JpbWluYXRlZFVuaW9uOlRtLF9lMTY0OmxpLF9lbWFpbDpCcyxfZW1vamk6WXMsX2VuY29kZTppcyxfZW5jb2RlQXN5bmM6Y3MsX2VuZHNXaXRoOld0LF9lbnVtOkNtLF9maWxlOnFwLF9mbG9hdDMyOl9wLF9mbG9hdDY0OnlwLF9ndDpQZSxfZ3RlOmFlLF9ndWlkOlZzLF9pYmFuOm1wLF9pbmNsdWRlczpKdCxfaW50OmJwLF9pbnQzMjp3cCxfaW50NjQ6UHAsX2ludGVyc2VjdGlvbjpQbSxfaXB2NDpyaSxfaXB2NjpzaSxfaXNvRGF0ZTpoaSxfaXNvRGF0ZVRpbWU6ZmksX2lzb0R1cmF0aW9uOmdpLF9pc29UaW1lOm1pLF9qd3Q6ZGksX2tzdWlkOm9pLF9sYXp5OkJtLF9sZW5ndGg6aXQsX2xpdGVyYWw6T20sX2xvd2VyY2FzZTpCdCxfbHQ6VGUsX2x0ZTppZSxfbWFjOmZwLF9tYXA6RW0sX21heDppZSxfbWF4TGVuZ3RoOnN0LF9tYXhTaXplOkJlLF9taW1lOll0LF9taW46YWUsX21pbkxlbmd0aDpaZSxfbWluU2l6ZTpJZSxfbXVsdGlwbGVPZjpEZSxfbmFuOk1wLF9uYW5vaWQ6UXMsX25hdGl2ZUVudW06Wm0sX25lZ2F0aXZlOlRvLF9uZXZlcjpPcCxfbm9ubmVnYXRpdmU6SW8sX25vbm9wdGlvbmFsOkRtLF9ub25wb3NpdGl2ZTpQbyxfbm9ybWFsaXplOlF0LF9udWxsOlJwLF9udWxsYWJsZTpqbSxfbnVtYmVyOmdwLF9vcHRpb25hbDpObSxfb3ZlcndyaXRlOndlLF9wYXJzZTpOdCxfcGFyc2VBc3luYzpqdCxfcGlwZTpVbSxfcG9zaXRpdmU6em8sX3Byb21pc2U6Vm0sX3Byb3BlcnRpZXM6R3QsX3Byb3BlcnR5OnhvLF9yZWFkb25seTpIbSxfcmVjb3JkOnhtLF9yZWZpbmU6VXAsX3JlZ2V4OkZ0LF9zYWZlRGVjb2RlOmRzLF9zYWZlRGVjb2RlQXN5bmM6ZnMsX3NhZmVFbmNvZGU6bHMsX3NhZmVFbmNvZGVBc3luYzpwcyxfc2FmZVBhcnNlOk10LF9zYWZlUGFyc2VBc3luYzpEdCxfc2V0OlJtLF9zaXplOnJ0LF9zbHVnaWZ5Om5uLF9zdGFydHNXaXRoOkt0LF9zdHJpbmc6ZHAsX3N0cmluZ0Zvcm1hdDphdCxfc3RyaW5nYm9vbDpKcCxfc3VjY2VzczpxbSxfc3VwZXJSZWZpbmU6SHAsX3N5bWJvbDp4cCxfdGVtcGxhdGVMaXRlcmFsOkZtLF90b0xvd2VyQ2FzZTplbixfdG9VcHBlckNhc2U6dG4sX3RyYW5zZm9ybTpBbSxfdHJpbTpYdCxfdHVwbGU6SW0sX3VpbnQzMjprcCxfdWludDY0OklwLF91bGlkOnRpLF91bmRlZmluZWQ6RXAsX3VuaW9uOiRtLF91bmtub3duOlpwLF91cHBlcmNhc2U6VnQsX3VybDokbyxfdXVpZDpKcyxfdXVpZHY0OktzLF91dWlkdjY6V3MsX3V1aWR2NzpHcyxfdm9pZDpBcCxfeGlkOm5pLF94b3I6em0sYmFzZTY0Q2hhcnNldDphZCxiYXNlNjR1cmxDaGFyc2V0OlRzLGNhblBhcnNlVVJMOlNzLGNsb25lOkgsY29tcGlsZTpIcyxjb21waWxlRm46U20sY29uZmlnOkosY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kOkZyLGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZDpLcCxkZWNvZGU6RWgsZGVjb2RlQXN5bmM6Q2gsZGVzY3JpYmU6QnAsZW5jb2RlOnhoLGVuY29kZUFzeW5jOlJoLGV4dHJhY3REZWZzOkdtLGZpbmFsaXplOlltLGZsYXR0ZW5FcnJvcjpmbyxmb3JtYXRFcnJvcjpobyxnZXREaXNjcmltaW5hdGVkT3B0aW9uOkVzLGdsb2JhbENvbmZpZzpuZSxnbG9iYWxSZWdpc3RyeTpwZSxoYW5kbGVVbnJlcHJlc2VudGFibGU6S20saW5pdGlhbGl6ZUNvbnRleHQ6Sm0saXNCYWNrRWRnZTpjcCxpc1JlY3Vyc2l2ZVNjaGVtYTpfbSxpc1ZhbGlkQmFzZTY0OnpzLGlzVmFsaWRCYXNlNjRVUkw6dWQsaXNWYWxpZENJRFJ2NjpzZCxpc1ZhbGlkQ3JlZGl0Q2FyZDpwZCxpc1ZhbGlkSUJBTjpoZCxpc1ZhbGlkSVB2Njokcyxpc1ZhbGlkSldUOmdkLGxvY2FsZXM6TnMsbWVtb2l6ZXI6d28sbWVyZ2VWYWx1ZXM6WG4sbWV0YTpWcCxwYXJzZTpNcixwYXJzZUFzeW5jOkRyLHBhcnNlVVJMT2JqZWN0OnFsLHByZXR0aWZ5RXJyb3I6c3MscHJvY2VzczpRbSxwcm9jZXNzU2NoZW1hOldtLHJlZ2V4ZXM6X28scmVnaXN0cnk6a28sc2FmZURlY29kZTpPaCxzYWZlRGVjb2RlQXN5bmM6Tmgsc2FmZUVuY29kZTpaaCxzYWZlRW5jb2RlQXN5bmM6QWgsc2FmZVBhcnNlOlJ1LHNhZmVQYXJzZUFzeW5jOnpoLHN0YW5kYXJkUHJvcHM6d3Msc3RyaXBUYWJBbmROZXdsaW5lOkxyLHRvRG90UGF0aDpFdSx0b0pTT05TY2hlbWE6dmksdG9ab2Q6b28sdHJlZWlmeUVycm9yOnJzLHVybEhvc3RuYW1lT2s6TGwsdXJsUHJvdG9jb2xPazpVbCx1dGlsOnRzLHZhbGlkYXRlOmdvLHZhbGlkYXRlQXN5bmM6dm8sdmFsaWRhdGVVUkw6RGwsdmVyc2lvbjpPbCx3aXRoUGFyc2VyOkZzfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLE1jPVN5bWJvbCgiei52aXNpdC9yZXNvbHZpbmciKTtmdW5jdGlvbiBiaShlLHQpe2NvbnN0IG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDooaSxhKT0+e2NvbnN0IGM9dFtpLl96b2QuZGVmLnR5cGVdO3JldHVybiBjP2MoaSxhKTppfSxvPW5ldyBNYXA7ZnVuY3Rpb24gcihpKXtjb25zdCBhPW8uZ2V0KGkpO2lmKGE9PT1NYylyZXR1cm4gbmV3IEFzKHt0eXBlOiJsYXp5IixnZXR0ZXI6KCk9Pm8uZ2V0KGkpfSk7aWYoYSE9PXZvaWQgMClyZXR1cm4gYTtvLnNldChpLE1jKTtjb25zdCBjPXMoaSksdT1uKGMsYyE9PWkpO3JldHVybiBvLnNldChpLHUpLHV9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPWkuX3pvZC5kZWY7c3dpdGNoKGEudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCB1PWEuc2hhcGUsbD1PYmplY3Qua2V5cyh1KTtsZXQgcD0hMTtjb25zdCBtPXt9O2Zvcihjb25zdCB5IG9mIGwpe2NvbnN0IGs9cih1W3ldKTtrIT09dVt5XSYmKHA9ITApLG1beV09a31sZXQgYj1hLmNhdGNoYWxsO3JldHVybiBhLmNhdGNoYWxsJiYoYj1yKGEuY2F0Y2hhbGwpLGIhPT1hLmNhdGNoYWxsJiYocD0hMCkpLHA/SChpLHsuLi5hLHNoYXBlOm0sY2F0Y2hhbGw6Yn0pOml9Y2FzZSJhcnJheSI6e2NvbnN0IHU9cihhLmVsZW1lbnQpO3JldHVybiB1PT09YS5lbGVtZW50P2k6SChpLHsuLi5hLGVsZW1lbnQ6dX0pfWNhc2UidHVwbGUiOntjb25zdCB1PWEuaXRlbXM7bGV0IGw9ITE7Y29uc3QgcD1bXTtmb3IoY29uc3QgYiBvZiB1KXtjb25zdCB5PXIoYik7eSE9PWImJihsPSEwKSxwLnB1c2goeSl9bGV0IG09YS5yZXN0O3JldHVybiBhLnJlc3QmJihtPXIoYS5yZXN0KSxtIT09YS5yZXN0JiYobD0hMCkpLGw/SChpLHsuLi5hLGl0ZW1zOnAscmVzdDptfSk6aX1jYXNlInJlY29yZCI6Y2FzZSJtYXAiOntjb25zdCB1PXIoYS5rZXlUeXBlKSxsPXIoYS52YWx1ZVR5cGUpO3JldHVybiB1PT09YS5rZXlUeXBlJiZsPT09YS52YWx1ZVR5cGU/aTpIKGksey4uLmEsa2V5VHlwZTp1LHZhbHVlVHlwZTpsfSl9Y2FzZSJzZXQiOntjb25zdCB1PXIoYS52YWx1ZVR5cGUpO3JldHVybiB1PT09YS52YWx1ZVR5cGU/aTpIKGksey4uLmEsdmFsdWVUeXBlOnV9KX1jYXNlInVuaW9uIjp7Y29uc3QgdT1hLm9wdGlvbnM7bGV0IGw9ITE7Y29uc3QgcD1bXTtmb3IoY29uc3QgbSBvZiB1KXtjb25zdCBiPXIobSk7YiE9PW0mJihsPSEwKSxwLnB1c2goYil9cmV0dXJuIGw/SChpLHsuLi5hLG9wdGlvbnM6cH0pOml9Y2FzZSJpbnRlcnNlY3Rpb24iOntjb25zdCB1PXIoYS5sZWZ0KSxsPXIoYS5yaWdodCk7cmV0dXJuIHU9PT1hLmxlZnQmJmw9PT1hLnJpZ2h0P2k6SChpLHsuLi5hLGxlZnQ6dSxyaWdodDpsfSl9Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6e2NvbnN0IHU9cihhLmlubmVyVHlwZSk7cmV0dXJuIHU9PT1hLmlubmVyVHlwZT9pOkgoaSx7Li4uYSxpbm5lclR5cGU6dX0pfWNhc2UicGlwZSI6e2NvbnN0IHU9cihhLmluKSxsPXIoYS5vdXQpO3JldHVybiB1PT09YS5pbiYmbD09PWEub3V0P2k6SChpLHsuLi5hLGluOnUsb3V0Omx9KX1jYXNlImZ1bmN0aW9uIjp7Y29uc3QgdT1yKGEuaW5wdXQpLGw9cihhLm91dHB1dCk7cmV0dXJuIHU9PT1hLmlucHV0JiZsPT09YS5vdXRwdXQ/aTpIKGksey4uLmEsaW5wdXQ6dSxvdXRwdXQ6bH0pfWNhc2UibGF6eSI6e2NvbnN0IHU9YS5nZXR0ZXIse19jYWNoZWRJbm5lcjpsLC4uLnB9PWE7cmV0dXJuIEgoaSx7Li4ucCxnZXR0ZXI6KCk9PnIodSgpKX0pfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpyZXR1cm4gaTtkZWZhdWx0OnJldHVybiBpfX1yZXR1cm4gcihlKX1mdW5jdGlvbiBfaShlKXtyZXR1cm4hIWUuX3pvZH1mdW5jdGlvbiBRcChlLHQpe3JldHVybiBfaShlKT9SdShlLHQpOmUuc2FmZVBhcnNlKHQpfWZ1bmN0aW9uIE1nKGUpe2lmKCFlKXJldHVybjtsZXQgdDtpZihfaShlKT90PWUuX3pvZD8uZGVmPy5zaGFwZTp0PWUuc2hhcGUsISF0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil0cnl7cmV0dXJuIHQoKX1jYXRjaHtyZXR1cm59cmV0dXJuIHR9fWZ1bmN0aW9uIERnKGUpe2lmKF9pKGUpKXtjb25zdCBzPWUuX3pvZD8uZGVmO2lmKHMpe2lmKHMudmFsdWUhPT12b2lkIDApcmV0dXJuIHMudmFsdWU7aWYoQXJyYXkuaXNBcnJheShzLnZhbHVlcykmJnMudmFsdWVzLmxlbmd0aD4wKXJldHVybiBzLnZhbHVlc1swXX19Y29uc3Qgbj1lLl9kZWY7aWYobil7aWYobi52YWx1ZSE9PXZvaWQgMClyZXR1cm4gbi52YWx1ZTtpZihBcnJheS5pc0FycmF5KG4udmFsdWVzKSYmbi52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIG4udmFsdWVzWzBdfWNvbnN0IG89ZS52YWx1ZTtpZihvIT09dm9pZCAwKXJldHVybiBvfWNvbnN0IHFnPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbmRzV2l0aDpXdCxndDpQZSxndGU6YWUsaW5jbHVkZXM6SnQsbGVuZ3RoOml0LGxvd2VyY2FzZTpCdCxsdDpUZSxsdGU6aWUsbWF4TGVuZ3RoOnN0LG1heFNpemU6QmUsbWltZTpZdCxtaW5MZW5ndGg6WmUsbWluU2l6ZTpJZSxtdWx0aXBsZU9mOkRlLG5lZ2F0aXZlOlRvLG5vbm5lZ2F0aXZlOklvLG5vbnBvc2l0aXZlOlBvLG5vcm1hbGl6ZTpRdCxvdmVyd3JpdGU6d2UscG9zaXRpdmU6em8scHJvcGVydGllczpHdCxwcm9wZXJ0eTp4byxyZWdleDpGdCxzaXplOnJ0LHNsdWdpZnk6bm4sc3RhcnRzV2l0aDpLdCx0b0xvd2VyQ2FzZTplbix0b1VwcGVyQ2FzZTp0bix0cmltOlh0LHVwcGVyY2FzZTpWdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxEYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKTtmdW5jdGlvbiBGbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz1uKHRoaXMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pfWNvbnN0IFhwPShlLHQpPT57eHUuaW5pdChlLHQpLGUubmFtZT0iWm9kRXJyb3IiO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO0RjLmhhcyhuKXx8KERjLmFkZChuKSxGbihuLCJmb3JtYXQiLG89PnI9PmhvKG8scikpLEZuKG4sImZsYXR0ZW4iLG89PnI9PmZvKG8scikpLEZuKG4sImFkZElzc3VlIixvPT5yPT57by5pc3N1ZXMucHVzaChyKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsS24sMil9KSxGbihuLCJhZGRJc3N1ZXMiLG89PnI9PntvLmlzc3Vlcy5wdXNoKC4uLnIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3VlcyxLbiwyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJpc0VtcHR5Iix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuaXNzdWVzLmxlbmd0aD09PTB9fSkpfSxlZj1kKCJab2RFcnJvciIsWHApLHNlPWQoIlpvZEVycm9yIixYcCx2b2lkIDAse1BhcmVudDpFcnJvcn0pLHlpPU50KHNlKSx3aT1qdChzZSksa2k9TXQoc2UpLFNpPUR0KHNlKSwkaT1pcyhzZSksemk9YXMoc2UpLFRpPWNzKHNlKSxQaT11cyhzZSksSWk9bHMoc2UpLHhpPWRzKHNlKSxFaT1wcyhzZSksUmk9ZnMoc2UpO2Z1bmN0aW9uIExnKCl7bmUubG9jYWxlRXJyb3J8fEoodXAoKSl9ZnVuY3Rpb24gVmUoKXtuZS5tZW1vaXplcnx8Sih7bWVtb2l6ZXI6d28oKX0pfWNvbnN0IFA9ZCgiWm9kVHlwZSIsKGUsdCk9PihMZygpLHouaW5pdChlLHQpLGUuZGVmPXQsZS50eXBlPXQudHlwZSxlKSx7Y2hlY2soLi4uZSl7Y29uc3QgdD10aGlzLmRlZjtyZXR1cm4gdGhpcy5jbG9uZShYKHQse2NoZWNrczpbLi4udC5jaGVja3M/P1tdLC4uLmUubWFwKG49PnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tfem9kOntjaGVjazpuLGRlZjp7Y2hlY2s6ImN1c3RvbSJ9LG9uYXR0YWNoOltdfX06bildfSkse3BhcmVudDohMH0pfSx3aXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKC4uLmUpfSxjbG9uZShlLHQpe3JldHVybiBIKHRoaXMsZSx0KX0sYnJhbmQoKXtyZXR1cm4gdGhpc30scmVnaXN0ZXIoZSx0KXtyZXR1cm4gZS5hZGQodGhpcyx0KSx0aGlzfSxyZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh2cihlLHQpKX0sc3VwZXJSZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhicihlLHQpKX0sb3ZlcndyaXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKHdlKGUpKX0sb3B0aW9uYWwoKXtyZXR1cm4gcSh0aGlzKX0sZXhhY3RPcHRpb25hbCgpe3JldHVybiBZbyh0aGlzKX0sbnVsbGFibGUoKXtyZXR1cm4gdHQodGhpcyl9LG51bGxpc2goKXtyZXR1cm4gcSh0dCh0aGlzKSl9LG5vbm9wdGlvbmFsKGUpe3JldHVybiBvcih0aGlzLGUpfSxhcnJheSgpe3JldHVybiBTKHRoaXMpfSxvcihlKXtyZXR1cm4gSShbdGhpcyxlXSl9LGFuZChlKXtyZXR1cm4gX3QodGhpcyxlKX0sdHJhbnNmb3JtKGUpe3JldHVybiBSdCh0aGlzLFBuKGUpKX0sZGVmYXVsdChlKXtyZXR1cm4gZXIodGhpcyxlKX0scHJlZmF1bHQoZSl7cmV0dXJuIG5yKHRoaXMsZSl9LGNhdGNoKGUpe3JldHVybiBpcih0aGlzLGUpfSxwaXBlKGUpe3JldHVybiBSdCh0aGlzLGUpfSxyZWFkb25seSgpe3JldHVybiBscih0aGlzKX0sZGVzY3JpYmUoZSl7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuIHBlLmFkZCh0LHtkZXNjcmlwdGlvbjplfSksdH0sbWV0YSguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIHBlLmdldCh0aGlzKTtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gcGUuYWRkKHQsZVswXSksdH0saXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9LGlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc30sYXBwbHkoZSwuLi50KXtyZXR1cm4gdC5sZW5ndGg9PT0wP2UodGhpcyk6ZSh0aGlzLC4uLnQpfSxnZXQifnN0YW5kYXJkIigpe3JldHVybiBsbyh0aGlzLCJ+c3RhbmRhcmQiLHsuLi53cyh0aGlzKSxqc29uU2NoZW1hOntpbnB1dDpGcigpLG91dHB1dDpGcigpfX0pfSxzZXQifnN0YW5kYXJkIihlKXt6ZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfSxwYXJzZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHlpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxwYXJzZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgd2kodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVQYXJzZShlLHQpe3JldHVybiBraSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7cmV0dXJuIFNpKHRoaXMsZSx0KX0sZ2V0IHNwYSgpe3JldHVybiB0aGlzPy5zYWZlUGFyc2VBc3luY30sc2V0IHNwYShlKXt6ZSh0aGlzLCJzcGEiLGUpfSx2YWxpZGF0ZShlLHQpe3JldHVybiBnbyh0aGlzLGUsdCl9LHZhbGlkYXRlQXN5bmMoZSx0KXtyZXR1cm4gdm8odGhpcyxlLHQpfSxlbmNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiAkaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gemkodGhpcyx0LG4se2NhbGxlZTplfSl9LGVuY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgVGkodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgUGkodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVFbmNvZGUoZSx0KXtyZXR1cm4gSWkodGhpcyxlLHQpfSxzYWZlRGVjb2RlKGUsdCl7cmV0dXJuIHhpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZUVuY29kZUFzeW5jKGUsdCl7cmV0dXJuIEVpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZURlY29kZUFzeW5jKGUsdCl7cmV0dXJuIFJpKHRoaXMsZSx0KX0sdG9KU09OU2NoZW1hKGUpe3JldHVybiBLcCgpKGUpfSxnZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4gcGUuZ2V0KHRoaXMpPy5kZXNjcmlwdGlvbn0sZ2V0IF9kZWYoKXtyZXR1cm4gdGhpcy5fem9kLmRlZn19KSxvbj1kKCJfWm9kU3RyaW5nIiwoZSx0KT0+e0h0LmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+WG0oKX0sQXQoe2Zvcm1hdDplPT5mZSgpLmZvcm1hdD8/bnVsbCxtaW5MZW5ndGg6ZT0+ZmUoKS5taW5pbXVtPz9udWxsLG1heExlbmd0aDplPT5mZSgpLm1heGltdW0/P251bGx9LHtyZWdleCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhGdCguLi5lKSl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEp0KC4uLmUpKX0sc3RhcnRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhLdCguLi5lKSl9LGVuZHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFd0KC4uLmUpKX0sbWluKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFplKC4uLmUpKX0sbWF4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHN0KC4uLmUpKX0sbGVuZ3RoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGl0KC4uLmUpKX0sbm9uZW1wdHkoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soWmUoMSwuLi5lKSl9LGxvd2VyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhCdChlKSl9LHVwcGVyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhWdChlKSl9LHRyaW0oKXtyZXR1cm4gdGhpcy5jaGVjayhYdCgpKX0sbm9ybWFsaXplKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFF0KC4uLmUpKX0sdG9Mb3dlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhlbigpKX0sdG9VcHBlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayh0bigpKX0sc2x1Z2lmeSgpe3JldHVybiB0aGlzLmNoZWNrKG5uKCkpfX0pKSxjdD1kKCJab2RTdHJpbmciLChlLHQpPT57SHQuaW5pdChlLHQpLG9uLmluaXQoZSx0KX0se2VtYWlsKGUpe3JldHVybiB0aGlzLmNoZWNrKEJzKHJuLGUpKX0sdXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKCRvKGZ0LGUpKX0sand0KGUpe3JldHVybiB0aGlzLmNoZWNrKGRpKHduLGUpKX0sZW1vamkoZSl7cmV0dXJuIHRoaXMuY2hlY2soWXMoYW4sZSkpfSxndWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKFZzKHNuLGUpKX0sdXVpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhKcyh2ZSxlKSl9LHV1aWR2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhLcyh2ZSxlKSl9LHV1aWR2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhXcyh2ZSxlKSl9LHV1aWR2NyhlKXtyZXR1cm4gdGhpcy5jaGVjayhHcyh2ZSxlKSl9LG5hbm9pZChlKXtyZXR1cm4gdGhpcy5jaGVjayhRcyhjbixlKSl9LGN1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soWHModW4sZSkpfSxjdWlkMihlKXtyZXR1cm4gdGhpcy5jaGVjayhlaShsbixlKSl9LHVsaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2sodGkoZG4sZSkpfSxiYXNlNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soY2koYm4sZSkpfSxiYXNlNjR1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2sodWkoX24sZSkpfSx4aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2sobmkocG4sZSkpfSxrc3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhvaShmbixlKSl9LGlwdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2socmkoaG4sZSkpfSxpcHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKHNpKG1uLGUpKX0sY2lkcnY0KGUpe3JldHVybiB0aGlzLmNoZWNrKGlpKGduLGUpKX0sY2lkcnY2KGUpe3JldHVybiB0aGlzLmNoZWNrKGFpKHZuLGUpKX0sZTE2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhsaSh5bixlKSl9LGRhdGV0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKGZpKHV0LGUpKX0sZGF0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhoaShsdCxlKSl9LHRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2sobWkoZHQsZSkpfSxkdXJhdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVjayhnaShwdCxlKSl9fSk7ZnVuY3Rpb24gZihlKXtyZXR1cm4gZHAoY3QsZSl9Y29uc3QgQT1kKCJab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57RC5pbml0KGUsdCksb24uaW5pdChlLHQpfSksdXQ9ZCgiWm9kSVNPRGF0ZVRpbWUiLChlLHQpPT57WWwuaW5pdChlLHQpLEEuaW5pdChlLHQpfSksbHQ9ZCgiWm9kSVNPRGF0ZSIsKGUsdCk9PntRbC5pbml0KGUsdCksQS5pbml0KGUsdCl9KSxkdD1kKCJab2RJU09UaW1lIiwoZSx0KT0+e1hsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pLHB0PWQoIlpvZElTT0R1cmF0aW9uIiwoZSx0KT0+e2VkLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pLHJuPWQoIlpvZEVtYWlsIiwoZSx0KT0+e01sLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIENpKGUpe3JldHVybiBCcyhybixlKX1jb25zdCBzbj1kKCJab2RHVUlEIiwoZSx0KT0+e05sLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFppKGUpe3JldHVybiBWcyhzbixlKX1jb25zdCB2ZT1kKCJab2RVVUlEIiwoZSx0KT0+e2psLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE9pKGUpe3JldHVybiBKcyh2ZSxlKX1mdW5jdGlvbiBBaShlKXtyZXR1cm4gS3ModmUsZSl9ZnVuY3Rpb24gTmkoZSl7cmV0dXJuIFdzKHZlLGUpfWZ1bmN0aW9uIGppKGUpe3JldHVybiBHcyh2ZSxlKX1jb25zdCBmdD1kKCJab2RVUkwiLChlLHQpPT57SGwuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gTWkoZSl7cmV0dXJuICRvKGZ0LGUpfWZ1bmN0aW9uIERpKGUpe3JldHVybiAkbyhmdCx7cHJvdG9jb2w6aHMsaG9zdG5hbWU6WXUsLi4uXyhlKX0pfWNvbnN0IGFuPWQoIlpvZEVtb2ppIiwoZSx0KT0+e0ZsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHFpKGUpe3JldHVybiBZcyhhbixlKX1jb25zdCBjbj1kKCJab2ROYW5vSUQiLChlLHQpPT57QmwuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gTGkoZSl7cmV0dXJuIFFzKGNuLGUpfWNvbnN0IHVuPWQoIlpvZENVSUQiLChlLHQpPT57VmwuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIFhzKHVuLGUpfWNvbnN0IGxuPWQoIlpvZENVSUQyIiwoZSx0KT0+e0psLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEhpKGUpe3JldHVybiBlaShsbixlKX1jb25zdCBkbj1kKCJab2RVTElEIiwoZSx0KT0+e0tsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEZpKGUpe3JldHVybiB0aShkbixlKX1jb25zdCBwbj1kKCJab2RYSUQiLChlLHQpPT57V2wuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gQmkoZSl7cmV0dXJuIG5pKHBuLGUpfWNvbnN0IGZuPWQoIlpvZEtTVUlEIiwoZSx0KT0+e0dsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFZpKGUpe3JldHVybiBvaShmbixlKX1jb25zdCBobj1kKCJab2RJUHY0IiwoZSx0KT0+e3RkLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEppKGUpe3JldHVybiByaShobixlKX1jb25zdCBFbz1kKCJab2RNQUMiLChlLHQpPT57b2QuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gS2koZSl7cmV0dXJuIGZwKEVvLGUpfWNvbnN0IG1uPWQoIlpvZElQdjYiLChlLHQpPT57bmQuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gV2koZSl7cmV0dXJuIHNpKG1uLGUpfWNvbnN0IGduPWQoIlpvZENJRFJ2NCIsKGUsdCk9PntyZC5pbml0KGUsdCksQS5pbml0KGUsdCl9KTtmdW5jdGlvbiBHaShlKXtyZXR1cm4gaWkoZ24sZSl9Y29uc3Qgdm49ZCgiWm9kQ0lEUnY2IiwoZSx0KT0+e2lkLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFlpKGUpe3JldHVybiBhaSh2bixlKX1jb25zdCBibj1kKCJab2RCYXNlNjQiLChlLHQpPT57Y2QuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gUWkoZSl7cmV0dXJuIGNpKGJuLGUpfWNvbnN0IF9uPWQoIlpvZEJhc2U2NFVSTCIsKGUsdCk9PntsZC5pbml0KGUsdCksQS5pbml0KGUsdCl9KTtmdW5jdGlvbiBYaShlKXtyZXR1cm4gdWkoX24sZSl9Y29uc3QgeW49ZCgiWm9kRTE2NCIsKGUsdCk9PntkZC5pbml0KGUsdCksQS5pbml0KGUsdCl9KTtmdW5jdGlvbiBlYShlKXtyZXR1cm4gbGkoeW4sZSl9Y29uc3QgUm89ZCgiWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9PntmZC5pbml0KGUsdCksQS5pbml0KGUsdCl9KTtmdW5jdGlvbiB0YShlKXtyZXR1cm4gaHAoUm8sZSl9Y29uc3QgQ289ZCgiWm9kSUJBTiIsKGUsdCk9PnttZC5pbml0KGUsdCksQS5pbml0KGUsdCl9KTtmdW5jdGlvbiBuYShlKXtyZXR1cm4gbXAoQ28sZSl9Y29uc3Qgd249ZCgiWm9kSldUIiwoZSx0KT0+e3ZkLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG9hKGUpe3JldHVybiBkaSh3bixlKX1jb25zdCBPZT1kKCJab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57YmQuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gcmEoZSx0LG49e30pe3JldHVybiBhdChPZSxlLHQsbil9ZnVuY3Rpb24gc2EoZSl7cmV0dXJuIGF0KE9lLCJob3N0bmFtZSIsR3UsZSl9ZnVuY3Rpb24gaWEoZSl7cmV0dXJuIGF0KE9lLCJoZXgiLGZsLGUpfWZ1bmN0aW9uIGFhKGUpe3JldHVybiBhdChPZSwiY3VycmVuY3lfY29kZSIsWHUsZSl9ZnVuY3Rpb24gY2EoZSx0KXtjb25zdCBuPXQ/LmVuYz8/ImhleCIsbz1gJHtlfV8ke259YCxyPV9vW29dO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke299YCk7cmV0dXJuIGF0KE9lLG8scix0KX1jb25zdCBodD1kKCJab2ROdW1iZXIiLChlLHQpPT57UHMuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5lZygpLGUuaXNGaW5pdGU9ITB9LEF0KHttaW5WYWx1ZTplPT57Y29uc3R7bWluaW11bTp0LGV4Y2x1c2l2ZU1pbmltdW06bn09ZmUoKTtyZXR1cm4gTWF0aC5tYXgodD8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG4/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSl9LG1heFZhbHVlOmU9Pntjb25zdHttYXhpbXVtOnQsZXhjbHVzaXZlTWF4aW11bTpufT1mZSgpO3JldHVybiBNYXRoLm1pbih0Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0saXNJbnQ6ZT0+e2NvbnN0e2lzSW50OnQsbXVsdGlwbGVPZjpufT1mZSgpO3JldHVybiEhdHx8ISFuPy5zb21lKE51bWJlci5pc1NhZmVJbnRlZ2VyKX0sZm9ybWF0OmU9PmZlKCkuZm9ybWF0Pz9udWxsfSx7Z3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhQZShlLHQpKX0sZ3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYWUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKGFlKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKFRlKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhpZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soaWUoZSx0KSl9LGludChlKXtyZXR1cm4gdGhpcy5jaGVjayhFdChlKSl9LHNhZmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soRXQoZSkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhQZSgwLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYWUoMCxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKFRlKDAsZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhpZSgwLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKERlKGUsdCkpfSxzdGVwKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soRGUoZSx0KSl9LGZpbml0ZSgpe3JldHVybiB0aGlzfX0pKTtmdW5jdGlvbiBUKGUpe3JldHVybiBncChodCxlKX1jb25zdCBBZT1kKCJab2ROdW1iZXJGb3JtYXQiLChlLHQpPT57X2QuaW5pdChlLHQpLGh0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIEV0KGUpe3JldHVybiBicChBZSxlKX1mdW5jdGlvbiB1YShlKXtyZXR1cm4gX3AoQWUsZSl9ZnVuY3Rpb24gbGEoZSl7cmV0dXJuIHlwKEFlLGUpfWZ1bmN0aW9uIGRhKGUpe3JldHVybiB3cChBZSxlKX1mdW5jdGlvbiBwYShlKXtyZXR1cm4ga3AoQWUsZSl9Y29uc3QgbXQ9ZCgiWm9kQm9vbGVhbiIsKGUsdCk9PntJcy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnRnKCl9KTtmdW5jdGlvbiBPKGUpe3JldHVybiBTcChtdCxlKX1jb25zdCBndD1kKCJab2RCaWdJbnQiLChlLHQpPT57eHMuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5uZygpfSxBdCh7bWluVmFsdWU6ZT0+ZmUoKS5taW5pbXVtPz9udWxsLG1heFZhbHVlOmU9PmZlKCkubWF4aW11bT8/bnVsbCxmb3JtYXQ6ZT0+ZmUoKS5mb3JtYXQ/P251bGx9LHtndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhhZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYWUoZSx0KSl9LGd0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soUGUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soVGUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGllKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhpZShlLHQpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soUGUoQmlnSW50KDApLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soVGUoQmlnSW50KDApLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soaWUoQmlnSW50KDApLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYWUoQmlnSW50KDApLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKERlKGUsdCkpfX0pKTtmdW5jdGlvbiBmYShlKXtyZXR1cm4genAoZ3QsZSl9Y29uc3Qga249ZCgiWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e3lkLmluaXQoZSx0KSxndC5pbml0KGUsdCl9KTtmdW5jdGlvbiBoYShlKXtyZXR1cm4gUHAoa24sZSl9ZnVuY3Rpb24gbWEoZSl7cmV0dXJuIElwKGtuLGUpfWNvbnN0IFpvPWQoIlpvZFN5bWJvbCIsKGUsdCk9Pnt3ZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm9nKCl9KTtmdW5jdGlvbiBnYShlKXtyZXR1cm4geHAoWm8sZSl9Y29uc3QgT289ZCgiWm9kVW5kZWZpbmVkIiwoZSx0KT0+e2tkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+c2coKX0pO2Z1bmN0aW9uIGV0KGUpe3JldHVybiBFcChPbyxlKX1jb25zdCBBbz1kKCJab2ROdWxsIiwoZSx0KT0+e1NkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cmcoKX0pO2Z1bmN0aW9uIFNuKGUpe3JldHVybiBScChBbyxlKX1jb25zdCBObz1kKCJab2RBbnkiLChlLHQpPT57JGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5jZygpfSk7ZnVuY3Rpb24gJG4oKXtyZXR1cm4gQ3AoTm8pfWNvbnN0IGpvPWQoIlpvZFVua25vd24iLChlLHQpPT57emQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT51ZygpfSk7ZnVuY3Rpb24gWigpe3JldHVybiBacChqbyl9Y29uc3QgTW89ZCgiWm9kTmV2ZXIiLChlLHQpPT57VGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5hZygpfSk7ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIE9wKE1vLGUpfWNvbnN0IERvPWQoIlpvZFZvaWQiLChlLHQpPT57UGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5pZygpfSk7ZnVuY3Rpb24gdmEoZSl7cmV0dXJuIEFwKERvLGUpfWNvbnN0IHpuPWQoIlpvZERhdGUiLChlLHQpPT57SWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5sZygpLGUubWluPShuLG8pPT5lLmNoZWNrKGFlKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGllKG4sbykpfSxBdCh7bWluRGF0ZTplPT57Y29uc3R7bWluaW11bTp0fT1mZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9LG1heERhdGU6ZT0+e2NvbnN0e21heGltdW06dH09ZmUoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfX0se30pKTtmdW5jdGlvbiBiYShlKXtyZXR1cm4gTnAoem4sZSl9Y29uc3QgcW89ZCgiWm9kQXJyYXkiLChlLHQpPT57VmUoKSx4ZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmtnKCksZS5lbGVtZW50PXQuZWxlbWVudH0se21pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKFplKGUsdCkpfSxub25lbXB0eShlKXtyZXR1cm4gdGhpcy5jaGVjayhaZSgxLGUpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soc3QoZSx0KSl9LGxlbmd0aChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGl0KGUsdCkpfSx1bndyYXAoKXtyZXR1cm4gdGhpcy5lbGVtZW50fX0pO2Z1bmN0aW9uIFMoZSx0KXtyZXR1cm4gRHAocW8sZSx0KX1mdW5jdGlvbiBfYShlKXtjb25zdCB0PWUuX3pvZC5kZWYuc2hhcGU7cmV0dXJuIEcoT2JqZWN0LmtleXModCkpfWNvbnN0IHZ0PWQoIlpvZE9iamVjdCIsKGUsdCk9PntWZSgpLFpkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+U2coKSxUdShlLCJzaGFwZSIsbj0+bi5fem9kLmRlZi5zaGFwZSwhMSl9LHtrZXlvZigpe3JldHVybiBHKE9iamVjdC5rZXlzKHRoaXMuX3pvZC5kZWYuc2hhcGUpKX0sY2F0Y2hhbGwoZSl7cmV0dXJuIHRoaXMuY2xvbmUoWCh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKFgodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6WigpfSkpfSxsb29zZSgpe3JldHVybiB0aGlzLmNsb25lKFgodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6WigpfSkpfSxzdHJpY3QoKXtyZXR1cm4gdGhpcy5jbG9uZShYKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOnFlKCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUoWCh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDp2b2lkIDB9KSl9LGV4dGVuZChlKXtyZXR1cm4gZ3UodGhpcyxlKX0sc2FmZUV4dGVuZChlKXtyZXR1cm4gYnUodGhpcyxlKX0sbWVyZ2UoZSl7cmV0dXJuIF91KHRoaXMsZSl9LHBpY2soZSl7cmV0dXJuIGh1KHRoaXMsZSl9LG9taXQoZSl7cmV0dXJuIG11KHRoaXMsZSl9LHBhcnRpYWwoLi4uZSl7cmV0dXJuIE5yKHl0LHRoaXMsZVswXSl9LGV4YWN0UGFydGlhbCguLi5lKXtyZXR1cm4gTnIoSW4sdGhpcyxlWzBdLCJleGFjdFBhcnRpYWwiKX0scmVxdWlyZWQoLi4uZSl7cmV0dXJuIHl1KHhuLHRoaXMsZVswXSl9fSk7ZnVuY3Rpb24gdihlLHQpe2NvbnN0IG49e3R5cGU6Im9iamVjdCIsc2hhcGU6ZT8/e30sLi4uXyh0KX07cmV0dXJuIG5ldyB2dChuKX1mdW5jdGlvbiB5YShlLHQpe3JldHVybiBuZXcgdnQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpxZSgpLC4uLl8odCl9KX1mdW5jdGlvbiBXKGUsdCl7cmV0dXJuIG5ldyB2dCh7dHlwZToib2JqZWN0IixzaGFwZTplLGNhdGNoYWxsOlooKSwuLi5fKHQpfSl9Y29uc3QgYnQ9ZCgiWm9kVW5pb24iLChlLHQpPT57eW8uaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5XcCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBJKGUsdCl7cmV0dXJuIG5ldyBidCh7dHlwZToidW5pb24iLG9wdGlvbnM6ZSwuLi5fKHQpfSl9Y29uc3QgTG89ZCgiWm9kWG9yIiwoZSx0KT0+e2J0LmluaXQoZSx0KSxPZC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PldwKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIHdhKGUsdCl7cmV0dXJuIG5ldyBMbyh7dHlwZToidW5pb24iLG9wdGlvbnM6ZSxpbmNsdXNpdmU6ITEsLi4uXyh0KX0pfWNvbnN0IFVvPWQoIlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9PntidC5pbml0KGUsdCksTmQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVG4oZSx0LG4pe3JldHVybiBuZXcgVW8oe3R5cGU6InVuaW9uIixvcHRpb25zOnQsZGlzY3JpbWluYXRvcjplLC4uLl8obil9KX1jb25zdCBIbz1kKCJab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57amQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT4kZygpfSk7ZnVuY3Rpb24gX3QoZSx0KXtyZXR1cm4gbmV3IEhvKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6ZSxyaWdodDp0fSl9Y29uc3QgRm89ZCgiWm9kVHVwbGUiLChlLHQpPT57VmUoKSxScy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnpnKCl9LHtyZXN0KGUpe3JldHVybiB0aGlzLmNsb25lKHsuLi50aGlzLl96b2QuZGVmLHJlc3Q6ZX0pfSxwYXJ0aWFsKCl7Y29uc3QgZT10aGlzLl96b2QuZGVmO2lmKGUuY2hlY2tzPy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCIucGFydGlhbCgpIGNhbm5vdCBiZSB1c2VkIG9uIHR1cGxlIHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cyIpO3JldHVybiB0aGlzLmNsb25lKHsuLi5lLGl0ZW1zOmUuaXRlbXMubWFwKHQ9Pm5ldyB5dCh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSkpfSl9fSk7ZnVuY3Rpb24gQm8oZSx0LG4pe2NvbnN0IG89dCBpbnN0YW5jZW9mIHoscj1vP246dCxzPW8/dDpudWxsO3JldHVybiBuZXcgRm8oe3R5cGU6InR1cGxlIixpdGVtczplLHJlc3Q6cywuLi5fKHIpfSl9Y29uc3QgTGU9ZCgiWm9kUmVjb3JkIiwoZSx0KT0+e1ZlKCksTWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5UZygpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGV9KTtmdW5jdGlvbiBFKGUsdCxuKXtyZXR1cm4hdHx8IXQuX3pvZD9uZXcgTGUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTpmKCksdmFsdWVUeXBlOmUsLi4uXyh0KX0pOm5ldyBMZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIGthKGUsdCxuKXtyZXR1cm4gbmV3IExlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi5fKG4pLHBhcnRpYWw6ITB9KX1mdW5jdGlvbiBTYShlLHQsbil7cmV0dXJuIG5ldyBMZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsbW9kZToibG9vc2UiLC4uLl8obil9KX1jb25zdCBWbz1kKCJab2RNYXAiLChlLHQpPT57VmUoKSxEZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnlnKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZSxlLm1pbj0oLi4ubik9PmUuY2hlY2soSWUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhJZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2soQmUoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2socnQoLi4ubikpfSk7ZnVuY3Rpb24gJGEoZSx0LG4pe3JldHVybiBuZXcgVm8oe3R5cGU6Im1hcCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLl8obil9KX1jb25zdCBKbz1kKCJab2RTZXQiLChlLHQpPT57VmUoKSxxZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PndnKCksZS5taW49KC4uLm4pPT5lLmNoZWNrKEllKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soSWUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKEJlKC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKHJ0KC4uLm4pKX0pO2Z1bmN0aW9uIHphKGUsdCl7cmV0dXJuIG5ldyBKbyh7dHlwZToic2V0Iix2YWx1ZVR5cGU6ZSwuLi5fKHQpfSl9Y29uc3QgVWU9ZCgiWm9kRW51bSIsKGUsdCk9PntMZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShvLHIscyk9PmRnKCksZS5lbnVtPXQuZW50cmllcyxlLm9wdGlvbnM9Wy4uLmUuX3pvZC52YWx1ZXNdO2NvbnN0IG49bmV3IFNldChPYmplY3Qua2V5cyh0LmVudHJpZXMpKTtlLmV4dHJhY3Q9KG8scik9Pntjb25zdCBzPXt9O2Zvcihjb25zdCBpIG9mIG8paWYobi5oYXMoaSkpc1tpXT10LmVudHJpZXNbaV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2l9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBVZSh7Li4udCxjaGVja3M6W10sLi4uXyhyKSxlbnRyaWVzOnN9KX0sZS5leGNsdWRlPShvLHIpPT57Y29uc3Qgcz17Li4udC5lbnRyaWVzfTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKWRlbGV0ZSBzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgVWUoey4uLnQsY2hlY2tzOltdLC4uLl8ociksZW50cmllczpzfSl9fSk7ZnVuY3Rpb24gRyhlLHQpe2NvbnN0IG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QuZnJvbUVudHJpZXMoZS5tYXAobz0+W28sb10pKTplO3JldHVybiBuZXcgVWUoe3R5cGU6ImVudW0iLGVudHJpZXM6biwuLi5fKHQpfSl9ZnVuY3Rpb24gVGEoZSx0KXtyZXR1cm4gbmV3IFVlKHt0eXBlOiJlbnVtIixlbnRyaWVzOmUsLi4uXyh0KX0pfWNvbnN0IEtvPWQoIlpvZExpdGVyYWwiLChlLHQpPT57VWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5wZygpLGUudmFsdWVzPW5ldyBTZXQodC52YWx1ZXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ2YWx1ZSIse2dldCgpe2lmKHQudmFsdWVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC4iKTtyZXR1cm4gdC52YWx1ZXNbMF19fSl9KTtmdW5jdGlvbiBoKGUsdCl7cmV0dXJuIG5ldyBLbyh7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sLi4uXyh0KX0pfWNvbnN0IFdvPWQoIlpvZEZpbGUiLChlLHQpPT57SGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5tZygpLGUubWluPShuLG8pPT5lLmNoZWNrKEllKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKEJlKG4sbykpLGUubWltZT0obixvKT0+ZS5jaGVjayhZdChBcnJheS5pc0FycmF5KG4pP246W25dLG8pKX0pO2Z1bmN0aW9uIFBhKGUpe3JldHVybiBxcChXbyxlKX1jb25zdCBHbz1kKCJab2RUcmFuc2Zvcm0iLChlLHQpPT57VmUoKSxGZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pl9nKCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBwbyhlLmNvbnN0cnVjdG9yLm5hbWUpO24uYWRkSXNzdWU9cz0+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiluLmlzc3Vlcy5wdXNoKFFlKHMsbi52YWx1ZSx0KSk7ZWxzZXtjb25zdCBpPXM7aS5mYXRhbCYmKGkuY29udGludWU9ITEpLGkuY29kZT8/KGkuY29kZT0iY3VzdG9tIiksImlucHV0ImluIGl8fChpLmlucHV0PW4udmFsdWUpLGkuaW5zdD8/KGkuaW5zdD1lKSxuLmlzc3Vlcy5wdXNoKFFlKGkpKX19O2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMsbikpOihuLnZhbHVlPXIsbil9fSk7ZnVuY3Rpb24gUG4oZSl7cmV0dXJuIG5ldyBHbyh7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX0pfWNvbnN0IHl0PWQoIlpvZE9wdGlvbmFsIiwoZSx0KT0+e0NzLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+R3AoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBxKGUpe3JldHVybiBuZXcgeXQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IEluPWQoIlpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57QmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5HcCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFlvKGUpe3JldHVybiBuZXcgSW4oe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IFFvPWQoIlpvZE51bGxhYmxlIiwoZSx0KT0+e1ZkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UGcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiB0dChlKXtyZXR1cm4gbmV3IFFvKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOmV9KX1mdW5jdGlvbiBJYShlKXtyZXR1cm4gcSh0dChlKSl9Y29uc3QgWG89ZCgiWm9kRGVmYXVsdCIsKGUsdCk9PntKZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnhnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlRGVmYXVsdD1lLnVud3JhcH0pO2Z1bmN0aW9uIGVyKGUsdCl7cmV0dXJuIG5ldyBYbyh7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6c28odCl9fSl9Y29uc3QgdHI9ZCgiWm9kUHJlZmF1bHQiLChlLHQpPT57S2QuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5FZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIG5yKGUsdCl7cmV0dXJuIG5ldyB0cih7dHlwZToicHJlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOnNvKHQpfX0pfWNvbnN0IHhuPWQoIlpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e1dkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SWcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBvcihlLHQpe3JldHVybiBuZXcgeG4oe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6ZSwuLi5fKHQpfSl9Y29uc3QgcnI9ZCgiWm9kU3VjY2VzcyIsKGUsdCk9PntHZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmdnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24geGEoZSl7cmV0dXJuIG5ldyBycih7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOmV9KX1jb25zdCBzcj1kKCJab2RDYXRjaCIsKGUsdCk9PntZZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlJnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlQ2F0Y2g9ZS51bndyYXB9KTtmdW5jdGlvbiBpcihlLHQpe3JldHVybiBuZXcgc3Ioe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6ZSxjYXRjaFZhbHVlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6ZXModCl9KX1jb25zdCBhcj1kKCJab2ROYU4iLChlLHQpPT57UWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5mZygpfSk7ZnVuY3Rpb24gRWEoZSl7cmV0dXJuIE1wKGFyLGUpfWNvbnN0IHd0PWQoIlpvZFBpcGUiLChlLHQpPT57WnMuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5DZygpLGUuaW49dC5pbixlLm91dD10Lm91dH0pO2Z1bmN0aW9uIFJ0KGUsdCl7cmV0dXJuIG5ldyB3dCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dH0pfWNvbnN0IGt0PWQoIlpvZENvZGVjIiwoZSx0KT0+e3d0LmluaXQoZSx0KSxPcy5pbml0KGUsdCl9KTtmdW5jdGlvbiBSYShlLHQsbil7cmV0dXJuIG5ldyBrdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dCx0cmFuc2Zvcm06bi5kZWNvZGUscmV2ZXJzZVRyYW5zZm9ybTpuLmVuY29kZX0pfWZ1bmN0aW9uIENhKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtyZXR1cm4gbmV3IGt0KHt0eXBlOiJwaXBlIixpbjp0Lm91dCxvdXQ6dC5pbix0cmFuc2Zvcm06dC5yZXZlcnNlVHJhbnNmb3JtLHJldmVyc2VUcmFuc2Zvcm06dC50cmFuc2Zvcm19KX1jb25zdCBjcj1kKCJab2RQcmVwcm9jZXNzIiwoZSx0KT0+e3d0LmluaXQoZSx0KSxYZC5pbml0KGUsdCl9KSx1cj1kKCJab2RSZWFkb25seSIsKGUsdCk9PntlcC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlpnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gbHIoZSl7cmV0dXJuIG5ldyB1cih7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTplfSl9Y29uc3QgZHI9ZCgiWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e3RwLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+aGcoKX0pO2Z1bmN0aW9uIFphKGUsdCl7cmV0dXJuIG5ldyBkcih7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6ZSwuLi5fKHQpfSl9Y29uc3QgcHI9ZCgiWm9kTGF6eSIsKGUsdCk9PntBcy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkFnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuZ2V0dGVyKCl9KTtmdW5jdGlvbiBmcihlKXtyZXR1cm4gbmV3IHByKHt0eXBlOiJsYXp5IixnZXR0ZXI6ZX0pfWNvbnN0IGhyPWQoIlpvZFByb21pc2UiLChlLHQpPT57b3AuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5PZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIE9hKGUpe3JldHVybiBuZXcgaHIoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTplfSl9Y29uc3QgbXI9ZCgiWm9kRnVuY3Rpb24iLChlLHQpPT57bnAuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5iZygpfSk7ZnVuY3Rpb24gbnQoZSl7cmV0dXJuIG5ldyBtcih7dHlwZToiZnVuY3Rpb24iLGlucHV0OkFycmF5LmlzQXJyYXkoZT8uaW5wdXQpP0JvKGU/LmlucHV0KTplPy5pbnB1dD8/UyhaKCkpLG91dHB1dDplPy5vdXRwdXQ/P1ooKX0pfWNvbnN0IFN0PWQoIlpvZEN1c3RvbSIsKGUsdCk9PntycC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnZnKCl9KTtmdW5jdGlvbiBBYShlKXtjb25zdCB0PW5ldyBVKHtjaGVjazoiY3VzdG9tIn0pO3JldHVybiB0Ll96b2QuY2hlY2s9ZSx0fWZ1bmN0aW9uIGdyKGUsdCl7cmV0dXJuIExwKFN0LGU/PygoKT0+ITApLHQpfWZ1bmN0aW9uIHZyKGUsdD17fSl7cmV0dXJuIFVwKFN0LGUsdCl9ZnVuY3Rpb24gYnIoZSx0KXtyZXR1cm4gSHAoZSx0KX1jb25zdCBOYT1CcCxqYT1WcCxfcj1kKCJab2RJbnN0YW5jZU9mIiwoZSx0KT0+e1N0LmluaXQoZSx0KX0se3Byb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhHdChlLHQpKX19KTtmdW5jdGlvbiBNYShlLHQ9e30pe2NvbnN0IG49bmV3IF9yKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOm89Pm8gaW5zdGFuY2VvZiBlLGFib3J0OiEwLC4uLl8odCl9KTtyZXR1cm4gbi5fem9kLmJhZy5DbGFzcz1lLG4uX3pvZC5jaGVjaz1vPT57by52YWx1ZSBpbnN0YW5jZW9mIGV8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ZS5uYW1lLGlucHV0Om8udmFsdWUsaW5zdDpuLHBhdGg6Wy4uLm4uX3pvZC5kZWYucGF0aD8/W11dfSl9LG59Y29uc3QgRGE9KC4uLmUpPT5KcCh7Q29kZWM6a3QsQm9vbGVhbjptdCxTdHJpbmc6Y3R9LC4uLmUpO2Z1bmN0aW9uIHFhKGUpe2NvbnN0IHQ9ZnIoKCk9PkkoW2YoZSksVCgpLE8oKSxTbigpLFModCksRShmKCksdCldKSk7cmV0dXJuIHR9ZnVuY3Rpb24gRW4oZSx0KXtyZXR1cm4gbmV3IGNyKHt0eXBlOiJwaXBlIixpbjpQbihlKSxvdXQ6dH0pfWNvbnN0IFVnPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RBbnk6Tm8sWm9kQXJyYXk6cW8sWm9kQmFzZTY0OmJuLFpvZEJhc2U2NFVSTDpfbixab2RCaWdJbnQ6Z3QsWm9kQmlnSW50Rm9ybWF0OmtuLFpvZEJvb2xlYW46bXQsWm9kQ0lEUnY0OmduLFpvZENJRFJ2Njp2bixab2RDVUlEOnVuLFpvZENVSUQyOmxuLFpvZENhdGNoOnNyLFpvZENvZGVjOmt0LFpvZENyZWRpdENhcmQ6Um8sWm9kQ3VzdG9tOlN0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpPZSxab2REYXRlOnpuLFpvZERlZmF1bHQ6WG8sWm9kRGlzY3JpbWluYXRlZFVuaW9uOlVvLFpvZEUxNjQ6eW4sWm9kRW1haWw6cm4sWm9kRW1vamk6YW4sWm9kRW51bTpVZSxab2RFeGFjdE9wdGlvbmFsOkluLFpvZEZpbGU6V28sWm9kRnVuY3Rpb246bXIsWm9kR1VJRDpzbixab2RJQkFOOkNvLFpvZElQdjQ6aG4sWm9kSVB2Njptbixab2RJU09EYXRlOmx0LFpvZElTT0RhdGVUaW1lOnV0LFpvZElTT0R1cmF0aW9uOnB0LFpvZElTT1RpbWU6ZHQsWm9kSW5zdGFuY2VPZjpfcixab2RJbnRlcnNlY3Rpb246SG8sWm9kSldUOnduLFpvZEtTVUlEOmZuLFpvZExhenk6cHIsWm9kTGl0ZXJhbDpLbyxab2RNQUM6RW8sWm9kTWFwOlZvLFpvZE5hTjphcixab2ROYW5vSUQ6Y24sWm9kTmV2ZXI6TW8sWm9kTm9uT3B0aW9uYWw6eG4sWm9kTnVsbDpBbyxab2ROdWxsYWJsZTpRbyxab2ROdW1iZXI6aHQsWm9kTnVtYmVyRm9ybWF0OkFlLFpvZE9iamVjdDp2dCxab2RPcHRpb25hbDp5dCxab2RQaXBlOnd0LFpvZFByZWZhdWx0OnRyLFpvZFByZXByb2Nlc3M6Y3IsWm9kUHJvbWlzZTpocixab2RSZWFkb25seTp1cixab2RSZWNvcmQ6TGUsWm9kU2V0OkpvLFpvZFN0cmluZzpjdCxab2RTdHJpbmdGb3JtYXQ6QSxab2RTdWNjZXNzOnJyLFpvZFN5bWJvbDpabyxab2RUZW1wbGF0ZUxpdGVyYWw6ZHIsWm9kVHJhbnNmb3JtOkdvLFpvZFR1cGxlOkZvLFpvZFR5cGU6UCxab2RVTElEOmRuLFpvZFVSTDpmdCxab2RVVUlEOnZlLFpvZFVuZGVmaW5lZDpPbyxab2RVbmlvbjpidCxab2RVbmtub3duOmpvLFpvZFZvaWQ6RG8sWm9kWElEOnBuLFpvZFhvcjpMbyxfWm9kU3RyaW5nOm9uLF9kZWZhdWx0OmVyLF9mdW5jdGlvbjpudCxhbnk6JG4sYXJyYXk6UyxiYXNlNjQ6UWksYmFzZTY0dXJsOlhpLGJpZ2ludDpmYSxib29sZWFuOk8sY2F0Y2g6aXIsY2hlY2s6QWEsY2lkcnY0OkdpLGNpZHJ2NjpZaSxjb2RlYzpSYSxjcmVkaXRDYXJkOnRhLGN1aWQ6VWksY3VpZDI6SGksY3VycmVuY3lDb2RlOmFhLGN1c3RvbTpncixkYXRlOmJhLGRlc2NyaWJlOk5hLGRpc2NyaW1pbmF0ZWRVbmlvbjpUbixlMTY0OmVhLGVtYWlsOkNpLGVtb2ppOnFpLGVudW06RyxleGFjdE9wdGlvbmFsOllvLGZpbGU6UGEsZmxvYXQzMjp1YSxmbG9hdDY0OmxhLGZ1bmN0aW9uOm50LGd1aWQ6WmksaGFzaDpjYSxoZXg6aWEsaG9zdG5hbWU6c2EsaHR0cFVybDpEaSxpYmFuOm5hLGluc3RhbmNlb2Y6TWEsaW50OkV0LGludDMyOmRhLGludDY0OmhhLGludGVyc2VjdGlvbjpfdCxpbnZlcnRDb2RlYzpDYSxpcHY0OkppLGlwdjY6V2ksanNvbjpxYSxqd3Q6b2Esa2V5b2Y6X2Esa3N1aWQ6VmksbGF6eTpmcixsaXRlcmFsOmgsbG9vc2VPYmplY3Q6Vyxsb29zZVJlY29yZDpTYSxtYWM6S2ksbWFwOiRhLG1ldGE6amEsbmFuOkVhLG5hbm9pZDpMaSxuYXRpdmVFbnVtOlRhLG5ldmVyOnFlLG5vbm9wdGlvbmFsOm9yLG51bGw6U24sbnVsbGFibGU6dHQsbnVsbGlzaDpJYSxudW1iZXI6VCxvYmplY3Q6dixvcHRpb25hbDpxLHBhcnRpYWxSZWNvcmQ6a2EscGlwZTpSdCxwcmVmYXVsdDpucixwcmVwcm9jZXNzOkVuLHByb21pc2U6T2EscmVhZG9ubHk6bHIscmVjb3JkOkUscmVmaW5lOnZyLHNldDp6YSxzdHJpY3RPYmplY3Q6eWEsc3RyaW5nOmYsc3RyaW5nRm9ybWF0OnJhLHN0cmluZ2Jvb2w6RGEsc3VjY2Vzczp4YSxzdXBlclJlZmluZTpicixzeW1ib2w6Z2EsdGVtcGxhdGVMaXRlcmFsOlphLHRyYW5zZm9ybTpQbix0dXBsZTpCbyx1aW50MzI6cGEsdWludDY0Om1hLHVsaWQ6RmksdW5kZWZpbmVkOmV0LHVuaW9uOkksdW5rbm93bjpaLHVybDpNaSx1dWlkOk9pLHV1aWR2NDpBaSx1dWlkdjY6TmksdXVpZHY3OmppLHZvaWQ6dmEseGlkOkJpLHhvcjp3YX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSx0Zj17aW52YWxpZF90eXBlOiJpbnZhbGlkX3R5cGUiLHRvb19iaWc6InRvb19iaWciLHRvb19zbWFsbDoidG9vX3NtYWxsIixpbnZhbGlkX2Zvcm1hdDoiaW52YWxpZF9mb3JtYXQiLG5vdF9tdWx0aXBsZV9vZjoibm90X211bHRpcGxlX29mIix1bnJlY29nbml6ZWRfa2V5czoidW5yZWNvZ25pemVkX2tleXMiLGludmFsaWRfdW5pb246ImludmFsaWRfdW5pb24iLGludmFsaWRfa2V5OiJpbnZhbGlkX2tleSIsaW52YWxpZF9lbGVtZW50OiJpbnZhbGlkX2VsZW1lbnQiLGludmFsaWRfdmFsdWU6ImludmFsaWRfdmFsdWUiLGN1c3RvbToiY3VzdG9tIn07ZnVuY3Rpb24gbmYoZSl7Sih7Y3VzdG9tRXJyb3I6ZX0pfWZ1bmN0aW9uIG9mKCl7cmV0dXJuIEooKS5jdXN0b21FcnJvcn12YXIgZW87ZW98fChlbz17fSk7ZnVuY3Rpb24gcmYoZSl7cmV0dXJuIGZpKHV0LGUpfWZ1bmN0aW9uIEhnKGUpe3JldHVybiBoaShsdCxlKX1mdW5jdGlvbiBGZyhlKXtyZXR1cm4gbWkoZHQsZSl9ZnVuY3Rpb24gQmcoZSl7cmV0dXJuIGdpKHB0LGUpfWNvbnN0IExhPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RJU09EYXRlOmx0LFpvZElTT0RhdGVUaW1lOnV0LFpvZElTT0R1cmF0aW9uOnB0LFpvZElTT1RpbWU6ZHQsZGF0ZTpIZyxkYXRldGltZTpyZixkdXJhdGlvbjpCZyx0aW1lOkZnfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHc9ey4uLlVnLC4uLnFnLGlzbzpMYX0sVmc9bmV3IFNldChbIiRzY2hlbWEiLCIkcmVmIiwiJGRlZnMiLCJkZWZpbml0aW9ucyIsIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIiwidHlwZSIsImVudW0iLCJjb25zdCIsImFueU9mIiwib25lT2YiLCJhbGxPZiIsIm5vdCIsInByb3BlcnRpZXMiLCJyZXF1aXJlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWVzIiwibWluUHJvcGVydGllcyIsIm1heFByb3BlcnRpZXMiLCJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwibWluSXRlbXMiLCJtYXhJdGVtcyIsInVuaXF1ZUl0ZW1zIiwiY29udGFpbnMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIiwibWluTGVuZ3RoIiwibWF4TGVuZ3RoIiwicGF0dGVybiIsImZvcm1hdCIsIm1pbmltdW0iLCJtYXhpbXVtIiwiZXhjbHVzaXZlTWluaW11bSIsImV4Y2x1c2l2ZU1heGltdW0iLCJtdWx0aXBsZU9mIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0IiwiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiaWYiLCJ0aGVuIiwiZWxzZSIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbnRSZXF1aXJlZCIsIm51bGxhYmxlIiwicmVhZE9ubHkiXSk7ZnVuY3Rpb24gSmcoZSx0KXtjb25zdCBuPWUuJHNjaGVtYTtyZXR1cm4gbj09PSJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSI/ImRyYWZ0LTIwMjAtMTIiOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIj8iZHJhZnQtNyI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiPyJkcmFmdC00Ijp0Pz8iZHJhZnQtMjAyMC0xMiJ9ZnVuY3Rpb24gcWMoZSx0KXtyZXR1cm4gZS5tYXAoKG4sbyk9Pm88dD9uOm4ub3B0aW9uYWwoKSl9ZnVuY3Rpb24gS2coZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBXZyhlLHQpe2lmKCFlLnN0YXJ0c1dpdGgoIiMiKSl0aHJvdyBuZXcgRXJyb3IoIkV4dGVybmFsICRyZWYgaXMgbm90IHN1cHBvcnRlZCwgb25seSBsb2NhbCByZWZzICgjLy4uLikgYXJlIGFsbG93ZWQiKTtjb25zdCBuPWUuc2xpY2UoMSkuc3BsaXQoIi8iKS5maWx0ZXIoQm9vbGVhbik7aWYobi5sZW5ndGg9PT0wKXJldHVybiB0LnJvb3RTY2hlbWE7Y29uc3Qgbz10LnZlcnNpb249PT0iZHJhZnQtMjAyMC0xMiI/IiRkZWZzIjoiZGVmaW5pdGlvbnMiO2lmKG5bMF09PT1vKXtjb25zdCByPW5bMV09PT12b2lkIDA/dm9pZCAwOktnKG5bMV0pO2lmKCFyfHwhdC5kZWZzW3JdKXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApO3JldHVybiB0LmRlZnNbcl19dGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCl9ZnVuY3Rpb24gR2coZSx0KXtyZXR1cm4gdy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZih0eXBlb2YgciE9Im9iamVjdCJ8fHI9PT1udWxsfHxBcnJheS5pc0FycmF5KHIpKXJldHVybjtjb25zdCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpO2lmKHQubWluUHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg8dC5taW5Qcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluUHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIHNtYWxsOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA+PSR7dC5taW5Qcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQubWF4UHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg+dC5tYXhQcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heFByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBiaWc6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlIDw9JHt0Lm1heFByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5rZXlTY2hlbWEpZm9yKGNvbnN0IGkgb2Ygcyl7Y29uc3QgYT10LmtleVNjaGVtYS5zYWZlUGFyc2UoaSk7YS5zdWNjZXNzfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczphLmVycm9yLmlzc3VlcyxpbnB1dDppLHBhdGg6W2ldLGNvbnRpbnVlOiEwfSl9fSkucGlwZShlKX1mdW5jdGlvbiBCcihlLHQpe2lmKGU9PT1udWxsKXJldHVybiJ6Ijtjb25zdCBuPXR5cGVvZiBlO2lmKG4hPT0ib2JqZWN0Iil7aWYobj09PSJudW1iZXIiJiZOdW1iZXIuaXNOYU4oZSkpcmV0dXJuIG51bGw7Y29uc3Qgbz1TdHJpbmcoZSk7cmV0dXJuYCR7blswXX0ke28ubGVuZ3RofToke299YH1pZih0LmhhcyhlKSlyZXR1cm4gbnVsbDt0LmFkZChlKTt0cnl7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgcz1bXTtmb3IoY29uc3QgaSBvZiBlKXtjb25zdCBhPUJyKGksdCk7aWYoYT09PW51bGwpcmV0dXJuIG51bGw7cy5wdXNoKGEpfXJldHVybmBhJHtzLmxlbmd0aH06WyR7cy5qb2luKCIsIil9XWB9Y29uc3Qgbz1PYmplY3Qua2V5cyhlKS5zb3J0KCkscj1bXTtmb3IoY29uc3QgcyBvZiBvKXtjb25zdCBpPUJyKGVbc10sdCk7aWYoaT09PW51bGwpcmV0dXJuIG51bGw7ci5wdXNoKGAke3MubGVuZ3RofToke3N9PSR7aX1gKX1yZXR1cm5gbyR7ci5sZW5ndGh9Onske3Iuam9pbigiLCIpfX1gfWZpbmFsbHl7dC5kZWxldGUoZSl9fWNvbnN0IFlnPW5ldyBTZXQoWyJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb250YWlucyIsInByb3BlcnR5TmFtZXMiLCJub3QiLCJpZiIsInRoZW4iLCJlbHNlIiwiYWxsT2YiLCJhbnlPZiIsIm9uZU9mIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImNvbnRlbnRTY2hlbWEiXSksUWc9bmV3IFNldChbInByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbmNpZXMiLCIkZGVmcyIsImRlZmluaXRpb25zIl0pO2Z1bmN0aW9uIFB0KGUpe3JldHVybiB0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKFB0KTp0eXBlb2YgZS4kcmVmPT0ic3RyaW5nIj8hMDpPYmplY3QuZW50cmllcyhlKS5zb21lKChbdCxuXSk9PllnLmhhcyh0KT9QdChuKTohUWcuaGFzKHQpfHx0eXBlb2YgbiE9Im9iamVjdCJ8fG49PT1udWxsPyExOk9iamVjdC52YWx1ZXMobikuc29tZShQdCkpfWZ1bmN0aW9uIExjKGUpe3JldHVybiBlPT09MT8iZWxlbWVudCI6ImVsZW1lbnRzIn1mdW5jdGlvbiBYZyhlLHQpe3JldHVybiB3LnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocikpe2lmKHQudW5pcXVlSXRlbXM9PT0hMCl7Y29uc3Qgcz1uZXcgTWFwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtjb25zdCBhPUJyKHJbaV0sbmV3IFNldCk7aWYoYT09PW51bGwpY29udGludWU7Y29uc3QgYz1zLmdldChhKTtpZihjPT09dm9pZCAwKXtzLnNldChhLGkpO2NvbnRpbnVlfW8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgaXRlbXMgbXVzdCBiZSB1bmlxdWU6IGVsZW1lbnQgYXQgaW5kZXggJHtpfSBkdXBsaWNhdGVzIHRoZSBvbmUgYXQgaW5kZXggJHtjfWAsaW5wdXQ6cixwYXRoOltpXSxjb250aW51ZTohMH0pfX1pZih0LmNvbnRhaW5zU2NoZW1hKXtjb25zdCBzPXQubWluQ29udGFpbnM/PzEsaT10Lm1heENvbnRhaW5zIT09dm9pZCAwP3QubWF4Q29udGFpbnMrMTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IGE9MDtmb3IoY29uc3QgYyBvZiByKWlmKHQuY29udGFpbnNTY2hlbWEuc2FmZVBhcnNlKGMpLnN1Y2Nlc3MmJisrYT49aSlicmVhazthPHMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7c30gbWF0Y2hpbmcgJHtMYyhzKX07IGZvdW5kICR7YX1gLGlucHV0OnIsY29udGludWU6ITB9KSx0Lm1heENvbnRhaW5zIT09dm9pZCAwJiZhPnQubWF4Q29udGFpbnMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IG1vc3QgJHt0Lm1heENvbnRhaW5zfSBtYXRjaGluZyAke0xjKHQubWF4Q29udGFpbnMpfWAsaW5wdXQ6cixjb250aW51ZTohMH0pfX19KS5waXBlKGUpfWZ1bmN0aW9uIFVjKGUsdCl7aWYoZSE9PSExKXJldHVybiBlPT09dm9pZCAwfHxlPT09ITA/dy5hbnkoKTp0ZShlLHQpfWNvbnN0IGV2PS9eKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZDpbMC01XVxkKD86XC5cZCspPyg/Olp8WystXSg/OlswMV1cZHwyWzAtM10pOlswLTVdXGQpJC87ZnVuY3Rpb24gc2YoZSx0KXtpZihlLm5vdCE9PXZvaWQgMCl7aWYodHlwZW9mIGUubm90PT0ib2JqZWN0IiYmT2JqZWN0LmtleXMoZS5ub3QpLmxlbmd0aD09PTApcmV0dXJuIHcubmV2ZXIoKTt0aHJvdyBuZXcgRXJyb3IoIm5vdCBpcyBub3Qgc3VwcG9ydGVkIGluIFpvZCAoZXhjZXB0IHsgbm90OiB7fSB9IGZvciBuZXZlcikiKX1pZihlLnVuZXZhbHVhdGVkSXRlbXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZEl0ZW1zIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLnVuZXZhbHVhdGVkUHJvcGVydGllcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkUHJvcGVydGllcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5pZiE9PXZvaWQgMHx8ZS50aGVuIT09dm9pZCAwfHxlLmVsc2UhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDb25kaXRpb25hbCBzY2hlbWFzIChpZi90aGVuL2Vsc2UpIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS5kZXBlbmRlbnRTY2hlbWFzIT09dm9pZCAwfHxlLmRlcGVuZGVudFJlcXVpcmVkIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiZGVwZW5kZW50U2NoZW1hcyBhbmQgZGVwZW5kZW50UmVxdWlyZWQgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLiRyZWYpe2NvbnN0IHI9ZS4kcmVmO2lmKHQucmVmcy5oYXMocikpcmV0dXJuIHQucmVmcy5nZXQocik7aWYodC5wcm9jZXNzaW5nLmhhcyhyKSlyZXR1cm4gdy5sYXp5KCgpPT57aWYoIXQucmVmcy5oYXMocikpdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciByZWZlcmVuY2Ugbm90IHJlc29sdmVkOiAke3J9YCk7cmV0dXJuIHQucmVmcy5nZXQocil9KTt0LnByb2Nlc3NpbmcuYWRkKHIpO2NvbnN0IHM9V2cocix0KSxpPXRlKHMsdCk7cmV0dXJuIHQucmVmcy5zZXQocixpKSx0LnByb2Nlc3NpbmcuZGVsZXRlKHIpLGl9aWYoZS5lbnVtIT09dm9pZCAwKXtjb25zdCByPWUuZW51bTtpZih0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiZlLm51bGxhYmxlPT09ITAmJnIubGVuZ3RoPT09MSYmclswXT09PW51bGwpcmV0dXJuIHcubnVsbCgpO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gdy5uZXZlcigpO2lmKHIubGVuZ3RoPT09MSlyZXR1cm4gdy5saXRlcmFsKHJbMF0pO2lmKHIuZXZlcnkoaT0+dHlwZW9mIGk9PSJzdHJpbmciKSlyZXR1cm4gdy5lbnVtKHIpO2NvbnN0IHM9ci5tYXAoaT0+dy5saXRlcmFsKGkpKTtyZXR1cm4gcy5sZW5ndGg8Mj9zWzBdOncudW5pb24oW3NbMF0sc1sxXSwuLi5zLnNsaWNlKDIpXSl9aWYoZS5jb25zdCE9PXZvaWQgMClyZXR1cm4gdy5saXRlcmFsKGUuY29uc3QpO2NvbnN0IG49ZS50eXBlO2lmKEFycmF5LmlzQXJyYXkobikpe2NvbnN0IHI9bi5tYXAocz0+e2NvbnN0IGk9ey4uLmUsdHlwZTpzfTtyZXR1cm4gc2YoaSx0KX0pO3JldHVybiByLmxlbmd0aD09PTA/dy5uZXZlcigpOnIubGVuZ3RoPT09MT9yWzBdOncudW5pb24ocil9aWYoIW4pcmV0dXJuIHcuYW55KCk7bGV0IG87c3dpdGNoKG4pe2Nhc2Uic3RyaW5nIjp7bGV0IHI9dy5zdHJpbmcoKTtpZihlLmZvcm1hdCl7Y29uc3Qgcz1lLmZvcm1hdDtzPT09ImVtYWlsIj9yPXIuY2hlY2sody5lbWFpbCgpKTpzPT09InVyaSJ8fHM9PT0idXJpLXJlZmVyZW5jZSI/cj1yLmNoZWNrKHcudXJsKCkpOnM9PT0idXVpZCJ8fHM9PT0iZ3VpZCI/cj1yLmNoZWNrKHcudXVpZCgpKTpzPT09ImRhdGUtdGltZSI/cj1yLmNoZWNrKHcuaXNvLmRhdGV0aW1lKHtvZmZzZXQ6ITB9KSk6cz09PSJkYXRlIj9yPXIuY2hlY2sody5pc28uZGF0ZSgpKTpzPT09InRpbWUiP3I9ci5jaGVjayh3LnJlZ2V4KGV2KSk6cz09PSJkdXJhdGlvbiI/cj1yLmNoZWNrKHcuaXNvLmR1cmF0aW9uKCkpOnM9PT0iaG9zdG5hbWUiP3I9ci5jaGVjayh3Lmhvc3RuYW1lKCkpOnM9PT0iaXB2NCI/cj1yLmNoZWNrKHcuaXB2NCgpKTpzPT09ImlwdjYiP3I9ci5jaGVjayh3LmlwdjYoKSk6cz09PSJtYWMiP3I9ci5jaGVjayh3Lm1hYygpKTpzPT09ImNpZHIiP3I9ci5jaGVjayh3LmNpZHJ2NCgpKTpzPT09ImNpZHItdjYiP3I9ci5jaGVjayh3LmNpZHJ2NigpKTpzPT09ImJhc2U2NCI/cj1yLmNoZWNrKHcuYmFzZTY0KCkpOnM9PT0iYmFzZTY0dXJsIj9yPXIuY2hlY2sody5iYXNlNjR1cmwoKSk6cz09PSJlMTY0Ij9yPXIuY2hlY2sody5lMTY0KCkpOnM9PT0iY3JlZGl0X2NhcmQiP3I9ci5jaGVjayh3LmNyZWRpdENhcmQoKSk6cz09PSJpYmFuIj9yPXIuY2hlY2sody5pYmFuKCkpOnM9PT0iand0Ij9yPXIuY2hlY2sody5qd3QoKSk6cz09PSJlbW9qaSI/cj1yLmNoZWNrKHcuZW1vamkoKSk6cz09PSJuYW5vaWQiP3I9ci5jaGVjayh3Lm5hbm9pZCgpKTpzPT09ImN1aWQiP3I9ci5jaGVjayh3LmN1aWQoKSk6cz09PSJjdWlkMiI/cj1yLmNoZWNrKHcuY3VpZDIoKSk6cz09PSJ1bGlkIj9yPXIuY2hlY2sody51bGlkKCkpOnM9PT0ieGlkIj9yPXIuY2hlY2sody54aWQoKSk6cz09PSJrc3VpZCImJihyPXIuY2hlY2sody5rc3VpZCgpKSl9dHlwZW9mIGUubWluTGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5taW4oZS5taW5MZW5ndGgpKSx0eXBlb2YgZS5tYXhMZW5ndGg9PSJudW1iZXIiJiYocj1yLm1heChlLm1heExlbmd0aCkpLGUucGF0dGVybiYmKHI9ci5yZWdleChuZXcgUmVnRXhwKGUucGF0dGVybikpKSxvPXI7YnJlYWt9Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6e2xldCByPW49PT0iaW50ZWdlciI/dy5udW1iZXIoKS5pbnQoKTp3Lm51bWJlcigpO3R5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1pbmltdW0hPT0hMCYmKHI9ci5taW4oZS5taW5pbXVtKSksdHlwZW9mIGUubWF4aW11bT09Im51bWJlciImJmUuZXhjbHVzaXZlTWF4aW11bSE9PSEwJiYocj1yLm1heChlLm1heGltdW0pKSx0eXBlb2YgZS5leGNsdXNpdmVNaW5pbXVtPT0ibnVtYmVyIj9yPXIuZ3QoZS5leGNsdXNpdmVNaW5pbXVtKTplLmV4Y2x1c2l2ZU1pbmltdW09PT0hMCYmdHlwZW9mIGUubWluaW11bT09Im51bWJlciImJihyPXIuZ3QoZS5taW5pbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWF4aW11bT09Im51bWJlciI/cj1yLmx0KGUuZXhjbHVzaXZlTWF4aW11bSk6ZS5leGNsdXNpdmVNYXhpbXVtPT09ITAmJnR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiYocj1yLmx0KGUubWF4aW11bSkpLHR5cGVvZiBlLm11bHRpcGxlT2Y9PSJudW1iZXIiJiYocj1yLm11bHRpcGxlT2YoZS5tdWx0aXBsZU9mKSksbz1yO2JyZWFrfWNhc2UiYm9vbGVhbiI6e289dy5ib29sZWFuKCk7YnJlYWt9Y2FzZSJudWxsIjp7bz13Lm51bGwoKTticmVha31jYXNlIm9iamVjdCI6e2NvbnN0IHI9e30scz1lLnByb3BlcnRpZXN8fHt9LGk9bmV3IFNldChlLnJlcXVpcmVkfHxbXSksYT10eXBlb2YgZS5hZGRpdGlvbmFsUHJvcGVydGllcz09Im9iamVjdCI/dGUoZS5hZGRpdGlvbmFsUHJvcGVydGllcyx0KTp2b2lkIDA7Zm9yKGNvbnN0W3AsbV1vZiBPYmplY3QuZW50cmllcyhzKSl7Y29uc3QgYj10ZShtLHQpO0ZlKHIscCxpLmhhcyhwKT9iOmIub3B0aW9uYWwoKSl9aWYoZS5wYXR0ZXJuUHJvcGVydGllcyl7Y29uc3QgcD1lLnBhdHRlcm5Qcm9wZXJ0aWVzLG09T2JqZWN0LmtleXMocCksYj1bXTtmb3IoY29uc3QgayBvZiBtKXtjb25zdCAkPXRlKHBba10sdCksTj13LnN0cmluZygpLnJlZ2V4KG5ldyBSZWdFeHAoaykpO2IucHVzaCh3Lmxvb3NlUmVjb3JkKE4sJCkpfWNvbnN0IHk9W107aWYoT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnkucHVzaCh3Lm9iamVjdChyKS5wYXNzdGhyb3VnaCgpKSx5LnB1c2goLi4uYikseS5sZW5ndGg9PT0wKW89dy5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCk7ZWxzZSBpZih5Lmxlbmd0aD09PTEpbz15WzBdO2Vsc2V7bGV0IGs9dy5pbnRlcnNlY3Rpb24oeVswXSx5WzFdKTtmb3IobGV0ICQ9MjskPHkubGVuZ3RoOyQrKylrPXcuaW50ZXJzZWN0aW9uKGsseVskXSk7bz1rfWlmKGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMSl7Y29uc3Qgaz1PYmplY3Qua2V5cyhyKSwkPW0ubWFwKFI9Pm5ldyBSZWdFeHAoUikpLE49bztvPW8uY2hlY2soUj0+e2lmKCFDZShSLnZhbHVlKSlyZXR1cm47Y29uc3QgRj1bXTtmb3IoY29uc3Qgb2Ugb2YgT2JqZWN0LmtleXMoUi52YWx1ZSkpay5pbmNsdWRlcyhvZSl8fCQuc29tZShCPT5CLnRlc3Qob2UpKXx8Ri5wdXNoKG9lKTtGLmxlbmd0aCYmUi5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGtleXM6RixpbnB1dDpSLnZhbHVlLGluc3Q6Tn0pfSl9fWVsc2V7Y29uc3QgcD13Lm9iamVjdChyKTtlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITE/bz1wLnN0cmljdCgpOmE/bz1wLmNhdGNoYWxsKGEpOm89cC5wYXNzdGhyb3VnaCgpfWNvbnN0IGM9ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiZlLnByb3BlcnR5TmFtZXMhPT0hMCx1PXR5cGVvZiBlLm1pblByb3BlcnRpZXM9PSJudW1iZXIiP2UubWluUHJvcGVydGllczp2b2lkIDAsbD10eXBlb2YgZS5tYXhQcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1heFByb3BlcnRpZXM6dm9pZCAwO2lmKGN8fHUhPT12b2lkIDB8fGwhPT12b2lkIDApe2xldCBwO2lmKGMpe2NvbnN0IG09dHlwZW9mIGUucHJvcGVydHlOYW1lcz09Im9iamVjdCImJmUucHJvcGVydHlOYW1lcy50eXBlPT09dm9pZCAwP3t0eXBlOiJzdHJpbmciLC4uLmUucHJvcGVydHlOYW1lc306ZS5wcm9wZXJ0eU5hbWVzO3A9dGUobSx0KX1vPUdnKG8se2tleVNjaGVtYTpwLG1pblByb3BlcnRpZXM6dSxtYXhQcm9wZXJ0aWVzOmx9KX1icmVha31jYXNlImFycmF5Ijp7Y29uc3Qgcj1lLnByZWZpeEl0ZW1zLHM9ZS5pdGVtcztpZihyJiZBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1yLm1hcChwPT50ZShwLHQpKSxjPXFjKGEsaSksdT1BcnJheS5pc0FycmF5KHMpP3ZvaWQgMDpVYyhzLHQpLGw9dy50dXBsZShjKTtvPXU/bC5yZXN0KHUpOmwsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1zLm1hcChwPT50ZShwLHQpKSxjPXFjKGEsaSksdT1VYyhlLmFkZGl0aW9uYWxJdGVtcyx0KSxsPXcudHVwbGUoYyk7bz11P2wucmVzdCh1KTpsLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYocyE9PXZvaWQgMCl7Y29uc3QgaT10ZShzLHQpO2xldCBhPXcuYXJyYXkoaSk7dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYoYT1hLm1pbihlLm1pbkl0ZW1zKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYoYT1hLm1heChlLm1heEl0ZW1zKSksbz1hfWVsc2Ugbz13LmFycmF5KHcuYW55KCkpOyhlLnVuaXF1ZUl0ZW1zPT09ITB8fGUuY29udGFpbnMhPT12b2lkIDApJiYobz1YZyhvLHt1bmlxdWVJdGVtczplLnVuaXF1ZUl0ZW1zPT09ITAsY29udGFpbnNTY2hlbWE6ZS5jb250YWlucyE9PXZvaWQgMD90ZShlLmNvbnRhaW5zLHQpOnZvaWQgMCxtaW5Db250YWluczp0eXBlb2YgZS5taW5Db250YWlucz09Im51bWJlciI/ZS5taW5Db250YWluczp2b2lkIDAsbWF4Q29udGFpbnM6dHlwZW9mIGUubWF4Q29udGFpbnM9PSJudW1iZXIiP2UubWF4Q29udGFpbnM6dm9pZCAwfSkpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke259YCl9cmV0dXJuIG99ZnVuY3Rpb24gdGUoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP3cuYW55KCk6dy5uZXZlcigpO2xldCBuPXNmKGUsdCk7Y29uc3Qgbz1lLnR5cGV8fGUuZW51bSE9PXZvaWQgMHx8ZS5jb25zdCE9PXZvaWQgMDtpZihlLmFueU9mJiZBcnJheS5pc0FycmF5KGUuYW55T2YpKXtjb25zdCBhPWUuYW55T2YubWFwKHU9PnRlKHUsdCkpLGM9dy51bmlvbihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUub25lT2YmJkFycmF5LmlzQXJyYXkoZS5vbmVPZikpe2NvbnN0IGE9ZS5vbmVPZi5tYXAodT0+dGUodSx0KSksYz13LnhvcihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUuYWxsT2YmJkFycmF5LmlzQXJyYXkoZS5hbGxPZikpaWYoZS5hbGxPZi5sZW5ndGg9PT0wKW49bz9uOncuYW55KCk7ZWxzZXtsZXQgYT1vP246dGUoZS5hbGxPZlswXSx0KTtjb25zdCBjPW8/MDoxO2ZvcihsZXQgdT1jO3U8ZS5hbGxPZi5sZW5ndGg7dSsrKWE9dy5pbnRlcnNlY3Rpb24oYSx0ZShlLmFsbE9mW3VdLHQpKTtuPWF9ZS5udWxsYWJsZT09PSEwJiZ0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiYobj13Lm51bGxhYmxlKG4pKSxlLnJlYWRPbmx5PT09ITAmJihuPXcucmVhZG9ubHkobikpLGUuZGVmYXVsdCE9PXZvaWQgMCYmKG49bi5kZWZhdWx0KGUuZGVmYXVsdCkpO2NvbnN0IHI9e30scz1bIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl07Zm9yKGNvbnN0IGEgb2YgcylhIGluIGUmJihyW2FdPWVbYV0pO2NvbnN0IGk9WyJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSJdO2Zvcihjb25zdCBhIG9mIGkpYSBpbiBlJiYoclthXT1lW2FdKTtpZihlLnR5cGU9PT0ib2JqZWN0IiYmZS4kcmVmPT09dm9pZCAwKXtlLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJiFQdChlLnByb3BlcnR5TmFtZXMpJiYoci5wcm9wZXJ0eU5hbWVzPWUucHJvcGVydHlOYW1lcyk7Zm9yKGNvbnN0IGEgb2ZbIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9aWYoZS50eXBlPT09ImFycmF5IiYmZS4kcmVmPT09dm9pZCAwKXtlLmNvbnRhaW5zIT09dm9pZCAwJiYhUHQoZS5jb250YWlucykmJihyLmNvbnRhaW5zPWUuY29udGFpbnMpO2Zvcihjb25zdCBhIG9mWyJ1bmlxdWVJdGVtcyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1mb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhlKSlWZy5oYXMoYSl8fEZlKHIsYSxlW2FdKTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnQucmVnaXN0cnkuYWRkKG4sciksZS5kZXNjcmlwdGlvbiYmKG49bi5kZXNjcmliZShlLmRlc2NyaXB0aW9uKSksbn1mdW5jdGlvbiBhZihlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/dy5hbnkoKTp3Lm5ldmVyKCk7bGV0IG47dHJ5e249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzIil9Y29uc3Qgbz1KZyhuLHQ/LmRlZmF1bHRUYXJnZXQpLHI9bi4kZGVmc3x8bi5kZWZpbml0aW9uc3x8e30scz17dmVyc2lvbjpvLGRlZnM6cixyZWZzOm5ldyBNYXAscHJvY2Vzc2luZzpuZXcgU2V0LHJvb3RTY2hlbWE6bixyZWdpc3RyeTp0Py5yZWdpc3RyeT8/cGV9O3JldHVybiB0ZShuLHMpfWZ1bmN0aW9uIGNmKGUpe3JldHVybiBiaShlLHtvYmplY3Q6dD0+dC5wYXJ0aWFsKCksdW5pb246dD0+e2NvbnN0IG49dC5fem9kLmRlZjtyZXR1cm4gbi5kaXNjcmltaW5hdG9yPT09dm9pZCAwP3Q6SShuLm9wdGlvbnMpfX0pfWZ1bmN0aW9uIHR2KGUsdCl7aWYoIXQ/Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPWUuX3pvZC5kZWY7cmV0dXJuIEgoZSxYKG4se2NoZWNrczpbLi4ubi5jaGVja3M/P1tdLC4uLnRdfSkse3BhcmVudDohMH0pfWZ1bmN0aW9uIHVmKGUpe3JldHVybiB0dihlLm91dCxlLmNoZWNrcyl9ZnVuY3Rpb24gbnYoZSl7cmV0dXJuIGUuaW4uX3pvZC50cmFpdHMuaGFzKCIkWm9kVHJhbnNmb3JtIik/dWYoZSk6ZS5pbn1mdW5jdGlvbiBsZihlKXtyZXR1cm4gYmkoZSx7cGlwZTp0PT5udih0Ll96b2QuZGVmKSxkZWZhdWx0Oih0LG4pPT5uP3EodC5fem9kLmRlZi5pbm5lclR5cGUpOnQsY2F0Y2g6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGRmKGUpe3JldHVybiBiaShlLHtwaXBlOnQ9PnVmKHQuX3pvZC5kZWYpLHByZWZhdWx0Oih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBvdihlKXtyZXR1cm4gcHAoY3QsZSl9ZnVuY3Rpb24gcnYoZSl7cmV0dXJuIHZwKGh0LGUpfWZ1bmN0aW9uIHN2KGUpe3JldHVybiAkcChtdCxlKX1mdW5jdGlvbiBpdihlKXtyZXR1cm4gVHAoZ3QsZSl9ZnVuY3Rpb24gYXYoZSl7cmV0dXJuIGpwKHpuLGUpfWNvbnN0IHBmPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxiaWdpbnQ6aXYsYm9vbGVhbjpzdixkYXRlOmF2LG51bWJlcjpydixzdHJpbmc6b3Z9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksSGM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpvcywkaW5wdXQ6TXMsJG91dHB1dDpqcyxJTlZBTElEOnFzLE5FVkVSOm5zLFRpbWVQcmVjaXNpb246cGksWm9kQW55Ok5vLFpvZEFycmF5OnFvLFpvZEJhc2U2NDpibixab2RCYXNlNjRVUkw6X24sWm9kQmlnSW50Omd0LFpvZEJpZ0ludEZvcm1hdDprbixab2RCb29sZWFuOm10LFpvZENJRFJ2NDpnbixab2RDSURSdjY6dm4sWm9kQ1VJRDp1bixab2RDVUlEMjpsbixab2RDYXRjaDpzcixab2RDb2RlYzprdCxab2RDb21waWxlQXN5bmNFcnJvcjpMcyxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpVcyxab2RDcmVkaXRDYXJkOlJvLFpvZEN1c3RvbTpTdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6T2UsWm9kRGF0ZTp6bixab2REZWZhdWx0OlhvLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpVbyxab2RFMTY0OnluLFpvZEVtYWlsOnJuLFpvZEVtb2ppOmFuLFpvZEVudW06VWUsWm9kRXJyb3I6ZWYsWm9kRXhhY3RPcHRpb25hbDpJbixab2RGaWxlOldvLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gZW99LFpvZEZ1bmN0aW9uOm1yLFpvZEdVSUQ6c24sWm9kSUJBTjpDbyxab2RJUHY0OmhuLFpvZElQdjY6bW4sWm9kSVNPRGF0ZTpsdCxab2RJU09EYXRlVGltZTp1dCxab2RJU09EdXJhdGlvbjpwdCxab2RJU09UaW1lOmR0LFpvZEluc3RhbmNlT2Y6X3IsWm9kSW50ZXJzZWN0aW9uOkhvLFpvZElzc3VlQ29kZTp0Zixab2RKV1Q6d24sWm9kS1NVSUQ6Zm4sWm9kTGF6eTpwcixab2RMaXRlcmFsOktvLFpvZE1BQzpFbyxab2RNYXA6Vm8sWm9kTmFOOmFyLFpvZE5hbm9JRDpjbixab2ROZXZlcjpNbyxab2ROb25PcHRpb25hbDp4bixab2ROdWxsOkFvLFpvZE51bGxhYmxlOlFvLFpvZE51bWJlcjpodCxab2ROdW1iZXJGb3JtYXQ6QWUsWm9kT2JqZWN0OnZ0LFpvZE9wdGlvbmFsOnl0LFpvZFBpcGU6d3QsWm9kUHJlZmF1bHQ6dHIsWm9kUHJlcHJvY2Vzczpjcixab2RQcm9taXNlOmhyLFpvZFJlYWRvbmx5OnVyLFpvZFJlYWxFcnJvcjpzZSxab2RSZWNvcmQ6TGUsWm9kU2V0OkpvLFpvZFN0cmluZzpjdCxab2RTdHJpbmdGb3JtYXQ6QSxab2RTdWNjZXNzOnJyLFpvZFN5bWJvbDpabyxab2RUZW1wbGF0ZUxpdGVyYWw6ZHIsWm9kVHJhbnNmb3JtOkdvLFpvZFR1cGxlOkZvLFpvZFR5cGU6UCxab2RVTElEOmRuLFpvZFVSTDpmdCxab2RVVUlEOnZlLFpvZFVuZGVmaW5lZDpPbyxab2RVbmlvbjpidCxab2RVbmtub3duOmpvLFpvZFZvaWQ6RG8sWm9kWElEOnBuLFpvZFhvcjpMbyxfWm9kU3RyaW5nOm9uLF9kZWZhdWx0OmVyLF9mdW5jdGlvbjpudCxhbnk6JG4sYXJyYXk6UyxiYXNlNjQ6UWksYmFzZTY0dXJsOlhpLGJpZ2ludDpmYSxib29sZWFuOk8sY2F0Y2g6aXIsY2hlY2s6QWEsY2lkcnY0OkdpLGNpZHJ2NjpZaSxjbG9uZTpILGNvZGVjOlJhLGNvZXJjZTpwZixjb21waWxlOkhzLGNvbmZpZzpKLGNvcmU6WXAsY3JlZGl0Q2FyZDp0YSxjdWlkOlVpLGN1aWQyOkhpLGN1cnJlbmN5Q29kZTphYSxjdXN0b206Z3IsZGF0ZTpiYSxkZWNvZGU6emksZGVjb2RlQXN5bmM6UGksZGVlcFBhcnRpYWw6Y2YsZGVzY3JpYmU6TmEsZGlzY3JpbWluYXRlZFVuaW9uOlRuLGUxNjQ6ZWEsZW1haWw6Q2ksZW1vamk6cWksZW5jb2RlOiRpLGVuY29kZUFzeW5jOlRpLGVuZHNXaXRoOld0LGVudW06RyxleGFjdE9wdGlvbmFsOllvLGZpbGU6UGEsZmxhdHRlbkVycm9yOmZvLGZsb2F0MzI6dWEsZmxvYXQ2NDpsYSxmb3JtYXRFcnJvcjpobyxmcm9tSlNPTlNjaGVtYTphZixmdW5jdGlvbjpudCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOkVzLGdldEVycm9yTWFwOm9mLGdsb2JhbFJlZ2lzdHJ5OnBlLGd0OlBlLGd0ZTphZSxndWlkOlppLGhhc2g6Y2EsaGV4OmlhLGhvc3RuYW1lOnNhLGh0dHBVcmw6RGksaWJhbjpuYSxpbmNsdWRlczpKdCxpbnB1dDpsZixpbnN0YW5jZW9mOk1hLGludDpFdCxpbnQzMjpkYSxpbnQ2NDpoYSxpbnRlcnNlY3Rpb246X3QsaW52ZXJ0Q29kZWM6Q2EsaXB2NDpKaSxpcHY2OldpLGlzbzpMYSxqc29uOnFhLGp3dDpvYSxrZXlvZjpfYSxrc3VpZDpWaSxsYXp5OmZyLGxlbmd0aDppdCxsaXRlcmFsOmgsbG9jYWxlczpOcyxsb29zZU9iamVjdDpXLGxvb3NlUmVjb3JkOlNhLGxvd2VyY2FzZTpCdCxsdDpUZSxsdGU6aWUsbWFjOktpLG1hcDokYSxtYXhMZW5ndGg6c3QsbWF4U2l6ZTpCZSxtZW1vaXplcjp3byxtZXRhOmphLG1pbWU6WXQsbWluTGVuZ3RoOlplLG1pblNpemU6SWUsbXVsdGlwbGVPZjpEZSxuYW46RWEsbmFub2lkOkxpLG5hdGl2ZUVudW06VGEsbmVnYXRpdmU6VG8sbmV2ZXI6cWUsbm9ubmVnYXRpdmU6SW8sbm9ub3B0aW9uYWw6b3Isbm9ucG9zaXRpdmU6UG8sbm9ybWFsaXplOlF0LG51bGw6U24sbnVsbGFibGU6dHQsbnVsbGlzaDpJYSxudW1iZXI6VCxvYmplY3Q6dixvcHRpb25hbDpxLG91dHB1dDpkZixvdmVyd3JpdGU6d2UscGFyc2U6eWkscGFyc2VBc3luYzp3aSxwYXJ0aWFsUmVjb3JkOmthLHBpcGU6UnQscG9zaXRpdmU6em8scHJlZmF1bHQ6bnIscHJlcHJvY2VzczpFbixwcmV0dGlmeUVycm9yOnNzLHByb21pc2U6T2EscHJvcGVydGllczpHdCxwcm9wZXJ0eTp4byxyZWFkb25seTpscixyZWNvcmQ6RSxyZWZpbmU6dnIscmVnZXg6RnQscmVnZXhlczpfbyxyZWdpc3RyeTprbyxzYWZlRGVjb2RlOnhpLHNhZmVEZWNvZGVBc3luYzpSaSxzYWZlRW5jb2RlOklpLHNhZmVFbmNvZGVBc3luYzpFaSxzYWZlUGFyc2U6a2ksc2FmZVBhcnNlQXN5bmM6U2ksc2V0OnphLHNldEVycm9yTWFwOm5mLHNpemU6cnQsc2x1Z2lmeTpubixzdGFydHNXaXRoOkt0LHN0cmljdE9iamVjdDp5YSxzdHJpbmc6ZixzdHJpbmdGb3JtYXQ6cmEsc3RyaW5nYm9vbDpEYSxzdWNjZXNzOnhhLHN1cGVyUmVmaW5lOmJyLHN5bWJvbDpnYSx0ZW1wbGF0ZUxpdGVyYWw6WmEsdG9KU09OU2NoZW1hOnZpLHRvTG93ZXJDYXNlOmVuLHRvVXBwZXJDYXNlOnRuLHRvWm9kOm9vLHRyYW5zZm9ybTpQbix0cmVlaWZ5RXJyb3I6cnMsdHJpbTpYdCx0dXBsZTpCbyx1aW50MzI6cGEsdWludDY0Om1hLHVsaWQ6RmksdW5kZWZpbmVkOmV0LHVuaW9uOkksdW5rbm93bjpaLHVwcGVyY2FzZTpWdCx1cmw6TWksdXRpbDp0cyx1dWlkOk9pLHV1aWR2NDpBaSx1dWlkdjY6TmksdXVpZHY3OmppLHZhbGlkYXRlOmdvLHZhbGlkYXRlQXN5bmM6dm8sdm9pZDp2YSx3aXRoUGFyc2VyOkZzLHhpZDpCaSx4b3I6d2F9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksY3Y9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpvcywkaW5wdXQ6TXMsJG91dHB1dDpqcyxJTlZBTElEOnFzLE5FVkVSOm5zLFRpbWVQcmVjaXNpb246cGksWm9kQW55Ok5vLFpvZEFycmF5OnFvLFpvZEJhc2U2NDpibixab2RCYXNlNjRVUkw6X24sWm9kQmlnSW50Omd0LFpvZEJpZ0ludEZvcm1hdDprbixab2RCb29sZWFuOm10LFpvZENJRFJ2NDpnbixab2RDSURSdjY6dm4sWm9kQ1VJRDp1bixab2RDVUlEMjpsbixab2RDYXRjaDpzcixab2RDb2RlYzprdCxab2RDb21waWxlQXN5bmNFcnJvcjpMcyxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpVcyxab2RDcmVkaXRDYXJkOlJvLFpvZEN1c3RvbTpTdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6T2UsWm9kRGF0ZTp6bixab2REZWZhdWx0OlhvLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpVbyxab2RFMTY0OnluLFpvZEVtYWlsOnJuLFpvZEVtb2ppOmFuLFpvZEVudW06VWUsWm9kRXJyb3I6ZWYsWm9kRXhhY3RPcHRpb25hbDpJbixab2RGaWxlOldvLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gZW99LFpvZEZ1bmN0aW9uOm1yLFpvZEdVSUQ6c24sWm9kSUJBTjpDbyxab2RJUHY0OmhuLFpvZElQdjY6bW4sWm9kSVNPRGF0ZTpsdCxab2RJU09EYXRlVGltZTp1dCxab2RJU09EdXJhdGlvbjpwdCxab2RJU09UaW1lOmR0LFpvZEluc3RhbmNlT2Y6X3IsWm9kSW50ZXJzZWN0aW9uOkhvLFpvZElzc3VlQ29kZTp0Zixab2RKV1Q6d24sWm9kS1NVSUQ6Zm4sWm9kTGF6eTpwcixab2RMaXRlcmFsOktvLFpvZE1BQzpFbyxab2RNYXA6Vm8sWm9kTmFOOmFyLFpvZE5hbm9JRDpjbixab2ROZXZlcjpNbyxab2ROb25PcHRpb25hbDp4bixab2ROdWxsOkFvLFpvZE51bGxhYmxlOlFvLFpvZE51bWJlcjpodCxab2ROdW1iZXJGb3JtYXQ6QWUsWm9kT2JqZWN0OnZ0LFpvZE9wdGlvbmFsOnl0LFpvZFBpcGU6d3QsWm9kUHJlZmF1bHQ6dHIsWm9kUHJlcHJvY2Vzczpjcixab2RQcm9taXNlOmhyLFpvZFJlYWRvbmx5OnVyLFpvZFJlYWxFcnJvcjpzZSxab2RSZWNvcmQ6TGUsWm9kU2V0OkpvLFpvZFN0cmluZzpjdCxab2RTdHJpbmdGb3JtYXQ6QSxab2RTdWNjZXNzOnJyLFpvZFN5bWJvbDpabyxab2RUZW1wbGF0ZUxpdGVyYWw6ZHIsWm9kVHJhbnNmb3JtOkdvLFpvZFR1cGxlOkZvLFpvZFR5cGU6UCxab2RVTElEOmRuLFpvZFVSTDpmdCxab2RVVUlEOnZlLFpvZFVuZGVmaW5lZDpPbyxab2RVbmlvbjpidCxab2RVbmtub3duOmpvLFpvZFZvaWQ6RG8sWm9kWElEOnBuLFpvZFhvcjpMbyxfWm9kU3RyaW5nOm9uLF9kZWZhdWx0OmVyLF9mdW5jdGlvbjpudCxhbnk6JG4sYXJyYXk6UyxiYXNlNjQ6UWksYmFzZTY0dXJsOlhpLGJpZ2ludDpmYSxib29sZWFuOk8sY2F0Y2g6aXIsY2hlY2s6QWEsY2lkcnY0OkdpLGNpZHJ2NjpZaSxjbG9uZTpILGNvZGVjOlJhLGNvZXJjZTpwZixjb21waWxlOkhzLGNvbmZpZzpKLGNvcmU6WXAsY3JlZGl0Q2FyZDp0YSxjdWlkOlVpLGN1aWQyOkhpLGN1cnJlbmN5Q29kZTphYSxjdXN0b206Z3IsZGF0ZTpiYSxkZWNvZGU6emksZGVjb2RlQXN5bmM6UGksZGVlcFBhcnRpYWw6Y2YsZGVmYXVsdDpIYyxkZXNjcmliZTpOYSxkaXNjcmltaW5hdGVkVW5pb246VG4sZTE2NDplYSxlbWFpbDpDaSxlbW9qaTpxaSxlbmNvZGU6JGksZW5jb2RlQXN5bmM6VGksZW5kc1dpdGg6V3QsZW51bTpHLGV4YWN0T3B0aW9uYWw6WW8sZmlsZTpQYSxmbGF0dGVuRXJyb3I6Zm8sZmxvYXQzMjp1YSxmbG9hdDY0OmxhLGZvcm1hdEVycm9yOmhvLGZyb21KU09OU2NoZW1hOmFmLGZ1bmN0aW9uOm50LGdldERpc2NyaW1pbmF0ZWRPcHRpb246RXMsZ2V0RXJyb3JNYXA6b2YsZ2xvYmFsUmVnaXN0cnk6cGUsZ3Q6UGUsZ3RlOmFlLGd1aWQ6WmksaGFzaDpjYSxoZXg6aWEsaG9zdG5hbWU6c2EsaHR0cFVybDpEaSxpYmFuOm5hLGluY2x1ZGVzOkp0LGlucHV0OmxmLGluc3RhbmNlb2Y6TWEsaW50OkV0LGludDMyOmRhLGludDY0OmhhLGludGVyc2VjdGlvbjpfdCxpbnZlcnRDb2RlYzpDYSxpcHY0OkppLGlwdjY6V2ksaXNvOkxhLGpzb246cWEsand0Om9hLGtleW9mOl9hLGtzdWlkOlZpLGxhenk6ZnIsbGVuZ3RoOml0LGxpdGVyYWw6aCxsb2NhbGVzOk5zLGxvb3NlT2JqZWN0OlcsbG9vc2VSZWNvcmQ6U2EsbG93ZXJjYXNlOkJ0LGx0OlRlLGx0ZTppZSxtYWM6S2ksbWFwOiRhLG1heExlbmd0aDpzdCxtYXhTaXplOkJlLG1lbW9pemVyOndvLG1ldGE6amEsbWltZTpZdCxtaW5MZW5ndGg6WmUsbWluU2l6ZTpJZSxtdWx0aXBsZU9mOkRlLG5hbjpFYSxuYW5vaWQ6TGksbmF0aXZlRW51bTpUYSxuZWdhdGl2ZTpUbyxuZXZlcjpxZSxub25uZWdhdGl2ZTpJbyxub25vcHRpb25hbDpvcixub25wb3NpdGl2ZTpQbyxub3JtYWxpemU6UXQsbnVsbDpTbixudWxsYWJsZTp0dCxudWxsaXNoOklhLG51bWJlcjpULG9iamVjdDp2LG9wdGlvbmFsOnEsb3V0cHV0OmRmLG92ZXJ3cml0ZTp3ZSxwYXJzZTp5aSxwYXJzZUFzeW5jOndpLHBhcnRpYWxSZWNvcmQ6a2EscGlwZTpSdCxwb3NpdGl2ZTp6byxwcmVmYXVsdDpucixwcmVwcm9jZXNzOkVuLHByZXR0aWZ5RXJyb3I6c3MscHJvbWlzZTpPYSxwcm9wZXJ0aWVzOkd0LHByb3BlcnR5OnhvLHJlYWRvbmx5OmxyLHJlY29yZDpFLHJlZmluZTp2cixyZWdleDpGdCxyZWdleGVzOl9vLHJlZ2lzdHJ5OmtvLHNhZmVEZWNvZGU6eGksc2FmZURlY29kZUFzeW5jOlJpLHNhZmVFbmNvZGU6SWksc2FmZUVuY29kZUFzeW5jOkVpLHNhZmVQYXJzZTpraSxzYWZlUGFyc2VBc3luYzpTaSxzZXQ6emEsc2V0RXJyb3JNYXA6bmYsc2l6ZTpydCxzbHVnaWZ5Om5uLHN0YXJ0c1dpdGg6S3Qsc3RyaWN0T2JqZWN0OnlhLHN0cmluZzpmLHN0cmluZ0Zvcm1hdDpyYSxzdHJpbmdib29sOkRhLHN1Y2Nlc3M6eGEsc3VwZXJSZWZpbmU6YnIsc3ltYm9sOmdhLHRlbXBsYXRlTGl0ZXJhbDpaYSx0b0pTT05TY2hlbWE6dmksdG9Mb3dlckNhc2U6ZW4sdG9VcHBlckNhc2U6dG4sdG9ab2Q6b28sdHJhbnNmb3JtOlBuLHRyZWVpZnlFcnJvcjpycyx0cmltOlh0LHR1cGxlOkJvLHVpbnQzMjpwYSx1aW50NjQ6bWEsdWxpZDpGaSx1bmRlZmluZWQ6ZXQsdW5pb246SSx1bmtub3duOlosdXBwZXJjYXNlOlZ0LHVybDpNaSx1dGlsOnRzLHV1aWQ6T2ksdXVpZHY0OkFpLHV1aWR2NjpOaSx1dWlkdjc6amksdmFsaWRhdGU6Z28sdmFsaWRhdGVBc3luYzp2byx2b2lkOnZhLHdpdGhQYXJzZXI6RnMseGlkOkJpLHhvcjp3YSx6OkhjfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGplPSJpby5tb2RlbGNvbnRleHRwcm90b2NvbC9yZWxhdGVkLXRhc2siLHlyPSIyLjAiLFY9Z3IoZT0+ZSE9PW51bGwmJih0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSksZmY9SShbZigpLFQoKS5pbnQoKV0pLGhmPWYoKTtXKHt0dGw6VCgpLm9wdGlvbmFsKCkscG9sbEludGVydmFsOlQoKS5vcHRpb25hbCgpfSk7Y29uc3QgdXY9dih7dHRsOlQoKS5vcHRpb25hbCgpfSksbHY9dih7dGFza0lkOmYoKX0pLFVhPVcoe3Byb2dyZXNzVG9rZW46ZmYub3B0aW9uYWwoKSxbamVdOmx2Lm9wdGlvbmFsKCl9KSx1ZT12KHtfbWV0YTpVYS5vcHRpb25hbCgpfSksUm49dWUuZXh0ZW5kKHt0YXNrOnV2Lm9wdGlvbmFsKCl9KSxkdj1lPT5Sbi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxZPXYoe21ldGhvZDpmKCkscGFyYW1zOnVlLmxvb3NlKCkub3B0aW9uYWwoKX0pLG1lPXYoe19tZXRhOlVhLm9wdGlvbmFsKCl9KSxnZT12KHttZXRob2Q6ZigpLHBhcmFtczptZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxRPVcoe19tZXRhOlVhLm9wdGlvbmFsKCl9KSxDbj1JKFtmKCksVCgpLmludCgpXSksbWY9dih7anNvbnJwYzpoKHlyKSxpZDpDbiwuLi5ZLnNoYXBlfSkuc3RyaWN0KCksRmM9ZT0+bWYuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsZ2Y9dih7anNvbnJwYzpoKHlyKSwuLi5nZS5zaGFwZX0pLnN0cmljdCgpLHB2PWU9PmdmLnNhZmVQYXJzZShlKS5zdWNjZXNzLEhhPXYoe2pzb25ycGM6aCh5ciksaWQ6Q24scmVzdWx0OlF9KS5zdHJpY3QoKSxCbj1lPT5IYS5zYWZlUGFyc2UoZSkuc3VjY2Vzczt2YXIgajsoZnVuY3Rpb24oZSl7ZVtlLkNvbm5lY3Rpb25DbG9zZWQ9LTMyZTNdPSJDb25uZWN0aW9uQ2xvc2VkIixlW2UuUmVxdWVzdFRpbWVvdXQ9LTMyMDAxXT0iUmVxdWVzdFRpbWVvdXQiLGVbZS5QYXJzZUVycm9yPS0zMjcwMF09IlBhcnNlRXJyb3IiLGVbZS5JbnZhbGlkUmVxdWVzdD0tMzI2MDBdPSJJbnZhbGlkUmVxdWVzdCIsZVtlLk1ldGhvZE5vdEZvdW5kPS0zMjYwMV09Ik1ldGhvZE5vdEZvdW5kIixlW2UuSW52YWxpZFBhcmFtcz0tMzI2MDJdPSJJbnZhbGlkUGFyYW1zIixlW2UuSW50ZXJuYWxFcnJvcj0tMzI2MDNdPSJJbnRlcm5hbEVycm9yIixlW2UuVXJsRWxpY2l0YXRpb25SZXF1aXJlZD0tMzIwNDJdPSJVcmxFbGljaXRhdGlvblJlcXVpcmVkIn0pKGp8fChqPXt9KSk7Y29uc3QgRmE9dih7anNvbnJwYzpoKHlyKSxpZDpDbi5vcHRpb25hbCgpLGVycm9yOnYoe2NvZGU6VCgpLmludCgpLG1lc3NhZ2U6ZigpLGRhdGE6WigpLm9wdGlvbmFsKCl9KX0pLnN0cmljdCgpLGZ2PWU9PkZhLnNhZmVQYXJzZShlKS5zdWNjZXNzLGh2PUkoW21mLGdmLEhhLEZhXSk7SShbSGEsRmFdKTtjb25zdCBCYT1RLnN0cmljdCgpLG12PW1lLmV4dGVuZCh7cmVxdWVzdElkOkNuLm9wdGlvbmFsKCkscmVhc29uOmYoKS5vcHRpb25hbCgpfSksVmE9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6bXZ9KSxndj12KHtzcmM6ZigpLG1pbWVUeXBlOmYoKS5vcHRpb25hbCgpLHNpemVzOlMoZigpKS5vcHRpb25hbCgpLHRoZW1lOkcoWyJsaWdodCIsImRhcmsiXSkub3B0aW9uYWwoKX0pLFpuPXYoe2ljb25zOlMoZ3YpLm9wdGlvbmFsKCl9KSxvdD12KHtuYW1lOmYoKSx0aXRsZTpmKCkub3B0aW9uYWwoKX0pLHdyPW90LmV4dGVuZCh7Li4ub3Quc2hhcGUsLi4uWm4uc2hhcGUsdmVyc2lvbjpmKCksd2Vic2l0ZVVybDpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKX0pLHZ2PV90KHYoe2FwcGx5RGVmYXVsdHM6TygpLm9wdGlvbmFsKCl9KSxFKGYoKSxaKCkpKSxidj1FbihlPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wP3tmb3JtOnt9fTplLF90KHYoe2Zvcm06dnYub3B0aW9uYWwoKSx1cmw6Vi5vcHRpb25hbCgpfSksRShmKCksWigpKS5vcHRpb25hbCgpKSksX3Y9Vyh7bGlzdDpWLm9wdGlvbmFsKCksY2FuY2VsOlYub3B0aW9uYWwoKSxyZXF1ZXN0czpXKHtzYW1wbGluZzpXKHtjcmVhdGVNZXNzYWdlOlYub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksZWxpY2l0YXRpb246Vyh7Y3JlYXRlOlYub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSkseXY9Vyh7bGlzdDpWLm9wdGlvbmFsKCksY2FuY2VsOlYub3B0aW9uYWwoKSxyZXF1ZXN0czpXKHt0b29sczpXKHtjYWxsOlYub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksd3Y9dih7ZXhwZXJpbWVudGFsOkUoZigpLFYpLm9wdGlvbmFsKCksc2FtcGxpbmc6dih7Y29udGV4dDpWLm9wdGlvbmFsKCksdG9vbHM6Vi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpidi5vcHRpb25hbCgpLHJvb3RzOnYoe2xpc3RDaGFuZ2VkOk8oKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpfdi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6RShmKCksVikub3B0aW9uYWwoKX0pLGt2PXVlLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmYoKSxjYXBhYmlsaXRpZXM6d3YsY2xpZW50SW5mbzp3cn0pLFN2PVkuZXh0ZW5kKHttZXRob2Q6aCgiaW5pdGlhbGl6ZSIpLHBhcmFtczprdn0pLCR2PXYoe2V4cGVyaW1lbnRhbDpFKGYoKSxWKS5vcHRpb25hbCgpLGxvZ2dpbmc6Vi5vcHRpb25hbCgpLGNvbXBsZXRpb25zOlYub3B0aW9uYWwoKSxwcm9tcHRzOnYoe2xpc3RDaGFuZ2VkOk8oKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxyZXNvdXJjZXM6dih7c3Vic2NyaWJlOk8oKS5vcHRpb25hbCgpLGxpc3RDaGFuZ2VkOk8oKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0b29sczp2KHtsaXN0Q2hhbmdlZDpPKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6eXYub3B0aW9uYWwoKSxleHRlbnNpb25zOkUoZigpLFYpLm9wdGlvbmFsKCl9KSx6dj1RLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmYoKSxjYXBhYmlsaXRpZXM6JHYsc2VydmVySW5mbzp3cixpbnN0cnVjdGlvbnM6ZigpLm9wdGlvbmFsKCl9KSxUdj1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOm1lLm9wdGlvbmFsKCl9KSxrcj1ZLmV4dGVuZCh7bWV0aG9kOmgoInBpbmciKSxwYXJhbXM6dWUub3B0aW9uYWwoKX0pLFB2PXYoe3Byb2dyZXNzOlQoKSx0b3RhbDpxKFQoKSksbWVzc2FnZTpxKGYoKSl9KSxJdj12KHsuLi5tZS5zaGFwZSwuLi5Qdi5zaGFwZSxwcm9ncmVzc1Rva2VuOmZmfSksSmE9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9wcm9ncmVzcyIpLHBhcmFtczpJdn0pLHh2PXVlLmV4dGVuZCh7Y3Vyc29yOmhmLm9wdGlvbmFsKCl9KSxPbj1ZLmV4dGVuZCh7cGFyYW1zOnh2Lm9wdGlvbmFsKCl9KSxBbj1RLmV4dGVuZCh7bmV4dEN1cnNvcjpoZi5vcHRpb25hbCgpfSksRXY9RyhbIndvcmtpbmciLCJpbnB1dF9yZXF1aXJlZCIsImNvbXBsZXRlZCIsImZhaWxlZCIsImNhbmNlbGxlZCJdKSxObj12KHt0YXNrSWQ6ZigpLHN0YXR1czpFdix0dGw6SShbVCgpLFNuKCldKSxjcmVhdGVkQXQ6ZigpLGxhc3RVcGRhdGVkQXQ6ZigpLHBvbGxJbnRlcnZhbDpxKFQoKSksc3RhdHVzTWVzc2FnZTpxKGYoKSl9KSxLYT1RLmV4dGVuZCh7dGFzazpObn0pLFJ2PW1lLm1lcmdlKE5uKSx0bz1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpSdn0pLFdhPVkuZXh0ZW5kKHttZXRob2Q6aCgidGFza3MvZ2V0IikscGFyYW1zOnVlLmV4dGVuZCh7dGFza0lkOmYoKX0pfSksR2E9US5tZXJnZShObiksWWE9WS5leHRlbmQoe21ldGhvZDpoKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6dWUuZXh0ZW5kKHt0YXNrSWQ6ZigpfSl9KTtRLmxvb3NlKCk7Y29uc3QgUWE9T24uZXh0ZW5kKHttZXRob2Q6aCgidGFza3MvbGlzdCIpfSksWGE9QW4uZXh0ZW5kKHt0YXNrczpTKE5uKX0pLGVjPVkuZXh0ZW5kKHttZXRob2Q6aCgidGFza3MvY2FuY2VsIikscGFyYW1zOnVlLmV4dGVuZCh7dGFza0lkOmYoKX0pfSksQ3Y9US5tZXJnZShObiksdmY9dih7dXJpOmYoKSxtaW1lVHlwZTpxKGYoKSksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksYmY9dmYuZXh0ZW5kKHt0ZXh0OmYoKX0pLHRjPWYoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksX2Y9dmYuZXh0ZW5kKHtibG9iOnRjfSksam49RyhbInVzZXIiLCJhc3Npc3RhbnQiXSksJHQ9dih7YXVkaWVuY2U6Uyhqbikub3B0aW9uYWwoKSxwcmlvcml0eTpUKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGxhc3RNb2RpZmllZDpyZih7b2Zmc2V0OiEwfSkub3B0aW9uYWwoKX0pLHlmPXYoey4uLm90LnNoYXBlLC4uLlpuLnNoYXBlLHVyaTpmKCksZGVzY3JpcHRpb246cShmKCkpLG1pbWVUeXBlOnEoZigpKSxzaXplOnEoVCgpKSxhbm5vdGF0aW9uczokdC5vcHRpb25hbCgpLF9tZXRhOnEoVyh7fSkpfSksWnY9dih7Li4ub3Quc2hhcGUsLi4uWm4uc2hhcGUsdXJpVGVtcGxhdGU6ZigpLGRlc2NyaXB0aW9uOnEoZigpKSxtaW1lVHlwZTpxKGYoKSksYW5ub3RhdGlvbnM6JHQub3B0aW9uYWwoKSxfbWV0YTpxKFcoe30pKX0pLE92PU9uLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy9saXN0Iil9KSx3Zj1Bbi5leHRlbmQoe3Jlc291cmNlczpTKHlmKX0pLEF2PU9uLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksTnY9QW4uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpTKFp2KX0pLG5jPXVlLmV4dGVuZCh7dXJpOmYoKX0pLGp2PW5jLE12PVkuZXh0ZW5kKHttZXRob2Q6aCgicmVzb3VyY2VzL3JlYWQiKSxwYXJhbXM6anZ9KSxrZj1RLmV4dGVuZCh7Y29udGVudHM6UyhJKFtiZixfZl0pKX0pLER2PWdlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczptZS5vcHRpb25hbCgpfSkscXY9bmMsTHY9WS5leHRlbmQoe21ldGhvZDpoKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOnF2fSksVXY9bmMsSHY9WS5leHRlbmQoe21ldGhvZDpoKCJyZXNvdXJjZXMvdW5zdWJzY3JpYmUiKSxwYXJhbXM6VXZ9KSxGdj1tZS5leHRlbmQoe3VyaTpmKCl9KSxCdj1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL3Jlc291cmNlcy91cGRhdGVkIikscGFyYW1zOkZ2fSksVnY9dih7bmFtZTpmKCksZGVzY3JpcHRpb246cShmKCkpLHJlcXVpcmVkOnEoTygpKX0pLEp2PXYoey4uLm90LnNoYXBlLC4uLlpuLnNoYXBlLGRlc2NyaXB0aW9uOnEoZigpKSxhcmd1bWVudHM6cShTKFZ2KSksX21ldGE6cShXKHt9KSl9KSxLdj1Pbi5leHRlbmQoe21ldGhvZDpoKCJwcm9tcHRzL2xpc3QiKX0pLFd2PUFuLmV4dGVuZCh7cHJvbXB0czpTKEp2KX0pLEd2PXVlLmV4dGVuZCh7bmFtZTpmKCksYXJndW1lbnRzOkUoZigpLGYoKSkub3B0aW9uYWwoKX0pLFl2PVkuZXh0ZW5kKHttZXRob2Q6aCgicHJvbXB0cy9nZXQiKSxwYXJhbXM6R3Z9KSxvYz12KHt0eXBlOmgoInRleHQiKSx0ZXh0OmYoKSxhbm5vdGF0aW9uczokdC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLHJjPXYoe3R5cGU6aCgiaW1hZ2UiKSxkYXRhOnRjLG1pbWVUeXBlOmYoKSxhbm5vdGF0aW9uczokdC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLHNjPXYoe3R5cGU6aCgiYXVkaW8iKSxkYXRhOnRjLG1pbWVUeXBlOmYoKSxhbm5vdGF0aW9uczokdC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLFF2PXYoe3R5cGU6aCgidG9vbF91c2UiKSxuYW1lOmYoKSxpZDpmKCksaW5wdXQ6RShmKCksWigpKSxfbWV0YTpFKGYoKSxaKCkpLm9wdGlvbmFsKCl9KSxTZj12KHt0eXBlOmgoInJlc291cmNlIikscmVzb3VyY2U6SShbYmYsX2ZdKSxhbm5vdGF0aW9uczokdC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLCRmPXlmLmV4dGVuZCh7dHlwZTpoKCJyZXNvdXJjZV9saW5rIil9KSxNbj1JKFtvYyxyYyxzYywkZixTZl0pLFh2PXYoe3JvbGU6am4sY29udGVudDpNbn0pLGViPVEuZXh0ZW5kKHtkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtZXNzYWdlczpTKFh2KX0pLHRiPWdlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvcHJvbXB0cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6bWUub3B0aW9uYWwoKX0pLG5iPXYoe3RpdGxlOmYoKS5vcHRpb25hbCgpLHJlYWRPbmx5SGludDpPKCkub3B0aW9uYWwoKSxkZXN0cnVjdGl2ZUhpbnQ6TygpLm9wdGlvbmFsKCksaWRlbXBvdGVudEhpbnQ6TygpLm9wdGlvbmFsKCksb3BlbldvcmxkSGludDpPKCkub3B0aW9uYWwoKX0pLG9iPXYoe3Rhc2tTdXBwb3J0OkcoWyJyZXF1aXJlZCIsIm9wdGlvbmFsIiwiZm9yYmlkZGVuIl0pLm9wdGlvbmFsKCl9KSxpYz12KHsuLi5vdC5zaGFwZSwuLi5abi5zaGFwZSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxpbnB1dFNjaGVtYTp2KHt0eXBlOmgoIm9iamVjdCIpLHByb3BlcnRpZXM6RShmKCksVikub3B0aW9uYWwoKSxyZXF1aXJlZDpTKGYoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKFooKSksb3V0cHV0U2NoZW1hOnYoe3R5cGU6aCgib2JqZWN0IikscHJvcGVydGllczpFKGYoKSxWKS5vcHRpb25hbCgpLHJlcXVpcmVkOlMoZigpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoWigpKS5vcHRpb25hbCgpLGFubm90YXRpb25zOm5iLm9wdGlvbmFsKCksZXhlY3V0aW9uOm9iLm9wdGlvbmFsKCksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksemY9T24uZXh0ZW5kKHttZXRob2Q6aCgidG9vbHMvbGlzdCIpfSkscmI9QW4uZXh0ZW5kKHt0b29sczpTKGljKX0pLFNyPVEuZXh0ZW5kKHtjb250ZW50OlMoTW4pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OkUoZigpLFooKSkub3B0aW9uYWwoKSxpc0Vycm9yOk8oKS5vcHRpb25hbCgpfSk7U3Iub3IoUS5leHRlbmQoe3Rvb2xSZXN1bHQ6WigpfSkpO2NvbnN0IHNiPVJuLmV4dGVuZCh7bmFtZTpmKCksYXJndW1lbnRzOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLFRmPVkuZXh0ZW5kKHttZXRob2Q6aCgidG9vbHMvY2FsbCIpLHBhcmFtczpzYn0pLGliPWdlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOm1lLm9wdGlvbmFsKCl9KTt2KHthdXRvUmVmcmVzaDpPKCkuZGVmYXVsdCghMCksZGVib3VuY2VNczpUKCkuaW50KCkubm9ubmVnYXRpdmUoKS5kZWZhdWx0KDMwMCl9KTtjb25zdCBQZj1HKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSxhYj11ZS5leHRlbmQoe2xldmVsOlBmfSksY2I9WS5leHRlbmQoe21ldGhvZDpoKCJsb2dnaW5nL3NldExldmVsIikscGFyYW1zOmFifSksdWI9bWUuZXh0ZW5kKHtsZXZlbDpQZixsb2dnZXI6ZigpLm9wdGlvbmFsKCksZGF0YTpaKCl9KSxsYj1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL21lc3NhZ2UiKSxwYXJhbXM6dWJ9KSxkYj12KHtuYW1lOmYoKS5vcHRpb25hbCgpfSkscGI9dih7aGludHM6UyhkYikub3B0aW9uYWwoKSxjb3N0UHJpb3JpdHk6VCgpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxzcGVlZFByaW9yaXR5OlQoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksaW50ZWxsaWdlbmNlUHJpb3JpdHk6VCgpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKX0pLGZiPXYoe21vZGU6RyhbImF1dG8iLCJyZXF1aXJlZCIsIm5vbmUiXSkub3B0aW9uYWwoKX0pLGhiPXYoe3R5cGU6aCgidG9vbF9yZXN1bHQiKSx0b29sVXNlSWQ6ZigpLmRlc2NyaWJlKCJUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHRvb2wgY2FsbC4iKSxjb250ZW50OlMoTW4pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OnYoe30pLmxvb3NlKCkub3B0aW9uYWwoKSxpc0Vycm9yOk8oKS5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLG1iPVRuKCJ0eXBlIixbb2MscmMsc2NdKSxubz1UbigidHlwZSIsW29jLHJjLHNjLFF2LGhiXSksZ2I9dih7cm9sZTpqbixjb250ZW50OkkoW25vLFMobm8pXSksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksdmI9Um4uZXh0ZW5kKHttZXNzYWdlczpTKGdiKSxtb2RlbFByZWZlcmVuY2VzOnBiLm9wdGlvbmFsKCksc3lzdGVtUHJvbXB0OmYoKS5vcHRpb25hbCgpLGluY2x1ZGVDb250ZXh0OkcoWyJub25lIiwidGhpc1NlcnZlciIsImFsbFNlcnZlcnMiXSkub3B0aW9uYWwoKSx0ZW1wZXJhdHVyZTpUKCkub3B0aW9uYWwoKSxtYXhUb2tlbnM6VCgpLmludCgpLHN0b3BTZXF1ZW5jZXM6UyhmKCkpLm9wdGlvbmFsKCksbWV0YWRhdGE6Vi5vcHRpb25hbCgpLHRvb2xzOlMoaWMpLm9wdGlvbmFsKCksdG9vbENob2ljZTpmYi5vcHRpb25hbCgpfSksYmI9WS5leHRlbmQoe21ldGhvZDpoKCJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIikscGFyYW1zOnZifSksSWY9US5leHRlbmQoe21vZGVsOmYoKSxzdG9wUmVhc29uOnEoRyhbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoZigpKSkscm9sZTpqbixjb250ZW50Om1ifSkseGY9US5leHRlbmQoe21vZGVsOmYoKSxzdG9wUmVhc29uOnEoRyhbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiLCJ0b29sVXNlIl0pLm9yKGYoKSkpLHJvbGU6am4sY29udGVudDpJKFtubyxTKG5vKV0pfSksX2I9dih7dHlwZTpoKCJib29sZWFuIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksZGVmYXVsdDpPKCkub3B0aW9uYWwoKX0pLHliPXYoe3R5cGU6aCgic3RyaW5nIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksbWluTGVuZ3RoOlQoKS5vcHRpb25hbCgpLG1heExlbmd0aDpUKCkub3B0aW9uYWwoKSxmb3JtYXQ6RyhbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6ZigpLm9wdGlvbmFsKCl9KSx3Yj12KHt0eXBlOkcoWyJudW1iZXIiLCJpbnRlZ2VyIl0pLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG1pbmltdW06VCgpLm9wdGlvbmFsKCksbWF4aW11bTpUKCkub3B0aW9uYWwoKSxkZWZhdWx0OlQoKS5vcHRpb25hbCgpfSksa2I9dih7dHlwZTpoKCJzdHJpbmciKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxlbnVtOlMoZigpKSxkZWZhdWx0OmYoKS5vcHRpb25hbCgpfSksU2I9dih7dHlwZTpoKCJzdHJpbmciKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxvbmVPZjpTKHYoe2NvbnN0OmYoKSx0aXRsZTpmKCl9KSksZGVmYXVsdDpmKCkub3B0aW9uYWwoKX0pLCRiPXYoe3R5cGU6aCgic3RyaW5nIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksZW51bTpTKGYoKSksZW51bU5hbWVzOlMoZigpKS5vcHRpb25hbCgpLGRlZmF1bHQ6ZigpLm9wdGlvbmFsKCl9KSx6Yj1JKFtrYixTYl0pLFRiPXYoe3R5cGU6aCgiYXJyYXkiKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtaW5JdGVtczpUKCkub3B0aW9uYWwoKSxtYXhJdGVtczpUKCkub3B0aW9uYWwoKSxpdGVtczp2KHt0eXBlOmgoInN0cmluZyIpLGVudW06UyhmKCkpfSksZGVmYXVsdDpTKGYoKSkub3B0aW9uYWwoKX0pLFBiPXYoe3R5cGU6aCgiYXJyYXkiKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtaW5JdGVtczpUKCkub3B0aW9uYWwoKSxtYXhJdGVtczpUKCkub3B0aW9uYWwoKSxpdGVtczp2KHthbnlPZjpTKHYoe2NvbnN0OmYoKSx0aXRsZTpmKCl9KSl9KSxkZWZhdWx0OlMoZigpKS5vcHRpb25hbCgpfSksSWI9SShbVGIsUGJdKSx4Yj1JKFskYix6YixJYl0pLEViPUkoW3hiLF9iLHliLHdiXSksUmI9Um4uZXh0ZW5kKHttb2RlOmgoImZvcm0iKS5vcHRpb25hbCgpLG1lc3NhZ2U6ZigpLHJlcXVlc3RlZFNjaGVtYTp2KHt0eXBlOmgoIm9iamVjdCIpLHByb3BlcnRpZXM6RShmKCksRWIpLHJlcXVpcmVkOlMoZigpKS5vcHRpb25hbCgpfSl9KSxDYj1Sbi5leHRlbmQoe21vZGU6aCgidXJsIiksbWVzc2FnZTpmKCksZWxpY2l0YXRpb25JZDpmKCksdXJsOmYoKS51cmwoKX0pLFpiPUkoW1JiLENiXSksT2I9WS5leHRlbmQoe21ldGhvZDpoKCJlbGljaXRhdGlvbi9jcmVhdGUiKSxwYXJhbXM6WmJ9KSxBYj1tZS5leHRlbmQoe2VsaWNpdGF0aW9uSWQ6ZigpfSksTmI9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9lbGljaXRhdGlvbi9jb21wbGV0ZSIpLHBhcmFtczpBYn0pLGpiPVEuZXh0ZW5kKHthY3Rpb246RyhbImFjY2VwdCIsImRlY2xpbmUiLCJjYW5jZWwiXSksY29udGVudDpFbihlPT5lPT09bnVsbD92b2lkIDA6ZSxFKGYoKSxJKFtmKCksVCgpLE8oKSxTKGYoKSldKSkub3B0aW9uYWwoKSl9KSxNYj12KHt0eXBlOmgoInJlZi9yZXNvdXJjZSIpLHVyaTpmKCl9KSxEYj12KHt0eXBlOmgoInJlZi9wcm9tcHQiKSxuYW1lOmYoKX0pLHFiPXVlLmV4dGVuZCh7cmVmOkkoW0RiLE1iXSksYXJndW1lbnQ6dih7bmFtZTpmKCksdmFsdWU6ZigpfSksY29udGV4dDp2KHthcmd1bWVudHM6RShmKCksZigpKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLExiPVkuZXh0ZW5kKHttZXRob2Q6aCgiY29tcGxldGlvbi9jb21wbGV0ZSIpLHBhcmFtczpxYn0pLFViPVEuZXh0ZW5kKHtjb21wbGV0aW9uOlcoe3ZhbHVlczpTKGYoKSkubWF4KDEwMCksdG90YWw6cShUKCkuaW50KCkpLGhhc01vcmU6cShPKCkpfSl9KSxIYj12KHt1cmk6ZigpLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKSxuYW1lOmYoKS5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLEZiPVkuZXh0ZW5kKHttZXRob2Q6aCgicm9vdHMvbGlzdCIpLHBhcmFtczp1ZS5vcHRpb25hbCgpfSksQmI9US5leHRlbmQoe3Jvb3RzOlMoSGIpfSksVmI9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6bWUub3B0aW9uYWwoKX0pO0koW2tyLFN2LExiLGNiLFl2LEt2LE92LEF2LE12LEx2LEh2LFRmLHpmLFdhLFlhLFFhLGVjXSk7SShbVmEsSmEsVHYsVmIsdG9dKTtJKFtCYSxJZix4ZixqYixCYixHYSxYYSxLYV0pO0koW2tyLGJiLE9iLEZiLFdhLFlhLFFhLGVjXSk7SShbVmEsSmEsbGIsQnYsRHYsaWIsdGIsdG8sTmJdKTtJKFtCYSx6dixVYixlYixXdix3ZixOdixrZixTcixyYixHYSxYYSxLYV0pO2NsYXNzIEMgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PWouVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcgSmIoci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBDKHQsbixvKX19Y2xhc3MgSmIgZXh0ZW5kcyBDe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihqLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24gQmMoZSl7Y29uc3Qgbj1NZyhlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89RGcobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiBWYyhlLHQpe2NvbnN0IG49UXAoZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCBLYj02ZTQ7Y2xhc3MgV2J7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoVmEsbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKEphLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihrcixuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFdhLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IEMoai5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFlhLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgYTtmb3IoO2E9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoYS50eXBlPT09InJlc3BvbnNlInx8YS50eXBlPT09ImVycm9yIil7Y29uc3QgYz1hLm1lc3NhZ2UsdT1jLmlkLGw9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQodSk7aWYobClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZSh1KSxhLnR5cGU9PT0icmVzcG9uc2UiKWwoYyk7ZWxzZXtjb25zdCBwPWMsbT1uZXcgQyhwLmVycm9yLmNvZGUscC5lcnJvci5tZXNzYWdlLHAuZXJyb3IuZGF0YSk7bChtKX1lbHNle2NvbnN0IHA9YS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7cH0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7dX1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGEubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFpKXRocm93IG5ldyBDKGouSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighTmUoaS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoTmUoaS5zdGF0dXMpKXtjb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uYSxfbWV0YTp7Li4uYS5fbWV0YSxbamVdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihRYSxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IEMoai5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKGVjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBDKGouSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKE5lKHIuc3RhdHVzKSl0aHJvdyBuZXcgQyhqLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBDKGouSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIEM/cjpuZXcgQyhqLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLEMuZnJvbUVycm9yKGouUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGkpPT57cj8uKHMsaSksQm4ocyl8fGZ2KHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6RmMocyk/dGhpcy5fb25yZXF1ZXN0KHMsaSk6cHYocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49Qy5mcm9tRXJyb3Ioai5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bamVdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgbD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOmouTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpsLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKHA9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHtwfWApKSk6cj8uc2VuZChsKS5jYXRjaChwPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7cH1gKSkpO3JldHVybn1jb25zdCBpPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGkpO2NvbnN0IGE9ZHYodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLGM9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLHU9e3NpZ25hbDppLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGw9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBwPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihwLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwscCl9LHNlbmRSZXF1ZXN0OmFzeW5jKGwscCxtKT0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEMoai5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCBiPXsuLi5tLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIWIucmVsYXRlZFRhc2smJihiLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IHk9Yi5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiB5JiZjJiZhd2FpdCBjLnVwZGF0ZVRhc2tTdGF0dXMoeSwiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QobCxwLGIpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6Yyx0YXNrUmVxdWVzdGVkVHRsOmE/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57YSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LHUpKS50aGVuKGFzeW5jIGw9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBwPXtyZXN1bHQ6bCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOnAsdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChwKX0sYXN5bmMgbD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IHA9e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihsLmNvZGUpP2wuY29kZTpqLkludGVybmFsRXJyb3IsbWVzc2FnZTpsLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4ubC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpsLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6cCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKHApfSkuY2F0Y2gobD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2x9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWkmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgaT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxhPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihhJiZpJiZhLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaChjKXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxpKGMpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobiksQm4odCkpbyh0KTtlbHNle2NvbnN0IGk9bmV3IEModC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oaSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKEJuKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgaT10LnJlc3VsdDtpZihpLnRhc2smJnR5cGVvZiBpLnRhc2s9PSJvYmplY3QiKXtjb25zdCBhPWkudGFzazt0eXBlb2YgYS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGEudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksQm4odCkpcih0KTtlbHNle2NvbnN0IGk9Qy5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoaSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIEM/aTpuZXcgQyhqLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBpPWF3YWl0IHRoaXMucmVxdWVzdCh0LEthLG8pO2lmKGkudGFzaylzPWkudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6aS50YXNrfTtlbHNlIHRocm93IG5ldyBDKGouSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGE9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazphfSxOZShhLnN0YXR1cykpe2Euc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06YS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IEMoai5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9OmEuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IEMoai5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGEuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IGM9YS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UodT0+c2V0VGltZW91dCh1LGMpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGkpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjppIGluc3RhbmNlb2YgQz9pOm5ldyBDKGouSW50ZXJuYWxFcnJvcixTdHJpbmcoaSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmksdGFzazphLHJlbGF0ZWRUYXNrOmN9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgodSxsKT0+e2NvbnN0IHA9Uj0+e2woUil9O2lmKCF0aGlzLl90cmFuc3BvcnQpe3AobmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksYSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goUil7cChSKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IG09dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLGI9ey4uLnQsanNvbnJwYzoiMi4wIixpZDptfTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQobSxvLm9ucHJvZ3Jlc3MpLGIucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOm19fSksYSYmKGIucGFyYW1zPXsuLi5iLnBhcmFtcyx0YXNrOmF9KSxjJiYoYi5wYXJhbXM9ey4uLmIucGFyYW1zLF9tZXRhOnsuLi5iLnBhcmFtcz8uX21ldGF8fHt9LFtqZV06Y319KTtjb25zdCB5PVI9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShtKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShtKSx0aGlzLl9jbGVhbnVwVGltZW91dChtKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6bSxyZWFzb246U3RyaW5nKFIpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2gob2U9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7b2V9YCkpKTtjb25zdCBGPVIgaW5zdGFuY2VvZiBDP1I6bmV3IEMoai5SZXF1ZXN0VGltZW91dCxTdHJpbmcoUikpO2woRil9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KG0sUj0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKFIgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbChSKTt0cnl7Y29uc3QgRj1RcChuLFIucmVzdWx0KTtGLnN1Y2Nlc3M/dShGLmRhdGEpOmwoRi5lcnJvcil9Y2F0Y2goRil7bChGKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9Pnt5KG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IGs9bz8udGltZW91dD8/S2IsJD0oKT0+eShDLmZyb21FcnJvcihqLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6a30pKTt0aGlzLl9zZXR1cFRpbWVvdXQobSxrLG8/Lm1heFRvdGFsVGltZW91dCwkLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBOPWM/LnRhc2tJZDtpZihOKXtjb25zdCBSPUY9Pntjb25zdCBvZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChtKTtvZT9vZShGKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7bX1gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KG0sUiksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKE4se3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6Yix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKEY9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChtKSxsKEYpfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZChiLHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKFI9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChtKSxsKFIpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSxHYSxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0sWGEsbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0sQ3Ysbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBhPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbamVdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTphLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGE9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihhPXsuLi5hLHBhcmFtczp7Li4uYS5wYXJhbXMsX21ldGE6ey4uLmEucGFyYW1zPy5fbWV0YXx8e30sW2plXTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoYSxuKS5jYXRjaChjPT50aGlzLl9vbmVycm9yKGMpKX0pO3JldHVybn1sZXQgaT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGk9ey4uLmkscGFyYW1zOnsuLi5pLnBhcmFtcyxfbWV0YTp7Li4uaS5wYXJhbXM/Ll9tZXRhfHx7fSxbamVdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGksbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPUJjKHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGk9VmModCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oaSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPUJjKHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPVZjKHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZGYyhyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxpPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2k/KGkobmV3IEMoai5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgQyhqLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgaT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoaSkscyhuZXcgQyhqLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IEMoai5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxpKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxpLG4pO2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoYSl7Y29uc3QgYz10by5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOmF9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihjKSxOZShhLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxpKT0+e2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWEpdGhyb3cgbmV3IEMoai5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihOZShhLnN0YXR1cykpdGhyb3cgbmV3IEMoai5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2Euc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGksbik7Y29uc3QgYz1hd2FpdCBvLmdldFRhc2socixuKTtpZihjKXtjb25zdCB1PXRvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6Y30pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKHUpLE5lKGMuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIEpjKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBHYihlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBpPW5bcl07SmMoaSkmJkpjKHMpP25bcl09ey4uLmksLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIFliIGV4dGVuZHMgV2J7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8saT0+e2xldCBhPWkucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsYSkscy5vbkhhbmRsZXI/LihhKTtmb3IobGV0IGMgb2ZbLi4ucy5saXN0ZW5lcnNdKWMoYSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIFFiPSIyMDI2LTAxLTI2IixYYj0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIGVfe2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj1odi5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PVhiJiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgdF89SShbaCgibGlnaHQiKSxoKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIiksQ3Q9SShbaCgiaW5saW5lIiksaCgiZnVsbHNjcmVlbiIpLGgoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLG5fPUkoW2goIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxoKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGgoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksaCgiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGgoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGgoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksaCgiLS1jb2xvci10ZXh0LWdob3N0IiksaCgiLS1jb2xvci10ZXh0LWluZm8iKSxoKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksaCgiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxoKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGgoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGgoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxoKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxoKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGgoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxoKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGgoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxoKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxoKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksaCgiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGgoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksaCgiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxoKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksaCgiLS1jb2xvci1yaW5nLWludmVyc2UiKSxoKCItLWNvbG9yLXJpbmctaW5mbyIpLGgoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxoKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGgoIi0tY29sb3ItcmluZy13YXJuaW5nIiksaCgiLS1mb250LXNhbnMiKSxoKCItLWZvbnQtbW9ubyIpLGgoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksaCgiLS1mb250LXdlaWdodC1tZWRpdW0iKSxoKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksaCgiLS1mb250LXdlaWdodC1ib2xkIiksaCgiLS1mb250LXRleHQteHMtc2l6ZSIpLGgoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxoKCItLWZvbnQtdGV4dC1tZC1zaXplIiksaCgiLS1mb250LXRleHQtbGctc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksaCgiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksaCgiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGgoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGgoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGgoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGgoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGgoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGgoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGgoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGgoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksaCgiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGgoIi0tc2hhZG93LWhhaXJsaW5lIiksaCgiLS1zaGFkb3ctc20iKSxoKCItLXNoYWRvdy1tZCIpLGgoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLG9fPUUobl8uZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksSShbZigpLGV0KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7dih7bWV0aG9kOmgoInVpL29wZW4tbGluayIpLHBhcmFtczp2KHt1cmw6ZigpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIHJfPXYoe2lzRXJyb3I6TygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLHNfPXYoe2lzRXJyb3I6TygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSxpXz12KHtpc0Vycm9yOk8oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTt2KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOnYoe30pfSk7dmFyIGFjPXYoe2Nvbm5lY3REb21haW5zOlMoZigpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczpTKGYoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6UyhmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6UyhmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLGNjPXYoe2NhbWVyYTp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOnYoe3dpZHRoOlQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpUKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBhXz12KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOnYoe2FyZ3VtZW50czpFKGYoKSxaKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSksY189dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOnYoe2FyZ3VtZW50czpFKGYoKSxaKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLHVfPXYoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOnYoe3JlYXNvbjpmKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSxsXz12KHtmb250czpmKCkub3B0aW9uYWwoKX0pLGRfPXYoe3ZhcmlhYmxlczpvXy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOmxfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxwXz12KHttZXRob2Q6aCgidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6dih7fSl9KTtFKGYoKSxaKCkpO3ZhciBLYz12KHt0ZXh0OnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50OnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczp2KHt9KS5vcHRpb25hbCgpfSk7dmFyIGZfPXYoe2V4cGVyaW1lbnRhbDpFKGYoKSxFKGYoKSwkbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczp2KHtsaXN0Q2hhbmdlZDpPKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOnYoe2xpc3RDaGFuZ2VkOk8oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94OnYoe3Blcm1pc3Npb25zOmNjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDphYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDpLYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6S2Mub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzp2KHt0b29sczp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSxoXz12KHtleHBlcmltZW50YWw6RShmKCksRShmKCksJG4oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczp2KHtsaXN0Q2hhbmdlZDpPKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOlMoQ3QpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO3Yoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOnYoe30pLm9wdGlvbmFsKCl9KTt2KHtjc3A6YWMub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOmNjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6TygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTt2KHttZXRob2Q6aCgidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6dih7bW9kZTpDdC5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciBtXz12KHttb2RlOkN0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSxnXz1JKFtoKCJtb2RlbCIpLGgoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO3Yoe3Jlc291cmNlVXJpOmYoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6UyhnXykub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpxZSgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6cWUoKS5vcHRpb25hbCgpfSk7dih7bWltZVR5cGVzOlMoZigpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7dih7bWV0aG9kOmgoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6dih7Y29udGVudHM6UyhJKFtTZiwkZl0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7dih7bWV0aG9kOmgoInVpL21lc3NhZ2UiKSxwYXJhbXM6dih7cm9sZTpoKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OlMoTW4pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO3Yoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6dih7aHRtbDpmKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDphYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOmNjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIHZfPXYoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOlNyLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSksRWY9dih7dG9vbEluZm86dih7aWQ6Q24ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOmljLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOnRfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6ZF8ub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOkN0Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UyhDdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOkkoW3Yoe2hlaWdodDpUKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksdih7bWF4SGVpZ2h0OkkoW1QoKSxldCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKEkoW3Yoe3dpZHRoOlQoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLHYoe21heFdpZHRoOkkoW1QoKSxldCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpmKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06SShbaCgid2ViIiksaCgiZGVza3RvcCIpLGgoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczp2KHt0b3VjaDpPKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOk8oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czp2KHt0b3A6VCgpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpUKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOlQoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpUKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLGJfPXYoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOkVmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO3Yoe21ldGhvZDpoKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczp2KHtjb250ZW50OlMoTW4pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpFKGYoKSxaKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO3Yoe21ldGhvZDpoKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOnYoe2FwcEluZm86d3IuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOmhfLmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpmKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciBfXz12KHtwcm90b2NvbFZlcnNpb246ZigpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOndyLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6Zl8uZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6RWYuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCkseV89e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIFdjKGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0oeV8pO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IEtmKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5jdiksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiBHYyhlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGk9cy5wYXRoPy5tYXAoYT0+dHlwZW9mIGE9PSJvYmplY3QiP2Eua2V5OmEpLmpvaW4oIi4iKTtyZXR1cm4gaT9gJHtpfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24gd18oZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24ga18oZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uIFNfKGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgdWMgZXh0ZW5kcyBZYntfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6YV8sdG9vbGlucHV0cGFydGlhbDpjXyx0b29scmVzdWx0OnZfLHRvb2xjYW5jZWxsZWQ6dV8saG9zdGNvbnRleHRjaGFuZ2VkOmJffTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCF1Yy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8Sih7aml0bGVzczohMH0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoa3Iscj0+KGNvbnNvbGUubG9nKCJSZWNlaXZlZCBwaW5nOiIsci5wYXJhbXMpLHt9KSksdGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdm9pZCAwKX1yZWdpc3RlckNhcGFiaWxpdGllcyh0KXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGNhcGFiaWxpdGllcyBhZnRlciB0cmFuc3BvcnQgaXMgZXN0YWJsaXNoZWQiKTt0aGlzLl9jYXBhYmlsaXRpZXM9R2IodGhpcy5fY2FwYWJpbGl0aWVzLHQpfXJlZ2lzdGVyVG9vbCh0LG4sbyl7aWYodGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgYWxyZWFkeSByZWdpc3RlcmVkYCk7bGV0IHI9dGhpcyxzPSgpPT57ci5faW5pdGlhbGl6ZWRTZW50JiZyLl9jYXBhYmlsaXRpZXMudG9vbHM/Lmxpc3RDaGFuZ2VkJiZyLnNlbmRUb29sTGlzdENoYW5nZWQoKX0saT1uLmlucHV0U2NoZW1hIT09dm9pZCAwLGE9e3RpdGxlOm4udGl0bGUsZGVzY3JpcHRpb246bi5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpuLmlucHV0U2NoZW1hLG91dHB1dFNjaGVtYTpuLm91dHB1dFNjaGVtYSxhbm5vdGF0aW9uczpuLmFubm90YXRpb25zLF9tZXRhOm4uX21ldGEsZW5hYmxlZDohMCxlbmFibGUoKXt0aGlzLmVuYWJsZWQ9ITAscygpfSxkaXNhYmxlKCl7dGhpcy5lbmFibGVkPSExLHMoKX0sdXBkYXRlKGMpe09iamVjdC5hc3NpZ24odGhpcyxjKSxzKCl9LHJlbW92ZSgpe3IuX3JlZ2lzdGVyZWRUb29sc1t0XT09PWEmJihkZWxldGUgci5fcmVnaXN0ZXJlZFRvb2xzW3RdLHMoKSl9LGhhbmRsZXI6YXN5bmMoYyx1KT0+e2lmKCFhLmVuYWJsZWQpdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBkaXNhYmxlZGApO2xldCBsO2lmKGkpe2xldCBwPWEuaW5wdXRTY2hlbWEsbT1wP2F3YWl0IEdjKHAsYz8/e30sYEludmFsaWQgaW5wdXQgZm9yIHRvb2wgJHt0fTogYCk6Yz8/e307bD1hd2FpdCBvKG0sdSl9ZWxzZSBsPWF3YWl0IG8odSk7cmV0dXJuIGEub3V0cHV0U2NoZW1hJiYhbC5pc0Vycm9yJiYobC5zdHJ1Y3R1cmVkQ29udGVudD1hd2FpdCBHYyhhLm91dHB1dFNjaGVtYSxsLnN0cnVjdHVyZWRDb250ZW50LGBJbnZhbGlkIG91dHB1dCBmb3IgdG9vbCAke3R9OiBgKSksbH19O3JldHVybiB0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF09YSwhdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzJiYhdGhpcy50cmFuc3BvcnQmJnRoaXMucmVnaXN0ZXJDYXBhYmlsaXRpZXMoe3Rvb2xzOntsaXN0Q2hhbmdlZDohMH19KSx0aGlzLmVuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCkscygpLGF9X3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSExO2Vuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCl7dGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWR8fCh0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMCx0aGlzLm9uY2FsbHRvb2w9YXN5bmModCxuKT0+e2xldCBvPXRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0Lm5hbWVdO2lmKCFvKXRocm93IEVycm9yKGBUb29sICR7dC5uYW1lfSBub3QgZm91bmRgKTtyZXR1cm4gby5oYW5kbGVyKHQuYXJndW1lbnRzLG4pfSx0aGlzLm9ubGlzdHRvb2xzPWFzeW5jKHQsbik9Pih7dG9vbHM6YXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXModGhpcy5fcmVnaXN0ZXJlZFRvb2xzKS5maWx0ZXIoKFtvLHJdKT0+ci5lbmFibGVkKS5tYXAoYXN5bmMoW28scl0pPT57bGV0IHM9e25hbWU6byx0aXRsZTpyLnRpdGxlLGRlc2NyaXB0aW9uOnIuZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6ci5pbnB1dFNjaGVtYT9hd2FpdCBXYyhyLmlucHV0U2NoZW1hLCJpbnB1dCIpOnt0eXBlOiJvYmplY3QiLHByb3BlcnRpZXM6e319fTtyZXR1cm4gci5vdXRwdXRTY2hlbWEmJihzLm91dHB1dFNjaGVtYT1hd2FpdCBXYyhyLm91dHB1dFNjaGVtYSwib3V0cHV0IikpLHIuYW5ub3RhdGlvbnMmJihzLmFubm90YXRpb25zPXIuYW5ub3RhdGlvbnMpLHIuX21ldGEmJihzLl9tZXRhPXIuX21ldGEpLHN9KSl9KSl9YXN5bmMgc2VuZFRvb2xMaXN0Q2hhbmdlZCh0PXt9KXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZFRvb2xMaXN0Q2hhbmdlZCIpLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIixwYXJhbXM6dH0pfWdldEhvc3RDYXBhYmlsaXRpZXMoKXtyZXR1cm4gdGhpcy5faG9zdENhcGFiaWxpdGllc31nZXRIb3N0VmVyc2lvbigpe3JldHVybiB0aGlzLl9ob3N0SW5mb31nZXRIb3N0Q29udGV4dCgpe3JldHVybiB0aGlzLl9ob3N0Q29udGV4dH1nZXQgb250b29saW5wdXQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIpfXNldCBvbnRvb2xpbnB1dCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iix0KX1nZXQgb250b29saW5wdXRwYXJ0aWFsKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIil9c2V0IG9udG9vbGlucHV0cGFydGlhbCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIsdCl9Z2V0IG9udG9vbHJlc3VsdCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIpfXNldCBvbnRvb2xyZXN1bHQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiLHQpfWdldCBvbnRvb2xjYW5jZWxsZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiKX1zZXQgb250b29sY2FuY2VsbGVkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIix0KX1nZXQgb25ob3N0Y29udGV4dGNoYW5nZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIpfXNldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix0KX1fb250ZWFyZG93bjtnZXQgb250ZWFyZG93bigpe3JldHVybiB0aGlzLl9vbnRlYXJkb3dufXNldCBvbnRlYXJkb3duKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib250ZWFyZG93biIsdGhpcy5fb250ZWFyZG93bix0KSx0aGlzLl9vbnRlYXJkb3duPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIocF8sKG4sbyk9PntpZighdGhpcy5fb250ZWFyZG93bil0aHJvdyBFcnJvcigiTm8gb250ZWFyZG93biBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbnRlYXJkb3duKG4ucGFyYW1zLG8pfSl9X29uY2FsbHRvb2w7Z2V0IG9uY2FsbHRvb2woKXtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbH1zZXQgb25jYWxsdG9vbCh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9uY2FsbHRvb2wiLHRoaXMuX29uY2FsbHRvb2wsdCksdGhpcy5fb25jYWxsdG9vbD10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKFRmLChuLG8pPT57aWYoIXRoaXMuX29uY2FsbHRvb2wpdGhyb3cgRXJyb3IoIk5vIG9uY2FsbHRvb2wgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbChuLnBhcmFtcyxvKX0pfV9vbmxpc3R0b29scztnZXQgb25saXN0dG9vbHMoKXtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHN9c2V0IG9ubGlzdHRvb2xzKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25saXN0dG9vbHMiLHRoaXMuX29ubGlzdHRvb2xzLHQpLHRoaXMuX29ubGlzdHRvb2xzPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoemYsKG4sbyk9PntpZighdGhpcy5fb25saXN0dG9vbHMpdGhyb3cgRXJyb3IoIk5vIG9ubGlzdHRvb2xzIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzKG4ucGFyYW1zLG8pfSl9YXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0KXtzd2l0Y2godCl7Y2FzZSJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIjppZighdGhpcy5faG9zdENhcGFiaWxpdGllcz8uc2FtcGxpbmcpdGhyb3cgRXJyb3IoYEhvc3QgZG9lcyBub3Qgc3VwcG9ydCBzYW1wbGluZyAocmVxdWlyZWQgZm9yICR7dH0pYCk7YnJlYWt9fWFzc2VydFJlcXVlc3RIYW5kbGVyQ2FwYWJpbGl0eSh0KXtzd2l0Y2godCl7Y2FzZSJ0b29scy9jYWxsIjpjYXNlInRvb2xzL2xpc3QiOmlmKCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMpdGhyb3cgRXJyb3IoYENsaWVudCBkb2VzIG5vdCBzdXBwb3J0IHRvb2wgY2FwYWJpbGl0eSAocmVxdWlyZWQgZm9yICR7dH0pYCk7cmV0dXJuO2Nhc2UicGluZyI6Y2FzZSJ1aS9yZXNvdXJjZS10ZWFyZG93biI6cmV0dXJuO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYE5vIGhhbmRsZXIgZm9yIG1ldGhvZCAke3R9IHJlZ2lzdGVyZWRgKX19YXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0KXt9YXNzZXJ0VGFza0NhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2tzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrIGhhbmRsZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXN5bmMgY2FsbFNlcnZlclRvb2wodCxuKXtpZih0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY2FsbFNlcnZlclRvb2wiKSx0eXBlb2YgdD09InN0cmluZyIpdGhyb3cgRXJyb3IoYGNhbGxTZXJ2ZXJUb29sKCkgZXhwZWN0cyBhbiBvYmplY3QgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LCBidXQgcmVjZWl2ZWQgYSBzdHJpbmcgKCIke3R9IikuIERpZCB5b3UgbWVhbjogY2FsbFNlcnZlclRvb2woeyBuYW1lOiAiJHt0fSIsIGFyZ3VtZW50czogeyAuLi4gfSB9KT9gKTtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRvb2xzL2NhbGwiLHBhcmFtczp0fSxTcix7b25wcm9ncmVzczooKT0+e30scmVzZXRUaW1lb3V0T25Qcm9ncmVzczohMCwuLi5ufSl9YXN5bmMgcmVhZFNlcnZlclJlc291cmNlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZWFkU2VydmVyUmVzb3VyY2UiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL3JlYWQiLHBhcmFtczp0fSxrZixuKX1hc3luYyBsaXN0U2VydmVyUmVzb3VyY2VzKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJsaXN0U2VydmVyUmVzb3VyY2VzIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9saXN0IixwYXJhbXM6dH0sd2Ysbil9YXN5bmMgY3JlYXRlU2FtcGxpbmdNZXNzYWdlKHQsbil7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNyZWF0ZVNhbXBsaW5nTWVzc2FnZSIpO2xldCBvPXQudG9vbHM/eGY6SWY7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIixwYXJhbXM6dH0sbyxuKX1zZW5kTWVzc2FnZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZE1lc3NhZ2UiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvbWVzc2FnZSIscGFyYW1zOnR9LGlfLG4pfXNlbmRMb2codCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvbWVzc2FnZSIscGFyYW1zOnR9KX11cGRhdGVNb2RlbENvbnRleHQodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInVwZGF0ZU1vZGVsQ29udGV4dCIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIscGFyYW1zOnR9LEJhLG4pfW9wZW5MaW5rKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJvcGVuTGluayIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9vcGVuLWxpbmsiLHBhcmFtczp0fSxyXyxuKX1zZW5kT3Blbkxpbms9dGhpcy5vcGVuTGluaztkb3dubG9hZEZpbGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImRvd25sb2FkRmlsZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9kb3dubG9hZC1maWxlIixwYXJhbXM6dH0sc18sbil9cmVxdWVzdFRlYXJkb3duKHQ9e30pe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3JlcXVlc3QtdGVhcmRvd24iLHBhcmFtczp0fSl9cmVxdWVzdERpc3BsYXlNb2RlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZXF1ZXN0RGlzcGxheU1vZGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiLHBhcmFtczp0fSxtXyxuKX1zZW5kU2l6ZUNoYW5nZWQodCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIixwYXJhbXM6dH0pfXNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl7bGV0IHQ9ITEsbj0wLG89MCxyPSgpPT57dHx8KHQ9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dD0hMTtsZXQgaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT1pLnN0eWxlLmhlaWdodDtpLnN0eWxlLmhlaWdodD0ibWF4LWNvbnRlbnQiO2xldCBjPU1hdGguY2VpbChpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7aS5zdHlsZS5oZWlnaHQ9YTtsZXQgdT1NYXRoLmNlaWwod2luZG93LmlubmVyV2lkdGgpOyh1IT09bnx8YyE9PW8pJiYobj11LG89Yyx0aGlzLnNlbmRTaXplQ2hhbmdlZCh7d2lkdGg6dSxoZWlnaHQ6Y30pKX0pKX07cigpO2xldCBzPW5ldyBSZXNpemVPYnNlcnZlcihyKTtyZXR1cm4gcy5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkscy5vYnNlcnZlKGRvY3VtZW50LmJvZHkpLCgpPT5zLmRpc2Nvbm5lY3QoKX1hc3luYyBjb25uZWN0KHQ9bmV3IGVfKHdpbmRvdy5wYXJlbnQsd2luZG93LnBhcmVudCksbil7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkFwcCBpcyBhbHJlYWR5IGNvbm5lY3RlZC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIGFnYWluLiIpO3RoaXMuX2luaXRpYWxpemVkU2VudD0hMSxhd2FpdCBzdXBlci5jb25uZWN0KHQpO3RyeXtsZXQgbz1hd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvaW5pdGlhbGl6ZSIscGFyYW1zOnthcHBDYXBhYmlsaXRpZXM6dGhpcy5fY2FwYWJpbGl0aWVzLGFwcEluZm86dGhpcy5fYXBwSW5mbyxwcm90b2NvbFZlcnNpb246UWJ9fSxfXyxuKTtpZihvPT09dm9pZCAwKXRocm93IEVycm9yKGBTZXJ2ZXIgc2VudCBpbnZhbGlkIGluaXRpYWxpemUgcmVzdWx0OiAke299YCk7dGhpcy5faG9zdENhcGFiaWxpdGllcz1vLmhvc3RDYXBhYmlsaXRpZXMsdGhpcy5faG9zdEluZm89by5ob3N0SW5mbyx0aGlzLl9ob3N0Q29udGV4dD1vLmhvc3RDb250ZXh0LGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQifSksdGhpcy5faW5pdGlhbGl6ZWRTZW50PSEwLHRoaXMub3B0aW9ucz8uYXV0b1Jlc2l6ZSYmdGhpcy5zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpfWNhdGNoKG8pe3Rocm93IHRoaXMuY2xvc2UoKSxvfX19bGV0IFljPSIiO2NvbnN0IFJmPShlLHQsbj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpPT57aWYoIWUpcmV0dXJuOyhlLnRoZW1lPT09ImxpZ2h0Inx8ZS50aGVtZT09PSJkYXJrIikmJnQuYXBwbHlEb2N1bWVudFRoZW1lKGUudGhlbWUpO2NvbnN0IG89ZS5zdHlsZXM/LnZhcmlhYmxlcztvJiZ0eXBlb2Ygbz09Im9iamVjdCImJnQuYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXMobyk7Y29uc3Qgcj1lLnN0eWxlcz8uY3NzPy5mb250czt0eXBlb2Ygcj09InN0cmluZyImJnImJnIhPT1ZYyYmKHQuYXBwbHlIb3N0Rm9udHMociksWWM9cik7Y29uc3Qgcz1lLnNhZmVBcmVhSW5zZXRzO2lmKHMpZm9yKGNvbnN0IGkgb2ZbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdKXtjb25zdCBhPU51bWJlcihzW2ldPz8wKTtuLnN0eWxlLnNldFByb3BlcnR5KGAtLWluc2V0LSR7aX1gLGAke051bWJlci5pc0Zpbml0ZShhKSYmYT4wP2E6MH1weGApfX0sSGU9bmV3IHVjKHtuYW1lOiJob3RlbC1zdG9yZWZyb250Iix2ZXJzaW9uOiIxLjAuMCJ9LHtvcGVuTGlua3M6e319KSxDZj17YXBwbHlEb2N1bWVudFRoZW1lOndfLGFwcGx5SG9zdFN0eWxlVmFyaWFibGVzOmtfLGFwcGx5SG9zdEZvbnRzOlNffSxsZT1lPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxnPWU9PlN0cmluZyhlPz8iIikucmVwbGFjZSgvWyY8PiInXS9nLHQ9PnQ9PT0iJiI/IiZhbXA7Ijp0PT09IjwiPyImbHQ7Ijp0PT09Ij4iPyImZ3Q7Ijp0PT09JyInPyImcXVvdDsiOiImIzM5OyIpO2xldCBJdD0iIixDcj0iIixaZj17fSxPZj0hMSxBZj0iIixNPXtjaGVja0luOiIiLGNoZWNrT3V0OiIiLGd1ZXN0czoyfSxiZT0xO2NvbnN0ICRfPTU7bGV0IGtlPW51bGwsWnQ9W10sR2U9IiIsVnI9IiIsSnI9IiIsbGM9MDtjb25zdCBOZj1lPT57Y29uc3QgdD1lPy5bImN1cmxlc3MvdHJpcCJdO3QmJih0eXBlb2YgdC50cmlwSWQ9PSJzdHJpbmciJiZ0LnRyaXBJZCYmKEpyPXQudHJpcElkKSxsYz1OdW1iZXIodC5jb3VudD8/MCkpfSx6Xz1lPT5Kcj97Li4uZSx0cmlwOkpyfTplLFRfPWU9PlpmW2VdPz8iIjtsZXQgamY9ITE7Y29uc3QgUWM9ZT0+e2pmPWUsZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmNhcmQiKT8uY2xhc3NMaXN0LnRvZ2dsZSgiYnVzeSIsZSl9LGVlPShlLHQ9e30pPT57Y29uc3Qgbj1UXyhlKTtyZXR1cm4gbj9qZj9Qcm9taXNlLnJlc29sdmUobnVsbCk6KFFjKCEwKSxIZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpuLGFyZ3VtZW50czp6Xyh0KX0pLmZpbmFsbHkoKCk9PlFjKCExKSkudGhlbihvPT57TmYobz8uX21ldGEpO2NvbnN0IHI9bz8uc3RydWN0dXJlZENvbnRlbnQ7cmV0dXJuIHImJlVmKHIpLFBfKG8pLG99KSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBubyB0b29sIGZvciAke2V9YCkpfSxQXz1lPT57Y29uc3QgdD0oZT8uY29udGVudD8/W10pLmZpbmQobj0+bj8udHlwZT09PSJ0ZXh0Iik/LnRleHQ7IXR8fCFIZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/LnVwZGF0ZU1vZGVsQ29udGV4dHx8SGUudXBkYXRlTW9kZWxDb250ZXh0KHtjb250ZW50Olt7dHlwZToidGV4dCIsdGV4dDpTdHJpbmcodCl9XX0pLmNhdGNoKCgpPT57fSl9LCRyPWU9PntsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9MSl0PSh0KjMxK2UuY2hhckNvZGVBdChuKSklMzYwO3JldHVybmAtLXNob3QtYTpoc2woJHt0fSA0MiUgMzQlKTstLXNob3QtYjpoc2woJHsodCszOCklMzYwfSA0NiUgMjIlKWB9LHpyPWU9PmUucmVwbGFjZSgvW15ccHtMfVxwe059IF0vZ3UsIiAiKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMikubWFwKHQ9PnRbMF0/LnRvVXBwZXJDYXNlKCk/PyIiKS5qb2luKCIiKSxJXz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDMuNWwyLjYgNS4zIDUuOS45LTQuMyA0LjEgMSA1LjhMMTIgMTYuOSA2LjggMTkuNmwxLTUuOEwzLjUgOS43bDUuOS0uOXoiLz48L3N2Zz4nLHhfPWU9PmUmJnR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9gPHNwYW4gY2xhc3M9InJhdGUiPiR7SV99JHtnKGUudmFsdWUpfTxzcGFuIGNsYXNzPSJ0LWZyb20iPjxzbWFsbD4gwrcgJHtnKGUuY291bnQpfTwvc21hbGw+PC9zcGFuPjwvc3Bhbj5gOiIiLF9lPSgpPT5PZj9gPGRpdiBjbGFzcz0iZGVtbyI+PGI+RGVtbzwvYj48c3Bhbj4ke2coQWZ8fCJEZW1vbnN0cmF0aW9uIGRhdGE6IHRoZXNlIHJhdGVzIGFuZCByb29tIGNvdW50cyB3ZXJlIG1hZGUgdXAgZm9yIHRoaXMgZGVtby4iKX08L3NwYW4+PC9kaXY+YDoiIixLcj1lPT57Y29uc3QgdD1uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KX0sV3I9KGUsdCk9Pk1hdGgucm91bmQoKERhdGUucGFyc2UoYCR7dH1UMTI6MDA6MDBaYCktRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSkvODY0ZTUpLEplPWU9PmU/LmNoZWNrSW4mJmU/LmNoZWNrT3V0P2Ake0tyKGUuY2hlY2tJbil9IOKAkyAke0tyKGUuY2hlY2tPdXQpfSDCtyAke1dyKGUuY2hlY2tJbixlLmNoZWNrT3V0KX0gJHtXcihlLmNoZWNrSW4sZS5jaGVja091dCk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixFXz0oZSx0LG4pPT57Y29uc3Qgbz1adC5maW5kKHI9PnIua2luZD09PSJyb29tIiYmci5ob3RlbElkPT09ZSYmci5yb29tUmVmPT09dCYmci5zdGF5Py5jaGVja0luPT09bj8uY2hlY2tJbiYmci5zdGF5Py5jaGVja091dD09PW4/LmNoZWNrT3V0KTtyZXR1cm4gTnVtYmVyKG8/LnF1YW50aXR5Pz8wKX0sUl89KGUsdCk9Pntjb25zdCBuPVp0LmZpbmQobz0+by5raW5kPT09ImV4dHJhIiYmby5ob3RlbElkPT09ZSYmby5leHRyYVJlZj09PXQpO3JldHVybiBOdW1iZXIobj8ucXVhbnRpdHk/PzApfSxkYz0oZSx0LG4sbz0xKT0+dD4wP2A8c3BhbiBjbGFzcz0ic3RlcCI+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0LTF9IiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgJHtnKG4pfSI+4oiSPC9idXR0b24+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3R9PC9zcGFuPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dCsxfSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgJHtnKG4pfSI+KzwvYnV0dG9uPgogICAgICAgPC9zcGFuPmA6YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRkIiAke2V9IGRhdGEtbj0iJHtvfSIgYXJpYS1sYWJlbD0iQWRkICR7ZyhuKX0iPgogICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjQiCiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDV2MTRNNSAxMmgxNCIvPjwvc3ZnPgogICAgICAgPC9idXR0b24+YCxNZj1lPT4oTS5jaGVja0lufHwoTS5jaGVja0luPVhjKCkpLCghTS5jaGVja091dHx8TS5jaGVja091dDw9TS5jaGVja0luKSYmKE0uY2hlY2tPdXQ9R3IoTS5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNpIiB2YWx1ZT0iJHtnKE0uY2hlY2tJbil9IiBtaW49IiR7ZyhYYygpKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjbyIgdmFsdWU9IiR7ZyhNLmNoZWNrT3V0KX0iIG1pbj0iJHtnKEdyKE0uY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGxhYmVsIGNsYXNzPSJndWVzdHMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7ZyhiZSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9sYWJlbD4KICAgIDxzcGFuIGNsYXNzPSJuaWdodHMiIGlkPSJuaWdodHMiPiR7ZyhwYygpKX08L3NwYW4+CiAgPC9kaXY+YCkscGM9KCk9Pntjb25zdCBlPU0uY2hlY2tJbiYmTS5jaGVja091dD9XcihNLmNoZWNrSW4sTS5jaGVja091dCk6MCx0PWU+MD9gJHtlfSAke2U9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixuPWJlPjE/YCR7YmV9IHJvb21zYDoiIjtyZXR1cm5bdCxuXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpfSxHcj0oZSx0KT0+bmV3IERhdGUoRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSt0Kjg2NGU1KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLFhjPSgpPT5uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCksQ189ZT0+e2NvbnN0IHQ9ZS5ob3RlbHM/P1tdLG49Wy4uLm5ldyBTZXQodC5tYXAoYT0+U3RyaW5nKGEuY2l0eSkpKV0sbz1hPT57Y29uc3QgYz10LmZpbmQodT0+dS5jaXR5PT09YSk/LmNvdW50cnk7cmV0dXJuIGMmJiFTdHJpbmcoYykuc3RhcnRzV2l0aChhKT9TdHJpbmcoYyk6IiJ9LHI9YT0+YAogICAgPGRpdiBjbGFzcz0iY2l0eWdyb3VwIj4KICAgICAgJHtuLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJjaXR5bmFtZSI+JHtnKGEpfSR7byhhKT9gPHNtYWxsPiDCtyAke2cobyhhKSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKGM9PmMuY2l0eT09PWEpLm1hcChjPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7ZyhjLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHskcihTdHJpbmcoYy5pZCkpfSI+CiAgICAgICAgICAgICAgJHtjLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtnKGMuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtnKHpyKFN0cmluZyhjLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7Yy5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7ZyhjLmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2coYy5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7ZyhuLmxlbmd0aD4xP2MuYXJlYT8/Yy5jaXR5OltjLmFyZWEsYy5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2MuZnJvbU5pZ2h0bHk/YCR7ZyhjLmZyb21OaWdodGx5KX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICAgICAgJHt4XyhjLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gLHM9TnVtYmVyKGUudG90YWw/P3QubGVuZ3RoKSxpPXMtdC5sZW5ndGg7cmV0dXJuW19lKCksYDxkaXY+JHtuLm1hcChyKS5qb2luKCIiKX08L2Rpdj5gLGk+MD9gPGRpdiBjbGFzcz0ibm90ZSI+U2hvd2luZyAke3QubGVuZ3RofSBvZiAke3N9LiBOYW1lIGEgY2l0eSBvciBhIGNvdW50cnkgdG8gc2VlIHRoZSByZXN0LjwvZGl2PmA6IiJdLmpvaW4oIiIpfSxEZj1lPT5gCiAgPGRpdiBjbGFzcz0iaGVybyIgc3R5bGU9IiR7JHIoU3RyaW5nKGUuaWQpKX0iPgogICAgJHtlLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtnKGUuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2coenIoU3RyaW5nKGUubmFtZSkpKX08L3NwYW4+CiAgICAke2UuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke2coZS5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtnKGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2coW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7ZyhlLnJhdGluZy52YWx1ZSl94piFICgke2coZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHtnKGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke2codCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCxaXz0oZSx0LG4pPT57Y29uc3Qgbz1FXyhTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIkeyRyKGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7Zyh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOmcoenIoU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2codC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2cocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvblVudGlsP2AgdW50aWwgJHtnKFN0cmluZyh0LmZyZWVDYW5jZWxsYXRpb25VbnRpbCkuc2xpY2UoMCwxMCkpfWA6IiJ9PC9zcGFuPmA6JzxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5Ob24tcmVmdW5kYWJsZTwvc3Bhbj4nfQogICAgICAgICAgJHtOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7Zyh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAke3QucHVibGljU3RheVRvdGFsP2A8ZGl2IGNsYXNzPSJwLXdhcyI+JHtnKHQucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7Zyh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7Zyh0Lm5pZ2h0bHkpfSAvIG5pZ2h0JHtiZT4xP2AgwrcgJHtiZX0gcm9vbXNgOiIifSDCtyBpbmNsLiB0YXg8L2Rpdj4KICAgICAgICAke3QubWVtYmVyUmF0ZT9gPGRpdiBjbGFzcz0icC1tZW1iZXIiPiR7Zyh0Lm1lbWJlclJhdGUudGllcil9IHJhdGU8L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2RjKGBkYXRhLWFkZC1yb29tPSIke2codC5pZCl9IiBkYXRhLWhvdGVsPSIke2coZS5pZCl9ImAsbyxTdHJpbmcodC5uYW1lKSxiZSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxldT1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUucm9vbXM/P1tdLG89ZS5zdGF5Pz9NO3JldHVybltfZSgpLERmKHQpLE1mKFN0cmluZyh0LmlkKSksZS5uZWVkc0RhdGVzPyc8ZGl2IGNsYXNzPSJlbXB0eSI+TG9va2luZyB1cCByb29tc+KApjwvZGl2Pic6ZS5ub1Jvb21zP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZyhlLm5vUm9vbXMpfTwvZGl2PmA6YDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+Wl8odCxyLG8pKS5qb2luKCIiKX08L2Rpdj5gLChlLmV4dHJhcz8/W10pLmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1leHRyYXM9IiR7Zyh0LmlkKX0iPkFkZC1vbnMgYW5kIGV4cGVyaWVuY2VzPC9idXR0b24+YDoiIiwoZS5wb2xpY2llcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5wb2xpY2llcy5tYXAocj0+YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wb2xpY3k9IiR7ZyhyLnRvcGljKX0iIGRhdGEtaG90ZWw9IiR7Zyh0LmlkKX0iPiR7ZyhyLnRpdGxlKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sT189ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLmV4dHJhcz8/W107cmV0dXJuW19lKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2codC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IGl0IG9mZmVycyBiZXNpZGUgdGhlIHJvb208L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKG89PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7ZyhvLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtnKG8uZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7ZyhvLnByaWNlKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7ZyhvLnBlcil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2RjKGBkYXRhLWFkZC1leHRyYT0iJHtnKG8uaWQpfSIgZGF0YS1ob3RlbD0iJHtnKHQuaWQpfSJgLFJfKFN0cmluZyh0LmlkKSxTdHJpbmcoby5pZCkpLFN0cmluZyhvLm5hbWUpKX08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtnKHQuaWQpfSI+QmFjayB0byAke2codC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sQV89ZT0+e2NvbnN0IHQ9ZS5raW5kPT09InJvb20iP2BkYXRhLWFkZC1yb29tPSIke2coZS5yb29tUmVmKX0iIGRhdGEtaG90ZWw9IiR7ZyhlLmhvdGVsSWQpfSIgZGF0YS1jaT0iJHtnKGUuc3RheT8uY2hlY2tJbil9IiBkYXRhLWNvPSIke2coZS5zdGF5Py5jaGVja091dCl9IiBkYXRhLWd1PSIke2coZS5zdGF5Py5ndWVzdHMpfSJgOmBkYXRhLWFkZC1leHRyYT0iJHtnKGUuZXh0cmFSZWY/P2UudGl0bGUpfSIgZGF0YS1ob3RlbD0iJHtnKGUuaG90ZWxJZCl9ImA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtnKGUudGl0bGUpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7ZyhlLmtpbmQ9PT0icm9vbSI/YCR7ZS5ob3RlbE5hbWV9IMK3ICR7SmUoZS5zdGF5KX0ke2UucmVmdW5kYWJsZT09PSExPyIgwrcgbm9uLXJlZnVuZGFibGUiOiIifWA6YCR7ZS5ob3RlbE5hbWV9JHtlLmRldGFpbD9gIMK3ICR7ZS5kZXRhaWx9YDoiIn1gKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2coZS50b3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2coZS51bml0KX0ke2Uua2luZD09PSJyb29tIj8iIC8gbmlnaHQiOiIgZWFjaCJ9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7ZGModCxOdW1iZXIoZS5xdWFudGl0eT8/MSksU3RyaW5nKGUudGl0bGUpKX08L2Rpdj4KICAgIDwvZGl2PmB9LE5fPWU9Pntjb25zdCB0PWUubGluZXM/P1tdO2lmKHQubGVuZ3RoPT09MClyZXR1cm5bX2UoKSwnPGRpdiBjbGFzcz0iZW1wdHkiPlRoZSB0cmlwIGlzIGVtcHR5LjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5Ccm93c2UgJHtnKEl0KX0gaG90ZWxzPC9idXR0b24+PC9kaXY+YF0uam9pbigiIik7Y29uc3Qgbj1bLi4ubmV3IFNldCh0Lm1hcChvPT5TdHJpbmcoby5kYXk/PyIiKSkpXS5zb3J0KCk7cmV0dXJuW19lKCksbi5tYXAobz0+YAogICAgICAke28/YDxkaXYgY2xhc3M9ImRheSI+JHtnKEtyKG8pKX08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QuZmlsdGVyKHI9PlN0cmluZyhyLmRheT8/IiIpPT09bykubWFwKEFfKS5qb2luKCIiKX08L2Rpdj5gKS5qb2luKCIiKSwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChvPT5gJHtnKG8udGl0bGUpfTogJHtnKG8ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlJvb21zIGFuZCBhZGQtb25zPC9zcGFuPjxzcGFuPiR7ZyhlLnN1YnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlRheGVzIGFuZCBmZWVzPC9zcGFuPjxzcGFuPiR7ZyhlLnRheGVzQW5kRmVlcyl9PC9zcGFuPjwvZGl2PgogICAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIGdvb2QiPjxzcGFuPiR7ZyhlLm1lbWJlclNhdmluZy50aWVyKX0gbWVtYmVyIHJhdGU8L3NwYW4+PHNwYW4+4oiSICR7ZyhlLm1lbWJlclNhdmluZy5zYXZlZCl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPlRvdGFsPC9zcGFuPjxzcGFuPiR7ZyhlLnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgICAke2UubWVtYmVyU2F2aW5nP2A8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlBvaW50cyB0aGlzIHRyaXAgZWFybnM8L3NwYW4+PHNwYW4+JHtnKE51bWJlcihlLm1lbWJlclNhdmluZy5wb2ludHMpLnRvTG9jYWxlU3RyaW5nKCJlbi1HQiIpKX08L3NwYW4+PC9kaXY+YDoiIn0KICAgICA8L2Rpdj5gLCc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLWJvb2siPlJlcXVlc3QgYm9va2luZzwvYnV0dG9uPjwvZGl2PicsYDxkaXYgY2xhc3M9Im5vdGUiPk5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLiBSZXF1ZXN0aW5nIGEgYm9va2luZyBhc2tzICR7ZyhJdCl9IHRvIGhvbGQgdGhlIHJvb21zIGFuZCBnaXZlcyB5b3UgYSBjb25maXJtYXRpb24gY29kZS48L2Rpdj5gLHFmKCksa2U/IiI6YDxkaXYgY2xhc3M9Im5vdGUiPkEgJHtnKEl0KX0gQ2lyY2xlIG1lbWJlcj8gPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj5TaWduIGluIGZvciB0aGUgbWVtYmVyIHJhdGU8L2J1dHRvbj4uPC9kaXY+JHtMZigpfWBdLmpvaW4oIiIpfSxxZj0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0iZ3Vlc3QiJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+R3Vlc3QgbmFtZTxpbnB1dCBpZD0iZ25hbWUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgc2hvdWxkIGFwcGVhciBvbiB0aGUgYm9va2luZyI+PC9sYWJlbD4KICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJnbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iRm9yIHRoZSBjb25maXJtYXRpb24iPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxsYWJlbD5Bbnl0aGluZyB0aGUgaG90ZWwgc2hvdWxkIGtub3c8aW5wdXQgaWQ9Imdub3RlIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkEgbGF0ZSBhcnJpdmFsLCBhIGhpZ2ggZmxvb3Ig4oCUIG9wdGlvbmFsIj48L2xhYmVsPgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2siPkhvbGQgdGhlc2Ugcm9vbXM8L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PgogIDwvZGl2PmAsal89ZT0+W2A8ZGl2IGNsYXNzPSJlcnIiPlRoZSBib29raW5nIG5lZWRzICR7ZygoZS5taXNzaW5nPz9bXSkuam9pbigiIGFuZCAiKXx8ImEgbmFtZSBhbmQgYW4gZW1haWwiKX0uPC9kaXY+YCxxZighMCksJzxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PiddLmpvaW4oIiIpLE1fPWU9Pntjb25zdCB0PWUubWVtYmVyPz97fTtyZXR1cm5bX2UoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke2codC5wcm9ncmFtbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlcmUiPiR7Zyh0Lm5hbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSIgc3R5bGU9ImZvbnQtc2l6ZToyMHB4Ij4ke2codC50aWVyPy5uYW1lKX08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9IndoZW4iPiR7ZyhOdW1iZXIodC5wb2ludHM/PzApLnRvTG9jYWxlU3RyaW5nKCJlbi1HQiIpKX0gcG9pbnRzPC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0idW5wYWlkIj48Yj4ke2coTWF0aC5yb3VuZCgodC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKSl9JSBvZmY8L2I+PHNwYW4+Um9vbSByYXRlcyBhbmQgdHJpcCB0b3RhbHMgbm93IHNob3cgdGhlICR7Zyh0LnRpZXI/Lm5hbWUpfSBtZW1iZXIgcmF0ZS4gTm90aGluZyBpcyBjaGFyZ2VkIGJ5IHNpZ25pbmcgaW4uPC9zcGFuPjwvZGl2PmAsYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24tb3V0Ij5TaWduIG91dDwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxEXz0oKT0+Wyc8ZGl2IGNsYXNzPSJlcnIiPk5vIG1lbWJlcnNoaXAgbWF0Y2hlcyB0aGF0IG51bWJlciBhbmQgc3VybmFtZS4gQ2hlY2sgYm90aCBhcyB0aGV5IGFyZSBwcmludGVkIOKAlCBub3RoaW5nIGVsc2UgaXMgbmVlZGVkLCB0aGlzIGNvbm5lY3RvciBuZXZlciBhc2tzIGZvciBhIHBhc3N3b3JkLjwvZGl2PicsTGYoITApXS5qb2luKCIiKSxMZj0oZT0hMSk9PmAKICA8ZGl2IGNsYXNzPSJmb3JtIiBpZD0ic2lnbmluIiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPk1lbWJlcnNoaXAgbnVtYmVyPGlucHV0IGlkPSJtbnVtIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IGlzIHByaW50ZWQiPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5TdXJuYW1lPGlucHV0IGlkPSJtc3VyIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlRoZSBzdXJuYW1lIG9uIGl0Ij48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1pbiI+U2lnbiBpbjwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gcGFzc3dvcmQgaXMgYXNrZWQgZm9yIGFuZCBub25lIGlzIHN0b3JlZC4gU2lnbmluZyBpbiBzaG93cyB0aGUgbWVtYmVyIHJhdGU7IG5vdGhpbmcgaXMgY2hhcmdlZC48L2Rpdj4KICA8L2Rpdj5gLHFfPWU9Pntjb25zdCB0PWUuYm9va2luZz8/e307cmV0dXJuW19lKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+Q29uZmlybWF0aW9uIGNvZGU8L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7Zyh0LmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlcmUiPiR7Zyh0LmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJ3aGVuIj4ke2coSmUodC5zdGF5KSl9IMK3ICR7Zyh0Lmd1ZXN0Py5uYW1lPz8iIil9PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0idW5wYWlkIj4KICAgICAgIDxiPk5vdGhpbmcgaGFzIGJlZW4gY2hhcmdlZC48L2I+CiAgICAgICA8c3Bhbj5UaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgJHtnKFN0cmluZyh0LmhvbGRVbnRpbD8/IiIpLnNsaWNlKDAsMTYpLnJlcGxhY2UoIlQiLCIgIikpfSBVVEMuIEEgY2FyZCBpcyBwcmVzZW50ZWQgYXQgY2hlY2staW4sIG5vdCBoZXJlLjwvc3Bhbj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJtb25leS1vdXQiPjxzcGFuPlRvdGFsIGZvciB0aGUgc3RheTwvc3Bhbj48c3Bhbj4ke2coZS50b3RhbCl9PC9zcGFuPjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7KHQucXVvdGU/LmxpbmVzPz9bXSkubWFwKExfKS5qb2luKCIiKX08L2Rpdj5gLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke2codC5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGlzIGJvb2tpbmc8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sTF89ZT0+YAogIDxkaXYgY2xhc3M9InJvdyI+CiAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtnKGUudGl0bGUpfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2coZS5raW5kPT09InJvb20iP0plKGUuc3RheSk6ZS5kZXRhaWw/PyIiKX08L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icHJpY2UiPjxkaXYgY2xhc3M9InAtdG90YWwiPiR7ZyhlLnRvdGFsKX08L2Rpdj48L2Rpdj4KICA8L2Rpdj5gLFVfPXtyZXF1ZXN0ZWQ6Indhcm4iLGNvbmZpcm1lZDoiZ29vZCIsY2FuY2VsbGVkOiJiYWQiLGV4cGlyZWQ6ImJhZCJ9LEhfPWU9Pntjb25zdCB0PWUuYm9va2luZ3M/P1tdO3JldHVybiB0Lmxlbmd0aD09PTA/JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5ncyBpbiB0aGlzIGNvbnZlcnNhdGlvbiB5ZXQuPC9kaXY+JzpbX2UoKSxgPGRpdiBjbGFzcz0icm93cyI+JHt0Lm1hcChuPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2cobi5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtnKG4uY29uZmlybWF0aW9uQ29kZSl9IMK3ICR7ZyhKZShuLnN0YXkpKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+PHNwYW4gY2xhc3M9ImJhZGdlICR7VV9bU3RyaW5nKG4uc3RhdHVzKV0/PyIifSI+JHtnKG4uc3RhdHVzKX08L3NwYW4+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPjxkaXYgY2xhc3M9InAtdG90YWwiPiR7ZyhuLnF1b3RlPy50b3RhbD8/IiIpfTwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtuLnN0YXR1cz09PSJyZXF1ZXN0ZWQifHxuLnN0YXR1cz09PSJjb25maXJtZWQiP2A8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtnKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWw8L2J1dHRvbj5gOiIifTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKX0sdHU9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNhbmNlbGxlZCIsbj1lLmJvb2tpbmc/P3t9O3JldHVybltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNhbmNlbGxlZCI6IkNhbmNlbGxpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtnKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dD8iVGhlIGhvdGVsIGNoYXJnZXMiOiJDYW5jZWxsaW5nIHdvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2coZS5mZWUpfTwvc3Bhbj48L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2coZS5ydWxlKX08L2Rpdj5gLHQ/IiI6ZS5jYW5jZWxsYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPktlZXAgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIGRhbmdlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2FuY2VsPSIke2cobi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGUgYm9va2luZzwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6JzxkaXYgY2xhc3M9Im5vdGUiPlRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwgb24gdGhpcyBib29raW5nLjwvZGl2PiddLmpvaW4oIiIpfSxacj1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUudmlldz09PSJwb2xpY3kiP2A8aDQ+JHtnKGUudGl0bGUpfTwvaDQ+JHtnKGUudGV4dCl9YDooZS50b3BpY3M/P1tdKS5tYXAobz0+YDxoND4ke2coby50aXRsZSl9PC9oND4ke2coby50ZXh0KX1gKS5qb2luKCIiKTtyZXR1cm5bYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2codC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IHRoZSBob3RlbCBwdWJsaXNoZXM8L2Rpdj48L2Rpdj5gLGUudmlldz09PSJwb2xpY3ktbWlzc2luZyI/YDxkaXYgY2xhc3M9ImVtcHR5Ij4ke2codC5uYW1lKX0gZG9lcyBub3QgcHVibGlzaCBhbnl0aGluZyBhYm91dCB0aGF0IGhlcmUuPC9kaXY+YDpgPGRpdiBjbGFzcz0icHJvc2UiPiR7bn08L2Rpdj5gLGA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2codC5pZCl9Ij5CYWNrIHRvICR7Zyh0Lm5hbWUpfTwvYnV0dG9uPmBdLmpvaW4oIiIpfSxGXz1lPT57Y29uc3QgdD1lLmNvbHVtbnM/P1tdLG49ZS5yb3dMYWJlbHM/P1tdLG89cj0+YAogICAgPGRpdiBjbGFzcz0iY21wLWhlYWQke3IucmVjb21tZW5kZWQ/IiBwaWNrIjoiIn0iPgogICAgICAke3IucmVjb21tZW5kZWQ/JzxkaXYgY2xhc3M9InBpY2ttYXJrIj5SZWNvbW1lbmRlZDwvZGl2Pic6IiJ9CiAgICAgIDxidXR0b24gY2xhc3M9InQtc2hvdCIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2coci5ob3RlbC5pZCl9IiBzdHlsZT0iJHskcihTdHJpbmcoci5ob3RlbC5pZCkpfSI+CiAgICAgICAgJHtyLmhvdGVsLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtnKHIuaG90ZWwuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtnKHpyKFN0cmluZyhyLmhvdGVsLm5hbWUpKSl9PC9zcGFuPgogICAgICA8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0iY29sLWJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbC1uYW1lIj4ke2coci5ob3RlbC5uYW1lKX08L2Rpdj4KICAgICAgICAke3IucHJpY2U/YDxkaXYgY2xhc3M9ImNvbC1wcmljZSI+JHtnKHIucHJpY2Uuc3RheVRvdGFsKX08c21hbGw+IHRvdGFsIMK3ICR7ZyhyLnByaWNlLm5pZ2h0bHkpfS9uaWdodDwvc21hbGw+PC9kaXY+YDpyLmZyb20/YDxkaXYgY2xhc3M9ImNvbC1wcmljZSI+JHtnKHIuZnJvbSl9PHNtYWxsPiAvIG5pZ2h0IGZyb208L3NtYWxsPjwvZGl2PmA6IiJ9CiAgICAgICAgJHtyLmJlc3RGb3I/YDxkaXYgY2xhc3M9IndoeSI+JHtnKHIuYmVzdEZvcil9PC9kaXY+YDoiIn0KICAgICAgICAkeyhyLnByb3M/P1tdKS5sZW5ndGh8fChyLmNvbnM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9InBjIj4ke1suLi4oci5wcm9zPz9bXSkubWFwKHM9PmA8ZGl2IGNsYXNzPSJwcm8iPjxzcGFuIGNsYXNzPSJtIj4rPC9zcGFuPjxzcGFuPiR7ZyhzKX08L3NwYW4+PC9kaXY+YCksLi4uKHIuY29ucz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0iY29uIj48c3BhbiBjbGFzcz0ibSI+4oiSPC9zcGFuPjxzcGFuPiR7ZyhzKX08L3NwYW4+PC9kaXY+YCldLmpvaW4oIiIpfTwvZGl2PmA6IiJ9CiAgICAgIDwvZGl2PgogICAgPC9kaXY+YDtyZXR1cm5bX2UoKSxlLnRpdGxlP2A8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7ZyhlLnRpdGxlKX08L2Rpdj5gOiIiLGUuc3RheT9gPGRpdiBjbGFzcz0iaC13aGVyZSI+JHtnKEplKGUuc3RheSkpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImNtcC13cmFwIj48ZGl2IGNsYXNzPSJjbXAiIHN0eWxlPSItLWNvbHM6JHt0Lmxlbmd0aH0iPgogICAgICAgPGRpdiBjbGFzcz0iY21wLWNvcm5lciI+PC9kaXY+CiAgICAgICAke3QubWFwKG8pLmpvaW4oIiIpfQogICAgICAgJHtuLm1hcCgocixzKT0+YDxkaXYgY2xhc3M9ImsiPiR7ZyhyKX08L2Rpdj4ke3QubWFwKGk9PmA8ZGl2IGNsYXNzPSJ2JHtzJTI/IiBhbHQiOiIifSI+JHtnKGkucm93cz8uW3NdPy52YWx1ZT8/IuKAlCIpfTwvZGl2PmApLmpvaW4oIiIpfWApLmpvaW4oIiIpfQogICAgIDwvZGl2PjwvZGl2PmAsKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAocj0+YCR7ZyhyLm5hbWUpfTogJHtnKHIud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ibm90ZSI+VGFwIGEgcGljdHVyZSB0byBzZWUgdGhhdCAke2coZS52b2NhYj8ubm91bj8/ImhvdGVsIil9J3Mgcm9vbXMuPC9kaXY+YF0uam9pbigiIil9LEJfPWU9Pntjb25zdCB0PWUuZGF5cz8/W107cmV0dXJuW19lKCksYDxkaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7ZyhlLnRpdGxlKX08L2Rpdj4KICAgICAgICR7ZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2coSmUoZS5zdGF5KSl9PC9kaXY+YDoiIn0KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJnYXAiPjxiPiR7ZyhlLmluVHJpcCl9LyR7ZyhlLnBsYW5uZWQpfTwvYj48c3Bhbj4ke2coZS5nYXA/PyIiKX08L3NwYW4+PC9kaXY+YCxgPGRpdiBjbGFzcz0iZGF5cyI+JHt0Lm1hcCgobixvKT0+YAogICAgICA8ZGl2IGNsYXNzPSJkYXlyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImRheW51bSI+PGI+JHtvKzF9PC9iPjxpPjwvaT48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXlib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRheWxhYmVsIj4ke2cobi5sYWJlbCl9PC9kaXY+CiAgICAgICAgICAke24ubm90ZT9gPGRpdiBjbGFzcz0iZGF5bm90ZSI+JHtnKG4ubm90ZSl9PC9kaXY+YDoiIn0KICAgICAgICAgICR7KG4uaXRlbXM/P1tdKS5tYXAocj0+YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwbGFuLWl0ZW0iJHtyLmtpbmQ9PT0iaG90ZWwiP2AgZGF0YS1ob3RlbD0iJHtnKHIuaWQpfSIgcm9sZT0iYnV0dG9uIiB0YWJpbmRleD0iMCJgOiIifT4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtnKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2coW3IuZGV0YWlsLHIucHJpY2VdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbnN0YXRlICR7ci5pblRyaXA/InllcyI6Im5vIn0iPiR7ci5pblRyaXA/IkluIHRoZSB0cmlwIjoiUGxhbiBvbmx5In08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG49PmAke2cobi5uYW1lKX06ICR7ZyhuLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSxVZj1lPT57aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm47ZS50b29sTmFtZXMmJihaZj1lLnRvb2xOYW1lcyksZS5icmFuZCYmKEl0PVN0cmluZyhlLmJyYW5kKSksZS5sb2dvVXJsJiYoQ3I9U3RyaW5nKGUubG9nb1VybCkpLHR5cGVvZiBlLmRlbW89PSJib29sZWFuIiYmKE9mPWUuZGVtbyksZS5kZW1vTm90ZSYmKEFmPVN0cmluZyhlLmRlbW9Ob3RlKSksdHlwZW9mIGUucm9vbXNfd2FudGVkPT0ibnVtYmVyIiYmKGJlPWUucm9vbXNfd2FudGVkKSxlLm1lbWJlcj8udGllcj8ubmFtZSYmKGtlPWUubWVtYmVyKSxlLnZpZXc9PT0ic2lnbmVkLW91dCImJihrZT1udWxsKSxlLnN0YXk/LmNoZWNrSW4mJihNPXtjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn0pLChlLnZpZXc9PT0idHJpcCJ8fGUudmlldz09PSJuZWVkcy1kYXRlcyIpJiYoWnQ9ZS5saW5lcz8/W10pLChlLnZpZXc9PT0iYm9va2luZyJ8fGUudmlldz09PSJlbXB0eS10cmlwIikmJihadD1bXSxsYz0wKSxHZT1TdHJpbmcoZS52aWV3Pz8iIik7Y29uc3QgdD1sZSgiYnJhbmQiKTtDcj8odC5zcmM9Q3IsdC5oaWRkZW49ITEsbGUoInRpdGxlIikuaGlkZGVuPSEwKToodC5oaWRkZW49ITAsbGUoInRpdGxlIikuaGlkZGVuPSExLGxlKCJ0aXRsZSIpLnRleHRDb250ZW50PUl0fHwiSG90ZWxzIiksbGUoInN1YiIpLnRleHRDb250ZW50PUpfKGUpLFdfKCksS18oKTtjb25zdCBuPXtob3RlbHM6Q18sIm5vLWhvdGVscyI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm90aGluZyBtYXRjaGVkLiBUcnkgYSBjaXR5LjwvZGl2PicsaG90ZWw6ZXUsIm5vLXJvb21zIjpldSwiaG90ZWwtbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGF0IGhvdGVsIGlzIG5vdCBpbiB0aGlzIGNvbm5lY3Rvci48L2Rpdj4nLGV4dHJhczpPXyx0cmlwOk5fLCJuZWVkcy1kYXRlcyI6Vl8sYm9va2luZzpxXywibmVlZHMtZ3Vlc3QiOmpfLG1lbWJlcjpNXywibWVtYmVyLW5vdC1mb3VuZCI6RF8sInNpZ25lZC1vdXQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlNpZ25lZCBvdXQuIFJhdGVzIGFyZSB0aGUgcHVibGljIG9uZXMgYWdhaW4uPC9kaXY+PGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiPkZpbmQgYSBob3RlbDwvYnV0dG9uPjwvZGl2PicsImVtcHR5LXRyaXAiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIHRyaXAgeWV0LjwvZGl2PicsYm9va2luZ3M6SF8sImNhbmNlbGxhdGlvbi1wcmV2aWV3Ijp0dSxjYW5jZWxsZWQ6dHUsImJvb2tpbmctbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5nIGhlcmUgbWF0Y2hlcyB0aGF0IGNvZGUuPC9kaXY+Jyxjb21wYXJpc29uOkZfLCJub3RoaW5nLXRvLWNvbXBhcmUiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vbmUgb2YgdGhvc2UgYXJlIGhvdGVscyB0aGlzIGNvbm5lY3RvciBrbm93cy48L2Rpdj4nLGl0aW5lcmFyeTpCXywiZW1wdHktaXRpbmVyYXJ5IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5BbiBpdGluZXJhcnkgbmVlZHMgYXQgbGVhc3Qgb25lIGRheS48L2Rpdj4nLHBvbGljeTpacixwb2xpY2llczpaciwicG9saWN5LW1pc3NpbmciOlpyfTsoR2U9PT0iaG90ZWwifHxHZT09PSJuby1yb29tcyIpJiZlLmhvdGVsPy5pZCYmKFZyPVN0cmluZyhlLmhvdGVsLmlkKSxlLm5lZWRzRGF0ZXMmJnNldFRpbWVvdXQoKCk9PmZjKCksMCkpO2NvbnN0IG89bltHZV07bGUoImNvbnRlbnQiKS5pbm5lckhUTUw9bz9vKGUpOmA8ZGl2IGNsYXNzPSJlcnIiPiR7ZyhlLmVycm9yPz8iU29tZXRoaW5nIGNhbWUgYmFjayB0aGF0IHRoaXMgY2FyZCBkb2VzIG5vdCBrbm93IGhvdyB0byBkcmF3LiIpfSR7ZS5kZXRhaWw/YDxicj4ke2coZS5kZXRhaWwpfWA6IiJ9PC9kaXY+YH0sVl89ZT0+W19lKCksZS5ob3RlbD9EZihlLmhvdGVsKToiIixgPGRpdiBjbGFzcz0iZXJyIj4ke2coZS53aHk/PyJXaGljaCBuaWdodHM/IEEgcm9vbSBuZWVkcyBhIGNoZWNrLWluIGFuZCBhIGNoZWNrLW91dCBkYXRlLiIpfTwvZGl2PmAsTWYoU3RyaW5nKGUuaG90ZWw/LmlkPz8iIikpXS5qb2luKCIiKSxKXz1lPT5lLnZpZXc9PT0iaG90ZWxzIj9gJHtlLnRvdGFsPz8wfSAke051bWJlcihlLnRvdGFsKT09PTE/ImhvdGVsIjoiaG90ZWxzIn1gOmUudmlldz09PSJob3RlbCJ8fGUudmlldz09PSJuby1yb29tcyI/SmUoZS5zdGF5KTplLnZpZXc9PT0idHJpcCI/KGUubGluZXM/P1tdKS5sZW5ndGg/U3RyaW5nKGUudG90YWw/PyIiKToiIjplLnZpZXc9PT0iY29tcGFyaXNvbiI/YCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDplLnZpZXc9PT0iaXRpbmVyYXJ5Ij9gJHtlLmluVHJpcH0vJHtlLnBsYW5uZWR9IGluIHRoZSB0cmlwYDplLnZpZXc9PT0iYm9va2luZ3MiP2Ake2UuY291bnQ/PzB9IGJvb2tpbmcke051bWJlcihlLmNvdW50KT09PTE/IiI6InMifWA6IiIsS189KCk9Pntjb25zdCBlPWxlKCJtZW1iZXJjaGlwIik7a2U/KGUuaGlkZGVuPSExLGUudGV4dENvbnRlbnQ9YCR7a2UudGllcj8ubmFtZT8/Ik1lbWJlciJ9IMK3ICR7TWF0aC5yb3VuZCgoa2UudGllcj8uZGlzY291bnQ/PzApKjEwMCl9JSBvZmZgLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsIm1lbWJlciIpLGUuc2V0QXR0cmlidXRlKCJ0aXRsZSIsYCR7a2UubmFtZX0gwrcgJHtrZS5wcm9ncmFtbWV9YCkpOihlLmhpZGRlbj1HZT09PSJtZW1iZXItbm90LWZvdW5kIixlLnRleHRDb250ZW50PSJNZW1iZXIgc2lnbiBpbiIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwiYXNrLXNpZ24taW4iKSxlLnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKSl9LFdfPSgpPT57Y29uc3QgZT1sZSgiaGVhZHRyaXAiKSx0PWxjfHxadC5sZW5ndGg7ZS5oaWRkZW49dD09PTB8fEdlPT09InRyaXAiLGxlKCJoZWFkdHJpcG4iKS50ZXh0Q29udGVudD1TdHJpbmcodCl9LEdfPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1Iik7TT17Y2hlY2tJbjplPy52YWx1ZT8/TS5jaGVja0luLGNoZWNrT3V0OnQ/LnZhbHVlPz9NLmNoZWNrT3V0LGd1ZXN0czpOdW1iZXIobj8udmFsdWU/P00uZ3Vlc3RzKXx8Mn19LEpuPShlPXt9KT0+TS5jaGVja0luJiZNLmNoZWNrT3V0P3tjaGVja0luOk0uY2hlY2tJbixjaGVja091dDpNLmNoZWNrT3V0LGd1ZXN0czpNLmd1ZXN0cywuLi5lfTplO2xldCBudTtjb25zdCBmYz0oZT0wKT0+e1ZyJiYoY2xlYXJUaW1lb3V0KG51KSxudT1zZXRUaW1lb3V0KCgpPT57ZWUoImdldEhvdGVsIix7aG90ZWw6VnIscm9vbXM6YmUsLi4uSm4oKX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBuaWdodHMuIikpfSxlKSl9LEs9ZT0+e2xlKCJjb250ZW50IikuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgPGRpdiBjbGFzcz0iZXJyIj4ke2coZSl9PC9kaXY+YCl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixlPT57Y29uc3QgdD1lLnRhcmdldD8uY2xvc2VzdCgiW2RhdGEtaG90ZWxdLFtkYXRhLWFjdF0sW2RhdGEtcG9saWN5XSxbZGF0YS1jYW5jZWxdLFtkYXRhLWNvbmZpcm0tY2FuY2VsXSxbZGF0YS1leHRyYXNdLFtkYXRhLXJvb21zLW5dIik7aWYoIXQpcmV0dXJuO2NvbnN0IG49dC5nZXRBdHRyaWJ1dGUoImRhdGEtcm9vbXMtbiIpO2lmKG4hPT1udWxsKXtHXygpLGJlPU1hdGgubWluKCRfLE1hdGgubWF4KDEsYmUrTnVtYmVyKG4pKSk7Y29uc3QgcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm4iKTtwJiYocC50ZXh0Q29udGVudD1TdHJpbmcoYmUpKTtjb25zdCBtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTttJiYobS50ZXh0Q29udGVudD1wYygpKSxmYyg0NTApO3JldHVybn1jb25zdCBvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1yb29tIik7aWYobyE9PW51bGwpe2NvbnN0IHA9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsbT1OdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSxiPXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/e2NoZWNrSW46dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKT8/IiIsY2hlY2tPdXQ6dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKT8/IiIsZ3Vlc3RzOk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1ndSIpPz8yKX06Sm4oKTtlZSgiYWRkVG9UcmlwIix7aG90ZWw6cCxyb29tOm8scm9vbXM6bSwuLi5ifSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCByPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1leHRyYSIpO2lmKHIhPT1udWxsKXtlZSgiYWRkVG9UcmlwIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsZXh0cmE6cixxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3Qgcz10LmdldEF0dHJpYnV0ZSgiZGF0YS1leHRyYXMiKTtpZihzIT09bnVsbCl7ZWUoImxpc3RFeHRyYXMiLHtob3RlbDpzLC4uLkpuKCl9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhlIGFkZC1vbnMuIikpO3JldHVybn1jb25zdCBpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBvbGljeSIpO2lmKGkhPT1udWxsKXtlZSgicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzppfSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBsb2FkIHRoYXQgcG9saWN5LiIpKTtyZXR1cm59Y29uc3QgYT10LmdldEF0dHJpYnV0ZSgiZGF0YS1jYW5jZWwiKTtpZihhIT09bnVsbCl7ZWUoInByZXZpZXdDYW5jZWxsYXRpb24iLHtib29raW5nOmF9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IHdvcmsgb3V0IHRoZSBmZWUuIikpO3JldHVybn1jb25zdCBjPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2FuY2VsIik7aWYoYyE9PW51bGwpe2VlKCJjYW5jZWxCb29raW5nIix7Ym9va2luZzpjLGNvbmZpcm1lZDohMH0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgY2FuY2VsIHRoYXQgYm9va2luZy4iKSk7cmV0dXJufWNvbnN0IHU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWN0Iik7aWYodT09PSJob21lIil7ZWUoImxpc3RIb3RlbHMiLHt9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk7cmV0dXJufWlmKHU9PT0ibWVtYmVyIil7ZWUoInNpZ25JbiIse30pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgcmVhZCB0aGUgbWVtYmVyc2hpcC4iKSk7cmV0dXJufWlmKHU9PT0iYXNrLXNpZ24taW4iKXtjb25zdCBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaWduaW4iKTtwJiYocC5oaWRkZW49ITEpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LmZvY3VzKCk7cmV0dXJufWlmKHU9PT0ic2lnbi1pbiIpe2NvbnN0IHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1udW0iKT8udmFsdWUudHJpbSgpPz8iIixtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtc3VyIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIXB8fCFtKXtLKCJCb3RoIHRoZSBtZW1iZXJzaGlwIG51bWJlciBhbmQgdGhlIHN1cm5hbWUgb24gaXQsIHBsZWFzZS4iKTtyZXR1cm59ZWUoInNpZ25JbiIse251bWJlcjpwLHN1cm5hbWU6bX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3Qgc2lnbiBpbi4iKSk7cmV0dXJufWlmKHU9PT0ic2lnbi1vdXQiKXtrZT1udWxsLGVlKCJzaWduT3V0Iix7fSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBzaWduIG91dC4iKSk7cmV0dXJufWlmKHU9PT0iYXNrLWJvb2siKXtjb25zdCBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndWVzdCIpO3AmJihwLmhpZGRlbj0hMSksZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LmZvY3VzKCk7cmV0dXJufWlmKHU9PT0iYm9vayIpe2NvbnN0IHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImduYW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ21haWwiKT8udmFsdWUudHJpbSgpPz8iIixiPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbm90ZSIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFwfHwhbSl7SygiVGhlIGJvb2tpbmcgbmVlZHMgYSBuYW1lIGFuZCBhbiBlbWFpbCB0byBzZW5kIHRoZSBjb25maXJtYXRpb24gdG8uIik7cmV0dXJufWVlKCJyZXF1ZXN0Qm9va2luZyIse25hbWU6cCxlbWFpbDptLC4uLmI/e25vdGVzOmJ9Ont9fSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBhc2sgZm9yIHRob3NlIHJvb21zLiIpKTtyZXR1cm59aWYodT09PSJib29raW5ncyIpe2VlKCJsaXN0Qm9va2luZ3MiLHt9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgeW91ciBib29raW5ncy4iKSk7cmV0dXJufWlmKHU9PT0idHJpcCIpe2VlKCJ2aWV3VHJpcCIse30pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgbG9hZCB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGw9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtsJiZlZSgiZ2V0SG90ZWwiLHtob3RlbDpsLC4uLkpuKCl9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhhdCBob3RlbC4iKSl9KTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGU9Pntjb25zdCB0PWUudGFyZ2V0O2lmKHQ/LmlkIT09ImNpIiYmdD8uaWQhPT0iY28iKXJldHVybjtjb25zdCBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaSIpLG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIik7aWYoIW58fCFvKXJldHVybjtpZih0LmlkPT09ImNpIiYmbi52YWx1ZSl7Y29uc3Qgcz1HcihuLnZhbHVlLDEpO28ubWluPXMsKCFvLnZhbHVlfHxvLnZhbHVlPD1uLnZhbHVlKSYmKG8udmFsdWU9cyl9TS5jaGVja0luPW4udmFsdWV8fE0uY2hlY2tJbixNLmNoZWNrT3V0PW8udmFsdWV8fE0uY2hlY2tPdXQ7Y29uc3Qgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7ciYmKHIudGV4dENvbnRlbnQ9cGMoKSksZmMoKX0pO2NvbnN0IEhmPShlLHQpPT57dHJ5e05mKHQpLFVmKGUpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3IoIltjYXJkXSByZW5kZXIgZmFpbGVkIixuKSxsZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPlRoaXMgY2FyZCBjb3VsZCBub3QgYmUgZHJhd24uIEFzayBhZ2FpbiBpbiB0aGUgY2hhdC48L2Rpdj4nfX07SGUub250b29scmVzdWx0PWU9PkhmKGU/LnN0cnVjdHVyZWRDb250ZW50LGU/Ll9tZXRhKTtIZS5vbmhvc3Rjb250ZXh0Y2hhbmdlZD1lPT5SZihlLENmKTtIZS5jb25uZWN0KCkudGhlbigoKT0+e2NvbnN0IGU9SGUuZ2V0SG9zdENvbnRleHQoKTtSZihlLENmKTtjb25zdCB0PWU/LnRvb2xJbmZvPy5yZXN1bHQ/LnN0cnVjdHVyZWRDb250ZW50O3QmJkhmKHQsZT8udG9vbEluZm8/LnJlc3VsdD8uX21ldGEpfSkuY2F0Y2goKCk9PntsZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPkNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBob3N0LjwvZGl2Pid9KTs8L3NjcmlwdD4KICAgIDxzdHlsZSByZWw9InN0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luPjpyb290ey0ta2l0LWJnOiAjZmZmZmZmOy0ta2l0LWJnLXNvZnQ6ICNmNmY3Zjk7LS1raXQtZmc6ICMxYTFmMmI7LS1raXQtZmctc29mdDogIzYyNmI3YTstLWtpdC1mZy1mYWludDogIzhhOTNhMTstLWtpdC1saW5lOiAjZTNlN2VkOy0ta2l0LWFjY2VudDogIzFhMWYyYjstLWtpdC1hY2NlbnQtZmc6ICNmZmZmZmY7LS1raXQtbGluazogIzI1NjNlYjstLWtpdC1nb29kOiAjMWE3ZjVhOy0ta2l0LWdvb2QtYmc6ICNkZGYzZTQ7LS1raXQtYmFkOiAjYjMyNjFlOy0ta2l0LWJhZC1iZzogI2ZiZTZlNDstLWtpdC13YXJuOiAjOGE1YTAwOy0ta2l0LXdhcm4tYmc6ICNmZGYwZDU7LS1raXQtcmluZzogIzI1NjNlYn1bZGF0YS10aGVtZT1kYXJrXXstLWtpdC1iZzogIzFkMWYyMzstLWtpdC1iZy1zb2Z0OiAjMjYyOTJlOy0ta2l0LWZnOiAjZWNlZWYxOy0ta2l0LWZnLXNvZnQ6ICNhNGFiYjY7LS1raXQtZmctZmFpbnQ6ICM3Yzg0OTE7LS1raXQtbGluZTogIzM2M2E0MTstLWtpdC1hY2NlbnQ6ICNlY2VlZjE7LS1raXQtYWNjZW50LWZnOiAjMWQxZjIzOy0ta2l0LWxpbms6ICM3YWE3ZmY7LS1raXQtZ29vZDogIzZmZDNhMjstLWtpdC1nb29kLWJnOiAjMWYzYTJkOy0ta2l0LWJhZDogI2ZmOGE4MDstLWtpdC1iYWQtYmc6ICMzZDIzMjI7LS1raXQtd2FybjogI2YyYzQ2YjstLWtpdC13YXJuLWJnOiAjM2EzMDIwOy0ta2l0LXJpbmc6ICM3YWE3ZmZ9OnJvb3R7LS1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5LCB2YXIoLS1raXQtYmcpKTstLWJnLXNvZnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtYmctc29mdCkpOy0tZmc6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSwgdmFyKC0ta2l0LWZnKSk7LS1mZy1zb2Z0OiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSwgdmFyKC0ta2l0LWZnLXNvZnQpKTstLWZnLWZhaW50OiB2YXIoLS1jb2xvci10ZXh0LXRlcnRpYXJ5LCB2YXIoLS1raXQtZmctZmFpbnQpKTstLWxpbmU6IHZhcigtLWNvbG9yLWJvcmRlci1wcmltYXJ5LCB2YXIoLS1raXQtbGluZSkpOy0tYWNjZW50OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQpKTstLWFjY2VudC1mZzogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50LWZnKSk7LS1saW5rOiB2YXIoLS1jb2xvci10ZXh0LWluZm8sIHZhcigtLWtpdC1saW5rKSk7LS1nb29kOiB2YXIoLS1jb2xvci10ZXh0LXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kKSk7LS1nb29kLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kLWJnKSk7LS1iYWQ6IHZhcigtLWNvbG9yLXRleHQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkKSk7LS1iYWQtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkLWJnKSk7LS13YXJuOiB2YXIoLS1jb2xvci10ZXh0LXdhcm5pbmcsIHZhcigtLWtpdC13YXJuKSk7LS13YXJuLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXdhcm5pbmcsIHZhcigtLWtpdC13YXJuLWJnKSk7LS1yaW5nOiB2YXIoLS1jb2xvci1yaW5nLXByaW1hcnksIHZhcigtLWtpdC1yaW5nKSk7LS1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbGcsIDE0cHgpOy0tcmFkaXVzLXNtOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtLCA5cHgpOy0tZm9udDogdmFyKC0tZm9udC1zYW5zLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgc2Fucy1zZXJpZik7LS1tb25vOiB2YXIoLS1mb250LW1vbm8sIHVpLW1vbm9zcGFjZSwgIlNGIE1vbm8iLCBNZW5sbywgbW9ub3NwYWNlKTstLXNoYWRvdzogdmFyKC0tc2hhZG93LXNtLCAwIDFweCAycHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpLCAwIDJweCA1cHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpKX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9LmNhcmR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym94LXNoYWRvdzp2YXIoLS1zaGFkb3cpO21heC13aWR0aDo1NjBweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OnZhcigtLWluc2V0LWxlZnQsIDBweCk7cGFkZGluZy1yaWdodDp2YXIoLS1pbnNldC1yaWdodCwgMHB4KX0uaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzoxNHB4IDE4cHggMH0uaGVhZCAudGl0bGV7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi0uMDFlbX0uaGVhZCAudGl0bGVbaGlkZGVuXXtkaXNwbGF5Om5vbmV9I2NvbnRlbnR7cGFkZGluZzoxMHB4IDE4cHggMThweH0ucmVmcmVzaHttYXJnaW4tbGVmdDo4cHg7YWxpZ24tc2VsZjpjZW50ZXI7ZmxleDpub25lO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtwYWRkaW5nOjA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnMsY29sb3IgLjEyc30ucmVmcmVzaDpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLXNvZnQpfS5yZWZyZXNoOmRpc2FibGVke2N1cnNvcjpkZWZhdWx0O29wYWNpdHk6LjZ9LnJlZnJlc2hbaGlkZGVuXXtkaXNwbGF5Om5vbmV9LnJlZnJlc2ggc3Zne3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7ZGlzcGxheTpibG9ja30ucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246a2l0LXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX1Aa2V5ZnJhbWVzIGtpdC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19LmVtcHR5e3BhZGRpbmc6MThweCAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4fS5oaW50e21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtYWxpZ246Y2VudGVyfS5ub3Rle2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZzowIDAgMTBweH0ubW9ub3tmb250LWZhbWlseTp2YXIoLS1tb25vKTtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLWZhaW50KX0uYmFkZ2V7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmJhZGdlLm9re2NvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmJhZGdlLndhcm4sLmJhZGdlLnRvZG97Y29sb3I6dmFyKC0td2Fybik7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKX0uYmFkZ2UuZXJye2NvbG9yOnZhcigtLWJhZCk7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpfS5idXl7bWFyZ2luLXRvcDoxNHB4O3dpZHRoOjEwMCU7bWluLWhlaWdodDo0NHB4O3BhZGRpbmc6MTFweCAxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWNjZW50KTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjUwO2N1cnNvcjpwb2ludGVyfS5idXk6ZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItY29sb3I6dmFyKC0tbGluZSk7Y29sb3I6dmFyKC0tZmctZmFpbnQpO2N1cnNvcjpkZWZhdWx0fS5idXkuYWx0LC5naG9zdHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5naG9zdHtmbGV4OjE7bWluLWhlaWdodDo0MHB4O3BhZGRpbmc6OXB4IDEwcHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyfS5saW5re2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjZweCAwIDA7Y29sb3I6dmFyKC0tbGluayk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEyLjVweDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5xdHl7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4fS5xdHkgYnV0dG9ue3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxN3B4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnF0eSBzcGFue21pbi13aWR0aDoyNnB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwfWJ1dHRvbjpmb2N1cy12aXNpYmxlLGE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1yaW5nKTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhKG1heC13aWR0aDo0MzBweCl7LmNhcmR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5oZWFke3BhZGRpbmc6MTJweCAxNHB4IDB9I2NvbnRlbnR7cGFkZGluZzo4cHggMTRweCAxNHB4fS5idXl7bWluLWhlaWdodDo0OHB4O2ZvbnQtc2l6ZToxNXB4fS5naG9zdHttaW4taGVpZ2h0OjQ0cHg7Zm9udC1zaXplOjEzLjVweH0ucXR5IGJ1dHRvbnt3aWR0aDo0MnB4O2hlaWdodDo0MnB4O2ZvbnQtc2l6ZToxOXB4fS5yZWZyZXNoe3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHh9LmhpbnQsLm5vdGUsLmVtcHR5e2ZvbnQtc2l6ZToxM3B4fX1AbWVkaWEocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpub25lfSp7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH19W2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH0jY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxMnB4fS5oZWFke21pbi1oZWlnaHQ6MjhweH0uaG9tZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXI7bWluLXdpZHRoOjB9LmhvbWU6aG92ZXJ7b3BhY2l0eTouNzJ9LmhlYWQgLmJyYW5ke21heC1oZWlnaHQ6MzRweDttYXgtd2lkdGg6MTUwcHg7b2JqZWN0LWZpdDpjb250YWlufS5oZWFkIC50aXRsZXtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjE1cHg7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5oZWFkIC5zdWJ7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweDttYXJnaW4taW5saW5lLXN0YXJ0OmF1dG87dGV4dC1hbGlnbjplbmR9LmhlYWR0cmlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjVweCAxMXB4IDVweCA5cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyfS5oZWFkdHJpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5oZWFkIC5zdWIrLmhlYWR0cmlwe21hcmdpbi1pbmxpbmUtc3RhcnQ6MH0uY2FyZC5idXN5e29wYWNpdHk6LjYyfS5jYXJkLmJ1c3kgYnV0dG9uLC5jYXJkLmJ1c3kgaW5wdXQsLmNhcmQuYnVzeSBzZWxlY3R7cG9pbnRlci1ldmVudHM6bm9uZX0ubWVtYmVyY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTBweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MjA7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyfS5tZW1iZXJjaGlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lmxpbmt5e2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjA7Zm9udDppbmhlcml0O2NvbG9yOnZhcigtLWxpbmspO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LnAtd2Fze2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0ucC1tZW1iZXJ7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uc3VtLmdvb2Qgc3BhbjpsYXN0LWNoaWxke2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmRlbW97ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNDV9LmRlbW8gYntmb250LXdlaWdodDo3MDB9LmNpdHlncm91cCsuY2l0eWdyb3Vwe21hcmdpbi10b3A6MTRweH0uY2l0eW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tYm90dG9tOjhweH0uY2l0eW5hbWUgc21hbGx7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwO29wYWNpdHk6Ljc1fS50aWxlc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE5NnB4LDFmcikpO2dhcDoxMHB4fS50aWxle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6dmFyKC0tYmcpO3RleHQtYWxpZ246c3RhcnQ7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7cGFkZGluZzowfS50aWxlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1mZy1mYWludCl9LnQtc2hvdHtwb3NpdGlvbjpyZWxhdGl2ZTthc3BlY3QtcmF0aW86MTYgLyAxMDtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9LnQtc2hvdCBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LnQtbWFya3tmb250LXNpemU6MzBweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07b3BhY2l0eTouOTI7dGV4dC1zaGFkb3c6MCAxcHggMTJweCByZ2IoMCAwIDAgLyAyMiUpO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0udC1zaG90IGltZywuaGVybyBpbWd7ei1pbmRleDoxfS50LWJyYW5ke3otaW5kZXg6Mjtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1ibG9jay1zdGFydDo4cHg7aW5zZXQtaW5saW5lLXN0YXJ0OjhweDtiYWNrZ3JvdW5kOiMwMDAwMDA2MTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtfS50LWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O3BhZGRpbmc6MTBweCAxMXB4IDExcHh9LnQtbmFtZXtmb250LXdlaWdodDo2NDA7Zm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjM7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MjtsaW5lLWNsYW1wOjI7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbjttaW4taGVpZ2h0OjIuNmVtfS50LXdoZXJle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS50LWZvb3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDo4cHg7bWFyZ2luLXRvcDoycHh9LnQtZnJvbXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2NTB9LnQtZnJvbSBzbWFsbHtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjExcHh9LnJhdGV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjNweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmF0ZSBzdmd7Y29sb3I6I2U4YTMzZH0uaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2FzcGVjdC1yYXRpbzoyMSAvIDg7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5oZXJvIC50LW1hcmt7Zm9udC1zaXplOjQwcHh9LmgtbmFtZXtmb250LXNpemU6MTdweDtmb250LXdlaWdodDo2ODA7bGV0dGVyLXNwYWNpbmc6LS4wMTVlbTtsaW5lLWhlaWdodDoxLjI1fS5oLXdoZXJle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHh9Lmgtc3Vte2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNTU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXBze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA5cHg7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uc3RheXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgxMTJweCwxZnIpIG1pbm1heCgxMTJweCwxZnIpIGF1dG8gMWZyO2dhcDo4cHg7YWxpZ24taXRlbXM6ZW5kO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc3RheSBsYWJlbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3RheSBpbnB1dCwuc3RheSBzZWxlY3R7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6N3B4IDZweDttaW4td2lkdGg6MDt3aWR0aDoxMDAlfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5uaWdodHN7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZy1ib3R0b206OHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uc3RheSAuZ297d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo4cHggMTRweDtjdXJzb3I6cG9pbnRlcn0uc3RheSAuZ29bZGlzYWJsZWRde29wYWNpdHk6LjU7Y3Vyc29yOmRlZmF1bHR9LnRodW1ie2dyaWQtYXJlYTp0aHVtYjt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MTBweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDNlbTtmbGV4OjAgMCBhdXRvfS50aHVtYiBpbWd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29iamVjdC1maXQ6Y292ZXJ9LnJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgcHJpY2UgYWN0aW9uIjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4IDExcHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IHByaWNlIGFjdGlvbiJ9LnJvdyAuYm9keXtncmlkLWFyZWE6Ym9keTttaW4td2lkdGg6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHh9LnJvdyAubmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnJvdyAubWV0YXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNDtkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDozO2xpbmUtY2xhbXA6Mzstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVufS5yb3cgLnByaWNle2dyaWQtYXJlYTpwcmljZTt0ZXh0LWFsaWduOmVuZDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnJvdyAucC10b3RhbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY2MH0ucm93IC5wLXVuaXR7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJvdyAuYWN0aW9ue2dyaWQtYXJlYTphY3Rpb259LmJhZGdlc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDttYXJnaW4tdG9wOjJweH0uYmFkZ2V7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjJweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2MjA7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYmFkZ2UuZ29vZHtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LmJhZGdlLndhcm57YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKX0uYmFkZ2UuYmFke2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpfS5hZGR7ZGlzcGxheTppbmxpbmUtZ3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MzhweDtoZWlnaHQ6MzhweDtib3JkZXItcmFkaXVzOjk5OXB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdH0uYWRkOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5hZGRbZGlzYWJsZWRde29wYWNpdHk6LjQ7Y3Vyc29yOmRlZmF1bHR9LnN0ZXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4fS5zdGVwIGJ1dHRvbnt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5zdGVwIGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZmZmYyZX0uc3RlcCAubnttaW4td2lkdGg6MThweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2ODA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXl7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA1ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbjoxMnB4IDAgNnB4fS5zdW1ze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjVweDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lKTttYXJnaW4tdG9wOjEycHg7cGFkZGluZy10b3A6MTBweDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnN1bXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uc3VtLnRvdGFse2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmZvb3R7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi10b3A6MTJweH0uZ297ZmxleDoxO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MTFweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmc6MTJweCAxNnB4O2N1cnNvcjpwb2ludGVyfS5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTU7Y3Vyc29yOmRlZmF1bHR9LmdvLnF1aWV0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2ZsZXg6MCAwIGF1dG87Zm9udC13ZWlnaHQ6NjIwfS5nby5kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1iYWQpO2NvbG9yOnZhcigtLWJnKX0ubm90ZXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNX0uZm9ybXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMXB4O21hcmdpbi10b3A6MTBweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZm9ybSBpbnB1dHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo4cHggOXB4fS5mb3JtIC50d297ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDo4cHh9LmNvbmZ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtwYWRkaW5nOjE2cHggMTJweH0uY29uZiAuY29kZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo3MjA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb25mIC53aGVyZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMH0uY29uZiAud2hlbntmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS51bnBhaWR7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fS51bnBhaWQgYntmb250LXdlaWdodDo3MjB9Lm1vbmV5LW91dHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEycHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjYwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucHJvc2V7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS42O2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOnByZS13cmFwfS5wcm9zZSBoNHttYXJnaW46MTRweCAwIDRweDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1mZyl9LmVtcHR5e2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6MThweCA0cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVycntiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41fUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey50aWxlc3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTUwcHgsMWZyKSk7Z2FwOjhweH0udC1tYXJre2ZvbnQtc2l6ZToyNHB4fS5zdGF5e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyfS5zdGF5IC5ndWVzdHN7Z3JpZC1jb2x1bW46MX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uc3RheSAuZ297Z3JpZC1jb2x1bW46Mjt3aWR0aDoxMDAlfS5yb3d7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgYWN0aW9uIiAicHJpY2UgYWN0aW9uIjtyb3ctZ2FwOjZweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJ0aHVtYiBib2R5IGFjdGlvbiIgInRodW1iIHByaWNlIGFjdGlvbiJ9LnJvdy53aXRodGh1bWIgLnRodW1ie3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7YWxpZ24tc2VsZjpzdGFydH0ucm93IC5wcmljZXt0ZXh0LWFsaWduOnN0YXJ0fS5mb3JtIC50d297Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn19LmNtcC13cmFwe292ZXJmbG93LXg6YXV0bzttYXJnaW4taW5saW5lOi0ycHg7cGFkZGluZzoycHh9LmNtcHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg3NnB4LDk2cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTEycHgsMWZyKSk7YWxpZ24taXRlbXM6c3RyZXRjaDtjb2x1bW4tZ2FwOjhweH0uY21wLWNvcm5lcntncmlkLWNvbHVtbjoxfS5jbXAtaGVhZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjttaW4td2lkdGg6MH0uY21wLWhlYWQucGlja3tib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCB2YXIoLS1hY2NlbnQpfS5jbXAtaGVhZCAudC1zaG90e2FzcGVjdC1yYXRpbzoxNiAvIDk7Ym9yZGVyOjA7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO3dpZHRoOjEwMCV9LmNvbC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtwYWRkaW5nOjEwcHggMTFweCAxMnB4fS5jb2wtbmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmNvbC1wcmljZXtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jb2wtcHJpY2Ugc21hbGx7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpfS53aHl7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Zm9udC1zdHlsZTppdGFsaWM7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLWlubGluZS1zdGFydDoycHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZy1pbmxpbmUtc3RhcnQ6OHB4fS5wY3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHg7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1fS5wYyBkaXZ7ZGlzcGxheTpmbGV4O2dhcDo1cHh9LnBjIC5te2ZsZXg6MCAwIGF1dG87Zm9udC13ZWlnaHQ6NzAwfS5wYyAucHJvIC5te2NvbG9yOnZhcigtLWdvb2QpfS5wYyAuY29uIC5te2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jbXAgLmssLmNtcCAudntmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDU7cGFkZGluZzo2cHggOHB4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmNtcCAua3tncmlkLWNvbHVtbjoxO2NvbG9yOnZhcigtLWZnLXNvZnQpO3Bvc2l0aW9uOnN0aWNreTtpbnNldC1pbmxpbmUtc3RhcnQ6MDtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uY21wIC52e2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY21wIC52LmFsdCwuY21wIC5rOmhhcygrLnYuYWx0KXtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6NnB4fS5waWNrbWFya3tiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7cGFkZGluZzozcHggOHB4O3RleHQtYWxpZ246Y2VudGVyfS5kYXlze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweH0uZGF5cm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MjhweCAxZnI7Z2FwOjEwcHh9LmRheW51bXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4fS5kYXludW0gYntkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheW51bSBpe2ZsZXg6MTt3aWR0aDoxcHg7YmFja2dyb3VuZDp2YXIoLS1saW5lKX0uZGF5cm93Omxhc3QtY2hpbGQgLmRheW51bSBpe2Rpc3BsYXk6bm9uZX0uZGF5Ym9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7cGFkZGluZy1ib3R0b206MTRweDttaW4td2lkdGg6MH0uZGF5bGFiZWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5kYXlub3Rle2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5wbGFuLWl0ZW17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAxMHB4fS5wbGFuLWl0ZW0gLm5hbWV7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5wbGFuLWl0ZW0gLm1ldGF7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9Lmluc3RhdGV7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnN0YXRlLnllc3tiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9Lmluc3RhdGUubm97YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2Fwe2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcCBie2NvbG9yOnZhcigtLWZnKTtmb250LXdlaWdodDo3MDB9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LmNtcHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDY4cHgsODRweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMDhweCwxZnIpKX19PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgICAgPGRpdiBjbGFzcz0iaGVhZCI+CiAgICAgICAgPCEtLSBUaGUgZ3JvdXAncyB3b3JkbWFyayBhcnJpdmVzIFdJVEggVEhFIERBVEEgYXMgYGxvZ29VcmxgLiBOb3RoaW5nIGlzCiAgICAgICAgICAgICBiYWtlZCBpbiBoZXJlOiBhIGxvZ28gY29tcGlsZWQgaW50byB0aGUgY2FyZCBpcyB0aGUgZmlyc3QgYnJhbmQncywKICAgICAgICAgICAgIGFuZCBldmVyeSBob3RlbCBncm91cCBhZnRlciB0aGVtIHdvdWxkIHdlYXIgaXQuIC0tPgogICAgICAgIDwhLS0gVGhlIHdheSBiYWNrLCBvbiBldmVyeSB2aWV3LiBXaXRob3V0IGl0IHRoZSB0cmlwLCB0aGUgYm9va2luZ3MgbGlzdAogICAgICAgICAgICAgYW5kIGEgY2FuY2VsbGVkIGJvb2tpbmcgYXJlIGFsbCBwbGFjZXMgYSBndWVzdCBjYW4gcmVhY2ggYW5kIG5vdAogICAgICAgICAgICAgbGVhdmUgKHJvYmluLCAyMDI2LTA5LTE4KS4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaG9tZSIgaWQ9ImhvbWUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiIGFyaWEtbGFiZWw9IkJhY2sgdG8gdGhlIGhvdGVscyI+CiAgICAgICAgICA8aW1nIGNsYXNzPSJicmFuZCIgaWQ9ImJyYW5kIiBhbHQ9IiIgaGlkZGVuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InRpdGxlIiBpZD0idGl0bGUiPjwvc3Bhbj4KICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ic3ViIiBpZD0ic3ViIj48L3NwYW4+CiAgICAgICAgPCEtLSBUaGUgdGllciwgb3IgdGhlIHdheSBpbi4gQSBtZW1iZXIgcmF0ZSBpcyBhIGZhY3QgYWJvdXQgZXZlcnkgcHJpY2UKICAgICAgICAgICAgIG9uIHRoZSBjYXJkLCBzbyBpdCBiZWxvbmdzIGluIHRoZSBoZWFkZXIgcmF0aGVyIHRoYW4gb24gb25lIHZpZXcuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1lbWJlcmNoaXAiIGlkPSJtZW1iZXJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+PC9idXR0b24+CiAgICAgICAgPCEtLSBUaGUgdHJpcCwgZnJvbSB0aGUgdG9wLiBUaGUgc2hvcHBpbmcgY2FyZCBsZWFybmVkIG9uIDIwMjYtMDktMTcgdGhhdAogICAgICAgICAgICAgYSBmb290ZXItb25seSBjYXJ0IG1lYW5zIHNjcm9sbGluZyBwYXN0IHR3ZW50eSB0aWxlcyB0byByZWFjaCBpdC4KICAgICAgICAgICAgIFNob3duIG9uY2UgdGhlIHRyaXAgaGFzIHNvbWV0aGluZyBpbiBpdCwgaGlkZGVuIG9uIHRoZSB0cmlwIHZpZXcuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImhlYWR0cmlwIiBpZD0iaGVhZHRyaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InRyaXAiIGhpZGRlbiBhcmlhLWxhYmVsPSJWaWV3IHRoZSB0cmlwIj4KICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIgogICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICA8cGF0aCBkPSJNNCA4LjVoMTZ2MTFhMS41IDEuNSAwIDAgMS0xLjUgMS41aC0xM0ExLjUgMS41IDAgMCAxIDQgMTkuNXoiIC8+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik05IDguNVY2YTIgMiAwIDAgMSAyLTJoMmEyIDIgMCAwIDEgMiAydjIuNSIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPHNwYW4gaWQ9ImhlYWR0cmlwbiI+MDwvc3Bhbj4KICAgICAgICA8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiPjxkaXYgY2xhc3M9ImVtcHR5Ij5Mb2FkaW5n4oCmPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K', 'base64').toString('utf8');
5
+ export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgQmY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLFZmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxnYz17fSxKZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24obCl7cmV0dXJuIFByb21pc2UuYWxsKGwubWFwKHA9PlByb21pc2UucmVzb2x2ZShwKS50aGVuKGc9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmd9KSxnPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpnfSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxjPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLHU9Yz8ubm9uY2V8fGM/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAobD0+e2lmKGw9VmYobCxvKSxsIGluIGdjKXJldHVybjtnY1tsXT0hMDtjb25zdCBwPWwuZW5kc1dpdGgoIi5jc3MiKSxnPXA/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgaz1hLmxlbmd0aC0xO2s+PTA7ay0tKXtjb25zdCAkPWFba107aWYoJC5ocmVmPT09bCYmKCFwfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2x9Il0ke2d9YCkpcmV0dXJuO2NvbnN0IHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKHkucmVsPXA/InN0eWxlc2hlZXQiOkJmLHB8fCh5LmFzPSJzY3JpcHQiKSx5LmNyb3NzT3JpZ2luPSIiLHkuaHJlZj1sLHUmJnkuc2V0QXR0cmlidXRlKCJub25jZSIsdSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh5KSxwKXJldHVybiBuZXcgUHJvbWlzZSgoaywkKT0+e3kuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsaykseS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7bH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBLZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBXZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBvbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIEdmKGUpe31mdW5jdGlvbiBZZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIFFmKGUpe31mdW5jdGlvbiBPcihlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBBcihlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+WHIobikpLmpvaW4odCl9ZnVuY3Rpb24gS24oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIFhme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gT3QoZSl7cmV0dXJuIG5ldyBYZihlKX1mdW5jdGlvbiBZcihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBFZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gbnUoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgdmM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gb3UoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT12YylyZXR1cm4gbz09PXZvaWQgMCYmKG89dmMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIGVoKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gRmUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBybyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBTZShlKXtyZXR1cm4gcm8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gcnUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBGZSh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBzdShlLHQsbil7dCBpbiBlP0ZlKGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gTWUoZSx0LG4sbyl7Y29uc3Qgcj1TZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9ydShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTpzdShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiB0aChlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/cnUoZSxuLCgpPT50W25dKTpzdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBYKC4uLmUpe2NvbnN0IHQ9e307Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKTtPYmplY3QuYXNzaWduKHQsbyl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LHQpfWZ1bmN0aW9uIG5oKGUpe3JldHVybiBYKGUuX3pvZC5kZWYpfWZ1bmN0aW9uIG9oKGUsdCl7cmV0dXJuIHQ/dC5yZWR1Y2UoKG4sbyk9Pm4/LltvXSxlKTplfWZ1bmN0aW9uIHJoKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZSksbj10Lm1hcChvPT5lW29dKTtyZXR1cm4gUHJvbWlzZS5hbGwobikudGhlbihvPT57Y29uc3Qgcj17fTtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKylyW3Rbc11dPW9bc107cmV0dXJuIHJ9KX1mdW5jdGlvbiBzaChlPTEwKXtjb25zdCB0PSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7bGV0IG49IiI7Zm9yKGxldCBvPTA7bzxlO28rKyluKz10W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSp0Lmxlbmd0aCldO3JldHVybiBufWZ1bmN0aW9uIGl1KGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX1mdW5jdGlvbiBhdShlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC9bXlx3XHMtXS9nLCIiKS5yZXBsYWNlKC9bXHNfLV0rL2csIi0iKS5yZXBsYWNlKC9eLSt8LSskL2csIiIpfWNvbnN0IFFyPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZTooLi4uZSk9Pnt9O2Z1bmN0aW9uIFllKGUpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiYhQXJyYXkuaXNBcnJheShlKX1jb25zdCBjdT1PdCgoKT0+e2lmKG5lLmppdGxlc3N8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/LnVzZXJBZ2VudD8uaW5jbHVkZXMoIkNsb3VkZmxhcmUiKSlyZXR1cm4hMTt0cnl7Y29uc3QgZT1GdW5jdGlvbjtyZXR1cm4gbmV3IGUoIiIpLCEwfWNhdGNoe3JldHVybiExfX0pO2Z1bmN0aW9uIENlKGUpe2lmKFllKGUpPT09ITEpcmV0dXJuITE7Y29uc3QgdD1lLmNvbnN0cnVjdG9yO2lmKHQ9PT12b2lkIDB8fHR5cGVvZiB0IT0iZnVuY3Rpb24iKXJldHVybiEwO2NvbnN0IG49dC5wcm90b3R5cGU7cmV0dXJuIShZZShuKT09PSExfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwiaXNQcm90b3R5cGVPZiIpPT09ITEpfWZ1bmN0aW9uIHNvKGUpe3JldHVybiBDZShlKT97Li4uZX06QXJyYXkuaXNBcnJheShlKT9bLi4uZV06ZSBpbnN0YW5jZW9mIE1hcD9uZXcgTWFwKGUpOmUgaW5zdGFuY2VvZiBTZXQ/bmV3IFNldChlKTplfWZ1bmN0aW9uIGloKGUpe2xldCB0PTA7Zm9yKGNvbnN0IG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdCsrO3JldHVybiB0fWNvbnN0IGFoPWU9Pntjb25zdCB0PXR5cGVvZiBlO3N3aXRjaCh0KXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuInVuZGVmaW5lZCI7Y2FzZSJzdHJpbmciOnJldHVybiJzdHJpbmciO2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UiZnVuY3Rpb24iOnJldHVybiJmdW5jdGlvbiI7Y2FzZSJiaWdpbnQiOnJldHVybiJiaWdpbnQiO2Nhc2Uic3ltYm9sIjpyZXR1cm4ic3ltYm9sIjtjYXNlIm9iamVjdCI6cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5IjplPT09bnVsbD8ibnVsbCI6ZS50aGVuJiZ0eXBlb2YgZS50aGVuPT0iZnVuY3Rpb24iJiZlLmNhdGNoJiZ0eXBlb2YgZS5jYXRjaD09ImZ1bmN0aW9uIj8icHJvbWlzZSI6dHlwZW9mIE1hcDwidSImJmUgaW5zdGFuY2VvZiBNYXA/Im1hcCI6dHlwZW9mIFNldDwidSImJmUgaW5zdGFuY2VvZiBTZXQ/InNldCI6dHlwZW9mIERhdGU8InUiJiZlIGluc3RhbmNlb2YgRGF0ZT8iZGF0ZSI6dHlwZW9mIEZpbGU8InUiJiZlIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6Im9iamVjdCI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YSB0eXBlOiAke3R9YCl9fSxXbj1uZXcgU2V0KFsic3RyaW5nIiwibnVtYmVyIiwic3ltYm9sIl0pLHV1PW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJiaWdpbnQiLCJib29sZWFuIiwic3ltYm9sIiwidW5kZWZpbmVkIl0pO2Z1bmN0aW9uICRlKGUpe3JldHVybiBlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9ZnVuY3Rpb24gSChlLHQsbil7Y29uc3Qgbz1uZXcgZS5fem9kLmNvbnN0cih0Pz9lLl96b2QuZGVmKTtyZXR1cm4oIXR8fG4/LnBhcmVudCkmJihvLl96b2QucGFyZW50PWUpLG99ZnVuY3Rpb24gXyhlKXtjb25zdCB0PWU7aWYoIXQpcmV0dXJue307aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybntlcnJvcjooKT0+dH07aWYodD8ubWVzc2FnZSE9PXZvaWQgMCl7aWYodD8uZXJyb3IhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGBtZXNzYWdlYCBhbmQgYGVycm9yYCBwYXJhbXMiKTt0LmVycm9yPXQubWVzc2FnZX1yZXR1cm4gZGVsZXRlIHQubWVzc2FnZSx0eXBlb2YgdC5lcnJvcj09InN0cmluZyI/ey4uLnQsZXJyb3I6KCk9PnQuZXJyb3J9OnR9ZnVuY3Rpb24gY2goZSl7bGV0IHQ7cmV0dXJuIG5ldyBQcm94eSh7fSx7Z2V0KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmdldCh0LG8scil9LHNldChuLG8scixzKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LnNldCh0LG8scixzKX0saGFzKG4sbyl7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5oYXModCxvKX0sZGVsZXRlUHJvcGVydHkobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHQsbyl9LG93bktleXMobil7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5vd25LZXlzKHQpfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG8pfSxkZWZpbmVQcm9wZXJ0eShuLG8scil7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8scil9fSl9ZnVuY3Rpb24gWHIoZSl7cmV0dXJuIHR5cGVvZiBlPT0iYmlnaW50Ij9lLnRvU3RyaW5nKCkrIm4iOnR5cGVvZiBlPT0ic3RyaW5nIj9gIiR7ZX0iYDpgJHtlfWB9ZnVuY3Rpb24gbHUoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZpbHRlcih0PT5lW3RdLl96b2Qub3B0aW4hPT12b2lkIDAmJmVbdF0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKX1jb25zdCBkdT17c2FmZWludDpbTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJdLGludDMyOlstMjE0NzQ4MzY0OCwyMTQ3NDgzNjQ3XSx1aW50MzI6WzAsNDI5NDk2NzI5NV0sZmxvYXQzMjpbLTM0MDI4MjM0NjYzODUyODg2ZTIyLDM0MDI4MjM0NjYzODUyODg2ZTIyXSxmbG9hdDY0OlstTnVtYmVyLk1BWF9WQUxVRSxOdW1iZXIuTUFYX1ZBTFVFXX0scHU9e2ludDY0OltCaWdJbnQoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IiksQmlnSW50KCI5MjIzMzcyMDM2ODU0Nzc1ODA3IildLHVpbnQ2NDpbQmlnSW50KDApLEJpZ0ludCgiMTg0NDY3NDQwNzM3MDk1NTE2MTUiKV19O2Z1bmN0aW9uIGZ1KGUsdCl7Y29uc3Qgbj1lLl96b2QuZGVmLG89bi5jaGVja3M7aWYobyYmby5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoIi5waWNrKCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cyIpO2NvbnN0IHM9e307cmV0dXJuIE1lKHMsZSxpbyhlLHQpKSxIKGUsWChuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBpbyhlLHQpe2NvbnN0IG49U2UoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBodShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoaW8oZSx0KSksaT17fTtyZXR1cm4gTWUoaSxlLFJlZmxlY3Qub3duS2V5cyhTZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLEgoZSxYKG4se3NoYXBlOmksY2hlY2tzOltdfSkpfWZ1bmN0aW9uIG11KGUsdCl7aWYoIUNlKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBleHRlbmQ6IGV4cGVjdGVkIGEgcGxhaW4gb2JqZWN0Iik7Y29uc3Qgbj1lLl96b2QuZGVmLmNoZWNrcztpZihuJiZuLmxlbmd0aD4wKXtjb25zdCByPVNlKGUpO2Zvcihjb25zdCBzIG9mIFJlZmxlY3Qub3duS2V5cyh0KSlpZihPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIscykhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgb3ZlcndyaXRlIGtleXMgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cy4gVXNlIGAuc2FmZUV4dGVuZCgpYCBpbnN0ZWFkLiIpfXJldHVybiBIKGUsWChlLl96b2QuZGVmLHtzaGFwZTpndShlLHQpfSkpfWZ1bmN0aW9uIGd1KGUsdCl7Y29uc3Qgbj17fTtyZXR1cm4gTWUobixlLFJlZmxlY3Qub3duS2V5cyhTZShlKSkpLHRoKG4sdCksbn1mdW5jdGlvbiB2dShlLHQpe2lmKCFDZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gc2FmZUV4dGVuZDogZXhwZWN0ZWQgYSBwbGFpbiBvYmplY3QiKTtyZXR1cm4gSChlLFgoZS5fem9kLmRlZix7c2hhcGU6Z3UoZSx0KX0pKX1mdW5jdGlvbiBidShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtNZShuLGUsUmVmbGVjdC5vd25LZXlzKFNlKGUpKSksTWUobix0LFJlZmxlY3Qub3duS2V5cyhTZSh0KSkpO2NvbnN0IG89WChlLl96b2QuZGVmLHtzaGFwZTpuLGdldCBjYXRjaGFsbCgpe3JldHVybiB0Ll96b2QuZGVmLmNhdGNoYWxsfSxjaGVja3M6dC5fem9kLmRlZi5jaGVja3M/P1tdfSk7cmV0dXJuIEgoZSxvKX1mdW5jdGlvbiBOcihlLHQsbixvPSJwYXJ0aWFsIil7Y29uc3Qgcz10Ll96b2QuZGVmLmNoZWNrcztpZihzJiZzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihgLiR7b30oKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzYCk7Y29uc3QgYT1uP25ldyBTZXQoaW8odCxuKSk6dm9pZCAwLGM9e307cmV0dXJuIE1lKGMsdCxSZWZsZWN0Lm93bktleXMoU2UodCkpLGUmJigodSxsKT0+YSYmIWEuaGFzKGwpP3U6bmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dX0pKSksSCh0LFgodC5fem9kLmRlZix7c2hhcGU6YyxjaGVja3M6W119KSl9ZnVuY3Rpb24gX3UoZSx0LG4pe2NvbnN0IG89bj9uZXcgU2V0KGlvKHQsbikpOnZvaWQgMCxyPXt9O3JldHVybiBNZShyLHQsUmVmbGVjdC5vd25LZXlzKFNlKHQpKSwocyxpKT0+byYmIW8uaGFzKGkpP3M6bmV3IGUoe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6c30pKSxIKHQsWCh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIHJlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24geXUoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBkZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIEtlKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIGpyKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBoZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOktlKGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9LZShzPy4oZSkpPz9LZSh0Py5lcnJvcj8uKGUpKT8/S2Uobi5jdXN0b21FcnJvcj8uKGUpKT8/S2Uobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IGMgb2YgT2JqZWN0LmtleXMoZSkpYz09PSJpbnN0Inx8Yz09PSJzY2hlbWEifHxjPT09ImNvbnRpbnVlInx8Yz09PSJpbnB1dCJ8fGM9PT0iX19wcm90b19fInx8KGFbY109ZVtjXSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gYW8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IHVoPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIGNvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIXVoLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gdW8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIHd1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gUWUoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBsaChlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24ga3UoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIFN1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gZGgoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4ga3UodCtuKX1mdW5jdGlvbiBwaChlKXtyZXR1cm4gU3UoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIGZoKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBoaChlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBtaHtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uICR1KGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6Z2goZSxuLG8udmFsdWUpfX1mdW5jdGlvbiB6ZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBsbyhlLHQsbil7cmV0dXJuIHplKGUsdCxuLCExKX1mdW5jdGlvbiBBdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gemUodGhpcyxuLG8odGhpcykpfSxzZXQocil7emUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIGdoKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjp6ZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe3plKHRoaXMsdCxvKX19KX1mdW5jdGlvbiB2aChlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IElyLHhlPSExO2NvbnN0IGJoPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7eGU9ITB9fTtmdW5jdGlvbiB4KGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmSXIhPT1lLl96b2Qpe0lyPXZvaWQgMDtyZXR1cm59SXI9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LGJoKTtjb25zdCByPXhlO3hlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIHhlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSkseGU9eGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSx4ZT14ZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24genUoZSx0LG4sbyl7Y29uc3Qgcj12aChlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IFR1PSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gZXMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtUdV09ITAsdH1jb25zdCB0cz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6cHUsQ09OU1RBTlRfQ0FUQ0g6VHUsQ2xhc3M6bWgsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6ZHUsYWJvcnRlZDpyZSxhbGxvd3NFdmFsOmN1LGFzc2VydDpRZixhc3NlcnRFcXVhbDpLZixhc3NlcnRJczpHZixhc3NlcnROZXZlcjpZZixhc3NlcnROb3RFcXVhbDpXZixhc3NpZ25Qcm9wOkZlLGF0dGFjaFNjaGVtYTpqcixiYXNlNjRUb1VpbnQ4QXJyYXk6a3UsYmFzZTY0dXJsVG9VaW50OEFycmF5OmRoLGNhY2hlZDpPdCxjYXB0dXJlU3RhY2tUcmFjZTpRcixjbGVhbkVudW06bGgsY2xlYW5SZWdleDpFZSxjbG9uZTpILGNsb25lRGVmOm5oLGNvZGVQb2ludExlbmd0aDpjbyxjb25zdGFudENhdGNoOmVzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6Y2gsZGVmaW5lTGF6eTpvdSxkZWZpbmVMYXp5SW50ZXJuYWw6eCxkZXJpdmVkOkF0LGVzYzppdSxlc2NhcGVSZWdleDokZSxleHBsaWNpdGx5QWJvcnRlZDp5dSxleHRlbmQ6bXUsZmluYWxpemVJc3N1ZTpoZSxmbG9hdFNhZmVSZW1haW5kZXI6bnUsZ2V0RWxlbWVudEF0UGF0aDpvaCxnZXRFbnVtVmFsdWVzOk9yLGdldExlbmd0aGFibGVPcmlnaW46dW8sZ2V0UGFyc2VkVHlwZTphaCxnZXRTaXphYmxlT3JpZ2luOmFvLGhleFRvVWludDhBcnJheTpmaCxoaWRlOmxvLGluc3RhbGxMYXp5UHJvcDp6dSxpc09iamVjdDpZZSxpc1BsYWluT2JqZWN0OkNlLGlzc3VlOlFlLGpvaW5WYWx1ZXM6QXIsanNvblN0cmluZ2lmeVJlcGxhY2VyOktuLG1lbWJlcnM6JHUsbWVyZ2U6YnUsbWVyZ2VEZWZzOlgsbm9ybWFsaXplUGFyYW1zOl8sbnVsbGlzaDpZcixudW1LZXlzOmloLG9iamVjdENsb25lOmVoLG9taXQ6aHUsb3B0aW9uYWxLZXlzOmx1LG93bjp6ZSxwYXJzZWRUeXBlOnd1LHBhcnRpYWw6TnIscGljazpmdSxwcmVmaXhJc3N1ZXM6ZGUscHJpbWl0aXZlVHlwZXM6dXUscHJvbWlzZUFsbE9iamVjdDpyaCxwcm9wZXJ0eUtleVR5cGVzOlduLHJhbmRvbVN0cmluZzpzaCxyYXdTaGFwZTpybyxyZXF1aXJlZDpfdSxzYWZlRXh0ZW5kOnZ1LHNoYWxsb3dDbG9uZTpzbyxzbHVnaWZ5OmF1LHN0cmluZ2lmeVByaW1pdGl2ZTpYcix0b1pvZDpvbyx1aW50OEFycmF5VG9CYXNlNjQ6U3UsdWludDhBcnJheVRvQmFzZTY0dXJsOnBoLHVpbnQ4QXJyYXlUb0hleDpoaCx1bndyYXBNZXNzYWdlOktlfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBiYztjb25zdCBucz1PYmplY3QuZnJlZXplKHtzdGF0dXM6ImFib3J0ZWQifSkseHI9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfTtsZXQgX2M9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yOm51bGw7ZnVuY3Rpb24gX2goZSl7Y29uc3QgdD1fYztpZih0KXtjb25zdCBuPXQuc3RhY2tUcmFjZUxpbWl0O2lmKHR5cGVvZiBuPT0ibnVtYmVyIil7dHJ5e3Quc3RhY2tUcmFjZUxpbWl0PTB9Y2F0Y2h7cmV0dXJuIF9jPW51bGwsbmV3IGV9dHJ5e3JldHVybiBuZXcgZX1maW5hbGx5e3Quc3RhY2tUcmFjZUxpbWl0PW59fX1yZXR1cm4gbmV3IGV9ZnVuY3Rpb24gZChlLHQsbixvKXtjb25zdCByPXt9O2Z1bmN0aW9uIHMoZyl7dGhpcy5kZWY9Zyx0aGlzLmNvbnN0cj1wLHRoaXMudHJhaXRzPW5ldyBTZXR9cy5wcm90b3R5cGU9cjtjb25zdCBpPW4sYT1pJiZuZXcgV2Vha1NldDtmdW5jdGlvbiBjKGcsYil7aWYoZy5fem9kKXtpZihnLl96b2QudHJhaXRzLmhhcyhlKSlyZXR1cm59ZWxzZXt4ci52YWx1ZT1uZXcgcyhiKTt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGcsIl96b2QiLHhyKX1maW5hbGx5e3hyLnZhbHVlPXZvaWQgMH19aWYoZy5fem9kLnRyYWl0cy5hZGQoZSksdChnLGIpLGEpe2NvbnN0IGs9T2JqZWN0LmdldFByb3RvdHlwZU9mKGcpLCQ9Zy5fem9kLmNvbnN0ci5wcm90b3R5cGU7bGV0IGo9aztmb3IoO2omJmohPT0kOylqPU9iamVjdC5nZXRQcm90b3R5cGVPZihqKTtjb25zdCBSPWo/P2s7YS5oYXMoUil8fChhLmFkZChSKSwkdShSLGkpKX1jb25zdCB5PXAucHJvdG90eXBlO2Zvcihjb25zdCBrIGluIHkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHksaykmJihrIGluIGd8fChnW2tdPXlba10uYmluZChnKSkpfWNvbnN0IHU9bz8uUGFyZW50Pz9PYmplY3Q7Y2xhc3MgbCBleHRlbmRzIHV7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJuYW1lIix7dmFsdWU6ZX0pO2Z1bmN0aW9uIHAoZyl7Y29uc3QgYj1vPy5QYXJlbnQ/X2gobCk6dGhpcztjKGIsZyk7Y29uc3QgeT1iLl96b2QuZGVmZXJyZWQ7aWYoeSl7Zm9yKGNvbnN0ICQgb2YgeSkkKCk7Yi5fem9kLmRlZmVycmVkPXZvaWQgMH1jb25zdCBrPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnPy5wb3N0UHJvY2Vzc29yO3JldHVybiBrJiZrKGIpLGJ9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJpbml0Iix7dmFsdWU6Y30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6Zz0+bz8uUGFyZW50JiZnIGluc3RhbmNlb2Ygby5QYXJlbnQ/ITA6Zz8uX3pvZD8udHJhaXRzPy5oYXMoZSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCwibmFtZSIse3ZhbHVlOmV9KSxwfWNvbnN0IG9zPVN5bWJvbCgiem9kX2JyYW5kIik7Y2xhc3MgUmUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJFbmNvdW50ZXJlZCBQcm9taXNlIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZS4gVXNlIC5wYXJzZUFzeW5jKCkgaW5zdGVhZC4iKX19Y2xhc3MgcG8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcihgRW5jb3VudGVyZWQgdW5pZGlyZWN0aW9uYWwgdHJhbnNmb3JtIGR1cmluZyBlbmNvZGU6ICR7dH1gKSx0aGlzLm5hbWU9IlpvZEVuY29kZUVycm9yIn19KGJjPWdsb2JhbFRoaXMpLl9fem9kX2dsb2JhbENvbmZpZz8/KGJjLl9fem9kX2dsb2JhbENvbmZpZz17fSk7Y29uc3QgbmU9Z2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxDb25maWc7ZnVuY3Rpb24gSihlKXtyZXR1cm4gZSYmT2JqZWN0LmFzc2lnbihuZSxlKSxuZX1mdW5jdGlvbiB5aCgpe2NvbnN0IGU9dGhpcy5fem9kO3JldHVybiBlLm1lc3NhZ2U/PyhlLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoZS5kZWYsS24sMikpLGUubWVzc2FnZX1mdW5jdGlvbiB3aChlKXt0aGlzLl96b2QubWVzc2FnZT1lfWNvbnN0IGtoPXtnZXQ6eWgsc2V0OndoLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxFcj17dmFsdWU6dm9pZCAwLGVudW1lcmFibGU6ITF9LHljPW5ldyBXZWFrU2V0KFtPYmplY3QucHJvdG90eXBlLEVycm9yLnByb3RvdHlwZV0pLFB1PShlLHQpPT57ZS5uYW1lPSIkWm9kRXJyb3IiLEVyLnZhbHVlPXQsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlzc3VlcyIsRXIpLEVyLnZhbHVlPXZvaWQgMCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibWVzc2FnZSIsa2gpO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3ljLmhhcyhuKXx8KHljLmFkZChuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtjb25zdCBvPSgpPT50aGlzLm1lc3NhZ2U7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ0b1N0cmluZyIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksb30sc2V0KG8pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ0b1N0cmluZyIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9fSkpfSxJdT1kKCIkWm9kRXJyb3IiLFB1KSxjZT1kKCIkWm9kRXJyb3IiLFB1LHZvaWQgMCx7UGFyZW50OkVycm9yfSk7ZnVuY3Rpb24gU2goZSx0LG4pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KXx8KHQ9PT0iX19wcm90b19fIj9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuKCksd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTplW3RdPW4oKSksZVt0XX1mdW5jdGlvbiBmbyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXt9LG89W107Zm9yKGNvbnN0IHIgb2YgZS5pc3N1ZXMpci5wYXRoLmxlbmd0aD4wP1NoKG4sci5wYXRoWzBdLCgpPT5bXSkucHVzaCh0KHIpKTpvLnB1c2godChyKSk7cmV0dXJue2Zvcm1FcnJvcnM6byxmaWVsZEVycm9yczpufX1mdW5jdGlvbiBobyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtfZXJyb3JzOltdfSxvPShyLHM9W10pPT57Zm9yKGNvbnN0IGkgb2Ygci5pc3N1ZXMpaWYoaS5jb2RlPT09ImludmFsaWRfdW5pb24iJiZpLmVycm9ycy5sZW5ndGgpaS5lcnJvcnMubWFwKGE9Pm8oe2lzc3VlczphfSxbLi4ucywuLi5pLnBhdGhdKSk7ZWxzZSBpZihpLmNvZGU9PT0iaW52YWxpZF9rZXkiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZSBpZihpLmNvZGU9PT0iaW52YWxpZF9lbGVtZW50IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2V7Y29uc3QgYT1bLi4ucywuLi5pLnBhdGhdO2lmKGEubGVuZ3RoPT09MCluLl9lcnJvcnMucHVzaCh0KGkpKTtlbHNle2xldCBjPW4sdT0wO2Zvcig7dTxhLmxlbmd0aDspe2NvbnN0IGw9YVt1XSxwPXU9PT1hLmxlbmd0aC0xO2lmKGw9PT0iX2Vycm9ycyIpe3AmJmMuX2Vycm9ycy5wdXNoKHQoaSkpLHUrKztjb250aW51ZX1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxsKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6e19lcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7Y29uc3QgZz1jW2xdO3AmJmcuX2Vycm9ycy5wdXNoKHQoaSkpLGM9Zyx1Kyt9fX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gcnMoZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17ZXJyb3JzOltdfSxvPShyLHM9W10pPT57dmFyIGk7Zm9yKGNvbnN0IGEgb2Ygci5pc3N1ZXMpaWYoYS5jb2RlPT09ImludmFsaWRfdW5pb24iJiZhLmVycm9ycy5sZW5ndGgpYS5lcnJvcnMubWFwKGM9Pm8oe2lzc3VlczpjfSxbLi4ucywuLi5hLnBhdGhdKSk7ZWxzZSBpZihhLmNvZGU9PT0iaW52YWxpZF9rZXkiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZSBpZihhLmNvZGU9PT0iaW52YWxpZF9lbGVtZW50IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2V7Y29uc3QgYz1bLi4ucywuLi5hLnBhdGhdO2lmKGMubGVuZ3RoPT09MCl7bi5lcnJvcnMucHVzaCh0KGEpKTtjb250aW51ZX1sZXQgdT1uLGw9MDtmb3IoO2w8Yy5sZW5ndGg7KXtjb25zdCBwPWNbbF0sZz1sPT09Yy5sZW5ndGgtMTt0eXBlb2YgcD09InN0cmluZyI/KHUucHJvcGVydGllcz8/KHUucHJvcGVydGllcz17fSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUucHJvcGVydGllcyxwKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHUucHJvcGVydGllcyxwLHt2YWx1ZTp7ZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHU9dS5wcm9wZXJ0aWVzW3BdKToodS5pdGVtcz8/KHUuaXRlbXM9W10pLChpPXUuaXRlbXMpW3BdPz8oaVtwXT17ZXJyb3JzOltdfSksdT11Lml0ZW1zW3BdKSxnJiZ1LmVycm9ycy5wdXNoKHQoYSkpLGwrK319fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIHh1KGUpe2NvbnN0IHQ9W10sbj1lLm1hcChvPT50eXBlb2Ygbz09Im9iamVjdCI/by5rZXk6byk7Zm9yKGNvbnN0IG8gb2Ygbil0eXBlb2Ygbz09Im51bWJlciI/dC5wdXNoKGBbJHtvfV1gKTp0eXBlb2Ygbz09InN5bWJvbCI/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShTdHJpbmcobykpfV1gKTovW15cdyRdLy50ZXN0KG8pP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkobyl9XWApOih0Lmxlbmd0aCYmdC5wdXNoKCIuIiksdC5wdXNoKG8pKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5jdGlvbiBzcyhlKXtjb25zdCB0PVtdLG49Wy4uLmUuaXNzdWVzXS5zb3J0KChvLHIpPT4oby5wYXRoPz9bXSkubGVuZ3RoLShyLnBhdGg/P1tdKS5sZW5ndGgpO2Zvcihjb25zdCBvIG9mIG4pdC5wdXNoKGDinJYgJHtvLm1lc3NhZ2V9YCksby5wYXRoPy5sZW5ndGgmJnQucHVzaChgICDihpIgYXQgJHt4dShvLnBhdGgpfWApO3JldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiBtbyhlLHQpe3JldHVybntjYWxsZWU6dD8uY2FsbGVlPz9lLEVycjp0Py5FcnJ9fWNvbnN0IE50PWU9Pntjb25zdCB0PShuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMX06e2FzeW5jOiExfSxhPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxpKTtpZihhIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgUmU7aWYoYS5pc3N1ZXMubGVuZ3RoKXtjb25zdCBjPW5ldyhzPy5FcnI/P2UpKGEuaXNzdWVzLm1hcCh1PT5oZSh1LGksSigpKSkpO3Rocm93IFFyKGMscz8uY2FsbGVlPz90KSxjfXJldHVybiBhLnZhbHVlfTtyZXR1cm4gdH0sTXI9TnQoY2UpLGp0PWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgaT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBhPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxpKTtpZihhIGluc3RhbmNlb2YgUHJvbWlzZSYmKGE9YXdhaXQgYSksYS5pc3N1ZXMubGVuZ3RoKXtjb25zdCBjPW5ldyhzPy5FcnI/P2UpKGEuaXNzdWVzLm1hcCh1PT5oZSh1LGksSigpKSkpO3Rocm93IFFyKGMscz8uY2FsbGVlPz90KSxjfXJldHVybiBhLnZhbHVlfTtyZXR1cm4gdH0sRHI9anQoY2UpLE10PWU9Pih0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITF9Onthc3luYzohMX0scz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7aWYocyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFJlO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg/UnUoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxFdT1NdChjZSk7ZnVuY3Rpb24gUnUoZSx0LG4pe2xldCBvO3JldHVybntzdWNjZXNzOiExLGdldCBlcnJvcigpe3JldHVybiBvfHwobz1uZXcgZSh0Lm1hcChyPT5oZShyLG4sSigpKSkpLHQ9dm9pZCAwLG49dm9pZCAwKSxvfSxzZXQgZXJyb3Iocil7bz1yLHQ9dm9pZCAwLG49dm9pZCAwfX19Y29uc3QgRHQ9ZT0+YXN5bmModCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBzPXQuX3pvZC5ydW4oe3ZhbHVlOm4saXNzdWVzOltdfSxyKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2UmJihzPWF3YWl0IHMpLHMuaXNzdWVzLmxlbmd0aD9SdShlLHMuaXNzdWVzLHIpOntzdWNjZXNzOiEwLGRhdGE6cy52YWx1ZX19LCRoPUR0KGNlKSx6aD1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5pbnZhbGlkIiksVGg9U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuZmFsbGJhY2siKSxnbz0oKGUsdCxuKT0+e2NvbnN0IG89ZS5fem9kLmJhZy52YWxpZGF0b3I7aWYobyE9PXZvaWQgMCl7aWYobyh0KSE9PXpoKXJldHVybiEwO2lmKG8uZGVmaW5pdGU9PT0hMCYmbj09PXZvaWQgMClyZXR1cm4hMX1yZXR1cm4gUGgoZSx0LG4pfSk7ZnVuY3Rpb24gUGgoZSx0LG4pe2NvbnN0IG89bj97Li4ubixhc3luYzohMSxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITEsYWJvcnRFYXJseTohMH0scj1lLl96b2QuYmFnLmZhbGxiYWNrUnVuO2xldCBzO2lmKHI/KG9bVGhdPSEwLHM9cih7dmFsdWU6dCxpc3N1ZXM6W119LG8pKTpzPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSxzIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgUmU7cmV0dXJuIHMuaXNzdWVzLmxlbmd0aD09PTB9Y29uc3Qgdm89YXN5bmMoZSx0LG4pPT57Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiEwLGFib3J0RWFybHk6ITB9Onthc3luYzohMCxhYm9ydEVhcmx5OiEwfTtsZXQgcj1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlJiYocj1hd2FpdCByKSxyLmlzc3Vlcy5sZW5ndGg9PT0wfSxpcz1lPT57Y29uc3QgdD1OdChlKSxuPShvLHIscyxpKT0+e2NvbnN0IGE9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gdChvLHIsYSxtbyhuLGkpKX07cmV0dXJuIG59LEloPWlzKGNlKSxhcz1lPT57Y29uc3QgdD1OdChlKSxuPShvLHIscyxpKT0+dChvLHIscyxtbyhuLGkpKTtyZXR1cm4gbn0seGg9YXMoY2UpLGNzPWU9Pntjb25zdCB0PWp0KGUpLG49YXN5bmMobyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIGF3YWl0IHQobyxyLGEsbW8obixpKSl9O3JldHVybiBufSxFaD1jcyhjZSksdXM9ZT0+e2NvbnN0IHQ9anQoZSksbj1hc3luYyhvLHIscyxpKT0+YXdhaXQgdChvLHIscyxtbyhuLGkpKTtyZXR1cm4gbn0sUmg9dXMoY2UpLGxzPWU9Pih0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIE10KGUpKHQsbixyKX0sQ2g9bHMoY2UpLGRzPWU9Pih0LG4sbyk9Pk10KGUpKHQsbixvKSxaaD1kcyhjZSkscHM9ZT0+YXN5bmModCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBEdChlKSh0LG4scil9LE9oPXBzKGNlKSxmcz1lPT5hc3luYyh0LG4sbyk9PkR0KGUpKHQsbixvKSxBaD1mcyhjZSksQ3U9L15bY0NdWzAtOWEtel17Nix9JC8sWnU9L15bMC05YS16XSskLyxPdT0vXlswLTddWzAtOUEtSEpLTU5QLVRWLVphLWhqa21ucC10di16XXsyNX0kLyxBdT0vXlswLTlhLXZBLVZdezIwfSQvLE51PS9eW0EtWmEtejAtOV17Mjd9JC8sanU9L15bYS16QS1aMC05Xy1dezIxfSQvO2Z1bmN0aW9uIE11KGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW2EtekEtWjAtOV8tXXske2V9fSRgKX1jb25zdCBEdT0vXlAoPzooXGQrVyl8KD8hLipXKSg/PVxkfFRcZCkoXGQrWSk/KFxkK00pPyhcZCtEKT8oVCg/PVxkKShcZCtIKT8oXGQrTSk/KFxkKyhbLixdXGQrKT9TKT8pPykkLyxOaD0vXlstK10/UCg/ISQpKD86KD86Wy0rXT9cZCtZKXwoPzpbLStdP1xkK1suLF1cZCtZJCkpPyg/Oig/OlstK10/XGQrTSl8KD86Wy0rXT9cZCtbLixdXGQrTSQpKT8oPzooPzpbLStdP1xkK1cpfCg/OlstK10/XGQrWy4sXVxkK1ckKSk/KD86KD86Wy0rXT9cZCtEKXwoPzpbLStdP1xkK1suLF1cZCtEJCkpPyg/OlQoPz1bXGQrLV0pKD86KD86Wy0rXT9cZCtIKXwoPzpbLStdP1xkK1suLF1cZCtIJCkpPyg/Oig/OlstK10/XGQrTSl8KD86Wy0rXT9cZCtbLixdXGQrTSQpKT8oPzpbLStdP1xkKyg/OlsuLF1cZCspP1MpPyk/PyQvLHF1PS9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSkkLyxYZT1lPT5lP25ldyBSZWdFeHAoYF4oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tJHtlfVswLTlhLWZBLUZdezN9LVs4OWFiQUJdWzAtOWEtZkEtRl17M30tWzAtOWEtZkEtRl17MTJ9KSRgKTovXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMS04XVswLTlhLWZBLUZdezN9LVs4OWFiQUJdWzAtOWEtZkEtRl17M30tWzAtOWEtZkEtRl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMHxmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYpJC8samg9WGUoNCksTWg9WGUoNiksRGg9WGUoNyksTHU9L14oPzpbQS1aYS16MC05XycrXC1dK1wuKSpbQS1aYS16MC05XycrXC1dKltBLVphLXowLTlfKy1dQCg/OltBLVphLXowLTldW0EtWmEtejAtOVwtXSpcLikrW0EtWmEtel17Mix9JC8scWg9L15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sTGg9L14oKFtePD4oKVxbXF1cXC4sOzpcc0AiXSsoXC5bXjw+KClcW1xdXFwuLDs6XHNAIl0rKSopfCgiLisiKSlAKChcW1swLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31dKXwoKFthLXpBLVpcLTAtOV0rXC4pK1thLXpBLVpdezIsfSkpJC8sVXU9L15bXlxzQCJdezEsNjR9QFteXHNAXXsxLDI1NX0kL3UsVWg9VXUsSGg9L15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sRmg9Il4oPz1bXFxzXFxTXSpbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7UmVnaW9uYWxfSW5kaWNhdG9yfVxcdTIwRTNdKVtcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtFbW9qaV9Db21wb25lbnR9XSskIjtmdW5jdGlvbiBIdSgpe3JldHVybiBuZXcgUmVnRXhwKEZoLCJ1Iil9Y29uc3QgRnU9L14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvLEJ1PS9eKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318OikpJC8sVnU9ZT0+e2NvbnN0IHQ9JGUoZT8/IjoiKTtyZXR1cm4gbmV3IFJlZ0V4cChgXig/OlswLTlBLUZdezJ9JHt0fSl7NX1bMC05QS1GXXsyfSR8Xig/OlswLTlhLWZdezJ9JHt0fSl7NX1bMC05YS1mXXsyfSRgKX0sSnU9L14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwvKFswLTldfFsxLTJdWzAtOV18M1swLTJdKSQvLEt1PS9eKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318OikpXC8oMTJbMC04XXwxWzAxXVswLTldfFsxLTldP1swLTldKSQvLEJoPS9eJHxeKD86WzAtOWEtekEtWisvXXs0fSkqKD86KD86WzAtOWEtekEtWisvXXsyfT09KXwoPzpbMC05YS16QS1aKy9dezN9PSkpPyQvLFZoPS9eKD86W0EtWmEtejAtOV8tXXs0fSkqKD86W0EtWmEtejAtOV8tXXsyLDN9KT8kLyxXdT0vXig/PS57MSwyNTN9XC4/JClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86Wy0wLTlhLXpBLVpdezAsNjF9WzAtOWEtekEtWl0pPykqXC4/JC8sR3U9L14oPz0uezEsMjUzfSQpKFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pP1wuKStbYS16QS1aXXsyLDYzfSQvLGhzPS9eaHR0cHM/JC8sWXU9L15cK1sxLTldXGR7NiwxNH0kLyxtcz0vXlxkKD86WyAtXT9cZCl7MTEsMTh9JC8sUXU9L14oPzpBRUR8QUZOfEFMTHxBTUR8QU9BfEFSU3xBVUR8QVdHfEFaTnxCQU18QkJEfEJEVHxCSER8QklGfEJNRHxCTkR8Qk9CfEJPVnxCUkx8QlNEfEJUTnxCV1B8QllOfEJaRHxDQUR8Q0RGfENIRXxDSEZ8Q0hXfENMRnxDTFB8Q05ZfENPUHxDT1V8Q1JDfENVUHxDVkV8Q1pLfERKRnxES0t8RE9QfERaRHxFR1B8RVJOfEVUQnxFVVJ8RkpEfEZLUHxHQlB8R0VMfEdIU3xHSVB8R01EfEdORnxHVFF8R1lEfEhLRHxITkx8SFRHfEhVRnxJRFJ8SUxTfElOUnxJUUR8SVJSfElTS3xKTUR8Sk9EfEpQWXxLRVN8S0dTfEtIUnxLTUZ8S1BXfEtSV3xLV0R8S1lEfEtaVHxMQUt8TEJQfExLUnxMUkR8TFNMfExZRHxNQUR8TURMfE1HQXxNS0R8TU1LfE1OVHxNT1B8TVJVfE1VUnxNVlJ8TVdLfE1YTnxNWFZ8TVlSfE1aTnxOQUR8TkdOfE5JT3xOT0t8TlBSfE5aRHxPTVJ8UEFCfFBFTnxQR0t8UEhQfFBLUnxQTE58UFlHfFFBUnxST058UlNEfFJVQnxSV0Z8U0FSfFNCRHxTQ1J8U0RHfFNFS3xTR0R8U0hQfFNMRXxTT1N8U1JEfFNTUHxTVE58U1ZDfFNZUHxTWkx8VEhCfFRKU3xUTVR8VE5EfFRPUHxUUll8VFREfFRXRHxUWlN8VUFIfFVHWHxVU0R8VVNOfFVZSXxVWVV8VVlXfFVaU3xWRUR8VkVTfFZORHxWVVZ8V1NUfFhBRHxYQUZ8WEFHfFhBVXxYQkF8WEJCfFhCQ3xYQkR8WENEfFhDR3xYRFJ8WE9GfFhQRHxYUEZ8WFBUfFhTVXxYVFN8WFVBfFhYWHxZRVJ8WkFSfFpNV3xaV0cpJC8sZ3M9L15bQS1aXXsyfSg/ITAwfDAxfDk5KVxkezJ9W0EtWjAtOV17MTEsMzB9JC8sWHU9Iig/Oig/OlxcZFxcZFsyNDY4XVswNDhdfFxcZFxcZFsxMzU3OV1bMjZdfFxcZFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcZHs0fS0oPzooPzowWzEzNTc4XXwxWzAyXSktKD86MFsxLTldfFsxMl1cXGR8M1swMV0pfCg/OjBbNDY5XXwxMSktKD86MFsxLTldfFsxMl1cXGR8MzApfCg/OjAyKS0oPzowWzEtOV18MVxcZHwyWzAtOF0pKSkiO2Z1bmN0aW9uIEpoKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtlfSRgKX1jb25zdCBlbD1KaChYdSk7ZnVuY3Rpb24gcXIoZSl7Y29uc3QgdD0iKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkIjtyZXR1cm4gdHlwZW9mIGUucHJlY2lzaW9uPT0ibnVtYmVyIj9lLnByZWNpc2lvbj09PS0xP2Ake3R9YDplLnByZWNpc2lvbj09PTA/YCR7dH06WzAtNV1cXGRgOmAke3R9OlswLTVdXFxkXFwuXFxkeyR7ZS5wcmVjaXNpb259fWA6ZS5zZWNvbmRzP2Ake3R9OlswLTVdXFxkKD86XFwuXFxkKyk/YDpgJHt0fSg/OjpbMC01XVxcZCg/OlxcLlxcZCspPyk/YH1mdW5jdGlvbiB0bChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7cXIoZSl9JGApfWZ1bmN0aW9uIG5sKGUpe2NvbnN0IHQ9WyJaIl07ZS5vZmZzZXQmJnQucHVzaCgiKFsrLV0oPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQpIik7Y29uc3Qgbj1gJHtxcih7cHJlY2lzaW9uOmUucHJlY2lzaW9uLHNlY29uZHM6ITB9KX0oPzoke3Quam9pbigifCIpfSlgLG89ZS5sb2NhbD9gJHtufXwke3FyKHtwcmVjaXNpb246ZS5wcmVjaXNpb259KX1gOm47cmV0dXJuIG5ldyBSZWdFeHAoYF4ke1h1fVQoPzoke299KSRgKX1jb25zdCBvbD0vXltcc1xTXXswLH0kLyxybD1lPT57Y29uc3QgdD1lP2BbXFxzXFxTXXske2U/Lm1pbmltdW0/PzB9LCR7ZT8ubWF4aW11bT8/IiJ9fWA6IltcXHNcXFNdKiI7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke3R9JGApfSxzbD0vXi0/XGQrbj8kLyxpbD0vXi0/XGQrJC8sYm89L14tP1xkKyg/OlwuXGQrKT8kLyxhbD0vXig/OnRydWV8ZmFsc2UpJC9pLGNsPS9ebnVsbCQvaSx1bD0vXnVuZGVmaW5lZCQvaSxsbD0vXlteQS1aXSokLyxkbD0vXlteYS16XSokLyxwbD0vXlswLTlhLWZBLUZdKiQvO2Z1bmN0aW9uIHF0KGUsdCl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Ky9deyR7ZX19JHt0fSRgKX1mdW5jdGlvbiBMdChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTlfLV17JHtlfX0kYCl9Y29uc3QgS2g9L15bMC05YS1mQS1GXXszMn0kLyxXaD1xdCgyMiwiPT0iKSxHaD1MdCgyMiksWWg9L15bMC05YS1mQS1GXXs0MH0kLyxRaD1xdCgyNywiPSIpLFhoPUx0KDI3KSxlbT0vXlswLTlhLWZBLUZdezY0fSQvLHRtPXF0KDQzLCI9Iiksbm09THQoNDMpLG9tPS9eWzAtOWEtZkEtRl17OTZ9JC8scm09cXQoNjQsIiIpLHNtPUx0KDY0KSxpbT0vXlswLTlhLWZBLUZdezEyOH0kLyxhbT1xdCg4NiwiPT0iKSxjbT1MdCg4NiksX289T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFueVN0cmluZzpvbCxiYXNlNjQ6QmgsYmFzZTY0dXJsOlZoLGJpZ2ludDpzbCxib29sZWFuOmFsLGJyb3dzZXJFbWFpbDpIaCxjaWRydjQ6SnUsY2lkcnY2Okt1LGNyZWRpdENhcmQ6bXMsY3VpZDpDdSxjdWlkMjpadSxjdXJyZW5jeUNvZGU6UXUsZGF0ZTplbCxkYXRldGltZTpubCxkb21haW46R3UsZHVyYXRpb246RHUsZTE2NDpZdSxlbWFpbDpMdSxlbW9qaTpIdSxleHRlbmRlZER1cmF0aW9uOk5oLGd1aWQ6cXUsaGV4OnBsLGhvc3RuYW1lOld1LGh0bWw1RW1haWw6cWgsaHR0cFByb3RvY29sOmhzLGliYW46Z3MsaWRuRW1haWw6VWgsaW50ZWdlcjppbCxpcHY0OkZ1LGlwdjY6QnUsa3N1aWQ6TnUsbG93ZXJjYXNlOmxsLG1hYzpWdSxtZDVfYmFzZTY0OldoLG1kNV9iYXNlNjR1cmw6R2gsbWQ1X2hleDpLaCxuYW5vaWQ6anUsbmFub2lkT2ZMZW5ndGg6TXUsbnVsbDpjbCxudW1iZXI6Ym8scmZjNTMyMkVtYWlsOkxoLHNoYTFfYmFzZTY0OlFoLHNoYTFfYmFzZTY0dXJsOlhoLHNoYTFfaGV4OlloLHNoYTI1Nl9iYXNlNjQ6dG0sc2hhMjU2X2Jhc2U2NHVybDpubSxzaGEyNTZfaGV4OmVtLHNoYTM4NF9iYXNlNjQ6cm0sc2hhMzg0X2Jhc2U2NHVybDpzbSxzaGEzODRfaGV4Om9tLHNoYTUxMl9iYXNlNjQ6YW0sc2hhNTEyX2Jhc2U2NHVybDpjbSxzaGE1MTJfaGV4OmltLHN0cmluZzpybCx0aW1lOnRsLHVsaWQ6T3UsdW5kZWZpbmVkOnVsLHVuaWNvZGVFbWFpbDpVdSx1cHBlcmNhc2U6ZGwsdXVpZDpYZSx1dWlkNDpqaCx1dWlkNjpNaCx1dWlkNzpEaCx4aWQ6QXV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksVT1kKCIkWm9kQ2hlY2siLChlLHQpPT57dmFyIG47ZS5fem9kPz8oZS5fem9kPXt9KSxlLl96b2QuZGVmPXQsKG49ZS5fem9kKS5vbmF0dGFjaD8/KG4ub25hdHRhY2g9W10pfSksdnM9ZT0+e2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4hWXIodCkmJnQuc2l6ZSE9PXZvaWQgMH0sYnM9ZT0+e2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4hWXIodCkmJnQubGVuZ3RoIT09dm9pZCAwfSxHbj17bnVtYmVyOiJudW1iZXIiLGJpZ2ludDoiYmlnaW50IixvYmplY3Q6ImRhdGUifSxfcz1kKCIkWm9kQ2hlY2tMZXNzVGhhbiIsKGUsdCk9PntVLmluaXQoZSx0KTtjb25zdCBuPUduW3R5cGVvZiB0LnZhbHVlXTtlLl96b2QuY2hlY2s9bz0+eyh0LmluY2x1c2l2ZT9vLnZhbHVlPD10LnZhbHVlOm8udmFsdWU8dC52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjpHblt0eXBlb2Ygby52YWx1ZV0/P24sY29kZToidG9vX2JpZyIsbWF4aW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx5cz1kKCIkWm9kQ2hlY2tHcmVhdGVyVGhhbiIsKGUsdCk9PntVLmluaXQoZSx0KTtjb25zdCBuPUduW3R5cGVvZiB0LnZhbHVlXTtlLl96b2QuY2hlY2s9bz0+eyh0LmluY2x1c2l2ZT9vLnZhbHVlPj10LnZhbHVlOm8udmFsdWU+dC52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjpHblt0eXBlb2Ygby52YWx1ZV0/P24sY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGZsPWQoIiRab2RDaGVja011bHRpcGxlT2YiLChlLHQpPT57VS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntpZih0eXBlb2Ygbi52YWx1ZSE9dHlwZW9mIHQudmFsdWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbWl4IG51bWJlciBhbmQgYmlnaW50IGluIG11bHRpcGxlX29mIGNoZWNrLiIpOyh0eXBlb2Ygbi52YWx1ZT09ImJpZ2ludCI/dC52YWx1ZSE9PUJpZ0ludCgwKSYmbi52YWx1ZSV0LnZhbHVlPT09QmlnSW50KDApOm51KG4udmFsdWUsdC52YWx1ZSk9PT0wKXx8bi5pc3N1ZXMucHVzaCh7b3JpZ2luOnR5cGVvZiBuLnZhbHVlLGNvZGU6Im5vdF9tdWx0aXBsZV9vZiIsZGl2aXNvcjp0LnZhbHVlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksaGw9ZCgiJFpvZENoZWNrTnVtYmVyRm9ybWF0IiwoZSx0KT0+e1UuaW5pdChlLHQpLHQuZm9ybWF0PXQuZm9ybWF0fHwiZmxvYXQ2NCI7Y29uc3Qgbj10LmZvcm1hdD8uaW5jbHVkZXMoImludCIpLG89bj8iaW50IjoibnVtYmVyIixbcixzXT1kdVt0LmZvcm1hdF07ZS5fem9kLmNoZWNrPWk9Pntjb25zdCBhPWkudmFsdWU7aWYobil7aWYoIU51bWJlci5pc0ludGVnZXIoYSkpe2kuaXNzdWVzLnB1c2goe2V4cGVjdGVkOm8sZm9ybWF0OnQuZm9ybWF0LGNvZGU6ImludmFsaWRfdHlwZSIsY29udGludWU6ITEsaW5wdXQ6YSxpbnN0OmV9KTtyZXR1cm59aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGEpKXthPjA/aS5pc3N1ZXMucHVzaCh7aW5wdXQ6YSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk6aS5pc3N1ZXMucHVzaCh7aW5wdXQ6YSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59fWE8ciYmaS5pc3N1ZXMucHVzaCh7b3JpZ2luOiJudW1iZXIiLGlucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnIsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLGE+cyYmaS5pc3N1ZXMucHVzaCh7b3JpZ2luOiJudW1iZXIiLGlucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpzLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxtbD1kKCIkWm9kQ2hlY2tCaWdJbnRGb3JtYXQiLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3RbbixvXT1wdVt0LmZvcm1hdF07ZS5fem9kLmNoZWNrPXI9Pntjb25zdCBzPXIudmFsdWU7czxuJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46ImJpZ2ludCIsaW5wdXQ6cyxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06bixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSkscz5vJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46ImJpZ2ludCIsaW5wdXQ6cyxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOm8saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGdsPWQoIiRab2RDaGVja01heFNpemUiLChlLHQpPT57dmFyIG47VS5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj12cyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPD10Lm1heGltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjphbyhyKSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4aW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx2bD1kKCIkWm9kQ2hlY2tNaW5TaXplIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49dnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZT49dC5taW5pbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YW8ociksY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxibD1kKCIkWm9kQ2hlY2tTaXplRXF1YWxzIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49dnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5zaXplO2lmKHM9PT10LnNpemUpcmV0dXJuO2NvbnN0IGk9cz50LnNpemU7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmFvKHIpLC4uLmk/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5zaXplfTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQuc2l6ZX0saW5jbHVzaXZlOiEwLGV4YWN0OiEwLGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksX2w9ZCgiJFpvZENoZWNrTWF4TGVuZ3RoIiwoZSx0KT0+e3ZhciBuO1UuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49YnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz50Lm1heGltdW0/Y28ocik6cyk8PXQubWF4aW11bSlyZXR1cm47Y29uc3QgYT11byhyKTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4aW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx5bD1kKCIkWm9kQ2hlY2tNaW5MZW5ndGgiLChlLHQpPT57dmFyIG47VS5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1icyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPj10Lm1pbmltdW0mJnM8dC5taW5pbXVtKjI/Y28ocik6cyk+PXQubWluaW11bSlyZXR1cm47Y29uc3QgYT11byhyKTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHdsPWQoIiRab2RDaGVja0xlbmd0aEVxdWFscyIsKGUsdCk9Pnt2YXIgbjtVLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPWJzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoLGk9dHlwZW9mIHI9PSJzdHJpbmciJiZzPj10Lmxlbmd0aCYmczw9dC5sZW5ndGgqMj9jbyhyKTpzO2lmKGk9PT10Lmxlbmd0aClyZXR1cm47Y29uc3QgYT11byhyKSxjPWk+dC5sZW5ndGg7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsLi4uYz97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0Lmxlbmd0aH06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lmxlbmd0aH0saW5jbHVzaXZlOiEwLGV4YWN0OiEwLGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksVXQ9ZCgiJFpvZENoZWNrU3RyaW5nRm9ybWF0IiwoZSx0KT0+e3ZhciBuLG87VS5pbml0KGUsdCksdC5wYXR0ZXJuPyhuPWUuX3pvZCkuY2hlY2s/PyhuLmNoZWNrPXI9Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KHIudmFsdWUpJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpyLnZhbHVlLC4uLnQucGF0dGVybj97cGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKX06e30saW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9KToobz1lLl96b2QpLmNoZWNrPz8oby5jaGVjaz0oKT0+e30pfSksa2w9ZCgiJFpvZENoZWNrUmVnZXgiLChlLHQpPT57VXQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChuLnZhbHVlKSYmbi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InJlZ2V4IixpbnB1dDpuLnZhbHVlLHBhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCksaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksU2w9ZCgiJFpvZENoZWNrTG93ZXJDYXNlIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1sbCksVXQuaW5pdChlLHQpfSksJGw9ZCgiJFpvZENoZWNrVXBwZXJDYXNlIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1kbCksVXQuaW5pdChlLHQpfSksemw9ZCgiJFpvZENoZWNrSW5jbHVkZXMiLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj0kZSh0LmluY2x1ZGVzKSxvPW5ldyBSZWdFeHAodHlwZW9mIHQucG9zaXRpb249PSJudW1iZXIiP2BeLnske3QucG9zaXRpb259LH0ke259YDpuKTt0LnBhdHRlcm49byxlLl96b2QuY2hlY2s9cj0+e3IudmFsdWUuaW5jbHVkZXModC5pbmNsdWRlcyx0LnBvc2l0aW9uKXx8ci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIixpbmNsdWRlczp0LmluY2x1ZGVzLGlucHV0OnIudmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksVGw9ZCgiJFpvZENoZWNrU3RhcnRzV2l0aCIsKGUsdCk9PntVLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYF4keyRlKHQucHJlZml4KX0uKmApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuc3RhcnRzV2l0aCh0LnByZWZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJzdGFydHNfd2l0aCIscHJlZml4OnQucHJlZml4LGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksUGw9ZCgiJFpvZENoZWNrRW5kc1dpdGgiLChlLHQpPT57VS5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGAuKiR7JGUodC5zdWZmaXgpfSRgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLmVuZHNXaXRoKHQuc3VmZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImVuZHNfd2l0aCIsc3VmZml4OnQuc3VmZml4LGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gWW4oZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5kZShuLGUuaXNzdWVzKSl9Y29uc3QgSWw9ZCgiJFpvZENoZWNrUHJvcGVydHkiLChlLHQpPT57VS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pntjb25zdCBvPXQuc2NoZW1hLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlW3QucHJvcGVydHldLGlzc3VlczpbXX0se30pO2lmKG8gaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiBvLnRoZW4ocj0+WW4ocixuLHQucHJvcGVydHkpKTtZbihvLG4sdC5wcm9wZXJ0eSl9fSkseGw9ZCgiJFpvZENoZWNrUHJvcGVydGllcyIsKGUsdCk9PntVLmluaXQoZSx0KSxsbyhlLFN5bWJvbC5pdGVyYXRvcixmdW5jdGlvbiooKXt5aWVsZCBlfSk7bGV0IG47ZS5fem9kLmNoZWNrPW89PntpZihvLnZhbHVlPT1udWxsKXtvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om8udmFsdWUsaW5zdDplfSk7cmV0dXJufW4/PyhuPVJlZmxlY3Qub3duS2V5cyh0LnNoYXBlKS5tYXAoaT0+W2ksdC5zaGFwZVtpXV0pKTtjb25zdCByPW8udmFsdWU7bGV0IHM7Zm9yKGNvbnN0W2ksYV1vZiBuKXtjb25zdCBjPWEuX3pvZC5ydW4oe3ZhbHVlOnJbaV0saXNzdWVzOltdfSx7fSk7YyBpbnN0YW5jZW9mIFByb21pc2U/KHM/PyhzPVtdKSxzLnB1c2goYy50aGVuKHU9PlluKHUsbyxpKSkpKTpZbihjLG8saSl9aWYocylyZXR1cm4gUHJvbWlzZS5hbGwocykudGhlbigoKT0+e30pfX0pLEVsPWQoIiRab2RDaGVja01pbWVUeXBlIiwoZSx0KT0+e1UuaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0Lm1pbWUpO2UuX3pvZC5jaGVjaz1vPT57bi5oYXMoby52YWx1ZS50eXBlKXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOnQubWltZSxpbnB1dDpvLnZhbHVlLnR5cGUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksUmw9ZCgiJFpvZENoZWNrT3ZlcndyaXRlIiwoZSx0KT0+e1UuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57bi52YWx1ZT10LnR4KG4udmFsdWUpfX0pO2NsYXNzIENse2NvbnN0cnVjdG9yKHQ9W10sbj17fSl7dGhpcy5jb250ZW50PVtdLHRoaXMuaW5kZW50PTAsdGhpcy5hcmdzPXQsdGhpcy5jbG9zZWQ9bn1pbmRlbnRlZCh0KXt0aGlzLmluZGVudCs9MTt0cnl7dCh0aGlzKX1maW5hbGx5e3RoaXMuaW5kZW50LT0xfX13cml0ZSh0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil7dCh0aGlzLHtleGVjdXRpb246InN5bmMifSksdCh0aGlzLHtleGVjdXRpb246ImFzeW5jIn0pO3JldHVybn1jb25zdCBvPXQuc3BsaXQoYApgKS5maWx0ZXIoaT0+aSkscj1NYXRoLm1pbiguLi5vLm1hcChpPT5pLmxlbmd0aC1pLnRyaW1TdGFydCgpLmxlbmd0aCkpLHM9by5tYXAoaT0+aS5zbGljZShyKSkubWFwKGk9PiIgIi5yZXBlYXQodGhpcy5pbmRlbnQqMikraSk7Zm9yKGNvbnN0IGkgb2Ygcyl0aGlzLmNvbnRlbnQucHVzaChpKX1jb21waWxlKCl7Y29uc3QgdD1GdW5jdGlvbixuPXRoaXM/LmNvbnRlbnQ/P1siIl07cmV0dXJuIG5ldyB0KC4uLk9iamVjdC5rZXlzKHRoaXMuY2xvc2VkKSxgcmV0dXJuIGZ1bmN0aW9uICgke3RoaXMuYXJncy5qb2luKCIsICIpfSkgewoke24uam9pbihgCmApfQp9O2ApKC4uLk9iamVjdC52YWx1ZXModGhpcy5jbG9zZWQpKX19Y29uc3QgWmw9e21ham9yOjQsbWlub3I6NixwYXRjaDo1fSx6PWQoIiRab2RUeXBlIiwoZSx0KT0+e3ZhciBuO2U/PyhlPXt9KSxlLl96b2QuZGVmPXQsZS5fem9kLmJhZz1lLl96b2QuYmFnfHx7fSxlLl96b2QudmVyc2lvbj1abDtjb25zdCBvPWUuX3pvZC5kZWYuY2hlY2tzLHI9ZS5fem9kLnRyYWl0cy5oYXMoIiRab2RDaGVjayIpP1tlLC4uLm8/P1tdXTpvPy5sZW5ndGg/Wy4uLm9dOltdO2Zvcihjb25zdCBzIG9mIHIpZm9yKGNvbnN0IGkgb2Ygcy5fem9kLm9uYXR0YWNoKWkoZSk7aWYoci5sZW5ndGg9PT0wKShuPWUuX3pvZCkuZGVmZXJyZWQ/PyhuLmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQ/LnB1c2goKCk9PntlLl96b2QucnVuPWUuX3pvZC5wYXJzZX0pO2Vsc2V7Y29uc3Qgcz0oYSxjLHUpPT57aWYoYS5tZW1vKXJldHVybiBhO2xldCBsPXJlKGEpLHA7Zm9yKGNvbnN0IGcgb2YgYyl7aWYoZy5fem9kLmRlZi53aGVuKXtpZih5dShhKXx8IWcuX3pvZC5kZWYud2hlbihhKSljb250aW51ZX1lbHNlIGlmKGwpY29udGludWU7Y29uc3QgYj1hLmlzc3Vlcy5sZW5ndGgseT1nLl96b2QuY2hlY2soYSk7aWYoeSBpbnN0YW5jZW9mIFByb21pc2UmJnU/LmFzeW5jPT09ITEpdGhyb3cgbmV3IFJlO2lmKHB8fHkgaW5zdGFuY2VvZiBQcm9taXNlKXA9KHA/P1Byb21pc2UucmVzb2x2ZSgpKS50aGVuKGFzeW5jKCk9Pnthd2FpdCB5LGEuaXNzdWVzLmxlbmd0aCE9PWImJihqcihhLmlzc3VlcyxiLGUpLGx8fChsPXJlKGEsYikpKX0pO2Vsc2V7aWYoYS5pc3N1ZXMubGVuZ3RoPT09Yiljb250aW51ZTtqcihhLmlzc3VlcyxiLGUpLGx8fChsPXJlKGEsYikpfX1yZXR1cm4gcD9wLnRoZW4oKCk9PmEpOmF9LGk9KGEsYyx1KT0+e2lmKHJlKGEpKXJldHVybiBhLmFib3J0ZWQ9ITAsYTtjb25zdCBsPXMoYyxyLHUpO2lmKGwgaW5zdGFuY2VvZiBQcm9taXNlKXtpZih1LmFzeW5jPT09ITEpdGhyb3cgbmV3IFJlO3JldHVybiBsLnRoZW4ocD0+ZS5fem9kLnBhcnNlKHAsdSkpfXJldHVybiBlLl96b2QucGFyc2UobCx1KX07ZS5fem9kLnJ1bj0oYSxjKT0+e2lmKGMuc2tpcENoZWNrcylyZXR1cm4gZS5fem9kLnBhcnNlKGEsYyk7aWYoYy5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXtjb25zdCBsPWUuX3pvZC5wYXJzZSh7dmFsdWU6YS52YWx1ZSxpc3N1ZXM6W119LHsuLi5jLHNraXBDaGVja3M6ITB9KTtyZXR1cm4gbCBpbnN0YW5jZW9mIFByb21pc2U/bC50aGVuKHA9PmkocCxhLGMpKTppKGwsYSxjKX1jb25zdCB1PWUuX3pvZC5wYXJzZShhLGMpO2lmKHUgaW5zdGFuY2VvZiBQcm9taXNlKXtpZihjLmFzeW5jPT09ITEpdGhyb3cgbmV3IFJlO3JldHVybiB1LnRoZW4obD0+cyhsLHIsYykpfXJldHVybiBzKHUscixjKX19fSx7Z2V0In5zdGFuZGFyZCIoKXtyZXR1cm4gbG8odGhpcywifnN0YW5kYXJkIix3cyh0aGlzKSl9LHNldCJ+c3RhbmRhcmQiKGUpe3plKHRoaXMsIn5zdGFuZGFyZCIsZSl9fSksT2w9KGUsdCk9PmUuaXNzdWVzLmxlbmd0aD97aXNzdWVzOmUuaXNzdWVzLm1hcChuPT5oZShuLHQsSigpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiB1bShlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gT2woYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIHdzKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gT2wobyxuKX1jYXRjaHt9cmV0dXJuIHVtKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IEh0PWQoIiRab2RTdHJpbmciLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9vbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLEQ9ZCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntVdC5pbml0KGUsdCksSHQuaW5pdChlLHQpfSksQWw9ZCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXF1KSxELmluaXQoZSx0KX0pLE5sPWQoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49WGUobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVhlKCkpO0QuaW5pdChlLHQpfSksamw9ZCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1MdSksRC5pbml0KGUsdCl9KSxrcz0xLHh0PTI7ZnVuY3Rpb24gU3MoZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBNbChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP1NzKGUpfHx4dDpEbChlLHQpfWZ1bmN0aW9uIERsKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1ocy5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4ga3M7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/eHR9cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuIHh0fX1jb25zdCBsbT0vW1x0XG5ccl0vZztmdW5jdGlvbiBMcihlKXtyZXR1cm4gZS5yZXBsYWNlKGxtLCIiKX1mdW5jdGlvbiBxbChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBMbChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBVbD1kKCIkWm9kVVJMIiwoZSx0KT0+e0QuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1NbChvLHQpO2lmKHI9PT1rcyl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT14dCl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9THIobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFxbChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhTGwocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6THIobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksSGw9ZCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1IdSgpKSxELmluaXQoZSx0KX0pLEZsPWQoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD9qdTpNdSh0Lmxlbmd0aCkpLEQuaW5pdChlLHQpfSksQmw9ZCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUN1KSxELmluaXQoZSx0KX0pLFZsPWQoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49WnUpLEQuaW5pdChlLHQpfSksSmw9ZCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU91KSxELmluaXQoZSx0KX0pLEtsPWQoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUF1KSxELmluaXQoZSx0KX0pLFdsPWQoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TnUpLEQuaW5pdChlLHQpfSksR2w9ZCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1ubCh0KSksRC5pbml0KGUsdCl9KSxZbD1kKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZWwpLEQuaW5pdChlLHQpfSksUWw9ZCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXRsKHQpKSxELmluaXQoZSx0KX0pLFhsPWQoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RHUpLEQuaW5pdChlLHQpfSksZWQ9ZCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUZ1KSxELmluaXQoZSx0KX0pLGRtPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiAkcyhlKXtyZXR1cm4gZG0udGVzdChlKT9TcyhgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IHRkPWQoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1CdSksRC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PnskcyhuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxuZD1kKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1WdSh0LmRlbGltaXRlcikpLEQuaW5pdChlLHQpfSksb2Q9ZCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49SnUpLEQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gcmQoZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOiRzKG4pfWNvbnN0IHNkPWQoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUt1KSxELmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3JkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24genMoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCBpZD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sYWQ9ZCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49aWQpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57enMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxUcz0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gY2QoZSl7aWYoIVRzLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4genMobil9Y29uc3QgdWQ9ZCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VHMpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Y2Qobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxsZD1kKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49WXUpLEQuaW5pdChlLHQpfSkscG09L1stIF0vZztmdW5jdGlvbiBmbShlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBkZChlKXtyZXR1cm4gbXMudGVzdChlKT9mbShlLnJlcGxhY2UocG0sIiIpKTohMX1jb25zdCBwZD1kKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49bXMpLEQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57ZGQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGhtKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIGZkKGUpe3JldHVybiBncy50ZXN0KGUpP2htKGUpOiExfWNvbnN0IGhkPWQoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1ncyksRC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntmZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBtZChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IGdkPWQoIiRab2RKV1QiLChlLHQpPT57RC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PnttZChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHZkPWQoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57RC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksUHM9ZCgiJFpvZE51bWJlciIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1ibyxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSxiZD1kKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e2hsLmluaXQoZSx0KSxQcy5pbml0KGUsdCl9KSxJcz1kKCIkWm9kQm9vbGVhbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1hbCxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHhzPWQoIiRab2RCaWdJbnQiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49c2wsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxfZD1kKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e21sLmluaXQoZSx0KSx4cy5pbml0KGUsdCl9KSx5ZD1kKCIkWm9kU3ltYm9sIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSx3ZD1kKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXVsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGtkPWQoIiRab2ROdWxsIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPWNsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxTZD1kKCIkWm9kQW55IiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksJGQ9ZCgiJFpvZFVua25vd24iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSx6ZD1kKCIkWm9kTmV2ZXIiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxUZD1kKCIkWm9kVm9pZCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLFBkPWQoIiRab2REYXRlIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gd2MoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5kZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IElkPWQoIiRab2RBcnJheSIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPW5lLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgaT1bXSxhPXI/LmFib3J0RWFybHk7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspe2NvbnN0IHU9c1tjXSxsPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6dSxpc3N1ZXM6W119LHIpO2lmKGwgaW5zdGFuY2VvZiBQcm9taXNlKWkucHVzaChsLnRoZW4ocD0+d2MocCxvLGMpKSk7ZWxzZSBpZih3YyhsLG8sYyksYSYmbC5pc3N1ZXMubGVuZ3RoIT09MCYmcmUobCkpYnJlYWt9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gUW4oZSx0LG4sbyxyLHMpe2NvbnN0IGk9biBpbiBvLGE9cz09PSJvcHRpb25hbCI7aWYoISghaSYmYSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmEmJiFpKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLmRlKG4sZS5pc3N1ZXMpKX1pZighaSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGl8fHI9PT0iZGVmYXVsdGVkIiYmIWEpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3QgbW09W107ZnVuY3Rpb24geGQoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOm1tLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgaSBvZiByKWlmKCFlLnNoYXBlPy5baV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoaSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz1sdShlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIEVkKGUsdCxuLG8scixzLGkpe2NvbnN0IGE9W10sYz1yLmtleVNldCx1PXIuY2F0Y2hhbGwuX3pvZCxsPXUuZGVmLnR5cGUscD11Lm9wdGluLGc9dS5vcHRvdXQ7bGV0IGI9MDtmb3IoY29uc3QgeSBpbiB0KXtpZihpJiZuLmlzc3Vlcy5sZW5ndGghPT1iKXtpZihyZShuLGIpKWJyZWFrO2I9bi5pc3N1ZXMubGVuZ3RofWlmKGMuaGFzKHkpKWNvbnRpbnVlO2lmKHk9PT0iX19wcm90b19fIil7bD09PSJuZXZlciImJmEucHVzaCh5KTtjb250aW51ZX1pZihsPT09Im5ldmVyIil7YS5wdXNoKHkpO2NvbnRpbnVlfWNvbnN0IGs9dS5ydW4oe3ZhbHVlOnRbeV0saXNzdWVzOltdfSxvKTtrIGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2goay50aGVuKCQ9PlFuKCQsbix5LHQscCxnKSkpOlFuKGssbix5LHQscCxnKX1yZXR1cm4gYS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmEsaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IFJkPWQoIiRab2RPYmplY3QiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IHU9KCk9Pntjb25zdCBsPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6bH0pLHUucmF3PWwsbH07dS5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6dX0pfWNvbnN0IHI9T3QoKCk9PnhkKHQpKTt4KGUsInByb3BWYWx1ZXMiLHU9Pntjb25zdCBsPXUuZGVmLnNoYXBlLHA9e307Zm9yKGNvbnN0IGcgaW4gbCl7Y29uc3QgYj1sW2ddLl96b2Q7aWYoYi52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLGcpfHxGZShwLGcsbmV3IFNldCk7Zm9yKGNvbnN0IHkgb2YgYi52YWx1ZXMpcFtnXS5hZGQoeSk7Yi5vcHRpbiE9PXZvaWQgMCYmcFtnXS5hZGQodm9pZCAwKX19cmV0dXJuIHB9KTtjb25zdCBzPVllLGk9dC5jYXRjaGFsbDtsZXQgYTtjb25zdCBjPW5lLm1lbW9pemVyO2M/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHUsbCk9PnthPz8oYT1yLnZhbHVlKTtjb25zdCBwPXUudmFsdWU7aWYoIXMocCkpcmV0dXJuIHUuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cCxpbnN0OmV9KSx1O3UudmFsdWU9Yz9jLmFsbG9jKGUsdSx7fSxsKTp7fTtjb25zdCBnPVtdLGI9YS5zaGFwZSx5PWw/LmFib3J0RWFybHk7bGV0IGs9dS5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGEuYWxsS2V5cyl7aWYoeSYmdS5pc3N1ZXMubGVuZ3RoIT09ayl7aWYocmUodSxrKSlicmVhaztrPXUuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3Qgaj1iWyRdLFI9ai5fem9kLm9wdGluLEY9ai5fem9kLm9wdG91dCxvZT1qLl96b2QucnVuKHt2YWx1ZTpwWyRdLGlzc3VlczpbXX0sbCk7b2UgaW5zdGFuY2VvZiBQcm9taXNlP2cucHVzaChvZS50aGVuKEI9PlFuKEIsdSwkLHAsUixGKSkpOlFuKG9lLHUsJCxwLFIsRil9cmV0dXJuIGk/RWQoZyxwLHUsbCxyLnZhbHVlLGUseT09PSEwKTpnLmxlbmd0aD9Qcm9taXNlLmFsbChnKS50aGVuKCgpPT51KTp1fX0pLENkPWQoIiRab2RPYmplY3RKSVQiLChlLHQpPT57UmQuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89T3QoKCk9PnhkKHQpKSxyPW5lLm1lbW9pemVyLHM9Yj0+e2NvbnN0IHk9by52YWx1ZSxrPXkuc3ltYm9sS2V5cywkPW5ldyBDbChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6YixpbnN0OmUsbWVtbzpyLHN5bXM6a30pLGo9Qj0+YHNoYXBlWyR7Qn1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7Qn1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLFI9KEIsTCk9PmAKICAgICAgICAgIGxldCAke0J9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7Qn0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7Qn0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7TH0sIC4uLmlzcy5wYXRoXSA6IFske0x9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0J9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0J9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBGPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG9lPTA7Zm9yKGNvbnN0IEIgb2YgeS5hbGxLZXlzKUZbQl09YGtleV8ke29lKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IEIgb2YgeS5hbGxLZXlzKXtpZihCPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgTD1GW0JdLHllPXR5cGVvZiBCPT0ic3ltYm9sIj9gc3ltc1ske2suaW5kZXhPZihCKX1dYDppdShCKSxUcj1gJHt5ZX0gaW4gaW5wdXRgLGhjPWJbQl0sUHI9aGM/Ll96b2Q/Lm9wdGluLG1jPVByIT09dm9pZCAwLEhmPWhjPy5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7TH0gPSAke2ooeWUpfTtgKSxtYyYmSGYpe2NvbnN0IEZmPVByPT09Im9wdGlvbmFsIj9gJHtMfV9wcmVzZW50YDpgJHtMfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7TH1fcHJlc2VudGA7JC53cml0ZShgCiAgICAgICAgY29uc3QgJHtMfV9wcmVzZW50ID0gJHtUcn07CiAgICAgICAgaWYgKCEke0x9Lmlzc3Vlcy5sZW5ndGggfHwgJHtMfV9wcmVzZW50KSB7CiAgICAgICAgICBpZiAoJHtMfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKEwseWUpfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICgke0ZmfSkgewogICAgICAgICAgICBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBgKX1lbHNlIG1jPygkLndyaXRlKGAKICAgICAgICBpZiAoJHtMfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKEwseWUpfQogICAgICAgIH0KICAgICAgYCksUHI9PT0iZGVmYXVsdGVkIj8kLndyaXRlKGBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtMfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7VHJ9KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTsKICAgICAgICB9CiAgICAgIGApKTokLndyaXRlKGAKICAgICAgICBjb25zdCAke0x9X3ByZXNlbnQgPSAke1RyfTsKICAgICAgICBpZiAoJHtMfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKEwseWUpfQogICAgICAgIH0KICAgICAgICBpZiAoISR7TH1fcHJlc2VudCAmJiAhJHtMfS5pc3N1ZXMubGVuZ3RoKSB7CiAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHsKICAgICAgICAgICAgY29kZTogImludmFsaWRfdHlwZSIsCiAgICAgICAgICAgIGV4cGVjdGVkOiAibm9ub3B0aW9uYWwiLAogICAgICAgICAgICBpbnB1dDogdW5kZWZpbmVkLAogICAgICAgICAgICBwYXRoOiBbJHt5ZX1dCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChjdHggJiYgY3R4LmFib3J0RWFybHkpIHsKICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJHtMfV9wcmVzZW50KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHt5ZX1dID0gJHtMfS52YWx1ZTsKICAgICAgICB9CgogICAgICBgKX1yZXR1cm4gJC53cml0ZSgicGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsiKSwkLndyaXRlKCJyZXR1cm4gcGF5bG9hZDsiKSwkLmNvbXBpbGUoKX07bGV0IGk7Y29uc3QgYT1ZZSxjPSFuZS5qaXRsZXNzLGw9YyYmY3UudmFsdWUscD10LmNhdGNoYWxsO2xldCBnO2UuX3pvZC5wYXJzZT0oYix5KT0+e2c/PyhnPW8udmFsdWUpO2NvbnN0IGs9Yi52YWx1ZTtyZXR1cm4gYShrKT9jJiZsJiZ5Py5hc3luYz09PSExJiZ5LmppdGxlc3MhPT0hMD8oaXx8KGk9cyh0LnNoYXBlKSksYj1pKGIseSkscD9FZChbXSxrLGIseSxnLGUseT8uYWJvcnRFYXJseT09PSEwKTpiKTpuKGIseSk6KGIuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6ayxpbnN0OmV9KSxiKX19KTtmdW5jdGlvbiBrYyhlLHQsbixvKXtmb3IoY29uc3QgcyBvZiBlKWlmKHMuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIHQudmFsdWU9cy52YWx1ZSx0O2NvbnN0IHI9ZS5maWx0ZXIocz0+IXJlKHMpKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPXJbMF0udmFsdWUsclswXSk6KHQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoaT0+aGUoaSxvLEooKSkpKX0pLHQpfWNvbnN0IHlvPWQoIiRab2RVbmlvbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsIm9wdGluIixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluPT09ImRlZmF1bHRlZCIpPyJkZWZhdWx0ZWQiOm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW4hPT12b2lkIDApPyJvcHRpb25hbCI6dm9pZCAwKSx4KGUsIm9wdG91dCIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKT8ib3B0aW9uYWwiOnZvaWQgMCkseChlLCJ2YWx1ZXMiLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC52YWx1ZXMpKXJldHVybiBuZXcgU2V0KG8uZGVmLm9wdGlvbnMuZmxhdE1hcChyPT5BcnJheS5mcm9tKHIuX3pvZC52YWx1ZXMpKSl9KSx4KGUsInBhdHRlcm4iLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC5wYXR0ZXJuKSl7Y29uc3Qgcj1vLmRlZi5vcHRpb25zLm1hcChzPT5zLl96b2QucGF0dGVybik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oJHtyLm1hcChzPT5FZShzLnNvdXJjZSkpLmpvaW4oInwiKX0pJGApfX0pO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGk9W107Zm9yKGNvbnN0IGEgb2YgdC5vcHRpb25zKXtjb25zdCBjPWEuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTtpZihjIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2goYykscz0hMDtlbHNle2lmKGMuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIGM7aS5wdXNoKGMpfX1yZXR1cm4gcz9Qcm9taXNlLmFsbChpKS50aGVuKGE9PmtjKGEsbyxlLHIpKTprYyhpLG8sZSxyKX19KTtmdW5jdGlvbiBTYyhlLHQsbixvKXtjb25zdCByPVtdO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKWVbc10uaXNzdWVzLmxlbmd0aD09PTAmJnIucHVzaChzKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPWVbclswXV0udmFsdWUsdCk6KHIubGVuZ3RoPT09MD90Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGk9PmhlKGksbyxKKCkpKSl9KTp0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6W10saW5jbHVzaXZlOiExLG1hdGNoZXM6cn0pLHQpfWNvbnN0IFpkPWQoIiRab2RYb3IiLChlLHQpPT57eW8uaW5pdChlLHQpLHQuaW5jbHVzaXZlPSExO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGk9W107Zm9yKGNvbnN0IGEgb2YgdC5vcHRpb25zKXtjb25zdCBjPWEuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTtjIGluc3RhbmNlb2YgUHJvbWlzZT8oaS5wdXNoKGMpLHM9ITApOmkucHVzaChjKX1yZXR1cm4gcz9Qcm9taXNlLmFsbChpKS50aGVuKGE9PlNjKGEsbyxlLHIpKTpTYyhpLG8sZSxyKX19KTtmdW5jdGlvbiBFcyhlLHQpe2NvbnN0IG49ZS5fem9kO2xldCBvPW4uYmFnLm9wdGlvbnNNYXA7b3x8KG89T2Qobi5kZWYpLG4uYmFnLm9wdGlvbnNNYXA9byk7Y29uc3Qgcj1vLmdldCh0KTtpZihyPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoYEFtYmlndW91cyBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyh0KX0iYCk7cmV0dXJuIHJ9ZnVuY3Rpb24gT2QoZSl7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdCBuIG9mIGUub3B0aW9ucyl7Y29uc3Qgbz1uLl96b2QucHJvcFZhbHVlcz8uW2UuZGlzY3JpbWluYXRvcl07aWYoIW98fG8uc2l6ZT09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke2Uub3B0aW9ucy5pbmRleE9mKG4pfSJgKTtmb3IoY29uc3QgciBvZiBvKWlmKHQuaGFzKHIpKXtpZihyIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHIpfSJgKTt0LnNldChyLG51bGwpfWVsc2UgdC5zZXQocixuKX1yZXR1cm4gdH1jb25zdCBBZD1kKCIkWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e3QuaW5jbHVzaXZlPSExLHlvLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZTt4KGUsInByb3BWYWx1ZXMiLHI9Pntjb25zdCBzPXt9O2xldCBpPTA7Zm9yKGNvbnN0IGEgb2Ygci5kZWYub3B0aW9ucyl7Y29uc3QgYz1hLl96b2QucHJvcFZhbHVlcztpZighY3x8T2JqZWN0LmtleXMoYykubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ci5kZWYub3B0aW9ucy5pbmRleE9mKGEpfSJgKTtjW3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5oYXModm9pZCAwKSYmaSsrO2Zvcihjb25zdFt1LGxdb2YgT2JqZWN0LmVudHJpZXMoYykpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLHUpfHxGZShzLHUsbmV3IFNldCk7Zm9yKGNvbnN0IHAgb2YgbClzW3VdLmFkZChwKX19cmV0dXJuIXIuZGVmLnVuaW9uRmFsbGJhY2smJmk+MSYmc1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uZGVsZXRlKHZvaWQgMCksc30pLHQub3B0aW9ucy5mb3JFYWNoKChyLHMpPT57Y29uc3QgaT1ybyhyLl96b2QuZGVmKTtpZihpJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksdC5kaXNjcmltaW5hdG9yKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7c30iYCl9KTtjb25zdCBvPU90KCgpPT5PZCh0KSk7ZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO2lmKCFZZShpKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoib2JqZWN0IixpbnB1dDppLGluc3Q6ZX0pLHI7Y29uc3QgYT1pPy5bdC5kaXNjcmltaW5hdG9yXSxjPW8udmFsdWUuZ2V0KGEpO3JldHVybiBjJiYoYSE9PXZvaWQgMHx8cy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiKT9jLl96b2QucnVuKHIscyk6dC51bmlvbkZhbGxiYWNrfHxzLmRpcmVjdGlvbj09PSJiYWNrd2FyZCI/bihyLHMpOihyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixlcnJvcnM6W10sbm90ZToiTm8gbWF0Y2hpbmcgZGlzY3JpbWluYXRvciIsZGlzY3JpbWluYXRvcjp0LmRpc2NyaW1pbmF0b3Isb3B0aW9uczpBcnJheS5mcm9tKG8udmFsdWUua2V5cygpKS5maWx0ZXIodT0+by52YWx1ZS5nZXQodSkhPT1udWxsKSxpbnB1dDppLHBhdGg6W3QuZGlzY3JpbWluYXRvcl0saW5zdDplfSkscil9fSksTmQ9ZCgiJFpvZEludGVyc2VjdGlvbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWUscz10LmxlZnQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSxpPXQucmlnaHQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2V8fGkgaW5zdGFuY2VvZiBQcm9taXNlP1Byb21pc2UuYWxsKFtzLGldKS50aGVuKChbYyx1XSk9PiRjKG4sYyx1KSk6JGMobixzLGkpfX0pO2Z1bmN0aW9uIFhuKGUsdCl7aWYoZT09PXQpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoZSBpbnN0YW5jZW9mIERhdGUmJnQgaW5zdGFuY2VvZiBEYXRlJiYrZT09K3QpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoQ2UoZSkmJkNlKHQpKXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89T2JqZWN0LmtleXMoZSkuZmlsdGVyKHM9Pm4uaW5kZXhPZihzKSE9PS0xKSxyPXsuLi5lLC4uLnR9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJfX3Byb3RvX18iKSYmZGVsZXRlIHIuX19wcm90b19fO2Zvcihjb25zdCBzIG9mIG8pe2lmKHM9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBpPVhuKGVbc10sdFtzXSk7aWYoIWkudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltzLC4uLmkubWVyZ2VFcnJvclBhdGhdfTtyW3NdPWkuZGF0YX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpyfX1pZihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX07Y29uc3Qgbj1bXTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3Qgcj1lW29dLHM9dFtvXSxpPVhuKHIscyk7aWYoIWkudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltvLC4uLmkubWVyZ2VFcnJvclBhdGhdfTtuLnB1c2goaS5kYXRhKX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpufX1yZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119fWZ1bmN0aW9uICRjKGUsdCxuKXtjb25zdCBvPW5ldyBNYXA7bGV0IHI7Y29uc3Qgcz1uZXcgTWFwLGk9KHUsbCk9PntsZXQgcDtpZih1LmNvZGU9PT0idW5yZWNvZ25pemVkX2tleXMiJiYhdS5wYXRoPy5sZW5ndGgpcj8/KHI9dSkscD11LmtleXM7ZWxzZSBpZih1LmNvZGU9PT0iaW52YWxpZF9rZXkiJiZ1Lm9yaWdpbj09PSJyZWNvcmQiJiZ1LnBhdGg/Lmxlbmd0aD09PTEpe2NvbnN0IGc9U3RyaW5nKHUucGF0aFswXSk7cy5oYXMoZyl8fHMuc2V0KGcsdSkscD1bZ119ZWxzZSByZXR1cm4hMTtmb3IoY29uc3QgZyBvZiBwKW8uaGFzKGcpfHxvLnNldChnLHt9KSxvLmdldChnKVtsXT0hMDtyZXR1cm4hMH07Zm9yKGNvbnN0IHUgb2YgdC5pc3N1ZXMpaSh1LCJsIil8fGUuaXNzdWVzLnB1c2godSk7Zm9yKGNvbnN0IHUgb2Ygbi5pc3N1ZXMpaSh1LCJyIil8fGUuaXNzdWVzLnB1c2godSk7Y29uc3QgYT1bLi4ub10uZmlsdGVyKChbLHVdKT0+dS5sJiZ1LnIpLm1hcCgoW3VdKT0+dSk7aWYoYS5sZW5ndGgpe2NvbnN0IHU9cj9hLmZpbHRlcihsPT5yLmtleXMuaW5jbHVkZXMobCkpOltdO3UubGVuZ3RoJiZlLmlzc3Vlcy5wdXNoKHsuLi5yLGtleXM6dX0pO2Zvcihjb25zdCBsIG9mIGEpIXUuaW5jbHVkZXMobCkmJnMuaGFzKGwpJiZlLmlzc3Vlcy5wdXNoKHMuZ2V0KGwpKX1jb25zdCBjPVhuKHQudmFsdWUsbi52YWx1ZSk7aWYoIWMudmFsaWQpe2lmKHJlKGUpKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5tZXJnYWJsZSBpbnRlcnNlY3Rpb24uIEVycm9yIHBhdGg6ICR7SlNPTi5zdHJpbmdpZnkoYy5tZXJnZUVycm9yUGF0aCl9YCl9cmV0dXJuIGUudmFsdWU9Yy5kYXRhLGV9Y29uc3QgUnM9ZCgiJFpvZFR1cGxlIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49dC5pdGVtcyxvPW5lLm1lbW9pemVyO28/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7aWYoIUFycmF5LmlzQXJyYXkoaSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2lucHV0OmksaW5zdDplLGV4cGVjdGVkOiJ0dXBsZSIsY29kZToiaW52YWxpZF90eXBlIn0pLHI7ci52YWx1ZT1vP28uYWxsb2MoZSxyLFtdLHMpOltdO2NvbnN0IGE9W10sYz16YyhuLCJvcHRpbiIpLHU9emMobiwib3B0b3V0Iik7aWYoIXQucmVzdCl7aWYoaS5sZW5ndGg8YylyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOmMsaW5jbHVzaXZlOiEwLGlucHV0OmksaW5zdDplLG9yaWdpbjoiYXJyYXkifSkscjtpLmxlbmd0aD5uLmxlbmd0aCYmci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX2JpZyIsbWF4aW11bTpuLmxlbmd0aCxpbmNsdXNpdmU6ITAsaW5wdXQ6aSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KX1jb25zdCBsPW5ldyBBcnJheShuLmxlbmd0aCkscD10LnJlc3Q/cz8uYWJvcnRFYXJseTp2b2lkIDA7bGV0IGc9ITE7Zm9yKGxldCBiPTA7YjxuLmxlbmd0aDtiKyspe2NvbnN0IHk9bltiXS5fem9kLnJ1bih7dmFsdWU6aVtiXSxpc3N1ZXM6W119LHMpO3kgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaCh5LnRoZW4oaz0+e2xbYl09a30pKToobFtiXT15LHAmJiFnJiZ5Lmlzc3Vlcy5sZW5ndGgmJihnPXJlKHkpKSl9aWYodC5yZXN0JiYhZyl7bGV0IGI9bi5sZW5ndGgtMTtjb25zdCB5PWkuc2xpY2Uobi5sZW5ndGgpO2xldCBrPXIuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiB5KXtpZihwJiZyLmlzc3Vlcy5sZW5ndGghPT1rKXtpZihyZShyLGspKWJyZWFrO2s9ci5pc3N1ZXMubGVuZ3RofWIrKztjb25zdCBqPXQucmVzdC5fem9kLnJ1bih7dmFsdWU6JCxpc3N1ZXM6W119LHMpO2ogaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaChqLnRoZW4oUj0+VGMoUixyLGIpKSk6VGMoaixyLGIpfX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+UGMobCxyLG4saSx1KSk6UGMobCxyLG4saSx1KX19KTtmdW5jdGlvbiB6YyhlLHQpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKCEodD09PSJvcHRpbiI/ZVtuXS5fem9kLm9wdGluIT09dm9pZCAwOmVbbl0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKSlyZXR1cm4gbisxO3JldHVybiAwfWZ1bmN0aW9uIFRjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZGUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1mdW5jdGlvbiBQYyhlLHQsbixvLHIpe2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtjb25zdCBpPWVbc10sYT1zPG8ubGVuZ3RoO2lmKCFhJiZzPj1yJiZuW3NdLl96b2Qub3B0aW49PT0ib3B0aW9uYWwiKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfWlmKGkuaXNzdWVzLmxlbmd0aCl7aWYoIWEmJnM+PXIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9dC5pc3N1ZXMucHVzaCguLi5kZShzLGkuaXNzdWVzKSl9dC52YWx1ZVtzXT1pLnZhbHVlfWZvcihsZXQgcz10LnZhbHVlLmxlbmd0aC0xO3M+PW8ubGVuZ3RoJiYobltzXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCImJnQudmFsdWVbc109PT12b2lkIDApO3MtLSl0LnZhbHVlLmxlbmd0aD1zO3JldHVybiB0fWNvbnN0IGpkPWQoIiRab2RSZWNvcmQiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1uZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFDZShzKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InJlY29yZCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXSxhPXQua2V5VHlwZS5fem9kLnZhbHVlcztpZihhJiYhdC5wYXJ0aWFsKXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307Y29uc3QgYz1uZXcgU2V0O2Zvcihjb25zdCBsIG9mIGEpaWYodHlwZW9mIGw9PSJzdHJpbmcifHx0eXBlb2YgbD09Im51bWJlciJ8fHR5cGVvZiBsPT0ic3ltYm9sIil7aWYoYy5hZGQodHlwZW9mIGw9PSJudW1iZXIiP2wudG9TdHJpbmcoKTpsKSxsPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgcD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtpZihwIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZihwLmlzc3Vlcy5sZW5ndGgpe28uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOnAuaXNzdWVzLm1hcCh5PT5oZSh5LHIsSigpKSksaW5wdXQ6bCxwYXRoOltsXSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBnPXAudmFsdWU7aWYoZz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbbF0saXNzdWVzOltdfSxyKTtiIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goYi50aGVuKHk9Pnt5Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4uZGUobCx5Lmlzc3VlcykpLG8udmFsdWVbZ109eS52YWx1ZX0pKTooYi5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmRlKGwsYi5pc3N1ZXMpKSxvLnZhbHVlW2ddPWIudmFsdWUpfWxldCB1O2Zvcihjb25zdCBsIGluIHMpaWYoIWMuaGFzKGwpKWlmKHQubW9kZT09PSJsb29zZSIpe2lmKGw9PT0iX19wcm90b19fIiljb250aW51ZTtvLnZhbHVlW2xdPXNbbF19ZWxzZSB1PXU/P1tdLHUucHVzaChsKTt1JiZ1Lmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czp1LGNvbnRpbnVlOiEwfSl9ZWxzZXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307bGV0IGM7Zm9yKGNvbnN0IHUgb2YgUmVmbGVjdC5vd25LZXlzKHMpKXtpZih1PT09Il9fcHJvdG9fXyJ8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocyx1KSljb250aW51ZTtsZXQgbD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZih0eXBlb2YgdT09InN0cmluZyImJmJvLnRlc3QodSkmJmwuaXNzdWVzLmxlbmd0aCl7Y29uc3QgeT10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOk51bWJlcih1KSxpc3N1ZXM6W119LHIpO2lmKHkgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO3kuaXNzdWVzLmxlbmd0aD09PTAmJihsPXkpfWlmKGwuaXNzdWVzLmxlbmd0aCl7dC5tb2RlPT09Imxvb3NlIj9vLnZhbHVlW3VdPXNbdV06YT8oYz1jPz9bXSxjLnB1c2godSkpOm8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmwuaXNzdWVzLm1hcCh5PT5oZSh5LHIsSigpKSksaW5wdXQ6dSxwYXRoOlt1XSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBnPWwudmFsdWU7aWYoZz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IGI9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbdV0saXNzdWVzOltdfSxyKTtiIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goYi50aGVuKHk9Pnt5Lmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4uZGUodSx5Lmlzc3VlcykpLG8udmFsdWVbZ109eS52YWx1ZX0pKTooYi5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmRlKHUsYi5pc3N1ZXMpKSxvLnZhbHVlW2ddPWIudmFsdWUpfWMmJmMubGVuZ3RoPjAmJm8uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixpbnB1dDpzLGluc3Q6ZSxrZXlzOmMsY29udGludWU6ITB9KX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KSxNZD1kKCIkWm9kTWFwIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49bmUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBNYXApKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibWFwIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnMsaW5zdDplfSksbztjb25zdCBpPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgTWFwLHIpOm5ldyBNYXA7Y29uc3QgYT1yPy5hYm9ydEVhcmx5O2xldCBjPW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3RbdSxsXW9mIHMpe2lmKGEmJm8uaXNzdWVzLmxlbmd0aCE9PWMpe2lmKHJlKG8sYykpYnJlYWs7Yz1vLmlzc3Vlcy5sZW5ndGh9Y29uc3QgcD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKSxnPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7cCBpbnN0YW5jZW9mIFByb21pc2V8fGcgaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChQcm9taXNlLmFsbChbcCxnXSkudGhlbigoW2IseV0pPT57SWMoYix5LG8sdSxzLGUscil9KSk6SWMocCxnLG8sdSxzLGUscil9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gSWMoZSx0LG4sbyxyLHMsaSl7ZS5pc3N1ZXMubGVuZ3RoJiYoV24uaGFzKHR5cGVvZiBvKT9uLmlzc3Vlcy5wdXNoKC4uLmRlKG8sZS5pc3N1ZXMpKTpuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJtYXAiLGlucHV0OnIsaW5zdDpzLGlzc3VlczplLmlzc3Vlcy5tYXAoYT0+aGUoYSxpLEooKSkpfSkpLHQuaXNzdWVzLmxlbmd0aCYmKFduLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5kZShvLHQuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJtYXAiLGNvZGU6ImludmFsaWRfZWxlbWVudCIsaW5wdXQ6cixpbnN0OnMsa2V5Om8saXNzdWVzOnQuaXNzdWVzLm1hcChhPT5oZShhLGksSigpKSl9KSksbi52YWx1ZS5zZXQoZS52YWx1ZSx0LnZhbHVlKX1jb25zdCBEZD1kKCIkWm9kU2V0IiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49bmUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBTZXQpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtpbnB1dDpzLGluc3Q6ZSxleHBlY3RlZDoic2V0Iixjb2RlOiJpbnZhbGlkX3R5cGUifSksbztjb25zdCBpPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgU2V0LHIpOm5ldyBTZXQ7Y29uc3QgYT1yPy5hYm9ydEVhcmx5O2xldCBjPW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgdSBvZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1jKXtpZihyZShvLGMpKWJyZWFrO2M9by5pc3N1ZXMubGVuZ3RofWNvbnN0IGw9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtsIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2gobC50aGVuKHA9PnhjKHAsbykpKTp4YyhsLG8pfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIHhjKGUsdCl7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmUuaXNzdWVzKSx0LnZhbHVlLmFkZChlLnZhbHVlKX1jb25zdCBxZD1kKCIkWm9kRW51bSIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPU9yKHQuZW50cmllcyksbz1uZXcgU2V0KG4pO2UuX3pvZC52YWx1ZXM9byx4KGUsInBhdHRlcm4iLHI9Pntjb25zdCBzPU9yKHIuZGVmLmVudHJpZXMpLmZpbHRlcihpPT5Xbi5oYXModHlwZW9mIGkpKTtyZXR1cm4gbmV3IFJlZ0V4cChzLmxlbmd0aD9gXigke3MubWFwKGk9PiRlKGkudG9TdHJpbmcoKSkpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7cmV0dXJuIG8uaGFzKGkpfHxyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6bixpbnB1dDppLGluc3Q6ZX0pLHJ9fSksTGQ9ZCgiJFpvZExpdGVyYWwiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQudmFsdWVzKTtlLl96b2QudmFsdWVzPW4seChlLCJwYXR0ZXJuIixvPT57Y29uc3Qgcj1vLmRlZi52YWx1ZXM7cmV0dXJuIG5ldyBSZWdFeHAoci5sZW5ndGg/YF4oJHtyLm1hcChzPT50eXBlb2Ygcz09InN0cmluZyI/JGUocyk6cz8kZShzLnRvU3RyaW5nKCkpOlN0cmluZyhzKSkuam9pbigifCIpfSkkYDoiXlteXFxzXFxTXSQiKX0pLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtyZXR1cm4gbi5oYXMocyl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0LnZhbHVlcyxpbnB1dDpzLGluc3Q6ZX0pLG99fSksVWQ9ZCgiJFpvZEZpbGUiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiByIGluc3RhbmNlb2YgRmlsZXx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImZpbGUiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLEhkPWQoIiRab2RUcmFuc2Zvcm0iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLm9wdGluPSJvcHRpb25hbCIsbmUubWVtb2l6ZXI/Lmd1YXJkKGUpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgcG8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7aWYoby5hc3luYylyZXR1cm4ociBpbnN0YW5jZW9mIFByb21pc2U/cjpQcm9taXNlLnJlc29sdmUocikpLnRoZW4oaT0+KG4udmFsdWU9aSxuKSk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFJlO3JldHVybiBuLnZhbHVlPXIsbn19KTtmdW5jdGlvbiBFYyhlLHQpe3JldHVybiBlLnZhbHVlPXQuaXNzdWVzLmxlbmd0aD92b2lkIDA6dC52YWx1ZSxlfWNvbnN0IENzPWQoIiRab2RPcHRpb25hbCIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLGUuX3pvZC5vcHRvdXQ9Im9wdGlvbmFsIix4KGUsInZhbHVlcyIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzO3JldHVybiBvP25ldyBTZXQoWy4uLm8sdm9pZCAwXSk6dm9pZCAwfSkseChlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtFZShvLnNvdXJjZSl9KT8kYCk6dm9pZCAwfSksZS5fem9kLnBhcnNlPShuLG8pPT57aWYobi52YWx1ZT09PXZvaWQgMCl7aWYodC5pbm5lclR5cGUuX3pvZC5vcHRpbiE9PSJkZWZhdWx0ZWQiKXJldHVybiBuO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PkVjKG4scykpOkVjKG4scil9cmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9fSksRmQ9ZCgiJFpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57Q3MuaW5pdChlLHQpLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLHgoZSwicGF0dGVybiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybiksZS5fem9kLnBhcnNlPShuLG8pPT50LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksQmQ9ZCgiJFpvZE51bGxhYmxlIiwoZSx0KT0+e3ouaW5pdChlLHQpLHgoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluKSx4KGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSx4KGUsInBhdHRlcm4iLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47cmV0dXJuIG8/bmV3IFJlZ0V4cChgXigke0VlKG8uc291cmNlKX18bnVsbCkkYCk6dm9pZCAwfSkseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcz9uZXcgU2V0KFsuLi5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMsbnVsbF0pOnZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5uLnZhbHVlPT09bnVsbD9uOnQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxWZD1kKCIkWm9kRGVmYXVsdCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2lmKG4udmFsdWU9PT12b2lkIDApcmV0dXJuIG4udmFsdWU9dC5kZWZhdWx0VmFsdWUsbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5SYyhzLHQpKTpSYyhyLHQpfX0pO2Z1bmN0aW9uIFJjKGUsdCl7cmV0dXJuIGUudmFsdWU9PT12b2lkIDAmJihlLnZhbHVlPXQuZGVmYXVsdFZhbHVlKSxlfWNvbnN0IEpkPWQoIiRab2RQcmVmYXVsdCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT4oby5kaXJlY3Rpb249PT0iYmFja3dhcmQifHxuLnZhbHVlPT09dm9pZCAwJiYobi52YWx1ZT10LmRlZmF1bHRWYWx1ZSksdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKSl9KSxLZD1kKCIkWm9kTm9uT3B0aW9uYWwiLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vXS5maWx0ZXIocj0+ciE9PXZvaWQgMCkpOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PkNjKHMsZSkpOkNjKHIsZSl9fSk7ZnVuY3Rpb24gQ2MoZSx0KXtyZXR1cm4hZS5pc3N1ZXMubGVuZ3RoJiZlLnZhbHVlPT09dm9pZCAwJiZlLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6ZS52YWx1ZSxpbnN0OnR9KSxlfWNvbnN0IFdkPWQoIiRab2RTdWNjZXNzIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgcG8oIlpvZFN1Y2Nlc3MiKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLmlzc3Vlcy5sZW5ndGg9PT0wLG4pKToobi52YWx1ZT1yLmlzc3Vlcy5sZW5ndGg9PT0wLG4pfX0pO2Z1bmN0aW9uIFpjKGUsdCxuLG8pe3JldHVybiB0Lmlzc3Vlcy5sZW5ndGg/KGUudmFsdWU9bi5jYXRjaFZhbHVlKHsuLi50LHZhbHVlOmUudmFsdWUsZXJyb3I6e2lzc3Vlczp0Lmlzc3Vlcy5tYXAocj0+aGUocixvLEooKSkpfSxpbnB1dDplLnZhbHVlfSksZSk6KGUudmFsdWU9dC52YWx1ZSx0Lm1lbW8mJihlLm1lbW89ITApLGUpfWNvbnN0IEdkPWQoIiRab2RDYXRjaCIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLHgoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpLHgoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5aYyhuLHMsdCxvKSk6WmMobixyLHQsbyl9fSksWWQ9ZCgiJFpvZE5hTiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PigodHlwZW9mIG4udmFsdWUhPSJudW1iZXIifHwhTnVtYmVyLmlzTmFOKG4udmFsdWUpKSYmbi5pc3N1ZXMucHVzaCh7aW5wdXQ6bi52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6Im5hbiIsY29kZToiaW52YWxpZF90eXBlIn0pLG4pfSksWnM9ZCgiJFpvZFBpcGUiLChlLHQpPT57ei5pbml0KGUsdCkseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSx4KGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSx4KGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSx4KGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihpPT5EbihpLHQuaW4sbykpOkRuKHMsdC5pbixvKX1jb25zdCByPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PkRuKHMsdC5vdXQsbykpOkRuKHIsdC5vdXQsbyl9fSk7ZnVuY3Rpb24gRG4oZSx0LG4pe3JldHVybiBlLmlzc3Vlcy5zb21lKG89Pm8uY29kZSE9PSJ1bnJlY29nbml6ZWRfa2V5cyIpPyhlLmFib3J0ZWQ9ITAsZSk6dC5fem9kLnJ1bih7dmFsdWU6ZS52YWx1ZSxpc3N1ZXM6ZS5pc3N1ZXN9LG4pfWNvbnN0IE9zPWQoIiRab2RDb2RlYyIsKGUsdCk9Pnt6LmluaXQoZSx0KSx4KGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLHgoZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLHgoZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLHgoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZigoby5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHM9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+cW4oaSx0LG8pKTpxbihzLHQsbyl9ZWxzZXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihpPT5xbihpLHQsbykpOnFuKHMsdCxvKX19fSk7ZnVuY3Rpb24gcW4oZSx0LG4pe2lmKGUuaXNzdWVzLmxlbmd0aClyZXR1cm4gZS5hYm9ydGVkPSEwLGU7aWYoKG4uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCByPXQudHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5MbihlLHMsdC5vdXQsbikpOkxuKGUscix0Lm91dCxuKX1lbHNle2NvbnN0IHI9dC5yZXZlcnNlVHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5MbihlLHMsdC5pbixuKSk6TG4oZSxyLHQuaW4sbil9fWZ1bmN0aW9uIExuKGUsdCxuLG8pe3JldHVybiBlLmlzc3Vlcy5sZW5ndGg/KGUuYWJvcnRlZD0hMCxlKTpuLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczplLmlzc3Vlc30sbyl9Y29uc3QgUWQ9ZCgiJFpvZFByZXByb2Nlc3MiLChlLHQpPT57WnMuaW5pdChlLHQpfSksWGQ9ZCgiJFpvZFJlYWRvbmx5IiwoZSx0KT0+e3ouaW5pdChlLHQpLHgoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucHJvcFZhbHVlcykseChlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcykseChlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRpbikseChlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4oT2MpOk9jKHIpfX0pO2Z1bmN0aW9uIE9jKGUpe3JldHVybiBlLm1lbW98fChlLnZhbHVlPU9iamVjdC5mcmVlemUoZS52YWx1ZSkpLGV9ZnVuY3Rpb24gZ20oZSl7Y29uc3QgdD1lLl96b2QuZGVmO2xldCBuPXQucGF0dGVybixvPSEhdC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxyLHM7Zm9yKGNvbnN0IGEgb2YgdC5jaGVja3M/P1tdKXtjb25zdCBjPWEuX3pvZC5kZWY7Yy5wYXR0ZXJuJiYobj1jLnBhdHRlcm4pLG98fChvPSEhYy5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSk7Y29uc3QgdT1jLm1pbmltdW0/P2MubGVuZ3RoLGw9Yy5tYXhpbXVtPz9jLmxlbmd0aDt1IT09dm9pZCAwJiYocj09PXZvaWQgMHx8dT5yKSYmKHI9dSksbCE9PXZvaWQgMCYmKHM9PT12b2lkIDB8fGw8cykmJihzPWwpfWlmKG4pcmV0dXJuIG4uc291cmNlO2lmKHIhPT12b2lkIDAmJnMhPT12b2lkIDAmJnI+cylyZXR1cm4iKD8hKSI7aWYociE9PXZvaWQgMHx8cyE9PXZvaWQgMClyZXR1cm4gcmwoe21pbmltdW06cixtYXhpbXVtOnN9KS5zb3VyY2U7Y29uc3QgaT1lLl96b2QucGF0dGVybjtyZXR1cm4obyYmaT09PWJvP2lsOmkpPy5zb3VyY2V9ZnVuY3Rpb24gVXIoZSl7Y29uc3QgdD1lLl96b2QuZGVmLG49ZS5fem9kLnBhdHRlcm4/LnNvdXJjZSxvPXQuaW5uZXJUeXBlPz9lLl96b2QuaW5uZXJUeXBlO2lmKG8pe2NvbnN0IHI9by5fem9kLnBhdHRlcm4/LnNvdXJjZSxzPVVyKG8pO3JldHVybiBuJiZyJiZzJiZzIT09cj9uLnJlcGxhY2UoRWUociksKCk9PkVlKHMpKTpufWlmKHQub3B0aW9ucyl7Y29uc3Qgcj10Lm9wdGlvbnMubWFwKFVyKTtpZihyLmV2ZXJ5KEJvb2xlYW4pKXJldHVybmBeKCR7ci5tYXAocz0+RWUocykpLmpvaW4oInwiKX0pJGB9cmV0dXJuIGdtKGUpfWNvbnN0IGVwPWQoIiRab2RUZW1wbGF0ZUxpdGVyYWwiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiB0LnBhcnRzKWlmKHR5cGVvZiBvPT0ib2JqZWN0IiYmbyE9PW51bGwpe2NvbnN0IHI9VXIobyk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydCwgbm8gcGF0dGVybiBmb3VuZDogJHtbLi4uby5fem9kLnRyYWl0c10uc2hpZnQoKX1gKTtuLnB1c2goRWUocikpfWVsc2UgaWYobz09PW51bGx8fHV1Lmhhcyh0eXBlb2Ygbykpbi5wdXNoKCRlKGAke299YCkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydDogJHtvfWApO2UuX3pvZC5wYXR0ZXJuPW5ldyBSZWdFeHAoYF4ke24uam9pbigiIil9JGApLGUuX3pvZC5wYXJzZT0obyxyKT0+dHlwZW9mIG8udmFsdWUhPSJzdHJpbmciPyhvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbyk6KGUuX3pvZC5wYXR0ZXJuLmxhc3RJbmRleD0wLGUuX3pvZC5wYXR0ZXJuLnRlc3Qoby52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQ/PyJ0ZW1wbGF0ZV9saXRlcmFsIixwYXR0ZXJuOmUuX3pvZC5wYXR0ZXJuLnNvdXJjZX0pLG8pfSksdHA9ZCgiJFpvZEZ1bmN0aW9uIiwoZSx0KT0+KHouaW5pdChlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfZGVmIix7dmFsdWU6dH0pLGUuX3pvZC5kZWY9dCxlLmltcGxlbWVudD1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P01yKGUuX2RlZi5pbnB1dCxvKTpvLHM9UmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/TXIoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuaW1wbGVtZW50QXN5bmM9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50QXN5bmMoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGFzeW5jIGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P2F3YWl0IERyKGUuX2RlZi5pbnB1dCxvKTpvLHM9YXdhaXQgUmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/YXdhaXQgRHIoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuX3pvZC5wYXJzZT0obixvKT0+dHlwZW9mIG4udmFsdWUhPSJmdW5jdGlvbiI/KG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ImZ1bmN0aW9uIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pOihlLl9kZWYub3V0cHV0JiZlLl9kZWYub3V0cHV0Ll96b2QuZGVmLnR5cGU9PT0icHJvbWlzZSI/bi52YWx1ZT1lLmltcGxlbWVudEFzeW5jKG4udmFsdWUpOm4udmFsdWU9ZS5pbXBsZW1lbnQobi52YWx1ZSksbiksZS5pbnB1dD0oLi4ubik9Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIEFycmF5LmlzQXJyYXkoblswXSk/bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuZXcgUnMoe3R5cGU6InR1cGxlIixpdGVtczpuWzBdLHJlc3Q6blsxXX0pLG91dHB1dDplLl9kZWYub3V0cHV0fSk6bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuWzBdLG91dHB1dDplLl9kZWYub3V0cHV0fSl9LGUub3V0cHV0PW49Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIG5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6ZS5fZGVmLmlucHV0LG91dHB1dDpufSl9LGUpKSxucD1kKCIkWm9kUHJvbWlzZSIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PlByb21pc2UucmVzb2x2ZShuLnZhbHVlKS50aGVuKHI9PnQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbykpfSksQXM9ZCgiJFpvZExhenkiLChlLHQpPT57ei5pbml0KGUsdCksb3UoZS5fem9kLCJpbm5lclR5cGUiLCgpPT57Y29uc3Qgbj10O3JldHVybiBuLl9jYWNoZWRJbm5lcnx8KG4uX2NhY2hlZElubmVyPXQuZ2V0dGVyKCkpLG4uX2NhY2hlZElubmVyfSkseChlLCJwYXR0ZXJuIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucGF0dGVybikseChlLCJwcm9wVmFsdWVzIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucHJvcFZhbHVlcykseChlLCJvcHRpbiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluPz92b2lkIDApLHgoZSwib3B0b3V0IixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0Pz92b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+ZS5fem9kLmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksb3A9ZCgiJFpvZEN1c3RvbSIsKGUsdCk9PntVLmluaXQoZSx0KSx6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pm4sZS5fem9kLmNoZWNrPW49Pntjb25zdCBvPW4udmFsdWUscj10LmZuKG8pO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiByLnRoZW4ocz0+QWMocyxuLG8sZSkpO0FjKHIsbixvLGUpfX0pO2Z1bmN0aW9uIEFjKGUsdCxuLG8pe2lmKCFlKXtjb25zdCByPXtjb2RlOiJjdXN0b20iLGlucHV0Om4saW5zdDpvLHBhdGg6Wy4uLm8uX3pvZC5kZWYucGF0aD8/W11dLGNvbnRpbnVlOiFvLl96b2QuZGVmLmFib3J0fTtvLl96b2QuZGVmLnBhcmFtcyYmKHIucGFyYW1zPW8uX3pvZC5kZWYucGFyYW1zKSx0Lmlzc3Vlcy5wdXNoKFFlKHIpKX19Y2xhc3MgcnAgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJDYW5ub3QgcGFyc2UgYSByZWZlcmVuY2UgY3ljbGUgdGhhdCBjbG9zZXMgdGhyb3VnaCBhIHRyYW5zZm9ybSIpLHRoaXMubmFtZT0iWm9kQ3ljbGljRXJyb3IifX1jb25zdCBIcj0ifm1lbW8iLE5jPVtdO2Z1bmN0aW9uIHNwKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifWZ1bmN0aW9uIFJyKGUpe3JldHVybiBlLm1hcCh0PT50LnBhdGg/ey4uLnQscGF0aDp0LnBhdGguc2xpY2UoKX06ey4uLnR9KX1jb25zdCBpcD1uZXcgV2Vha01hcCxXZT0wLFZuPTEsenQ9MjtmdW5jdGlvbiBUdChlLHQsbil7Y29uc3Qgbz1pcC5nZXQoZSk7aWYobyE9PXZvaWQgMClyZXR1cm4gbz96dDpXZTtpZih0LmhhcyhlKSlyZXR1cm4genQ7dC5hZGQoZSk7bGV0IHI9V2U7Y29uc3Qgcz1sPT57aWYociE9PXp0JiZsPy5fem9kKXtjb25zdCBwPVR0KGwsdCxuKTtwPnImJihyPXApfX0saT0obCxwKT0+e2xldCBnPVdlO2Zvcihjb25zdCBiIG9mIFJlZmxlY3Qub3duS2V5cyhsKSl7Y29uc3QgeT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsYik7aWYoIXkuZW51bWVyYWJsZSljb250aW51ZTtjb25zdCBrPXkuZ2V0P1ZuOnkudmFsdWU/Ll96b2Q/VHQoeS52YWx1ZSx0LG4pOldlO2s+ZyYmKGc9ayl9cmV0dXJuIGd9LGE9bD0+e2w+ciYmKHI9bCl9LGM9ZS5fem9kLmRlZjtzd2l0Y2goYy50eXBlKXtjYXNlIm9iamVjdCI6e2NvbnN0IGw9cm8oYyk7YShsP2kobCk6Vm4pLHMoYy5jYXRjaGFsbCk7YnJlYWt9Y2FzZSJhcnJheSI6cyhjLmVsZW1lbnQpO2JyZWFrO2Nhc2UidHVwbGUiOmZvcihjb25zdCBsIG9mIGMuaXRlbXMpcyhsKTtzKGMucmVzdCk7YnJlYWs7Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjpzKGMua2V5VHlwZSkscyhjLnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJzZXQiOnMoYy52YWx1ZVR5cGUpO2JyZWFrO2Nhc2UidW5pb24iOmZvcihjb25zdCBsIG9mIGMub3B0aW9ucylzKGwpO2JyZWFrO2Nhc2UiaW50ZXJzZWN0aW9uIjpzKGMubGVmdCkscyhjLnJpZ2h0KTticmVhaztjYXNlIm9wdGlvbmFsIjpjYXNlIm51bGxhYmxlIjpjYXNlImRlZmF1bHQiOmNhc2UicHJlZmF1bHQiOmNhc2UiY2F0Y2giOmNhc2UicmVhZG9ubHkiOmNhc2Uibm9ub3B0aW9uYWwiOmNhc2UicHJvbWlzZSI6Y2FzZSJzdWNjZXNzIjpzKGMuaW5uZXJUeXBlKTticmVhaztjYXNlInBpcGUiOnMoYy5pbikscyhjLm91dCk7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6cyhjLmlucHV0KSxzKGMub3V0cHV0KTticmVhaztjYXNlImxhenkiOntjb25zdCBsPWMuX2NhY2hlZElubmVyPz8obj9lLl96b2QuaW5uZXJUeXBlOnZvaWQgMCk7YShsP1R0KGwsdCwhMSk6Vm4pO2JyZWFrfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpicmVhaztkZWZhdWx0OmZvcihjb25zdCBsIGluIGMpe2NvbnN0IHA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLGwpO2lmKCFwfHxwLmdldCljb250aW51ZTtjb25zdCBnPXAudmFsdWU7aWYoISghZ3x8dHlwZW9mIGchPSJvYmplY3QiKSl7aWYoZy5fem9kKXMoZyk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGcpKWZvcihjb25zdCBiIG9mIGcpcyhiKX19fXJldHVybiB0LmRlbGV0ZShlKSx2bShlLHIpfWZ1bmN0aW9uIHZtKGUsdCl7cmV0dXJuIHQhPT1WbiYmaXAuc2V0KGUsdD09PXp0KSx0fWZ1bmN0aW9uIGJtKGUpe3JldHVybiBUdChlLG5ldyBTZXQsITApIT09V2V9ZnVuY3Rpb24gX20oZSx0KXtsZXQgbj1lLmJ1Y2tldHMuZ2V0KHQpO3JldHVybiBufHwobj1uZXcgV2Vha01hcCxlLmJ1Y2tldHMuc2V0KHQsbikpLG59bGV0IFVuO2NvbnN0IEhuPVtdLHltPXthbGxvYyhlLHQsbil7Y29uc3Qgbz1VbjtpZighbylyZXR1cm4gbjtVbj12b2lkIDA7Y29uc3Qgcj17dmFsdWU6bixpc3N1ZXM6bnVsbH07cmV0dXJuIG8uc2V0KHQudmFsdWUsciksSG4ucHVzaChyKSxufSxndWFyZChlKXt2YXIgdDsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBuPWUuX3pvZC5wYXJzZSxvPShyLHMpPT57aWYocy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiJiZhcChzLHIudmFsdWUpKXRocm93IG5ldyBycDtyZXR1cm4gbihyLHMpfTtlLl96b2QucGFyc2U9byxlLl96b2QucnVuPT09biYmKGUuX3pvZC5ydW49byl9KX0sYXR0YWNoKGUpe3ZhciB0O2xldCBuLG89ITEscixzOyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IGk9ZS5fem9kLnBhcnNlLGE9KGMsdSk9PntpZihuPT09dm9pZCAwKXtjb25zdCBqPVR0KGUsbmV3IFNldCwhMSk7aWYoaj09PVdlKXJldHVybiBlLl96b2QucGFyc2U9aSxlLl96b2QucnVuPT09YSYmKGUuX3pvZC5ydW49aSksaShjLHUpO2o9PT16dHx8bz9uPSEwOm89ITB9Y29uc3QgbD1jLnZhbHVlO2lmKCFzcChsKSlyZXR1cm4gaShjLHUpO2xldCBwPXVbSHJdO3B8fChwPXtidWNrZXRzOm5ldyBXZWFrTWFwLGJhY2tFZGdlczp2b2lkIDB9LHVbSHJdPXApO2xldCBnO3I9PT11P2c9czooZz1fbShwLGUpLHI9dSxzPWcpO2NvbnN0IGI9Zy5nZXQobCk7aWYoYilyZXR1cm4gYy52YWx1ZT1iLnZhbHVlLGIuaXNzdWVzP2IuaXNzdWVzLmxlbmd0aCYmYy5pc3N1ZXMucHVzaCguLi5ScihiLmlzc3VlcykpOihjLm1lbW89ITAscC5iYWNrRWRnZXM/PyhwLmJhY2tFZGdlcz1uZXcgV2Vha1NldCkscC5iYWNrRWRnZXMuYWRkKGIudmFsdWUpKSxjO1VuPWc7Y29uc3QgeT1Ibi5sZW5ndGgsaz1pKGMsdSk7VW49dm9pZCAwO2NvbnN0ICQ9SG4ubGVuZ3RoPnk/SG4ucG9wKCk6dm9pZCAwO3JldHVybiBrIGluc3RhbmNlb2YgUHJvbWlzZT9rLnRoZW4oaj0+KCQmJigkLmlzc3Vlcz1qLmlzc3Vlcy5sZW5ndGg/UnIoai5pc3N1ZXMpOk5jKSxqKSk6KCQmJigkLmlzc3Vlcz1rLmlzc3Vlcy5sZW5ndGg/UnIoay5pc3N1ZXMpOk5jKSxrKX07ZS5fem9kLnBhcnNlPWEsZS5fem9kLnJ1bj09PWkmJihlLl96b2QucnVuPWEpfSl9fTtmdW5jdGlvbiB3bygpe3JldHVybiB5bX1mdW5jdGlvbiBhcChlLHQpe2NvbnN0IG49ZVtIcl0/LmJhY2tFZGdlcztyZXR1cm4gbiE9PXZvaWQgMCYmc3AodCkmJm4uaGFzKHQpfWNvbnN0IHdtPSgpPT57Y29uc3QgZT17c3RyaW5nOnt1bml0OiJjaGFyYWN0ZXJzIix2ZXJiOiJ0byBoYXZlIn0sZmlsZTp7dW5pdDoiYnl0ZXMiLHZlcmI6InRvIGhhdmUifSxhcnJheTp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxzZXQ6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sbWFwOnt1bml0OiJlbnRyaWVzIix2ZXJiOiJ0byBoYXZlIn19O2Z1bmN0aW9uIHQocyl7cmV0dXJuIGVbc10/P251bGx9Y29uc3Qgbj17cmVnZXg6ImlucHV0IixlbWFpbDoiZW1haWwgYWRkcmVzcyIsdXJsOiJVUkwiLGVtb2ppOiJlbW9qaSIsdXVpZDoiVVVJRCIsdXVpZHY0OiJVVUlEdjQiLHV1aWR2NjoiVVVJRHY2IixuYW5vaWQ6Im5hbm9pZCIsZ3VpZDoiR1VJRCIsY3VpZDoiY3VpZCIsY3VpZDI6ImN1aWQyIix1bGlkOiJVTElEIix4aWQ6IlhJRCIsa3N1aWQ6IktTVUlEIixkYXRldGltZToiSVNPIGRhdGV0aW1lIixkYXRlOiJJU08gZGF0ZSIsdGltZToiSVNPIHRpbWUiLGR1cmF0aW9uOiJJU08gZHVyYXRpb24iLGlwdjQ6IklQdjQgYWRkcmVzcyIsaXB2NjoiSVB2NiBhZGRyZXNzIixtYWM6Ik1BQyBhZGRyZXNzIixjaWRydjQ6IklQdjQgcmFuZ2UiLGNpZHJ2NjoiSVB2NiByYW5nZSIsYmFzZTY0OiJiYXNlNjQtZW5jb2RlZCBzdHJpbmciLGJhc2U2NHVybDoiYmFzZTY0dXJsLWVuY29kZWQgc3RyaW5nIixqc29uX3N0cmluZzoiSlNPTiBzdHJpbmciLGUxNjQ6IkUuMTY0IG51bWJlciIsY3VycmVuY3lfY29kZToiY3VycmVuY3kgY29kZSIsY3JlZGl0X2NhcmQ6ImNyZWRpdCBjYXJkIG51bWJlciIsaWJhbjoiSUJBTiIsand0OiJKV1QiLHRlbXBsYXRlX2xpdGVyYWw6ImlucHV0In0sbz17bmFuOiJOYU4ifTtmdW5jdGlvbiByKHMsaSl7cmV0dXJuIHM9PT0ibnVtYmVyIiYmdHlwZW9mIGk9PSJudW1iZXIiJiYhTnVtYmVyLmlzRmluaXRlKGkpP1N0cmluZyhpKTpvW3NdPz9zfXJldHVybiBzPT57c3dpdGNoKHMuY29kZSl7Y2FzZSJpbnZhbGlkX3R5cGUiOntjb25zdCBpPXIocy5leHBlY3RlZCksYT13dShzLmlucHV0KSxjPXIoYSxzLmlucHV0KTtyZXR1cm5gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHtpfSwgcmVjZWl2ZWQgJHtjfWB9Y2FzZSJpbnZhbGlkX3ZhbHVlIjpyZXR1cm4gcy52YWx1ZXMubGVuZ3RoPT09MT9gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHtYcihzLnZhbHVlc1swXSl9YDpgSW52YWxpZCBvcHRpb246IGV4cGVjdGVkIG9uZSBvZiAke0FyKHMudmFsdWVzLCJ8Iil9YDtjYXNlInRvb19iaWciOntjb25zdCBpPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPD0iOiI8IixhPXQocy5vcmlnaW4pO3JldHVybiBhP2BUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBoYXZlICR7aX0ke3MubWF4aW11bS50b1N0cmluZygpfSAke2EudW5pdD8/ImVsZW1lbnRzIn1gOmBUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBiZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX1gfWNhc2UidG9vX3NtYWxsIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ij49IjoiPiIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBoYXZlICR7aX0ke3MubWluaW11bS50b1N0cmluZygpfSAke2EudW5pdH1gOmBUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGJlICR7aX0ke3MubWluaW11bS50b1N0cmluZygpfWB9Y2FzZSJpbnZhbGlkX2Zvcm1hdCI6e2NvbnN0IGk9cztyZXR1cm4gaS5mb3JtYXQ9PT0ic3RhcnRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBzdGFydCB3aXRoICIke2kucHJlZml4fSJgOmkuZm9ybWF0PT09ImVuZHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGVuZCB3aXRoICIke2kuc3VmZml4fSJgOmkuZm9ybWF0PT09ImluY2x1ZGVzIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgaW5jbHVkZSAiJHtpLmluY2x1ZGVzfSJgOmkuZm9ybWF0PT09InJlZ2V4Ij9gSW52YWxpZCBzdHJpbmc6IG11c3QgbWF0Y2ggcGF0dGVybiAke2kucGF0dGVybn1gOmBJbnZhbGlkICR7bltpLmZvcm1hdF0/P3MuZm9ybWF0fWB9Y2FzZSJub3RfbXVsdGlwbGVfb2YiOnJldHVybmBJbnZhbGlkIG51bWJlcjogbXVzdCBiZSBhIG11bHRpcGxlIG9mICR7cy5kaXZpc29yfWA7Y2FzZSJ1bnJlY29nbml6ZWRfa2V5cyI6cmV0dXJuYFVucmVjb2duaXplZCBrZXkke3Mua2V5cy5sZW5ndGg+MT8icyI6IiJ9OiAke0FyKHMua2V5cywiLCAiKX1gO2Nhc2UiaW52YWxpZF9rZXkiOnJldHVybmBJbnZhbGlkIGtleSBpbiAke3Mub3JpZ2lufWA7Y2FzZSJpbnZhbGlkX3VuaW9uIjpyZXR1cm4gcy5vcHRpb25zJiZBcnJheS5pc0FycmF5KHMub3B0aW9ucykmJnMub3B0aW9ucy5sZW5ndGg+MD9gSW52YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlLiBFeHBlY3RlZCAke3Mub3B0aW9ucy5tYXAoYT0+YCcke2F9J2ApLmpvaW4oIiB8ICIpfWA6cy5pbmNsdXNpdmU9PT0hMT8iSW52YWxpZCBpbnB1dDogbW9yZSB0aGFuIG9uZSBvcHRpb24gbWF0Y2hlZCI6IkludmFsaWQgaW5wdXQiO2Nhc2UiaW52YWxpZF9lbGVtZW50IjpyZXR1cm5gSW52YWxpZCB2YWx1ZSBpbiAke3Mub3JpZ2lufWA7ZGVmYXVsdDpyZXR1cm4iSW52YWxpZCBpbnB1dCJ9fX07ZnVuY3Rpb24gY3AoKXtyZXR1cm57bG9jYWxlRXJyb3I6d20oKX19Y29uc3QgTnM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGVuOmNwfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBqYztjb25zdCBqcz1TeW1ib2woIlpvZE91dHB1dCIpLE1zPVN5bWJvbCgiWm9kSW5wdXQiKTtjbGFzcyB1cHtjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwfWFkZCh0LC4uLm4pe2NvbnN0IG89blswXTtyZXR1cm4gdGhpcy5fbWFwLnNldCh0LG8pLG8mJnR5cGVvZiBvPT0ib2JqZWN0IiYmImlkImluIG8mJnRoaXMuX2lkbWFwLnNldChvLmlkLHQpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXAsdGhpc31yZW1vdmUodCl7Y29uc3Qgbj10aGlzLl9tYXAuZ2V0KHQpO3JldHVybiBuJiZ0eXBlb2Ygbj09Im9iamVjdCImJiJpZCJpbiBuJiZ0aGlzLl9pZG1hcC5kZWxldGUobi5pZCksdGhpcy5fbWFwLmRlbGV0ZSh0KSx0aGlzfWdldCh0KXtjb25zdCBuPXQuX3pvZC5wYXJlbnQ7aWYobil7Y29uc3Qgbz17Li4udGhpcy5nZXQobik/P3t9fTtkZWxldGUgby5pZDtjb25zdCByPXsuLi5vLC4uLnRoaXMuX21hcC5nZXQodCl9O3JldHVybiBPYmplY3Qua2V5cyhyKS5sZW5ndGg/cjp2b2lkIDB9cmV0dXJuIHRoaXMuX21hcC5nZXQodCl9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfX1mdW5jdGlvbiBrbygpe3JldHVybiBuZXcgdXB9KGpjPWdsb2JhbFRoaXMpLl9fem9kX2dsb2JhbFJlZ2lzdHJ5Pz8oamMuX196b2RfZ2xvYmFsUmVnaXN0cnk9a28oKSk7Y29uc3QgcGU9Z2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxSZWdpc3RyeSxEcz0oKT0+e3Rocm93IG5ldyBFcnJvcigiem9kIGNvbXBpbGUoKSBpcyBub3QgYnVuZGxlZCBpbnRvIGNhcmRzIC0gc2VlIHBhY2thZ2VzL2ludGVybmFsL2NhcmQta2l0L3ZpdGUtc2xpbS5tanMiKX07Y2xhc3MgcXMgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgTHMgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgVXMgZXh0ZW5kcyBFcnJvcnt9Y29uc3QgSHM9RHMsRnM9RHMsa209RHM7ZnVuY3Rpb24gU28oZSl7cmV0dXJuIGUuY2hlY2tzJiYoZS5jaGVja3M9Wy4uLmUuY2hlY2tzXSksZX1mdW5jdGlvbiBscChlLHQpe3JldHVybiBuZXcgZShTbyh7dHlwZToic3RyaW5nIiwuLi5fKHQpfSkpfWZ1bmN0aW9uIGRwKGUsdCl7cmV0dXJuIG5ldyBlKFNvKHt0eXBlOiJzdHJpbmciLGNvZXJjZTohMCwuLi5fKHQpfSkpfWZ1bmN0aW9uIEJzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1haWwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gVnMoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJndWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIEpzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBLcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIFdzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY2IiwuLi5fKHQpfSl9ZnVuY3Rpb24gR3MoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjciLC4uLl8odCl9KX1mdW5jdGlvbiAkbyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBZcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtb2ppIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFFzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibmFub2lkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIFhzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBlaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQyIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidWxpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBuaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InhpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBvaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImtzdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIHJpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLl8odCl9KX1mdW5jdGlvbiBzaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gcHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJtYWMiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gaWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gYWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gY2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gdWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjR1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gbGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlMTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGZwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3JlZGl0X2NhcmQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi5fKHQpfSl9ZnVuY3Rpb24gaHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpYmFuIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWZ1bmN0aW9uIGRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiand0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4uXyh0KX0pfWNvbnN0IHBpPXtBbnk6bnVsbCxNaW51dGU6LTEsU2Vjb25kOjAsTWlsbGlzZWNvbmQ6MyxNaWNyb3NlY29uZDo2fTtmdW5jdGlvbiBmaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGV0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsb2Zmc2V0OiExLGxvY2FsOiExLHByZWNpc2lvbjpudWxsLC4uLl8odCl9KX1mdW5jdGlvbiBoaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gbWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIscHJlY2lzaW9uOm51bGwsLi4uXyh0KX0pfWZ1bmN0aW9uIGdpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZHVyYXRpb24iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi5fKHQpfSl9ZnVuY3Rpb24gbXAoZSx0KXtyZXR1cm4gbmV3IGUoU28oe3R5cGU6Im51bWJlciIsY2hlY2tzOltdLC4uLl8odCl9KSl9ZnVuY3Rpb24gZ3AoZSx0KXtyZXR1cm4gbmV3IGUoU28oe3R5cGU6Im51bWJlciIsY29lcmNlOiEwLGNoZWNrczpbXSwuLi5fKHQpfSkpfWZ1bmN0aW9uIHZwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InNhZmVpbnQiLC4uLl8odCl9KX1mdW5jdGlvbiBicChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDMyIiwuLi5fKHQpfSl9ZnVuY3Rpb24gX3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIHlwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDMyIiwuLi5fKHQpfSl9ZnVuY3Rpb24gd3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDMyIiwuLi5fKHQpfSl9ZnVuY3Rpb24ga3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLC4uLl8odCl9KX1mdW5jdGlvbiBTcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsY29lcmNlOiEwLC4uLl8odCl9KX1mdW5jdGlvbiAkcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IiwuLi5fKHQpfSl9ZnVuY3Rpb24genAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY29lcmNlOiEwLC4uLl8odCl9KX1mdW5jdGlvbiBUcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIFBwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQ2NCIsLi4uXyh0KX0pfWZ1bmN0aW9uIElwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzeW1ib2wiLC4uLl8odCl9KX1mdW5jdGlvbiB4cChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidW5kZWZpbmVkIiwuLi5fKHQpfSl9ZnVuY3Rpb24gRXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGwiLC4uLl8odCl9KX1mdW5jdGlvbiBScChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFueSJ9KX1mdW5jdGlvbiBDcChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVua25vd24ifSl9ZnVuY3Rpb24gWnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5ldmVyIiwuLi5fKHQpfSl9ZnVuY3Rpb24gT3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InZvaWQiLC4uLl8odCl9KX1mdW5jdGlvbiBBcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsLi4uXyh0KX0pfWZ1bmN0aW9uIE5wKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIixjb2VyY2U6ITAsLi4uXyh0KX0pfWZ1bmN0aW9uIGpwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuYW4iLC4uLl8odCl9KX1mdW5jdGlvbiBUZShlLHQpe3JldHVybiBuZXcgX3Moe2NoZWNrOiJsZXNzX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiBpZShlLHQpe3JldHVybiBuZXcgX3Moe2NoZWNrOiJsZXNzX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiBQZShlLHQpe3JldHVybiBuZXcgeXMoe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiBhZShlLHQpe3JldHVybiBuZXcgeXMoe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLl8odCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiB6byhlKXtyZXR1cm4gUGUoMCxlKX1mdW5jdGlvbiBUbyhlKXtyZXR1cm4gVGUoMCxlKX1mdW5jdGlvbiBQbyhlKXtyZXR1cm4gaWUoMCxlKX1mdW5jdGlvbiBJbyhlKXtyZXR1cm4gYWUoMCxlKX1mdW5jdGlvbiBEZShlLHQpe3JldHVybiBuZXcgZmwoe2NoZWNrOiJtdWx0aXBsZV9vZiIsLi4uXyh0KSx2YWx1ZTplfSl9ZnVuY3Rpb24gQmUoZSx0KXtyZXR1cm4gbmV3IGdsKHtjaGVjazoibWF4X3NpemUiLC4uLl8odCksbWF4aW11bTplfSl9ZnVuY3Rpb24gSWUoZSx0KXtyZXR1cm4gbmV3IHZsKHtjaGVjazoibWluX3NpemUiLC4uLl8odCksbWluaW11bTplfSl9ZnVuY3Rpb24gcnQoZSx0KXtyZXR1cm4gbmV3IGJsKHtjaGVjazoic2l6ZV9lcXVhbHMiLC4uLl8odCksc2l6ZTplfSl9ZnVuY3Rpb24gc3QoZSx0KXtyZXR1cm4gbmV3IF9sKHtjaGVjazoibWF4X2xlbmd0aCIsLi4uXyh0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBaZShlLHQpe3JldHVybiBuZXcgeWwoe2NoZWNrOiJtaW5fbGVuZ3RoIiwuLi5fKHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIGl0KGUsdCl7cmV0dXJuIG5ldyB3bCh7Y2hlY2s6Imxlbmd0aF9lcXVhbHMiLC4uLl8odCksbGVuZ3RoOmV9KX1mdW5jdGlvbiBGdChlLHQpe3JldHVybiBuZXcga2woe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InJlZ2V4IiwuLi5fKHQpLHBhdHRlcm46ZX0pfWZ1bmN0aW9uIEJ0KGUpe3JldHVybiBuZXcgU2woe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6Imxvd2VyY2FzZSIsLi4uXyhlKX0pfWZ1bmN0aW9uIFZ0KGUpe3JldHVybiBuZXcgJGwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InVwcGVyY2FzZSIsLi4uXyhlKX0pfWZ1bmN0aW9uIEp0KGUsdCl7cmV0dXJuIG5ldyB6bCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLC4uLl8odCksaW5jbHVkZXM6ZX0pfWZ1bmN0aW9uIEt0KGUsdCl7cmV0dXJuIG5ldyBUbCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLC4uLl8odCkscHJlZml4OmV9KX1mdW5jdGlvbiBXdChlLHQpe3JldHVybiBuZXcgUGwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImVuZHNfd2l0aCIsLi4uXyh0KSxzdWZmaXg6ZX0pfWZ1bmN0aW9uIHhvKGUsdCxuKXtyZXR1cm4gbmV3IElsKHtjaGVjazoicHJvcGVydHkiLHByb3BlcnR5OmUsc2NoZW1hOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIEd0KGUsdCl7cmV0dXJuIG5ldyB4bCh7Y2hlY2s6InByb3BlcnRpZXMiLHNoYXBlOmUsLi4uXyh0KX0pfWZ1bmN0aW9uIFl0KGUsdCl7cmV0dXJuIG5ldyBFbCh7Y2hlY2s6Im1pbWVfdHlwZSIsbWltZTplLC4uLl8odCl9KX1mdW5jdGlvbiB3ZShlKXtyZXR1cm4gbmV3IFJsKHtjaGVjazoib3ZlcndyaXRlIix0eDplfSl9ZnVuY3Rpb24gUXQoZSl7cmV0dXJuIHdlKHQ9PnQubm9ybWFsaXplKGUpKX1mdW5jdGlvbiBYdCgpe3JldHVybiB3ZShlPT5lLnRyaW0oKSl9ZnVuY3Rpb24gZW4oKXtyZXR1cm4gd2UoZT0+ZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiB0bigpe3JldHVybiB3ZShlPT5lLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIG5uKCl7cmV0dXJuIHdlKGU9PmF1KGUpKX1mdW5jdGlvbiBNcChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJhcnJheSIsZWxlbWVudDp0LC4uLl8obil9KX1mdW5jdGlvbiBTbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LC4uLl8obil9KX1mdW5jdGlvbiAkbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGluY2x1c2l2ZTohMSwuLi5fKG4pfSl9ZnVuY3Rpb24gem0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczpuLGRpc2NyaW1pbmF0b3I6dCwuLi5fKG8pfSl9ZnVuY3Rpb24gVG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OnQscmlnaHQ6bn0pfWZ1bmN0aW9uIFBtKGUsdCxuLG8pe2NvbnN0IHI9biBpbnN0YW5jZW9mIHoscz1yP286bixpPXI/bjpudWxsO3JldHVybiBuZXcgZSh7dHlwZToidHVwbGUiLGl0ZW1zOnQscmVzdDppLC4uLl8ocyl9KX1mdW5jdGlvbiBJbShlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLl8obyl9KX1mdW5jdGlvbiB4bShlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im1hcCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLl8obyl9KX1mdW5jdGlvbiBFbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTp0LC4uLl8obil9KX1mdW5jdGlvbiBSbShlLHQsbil7Y29uc3Qgbz1BcnJheS5pc0FycmF5KHQpP09iamVjdC5mcm9tRW50cmllcyh0Lm1hcChyPT5bcixyXSkpOnQ7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm8sLi4uXyhuKX0pfWZ1bmN0aW9uIENtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gWm0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkodCk/dDpbdF0sLi4uXyhuKX0pfWZ1bmN0aW9uIERwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJmaWxlIiwuLi5fKHQpfSl9ZnVuY3Rpb24gT20oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOnR9KX1mdW5jdGlvbiBBbShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gTm0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGxhYmxlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGptKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTp0LGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/bigpOnNvKG4pfX0pfWZ1bmN0aW9uIE1tKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gRG0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gcW0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY2F0Y2giLGlubmVyVHlwZTp0LGNhdGNoVmFsdWU6dHlwZW9mIG49PSJmdW5jdGlvbiI/bjplcyhuKX0pfWZ1bmN0aW9uIExtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InBpcGUiLGluOnQsb3V0Om59KX1mdW5jdGlvbiBVbShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gSG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6dCwuLi5fKG4pfSl9ZnVuY3Rpb24gRm0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxhenkiLGdldHRlcjp0fSl9ZnVuY3Rpb24gQm0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gcXAoZSx0LG4pe2NvbnN0IG89XyhuKTtyZXR1cm4gby5hYm9ydD8/KG8uYWJvcnQ9ITApLG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ub30pfWZ1bmN0aW9uIExwKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi5fKG4pfSl9ZnVuY3Rpb24gVXAoZSx0KXtjb25zdCBuPUhwKG89PihvLmFkZElzc3VlPXI9PntpZih0eXBlb2Ygcj09InN0cmluZyIpby5pc3N1ZXMucHVzaChRZShyLG8udmFsdWUsbi5fem9kLmRlZikpO2Vsc2V7Y29uc3Qgcz1yO3MuZmF0YWwmJihzLmNvbnRpbnVlPSExKSxzLmNvZGU/PyhzLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBzfHwocy5pbnB1dD1vLnZhbHVlKSxzLmluc3Q/PyhzLmluc3Q9bikscy5jb250aW51ZT8/KHMuY29udGludWU9IW4uX3pvZC5kZWYuYWJvcnQpLG8uaXNzdWVzLnB1c2goUWUocykpfX0sZShvLnZhbHVlLG8pKSx0KTtyZXR1cm4gbn1mdW5jdGlvbiBIcChlLHQpe2NvbnN0IG49bmV3IFUoe2NoZWNrOiJjdXN0b20iLC4uLl8odCl9KTtyZXR1cm4gbi5fem9kLmNoZWNrPWUsbn1mdW5jdGlvbiBGcChlKXtjb25zdCB0PW5ldyBVKHtjaGVjazoiZGVzY3JpYmUifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89cGUuZ2V0KG4pPz97fTtwZS5hZGQobix7Li4ubyxkZXNjcmlwdGlvbjplfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24gQnAoZSl7Y29uc3QgdD1uZXcgVSh7Y2hlY2s6Im1ldGEifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89cGUuZ2V0KG4pPz97fTtwZS5hZGQobix7Li4ubywuLi5lfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24gVnAoZSx0KXtjb25zdCBuPV8odCk7bGV0IG89bi50cnV0aHk/P1sidHJ1ZSIsIjEiLCJ5ZXMiLCJvbiIsInkiLCJlbmFibGVkIl0scj1uLmZhbHN5Pz9bImZhbHNlIiwiMCIsIm5vIiwib2ZmIiwibiIsImRpc2FibGVkIl07bi5jYXNlIT09InNlbnNpdGl2ZSImJihvPW8ubWFwKGI9PnR5cGVvZiBiPT0ic3RyaW5nIj9iLnRvTG93ZXJDYXNlKCk6Yikscj1yLm1hcChiPT50eXBlb2YgYj09InN0cmluZyI/Yi50b0xvd2VyQ2FzZSgpOmIpKTtjb25zdCBzPW5ldyBTZXQobyksaT1uZXcgU2V0KHIpLGE9ZS5Db2RlYz8/T3MsYz1lLkJvb2xlYW4/P0lzLHU9ZS5TdHJpbmc/P0h0LGw9bmV3IHUoe3R5cGU6InN0cmluZyIsZXJyb3I6bi5lcnJvcn0pLHA9bmV3IGMoe3R5cGU6ImJvb2xlYW4iLGVycm9yOm4uZXJyb3J9KSxnPW5ldyBhKHt0eXBlOiJwaXBlIixpbjpsLG91dDpwLHRyYW5zZm9ybTooKGIseSk9PntsZXQgaz1iO3JldHVybiBuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKGs9ay50b0xvd2VyQ2FzZSgpKSxzLmhhcyhrKT8hMDppLmhhcyhrKT8hMTooeS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsZXhwZWN0ZWQ6InN0cmluZ2Jvb2wiLHZhbHVlczpbLi4ucywuLi5pXSxpbnB1dDp5LnZhbHVlLGluc3Q6Zyxjb250aW51ZTohMX0pLHt9KX0pLHJldmVyc2VUcmFuc2Zvcm06KChiLHkpPT5iPT09ITA/b1swXXx8InRydWUiOnJbMF18fCJmYWxzZSIpLGVycm9yOm4uZXJyb3J9KTtyZXR1cm4gZy5fem9kLmJhZy50cnV0aHk9byxnLl96b2QuYmFnLmZhbHN5PXIsZy5fem9kLmJhZy5jYXNlPW4uY2FzZT8/Imluc2Vuc2l0aXZlIixnfWZ1bmN0aW9uIGF0KGUsdCxuLG89e30pe2NvbnN0IHI9XyhvKSxzPXtjaGVjazoic3RyaW5nX2Zvcm1hdCIsdHlwZToic3RyaW5nIixmb3JtYXQ6dCxmbjp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOmE9Pm4udGVzdChhKSwuLi5yfTtyZXR1cm4gbiBpbnN0YW5jZW9mIFJlZ0V4cCYmKHMucGF0dGVybj1uKSxuZXcgZShzKX1jb25zdCBWbT0oKT0+KHt9KSxKbT0oKT0+KHt9KSxLbT0oKT0+KHt9KSxXbT0oKT0+KHt9KSxHbT0oKT0+KHt9KSxKcD0oKT0+KCk9Pih7fSksRnI9KCk9PigpPT4oe30pLFltPSgpPT4oe30pLGZlPSgpPT4oe30pLFFtPSgpPT4oe30pLFhtPSgpPT4oe30pLGVnPSgpPT4oe30pLHRnPSgpPT4oe30pLG5nPSgpPT4oe30pLG9nPSgpPT4oe30pLHJnPSgpPT4oe30pLHNnPSgpPT4oe30pLGlnPSgpPT4oe30pLGFnPSgpPT4oe30pLGNnPSgpPT4oe30pLHVnPSgpPT4oe30pLGxnPSgpPT4oe30pLGRnPSgpPT4oe30pLHBnPSgpPT4oe30pLGZnPSgpPT4oe30pLGhnPSgpPT4oe30pLG1nPSgpPT4oe30pLGdnPSgpPT4oe30pLHZnPSgpPT4oe30pLGJnPSgpPT4oe30pLF9nPSgpPT4oe30pLHlnPSgpPT4oe30pLHdnPSgpPT4oe30pLGtnPSgpPT4oe30pLEtwPSgpPT4oe30pLFNnPSgpPT4oe30pLCRnPSgpPT4oe30pLHpnPSgpPT4oe30pLFRnPSgpPT4oe30pLFBnPSgpPT4oe30pLElnPSgpPT4oe30pLHhnPSgpPT4oe30pLEVnPSgpPT4oe30pLFJnPSgpPT4oe30pLENnPSgpPT4oe30pLFpnPSgpPT4oe30pLFdwPSgpPT4oe30pLE9nPSgpPT4oe30pLHZpPSgpPT4oe30pO2NsYXNzIEFne31jb25zdCBOZz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGx9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksR3A9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRab2RBbnk6U2QsJFpvZEFycmF5OklkLCRab2RBc3luY0Vycm9yOlJlLCRab2RCYXNlNjQ6YWQsJFpvZEJhc2U2NFVSTDp1ZCwkWm9kQmlnSW50OnhzLCRab2RCaWdJbnRGb3JtYXQ6X2QsJFpvZEJvb2xlYW46SXMsJFpvZENJRFJ2NDpvZCwkWm9kQ0lEUnY2OnNkLCRab2RDVUlEOkJsLCRab2RDVUlEMjpWbCwkWm9kQ2F0Y2g6R2QsJFpvZENoZWNrOlUsJFpvZENoZWNrQmlnSW50Rm9ybWF0Om1sLCRab2RDaGVja0VuZHNXaXRoOlBsLCRab2RDaGVja0dyZWF0ZXJUaGFuOnlzLCRab2RDaGVja0luY2x1ZGVzOnpsLCRab2RDaGVja0xlbmd0aEVxdWFsczp3bCwkWm9kQ2hlY2tMZXNzVGhhbjpfcywkWm9kQ2hlY2tMb3dlckNhc2U6U2wsJFpvZENoZWNrTWF4TGVuZ3RoOl9sLCRab2RDaGVja01heFNpemU6Z2wsJFpvZENoZWNrTWltZVR5cGU6RWwsJFpvZENoZWNrTWluTGVuZ3RoOnlsLCRab2RDaGVja01pblNpemU6dmwsJFpvZENoZWNrTXVsdGlwbGVPZjpmbCwkWm9kQ2hlY2tOdW1iZXJGb3JtYXQ6aGwsJFpvZENoZWNrT3ZlcndyaXRlOlJsLCRab2RDaGVja1Byb3BlcnRpZXM6eGwsJFpvZENoZWNrUHJvcGVydHk6SWwsJFpvZENoZWNrUmVnZXg6a2wsJFpvZENoZWNrU2l6ZUVxdWFsczpibCwkWm9kQ2hlY2tTdGFydHNXaXRoOlRsLCRab2RDaGVja1N0cmluZ0Zvcm1hdDpVdCwkWm9kQ2hlY2tVcHBlckNhc2U6JGwsJFpvZENvZGVjOk9zLCRab2RDcmVkaXRDYXJkOnBkLCRab2RDdXN0b206b3AsJFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDp2ZCwkWm9kQ3ljbGljRXJyb3I6cnAsJFpvZERhdGU6UGQsJFpvZERlZmF1bHQ6VmQsJFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpBZCwkWm9kRTE2NDpsZCwkWm9kRW1haWw6amwsJFpvZEVtb2ppOkhsLCRab2RFbmNvZGVFcnJvcjpwbywkWm9kRW51bTpxZCwkWm9kRXJyb3I6SXUsJFpvZEV4YWN0T3B0aW9uYWw6RmQsJFpvZEZpbGU6VWQsJFpvZEZ1bmN0aW9uOnRwLCRab2RHVUlEOkFsLCRab2RJQkFOOmhkLCRab2RJUHY0OmVkLCRab2RJUHY2OnRkLCRab2RJU09EYXRlOllsLCRab2RJU09EYXRlVGltZTpHbCwkWm9kSVNPRHVyYXRpb246WGwsJFpvZElTT1RpbWU6UWwsJFpvZEludGVyc2VjdGlvbjpOZCwkWm9kSldUOmdkLCRab2RLU1VJRDpXbCwkWm9kTGF6eTpBcywkWm9kTGl0ZXJhbDpMZCwkWm9kTUFDOm5kLCRab2RNYXA6TWQsJFpvZE5hTjpZZCwkWm9kTmFub0lEOkZsLCRab2ROZXZlcjp6ZCwkWm9kTm9uT3B0aW9uYWw6S2QsJFpvZE51bGw6a2QsJFpvZE51bGxhYmxlOkJkLCRab2ROdW1iZXI6UHMsJFpvZE51bWJlckZvcm1hdDpiZCwkWm9kT2JqZWN0OlJkLCRab2RPYmplY3RKSVQ6Q2QsJFpvZE9wdGlvbmFsOkNzLCRab2RQaXBlOlpzLCRab2RQcmVmYXVsdDpKZCwkWm9kUHJlcHJvY2VzczpRZCwkWm9kUHJvbWlzZTpucCwkWm9kUmVhZG9ubHk6WGQsJFpvZFJlYWxFcnJvcjpjZSwkWm9kUmVjb3JkOmpkLCRab2RSZWdpc3RyeTp1cCwkWm9kU2V0OkRkLCRab2RTdHJpbmc6SHQsJFpvZFN0cmluZ0Zvcm1hdDpELCRab2RTdWNjZXNzOldkLCRab2RTeW1ib2w6eWQsJFpvZFRlbXBsYXRlTGl0ZXJhbDplcCwkWm9kVHJhbnNmb3JtOkhkLCRab2RUdXBsZTpScywkWm9kVHlwZTp6LCRab2RVTElEOkpsLCRab2RVUkw6VWwsJFpvZFVVSUQ6TmwsJFpvZFVuZGVmaW5lZDp3ZCwkWm9kVW5pb246eW8sJFpvZFVua25vd246JGQsJFpvZFZvaWQ6VGQsJFpvZFhJRDpLbCwkWm9kWG9yOlpkLCRicmFuZDpvcywkY29uc3RydWN0b3I6ZCwkaW5wdXQ6TXMsJG91dHB1dDpqcyxEb2M6Q2wsSU5WQUxJRDpxcyxKU09OU2NoZW1hOk5nLEpTT05TY2hlbWFHZW5lcmF0b3I6QWcsTkVWRVI6bnMsVGltZVByZWNpc2lvbjpwaSxVUkxfQkFEX0ZPUk1BVDprcyxVUkxfVU5QQVJTRUFCTEU6eHQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6THMsWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6VXMsX2FueTpScCxfYXJyYXk6TXAsX2Jhc2U2NDpjaSxfYmFzZTY0dXJsOnVpLF9iaWdpbnQ6JHAsX2Jvb2xlYW46a3AsX2NhdGNoOnFtLF9jaGVjazpIcCxfY2lkcnY0OmlpLF9jaWRydjY6YWksX2NvZXJjZWRCaWdpbnQ6enAsX2NvZXJjZWRCb29sZWFuOlNwLF9jb2VyY2VkRGF0ZTpOcCxfY29lcmNlZE51bWJlcjpncCxfY29lcmNlZFN0cmluZzpkcCxfY3JlZGl0Q2FyZDpmcCxfY3VpZDpYcyxfY3VpZDI6ZWksX2N1c3RvbTpxcCxfZGF0ZTpBcCxfZGVjb2RlOmFzLF9kZWNvZGVBc3luYzp1cyxfZGVmYXVsdDpqbSxfZGlzY3JpbWluYXRlZFVuaW9uOnptLF9lMTY0OmxpLF9lbWFpbDpCcyxfZW1vamk6WXMsX2VuY29kZTppcyxfZW5jb2RlQXN5bmM6Y3MsX2VuZHNXaXRoOld0LF9lbnVtOlJtLF9maWxlOkRwLF9mbG9hdDMyOmJwLF9mbG9hdDY0Ol9wLF9ndDpQZSxfZ3RlOmFlLF9ndWlkOlZzLF9pYmFuOmhwLF9pbmNsdWRlczpKdCxfaW50OnZwLF9pbnQzMjp5cCxfaW50NjQ6VHAsX2ludGVyc2VjdGlvbjpUbSxfaXB2NDpyaSxfaXB2NjpzaSxfaXNvRGF0ZTpoaSxfaXNvRGF0ZVRpbWU6ZmksX2lzb0R1cmF0aW9uOmdpLF9pc29UaW1lOm1pLF9qd3Q6ZGksX2tzdWlkOm9pLF9sYXp5OkZtLF9sZW5ndGg6aXQsX2xpdGVyYWw6Wm0sX2xvd2VyY2FzZTpCdCxfbHQ6VGUsX2x0ZTppZSxfbWFjOnBwLF9tYXA6eG0sX21heDppZSxfbWF4TGVuZ3RoOnN0LF9tYXhTaXplOkJlLF9taW1lOll0LF9taW46YWUsX21pbkxlbmd0aDpaZSxfbWluU2l6ZTpJZSxfbXVsdGlwbGVPZjpEZSxfbmFuOmpwLF9uYW5vaWQ6UXMsX25hdGl2ZUVudW06Q20sX25lZ2F0aXZlOlRvLF9uZXZlcjpacCxfbm9ubmVnYXRpdmU6SW8sX25vbm9wdGlvbmFsOk1tLF9ub25wb3NpdGl2ZTpQbyxfbm9ybWFsaXplOlF0LF9udWxsOkVwLF9udWxsYWJsZTpObSxfbnVtYmVyOm1wLF9vcHRpb25hbDpBbSxfb3ZlcndyaXRlOndlLF9wYXJzZTpOdCxfcGFyc2VBc3luYzpqdCxfcGlwZTpMbSxfcG9zaXRpdmU6em8sX3Byb21pc2U6Qm0sX3Byb3BlcnRpZXM6R3QsX3Byb3BlcnR5OnhvLF9yZWFkb25seTpVbSxfcmVjb3JkOkltLF9yZWZpbmU6THAsX3JlZ2V4OkZ0LF9zYWZlRGVjb2RlOmRzLF9zYWZlRGVjb2RlQXN5bmM6ZnMsX3NhZmVFbmNvZGU6bHMsX3NhZmVFbmNvZGVBc3luYzpwcyxfc2FmZVBhcnNlOk10LF9zYWZlUGFyc2VBc3luYzpEdCxfc2V0OkVtLF9zaXplOnJ0LF9zbHVnaWZ5Om5uLF9zdGFydHNXaXRoOkt0LF9zdHJpbmc6bHAsX3N0cmluZ0Zvcm1hdDphdCxfc3RyaW5nYm9vbDpWcCxfc3VjY2VzczpEbSxfc3VwZXJSZWZpbmU6VXAsX3N5bWJvbDpJcCxfdGVtcGxhdGVMaXRlcmFsOkhtLF90b0xvd2VyQ2FzZTplbixfdG9VcHBlckNhc2U6dG4sX3RyYW5zZm9ybTpPbSxfdHJpbTpYdCxfdHVwbGU6UG0sX3VpbnQzMjp3cCxfdWludDY0OlBwLF91bGlkOnRpLF91bmRlZmluZWQ6eHAsX3VuaW9uOlNtLF91bmtub3duOkNwLF91cHBlcmNhc2U6VnQsX3VybDokbyxfdXVpZDpKcyxfdXVpZHY0OktzLF91dWlkdjY6V3MsX3V1aWR2NzpHcyxfdm9pZDpPcCxfeGlkOm5pLF94b3I6JG0sYmFzZTY0Q2hhcnNldDppZCxiYXNlNjR1cmxDaGFyc2V0OlRzLGNhblBhcnNlVVJMOlNzLGNsb25lOkgsY29tcGlsZTpIcyxjb21waWxlRm46a20sY29uZmlnOkosY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kOkZyLGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZDpKcCxkZWNvZGU6eGgsZGVjb2RlQXN5bmM6UmgsZGVzY3JpYmU6RnAsZW5jb2RlOkloLGVuY29kZUFzeW5jOkVoLGV4dHJhY3REZWZzOldtLGZpbmFsaXplOkdtLGZsYXR0ZW5FcnJvcjpmbyxmb3JtYXRFcnJvcjpobyxnZXREaXNjcmltaW5hdGVkT3B0aW9uOkVzLGdsb2JhbENvbmZpZzpuZSxnbG9iYWxSZWdpc3RyeTpwZSxoYW5kbGVVbnJlcHJlc2VudGFibGU6Sm0saW5pdGlhbGl6ZUNvbnRleHQ6Vm0saXNCYWNrRWRnZTphcCxpc1JlY3Vyc2l2ZVNjaGVtYTpibSxpc1ZhbGlkQmFzZTY0OnpzLGlzVmFsaWRCYXNlNjRVUkw6Y2QsaXNWYWxpZENJRFJ2NjpyZCxpc1ZhbGlkQ3JlZGl0Q2FyZDpkZCxpc1ZhbGlkSUJBTjpmZCxpc1ZhbGlkSVB2Njokcyxpc1ZhbGlkSldUOm1kLGxvY2FsZXM6TnMsbWVtb2l6ZXI6d28sbWVyZ2VWYWx1ZXM6WG4sbWV0YTpCcCxwYXJzZTpNcixwYXJzZUFzeW5jOkRyLHBhcnNlVVJMT2JqZWN0OkRsLHByZXR0aWZ5RXJyb3I6c3MscHJvY2VzczpZbSxwcm9jZXNzU2NoZW1hOkttLHJlZ2V4ZXM6X28scmVnaXN0cnk6a28sc2FmZURlY29kZTpaaCxzYWZlRGVjb2RlQXN5bmM6QWgsc2FmZUVuY29kZTpDaCxzYWZlRW5jb2RlQXN5bmM6T2gsc2FmZVBhcnNlOkV1LHNhZmVQYXJzZUFzeW5jOiRoLHN0YW5kYXJkUHJvcHM6d3Msc3RyaXBUYWJBbmROZXdsaW5lOkxyLHRvRG90UGF0aDp4dSx0b0pTT05TY2hlbWE6dmksdG9ab2Q6b28sdHJlZWlmeUVycm9yOnJzLHVybEhvc3RuYW1lT2s6cWwsdXJsUHJvdG9jb2xPazpMbCx1dGlsOnRzLHZhbGlkYXRlOmdvLHZhbGlkYXRlQXN5bmM6dm8sdmFsaWRhdGVVUkw6TWwsdmVyc2lvbjpabCx3aXRoUGFyc2VyOkZzfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLE1jPVN5bWJvbCgiei52aXNpdC9yZXNvbHZpbmciKTtmdW5jdGlvbiBiaShlLHQpe2NvbnN0IG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDooaSxhKT0+e2NvbnN0IGM9dFtpLl96b2QuZGVmLnR5cGVdO3JldHVybiBjP2MoaSxhKTppfSxvPW5ldyBNYXA7ZnVuY3Rpb24gcihpKXtjb25zdCBhPW8uZ2V0KGkpO2lmKGE9PT1NYylyZXR1cm4gbmV3IEFzKHt0eXBlOiJsYXp5IixnZXR0ZXI6KCk9Pm8uZ2V0KGkpfSk7aWYoYSE9PXZvaWQgMClyZXR1cm4gYTtvLnNldChpLE1jKTtjb25zdCBjPXMoaSksdT1uKGMsYyE9PWkpO3JldHVybiBvLnNldChpLHUpLHV9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPWkuX3pvZC5kZWY7c3dpdGNoKGEudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCB1PWEuc2hhcGUsbD1PYmplY3Qua2V5cyh1KTtsZXQgcD0hMTtjb25zdCBnPXt9O2Zvcihjb25zdCB5IG9mIGwpe2NvbnN0IGs9cih1W3ldKTtrIT09dVt5XSYmKHA9ITApLGdbeV09a31sZXQgYj1hLmNhdGNoYWxsO3JldHVybiBhLmNhdGNoYWxsJiYoYj1yKGEuY2F0Y2hhbGwpLGIhPT1hLmNhdGNoYWxsJiYocD0hMCkpLHA/SChpLHsuLi5hLHNoYXBlOmcsY2F0Y2hhbGw6Yn0pOml9Y2FzZSJhcnJheSI6e2NvbnN0IHU9cihhLmVsZW1lbnQpO3JldHVybiB1PT09YS5lbGVtZW50P2k6SChpLHsuLi5hLGVsZW1lbnQ6dX0pfWNhc2UidHVwbGUiOntjb25zdCB1PWEuaXRlbXM7bGV0IGw9ITE7Y29uc3QgcD1bXTtmb3IoY29uc3QgYiBvZiB1KXtjb25zdCB5PXIoYik7eSE9PWImJihsPSEwKSxwLnB1c2goeSl9bGV0IGc9YS5yZXN0O3JldHVybiBhLnJlc3QmJihnPXIoYS5yZXN0KSxnIT09YS5yZXN0JiYobD0hMCkpLGw/SChpLHsuLi5hLGl0ZW1zOnAscmVzdDpnfSk6aX1jYXNlInJlY29yZCI6Y2FzZSJtYXAiOntjb25zdCB1PXIoYS5rZXlUeXBlKSxsPXIoYS52YWx1ZVR5cGUpO3JldHVybiB1PT09YS5rZXlUeXBlJiZsPT09YS52YWx1ZVR5cGU/aTpIKGksey4uLmEsa2V5VHlwZTp1LHZhbHVlVHlwZTpsfSl9Y2FzZSJzZXQiOntjb25zdCB1PXIoYS52YWx1ZVR5cGUpO3JldHVybiB1PT09YS52YWx1ZVR5cGU/aTpIKGksey4uLmEsdmFsdWVUeXBlOnV9KX1jYXNlInVuaW9uIjp7Y29uc3QgdT1hLm9wdGlvbnM7bGV0IGw9ITE7Y29uc3QgcD1bXTtmb3IoY29uc3QgZyBvZiB1KXtjb25zdCBiPXIoZyk7YiE9PWcmJihsPSEwKSxwLnB1c2goYil9cmV0dXJuIGw/SChpLHsuLi5hLG9wdGlvbnM6cH0pOml9Y2FzZSJpbnRlcnNlY3Rpb24iOntjb25zdCB1PXIoYS5sZWZ0KSxsPXIoYS5yaWdodCk7cmV0dXJuIHU9PT1hLmxlZnQmJmw9PT1hLnJpZ2h0P2k6SChpLHsuLi5hLGxlZnQ6dSxyaWdodDpsfSl9Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6e2NvbnN0IHU9cihhLmlubmVyVHlwZSk7cmV0dXJuIHU9PT1hLmlubmVyVHlwZT9pOkgoaSx7Li4uYSxpbm5lclR5cGU6dX0pfWNhc2UicGlwZSI6e2NvbnN0IHU9cihhLmluKSxsPXIoYS5vdXQpO3JldHVybiB1PT09YS5pbiYmbD09PWEub3V0P2k6SChpLHsuLi5hLGluOnUsb3V0Omx9KX1jYXNlImZ1bmN0aW9uIjp7Y29uc3QgdT1yKGEuaW5wdXQpLGw9cihhLm91dHB1dCk7cmV0dXJuIHU9PT1hLmlucHV0JiZsPT09YS5vdXRwdXQ/aTpIKGksey4uLmEsaW5wdXQ6dSxvdXRwdXQ6bH0pfWNhc2UibGF6eSI6e2NvbnN0IHU9YS5nZXR0ZXIse19jYWNoZWRJbm5lcjpsLC4uLnB9PWE7cmV0dXJuIEgoaSx7Li4ucCxnZXR0ZXI6KCk9PnIodSgpKX0pfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpyZXR1cm4gaTtkZWZhdWx0OnJldHVybiBpfX1yZXR1cm4gcihlKX1mdW5jdGlvbiBfaShlKXtyZXR1cm4hIWUuX3pvZH1mdW5jdGlvbiBZcChlLHQpe3JldHVybiBfaShlKT9FdShlLHQpOmUuc2FmZVBhcnNlKHQpfWZ1bmN0aW9uIGpnKGUpe2lmKCFlKXJldHVybjtsZXQgdDtpZihfaShlKT90PWUuX3pvZD8uZGVmPy5zaGFwZTp0PWUuc2hhcGUsISF0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil0cnl7cmV0dXJuIHQoKX1jYXRjaHtyZXR1cm59cmV0dXJuIHR9fWZ1bmN0aW9uIE1nKGUpe2lmKF9pKGUpKXtjb25zdCBzPWUuX3pvZD8uZGVmO2lmKHMpe2lmKHMudmFsdWUhPT12b2lkIDApcmV0dXJuIHMudmFsdWU7aWYoQXJyYXkuaXNBcnJheShzLnZhbHVlcykmJnMudmFsdWVzLmxlbmd0aD4wKXJldHVybiBzLnZhbHVlc1swXX19Y29uc3Qgbj1lLl9kZWY7aWYobil7aWYobi52YWx1ZSE9PXZvaWQgMClyZXR1cm4gbi52YWx1ZTtpZihBcnJheS5pc0FycmF5KG4udmFsdWVzKSYmbi52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIG4udmFsdWVzWzBdfWNvbnN0IG89ZS52YWx1ZTtpZihvIT09dm9pZCAwKXJldHVybiBvfWNvbnN0IERnPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbmRzV2l0aDpXdCxndDpQZSxndGU6YWUsaW5jbHVkZXM6SnQsbGVuZ3RoOml0LGxvd2VyY2FzZTpCdCxsdDpUZSxsdGU6aWUsbWF4TGVuZ3RoOnN0LG1heFNpemU6QmUsbWltZTpZdCxtaW5MZW5ndGg6WmUsbWluU2l6ZTpJZSxtdWx0aXBsZU9mOkRlLG5lZ2F0aXZlOlRvLG5vbm5lZ2F0aXZlOklvLG5vbnBvc2l0aXZlOlBvLG5vcm1hbGl6ZTpRdCxvdmVyd3JpdGU6d2UscG9zaXRpdmU6em8scHJvcGVydGllczpHdCxwcm9wZXJ0eTp4byxyZWdleDpGdCxzaXplOnJ0LHNsdWdpZnk6bm4sc3RhcnRzV2l0aDpLdCx0b0xvd2VyQ2FzZTplbix0b1VwcGVyQ2FzZTp0bix0cmltOlh0LHVwcGVyY2FzZTpWdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxEYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKTtmdW5jdGlvbiBGbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz1uKHRoaXMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pfWNvbnN0IFFwPShlLHQpPT57SXUuaW5pdChlLHQpLGUubmFtZT0iWm9kRXJyb3IiO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO0RjLmhhcyhuKXx8KERjLmFkZChuKSxGbihuLCJmb3JtYXQiLG89PnI9PmhvKG8scikpLEZuKG4sImZsYXR0ZW4iLG89PnI9PmZvKG8scikpLEZuKG4sImFkZElzc3VlIixvPT5yPT57by5pc3N1ZXMucHVzaChyKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsS24sMil9KSxGbihuLCJhZGRJc3N1ZXMiLG89PnI9PntvLmlzc3Vlcy5wdXNoKC4uLnIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3VlcyxLbiwyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJpc0VtcHR5Iix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuaXNzdWVzLmxlbmd0aD09PTB9fSkpfSxYcD1kKCJab2RFcnJvciIsUXApLHNlPWQoIlpvZEVycm9yIixRcCx2b2lkIDAse1BhcmVudDpFcnJvcn0pLHlpPU50KHNlKSx3aT1qdChzZSksa2k9TXQoc2UpLFNpPUR0KHNlKSwkaT1pcyhzZSksemk9YXMoc2UpLFRpPWNzKHNlKSxQaT11cyhzZSksSWk9bHMoc2UpLHhpPWRzKHNlKSxFaT1wcyhzZSksUmk9ZnMoc2UpO2Z1bmN0aW9uIHFnKCl7bmUubG9jYWxlRXJyb3J8fEooY3AoKSl9ZnVuY3Rpb24gVmUoKXtuZS5tZW1vaXplcnx8Sih7bWVtb2l6ZXI6d28oKX0pfWNvbnN0IFA9ZCgiWm9kVHlwZSIsKGUsdCk9PihxZygpLHouaW5pdChlLHQpLGUuZGVmPXQsZS50eXBlPXQudHlwZSxlKSx7Y2hlY2soLi4uZSl7Y29uc3QgdD10aGlzLmRlZjtyZXR1cm4gdGhpcy5jbG9uZShYKHQse2NoZWNrczpbLi4udC5jaGVja3M/P1tdLC4uLmUubWFwKG49PnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tfem9kOntjaGVjazpuLGRlZjp7Y2hlY2s6ImN1c3RvbSJ9LG9uYXR0YWNoOltdfX06bildfSkse3BhcmVudDohMH0pfSx3aXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKC4uLmUpfSxjbG9uZShlLHQpe3JldHVybiBIKHRoaXMsZSx0KX0sYnJhbmQoKXtyZXR1cm4gdGhpc30scmVnaXN0ZXIoZSx0KXtyZXR1cm4gZS5hZGQodGhpcyx0KSx0aGlzfSxyZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh2cihlLHQpKX0sc3VwZXJSZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhicihlLHQpKX0sb3ZlcndyaXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKHdlKGUpKX0sb3B0aW9uYWwoKXtyZXR1cm4gcSh0aGlzKX0sZXhhY3RPcHRpb25hbCgpe3JldHVybiBZbyh0aGlzKX0sbnVsbGFibGUoKXtyZXR1cm4gdHQodGhpcyl9LG51bGxpc2goKXtyZXR1cm4gcSh0dCh0aGlzKSl9LG5vbm9wdGlvbmFsKGUpe3JldHVybiBvcih0aGlzLGUpfSxhcnJheSgpe3JldHVybiBTKHRoaXMpfSxvcihlKXtyZXR1cm4gSShbdGhpcyxlXSl9LGFuZChlKXtyZXR1cm4gX3QodGhpcyxlKX0sdHJhbnNmb3JtKGUpe3JldHVybiBSdCh0aGlzLFBuKGUpKX0sZGVmYXVsdChlKXtyZXR1cm4gZXIodGhpcyxlKX0scHJlZmF1bHQoZSl7cmV0dXJuIG5yKHRoaXMsZSl9LGNhdGNoKGUpe3JldHVybiBpcih0aGlzLGUpfSxwaXBlKGUpe3JldHVybiBSdCh0aGlzLGUpfSxyZWFkb25seSgpe3JldHVybiBscih0aGlzKX0sZGVzY3JpYmUoZSl7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuIHBlLmFkZCh0LHtkZXNjcmlwdGlvbjplfSksdH0sbWV0YSguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIHBlLmdldCh0aGlzKTtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gcGUuYWRkKHQsZVswXSksdH0saXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9LGlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc30sYXBwbHkoZSwuLi50KXtyZXR1cm4gdC5sZW5ndGg9PT0wP2UodGhpcyk6ZSh0aGlzLC4uLnQpfSxnZXQifnN0YW5kYXJkIigpe3JldHVybiBsbyh0aGlzLCJ+c3RhbmRhcmQiLHsuLi53cyh0aGlzKSxqc29uU2NoZW1hOntpbnB1dDpGcigpLG91dHB1dDpGcigpfX0pfSxzZXQifnN0YW5kYXJkIihlKXt6ZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfSxwYXJzZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHlpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxwYXJzZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgd2kodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVQYXJzZShlLHQpe3JldHVybiBraSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7cmV0dXJuIFNpKHRoaXMsZSx0KX0sZ2V0IHNwYSgpe3JldHVybiB0aGlzPy5zYWZlUGFyc2VBc3luY30sc2V0IHNwYShlKXt6ZSh0aGlzLCJzcGEiLGUpfSx2YWxpZGF0ZShlLHQpe3JldHVybiBnbyh0aGlzLGUsdCl9LHZhbGlkYXRlQXN5bmMoZSx0KXtyZXR1cm4gdm8odGhpcyxlLHQpfSxlbmNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiAkaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gemkodGhpcyx0LG4se2NhbGxlZTplfSl9LGVuY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgVGkodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgUGkodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVFbmNvZGUoZSx0KXtyZXR1cm4gSWkodGhpcyxlLHQpfSxzYWZlRGVjb2RlKGUsdCl7cmV0dXJuIHhpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZUVuY29kZUFzeW5jKGUsdCl7cmV0dXJuIEVpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZURlY29kZUFzeW5jKGUsdCl7cmV0dXJuIFJpKHRoaXMsZSx0KX0sdG9KU09OU2NoZW1hKGUpe3JldHVybiBKcCgpKGUpfSxnZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4gcGUuZ2V0KHRoaXMpPy5kZXNjcmlwdGlvbn0sZ2V0IF9kZWYoKXtyZXR1cm4gdGhpcy5fem9kLmRlZn19KSxvbj1kKCJfWm9kU3RyaW5nIiwoZSx0KT0+e0h0LmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UW0oKX0sQXQoe2Zvcm1hdDplPT5mZSgpLmZvcm1hdD8/bnVsbCxtaW5MZW5ndGg6ZT0+ZmUoKS5taW5pbXVtPz9udWxsLG1heExlbmd0aDplPT5mZSgpLm1heGltdW0/P251bGx9LHtyZWdleCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhGdCguLi5lKSl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEp0KC4uLmUpKX0sc3RhcnRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhLdCguLi5lKSl9LGVuZHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFd0KC4uLmUpKX0sbWluKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFplKC4uLmUpKX0sbWF4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHN0KC4uLmUpKX0sbGVuZ3RoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGl0KC4uLmUpKX0sbm9uZW1wdHkoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soWmUoMSwuLi5lKSl9LGxvd2VyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhCdChlKSl9LHVwcGVyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhWdChlKSl9LHRyaW0oKXtyZXR1cm4gdGhpcy5jaGVjayhYdCgpKX0sbm9ybWFsaXplKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFF0KC4uLmUpKX0sdG9Mb3dlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhlbigpKX0sdG9VcHBlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayh0bigpKX0sc2x1Z2lmeSgpe3JldHVybiB0aGlzLmNoZWNrKG5uKCkpfX0pKSxjdD1kKCJab2RTdHJpbmciLChlLHQpPT57SHQuaW5pdChlLHQpLG9uLmluaXQoZSx0KX0se2VtYWlsKGUpe3JldHVybiB0aGlzLmNoZWNrKEJzKHJuLGUpKX0sdXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKCRvKGZ0LGUpKX0sand0KGUpe3JldHVybiB0aGlzLmNoZWNrKGRpKHduLGUpKX0sZW1vamkoZSl7cmV0dXJuIHRoaXMuY2hlY2soWXMoYW4sZSkpfSxndWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKFZzKHNuLGUpKX0sdXVpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhKcyh2ZSxlKSl9LHV1aWR2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhLcyh2ZSxlKSl9LHV1aWR2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhXcyh2ZSxlKSl9LHV1aWR2NyhlKXtyZXR1cm4gdGhpcy5jaGVjayhHcyh2ZSxlKSl9LG5hbm9pZChlKXtyZXR1cm4gdGhpcy5jaGVjayhRcyhjbixlKSl9LGN1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soWHModW4sZSkpfSxjdWlkMihlKXtyZXR1cm4gdGhpcy5jaGVjayhlaShsbixlKSl9LHVsaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2sodGkoZG4sZSkpfSxiYXNlNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soY2koYm4sZSkpfSxiYXNlNjR1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2sodWkoX24sZSkpfSx4aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2sobmkocG4sZSkpfSxrc3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhvaShmbixlKSl9LGlwdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2socmkoaG4sZSkpfSxpcHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKHNpKG1uLGUpKX0sY2lkcnY0KGUpe3JldHVybiB0aGlzLmNoZWNrKGlpKGduLGUpKX0sY2lkcnY2KGUpe3JldHVybiB0aGlzLmNoZWNrKGFpKHZuLGUpKX0sZTE2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhsaSh5bixlKSl9LGRhdGV0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKGZpKHV0LGUpKX0sZGF0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhoaShsdCxlKSl9LHRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2sobWkoZHQsZSkpfSxkdXJhdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVjayhnaShwdCxlKSl9fSk7ZnVuY3Rpb24gZihlKXtyZXR1cm4gbHAoY3QsZSl9Y29uc3QgTj1kKCJab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57RC5pbml0KGUsdCksb24uaW5pdChlLHQpfSksdXQ9ZCgiWm9kSVNPRGF0ZVRpbWUiLChlLHQpPT57R2wuaW5pdChlLHQpLE4uaW5pdChlLHQpfSksbHQ9ZCgiWm9kSVNPRGF0ZSIsKGUsdCk9PntZbC5pbml0KGUsdCksTi5pbml0KGUsdCl9KSxkdD1kKCJab2RJU09UaW1lIiwoZSx0KT0+e1FsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pLHB0PWQoIlpvZElTT0R1cmF0aW9uIiwoZSx0KT0+e1hsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pLHJuPWQoIlpvZEVtYWlsIiwoZSx0KT0+e2psLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIENpKGUpe3JldHVybiBCcyhybixlKX1jb25zdCBzbj1kKCJab2RHVUlEIiwoZSx0KT0+e0FsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFppKGUpe3JldHVybiBWcyhzbixlKX1jb25zdCB2ZT1kKCJab2RVVUlEIiwoZSx0KT0+e05sLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE9pKGUpe3JldHVybiBKcyh2ZSxlKX1mdW5jdGlvbiBBaShlKXtyZXR1cm4gS3ModmUsZSl9ZnVuY3Rpb24gTmkoZSl7cmV0dXJuIFdzKHZlLGUpfWZ1bmN0aW9uIGppKGUpe3JldHVybiBHcyh2ZSxlKX1jb25zdCBmdD1kKCJab2RVUkwiLChlLHQpPT57VWwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gTWkoZSl7cmV0dXJuICRvKGZ0LGUpfWZ1bmN0aW9uIERpKGUpe3JldHVybiAkbyhmdCx7cHJvdG9jb2w6aHMsaG9zdG5hbWU6R3UsLi4uXyhlKX0pfWNvbnN0IGFuPWQoIlpvZEVtb2ppIiwoZSx0KT0+e0hsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHFpKGUpe3JldHVybiBZcyhhbixlKX1jb25zdCBjbj1kKCJab2ROYW5vSUQiLChlLHQpPT57RmwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gTGkoZSl7cmV0dXJuIFFzKGNuLGUpfWNvbnN0IHVuPWQoIlpvZENVSUQiLChlLHQpPT57QmwuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIFhzKHVuLGUpfWNvbnN0IGxuPWQoIlpvZENVSUQyIiwoZSx0KT0+e1ZsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEhpKGUpe3JldHVybiBlaShsbixlKX1jb25zdCBkbj1kKCJab2RVTElEIiwoZSx0KT0+e0psLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEZpKGUpe3JldHVybiB0aShkbixlKX1jb25zdCBwbj1kKCJab2RYSUQiLChlLHQpPT57S2wuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gQmkoZSl7cmV0dXJuIG5pKHBuLGUpfWNvbnN0IGZuPWQoIlpvZEtTVUlEIiwoZSx0KT0+e1dsLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFZpKGUpe3JldHVybiBvaShmbixlKX1jb25zdCBobj1kKCJab2RJUHY0IiwoZSx0KT0+e2VkLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEppKGUpe3JldHVybiByaShobixlKX1jb25zdCBFbz1kKCJab2RNQUMiLChlLHQpPT57bmQuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gS2koZSl7cmV0dXJuIHBwKEVvLGUpfWNvbnN0IG1uPWQoIlpvZElQdjYiLChlLHQpPT57dGQuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gV2koZSl7cmV0dXJuIHNpKG1uLGUpfWNvbnN0IGduPWQoIlpvZENJRFJ2NCIsKGUsdCk9PntvZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBHaShlKXtyZXR1cm4gaWkoZ24sZSl9Y29uc3Qgdm49ZCgiWm9kQ0lEUnY2IiwoZSx0KT0+e3NkLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFlpKGUpe3JldHVybiBhaSh2bixlKX1jb25zdCBibj1kKCJab2RCYXNlNjQiLChlLHQpPT57YWQuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gUWkoZSl7cmV0dXJuIGNpKGJuLGUpfWNvbnN0IF9uPWQoIlpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt1ZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBYaShlKXtyZXR1cm4gdWkoX24sZSl9Y29uc3QgeW49ZCgiWm9kRTE2NCIsKGUsdCk9PntsZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBlYShlKXtyZXR1cm4gbGkoeW4sZSl9Y29uc3QgUm89ZCgiWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9PntwZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiB0YShlKXtyZXR1cm4gZnAoUm8sZSl9Y29uc3QgQ289ZCgiWm9kSUJBTiIsKGUsdCk9PntoZC5pbml0KGUsdCksTi5pbml0KGUsdCl9KTtmdW5jdGlvbiBuYShlKXtyZXR1cm4gaHAoQ28sZSl9Y29uc3Qgd249ZCgiWm9kSldUIiwoZSx0KT0+e2dkLmluaXQoZSx0KSxOLmluaXQoZSx0KX0pO2Z1bmN0aW9uIG9hKGUpe3JldHVybiBkaSh3bixlKX1jb25zdCBPZT1kKCJab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57dmQuaW5pdChlLHQpLE4uaW5pdChlLHQpfSk7ZnVuY3Rpb24gcmEoZSx0LG49e30pe3JldHVybiBhdChPZSxlLHQsbil9ZnVuY3Rpb24gc2EoZSl7cmV0dXJuIGF0KE9lLCJob3N0bmFtZSIsV3UsZSl9ZnVuY3Rpb24gaWEoZSl7cmV0dXJuIGF0KE9lLCJoZXgiLHBsLGUpfWZ1bmN0aW9uIGFhKGUpe3JldHVybiBhdChPZSwiY3VycmVuY3lfY29kZSIsUXUsZSl9ZnVuY3Rpb24gY2EoZSx0KXtjb25zdCBuPXQ/LmVuYz8/ImhleCIsbz1gJHtlfV8ke259YCxyPV9vW29dO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke299YCk7cmV0dXJuIGF0KE9lLG8scix0KX1jb25zdCBodD1kKCJab2ROdW1iZXIiLChlLHQpPT57UHMuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5YbSgpLGUuaXNGaW5pdGU9ITB9LEF0KHttaW5WYWx1ZTplPT57Y29uc3R7bWluaW11bTp0LGV4Y2x1c2l2ZU1pbmltdW06bn09ZmUoKTtyZXR1cm4gTWF0aC5tYXgodD8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG4/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSl9LG1heFZhbHVlOmU9Pntjb25zdHttYXhpbXVtOnQsZXhjbHVzaXZlTWF4aW11bTpufT1mZSgpO3JldHVybiBNYXRoLm1pbih0Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0saXNJbnQ6ZT0+e2NvbnN0e2lzSW50OnQsbXVsdGlwbGVPZjpufT1mZSgpO3JldHVybiEhdHx8ISFuPy5zb21lKE51bWJlci5pc1NhZmVJbnRlZ2VyKX0sZm9ybWF0OmU9PmZlKCkuZm9ybWF0Pz9udWxsfSx7Z3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhQZShlLHQpKX0sZ3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYWUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKGFlKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKFRlKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhpZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soaWUoZSx0KSl9LGludChlKXtyZXR1cm4gdGhpcy5jaGVjayhFdChlKSl9LHNhZmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soRXQoZSkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhQZSgwLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYWUoMCxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKFRlKDAsZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhpZSgwLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKERlKGUsdCkpfSxzdGVwKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soRGUoZSx0KSl9LGZpbml0ZSgpe3JldHVybiB0aGlzfX0pKTtmdW5jdGlvbiBUKGUpe3JldHVybiBtcChodCxlKX1jb25zdCBBZT1kKCJab2ROdW1iZXJGb3JtYXQiLChlLHQpPT57YmQuaW5pdChlLHQpLGh0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIEV0KGUpe3JldHVybiB2cChBZSxlKX1mdW5jdGlvbiB1YShlKXtyZXR1cm4gYnAoQWUsZSl9ZnVuY3Rpb24gbGEoZSl7cmV0dXJuIF9wKEFlLGUpfWZ1bmN0aW9uIGRhKGUpe3JldHVybiB5cChBZSxlKX1mdW5jdGlvbiBwYShlKXtyZXR1cm4gd3AoQWUsZSl9Y29uc3QgbXQ9ZCgiWm9kQm9vbGVhbiIsKGUsdCk9PntJcy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmVnKCl9KTtmdW5jdGlvbiBBKGUpe3JldHVybiBrcChtdCxlKX1jb25zdCBndD1kKCJab2RCaWdJbnQiLChlLHQpPT57eHMuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT50ZygpfSxBdCh7bWluVmFsdWU6ZT0+ZmUoKS5taW5pbXVtPz9udWxsLG1heFZhbHVlOmU9PmZlKCkubWF4aW11bT8/bnVsbCxmb3JtYXQ6ZT0+ZmUoKS5mb3JtYXQ/P251bGx9LHtndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhhZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYWUoZSx0KSl9LGd0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soUGUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soVGUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGllKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhpZShlLHQpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soUGUoQmlnSW50KDApLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soVGUoQmlnSW50KDApLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soaWUoQmlnSW50KDApLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soYWUoQmlnSW50KDApLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKERlKGUsdCkpfX0pKTtmdW5jdGlvbiBmYShlKXtyZXR1cm4gJHAoZ3QsZSl9Y29uc3Qga249ZCgiWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e19kLmluaXQoZSx0KSxndC5pbml0KGUsdCl9KTtmdW5jdGlvbiBoYShlKXtyZXR1cm4gVHAoa24sZSl9ZnVuY3Rpb24gbWEoZSl7cmV0dXJuIFBwKGtuLGUpfWNvbnN0IFpvPWQoIlpvZFN5bWJvbCIsKGUsdCk9Pnt5ZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm5nKCl9KTtmdW5jdGlvbiBnYShlKXtyZXR1cm4gSXAoWm8sZSl9Y29uc3QgT289ZCgiWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3dkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cmcoKX0pO2Z1bmN0aW9uIGV0KGUpe3JldHVybiB4cChPbyxlKX1jb25zdCBBbz1kKCJab2ROdWxsIiwoZSx0KT0+e2tkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+b2coKX0pO2Z1bmN0aW9uIFNuKGUpe3JldHVybiBFcChBbyxlKX1jb25zdCBObz1kKCJab2RBbnkiLChlLHQpPT57U2QuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5hZygpfSk7ZnVuY3Rpb24gJG4oKXtyZXR1cm4gUnAoTm8pfWNvbnN0IGpvPWQoIlpvZFVua25vd24iLChlLHQpPT57JGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5jZygpfSk7ZnVuY3Rpb24gWigpe3JldHVybiBDcChqbyl9Y29uc3QgTW89ZCgiWm9kTmV2ZXIiLChlLHQpPT57emQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5pZygpfSk7ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIFpwKE1vLGUpfWNvbnN0IERvPWQoIlpvZFZvaWQiLChlLHQpPT57VGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5zZygpfSk7ZnVuY3Rpb24gdmEoZSl7cmV0dXJuIE9wKERvLGUpfWNvbnN0IHpuPWQoIlpvZERhdGUiLChlLHQpPT57UGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT51ZygpLGUubWluPShuLG8pPT5lLmNoZWNrKGFlKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKGllKG4sbykpfSxBdCh7bWluRGF0ZTplPT57Y29uc3R7bWluaW11bTp0fT1mZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9LG1heERhdGU6ZT0+e2NvbnN0e21heGltdW06dH09ZmUoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfX0se30pKTtmdW5jdGlvbiBiYShlKXtyZXR1cm4gQXAoem4sZSl9Y29uc3QgcW89ZCgiWm9kQXJyYXkiLChlLHQpPT57VmUoKSxJZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PndnKCksZS5lbGVtZW50PXQuZWxlbWVudH0se21pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKFplKGUsdCkpfSxub25lbXB0eShlKXtyZXR1cm4gdGhpcy5jaGVjayhaZSgxLGUpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soc3QoZSx0KSl9LGxlbmd0aChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGl0KGUsdCkpfSx1bndyYXAoKXtyZXR1cm4gdGhpcy5lbGVtZW50fX0pO2Z1bmN0aW9uIFMoZSx0KXtyZXR1cm4gTXAocW8sZSx0KX1mdW5jdGlvbiBfYShlKXtjb25zdCB0PWUuX3pvZC5kZWYuc2hhcGU7cmV0dXJuIEcoT2JqZWN0LmtleXModCkpfWNvbnN0IHZ0PWQoIlpvZE9iamVjdCIsKGUsdCk9PntWZSgpLENkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+a2coKSx6dShlLCJzaGFwZSIsbj0+bi5fem9kLmRlZi5zaGFwZSwhMSl9LHtrZXlvZigpe3JldHVybiBHKE9iamVjdC5rZXlzKHRoaXMuX3pvZC5kZWYuc2hhcGUpKX0sY2F0Y2hhbGwoZSl7cmV0dXJuIHRoaXMuY2xvbmUoWCh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKFgodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6WigpfSkpfSxsb29zZSgpe3JldHVybiB0aGlzLmNsb25lKFgodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6WigpfSkpfSxzdHJpY3QoKXtyZXR1cm4gdGhpcy5jbG9uZShYKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOnFlKCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUoWCh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDp2b2lkIDB9KSl9LGV4dGVuZChlKXtyZXR1cm4gbXUodGhpcyxlKX0sc2FmZUV4dGVuZChlKXtyZXR1cm4gdnUodGhpcyxlKX0sbWVyZ2UoZSl7cmV0dXJuIGJ1KHRoaXMsZSl9LHBpY2soZSl7cmV0dXJuIGZ1KHRoaXMsZSl9LG9taXQoZSl7cmV0dXJuIGh1KHRoaXMsZSl9LHBhcnRpYWwoLi4uZSl7cmV0dXJuIE5yKHl0LHRoaXMsZVswXSl9LGV4YWN0UGFydGlhbCguLi5lKXtyZXR1cm4gTnIoSW4sdGhpcyxlWzBdLCJleGFjdFBhcnRpYWwiKX0scmVxdWlyZWQoLi4uZSl7cmV0dXJuIF91KHhuLHRoaXMsZVswXSl9fSk7ZnVuY3Rpb24gdihlLHQpe2NvbnN0IG49e3R5cGU6Im9iamVjdCIsc2hhcGU6ZT8/e30sLi4uXyh0KX07cmV0dXJuIG5ldyB2dChuKX1mdW5jdGlvbiB5YShlLHQpe3JldHVybiBuZXcgdnQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpxZSgpLC4uLl8odCl9KX1mdW5jdGlvbiBXKGUsdCl7cmV0dXJuIG5ldyB2dCh7dHlwZToib2JqZWN0IixzaGFwZTplLGNhdGNoYWxsOlooKSwuLi5fKHQpfSl9Y29uc3QgYnQ9ZCgiWm9kVW5pb24iLChlLHQpPT57eW8uaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5LcCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBJKGUsdCl7cmV0dXJuIG5ldyBidCh7dHlwZToidW5pb24iLG9wdGlvbnM6ZSwuLi5fKHQpfSl9Y29uc3QgTG89ZCgiWm9kWG9yIiwoZSx0KT0+e2J0LmluaXQoZSx0KSxaZC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PktwKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIHdhKGUsdCl7cmV0dXJuIG5ldyBMbyh7dHlwZToidW5pb24iLG9wdGlvbnM6ZSxpbmNsdXNpdmU6ITEsLi4uXyh0KX0pfWNvbnN0IFVvPWQoIlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9PntidC5pbml0KGUsdCksQWQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVG4oZSx0LG4pe3JldHVybiBuZXcgVW8oe3R5cGU6InVuaW9uIixvcHRpb25zOnQsZGlzY3JpbWluYXRvcjplLC4uLl8obil9KX1jb25zdCBIbz1kKCJab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57TmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5TZygpfSk7ZnVuY3Rpb24gX3QoZSx0KXtyZXR1cm4gbmV3IEhvKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6ZSxyaWdodDp0fSl9Y29uc3QgRm89ZCgiWm9kVHVwbGUiLChlLHQpPT57VmUoKSxScy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PiRnKCl9LHtyZXN0KGUpe3JldHVybiB0aGlzLmNsb25lKHsuLi50aGlzLl96b2QuZGVmLHJlc3Q6ZX0pfSxwYXJ0aWFsKCl7Y29uc3QgZT10aGlzLl96b2QuZGVmO2lmKGUuY2hlY2tzPy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCIucGFydGlhbCgpIGNhbm5vdCBiZSB1c2VkIG9uIHR1cGxlIHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cyIpO3JldHVybiB0aGlzLmNsb25lKHsuLi5lLGl0ZW1zOmUuaXRlbXMubWFwKHQ9Pm5ldyB5dCh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSkpfSl9fSk7ZnVuY3Rpb24gQm8oZSx0LG4pe2NvbnN0IG89dCBpbnN0YW5jZW9mIHoscj1vP246dCxzPW8/dDpudWxsO3JldHVybiBuZXcgRm8oe3R5cGU6InR1cGxlIixpdGVtczplLHJlc3Q6cywuLi5fKHIpfSl9Y29uc3QgTGU9ZCgiWm9kUmVjb3JkIiwoZSx0KT0+e1ZlKCksamQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT56ZygpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGV9KTtmdW5jdGlvbiBFKGUsdCxuKXtyZXR1cm4hdHx8IXQuX3pvZD9uZXcgTGUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTpmKCksdmFsdWVUeXBlOmUsLi4uXyh0KX0pOm5ldyBMZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4uXyhuKX0pfWZ1bmN0aW9uIGthKGUsdCxuKXtyZXR1cm4gbmV3IExlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi5fKG4pLHBhcnRpYWw6ITB9KX1mdW5jdGlvbiBTYShlLHQsbil7cmV0dXJuIG5ldyBMZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsbW9kZToibG9vc2UiLC4uLl8obil9KX1jb25zdCBWbz1kKCJab2RNYXAiLChlLHQpPT57VmUoKSxNZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pl9nKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZSxlLm1pbj0oLi4ubik9PmUuY2hlY2soSWUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhJZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2soQmUoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2socnQoLi4ubikpfSk7ZnVuY3Rpb24gJGEoZSx0LG4pe3JldHVybiBuZXcgVm8oe3R5cGU6Im1hcCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLl8obil9KX1jb25zdCBKbz1kKCJab2RTZXQiLChlLHQpPT57VmUoKSxEZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnlnKCksZS5taW49KC4uLm4pPT5lLmNoZWNrKEllKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soSWUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKEJlKC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKHJ0KC4uLm4pKX0pO2Z1bmN0aW9uIHphKGUsdCl7cmV0dXJuIG5ldyBKbyh7dHlwZToic2V0Iix2YWx1ZVR5cGU6ZSwuLi5fKHQpfSl9Y29uc3QgVWU9ZCgiWm9kRW51bSIsKGUsdCk9PntxZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShvLHIscyk9PmxnKCksZS5lbnVtPXQuZW50cmllcyxlLm9wdGlvbnM9Wy4uLmUuX3pvZC52YWx1ZXNdO2NvbnN0IG49bmV3IFNldChPYmplY3Qua2V5cyh0LmVudHJpZXMpKTtlLmV4dHJhY3Q9KG8scik9Pntjb25zdCBzPXt9O2Zvcihjb25zdCBpIG9mIG8paWYobi5oYXMoaSkpc1tpXT10LmVudHJpZXNbaV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2l9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBVZSh7Li4udCxjaGVja3M6W10sLi4uXyhyKSxlbnRyaWVzOnN9KX0sZS5leGNsdWRlPShvLHIpPT57Y29uc3Qgcz17Li4udC5lbnRyaWVzfTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKWRlbGV0ZSBzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgVWUoey4uLnQsY2hlY2tzOltdLC4uLl8ociksZW50cmllczpzfSl9fSk7ZnVuY3Rpb24gRyhlLHQpe2NvbnN0IG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QuZnJvbUVudHJpZXMoZS5tYXAobz0+W28sb10pKTplO3JldHVybiBuZXcgVWUoe3R5cGU6ImVudW0iLGVudHJpZXM6biwuLi5fKHQpfSl9ZnVuY3Rpb24gVGEoZSx0KXtyZXR1cm4gbmV3IFVlKHt0eXBlOiJlbnVtIixlbnRyaWVzOmUsLi4uXyh0KX0pfWNvbnN0IEtvPWQoIlpvZExpdGVyYWwiLChlLHQpPT57TGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5kZygpLGUudmFsdWVzPW5ldyBTZXQodC52YWx1ZXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ2YWx1ZSIse2dldCgpe2lmKHQudmFsdWVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC4iKTtyZXR1cm4gdC52YWx1ZXNbMF19fSl9KTtmdW5jdGlvbiBoKGUsdCl7cmV0dXJuIG5ldyBLbyh7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sLi4uXyh0KX0pfWNvbnN0IFdvPWQoIlpvZEZpbGUiLChlLHQpPT57VWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5oZygpLGUubWluPShuLG8pPT5lLmNoZWNrKEllKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKEJlKG4sbykpLGUubWltZT0obixvKT0+ZS5jaGVjayhZdChBcnJheS5pc0FycmF5KG4pP246W25dLG8pKX0pO2Z1bmN0aW9uIFBhKGUpe3JldHVybiBEcChXbyxlKX1jb25zdCBHbz1kKCJab2RUcmFuc2Zvcm0iLChlLHQpPT57VmUoKSxIZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmJnKCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBwbyhlLmNvbnN0cnVjdG9yLm5hbWUpO24uYWRkSXNzdWU9cz0+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiluLmlzc3Vlcy5wdXNoKFFlKHMsbi52YWx1ZSx0KSk7ZWxzZXtjb25zdCBpPXM7aS5mYXRhbCYmKGkuY29udGludWU9ITEpLGkuY29kZT8/KGkuY29kZT0iY3VzdG9tIiksImlucHV0ImluIGl8fChpLmlucHV0PW4udmFsdWUpLGkuaW5zdD8/KGkuaW5zdD1lKSxuLmlzc3Vlcy5wdXNoKFFlKGkpKX19O2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMsbikpOihuLnZhbHVlPXIsbil9fSk7ZnVuY3Rpb24gUG4oZSl7cmV0dXJuIG5ldyBHbyh7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX0pfWNvbnN0IHl0PWQoIlpvZE9wdGlvbmFsIiwoZSx0KT0+e0NzLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+V3AoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBxKGUpe3JldHVybiBuZXcgeXQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IEluPWQoIlpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57RmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5XcCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFlvKGUpe3JldHVybiBuZXcgSW4oe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IFFvPWQoIlpvZE51bGxhYmxlIiwoZSx0KT0+e0JkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VGcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiB0dChlKXtyZXR1cm4gbmV3IFFvKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOmV9KX1mdW5jdGlvbiBJYShlKXtyZXR1cm4gcSh0dChlKSl9Y29uc3QgWG89ZCgiWm9kRGVmYXVsdCIsKGUsdCk9PntWZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PklnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlRGVmYXVsdD1lLnVud3JhcH0pO2Z1bmN0aW9uIGVyKGUsdCl7cmV0dXJuIG5ldyBYbyh7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6c28odCl9fSl9Y29uc3QgdHI9ZCgiWm9kUHJlZmF1bHQiLChlLHQpPT57SmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT54ZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIG5yKGUsdCl7cmV0dXJuIG5ldyB0cih7dHlwZToicHJlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOnNvKHQpfX0pfWNvbnN0IHhuPWQoIlpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e0tkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UGcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBvcihlLHQpe3JldHVybiBuZXcgeG4oe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6ZSwuLi5fKHQpfSl9Y29uc3QgcnI9ZCgiWm9kU3VjY2VzcyIsKGUsdCk9PntXZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm1nKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24geGEoZSl7cmV0dXJuIG5ldyBycih7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOmV9KX1jb25zdCBzcj1kKCJab2RDYXRjaCIsKGUsdCk9PntHZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkVnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlQ2F0Y2g9ZS51bndyYXB9KTtmdW5jdGlvbiBpcihlLHQpe3JldHVybiBuZXcgc3Ioe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6ZSxjYXRjaFZhbHVlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6ZXModCl9KX1jb25zdCBhcj1kKCJab2ROYU4iLChlLHQpPT57WWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5wZygpfSk7ZnVuY3Rpb24gRWEoZSl7cmV0dXJuIGpwKGFyLGUpfWNvbnN0IHd0PWQoIlpvZFBpcGUiLChlLHQpPT57WnMuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5SZygpLGUuaW49dC5pbixlLm91dD10Lm91dH0pO2Z1bmN0aW9uIFJ0KGUsdCl7cmV0dXJuIG5ldyB3dCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dH0pfWNvbnN0IGt0PWQoIlpvZENvZGVjIiwoZSx0KT0+e3d0LmluaXQoZSx0KSxPcy5pbml0KGUsdCl9KTtmdW5jdGlvbiBSYShlLHQsbil7cmV0dXJuIG5ldyBrdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dCx0cmFuc2Zvcm06bi5kZWNvZGUscmV2ZXJzZVRyYW5zZm9ybTpuLmVuY29kZX0pfWZ1bmN0aW9uIENhKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtyZXR1cm4gbmV3IGt0KHt0eXBlOiJwaXBlIixpbjp0Lm91dCxvdXQ6dC5pbix0cmFuc2Zvcm06dC5yZXZlcnNlVHJhbnNmb3JtLHJldmVyc2VUcmFuc2Zvcm06dC50cmFuc2Zvcm19KX1jb25zdCBjcj1kKCJab2RQcmVwcm9jZXNzIiwoZSx0KT0+e3d0LmluaXQoZSx0KSxRZC5pbml0KGUsdCl9KSx1cj1kKCJab2RSZWFkb25seSIsKGUsdCk9PntYZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkNnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gbHIoZSl7cmV0dXJuIG5ldyB1cih7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTplfSl9Y29uc3QgZHI9ZCgiWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e2VwLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZmcoKX0pO2Z1bmN0aW9uIFphKGUsdCl7cmV0dXJuIG5ldyBkcih7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6ZSwuLi5fKHQpfSl9Y29uc3QgcHI9ZCgiWm9kTGF6eSIsKGUsdCk9PntBcy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk9nKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuZ2V0dGVyKCl9KTtmdW5jdGlvbiBmcihlKXtyZXR1cm4gbmV3IHByKHt0eXBlOiJsYXp5IixnZXR0ZXI6ZX0pfWNvbnN0IGhyPWQoIlpvZFByb21pc2UiLChlLHQpPT57bnAuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5aZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIE9hKGUpe3JldHVybiBuZXcgaHIoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTplfSl9Y29uc3QgbXI9ZCgiWm9kRnVuY3Rpb24iLChlLHQpPT57dHAuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT52ZygpfSk7ZnVuY3Rpb24gbnQoZSl7cmV0dXJuIG5ldyBtcih7dHlwZToiZnVuY3Rpb24iLGlucHV0OkFycmF5LmlzQXJyYXkoZT8uaW5wdXQpP0JvKGU/LmlucHV0KTplPy5pbnB1dD8/UyhaKCkpLG91dHB1dDplPy5vdXRwdXQ/P1ooKX0pfWNvbnN0IFN0PWQoIlpvZEN1c3RvbSIsKGUsdCk9PntvcC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmdnKCl9KTtmdW5jdGlvbiBBYShlKXtjb25zdCB0PW5ldyBVKHtjaGVjazoiY3VzdG9tIn0pO3JldHVybiB0Ll96b2QuY2hlY2s9ZSx0fWZ1bmN0aW9uIGdyKGUsdCl7cmV0dXJuIHFwKFN0LGU/PygoKT0+ITApLHQpfWZ1bmN0aW9uIHZyKGUsdD17fSl7cmV0dXJuIExwKFN0LGUsdCl9ZnVuY3Rpb24gYnIoZSx0KXtyZXR1cm4gVXAoZSx0KX1jb25zdCBOYT1GcCxqYT1CcCxfcj1kKCJab2RJbnN0YW5jZU9mIiwoZSx0KT0+e1N0LmluaXQoZSx0KX0se3Byb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhHdChlLHQpKX19KTtmdW5jdGlvbiBNYShlLHQ9e30pe2NvbnN0IG49bmV3IF9yKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOm89Pm8gaW5zdGFuY2VvZiBlLGFib3J0OiEwLC4uLl8odCl9KTtyZXR1cm4gbi5fem9kLmJhZy5DbGFzcz1lLG4uX3pvZC5jaGVjaz1vPT57by52YWx1ZSBpbnN0YW5jZW9mIGV8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ZS5uYW1lLGlucHV0Om8udmFsdWUsaW5zdDpuLHBhdGg6Wy4uLm4uX3pvZC5kZWYucGF0aD8/W11dfSl9LG59Y29uc3QgRGE9KC4uLmUpPT5WcCh7Q29kZWM6a3QsQm9vbGVhbjptdCxTdHJpbmc6Y3R9LC4uLmUpO2Z1bmN0aW9uIHFhKGUpe2NvbnN0IHQ9ZnIoKCk9PkkoW2YoZSksVCgpLEEoKSxTbigpLFModCksRShmKCksdCldKSk7cmV0dXJuIHR9ZnVuY3Rpb24gRW4oZSx0KXtyZXR1cm4gbmV3IGNyKHt0eXBlOiJwaXBlIixpbjpQbihlKSxvdXQ6dH0pfWNvbnN0IExnPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RBbnk6Tm8sWm9kQXJyYXk6cW8sWm9kQmFzZTY0OmJuLFpvZEJhc2U2NFVSTDpfbixab2RCaWdJbnQ6Z3QsWm9kQmlnSW50Rm9ybWF0OmtuLFpvZEJvb2xlYW46bXQsWm9kQ0lEUnY0OmduLFpvZENJRFJ2Njp2bixab2RDVUlEOnVuLFpvZENVSUQyOmxuLFpvZENhdGNoOnNyLFpvZENvZGVjOmt0LFpvZENyZWRpdENhcmQ6Um8sWm9kQ3VzdG9tOlN0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpPZSxab2REYXRlOnpuLFpvZERlZmF1bHQ6WG8sWm9kRGlzY3JpbWluYXRlZFVuaW9uOlVvLFpvZEUxNjQ6eW4sWm9kRW1haWw6cm4sWm9kRW1vamk6YW4sWm9kRW51bTpVZSxab2RFeGFjdE9wdGlvbmFsOkluLFpvZEZpbGU6V28sWm9kRnVuY3Rpb246bXIsWm9kR1VJRDpzbixab2RJQkFOOkNvLFpvZElQdjQ6aG4sWm9kSVB2Njptbixab2RJU09EYXRlOmx0LFpvZElTT0RhdGVUaW1lOnV0LFpvZElTT0R1cmF0aW9uOnB0LFpvZElTT1RpbWU6ZHQsWm9kSW5zdGFuY2VPZjpfcixab2RJbnRlcnNlY3Rpb246SG8sWm9kSldUOnduLFpvZEtTVUlEOmZuLFpvZExhenk6cHIsWm9kTGl0ZXJhbDpLbyxab2RNQUM6RW8sWm9kTWFwOlZvLFpvZE5hTjphcixab2ROYW5vSUQ6Y24sWm9kTmV2ZXI6TW8sWm9kTm9uT3B0aW9uYWw6eG4sWm9kTnVsbDpBbyxab2ROdWxsYWJsZTpRbyxab2ROdW1iZXI6aHQsWm9kTnVtYmVyRm9ybWF0OkFlLFpvZE9iamVjdDp2dCxab2RPcHRpb25hbDp5dCxab2RQaXBlOnd0LFpvZFByZWZhdWx0OnRyLFpvZFByZXByb2Nlc3M6Y3IsWm9kUHJvbWlzZTpocixab2RSZWFkb25seTp1cixab2RSZWNvcmQ6TGUsWm9kU2V0OkpvLFpvZFN0cmluZzpjdCxab2RTdHJpbmdGb3JtYXQ6Tixab2RTdWNjZXNzOnJyLFpvZFN5bWJvbDpabyxab2RUZW1wbGF0ZUxpdGVyYWw6ZHIsWm9kVHJhbnNmb3JtOkdvLFpvZFR1cGxlOkZvLFpvZFR5cGU6UCxab2RVTElEOmRuLFpvZFVSTDpmdCxab2RVVUlEOnZlLFpvZFVuZGVmaW5lZDpPbyxab2RVbmlvbjpidCxab2RVbmtub3duOmpvLFpvZFZvaWQ6RG8sWm9kWElEOnBuLFpvZFhvcjpMbyxfWm9kU3RyaW5nOm9uLF9kZWZhdWx0OmVyLF9mdW5jdGlvbjpudCxhbnk6JG4sYXJyYXk6UyxiYXNlNjQ6UWksYmFzZTY0dXJsOlhpLGJpZ2ludDpmYSxib29sZWFuOkEsY2F0Y2g6aXIsY2hlY2s6QWEsY2lkcnY0OkdpLGNpZHJ2NjpZaSxjb2RlYzpSYSxjcmVkaXRDYXJkOnRhLGN1aWQ6VWksY3VpZDI6SGksY3VycmVuY3lDb2RlOmFhLGN1c3RvbTpncixkYXRlOmJhLGRlc2NyaWJlOk5hLGRpc2NyaW1pbmF0ZWRVbmlvbjpUbixlMTY0OmVhLGVtYWlsOkNpLGVtb2ppOnFpLGVudW06RyxleGFjdE9wdGlvbmFsOllvLGZpbGU6UGEsZmxvYXQzMjp1YSxmbG9hdDY0OmxhLGZ1bmN0aW9uOm50LGd1aWQ6WmksaGFzaDpjYSxoZXg6aWEsaG9zdG5hbWU6c2EsaHR0cFVybDpEaSxpYmFuOm5hLGluc3RhbmNlb2Y6TWEsaW50OkV0LGludDMyOmRhLGludDY0OmhhLGludGVyc2VjdGlvbjpfdCxpbnZlcnRDb2RlYzpDYSxpcHY0OkppLGlwdjY6V2ksanNvbjpxYSxqd3Q6b2Esa2V5b2Y6X2Esa3N1aWQ6VmksbGF6eTpmcixsaXRlcmFsOmgsbG9vc2VPYmplY3Q6Vyxsb29zZVJlY29yZDpTYSxtYWM6S2ksbWFwOiRhLG1ldGE6amEsbmFuOkVhLG5hbm9pZDpMaSxuYXRpdmVFbnVtOlRhLG5ldmVyOnFlLG5vbm9wdGlvbmFsOm9yLG51bGw6U24sbnVsbGFibGU6dHQsbnVsbGlzaDpJYSxudW1iZXI6VCxvYmplY3Q6dixvcHRpb25hbDpxLHBhcnRpYWxSZWNvcmQ6a2EscGlwZTpSdCxwcmVmYXVsdDpucixwcmVwcm9jZXNzOkVuLHByb21pc2U6T2EscmVhZG9ubHk6bHIscmVjb3JkOkUscmVmaW5lOnZyLHNldDp6YSxzdHJpY3RPYmplY3Q6eWEsc3RyaW5nOmYsc3RyaW5nRm9ybWF0OnJhLHN0cmluZ2Jvb2w6RGEsc3VjY2Vzczp4YSxzdXBlclJlZmluZTpicixzeW1ib2w6Z2EsdGVtcGxhdGVMaXRlcmFsOlphLHRyYW5zZm9ybTpQbix0dXBsZTpCbyx1aW50MzI6cGEsdWludDY0Om1hLHVsaWQ6RmksdW5kZWZpbmVkOmV0LHVuaW9uOkksdW5rbm93bjpaLHVybDpNaSx1dWlkOk9pLHV1aWR2NDpBaSx1dWlkdjY6TmksdXVpZHY3OmppLHZvaWQ6dmEseGlkOkJpLHhvcjp3YX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxlZj17aW52YWxpZF90eXBlOiJpbnZhbGlkX3R5cGUiLHRvb19iaWc6InRvb19iaWciLHRvb19zbWFsbDoidG9vX3NtYWxsIixpbnZhbGlkX2Zvcm1hdDoiaW52YWxpZF9mb3JtYXQiLG5vdF9tdWx0aXBsZV9vZjoibm90X211bHRpcGxlX29mIix1bnJlY29nbml6ZWRfa2V5czoidW5yZWNvZ25pemVkX2tleXMiLGludmFsaWRfdW5pb246ImludmFsaWRfdW5pb24iLGludmFsaWRfa2V5OiJpbnZhbGlkX2tleSIsaW52YWxpZF9lbGVtZW50OiJpbnZhbGlkX2VsZW1lbnQiLGludmFsaWRfdmFsdWU6ImludmFsaWRfdmFsdWUiLGN1c3RvbToiY3VzdG9tIn07ZnVuY3Rpb24gdGYoZSl7Sih7Y3VzdG9tRXJyb3I6ZX0pfWZ1bmN0aW9uIG5mKCl7cmV0dXJuIEooKS5jdXN0b21FcnJvcn12YXIgZW87ZW98fChlbz17fSk7ZnVuY3Rpb24gb2YoZSl7cmV0dXJuIGZpKHV0LGUpfWZ1bmN0aW9uIFVnKGUpe3JldHVybiBoaShsdCxlKX1mdW5jdGlvbiBIZyhlKXtyZXR1cm4gbWkoZHQsZSl9ZnVuY3Rpb24gRmcoZSl7cmV0dXJuIGdpKHB0LGUpfWNvbnN0IExhPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RJU09EYXRlOmx0LFpvZElTT0RhdGVUaW1lOnV0LFpvZElTT0R1cmF0aW9uOnB0LFpvZElTT1RpbWU6ZHQsZGF0ZTpVZyxkYXRldGltZTpvZixkdXJhdGlvbjpGZyx0aW1lOkhnfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHc9ey4uLkxnLC4uLkRnLGlzbzpMYX0sQmc9bmV3IFNldChbIiRzY2hlbWEiLCIkcmVmIiwiJGRlZnMiLCJkZWZpbml0aW9ucyIsIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIiwidHlwZSIsImVudW0iLCJjb25zdCIsImFueU9mIiwib25lT2YiLCJhbGxPZiIsIm5vdCIsInByb3BlcnRpZXMiLCJyZXF1aXJlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWVzIiwibWluUHJvcGVydGllcyIsIm1heFByb3BlcnRpZXMiLCJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwibWluSXRlbXMiLCJtYXhJdGVtcyIsInVuaXF1ZUl0ZW1zIiwiY29udGFpbnMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIiwibWluTGVuZ3RoIiwibWF4TGVuZ3RoIiwicGF0dGVybiIsImZvcm1hdCIsIm1pbmltdW0iLCJtYXhpbXVtIiwiZXhjbHVzaXZlTWluaW11bSIsImV4Y2x1c2l2ZU1heGltdW0iLCJtdWx0aXBsZU9mIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0IiwiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiaWYiLCJ0aGVuIiwiZWxzZSIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbnRSZXF1aXJlZCIsIm51bGxhYmxlIiwicmVhZE9ubHkiXSk7ZnVuY3Rpb24gVmcoZSx0KXtjb25zdCBuPWUuJHNjaGVtYTtyZXR1cm4gbj09PSJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSI/ImRyYWZ0LTIwMjAtMTIiOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIj8iZHJhZnQtNyI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiPyJkcmFmdC00Ijp0Pz8iZHJhZnQtMjAyMC0xMiJ9ZnVuY3Rpb24gcWMoZSx0KXtyZXR1cm4gZS5tYXAoKG4sbyk9Pm88dD9uOm4ub3B0aW9uYWwoKSl9ZnVuY3Rpb24gSmcoZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBLZyhlLHQpe2lmKCFlLnN0YXJ0c1dpdGgoIiMiKSl0aHJvdyBuZXcgRXJyb3IoIkV4dGVybmFsICRyZWYgaXMgbm90IHN1cHBvcnRlZCwgb25seSBsb2NhbCByZWZzICgjLy4uLikgYXJlIGFsbG93ZWQiKTtjb25zdCBuPWUuc2xpY2UoMSkuc3BsaXQoIi8iKS5maWx0ZXIoQm9vbGVhbik7aWYobi5sZW5ndGg9PT0wKXJldHVybiB0LnJvb3RTY2hlbWE7Y29uc3Qgbz10LnZlcnNpb249PT0iZHJhZnQtMjAyMC0xMiI/IiRkZWZzIjoiZGVmaW5pdGlvbnMiO2lmKG5bMF09PT1vKXtjb25zdCByPW5bMV09PT12b2lkIDA/dm9pZCAwOkpnKG5bMV0pO2lmKCFyfHwhdC5kZWZzW3JdKXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApO3JldHVybiB0LmRlZnNbcl19dGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCl9ZnVuY3Rpb24gV2coZSx0KXtyZXR1cm4gdy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZih0eXBlb2YgciE9Im9iamVjdCJ8fHI9PT1udWxsfHxBcnJheS5pc0FycmF5KHIpKXJldHVybjtjb25zdCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpO2lmKHQubWluUHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg8dC5taW5Qcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluUHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIHNtYWxsOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA+PSR7dC5taW5Qcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQubWF4UHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg+dC5tYXhQcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heFByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBiaWc6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlIDw9JHt0Lm1heFByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5rZXlTY2hlbWEpZm9yKGNvbnN0IGkgb2Ygcyl7Y29uc3QgYT10LmtleVNjaGVtYS5zYWZlUGFyc2UoaSk7YS5zdWNjZXNzfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczphLmVycm9yLmlzc3VlcyxpbnB1dDppLHBhdGg6W2ldLGNvbnRpbnVlOiEwfSl9fSkucGlwZShlKX1mdW5jdGlvbiBCcihlLHQpe2lmKGU9PT1udWxsKXJldHVybiJ6Ijtjb25zdCBuPXR5cGVvZiBlO2lmKG4hPT0ib2JqZWN0Iil7aWYobj09PSJudW1iZXIiJiZOdW1iZXIuaXNOYU4oZSkpcmV0dXJuIG51bGw7Y29uc3Qgbz1TdHJpbmcoZSk7cmV0dXJuYCR7blswXX0ke28ubGVuZ3RofToke299YH1pZih0LmhhcyhlKSlyZXR1cm4gbnVsbDt0LmFkZChlKTt0cnl7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgcz1bXTtmb3IoY29uc3QgaSBvZiBlKXtjb25zdCBhPUJyKGksdCk7aWYoYT09PW51bGwpcmV0dXJuIG51bGw7cy5wdXNoKGEpfXJldHVybmBhJHtzLmxlbmd0aH06WyR7cy5qb2luKCIsIil9XWB9Y29uc3Qgbz1PYmplY3Qua2V5cyhlKS5zb3J0KCkscj1bXTtmb3IoY29uc3QgcyBvZiBvKXtjb25zdCBpPUJyKGVbc10sdCk7aWYoaT09PW51bGwpcmV0dXJuIG51bGw7ci5wdXNoKGAke3MubGVuZ3RofToke3N9PSR7aX1gKX1yZXR1cm5gbyR7ci5sZW5ndGh9Onske3Iuam9pbigiLCIpfX1gfWZpbmFsbHl7dC5kZWxldGUoZSl9fWNvbnN0IEdnPW5ldyBTZXQoWyJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb250YWlucyIsInByb3BlcnR5TmFtZXMiLCJub3QiLCJpZiIsInRoZW4iLCJlbHNlIiwiYWxsT2YiLCJhbnlPZiIsIm9uZU9mIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImNvbnRlbnRTY2hlbWEiXSksWWc9bmV3IFNldChbInByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbmNpZXMiLCIkZGVmcyIsImRlZmluaXRpb25zIl0pO2Z1bmN0aW9uIFB0KGUpe3JldHVybiB0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKFB0KTp0eXBlb2YgZS4kcmVmPT0ic3RyaW5nIj8hMDpPYmplY3QuZW50cmllcyhlKS5zb21lKChbdCxuXSk9PkdnLmhhcyh0KT9QdChuKTohWWcuaGFzKHQpfHx0eXBlb2YgbiE9Im9iamVjdCJ8fG49PT1udWxsPyExOk9iamVjdC52YWx1ZXMobikuc29tZShQdCkpfWZ1bmN0aW9uIExjKGUpe3JldHVybiBlPT09MT8iZWxlbWVudCI6ImVsZW1lbnRzIn1mdW5jdGlvbiBRZyhlLHQpe3JldHVybiB3LnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocikpe2lmKHQudW5pcXVlSXRlbXM9PT0hMCl7Y29uc3Qgcz1uZXcgTWFwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtjb25zdCBhPUJyKHJbaV0sbmV3IFNldCk7aWYoYT09PW51bGwpY29udGludWU7Y29uc3QgYz1zLmdldChhKTtpZihjPT09dm9pZCAwKXtzLnNldChhLGkpO2NvbnRpbnVlfW8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgaXRlbXMgbXVzdCBiZSB1bmlxdWU6IGVsZW1lbnQgYXQgaW5kZXggJHtpfSBkdXBsaWNhdGVzIHRoZSBvbmUgYXQgaW5kZXggJHtjfWAsaW5wdXQ6cixwYXRoOltpXSxjb250aW51ZTohMH0pfX1pZih0LmNvbnRhaW5zU2NoZW1hKXtjb25zdCBzPXQubWluQ29udGFpbnM/PzEsaT10Lm1heENvbnRhaW5zIT09dm9pZCAwP3QubWF4Q29udGFpbnMrMTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IGE9MDtmb3IoY29uc3QgYyBvZiByKWlmKHQuY29udGFpbnNTY2hlbWEuc2FmZVBhcnNlKGMpLnN1Y2Nlc3MmJisrYT49aSlicmVhazthPHMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7c30gbWF0Y2hpbmcgJHtMYyhzKX07IGZvdW5kICR7YX1gLGlucHV0OnIsY29udGludWU6ITB9KSx0Lm1heENvbnRhaW5zIT09dm9pZCAwJiZhPnQubWF4Q29udGFpbnMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IG1vc3QgJHt0Lm1heENvbnRhaW5zfSBtYXRjaGluZyAke0xjKHQubWF4Q29udGFpbnMpfWAsaW5wdXQ6cixjb250aW51ZTohMH0pfX19KS5waXBlKGUpfWZ1bmN0aW9uIFVjKGUsdCl7aWYoZSE9PSExKXJldHVybiBlPT09dm9pZCAwfHxlPT09ITA/dy5hbnkoKTp0ZShlLHQpfWNvbnN0IFhnPS9eKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZDpbMC01XVxkKD86XC5cZCspPyg/Olp8WystXSg/OlswMV1cZHwyWzAtM10pOlswLTVdXGQpJC87ZnVuY3Rpb24gcmYoZSx0KXtpZihlLm5vdCE9PXZvaWQgMCl7aWYodHlwZW9mIGUubm90PT0ib2JqZWN0IiYmT2JqZWN0LmtleXMoZS5ub3QpLmxlbmd0aD09PTApcmV0dXJuIHcubmV2ZXIoKTt0aHJvdyBuZXcgRXJyb3IoIm5vdCBpcyBub3Qgc3VwcG9ydGVkIGluIFpvZCAoZXhjZXB0IHsgbm90OiB7fSB9IGZvciBuZXZlcikiKX1pZihlLnVuZXZhbHVhdGVkSXRlbXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZEl0ZW1zIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLnVuZXZhbHVhdGVkUHJvcGVydGllcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkUHJvcGVydGllcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5pZiE9PXZvaWQgMHx8ZS50aGVuIT09dm9pZCAwfHxlLmVsc2UhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDb25kaXRpb25hbCBzY2hlbWFzIChpZi90aGVuL2Vsc2UpIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS5kZXBlbmRlbnRTY2hlbWFzIT09dm9pZCAwfHxlLmRlcGVuZGVudFJlcXVpcmVkIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiZGVwZW5kZW50U2NoZW1hcyBhbmQgZGVwZW5kZW50UmVxdWlyZWQgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLiRyZWYpe2NvbnN0IHI9ZS4kcmVmO2lmKHQucmVmcy5oYXMocikpcmV0dXJuIHQucmVmcy5nZXQocik7aWYodC5wcm9jZXNzaW5nLmhhcyhyKSlyZXR1cm4gdy5sYXp5KCgpPT57aWYoIXQucmVmcy5oYXMocikpdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciByZWZlcmVuY2Ugbm90IHJlc29sdmVkOiAke3J9YCk7cmV0dXJuIHQucmVmcy5nZXQocil9KTt0LnByb2Nlc3NpbmcuYWRkKHIpO2NvbnN0IHM9S2cocix0KSxpPXRlKHMsdCk7cmV0dXJuIHQucmVmcy5zZXQocixpKSx0LnByb2Nlc3NpbmcuZGVsZXRlKHIpLGl9aWYoZS5lbnVtIT09dm9pZCAwKXtjb25zdCByPWUuZW51bTtpZih0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiZlLm51bGxhYmxlPT09ITAmJnIubGVuZ3RoPT09MSYmclswXT09PW51bGwpcmV0dXJuIHcubnVsbCgpO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gdy5uZXZlcigpO2lmKHIubGVuZ3RoPT09MSlyZXR1cm4gdy5saXRlcmFsKHJbMF0pO2lmKHIuZXZlcnkoaT0+dHlwZW9mIGk9PSJzdHJpbmciKSlyZXR1cm4gdy5lbnVtKHIpO2NvbnN0IHM9ci5tYXAoaT0+dy5saXRlcmFsKGkpKTtyZXR1cm4gcy5sZW5ndGg8Mj9zWzBdOncudW5pb24oW3NbMF0sc1sxXSwuLi5zLnNsaWNlKDIpXSl9aWYoZS5jb25zdCE9PXZvaWQgMClyZXR1cm4gdy5saXRlcmFsKGUuY29uc3QpO2NvbnN0IG49ZS50eXBlO2lmKEFycmF5LmlzQXJyYXkobikpe2NvbnN0IHI9bi5tYXAocz0+e2NvbnN0IGk9ey4uLmUsdHlwZTpzfTtyZXR1cm4gcmYoaSx0KX0pO3JldHVybiByLmxlbmd0aD09PTA/dy5uZXZlcigpOnIubGVuZ3RoPT09MT9yWzBdOncudW5pb24ocil9aWYoIW4pcmV0dXJuIHcuYW55KCk7bGV0IG87c3dpdGNoKG4pe2Nhc2Uic3RyaW5nIjp7bGV0IHI9dy5zdHJpbmcoKTtpZihlLmZvcm1hdCl7Y29uc3Qgcz1lLmZvcm1hdDtzPT09ImVtYWlsIj9yPXIuY2hlY2sody5lbWFpbCgpKTpzPT09InVyaSJ8fHM9PT0idXJpLXJlZmVyZW5jZSI/cj1yLmNoZWNrKHcudXJsKCkpOnM9PT0idXVpZCJ8fHM9PT0iZ3VpZCI/cj1yLmNoZWNrKHcudXVpZCgpKTpzPT09ImRhdGUtdGltZSI/cj1yLmNoZWNrKHcuaXNvLmRhdGV0aW1lKHtvZmZzZXQ6ITB9KSk6cz09PSJkYXRlIj9yPXIuY2hlY2sody5pc28uZGF0ZSgpKTpzPT09InRpbWUiP3I9ci5jaGVjayh3LnJlZ2V4KFhnKSk6cz09PSJkdXJhdGlvbiI/cj1yLmNoZWNrKHcuaXNvLmR1cmF0aW9uKCkpOnM9PT0iaG9zdG5hbWUiP3I9ci5jaGVjayh3Lmhvc3RuYW1lKCkpOnM9PT0iaXB2NCI/cj1yLmNoZWNrKHcuaXB2NCgpKTpzPT09ImlwdjYiP3I9ci5jaGVjayh3LmlwdjYoKSk6cz09PSJtYWMiP3I9ci5jaGVjayh3Lm1hYygpKTpzPT09ImNpZHIiP3I9ci5jaGVjayh3LmNpZHJ2NCgpKTpzPT09ImNpZHItdjYiP3I9ci5jaGVjayh3LmNpZHJ2NigpKTpzPT09ImJhc2U2NCI/cj1yLmNoZWNrKHcuYmFzZTY0KCkpOnM9PT0iYmFzZTY0dXJsIj9yPXIuY2hlY2sody5iYXNlNjR1cmwoKSk6cz09PSJlMTY0Ij9yPXIuY2hlY2sody5lMTY0KCkpOnM9PT0iY3JlZGl0X2NhcmQiP3I9ci5jaGVjayh3LmNyZWRpdENhcmQoKSk6cz09PSJpYmFuIj9yPXIuY2hlY2sody5pYmFuKCkpOnM9PT0iand0Ij9yPXIuY2hlY2sody5qd3QoKSk6cz09PSJlbW9qaSI/cj1yLmNoZWNrKHcuZW1vamkoKSk6cz09PSJuYW5vaWQiP3I9ci5jaGVjayh3Lm5hbm9pZCgpKTpzPT09ImN1aWQiP3I9ci5jaGVjayh3LmN1aWQoKSk6cz09PSJjdWlkMiI/cj1yLmNoZWNrKHcuY3VpZDIoKSk6cz09PSJ1bGlkIj9yPXIuY2hlY2sody51bGlkKCkpOnM9PT0ieGlkIj9yPXIuY2hlY2sody54aWQoKSk6cz09PSJrc3VpZCImJihyPXIuY2hlY2sody5rc3VpZCgpKSl9dHlwZW9mIGUubWluTGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5taW4oZS5taW5MZW5ndGgpKSx0eXBlb2YgZS5tYXhMZW5ndGg9PSJudW1iZXIiJiYocj1yLm1heChlLm1heExlbmd0aCkpLGUucGF0dGVybiYmKHI9ci5yZWdleChuZXcgUmVnRXhwKGUucGF0dGVybikpKSxvPXI7YnJlYWt9Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6e2xldCByPW49PT0iaW50ZWdlciI/dy5udW1iZXIoKS5pbnQoKTp3Lm51bWJlcigpO3R5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1pbmltdW0hPT0hMCYmKHI9ci5taW4oZS5taW5pbXVtKSksdHlwZW9mIGUubWF4aW11bT09Im51bWJlciImJmUuZXhjbHVzaXZlTWF4aW11bSE9PSEwJiYocj1yLm1heChlLm1heGltdW0pKSx0eXBlb2YgZS5leGNsdXNpdmVNaW5pbXVtPT0ibnVtYmVyIj9yPXIuZ3QoZS5leGNsdXNpdmVNaW5pbXVtKTplLmV4Y2x1c2l2ZU1pbmltdW09PT0hMCYmdHlwZW9mIGUubWluaW11bT09Im51bWJlciImJihyPXIuZ3QoZS5taW5pbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWF4aW11bT09Im51bWJlciI/cj1yLmx0KGUuZXhjbHVzaXZlTWF4aW11bSk6ZS5leGNsdXNpdmVNYXhpbXVtPT09ITAmJnR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiYocj1yLmx0KGUubWF4aW11bSkpLHR5cGVvZiBlLm11bHRpcGxlT2Y9PSJudW1iZXIiJiYocj1yLm11bHRpcGxlT2YoZS5tdWx0aXBsZU9mKSksbz1yO2JyZWFrfWNhc2UiYm9vbGVhbiI6e289dy5ib29sZWFuKCk7YnJlYWt9Y2FzZSJudWxsIjp7bz13Lm51bGwoKTticmVha31jYXNlIm9iamVjdCI6e2NvbnN0IHI9e30scz1lLnByb3BlcnRpZXN8fHt9LGk9bmV3IFNldChlLnJlcXVpcmVkfHxbXSksYT10eXBlb2YgZS5hZGRpdGlvbmFsUHJvcGVydGllcz09Im9iamVjdCI/dGUoZS5hZGRpdGlvbmFsUHJvcGVydGllcyx0KTp2b2lkIDA7Zm9yKGNvbnN0W3AsZ11vZiBPYmplY3QuZW50cmllcyhzKSl7Y29uc3QgYj10ZShnLHQpO0ZlKHIscCxpLmhhcyhwKT9iOmIub3B0aW9uYWwoKSl9aWYoZS5wYXR0ZXJuUHJvcGVydGllcyl7Y29uc3QgcD1lLnBhdHRlcm5Qcm9wZXJ0aWVzLGc9T2JqZWN0LmtleXMocCksYj1bXTtmb3IoY29uc3QgayBvZiBnKXtjb25zdCAkPXRlKHBba10sdCksaj13LnN0cmluZygpLnJlZ2V4KG5ldyBSZWdFeHAoaykpO2IucHVzaCh3Lmxvb3NlUmVjb3JkKGosJCkpfWNvbnN0IHk9W107aWYoT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnkucHVzaCh3Lm9iamVjdChyKS5wYXNzdGhyb3VnaCgpKSx5LnB1c2goLi4uYikseS5sZW5ndGg9PT0wKW89dy5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCk7ZWxzZSBpZih5Lmxlbmd0aD09PTEpbz15WzBdO2Vsc2V7bGV0IGs9dy5pbnRlcnNlY3Rpb24oeVswXSx5WzFdKTtmb3IobGV0ICQ9MjskPHkubGVuZ3RoOyQrKylrPXcuaW50ZXJzZWN0aW9uKGsseVskXSk7bz1rfWlmKGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PT0hMSl7Y29uc3Qgaz1PYmplY3Qua2V5cyhyKSwkPWcubWFwKFI9Pm5ldyBSZWdFeHAoUikpLGo9bztvPW8uY2hlY2soUj0+e2lmKCFDZShSLnZhbHVlKSlyZXR1cm47Y29uc3QgRj1bXTtmb3IoY29uc3Qgb2Ugb2YgT2JqZWN0LmtleXMoUi52YWx1ZSkpay5pbmNsdWRlcyhvZSl8fCQuc29tZShCPT5CLnRlc3Qob2UpKXx8Ri5wdXNoKG9lKTtGLmxlbmd0aCYmUi5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGtleXM6RixpbnB1dDpSLnZhbHVlLGluc3Q6an0pfSl9fWVsc2V7Y29uc3QgcD13Lm9iamVjdChyKTtlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITE/bz1wLnN0cmljdCgpOmE/bz1wLmNhdGNoYWxsKGEpOm89cC5wYXNzdGhyb3VnaCgpfWNvbnN0IGM9ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiZlLnByb3BlcnR5TmFtZXMhPT0hMCx1PXR5cGVvZiBlLm1pblByb3BlcnRpZXM9PSJudW1iZXIiP2UubWluUHJvcGVydGllczp2b2lkIDAsbD10eXBlb2YgZS5tYXhQcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1heFByb3BlcnRpZXM6dm9pZCAwO2lmKGN8fHUhPT12b2lkIDB8fGwhPT12b2lkIDApe2xldCBwO2lmKGMpe2NvbnN0IGc9dHlwZW9mIGUucHJvcGVydHlOYW1lcz09Im9iamVjdCImJmUucHJvcGVydHlOYW1lcy50eXBlPT09dm9pZCAwP3t0eXBlOiJzdHJpbmciLC4uLmUucHJvcGVydHlOYW1lc306ZS5wcm9wZXJ0eU5hbWVzO3A9dGUoZyx0KX1vPVdnKG8se2tleVNjaGVtYTpwLG1pblByb3BlcnRpZXM6dSxtYXhQcm9wZXJ0aWVzOmx9KX1icmVha31jYXNlImFycmF5Ijp7Y29uc3Qgcj1lLnByZWZpeEl0ZW1zLHM9ZS5pdGVtcztpZihyJiZBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1yLm1hcChwPT50ZShwLHQpKSxjPXFjKGEsaSksdT1BcnJheS5pc0FycmF5KHMpP3ZvaWQgMDpVYyhzLHQpLGw9dy50dXBsZShjKTtvPXU/bC5yZXN0KHUpOmwsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKHcubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1zLm1hcChwPT50ZShwLHQpKSxjPXFjKGEsaSksdT1VYyhlLmFkZGl0aW9uYWxJdGVtcyx0KSxsPXcudHVwbGUoYyk7bz11P2wucmVzdCh1KTpsLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayh3Lm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYocyE9PXZvaWQgMCl7Y29uc3QgaT10ZShzLHQpO2xldCBhPXcuYXJyYXkoaSk7dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYoYT1hLm1pbihlLm1pbkl0ZW1zKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYoYT1hLm1heChlLm1heEl0ZW1zKSksbz1hfWVsc2Ugbz13LmFycmF5KHcuYW55KCkpOyhlLnVuaXF1ZUl0ZW1zPT09ITB8fGUuY29udGFpbnMhPT12b2lkIDApJiYobz1RZyhvLHt1bmlxdWVJdGVtczplLnVuaXF1ZUl0ZW1zPT09ITAsY29udGFpbnNTY2hlbWE6ZS5jb250YWlucyE9PXZvaWQgMD90ZShlLmNvbnRhaW5zLHQpOnZvaWQgMCxtaW5Db250YWluczp0eXBlb2YgZS5taW5Db250YWlucz09Im51bWJlciI/ZS5taW5Db250YWluczp2b2lkIDAsbWF4Q29udGFpbnM6dHlwZW9mIGUubWF4Q29udGFpbnM9PSJudW1iZXIiP2UubWF4Q29udGFpbnM6dm9pZCAwfSkpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke259YCl9cmV0dXJuIG99ZnVuY3Rpb24gdGUoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP3cuYW55KCk6dy5uZXZlcigpO2xldCBuPXJmKGUsdCk7Y29uc3Qgbz1lLnR5cGV8fGUuZW51bSE9PXZvaWQgMHx8ZS5jb25zdCE9PXZvaWQgMDtpZihlLmFueU9mJiZBcnJheS5pc0FycmF5KGUuYW55T2YpKXtjb25zdCBhPWUuYW55T2YubWFwKHU9PnRlKHUsdCkpLGM9dy51bmlvbihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUub25lT2YmJkFycmF5LmlzQXJyYXkoZS5vbmVPZikpe2NvbnN0IGE9ZS5vbmVPZi5tYXAodT0+dGUodSx0KSksYz13LnhvcihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obixjKTpjfWlmKGUuYWxsT2YmJkFycmF5LmlzQXJyYXkoZS5hbGxPZikpaWYoZS5hbGxPZi5sZW5ndGg9PT0wKW49bz9uOncuYW55KCk7ZWxzZXtsZXQgYT1vP246dGUoZS5hbGxPZlswXSx0KTtjb25zdCBjPW8/MDoxO2ZvcihsZXQgdT1jO3U8ZS5hbGxPZi5sZW5ndGg7dSsrKWE9dy5pbnRlcnNlY3Rpb24oYSx0ZShlLmFsbE9mW3VdLHQpKTtuPWF9ZS5udWxsYWJsZT09PSEwJiZ0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiYobj13Lm51bGxhYmxlKG4pKSxlLnJlYWRPbmx5PT09ITAmJihuPXcucmVhZG9ubHkobikpLGUuZGVmYXVsdCE9PXZvaWQgMCYmKG49bi5kZWZhdWx0KGUuZGVmYXVsdCkpO2NvbnN0IHI9e30scz1bIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl07Zm9yKGNvbnN0IGEgb2YgcylhIGluIGUmJihyW2FdPWVbYV0pO2NvbnN0IGk9WyJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSJdO2Zvcihjb25zdCBhIG9mIGkpYSBpbiBlJiYoclthXT1lW2FdKTtpZihlLnR5cGU9PT0ib2JqZWN0IiYmZS4kcmVmPT09dm9pZCAwKXtlLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJiFQdChlLnByb3BlcnR5TmFtZXMpJiYoci5wcm9wZXJ0eU5hbWVzPWUucHJvcGVydHlOYW1lcyk7Zm9yKGNvbnN0IGEgb2ZbIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9aWYoZS50eXBlPT09ImFycmF5IiYmZS4kcmVmPT09dm9pZCAwKXtlLmNvbnRhaW5zIT09dm9pZCAwJiYhUHQoZS5jb250YWlucykmJihyLmNvbnRhaW5zPWUuY29udGFpbnMpO2Zvcihjb25zdCBhIG9mWyJ1bmlxdWVJdGVtcyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1mb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhlKSlCZy5oYXMoYSl8fEZlKHIsYSxlW2FdKTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnQucmVnaXN0cnkuYWRkKG4sciksZS5kZXNjcmlwdGlvbiYmKG49bi5kZXNjcmliZShlLmRlc2NyaXB0aW9uKSksbn1mdW5jdGlvbiBzZihlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/dy5hbnkoKTp3Lm5ldmVyKCk7bGV0IG47dHJ5e249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzIil9Y29uc3Qgbz1WZyhuLHQ/LmRlZmF1bHRUYXJnZXQpLHI9bi4kZGVmc3x8bi5kZWZpbml0aW9uc3x8e30scz17dmVyc2lvbjpvLGRlZnM6cixyZWZzOm5ldyBNYXAscHJvY2Vzc2luZzpuZXcgU2V0LHJvb3RTY2hlbWE6bixyZWdpc3RyeTp0Py5yZWdpc3RyeT8/cGV9O3JldHVybiB0ZShuLHMpfWZ1bmN0aW9uIGFmKGUpe3JldHVybiBiaShlLHtvYmplY3Q6dD0+dC5wYXJ0aWFsKCksdW5pb246dD0+e2NvbnN0IG49dC5fem9kLmRlZjtyZXR1cm4gbi5kaXNjcmltaW5hdG9yPT09dm9pZCAwP3Q6SShuLm9wdGlvbnMpfX0pfWZ1bmN0aW9uIGV2KGUsdCl7aWYoIXQ/Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPWUuX3pvZC5kZWY7cmV0dXJuIEgoZSxYKG4se2NoZWNrczpbLi4ubi5jaGVja3M/P1tdLC4uLnRdfSkse3BhcmVudDohMH0pfWZ1bmN0aW9uIGNmKGUpe3JldHVybiBldihlLm91dCxlLmNoZWNrcyl9ZnVuY3Rpb24gdHYoZSl7cmV0dXJuIGUuaW4uX3pvZC50cmFpdHMuaGFzKCIkWm9kVHJhbnNmb3JtIik/Y2YoZSk6ZS5pbn1mdW5jdGlvbiB1ZihlKXtyZXR1cm4gYmkoZSx7cGlwZTp0PT50dih0Ll96b2QuZGVmKSxkZWZhdWx0Oih0LG4pPT5uP3EodC5fem9kLmRlZi5pbm5lclR5cGUpOnQsY2F0Y2g6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGxmKGUpe3JldHVybiBiaShlLHtwaXBlOnQ9PmNmKHQuX3pvZC5kZWYpLHByZWZhdWx0Oih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBudihlKXtyZXR1cm4gZHAoY3QsZSl9ZnVuY3Rpb24gb3YoZSl7cmV0dXJuIGdwKGh0LGUpfWZ1bmN0aW9uIHJ2KGUpe3JldHVybiBTcChtdCxlKX1mdW5jdGlvbiBzdihlKXtyZXR1cm4genAoZ3QsZSl9ZnVuY3Rpb24gaXYoZSl7cmV0dXJuIE5wKHpuLGUpfWNvbnN0IGRmPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxiaWdpbnQ6c3YsYm9vbGVhbjpydixkYXRlOml2LG51bWJlcjpvdixzdHJpbmc6bnZ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksSGM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpvcywkaW5wdXQ6TXMsJG91dHB1dDpqcyxJTlZBTElEOnFzLE5FVkVSOm5zLFRpbWVQcmVjaXNpb246cGksWm9kQW55Ok5vLFpvZEFycmF5OnFvLFpvZEJhc2U2NDpibixab2RCYXNlNjRVUkw6X24sWm9kQmlnSW50Omd0LFpvZEJpZ0ludEZvcm1hdDprbixab2RCb29sZWFuOm10LFpvZENJRFJ2NDpnbixab2RDSURSdjY6dm4sWm9kQ1VJRDp1bixab2RDVUlEMjpsbixab2RDYXRjaDpzcixab2RDb2RlYzprdCxab2RDb21waWxlQXN5bmNFcnJvcjpMcyxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpVcyxab2RDcmVkaXRDYXJkOlJvLFpvZEN1c3RvbTpTdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6T2UsWm9kRGF0ZTp6bixab2REZWZhdWx0OlhvLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpVbyxab2RFMTY0OnluLFpvZEVtYWlsOnJuLFpvZEVtb2ppOmFuLFpvZEVudW06VWUsWm9kRXJyb3I6WHAsWm9kRXhhY3RPcHRpb25hbDpJbixab2RGaWxlOldvLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gZW99LFpvZEZ1bmN0aW9uOm1yLFpvZEdVSUQ6c24sWm9kSUJBTjpDbyxab2RJUHY0OmhuLFpvZElQdjY6bW4sWm9kSVNPRGF0ZTpsdCxab2RJU09EYXRlVGltZTp1dCxab2RJU09EdXJhdGlvbjpwdCxab2RJU09UaW1lOmR0LFpvZEluc3RhbmNlT2Y6X3IsWm9kSW50ZXJzZWN0aW9uOkhvLFpvZElzc3VlQ29kZTplZixab2RKV1Q6d24sWm9kS1NVSUQ6Zm4sWm9kTGF6eTpwcixab2RMaXRlcmFsOktvLFpvZE1BQzpFbyxab2RNYXA6Vm8sWm9kTmFOOmFyLFpvZE5hbm9JRDpjbixab2ROZXZlcjpNbyxab2ROb25PcHRpb25hbDp4bixab2ROdWxsOkFvLFpvZE51bGxhYmxlOlFvLFpvZE51bWJlcjpodCxab2ROdW1iZXJGb3JtYXQ6QWUsWm9kT2JqZWN0OnZ0LFpvZE9wdGlvbmFsOnl0LFpvZFBpcGU6d3QsWm9kUHJlZmF1bHQ6dHIsWm9kUHJlcHJvY2Vzczpjcixab2RQcm9taXNlOmhyLFpvZFJlYWRvbmx5OnVyLFpvZFJlYWxFcnJvcjpzZSxab2RSZWNvcmQ6TGUsWm9kU2V0OkpvLFpvZFN0cmluZzpjdCxab2RTdHJpbmdGb3JtYXQ6Tixab2RTdWNjZXNzOnJyLFpvZFN5bWJvbDpabyxab2RUZW1wbGF0ZUxpdGVyYWw6ZHIsWm9kVHJhbnNmb3JtOkdvLFpvZFR1cGxlOkZvLFpvZFR5cGU6UCxab2RVTElEOmRuLFpvZFVSTDpmdCxab2RVVUlEOnZlLFpvZFVuZGVmaW5lZDpPbyxab2RVbmlvbjpidCxab2RVbmtub3duOmpvLFpvZFZvaWQ6RG8sWm9kWElEOnBuLFpvZFhvcjpMbyxfWm9kU3RyaW5nOm9uLF9kZWZhdWx0OmVyLF9mdW5jdGlvbjpudCxhbnk6JG4sYXJyYXk6UyxiYXNlNjQ6UWksYmFzZTY0dXJsOlhpLGJpZ2ludDpmYSxib29sZWFuOkEsY2F0Y2g6aXIsY2hlY2s6QWEsY2lkcnY0OkdpLGNpZHJ2NjpZaSxjbG9uZTpILGNvZGVjOlJhLGNvZXJjZTpkZixjb21waWxlOkhzLGNvbmZpZzpKLGNvcmU6R3AsY3JlZGl0Q2FyZDp0YSxjdWlkOlVpLGN1aWQyOkhpLGN1cnJlbmN5Q29kZTphYSxjdXN0b206Z3IsZGF0ZTpiYSxkZWNvZGU6emksZGVjb2RlQXN5bmM6UGksZGVlcFBhcnRpYWw6YWYsZGVzY3JpYmU6TmEsZGlzY3JpbWluYXRlZFVuaW9uOlRuLGUxNjQ6ZWEsZW1haWw6Q2ksZW1vamk6cWksZW5jb2RlOiRpLGVuY29kZUFzeW5jOlRpLGVuZHNXaXRoOld0LGVudW06RyxleGFjdE9wdGlvbmFsOllvLGZpbGU6UGEsZmxhdHRlbkVycm9yOmZvLGZsb2F0MzI6dWEsZmxvYXQ2NDpsYSxmb3JtYXRFcnJvcjpobyxmcm9tSlNPTlNjaGVtYTpzZixmdW5jdGlvbjpudCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOkVzLGdldEVycm9yTWFwOm5mLGdsb2JhbFJlZ2lzdHJ5OnBlLGd0OlBlLGd0ZTphZSxndWlkOlppLGhhc2g6Y2EsaGV4OmlhLGhvc3RuYW1lOnNhLGh0dHBVcmw6RGksaWJhbjpuYSxpbmNsdWRlczpKdCxpbnB1dDp1ZixpbnN0YW5jZW9mOk1hLGludDpFdCxpbnQzMjpkYSxpbnQ2NDpoYSxpbnRlcnNlY3Rpb246X3QsaW52ZXJ0Q29kZWM6Q2EsaXB2NDpKaSxpcHY2OldpLGlzbzpMYSxqc29uOnFhLGp3dDpvYSxrZXlvZjpfYSxrc3VpZDpWaSxsYXp5OmZyLGxlbmd0aDppdCxsaXRlcmFsOmgsbG9jYWxlczpOcyxsb29zZU9iamVjdDpXLGxvb3NlUmVjb3JkOlNhLGxvd2VyY2FzZTpCdCxsdDpUZSxsdGU6aWUsbWFjOktpLG1hcDokYSxtYXhMZW5ndGg6c3QsbWF4U2l6ZTpCZSxtZW1vaXplcjp3byxtZXRhOmphLG1pbWU6WXQsbWluTGVuZ3RoOlplLG1pblNpemU6SWUsbXVsdGlwbGVPZjpEZSxuYW46RWEsbmFub2lkOkxpLG5hdGl2ZUVudW06VGEsbmVnYXRpdmU6VG8sbmV2ZXI6cWUsbm9ubmVnYXRpdmU6SW8sbm9ub3B0aW9uYWw6b3Isbm9ucG9zaXRpdmU6UG8sbm9ybWFsaXplOlF0LG51bGw6U24sbnVsbGFibGU6dHQsbnVsbGlzaDpJYSxudW1iZXI6VCxvYmplY3Q6dixvcHRpb25hbDpxLG91dHB1dDpsZixvdmVyd3JpdGU6d2UscGFyc2U6eWkscGFyc2VBc3luYzp3aSxwYXJ0aWFsUmVjb3JkOmthLHBpcGU6UnQscG9zaXRpdmU6em8scHJlZmF1bHQ6bnIscHJlcHJvY2VzczpFbixwcmV0dGlmeUVycm9yOnNzLHByb21pc2U6T2EscHJvcGVydGllczpHdCxwcm9wZXJ0eTp4byxyZWFkb25seTpscixyZWNvcmQ6RSxyZWZpbmU6dnIscmVnZXg6RnQscmVnZXhlczpfbyxyZWdpc3RyeTprbyxzYWZlRGVjb2RlOnhpLHNhZmVEZWNvZGVBc3luYzpSaSxzYWZlRW5jb2RlOklpLHNhZmVFbmNvZGVBc3luYzpFaSxzYWZlUGFyc2U6a2ksc2FmZVBhcnNlQXN5bmM6U2ksc2V0OnphLHNldEVycm9yTWFwOnRmLHNpemU6cnQsc2x1Z2lmeTpubixzdGFydHNXaXRoOkt0LHN0cmljdE9iamVjdDp5YSxzdHJpbmc6ZixzdHJpbmdGb3JtYXQ6cmEsc3RyaW5nYm9vbDpEYSxzdWNjZXNzOnhhLHN1cGVyUmVmaW5lOmJyLHN5bWJvbDpnYSx0ZW1wbGF0ZUxpdGVyYWw6WmEsdG9KU09OU2NoZW1hOnZpLHRvTG93ZXJDYXNlOmVuLHRvVXBwZXJDYXNlOnRuLHRvWm9kOm9vLHRyYW5zZm9ybTpQbix0cmVlaWZ5RXJyb3I6cnMsdHJpbTpYdCx0dXBsZTpCbyx1aW50MzI6cGEsdWludDY0Om1hLHVsaWQ6RmksdW5kZWZpbmVkOmV0LHVuaW9uOkksdW5rbm93bjpaLHVwcGVyY2FzZTpWdCx1cmw6TWksdXRpbDp0cyx1dWlkOk9pLHV1aWR2NDpBaSx1dWlkdjY6TmksdXVpZHY3OmppLHZhbGlkYXRlOmdvLHZhbGlkYXRlQXN5bmM6dm8sdm9pZDp2YSx3aXRoUGFyc2VyOkZzLHhpZDpCaSx4b3I6d2F9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksYXY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpvcywkaW5wdXQ6TXMsJG91dHB1dDpqcyxJTlZBTElEOnFzLE5FVkVSOm5zLFRpbWVQcmVjaXNpb246cGksWm9kQW55Ok5vLFpvZEFycmF5OnFvLFpvZEJhc2U2NDpibixab2RCYXNlNjRVUkw6X24sWm9kQmlnSW50Omd0LFpvZEJpZ0ludEZvcm1hdDprbixab2RCb29sZWFuOm10LFpvZENJRFJ2NDpnbixab2RDSURSdjY6dm4sWm9kQ1VJRDp1bixab2RDVUlEMjpsbixab2RDYXRjaDpzcixab2RDb2RlYzprdCxab2RDb21waWxlQXN5bmNFcnJvcjpMcyxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpVcyxab2RDcmVkaXRDYXJkOlJvLFpvZEN1c3RvbTpTdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6T2UsWm9kRGF0ZTp6bixab2REZWZhdWx0OlhvLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpVbyxab2RFMTY0OnluLFpvZEVtYWlsOnJuLFpvZEVtb2ppOmFuLFpvZEVudW06VWUsWm9kRXJyb3I6WHAsWm9kRXhhY3RPcHRpb25hbDpJbixab2RGaWxlOldvLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gZW99LFpvZEZ1bmN0aW9uOm1yLFpvZEdVSUQ6c24sWm9kSUJBTjpDbyxab2RJUHY0OmhuLFpvZElQdjY6bW4sWm9kSVNPRGF0ZTpsdCxab2RJU09EYXRlVGltZTp1dCxab2RJU09EdXJhdGlvbjpwdCxab2RJU09UaW1lOmR0LFpvZEluc3RhbmNlT2Y6X3IsWm9kSW50ZXJzZWN0aW9uOkhvLFpvZElzc3VlQ29kZTplZixab2RKV1Q6d24sWm9kS1NVSUQ6Zm4sWm9kTGF6eTpwcixab2RMaXRlcmFsOktvLFpvZE1BQzpFbyxab2RNYXA6Vm8sWm9kTmFOOmFyLFpvZE5hbm9JRDpjbixab2ROZXZlcjpNbyxab2ROb25PcHRpb25hbDp4bixab2ROdWxsOkFvLFpvZE51bGxhYmxlOlFvLFpvZE51bWJlcjpodCxab2ROdW1iZXJGb3JtYXQ6QWUsWm9kT2JqZWN0OnZ0LFpvZE9wdGlvbmFsOnl0LFpvZFBpcGU6d3QsWm9kUHJlZmF1bHQ6dHIsWm9kUHJlcHJvY2Vzczpjcixab2RQcm9taXNlOmhyLFpvZFJlYWRvbmx5OnVyLFpvZFJlYWxFcnJvcjpzZSxab2RSZWNvcmQ6TGUsWm9kU2V0OkpvLFpvZFN0cmluZzpjdCxab2RTdHJpbmdGb3JtYXQ6Tixab2RTdWNjZXNzOnJyLFpvZFN5bWJvbDpabyxab2RUZW1wbGF0ZUxpdGVyYWw6ZHIsWm9kVHJhbnNmb3JtOkdvLFpvZFR1cGxlOkZvLFpvZFR5cGU6UCxab2RVTElEOmRuLFpvZFVSTDpmdCxab2RVVUlEOnZlLFpvZFVuZGVmaW5lZDpPbyxab2RVbmlvbjpidCxab2RVbmtub3duOmpvLFpvZFZvaWQ6RG8sWm9kWElEOnBuLFpvZFhvcjpMbyxfWm9kU3RyaW5nOm9uLF9kZWZhdWx0OmVyLF9mdW5jdGlvbjpudCxhbnk6JG4sYXJyYXk6UyxiYXNlNjQ6UWksYmFzZTY0dXJsOlhpLGJpZ2ludDpmYSxib29sZWFuOkEsY2F0Y2g6aXIsY2hlY2s6QWEsY2lkcnY0OkdpLGNpZHJ2NjpZaSxjbG9uZTpILGNvZGVjOlJhLGNvZXJjZTpkZixjb21waWxlOkhzLGNvbmZpZzpKLGNvcmU6R3AsY3JlZGl0Q2FyZDp0YSxjdWlkOlVpLGN1aWQyOkhpLGN1cnJlbmN5Q29kZTphYSxjdXN0b206Z3IsZGF0ZTpiYSxkZWNvZGU6emksZGVjb2RlQXN5bmM6UGksZGVlcFBhcnRpYWw6YWYsZGVmYXVsdDpIYyxkZXNjcmliZTpOYSxkaXNjcmltaW5hdGVkVW5pb246VG4sZTE2NDplYSxlbWFpbDpDaSxlbW9qaTpxaSxlbmNvZGU6JGksZW5jb2RlQXN5bmM6VGksZW5kc1dpdGg6V3QsZW51bTpHLGV4YWN0T3B0aW9uYWw6WW8sZmlsZTpQYSxmbGF0dGVuRXJyb3I6Zm8sZmxvYXQzMjp1YSxmbG9hdDY0OmxhLGZvcm1hdEVycm9yOmhvLGZyb21KU09OU2NoZW1hOnNmLGZ1bmN0aW9uOm50LGdldERpc2NyaW1pbmF0ZWRPcHRpb246RXMsZ2V0RXJyb3JNYXA6bmYsZ2xvYmFsUmVnaXN0cnk6cGUsZ3Q6UGUsZ3RlOmFlLGd1aWQ6WmksaGFzaDpjYSxoZXg6aWEsaG9zdG5hbWU6c2EsaHR0cFVybDpEaSxpYmFuOm5hLGluY2x1ZGVzOkp0LGlucHV0OnVmLGluc3RhbmNlb2Y6TWEsaW50OkV0LGludDMyOmRhLGludDY0OmhhLGludGVyc2VjdGlvbjpfdCxpbnZlcnRDb2RlYzpDYSxpcHY0OkppLGlwdjY6V2ksaXNvOkxhLGpzb246cWEsand0Om9hLGtleW9mOl9hLGtzdWlkOlZpLGxhenk6ZnIsbGVuZ3RoOml0LGxpdGVyYWw6aCxsb2NhbGVzOk5zLGxvb3NlT2JqZWN0OlcsbG9vc2VSZWNvcmQ6U2EsbG93ZXJjYXNlOkJ0LGx0OlRlLGx0ZTppZSxtYWM6S2ksbWFwOiRhLG1heExlbmd0aDpzdCxtYXhTaXplOkJlLG1lbW9pemVyOndvLG1ldGE6amEsbWltZTpZdCxtaW5MZW5ndGg6WmUsbWluU2l6ZTpJZSxtdWx0aXBsZU9mOkRlLG5hbjpFYSxuYW5vaWQ6TGksbmF0aXZlRW51bTpUYSxuZWdhdGl2ZTpUbyxuZXZlcjpxZSxub25uZWdhdGl2ZTpJbyxub25vcHRpb25hbDpvcixub25wb3NpdGl2ZTpQbyxub3JtYWxpemU6UXQsbnVsbDpTbixudWxsYWJsZTp0dCxudWxsaXNoOklhLG51bWJlcjpULG9iamVjdDp2LG9wdGlvbmFsOnEsb3V0cHV0OmxmLG92ZXJ3cml0ZTp3ZSxwYXJzZTp5aSxwYXJzZUFzeW5jOndpLHBhcnRpYWxSZWNvcmQ6a2EscGlwZTpSdCxwb3NpdGl2ZTp6byxwcmVmYXVsdDpucixwcmVwcm9jZXNzOkVuLHByZXR0aWZ5RXJyb3I6c3MscHJvbWlzZTpPYSxwcm9wZXJ0aWVzOkd0LHByb3BlcnR5OnhvLHJlYWRvbmx5OmxyLHJlY29yZDpFLHJlZmluZTp2cixyZWdleDpGdCxyZWdleGVzOl9vLHJlZ2lzdHJ5OmtvLHNhZmVEZWNvZGU6eGksc2FmZURlY29kZUFzeW5jOlJpLHNhZmVFbmNvZGU6SWksc2FmZUVuY29kZUFzeW5jOkVpLHNhZmVQYXJzZTpraSxzYWZlUGFyc2VBc3luYzpTaSxzZXQ6emEsc2V0RXJyb3JNYXA6dGYsc2l6ZTpydCxzbHVnaWZ5Om5uLHN0YXJ0c1dpdGg6S3Qsc3RyaWN0T2JqZWN0OnlhLHN0cmluZzpmLHN0cmluZ0Zvcm1hdDpyYSxzdHJpbmdib29sOkRhLHN1Y2Nlc3M6eGEsc3VwZXJSZWZpbmU6YnIsc3ltYm9sOmdhLHRlbXBsYXRlTGl0ZXJhbDpaYSx0b0pTT05TY2hlbWE6dmksdG9Mb3dlckNhc2U6ZW4sdG9VcHBlckNhc2U6dG4sdG9ab2Q6b28sdHJhbnNmb3JtOlBuLHRyZWVpZnlFcnJvcjpycyx0cmltOlh0LHR1cGxlOkJvLHVpbnQzMjpwYSx1aW50NjQ6bWEsdWxpZDpGaSx1bmRlZmluZWQ6ZXQsdW5pb246SSx1bmtub3duOlosdXBwZXJjYXNlOlZ0LHVybDpNaSx1dGlsOnRzLHV1aWQ6T2ksdXVpZHY0OkFpLHV1aWR2NjpOaSx1dWlkdjc6amksdmFsaWRhdGU6Z28sdmFsaWRhdGVBc3luYzp2byx2b2lkOnZhLHdpdGhQYXJzZXI6RnMseGlkOkJpLHhvcjp3YSx6OkhjfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGplPSJpby5tb2RlbGNvbnRleHRwcm90b2NvbC9yZWxhdGVkLXRhc2siLHlyPSIyLjAiLFY9Z3IoZT0+ZSE9PW51bGwmJih0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSkscGY9SShbZigpLFQoKS5pbnQoKV0pLGZmPWYoKTtXKHt0dGw6VCgpLm9wdGlvbmFsKCkscG9sbEludGVydmFsOlQoKS5vcHRpb25hbCgpfSk7Y29uc3QgY3Y9dih7dHRsOlQoKS5vcHRpb25hbCgpfSksdXY9dih7dGFza0lkOmYoKX0pLFVhPVcoe3Byb2dyZXNzVG9rZW46cGYub3B0aW9uYWwoKSxbamVdOnV2Lm9wdGlvbmFsKCl9KSx1ZT12KHtfbWV0YTpVYS5vcHRpb25hbCgpfSksUm49dWUuZXh0ZW5kKHt0YXNrOmN2Lm9wdGlvbmFsKCl9KSxsdj1lPT5Sbi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxZPXYoe21ldGhvZDpmKCkscGFyYW1zOnVlLmxvb3NlKCkub3B0aW9uYWwoKX0pLG1lPXYoe19tZXRhOlVhLm9wdGlvbmFsKCl9KSxnZT12KHttZXRob2Q6ZigpLHBhcmFtczptZS5sb29zZSgpLm9wdGlvbmFsKCl9KSxRPVcoe19tZXRhOlVhLm9wdGlvbmFsKCl9KSxDbj1JKFtmKCksVCgpLmludCgpXSksaGY9dih7anNvbnJwYzpoKHlyKSxpZDpDbiwuLi5ZLnNoYXBlfSkuc3RyaWN0KCksRmM9ZT0+aGYuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsbWY9dih7anNvbnJwYzpoKHlyKSwuLi5nZS5zaGFwZX0pLnN0cmljdCgpLGR2PWU9Pm1mLnNhZmVQYXJzZShlKS5zdWNjZXNzLEhhPXYoe2pzb25ycGM6aCh5ciksaWQ6Q24scmVzdWx0OlF9KS5zdHJpY3QoKSxCbj1lPT5IYS5zYWZlUGFyc2UoZSkuc3VjY2Vzczt2YXIgTTsoZnVuY3Rpb24oZSl7ZVtlLkNvbm5lY3Rpb25DbG9zZWQ9LTMyZTNdPSJDb25uZWN0aW9uQ2xvc2VkIixlW2UuUmVxdWVzdFRpbWVvdXQ9LTMyMDAxXT0iUmVxdWVzdFRpbWVvdXQiLGVbZS5QYXJzZUVycm9yPS0zMjcwMF09IlBhcnNlRXJyb3IiLGVbZS5JbnZhbGlkUmVxdWVzdD0tMzI2MDBdPSJJbnZhbGlkUmVxdWVzdCIsZVtlLk1ldGhvZE5vdEZvdW5kPS0zMjYwMV09Ik1ldGhvZE5vdEZvdW5kIixlW2UuSW52YWxpZFBhcmFtcz0tMzI2MDJdPSJJbnZhbGlkUGFyYW1zIixlW2UuSW50ZXJuYWxFcnJvcj0tMzI2MDNdPSJJbnRlcm5hbEVycm9yIixlW2UuVXJsRWxpY2l0YXRpb25SZXF1aXJlZD0tMzIwNDJdPSJVcmxFbGljaXRhdGlvblJlcXVpcmVkIn0pKE18fChNPXt9KSk7Y29uc3QgRmE9dih7anNvbnJwYzpoKHlyKSxpZDpDbi5vcHRpb25hbCgpLGVycm9yOnYoe2NvZGU6VCgpLmludCgpLG1lc3NhZ2U6ZigpLGRhdGE6WigpLm9wdGlvbmFsKCl9KX0pLnN0cmljdCgpLHB2PWU9PkZhLnNhZmVQYXJzZShlKS5zdWNjZXNzLGZ2PUkoW2hmLG1mLEhhLEZhXSk7SShbSGEsRmFdKTtjb25zdCBCYT1RLnN0cmljdCgpLGh2PW1lLmV4dGVuZCh7cmVxdWVzdElkOkNuLm9wdGlvbmFsKCkscmVhc29uOmYoKS5vcHRpb25hbCgpfSksVmE9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6aHZ9KSxtdj12KHtzcmM6ZigpLG1pbWVUeXBlOmYoKS5vcHRpb25hbCgpLHNpemVzOlMoZigpKS5vcHRpb25hbCgpLHRoZW1lOkcoWyJsaWdodCIsImRhcmsiXSkub3B0aW9uYWwoKX0pLFpuPXYoe2ljb25zOlMobXYpLm9wdGlvbmFsKCl9KSxvdD12KHtuYW1lOmYoKSx0aXRsZTpmKCkub3B0aW9uYWwoKX0pLHdyPW90LmV4dGVuZCh7Li4ub3Quc2hhcGUsLi4uWm4uc2hhcGUsdmVyc2lvbjpmKCksd2Vic2l0ZVVybDpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKX0pLGd2PV90KHYoe2FwcGx5RGVmYXVsdHM6QSgpLm9wdGlvbmFsKCl9KSxFKGYoKSxaKCkpKSx2dj1FbihlPT5lJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wP3tmb3JtOnt9fTplLF90KHYoe2Zvcm06Z3Yub3B0aW9uYWwoKSx1cmw6Vi5vcHRpb25hbCgpfSksRShmKCksWigpKS5vcHRpb25hbCgpKSksYnY9Vyh7bGlzdDpWLm9wdGlvbmFsKCksY2FuY2VsOlYub3B0aW9uYWwoKSxyZXF1ZXN0czpXKHtzYW1wbGluZzpXKHtjcmVhdGVNZXNzYWdlOlYub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksZWxpY2l0YXRpb246Vyh7Y3JlYXRlOlYub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksX3Y9Vyh7bGlzdDpWLm9wdGlvbmFsKCksY2FuY2VsOlYub3B0aW9uYWwoKSxyZXF1ZXN0czpXKHt0b29sczpXKHtjYWxsOlYub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSkseXY9dih7ZXhwZXJpbWVudGFsOkUoZigpLFYpLm9wdGlvbmFsKCksc2FtcGxpbmc6dih7Y29udGV4dDpWLm9wdGlvbmFsKCksdG9vbHM6Vi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjp2di5vcHRpb25hbCgpLHJvb3RzOnYoe2xpc3RDaGFuZ2VkOkEoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpidi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6RShmKCksVikub3B0aW9uYWwoKX0pLHd2PXVlLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmYoKSxjYXBhYmlsaXRpZXM6eXYsY2xpZW50SW5mbzp3cn0pLGt2PVkuZXh0ZW5kKHttZXRob2Q6aCgiaW5pdGlhbGl6ZSIpLHBhcmFtczp3dn0pLFN2PXYoe2V4cGVyaW1lbnRhbDpFKGYoKSxWKS5vcHRpb25hbCgpLGxvZ2dpbmc6Vi5vcHRpb25hbCgpLGNvbXBsZXRpb25zOlYub3B0aW9uYWwoKSxwcm9tcHRzOnYoe2xpc3RDaGFuZ2VkOkEoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxyZXNvdXJjZXM6dih7c3Vic2NyaWJlOkEoKS5vcHRpb25hbCgpLGxpc3RDaGFuZ2VkOkEoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0b29sczp2KHtsaXN0Q2hhbmdlZDpBKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6X3Yub3B0aW9uYWwoKSxleHRlbnNpb25zOkUoZigpLFYpLm9wdGlvbmFsKCl9KSwkdj1RLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmYoKSxjYXBhYmlsaXRpZXM6U3Ysc2VydmVySW5mbzp3cixpbnN0cnVjdGlvbnM6ZigpLm9wdGlvbmFsKCl9KSx6dj1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOm1lLm9wdGlvbmFsKCl9KSxrcj1ZLmV4dGVuZCh7bWV0aG9kOmgoInBpbmciKSxwYXJhbXM6dWUub3B0aW9uYWwoKX0pLFR2PXYoe3Byb2dyZXNzOlQoKSx0b3RhbDpxKFQoKSksbWVzc2FnZTpxKGYoKSl9KSxQdj12KHsuLi5tZS5zaGFwZSwuLi5Udi5zaGFwZSxwcm9ncmVzc1Rva2VuOnBmfSksSmE9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9wcm9ncmVzcyIpLHBhcmFtczpQdn0pLEl2PXVlLmV4dGVuZCh7Y3Vyc29yOmZmLm9wdGlvbmFsKCl9KSxPbj1ZLmV4dGVuZCh7cGFyYW1zOkl2Lm9wdGlvbmFsKCl9KSxBbj1RLmV4dGVuZCh7bmV4dEN1cnNvcjpmZi5vcHRpb25hbCgpfSkseHY9RyhbIndvcmtpbmciLCJpbnB1dF9yZXF1aXJlZCIsImNvbXBsZXRlZCIsImZhaWxlZCIsImNhbmNlbGxlZCJdKSxObj12KHt0YXNrSWQ6ZigpLHN0YXR1czp4dix0dGw6SShbVCgpLFNuKCldKSxjcmVhdGVkQXQ6ZigpLGxhc3RVcGRhdGVkQXQ6ZigpLHBvbGxJbnRlcnZhbDpxKFQoKSksc3RhdHVzTWVzc2FnZTpxKGYoKSl9KSxLYT1RLmV4dGVuZCh7dGFzazpObn0pLEV2PW1lLm1lcmdlKE5uKSx0bz1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIpLHBhcmFtczpFdn0pLFdhPVkuZXh0ZW5kKHttZXRob2Q6aCgidGFza3MvZ2V0IikscGFyYW1zOnVlLmV4dGVuZCh7dGFza0lkOmYoKX0pfSksR2E9US5tZXJnZShObiksWWE9WS5leHRlbmQoe21ldGhvZDpoKCJ0YXNrcy9yZXN1bHQiKSxwYXJhbXM6dWUuZXh0ZW5kKHt0YXNrSWQ6ZigpfSl9KTtRLmxvb3NlKCk7Y29uc3QgUWE9T24uZXh0ZW5kKHttZXRob2Q6aCgidGFza3MvbGlzdCIpfSksWGE9QW4uZXh0ZW5kKHt0YXNrczpTKE5uKX0pLGVjPVkuZXh0ZW5kKHttZXRob2Q6aCgidGFza3MvY2FuY2VsIikscGFyYW1zOnVlLmV4dGVuZCh7dGFza0lkOmYoKX0pfSksUnY9US5tZXJnZShObiksZ2Y9dih7dXJpOmYoKSxtaW1lVHlwZTpxKGYoKSksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksdmY9Z2YuZXh0ZW5kKHt0ZXh0OmYoKX0pLHRjPWYoKS5yZWZpbmUoZT0+e3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19LHttZXNzYWdlOiJJbnZhbGlkIEJhc2U2NCBzdHJpbmcifSksYmY9Z2YuZXh0ZW5kKHtibG9iOnRjfSksam49RyhbInVzZXIiLCJhc3Npc3RhbnQiXSksJHQ9dih7YXVkaWVuY2U6Uyhqbikub3B0aW9uYWwoKSxwcmlvcml0eTpUKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGxhc3RNb2RpZmllZDpvZih7b2Zmc2V0OiEwfSkub3B0aW9uYWwoKX0pLF9mPXYoey4uLm90LnNoYXBlLC4uLlpuLnNoYXBlLHVyaTpmKCksZGVzY3JpcHRpb246cShmKCkpLG1pbWVUeXBlOnEoZigpKSxzaXplOnEoVCgpKSxhbm5vdGF0aW9uczokdC5vcHRpb25hbCgpLF9tZXRhOnEoVyh7fSkpfSksQ3Y9dih7Li4ub3Quc2hhcGUsLi4uWm4uc2hhcGUsdXJpVGVtcGxhdGU6ZigpLGRlc2NyaXB0aW9uOnEoZigpKSxtaW1lVHlwZTpxKGYoKSksYW5ub3RhdGlvbnM6JHQub3B0aW9uYWwoKSxfbWV0YTpxKFcoe30pKX0pLFp2PU9uLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy9saXN0Iil9KSx5Zj1Bbi5leHRlbmQoe3Jlc291cmNlczpTKF9mKX0pLE92PU9uLmV4dGVuZCh7bWV0aG9kOmgoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksQXY9QW4uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpTKEN2KX0pLG5jPXVlLmV4dGVuZCh7dXJpOmYoKX0pLE52PW5jLGp2PVkuZXh0ZW5kKHttZXRob2Q6aCgicmVzb3VyY2VzL3JlYWQiKSxwYXJhbXM6TnZ9KSx3Zj1RLmV4dGVuZCh7Y29udGVudHM6UyhJKFt2ZixiZl0pKX0pLE12PWdlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczptZS5vcHRpb25hbCgpfSksRHY9bmMscXY9WS5leHRlbmQoe21ldGhvZDpoKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOkR2fSksTHY9bmMsVXY9WS5leHRlbmQoe21ldGhvZDpoKCJyZXNvdXJjZXMvdW5zdWJzY3JpYmUiKSxwYXJhbXM6THZ9KSxIdj1tZS5leHRlbmQoe3VyaTpmKCl9KSxGdj1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL3Jlc291cmNlcy91cGRhdGVkIikscGFyYW1zOkh2fSksQnY9dih7bmFtZTpmKCksZGVzY3JpcHRpb246cShmKCkpLHJlcXVpcmVkOnEoQSgpKX0pLFZ2PXYoey4uLm90LnNoYXBlLC4uLlpuLnNoYXBlLGRlc2NyaXB0aW9uOnEoZigpKSxhcmd1bWVudHM6cShTKEJ2KSksX21ldGE6cShXKHt9KSl9KSxKdj1Pbi5leHRlbmQoe21ldGhvZDpoKCJwcm9tcHRzL2xpc3QiKX0pLEt2PUFuLmV4dGVuZCh7cHJvbXB0czpTKFZ2KX0pLFd2PXVlLmV4dGVuZCh7bmFtZTpmKCksYXJndW1lbnRzOkUoZigpLGYoKSkub3B0aW9uYWwoKX0pLEd2PVkuZXh0ZW5kKHttZXRob2Q6aCgicHJvbXB0cy9nZXQiKSxwYXJhbXM6V3Z9KSxvYz12KHt0eXBlOmgoInRleHQiKSx0ZXh0OmYoKSxhbm5vdGF0aW9uczokdC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLHJjPXYoe3R5cGU6aCgiaW1hZ2UiKSxkYXRhOnRjLG1pbWVUeXBlOmYoKSxhbm5vdGF0aW9uczokdC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLHNjPXYoe3R5cGU6aCgiYXVkaW8iKSxkYXRhOnRjLG1pbWVUeXBlOmYoKSxhbm5vdGF0aW9uczokdC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLFl2PXYoe3R5cGU6aCgidG9vbF91c2UiKSxuYW1lOmYoKSxpZDpmKCksaW5wdXQ6RShmKCksWigpKSxfbWV0YTpFKGYoKSxaKCkpLm9wdGlvbmFsKCl9KSxrZj12KHt0eXBlOmgoInJlc291cmNlIikscmVzb3VyY2U6SShbdmYsYmZdKSxhbm5vdGF0aW9uczokdC5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLFNmPV9mLmV4dGVuZCh7dHlwZTpoKCJyZXNvdXJjZV9saW5rIil9KSxNbj1JKFtvYyxyYyxzYyxTZixrZl0pLFF2PXYoe3JvbGU6am4sY29udGVudDpNbn0pLFh2PVEuZXh0ZW5kKHtkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtZXNzYWdlczpTKFF2KX0pLGViPWdlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvcHJvbXB0cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6bWUub3B0aW9uYWwoKX0pLHRiPXYoe3RpdGxlOmYoKS5vcHRpb25hbCgpLHJlYWRPbmx5SGludDpBKCkub3B0aW9uYWwoKSxkZXN0cnVjdGl2ZUhpbnQ6QSgpLm9wdGlvbmFsKCksaWRlbXBvdGVudEhpbnQ6QSgpLm9wdGlvbmFsKCksb3BlbldvcmxkSGludDpBKCkub3B0aW9uYWwoKX0pLG5iPXYoe3Rhc2tTdXBwb3J0OkcoWyJyZXF1aXJlZCIsIm9wdGlvbmFsIiwiZm9yYmlkZGVuIl0pLm9wdGlvbmFsKCl9KSxpYz12KHsuLi5vdC5zaGFwZSwuLi5abi5zaGFwZSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxpbnB1dFNjaGVtYTp2KHt0eXBlOmgoIm9iamVjdCIpLHByb3BlcnRpZXM6RShmKCksVikub3B0aW9uYWwoKSxyZXF1aXJlZDpTKGYoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKFooKSksb3V0cHV0U2NoZW1hOnYoe3R5cGU6aCgib2JqZWN0IikscHJvcGVydGllczpFKGYoKSxWKS5vcHRpb25hbCgpLHJlcXVpcmVkOlMoZigpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoWigpKS5vcHRpb25hbCgpLGFubm90YXRpb25zOnRiLm9wdGlvbmFsKCksZXhlY3V0aW9uOm5iLm9wdGlvbmFsKCksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksJGY9T24uZXh0ZW5kKHttZXRob2Q6aCgidG9vbHMvbGlzdCIpfSksb2I9QW4uZXh0ZW5kKHt0b29sczpTKGljKX0pLFNyPVEuZXh0ZW5kKHtjb250ZW50OlMoTW4pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OkUoZigpLFooKSkub3B0aW9uYWwoKSxpc0Vycm9yOkEoKS5vcHRpb25hbCgpfSk7U3Iub3IoUS5leHRlbmQoe3Rvb2xSZXN1bHQ6WigpfSkpO2NvbnN0IHJiPVJuLmV4dGVuZCh7bmFtZTpmKCksYXJndW1lbnRzOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLHpmPVkuZXh0ZW5kKHttZXRob2Q6aCgidG9vbHMvY2FsbCIpLHBhcmFtczpyYn0pLHNiPWdlLmV4dGVuZCh7bWV0aG9kOmgoIm5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOm1lLm9wdGlvbmFsKCl9KTt2KHthdXRvUmVmcmVzaDpBKCkuZGVmYXVsdCghMCksZGVib3VuY2VNczpUKCkuaW50KCkubm9ubmVnYXRpdmUoKS5kZWZhdWx0KDMwMCl9KTtjb25zdCBUZj1HKFsiZGVidWciLCJpbmZvIiwibm90aWNlIiwid2FybmluZyIsImVycm9yIiwiY3JpdGljYWwiLCJhbGVydCIsImVtZXJnZW5jeSJdKSxpYj11ZS5leHRlbmQoe2xldmVsOlRmfSksYWI9WS5leHRlbmQoe21ldGhvZDpoKCJsb2dnaW5nL3NldExldmVsIikscGFyYW1zOmlifSksY2I9bWUuZXh0ZW5kKHtsZXZlbDpUZixsb2dnZXI6ZigpLm9wdGlvbmFsKCksZGF0YTpaKCl9KSx1Yj1nZS5leHRlbmQoe21ldGhvZDpoKCJub3RpZmljYXRpb25zL21lc3NhZ2UiKSxwYXJhbXM6Y2J9KSxsYj12KHtuYW1lOmYoKS5vcHRpb25hbCgpfSksZGI9dih7aGludHM6UyhsYikub3B0aW9uYWwoKSxjb3N0UHJpb3JpdHk6VCgpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxzcGVlZFByaW9yaXR5OlQoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksaW50ZWxsaWdlbmNlUHJpb3JpdHk6VCgpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKX0pLHBiPXYoe21vZGU6RyhbImF1dG8iLCJyZXF1aXJlZCIsIm5vbmUiXSkub3B0aW9uYWwoKX0pLGZiPXYoe3R5cGU6aCgidG9vbF9yZXN1bHQiKSx0b29sVXNlSWQ6ZigpLmRlc2NyaWJlKCJUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHRvb2wgY2FsbC4iKSxjb250ZW50OlMoTW4pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50OnYoe30pLmxvb3NlKCkub3B0aW9uYWwoKSxpc0Vycm9yOkEoKS5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLGhiPVRuKCJ0eXBlIixbb2MscmMsc2NdKSxubz1UbigidHlwZSIsW29jLHJjLHNjLFl2LGZiXSksbWI9dih7cm9sZTpqbixjb250ZW50OkkoW25vLFMobm8pXSksX21ldGE6RShmKCksWigpKS5vcHRpb25hbCgpfSksZ2I9Um4uZXh0ZW5kKHttZXNzYWdlczpTKG1iKSxtb2RlbFByZWZlcmVuY2VzOmRiLm9wdGlvbmFsKCksc3lzdGVtUHJvbXB0OmYoKS5vcHRpb25hbCgpLGluY2x1ZGVDb250ZXh0OkcoWyJub25lIiwidGhpc1NlcnZlciIsImFsbFNlcnZlcnMiXSkub3B0aW9uYWwoKSx0ZW1wZXJhdHVyZTpUKCkub3B0aW9uYWwoKSxtYXhUb2tlbnM6VCgpLmludCgpLHN0b3BTZXF1ZW5jZXM6UyhmKCkpLm9wdGlvbmFsKCksbWV0YWRhdGE6Vi5vcHRpb25hbCgpLHRvb2xzOlMoaWMpLm9wdGlvbmFsKCksdG9vbENob2ljZTpwYi5vcHRpb25hbCgpfSksdmI9WS5leHRlbmQoe21ldGhvZDpoKCJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIikscGFyYW1zOmdifSksUGY9US5leHRlbmQoe21vZGVsOmYoKSxzdG9wUmVhc29uOnEoRyhbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiXSkub3IoZigpKSkscm9sZTpqbixjb250ZW50OmhifSksSWY9US5leHRlbmQoe21vZGVsOmYoKSxzdG9wUmVhc29uOnEoRyhbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiLCJ0b29sVXNlIl0pLm9yKGYoKSkpLHJvbGU6am4sY29udGVudDpJKFtubyxTKG5vKV0pfSksYmI9dih7dHlwZTpoKCJib29sZWFuIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksZGVmYXVsdDpBKCkub3B0aW9uYWwoKX0pLF9iPXYoe3R5cGU6aCgic3RyaW5nIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksbWluTGVuZ3RoOlQoKS5vcHRpb25hbCgpLG1heExlbmd0aDpUKCkub3B0aW9uYWwoKSxmb3JtYXQ6RyhbImVtYWlsIiwidXJpIiwiZGF0ZSIsImRhdGUtdGltZSJdKS5vcHRpb25hbCgpLGRlZmF1bHQ6ZigpLm9wdGlvbmFsKCl9KSx5Yj12KHt0eXBlOkcoWyJudW1iZXIiLCJpbnRlZ2VyIl0pLHRpdGxlOmYoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmYoKS5vcHRpb25hbCgpLG1pbmltdW06VCgpLm9wdGlvbmFsKCksbWF4aW11bTpUKCkub3B0aW9uYWwoKSxkZWZhdWx0OlQoKS5vcHRpb25hbCgpfSksd2I9dih7dHlwZTpoKCJzdHJpbmciKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxlbnVtOlMoZigpKSxkZWZhdWx0OmYoKS5vcHRpb25hbCgpfSksa2I9dih7dHlwZTpoKCJzdHJpbmciKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxvbmVPZjpTKHYoe2NvbnN0OmYoKSx0aXRsZTpmKCl9KSksZGVmYXVsdDpmKCkub3B0aW9uYWwoKX0pLFNiPXYoe3R5cGU6aCgic3RyaW5nIiksdGl0bGU6ZigpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246ZigpLm9wdGlvbmFsKCksZW51bTpTKGYoKSksZW51bU5hbWVzOlMoZigpKS5vcHRpb25hbCgpLGRlZmF1bHQ6ZigpLm9wdGlvbmFsKCl9KSwkYj1JKFt3YixrYl0pLHpiPXYoe3R5cGU6aCgiYXJyYXkiKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtaW5JdGVtczpUKCkub3B0aW9uYWwoKSxtYXhJdGVtczpUKCkub3B0aW9uYWwoKSxpdGVtczp2KHt0eXBlOmgoInN0cmluZyIpLGVudW06UyhmKCkpfSksZGVmYXVsdDpTKGYoKSkub3B0aW9uYWwoKX0pLFRiPXYoe3R5cGU6aCgiYXJyYXkiKSx0aXRsZTpmKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpmKCkub3B0aW9uYWwoKSxtaW5JdGVtczpUKCkub3B0aW9uYWwoKSxtYXhJdGVtczpUKCkub3B0aW9uYWwoKSxpdGVtczp2KHthbnlPZjpTKHYoe2NvbnN0OmYoKSx0aXRsZTpmKCl9KSl9KSxkZWZhdWx0OlMoZigpKS5vcHRpb25hbCgpfSksUGI9SShbemIsVGJdKSxJYj1JKFtTYiwkYixQYl0pLHhiPUkoW0liLGJiLF9iLHliXSksRWI9Um4uZXh0ZW5kKHttb2RlOmgoImZvcm0iKS5vcHRpb25hbCgpLG1lc3NhZ2U6ZigpLHJlcXVlc3RlZFNjaGVtYTp2KHt0eXBlOmgoIm9iamVjdCIpLHByb3BlcnRpZXM6RShmKCkseGIpLHJlcXVpcmVkOlMoZigpKS5vcHRpb25hbCgpfSl9KSxSYj1Sbi5leHRlbmQoe21vZGU6aCgidXJsIiksbWVzc2FnZTpmKCksZWxpY2l0YXRpb25JZDpmKCksdXJsOmYoKS51cmwoKX0pLENiPUkoW0ViLFJiXSksWmI9WS5leHRlbmQoe21ldGhvZDpoKCJlbGljaXRhdGlvbi9jcmVhdGUiKSxwYXJhbXM6Q2J9KSxPYj1tZS5leHRlbmQoe2VsaWNpdGF0aW9uSWQ6ZigpfSksQWI9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9lbGljaXRhdGlvbi9jb21wbGV0ZSIpLHBhcmFtczpPYn0pLE5iPVEuZXh0ZW5kKHthY3Rpb246RyhbImFjY2VwdCIsImRlY2xpbmUiLCJjYW5jZWwiXSksY29udGVudDpFbihlPT5lPT09bnVsbD92b2lkIDA6ZSxFKGYoKSxJKFtmKCksVCgpLEEoKSxTKGYoKSldKSkub3B0aW9uYWwoKSl9KSxqYj12KHt0eXBlOmgoInJlZi9yZXNvdXJjZSIpLHVyaTpmKCl9KSxNYj12KHt0eXBlOmgoInJlZi9wcm9tcHQiKSxuYW1lOmYoKX0pLERiPXVlLmV4dGVuZCh7cmVmOkkoW01iLGpiXSksYXJndW1lbnQ6dih7bmFtZTpmKCksdmFsdWU6ZigpfSksY29udGV4dDp2KHthcmd1bWVudHM6RShmKCksZigpKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLHFiPVkuZXh0ZW5kKHttZXRob2Q6aCgiY29tcGxldGlvbi9jb21wbGV0ZSIpLHBhcmFtczpEYn0pLExiPVEuZXh0ZW5kKHtjb21wbGV0aW9uOlcoe3ZhbHVlczpTKGYoKSkubWF4KDEwMCksdG90YWw6cShUKCkuaW50KCkpLGhhc01vcmU6cShBKCkpfSl9KSxVYj12KHt1cmk6ZigpLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKSxuYW1lOmYoKS5vcHRpb25hbCgpLF9tZXRhOkUoZigpLFooKSkub3B0aW9uYWwoKX0pLEhiPVkuZXh0ZW5kKHttZXRob2Q6aCgicm9vdHMvbGlzdCIpLHBhcmFtczp1ZS5vcHRpb25hbCgpfSksRmI9US5leHRlbmQoe3Jvb3RzOlMoVWIpfSksQmI9Z2UuZXh0ZW5kKHttZXRob2Q6aCgibm90aWZpY2F0aW9ucy9yb290cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6bWUub3B0aW9uYWwoKX0pO0koW2tyLGt2LHFiLGFiLEd2LEp2LFp2LE92LGp2LHF2LFV2LHpmLCRmLFdhLFlhLFFhLGVjXSk7SShbVmEsSmEsenYsQmIsdG9dKTtJKFtCYSxQZixJZixOYixGYixHYSxYYSxLYV0pO0koW2tyLHZiLFpiLEhiLFdhLFlhLFFhLGVjXSk7SShbVmEsSmEsdWIsRnYsTXYsc2IsZWIsdG8sQWJdKTtJKFtCYSwkdixMYixYdixLdix5ZixBdix3ZixTcixvYixHYSxYYSxLYV0pO2NsYXNzIEMgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4sbyl7c3VwZXIoYE1DUCBlcnJvciAke3R9OiAke259YCksdGhpcy5jb2RlPXQsdGhpcy5kYXRhPW8sdGhpcy5uYW1lPSJNY3BFcnJvciJ9c3RhdGljIGZyb21FcnJvcih0LG4sbyl7aWYodD09PU0uVXJsRWxpY2l0YXRpb25SZXF1aXJlZCYmbyl7Y29uc3Qgcj1vO2lmKHIuZWxpY2l0YXRpb25zKXJldHVybiBuZXcgVmIoci5lbGljaXRhdGlvbnMsbil9cmV0dXJuIG5ldyBDKHQsbixvKX19Y2xhc3MgVmIgZXh0ZW5kcyBDe2NvbnN0cnVjdG9yKHQsbj1gVVJMIGVsaWNpdGF0aW9uJHt0Lmxlbmd0aD4xPyJzIjoiIn0gcmVxdWlyZWRgKXtzdXBlcihNLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQsbix7ZWxpY2l0YXRpb25zOnR9KX1nZXQgZWxpY2l0YXRpb25zKCl7cmV0dXJuIHRoaXMuZGF0YT8uZWxpY2l0YXRpb25zPz9bXX19ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIGU9PT0iY29tcGxldGVkInx8ZT09PSJmYWlsZWQifHxlPT09ImNhbmNlbGxlZCJ9bmV3IFNldCgiQUJDREVGR0hJSktMTU5PUFFSU1RVVlhZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXowMTIzNDU2Nzg5Iik7ZnVuY3Rpb24gQmMoZSl7Y29uc3Qgbj1qZyhlKT8ubWV0aG9kO2lmKCFuKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIGlzIG1pc3NpbmcgYSBtZXRob2QgbGl0ZXJhbCIpO2NvbnN0IG89TWcobik7aWYodHlwZW9mIG8hPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiU2NoZW1hIG1ldGhvZCBsaXRlcmFsIG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gb31mdW5jdGlvbiBWYyhlLHQpe2NvbnN0IG49WXAoZSx0KTtpZighbi5zdWNjZXNzKXRocm93IG4uZXJyb3I7cmV0dXJuIG4uZGF0YX1jb25zdCBKYj02ZTQ7Y2xhc3MgS2J7Y29uc3RydWN0b3IodCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX3JlcXVlc3RNZXNzYWdlSWQ9MCx0aGlzLl9yZXF1ZXN0SGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnM9bmV3IE1hcCx0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzPW5ldyBNYXAsdGhpcy5fdGltZW91dEluZm89bmV3IE1hcCx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucz1uZXcgU2V0LHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RSZXNvbHZlcnM9bmV3IE1hcCx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoVmEsbj0+e3RoaXMuX29uY2FuY2VsKG4pfSksdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKEphLG49Pnt0aGlzLl9vbnByb2dyZXNzKG4pfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihrcixuPT4oe30pKSx0aGlzLl90YXNrU3RvcmU9dD8udGFza1N0b3JlLHRoaXMuX3Rhc2tNZXNzYWdlUXVldWU9dD8udGFza01lc3NhZ2VRdWV1ZSx0aGlzLl90YXNrU3RvcmUmJih0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFdhLGFzeW5jKG4sbyk9Pntjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IEMoTS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm57Li4ucn19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFlhLGFzeW5jKG4sbyk9Pntjb25zdCByPWFzeW5jKCk9Pntjb25zdCBzPW4ucGFyYW1zLnRhc2tJZDtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtsZXQgYTtmb3IoO2E9YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlKHMsby5zZXNzaW9uSWQpOyl7aWYoYS50eXBlPT09InJlc3BvbnNlInx8YS50eXBlPT09ImVycm9yIil7Y29uc3QgYz1hLm1lc3NhZ2UsdT1jLmlkLGw9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQodSk7aWYobClpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZSh1KSxhLnR5cGU9PT0icmVzcG9uc2UiKWwoYyk7ZWxzZXtjb25zdCBwPWMsZz1uZXcgQyhwLmVycm9yLmNvZGUscC5lcnJvci5tZXNzYWdlLHAuZXJyb3IuZGF0YSk7bChnKX1lbHNle2NvbnN0IHA9YS50eXBlPT09InJlc3BvbnNlIj8iUmVzcG9uc2UiOiJFcnJvciI7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYCR7cH0gaGFuZGxlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7dX1gKSl9Y29udGludWV9YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5zZW5kKGEubWVzc2FnZSx7cmVsYXRlZFJlcXVlc3RJZDpvLnJlcXVlc3RJZH0pfX1jb25zdCBpPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKHMsby5zZXNzaW9uSWQpO2lmKCFpKXRocm93IG5ldyBDKE0uSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7c31gKTtpZighTmUoaS5zdGF0dXMpKXJldHVybiBhd2FpdCB0aGlzLl93YWl0Rm9yVGFza1VwZGF0ZShzLG8uc2lnbmFsKSxhd2FpdCByKCk7aWYoTmUoaS5zdGF0dXMpKXtjb25zdCBhPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrUmVzdWx0KHMsby5zZXNzaW9uSWQpO3JldHVybiB0aGlzLl9jbGVhclRhc2tRdWV1ZShzKSx7Li4uYSxfbWV0YTp7Li4uYS5fbWV0YSxbamVdOnt0YXNrSWQ6c319fX1yZXR1cm4gYXdhaXQgcigpfTtyZXR1cm4gYXdhaXQgcigpfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihRYSxhc3luYyhuLG8pPT57dHJ5e2NvbnN0e3Rhc2tzOnIsbmV4dEN1cnNvcjpzfT1hd2FpdCB0aGlzLl90YXNrU3RvcmUubGlzdFRhc2tzKG4ucGFyYW1zPy5jdXJzb3Isby5zZXNzaW9uSWQpO3JldHVybnt0YXNrczpyLG5leHRDdXJzb3I6cyxfbWV0YTp7fX19Y2F0Y2gocil7dGhyb3cgbmV3IEMoTS5JbnZhbGlkUGFyYW1zLGBGYWlsZWQgdG8gbGlzdCB0YXNrczogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKGVjLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBDKE0uSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQ6ICR7bi5wYXJhbXMudGFza0lkfWApO2lmKE5lKHIuc3RhdHVzKSl0aHJvdyBuZXcgQyhNLkludmFsaWRQYXJhbXMsYENhbm5vdCBjYW5jZWwgdGFzayBpbiB0ZXJtaW5hbCBzdGF0dXM6ICR7ci5zdGF0dXN9YCk7YXdhaXQgdGhpcy5fdGFza1N0b3JlLnVwZGF0ZVRhc2tTdGF0dXMobi5wYXJhbXMudGFza0lkLCJjYW5jZWxsZWQiLCJDbGllbnQgY2FuY2VsbGVkIHRhc2sgZXhlY3V0aW9uLiIsby5zZXNzaW9uSWQpLHRoaXMuX2NsZWFyVGFza1F1ZXVlKG4ucGFyYW1zLnRhc2tJZCk7Y29uc3Qgcz1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFzKXRocm93IG5ldyBDKE0uSW52YWxpZFBhcmFtcyxgVGFzayBub3QgZm91bmQgYWZ0ZXIgY2FuY2VsbGF0aW9uOiAke24ucGFyYW1zLnRhc2tJZH1gKTtyZXR1cm57X21ldGE6e30sLi4uc319Y2F0Y2gocil7dGhyb3cgciBpbnN0YW5jZW9mIEM/cjpuZXcgQyhNLkludmFsaWRSZXF1ZXN0LGBGYWlsZWQgdG8gY2FuY2VsIHRhc2s6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSkpfWFzeW5jIF9vbmNhbmNlbCh0KXtpZighdC5wYXJhbXMucmVxdWVzdElkKXJldHVybjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQucGFyYW1zLnJlcXVlc3RJZCk/LmFib3J0KHQucGFyYW1zLnJlYXNvbil9X3NldHVwVGltZW91dCh0LG4sbyxyLHM9ITEpe3RoaXMuX3RpbWVvdXRJbmZvLnNldCh0LHt0aW1lb3V0SWQ6c2V0VGltZW91dChyLG4pLHN0YXJ0VGltZTpEYXRlLm5vdygpLHRpbWVvdXQ6bixtYXhUb3RhbFRpbWVvdXQ6byxyZXNldFRpbWVvdXRPblByb2dyZXNzOnMsb25UaW1lb3V0OnJ9KX1fcmVzZXRUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO2lmKCFuKXJldHVybiExO2NvbnN0IG89RGF0ZS5ub3coKS1uLnN0YXJ0VGltZTtpZihuLm1heFRvdGFsVGltZW91dCYmbz49bi5tYXhUb3RhbFRpbWVvdXQpdGhyb3cgdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpLEMuZnJvbUVycm9yKE0uUmVxdWVzdFRpbWVvdXQsIk1heGltdW0gdG90YWwgdGltZW91dCBleGNlZWRlZCIse21heFRvdGFsVGltZW91dDpuLm1heFRvdGFsVGltZW91dCx0b3RhbEVsYXBzZWQ6b30pO3JldHVybiBjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLG4udGltZW91dElkPXNldFRpbWVvdXQobi5vblRpbWVvdXQsbi50aW1lb3V0KSwhMH1fY2xlYW51cFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7biYmKGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksdGhpcy5fdGltZW91dEluZm8uZGVsZXRlKHQpKX1hc3luYyBjb25uZWN0KHQpe2lmKHRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIkFscmVhZHkgY29ubmVjdGVkIHRvIGEgdHJhbnNwb3J0LiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgdG8gYSBuZXcgdHJhbnNwb3J0LCBvciB1c2UgYSBzZXBhcmF0ZSBQcm90b2NvbCBpbnN0YW5jZSBwZXIgY29ubmVjdGlvbi4iKTt0aGlzLl90cmFuc3BvcnQ9dDtjb25zdCBuPXRoaXMudHJhbnNwb3J0Py5vbmNsb3NlO3RoaXMuX3RyYW5zcG9ydC5vbmNsb3NlPSgpPT57bj8uKCksdGhpcy5fb25jbG9zZSgpfTtjb25zdCBvPXRoaXMudHJhbnNwb3J0Py5vbmVycm9yO3RoaXMuX3RyYW5zcG9ydC5vbmVycm9yPXM9PntvPy4ocyksdGhpcy5fb25lcnJvcihzKX07Y29uc3Qgcj10aGlzLl90cmFuc3BvcnQ/Lm9ubWVzc2FnZTt0aGlzLl90cmFuc3BvcnQub25tZXNzYWdlPShzLGkpPT57cj8uKHMsaSksQm4ocyl8fHB2KHMpP3RoaXMuX29ucmVzcG9uc2Uocyk6RmMocyk/dGhpcy5fb25yZXF1ZXN0KHMsaSk6ZHYocyk/dGhpcy5fb25ub3RpZmljYXRpb24ocyk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVua25vd24gbWVzc2FnZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHMpfWApKX0sYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnN0YXJ0KCl9X29uY2xvc2UoKXtjb25zdCB0PXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnM7dGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuY2xlYXIoKSx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuY2xlYXIoKSx0aGlzLl9wZW5kaW5nRGVib3VuY2VkTm90aWZpY2F0aW9ucy5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3RpbWVvdXRJbmZvLnZhbHVlcygpKWNsZWFyVGltZW91dChvLnRpbWVvdXRJZCk7dGhpcy5fdGltZW91dEluZm8uY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMudmFsdWVzKCkpby5hYm9ydCgpO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5jbGVhcigpO2NvbnN0IG49Qy5mcm9tRXJyb3IoTS5Db25uZWN0aW9uQ2xvc2VkLCJDb25uZWN0aW9uIGNsb3NlZCIpO3RoaXMuX3RyYW5zcG9ydD12b2lkIDAsdGhpcy5vbmNsb3NlPy4oKTtmb3IoY29uc3QgbyBvZiB0LnZhbHVlcygpKW8obil9X29uZXJyb3IodCl7dGhpcy5vbmVycm9yPy4odCl9X29ubm90aWZpY2F0aW9uKHQpe2NvbnN0IG49dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja05vdGlmaWNhdGlvbkhhbmRsZXI7biE9PXZvaWQgMCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bih0KSkuY2F0Y2gobz0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFVuY2F1Z2h0IGVycm9yIGluIG5vdGlmaWNhdGlvbiBoYW5kbGVyOiAke299YCkpKX1fb25yZXF1ZXN0KHQsbil7Y29uc3Qgbz10aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZ2V0KHQubWV0aG9kKT8/dGhpcy5mYWxsYmFja1JlcXVlc3RIYW5kbGVyLHI9dGhpcy5fdHJhbnNwb3J0LHM9dC5wYXJhbXM/Ll9tZXRhPy5bamVdPy50YXNrSWQ7aWYobz09PXZvaWQgMCl7Y29uc3QgbD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOk0uTWV0aG9kTm90Rm91bmQsbWVzc2FnZToiTWV0aG9kIG5vdCBmb3VuZCJ9fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP3RoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpsLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpLmNhdGNoKHA9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gZW5xdWV1ZSBlcnJvciByZXNwb25zZTogJHtwfWApKSk6cj8uc2VuZChsKS5jYXRjaChwPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2U6ICR7cH1gKSkpO3JldHVybn1jb25zdCBpPW5ldyBBYm9ydENvbnRyb2xsZXI7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnNldCh0LmlkLGkpO2NvbnN0IGE9bHYodC5wYXJhbXMpP3QucGFyYW1zLnRhc2s6dm9pZCAwLGM9dGhpcy5fdGFza1N0b3JlP3RoaXMucmVxdWVzdFRhc2tTdG9yZSh0LHI/LnNlc3Npb25JZCk6dm9pZCAwLHU9e3NpZ25hbDppLnNpZ25hbCxzZXNzaW9uSWQ6cj8uc2Vzc2lvbklkLF9tZXRhOnQucGFyYW1zPy5fbWV0YSxzZW5kTm90aWZpY2F0aW9uOmFzeW5jIGw9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBwPXtyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJihwLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwscCl9LHNlbmRSZXF1ZXN0OmFzeW5jKGwscCxnKT0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEMoTS5Db25uZWN0aW9uQ2xvc2VkLCJSZXF1ZXN0IHdhcyBjYW5jZWxsZWQiKTtjb25zdCBiPXsuLi5nLHJlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmIWIucmVsYXRlZFRhc2smJihiLnJlbGF0ZWRUYXNrPXt0YXNrSWQ6c30pO2NvbnN0IHk9Yi5yZWxhdGVkVGFzaz8udGFza0lkPz9zO3JldHVybiB5JiZjJiZhd2FpdCBjLnVwZGF0ZVRhc2tTdGF0dXMoeSwiaW5wdXRfcmVxdWlyZWQiKSxhd2FpdCB0aGlzLnJlcXVlc3QobCxwLGIpfSxhdXRoSW5mbzpuPy5hdXRoSW5mbyxyZXF1ZXN0SWQ6dC5pZCxyZXF1ZXN0SW5mbzpuPy5yZXF1ZXN0SW5mbyx0YXNrSWQ6cyx0YXNrU3RvcmU6Yyx0YXNrUmVxdWVzdGVkVHRsOmE/LnR0bCxjbG9zZVNTRVN0cmVhbTpuPy5jbG9zZVNTRVN0cmVhbSxjbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW06bj8uY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtfTtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57YSYmdGhpcy5hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodC5tZXRob2QpfSkudGhlbigoKT0+byh0LHUpKS50aGVuKGFzeW5jIGw9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBwPXtyZXN1bHQ6bCxqc29ucnBjOiIyLjAiLGlkOnQuaWR9O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6InJlc3BvbnNlIixtZXNzYWdlOnAsdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChwKX0sYXN5bmMgbD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IHA9e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpOdW1iZXIuaXNTYWZlSW50ZWdlcihsLmNvZGUpP2wuY29kZTpNLkludGVybmFsRXJyb3IsbWVzc2FnZTpsLm1lc3NhZ2U/PyJJbnRlcm5hbCBlcnJvciIsLi4ubC5kYXRhIT09dm9pZCAwJiZ7ZGF0YTpsLmRhdGF9fX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6cCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKHApfSkuY2F0Y2gobD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIHJlc3BvbnNlOiAke2x9YCkpKS5maW5hbGx5KCgpPT57dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LmlkKT09PWkmJnRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5kZWxldGUodC5pZCl9KX1fb25wcm9ncmVzcyh0KXtjb25zdHtwcm9ncmVzc1Rva2VuOm4sLi4ub309dC5wYXJhbXMscj1OdW1iZXIobikscz10aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmdldChyKTtpZighcyl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBhbiB1bmtub3duIHRva2VuOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59Y29uc3QgaT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChyKSxhPXRoaXMuX3RpbWVvdXRJbmZvLmdldChyKTtpZihhJiZpJiZhLnJlc2V0VGltZW91dE9uUHJvZ3Jlc3MpdHJ5e3RoaXMuX3Jlc2V0VGltZW91dChyKX1jYXRjaChjKXt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShyKSx0aGlzLl9jbGVhbnVwVGltZW91dChyKSxpKGMpO3JldHVybn1zKG8pfV9vbnJlc3BvbnNlKHQpe2NvbnN0IG49TnVtYmVyKHQuaWQpLG89dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQobik7aWYobyl7aWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobiksQm4odCkpbyh0KTtlbHNle2NvbnN0IGk9bmV3IEModC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO28oaSl9cmV0dXJufWNvbnN0IHI9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQobik7aWYocj09PXZvaWQgMCl7dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlY2VpdmVkIGEgcmVzcG9uc2UgZm9yIGFuIHVua25vd24gbWVzc2FnZSBJRDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX2NsZWFudXBUaW1lb3V0KG4pO2xldCBzPSExO2lmKEJuKHQpJiZ0LnJlc3VsdCYmdHlwZW9mIHQucmVzdWx0PT0ib2JqZWN0Iil7Y29uc3QgaT10LnJlc3VsdDtpZihpLnRhc2smJnR5cGVvZiBpLnRhc2s9PSJvYmplY3QiKXtjb25zdCBhPWkudGFzazt0eXBlb2YgYS50YXNrSWQ9PSJzdHJpbmciJiYocz0hMCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnMuc2V0KGEudGFza0lkLG4pKX19aWYoc3x8dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksQm4odCkpcih0KTtlbHNle2NvbnN0IGk9Qy5mcm9tRXJyb3IodC5lcnJvci5jb2RlLHQuZXJyb3IubWVzc2FnZSx0LmVycm9yLmRhdGEpO3IoaSl9fWdldCB0cmFuc3BvcnQoKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0fWFzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy5fdHJhbnNwb3J0Py5jbG9zZSgpfWFzeW5jKnJlcXVlc3RTdHJlYW0odCxuLG8pe2NvbnN0e3Rhc2s6cn09bz8/e307aWYoIXIpe3RyeXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLnJlcXVlc3QodCxuLG8pfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIEM/aTpuZXcgQyhNLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19cmV0dXJufWxldCBzO3RyeXtjb25zdCBpPWF3YWl0IHRoaXMucmVxdWVzdCh0LEthLG8pO2lmKGkudGFzaylzPWkudGFzay50YXNrSWQseWllbGR7dHlwZToidGFza0NyZWF0ZWQiLHRhc2s6aS50YXNrfTtlbHNlIHRocm93IG5ldyBDKE0uSW50ZXJuYWxFcnJvciwiVGFzayBjcmVhdGlvbiBkaWQgbm90IHJldHVybiBhIHRhc2siKTtmb3IoOzspe2NvbnN0IGE9YXdhaXQgdGhpcy5nZXRUYXNrKHt0YXNrSWQ6c30sbyk7aWYoeWllbGR7dHlwZToidGFza1N0YXR1cyIsdGFzazphfSxOZShhLnN0YXR1cykpe2Euc3RhdHVzPT09ImNvbXBsZXRlZCI/eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX06YS5zdGF0dXM9PT0iZmFpbGVkIj95aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IEMoTS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gZmFpbGVkYCl9OmEuc3RhdHVzPT09ImNhbmNlbGxlZCImJih5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6bmV3IEMoTS5JbnRlcm5hbEVycm9yLGBUYXNrICR7c30gd2FzIGNhbmNlbGxlZGApfSk7cmV0dXJufWlmKGEuc3RhdHVzPT09ImlucHV0X3JlcXVpcmVkIil7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5nZXRUYXNrUmVzdWx0KHt0YXNrSWQ6c30sbixvKX07cmV0dXJufWNvbnN0IGM9YS5wb2xsSW50ZXJ2YWw/P3RoaXMuX29wdGlvbnM/LmRlZmF1bHRUYXNrUG9sbEludGVydmFsPz8xZTM7YXdhaXQgbmV3IFByb21pc2UodT0+c2V0VGltZW91dCh1LGMpKSxvPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCl9fWNhdGNoKGkpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjppIGluc3RhbmNlb2YgQz9pOm5ldyBDKE0uSW50ZXJuYWxFcnJvcixTdHJpbmcoaSkpfX19cmVxdWVzdCh0LG4sbyl7Y29uc3R7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOmksdGFzazphLHJlbGF0ZWRUYXNrOmN9PW8/P3t9O3JldHVybiBuZXcgUHJvbWlzZSgodSxsKT0+e2NvbnN0IHA9Uj0+e2woUil9O2lmKCF0aGlzLl90cmFuc3BvcnQpe3AobmV3IEVycm9yKCJOb3QgY29ubmVjdGVkIikpO3JldHVybn1pZih0aGlzLl9vcHRpb25zPy5lbmZvcmNlU3RyaWN0Q2FwYWJpbGl0aWVzPT09ITApdHJ5e3RoaXMuYXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0Lm1ldGhvZCksYSYmdGhpcy5hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9Y2F0Y2goUil7cChSKTtyZXR1cm59bz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO2NvbnN0IGc9dGhpcy5fcmVxdWVzdE1lc3NhZ2VJZCsrLGI9ey4uLnQsanNvbnJwYzoiMi4wIixpZDpnfTtvPy5vbnByb2dyZXNzJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5zZXQoZyxvLm9ucHJvZ3Jlc3MpLGIucGFyYW1zPXsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxwcm9ncmVzc1Rva2VuOmd9fSksYSYmKGIucGFyYW1zPXsuLi5iLnBhcmFtcyx0YXNrOmF9KSxjJiYoYi5wYXJhbXM9ey4uLmIucGFyYW1zLF9tZXRhOnsuLi5iLnBhcmFtcz8uX21ldGF8fHt9LFtqZV06Y319KTtjb25zdCB5PVI9Pnt0aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShnKSx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShnKSx0aGlzLl9jbGVhbnVwVGltZW91dChnKSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoe2pzb25ycGM6IjIuMCIsbWV0aG9kOiJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIscGFyYW1zOntyZXF1ZXN0SWQ6ZyxyZWFzb246U3RyaW5nKFIpfX0se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2gob2U9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7b2V9YCkpKTtjb25zdCBGPVIgaW5zdGFuY2VvZiBDP1I6bmV3IEMoTS5SZXF1ZXN0VGltZW91dCxTdHJpbmcoUikpO2woRil9O3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuc2V0KGcsUj0+e2lmKCFvPy5zaWduYWw/LmFib3J0ZWQpe2lmKFIgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbChSKTt0cnl7Y29uc3QgRj1ZcChuLFIucmVzdWx0KTtGLnN1Y2Nlc3M/dShGLmRhdGEpOmwoRi5lcnJvcil9Y2F0Y2goRil7bChGKX19fSksbz8uc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9Pnt5KG8/LnNpZ25hbD8ucmVhc29uKX0pO2NvbnN0IGs9bz8udGltZW91dD8/SmIsJD0oKT0+eShDLmZyb21FcnJvcihNLlJlcXVlc3RUaW1lb3V0LCJSZXF1ZXN0IHRpbWVkIG91dCIse3RpbWVvdXQ6a30pKTt0aGlzLl9zZXR1cFRpbWVvdXQoZyxrLG8/Lm1heFRvdGFsVGltZW91dCwkLG8/LnJlc2V0VGltZW91dE9uUHJvZ3Jlc3M/PyExKTtjb25zdCBqPWM/LnRhc2tJZDtpZihqKXtjb25zdCBSPUY9Pntjb25zdCBvZT10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChnKTtvZT9vZShGKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVzcG9uc2UgaGFuZGxlciBtaXNzaW5nIGZvciBzaWRlLWNoYW5uZWxlZCByZXF1ZXN0ICR7Z31gKSl9O3RoaXMuX3JlcXVlc3RSZXNvbHZlcnMuc2V0KGcsUiksdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKGose3R5cGU6InJlcXVlc3QiLG1lc3NhZ2U6Yix0aW1lc3RhbXA6RGF0ZS5ub3coKX0pLmNhdGNoKEY9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChnKSxsKEYpfSl9ZWxzZSB0aGlzLl90cmFuc3BvcnQuc2VuZChiLHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKFI9Pnt0aGlzLl9jbGVhbnVwVGltZW91dChnKSxsKFIpfSl9KX1hc3luYyBnZXRUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9nZXQiLHBhcmFtczp0fSxHYSxuKX1hc3luYyBnZXRUYXNrUmVzdWx0KHQsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL3Jlc3VsdCIscGFyYW1zOnR9LG4sbyl9YXN5bmMgbGlzdFRhc2tzKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9saXN0IixwYXJhbXM6dH0sWGEsbil9YXN5bmMgY2FuY2VsVGFzayh0LG4pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvY2FuY2VsIixwYXJhbXM6dH0sUnYsbil9YXN5bmMgbm90aWZpY2F0aW9uKHQsbil7aWYoIXRoaXMuX3RyYW5zcG9ydCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKTt0aGlzLmFzc2VydE5vdGlmaWNhdGlvbkNhcGFiaWxpdHkodC5tZXRob2QpO2NvbnN0IG89bj8ucmVsYXRlZFRhc2s/LnRhc2tJZDtpZihvKXtjb25zdCBhPXsuLi50LGpzb25ycGM6IjIuMCIscGFyYW1zOnsuLi50LnBhcmFtcyxfbWV0YTp7Li4udC5wYXJhbXM/Ll9tZXRhfHx7fSxbamVdOm4ucmVsYXRlZFRhc2t9fX07YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKG8se3R5cGU6Im5vdGlmaWNhdGlvbiIsbWVzc2FnZTphLHRpbWVzdGFtcDpEYXRlLm5vdygpfSk7cmV0dXJufWlmKCh0aGlzLl9vcHRpb25zPy5kZWJvdW5jZWROb3RpZmljYXRpb25NZXRob2RzPz9bXSkuaW5jbHVkZXModC5tZXRob2QpJiYhdC5wYXJhbXMmJiFuPy5yZWxhdGVkUmVxdWVzdElkJiYhbj8ucmVsYXRlZFRhc2spe2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmhhcyh0Lm1ldGhvZCkpcmV0dXJuO3RoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmFkZCh0Lm1ldGhvZCksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2lmKHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmRlbGV0ZSh0Lm1ldGhvZCksIXRoaXMuX3RyYW5zcG9ydClyZXR1cm47bGV0IGE9ey4uLnQsanNvbnJwYzoiMi4wIn07bj8ucmVsYXRlZFRhc2smJihhPXsuLi5hLHBhcmFtczp7Li4uYS5wYXJhbXMsX21ldGE6ey4uLmEucGFyYW1zPy5fbWV0YXx8e30sW2plXTpuLnJlbGF0ZWRUYXNrfX19KSx0aGlzLl90cmFuc3BvcnQ/LnNlbmQoYSxuKS5jYXRjaChjPT50aGlzLl9vbmVycm9yKGMpKX0pO3JldHVybn1sZXQgaT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGk9ey4uLmkscGFyYW1zOnsuLi5pLnBhcmFtcyxfbWV0YTp7Li4uaS5wYXJhbXM/Ll9tZXRhfHx7fSxbamVdOm4ucmVsYXRlZFRhc2t9fX0pLGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zZW5kKGksbil9c2V0UmVxdWVzdEhhbmRsZXIodCxuKXtjb25zdCBvPUJjKHQpO3RoaXMuYXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KG8pLHRoaXMuX3JlcXVlc3RIYW5kbGVycy5zZXQobywocixzKT0+e2NvbnN0IGk9VmModCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4oaSxzKSl9KX1yZW1vdmVSZXF1ZXN0SGFuZGxlcih0KXt0aGlzLl9yZXF1ZXN0SGFuZGxlcnMuZGVsZXRlKHQpfWFzc2VydENhblNldFJlcXVlc3RIYW5kbGVyKHQpe2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVlc3QgaGFuZGxlciBmb3IgJHt0fSBhbHJlYWR5IGV4aXN0cywgd2hpY2ggd291bGQgYmUgb3ZlcnJpZGRlbmApfXNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKXtjb25zdCBvPUJjKHQpO3RoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLnNldChvLHI9Pntjb25zdCBzPVZjKHQscik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKHMpKX0pfXJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIodCl7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuZGVsZXRlKHQpfV9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcih0KXtjb25zdCBuPXRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5nZXQodCk7biE9PXZvaWQgMCYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5kZWxldGUodCkpfWFzeW5jIF9lbnF1ZXVlVGFza01lc3NhZ2UodCxuLG8pe2lmKCF0aGlzLl90YXNrU3RvcmV8fCF0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGVucXVldWUgdGFzayBtZXNzYWdlOiB0YXNrU3RvcmUgYW5kIHRhc2tNZXNzYWdlUXVldWUgYXJlIG5vdCBjb25maWd1cmVkIik7Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5tYXhUYXNrUXVldWVTaXplO2F3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZW5xdWV1ZSh0LG4sbyxyKX1hc3luYyBfY2xlYXJUYXNrUXVldWUodCxuKXtpZih0aGlzLl90YXNrTWVzc2FnZVF1ZXVlKXtjb25zdCBvPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZUFsbCh0LG4pO2Zvcihjb25zdCByIG9mIG8paWYoci50eXBlPT09InJlcXVlc3QiJiZGYyhyLm1lc3NhZ2UpKXtjb25zdCBzPXIubWVzc2FnZS5pZCxpPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHMpO2k/KGkobmV3IEMoTS5JbnRlcm5hbEVycm9yLCJUYXNrIGNhbmNlbGxlZCBvciBjb21wbGV0ZWQiKSksdGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUocykpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNvbHZlciBtaXNzaW5nIGZvciByZXF1ZXN0ICR7c30gZHVyaW5nIHRhc2sgJHt0fSBjbGVhbnVwYCkpfX19YXN5bmMgX3dhaXRGb3JUYXNrVXBkYXRlKHQsbil7bGV0IG89dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzt0cnl7Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmU/LmdldFRhc2sodCk7cj8ucG9sbEludGVydmFsJiYobz1yLnBvbGxJbnRlcnZhbCl9Y2F0Y2h7fXJldHVybiBuZXcgUHJvbWlzZSgocixzKT0+e2lmKG4uYWJvcnRlZCl7cyhuZXcgQyhNLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKTtyZXR1cm59Y29uc3QgaT1zZXRUaW1lb3V0KHIsbyk7bi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsKCk9PntjbGVhclRpbWVvdXQoaSkscyhuZXcgQyhNLkludmFsaWRSZXF1ZXN0LCJSZXF1ZXN0IGNhbmNlbGxlZCIpKX0se29uY2U6ITB9KX0pfXJlcXVlc3RUYXNrU3RvcmUodCxuKXtjb25zdCBvPXRoaXMuX3Rhc2tTdG9yZTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIk5vIHRhc2sgc3RvcmUgY29uZmlndXJlZCIpO3JldHVybntjcmVhdGVUYXNrOmFzeW5jIHI9PntpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIHJlcXVlc3QgcHJvdmlkZWQiKTtyZXR1cm4gYXdhaXQgby5jcmVhdGVUYXNrKHIsdC5pZCx7bWV0aG9kOnQubWV0aG9kLHBhcmFtczp0LnBhcmFtc30sbil9LGdldFRhc2s6YXN5bmMgcj0+e2NvbnN0IHM9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIXMpdGhyb3cgbmV3IEMoTS5JbnZhbGlkUGFyYW1zLCJGYWlsZWQgdG8gcmV0cmlldmUgdGFzazogVGFzayBub3QgZm91bmQiKTtyZXR1cm4gc30sc3RvcmVUYXNrUmVzdWx0OmFzeW5jKHIscyxpKT0+e2F3YWl0IG8uc3RvcmVUYXNrUmVzdWx0KHIscyxpLG4pO2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoYSl7Y29uc3QgYz10by5wYXJzZSh7bWV0aG9kOiJub3RpZmljYXRpb25zL3Rhc2tzL3N0YXR1cyIscGFyYW1zOmF9KTthd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihjKSxOZShhLnN0YXR1cykmJnRoaXMuX2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHIpfX0sZ2V0VGFza1Jlc3VsdDpyPT5vLmdldFRhc2tSZXN1bHQocixuKSx1cGRhdGVUYXNrU3RhdHVzOmFzeW5jKHIscyxpKT0+e2NvbnN0IGE9YXdhaXQgby5nZXRUYXNrKHIsbik7aWYoIWEpdGhyb3cgbmV3IEMoTS5JbnZhbGlkUGFyYW1zLGBUYXNrICIke3J9IiBub3QgZm91bmQgLSBpdCBtYXkgaGF2ZSBiZWVuIGNsZWFuZWQgdXBgKTtpZihOZShhLnN0YXR1cykpdGhyb3cgbmV3IEMoTS5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgdXBkYXRlIHRhc2sgIiR7cn0iIGZyb20gdGVybWluYWwgc3RhdHVzICIke2Euc3RhdHVzfSIgdG8gIiR7c30iLiBUZXJtaW5hbCBzdGF0ZXMgKGNvbXBsZXRlZCwgZmFpbGVkLCBjYW5jZWxsZWQpIGNhbm5vdCB0cmFuc2l0aW9uIHRvIG90aGVyIHN0YXRlcy5gKTthd2FpdCBvLnVwZGF0ZVRhc2tTdGF0dXMocixzLGksbik7Y29uc3QgYz1hd2FpdCBvLmdldFRhc2socixuKTtpZihjKXtjb25zdCB1PXRvLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6Y30pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKHUpLE5lKGMuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxsaXN0VGFza3M6cj0+by5saXN0VGFza3MocixuKX19fWZ1bmN0aW9uIEpjKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiBXYihlLHQpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCBvIGluIHQpe2NvbnN0IHI9byxzPXRbcl07aWYocz09PXZvaWQgMCljb250aW51ZTtjb25zdCBpPW5bcl07SmMoaSkmJkpjKHMpP25bcl09ey4uLmksLi4uc306bltyXT1zfXJldHVybiBufShlPT50eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0eXBlb2YgUHJveHk8InUiP25ldyBQcm94eShlLHtnZXQ6KHQsbik9Pih0eXBlb2YgcmVxdWlyZTwidSI/cmVxdWlyZTp0KVtuXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlPCJ1IilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX0pO2NsYXNzIEdiIGV4dGVuZHMgS2J7X3JlZ2lzdGVyZWRNZXRob2RzPW5ldyBTZXQ7X2V2ZW50U2xvdHM9bmV3IE1hcDtvbkV2ZW50RGlzcGF0Y2godCxuKXt9X2Vuc3VyZUV2ZW50U2xvdCh0KXtsZXQgbj10aGlzLl9ldmVudFNsb3RzLmdldCh0KTtpZighbil7bGV0IG89dGhpcy5ldmVudFNjaGVtYXNbdF07aWYoIW8pdGhyb3cgRXJyb3IoYFVua25vd24gZXZlbnQ6ICR7U3RyaW5nKHQpfWApO249e2xpc3RlbmVyczpbXX0sdGhpcy5fZXZlbnRTbG90cy5zZXQodCxuKTtsZXQgcj1vLnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQocik7bGV0IHM9bjtzdXBlci5zZXROb3RpZmljYXRpb25IYW5kbGVyKG8saT0+e2xldCBhPWkucGFyYW1zO3RoaXMub25FdmVudERpc3BhdGNoKHQsYSkscy5vbkhhbmRsZXI/LihhKTtmb3IobGV0IGMgb2ZbLi4ucy5saXN0ZW5lcnNdKWMoYSl9KX1yZXR1cm4gbn1zZXRFdmVudEhhbmRsZXIodCxuKXtsZXQgbz10aGlzLl9lbnN1cmVFdmVudFNsb3QodCk7by5vbkhhbmRsZXImJm4mJmNvbnNvbGUud2FybihgW01DUCBBcHBzXSBvbiR7U3RyaW5nKHQpfSBoYW5kbGVyIHJlcGxhY2VkLiBVc2UgYWRkRXZlbnRMaXN0ZW5lcigiJHtTdHJpbmcodCl9Iiwg4oCmKSB0byBhZGQgbXVsdGlwbGUgbGlzdGVuZXJzIHdpdGhvdXQgcmVwbGFjaW5nLmApLG8ub25IYW5kbGVyPW59Z2V0RXZlbnRIYW5kbGVyKHQpe3JldHVybiB0aGlzLl9ldmVudFNsb3RzLmdldCh0KT8ub25IYW5kbGVyfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9lbnN1cmVFdmVudFNsb3QodCkubGlzdGVuZXJzLnB1c2gobil9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCBvPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFvKXJldHVybjtsZXQgcj1vLmxpc3RlbmVycy5pbmRleE9mKG4pO3IhPT0tMSYmby5saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c2V0UmVxdWVzdEhhbmRsZXI9KHQsbik9Pnt0aGlzLl9hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsInNldFJlcXVlc3RIYW5kbGVyIiksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07c2V0Tm90aWZpY2F0aW9uSGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0Tm90aWZpY2F0aW9uSGFuZGxlciIpLHN1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIodCxuKX07d2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCh0LG4sbyl7biYmbyYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdICR7dH0gaGFuZGxlciByZXBsYWNlZC4gUHJldmlvdXMgaGFuZGxlciB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQuYCl9cmVwbGFjZVJlcXVlc3RIYW5kbGVyPSh0LG4pPT57bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pLHN1cGVyLnNldFJlcXVlc3RIYW5kbGVyKHQsbil9O19hc3NlcnRNZXRob2ROb3RSZWdpc3RlcmVkKHQsbil7bGV0IG89dC5zaGFwZS5tZXRob2QudmFsdWU7aWYodGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuaGFzKG8pKXRocm93IEVycm9yKGBIYW5kbGVyIGZvciAiJHtvfSIgYWxyZWFkeSByZWdpc3RlcmVkICh2aWEgJHtufSkuIFVzZSBhZGRFdmVudExpc3RlbmVyKCkgdG8gYXR0YWNoIG11bHRpcGxlIGxpc3RlbmVycywgb3IgdGhlIG9uKiBzZXR0ZXIgZm9yIHJlcGxhY2Ugc2VtYW50aWNzLmApO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChvKX19dmFyIFliPSIyMDI2LTAxLTI2IixRYj0idWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiO2NsYXNzIFhie2V2ZW50VGFyZ2V0O2V2ZW50U291cmNlO21lc3NhZ2VMaXN0ZW5lcjtjb25zdHJ1Y3Rvcih0PXdpbmRvdy5wYXJlbnQsbil7dGhpcy5ldmVudFRhcmdldD10LHRoaXMuZXZlbnRTb3VyY2U9bix0aGlzLm1lc3NhZ2VMaXN0ZW5lcj1vPT57aWYobiYmby5zb3VyY2UhPT10aGlzLmV2ZW50U291cmNlKXtjb25zb2xlLmRlYnVnKCJJZ25vcmluZyBtZXNzYWdlIGZyb20gdW5rbm93biBzb3VyY2UiLG8pO3JldHVybn1sZXQgcj1mdi5zYWZlUGFyc2Uoby5kYXRhKTtyLnN1Y2Nlc3M/KGNvbnNvbGUuZGVidWcoIlBhcnNlZCBtZXNzYWdlIixyLmRhdGEpLHRoaXMub25tZXNzYWdlPy4oci5kYXRhKSk6by5kYXRhPy5qc29ucnBjIT09IjIuMCI/Y29uc29sZS5kZWJ1ZygiSWdub3Jpbmcgbm9uLUpTT04tUlBDIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKTooY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UiLHIuZXJyb3IubWVzc2FnZSxvKSx0aGlzLm9uZXJyb3I/LihFcnJvcigiSW52YWxpZCBKU09OLVJQQyBtZXNzYWdlIHJlY2VpdmVkOiAiK3IuZXJyb3IubWVzc2FnZSkpKX19YXN5bmMgc3RhcnQoKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpfWFzeW5jIHNlbmQodCxuKXt0Lm1ldGhvZCE9PVFiJiZjb25zb2xlLmRlYnVnKCJTZW5kaW5nIG1lc3NhZ2UiLHQpLHRoaXMuZXZlbnRUYXJnZXQucG9zdE1lc3NhZ2UodCwiKiIpfWFzeW5jIGNsb3NlKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMubWVzc2FnZUxpc3RlbmVyKSx0aGlzLm9uY2xvc2U/LigpfW9uY2xvc2U7b25lcnJvcjtvbm1lc3NhZ2U7c2Vzc2lvbklkO3NldFByb3RvY29sVmVyc2lvbn12YXIgZV89SShbaCgibGlnaHQiKSxoKCJkYXJrIildKS5kZXNjcmliZSgiQ29sb3IgdGhlbWUgcHJlZmVyZW5jZSBmb3IgdGhlIGhvc3QgZW52aXJvbm1lbnQuIiksQ3Q9SShbaCgiaW5saW5lIiksaCgiZnVsbHNjcmVlbiIpLGgoInBpcCIpXSkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZSBmb3IgVUkgcHJlc2VudGF0aW9uLiIpLHRfPUkoW2goIi0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC10ZXJ0aWFyeSIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlIiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWdob3N0IiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLWluZm8iKSxoKCItLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyIiksaCgiLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MiKSxoKCItLWNvbG9yLWJhY2tncm91bmQtd2FybmluZyIpLGgoIi0tY29sb3ItYmFja2dyb3VuZC1kaXNhYmxlZCIpLGgoIi0tY29sb3ItdGV4dC1wcmltYXJ5IiksaCgiLS1jb2xvci10ZXh0LXNlY29uZGFyeSIpLGgoIi0tY29sb3ItdGV4dC10ZXJ0aWFyeSIpLGgoIi0tY29sb3ItdGV4dC1pbnZlcnNlIiksaCgiLS1jb2xvci10ZXh0LWdob3N0IiksaCgiLS1jb2xvci10ZXh0LWluZm8iKSxoKCItLWNvbG9yLXRleHQtZGFuZ2VyIiksaCgiLS1jb2xvci10ZXh0LXN1Y2Nlc3MiKSxoKCItLWNvbG9yLXRleHQtd2FybmluZyIpLGgoIi0tY29sb3ItdGV4dC1kaXNhYmxlZCIpLGgoIi0tY29sb3ItYm9yZGVyLXByaW1hcnkiKSxoKCItLWNvbG9yLWJvcmRlci1zZWNvbmRhcnkiKSxoKCItLWNvbG9yLWJvcmRlci10ZXJ0aWFyeSIpLGgoIi0tY29sb3ItYm9yZGVyLWludmVyc2UiKSxoKCItLWNvbG9yLWJvcmRlci1naG9zdCIpLGgoIi0tY29sb3ItYm9yZGVyLWluZm8iKSxoKCItLWNvbG9yLWJvcmRlci1kYW5nZXIiKSxoKCItLWNvbG9yLWJvcmRlci1zdWNjZXNzIiksaCgiLS1jb2xvci1ib3JkZXItd2FybmluZyIpLGgoIi0tY29sb3ItYm9yZGVyLWRpc2FibGVkIiksaCgiLS1jb2xvci1yaW5nLXByaW1hcnkiKSxoKCItLWNvbG9yLXJpbmctc2Vjb25kYXJ5IiksaCgiLS1jb2xvci1yaW5nLWludmVyc2UiKSxoKCItLWNvbG9yLXJpbmctaW5mbyIpLGgoIi0tY29sb3ItcmluZy1kYW5nZXIiKSxoKCItLWNvbG9yLXJpbmctc3VjY2VzcyIpLGgoIi0tY29sb3ItcmluZy13YXJuaW5nIiksaCgiLS1mb250LXNhbnMiKSxoKCItLWZvbnQtbW9ubyIpLGgoIi0tZm9udC13ZWlnaHQtbm9ybWFsIiksaCgiLS1mb250LXdlaWdodC1tZWRpdW0iKSxoKCItLWZvbnQtd2VpZ2h0LXNlbWlib2xkIiksaCgiLS1mb250LXdlaWdodC1ib2xkIiksaCgiLS1mb250LXRleHQteHMtc2l6ZSIpLGgoIi0tZm9udC10ZXh0LXNtLXNpemUiKSxoKCItLWZvbnQtdGV4dC1tZC1zaXplIiksaCgiLS1mb250LXRleHQtbGctc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLXhzLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy1zbS1zaXplIiksaCgiLS1mb250LWhlYWRpbmctbWQtc2l6ZSIpLGgoIi0tZm9udC1oZWFkaW5nLWxnLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy14bC1zaXplIiksaCgiLS1mb250LWhlYWRpbmctMnhsLXNpemUiKSxoKCItLWZvbnQtaGVhZGluZy0zeGwtc2l6ZSIpLGgoIi0tZm9udC10ZXh0LXhzLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LXRleHQtc20tbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtdGV4dC1tZC1saW5lLWhlaWdodCIpLGgoIi0tZm9udC10ZXh0LWxnLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmcteHMtbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy1zbS1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLW1kLWxpbmUtaGVpZ2h0IiksaCgiLS1mb250LWhlYWRpbmctbGctbGluZS1oZWlnaHQiKSxoKCItLWZvbnQtaGVhZGluZy14bC1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLTJ4bC1saW5lLWhlaWdodCIpLGgoIi0tZm9udC1oZWFkaW5nLTN4bC1saW5lLWhlaWdodCIpLGgoIi0tYm9yZGVyLXJhZGl1cy14cyIpLGgoIi0tYm9yZGVyLXJhZGl1cy1zbSIpLGgoIi0tYm9yZGVyLXJhZGl1cy1tZCIpLGgoIi0tYm9yZGVyLXJhZGl1cy1sZyIpLGgoIi0tYm9yZGVyLXJhZGl1cy14bCIpLGgoIi0tYm9yZGVyLXJhZGl1cy1mdWxsIiksaCgiLS1ib3JkZXItd2lkdGgtcmVndWxhciIpLGgoIi0tc2hhZG93LWhhaXJsaW5lIiksaCgiLS1zaGFkb3ctc20iKSxoKCItLXNoYWRvdy1tZCIpLGgoIi0tc2hhZG93LWxnIildKS5kZXNjcmliZSgiQ1NTIHZhcmlhYmxlIGtleXMgYXZhaWxhYmxlIHRvIE1DUCBhcHBzIGZvciB0aGVtaW5nLiIpLG5fPUUodF8uZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCksSShbZigpLGV0KCldKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSkuZGVzY3JpYmUoYFN0eWxlIHZhcmlhYmxlcyBmb3IgdGhlbWluZyBNQ1AgYXBwcy4KCkluZGl2aWR1YWwgc3R5bGUga2V5cyBhcmUgb3B0aW9uYWwgLSBob3N0cyBtYXkgcHJvdmlkZSBhbnkgc3Vic2V0IG9mIHRoZXNlIHZhbHVlcy4KVmFsdWVzIGFyZSBzdHJpbmdzIGNvbnRhaW5pbmcgQ1NTIHZhbHVlcyAoY29sb3JzLCBzaXplcywgZm9udCBzdGFja3MsIGV0Yy4pLgoKTm90ZTogVGhpcyB0eXBlIHVzZXMgXGBSZWNvcmQ8Sywgc3RyaW5nIHwgdW5kZWZpbmVkPlxgIHJhdGhlciB0aGFuIFxgUGFydGlhbDxSZWNvcmQ8Sywgc3RyaW5nPj5cYApmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFpvZCBzY2hlbWEgZ2VuZXJhdGlvbi4gQm90aCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIHZhbGlkYXRpb24uYCk7dih7bWV0aG9kOmgoInVpL29wZW4tbGluayIpLHBhcmFtczp2KHt1cmw6ZigpLmRlc2NyaWJlKCJVUkwgdG8gb3BlbiBpbiB0aGUgaG9zdCdzIGJyb3dzZXIiKX0pfSk7dmFyIG9fPXYoe2lzRXJyb3I6QSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgZmFpbGVkIHRvIG9wZW4gdGhlIFVSTCAoZS5nLiwgZHVlIHRvIHNlY3VyaXR5IHBvbGljeSkuIil9KS5wYXNzdGhyb3VnaCgpLHJfPXYoe2lzRXJyb3I6QSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGRvd25sb2FkIGZhaWxlZCAoZS5nLiwgdXNlciBjYW5jZWxsZWQgb3IgaG9zdCBkZW5pZWQpLiIpfSkucGFzc3Rocm91Z2goKSxzXz12KHtpc0Vycm9yOkEoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJUcnVlIGlmIHRoZSBob3N0IHJlamVjdGVkIG9yIGZhaWxlZCB0byBkZWxpdmVyIHRoZSBtZXNzYWdlLiIpfSkucGFzc3Rocm91Z2goKTt2KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy9zYW5kYm94LXByb3h5LXJlYWR5IikscGFyYW1zOnYoe30pfSk7dmFyIGFjPXYoe2Nvbm5lY3REb21haW5zOlMoZigpKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBPcmlnaW5zIGZvciBuZXR3b3JrIHJlcXVlc3RzIChmZXRjaC9YSFIvV2ViU29ja2V0KS4KCi0gTWFwcyB0byBDU1AgXGBjb25uZWN0LXNyY1xgIGRpcmVjdGl2ZQotIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgY29ubmVjdGlvbnMgKHNlY3VyZSBkZWZhdWx0KWApLHJlc291cmNlRG9tYWluczpTKGYoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3Igc3RhdGljIHJlc291cmNlcyAoaW1hZ2VzLCBzY3JpcHRzLCBzdHlsZXNoZWV0cywgZm9udHMsIG1lZGlhKS5cblxuLSBNYXBzIHRvIENTUCBgaW1nLXNyY2AsIGBzY3JpcHQtc3JjYCwgYHN0eWxlLXNyY2AsIGBmb250LXNyY2AsIGBtZWRpYS1zcmNgIGRpcmVjdGl2ZXNcbi0gV2lsZGNhcmQgc3ViZG9tYWlucyBzdXBwb3J0ZWQ6IGBodHRwczovLyouZXhhbXBsZS5jb21gXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5ldHdvcmsgcmVzb3VyY2VzIChzZWN1cmUgZGVmYXVsdCkiKSxmcmFtZURvbWFpbnM6UyhmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9yaWdpbnMgZm9yIG5lc3RlZCBpZnJhbWVzLlxuXG4tIE1hcHMgdG8gQ1NQIGBmcmFtZS1zcmNgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBubyBuZXN0ZWQgaWZyYW1lcyBhbGxvd2VkIChgZnJhbWUtc3JjICdub25lJ2ApIiksYmFzZVVyaURvbWFpbnM6UyhmKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkFsbG93ZWQgYmFzZSBVUklzIGZvciB0aGUgZG9jdW1lbnQuXG5cbi0gTWFwcyB0byBDU1AgYGJhc2UtdXJpYCBkaXJlY3RpdmVcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgb25seSBzYW1lIG9yaWdpbiBhbGxvd2VkIChgYmFzZS11cmkgJ3NlbGYnYCkiKX0pLGNjPXYoe2NhbWVyYTp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGNhbWVyYSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGNhbWVyYWAgZmVhdHVyZS4iKSxtaWNyb3Bob25lOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgbWljcm9waG9uZSBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYG1pY3JvcGhvbmVgIGZlYXR1cmUuIiksZ2VvbG9jYXRpb246dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBnZW9sb2NhdGlvbiBhY2Nlc3MuXG5cbk1hcHMgdG8gUGVybWlzc2lvbiBQb2xpY3kgYGdlb2xvY2F0aW9uYCBmZWF0dXJlLiIpLGNsaXBib2FyZFdyaXRlOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2xpcGJvYXJkIHdyaXRlIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2xpcGJvYXJkLXdyaXRlYCBmZWF0dXJlLiIpfSk7dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIikscGFyYW1zOnYoe3dpZHRoOlQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgd2lkdGggaW4gcGl4ZWxzLiIpLGhlaWdodDpUKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiTmV3IGhlaWdodCBpbiBwaXhlbHMuIil9KX0pO3ZhciBpXz12KHttZXRob2Q6aCgidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0IikscGFyYW1zOnYoe2FyZ3VtZW50czpFKGYoKSxaKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb21wbGV0ZSB0b29sIGNhbGwgYXJndW1lbnRzIGFzIGtleS12YWx1ZSBwYWlycy4iKX0pfSksYV89dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1pbnB1dC1wYXJ0aWFsIikscGFyYW1zOnYoe2FyZ3VtZW50czpFKGYoKSxaKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBhcnRpYWwgdG9vbCBjYWxsIGFyZ3VtZW50cyAoaW5jb21wbGV0ZSwgbWF5IGNoYW5nZSkuIil9KX0pLGNfPXYoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtY2FuY2VsbGVkIikscGFyYW1zOnYoe3JlYXNvbjpmKCkub3B0aW9uYWwoKS5kZXNjcmliZSgnT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgY2FuY2VsbGF0aW9uIChlLmcuLCAidXNlciBhY3Rpb24iLCAidGltZW91dCIpLicpfSl9KSx1Xz12KHtmb250czpmKCkub3B0aW9uYWwoKX0pLGxfPXYoe3ZhcmlhYmxlczpuXy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1MgdmFyaWFibGVzIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksY3NzOnVfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyBibG9ja3MgdGhhdCBhcHBzIGNhbiBpbmplY3QuIil9KSxkXz12KHttZXRob2Q6aCgidWkvcmVzb3VyY2UtdGVhcmRvd24iKSxwYXJhbXM6dih7fSl9KTtFKGYoKSxaKCkpO3ZhciBLYz12KHt0ZXh0OnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdGV4dCBjb250ZW50IGJsb2Nrcy4iKSxpbWFnZTp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGltYWdlIGNvbnRlbnQgYmxvY2tzLiIpLGF1ZGlvOnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgYXVkaW8gY29udGVudCBibG9ja3MuIikscmVzb3VyY2U6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZUxpbms6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZXNvdXJjZSBsaW5rIGNvbnRlbnQgYmxvY2tzLiIpLHN0cnVjdHVyZWRDb250ZW50OnYoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgc3RydWN0dXJlZCBjb250ZW50LiIpfSk7dih7bWV0aG9kOmgoInVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIpLHBhcmFtczp2KHt9KS5vcHRpb25hbCgpfSk7dmFyIHBfPXYoe2V4cGVyaW1lbnRhbDpFKGYoKSxFKGYoKSwkbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLG9wZW5MaW5rczp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIG9wZW5pbmcgZXh0ZXJuYWwgVVJMcy4iKSxkb3dubG9hZEZpbGU6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBmaWxlIGRvd25sb2FkcyB2aWEgdWkvZG93bmxvYWQtZmlsZS4iKSxzZXJ2ZXJUb29sczp2KHtsaXN0Q2hhbmdlZDpBKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0b29scy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHRvb2wgY2FsbHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksc2VydmVyUmVzb3VyY2VzOnYoe2xpc3RDaGFuZ2VkOkEoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlcy9saXN0X2NoYW5nZWQgbm90aWZpY2F0aW9ucy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgY2FuIHByb3h5IHJlc291cmNlIHJlYWRzIHRvIHRoZSBNQ1Agc2VydmVyLiIpLGxvZ2dpbmc6dih7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBhY2NlcHRzIGxvZyBtZXNzYWdlcy4iKSxzYW5kYm94OnYoe3Blcm1pc3Npb25zOmNjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhlIGhvc3QgKGNhbWVyYSwgbWljcm9waG9uZSwgZ2VvbG9jYXRpb24pLiIpLGNzcDphYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgZG9tYWlucyBhcHByb3ZlZCBieSB0aGUgaG9zdC4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggY29uZmlndXJhdGlvbiBhcHBsaWVkIGJ5IHRoZSBob3N0LiIpLHVwZGF0ZU1vZGVsQ29udGV4dDpLYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgY29udGV4dCB1cGRhdGVzICh1aS91cGRhdGUtbW9kZWwtY29udGV4dCkgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBmb3IgZnV0dXJlIHR1cm5zLiIpLG1lc3NhZ2U6S2Mub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyByZWNlaXZpbmcgY29udGVudCBtZXNzYWdlcyAodWkvbWVzc2FnZSkgZnJvbSB0aGUgdmlldy4iKSxzYW1wbGluZzp2KHt0b29sczp2KHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2wgdXNlIHZpYSBgdG9vbHNgIGFuZCBgdG9vbENob2ljZWAgcGFyYW1ldGVycy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgTExNIHNhbXBsaW5nIChzYW1wbGluZy9jcmVhdGVNZXNzYWdlKSBmcm9tIHRoZSB2aWV3LlxuTWlycm9ycyB0aGUgTUNQIGBDbGllbnRDYXBhYmlsaXRpZXMuc2FtcGxpbmdgIHNoYXBlIHNvIGhvc3RzIGNhbiBwYXNzIGl0IHRocm91Z2guIil9KSxmXz12KHtleHBlcmltZW50YWw6RShmKCksRShmKCksJG4oKSkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSx0b29sczp2KHtsaXN0Q2hhbmdlZDpBKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQXBwIGV4cG9zZXMgTUNQLXN0eWxlIHRvb2xzIHRoYXQgdGhlIGhvc3QgY2FuIGNhbGwuIiksYXZhaWxhYmxlRGlzcGxheU1vZGVzOlMoQ3QpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkRpc3BsYXkgbW9kZXMgdGhlIGFwcCBzdXBwb3J0cy4iKX0pO3Yoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOnYoe30pLm9wdGlvbmFsKCl9KTt2KHtjc3A6YWMub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29uZmlndXJhdGlvbiBmb3IgVUkgcmVzb3VyY2VzLiIpLHBlcm1pc3Npb25zOmNjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgcmVxdWVzdGVkIGJ5IHRoZSBVSSByZXNvdXJjZS4iKSxkb21haW46ZigpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYERlZGljYXRlZCBvcmlnaW4gZm9yIHZpZXcgc2FuZGJveC4KClVzZWZ1bCB3aGVuIHZpZXdzIG5lZWQgc3RhYmxlLCBkZWRpY2F0ZWQgb3JpZ2lucyBmb3IgT0F1dGggY2FsbGJhY2tzLCBDT1JTIHBvbGljaWVzLCBvciBBUEkga2V5IGFsbG93bGlzdHMuCgoqKkhvc3QtZGVwZW5kZW50OioqIFRoZSBmb3JtYXQgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZmllbGQgYXJlIGRldGVybWluZWQgYnkgZWFjaCBob3N0LiBTZXJ2ZXJzIE1VU1QgY29uc3VsdCBob3N0LXNwZWNpZmljIGRvY3VtZW50YXRpb24gZm9yIHRoZSBleHBlY3RlZCBkb21haW4gZm9ybWF0LiBDb21tb24gcGF0dGVybnMgaW5jbHVkZToKLSBIYXNoLWJhc2VkIHN1YmRvbWFpbnMgKGUuZy4sIFxge2hhc2h9LmNsYXVkZW1jcGNvbnRlbnQuY29tXGApCi0gVVJMLWRlcml2ZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB3d3ctZXhhbXBsZS1jb20ub2FpdXNlcmNvbnRlbnQuY29tXGApCgpJZiBvbWl0dGVkLCBob3N0IHVzZXMgZGVmYXVsdCBzYW5kYm94IG9yaWdpbiAodHlwaWNhbGx5IHBlci1jb252ZXJzYXRpb24pLmApLHByZWZlcnNCb3JkZXI6QSgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYFZpc3VhbCBib3VuZGFyeSBwcmVmZXJlbmNlIC0gdHJ1ZSBpZiB2aWV3IHByZWZlcnMgYSB2aXNpYmxlIGJvcmRlci4KCkJvb2xlYW4gcmVxdWVzdGluZyB3aGV0aGVyIGEgdmlzaWJsZSBib3JkZXIgYW5kIGJhY2tncm91bmQgaXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIFNwZWNpZnlpbmcgYW4gZXhwbGljaXQgdmFsdWUgZm9yIHRoaXMgaXMgcmVjb21tZW5kZWQgYmVjYXVzZSBob3N0cycgZGVmYXVsdHMgbWF5IHZhcnkuCgotIFxgdHJ1ZVxgOiByZXF1ZXN0IHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIFxgZmFsc2VcYDogcmVxdWVzdCBubyB2aXNpYmxlIGJvcmRlciArIGJhY2tncm91bmQKLSBvbWl0dGVkOiBob3N0IGRlY2lkZXMgYm9yZGVyYCl9KTt2KHttZXRob2Q6aCgidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiKSxwYXJhbXM6dih7bW9kZTpDdC5kZXNjcmliZSgiVGhlIGRpc3BsYXkgbW9kZSBiZWluZyByZXF1ZXN0ZWQuIil9KX0pO3ZhciBoXz12KHttb2RlOkN0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIHRoYXQgd2FzIGFjdHVhbGx5IHNldC4gTWF5IGRpZmZlciBmcm9tIHJlcXVlc3RlZCBpZiBub3Qgc3VwcG9ydGVkLiIpfSkucGFzc3Rocm91Z2goKSxtXz1JKFtoKCJtb2RlbCIpLGgoImFwcCIpXSkuZGVzY3JpYmUoIlRvb2wgdmlzaWJpbGl0eSBzY29wZSAtIHdobyBjYW4gYWNjZXNzIHRoZSB0b29sLiIpO3Yoe3Jlc291cmNlVXJpOmYoKS5vcHRpb25hbCgpLHZpc2liaWxpdHk6UyhtXykub3B0aW9uYWwoKS5kZXNjcmliZShgV2hvIGNhbiBhY2Nlc3MgdGhpcyB0b29sLiBEZWZhdWx0OiBbIm1vZGVsIiwgImFwcCJdCi0gIm1vZGVsIjogVG9vbCB2aXNpYmxlIHRvIGFuZCBjYWxsYWJsZSBieSB0aGUgYWdlbnQKLSAiYXBwIjogVG9vbCBjYWxsYWJsZSBieSB0aGUgYXBwIGZyb20gdGhpcyBzZXJ2ZXIgb25seWApLGNzcDpxZSgpLm9wdGlvbmFsKCkscGVybWlzc2lvbnM6cWUoKS5vcHRpb25hbCgpfSk7dih7bWltZVR5cGVzOlMoZigpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdBcnJheSBvZiBzdXBwb3J0ZWQgTUlNRSB0eXBlcyBmb3IgVUkgcmVzb3VyY2VzLlxuTXVzdCBpbmNsdWRlIGAidGV4dC9odG1sO3Byb2ZpbGU9bWNwLWFwcCJgIGZvciBNQ1AgQXBwcyBzdXBwb3J0LicpfSk7dih7bWV0aG9kOmgoInVpL2Rvd25sb2FkLWZpbGUiKSxwYXJhbXM6dih7Y29udGVudHM6UyhJKFtrZixTZl0pKS5kZXNjcmliZSgiUmVzb3VyY2UgY29udGVudHMgdG8gZG93bmxvYWQg4oCUIGVtYmVkZGVkIChpbmxpbmUgZGF0YSkgb3IgbGlua2VkIChob3N0IGZldGNoZXMpLiBVc2VzIHN0YW5kYXJkIE1DUCByZXNvdXJjZSB0eXBlcy4iKX0pfSk7dih7bWV0aG9kOmgoInVpL21lc3NhZ2UiKSxwYXJhbXM6dih7cm9sZTpoKCJ1c2VyIikuZGVzY3JpYmUoJ01lc3NhZ2Ugcm9sZSwgY3VycmVudGx5IG9ubHkgInVzZXIiIGlzIHN1cHBvcnRlZC4nKSxjb250ZW50OlMoTW4pLmRlc2NyaWJlKCJNZXNzYWdlIGNvbnRlbnQgYmxvY2tzICh0ZXh0LCBpbWFnZSwgZXRjLikuIil9KX0pO3Yoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcmVzb3VyY2UtcmVhZHkiKSxwYXJhbXM6dih7aHRtbDpmKCkuZGVzY3JpYmUoIkhUTUwgY29udGVudCB0byBsb2FkIGludG8gdGhlIGlubmVyIGlmcmFtZS4iKSxzYW5kYm94OmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIGlubmVyIGlmcmFtZSdzIHNhbmRib3ggYXR0cmlidXRlLiIpLGNzcDphYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDU1AgY29uZmlndXJhdGlvbiBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpLHBlcm1pc3Npb25zOmNjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlNhbmRib3ggcGVybWlzc2lvbnMgZnJvbSByZXNvdXJjZSBtZXRhZGF0YS4iKX0pfSk7dmFyIGdfPXYoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtcmVzdWx0IikscGFyYW1zOlNyLmRlc2NyaWJlKCJTdGFuZGFyZCBNQ1AgdG9vbCBleGVjdXRpb24gcmVzdWx0LiIpfSkseGY9dih7dG9vbEluZm86dih7aWQ6Q24ub3B0aW9uYWwoKS5kZXNjcmliZSgiSlNPTi1SUEMgaWQgb2YgdGhlIHRvb2xzL2NhbGwgcmVxdWVzdC4iKSx0b29sOmljLmRlc2NyaWJlKCJUb29sIGRlZmluaXRpb24gaW5jbHVkaW5nIG5hbWUsIGlucHV0U2NoZW1hLCBldGMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNZXRhZGF0YSBvZiB0aGUgdG9vbCBjYWxsIHRoYXQgaW5zdGFudGlhdGVkIHRoaXMgQXBwLiIpLHRoZW1lOmVfLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkN1cnJlbnQgY29sb3IgdGhlbWUgcHJlZmVyZW5jZS4iKSxzdHlsZXM6bF8ub3B0aW9uYWwoKS5kZXNjcmliZSgiU3R5bGUgY29uZmlndXJhdGlvbiBmb3IgdGhlbWluZyB0aGUgYXBwLiIpLGRpc3BsYXlNb2RlOkN0Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvdyB0aGUgVUkgaXMgY3VycmVudGx5IGRpc3BsYXllZC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UyhDdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgaG9zdCBzdXBwb3J0cy4iKSxjb250YWluZXJEaW1lbnNpb25zOkkoW3Yoe2hlaWdodDpUKCkuZGVzY3JpYmUoIkZpeGVkIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSksdih7bWF4SGVpZ2h0OkkoW1QoKSxldCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgaGVpZ2h0IGluIHBpeGVscy4iKX0pXSkuYW5kKEkoW3Yoe3dpZHRoOlQoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIHdpZHRoIGluIHBpeGVscy4iKX0pLHYoe21heFdpZHRoOkkoW1QoKSxldCgpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTWF4aW11bSBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSldKSkub3B0aW9uYWwoKS5kZXNjcmliZShgQ29udGFpbmVyIGRpbWVuc2lvbnMuIFJlcHJlc2VudHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGlmcmFtZSBvciBvdGhlcgpjb250YWluZXIgaG9sZGluZyB0aGUgYXBwLiBTcGVjaWZ5IGVpdGhlciB3aWR0aCBvciBtYXhXaWR0aCwgYW5kIGVpdGhlciBoZWlnaHQgb3IgbWF4SGVpZ2h0LmApLGxvY2FsZTpmKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVXNlcidzIGxhbmd1YWdlIGFuZCByZWdpb24gcHJlZmVyZW5jZSBpbiBCQ1AgNDcgZm9ybWF0LiIpLHRpbWVab25lOmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgdGltZXpvbmUgaW4gSUFOQSBmb3JtYXQuIiksdXNlckFnZW50OmYoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpZXIuIikscGxhdGZvcm06SShbaCgid2ViIiksaCgiZGVza3RvcCIpLGgoIm1vYmlsZSIpXSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGxhdGZvcm0gdHlwZSBmb3IgcmVzcG9uc2l2ZSBkZXNpZ24gZGVjaXNpb25zLiIpLGRldmljZUNhcGFiaWxpdGllczp2KHt0b3VjaDpBKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiV2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoIGlucHV0LiIpLGhvdmVyOkEoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIgaW50ZXJhY3Rpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGV2aWNlIGlucHV0IGNhcGFiaWxpdGllcy4iKSxzYWZlQXJlYUluc2V0czp2KHt0b3A6VCgpLmRlc2NyaWJlKCJUb3Agc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxyaWdodDpUKCkuZGVzY3JpYmUoIlJpZ2h0IHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksYm90dG9tOlQoKS5kZXNjcmliZSgiQm90dG9tIHNhZmUgYXJlYSBpbnNldCBpbiBwaXhlbHMuIiksbGVmdDpUKCkuZGVzY3JpYmUoIkxlZnQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1vYmlsZSBzYWZlIGFyZWEgYm91bmRhcmllcyBpbiBwaXhlbHMuIil9KS5wYXNzdGhyb3VnaCgpLHZfPXYoe21ldGhvZDpoKCJ1aS9ub3RpZmljYXRpb25zL2hvc3QtY29udGV4dC1jaGFuZ2VkIikscGFyYW1zOnhmLmRlc2NyaWJlKCJQYXJ0aWFsIGNvbnRleHQgdXBkYXRlIGNvbnRhaW5pbmcgb25seSBjaGFuZ2VkIGZpZWxkcy4iKX0pO3Yoe21ldGhvZDpoKCJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIpLHBhcmFtczp2KHtjb250ZW50OlMoTW4pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbnRleHQgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKSxzdHJ1Y3R1cmVkQ29udGVudDpFKGYoKSxaKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlN0cnVjdHVyZWQgY29udGVudCBmb3IgbWFjaGluZS1yZWFkYWJsZSBjb250ZXh0IGRhdGEuIil9KX0pO3Yoe21ldGhvZDpoKCJ1aS9pbml0aWFsaXplIikscGFyYW1zOnYoe2FwcEluZm86d3IuZGVzY3JpYmUoIkFwcCBpZGVudGlmaWNhdGlvbiAobmFtZSBhbmQgdmVyc2lvbikuIiksYXBwQ2FwYWJpbGl0aWVzOmZfLmRlc2NyaWJlKCJGZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzIHRoaXMgYXBwIHByb3ZpZGVzLiIpLHByb3RvY29sVmVyc2lvbjpmKCkuZGVzY3JpYmUoIlByb3RvY29sIHZlcnNpb24gdGhpcyBhcHAgc3VwcG9ydHMuIil9KX0pO3ZhciBiXz12KHtwcm90b2NvbFZlcnNpb246ZigpLmRlc2NyaWJlKCdOZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24gc3RyaW5nIChlLmcuLCAiMjAyNS0xMS0yMSIpLicpLGhvc3RJbmZvOndyLmRlc2NyaWJlKCJIb3N0IGFwcGxpY2F0aW9uIGlkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uLiIpLGhvc3RDYXBhYmlsaXRpZXM6cF8uZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIGhvc3QuIiksaG9zdENvbnRleHQ6eGYuZGVzY3JpYmUoIlJpY2ggY29udGV4dCBhYm91dCB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKX0pLnBhc3N0aHJvdWdoKCksX189e3RhcmdldDoiZHJhZnQtMjAyMC0xMiJ9O2FzeW5jIGZ1bmN0aW9uIFdjKGUsdCl7bGV0IG49ZVsifnN0YW5kYXJkIl07aWYobi5qc29uU2NoZW1hKXJldHVybiBuLmpzb25TY2hlbWFbdF0oX18pO2lmKG4udmVuZG9yPT09InpvZCIpe2xldHt6Om99PWF3YWl0IEpmKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5hdiksdm9pZCAwLGltcG9ydC5tZXRhLnVybCk7cmV0dXJuIG8udG9KU09OU2NoZW1hKGUse2lvOnR9KX10aHJvdyBFcnJvcihgU2NoZW1hICh2ZW5kb3I6ICR7bi52ZW5kb3J9KSBkb2VzIG5vdCBpbXBsZW1lbnQgU3RhbmRhcmQgSlNPTiBTY2hlbWEgKH5zdGFuZGFyZC5qc29uU2NoZW1hKS4gVXNlIGEgbGlicmFyeSB0aGF0IGRvZXMgKHpvZCB2NCwgQXJrVHlwZSwgVmFsaWJvdCkgb3Igd3JhcCB5b3VyIHNjaGVtYSBhY2NvcmRpbmdseS5gKX1hc3luYyBmdW5jdGlvbiBHYyhlLHQsbj0iIil7bGV0IG89YXdhaXQgZVsifnN0YW5kYXJkIl0udmFsaWRhdGUodCk7aWYoby5pc3N1ZXMpe2xldCByPW8uaXNzdWVzLm1hcChzPT57bGV0IGk9cy5wYXRoPy5tYXAoYT0+dHlwZW9mIGE9PSJvYmplY3QiP2Eua2V5OmEpLmpvaW4oIi4iKTtyZXR1cm4gaT9gJHtpfTogJHtzLm1lc3NhZ2V9YDpzLm1lc3NhZ2V9KS5qb2luKCI7ICIpO3Rocm93IEVycm9yKG4rcil9cmV0dXJuIG8udmFsdWV9ZnVuY3Rpb24geV8oZSl7bGV0IHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3Quc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixlKSx0LnN0eWxlLmNvbG9yU2NoZW1lPWV9ZnVuY3Rpb24gd18oZSx0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7Zm9yKGxldFtuLG9db2YgT2JqZWN0LmVudHJpZXMoZSkpbyE9PXZvaWQgMCYmdC5zdHlsZS5zZXRQcm9wZXJ0eShuLG8pfWZ1bmN0aW9uIGtfKGUpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJfX21jcC1ob3N0LWZvbnRzIikpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC5pZD0iX19tY3AtaG9zdC1mb250cyIsdC50ZXh0Q29udGVudD1lLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9Y2xhc3MgdWMgZXh0ZW5kcyBHYntfYXBwSW5mbztfY2FwYWJpbGl0aWVzO29wdGlvbnM7X2hvc3RDYXBhYmlsaXRpZXM7X2hvc3RJbmZvO19ob3N0Q29udGV4dDtfcmVnaXN0ZXJlZFRvb2xzPXt9O19pbml0aWFsaXplZFNlbnQ9ITE7X2Fzc2VydEluaXRpYWxpemVkKHQpe2lmKHRoaXMuX2luaXRpYWxpemVkU2VudClyZXR1cm47bGV0IG49YFtleHQtYXBwc10gQXBwLiR7dH0oKSBjYWxsZWQgYmVmb3JlIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBBd2FpdCBhcHAuY29ubmVjdCgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLCBvciBtb3ZlIGRhdGEgbG9hZGluZyB0byBhbiBvbnRvb2xyZXN1bHQgaGFuZGxlci5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihgJHtufS4gVGhpcyB3aWxsIHRocm93IGluIGEgZnV0dXJlIHJlbGVhc2UuYCl9ZXZlbnRTY2hlbWFzPXt0b29saW5wdXQ6aV8sdG9vbGlucHV0cGFydGlhbDphXyx0b29scmVzdWx0OmdfLHRvb2xjYW5jZWxsZWQ6Y18saG9zdGNvbnRleHRjaGFuZ2VkOnZffTtzdGF0aWMgT05FX1NIT1RfRVZFTlRTPW5ldyBTZXQoWyJ0b29saW5wdXQiLCJ0b29saW5wdXRwYXJ0aWFsIiwidG9vbHJlc3VsdCIsInRvb2xjYW5jZWxsZWQiXSk7X2V2ZXJIYWRMaXN0ZW5lcj1uZXcgU2V0O19hc3NlcnRIYW5kbGVyVGltaW5nKHQpe2lmKCF1Yy5PTkVfU0hPVF9FVkVOVFMuaGFzKHQpfHx0aGlzLl9ldmVySGFkTGlzdGVuZXIuaGFzKHQpfHwodGhpcy5fZXZlckhhZExpc3RlbmVyLmFkZCh0KSwhdGhpcy5faW5pdGlhbGl6ZWRTZW50KSlyZXR1cm47bGV0IG49YFtleHQtYXBwc10gIiR7U3RyaW5nKHQpfSIgaGFuZGxlciByZWdpc3RlcmVkIGFmdGVyIGNvbm5lY3QoKSBjb21wbGV0ZWQgdGhlIHVpL2luaXRpYWxpemUgaGFuZHNoYWtlLiBUaGUgaG9zdCBtYXkgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyBub3RpZmljYXRpb24uIFJlZ2lzdGVyIGhhbmRsZXJzIGJlZm9yZSBjYWxsaW5nIGFwcC5jb25uZWN0KCkuYDtpZih0aGlzLm9wdGlvbnM/LnN0cmljdCl0aHJvdyBFcnJvcihuKTtjb25zb2xlLndhcm4obil9c2V0RXZlbnRIYW5kbGVyKHQsbil7biYmdGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5zZXRFdmVudEhhbmRsZXIodCxuKX1hZGRFdmVudExpc3RlbmVyKHQsbil7dGhpcy5fYXNzZXJ0SGFuZGxlclRpbWluZyh0KSxzdXBlci5hZGRFdmVudExpc3RlbmVyKHQsbil9b25FdmVudERpc3BhdGNoKHQsbil7dD09PSJob3N0Y29udGV4dGNoYW5nZWQiJiYodGhpcy5faG9zdENvbnRleHQ9ey4uLnRoaXMuX2hvc3RDb250ZXh0LC4uLm59KX1jb25zdHJ1Y3Rvcih0LG49e30sbz17YXV0b1Jlc2l6ZTohMH0pe3N1cGVyKG8pLHRoaXMuX2FwcEluZm89dCx0aGlzLl9jYXBhYmlsaXRpZXM9bix0aGlzLm9wdGlvbnM9byxvLmFsbG93VW5zYWZlRXZhbHx8Sih7aml0bGVzczohMH0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoa3Iscj0+KGNvbnNvbGUubG9nKCJSZWNlaXZlZCBwaW5nOiIsci5wYXJhbXMpLHt9KSksdGhpcy5zZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIsdm9pZCAwKX1yZWdpc3RlckNhcGFiaWxpdGllcyh0KXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQ2Fubm90IHJlZ2lzdGVyIGNhcGFiaWxpdGllcyBhZnRlciB0cmFuc3BvcnQgaXMgZXN0YWJsaXNoZWQiKTt0aGlzLl9jYXBhYmlsaXRpZXM9V2IodGhpcy5fY2FwYWJpbGl0aWVzLHQpfXJlZ2lzdGVyVG9vbCh0LG4sbyl7aWYodGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3RdKXRocm93IEVycm9yKGBUb29sICR7dH0gaXMgYWxyZWFkeSByZWdpc3RlcmVkYCk7bGV0IHI9dGhpcyxzPSgpPT57ci5faW5pdGlhbGl6ZWRTZW50JiZyLl9jYXBhYmlsaXRpZXMudG9vbHM/Lmxpc3RDaGFuZ2VkJiZyLnNlbmRUb29sTGlzdENoYW5nZWQoKX0saT1uLmlucHV0U2NoZW1hIT09dm9pZCAwLGE9e3RpdGxlOm4udGl0bGUsZGVzY3JpcHRpb246bi5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpuLmlucHV0U2NoZW1hLG91dHB1dFNjaGVtYTpuLm91dHB1dFNjaGVtYSxhbm5vdGF0aW9uczpuLmFubm90YXRpb25zLF9tZXRhOm4uX21ldGEsZW5hYmxlZDohMCxlbmFibGUoKXt0aGlzLmVuYWJsZWQ9ITAscygpfSxkaXNhYmxlKCl7dGhpcy5lbmFibGVkPSExLHMoKX0sdXBkYXRlKGMpe09iamVjdC5hc3NpZ24odGhpcyxjKSxzKCl9LHJlbW92ZSgpe3IuX3JlZ2lzdGVyZWRUb29sc1t0XT09PWEmJihkZWxldGUgci5fcmVnaXN0ZXJlZFRvb2xzW3RdLHMoKSl9LGhhbmRsZXI6YXN5bmMoYyx1KT0+e2lmKCFhLmVuYWJsZWQpdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBkaXNhYmxlZGApO2xldCBsO2lmKGkpe2xldCBwPWEuaW5wdXRTY2hlbWEsZz1wP2F3YWl0IEdjKHAsYz8/e30sYEludmFsaWQgaW5wdXQgZm9yIHRvb2wgJHt0fTogYCk6Yz8/e307bD1hd2FpdCBvKGcsdSl9ZWxzZSBsPWF3YWl0IG8odSk7cmV0dXJuIGEub3V0cHV0U2NoZW1hJiYhbC5pc0Vycm9yJiYobC5zdHJ1Y3R1cmVkQ29udGVudD1hd2FpdCBHYyhhLm91dHB1dFNjaGVtYSxsLnN0cnVjdHVyZWRDb250ZW50LGBJbnZhbGlkIG91dHB1dCBmb3IgdG9vbCAke3R9OiBgKSksbH19O3JldHVybiB0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF09YSwhdGhpcy5fY2FwYWJpbGl0aWVzLnRvb2xzJiYhdGhpcy50cmFuc3BvcnQmJnRoaXMucmVnaXN0ZXJDYXBhYmlsaXRpZXMoe3Rvb2xzOntsaXN0Q2hhbmdlZDohMH19KSx0aGlzLmVuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCkscygpLGF9X3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSExO2Vuc3VyZVRvb2xIYW5kbGVyc0luaXRpYWxpemVkKCl7dGhpcy5fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWR8fCh0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZD0hMCx0aGlzLm9uY2FsbHRvb2w9YXN5bmModCxuKT0+e2xldCBvPXRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0Lm5hbWVdO2lmKCFvKXRocm93IEVycm9yKGBUb29sICR7dC5uYW1lfSBub3QgZm91bmRgKTtyZXR1cm4gby5oYW5kbGVyKHQuYXJndW1lbnRzLG4pfSx0aGlzLm9ubGlzdHRvb2xzPWFzeW5jKHQsbik9Pih7dG9vbHM6YXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LmVudHJpZXModGhpcy5fcmVnaXN0ZXJlZFRvb2xzKS5maWx0ZXIoKFtvLHJdKT0+ci5lbmFibGVkKS5tYXAoYXN5bmMoW28scl0pPT57bGV0IHM9e25hbWU6byx0aXRsZTpyLnRpdGxlLGRlc2NyaXB0aW9uOnIuZGVzY3JpcHRpb24saW5wdXRTY2hlbWE6ci5pbnB1dFNjaGVtYT9hd2FpdCBXYyhyLmlucHV0U2NoZW1hLCJpbnB1dCIpOnt0eXBlOiJvYmplY3QiLHByb3BlcnRpZXM6e319fTtyZXR1cm4gci5vdXRwdXRTY2hlbWEmJihzLm91dHB1dFNjaGVtYT1hd2FpdCBXYyhyLm91dHB1dFNjaGVtYSwib3V0cHV0IikpLHIuYW5ub3RhdGlvbnMmJihzLmFubm90YXRpb25zPXIuYW5ub3RhdGlvbnMpLHIuX21ldGEmJihzLl9tZXRhPXIuX21ldGEpLHN9KSl9KSl9YXN5bmMgc2VuZFRvb2xMaXN0Q2hhbmdlZCh0PXt9KXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZFRvb2xMaXN0Q2hhbmdlZCIpLGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIixwYXJhbXM6dH0pfWdldEhvc3RDYXBhYmlsaXRpZXMoKXtyZXR1cm4gdGhpcy5faG9zdENhcGFiaWxpdGllc31nZXRIb3N0VmVyc2lvbigpe3JldHVybiB0aGlzLl9ob3N0SW5mb31nZXRIb3N0Q29udGV4dCgpe3JldHVybiB0aGlzLl9ob3N0Q29udGV4dH1nZXQgb250b29saW5wdXQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dCIpfXNldCBvbnRvb2xpbnB1dCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iix0KX1nZXQgb250b29saW5wdXRwYXJ0aWFsKCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIil9c2V0IG9udG9vbGlucHV0cGFydGlhbCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbGlucHV0cGFydGlhbCIsdCl9Z2V0IG9udG9vbHJlc3VsdCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIpfXNldCBvbnRvb2xyZXN1bHQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xyZXN1bHQiLHQpfWdldCBvbnRvb2xjYW5jZWxsZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiKX1zZXQgb250b29sY2FuY2VsbGVkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29sY2FuY2VsbGVkIix0KX1nZXQgb25ob3N0Y29udGV4dGNoYW5nZWQoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoImhvc3Rjb250ZXh0Y2hhbmdlZCIpfXNldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix0KX1fb250ZWFyZG93bjtnZXQgb250ZWFyZG93bigpe3JldHVybiB0aGlzLl9vbnRlYXJkb3dufXNldCBvbnRlYXJkb3duKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib250ZWFyZG93biIsdGhpcy5fb250ZWFyZG93bix0KSx0aGlzLl9vbnRlYXJkb3duPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoZF8sKG4sbyk9PntpZighdGhpcy5fb250ZWFyZG93bil0aHJvdyBFcnJvcigiTm8gb250ZWFyZG93biBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbnRlYXJkb3duKG4ucGFyYW1zLG8pfSl9X29uY2FsbHRvb2w7Z2V0IG9uY2FsbHRvb2woKXtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbH1zZXQgb25jYWxsdG9vbCh0KXt0aGlzLndhcm5JZlJlcXVlc3RIYW5kbGVyUmVwbGFjZWQoIm9uY2FsbHRvb2wiLHRoaXMuX29uY2FsbHRvb2wsdCksdGhpcy5fb25jYWxsdG9vbD10LHRoaXMucmVwbGFjZVJlcXVlc3RIYW5kbGVyKHpmLChuLG8pPT57aWYoIXRoaXMuX29uY2FsbHRvb2wpdGhyb3cgRXJyb3IoIk5vIG9uY2FsbHRvb2wgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25jYWxsdG9vbChuLnBhcmFtcyxvKX0pfV9vbmxpc3R0b29scztnZXQgb25saXN0dG9vbHMoKXtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHN9c2V0IG9ubGlzdHRvb2xzKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25saXN0dG9vbHMiLHRoaXMuX29ubGlzdHRvb2xzLHQpLHRoaXMuX29ubGlzdHRvb2xzPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoJGYsKG4sbyk9PntpZighdGhpcy5fb25saXN0dG9vbHMpdGhyb3cgRXJyb3IoIk5vIG9ubGlzdHRvb2xzIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29ubGlzdHRvb2xzKG4ucGFyYW1zLG8pfSl9YXNzZXJ0Q2FwYWJpbGl0eUZvck1ldGhvZCh0KXtzd2l0Y2godCl7Y2FzZSJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIjppZighdGhpcy5faG9zdENhcGFiaWxpdGllcz8uc2FtcGxpbmcpdGhyb3cgRXJyb3IoYEhvc3QgZG9lcyBub3Qgc3VwcG9ydCBzYW1wbGluZyAocmVxdWlyZWQgZm9yICR7dH0pYCk7YnJlYWt9fWFzc2VydFJlcXVlc3RIYW5kbGVyQ2FwYWJpbGl0eSh0KXtzd2l0Y2godCl7Y2FzZSJ0b29scy9jYWxsIjpjYXNlInRvb2xzL2xpc3QiOmlmKCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMpdGhyb3cgRXJyb3IoYENsaWVudCBkb2VzIG5vdCBzdXBwb3J0IHRvb2wgY2FwYWJpbGl0eSAocmVxdWlyZWQgZm9yICR7dH0pYCk7cmV0dXJuO2Nhc2UicGluZyI6Y2FzZSJ1aS9yZXNvdXJjZS10ZWFyZG93biI6cmV0dXJuO2RlZmF1bHQ6dGhyb3cgRXJyb3IoYE5vIGhhbmRsZXIgZm9yIG1ldGhvZCAke3R9IHJlZ2lzdGVyZWRgKX19YXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0KXt9YXNzZXJ0VGFza0NhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2tzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQpe3Rocm93IEVycm9yKCJUYXNrIGhhbmRsZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIE1DUCBBcHBzIil9YXN5bmMgY2FsbFNlcnZlclRvb2wodCxuKXtpZih0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY2FsbFNlcnZlclRvb2wiKSx0eXBlb2YgdD09InN0cmluZyIpdGhyb3cgRXJyb3IoYGNhbGxTZXJ2ZXJUb29sKCkgZXhwZWN0cyBhbiBvYmplY3QgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LCBidXQgcmVjZWl2ZWQgYSBzdHJpbmcgKCIke3R9IikuIERpZCB5b3UgbWVhbjogY2FsbFNlcnZlclRvb2woeyBuYW1lOiAiJHt0fSIsIGFyZ3VtZW50czogeyAuLi4gfSB9KT9gKTtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRvb2xzL2NhbGwiLHBhcmFtczp0fSxTcix7b25wcm9ncmVzczooKT0+e30scmVzZXRUaW1lb3V0T25Qcm9ncmVzczohMCwuLi5ufSl9YXN5bmMgcmVhZFNlcnZlclJlc291cmNlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZWFkU2VydmVyUmVzb3VyY2UiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL3JlYWQiLHBhcmFtczp0fSx3ZixuKX1hc3luYyBsaXN0U2VydmVyUmVzb3VyY2VzKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJsaXN0U2VydmVyUmVzb3VyY2VzIiksYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InJlc291cmNlcy9saXN0IixwYXJhbXM6dH0seWYsbil9YXN5bmMgY3JlYXRlU2FtcGxpbmdNZXNzYWdlKHQsbil7dGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImNyZWF0ZVNhbXBsaW5nTWVzc2FnZSIpO2xldCBvPXQudG9vbHM/SWY6UGY7cmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIixwYXJhbXM6dH0sbyxuKX1zZW5kTWVzc2FnZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgic2VuZE1lc3NhZ2UiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvbWVzc2FnZSIscGFyYW1zOnR9LHNfLG4pfXNlbmRMb2codCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvbWVzc2FnZSIscGFyYW1zOnR9KX11cGRhdGVNb2RlbENvbnRleHQodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInVwZGF0ZU1vZGVsQ29udGV4dCIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS91cGRhdGUtbW9kZWwtY29udGV4dCIscGFyYW1zOnR9LEJhLG4pfW9wZW5MaW5rKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJvcGVuTGluayIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9vcGVuLWxpbmsiLHBhcmFtczp0fSxvXyxuKX1zZW5kT3Blbkxpbms9dGhpcy5vcGVuTGluaztkb3dubG9hZEZpbGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImRvd25sb2FkRmlsZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9kb3dubG9hZC1maWxlIixwYXJhbXM6dH0scl8sbil9cmVxdWVzdFRlYXJkb3duKHQ9e30pe3JldHVybiB0aGlzLm5vdGlmaWNhdGlvbih7bWV0aG9kOiJ1aS9ub3RpZmljYXRpb25zL3JlcXVlc3QtdGVhcmRvd24iLHBhcmFtczp0fSl9cmVxdWVzdERpc3BsYXlNb2RlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJyZXF1ZXN0RGlzcGxheU1vZGUiKSx0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvcmVxdWVzdC1kaXNwbGF5LW1vZGUiLHBhcmFtczp0fSxoXyxuKX1zZW5kU2l6ZUNoYW5nZWQodCl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvc2l6ZS1jaGFuZ2VkIixwYXJhbXM6dH0pfXNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl7bGV0IHQ9ITEsbj0wLG89MCxyPSgpPT57dHx8KHQ9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dD0hMTtsZXQgaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT1pLnN0eWxlLmhlaWdodDtpLnN0eWxlLmhlaWdodD0ibWF4LWNvbnRlbnQiO2xldCBjPU1hdGguY2VpbChpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7aS5zdHlsZS5oZWlnaHQ9YTtsZXQgdT1NYXRoLmNlaWwod2luZG93LmlubmVyV2lkdGgpOyh1IT09bnx8YyE9PW8pJiYobj11LG89Yyx0aGlzLnNlbmRTaXplQ2hhbmdlZCh7d2lkdGg6dSxoZWlnaHQ6Y30pKX0pKX07cigpO2xldCBzPW5ldyBSZXNpemVPYnNlcnZlcihyKTtyZXR1cm4gcy5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkscy5vYnNlcnZlKGRvY3VtZW50LmJvZHkpLCgpPT5zLmRpc2Nvbm5lY3QoKX1hc3luYyBjb25uZWN0KHQ9bmV3IFhiKHdpbmRvdy5wYXJlbnQsd2luZG93LnBhcmVudCksbil7aWYodGhpcy50cmFuc3BvcnQpdGhyb3cgRXJyb3IoIkFwcCBpcyBhbHJlYWR5IGNvbm5lY3RlZC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIGFnYWluLiIpO3RoaXMuX2luaXRpYWxpemVkU2VudD0hMSxhd2FpdCBzdXBlci5jb25uZWN0KHQpO3RyeXtsZXQgbz1hd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidWkvaW5pdGlhbGl6ZSIscGFyYW1zOnthcHBDYXBhYmlsaXRpZXM6dGhpcy5fY2FwYWJpbGl0aWVzLGFwcEluZm86dGhpcy5fYXBwSW5mbyxwcm90b2NvbFZlcnNpb246WWJ9fSxiXyxuKTtpZihvPT09dm9pZCAwKXRocm93IEVycm9yKGBTZXJ2ZXIgc2VudCBpbnZhbGlkIGluaXRpYWxpemUgcmVzdWx0OiAke299YCk7dGhpcy5faG9zdENhcGFiaWxpdGllcz1vLmhvc3RDYXBhYmlsaXRpZXMsdGhpcy5faG9zdEluZm89by5ob3N0SW5mbyx0aGlzLl9ob3N0Q29udGV4dD1vLmhvc3RDb250ZXh0LGF3YWl0IHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQifSksdGhpcy5faW5pdGlhbGl6ZWRTZW50PSEwLHRoaXMub3B0aW9ucz8uYXV0b1Jlc2l6ZSYmdGhpcy5zZXR1cFNpemVDaGFuZ2VkTm90aWZpY2F0aW9ucygpfWNhdGNoKG8pe3Rocm93IHRoaXMuY2xvc2UoKSxvfX19bGV0IFljPSIiO2NvbnN0IEVmPShlLHQsbj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpPT57aWYoIWUpcmV0dXJuOyhlLnRoZW1lPT09ImxpZ2h0Inx8ZS50aGVtZT09PSJkYXJrIikmJnQuYXBwbHlEb2N1bWVudFRoZW1lKGUudGhlbWUpO2NvbnN0IG89ZS5zdHlsZXM/LnZhcmlhYmxlcztvJiZ0eXBlb2Ygbz09Im9iamVjdCImJnQuYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXMobyk7Y29uc3Qgcj1lLnN0eWxlcz8uY3NzPy5mb250czt0eXBlb2Ygcj09InN0cmluZyImJnImJnIhPT1ZYyYmKHQuYXBwbHlIb3N0Rm9udHMociksWWM9cik7Y29uc3Qgcz1lLnNhZmVBcmVhSW5zZXRzO2lmKHMpZm9yKGNvbnN0IGkgb2ZbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdKXtjb25zdCBhPU51bWJlcihzW2ldPz8wKTtuLnN0eWxlLnNldFByb3BlcnR5KGAtLWluc2V0LSR7aX1gLGAke051bWJlci5pc0Zpbml0ZShhKSYmYT4wP2E6MH1weGApfX0sSGU9bmV3IHVjKHtuYW1lOiJob3RlbC1zdG9yZWZyb250Iix2ZXJzaW9uOiIxLjAuMCJ9LHtvcGVuTGlua3M6e319KSxSZj17YXBwbHlEb2N1bWVudFRoZW1lOnlfLGFwcGx5SG9zdFN0eWxlVmFyaWFibGVzOndfLGFwcGx5SG9zdEZvbnRzOmtffSxsZT1lPT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSxtPWU9PlN0cmluZyhlPz8iIikucmVwbGFjZSgvWyY8PiInXS9nLHQ9PnQ9PT0iJiI/IiZhbXA7Ijp0PT09IjwiPyImbHQ7Ijp0PT09Ij4iPyImZ3Q7Ijp0PT09JyInPyImcXVvdDsiOiImIzM5OyIpO2xldCBJdD0iIixDcj0iIixDZj17fSxaZj0hMSxPZj0iIixPPXtjaGVja0luOiIiLGNoZWNrT3V0OiIiLGd1ZXN0czoyfSxiZT0xO2NvbnN0IFNfPTU7bGV0IGtlPW51bGwsWnQ9W10sR2U9IiIsVnI9IiIsSnI9IiIsbGM9MDtjb25zdCBBZj1lPT57Y29uc3QgdD1lPy5bImN1cmxlc3MvdHJpcCJdO3QmJih0eXBlb2YgdC50cmlwSWQ9PSJzdHJpbmciJiZ0LnRyaXBJZCYmKEpyPXQudHJpcElkKSxsYz1OdW1iZXIodC5jb3VudD8/MCkpfSwkXz1lPT5Kcj97Li4uZSx0cmlwOkpyfTplLHpfPWU9PkNmW2VdPz8iIjtsZXQgTmY9ITE7Y29uc3QgUWM9ZT0+e05mPWUsZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmNhcmQiKT8uY2xhc3NMaXN0LnRvZ2dsZSgiYnVzeSIsZSl9LGVlPShlLHQ9e30pPT57Y29uc3Qgbj16XyhlKTtyZXR1cm4gbj9OZj9Qcm9taXNlLnJlc29sdmUobnVsbCk6KFFjKCEwKSxIZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpuLGFyZ3VtZW50czokXyh0KX0pLmZpbmFsbHkoKCk9PlFjKCExKSkudGhlbihvPT57QWYobz8uX21ldGEpO2NvbnN0IHI9bz8uc3RydWN0dXJlZENvbnRlbnQ7cmV0dXJuIHImJkxmKHIpLFRfKG8pLG99KSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBubyB0b29sIGZvciAke2V9YCkpfSxUXz1lPT57Y29uc3QgdD0oZT8uY29udGVudD8/W10pLmZpbmQobj0+bj8udHlwZT09PSJ0ZXh0Iik/LnRleHQ7IXR8fCFIZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/LnVwZGF0ZU1vZGVsQ29udGV4dHx8SGUudXBkYXRlTW9kZWxDb250ZXh0KHtjb250ZW50Olt7dHlwZToidGV4dCIsdGV4dDpTdHJpbmcodCl9XX0pLmNhdGNoKCgpPT57fSl9LCRyPWU9PntsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9MSl0PSh0KjMxK2UuY2hhckNvZGVBdChuKSklMzYwO3JldHVybmAtLXNob3QtYTpoc2woJHt0fSA0MiUgMzQlKTstLXNob3QtYjpoc2woJHsodCszOCklMzYwfSA0NiUgMjIlKWB9LHpyPWU9PmUucmVwbGFjZSgvW15ccHtMfVxwe059IF0vZ3UsIiAiKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMikubWFwKHQ9PnRbMF0/LnRvVXBwZXJDYXNlKCk/PyIiKS5qb2luKCIiKSxQXz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDMuNWwyLjYgNS4zIDUuOS45LTQuMyA0LjEgMSA1LjhMMTIgMTYuOSA2LjggMTkuNmwxLTUuOEwzLjUgOS43bDUuOS0uOXoiLz48L3N2Zz4nLElfPWU9PmUmJnR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9gPHNwYW4gY2xhc3M9InJhdGUiPiR7UF99JHttKGUudmFsdWUpfTxzcGFuIGNsYXNzPSJ0LWZyb20iPjxzbWFsbD4gwrcgJHttKGUuY291bnQpfTwvc21hbGw+PC9zcGFuPjwvc3Bhbj5gOiIiLF9lPSgpPT5aZj9gPGRpdiBjbGFzcz0iZGVtbyI+PGI+RGVtbzwvYj48c3Bhbj4ke20oT2Z8fCJEZW1vbnN0cmF0aW9uIGRhdGE6IHRoZXNlIHJhdGVzIGFuZCByb29tIGNvdW50cyB3ZXJlIG1hZGUgdXAgZm9yIHRoaXMgZGVtby4iKX08L3NwYW4+PC9kaXY+YDoiIixLcj1lPT57Y29uc3QgdD1uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KX0sV3I9KGUsdCk9Pk1hdGgucm91bmQoKERhdGUucGFyc2UoYCR7dH1UMTI6MDA6MDBaYCktRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSkvODY0ZTUpLEplPWU9PmU/LmNoZWNrSW4mJmU/LmNoZWNrT3V0P2Ake0tyKGUuY2hlY2tJbil9IOKAkyAke0tyKGUuY2hlY2tPdXQpfSDCtyAke1dyKGUuY2hlY2tJbixlLmNoZWNrT3V0KX0gJHtXcihlLmNoZWNrSW4sZS5jaGVja091dCk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIix4Xz0oZSx0LG4pPT57Y29uc3Qgbz1adC5maW5kKHI9PnIua2luZD09PSJyb29tIiYmci5ob3RlbElkPT09ZSYmci5yb29tUmVmPT09dCYmci5zdGF5Py5jaGVja0luPT09bj8uY2hlY2tJbiYmci5zdGF5Py5jaGVja091dD09PW4/LmNoZWNrT3V0KTtyZXR1cm4gTnVtYmVyKG8/LnF1YW50aXR5Pz8wKX0sRV89KGUsdCk9Pntjb25zdCBuPVp0LmZpbmQobz0+by5raW5kPT09ImV4dHJhIiYmby5ob3RlbElkPT09ZSYmby5leHRyYVJlZj09PXQpO3JldHVybiBOdW1iZXIobj8ucXVhbnRpdHk/PzApfSxkYz0oZSx0LG4sbz0xKT0+dD4wP2A8c3BhbiBjbGFzcz0ic3RlcCI+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0LTF9IiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgJHttKG4pfSI+4oiSPC9idXR0b24+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3R9PC9zcGFuPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dCsxfSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgJHttKG4pfSI+KzwvYnV0dG9uPgogICAgICAgPC9zcGFuPmA6YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRkIiAke2V9IGRhdGEtbj0iJHtvfSIgYXJpYS1sYWJlbD0iQWRkICR7bShuKX0iPgogICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjQiCiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDV2MTRNNSAxMmgxNCIvPjwvc3ZnPgogICAgICAgPC9idXR0b24+YCxqZj0oZSx0KT0+e2NvbnN0IG49dHx8Ul8oKTtyZXR1cm4oIU8uY2hlY2tJbnx8Ty5jaGVja0luPG4pJiYoTy5jaGVja0luPW4pLCghTy5jaGVja091dHx8Ty5jaGVja091dDw9Ty5jaGVja0luKSYmKE8uY2hlY2tPdXQ9R3IoTy5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNpIiB2YWx1ZT0iJHttKE8uY2hlY2tJbil9IiBtaW49IiR7bShuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjbyIgdmFsdWU9IiR7bShPLmNoZWNrT3V0KX0iIG1pbj0iJHttKEdyKE8uY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGxhYmVsIGNsYXNzPSJndWVzdHMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7bShiZSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zLW49IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9sYWJlbD4KICAgIDxzcGFuIGNsYXNzPSJuaWdodHMiIGlkPSJuaWdodHMiPiR7bShwYygpKX08L3NwYW4+CiAgPC9kaXY+YH0scGM9KCk9Pntjb25zdCBlPU8uY2hlY2tJbiYmTy5jaGVja091dD9XcihPLmNoZWNrSW4sTy5jaGVja091dCk6MCx0PWU+MD9gJHtlfSAke2U9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixuPWJlPjE/YCR7YmV9IHJvb21zYDoiIjtyZXR1cm5bdCxuXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpfSxHcj0oZSx0KT0+bmV3IERhdGUoRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSt0Kjg2NGU1KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLFJfPSgpPT5uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCksQ189ZT0+e2NvbnN0IHQ9ZS5ob3RlbHM/P1tdLG49Wy4uLm5ldyBTZXQodC5tYXAoYT0+U3RyaW5nKGEuY2l0eSkpKV0sbz1hPT57Y29uc3QgYz10LmZpbmQodT0+dS5jaXR5PT09YSk/LmNvdW50cnk7cmV0dXJuIGMmJiFTdHJpbmcoYykuc3RhcnRzV2l0aChhKT9TdHJpbmcoYyk6IiJ9LHI9YT0+YAogICAgPGRpdiBjbGFzcz0iY2l0eWdyb3VwIj4KICAgICAgJHtuLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJjaXR5bmFtZSI+JHttKGEpfSR7byhhKT9gPHNtYWxsPiDCtyAke20obyhhKSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKGM9PmMuY2l0eT09PWEpLm1hcChjPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7bShjLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHskcihTdHJpbmcoYy5pZCkpfSI+CiAgICAgICAgICAgICAgJHtjLmltYWdlVXJsP2A8aW1nIHNyYz0iJHttKGMuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHttKHpyKFN0cmluZyhjLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7Yy5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7bShjLmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke20oYy5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7bShuLmxlbmd0aD4xP2MuYXJlYT8/Yy5jaXR5OltjLmFyZWEsYy5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mcm9tIj4ke2MuZnJvbU5pZ2h0bHk/YCR7bShjLmZyb21OaWdodGx5KX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICAgICAgJHtJXyhjLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gLHM9TnVtYmVyKGUudG90YWw/P3QubGVuZ3RoKSxpPXMtdC5sZW5ndGg7cmV0dXJuW19lKCksYDxkaXY+JHtuLm1hcChyKS5qb2luKCIiKX08L2Rpdj5gLGk+MD9gPGRpdiBjbGFzcz0ibm90ZSI+U2hvd2luZyAke3QubGVuZ3RofSBvZiAke3N9LiBOYW1lIGEgY2l0eSBvciBhIGNvdW50cnkgdG8gc2VlIHRoZSByZXN0LjwvZGl2PmA6IiJdLmpvaW4oIiIpfSxNZj1lPT5gCiAgPGRpdiBjbGFzcz0iaGVybyIgc3R5bGU9IiR7JHIoU3RyaW5nKGUuaWQpKX0iPgogICAgJHtlLmltYWdlVXJsP2A8aW1nIHNyYz0iJHttKGUuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke20oenIoU3RyaW5nKGUubmFtZSkpKX08L3NwYW4+CiAgICAke2UuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke20oZS5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHttKGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke20oW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7bShlLnJhdGluZy52YWx1ZSl94piFICgke20oZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHttKGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke20odCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCxaXz0oZSx0LG4pPT57Y29uc3Qgbz14XyhTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIkeyRyKGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7bSh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOm0oenIoU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke20odC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke20ocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvblVudGlsP2AgdW50aWwgJHttKFN0cmluZyh0LmZyZWVDYW5jZWxsYXRpb25VbnRpbCkuc2xpY2UoMCwxMCkpfWA6IiJ9PC9zcGFuPmA6JzxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5Ob24tcmVmdW5kYWJsZTwvc3Bhbj4nfQogICAgICAgICAgJHtOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7bSh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAke3QucHVibGljU3RheVRvdGFsP2A8ZGl2IGNsYXNzPSJwLXdhcyI+JHttKHQucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7bSh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7bSh0Lm5pZ2h0bHkpfSAvIG5pZ2h0JHtiZT4xP2AgwrcgJHtiZX0gcm9vbXNgOiIifSDCtyBpbmNsLiB0YXg8L2Rpdj4KICAgICAgICAke3QubWVtYmVyUmF0ZT9gPGRpdiBjbGFzcz0icC1tZW1iZXIiPiR7bSh0Lm1lbWJlclJhdGUudGllcil9IHJhdGU8L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2RjKGBkYXRhLWFkZC1yb29tPSIke20odC5pZCl9IiBkYXRhLWhvdGVsPSIke20oZS5pZCl9ImAsbyxTdHJpbmcodC5uYW1lKSxiZSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxYYz1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUucm9vbXM/P1tdLG89ZS5zdGF5Pz9PO3JldHVybltfZSgpLE1mKHQpLGpmKFN0cmluZyh0LmlkKSx0LnRvZGF5VGhlcmUpLGUubmVlZHNEYXRlcz8nPGRpdiBjbGFzcz0iZW1wdHkiPkxvb2tpbmcgdXAgcm9vbXPigKY8L2Rpdj4nOmUubm9Sb29tcz9gPGRpdiBjbGFzcz0iZXJyIj4ke20oZS5ub1Jvb21zKX08L2Rpdj5gOmA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PlpfKHQscixvKSkuam9pbigiIil9PC9kaXY+YCwoZS5leHRyYXM/P1tdKS5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtZXh0cmFzPSIke20odC5pZCl9Ij5BZGQtb25zIGFuZCBleHBlcmllbmNlczwvYnV0dG9uPmA6IiIsKGUucG9saWNpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UucG9saWNpZXMubWFwKHI9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtcG9saWN5PSIke20oci50b3BpYyl9IiBkYXRhLWhvdGVsPSIke20odC5pZCl9Ij4ke20oci50aXRsZSl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIl0uam9pbigiIil9LE9fPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5leHRyYXM/P1tdO3JldHVybltfZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHttKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCBpdCBvZmZlcnMgYmVzaWRlIHRoZSByb29tPC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChvPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke20oby5uYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7bShvLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke20oby5wcmljZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke20oby5wZXIpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtkYyhgZGF0YS1hZGQtZXh0cmE9IiR7bShvLmlkKX0iIGRhdGEtaG90ZWw9IiR7bSh0LmlkKX0iYCxFXyhTdHJpbmcodC5pZCksU3RyaW5nKG8uaWQpKSxTdHJpbmcoby5uYW1lKSl9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7bSh0LmlkKX0iPkJhY2sgdG8gJHttKHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LEFfPWU9Pntjb25zdCB0PWUua2luZD09PSJyb29tIj9gZGF0YS1hZGQtcm9vbT0iJHttKGUucm9vbVJlZil9IiBkYXRhLWhvdGVsPSIke20oZS5ob3RlbElkKX0iIGRhdGEtY2k9IiR7bShlLnN0YXk/LmNoZWNrSW4pfSIgZGF0YS1jbz0iJHttKGUuc3RheT8uY2hlY2tPdXQpfSIgZGF0YS1ndT0iJHttKGUuc3RheT8uZ3Vlc3RzKX0iYDpgZGF0YS1hZGQtZXh0cmE9IiR7bShlLmV4dHJhUmVmPz9lLnRpdGxlKX0iIGRhdGEtaG90ZWw9IiR7bShlLmhvdGVsSWQpfSJgO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7bShlLnRpdGxlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke20oZS5raW5kPT09InJvb20iP2Ake2UuaG90ZWxOYW1lfSDCtyAke0plKGUuc3RheSl9JHtlLnJlZnVuZGFibGU9PT0hMT8iIMK3IG5vbi1yZWZ1bmRhYmxlIjoiIn1gOmAke2UuaG90ZWxOYW1lfSR7ZS5kZXRhaWw/YCDCtyAke2UuZGV0YWlsfWA6IiJ9YCl9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHttKGUudG90YWwpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+JHttKGUudW5pdCl9JHtlLmtpbmQ9PT0icm9vbSI/IiAvIG5pZ2h0IjoiIGVhY2gifTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke2RjKHQsTnVtYmVyKGUucXVhbnRpdHk/PzEpLFN0cmluZyhlLnRpdGxlKSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxOXz1lPT57Y29uc3QgdD1lLmxpbmVzPz9bXTtpZih0Lmxlbmd0aD09PTApcmV0dXJuW19lKCksJzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGUgdHJpcCBpcyBlbXB0eS48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+QnJvd3NlICR7bShJdCl9IGhvdGVsczwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpO2NvbnN0IG49Wy4uLm5ldyBTZXQodC5tYXAobz0+U3RyaW5nKG8uZGF5Pz8iIikpKV0uc29ydCgpO3JldHVybltfZSgpLG4ubWFwKG89PmAKICAgICAgJHtvP2A8ZGl2IGNsYXNzPSJkYXkiPiR7bShLcihvKSl9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0icm93cyI+JHt0LmZpbHRlcihyPT5TdHJpbmcoci5kYXk/PyIiKT09PW8pLm1hcChBXykuam9pbigiIil9PC9kaXY+YCkuam9pbigiIiksKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAobz0+YCR7bShvLnRpdGxlKX06ICR7bShvLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9InN1bXMiPgogICAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Sb29tcyBhbmQgYWRkLW9uczwvc3Bhbj48c3Bhbj4ke20oZS5zdWJ0b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5UYXhlcyBhbmQgZmVlczwvc3Bhbj48c3Bhbj4ke20oZS50YXhlc0FuZEZlZXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICR7ZS5tZW1iZXJTYXZpbmc/YDxkaXYgY2xhc3M9InN1bSBnb29kIj48c3Bhbj4ke20oZS5tZW1iZXJTYXZpbmcudGllcil9IG1lbWJlciByYXRlPC9zcGFuPjxzcGFuPuKIkiAke20oZS5tZW1iZXJTYXZpbmcuc2F2ZWQpfTwvc3Bhbj48L2Rpdj5gOiIifQogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj5Ub3RhbDwvc3Bhbj48c3Bhbj4ke20oZS50b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Qb2ludHMgdGhpcyB0cmlwIGVhcm5zPC9zcGFuPjxzcGFuPiR7bShOdW1iZXIoZS5tZW1iZXJTYXZpbmcucG9pbnRzKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgICAgPC9kaXY+YCwnPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1ib29rIj5SZXF1ZXN0IGJvb2tpbmc8L2J1dHRvbj48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gUmVxdWVzdGluZyBhIGJvb2tpbmcgYXNrcyAke20oSXQpfSB0byBob2xkIHRoZSByb29tcyBhbmQgZ2l2ZXMgeW91IGEgY29uZmlybWF0aW9uIGNvZGUuPC9kaXY+YCxEZigpLGtlPyIiOmA8ZGl2IGNsYXNzPSJub3RlIj5BICR7bShJdCl9IENpcmNsZSBtZW1iZXI/IDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+U2lnbiBpbiBmb3IgdGhlIG1lbWJlciByYXRlPC9idXR0b24+LjwvZGl2PiR7cWYoKX1gXS5qb2luKCIiKX0sRGY9KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9Imd1ZXN0IiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPkd1ZXN0IG5hbWU8aW5wdXQgaWQ9ImduYW1lIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IHNob3VsZCBhcHBlYXIgb24gdGhlIGJvb2tpbmciPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZ21haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkZvciB0aGUgY29uZmlybWF0aW9uIj48L2xhYmVsPgogICAgPC9kaXY+CiAgICA8bGFiZWw+QW55dGhpbmcgdGhlIGhvdGVsIHNob3VsZCBrbm93PGlucHV0IGlkPSJnbm90ZSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBIGxhdGUgYXJyaXZhbCwgYSBoaWdoIGZsb29yIOKAlCBvcHRpb25hbCI+PC9sYWJlbD4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29rIj5Ib2xkIHRoZXNlIHJvb21zPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4KICA8L2Rpdj5gLGpfPWU9PltgPGRpdiBjbGFzcz0iZXJyIj5UaGUgYm9va2luZyBuZWVkcyAke20oKGUubWlzc2luZz8/W10pLmpvaW4oIiBhbmQgIil8fCJhIG5hbWUgYW5kIGFuIGVtYWlsIil9LjwvZGl2PmAsRGYoITApLCc8ZGl2IGNsYXNzPSJub3RlIj5ObyBjYXJkIGlzIHRha2VuIGFuZCBub3RoaW5nIGlzIGNoYXJnZWQuIFlvdSBwcmVzZW50IGEgY2FyZCBhdCBjaGVjay1pbi48L2Rpdj4nXS5qb2luKCIiKSxNXz1lPT57Y29uc3QgdD1lLm1lbWJlcj8/e307cmV0dXJuW19lKCksYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHttKHQucHJvZ3JhbW1lKX08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9IndoZXJlIj4ke20odC5uYW1lKX08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiIHN0eWxlPSJmb250LXNpemU6MjBweCI+JHttKHQudGllcj8ubmFtZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJ3aGVuIj4ke20oTnVtYmVyKHQucG9pbnRzPz8wKS50b0xvY2FsZVN0cmluZygiZW4tR0IiKSl9IHBvaW50czwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InVucGFpZCI+PGI+JHttKE1hdGgucm91bmQoKHQudGllcj8uZGlzY291bnQ/PzApKjEwMCkpfSUgb2ZmPC9iPjxzcGFuPlJvb20gcmF0ZXMgYW5kIHRyaXAgdG90YWxzIG5vdyBzaG93IHRoZSAke20odC50aWVyPy5uYW1lKX0gbWVtYmVyIHJhdGUuIE5vdGhpbmcgaXMgY2hhcmdlZCBieSBzaWduaW5nIGluLjwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj4KICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLW91dCI+U2lnbiBvdXQ8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0sRF89KCk9PlsnPGRpdiBjbGFzcz0iZXJyIj5ObyBtZW1iZXJzaGlwIG1hdGNoZXMgdGhhdCBudW1iZXIgYW5kIHN1cm5hbWUuIENoZWNrIGJvdGggYXMgdGhleSBhcmUgcHJpbnRlZCDigJQgbm90aGluZyBlbHNlIGlzIG5lZWRlZCwgdGhpcyBjb25uZWN0b3IgbmV2ZXIgYXNrcyBmb3IgYSBwYXNzd29yZC48L2Rpdj4nLHFmKCEwKV0uam9pbigiIikscWY9KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9InNpZ25pbiIke2U/IiI6IiBoaWRkZW4ifT4KICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgIDxsYWJlbD5NZW1iZXJzaGlwIG51bWJlcjxpbnB1dCBpZD0ibW51bSIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBcyBpdCBpcyBwcmludGVkIj48L2xhYmVsPgogICAgICA8bGFiZWw+U3VybmFtZTxpbnB1dCBpZD0ibXN1ciIgdHlwZT0idGV4dCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJUaGUgc3VybmFtZSBvbiBpdCI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InNpZ24taW4iPlNpZ24gaW48L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIHBhc3N3b3JkIGlzIGFza2VkIGZvciBhbmQgbm9uZSBpcyBzdG9yZWQuIFNpZ25pbmcgaW4gc2hvd3MgdGhlIG1lbWJlciByYXRlOyBub3RoaW5nIGlzIGNoYXJnZWQuPC9kaXY+CiAgPC9kaXY+YCxxXz1lPT57Y29uc3QgdD1lLmJvb2tpbmc/P3t9O3JldHVybltfZSgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPkNvbmZpcm1hdGlvbiBjb2RlPC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke20odC5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9IndoZXJlIj4ke20odC5ob3RlbE5hbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHttKEplKHQuc3RheSkpfSDCtyAke20odC5ndWVzdD8ubmFtZT8/IiIpfTwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+VGhlIHJvb21zIGFyZSBoZWxkIHVudGlsICR7bShTdHJpbmcodC5ob2xkVW50aWw/PyIiKS5zbGljZSgwLDE2KS5yZXBsYWNlKCJUIiwiICIpKX0gVVRDLiBBIGNhcmQgaXMgcHJlc2VudGVkIGF0IGNoZWNrLWluLCBub3QgaGVyZS48L3NwYW4+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ibW9uZXktb3V0Ij48c3Bhbj5Ub3RhbCBmb3IgdGhlIHN0YXk8L3NwYW4+PHNwYW4+JHttKGUudG90YWwpfTwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4keyh0LnF1b3RlPy5saW5lcz8/W10pLm1hcChMXykuam9pbigiIil9PC9kaXY+YCxgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPk15IGJvb2tpbmdzPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHttKHQuY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhpcyBib29raW5nPC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LExfPWU9PmAKICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7bShlLnRpdGxlKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHttKGUua2luZD09PSJyb29tIj9KZShlLnN0YXkpOmUuZGV0YWlsPz8iIil9PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke20oZS50b3RhbCl9PC9kaXY+PC9kaXY+CiAgPC9kaXY+YCxVXz17cmVxdWVzdGVkOiJ3YXJuIixjb25maXJtZWQ6Imdvb2QiLGNhbmNlbGxlZDoiYmFkIixleHBpcmVkOiJiYWQifSxIXz1lPT57Y29uc3QgdD1lLmJvb2tpbmdzPz9bXTtyZXR1cm4gdC5sZW5ndGg9PT0wPyc8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZ3MgaW4gdGhpcyBjb252ZXJzYXRpb24geWV0LjwvZGl2Pic6W19lKCksYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobj0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHttKG4uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7bShuLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke20oSmUobi5zdGF5KSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJiYWRnZXMiPjxzcGFuIGNsYXNzPSJiYWRnZSAke1VfW1N0cmluZyhuLnN0YXR1cyldPz8iIn0iPiR7bShuLnN0YXR1cyl9PC9zcGFuPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke20obi5xdW90ZT8udG90YWw/PyIiKX08L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7bi5zdGF0dXM9PT0icmVxdWVzdGVkInx8bi5zdGF0dXM9PT0iY29uZmlybWVkIj9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7bShuLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsPC9idXR0b24+YDoiIn08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIil9LGV1PWU9Pntjb25zdCB0PWUudmlldz09PSJjYW5jZWxsZWQiLG49ZS5ib29raW5nPz97fTtyZXR1cm5bYDxkaXYgY2xhc3M9ImNvbmYiPgogICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+JHt0PyJDYW5jZWxsZWQiOiJDYW5jZWxsaW5nIn08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7bShuLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9InN1bXMiPgogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke3Q/IlRoZSBob3RlbCBjaGFyZ2VzIjoiQ2FuY2VsbGluZyB3b3VsZCBjb3N0In08L3NwYW4+PHNwYW4+JHttKGUuZmVlKX08L3NwYW4+PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ibm90ZSI+JHttKGUucnVsZSl9PC9kaXY+YCx0PyIiOmUuY2FuY2VsbGFibGU/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5LZWVwIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBkYW5nZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jb25maXJtLWNhbmNlbD0iJHttKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgdGhlIGJvb2tpbmc8L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOic8ZGl2IGNsYXNzPSJub3RlIj5UaGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gY2FuY2VsIG9uIHRoaXMgYm9va2luZy48L2Rpdj4nXS5qb2luKCIiKX0sWnI9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7bShlLnRpdGxlKX08L2g0PiR7bShlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHttKG8udGl0bGUpfTwvaDQ+JHttKG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHttKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHttKHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHttKHQuaWQpfSI+QmFjayB0byAke20odC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sRl89ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXI9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtyLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9Ij4KICAgICAgJHtyLnJlY29tbWVuZGVkPyc8ZGl2IGNsYXNzPSJwaWNrbWFyayI+UmVjb21tZW5kZWQ8L2Rpdj4nOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHttKHIuaG90ZWwuaWQpfSIgc3R5bGU9IiR7JHIoU3RyaW5nKHIuaG90ZWwuaWQpKX0iPgogICAgICAgICR7ci5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7bShyLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7bSh6cihTdHJpbmcoci5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1ib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHttKHIuaG90ZWwubmFtZSl9PC9kaXY+CiAgICAgICAgJHtyLnByaWNlP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7bShyLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsPiB0b3RhbCDCtyAke20oci5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPjwvZGl2PmA6ci5mcm9tP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7bShyLmZyb20pfTxzbWFsbD4gLyBuaWdodCBmcm9tPC9zbWFsbD48L2Rpdj5gOiIifQogICAgICAgICR7ci5iZXN0Rm9yP2A8ZGl2IGNsYXNzPSJ3aHkiPiR7bShyLmJlc3RGb3IpfTwvZGl2PmA6IiJ9CiAgICAgICAgJHsoci5wcm9zPz9bXSkubGVuZ3RofHwoci5jb25zPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHIucHJvcz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke20ocyl9PC9zcGFuPjwvZGl2PmApLC4uLihyLmNvbnM/P1tdKS5tYXAocz0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke20ocyl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW19lKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke20oZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7bShKZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7bShlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCIgc3R5bGU9Ii0tY29sczoke3QubGVuZ3RofSI+CiAgICAgICA8ZGl2IGNsYXNzPSJjbXAtY29ybmVyIj48L2Rpdj4KICAgICAgICR7dC5tYXAobykuam9pbigiIil9CiAgICAgICAke24ubWFwKChyLHMpPT5gPGRpdiBjbGFzcz0iayI+JHttKHIpfTwvZGl2PiR7dC5tYXAoaT0+YDxkaXYgY2xhc3M9InYke3MlMj8iIGFsdCI6IiJ9Ij4ke20oaS5yb3dzPy5bc10/LnZhbHVlPz8i4oCUIil9PC9kaXY+YCkuam9pbigiIil9YCkuam9pbigiIil9CiAgICAgPC9kaXY+PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChyPT5gJHttKHIubmFtZSl9OiAke20oci53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj5UYXAgYSBwaWN0dXJlIHRvIHNlZSB0aGF0ICR7bShlLnZvY2FiPy5ub3VuPz8iaG90ZWwiKX0ncyByb29tcy48L2Rpdj5gXS5qb2luKCIiKX0sQl89ZT0+e2NvbnN0IHQ9ZS5kYXlzPz9bXTtyZXR1cm5bX2UoKSxgPGRpdj4KICAgICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHttKGUudGl0bGUpfTwvZGl2PgogICAgICAgJHtlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7bShKZShlLnN0YXkpKX08L2Rpdj5gOiIifQogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9ImdhcCI+PGI+JHttKGUuaW5UcmlwKX0vJHttKGUucGxhbm5lZCl9PC9iPjxzcGFuPiR7bShlLmdhcD8/IiIpfTwvc3Bhbj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJkYXlzIj4ke3QubWFwKChuLG8pPT5gCiAgICAgIDxkaXYgY2xhc3M9ImRheXJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5bnVtIj48Yj4ke28rMX08L2I+PGk+PC9pPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRheWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGF5bGFiZWwiPiR7bShuLmxhYmVsKX08L2Rpdj4KICAgICAgICAgICR7bi5ub3RlP2A8ZGl2IGNsYXNzPSJkYXlub3RlIj4ke20obi5ub3RlKX08L2Rpdj5gOiIifQogICAgICAgICAgJHsobi5pdGVtcz8/W10pLm1hcChyPT5gCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InBsYW4taXRlbSIke3Iua2luZD09PSJob3RlbCI/YCBkYXRhLWhvdGVsPSIke20oci5pZCl9IiByb2xlPSJidXR0b24iIHRhYmluZGV4PSIwImA6IiJ9PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke20oci5uYW1lKX08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7bShbci5kZXRhaWwsci5wcmljZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imluc3RhdGUgJHtyLmluVHJpcD8ieWVzIjoibm8ifSI+JHtyLmluVHJpcD8iSW4gdGhlIHRyaXAiOiJQbGFuIG9ubHkifTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+YCkuam9pbigiIil9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsKGUuZHJvcHBlZD8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iZXJyIj4ke2UuZHJvcHBlZC5tYXAobj0+YCR7bShuLm5hbWUpfTogJHttKG4ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIl0uam9pbigiIil9LExmPWU9PntpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybjtlLnRvb2xOYW1lcyYmKENmPWUudG9vbE5hbWVzKSxlLmJyYW5kJiYoSXQ9U3RyaW5nKGUuYnJhbmQpKSxlLmxvZ29VcmwmJihDcj1TdHJpbmcoZS5sb2dvVXJsKSksdHlwZW9mIGUuZGVtbz09ImJvb2xlYW4iJiYoWmY9ZS5kZW1vKSxlLmRlbW9Ob3RlJiYoT2Y9U3RyaW5nKGUuZGVtb05vdGUpKSx0eXBlb2YgZS5yb29tc193YW50ZWQ9PSJudW1iZXIiJiYoYmU9ZS5yb29tc193YW50ZWQpLGUubWVtYmVyPy50aWVyPy5uYW1lJiYoa2U9ZS5tZW1iZXIpLGUudmlldz09PSJzaWduZWQtb3V0IiYmKGtlPW51bGwpLGUuc3RheT8uY2hlY2tJbiYmKE89e2NoZWNrSW46ZS5zdGF5LmNoZWNrSW4sY2hlY2tPdXQ6ZS5zdGF5LmNoZWNrT3V0LGd1ZXN0czplLnN0YXkuZ3Vlc3RzPz8yfSksKGUudmlldz09PSJ0cmlwInx8ZS52aWV3PT09Im5lZWRzLWRhdGVzIikmJihadD1lLmxpbmVzPz9bXSksKGUudmlldz09PSJib29raW5nInx8ZS52aWV3PT09ImVtcHR5LXRyaXAiKSYmKFp0PVtdLGxjPTApLEdlPVN0cmluZyhlLnZpZXc/PyIiKTtjb25zdCB0PWxlKCJicmFuZCIpO0NyPyh0LnNyYz1Dcix0LmhpZGRlbj0hMSxsZSgidGl0bGUiKS5oaWRkZW49ITApOih0LmhpZGRlbj0hMCxsZSgidGl0bGUiKS5oaWRkZW49ITEsbGUoInRpdGxlIikudGV4dENvbnRlbnQ9SXR8fCJIb3RlbHMiKSxsZSgic3ViIikudGV4dENvbnRlbnQ9Sl8oZSksV18oKSxLXygpO2NvbnN0IG49e2hvdGVsczpDXywibm8taG90ZWxzIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5Ob3RoaW5nIG1hdGNoZWQuIFRyeSBhIGNpdHkuPC9kaXY+Jyxob3RlbDpYYywibm8tcm9vbXMiOlhjLCJob3RlbC1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoYXQgaG90ZWwgaXMgbm90IGluIHRoaXMgY29ubmVjdG9yLjwvZGl2PicsZXh0cmFzOk9fLHRyaXA6Tl8sIm5lZWRzLWRhdGVzIjpWXyxib29raW5nOnFfLCJuZWVkcy1ndWVzdCI6al8sbWVtYmVyOk1fLCJtZW1iZXItbm90LWZvdW5kIjpEXywic2lnbmVkLW91dCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+U2lnbmVkIG91dC4gUmF0ZXMgYXJlIHRoZSBwdWJsaWMgb25lcyBhZ2Fpbi48L2Rpdj48ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+PC9kaXY+JywiZW1wdHktdHJpcCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdHJpcCB5ZXQuPC9kaXY+Jyxib29raW5nczpIXywiY2FuY2VsbGF0aW9uLXByZXZpZXciOmV1LGNhbmNlbGxlZDpldSwiYm9va2luZy1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmcgaGVyZSBtYXRjaGVzIHRoYXQgY29kZS48L2Rpdj4nLGNvbXBhcmlzb246Rl8sIm5vdGhpbmctdG8tY29tcGFyZSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9uZSBvZiB0aG9zZSBhcmUgaG90ZWxzIHRoaXMgY29ubmVjdG9yIGtub3dzLjwvZGl2PicsaXRpbmVyYXJ5OkJfLCJlbXB0eS1pdGluZXJhcnkiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPkFuIGl0aW5lcmFyeSBuZWVkcyBhdCBsZWFzdCBvbmUgZGF5LjwvZGl2PicscG9saWN5OlpyLHBvbGljaWVzOlpyLCJwb2xpY3ktbWlzc2luZyI6WnJ9OyhHZT09PSJob3RlbCJ8fEdlPT09Im5vLXJvb21zIikmJmUuaG90ZWw/LmlkJiYoVnI9U3RyaW5nKGUuaG90ZWwuaWQpLGUubmVlZHNEYXRlcyYmc2V0VGltZW91dCgoKT0+ZmMoKSwwKSk7Y29uc3Qgbz1uW0dlXTtsZSgiY29udGVudCIpLmlubmVySFRNTD1vP28oZSk6YDxkaXYgY2xhc3M9ImVyciI+JHttKGUuZXJyb3I/PyJTb21ldGhpbmcgY2FtZSBiYWNrIHRoYXQgdGhpcyBjYXJkIGRvZXMgbm90IGtub3cgaG93IHRvIGRyYXcuIil9JHtlLmRldGFpbD9gPGJyPiR7bShlLmRldGFpbCl9YDoiIn08L2Rpdj5gfSxWXz1lPT5bX2UoKSxlLmhvdGVsP01mKGUuaG90ZWwpOiIiLGA8ZGl2IGNsYXNzPSJlcnIiPiR7bShlLndoeT8/IldoaWNoIG5pZ2h0cz8gQSByb29tIG5lZWRzIGEgY2hlY2staW4gYW5kIGEgY2hlY2stb3V0IGRhdGUuIil9PC9kaXY+YCxqZihTdHJpbmcoZS5ob3RlbD8uaWQ/PyIiKSxlLmhvdGVsPy50b2RheVRoZXJlKV0uam9pbigiIiksSl89ZT0+ZS52aWV3PT09ImhvdGVscyI/YCR7ZS50b3RhbD8/MH0gJHtOdW1iZXIoZS50b3RhbCk9PT0xPyJob3RlbCI6ImhvdGVscyJ9YDplLnZpZXc9PT0iaG90ZWwifHxlLnZpZXc9PT0ibm8tcm9vbXMiP0plKGUuc3RheSk6ZS52aWV3PT09InRyaXAiPyhlLmxpbmVzPz9bXSkubGVuZ3RoP1N0cmluZyhlLnRvdGFsPz8iIik6IiI6ZS52aWV3PT09ImNvbXBhcmlzb24iP2AkeyhlLmNvbHVtbnM/P1tdKS5sZW5ndGh9IHNpZGUgYnkgc2lkZWA6ZS52aWV3PT09Iml0aW5lcmFyeSI/YCR7ZS5pblRyaXB9LyR7ZS5wbGFubmVkfSBpbiB0aGUgdHJpcGA6ZS52aWV3PT09ImJvb2tpbmdzIj9gJHtlLmNvdW50Pz8wfSBib29raW5nJHtOdW1iZXIoZS5jb3VudCk9PT0xPyIiOiJzIn1gOiIiLEtfPSgpPT57Y29uc3QgZT1sZSgibWVtYmVyY2hpcCIpO2tlPyhlLmhpZGRlbj0hMSxlLnRleHRDb250ZW50PWAke2tlLnRpZXI/Lm5hbWU/PyJNZW1iZXIifSDCtyAke01hdGgucm91bmQoKGtlLnRpZXI/LmRpc2NvdW50Pz8wKSoxMDApfSUgb2ZmYCxlLnNldEF0dHJpYnV0ZSgiZGF0YS1hY3QiLCJtZW1iZXIiKSxlLnNldEF0dHJpYnV0ZSgidGl0bGUiLGAke2tlLm5hbWV9IMK3ICR7a2UucHJvZ3JhbW1lfWApKTooZS5oaWRkZW49R2U9PT0ibWVtYmVyLW5vdC1mb3VuZCIsZS50ZXh0Q29udGVudD0iTWVtYmVyIHNpZ24gaW4iLGUuc2V0QXR0cmlidXRlKCJkYXRhLWFjdCIsImFzay1zaWduLWluIiksZS5yZW1vdmVBdHRyaWJ1dGUoInRpdGxlIikpfSxXXz0oKT0+e2NvbnN0IGU9bGUoImhlYWR0cmlwIiksdD1sY3x8WnQubGVuZ3RoO2UuaGlkZGVuPXQ9PT0wfHxHZT09PSJ0cmlwIixsZSgiaGVhZHRyaXBuIikudGV4dENvbnRlbnQ9U3RyaW5nKHQpfSxHXz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIiksdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndSIpO089e2NoZWNrSW46ZT8udmFsdWU/P08uY2hlY2tJbixjaGVja091dDp0Py52YWx1ZT8/Ty5jaGVja091dCxndWVzdHM6TnVtYmVyKG4/LnZhbHVlPz9PLmd1ZXN0cyl8fDJ9fSxKbj0oZT17fSk9Pk8uY2hlY2tJbiYmTy5jaGVja091dD97Y2hlY2tJbjpPLmNoZWNrSW4sY2hlY2tPdXQ6Ty5jaGVja091dCxndWVzdHM6Ty5ndWVzdHMsLi4uZX06ZTtsZXQgdHU7Y29uc3QgZmM9KGU9MCk9PntWciYmKGNsZWFyVGltZW91dCh0dSksdHU9c2V0VGltZW91dCgoKT0+e2VlKCJnZXRIb3RlbCIse2hvdGVsOlZyLHJvb21zOmJlLC4uLkpuKCl9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhvc2UgbmlnaHRzLiIpKX0sZSkpfSxLPWU9PntsZSgiY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYDxkaXYgY2xhc3M9ImVyciI+JHttKGUpfTwvZGl2PmApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmNsb3Nlc3QoIltkYXRhLWhvdGVsXSxbZGF0YS1hY3RdLFtkYXRhLXBvbGljeV0sW2RhdGEtY2FuY2VsXSxbZGF0YS1jb25maXJtLWNhbmNlbF0sW2RhdGEtZXh0cmFzXSxbZGF0YS1yb29tcy1uXSIpO2lmKCF0KXJldHVybjtjb25zdCBuPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXJvb21zLW4iKTtpZihuIT09bnVsbCl7R18oKSxiZT1NYXRoLm1pbihTXyxNYXRoLm1heCgxLGJlK051bWJlcihuKSkpO2NvbnN0IHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJuIik7cCYmKHAudGV4dENvbnRlbnQ9U3RyaW5nKGJlKSk7Y29uc3QgZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7ZyYmKGcudGV4dENvbnRlbnQ9cGMoKSksZmMoNDUwKTtyZXR1cm59Y29uc3Qgbz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtcm9vbSIpO2lmKG8hPT1udWxsKXtjb25zdCBwPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLGc9TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSksYj10Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP3tjaGVja0luOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIik/PyIiLGNoZWNrT3V0OnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik/PyIiLGd1ZXN0czpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtZ3UiKT8/Mil9OkpuKCk7ZWUoImFkZFRvVHJpcCIse2hvdGVsOnAscm9vbTpvLHJvb21zOmcsLi4uYn0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3Qgcj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtZXh0cmEiKTtpZihyIT09bnVsbCl7ZWUoImFkZFRvVHJpcCIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLGV4dHJhOnIscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSl9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IHM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtZXh0cmFzIik7aWYocyE9PW51bGwpe2VlKCJsaXN0RXh0cmFzIix7aG90ZWw6cywuLi5KbigpfSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgaT10LmdldEF0dHJpYnV0ZSgiZGF0YS1wb2xpY3kiKTtpZihpIT09bnVsbCl7ZWUoInBvbGljaWVzIix7aG90ZWw6dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsdG9waWM6aX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgbG9hZCB0aGF0IHBvbGljeS4iKSk7cmV0dXJufWNvbnN0IGE9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2FuY2VsIik7aWYoYSE9PW51bGwpe2VlKCJwcmV2aWV3Q2FuY2VsbGF0aW9uIix7Ym9va2luZzphfSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCB3b3JrIG91dCB0aGUgZmVlLiIpKTtyZXR1cm59Y29uc3QgYz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jb25maXJtLWNhbmNlbCIpO2lmKGMhPT1udWxsKXtlZSgiY2FuY2VsQm9va2luZyIse2Jvb2tpbmc6Yyxjb25maXJtZWQ6ITB9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGNhbmNlbCB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCB1PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFjdCIpO2lmKHU9PT0iaG9tZSIpe2VlKCJsaXN0SG90ZWxzIix7fSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBsb2FkIHRoZSBob3RlbHMuIikpO3JldHVybn1pZih1PT09Im1lbWJlciIpe2VlKCJzaWduSW4iLHt9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IHJlYWQgdGhlIG1lbWJlcnNoaXAuIikpO3JldHVybn1pZih1PT09ImFzay1zaWduLWluIil7Y29uc3QgcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2lnbmluIik7cCYmKHAuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy5mb2N1cygpO3JldHVybn1pZih1PT09InNpZ24taW4iKXtjb25zdCBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LnZhbHVlLnRyaW0oKT8/IiIsZz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXN1ciIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFwfHwhZyl7SygiQm90aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIG9uIGl0LCBwbGVhc2UuIik7cmV0dXJufWVlKCJzaWduSW4iLHtudW1iZXI6cCxzdXJuYW1lOmd9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IHNpZ24gaW4uIikpO3JldHVybn1pZih1PT09InNpZ24tb3V0Iil7a2U9bnVsbCxlZSgic2lnbk91dCIse30pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3Qgc2lnbiBvdXQuIikpO3JldHVybn1pZih1PT09ImFzay1ib29rIil7Y29uc3QgcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3Vlc3QiKTtwJiYocC5oaWRkZW49ITEpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpPy5mb2N1cygpO3JldHVybn1pZih1PT09ImJvb2siKXtjb25zdCBwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbmFtZSIpPy52YWx1ZS50cmltKCk/PyIiLGc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdtYWlsIik/LnZhbHVlLnRyaW0oKT8/IiIsYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25vdGUiKT8udmFsdWUudHJpbSgpPz8iIjtpZighcHx8IWcpe0soIlRoZSBib29raW5nIG5lZWRzIGEgbmFtZSBhbmQgYW4gZW1haWwgdG8gc2VuZCB0aGUgY29uZmlybWF0aW9uIHRvLiIpO3JldHVybn1lZSgicmVxdWVzdEJvb2tpbmciLHtuYW1lOnAsZW1haWw6ZywuLi5iP3tub3RlczpifTp7fX0pLmNhdGNoKCgpPT5LKCJDb3VsZCBub3QgYXNrIGZvciB0aG9zZSByb29tcy4iKSk7cmV0dXJufWlmKHU9PT0iYm9va2luZ3MiKXtlZSgibGlzdEJvb2tpbmdzIix7fSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBsb2FkIHlvdXIgYm9va2luZ3MuIikpO3JldHVybn1pZih1PT09InRyaXAiKXtlZSgidmlld1RyaXAiLHt9KS5jYXRjaCgoKT0+SygiQ291bGQgbm90IGxvYWQgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBsPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik7bCYmZWUoImdldEhvdGVsIix7aG90ZWw6bCwuLi5KbigpfSkuY2F0Y2goKCk9PksoIkNvdWxkIG5vdCBsb2FkIHRoYXQgaG90ZWwuIikpfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixlPT57Y29uc3QgdD1lLnRhcmdldDtpZih0Py5pZCE9PSJjaSImJnQ/LmlkIT09ImNvIilyZXR1cm47Y29uc3Qgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSxvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpO2lmKCFufHwhbylyZXR1cm47aWYodC5pZD09PSJjaSImJm4udmFsdWUpe2NvbnN0IHM9R3Iobi52YWx1ZSwxKTtvLm1pbj1zLCghby52YWx1ZXx8by52YWx1ZTw9bi52YWx1ZSkmJihvLnZhbHVlPXMpfU8uY2hlY2tJbj1uLnZhbHVlfHxPLmNoZWNrSW4sTy5jaGVja091dD1vLnZhbHVlfHxPLmNoZWNrT3V0O2NvbnN0IHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5pZ2h0cyIpO3ImJihyLnRleHRDb250ZW50PXBjKCkpLGZjKCl9KTtjb25zdCBVZj0oZSx0KT0+e3RyeXtBZih0KSxMZihlKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKCJbY2FyZF0gcmVuZGVyIGZhaWxlZCIsbiksbGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGlzIGNhcmQgY291bGQgbm90IGJlIGRyYXduLiBBc2sgYWdhaW4gaW4gdGhlIGNoYXQuPC9kaXY+J319O0hlLm9udG9vbHJlc3VsdD1lPT5VZihlPy5zdHJ1Y3R1cmVkQ29udGVudCxlPy5fbWV0YSk7SGUub25ob3N0Y29udGV4dGNoYW5nZWQ9ZT0+RWYoZSxSZik7SGUuY29ubmVjdCgpLnRoZW4oKCk9Pntjb25zdCBlPUhlLmdldEhvc3RDb250ZXh0KCk7RWYoZSxSZik7Y29uc3QgdD1lPy50b29sSW5mbz8ucmVzdWx0Py5zdHJ1Y3R1cmVkQ29udGVudDt0JiZVZih0LGU/LnRvb2xJbmZvPy5yZXN1bHQ/Ll9tZXRhKX0pLmNhdGNoKCgpPT57bGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5Db3VsZCBub3QgY29ubmVjdCB0byB0aGUgaG9zdC48L2Rpdj4nfSk7PC9zY3JpcHQ+CiAgICA8c3R5bGUgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbj46cm9vdHstLWtpdC1iZzogI2ZmZmZmZjstLWtpdC1iZy1zb2Z0OiAjZjZmN2Y5Oy0ta2l0LWZnOiAjMWExZjJiOy0ta2l0LWZnLXNvZnQ6ICM2MjZiN2E7LS1raXQtZmctZmFpbnQ6ICM4YTkzYTE7LS1raXQtbGluZTogI2UzZTdlZDstLWtpdC1hY2NlbnQ6ICMxYTFmMmI7LS1raXQtYWNjZW50LWZnOiAjZmZmZmZmOy0ta2l0LWxpbms6ICMyNTYzZWI7LS1raXQtZ29vZDogIzFhN2Y1YTstLWtpdC1nb29kLWJnOiAjZGRmM2U0Oy0ta2l0LWJhZDogI2IzMjYxZTstLWtpdC1iYWQtYmc6ICNmYmU2ZTQ7LS1raXQtd2FybjogIzhhNWEwMDstLWtpdC13YXJuLWJnOiAjZmRmMGQ1Oy0ta2l0LXJpbmc6ICMyNTYzZWJ9W2RhdGEtdGhlbWU9ZGFya117LS1raXQtYmc6ICMxZDFmMjM7LS1raXQtYmctc29mdDogIzI2MjkyZTstLWtpdC1mZzogI2VjZWVmMTstLWtpdC1mZy1zb2Z0OiAjYTRhYmI2Oy0ta2l0LWZnLWZhaW50OiAjN2M4NDkxOy0ta2l0LWxpbmU6ICMzNjNhNDE7LS1raXQtYWNjZW50OiAjZWNlZWYxOy0ta2l0LWFjY2VudC1mZzogIzFkMWYyMzstLWtpdC1saW5rOiAjN2FhN2ZmOy0ta2l0LWdvb2Q6ICM2ZmQzYTI7LS1raXQtZ29vZC1iZzogIzFmM2EyZDstLWtpdC1iYWQ6ICNmZjhhODA7LS1raXQtYmFkLWJnOiAjM2QyMzIyOy0ta2l0LXdhcm46ICNmMmM0NmI7LS1raXQtd2Fybi1iZzogIzNhMzAyMDstLWtpdC1yaW5nOiAjN2FhN2ZmfTpyb290ey0tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtcHJpbWFyeSwgdmFyKC0ta2l0LWJnKSk7LS1iZy1zb2Z0OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSwgdmFyKC0ta2l0LWJnLXNvZnQpKTstLWZnOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnksIHZhcigtLWtpdC1mZykpOy0tZmctc29mdDogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnksIHZhcigtLWtpdC1mZy1zb2Z0KSk7LS1mZy1mYWludDogdmFyKC0tY29sb3ItdGV4dC10ZXJ0aWFyeSwgdmFyKC0ta2l0LWZnLWZhaW50KSk7LS1saW5lOiB2YXIoLS1jb2xvci1ib3JkZXItcHJpbWFyeSwgdmFyKC0ta2l0LWxpbmUpKTstLWFjY2VudDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50KSk7LS1hY2NlbnQtZmc6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudC1mZykpOy0tbGluazogdmFyKC0tY29sb3ItdGV4dC1pbmZvLCB2YXIoLS1raXQtbGluaykpOy0tZ29vZDogdmFyKC0tY29sb3ItdGV4dC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZCkpOy0tZ29vZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZC1iZykpOy0tYmFkOiB2YXIoLS1jb2xvci10ZXh0LWRhbmdlciwgdmFyKC0ta2l0LWJhZCkpOy0tYmFkLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWRhbmdlciwgdmFyKC0ta2l0LWJhZC1iZykpOy0td2FybjogdmFyKC0tY29sb3ItdGV4dC13YXJuaW5nLCB2YXIoLS1raXQtd2FybikpOy0td2Fybi1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nLCB2YXIoLS1raXQtd2Fybi1iZykpOy0tcmluZzogdmFyKC0tY29sb3ItcmluZy1wcmltYXJ5LCB2YXIoLS1raXQtcmluZykpOy0tcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnLCAxNHB4KTstLXJhZGl1cy1zbTogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbSwgOXB4KTstLWZvbnQ6IHZhcigtLWZvbnQtc2Fucywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sIHNhbnMtc2VyaWYpOy0tbW9ubzogdmFyKC0tZm9udC1tb25vLCB1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgTWVubG8sIG1vbm9zcGFjZSk7LS1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSwgMCAxcHggMnB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSwgMCAycHggNXB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSl9Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9Ym9keXttYXJnaW46MDtmb250LWZhbWlseTp2YXIoLS1mb250KTtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfS5jYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JveC1zaGFkb3c6dmFyKC0tc2hhZG93KTttYXgtd2lkdGg6NTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctbGVmdDp2YXIoLS1pbnNldC1sZWZ0LCAwcHgpO3BhZGRpbmctcmlnaHQ6dmFyKC0taW5zZXQtcmlnaHQsIDBweCl9LmhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O3BhZGRpbmc6MTRweCAxOHB4IDB9LmhlYWQgLnRpdGxle2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmhlYWQgLnRpdGxlW2hpZGRlbl17ZGlzcGxheTpub25lfSNjb250ZW50e3BhZGRpbmc6MTBweCAxOHB4IDE4cHh9LnJlZnJlc2h7bWFyZ2luLWxlZnQ6OHB4O2FsaWduLXNlbGY6Y2VudGVyO2ZsZXg6bm9uZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTJzLGNvbG9yIC4xMnN9LnJlZnJlc2g6aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmVmcmVzaDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi42fS5yZWZyZXNoW2hpZGRlbl17ZGlzcGxheTpub25lfS5yZWZyZXNoIHN2Z3t3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2Rpc3BsYXk6YmxvY2t9LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOmtpdC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBraXQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5lbXB0eXtwYWRkaW5nOjE4cHggMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweH0uaGludHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWFsaWduOmNlbnRlcn0ubm90ZXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmc6MCAwIDEwcHh9Lm1vbm97Zm9udC1mYW1pbHk6dmFyKC0tbW9ubyk7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1mYWludCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5iYWRnZS5va3tjb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5iYWRnZS53YXJuLC5iYWRnZS50b2Rve2NvbG9yOnZhcigtLXdhcm4pO2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyl9LmJhZGdlLmVycntjb2xvcjp2YXIoLS1iYWQpO2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKX0uYnV5e21hcmdpbi10b3A6MTRweDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NDRweDtwYWRkaW5nOjExcHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWFjY2VudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY1MDtjdXJzb3I6cG9pbnRlcn0uYnV5OmRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLWNvbG9yOnZhcigtLWxpbmUpO2NvbG9yOnZhcigtLWZnLWZhaW50KTtjdXJzb3I6ZGVmYXVsdH0uYnV5LmFsdCwuZ2hvc3R7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZ2hvc3R7ZmxleDoxO21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nOjlweCAxMHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcn0ubGlua3tib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzo2cHggMCAwO2NvbG9yOnZhcigtLWxpbmspO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ucXR5e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweH0ucXR5IGJ1dHRvbnt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTdweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5xdHkgc3BhbnttaW4td2lkdGg6MjZweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MH1idXR0b246Zm9jdXMtdmlzaWJsZSxhOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tcmluZyk7b3V0bGluZS1vZmZzZXQ6MnB4fUBtZWRpYShtYXgtd2lkdGg6NDMwcHgpey5jYXJke2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0uaGVhZHtwYWRkaW5nOjEycHggMTRweCAwfSNjb250ZW50e3BhZGRpbmc6OHB4IDE0cHggMTRweH0uYnV5e21pbi1oZWlnaHQ6NDhweDtmb250LXNpemU6MTVweH0uZ2hvc3R7bWluLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMy41cHh9LnF0eSBidXR0b257d2lkdGg6NDJweDtoZWlnaHQ6NDJweDtmb250LXNpemU6MTlweH0ucmVmcmVzaHt3aWR0aDozNHB4O2hlaWdodDozNHB4fS5oaW50LC5ub3RlLC5lbXB0eXtmb250LXNpemU6MTNweH19QG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246bm9uZX0qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fVtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9I2NvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0uaGVhZHttaW4taGVpZ2h0OjI4cHh9LmhvbWV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbjowO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO21pbi13aWR0aDowfS5ob21lOmhvdmVye29wYWNpdHk6LjcyfS5oZWFkIC5icmFuZHttYXgtaGVpZ2h0OjM0cHg7bWF4LXdpZHRoOjE1MHB4O29iamVjdC1maXQ6Y29udGFpbn0uaGVhZCAudGl0bGV7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxNXB4O2xldHRlci1zcGFjaW5nOi0uMDFlbX0uaGVhZCAuc3Vie2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLWlubGluZS1zdGFydDphdXRvO3RleHQtYWxpZ246ZW5kfS5oZWFkdHJpcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo1cHggMTFweCA1cHggOXB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0uaGVhZHRyaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0uaGVhZCAuc3ViKy5oZWFkdHJpcHttYXJnaW4taW5saW5lLXN0YXJ0OjB9LmNhcmQuYnVzeXtvcGFjaXR5Oi42Mn0uY2FyZC5idXN5IGJ1dHRvbiwuY2FyZC5idXN5IGlucHV0LC5jYXJkLmJ1c3kgc2VsZWN0e3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1lbWJlcmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NHB4IDEwcHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NjIwO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcn0ubWVtYmVyY2hpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5saW5reXtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO2ZvbnQ6aW5oZXJpdDtjb2xvcjp2YXIoLS1saW5rKTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5wLXdhc3tmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LnAtbWVtYmVye2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWdvb2QpIDc4JSxibGFjayl9LnN1bS5nb29kIHNwYW46bGFzdC1jaGlsZHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5kZW1ve2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjQ1fS5kZW1vIGJ7Zm9udC13ZWlnaHQ6NzAwfS5jaXR5Z3JvdXArLmNpdHlncm91cHttYXJnaW4tdG9wOjE0cHh9LmNpdHluYW1le2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDZlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luLWJvdHRvbTo4cHh9LmNpdHluYW1lIHNtYWxse2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMDtvcGFjaXR5Oi43NX0udGlsZXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxOTZweCwxZnIpKTtnYXA6MTBweH0udGlsZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOnZhcigtLWJnKTt0ZXh0LWFsaWduOnN0YXJ0O2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3BhZGRpbmc6MH0udGlsZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tZmctZmFpbnQpfS50LXNob3R7cG9zaXRpb246cmVsYXRpdmU7YXNwZWN0LXJhdGlvOjE2IC8gMTA7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS50LXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS50LW1hcmt7Zm9udC1zaXplOjMwcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO29wYWNpdHk6LjkyO3RleHQtc2hhZG93OjAgMXB4IDEycHggcmdiKDAgMCAwIC8gMjIlKTtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9LnQtc2hvdCBpbWcsLmhlcm8gaW1ne3otaW5kZXg6MX0udC1icmFuZHt6LWluZGV4OjI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQtYmxvY2stc3RhcnQ6OHB4O2luc2V0LWlubGluZS1zdGFydDo4cHg7YmFja2dyb3VuZDojMDAwMDAwNjE7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDJlbX0udC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtwYWRkaW5nOjEwcHggMTFweCAxMXB4fS50LW5hbWV7Zm9udC13ZWlnaHQ6NjQwO2ZvbnQtc2l6ZToxMy41cHg7bGluZS1oZWlnaHQ6MS4zO2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjI7bGluZS1jbGFtcDoyOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW47bWluLWhlaWdodDoyLjZlbX0udC13aGVyZXtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udC1mb290e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6OHB4O21hcmdpbi10b3A6MnB4fS50LWZyb217Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjUwfS50LWZyb20gc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMXB4fS5yYXRle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDozcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJhdGUgc3Zne2NvbG9yOiNlOGEzM2R9Lmhlcm97cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjthc3BlY3QtcmF0aW86MjEgLyA4O2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0uaGVybyAudC1tYXJre2ZvbnQtc2l6ZTo0MHB4fS5oLW5hbWV7Zm9udC1zaXplOjE3cHg7Zm9udC13ZWlnaHQ6NjgwO2xldHRlci1zcGFjaW5nOi0uMDE1ZW07bGluZS1oZWlnaHQ6MS4yNX0uaC13aGVyZXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4fS5oLXN1bXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjU1O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5jaGlwc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweH0uY2hpcHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOXB4O2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7YmFja2dyb3VuZDp2YXIoLS1iZyl9LnN0YXl7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMTEycHgsMWZyKSBtaW5tYXgoMTEycHgsMWZyKSBhdXRvIDFmcjtnYXA6OHB4O2FsaWduLWl0ZW1zOmVuZDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LnN0YXkgbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN0YXkgaW5wdXQsLnN0YXkgc2VsZWN0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjdweCA2cHg7bWluLXdpZHRoOjA7d2lkdGg6MTAwJX0uc3RlcC5saWdodHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nOjJweH0uc3RlcC5saWdodCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubmlnaHRze2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmctYm90dG9tOjhweDt3aGl0ZS1zcGFjZTpub3dyYXB9LnN0YXkgLmdve3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjlweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OHB4IDE0cHg7Y3Vyc29yOnBvaW50ZXJ9LnN0YXkgLmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41O2N1cnNvcjpkZWZhdWx0fS50aHVtYntncmlkLWFyZWE6dGh1bWI7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtib3JkZXItcmFkaXVzOjEwcHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07ZmxleDowIDAgYXV0b30udGh1bWIgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS5yb3dze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweH0ucm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG8gYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IHByaWNlIGFjdGlvbiI7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweCAxMXB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBwcmljZSBhY3Rpb24ifS5yb3cgLmJvZHl7Z3JpZC1hcmVhOmJvZHk7bWluLXdpZHRoOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4fS5yb3cgLm5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjA7bGluZS1oZWlnaHQ6MS4zfS5yb3cgLm1ldGF7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjQ7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MztsaW5lLWNsYW1wOjM7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbn0ucm93IC5wcmljZXtncmlkLWFyZWE6cHJpY2U7dGV4dC1hbGlnbjplbmQ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5yb3cgLnAtdG90YWx7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NjB9LnJvdyAucC11bml0e2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yb3cgLmFjdGlvbntncmlkLWFyZWE6YWN0aW9ufS5iYWRnZXN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo1cHg7bWFyZ2luLXRvcDoycHh9LmJhZGdle2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzoycHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjIwO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmJhZGdlLmdvb2R7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5iYWRnZS53YXJue2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybil9LmJhZGdlLmJhZHtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKX0uYWRke2Rpc3BsYXk6aW5saW5lLWdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjM4cHg7aGVpZ2h0OjM4cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXR9LmFkZDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uYWRkW2Rpc2FibGVkXXtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5zdGVwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweH0uc3RlcCBidXR0b257d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0uc3RlcCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZmZmZmMmV9LnN0ZXAgLm57bWluLXdpZHRoOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5e2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW46MTJweCAwIDZweH0uc3Vtc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo1cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7bWFyZ2luLXRvcDoxMnB4O3BhZGRpbmctdG9wOjEwcHg7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5zdW17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnN1bS50b3RhbHtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5mb290e2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tdG9wOjEycHh9Lmdve2ZsZXg6MTtib3JkZXI6MDtib3JkZXItcmFkaXVzOjExcHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXNpemU6MTRweDtwYWRkaW5nOjEycHggMTZweDtjdXJzb3I6cG9pbnRlcn0uZ29bZGlzYWJsZWRde29wYWNpdHk6LjU1O2N1cnNvcjpkZWZhdWx0fS5nby5xdWlldHtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjYyMH0uZ28uZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tYmFkKTtjb2xvcjp2YXIoLS1iZyl9Lm5vdGV7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtsaW5lLWhlaWdodDoxLjV9LmZvcm17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTFweDttYXJnaW4tdG9wOjEwcHh9LmZvcm0gbGFiZWx7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzouMDNlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCl9LmZvcm0gaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OHB4IDlweH0uZm9ybSAudHdve2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5jb25me2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4IDEycHh9LmNvbmYgLmNvZGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NzIwO2xldHRlci1zcGFjaW5nOi4wNmVtO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29uZiAud2hlcmV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjB9LmNvbmYgLndoZW57Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udW5wYWlke2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udW5wYWlkIGJ7Zm9udC13ZWlnaHQ6NzIwfS5tb25leS1vdXR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY2MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnByb3Nle2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0ucHJvc2UgaDR7bWFyZ2luOjE0cHggMCA0cHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tZmcpfS5lbXB0eXtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweDtwYWRkaW5nOjE4cHggNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lcnJ7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsudGlsZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdChhdXRvLWZpbGwsbWlubWF4KDE1MHB4LDFmcikpO2dhcDo4cHh9LnQtbWFya3tmb250LXNpemU6MjRweH0uc3RheXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcn0uc3RheSAuZ3Vlc3Rze2dyaWQtY29sdW1uOjF9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LnN0YXkgLmdve2dyaWQtY29sdW1uOjI7d2lkdGg6MTAwJX0ucm93e2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztncmlkLXRlbXBsYXRlLWFyZWFzOiJib2R5IGFjdGlvbiIgInByaWNlIGFjdGlvbiI7cm93LWdhcDo2cHh9LnJvdy53aXRodGh1bWJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoidGh1bWIgYm9keSBhY3Rpb24iICJ0aHVtYiBwcmljZSBhY3Rpb24ifS5yb3cud2l0aHRodW1iIC50aHVtYnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2FsaWduLXNlbGY6c3RhcnR9LnJvdyAucHJpY2V7dGV4dC1hbGlnbjpzdGFydH0uZm9ybSAudHdve2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9fS5jbXAtd3JhcHtvdmVyZmxvdy14OmF1dG87bWFyZ2luLWlubGluZTotMnB4O3BhZGRpbmc6MnB4fS5jbXB7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNzZweCw5NnB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDExMnB4LDFmcikpO2FsaWduLWl0ZW1zOnN0cmV0Y2g7Y29sdW1uLWdhcDo4cHh9LmNtcC1jb3JuZXJ7Z3JpZC1jb2x1bW46MX0uY21wLWhlYWR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47bWluLXdpZHRoOjB9LmNtcC1oZWFkLnBpY2t7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggdmFyKC0tYWNjZW50KX0uY21wLWhlYWQgLnQtc2hvdHthc3BlY3QtcmF0aW86MTYgLyA5O2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMDAlfS5jb2wtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7cGFkZGluZzoxMHB4IDExcHggMTJweH0uY29sLW5hbWV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2NTA7bGluZS1oZWlnaHQ6MS4zfS5jb2wtcHJpY2V7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29sLXByaWNlIHNtYWxse2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ud2h5e2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1pbmxpbmUtc3RhcnQ6MnB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweH0ucGN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NX0ucGMgZGl2e2Rpc3BsYXk6ZmxleDtnYXA6NXB4fS5wYyAubXtmbGV4OjAgMCBhdXRvO2ZvbnQtd2VpZ2h0OjcwMH0ucGMgLnBybyAubXtjb2xvcjp2YXIoLS1nb29kKX0ucGMgLmNvbiAubXtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY21wIC5rLC5jbXAgLnZ7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjQ1O3BhZGRpbmc6NnB4IDhweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbXAgLmt7Z3JpZC1jb2x1bW46MTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwb3NpdGlvbjpzdGlja3k7aW5zZXQtaW5saW5lLXN0YXJ0OjA7YmFja2dyb3VuZDp2YXIoLS1iZyl9LmNtcCAudntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNtcCAudi5hbHQsLmNtcCAuazpoYXMoKy52LmFsdCl7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjZweH0ucGlja21hcmt7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3BhZGRpbmc6M3B4IDhweDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9LmRheXJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjI4cHggMWZyO2dhcDoxMHB4fS5kYXludW17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweH0uZGF5bnVtIGJ7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kYXludW0gaXtmbGV4OjE7d2lkdGg6MXB4O2JhY2tncm91bmQ6dmFyKC0tbGluZSl9LmRheXJvdzpsYXN0LWNoaWxkIC5kYXludW0gaXtkaXNwbGF5Om5vbmV9LmRheWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjE0cHg7bWluLXdpZHRoOjB9LmRheWxhYmVse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uZGF5bm90ZXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucGxhbi1pdGVte2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo4cHggMTBweH0ucGxhbi1pdGVtIC5uYW1le2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucGxhbi1pdGVtIC5tZXRhe2ZvbnQtc2l6ZToxMXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5pbnN0YXRle2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O3doaXRlLXNwYWNlOm5vd3JhcH0uaW5zdGF0ZS55ZXN7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5pbnN0YXRlLm5ve2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCl9LmdhcHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMXB4O3BhZGRpbmc6MTBweCAxMXB4O2ZvbnQtc2l6ZToxMi41cHg7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXAgYntjb2xvcjp2YXIoLS1mZyk7Zm9udC13ZWlnaHQ6NzAwfUBtZWRpYShtYXgtd2lkdGg6NDYwcHgpey5jbXB7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCg2OHB4LDg0cHgpIHJlcGVhdCh2YXIoLS1jb2xzKSxtaW5tYXgoMTA4cHgsMWZyKSl9fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBjbGFzcz0iY2FyZCI+CiAgICAgIDxkaXYgY2xhc3M9ImhlYWQiPgogICAgICAgIDwhLS0gVGhlIGdyb3VwJ3Mgd29yZG1hcmsgYXJyaXZlcyBXSVRIIFRIRSBEQVRBIGFzIGBsb2dvVXJsYC4gTm90aGluZyBpcwogICAgICAgICAgICAgYmFrZWQgaW4gaGVyZTogYSBsb2dvIGNvbXBpbGVkIGludG8gdGhlIGNhcmQgaXMgdGhlIGZpcnN0IGJyYW5kJ3MsCiAgICAgICAgICAgICBhbmQgZXZlcnkgaG90ZWwgZ3JvdXAgYWZ0ZXIgdGhlbSB3b3VsZCB3ZWFyIGl0LiAtLT4KICAgICAgICA8IS0tIFRoZSB3YXkgYmFjaywgb24gZXZlcnkgdmlldy4gV2l0aG91dCBpdCB0aGUgdHJpcCwgdGhlIGJvb2tpbmdzIGxpc3QKICAgICAgICAgICAgIGFuZCBhIGNhbmNlbGxlZCBib29raW5nIGFyZSBhbGwgcGxhY2VzIGEgZ3Vlc3QgY2FuIHJlYWNoIGFuZCBub3QKICAgICAgICAgICAgIGxlYXZlIChyb2JpbiwgMjAyNi0wOS0xOCkuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImhvbWUiIGlkPSJob21lIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIiBhcmlhLWxhYmVsPSJCYWNrIHRvIHRoZSBob3RlbHMiPgogICAgICAgICAgPGltZyBjbGFzcz0iYnJhbmQiIGlkPSJicmFuZCIgYWx0PSIiIGhpZGRlbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0aXRsZSIgaWQ9InRpdGxlIj48L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgICAgPHNwYW4gY2xhc3M9InN1YiIgaWQ9InN1YiI+PC9zcGFuPgogICAgICAgIDwhLS0gVGhlIHRpZXIsIG9yIHRoZSB3YXkgaW4uIEEgbWVtYmVyIHJhdGUgaXMgYSBmYWN0IGFib3V0IGV2ZXJ5IHByaWNlCiAgICAgICAgICAgICBvbiB0aGUgY2FyZCwgc28gaXQgYmVsb25ncyBpbiB0aGUgaGVhZGVyIHJhdGhlciB0aGFuIG9uIG9uZSB2aWV3LiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtZW1iZXJjaGlwIiBpZD0ibWVtYmVyY2hpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYXNrLXNpZ24taW4iPjwvYnV0dG9uPgogICAgICAgIDwhLS0gVGhlIHRyaXAsIGZyb20gdGhlIHRvcC4gVGhlIHNob3BwaW5nIGNhcmQgbGVhcm5lZCBvbiAyMDI2LTA5LTE3IHRoYXQKICAgICAgICAgICAgIGEgZm9vdGVyLW9ubHkgY2FydCBtZWFucyBzY3JvbGxpbmcgcGFzdCB0d2VudHkgdGlsZXMgdG8gcmVhY2ggaXQuCiAgICAgICAgICAgICBTaG93biBvbmNlIHRoZSB0cmlwIGhhcyBzb21ldGhpbmcgaW4gaXQsIGhpZGRlbiBvbiB0aGUgdHJpcCB2aWV3LiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkdHJpcCIgaWQ9ImhlYWR0cmlwIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJ0cmlwIiBoaWRkZW4gYXJpYS1sYWJlbD0iVmlldyB0aGUgdHJpcCI+CiAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE1IiBoZWlnaHQ9IjE1IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIKICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgPHBhdGggZD0iTTQgOC41aDE2djExYTEuNSAxLjUgMCAwIDEtMS41IDEuNWgtMTNBMS41IDEuNSAwIDAgMSA0IDE5LjV6IiAvPgogICAgICAgICAgICA8cGF0aCBkPSJNOSA4LjVWNmEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDIgMnYyLjUiIC8+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICAgIDxzcGFuIGlkPSJoZWFkdHJpcG4iPjA8L3NwYW4+CiAgICAgICAgPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJjb250ZW50Ij48ZGl2IGNsYXNzPSJlbXB0eSI+TG9hZGluZ+KApjwvZGl2PjwvZGl2PgogICAgPC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==', 'base64').toString('utf8');
6
6
  /** sha256 of widget/src + widget/index.html at build time - the drift guard reads this. */
7
- export const HOTEL_CARD_SOURCE_SHA = 'd5e92e7909f1f51be6ace0a732ce6da46b969e06f5493824e6752dc6b9264436';
7
+ export const HOTEL_CARD_SOURCE_SHA = '7eeb40ba5f463b23e978e6669e0ea6c24d4c4eec1319d1bcfdaa291c2b0462fc';
8
8
  //# sourceMappingURL=card.generated.js.map