@curless/hotel-storefront 0.16.1 → 0.17.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.
- package/dist/__tests__/card-contract.test.js +9 -0
- package/dist/__tests__/card-contract.test.js.map +1 -1
- package/dist/__tests__/demo-hotels.test.js +7 -2
- package/dist/__tests__/demo-hotels.test.js.map +1 -1
- package/dist/__tests__/tools.test.js +50 -1
- package/dist/__tests__/tools.test.js.map +1 -1
- package/dist/backend.d.ts +12 -1
- package/dist/backend.d.ts.map +1 -1
- package/dist/card.generated.d.ts +1 -1
- package/dist/card.generated.js +2 -2
- package/dist/card.generated.js.map +1 -1
- package/dist/demo-hotels.d.ts.map +1 -1
- package/dist/demo-hotels.js +63 -4
- package/dist/demo-hotels.js.map +1 -1
- package/dist/regions.d.ts.map +1 -1
- package/dist/regions.js +24 -13
- package/dist/regions.js.map +1 -1
- package/dist/server.d.ts +8 -8
- package/dist/server.js +2 -2
- package/dist/tools.d.ts +6 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +65 -12
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +24 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/card.generated.js
CHANGED
|
@@ -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+Y29uc3QgdWY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLGxmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxPYz17fSxkZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKHY9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOnZ9KSx2PT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjp2fSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSxsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLHU9bD8ubm9uY2V8fGw/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAoZD0+e2lmKGQ9bGYoZCxvKSxkIGluIE9jKXJldHVybjtPY1tkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSx2PW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgaz1hLmxlbmd0aC0xO2s+PTA7ay0tKXtjb25zdCB3PWFba107aWYody5ocmVmPT09ZCYmKCFtfHx3LnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke3Z9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOnVmLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLHUmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsdSksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgoayx3KT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsayksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PncobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBwZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBoZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBrbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIGZmKGUpe31mdW5jdGlvbiBtZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIGdmKGUpe31mdW5jdGlvbiBHcihlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBRcihlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+Z3MobikpLmpvaW4odCl9ZnVuY3Rpb24gYW8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIHZme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIG5ldyB2ZihlKX1mdW5jdGlvbiBmcyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBSZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gd3UoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgQWM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gJHUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1BYylyZXR1cm4gbz09PXZvaWQgMCYmKG89QWMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIGJmKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gV2UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiB3byhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBUZShlKXtyZXR1cm4gd28oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gU3UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBXZSh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiB6dShlLHQsbil7dCBpbiBlP1dlKGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gRmUoZSx0LG4sbyl7Y29uc3Qgcj1UZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9TdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTp6dShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiB5ZihlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/U3UoZSxuLCgpPT50W25dKTp6dShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiByZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBfZihlKXtyZXR1cm4gcmUoZS5fem9kLmRlZil9ZnVuY3Rpb24ga2YoZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gd2YoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uICRmKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gVHUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIEl1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgbXM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IFB1PUZ0KCgpPT57aWYoaWUuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gTmUoZSl7aWYocnQoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKHJ0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24gJG8oZSl7cmV0dXJuIE5lKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gU2YoZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgemY9ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LGNvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSkseHU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBLKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBUZihlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBncyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBDdShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IEV1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxPdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gQXUoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gRmUocyxlLFNvKGUsdCkpLEsoZSxyZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBTbyhlLHQpe2NvbnN0IG49VGUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBSdShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoU28oZSx0KSksaT17fTtyZXR1cm4gRmUoaSxlLFJlZmxlY3Qub3duS2V5cyhUZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLEsoZSxyZShuLHtzaGFwZTppLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBadShlLHQpe2lmKCFOZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1UZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gSyhlLHJlKGUuX3pvZC5kZWYse3NoYXBlOk51KGUsdCl9KSl9ZnVuY3Rpb24gTnUoZSx0KXtjb25zdCBuPXt9O3JldHVybiBGZShuLGUsUmVmbGVjdC5vd25LZXlzKFRlKGUpKSkseWYobix0KSxufWZ1bmN0aW9uIGp1KGUsdCl7aWYoIU5lKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBLKGUscmUoZS5fem9kLmRlZix7c2hhcGU6TnUoZSx0KX0pKX1mdW5jdGlvbiBNdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtGZShuLGUsUmVmbGVjdC5vd25LZXlzKFRlKGUpKSksRmUobix0LFJlZmxlY3Qub3duS2V5cyhUZSh0KSkpO2NvbnN0IG89cmUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBLKGUsbyl9ZnVuY3Rpb24gWXIoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGE9bj9uZXcgU2V0KFNvKHQsbikpOnZvaWQgMCxsPXt9O3JldHVybiBGZShsLHQsUmVmbGVjdC5vd25LZXlzKFRlKHQpKSxlJiYoKHUsZCk9PmEmJiFhLmhhcyhkKT91Om5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOnV9KSkpLEsodCxyZSh0Ll96b2QuZGVmLHtzaGFwZTpsLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBxdShlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoU28odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIEZlKHIsdCxSZWZsZWN0Lm93bktleXMoVGUodCkpLChzLGkpPT5vJiYhby5oYXMoaSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLEsodCxyZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIGNlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRHUoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBtZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIFhlKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIFhyKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBiZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOlhlKGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9YZShzPy4oZSkpPz9YZSh0Py5lcnJvcj8uKGUpKT8/WGUobi5jdXN0b21FcnJvcj8uKGUpKT8/WGUobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LmtleXMoZSkpbD09PSJpbnN0Inx8bD09PSJzY2hlbWEifHxsPT09ImNvbnRpbnVlInx8bD09PSJpbnB1dCJ8fGw9PT0iX19wcm90b19fInx8KGFbbF09ZVtsXSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gem8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IElmPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIFRvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIUlmLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gSW8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIEx1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gc3QoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBQZihlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gVXUoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIEh1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24geGYoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gVXUodCtuKX1mdW5jdGlvbiBDZihlKXtyZXR1cm4gSHUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIEVmKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBPZihlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBBZntjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIEZ1KGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6UmYoZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBQZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBQbyhlLHQsbil7cmV0dXJuIFBlKGUsdCxuLCExKX1mdW5jdGlvbiBCdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gUGUodGhpcyxuLG8odGhpcykpfSxzZXQocil7UGUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIFJmKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpQZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe1BlKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBaZihlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IEZyLEFlPSExO2NvbnN0IE5mPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7QWU9ITB9fTtmdW5jdGlvbiBFKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmRnIhPT1lLl96b2Qpe0ZyPXZvaWQgMDtyZXR1cm59RnI9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LE5mKTtjb25zdCByPUFlO0FlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIEFlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksQWU9QWV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxBZT1BZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gQnUoZSx0LG4sbyl7Y29uc3Qgcj1aZihlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IFZ1PSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gdnMoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtWdV09ITAsdH1jb25zdCBicz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6T3UsQ09OU1RBTlRfQ0FUQ0g6VnUsQ2xhc3M6QWYsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6RXUsYWJvcnRlZDpjZSxhbGxvd3NFdmFsOlB1LGFzc2VydDpnZixhc3NlcnRFcXVhbDpwZixhc3NlcnRJczpmZixhc3NlcnROZXZlcjptZixhc3NlcnROb3RFcXVhbDpoZixhc3NpZ25Qcm9wOldlLGF0dGFjaFNjaGVtYTpYcixiYXNlNjRUb1VpbnQ4QXJyYXk6VXUsYmFzZTY0dXJsVG9VaW50OEFycmF5OnhmLGNhY2hlZDpGdCxjYXB0dXJlU3RhY2tUcmFjZTptcyxjbGVhbkVudW06UGYsY2xlYW5SZWdleDpSZSxjbG9uZTpLLGNsb25lRGVmOl9mLGNvZGVQb2ludExlbmd0aDpUbyxjb25zdGFudENhdGNoOnZzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6VGYsZGVmaW5lTGF6eTokdSxkZWZpbmVMYXp5SW50ZXJuYWw6RSxkZXJpdmVkOkJ0LGVzYzpUdSxlc2NhcGVSZWdleDpJZSxleHBsaWNpdGx5QWJvcnRlZDpEdSxleHRlbmQ6WnUsZmluYWxpemVJc3N1ZTpiZSxmbG9hdFNhZmVSZW1haW5kZXI6d3UsZ2V0RWxlbWVudEF0UGF0aDprZixnZXRFbnVtVmFsdWVzOkdyLGdldExlbmd0aGFibGVPcmlnaW46SW8sZ2V0UGFyc2VkVHlwZTp6ZixnZXRTaXphYmxlT3JpZ2luOnpvLGhleFRvVWludDhBcnJheTpFZixoaWRlOlBvLGluc3RhbGxMYXp5UHJvcDpCdSxpc09iamVjdDpydCxpc1BsYWluT2JqZWN0Ok5lLGlzc3VlOnN0LGpvaW5WYWx1ZXM6UXIsanNvblN0cmluZ2lmeVJlcGxhY2VyOmFvLG1lbWJlcnM6RnUsbWVyZ2U6TXUsbWVyZ2VEZWZzOnJlLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6ZnMsbnVtS2V5czpTZixvYmplY3RDbG9uZTpiZixvbWl0OlJ1LG9wdGlvbmFsS2V5czpDdSxvd246UGUscGFyc2VkVHlwZTpMdSxwYXJ0aWFsOllyLHBpY2s6QXUscHJlZml4SXNzdWVzOm1lLHByaW1pdGl2ZVR5cGVzOnh1LHByb21pc2VBbGxPYmplY3Q6d2YscHJvcGVydHlLZXlUeXBlczpjbyxyYW5kb21TdHJpbmc6JGYscmF3U2hhcGU6d28scmVxdWlyZWQ6cXUsc2FmZUV4dGVuZDpqdSxzaGFsbG93Q2xvbmU6JG8sc2x1Z2lmeTpJdSxzdHJpbmdpZnlQcmltaXRpdmU6Z3MsdG9ab2Q6a28sdWludDhBcnJheVRvQmFzZTY0Okh1LHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpDZix1aW50OEFycmF5VG9IZXg6T2YsdW53cmFwTWVzc2FnZTpYZX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgUmM7Y29uc3QgeXM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLEJyPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IFpjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIGpmKGUpe2NvbnN0IHQ9WmM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBaYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKHYpe3RoaXMuZGVmPXYsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgaT1uLGE9aSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gbCh2LGIpe2lmKHYuX3pvZCl7aWYodi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7QnIudmFsdWU9bmV3IHMoYik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh2LCJfem9kIixCcil9ZmluYWxseXtCci52YWx1ZT12b2lkIDB9fWlmKHYuX3pvZC50cmFpdHMuYWRkKGUpLHQodixiKSxhKXtjb25zdCBrPU9iamVjdC5nZXRQcm90b3R5cGVPZih2KSx3PXYuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBSPWs7Zm9yKDtSJiZSIT09dzspUj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoUik7Y29uc3QgTz1SPz9rO2EuaGFzKE8pfHwoYS5hZGQoTyksRnUoTyxpKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgayBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLGspJiYoayBpbiB2fHwodltrXT1fW2tdLmJpbmQodikpKX1jb25zdCB1PW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyB1e31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKHYpe2NvbnN0IGI9bz8uUGFyZW50P2pmKGQpOnRoaXM7bChiLHYpO2NvbnN0IF89Yi5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCB3IG9mIF8pdygpO2IuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgaz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gayYmayhiKSxifXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOmx9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOnY9Pm8/LlBhcmVudCYmdiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOnY/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBfcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIFplIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIHhvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShSYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhSYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGllPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIEcoZSl7cmV0dXJuIGUmJk9iamVjdC5hc3NpZ24oaWUsZSksaWV9ZnVuY3Rpb24gTWYoKXtjb25zdCBlPXRoaXMuX3pvZDtyZXR1cm4gZS5tZXNzYWdlPz8oZS5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KGUuZGVmLGFvLDIpKSxlLm1lc3NhZ2V9ZnVuY3Rpb24gcWYoZSl7dGhpcy5fem9kLm1lc3NhZ2U9ZX1jb25zdCBEZj17Z2V0Ok1mLHNldDpxZixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sVnI9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfSxOYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKSxKdT0oZSx0KT0+e2UubmFtZT0iJFpvZEVycm9yIixWci52YWx1ZT10LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc3N1ZXMiLFZyKSxWci52YWx1ZT12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1lc3NhZ2UiLERmKTtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtOYy5oYXMobil8fChOYy5hZGQobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz0oKT0+dGhpcy5tZXNzYWdlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pKX0sS3U9cCgiJFpvZEVycm9yIixKdSksaGU9cCgiJFpvZEVycm9yIixKdSx2b2lkIDAse1BhcmVudDpFcnJvcn0pO2Z1bmN0aW9uIExmKGUsdCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fCh0PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bigpLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6ZVt0XT1uKCkpLGVbdF19ZnVuY3Rpb24gQ28oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17fSxvPVtdO2Zvcihjb25zdCByIG9mIGUuaXNzdWVzKXIucGF0aC5sZW5ndGg+MD9MZihuLHIucGF0aFswXSwoKT0+W10pLnB1c2godChyKSk6by5wdXNoKHQocikpO3JldHVybntmb3JtRXJyb3JzOm8sZmllbGRFcnJvcnM6bn19ZnVuY3Rpb24gRW8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17X2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e2Zvcihjb25zdCBpIG9mIHIuaXNzdWVzKWlmKGkuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmaS5lcnJvcnMubGVuZ3RoKWkuZXJyb3JzLm1hcChhPT5vKHtpc3N1ZXM6YX0sWy4uLnMsLi4uaS5wYXRoXSkpO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNle2NvbnN0IGE9Wy4uLnMsLi4uaS5wYXRoXTtpZihhLmxlbmd0aD09PTApbi5fZXJyb3JzLnB1c2godChpKSk7ZWxzZXtsZXQgbD1uLHU9MDtmb3IoO3U8YS5sZW5ndGg7KXtjb25zdCBkPWFbdV0sbT11PT09YS5sZW5ndGgtMTtpZihkPT09Il9lcnJvcnMiKXttJiZsLl9lcnJvcnMucHVzaCh0KGkpKSx1Kys7Y29udGludWV9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsZCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLGQse3ZhbHVlOntfZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IHY9bFtkXTttJiZ2Ll9lcnJvcnMucHVzaCh0KGkpKSxsPXYsdSsrfX19fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIGtzKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e3ZhciBpO2Zvcihjb25zdCBhIG9mIHIuaXNzdWVzKWlmKGEuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmYS5lcnJvcnMubGVuZ3RoKWEuZXJyb3JzLm1hcChsPT5vKHtpc3N1ZXM6bH0sWy4uLnMsLi4uYS5wYXRoXSkpO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNle2NvbnN0IGw9Wy4uLnMsLi4uYS5wYXRoXTtpZihsLmxlbmd0aD09PTApe24uZXJyb3JzLnB1c2godChhKSk7Y29udGludWV9bGV0IHU9bixkPTA7Zm9yKDtkPGwubGVuZ3RoOyl7Y29uc3QgbT1sW2RdLHY9ZD09PWwubGVuZ3RoLTE7dHlwZW9mIG09PSJzdHJpbmciPyh1LnByb3BlcnRpZXM/Pyh1LnByb3BlcnRpZXM9e30pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1LnByb3BlcnRpZXMsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LnByb3BlcnRpZXMsbSx7dmFsdWU6e2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx1PXUucHJvcGVydGllc1ttXSk6KHUuaXRlbXM/Pyh1Lml0ZW1zPVtdKSwoaT11Lml0ZW1zKVttXT8/KGlbbV09e2Vycm9yczpbXX0pLHU9dS5pdGVtc1ttXSksdiYmdS5lcnJvcnMucHVzaCh0KGEpKSxkKyt9fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiBXdShlKXtjb25zdCB0PVtdLG49ZS5tYXAobz0+dHlwZW9mIG89PSJvYmplY3QiP28ua2V5Om8pO2Zvcihjb25zdCBvIG9mIG4pdHlwZW9mIG89PSJudW1iZXIiP3QucHVzaChgWyR7b31dYCk6dHlwZW9mIG89PSJzeW1ib2wiP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKG8pKX1dYCk6L1teXHckXS8udGVzdChvKT90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KG8pfV1gKToodC5sZW5ndGgmJnQucHVzaCgiLiIpLHQucHVzaChvKSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gd3MoZSl7Y29uc3QgdD1bXSxuPVsuLi5lLmlzc3Vlc10uc29ydCgobyxyKT0+KG8ucGF0aD8/W10pLmxlbmd0aC0oci5wYXRoPz9bXSkubGVuZ3RoKTtmb3IoY29uc3QgbyBvZiBuKXQucHVzaChg4pyWICR7by5tZXNzYWdlfWApLG8ucGF0aD8ubGVuZ3RoJiZ0LnB1c2goYCAg4oaSIGF0ICR7V3Uoby5wYXRoKX1gKTtyZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gT28oZSx0KXtyZXR1cm57Y2FsbGVlOnQ/LmNhbGxlZT8/ZSxFcnI6dD8uRXJyfX1jb25zdCBWdD1lPT57Y29uc3QgdD0obixvLHIscyk9Pntjb25zdCBpPXI/ey4uLnIsYXN5bmM6ITF9Onthc3luYzohMX0sYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFplO2lmKGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgbD1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+YmUodSxpLEcoKSkpKTt0aHJvdyBtcyhsLHM/LmNhbGxlZT8/dCksbH1yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LGVzPVZ0KGhlKSxKdD1lPT57Y29uc3QgdD1hc3luYyhuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UmJihhPWF3YWl0IGEpLGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgbD1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAodT0+YmUodSxpLEcoKSkpKTt0aHJvdyBtcyhsLHM/LmNhbGxlZT8/dCksbH1yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LHRzPUp0KGhlKSxLdD1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBaZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP1F1KGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sR3U9S3QoaGUpO2Z1bmN0aW9uIFF1KGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+YmUocixuLEcoKSkpKSx0PXZvaWQgMCxuPXZvaWQgMCksb30sc2V0IGVycm9yKHIpe289cix0PXZvaWQgMCxuPXZvaWQgMH19fWNvbnN0IFd0PWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgcz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlJiYocz1hd2FpdCBzKSxzLmlzc3Vlcy5sZW5ndGg/UXUoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxVZj1XdChoZSksSGY9U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuaW52YWxpZCIpLEZmPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmZhbGxiYWNrIiksQW89KChlLHQsbik9Pntjb25zdCBvPWUuX3pvZC5iYWcudmFsaWRhdG9yO2lmKG8hPT12b2lkIDApe2lmKG8odCkhPT1IZilyZXR1cm4hMDtpZihvLmRlZmluaXRlPT09ITAmJm49PT12b2lkIDApcmV0dXJuITF9cmV0dXJuIEJmKGUsdCxuKX0pO2Z1bmN0aW9uIEJmKGUsdCxuKXtjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITEsYWJvcnRFYXJseTohMH06e2FzeW5jOiExLGFib3J0RWFybHk6ITB9LHI9ZS5fem9kLmJhZy5mYWxsYmFja1J1bjtsZXQgcztpZihyPyhvW0ZmXT0hMCxzPXIoe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSk6cz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykscyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFplO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg9PT0wfWNvbnN0IFJvPWFzeW5jKGUsdCxuKT0+e2NvbnN0IG89bj97Li4ubixhc3luYzohMCxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITAsYWJvcnRFYXJseTohMH07bGV0IHI9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZSYmKHI9YXdhaXQgciksci5pc3N1ZXMubGVuZ3RoPT09MH0sJHM9ZT0+e2NvbnN0IHQ9VnQoZSksbj0obyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHQobyxyLGEsT28obixpKSl9O3JldHVybiBufSxWZj0kcyhoZSksU3M9ZT0+e2NvbnN0IHQ9VnQoZSksbj0obyxyLHMsaSk9PnQobyxyLHMsT28obixpKSk7cmV0dXJuIG59LEpmPVNzKGhlKSx6cz1lPT57Y29uc3QgdD1KdChlKSxuPWFzeW5jKG8scixzLGkpPT57Y29uc3QgYT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBhd2FpdCB0KG8scixhLE9vKG4saSkpfTtyZXR1cm4gbn0sS2Y9enMoaGUpLFRzPWU9Pntjb25zdCB0PUp0KGUpLG49YXN5bmMobyxyLHMsaSk9PmF3YWl0IHQobyxyLHMsT28obixpKSk7cmV0dXJuIG59LFdmPVRzKGhlKSxJcz1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBLdChlKSh0LG4scil9LEdmPUlzKGhlKSxQcz1lPT4odCxuLG8pPT5LdChlKSh0LG4sbyksUWY9UHMoaGUpLHhzPWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gV3QoZSkodCxuLHIpfSxZZj14cyhoZSksQ3M9ZT0+YXN5bmModCxuLG8pPT5XdChlKSh0LG4sbyksWGY9Q3MoaGUpLFl1PS9eW2NDXVswLTlhLXpdezYsfSQvLFh1PS9eWzAtOWEtel0rJC8sZWw9L15bMC03XVswLTlBLUhKS01OUC1UVi1aYS1oamttbnAtdHYtel17MjV9JC8sdGw9L15bMC05YS12QS1WXXsyMH0kLyxubD0vXltBLVphLXowLTldezI3fSQvLG9sPS9eW2EtekEtWjAtOV8tXXsyMX0kLztmdW5jdGlvbiBybChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXlthLXpBLVowLTlfLV17JHtlfX0kYCl9Y29uc3Qgc2w9L15QKD86KFxkK1cpfCg/IS4qVykoPz1cZHxUXGQpKFxkK1kpPyhcZCtNKT8oXGQrRCk/KFQoPz1cZCkoXGQrSCk/KFxkK00pPyhcZCsoWy4sXVxkKyk/Uyk/KT8pJC8sZW09L15bLStdP1AoPyEkKSg/Oig/OlstK10/XGQrWSl8KD86Wy0rXT9cZCtbLixdXGQrWSQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86KD86Wy0rXT9cZCtXKXwoPzpbLStdP1xkK1suLF1cZCtXJCkpPyg/Oig/OlstK10/XGQrRCl8KD86Wy0rXT9cZCtbLixdXGQrRCQpKT8oPzpUKD89W1xkKy1dKSg/Oig/OlstK10/XGQrSCl8KD86Wy0rXT9cZCtbLixdXGQrSCQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86Wy0rXT9cZCsoPzpbLixdXGQrKT9TKT8pPz8kLyxpbD0vXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC8saXQ9ZT0+ZT9uZXcgUmVnRXhwKGBeKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LSR7ZX1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSkkYCk6L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtOF1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvLHRtPWl0KDQpLG5tPWl0KDYpLG9tPWl0KDcpLGFsPS9eKD86W0EtWmEtejAtOV8nK1wtXStcLikqW0EtWmEtejAtOV8nK1wtXSpbQS1aYS16MC05XystXUAoPzpbQS1aYS16MC05XVtBLVphLXowLTlcLV0qXC4pK1tBLVphLXpdezIsfSQvLHJtPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLHNtPS9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aXC0wLTldK1wuKStbYS16QS1aXXsyLH0pKSQvLGNsPS9eW15cc0AiXXsxLDY0fUBbXlxzQF17MSwyNTV9JC91LGltPWNsLGFtPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLGNtPSJeKD89W1xcc1xcU10qW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe1JlZ2lvbmFsX0luZGljYXRvcn1cXHUyMEUzXSlbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7RW1vamlfQ29tcG9uZW50fV0rJCI7ZnVuY3Rpb24gdWwoKXtyZXR1cm4gbmV3IFJlZ0V4cChjbSwidSIpfWNvbnN0IGxsPS9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLyxkbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvLHBsPWU9Pntjb25zdCB0PUllKGU/PyI6Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzpbMC05QS1GXXsyfSR7dH0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7dH0pezV9WzAtOWEtZl17Mn0kYCl9LGhsPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLyhbMC05XXxbMS0yXVswLTldfDNbMC0yXSkkLyxmbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKVwvKDEyWzAtOF18MVswMV1bMC05XXxbMS05XT9bMC05XSkkLyx1bT0vXiR8Xig/OlswLTlhLXpBLVorL117NH0pKig/Oig/OlswLTlhLXpBLVorL117Mn09PSl8KD86WzAtOWEtekEtWisvXXszfT0pKT8kLyxsbT0vXig/OltBLVphLXowLTlfLV17NH0pKig/OltBLVphLXowLTlfLV17MiwzfSk/JC8sbWw9L14oPz0uezEsMjUzfVwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlstMC05YS16QS1aXXswLDYxfVswLTlhLXpBLVpdKT8pKlwuPyQvLGdsPS9eKD89LnsxLDI1M30kKShbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT9cLikrW2EtekEtWl17Miw2M30kLyxFcz0vXmh0dHBzPyQvLHZsPS9eXCtbMS05XVxkezYsMTR9JC8sT3M9L15cZCg/OlsgLV0/XGQpezExLDE4fSQvLGJsPS9eKD86QUVEfEFGTnxBTEx8QU1EfEFPQXxBUlN8QVVEfEFXR3xBWk58QkFNfEJCRHxCRFR8QkhEfEJJRnxCTUR8Qk5EfEJPQnxCT1Z8QlJMfEJTRHxCVE58QldQfEJZTnxCWkR8Q0FEfENERnxDSEV8Q0hGfENIV3xDTEZ8Q0xQfENOWXxDT1B8Q09VfENSQ3xDVVB8Q1ZFfENaS3xESkZ8REtLfERPUHxEWkR8RUdQfEVSTnxFVEJ8RVVSfEZKRHxGS1B8R0JQfEdFTHxHSFN8R0lQfEdNRHxHTkZ8R1RRfEdZRHxIS0R8SE5MfEhUR3xIVUZ8SURSfElMU3xJTlJ8SVFEfElSUnxJU0t8Sk1EfEpPRHxKUFl8S0VTfEtHU3xLSFJ8S01GfEtQV3xLUld8S1dEfEtZRHxLWlR8TEFLfExCUHxMS1J8TFJEfExTTHxMWUR8TUFEfE1ETHxNR0F8TUtEfE1NS3xNTlR8TU9QfE1SVXxNVVJ8TVZSfE1XS3xNWE58TVhWfE1ZUnxNWk58TkFEfE5HTnxOSU98Tk9LfE5QUnxOWkR8T01SfFBBQnxQRU58UEdLfFBIUHxQS1J8UExOfFBZR3xRQVJ8Uk9OfFJTRHxSVUJ8UldGfFNBUnxTQkR8U0NSfFNER3xTRUt8U0dEfFNIUHxTTEV8U09TfFNSRHxTU1B8U1ROfFNWQ3xTWVB8U1pMfFRIQnxUSlN8VE1UfFRORHxUT1B8VFJZfFRURHxUV0R8VFpTfFVBSHxVR1h8VVNEfFVTTnxVWUl8VVlVfFVZV3xVWlN8VkVEfFZFU3xWTkR8VlVWfFdTVHxYQUR8WEFGfFhBR3xYQVV8WEJBfFhCQnxYQkN8WEJEfFhDRHxYQ0d8WERSfFhPRnxYUER8WFBGfFhQVHxYU1V8WFRTfFhVQXxYWFh8WUVSfFpBUnxaTVd8WldHKSQvLEFzPS9eW0EtWl17Mn0oPyEwMHwwMXw5OSlcZHsyfVtBLVowLTldezExLDMwfSQvLHlsPSIoPzooPzpcXGRcXGRbMjQ2OF1bMDQ4XXxcXGRcXGRbMTM1NzldWzI2XXxcXGRcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXGR7NH0tKD86KD86MFsxMzU3OF18MVswMl0pLSg/OjBbMS05XXxbMTJdXFxkfDNbMDFdKXwoPzowWzQ2OV18MTEpLSg/OjBbMS05XXxbMTJdXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXGR8MlswLThdKSkpIjtmdW5jdGlvbiBkbShlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7ZX0kYCl9Y29uc3QgX2w9ZG0oeWwpO2Z1bmN0aW9uIG5zKGUpe2NvbnN0IHQ9Iig/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCI7cmV0dXJuIHR5cGVvZiBlLnByZWNpc2lvbj09Im51bWJlciI/ZS5wcmVjaXNpb249PT0tMT9gJHt0fWA6ZS5wcmVjaXNpb249PT0wP2Ake3R9OlswLTVdXFxkYDpgJHt0fTpbMC01XVxcZFxcLlxcZHske2UucHJlY2lzaW9ufX1gOmUuc2Vjb25kcz9gJHt0fTpbMC01XVxcZCg/OlxcLlxcZCspP2A6YCR7dH0oPzo6WzAtNV1cXGQoPzpcXC5cXGQrKT8pP2B9ZnVuY3Rpb24ga2woZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke25zKGUpfSRgKX1mdW5jdGlvbiB3bChlKXtjb25zdCB0PVsiWiJdO2Uub2Zmc2V0JiZ0LnB1c2goIihbKy1dKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkKSIpO2NvbnN0IG49YCR7bnMoe3ByZWNpc2lvbjplLnByZWNpc2lvbixzZWNvbmRzOiEwfSl9KD86JHt0LmpvaW4oInwiKX0pYCxvPWUubG9jYWw/YCR7bn18JHtucyh7cHJlY2lzaW9uOmUucHJlY2lzaW9ufSl9YDpuO3JldHVybiBuZXcgUmVnRXhwKGBeJHt5bH1UKD86JHtvfSkkYCl9Y29uc3QgJGw9L15bXHNcU117MCx9JC8sU2w9ZT0+e2NvbnN0IHQ9ZT9gW1xcc1xcU117JHtlPy5taW5pbXVtPz8wfSwke2U/Lm1heGltdW0/PyIifX1gOiJbXFxzXFxTXSoiO3JldHVybiBuZXcgUmVnRXhwKGBeJHt0fSRgKX0semw9L14tP1xkK24/JC8sVGw9L14tP1xkKyQvLFpvPS9eLT9cZCsoPzpcLlxkKyk/JC8sSWw9L14oPzp0cnVlfGZhbHNlKSQvaSxQbD0vXm51bGwkL2kseGw9L151bmRlZmluZWQkL2ksQ2w9L15bXkEtWl0qJC8sRWw9L15bXmEtel0qJC8sT2w9L15bMC05YS1mQS1GXSokLztmdW5jdGlvbiBHdChlLHQpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2V9fSR7dH0kYCl9ZnVuY3Rpb24gUXQoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Xy1deyR7ZX19JGApfWNvbnN0IHBtPS9eWzAtOWEtZkEtRl17MzJ9JC8saG09R3QoMjIsIj09IiksZm09UXQoMjIpLG1tPS9eWzAtOWEtZkEtRl17NDB9JC8sZ209R3QoMjcsIj0iKSx2bT1RdCgyNyksYm09L15bMC05YS1mQS1GXXs2NH0kLyx5bT1HdCg0MywiPSIpLF9tPVF0KDQzKSxrbT0vXlswLTlhLWZBLUZdezk2fSQvLHdtPUd0KDY0LCIiKSwkbT1RdCg2NCksU209L15bMC05YS1mQS1GXXsxMjh9JC8sem09R3QoODYsIj09IiksVG09UXQoODYpLE5vPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhbnlTdHJpbmc6JGwsYmFzZTY0OnVtLGJhc2U2NHVybDpsbSxiaWdpbnQ6emwsYm9vbGVhbjpJbCxicm93c2VyRW1haWw6YW0sY2lkcnY0OmhsLGNpZHJ2NjpmbCxjcmVkaXRDYXJkOk9zLGN1aWQ6WXUsY3VpZDI6WHUsY3VycmVuY3lDb2RlOmJsLGRhdGU6X2wsZGF0ZXRpbWU6d2wsZG9tYWluOmdsLGR1cmF0aW9uOnNsLGUxNjQ6dmwsZW1haWw6YWwsZW1vamk6dWwsZXh0ZW5kZWREdXJhdGlvbjplbSxndWlkOmlsLGhleDpPbCxob3N0bmFtZTptbCxodG1sNUVtYWlsOnJtLGh0dHBQcm90b2NvbDpFcyxpYmFuOkFzLGlkbkVtYWlsOmltLGludGVnZXI6VGwsaXB2NDpsbCxpcHY2OmRsLGtzdWlkOm5sLGxvd2VyY2FzZTpDbCxtYWM6cGwsbWQ1X2Jhc2U2NDpobSxtZDVfYmFzZTY0dXJsOmZtLG1kNV9oZXg6cG0sbmFub2lkOm9sLG5hbm9pZE9mTGVuZ3RoOnJsLG51bGw6UGwsbnVtYmVyOlpvLHJmYzUzMjJFbWFpbDpzbSxzaGExX2Jhc2U2NDpnbSxzaGExX2Jhc2U2NHVybDp2bSxzaGExX2hleDptbSxzaGEyNTZfYmFzZTY0OnltLHNoYTI1Nl9iYXNlNjR1cmw6X20sc2hhMjU2X2hleDpibSxzaGEzODRfYmFzZTY0OndtLHNoYTM4NF9iYXNlNjR1cmw6JG0sc2hhMzg0X2hleDprbSxzaGE1MTJfYmFzZTY0OnptLHNoYTUxMl9iYXNlNjR1cmw6VG0sc2hhNTEyX2hleDpTbSxzdHJpbmc6U2wsdGltZTprbCx1bGlkOmVsLHVuZGVmaW5lZDp4bCx1bmljb2RlRW1haWw6Y2wsdXBwZXJjYXNlOkVsLHV1aWQ6aXQsdXVpZDQ6dG0sdXVpZDY6bm0sdXVpZDc6b20seGlkOnRsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEo9cCgiJFpvZENoZWNrIiwoZSx0KT0+e3ZhciBuO2UuX3pvZD8/KGUuX3pvZD17fSksZS5fem9kLmRlZj10LChuPWUuX3pvZCkub25hdHRhY2g/PyhuLm9uYXR0YWNoPVtdKX0pLFJzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIWZzKHQpJiZ0LnNpemUhPT12b2lkIDB9LFpzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIWZzKHQpJiZ0Lmxlbmd0aCE9PXZvaWQgMH0sdW89e251bWJlcjoibnVtYmVyIixiaWdpbnQ6ImJpZ2ludCIsb2JqZWN0OiJkYXRlIn0sTnM9cCgiJFpvZENoZWNrTGVzc1RoYW4iLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj11b1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZTw9dC52YWx1ZTpvLnZhbHVlPHQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46dW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19iaWciLG1heGltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksanM9cCgiJFpvZENoZWNrR3JlYXRlclRoYW4iLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj11b1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZT49dC52YWx1ZTpvLnZhbHVlPnQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46dW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxBbD1wKCIkWm9kQ2hlY2tNdWx0aXBsZU9mIiwoZSx0KT0+e0ouaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aWYodHlwZW9mIG4udmFsdWUhPXR5cGVvZiB0LnZhbHVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay4iKTsodHlwZW9mIG4udmFsdWU9PSJiaWdpbnQiP3QudmFsdWUhPT1CaWdJbnQoMCkmJm4udmFsdWUldC52YWx1ZT09PUJpZ0ludCgwKTp3dShuLnZhbHVlLHQudmFsdWUpPT09MCl8fG4uaXNzdWVzLnB1c2goe29yaWdpbjp0eXBlb2Ygbi52YWx1ZSxjb2RlOiJub3RfbXVsdGlwbGVfb2YiLGRpdmlzb3I6dC52YWx1ZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFJsPXAoIiRab2RDaGVja051bWJlckZvcm1hdCIsKGUsdCk9PntKLmluaXQoZSx0KSx0LmZvcm1hdD10LmZvcm1hdHx8ImZsb2F0NjQiO2NvbnN0IG49dC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxvPW4/ImludCI6Im51bWJlciIsW3Isc109RXVbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1pPT57Y29uc3QgYT1pLnZhbHVlO2lmKG4pe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXtpLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDpvLGZvcm1hdDp0LmZvcm1hdCxjb2RlOiJpbnZhbGlkX3R5cGUiLGNvbnRpbnVlOiExLGlucHV0OmEsaW5zdDplfSk7cmV0dXJufWlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhKSl7YT4wP2kuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pOmkuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufX1hPHImJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpyLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxhPnMmJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19iaWciLG1heGltdW06cyxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksWmw9cCgiJFpvZENoZWNrQmlnSW50Rm9ybWF0IiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0W24sb109T3VbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1yPT57Y29uc3Qgcz1yLnZhbHVlO3M8biYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOm4saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLHM+byYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX2JpZyIsbWF4aW11bTpvLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxObD1wKCIkWm9kQ2hlY2tNYXhTaXplIiwoZSx0KT0+e3ZhciBuO0ouaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49UnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZTw9dC5tYXhpbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46em8ociksY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksamw9cCgiJFpvZENoZWNrTWluU2l6ZSIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVJzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU+PXQubWluaW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOnpvKHIpLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksTWw9cCgiJFpvZENoZWNrU2l6ZUVxdWFscyIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVJzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIuc2l6ZTtpZihzPT09dC5zaXplKXJldHVybjtjb25zdCBpPXM+dC5zaXplO28uaXNzdWVzLnB1c2goe29yaWdpbjp6byhyKSwuLi5pP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQuc2l6ZX06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0LnNpemV9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHFsPXAoIiRab2RDaGVja01heExlbmd0aCIsKGUsdCk9Pnt2YXIgbjtKLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPVpzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+dC5tYXhpbXVtP1RvKHIpOnMpPD10Lm1heGltdW0pcmV0dXJuO2NvbnN0IGE9SW8ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksRGw9cCgiJFpvZENoZWNrTWluTGVuZ3RoIiwoZSx0KT0+e3ZhciBuO0ouaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49WnMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5taW5pbXVtJiZzPHQubWluaW11bSoyP1RvKHIpOnMpPj10Lm1pbmltdW0pcmV0dXJuO2NvbnN0IGE9SW8ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxMbD1wKCIkWm9kQ2hlY2tMZW5ndGhFcXVhbHMiLChlLHQpPT57dmFyIG47Si5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1acyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aCxpPXR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5sZW5ndGgmJnM8PXQubGVuZ3RoKjI/VG8ocik6cztpZihpPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9SW8ociksbD1pPnQubGVuZ3RoO28uaXNzdWVzLnB1c2goe29yaWdpbjphLC4uLmw/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5sZW5ndGh9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5sZW5ndGh9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFl0PXAoIiRab2RDaGVja1N0cmluZ0Zvcm1hdCIsKGUsdCk9Pnt2YXIgbixvO0ouaW5pdChlLHQpLHQucGF0dGVybj8obj1lLl96b2QpLmNoZWNrPz8obi5jaGVjaz1yPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChyLnZhbHVlKSYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQsaW5wdXQ6ci52YWx1ZSwuLi50LnBhdHRlcm4/e3BhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCl9Ont9LGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfSk6KG89ZS5fem9kKS5jaGVjaz8/KG8uY2hlY2s9KCk9Pnt9KX0pLFVsPXAoIiRab2RDaGVja1JlZ2V4IiwoZSx0KT0+e1l0LmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qobi52YWx1ZSkmJm4uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsaW5wdXQ6bi52YWx1ZSxwYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEhsPXAoIiRab2RDaGVja0xvd2VyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49Q2wpLFl0LmluaXQoZSx0KX0pLEZsPXAoIiRab2RDaGVja1VwcGVyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RWwpLFl0LmluaXQoZSx0KX0pLEJsPXAoIiRab2RDaGVja0luY2x1ZGVzIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49SWUodC5pbmNsdWRlcyksbz1uZXcgUmVnRXhwKHR5cGVvZiB0LnBvc2l0aW9uPT0ibnVtYmVyIj9gXi57JHt0LnBvc2l0aW9ufSx9JHtufWA6bik7dC5wYXR0ZXJuPW8sZS5fem9kLmNoZWNrPXI9PntyLnZhbHVlLmluY2x1ZGVzKHQuaW5jbHVkZXMsdC5wb3NpdGlvbil8fHIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsaW5jbHVkZXM6dC5pbmNsdWRlcyxpbnB1dDpyLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFZsPXAoIiRab2RDaGVja1N0YXJ0c1dpdGgiLChlLHQpPT57Si5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGBeJHtJZSh0LnByZWZpeCl9LipgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLnN0YXJ0c1dpdGgodC5wcmVmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLHByZWZpeDp0LnByZWZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEpsPXAoIiRab2RDaGVja0VuZHNXaXRoIiwoZSx0KT0+e0ouaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgLioke0llKHQuc3VmZml4KX0kYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5lbmRzV2l0aCh0LnN1ZmZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLHN1ZmZpeDp0LnN1ZmZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGxvKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ubWUobixlLmlzc3VlcykpfWNvbnN0IEtsPXAoIiRab2RDaGVja1Byb3BlcnR5IiwoZSx0KT0+e0ouaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz10LnNjaGVtYS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZVt0LnByb3BlcnR5XSxpc3N1ZXM6W119LHt9KTtpZihvIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gby50aGVuKHI9PmxvKHIsbix0LnByb3BlcnR5KSk7bG8obyxuLHQucHJvcGVydHkpfX0pLFdsPXAoIiRab2RDaGVja1Byb3BlcnRpZXMiLChlLHQpPT57Si5pbml0KGUsdCksUG8oZSxTeW1ib2wuaXRlcmF0b3IsZnVuY3Rpb24qKCl7eWllbGQgZX0pO2xldCBuO2UuX3pvZC5jaGVjaz1vPT57aWYoby52YWx1ZT09bnVsbCl7by5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpvLnZhbHVlLGluc3Q6ZX0pO3JldHVybn1uPz8obj1SZWZsZWN0Lm93bktleXModC5zaGFwZSkubWFwKGk9PltpLHQuc2hhcGVbaV1dKSk7Y29uc3Qgcj1vLnZhbHVlO2xldCBzO2Zvcihjb25zdFtpLGFdb2Ygbil7Y29uc3QgbD1hLl96b2QucnVuKHt2YWx1ZTpyW2ldLGlzc3VlczpbXX0se30pO2wgaW5zdGFuY2VvZiBQcm9taXNlPyhzPz8ocz1bXSkscy5wdXNoKGwudGhlbih1PT5sbyh1LG8saSkpKSk6bG8obCxvLGkpfWlmKHMpcmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4oKCk9Pnt9KX19KSxHbD1wKCIkWm9kQ2hlY2tNaW1lVHlwZSIsKGUsdCk9PntKLmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC5taW1lKTtlLl96b2QuY2hlY2s9bz0+e24uaGFzKG8udmFsdWUudHlwZSl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0Lm1pbWUsaW5wdXQ6by52YWx1ZS50eXBlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFFsPXAoIiRab2RDaGVja092ZXJ3cml0ZSIsKGUsdCk9PntKLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e24udmFsdWU9dC50eChuLnZhbHVlKX19KTtjbGFzcyBZbHtjb25zdHJ1Y3Rvcih0PVtdLG49e30pe3RoaXMuY29udGVudD1bXSx0aGlzLmluZGVudD0wLHRoaXMuYXJncz10LHRoaXMuY2xvc2VkPW59aW5kZW50ZWQodCl7dGhpcy5pbmRlbnQrPTE7dHJ5e3QodGhpcyl9ZmluYWxseXt0aGlzLmluZGVudC09MX19d3JpdGUodCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpe3QodGhpcyx7ZXhlY3V0aW9uOiJzeW5jIn0pLHQodGhpcyx7ZXhlY3V0aW9uOiJhc3luYyJ9KTtyZXR1cm59Y29uc3Qgbz10LnNwbGl0KGAKYCkuZmlsdGVyKGk9PmkpLHI9TWF0aC5taW4oLi4uby5tYXAoaT0+aS5sZW5ndGgtaS50cmltU3RhcnQoKS5sZW5ndGgpKSxzPW8ubWFwKGk9Pmkuc2xpY2UocikpLm1hcChpPT4iICIucmVwZWF0KHRoaXMuaW5kZW50KjIpK2kpO2Zvcihjb25zdCBpIG9mIHMpdGhpcy5jb250ZW50LnB1c2goaSl9Y29tcGlsZSgpe2NvbnN0IHQ9RnVuY3Rpb24sbj10aGlzPy5jb250ZW50Pz9bIiJdO3JldHVybiBuZXcgdCguLi5PYmplY3Qua2V5cyh0aGlzLmNsb3NlZCksYHJldHVybiBmdW5jdGlvbiAoJHt0aGlzLmFyZ3Muam9pbigiLCAiKX0pIHsKJHtuLmpvaW4oYApgKX0KfTtgKSguLi5PYmplY3QudmFsdWVzKHRoaXMuY2xvc2VkKSl9fWNvbnN0IFhsPXttYWpvcjo0LG1pbm9yOjYscGF0Y2g6NX0sST1wKCIkWm9kVHlwZSIsKGUsdCk9Pnt2YXIgbjtlPz8oZT17fSksZS5fem9kLmRlZj10LGUuX3pvZC5iYWc9ZS5fem9kLmJhZ3x8e30sZS5fem9kLnZlcnNpb249WGw7Y29uc3Qgbz1lLl96b2QuZGVmLmNoZWNrcyxyPWUuX3pvZC50cmFpdHMuaGFzKCIkWm9kQ2hlY2siKT9bZSwuLi5vPz9bXV06bz8ubGVuZ3RoP1suLi5vXTpbXTtmb3IoY29uc3QgcyBvZiByKWZvcihjb25zdCBpIG9mIHMuX3pvZC5vbmF0dGFjaClpKGUpO2lmKHIubGVuZ3RoPT09MCkobj1lLl96b2QpLmRlZmVycmVkPz8obi5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkPy5wdXNoKCgpPT57ZS5fem9kLnJ1bj1lLl96b2QucGFyc2V9KTtlbHNle2NvbnN0IHM9KGEsbCx1KT0+e2lmKGEubWVtbylyZXR1cm4gYTtsZXQgZD1jZShhKSxtO2Zvcihjb25zdCB2IG9mIGwpe2lmKHYuX3pvZC5kZWYud2hlbil7aWYoRHUoYSl8fCF2Ll96b2QuZGVmLndoZW4oYSkpY29udGludWV9ZWxzZSBpZihkKWNvbnRpbnVlO2NvbnN0IGI9YS5pc3N1ZXMubGVuZ3RoLF89di5fem9kLmNoZWNrKGEpO2lmKF8gaW5zdGFuY2VvZiBQcm9taXNlJiZ1Py5hc3luYz09PSExKXRocm93IG5ldyBaZTtpZihtfHxfIGluc3RhbmNlb2YgUHJvbWlzZSltPShtPz9Qcm9taXNlLnJlc29sdmUoKSkudGhlbihhc3luYygpPT57YXdhaXQgXyxhLmlzc3Vlcy5sZW5ndGghPT1iJiYoWHIoYS5pc3N1ZXMsYixlKSxkfHwoZD1jZShhLGIpKSl9KTtlbHNle2lmKGEuaXNzdWVzLmxlbmd0aD09PWIpY29udGludWU7WHIoYS5pc3N1ZXMsYixlKSxkfHwoZD1jZShhLGIpKX19cmV0dXJuIG0/bS50aGVuKCgpPT5hKTphfSxpPShhLGwsdSk9PntpZihjZShhKSlyZXR1cm4gYS5hYm9ydGVkPSEwLGE7Y29uc3QgZD1zKGwscix1KTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYodS5hc3luYz09PSExKXRocm93IG5ldyBaZTtyZXR1cm4gZC50aGVuKG09PmUuX3pvZC5wYXJzZShtLHUpKX1yZXR1cm4gZS5fem9kLnBhcnNlKGQsdSl9O2UuX3pvZC5ydW49KGEsbCk9PntpZihsLnNraXBDaGVja3MpcmV0dXJuIGUuX3pvZC5wYXJzZShhLGwpO2lmKGwuZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3QgZD1lLl96b2QucGFyc2Uoe3ZhbHVlOmEudmFsdWUsaXNzdWVzOltdfSx7Li4ubCxza2lwQ2hlY2tzOiEwfSk7cmV0dXJuIGQgaW5zdGFuY2VvZiBQcm9taXNlP2QudGhlbihtPT5pKG0sYSxsKSk6aShkLGEsbCl9Y29uc3QgdT1lLl96b2QucGFyc2UoYSxsKTtpZih1IGluc3RhbmNlb2YgUHJvbWlzZSl7aWYobC5hc3luYz09PSExKXRocm93IG5ldyBaZTtyZXR1cm4gdS50aGVuKGQ9PnMoZCxyLGwpKX1yZXR1cm4gcyh1LHIsbCl9fX0se2dldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIFBvKHRoaXMsIn5zdGFuZGFyZCIsTXModGhpcykpfSxzZXQifnN0YW5kYXJkIihlKXtQZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfX0pLGVkPShlLHQpPT5lLmlzc3Vlcy5sZW5ndGg/e2lzc3VlczplLmlzc3Vlcy5tYXAobj0+YmUobix0LEcoKSkpfTp7dmFsdWU6ZS52YWx1ZX07YXN5bmMgZnVuY3Rpb24gSW0oZSx0KXtjb25zdCBuPXthc3luYzohMH07cmV0dXJuIGVkKGF3YWl0IGUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKSxuKX1mdW5jdGlvbiBNcyhlKXtyZXR1cm57dmFsaWRhdGU6dD0+e2NvbnN0IG49e2FzeW5jOiExfTt0cnl7Y29uc3Qgbz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbik7aWYoIShvIGluc3RhbmNlb2YgUHJvbWlzZSkpcmV0dXJuIGVkKG8sbil9Y2F0Y2h7fXJldHVybiBJbShlLHQpfSx2ZW5kb3I6InpvZCIsdmVyc2lvbjoxfX1jb25zdCBYdD1wKCIkWm9kU3RyaW5nIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXQucGF0dGVybj8/JGwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9U3RyaW5nKG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJzdHJpbmcifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxIPXAoIiRab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57WXQuaW5pdChlLHQpLFh0LmluaXQoZSx0KX0pLHRkPXAoIiRab2RHVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1pbCksSC5pbml0KGUsdCl9KSxuZD1wKCIkWm9kVVVJRCIsKGUsdCk9PntpZih0LnZlcnNpb24pe2NvbnN0IG89e3YxOjEsdjI6Mix2MzozLHY0OjQsdjU6NSx2Njo2LHY3Ojcsdjg6OH1bdC52ZXJzaW9uXTtpZihvPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246ICIke3QudmVyc2lvbn0iYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWl0KG8pKX1lbHNlIHQucGF0dGVybj8/KHQucGF0dGVybj1pdCgpKTtILmluaXQoZSx0KX0pLG9kPXAoIiRab2RFbWFpbCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YWwpLEguaW5pdChlLHQpfSkscXM9MSxNdD0yO2Z1bmN0aW9uIERzKGUpe3RyeXtyZXR1cm4gdHlwZW9mIFVSTDwidSImJnR5cGVvZiBVUkwuY2FuUGFyc2U9PSJmdW5jdGlvbiI/VVJMLmNhblBhcnNlKGUpOihuZXcgVVJMKGUpLCEwKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gcmQoZSx0KXtyZXR1cm4hKCJub3JtYWxpemUiaW4gdCkmJiEoImhvc3RuYW1lImluIHQpJiYhKCJwcm90b2NvbCJpbiB0KT9EcyhlKXx8TXQ6c2QoZSx0KX1mdW5jdGlvbiBzZChlLHQpe2lmKCF0Lm5vcm1hbGl6ZSYmdC5wcm90b2NvbD8uc291cmNlPT09RXMuc291cmNlJiYhL15odHRwcz86XC9cLy9pLnRlc3QoZSkpcmV0dXJuIHFzO3RyeXtpZih0eXBlb2YgVVJMPCJ1Iil7Y29uc3Qgbj1VUkw7aWYodHlwZW9mIG4ucGFyc2U9PSJmdW5jdGlvbiIpcmV0dXJuIG4ucGFyc2UoZSk/P010fXJldHVybiBuZXcgVVJMKGUpfWNhdGNoe3JldHVybiBNdH19Y29uc3QgUG09L1tcdFxuXHJdL2c7ZnVuY3Rpb24gb3MoZSl7cmV0dXJuIGUucmVwbGFjZShQbSwiIil9ZnVuY3Rpb24gaWQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5ob3N0bmFtZSl9ZnVuY3Rpb24gYWQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5wcm90b2NvbC5lbmRzV2l0aCgiOiIpP2UucHJvdG9jb2wuc2xpY2UoMCwtMSk6ZS5wcm90b2NvbCl9Y29uc3QgY2Q9cCgiJFpvZFVSTCIsKGUsdCk9PntILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3RyeXtjb25zdCBvPW4udmFsdWUudHJpbSgpLHI9cmQobyx0KTtpZihyPT09cXMpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBVUkwgZm9ybWF0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09TXQpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59aWYocj09PSEwKXtuLnZhbHVlPW9zKG8pO3JldHVybn10Lmhvc3RuYW1lJiYhaWQocix0Lmhvc3RuYW1lKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIGhvc3RuYW1lIixwYXR0ZXJuOnQuaG9zdG5hbWUuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksdC5wcm90b2NvbCYmIWFkKHIsdC5wcm90b2NvbCkmJm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBwcm90b2NvbCIscGF0dGVybjp0LnByb3RvY29sLnNvdXJjZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLG4udmFsdWU9dC5ub3JtYWxpemU/ci5ocmVmOm9zKG8pO3JldHVybn1jYXRjaHtuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fX0pLHVkPXAoIiRab2RFbW9qaSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dWwoKSksSC5pbml0KGUsdCl9KSxsZD1wKCIkWm9kTmFub0lEIiwoZSx0KT0+e2lmKHQubGVuZ3RoIT09dm9pZCAwJiYoIU51bWJlci5pc0ludGVnZXIodC5sZW5ndGgpfHx0Lmxlbmd0aDwxKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFub2lkIGxlbmd0aDogJHt0Lmxlbmd0aH1gKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dC5sZW5ndGg9PT12b2lkIDA/b2w6cmwodC5sZW5ndGgpKSxILmluaXQoZSx0KX0pLGRkPXAoIiRab2RDVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1ZdSksSC5pbml0KGUsdCl9KSxwZD1wKCIkWm9kQ1VJRDIiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVh1KSxILmluaXQoZSx0KX0pLGhkPXAoIiRab2RVTElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1lbCksSC5pbml0KGUsdCl9KSxmZD1wKCIkWm9kWElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj10bCksSC5pbml0KGUsdCl9KSxtZD1wKCIkWm9kS1NVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW5sKSxILmluaXQoZSx0KX0pLGdkPXAoIiRab2RJU09EYXRlVGltZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49d2wodCkpLEguaW5pdChlLHQpfSksdmQ9cCgiJFpvZElTT0RhdGUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPV9sKSxILmluaXQoZSx0KX0pLGJkPXAoIiRab2RJU09UaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1rbCh0KSksSC5pbml0KGUsdCl9KSx5ZD1wKCIkWm9kSVNPRHVyYXRpb24iLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXNsKSxILmluaXQoZSx0KX0pLF9kPXAoIiRab2RJUHY0IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1sbCksSC5pbml0KGUsdCl9KSx4bT0vXlswLTlhLWZBLUY6Ll0rJC87ZnVuY3Rpb24gTHMoZSl7cmV0dXJuIHhtLnRlc3QoZSk/RHMoYGh0dHA6Ly9bJHtlfV1gKTohMX1jb25zdCBrZD1wKCIkWm9kSVB2NiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49ZGwpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57THMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImlwdjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksd2Q9cCgiJFpvZE1BQyIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49cGwodC5kZWxpbWl0ZXIpKSxILmluaXQoZSx0KX0pLCRkPXAoIiRab2RDSURSdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWhsKSxILmluaXQoZSx0KX0pO2Z1bmN0aW9uIFNkKGUpe2NvbnN0IHQ9ZS5zcGxpdCgiLyIpO2lmKHQubGVuZ3RoIT09MilyZXR1cm4hMTtjb25zdFtuLG9dPXQ7aWYoIW8pcmV0dXJuITE7Y29uc3Qgcj1OdW1iZXIobyk7cmV0dXJuYCR7cn1gIT09b3x8cjwwfHxyPjEyOD8hMTpMcyhuKX1jb25zdCB6ZD1wKCIkWm9kQ0lEUnY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1mbCksSC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntTZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiY2lkcnY2IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIFVzKGUpe2lmKGU9PT0iIilyZXR1cm4hMDtpZigvXHMvLnRlc3QoZSl8fGUubGVuZ3RoJTQhPT0wKXJldHVybiExO3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19Y29uc3QgVGQ9L15bMC05YS16QS1aKy9dKj17MCwyfSQvLElkPXAoIiRab2RCYXNlNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVRkKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1VzKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksSHM9L15bQS1aYS16MC05Xy1dKiQvO2Z1bmN0aW9uIFBkKGUpe2lmKCFIcy50ZXN0KGUpKXJldHVybiExO2NvbnN0IHQ9ZS5yZXBsYWNlKC9bLV9dL2csbz0+bz09PSItIj8iKyI6Ii8iKSxuPXQucGFkRW5kKE1hdGguY2VpbCh0Lmxlbmd0aC80KSo0LCI9Iik7cmV0dXJuIFVzKG4pfWNvbnN0IHhkPXAoIiRab2RCYXNlNjRVUkwiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUhzKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1BkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjR1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksQ2Q9cCgiJFpvZEUxNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXZsKSxILmluaXQoZSx0KX0pLENtPS9bLSBdL2c7ZnVuY3Rpb24gRW0oZSl7bGV0IHQ9ZS5sZW5ndGgsbj0xLG89MDtmb3IoO3Q7KXtjb25zdCByPWUuY2hhckNvZGVBdCgtLXQpLTQ4O25ePTEsbys9bj9bMCwyLDQsNiw4LDEsMyw1LDcsOV1bcl06cn1yZXR1cm4gbyUxMD09PTB9ZnVuY3Rpb24gRWQoZSl7cmV0dXJuIE9zLnRlc3QoZSk/RW0oZS5yZXBsYWNlKENtLCIiKSk6ITF9Y29uc3QgT2Q9cCgiJFpvZENyZWRpdENhcmQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU9zKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e0VkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBPbShlKXtsZXQgdD0wO2NvbnN0IG49ZS5sZW5ndGg7Zm9yKGxldCBvPTQ7bzxuO28rKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobyk7dD0ocj49NjU/dCoxMDArKHItNTUpOnQqMTArKHItNDgpKSU5N31mb3IobGV0IG89MDtvPDQ7bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fXJldHVybiB0PT09MX1mdW5jdGlvbiBBZChlKXtyZXR1cm4gQXMudGVzdChlKT9PbShlKTohMX1jb25zdCBSZD1wKCIkWm9kSUJBTiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49QXMpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57QWQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImliYW4iLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gWmQoZSx0PW51bGwpe3RyeXtjb25zdCBuPWUuc3BsaXQoIi4iKTtpZihuLmxlbmd0aCE9PTMpcmV0dXJuITE7Y29uc3Rbb109bjtpZighbylyZXR1cm4hMTtjb25zdCByPUpTT04ucGFyc2UoYXRvYihvKSk7cmV0dXJuISgidHlwImluIHImJnI/LnR5cCE9PSJKV1QifHwhci5hbGd8fHQmJighKCJhbGciaW4gcil8fHIuYWxnIT09dCkpfWNhdGNoe3JldHVybiExfX1jb25zdCBOZD1wKCIkWm9kSldUIiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57WmQobi52YWx1ZSx0LmFsZyl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6Imp3dCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxqZD1wKCIkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0IiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5mbihuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEZzPXAoIiRab2ROdW1iZXIiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49Wm8sZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9TnVtYmVyKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWU7aWYodHlwZW9mIHI9PSJudW1iZXIiJiYhTnVtYmVyLmlzTmFOKHIpJiZOdW1iZXIuaXNGaW5pdGUocikpcmV0dXJuIG47Y29uc3Qgcz10eXBlb2Ygcj09Im51bWJlciI/TnVtYmVyLmlzTmFOKHIpPyJOYU4iOk51bWJlci5pc0Zpbml0ZShyKT92b2lkIDA6U3RyaW5nKHIpOnZvaWQgMDtyZXR1cm4gbi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im51bWJlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZSwuLi5zP3tyZWNlaXZlZDpzfTp7fX0pLG59fSksTWQ9cCgiJFpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntSbC5pbml0KGUsdCksRnMuaW5pdChlLHQpfSksQnM9cCgiJFpvZEJvb2xlYW4iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49SWwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9ISFuLnZhbHVlfWNhdGNoe31jb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0iYm9vbGVhbiJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJib29sZWFuIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxWcz1wKCIkWm9kQmlnSW50IiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXpsLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPUJpZ0ludChuLnZhbHVlKX1jYXRjaHt9cmV0dXJuIHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJpZ2ludCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG59fSkscWQ9cCgiJFpvZEJpZ0ludEZvcm1hdCIsKGUsdCk9PntabC5pbml0KGUsdCksVnMuaW5pdChlLHQpfSksRGQ9cCgiJFpvZFN5bWJvbCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0ic3ltYm9sInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InN5bWJvbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksTGQ9cCgiJFpvZFVuZGVmaW5lZCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj14bCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW3ZvaWQgMF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI+InUifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoidW5kZWZpbmVkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxVZD1wKCIkWm9kTnVsbCIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1QbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW251bGxdKSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHI9PT1udWxsfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVsbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksSGQ9cCgiJFpvZEFueSIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9bj0+bn0pLEZkPXAoIiRab2RVbmtub3duIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksQmQ9cCgiJFpvZE5ldmVyIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJuZXZlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pfSksVmQ9cCgiJFpvZFZvaWQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ2b2lkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxKZD1wKCIkWm9kRGF0ZSIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1uZXcgRGF0ZShuLnZhbHVlKX1jYXRjaHt9Y29uc3Qgcj1uLnZhbHVlLHM9ciBpbnN0YW5jZW9mIERhdGU7cmV0dXJuIHMmJiFOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZGF0ZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLC4uLnM/e3JlY2VpdmVkOiJJbnZhbGlkIERhdGUifTp7fSxpbnN0OmV9KSxufX0pO2Z1bmN0aW9uIGpjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4ubWUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1jb25zdCBLZD1wKCIkWm9kQXJyYXkiLChlLHQpPT57SS5pbml0KGUsdCk7Y29uc3Qgbj1pZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYXJyYXkiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO28udmFsdWU9bj9uLmFsbG9jKGUsbyxBcnJheShzLmxlbmd0aCkscik6QXJyYXkocy5sZW5ndGgpO2NvbnN0IGk9W10sYT1yPy5hYm9ydEVhcmx5O2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtjb25zdCB1PXNbbF0sZD10LmVsZW1lbnQuX3pvZC5ydW4oe3ZhbHVlOnUsaXNzdWVzOltdfSxyKTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2goZC50aGVuKG09PmpjKG0sbyxsKSkpO2Vsc2UgaWYoamMoZCxvLGwpLGEmJmQuaXNzdWVzLmxlbmd0aCE9PTAmJmNlKGQpKWJyZWFrfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIHBvKGUsdCxuLG8scixzKXtjb25zdCBpPW4gaW4gbyxhPXM9PT0ib3B0aW9uYWwiO2lmKCEoIWkmJmEmJnI9PT0ib3B0aW9uYWwiKSl7aWYoZS5pc3N1ZXMubGVuZ3RoKXtpZihyIT09dm9pZCAwJiZhJiYhaSlyZXR1cm47dC5pc3N1ZXMucHVzaCguLi5tZShuLGUuaXNzdWVzKSl9aWYoIWkmJnI9PT12b2lkIDApe2UuaXNzdWVzLmxlbmd0aHx8dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OnZvaWQgMCxwYXRoOltuXX0pO3JldHVybn1lLnZhbHVlPT09dm9pZCAwPyhpfHxyPT09ImRlZmF1bHRlZCImJiFhKSYmKHQudmFsdWVbbl09dm9pZCAwKTp0LnZhbHVlW25dPWUudmFsdWV9fWNvbnN0IEFtPVtdO2Z1bmN0aW9uIFdkKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5zaGFwZSksbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUuc2hhcGUpLG89bi5sZW5ndGg/bjpBbSxyPW8ubGVuZ3RoP1suLi50LC4uLm9dOnQ7Zm9yKGNvbnN0IGkgb2YgcilpZighZS5zaGFwZT8uW2ldPy5fem9kPy50cmFpdHM/LmhhcygiJFpvZFR5cGUiKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCBhdCBrZXkgIiR7U3RyaW5nKGkpfSI6IGV4cGVjdGVkIGEgWm9kIHNjaGVtYWApO2NvbnN0IHM9Q3UoZS5zaGFwZSk7cmV0dXJuey4uLmUsYWxsS2V5czpyLHN5bWJvbEtleXM6byxrZXlTZXQ6bmV3IFNldCh0KSxudW1LZXlzOnQubGVuZ3RoLG9wdGlvbmFsS2V5czpuZXcgU2V0KHMpfX1mdW5jdGlvbiBHZChlLHQsbixvLHIscyxpKXtjb25zdCBhPVtdLGw9ci5rZXlTZXQsdT1yLmNhdGNoYWxsLl96b2QsZD11LmRlZi50eXBlLG09dS5vcHRpbix2PXUub3B0b3V0O2xldCBiPTA7Zm9yKGNvbnN0IF8gaW4gdCl7aWYoaSYmbi5pc3N1ZXMubGVuZ3RoIT09Yil7aWYoY2UobixiKSlicmVhaztiPW4uaXNzdWVzLmxlbmd0aH1pZihsLmhhcyhfKSljb250aW51ZTtpZihfPT09Il9fcHJvdG9fXyIpe2Q9PT0ibmV2ZXIiJiZhLnB1c2goXyk7Y29udGludWV9aWYoZD09PSJuZXZlciIpe2EucHVzaChfKTtjb250aW51ZX1jb25zdCBrPXUucnVuKHt2YWx1ZTp0W19dLGlzc3VlczpbXX0sbyk7ayBpbnN0YW5jZW9mIFByb21pc2U/ZS5wdXNoKGsudGhlbih3PT5wbyh3LG4sXyx0LG0sdikpKTpwbyhrLG4sXyx0LG0sdil9cmV0dXJuIGEubGVuZ3RoJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czphLGlucHV0OnQsaW5zdDpzLGNvbnRpbnVlOiEwfSksZS5sZW5ndGg/UHJvbWlzZS5hbGwoZSkudGhlbigoKT0+bik6bn1jb25zdCBRZD1wKCIkWm9kT2JqZWN0IiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCJzaGFwZSIpLG89bj8uZ2V0P24uZ2V0LnJhdzp0LnNoYXBlPz97fTtpZihvKXtjb25zdCB1PSgpPT57Y29uc3QgZD17Li4ub307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFwZSIse3ZhbHVlOmR9KSx1LnJhdz1kLGR9O3UucmF3PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7Z2V0OnV9KX1jb25zdCByPUZ0KCgpPT5XZCh0KSk7RShlLCJwcm9wVmFsdWVzIix1PT57Y29uc3QgZD11LmRlZi5zaGFwZSxtPXt9O2Zvcihjb25zdCB2IGluIGQpe2NvbnN0IGI9ZFt2XS5fem9kO2lmKGIudmFsdWVzKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSx2KXx8V2UobSx2LG5ldyBTZXQpO2Zvcihjb25zdCBfIG9mIGIudmFsdWVzKW1bdl0uYWRkKF8pO2Iub3B0aW4hPT12b2lkIDAmJm1bdl0uYWRkKHZvaWQgMCl9fXJldHVybiBtfSk7Y29uc3Qgcz1ydCxpPXQuY2F0Y2hhbGw7bGV0IGE7Y29uc3QgbD1pZS5tZW1vaXplcjtsPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPSh1LGQpPT57YT8/KGE9ci52YWx1ZSk7Y29uc3QgbT11LnZhbHVlO2lmKCFzKG0pKXJldHVybiB1Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om0saW5zdDplfSksdTt1LnZhbHVlPWw/bC5hbGxvYyhlLHUse30sZCk6e307Y29uc3Qgdj1bXSxiPWEuc2hhcGUsXz1kPy5hYm9ydEVhcmx5O2xldCBrPXUuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgdyBvZiBhLmFsbEtleXMpe2lmKF8mJnUuaXNzdWVzLmxlbmd0aCE9PWspe2lmKGNlKHUsaykpYnJlYWs7az11Lmlzc3Vlcy5sZW5ndGh9aWYodz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IFI9Ylt3XSxPPVIuX3pvZC5vcHRpbiwkPVIuX3pvZC5vcHRvdXQsej1SLl96b2QucnVuKHt2YWx1ZTptW3ddLGlzc3VlczpbXX0sZCk7eiBpbnN0YW5jZW9mIFByb21pc2U/di5wdXNoKHoudGhlbihNPT5wbyhNLHUsdyxtLE8sJCkpKTpwbyh6LHUsdyxtLE8sJCl9cmV0dXJuIGk/R2QodixtLHUsZCxyLnZhbHVlLGUsXz09PSEwKTp2Lmxlbmd0aD9Qcm9taXNlLmFsbCh2KS50aGVuKCgpPT51KTp1fX0pLFlkPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57UWQuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89RnQoKCk9PldkKHQpKSxyPWllLm1lbW9pemVyLHM9Yj0+e2NvbnN0IF89by52YWx1ZSxrPV8uc3ltYm9sS2V5cyx3PW5ldyBZbChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6YixpbnN0OmUsbWVtbzpyLHN5bXM6a30pLFI9TT0+YHNoYXBlWyR7TX1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7TX1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLE89KE0scSk9PmAKICAgICAgICAgIGxldCAke019X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7TX0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7TX0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7cX0sIC4uLmlzcy5wYXRoXSA6IFske3F9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke019X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke019X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gO3cud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCAkPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHo9MDtmb3IoY29uc3QgTSBvZiBfLmFsbEtleXMpJFtNXT1ga2V5XyR7eisrfWA7dy53cml0ZShyPyJjb25zdCBuZXdSZXN1bHQgPSBtZW1vLmFsbG9jKGluc3QsIHBheWxvYWQsIHt9LCBjdHgpOyI6ImNvbnN0IG5ld1Jlc3VsdCA9IHt9OyIpO2Zvcihjb25zdCBNIG9mIF8uYWxsS2V5cyl7aWYoTT09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IHE9JFtNXSxhZT10eXBlb2YgTT09InN5bWJvbCI/YHN5bXNbJHtrLmluZGV4T2YoTSl9XWA6VHUoTSksWWU9YCR7YWV9IGluIGlucHV0YCxRbj1iW01dLEhyPVFuPy5fem9kPy5vcHRpbixFYz1IciE9PXZvaWQgMCxhZj1Rbj8uX3pvZD8ub3B0b3V0PT09Im9wdGlvbmFsIjtpZih3LndyaXRlKGBjb25zdCAke3F9ID0gJHtSKGFlKX07YCksRWMmJmFmKXtjb25zdCBjZj1Icj09PSJvcHRpb25hbCI/YCR7cX1fcHJlc2VudGA6YCR7cX0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke3F9X3ByZXNlbnRgO3cud3JpdGUoYAogICAgICAgIGNvbnN0ICR7cX1fcHJlc2VudCA9ICR7WWV9OwogICAgICAgIGlmICghJHtxfS5pc3N1ZXMubGVuZ3RoIHx8ICR7cX1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7cX0uaXNzdWVzLmxlbmd0aCkgeyR7TyhxLGFlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHtjZn0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7YWV9XSA9ICR7cX0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSBFYz8ody53cml0ZShgCiAgICAgICAgaWYgKCR7cX0uaXNzdWVzLmxlbmd0aCkgeyR7TyhxLGFlKX0KICAgICAgICB9CiAgICAgIGApLEhyPT09ImRlZmF1bHRlZCI/dy53cml0ZShgbmV3UmVzdWx0WyR7YWV9XSA9ICR7cX0udmFsdWU7YCk6dy53cml0ZShgCiAgICAgICAgaWYgKCR7cX0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke1llfSkgewogICAgICAgICAgbmV3UmVzdWx0WyR7YWV9XSA9ICR7cX0udmFsdWU7CiAgICAgICAgfQogICAgICBgKSk6dy53cml0ZShgCiAgICAgICAgY29uc3QgJHtxfV9wcmVzZW50ID0gJHtZZX07CiAgICAgICAgaWYgKCR7cX0uaXNzdWVzLmxlbmd0aCkgeyR7TyhxLGFlKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke3F9X3ByZXNlbnQgJiYgISR7cX0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7YWV9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7cX1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7YWV9XSA9ICR7cX0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuIHcud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7Iiksdy53cml0ZSgicmV0dXJuIHBheWxvYWQ7Iiksdy5jb21waWxlKCl9O2xldCBpO2NvbnN0IGE9cnQsbD0haWUuaml0bGVzcyxkPWwmJlB1LnZhbHVlLG09dC5jYXRjaGFsbDtsZXQgdjtlLl96b2QucGFyc2U9KGIsXyk9Pnt2Pz8odj1vLnZhbHVlKTtjb25zdCBrPWIudmFsdWU7cmV0dXJuIGEoayk/bCYmZCYmXz8uYXN5bmM9PT0hMSYmXy5qaXRsZXNzIT09ITA/KGl8fChpPXModC5zaGFwZSkpLGI9aShiLF8pLG0/R2QoW10sayxiLF8sdixlLF8/LmFib3J0RWFybHk9PT0hMCk6Yik6bihiLF8pOihiLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OmssaW5zdDplfSksYil9fSk7ZnVuY3Rpb24gTWMoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiFjZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGk9PmJlKGksbyxHKCkpKSl9KSx0KX1jb25zdCBqbz1wKCIkWm9kVW5pb24iLChlLHQpPT57SS5pbml0KGUsdCksRShlLCJvcHRpbiIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiKT8iZGVmYXVsdGVkIjpvLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluIT09dm9pZCAwKT8ib3B0aW9uYWwiOnZvaWQgMCksRShlLCJvcHRvdXQiLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIik/Im9wdGlvbmFsIjp2b2lkIDApLEUoZSwidmFsdWVzIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QudmFsdWVzKSlyZXR1cm4gbmV3IFNldChvLmRlZi5vcHRpb25zLmZsYXRNYXAocj0+QXJyYXkuZnJvbShyLl96b2QudmFsdWVzKSkpfSksRShlLCJwYXR0ZXJuIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QucGF0dGVybikpe2NvbnN0IHI9by5kZWYub3B0aW9ucy5tYXAocz0+cy5fem9kLnBhdHRlcm4pO3JldHVybiBuZXcgUmVnRXhwKGBeKCR7ci5tYXAocz0+UmUocy5zb3VyY2UpKS5qb2luKCJ8Iil9KSRgKX19KTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgbD1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7aWYobCBpbnN0YW5jZW9mIFByb21pc2UpaS5wdXNoKGwpLHM9ITA7ZWxzZXtpZihsLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiBsO2kucHVzaChsKX19cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5NYyhhLG8sZSxyKSk6TWMoaSxvLGUscil9fSk7ZnVuY3Rpb24gcWMoZSx0LG4sbyl7Y29uc3Qgcj1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLmlzc3Vlcy5sZW5ndGg9PT0wJiZyLnB1c2gocyk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1lW3JbMF1dLnZhbHVlLHQpOihyLmxlbmd0aD09PTA/dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChpPT5iZShpLG8sRygpKSkpfSk6dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOltdLGluY2x1c2l2ZTohMSxtYXRjaGVzOnJ9KSx0KX1jb25zdCBYZD1wKCIkWm9kWG9yIiwoZSx0KT0+e2pvLmluaXQoZSx0KSx0LmluY2x1c2l2ZT0hMTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgbD1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7bCBpbnN0YW5jZW9mIFByb21pc2U/KGkucHVzaChsKSxzPSEwKTppLnB1c2gobCl9cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5xYyhhLG8sZSxyKSk6cWMoaSxvLGUscil9fSk7ZnVuY3Rpb24gSnMoZSx0KXtjb25zdCBuPWUuX3pvZDtsZXQgbz1uLmJhZy5vcHRpb25zTWFwO298fChvPWVwKG4uZGVmKSxuLmJhZy5vcHRpb25zTWFwPW8pO2NvbnN0IHI9by5nZXQodCk7aWYocj09PW51bGwpdGhyb3cgbmV3IEVycm9yKGBBbWJpZ3VvdXMgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcodCl9ImApO3JldHVybiByfWZ1bmN0aW9uIGVwKGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3QgbiBvZiBlLm9wdGlvbnMpe2NvbnN0IG89bi5fem9kLnByb3BWYWx1ZXM/LltlLmRpc2NyaW1pbmF0b3JdO2lmKCFvfHxvLnNpemU9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtlLm9wdGlvbnMuaW5kZXhPZihuKX0iYCk7Zm9yKGNvbnN0IHIgb2YgbylpZih0LmhhcyhyKSl7aWYociE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyhyKX0iYCk7dC5zZXQocixudWxsKX1lbHNlIHQuc2V0KHIsbil9cmV0dXJuIHR9Y29uc3QgdHA9cCgiJFpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9Pnt0LmluY2x1c2l2ZT0hMSxqby5pbml0KGUsdCk7Y29uc3Qgbj1lLl96b2QucGFyc2U7RShlLCJwcm9wVmFsdWVzIixyPT57Y29uc3Qgcz17fTtsZXQgaT0wO2Zvcihjb25zdCBhIG9mIHIuZGVmLm9wdGlvbnMpe2NvbnN0IGw9YS5fem9kLnByb3BWYWx1ZXM7aWYoIWx8fE9iamVjdC5rZXlzKGwpLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3IuZGVmLm9wdGlvbnMuaW5kZXhPZihhKX0iYCk7bFtyLmRlZi5kaXNjcmltaW5hdG9yXT8uaGFzKHZvaWQgMCkmJmkrKztmb3IoY29uc3RbdSxkXW9mIE9iamVjdC5lbnRyaWVzKGwpKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocyx1KXx8V2Uocyx1LG5ldyBTZXQpO2Zvcihjb25zdCBtIG9mIGQpc1t1XS5hZGQobSl9fXJldHVybiFyLmRlZi51bmlvbkZhbGxiYWNrJiZpPjEmJnNbci5kZWYuZGlzY3JpbWluYXRvcl0/LmRlbGV0ZSh2b2lkIDApLHN9KSx0Lm9wdGlvbnMuZm9yRWFjaCgocixzKT0+e2NvbnN0IGk9d28oci5fem9kLmRlZik7aWYoaSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHQuZGlzY3JpbWluYXRvcikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3N9ImApfSk7Y29uc3Qgbz1GdCgoKT0+ZXAodCkpO2UuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtpZighcnQoaSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im9iamVjdCIsaW5wdXQ6aSxpbnN0OmV9KSxyO2NvbnN0IGE9aT8uW3QuZGlzY3JpbWluYXRvcl0sbD1vLnZhbHVlLmdldChhKTtyZXR1cm4gbCYmKGEhPT12b2lkIDB8fHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIik/bC5fem9kLnJ1bihyLHMpOnQudW5pb25GYWxsYmFja3x8cy5kaXJlY3Rpb249PT0iYmFja3dhcmQiP24ocixzKTooci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsZXJyb3JzOltdLG5vdGU6Ik5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3IiLGRpc2NyaW1pbmF0b3I6dC5kaXNjcmltaW5hdG9yLG9wdGlvbnM6QXJyYXkuZnJvbShvLnZhbHVlLmtleXMoKSkuZmlsdGVyKHU9Pm8udmFsdWUuZ2V0KHUpIT09bnVsbCksaW5wdXQ6aSxwYXRoOlt0LmRpc2NyaW1pbmF0b3JdLGluc3Q6ZX0pLHIpfX0pLG5wPXAoIiRab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlLHM9dC5sZWZ0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyksaT10LnJpZ2h0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlfHxpIGluc3RhbmNlb2YgUHJvbWlzZT9Qcm9taXNlLmFsbChbcyxpXSkudGhlbigoW2wsdV0pPT5EYyhuLGwsdSkpOkRjKG4scyxpKX19KTtmdW5jdGlvbiBobyhlLHQpe2lmKGU9PT10KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZSYmK2U9PSt0KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKE5lKGUpJiZOZSh0KSl7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KSxvPU9iamVjdC5rZXlzKGUpLmZpbHRlcihzPT5uLmluZGV4T2YocykhPT0tMSkscj17Li4uZSwuLi50fTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwiX19wcm90b19fIikmJmRlbGV0ZSByLl9fcHJvdG9fXztmb3IoY29uc3QgcyBvZiBvKXtpZihzPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgaT1obyhlW3NdLHRbc10pO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbcywuLi5pLm1lcmdlRXJyb3JQYXRoXX07cltzXT1pLmRhdGF9cmV0dXJue3ZhbGlkOiEwLGRhdGE6cn19aWYoQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119O2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IHI9ZVtvXSxzPXRbb10saT1obyhyLHMpO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbbywuLi5pLm1lcmdlRXJyb3JQYXRoXX07bi5wdXNoKGkuZGF0YSl9cmV0dXJue3ZhbGlkOiEwLGRhdGE6bn19cmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfX1mdW5jdGlvbiBEYyhlLHQsbil7Y29uc3Qgbz1uZXcgTWFwO2xldCByO2NvbnN0IHM9bmV3IE1hcCxpPSh1LGQpPT57bGV0IG07aWYodS5jb2RlPT09InVucmVjb2duaXplZF9rZXlzIiYmIXUucGF0aD8ubGVuZ3RoKXI/PyhyPXUpLG09dS5rZXlzO2Vsc2UgaWYodS5jb2RlPT09ImludmFsaWRfa2V5IiYmdS5vcmlnaW49PT0icmVjb3JkIiYmdS5wYXRoPy5sZW5ndGg9PT0xKXtjb25zdCB2PVN0cmluZyh1LnBhdGhbMF0pO3MuaGFzKHYpfHxzLnNldCh2LHUpLG09W3ZdfWVsc2UgcmV0dXJuITE7Zm9yKGNvbnN0IHYgb2YgbSlvLmhhcyh2KXx8by5zZXQodix7fSksby5nZXQodilbZF09ITA7cmV0dXJuITB9O2Zvcihjb25zdCB1IG9mIHQuaXNzdWVzKWkodSwibCIpfHxlLmlzc3Vlcy5wdXNoKHUpO2Zvcihjb25zdCB1IG9mIG4uaXNzdWVzKWkodSwiciIpfHxlLmlzc3Vlcy5wdXNoKHUpO2NvbnN0IGE9Wy4uLm9dLmZpbHRlcigoWyx1XSk9PnUubCYmdS5yKS5tYXAoKFt1XSk9PnUpO2lmKGEubGVuZ3RoKXtjb25zdCB1PXI/YS5maWx0ZXIoZD0+ci5rZXlzLmluY2x1ZGVzKGQpKTpbXTt1Lmxlbmd0aCYmZS5pc3N1ZXMucHVzaCh7Li4ucixrZXlzOnV9KTtmb3IoY29uc3QgZCBvZiBhKSF1LmluY2x1ZGVzKGQpJiZzLmhhcyhkKSYmZS5pc3N1ZXMucHVzaChzLmdldChkKSl9Y29uc3QgbD1obyh0LnZhbHVlLG4udmFsdWUpO2lmKCFsLnZhbGlkKXtpZihjZShlKSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVubWVyZ2FibGUgaW50ZXJzZWN0aW9uLiBFcnJvciBwYXRoOiAke0pTT04uc3RyaW5naWZ5KGwubWVyZ2VFcnJvclBhdGgpfWApfXJldHVybiBlLnZhbHVlPWwuZGF0YSxlfWNvbnN0IEtzPXAoIiRab2RUdXBsZSIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPXQuaXRlbXMsbz1pZS5tZW1vaXplcjtvPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGluc3Q6ZSxleHBlY3RlZDoidHVwbGUiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxyO3IudmFsdWU9bz9vLmFsbG9jKGUscixbXSxzKTpbXTtjb25zdCBhPVtdLGw9TGMobiwib3B0aW4iKSx1PUxjKG4sIm9wdG91dCIpO2lmKCF0LnJlc3Qpe2lmKGkubGVuZ3RoPGwpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19zbWFsbCIsbWluaW11bTpsLGluY2x1c2l2ZTohMCxpbnB1dDppLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pLHI7aS5sZW5ndGg+bi5sZW5ndGgmJnIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19iaWciLG1heGltdW06bi5sZW5ndGgsaW5jbHVzaXZlOiEwLGlucHV0OmksaW5zdDplLG9yaWdpbjoiYXJyYXkifSl9Y29uc3QgZD1uZXcgQXJyYXkobi5sZW5ndGgpLG09dC5yZXN0P3M/LmFib3J0RWFybHk6dm9pZCAwO2xldCB2PSExO2ZvcihsZXQgYj0wO2I8bi5sZW5ndGg7YisrKXtjb25zdCBfPW5bYl0uX3pvZC5ydW4oe3ZhbHVlOmlbYl0saXNzdWVzOltdfSxzKTtfIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goXy50aGVuKGs9PntkW2JdPWt9KSk6KGRbYl09XyxtJiYhdiYmXy5pc3N1ZXMubGVuZ3RoJiYodj1jZShfKSkpfWlmKHQucmVzdCYmIXYpe2xldCBiPW4ubGVuZ3RoLTE7Y29uc3QgXz1pLnNsaWNlKG4ubGVuZ3RoKTtsZXQgaz1yLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IHcgb2YgXyl7aWYobSYmci5pc3N1ZXMubGVuZ3RoIT09ayl7aWYoY2UocixrKSlicmVhaztrPXIuaXNzdWVzLmxlbmd0aH1iKys7Y29uc3QgUj10LnJlc3QuX3pvZC5ydW4oe3ZhbHVlOncsaXNzdWVzOltdfSxzKTtSIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goUi50aGVuKE89PlVjKE8scixiKSkpOlVjKFIscixiKX19cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PkhjKGQscixuLGksdSkpOkhjKGQscixuLGksdSl9fSk7ZnVuY3Rpb24gTGMoZSx0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZighKHQ9PT0ib3B0aW4iP2Vbbl0uX3pvZC5vcHRpbiE9PXZvaWQgMDplW25dLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIikpcmV0dXJuIG4rMTtyZXR1cm4gMH1mdW5jdGlvbiBVYyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLm1lKG4sZS5pc3N1ZXMpKSx0LnZhbHVlW25dPWUudmFsdWV9ZnVuY3Rpb24gSGMoZSx0LG4sbyxyKXtmb3IobGV0IHM9MDtzPG4ubGVuZ3RoO3MrKyl7Y29uc3QgaT1lW3NdLGE9czxvLmxlbmd0aDtpZighYSYmcz49ciYmbltzXS5fem9kLm9wdGluPT09Im9wdGlvbmFsIil7dC52YWx1ZS5sZW5ndGg9czticmVha31pZihpLmlzc3Vlcy5sZW5ndGgpe2lmKCFhJiZzPj1yKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfXQuaXNzdWVzLnB1c2goLi4ubWUocyxpLmlzc3VlcykpfXQudmFsdWVbc109aS52YWx1ZX1mb3IobGV0IHM9dC52YWx1ZS5sZW5ndGgtMTtzPj1vLmxlbmd0aCYmKG5bc10uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiJiZ0LnZhbHVlW3NdPT09dm9pZCAwKTtzLS0pdC52YWx1ZS5sZW5ndGg9cztyZXR1cm4gdH1jb25zdCBvcD1wKCIkWm9kUmVjb3JkIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49aWUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighTmUocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJyZWNvcmQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGk9W10sYT10LmtleVR5cGUuX3pvZC52YWx1ZXM7aWYoYSYmIXQucGFydGlhbCl7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2NvbnN0IGw9bmV3IFNldDtmb3IoY29uc3QgZCBvZiBhKWlmKHR5cGVvZiBkPT0ic3RyaW5nInx8dHlwZW9mIGQ9PSJudW1iZXIifHx0eXBlb2YgZD09InN5bWJvbCIpe2lmKGwuYWRkKHR5cGVvZiBkPT0ibnVtYmVyIj9kLnRvU3RyaW5nKCk6ZCksZD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IG09dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpkLGlzc3VlczpbXX0scik7aWYobSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYobS5pc3N1ZXMubGVuZ3RoKXtvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczptLmlzc3Vlcy5tYXAoXz0+YmUoXyxyLEcoKSkpLGlucHV0OmQscGF0aDpbZF0saW5zdDplfSk7Y29udGludWV9Y29uc3Qgdj1tLnZhbHVlO2lmKHY9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBiPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2RdLGlzc3VlczpbXX0scik7YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGIudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLm1lKGQsXy5pc3N1ZXMpKSxvLnZhbHVlW3ZdPV8udmFsdWV9KSk6KGIuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5tZShkLGIuaXNzdWVzKSksby52YWx1ZVt2XT1iLnZhbHVlKX1sZXQgdTtmb3IoY29uc3QgZCBpbiBzKWlmKCFsLmhhcyhkKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihkPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtkXT1zW2RdfWVsc2UgdT11Pz9bXSx1LnB1c2goZCk7dSYmdS5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6dSxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCBsO2Zvcihjb25zdCB1IG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYodT09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsdSkpY29udGludWU7bGV0IGQ9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7aWYoZCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIHU9PSJzdHJpbmciJiZaby50ZXN0KHUpJiZkLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IF89dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIodSksaXNzdWVzOltdfSxyKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtfLmlzc3Vlcy5sZW5ndGg9PT0wJiYoZD1fKX1pZihkLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVt1XT1zW3VdOmE/KGw9bD8/W10sbC5wdXNoKHUpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpkLmlzc3Vlcy5tYXAoXz0+YmUoXyxyLEcoKSkpLGlucHV0OnUscGF0aDpbdV0saW5zdDplfSk7Y29udGludWV9Y29uc3Qgdj1kLnZhbHVlO2lmKHY9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBiPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW3VdLGlzc3VlczpbXX0scik7YiBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGIudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLm1lKHUsXy5pc3N1ZXMpKSxvLnZhbHVlW3ZdPV8udmFsdWV9KSk6KGIuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5tZSh1LGIuaXNzdWVzKSksby52YWx1ZVt2XT1iLnZhbHVlKX1sJiZsLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpsLGNvbnRpbnVlOiEwfSl9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSkscnA9cCgiJFpvZE1hcCIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPWllLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im1hcCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IE1hcCxyKTpuZXcgTWFwO2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgbD1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0W3UsZF1vZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT1sKXtpZihjZShvLGwpKWJyZWFrO2w9by5pc3N1ZXMubGVuZ3RofWNvbnN0IG09dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0sciksdj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6ZCxpc3N1ZXM6W119LHIpO20gaW5zdGFuY2VvZiBQcm9taXNlfHx2IGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goUHJvbWlzZS5hbGwoW20sdl0pLnRoZW4oKFtiLF9dKT0+e0ZjKGIsXyxvLHUscyxlLHIpfSkpOkZjKG0sdixvLHUscyxlLHIpfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIEZjKGUsdCxuLG8scixzLGkpe2UuaXNzdWVzLmxlbmd0aCYmKGNvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5tZShvLGUuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoibWFwIixpbnB1dDpyLGluc3Q6cyxpc3N1ZXM6ZS5pc3N1ZXMubWFwKGE9PmJlKGEsaSxHKCkpKX0pKSx0Lmlzc3Vlcy5sZW5ndGgmJihjby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4ubWUobyx0Lmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe29yaWdpbjoibWFwIixjb2RlOiJpbnZhbGlkX2VsZW1lbnQiLGlucHV0OnIsaW5zdDpzLGtleTpvLGlzc3Vlczp0Lmlzc3Vlcy5tYXAoYT0+YmUoYSxpLEcoKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3Qgc3A9cCgiJFpvZFNldCIsKGUsdCk9PntJLmluaXQoZSx0KTtjb25zdCBuPWllLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgbD1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IHUgb2Ygcyl7aWYoYSYmby5pc3N1ZXMubGVuZ3RoIT09bCl7aWYoY2UobyxsKSlicmVhaztsPW8uaXNzdWVzLmxlbmd0aH1jb25zdCBkPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTp1LGlzc3VlczpbXX0scik7ZCBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGQudGhlbihtPT5CYyhtLG8pKSk6QmMoZCxvKX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBCYyhlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3QgaXA9cCgiJFpvZEVudW0iLChlLHQpPT57SS5pbml0KGUsdCk7Y29uc3Qgbj1Hcih0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8sRShlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz1HcihyLmRlZi5lbnRyaWVzKS5maWx0ZXIoaT0+Y28uaGFzKHR5cGVvZiBpKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChpPT5JZShpLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO3JldHVybiBvLmhhcyhpKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6aSxpbnN0OmV9KSxyfX0pLGFwPXAoIiRab2RMaXRlcmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLEUoZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciP0llKHMpOnM/SWUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLGNwPXAoIiRab2RGaWxlIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSx1cD1wKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e0kuaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLGllLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IHhvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGk9PihuLnZhbHVlPWksbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBaZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24gVmMoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCBXcz1wKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57SS5pbml0KGUsdCksRShlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIsRShlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLEUoZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7UmUoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5WYyhuLHMpKTpWYyhuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLGxwPXAoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e1dzLmluaXQoZSx0KSxFKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxFKGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLGRwPXAoIiRab2ROdWxsYWJsZSIsKGUsdCk9PntJLmluaXQoZSx0KSxFKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiksRShlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksRShlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtSZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLEUoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSkscHA9cCgiJFpvZERlZmF1bHQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLEUoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+SmMocyx0KSk6SmMocix0KX19KTtmdW5jdGlvbiBKYyhlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCBocD1wKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLEUoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksZnA9cCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpLEUoZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5LYyhzLGUpKTpLYyhyLGUpfX0pO2Z1bmN0aW9uIEtjKGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBtcD1wKCIkWm9kU3VjY2VzcyIsKGUsdCk9PntJLmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IHhvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiBXYyhlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PmJlKHIsbyxHKCkpKX0saW5wdXQ6ZS52YWx1ZX0pLGUpOihlLnZhbHVlPXQudmFsdWUsdC5tZW1vJiYoZS5tZW1vPSEwKSxlKX1jb25zdCBncD1wKCIkWm9kQ2F0Y2giLChlLHQpPT57SS5pbml0KGUsdCksRShlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxFKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxFKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+V2MobixzLHQsbykpOldjKG4scix0LG8pfX0pLHZwPXAoIiRab2ROYU4iLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4oKHR5cGVvZiBuLnZhbHVlIT0ibnVtYmVyInx8IU51bWJlci5pc05hTihuLnZhbHVlKSkmJm4uaXNzdWVzLnB1c2goe2lucHV0Om4udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJuYW4iLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxuKX0pLEdzPXAoIiRab2RQaXBlIiwoZSx0KT0+e0kuaW5pdChlLHQpLEUoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksRShlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksRShlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksRShlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+WW4oaSx0LmluLG8pKTpZbihzLHQuaW4sbyl9Y29uc3Qgcj10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5ZbihzLHQub3V0LG8pKTpZbihyLHQub3V0LG8pfX0pO2Z1bmN0aW9uIFluKGUsdCxuKXtyZXR1cm4gZS5pc3N1ZXMuc29tZShvPT5vLmNvZGUhPT0idW5yZWNvZ25pemVkX2tleXMiKT8oZS5hYm9ydGVkPSEwLGUpOnQuX3pvZC5ydW4oe3ZhbHVlOmUudmFsdWUsaXNzdWVzOmUuaXNzdWVzfSxuKX1jb25zdCBRcz1wKCIkWm9kQ29kZWMiLChlLHQpPT57SS5pbml0KGUsdCksRShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSxFKGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSxFKGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSxFKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoKG8uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCBzPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9PlhuKGksdCxvKSk6WG4ocyx0LG8pfWVsc2V7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+WG4oaSx0LG8pKTpYbihzLHQsbyl9fX0pO2Z1bmN0aW9uIFhuKGUsdCxuKXtpZihlLmlzc3Vlcy5sZW5ndGgpcmV0dXJuIGUuYWJvcnRlZD0hMCxlO2lmKChuLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcj10LnRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+ZW8oZSxzLHQub3V0LG4pKTplbyhlLHIsdC5vdXQsbil9ZWxzZXtjb25zdCByPXQucmV2ZXJzZVRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+ZW8oZSxzLHQuaW4sbikpOmVvKGUscix0LmluLG4pfX1mdW5jdGlvbiBlbyhlLHQsbixvKXtyZXR1cm4gZS5pc3N1ZXMubGVuZ3RoPyhlLmFib3J0ZWQ9ITAsZSk6bi5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6ZS5pc3N1ZXN9LG8pfWNvbnN0IGJwPXAoIiRab2RQcmVwcm9jZXNzIiwoZSx0KT0+e0dzLmluaXQoZSx0KX0pLHlwPXAoIiRab2RSZWFkb25seSIsKGUsdCk9PntJLmluaXQoZSx0KSxFKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpLEUoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEUoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4pLEUoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKEdjKTpHYyhyKX19KTtmdW5jdGlvbiBHYyhlKXtyZXR1cm4gZS5tZW1vfHwoZS52YWx1ZT1PYmplY3QuZnJlZXplKGUudmFsdWUpKSxlfWZ1bmN0aW9uIFJtKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtsZXQgbj10LnBhdHRlcm4sbz0hIXQuZm9ybWF0Py5pbmNsdWRlcygiaW50IikscixzO2Zvcihjb25zdCBhIG9mIHQuY2hlY2tzPz9bXSl7Y29uc3QgbD1hLl96b2QuZGVmO2wucGF0dGVybiYmKG49bC5wYXR0ZXJuKSxvfHwobz0hIWwuZm9ybWF0Py5pbmNsdWRlcygiaW50IikpO2NvbnN0IHU9bC5taW5pbXVtPz9sLmxlbmd0aCxkPWwubWF4aW11bT8/bC5sZW5ndGg7dSE9PXZvaWQgMCYmKHI9PT12b2lkIDB8fHU+cikmJihyPXUpLGQhPT12b2lkIDAmJihzPT09dm9pZCAwfHxkPHMpJiYocz1kKX1pZihuKXJldHVybiBuLnNvdXJjZTtpZihyIT09dm9pZCAwJiZzIT09dm9pZCAwJiZyPnMpcmV0dXJuIig/ISkiO2lmKHIhPT12b2lkIDB8fHMhPT12b2lkIDApcmV0dXJuIFNsKHttaW5pbXVtOnIsbWF4aW11bTpzfSkuc291cmNlO2NvbnN0IGk9ZS5fem9kLnBhdHRlcm47cmV0dXJuKG8mJmk9PT1abz9UbDppKT8uc291cmNlfWZ1bmN0aW9uIHJzKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZixuPWUuX3pvZC5wYXR0ZXJuPy5zb3VyY2Usbz10LmlubmVyVHlwZT8/ZS5fem9kLmlubmVyVHlwZTtpZihvKXtjb25zdCByPW8uX3pvZC5wYXR0ZXJuPy5zb3VyY2Uscz1ycyhvKTtyZXR1cm4gbiYmciYmcyYmcyE9PXI/bi5yZXBsYWNlKFJlKHIpLCgpPT5SZShzKSk6bn1pZih0Lm9wdGlvbnMpe2NvbnN0IHI9dC5vcHRpb25zLm1hcChycyk7aWYoci5ldmVyeShCb29sZWFuKSlyZXR1cm5gXigke3IubWFwKHM9PlJlKHMpKS5qb2luKCJ8Iil9KSRgfXJldHVybiBSbShlKX1jb25zdCBfcD1wKCIkWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e0kuaW5pdChlLHQpO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdC5wYXJ0cylpZih0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsKXtjb25zdCByPXJzKG8pO2lmKCFyKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7Wy4uLm8uX3pvZC50cmFpdHNdLnNoaWZ0KCl9YCk7bi5wdXNoKFJlKHIpKX1lbHNlIGlmKG89PT1udWxsfHx4dS5oYXModHlwZW9mIG8pKW4ucHVzaChJZShgJHtvfWApKTtlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7b31gKTtlLl96b2QucGF0dGVybj1uZXcgUmVnRXhwKGBeJHtuLmpvaW4oIiIpfSRgKSxlLl96b2QucGFyc2U9KG8scik9PnR5cGVvZiBvLnZhbHVlIT0ic3RyaW5nIj8oby5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6InN0cmluZyIsY29kZToiaW52YWxpZF90eXBlIn0pLG8pOihlLl96b2QucGF0dGVybi5sYXN0SW5kZXg9MCxlLl96b2QucGF0dGVybi50ZXN0KG8udmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0Pz8idGVtcGxhdGVfbGl0ZXJhbCIscGF0dGVybjplLl96b2QucGF0dGVybi5zb3VyY2V9KSxvKX0pLGtwPXAoIiRab2RGdW5jdGlvbiIsKGUsdCk9PihJLmluaXQoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2RlZiIse3ZhbHVlOnR9KSxlLl96b2QuZGVmPXQsZS5pbXBsZW1lbnQ9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9lcyhlLl9kZWYuaW5wdXQsbyk6byxzPVJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2VzKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLmltcGxlbWVudEFzeW5jPW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudEFzeW5jKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3luYyBmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9hd2FpdCB0cyhlLl9kZWYuaW5wdXQsbyk6byxzPWF3YWl0IFJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2F3YWl0IHRzKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLl96b2QucGFyc2U9KG4sbyk9PnR5cGVvZiBuLnZhbHVlIT0iZnVuY3Rpb24iPyhuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJmdW5jdGlvbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxuKTooZS5fZGVmLm91dHB1dCYmZS5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlPT09InByb21pc2UiP24udmFsdWU9ZS5pbXBsZW1lbnRBc3luYyhuLnZhbHVlKTpuLnZhbHVlPWUuaW1wbGVtZW50KG4udmFsdWUpLG4pLGUuaW5wdXQ9KC4uLm4pPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBBcnJheS5pc0FycmF5KG5bMF0pP25ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6bmV3IEtzKHt0eXBlOiJ0dXBsZSIsaXRlbXM6blswXSxyZXN0Om5bMV19KSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pOm5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6blswXSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pfSxlLm91dHB1dD1uPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0OmUuX2RlZi5pbnB1dCxvdXRwdXQ6bn0pfSxlKSksd3A9cCgiJFpvZFByb21pc2UiLChlLHQpPT57SS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5Qcm9taXNlLnJlc29sdmUobi52YWx1ZSkudGhlbihyPT50LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pKX0pLFlzPXAoIiRab2RMYXp5IiwoZSx0KT0+e0kuaW5pdChlLHQpLCR1KGUuX3pvZCwiaW5uZXJUeXBlIiwoKT0+e2NvbnN0IG49dDtyZXR1cm4gbi5fY2FjaGVkSW5uZXJ8fChuLl9jYWNoZWRJbm5lcj10LmdldHRlcigpKSxuLl9jYWNoZWRJbm5lcn0pLEUoZSwicGF0dGVybiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pLEUoZSwicHJvcFZhbHVlcyIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnByb3BWYWx1ZXMpLEUoZSwib3B0aW4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRpbj8/dm9pZCAwKSxFKGUsIm9wdG91dCIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dD8/dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9PmUuX3pvZC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLCRwPXAoIiRab2RDdXN0b20iLChlLHQpPT57Si5pbml0KGUsdCksSS5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5uLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz1uLnZhbHVlLHI9dC5mbihvKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gci50aGVuKHM9PlFjKHMsbixvLGUpKTtRYyhyLG4sbyxlKX19KTtmdW5jdGlvbiBRYyhlLHQsbixvKXtpZighZSl7Y29uc3Qgcj17Y29kZToiY3VzdG9tIixpbnB1dDpuLGluc3Q6byxwYXRoOlsuLi5vLl96b2QuZGVmLnBhdGg/P1tdXSxjb250aW51ZTohby5fem9kLmRlZi5hYm9ydH07by5fem9kLmRlZi5wYXJhbXMmJihyLnBhcmFtcz1vLl96b2QuZGVmLnBhcmFtcyksdC5pc3N1ZXMucHVzaChzdChyKSl9fWNsYXNzIFNwIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2Fubm90IHBhcnNlIGEgcmVmZXJlbmNlIGN5Y2xlIHRoYXQgY2xvc2VzIHRocm91Z2ggYSB0cmFuc2Zvcm0iKSx0aGlzLm5hbWU9IlpvZEN5Y2xpY0Vycm9yIn19Y29uc3Qgc3M9In5tZW1vIixZYz1bXTtmdW5jdGlvbiB6cChlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1mdW5jdGlvbiBKcihlKXtyZXR1cm4gZS5tYXAodD0+dC5wYXRoP3suLi50LHBhdGg6dC5wYXRoLnNsaWNlKCl9OnsuLi50fSl9Y29uc3QgVHA9bmV3IFdlYWtNYXAsZXQ9MCxzbz0xLEF0PTI7ZnVuY3Rpb24gUnQoZSx0LG4pe2NvbnN0IG89VHAuZ2V0KGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG8/QXQ6ZXQ7aWYodC5oYXMoZSkpcmV0dXJuIEF0O3QuYWRkKGUpO2xldCByPWV0O2NvbnN0IHM9ZD0+e2lmKHIhPT1BdCYmZD8uX3pvZCl7Y29uc3QgbT1SdChkLHQsbik7bT5yJiYocj1tKX19LGk9KGQsbSk9PntsZXQgdj1ldDtmb3IoY29uc3QgYiBvZiBSZWZsZWN0Lm93bktleXMoZCkpe2NvbnN0IF89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGIpO2lmKCFfLmVudW1lcmFibGUpY29udGludWU7Y29uc3Qgaz1fLmdldD9zbzpfLnZhbHVlPy5fem9kP1J0KF8udmFsdWUsdCxuKTpldDtrPnYmJih2PWspfXJldHVybiB2fSxhPWQ9PntkPnImJihyPWQpfSxsPWUuX3pvZC5kZWY7c3dpdGNoKGwudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBkPXdvKGwpO2EoZD9pKGQpOnNvKSxzKGwuY2F0Y2hhbGwpO2JyZWFrfWNhc2UiYXJyYXkiOnMobC5lbGVtZW50KTticmVhaztjYXNlInR1cGxlIjpmb3IoY29uc3QgZCBvZiBsLml0ZW1zKXMoZCk7cyhsLnJlc3QpO2JyZWFrO2Nhc2UicmVjb3JkIjpjYXNlIm1hcCI6cyhsLmtleVR5cGUpLHMobC52YWx1ZVR5cGUpO2JyZWFrO2Nhc2Uic2V0IjpzKGwudmFsdWVUeXBlKTticmVhaztjYXNlInVuaW9uIjpmb3IoY29uc3QgZCBvZiBsLm9wdGlvbnMpcyhkKTticmVhaztjYXNlImludGVyc2VjdGlvbiI6cyhsLmxlZnQpLHMobC5yaWdodCk7YnJlYWs7Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6cyhsLmlubmVyVHlwZSk7YnJlYWs7Y2FzZSJwaXBlIjpzKGwuaW4pLHMobC5vdXQpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnMobC5pbnB1dCkscyhsLm91dHB1dCk7YnJlYWs7Y2FzZSJsYXp5Ijp7Y29uc3QgZD1sLl9jYWNoZWRJbm5lcj8/KG4/ZS5fem9kLmlubmVyVHlwZTp2b2lkIDApO2EoZD9SdChkLHQsITEpOnNvKTticmVha31jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6YnJlYWs7ZGVmYXVsdDpmb3IoY29uc3QgZCBpbiBsKXtjb25zdCBtPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxkKTtpZighbXx8bS5nZXQpY29udGludWU7Y29uc3Qgdj1tLnZhbHVlO2lmKCEoIXZ8fHR5cGVvZiB2IT0ib2JqZWN0Iikpe2lmKHYuX3pvZClzKHYpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh2KSlmb3IoY29uc3QgYiBvZiB2KXMoYil9fX1yZXR1cm4gdC5kZWxldGUoZSksWm0oZSxyKX1mdW5jdGlvbiBabShlLHQpe3JldHVybiB0IT09c28mJlRwLnNldChlLHQ9PT1BdCksdH1mdW5jdGlvbiBObShlKXtyZXR1cm4gUnQoZSxuZXcgU2V0LCEwKSE9PWV0fWZ1bmN0aW9uIGptKGUsdCl7bGV0IG49ZS5idWNrZXRzLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IFdlYWtNYXAsZS5idWNrZXRzLnNldCh0LG4pKSxufWxldCB0bztjb25zdCBubz1bXSxNbT17YWxsb2MoZSx0LG4pe2NvbnN0IG89dG87aWYoIW8pcmV0dXJuIG47dG89dm9pZCAwO2NvbnN0IHI9e3ZhbHVlOm4saXNzdWVzOm51bGx9O3JldHVybiBvLnNldCh0LnZhbHVlLHIpLG5vLnB1c2gociksbn0sZ3VhcmQoZSl7dmFyIHQ7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3Qgbj1lLl96b2QucGFyc2Usbz0ocixzKT0+e2lmKHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIiYmSXAocyxyLnZhbHVlKSl0aHJvdyBuZXcgU3A7cmV0dXJuIG4ocixzKX07ZS5fem9kLnBhcnNlPW8sZS5fem9kLnJ1bj09PW4mJihlLl96b2QucnVuPW8pfSl9LGF0dGFjaChlKXt2YXIgdDtsZXQgbixvPSExLHIsczsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBpPWUuX3pvZC5wYXJzZSxhPShsLHUpPT57aWYobj09PXZvaWQgMCl7Y29uc3QgUj1SdChlLG5ldyBTZXQsITEpO2lmKFI9PT1ldClyZXR1cm4gZS5fem9kLnBhcnNlPWksZS5fem9kLnJ1bj09PWEmJihlLl96b2QucnVuPWkpLGkobCx1KTtSPT09QXR8fG8/bj0hMDpvPSEwfWNvbnN0IGQ9bC52YWx1ZTtpZighenAoZCkpcmV0dXJuIGkobCx1KTtsZXQgbT11W3NzXTttfHwobT17YnVja2V0czpuZXcgV2Vha01hcCxiYWNrRWRnZXM6dm9pZCAwfSx1W3NzXT1tKTtsZXQgdjtyPT09dT92PXM6KHY9am0obSxlKSxyPXUscz12KTtjb25zdCBiPXYuZ2V0KGQpO2lmKGIpcmV0dXJuIGwudmFsdWU9Yi52YWx1ZSxiLmlzc3Vlcz9iLmlzc3Vlcy5sZW5ndGgmJmwuaXNzdWVzLnB1c2goLi4uSnIoYi5pc3N1ZXMpKToobC5tZW1vPSEwLG0uYmFja0VkZ2VzPz8obS5iYWNrRWRnZXM9bmV3IFdlYWtTZXQpLG0uYmFja0VkZ2VzLmFkZChiLnZhbHVlKSksbDt0bz12O2NvbnN0IF89bm8ubGVuZ3RoLGs9aShsLHUpO3RvPXZvaWQgMDtjb25zdCB3PW5vLmxlbmd0aD5fP25vLnBvcCgpOnZvaWQgMDtyZXR1cm4gayBpbnN0YW5jZW9mIFByb21pc2U/ay50aGVuKFI9Pih3JiYody5pc3N1ZXM9Ui5pc3N1ZXMubGVuZ3RoP0pyKFIuaXNzdWVzKTpZYyksUikpOih3JiYody5pc3N1ZXM9ay5pc3N1ZXMubGVuZ3RoP0pyKGsuaXNzdWVzKTpZYyksayl9O2UuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKX0pfX07ZnVuY3Rpb24gTW8oKXtyZXR1cm4gTW19ZnVuY3Rpb24gSXAoZSx0KXtjb25zdCBuPWVbc3NdPy5iYWNrRWRnZXM7cmV0dXJuIG4hPT12b2lkIDAmJnpwKHQpJiZuLmhhcyh0KX1jb25zdCBxbT0oKT0+e2NvbnN0IGU9e3N0cmluZzp7dW5pdDoiY2hhcmFjdGVycyIsdmVyYjoidG8gaGF2ZSJ9LGZpbGU6e3VuaXQ6ImJ5dGVzIix2ZXJiOiJ0byBoYXZlIn0sYXJyYXk6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sc2V0Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LG1hcDp7dW5pdDoiZW50cmllcyIsdmVyYjoidG8gaGF2ZSJ9fTtmdW5jdGlvbiB0KHMpe3JldHVybiBlW3NdPz9udWxsfWNvbnN0IG49e3JlZ2V4OiJpbnB1dCIsZW1haWw6ImVtYWlsIGFkZHJlc3MiLHVybDoiVVJMIixlbW9qaToiZW1vamkiLHV1aWQ6IlVVSUQiLHV1aWR2NDoiVVVJRHY0Iix1dWlkdjY6IlVVSUR2NiIsbmFub2lkOiJuYW5vaWQiLGd1aWQ6IkdVSUQiLGN1aWQ6ImN1aWQiLGN1aWQyOiJjdWlkMiIsdWxpZDoiVUxJRCIseGlkOiJYSUQiLGtzdWlkOiJLU1VJRCIsZGF0ZXRpbWU6IklTTyBkYXRldGltZSIsZGF0ZToiSVNPIGRhdGUiLHRpbWU6IklTTyB0aW1lIixkdXJhdGlvbjoiSVNPIGR1cmF0aW9uIixpcHY0OiJJUHY0IGFkZHJlc3MiLGlwdjY6IklQdjYgYWRkcmVzcyIsbWFjOiJNQUMgYWRkcmVzcyIsY2lkcnY0OiJJUHY0IHJhbmdlIixjaWRydjY6IklQdjYgcmFuZ2UiLGJhc2U2NDoiYmFzZTY0LWVuY29kZWQgc3RyaW5nIixiYXNlNjR1cmw6ImJhc2U2NHVybC1lbmNvZGVkIHN0cmluZyIsanNvbl9zdHJpbmc6IkpTT04gc3RyaW5nIixlMTY0OiJFLjE2NCBudW1iZXIiLGN1cnJlbmN5X2NvZGU6ImN1cnJlbmN5IGNvZGUiLGNyZWRpdF9jYXJkOiJjcmVkaXQgY2FyZCBudW1iZXIiLGliYW46IklCQU4iLGp3dDoiSldUIix0ZW1wbGF0ZV9saXRlcmFsOiJpbnB1dCJ9LG89e25hbjoiTmFOIn07ZnVuY3Rpb24gcihzLGkpe3JldHVybiBzPT09Im51bWJlciImJnR5cGVvZiBpPT0ibnVtYmVyIiYmIU51bWJlci5pc0Zpbml0ZShpKT9TdHJpbmcoaSk6b1tzXT8/c31yZXR1cm4gcz0+e3N3aXRjaChzLmNvZGUpe2Nhc2UiaW52YWxpZF90eXBlIjp7Y29uc3QgaT1yKHMuZXhwZWN0ZWQpLGE9THUocy5pbnB1dCksbD1yKGEscy5pbnB1dCk7cmV0dXJuYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7aX0sIHJlY2VpdmVkICR7bH1gfWNhc2UiaW52YWxpZF92YWx1ZSI6cmV0dXJuIHMudmFsdWVzLmxlbmd0aD09PTE/YEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7Z3Mocy52YWx1ZXNbMF0pfWA6YEludmFsaWQgb3B0aW9uOiBleHBlY3RlZCBvbmUgb2YgJHtRcihzLnZhbHVlcywifCIpfWA7Y2FzZSJ0b29fYmlnIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ijw9IjoiPCIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gaGF2ZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX0gJHthLnVuaXQ/PyJlbGVtZW50cyJ9YDpgVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gYmUgJHtpfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9YH1jYXNlInRvb19zbWFsbCI6e2NvbnN0IGk9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI+PSI6Ij4iLGE9dChzLm9yaWdpbik7cmV0dXJuIGE/YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gaGF2ZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX0gJHthLnVuaXR9YDpgVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBiZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX1gfWNhc2UiaW52YWxpZF9mb3JtYXQiOntjb25zdCBpPXM7cmV0dXJuIGkuZm9ybWF0PT09InN0YXJ0c193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCAiJHtpLnByZWZpeH0iYDppLmZvcm1hdD09PSJlbmRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBlbmQgd2l0aCAiJHtpLnN1ZmZpeH0iYDppLmZvcm1hdD09PSJpbmNsdWRlcyI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgIiR7aS5pbmNsdWRlc30iYDppLmZvcm1hdD09PSJyZWdleCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IG1hdGNoIHBhdHRlcm4gJHtpLnBhdHRlcm59YDpgSW52YWxpZCAke25baS5mb3JtYXRdPz9zLmZvcm1hdH1gfWNhc2Uibm90X211bHRpcGxlX29mIjpyZXR1cm5gSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3MuZGl2aXNvcn1gO2Nhc2UidW5yZWNvZ25pemVkX2tleXMiOnJldHVybmBVbnJlY29nbml6ZWQga2V5JHtzLmtleXMubGVuZ3RoPjE/InMiOiIifTogJHtRcihzLmtleXMsIiwgIil9YDtjYXNlImludmFsaWRfa2V5IjpyZXR1cm5gSW52YWxpZCBrZXkgaW4gJHtzLm9yaWdpbn1gO2Nhc2UiaW52YWxpZF91bmlvbiI6cmV0dXJuIHMub3B0aW9ucyYmQXJyYXkuaXNBcnJheShzLm9wdGlvbnMpJiZzLm9wdGlvbnMubGVuZ3RoPjA/YEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHtzLm9wdGlvbnMubWFwKGE9PmAnJHthfSdgKS5qb2luKCIgfCAiKX1gOnMuaW5jbHVzaXZlPT09ITE/IkludmFsaWQgaW5wdXQ6IG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZWQiOiJJbnZhbGlkIGlucHV0IjtjYXNlImludmFsaWRfZWxlbWVudCI6cmV0dXJuYEludmFsaWQgdmFsdWUgaW4gJHtzLm9yaWdpbn1gO2RlZmF1bHQ6cmV0dXJuIkludmFsaWQgaW5wdXQifX19O2Z1bmN0aW9uIFBwKCl7cmV0dXJue2xvY2FsZUVycm9yOnFtKCl9fWNvbnN0IFhzPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbjpQcH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgWGM7Y29uc3QgZWk9U3ltYm9sKCJab2RPdXRwdXQiKSx0aT1TeW1ib2woIlpvZElucHV0Iik7Y2xhc3MgeHB7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcH1hZGQodCwuLi5uKXtjb25zdCBvPW5bMF07cmV0dXJuIHRoaXMuX21hcC5zZXQodCxvKSxvJiZ0eXBlb2Ygbz09Im9iamVjdCImJiJpZCJpbiBvJiZ0aGlzLl9pZG1hcC5zZXQoby5pZCx0KSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwLHRoaXN9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gbiYmdHlwZW9mIG49PSJvYmplY3QiJiYiaWQiaW4gbiYmdGhpcy5faWRtYXAuZGVsZXRlKG4uaWQpLHRoaXMuX21hcC5kZWxldGUodCksdGhpc31nZXQodCl7Y29uc3Qgbj10Ll96b2QucGFyZW50O2lmKG4pe2NvbnN0IG89ey4uLnRoaXMuZ2V0KG4pPz97fX07ZGVsZXRlIG8uaWQ7Y29uc3Qgcj17Li4ubywuLi50aGlzLl9tYXAuZ2V0KHQpfTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoP3I6dm9pZCAwfXJldHVybiB0aGlzLl9tYXAuZ2V0KHQpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX19ZnVuY3Rpb24gcW8oKXtyZXR1cm4gbmV3IHhwfShYYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeT8/KFhjLl9fem9kX2dsb2JhbFJlZ2lzdHJ5PXFvKCkpO2NvbnN0IGdlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnksbmk9KCk9Pnt0aHJvdyBuZXcgRXJyb3IoInpvZCBjb21waWxlKCkgaXMgbm90IGJ1bmRsZWQgaW50byBjYXJkcyAtIHNlZSBwYWNrYWdlcy9pbnRlcm5hbC9jYXJkLWtpdC92aXRlLXNsaW0ubWpzIil9O2NsYXNzIG9pIGV4dGVuZHMgRXJyb3J7fWNsYXNzIHJpIGV4dGVuZHMgRXJyb3J7fWNsYXNzIHNpIGV4dGVuZHMgRXJyb3J7fWNvbnN0IGlpPW5pLGFpPW5pLERtPW5pO2Z1bmN0aW9uIERvKGUpe3JldHVybiBlLmNoZWNrcyYmKGUuY2hlY2tzPVsuLi5lLmNoZWNrc10pLGV9ZnVuY3Rpb24gQ3AoZSx0KXtyZXR1cm4gbmV3IGUoRG8oe3R5cGU6InN0cmluZyIsLi4ueSh0KX0pKX1mdW5jdGlvbiBFcChlLHQpe3JldHVybiBuZXcgZShEbyh7dHlwZToic3RyaW5nIixjb2VyY2U6ITAsLi4ueSh0KX0pKX1mdW5jdGlvbiBjaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtYWlsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHVpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZ3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBsaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gZGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjQiLC4uLnkodCl9KX1mdW5jdGlvbiBwaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGhpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY3IiwuLi55KHQpfSl9ZnVuY3Rpb24gTG8oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gZmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbW9qaSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBtaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im5hbm9pZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBnaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gdmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkMiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBiaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVsaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24geWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ4aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gX2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJrc3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBraShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gd2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIE9wKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibWFjIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uICRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFNpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFRpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0dXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIElpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZTE2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBBcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNyZWRpdF9jYXJkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaWJhbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBQaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imp3dCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1jb25zdCB4aT17QW55Om51bGwsTWludXRlOi0xLFNlY29uZDowLE1pbGxpc2Vjb25kOjMsTWljcm9zZWNvbmQ6Nn07ZnVuY3Rpb24gQ2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRldGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLG9mZnNldDohMSxsb2NhbDohMSxwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24gRWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRlIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIE9pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLHByZWNpc2lvbjpudWxsLC4uLnkodCl9KX1mdW5jdGlvbiBBaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImR1cmF0aW9uIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIFpwKGUsdCl7cmV0dXJuIG5ldyBlKERvKHt0eXBlOiJudW1iZXIiLGNoZWNrczpbXSwuLi55KHQpfSkpfWZ1bmN0aW9uIE5wKGUsdCl7cmV0dXJuIG5ldyBlKERvKHt0eXBlOiJudW1iZXIiLGNvZXJjZTohMCxjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBqcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJzYWZlaW50IiwuLi55KHQpfSl9ZnVuY3Rpb24gTXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIHFwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBEcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIExwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIFVwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIiwuLi55KHQpfSl9ZnVuY3Rpb24gSHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gRnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gVnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBKcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBLcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3ltYm9sIiwuLi55KHQpfSl9ZnVuY3Rpb24gV3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuZGVmaW5lZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIEdwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsIiwuLi55KHQpfSl9ZnVuY3Rpb24gUXAoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJhbnkifSl9ZnVuY3Rpb24gWXAoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmtub3duIn0pfWZ1bmN0aW9uIFhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuZXZlciIsLi4ueSh0KX0pfWZ1bmN0aW9uIGVoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ2b2lkIiwuLi55KHQpfSl9ZnVuY3Rpb24gdGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLC4uLnkodCl9KX1mdW5jdGlvbiBuaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsY29lcmNlOiEwLC4uLnkodCl9KX1mdW5jdGlvbiBvaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmFuIiwuLi55KHQpfSl9ZnVuY3Rpb24geGUoZSx0KXtyZXR1cm4gbmV3IE5zKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gZGUoZSx0KXtyZXR1cm4gbmV3IE5zKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gQ2UoZSx0KXtyZXR1cm4gbmV3IGpzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gcGUoZSx0KXtyZXR1cm4gbmV3IGpzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIENlKDAsZSl9ZnVuY3Rpb24gSG8oZSl7cmV0dXJuIHhlKDAsZSl9ZnVuY3Rpb24gRm8oZSl7cmV0dXJuIGRlKDAsZSl9ZnVuY3Rpb24gQm8oZSl7cmV0dXJuIHBlKDAsZSl9ZnVuY3Rpb24gQmUoZSx0KXtyZXR1cm4gbmV3IEFsKHtjaGVjazoibXVsdGlwbGVfb2YiLC4uLnkodCksdmFsdWU6ZX0pfWZ1bmN0aW9uIEdlKGUsdCl7cmV0dXJuIG5ldyBObCh7Y2hlY2s6Im1heF9zaXplIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIEVlKGUsdCl7cmV0dXJuIG5ldyBqbCh7Y2hlY2s6Im1pbl9zaXplIiwuLi55KHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIHB0KGUsdCl7cmV0dXJuIG5ldyBNbCh7Y2hlY2s6InNpemVfZXF1YWxzIiwuLi55KHQpLHNpemU6ZX0pfWZ1bmN0aW9uIGh0KGUsdCl7cmV0dXJuIG5ldyBxbCh7Y2hlY2s6Im1heF9sZW5ndGgiLC4uLnkodCksbWF4aW11bTplfSl9ZnVuY3Rpb24gamUoZSx0KXtyZXR1cm4gbmV3IERsKHtjaGVjazoibWluX2xlbmd0aCIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBmdChlLHQpe3JldHVybiBuZXcgTGwoe2NoZWNrOiJsZW5ndGhfZXF1YWxzIiwuLi55KHQpLGxlbmd0aDplfSl9ZnVuY3Rpb24gZW4oZSx0KXtyZXR1cm4gbmV3IFVsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsLi4ueSh0KSxwYXR0ZXJuOmV9KX1mdW5jdGlvbiB0bihlKXtyZXR1cm4gbmV3IEhsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJsb3dlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiBubihlKXtyZXR1cm4gbmV3IEZsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJ1cHBlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiBvbihlLHQpe3JldHVybiBuZXcgQmwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIiwuLi55KHQpLGluY2x1ZGVzOmV9KX1mdW5jdGlvbiBybihlLHQpe3JldHVybiBuZXcgVmwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIiwuLi55KHQpLHByZWZpeDplfSl9ZnVuY3Rpb24gc24oZSx0KXtyZXR1cm4gbmV3IEpsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLC4uLnkodCksc3VmZml4OmV9KX1mdW5jdGlvbiBWbyhlLHQsbil7cmV0dXJuIG5ldyBLbCh7Y2hlY2s6InByb3BlcnR5Iixwcm9wZXJ0eTplLHNjaGVtYTp0LC4uLnkobil9KX1mdW5jdGlvbiBhbihlLHQpe3JldHVybiBuZXcgV2woe2NoZWNrOiJwcm9wZXJ0aWVzIixzaGFwZTplLC4uLnkodCl9KX1mdW5jdGlvbiBjbihlLHQpe3JldHVybiBuZXcgR2woe2NoZWNrOiJtaW1lX3R5cGUiLG1pbWU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24gJGUoZSl7cmV0dXJuIG5ldyBRbCh7Y2hlY2s6Im92ZXJ3cml0ZSIsdHg6ZX0pfWZ1bmN0aW9uIHVuKGUpe3JldHVybiAkZSh0PT50Lm5vcm1hbGl6ZShlKSl9ZnVuY3Rpb24gbG4oKXtyZXR1cm4gJGUoZT0+ZS50cmltKCkpfWZ1bmN0aW9uIGRuKCl7cmV0dXJuICRlKGU9PmUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gcG4oKXtyZXR1cm4gJGUoZT0+ZS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBobigpe3JldHVybiAkZShlPT5JdShlKSl9ZnVuY3Rpb24gcmgoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiYXJyYXkiLGVsZW1lbnQ6dCwuLi55KG4pfSl9ZnVuY3Rpb24gTG0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCwuLi55KG4pfSl9ZnVuY3Rpb24gVW0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCxpbmNsdXNpdmU6ITEsLi4ueShuKX0pfWZ1bmN0aW9uIEhtKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6bixkaXNjcmltaW5hdG9yOnQsLi4ueShvKX0pfWZ1bmN0aW9uIEZtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDp0LHJpZ2h0Om59KX1mdW5jdGlvbiBCbShlLHQsbixvKXtjb25zdCByPW4gaW5zdGFuY2VvZiBJLHM9cj9vOm4saT1yP246bnVsbDtyZXR1cm4gbmV3IGUoe3R5cGU6InR1cGxlIixpdGVtczp0LHJlc3Q6aSwuLi55KHMpfSl9ZnVuY3Rpb24gVm0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gSm0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJtYXAiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gS20oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToic2V0Iix2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gV20oZSx0LG4pe2NvbnN0IG89QXJyYXkuaXNBcnJheSh0KT9PYmplY3QuZnJvbUVudHJpZXModC5tYXAocj0+W3Iscl0pKTp0O3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczpvLC4uLnkobil9KX1mdW5jdGlvbiBHbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIFFtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KHQpP3Q6W3RdLC4uLnkobil9KX1mdW5jdGlvbiBzaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZmlsZSIsLi4ueSh0KX0pfWZ1bmN0aW9uIFltKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTp0fSl9ZnVuY3Rpb24gWG0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGVnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiB0ZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6dCxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTokbyhuKX19KX1mdW5jdGlvbiBuZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIG9nKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHJnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6dCxjYXRjaFZhbHVlOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246dnMobil9KX1mdW5jdGlvbiBzZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJwaXBlIixpbjp0LG91dDpufSl9ZnVuY3Rpb24gaWcoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGFnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIGNnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJsYXp5IixnZXR0ZXI6dH0pfWZ1bmN0aW9uIHVnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGloKGUsdCxuKXtjb25zdCBvPXkobik7cmV0dXJuIG8uYWJvcnQ/PyhvLmFib3J0PSEwKSxuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLm99KX1mdW5jdGlvbiBhaChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ueShuKX0pfWZ1bmN0aW9uIGNoKGUsdCl7Y29uc3Qgbj11aChvPT4oby5hZGRJc3N1ZT1yPT57aWYodHlwZW9mIHI9PSJzdHJpbmciKW8uaXNzdWVzLnB1c2goc3QocixvLnZhbHVlLG4uX3pvZC5kZWYpKTtlbHNle2NvbnN0IHM9cjtzLmZhdGFsJiYocy5jb250aW51ZT0hMSkscy5jb2RlPz8ocy5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gc3x8KHMuaW5wdXQ9by52YWx1ZSkscy5pbnN0Pz8ocy5pbnN0PW4pLHMuY29udGludWU/PyhzLmNvbnRpbnVlPSFuLl96b2QuZGVmLmFib3J0KSxvLmlzc3Vlcy5wdXNoKHN0KHMpKX19LGUoby52YWx1ZSxvKSksdCk7cmV0dXJuIG59ZnVuY3Rpb24gdWgoZSx0KXtjb25zdCBuPW5ldyBKKHtjaGVjazoiY3VzdG9tIiwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5jaGVjaz1lLG59ZnVuY3Rpb24gbGgoZSl7Y29uc3QgdD1uZXcgSih7Y2hlY2s6ImRlc2NyaWJlIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWdlLmdldChuKT8/e307Z2UuYWRkKG4sey4uLm8sZGVzY3JpcHRpb246ZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIGRoKGUpe2NvbnN0IHQ9bmV3IEooe2NoZWNrOiJtZXRhIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWdlLmdldChuKT8/e307Z2UuYWRkKG4sey4uLm8sLi4uZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIHBoKGUsdCl7Y29uc3Qgbj15KHQpO2xldCBvPW4udHJ1dGh5Pz9bInRydWUiLCIxIiwieWVzIiwib24iLCJ5IiwiZW5hYmxlZCJdLHI9bi5mYWxzeT8/WyJmYWxzZSIsIjAiLCJubyIsIm9mZiIsIm4iLCJkaXNhYmxlZCJdO24uY2FzZSE9PSJzZW5zaXRpdmUiJiYobz1vLm1hcChiPT50eXBlb2YgYj09InN0cmluZyI/Yi50b0xvd2VyQ2FzZSgpOmIpLHI9ci5tYXAoYj0+dHlwZW9mIGI9PSJzdHJpbmciP2IudG9Mb3dlckNhc2UoKTpiKSk7Y29uc3Qgcz1uZXcgU2V0KG8pLGk9bmV3IFNldChyKSxhPWUuQ29kZWM/P1FzLGw9ZS5Cb29sZWFuPz9Ccyx1PWUuU3RyaW5nPz9YdCxkPW5ldyB1KHt0eXBlOiJzdHJpbmciLGVycm9yOm4uZXJyb3J9KSxtPW5ldyBsKHt0eXBlOiJib29sZWFuIixlcnJvcjpuLmVycm9yfSksdj1uZXcgYSh7dHlwZToicGlwZSIsaW46ZCxvdXQ6bSx0cmFuc2Zvcm06KChiLF8pPT57bGV0IGs9YjtyZXR1cm4gbi5jYXNlIT09InNlbnNpdGl2ZSImJihrPWsudG9Mb3dlckNhc2UoKSkscy5oYXMoayk/ITA6aS5oYXMoayk/ITE6KF8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLGV4cGVjdGVkOiJzdHJpbmdib29sIix2YWx1ZXM6Wy4uLnMsLi4uaV0saW5wdXQ6Xy52YWx1ZSxpbnN0OnYsY29udGludWU6ITF9KSx7fSl9KSxyZXZlcnNlVHJhbnNmb3JtOigoYixfKT0+Yj09PSEwP29bMF18fCJ0cnVlIjpyWzBdfHwiZmFsc2UiKSxlcnJvcjpuLmVycm9yfSk7cmV0dXJuIHYuX3pvZC5iYWcudHJ1dGh5PW8sdi5fem9kLmJhZy5mYWxzeT1yLHYuX3pvZC5iYWcuY2FzZT1uLmNhc2U/PyJpbnNlbnNpdGl2ZSIsdn1mdW5jdGlvbiBtdChlLHQsbixvPXt9KXtjb25zdCByPXkobykscz17Y2hlY2s6InN0cmluZ19mb3JtYXQiLHR5cGU6InN0cmluZyIsZm9ybWF0OnQsZm46dHlwZW9mIG49PSJmdW5jdGlvbiI/bjphPT5uLnRlc3QoYSksLi4ucn07cmV0dXJuIG4gaW5zdGFuY2VvZiBSZWdFeHAmJihzLnBhdHRlcm49biksbmV3IGUocyl9Y29uc3QgbGc9KCk9Pih7fSksZGc9KCk9Pih7fSkscGc9KCk9Pih7fSksaGc9KCk9Pih7fSksZmc9KCk9Pih7fSksaGg9KCk9PigpPT4oe30pLGlzPSgpPT4oKT0+KHt9KSxtZz0oKT0+KHt9KSx2ZT0oKT0+KHt9KSxnZz0oKT0+KHt9KSx2Zz0oKT0+KHt9KSxiZz0oKT0+KHt9KSx5Zz0oKT0+KHt9KSxfZz0oKT0+KHt9KSxrZz0oKT0+KHt9KSx3Zz0oKT0+KHt9KSwkZz0oKT0+KHt9KSxTZz0oKT0+KHt9KSx6Zz0oKT0+KHt9KSxUZz0oKT0+KHt9KSxJZz0oKT0+KHt9KSxQZz0oKT0+KHt9KSx4Zz0oKT0+KHt9KSxDZz0oKT0+KHt9KSxFZz0oKT0+KHt9KSxPZz0oKT0+KHt9KSxBZz0oKT0+KHt9KSxSZz0oKT0+KHt9KSxaZz0oKT0+KHt9KSxOZz0oKT0+KHt9KSxqZz0oKT0+KHt9KSxNZz0oKT0+KHt9KSxxZz0oKT0+KHt9KSxEZz0oKT0+KHt9KSxmaD0oKT0+KHt9KSxMZz0oKT0+KHt9KSxVZz0oKT0+KHt9KSxIZz0oKT0+KHt9KSxGZz0oKT0+KHt9KSxCZz0oKT0+KHt9KSxWZz0oKT0+KHt9KSxKZz0oKT0+KHt9KSxLZz0oKT0+KHt9KSxXZz0oKT0+KHt9KSxHZz0oKT0+KHt9KSxRZz0oKT0+KHt9KSxtaD0oKT0+KHt9KSxZZz0oKT0+KHt9KSxSaT0oKT0+KHt9KTtjbGFzcyBYZ3t9Y29uc3QgZXY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLGdoPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkWm9kQW55OkhkLCRab2RBcnJheTpLZCwkWm9kQXN5bmNFcnJvcjpaZSwkWm9kQmFzZTY0OklkLCRab2RCYXNlNjRVUkw6eGQsJFpvZEJpZ0ludDpWcywkWm9kQmlnSW50Rm9ybWF0OnFkLCRab2RCb29sZWFuOkJzLCRab2RDSURSdjQ6JGQsJFpvZENJRFJ2Njp6ZCwkWm9kQ1VJRDpkZCwkWm9kQ1VJRDI6cGQsJFpvZENhdGNoOmdwLCRab2RDaGVjazpKLCRab2RDaGVja0JpZ0ludEZvcm1hdDpabCwkWm9kQ2hlY2tFbmRzV2l0aDpKbCwkWm9kQ2hlY2tHcmVhdGVyVGhhbjpqcywkWm9kQ2hlY2tJbmNsdWRlczpCbCwkWm9kQ2hlY2tMZW5ndGhFcXVhbHM6TGwsJFpvZENoZWNrTGVzc1RoYW46TnMsJFpvZENoZWNrTG93ZXJDYXNlOkhsLCRab2RDaGVja01heExlbmd0aDpxbCwkWm9kQ2hlY2tNYXhTaXplOk5sLCRab2RDaGVja01pbWVUeXBlOkdsLCRab2RDaGVja01pbkxlbmd0aDpEbCwkWm9kQ2hlY2tNaW5TaXplOmpsLCRab2RDaGVja011bHRpcGxlT2Y6QWwsJFpvZENoZWNrTnVtYmVyRm9ybWF0OlJsLCRab2RDaGVja092ZXJ3cml0ZTpRbCwkWm9kQ2hlY2tQcm9wZXJ0aWVzOldsLCRab2RDaGVja1Byb3BlcnR5OktsLCRab2RDaGVja1JlZ2V4OlVsLCRab2RDaGVja1NpemVFcXVhbHM6TWwsJFpvZENoZWNrU3RhcnRzV2l0aDpWbCwkWm9kQ2hlY2tTdHJpbmdGb3JtYXQ6WXQsJFpvZENoZWNrVXBwZXJDYXNlOkZsLCRab2RDb2RlYzpRcywkWm9kQ3JlZGl0Q2FyZDpPZCwkWm9kQ3VzdG9tOiRwLCRab2RDdXN0b21TdHJpbmdGb3JtYXQ6amQsJFpvZEN5Y2xpY0Vycm9yOlNwLCRab2REYXRlOkpkLCRab2REZWZhdWx0OnBwLCRab2REaXNjcmltaW5hdGVkVW5pb246dHAsJFpvZEUxNjQ6Q2QsJFpvZEVtYWlsOm9kLCRab2RFbW9qaTp1ZCwkWm9kRW5jb2RlRXJyb3I6eG8sJFpvZEVudW06aXAsJFpvZEVycm9yOkt1LCRab2RFeGFjdE9wdGlvbmFsOmxwLCRab2RGaWxlOmNwLCRab2RGdW5jdGlvbjprcCwkWm9kR1VJRDp0ZCwkWm9kSUJBTjpSZCwkWm9kSVB2NDpfZCwkWm9kSVB2NjprZCwkWm9kSVNPRGF0ZTp2ZCwkWm9kSVNPRGF0ZVRpbWU6Z2QsJFpvZElTT0R1cmF0aW9uOnlkLCRab2RJU09UaW1lOmJkLCRab2RJbnRlcnNlY3Rpb246bnAsJFpvZEpXVDpOZCwkWm9kS1NVSUQ6bWQsJFpvZExhenk6WXMsJFpvZExpdGVyYWw6YXAsJFpvZE1BQzp3ZCwkWm9kTWFwOnJwLCRab2ROYU46dnAsJFpvZE5hbm9JRDpsZCwkWm9kTmV2ZXI6QmQsJFpvZE5vbk9wdGlvbmFsOmZwLCRab2ROdWxsOlVkLCRab2ROdWxsYWJsZTpkcCwkWm9kTnVtYmVyOkZzLCRab2ROdW1iZXJGb3JtYXQ6TWQsJFpvZE9iamVjdDpRZCwkWm9kT2JqZWN0SklUOllkLCRab2RPcHRpb25hbDpXcywkWm9kUGlwZTpHcywkWm9kUHJlZmF1bHQ6aHAsJFpvZFByZXByb2Nlc3M6YnAsJFpvZFByb21pc2U6d3AsJFpvZFJlYWRvbmx5OnlwLCRab2RSZWFsRXJyb3I6aGUsJFpvZFJlY29yZDpvcCwkWm9kUmVnaXN0cnk6eHAsJFpvZFNldDpzcCwkWm9kU3RyaW5nOlh0LCRab2RTdHJpbmdGb3JtYXQ6SCwkWm9kU3VjY2VzczptcCwkWm9kU3ltYm9sOkRkLCRab2RUZW1wbGF0ZUxpdGVyYWw6X3AsJFpvZFRyYW5zZm9ybTp1cCwkWm9kVHVwbGU6S3MsJFpvZFR5cGU6SSwkWm9kVUxJRDpoZCwkWm9kVVJMOmNkLCRab2RVVUlEOm5kLCRab2RVbmRlZmluZWQ6TGQsJFpvZFVuaW9uOmpvLCRab2RVbmtub3duOkZkLCRab2RWb2lkOlZkLCRab2RYSUQ6ZmQsJFpvZFhvcjpYZCwkYnJhbmQ6X3MsJGNvbnN0cnVjdG9yOnAsJGlucHV0OnRpLCRvdXRwdXQ6ZWksRG9jOllsLElOVkFMSUQ6b2ksSlNPTlNjaGVtYTpldixKU09OU2NoZW1hR2VuZXJhdG9yOlhnLE5FVkVSOnlzLFRpbWVQcmVjaXNpb246eGksVVJMX0JBRF9GT1JNQVQ6cXMsVVJMX1VOUEFSU0VBQkxFOk10LFpvZENvbXBpbGVBc3luY0Vycm9yOnJpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOnNpLF9hbnk6UXAsX2FycmF5OnJoLF9iYXNlNjQ6emksX2Jhc2U2NHVybDpUaSxfYmlnaW50OkZwLF9ib29sZWFuOlVwLF9jYXRjaDpyZyxfY2hlY2s6dWgsX2NpZHJ2NDokaSxfY2lkcnY2OlNpLF9jb2VyY2VkQmlnaW50OkJwLF9jb2VyY2VkQm9vbGVhbjpIcCxfY29lcmNlZERhdGU6bmgsX2NvZXJjZWROdW1iZXI6TnAsX2NvZXJjZWRTdHJpbmc6RXAsX2NyZWRpdENhcmQ6QXAsX2N1aWQ6Z2ksX2N1aWQyOnZpLF9jdXN0b206aWgsX2RhdGU6dGgsX2RlY29kZTpTcyxfZGVjb2RlQXN5bmM6VHMsX2RlZmF1bHQ6dGcsX2Rpc2NyaW1pbmF0ZWRVbmlvbjpIbSxfZTE2NDpJaSxfZW1haWw6Y2ksX2Vtb2ppOmZpLF9lbmNvZGU6JHMsX2VuY29kZUFzeW5jOnpzLF9lbmRzV2l0aDpzbixfZW51bTpXbSxfZmlsZTpzaCxfZmxvYXQzMjpNcCxfZmxvYXQ2NDpxcCxfZ3Q6Q2UsX2d0ZTpwZSxfZ3VpZDp1aSxfaWJhbjpScCxfaW5jbHVkZXM6b24sX2ludDpqcCxfaW50MzI6RHAsX2ludDY0OlZwLF9pbnRlcnNlY3Rpb246Rm0sX2lwdjQ6a2ksX2lwdjY6d2ksX2lzb0RhdGU6RWksX2lzb0RhdGVUaW1lOkNpLF9pc29EdXJhdGlvbjpBaSxfaXNvVGltZTpPaSxfand0OlBpLF9rc3VpZDpfaSxfbGF6eTpjZyxfbGVuZ3RoOmZ0LF9saXRlcmFsOlFtLF9sb3dlcmNhc2U6dG4sX2x0OnhlLF9sdGU6ZGUsX21hYzpPcCxfbWFwOkptLF9tYXg6ZGUsX21heExlbmd0aDpodCxfbWF4U2l6ZTpHZSxfbWltZTpjbixfbWluOnBlLF9taW5MZW5ndGg6amUsX21pblNpemU6RWUsX211bHRpcGxlT2Y6QmUsX25hbjpvaCxfbmFub2lkOm1pLF9uYXRpdmVFbnVtOkdtLF9uZWdhdGl2ZTpIbyxfbmV2ZXI6WHAsX25vbm5lZ2F0aXZlOkJvLF9ub25vcHRpb25hbDpuZyxfbm9ucG9zaXRpdmU6Rm8sX25vcm1hbGl6ZTp1bixfbnVsbDpHcCxfbnVsbGFibGU6ZWcsX251bWJlcjpacCxfb3B0aW9uYWw6WG0sX292ZXJ3cml0ZTokZSxfcGFyc2U6VnQsX3BhcnNlQXN5bmM6SnQsX3BpcGU6c2csX3Bvc2l0aXZlOlVvLF9wcm9taXNlOnVnLF9wcm9wZXJ0aWVzOmFuLF9wcm9wZXJ0eTpWbyxfcmVhZG9ubHk6aWcsX3JlY29yZDpWbSxfcmVmaW5lOmFoLF9yZWdleDplbixfc2FmZURlY29kZTpQcyxfc2FmZURlY29kZUFzeW5jOkNzLF9zYWZlRW5jb2RlOklzLF9zYWZlRW5jb2RlQXN5bmM6eHMsX3NhZmVQYXJzZTpLdCxfc2FmZVBhcnNlQXN5bmM6V3QsX3NldDpLbSxfc2l6ZTpwdCxfc2x1Z2lmeTpobixfc3RhcnRzV2l0aDpybixfc3RyaW5nOkNwLF9zdHJpbmdGb3JtYXQ6bXQsX3N0cmluZ2Jvb2w6cGgsX3N1Y2Nlc3M6b2csX3N1cGVyUmVmaW5lOmNoLF9zeW1ib2w6S3AsX3RlbXBsYXRlTGl0ZXJhbDphZyxfdG9Mb3dlckNhc2U6ZG4sX3RvVXBwZXJDYXNlOnBuLF90cmFuc2Zvcm06WW0sX3RyaW06bG4sX3R1cGxlOkJtLF91aW50MzI6THAsX3VpbnQ2NDpKcCxfdWxpZDpiaSxfdW5kZWZpbmVkOldwLF91bmlvbjpMbSxfdW5rbm93bjpZcCxfdXBwZXJjYXNlOm5uLF91cmw6TG8sX3V1aWQ6bGksX3V1aWR2NDpkaSxfdXVpZHY2OnBpLF91dWlkdjc6aGksX3ZvaWQ6ZWgsX3hpZDp5aSxfeG9yOlVtLGJhc2U2NENoYXJzZXQ6VGQsYmFzZTY0dXJsQ2hhcnNldDpIcyxjYW5QYXJzZVVSTDpEcyxjbG9uZTpLLGNvbXBpbGU6aWksY29tcGlsZUZuOkRtLGNvbmZpZzpHLGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZDppcyxjcmVhdGVUb0pTT05TY2hlbWFNZXRob2Q6aGgsZGVjb2RlOkpmLGRlY29kZUFzeW5jOldmLGRlc2NyaWJlOmxoLGVuY29kZTpWZixlbmNvZGVBc3luYzpLZixleHRyYWN0RGVmczpoZyxmaW5hbGl6ZTpmZyxmbGF0dGVuRXJyb3I6Q28sZm9ybWF0RXJyb3I6RW8sZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpKcyxnbG9iYWxDb25maWc6aWUsZ2xvYmFsUmVnaXN0cnk6Z2UsaGFuZGxlVW5yZXByZXNlbnRhYmxlOmRnLGluaXRpYWxpemVDb250ZXh0OmxnLGlzQmFja0VkZ2U6SXAsaXNSZWN1cnNpdmVTY2hlbWE6Tm0saXNWYWxpZEJhc2U2NDpVcyxpc1ZhbGlkQmFzZTY0VVJMOlBkLGlzVmFsaWRDSURSdjY6U2QsaXNWYWxpZENyZWRpdENhcmQ6RWQsaXNWYWxpZElCQU46QWQsaXNWYWxpZElQdjY6THMsaXNWYWxpZEpXVDpaZCxsb2NhbGVzOlhzLG1lbW9pemVyOk1vLG1lcmdlVmFsdWVzOmhvLG1ldGE6ZGgscGFyc2U6ZXMscGFyc2VBc3luYzp0cyxwYXJzZVVSTE9iamVjdDpzZCxwcmV0dGlmeUVycm9yOndzLHByb2Nlc3M6bWcscHJvY2Vzc1NjaGVtYTpwZyxyZWdleGVzOk5vLHJlZ2lzdHJ5OnFvLHNhZmVEZWNvZGU6UWYsc2FmZURlY29kZUFzeW5jOlhmLHNhZmVFbmNvZGU6R2Ysc2FmZUVuY29kZUFzeW5jOllmLHNhZmVQYXJzZTpHdSxzYWZlUGFyc2VBc3luYzpVZixzdGFuZGFyZFByb3BzOk1zLHN0cmlwVGFiQW5kTmV3bGluZTpvcyx0b0RvdFBhdGg6V3UsdG9KU09OU2NoZW1hOlJpLHRvWm9kOmtvLHRyZWVpZnlFcnJvcjprcyx1cmxIb3N0bmFtZU9rOmlkLHVybFByb3RvY29sT2s6YWQsdXRpbDpicyx2YWxpZGF0ZTpBbyx2YWxpZGF0ZUFzeW5jOlJvLHZhbGlkYXRlVVJMOnJkLHZlcnNpb246WGwsd2l0aFBhcnNlcjphaX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxldT1TeW1ib2woInoudmlzaXQvcmVzb2x2aW5nIik7ZnVuY3Rpb24gWmkoZSx0KXtjb25zdCBuPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6KGksYSk9Pntjb25zdCBsPXRbaS5fem9kLmRlZi50eXBlXTtyZXR1cm4gbD9sKGksYSk6aX0sbz1uZXcgTWFwO2Z1bmN0aW9uIHIoaSl7Y29uc3QgYT1vLmdldChpKTtpZihhPT09ZXUpcmV0dXJuIG5ldyBZcyh7dHlwZToibGF6eSIsZ2V0dGVyOigpPT5vLmdldChpKX0pO2lmKGEhPT12b2lkIDApcmV0dXJuIGE7by5zZXQoaSxldSk7Y29uc3QgbD1zKGkpLHU9bihsLGwhPT1pKTtyZXR1cm4gby5zZXQoaSx1KSx1fWZ1bmN0aW9uIHMoaSl7Y29uc3QgYT1pLl96b2QuZGVmO3N3aXRjaChhLnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgdT1hLnNoYXBlLGQ9T2JqZWN0LmtleXModSk7bGV0IG09ITE7Y29uc3Qgdj17fTtmb3IoY29uc3QgXyBvZiBkKXtjb25zdCBrPXIodVtfXSk7ayE9PXVbX10mJihtPSEwKSx2W19dPWt9bGV0IGI9YS5jYXRjaGFsbDtyZXR1cm4gYS5jYXRjaGFsbCYmKGI9cihhLmNhdGNoYWxsKSxiIT09YS5jYXRjaGFsbCYmKG09ITApKSxtP0soaSx7Li4uYSxzaGFwZTp2LGNhdGNoYWxsOmJ9KTppfWNhc2UiYXJyYXkiOntjb25zdCB1PXIoYS5lbGVtZW50KTtyZXR1cm4gdT09PWEuZWxlbWVudD9pOksoaSx7Li4uYSxlbGVtZW50OnV9KX1jYXNlInR1cGxlIjp7Y29uc3QgdT1hLml0ZW1zO2xldCBkPSExO2NvbnN0IG09W107Zm9yKGNvbnN0IGIgb2YgdSl7Y29uc3QgXz1yKGIpO18hPT1iJiYoZD0hMCksbS5wdXNoKF8pfWxldCB2PWEucmVzdDtyZXR1cm4gYS5yZXN0JiYodj1yKGEucmVzdCksdiE9PWEucmVzdCYmKGQ9ITApKSxkP0soaSx7Li4uYSxpdGVtczptLHJlc3Q6dn0pOml9Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjp7Y29uc3QgdT1yKGEua2V5VHlwZSksZD1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEua2V5VHlwZSYmZD09PWEudmFsdWVUeXBlP2k6SyhpLHsuLi5hLGtleVR5cGU6dSx2YWx1ZVR5cGU6ZH0pfWNhc2Uic2V0Ijp7Y29uc3QgdT1yKGEudmFsdWVUeXBlKTtyZXR1cm4gdT09PWEudmFsdWVUeXBlP2k6SyhpLHsuLi5hLHZhbHVlVHlwZTp1fSl9Y2FzZSJ1bmlvbiI6e2NvbnN0IHU9YS5vcHRpb25zO2xldCBkPSExO2NvbnN0IG09W107Zm9yKGNvbnN0IHYgb2YgdSl7Y29uc3QgYj1yKHYpO2IhPT12JiYoZD0hMCksbS5wdXNoKGIpfXJldHVybiBkP0soaSx7Li4uYSxvcHRpb25zOm19KTppfWNhc2UiaW50ZXJzZWN0aW9uIjp7Y29uc3QgdT1yKGEubGVmdCksZD1yKGEucmlnaHQpO3JldHVybiB1PT09YS5sZWZ0JiZkPT09YS5yaWdodD9pOksoaSx7Li4uYSxsZWZ0OnUscmlnaHQ6ZH0pfWNhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOntjb25zdCB1PXIoYS5pbm5lclR5cGUpO3JldHVybiB1PT09YS5pbm5lclR5cGU/aTpLKGksey4uLmEsaW5uZXJUeXBlOnV9KX1jYXNlInBpcGUiOntjb25zdCB1PXIoYS5pbiksZD1yKGEub3V0KTtyZXR1cm4gdT09PWEuaW4mJmQ9PT1hLm91dD9pOksoaSx7Li4uYSxpbjp1LG91dDpkfSl9Y2FzZSJmdW5jdGlvbiI6e2NvbnN0IHU9cihhLmlucHV0KSxkPXIoYS5vdXRwdXQpO3JldHVybiB1PT09YS5pbnB1dCYmZD09PWEub3V0cHV0P2k6SyhpLHsuLi5hLGlucHV0OnUsb3V0cHV0OmR9KX1jYXNlImxhenkiOntjb25zdCB1PWEuZ2V0dGVyLHtfY2FjaGVkSW5uZXI6ZCwuLi5tfT1hO3JldHVybiBLKGksey4uLm0sZ2V0dGVyOigpPT5yKHUoKSl9KX1jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6cmV0dXJuIGk7ZGVmYXVsdDpyZXR1cm4gaX19cmV0dXJuIHIoZSl9ZnVuY3Rpb24gTmkoZSl7cmV0dXJuISFlLl96b2R9ZnVuY3Rpb24gdmgoZSx0KXtyZXR1cm4gTmkoZSk/R3UoZSx0KTplLnNhZmVQYXJzZSh0KX1mdW5jdGlvbiB0dihlKXtpZighZSlyZXR1cm47bGV0IHQ7aWYoTmkoZSk/dD1lLl96b2Q/LmRlZj8uc2hhcGU6dD1lLnNoYXBlLCEhdCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiB0KCl9Y2F0Y2h7cmV0dXJufXJldHVybiB0fX1mdW5jdGlvbiBudihlKXtpZihOaShlKSl7Y29uc3Qgcz1lLl96b2Q/LmRlZjtpZihzKXtpZihzLnZhbHVlIT09dm9pZCAwKXJldHVybiBzLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocy52YWx1ZXMpJiZzLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gcy52YWx1ZXNbMF19fWNvbnN0IG49ZS5fZGVmO2lmKG4pe2lmKG4udmFsdWUhPT12b2lkIDApcmV0dXJuIG4udmFsdWU7aWYoQXJyYXkuaXNBcnJheShuLnZhbHVlcykmJm4udmFsdWVzLmxlbmd0aD4wKXJldHVybiBuLnZhbHVlc1swXX1jb25zdCBvPWUudmFsdWU7aWYobyE9PXZvaWQgMClyZXR1cm4gb31jb25zdCBvdj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW5kc1dpdGg6c24sZ3Q6Q2UsZ3RlOnBlLGluY2x1ZGVzOm9uLGxlbmd0aDpmdCxsb3dlcmNhc2U6dG4sbHQ6eGUsbHRlOmRlLG1heExlbmd0aDpodCxtYXhTaXplOkdlLG1pbWU6Y24sbWluTGVuZ3RoOmplLG1pblNpemU6RWUsbXVsdGlwbGVPZjpCZSxuZWdhdGl2ZTpIbyxub25uZWdhdGl2ZTpCbyxub25wb3NpdGl2ZTpGbyxub3JtYWxpemU6dW4sb3ZlcndyaXRlOiRlLHBvc2l0aXZlOlVvLHByb3BlcnRpZXM6YW4scHJvcGVydHk6Vm8scmVnZXg6ZW4sc2l6ZTpwdCxzbHVnaWZ5OmhuLHN0YXJ0c1dpdGg6cm4sdG9Mb3dlckNhc2U6ZG4sdG9VcHBlckNhc2U6cG4sdHJpbTpsbix1cHBlcmNhc2U6bm59LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksdHU9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSk7ZnVuY3Rpb24gb28oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89bih0aGlzKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KX1jb25zdCBiaD0oZSx0KT0+e0t1LmluaXQoZSx0KSxlLm5hbWU9IlpvZEVycm9yIjtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTt0dS5oYXMobil8fCh0dS5hZGQobiksb28obiwiZm9ybWF0IixvPT5yPT5FbyhvLHIpKSxvbyhuLCJmbGF0dGVuIixvPT5yPT5DbyhvLHIpKSxvbyhuLCJhZGRJc3N1ZSIsbz0+cj0+e28uaXNzdWVzLnB1c2gociksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLGFvLDIpfSksb28obiwiYWRkSXNzdWVzIixvPT5yPT57by5pc3N1ZXMucHVzaCguLi5yKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsYW8sMil9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiaXNFbXB0eSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGg9PT0wfX0pKX0seWg9cCgiWm9kRXJyb3IiLGJoKSx1ZT1wKCJab2RFcnJvciIsYmgsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KSxqaT1WdCh1ZSksTWk9SnQodWUpLHFpPUt0KHVlKSxEaT1XdCh1ZSksTGk9JHModWUpLFVpPVNzKHVlKSxIaT16cyh1ZSksRmk9VHModWUpLEJpPUlzKHVlKSxWaT1Qcyh1ZSksSmk9eHModWUpLEtpPUNzKHVlKTtmdW5jdGlvbiBydigpe2llLmxvY2FsZUVycm9yfHxHKFBwKCkpfWZ1bmN0aW9uIFFlKCl7aWUubWVtb2l6ZXJ8fEcoe21lbW9pemVyOk1vKCl9KX1jb25zdCB4PXAoIlpvZFR5cGUiLChlLHQpPT4ocnYoKSxJLmluaXQoZSx0KSxlLmRlZj10LGUudHlwZT10LnR5cGUsZSkse2NoZWNrKC4uLmUpe2NvbnN0IHQ9dGhpcy5kZWY7cmV0dXJuIHRoaXMuY2xvbmUocmUodCx7Y2hlY2tzOlsuLi50LmNoZWNrcz8/W10sLi4uZS5tYXAobj0+dHlwZW9mIG49PSJmdW5jdGlvbiI/e196b2Q6e2NoZWNrOm4sZGVmOntjaGVjazoiY3VzdG9tIn0sb25hdHRhY2g6W119fTpuKV19KSx7cGFyZW50OiEwfSl9LHdpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soLi4uZSl9LGNsb25lKGUsdCl7cmV0dXJuIEsodGhpcyxlLHQpfSxicmFuZCgpe3JldHVybiB0aGlzfSxyZWdpc3RlcihlLHQpe3JldHVybiBlLmFkZCh0aGlzLHQpLHRoaXN9LHJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKFJyKGUsdCkpfSxzdXBlclJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKFpyKGUsdCkpfSxvdmVyd3JpdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2soJGUoZSkpfSxvcHRpb25hbCgpe3JldHVybiBCKHRoaXMpfSxleGFjdE9wdGlvbmFsKCl7cmV0dXJuIGZyKHRoaXMpfSxudWxsYWJsZSgpe3JldHVybiBjdCh0aGlzKX0sbnVsbGlzaCgpe3JldHVybiBCKGN0KHRoaXMpKX0sbm9ub3B0aW9uYWwoZSl7cmV0dXJuIF9yKHRoaXMsZSl9LGFycmF5KCl7cmV0dXJuIFQodGhpcyl9LG9yKGUpe3JldHVybiBDKFt0aGlzLGVdKX0sYW5kKGUpe3JldHVybiBJdCh0aGlzLGUpfSx0cmFuc2Zvcm0oZSl7cmV0dXJuIER0KHRoaXMsam4oZSkpfSxkZWZhdWx0KGUpe3JldHVybiB2cih0aGlzLGUpfSxwcmVmYXVsdChlKXtyZXR1cm4geXIodGhpcyxlKX0sY2F0Y2goZSl7cmV0dXJuICRyKHRoaXMsZSl9LHBpcGUoZSl7cmV0dXJuIER0KHRoaXMsZSl9LHJlYWRvbmx5KCl7cmV0dXJuIElyKHRoaXMpfSxkZXNjcmliZShlKXtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gZ2UuYWRkKHQse2Rlc2NyaXB0aW9uOmV9KSx0fSxtZXRhKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4gZ2UuZ2V0KHRoaXMpO2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiBnZS5hZGQodCxlWzBdKSx0fSxpc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc30saXNOdWxsYWJsZSgpe3JldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzfSxhcHBseShlLC4uLnQpe3JldHVybiB0Lmxlbmd0aD09PTA/ZSh0aGlzKTplKHRoaXMsLi4udCl9LGdldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIFBvKHRoaXMsIn5zdGFuZGFyZCIsey4uLk1zKHRoaXMpLGpzb25TY2hlbWE6e2lucHV0OmlzKCksb3V0cHV0OmlzKCl9fSl9LHNldCJ+c3RhbmRhcmQiKGUpe1BlKHRoaXMsIn5zdGFuZGFyZCIsZSl9LHBhcnNlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gamkodGhpcyx0LG4se2NhbGxlZTplfSl9LHBhcnNlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBNaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZVBhcnNlKGUsdCl7cmV0dXJuIHFpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZVBhcnNlQXN5bmMoZSx0KXtyZXR1cm4gRGkodGhpcyxlLHQpfSxnZXQgc3BhKCl7cmV0dXJuIHRoaXM/LnNhZmVQYXJzZUFzeW5jfSxzZXQgc3BhKGUpe1BlKHRoaXMsInNwYSIsZSl9LHZhbGlkYXRlKGUsdCl7cmV0dXJuIEFvKHRoaXMsZSx0KX0sdmFsaWRhdGVBc3luYyhlLHQpe3JldHVybiBSbyh0aGlzLGUsdCl9LGVuY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIExpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBVaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZW5jb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBIaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBGaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZUVuY29kZShlLHQpe3JldHVybiBCaSh0aGlzLGUsdCl9LHNhZmVEZWNvZGUoZSx0KXtyZXR1cm4gVmkodGhpcyxlLHQpfSxhc3luYyBzYWZlRW5jb2RlQXN5bmMoZSx0KXtyZXR1cm4gSmkodGhpcyxlLHQpfSxhc3luYyBzYWZlRGVjb2RlQXN5bmMoZSx0KXtyZXR1cm4gS2kodGhpcyxlLHQpfSx0b0pTT05TY2hlbWEoZSl7cmV0dXJuIGhoKCkoZSl9LGdldCBkZXNjcmlwdGlvbigpe3JldHVybiBnZS5nZXQodGhpcyk/LmRlc2NyaXB0aW9ufSxnZXQgX2RlZigpe3JldHVybiB0aGlzLl96b2QuZGVmfX0pLGZuPXAoIl9ab2RTdHJpbmciLChlLHQpPT57WHQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5nZygpfSxCdCh7Zm9ybWF0OmU9PnZlKCkuZm9ybWF0Pz9udWxsLG1pbkxlbmd0aDplPT52ZSgpLm1pbmltdW0/P251bGwsbWF4TGVuZ3RoOmU9PnZlKCkubWF4aW11bT8/bnVsbH0se3JlZ2V4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKGVuKC4uLmUpKX0saW5jbHVkZXMoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sob24oLi4uZSkpfSxzdGFydHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHJuKC4uLmUpKX0sZW5kc1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soc24oLi4uZSkpfSxtaW4oLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soamUoLi4uZSkpfSxtYXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soaHQoLi4uZSkpfSxsZW5ndGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soZnQoLi4uZSkpfSxub25lbXB0eSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhqZSgxLC4uLmUpKX0sbG93ZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKHRuKGUpKX0sdXBwZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKG5uKGUpKX0sdHJpbSgpe3JldHVybiB0aGlzLmNoZWNrKGxuKCkpfSxub3JtYWxpemUoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sodW4oLi4uZSkpfSx0b0xvd2VyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKGRuKCkpfSx0b1VwcGVyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKHBuKCkpfSxzbHVnaWZ5KCl7cmV0dXJuIHRoaXMuY2hlY2soaG4oKSl9fSkpLGd0PXAoIlpvZFN0cmluZyIsKGUsdCk9PntYdC5pbml0KGUsdCksZm4uaW5pdChlLHQpfSx7ZW1haWwoZSl7cmV0dXJuIHRoaXMuY2hlY2soY2kobW4sZSkpfSx1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soTG8oa3QsZSkpfSxqd3QoZSl7cmV0dXJuIHRoaXMuY2hlY2soUGkoRW4sZSkpfSxlbW9qaShlKXtyZXR1cm4gdGhpcy5jaGVjayhmaSh2bixlKSl9LGd1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2sodWkoZ24sZSkpfSx1dWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKGxpKGtlLGUpKX0sdXVpZHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKGRpKGtlLGUpKX0sdXVpZHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKHBpKGtlLGUpKX0sdXVpZHY3KGUpe3JldHVybiB0aGlzLmNoZWNrKGhpKGtlLGUpKX0sbmFub2lkKGUpe3JldHVybiB0aGlzLmNoZWNrKG1pKGJuLGUpKX0sY3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhnaSh5bixlKSl9LGN1aWQyKGUpe3JldHVybiB0aGlzLmNoZWNrKHZpKF9uLGUpKX0sdWxpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhiaShrbixlKSl9LGJhc2U2NChlKXtyZXR1cm4gdGhpcy5jaGVjayh6aShQbixlKSl9LGJhc2U2NHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayhUaSh4bixlKSl9LHhpZChlKXtyZXR1cm4gdGhpcy5jaGVjayh5aSh3bixlKSl9LGtzdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKF9pKCRuLGUpKX0saXB2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhraShTbixlKSl9LGlwdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2sod2koem4sZSkpfSxjaWRydjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soJGkoVG4sZSkpfSxjaWRydjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soU2koSW4sZSkpfSxlMTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKElpKENuLGUpKX0sZGF0ZXRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soQ2kodnQsZSkpfSxkYXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKEVpKGJ0LGUpKX0sdGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayhPaSh5dCxlKSl9LGR1cmF0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrKEFpKF90LGUpKX19KTtmdW5jdGlvbiBoKGUpe3JldHVybiBDcChndCxlKX1jb25zdCBMPXAoIlpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntILmluaXQoZSx0KSxmbi5pbml0KGUsdCl9KSx2dD1wKCJab2RJU09EYXRlVGltZSIsKGUsdCk9PntnZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KSxidD1wKCJab2RJU09EYXRlIiwoZSx0KT0+e3ZkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pLHl0PXAoIlpvZElTT1RpbWUiLChlLHQpPT57YmQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSksX3Q9cCgiWm9kSVNPRHVyYXRpb24iLChlLHQpPT57eWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSksbW49cCgiWm9kRW1haWwiLChlLHQpPT57b2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gV2koZSl7cmV0dXJuIGNpKG1uLGUpfWNvbnN0IGduPXAoIlpvZEdVSUQiLChlLHQpPT57dGQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gR2koZSl7cmV0dXJuIHVpKGduLGUpfWNvbnN0IGtlPXAoIlpvZFVVSUQiLChlLHQpPT57bmQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gUWkoZSl7cmV0dXJuIGxpKGtlLGUpfWZ1bmN0aW9uIFlpKGUpe3JldHVybiBkaShrZSxlKX1mdW5jdGlvbiBYaShlKXtyZXR1cm4gcGkoa2UsZSl9ZnVuY3Rpb24gZWEoZSl7cmV0dXJuIGhpKGtlLGUpfWNvbnN0IGt0PXAoIlpvZFVSTCIsKGUsdCk9PntjZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiB0YShlKXtyZXR1cm4gTG8oa3QsZSl9ZnVuY3Rpb24gbmEoZSl7cmV0dXJuIExvKGt0LHtwcm90b2NvbDpFcyxob3N0bmFtZTpnbCwuLi55KGUpfSl9Y29uc3Qgdm49cCgiWm9kRW1vamkiLChlLHQpPT57dWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gb2EoZSl7cmV0dXJuIGZpKHZuLGUpfWNvbnN0IGJuPXAoIlpvZE5hbm9JRCIsKGUsdCk9PntsZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiByYShlKXtyZXR1cm4gbWkoYm4sZSl9Y29uc3QgeW49cCgiWm9kQ1VJRCIsKGUsdCk9PntkZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBzYShlKXtyZXR1cm4gZ2koeW4sZSl9Y29uc3QgX249cCgiWm9kQ1VJRDIiLChlLHQpPT57cGQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gaWEoZSl7cmV0dXJuIHZpKF9uLGUpfWNvbnN0IGtuPXAoIlpvZFVMSUQiLChlLHQpPT57aGQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gYWEoZSl7cmV0dXJuIGJpKGtuLGUpfWNvbnN0IHduPXAoIlpvZFhJRCIsKGUsdCk9PntmZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBjYShlKXtyZXR1cm4geWkod24sZSl9Y29uc3QgJG49cCgiWm9kS1NVSUQiLChlLHQpPT57bWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIF9pKCRuLGUpfWNvbnN0IFNuPXAoIlpvZElQdjQiLChlLHQpPT57X2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gbGEoZSl7cmV0dXJuIGtpKFNuLGUpfWNvbnN0IEpvPXAoIlpvZE1BQyIsKGUsdCk9Pnt3ZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBkYShlKXtyZXR1cm4gT3AoSm8sZSl9Y29uc3Qgem49cCgiWm9kSVB2NiIsKGUsdCk9PntrZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBwYShlKXtyZXR1cm4gd2koem4sZSl9Y29uc3QgVG49cCgiWm9kQ0lEUnY0IiwoZSx0KT0+eyRkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGhhKGUpe3JldHVybiAkaShUbixlKX1jb25zdCBJbj1wKCJab2RDSURSdjYiLChlLHQpPT57emQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gZmEoZSl7cmV0dXJuIFNpKEluLGUpfWNvbnN0IFBuPXAoIlpvZEJhc2U2NCIsKGUsdCk9PntJZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBtYShlKXtyZXR1cm4gemkoUG4sZSl9Y29uc3QgeG49cCgiWm9kQmFzZTY0VVJMIiwoZSx0KT0+e3hkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGdhKGUpe3JldHVybiBUaSh4bixlKX1jb25zdCBDbj1wKCJab2RFMTY0IiwoZSx0KT0+e0NkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHZhKGUpe3JldHVybiBJaShDbixlKX1jb25zdCBLbz1wKCJab2RDcmVkaXRDYXJkIiwoZSx0KT0+e09kLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGJhKGUpe3JldHVybiBBcChLbyxlKX1jb25zdCBXbz1wKCJab2RJQkFOIiwoZSx0KT0+e1JkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHlhKGUpe3JldHVybiBScChXbyxlKX1jb25zdCBFbj1wKCJab2RKV1QiLChlLHQpPT57TmQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gX2EoZSl7cmV0dXJuIFBpKEVuLGUpfWNvbnN0IE1lPXAoIlpvZEN1c3RvbVN0cmluZ0Zvcm1hdCIsKGUsdCk9PntqZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBrYShlLHQsbj17fSl7cmV0dXJuIG10KE1lLGUsdCxuKX1mdW5jdGlvbiB3YShlKXtyZXR1cm4gbXQoTWUsImhvc3RuYW1lIixtbCxlKX1mdW5jdGlvbiAkYShlKXtyZXR1cm4gbXQoTWUsImhleCIsT2wsZSl9ZnVuY3Rpb24gU2EoZSl7cmV0dXJuIG10KE1lLCJjdXJyZW5jeV9jb2RlIixibCxlKX1mdW5jdGlvbiB6YShlLHQpe2NvbnN0IG49dD8uZW5jPz8iaGV4IixvPWAke2V9XyR7bn1gLHI9Tm9bb107aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmb3JtYXQ6ICR7b31gKTtyZXR1cm4gbXQoTWUsbyxyLHQpfWNvbnN0IHd0PXAoIlpvZE51bWJlciIsKGUsdCk9PntGcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnZnKCksZS5pc0Zpbml0ZT0hMH0sQnQoe21pblZhbHVlOmU9Pntjb25zdHttaW5pbXVtOnQsZXhjbHVzaXZlTWluaW11bTpufT12ZSgpO3JldHVybiBNYXRoLm1heCh0Pz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKX0sbWF4VmFsdWU6ZT0+e2NvbnN0e21heGltdW06dCxleGNsdXNpdmVNYXhpbXVtOm59PXZlKCk7cmV0dXJuIE1hdGgubWluKHQ/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfSxpc0ludDplPT57Y29uc3R7aXNJbnQ6dCxtdWx0aXBsZU9mOm59PXZlKCk7cmV0dXJuISF0fHwhIW4/LnNvbWUoTnVtYmVyLmlzU2FmZUludGVnZXIpfSxmb3JtYXQ6ZT0+dmUoKS5mb3JtYXQ/P251bGx9LHtndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKENlKGUsdCkpfSxndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhwZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socGUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soeGUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGRlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhkZShlLHQpKX0saW50KGUpe3JldHVybiB0aGlzLmNoZWNrKHF0KGUpKX0sc2FmZShlKXtyZXR1cm4gdGhpcy5jaGVjayhxdChlKSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKENlKDAsZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhwZSgwLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soeGUoMCxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKGRlKDAsZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soQmUoZSx0KSl9LHN0ZXAoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhCZShlLHQpKX0sZmluaXRlKCl7cmV0dXJuIHRoaXN9fSkpO2Z1bmN0aW9uIFAoZSl7cmV0dXJuIFpwKHd0LGUpfWNvbnN0IHFlPXAoIlpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntNZC5pbml0KGUsdCksd3QuaW5pdChlLHQpfSk7ZnVuY3Rpb24gcXQoZSl7cmV0dXJuIGpwKHFlLGUpfWZ1bmN0aW9uIFRhKGUpe3JldHVybiBNcChxZSxlKX1mdW5jdGlvbiBJYShlKXtyZXR1cm4gcXAocWUsZSl9ZnVuY3Rpb24gUGEoZSl7cmV0dXJuIERwKHFlLGUpfWZ1bmN0aW9uIHhhKGUpe3JldHVybiBMcChxZSxlKX1jb25zdCAkdD1wKCJab2RCb29sZWFuIiwoZSx0KT0+e0JzLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+YmcoKX0pO2Z1bmN0aW9uIEQoZSl7cmV0dXJuIFVwKCR0LGUpfWNvbnN0IFN0PXAoIlpvZEJpZ0ludCIsKGUsdCk9PntWcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnlnKCl9LEJ0KHttaW5WYWx1ZTplPT52ZSgpLm1pbmltdW0/P251bGwsbWF4VmFsdWU6ZT0+dmUoKS5tYXhpbXVtPz9udWxsLGZvcm1hdDplPT52ZSgpLmZvcm1hdD8/bnVsbH0se2d0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHBlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhwZShlLHQpKX0sZ3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhDZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh4ZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soZGUoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKGRlKGUsdCkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhDZShCaWdJbnQoMCksZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayh4ZShCaWdJbnQoMCksZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhkZShCaWdJbnQoMCksZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhwZShCaWdJbnQoMCksZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soQmUoZSx0KSl9fSkpO2Z1bmN0aW9uIENhKGUpe3JldHVybiBGcChTdCxlKX1jb25zdCBPbj1wKCJab2RCaWdJbnRGb3JtYXQiLChlLHQpPT57cWQuaW5pdChlLHQpLFN0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIEVhKGUpe3JldHVybiBWcChPbixlKX1mdW5jdGlvbiBPYShlKXtyZXR1cm4gSnAoT24sZSl9Y29uc3QgR289cCgiWm9kU3ltYm9sIiwoZSx0KT0+e0RkLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+X2coKX0pO2Z1bmN0aW9uIEFhKGUpe3JldHVybiBLcChHbyxlKX1jb25zdCBRbz1wKCJab2RVbmRlZmluZWQiLChlLHQpPT57TGQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT53ZygpfSk7ZnVuY3Rpb24gYXQoZSl7cmV0dXJuIFdwKFFvLGUpfWNvbnN0IFlvPXAoIlpvZE51bGwiLChlLHQpPT57VWQuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5rZygpfSk7ZnVuY3Rpb24gQW4oZSl7cmV0dXJuIEdwKFlvLGUpfWNvbnN0IFhvPXAoIlpvZEFueSIsKGUsdCk9PntIZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnpnKCl9KTtmdW5jdGlvbiBSbigpe3JldHVybiBRcChYbyl9Y29uc3QgZXI9cCgiWm9kVW5rbm93biIsKGUsdCk9PntGZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlRnKCl9KTtmdW5jdGlvbiBqKCl7cmV0dXJuIFlwKGVyKX1jb25zdCB0cj1wKCJab2ROZXZlciIsKGUsdCk9PntCZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlNnKCl9KTtmdW5jdGlvbiBWZShlKXtyZXR1cm4gWHAodHIsZSl9Y29uc3QgbnI9cCgiWm9kVm9pZCIsKGUsdCk9PntWZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PiRnKCl9KTtmdW5jdGlvbiBSYShlKXtyZXR1cm4gZWgobnIsZSl9Y29uc3QgWm49cCgiWm9kRGF0ZSIsKGUsdCk9PntKZC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PklnKCksZS5taW49KG4sbyk9PmUuY2hlY2socGUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2soZGUobixvKSl9LEJ0KHttaW5EYXRlOmU9Pntjb25zdHttaW5pbXVtOnR9PXZlKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH0sbWF4RGF0ZTplPT57Y29uc3R7bWF4aW11bTp0fT12ZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9fSx7fSkpO2Z1bmN0aW9uIFphKGUpe3JldHVybiB0aChabixlKX1jb25zdCBvcj1wKCJab2RBcnJheSIsKGUsdCk9PntRZSgpLEtkLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cWcoKSxlLmVsZW1lbnQ9dC5lbGVtZW50fSx7bWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soamUoZSx0KSl9LG5vbmVtcHR5KGUpe3JldHVybiB0aGlzLmNoZWNrKGplKDEsZSkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhodChlLHQpKX0sbGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soZnQoZSx0KSl9LHVud3JhcCgpe3JldHVybiB0aGlzLmVsZW1lbnR9fSk7ZnVuY3Rpb24gVChlLHQpe3JldHVybiByaChvcixlLHQpfWZ1bmN0aW9uIE5hKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZi5zaGFwZTtyZXR1cm4gdGUoT2JqZWN0LmtleXModCkpfWNvbnN0IHp0PXAoIlpvZE9iamVjdCIsKGUsdCk9PntRZSgpLFlkLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RGcoKSxCdShlLCJzaGFwZSIsbj0+bi5fem9kLmRlZi5zaGFwZSwhMSl9LHtrZXlvZigpe3JldHVybiB0ZShPYmplY3Qua2V5cyh0aGlzLl96b2QuZGVmLnNoYXBlKSl9LGNhdGNoYWxsKGUpe3JldHVybiB0aGlzLmNsb25lKHJlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOmV9KSl9LHBhc3N0aHJvdWdoKCl7cmV0dXJuIHRoaXMuY2xvbmUocmUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6aigpfSkpfSxsb29zZSgpe3JldHVybiB0aGlzLmNsb25lKHJlKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOmooKX0pKX0sc3RyaWN0KCl7cmV0dXJuIHRoaXMuY2xvbmUocmUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6VmUoKX0pKX0sc3RyaXAoKXtyZXR1cm4gdGhpcy5jbG9uZShyZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDp2b2lkIDB9KSl9LGV4dGVuZChlKXtyZXR1cm4gWnUodGhpcyxlKX0sc2FmZUV4dGVuZChlKXtyZXR1cm4ganUodGhpcyxlKX0sbWVyZ2UoZSl7cmV0dXJuIE11KHRoaXMsZSl9LHBpY2soZSl7cmV0dXJuIEF1KHRoaXMsZSl9LG9taXQoZSl7cmV0dXJuIFJ1KHRoaXMsZSl9LHBhcnRpYWwoLi4uZSl7cmV0dXJuIFlyKFB0LHRoaXMsZVswXSl9LGV4YWN0UGFydGlhbCguLi5lKXtyZXR1cm4gWXIoTW4sdGhpcyxlWzBdLCJleGFjdFBhcnRpYWwiKX0scmVxdWlyZWQoLi4uZSl7cmV0dXJuIHF1KHFuLHRoaXMsZVswXSl9fSk7ZnVuY3Rpb24gZyhlLHQpe2NvbnN0IG49e3R5cGU6Im9iamVjdCIsc2hhcGU6ZT8/e30sLi4ueSh0KX07cmV0dXJuIG5ldyB6dChuKX1mdW5jdGlvbiBqYShlLHQpe3JldHVybiBuZXcgenQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpWZSgpLC4uLnkodCl9KX1mdW5jdGlvbiBYKGUsdCl7cmV0dXJuIG5ldyB6dCh7dHlwZToib2JqZWN0IixzaGFwZTplLGNhdGNoYWxsOmooKSwuLi55KHQpfSl9Y29uc3QgVHQ9cCgiWm9kVW5pb24iLChlLHQpPT57am8uaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5maCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBDKGUsdCl7cmV0dXJuIG5ldyBUdCh7dHlwZToidW5pb24iLG9wdGlvbnM6ZSwuLi55KHQpfSl9Y29uc3QgcnI9cCgiWm9kWG9yIiwoZSx0KT0+e1R0LmluaXQoZSx0KSxYZC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmZoKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIE1hKGUsdCl7cmV0dXJuIG5ldyBycih7dHlwZToidW5pb24iLG9wdGlvbnM6ZSxpbmNsdXNpdmU6ITEsLi4ueSh0KX0pfWNvbnN0IHNyPXAoIlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9PntUdC5pbml0KGUsdCksdHAuaW5pdChlLHQpfSk7ZnVuY3Rpb24gTm4oZSx0LG4pe3JldHVybiBuZXcgc3Ioe3R5cGU6InVuaW9uIixvcHRpb25zOnQsZGlzY3JpbWluYXRvcjplLC4uLnkobil9KX1jb25zdCBpcj1wKCJab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57bnAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5MZygpfSk7ZnVuY3Rpb24gSXQoZSx0KXtyZXR1cm4gbmV3IGlyKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6ZSxyaWdodDp0fSl9Y29uc3QgYXI9cCgiWm9kVHVwbGUiLChlLHQpPT57UWUoKSxLcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlVnKCl9LHtyZXN0KGUpe3JldHVybiB0aGlzLmNsb25lKHsuLi50aGlzLl96b2QuZGVmLHJlc3Q6ZX0pfSxwYXJ0aWFsKCl7Y29uc3QgZT10aGlzLl96b2QuZGVmO2lmKGUuY2hlY2tzPy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCIucGFydGlhbCgpIGNhbm5vdCBiZSB1c2VkIG9uIHR1cGxlIHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cyIpO3JldHVybiB0aGlzLmNsb25lKHsuLi5lLGl0ZW1zOmUuaXRlbXMubWFwKHQ9Pm5ldyBQdCh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSkpfSl9fSk7ZnVuY3Rpb24gY3IoZSx0LG4pe2NvbnN0IG89dCBpbnN0YW5jZW9mIEkscj1vP246dCxzPW8/dDpudWxsO3JldHVybiBuZXcgYXIoe3R5cGU6InR1cGxlIixpdGVtczplLHJlc3Q6cywuLi55KHIpfSl9Y29uc3QgSmU9cCgiWm9kUmVjb3JkIiwoZSx0KT0+e1FlKCksb3AuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5IZygpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGV9KTtmdW5jdGlvbiBBKGUsdCxuKXtyZXR1cm4hdHx8IXQuX3pvZD9uZXcgSmUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTpoKCksdmFsdWVUeXBlOmUsLi4ueSh0KX0pOm5ldyBKZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIHFhKGUsdCxuKXtyZXR1cm4gbmV3IEplKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pLHBhcnRpYWw6ITB9KX1mdW5jdGlvbiBEYShlLHQsbil7cmV0dXJuIG5ldyBKZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsbW9kZToibG9vc2UiLC4uLnkobil9KX1jb25zdCB1cj1wKCJab2RNYXAiLChlLHQpPT57UWUoKSxycC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmpnKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZSxlLm1pbj0oLi4ubik9PmUuY2hlY2soRWUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayhFZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2soR2UoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2socHQoLi4ubikpfSk7ZnVuY3Rpb24gTGEoZSx0LG4pe3JldHVybiBuZXcgdXIoe3R5cGU6Im1hcCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobil9KX1jb25zdCBscj1wKCJab2RTZXQiLChlLHQpPT57UWUoKSxzcC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk1nKCksZS5taW49KC4uLm4pPT5lLmNoZWNrKEVlKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soRWUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKEdlKC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKHB0KC4uLm4pKX0pO2Z1bmN0aW9uIFVhKGUsdCl7cmV0dXJuIG5ldyBscih7dHlwZToic2V0Iix2YWx1ZVR5cGU6ZSwuLi55KHQpfSl9Y29uc3QgS2U9cCgiWm9kRW51bSIsKGUsdCk9PntpcC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShvLHIscyk9PlBnKCksZS5lbnVtPXQuZW50cmllcyxlLm9wdGlvbnM9Wy4uLmUuX3pvZC52YWx1ZXNdO2NvbnN0IG49bmV3IFNldChPYmplY3Qua2V5cyh0LmVudHJpZXMpKTtlLmV4dHJhY3Q9KG8scik9Pntjb25zdCBzPXt9O2Zvcihjb25zdCBpIG9mIG8paWYobi5oYXMoaSkpc1tpXT10LmVudHJpZXNbaV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2l9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBLZSh7Li4udCxjaGVja3M6W10sLi4ueShyKSxlbnRyaWVzOnN9KX0sZS5leGNsdWRlPShvLHIpPT57Y29uc3Qgcz17Li4udC5lbnRyaWVzfTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKWRlbGV0ZSBzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgS2Uoey4uLnQsY2hlY2tzOltdLC4uLnkociksZW50cmllczpzfSl9fSk7ZnVuY3Rpb24gdGUoZSx0KXtjb25zdCBuPUFycmF5LmlzQXJyYXkoZSk/T2JqZWN0LmZyb21FbnRyaWVzKGUubWFwKG89PltvLG9dKSk6ZTtyZXR1cm4gbmV3IEtlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm4sLi4ueSh0KX0pfWZ1bmN0aW9uIEhhKGUsdCl7cmV0dXJuIG5ldyBLZSh7dHlwZToiZW51bSIsZW50cmllczplLC4uLnkodCl9KX1jb25zdCBkcj1wKCJab2RMaXRlcmFsIiwoZSx0KT0+e2FwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+eGcoKSxlLnZhbHVlcz1uZXcgU2V0KHQudmFsdWVzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidmFsdWUiLHtnZXQoKXtpZih0LnZhbHVlcy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgc2NoZW1hIGNvbnRhaW5zIG11bHRpcGxlIHZhbGlkIGxpdGVyYWwgdmFsdWVzLiBVc2UgYC52YWx1ZXNgIGluc3RlYWQuIik7cmV0dXJuIHQudmFsdWVzWzBdfX0pfSk7ZnVuY3Rpb24gZihlLHQpe3JldHVybiBuZXcgZHIoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KGUpP2U6W2VdLC4uLnkodCl9KX1jb25zdCBwcj1wKCJab2RGaWxlIiwoZSx0KT0+e2NwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+T2coKSxlLm1pbj0obixvKT0+ZS5jaGVjayhFZShuLG8pKSxlLm1heD0obixvKT0+ZS5jaGVjayhHZShuLG8pKSxlLm1pbWU9KG4sbyk9PmUuY2hlY2soY24oQXJyYXkuaXNBcnJheShuKT9uOltuXSxvKSl9KTtmdW5jdGlvbiBGYShlKXtyZXR1cm4gc2gocHIsZSl9Y29uc3QgaHI9cCgiWm9kVHJhbnNmb3JtIiwoZSx0KT0+e1FlKCksdXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5OZygpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgeG8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtuLmFkZElzc3VlPXM9PntpZih0eXBlb2Ygcz09InN0cmluZyIpbi5pc3N1ZXMucHVzaChzdChzLG4udmFsdWUsdCkpO2Vsc2V7Y29uc3QgaT1zO2kuZmF0YWwmJihpLmNvbnRpbnVlPSExKSxpLmNvZGU/PyhpLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBpfHwoaS5pbnB1dD1uLnZhbHVlKSxpLmluc3Q/PyhpLmluc3Q9ZSksbi5pc3N1ZXMucHVzaChzdChpKSl9fTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLG4pKToobi52YWx1ZT1yLG4pfX0pO2Z1bmN0aW9uIGpuKGUpe3JldHVybiBuZXcgaHIoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOmV9KX1jb25zdCBQdD1wKCJab2RPcHRpb25hbCIsKGUsdCk9PntXcy5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm1oKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gQihlKXtyZXR1cm4gbmV3IFB0KHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBNbj1wKCJab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e2xwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bWgoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBmcihlKXtyZXR1cm4gbmV3IE1uKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmV9KX1jb25zdCBtcj1wKCJab2ROdWxsYWJsZSIsKGUsdCk9PntkcC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkZnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gY3QoZSl7cmV0dXJuIG5ldyBtcih7dHlwZToibnVsbGFibGUiLGlubmVyVHlwZTplfSl9ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIEIoY3QoZSkpfWNvbnN0IGdyPXAoIlpvZERlZmF1bHQiLChlLHQpPT57cHAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5WZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZURlZmF1bHQ9ZS51bndyYXB9KTtmdW5jdGlvbiB2cihlLHQpe3JldHVybiBuZXcgZ3Ioe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOiRvKHQpfX0pfWNvbnN0IGJyPXAoIlpvZFByZWZhdWx0IiwoZSx0KT0+e2hwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SmcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiB5cihlLHQpe3JldHVybiBuZXcgYnIoe3R5cGU6InByZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTokbyh0KX19KX1jb25zdCBxbj1wKCJab2ROb25PcHRpb25hbCIsKGUsdCk9PntmcC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkJnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gX3IoZSx0KXtyZXR1cm4gbmV3IHFuKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOmUsLi4ueSh0KX0pfWNvbnN0IGtyPXAoIlpvZFN1Y2Nlc3MiLChlLHQpPT57bXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5BZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFZhKGUpe3JldHVybiBuZXcga3Ioe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTplfSl9Y29uc3Qgd3I9cCgiWm9kQ2F0Y2giLChlLHQpPT57Z3AuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5LZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZSxlLnJlbW92ZUNhdGNoPWUudW53cmFwfSk7ZnVuY3Rpb24gJHIoZSx0KXtyZXR1cm4gbmV3IHdyKHt0eXBlOiJjYXRjaCIsaW5uZXJUeXBlOmUsY2F0Y2hWYWx1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OnZzKHQpfSl9Y29uc3QgU3I9cCgiWm9kTmFOIiwoZSx0KT0+e3ZwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Q2coKX0pO2Z1bmN0aW9uIEphKGUpe3JldHVybiBvaChTcixlKX1jb25zdCB4dD1wKCJab2RQaXBlIiwoZSx0KT0+e0dzLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+V2coKSxlLmluPXQuaW4sZS5vdXQ9dC5vdXR9KTtmdW5jdGlvbiBEdChlLHQpe3JldHVybiBuZXcgeHQoe3R5cGU6InBpcGUiLGluOmUsb3V0OnR9KX1jb25zdCBDdD1wKCJab2RDb2RlYyIsKGUsdCk9Pnt4dC5pbml0KGUsdCksUXMuaW5pdChlLHQpfSk7ZnVuY3Rpb24gS2EoZSx0LG4pe3JldHVybiBuZXcgQ3Qoe3R5cGU6InBpcGUiLGluOmUsb3V0OnQsdHJhbnNmb3JtOm4uZGVjb2RlLHJldmVyc2VUcmFuc2Zvcm06bi5lbmNvZGV9KX1mdW5jdGlvbiBXYShlKXtjb25zdCB0PWUuX3pvZC5kZWY7cmV0dXJuIG5ldyBDdCh7dHlwZToicGlwZSIsaW46dC5vdXQsb3V0OnQuaW4sdHJhbnNmb3JtOnQucmV2ZXJzZVRyYW5zZm9ybSxyZXZlcnNlVHJhbnNmb3JtOnQudHJhbnNmb3JtfSl9Y29uc3QgenI9cCgiWm9kUHJlcHJvY2VzcyIsKGUsdCk9Pnt4dC5pbml0KGUsdCksYnAuaW5pdChlLHQpfSksVHI9cCgiWm9kUmVhZG9ubHkiLChlLHQpPT57eXAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5HZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIElyKGUpe3JldHVybiBuZXcgVHIoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6ZX0pfWNvbnN0IFByPXAoIlpvZFRlbXBsYXRlTGl0ZXJhbCIsKGUsdCk9PntfcC5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkVnKCl9KTtmdW5jdGlvbiBHYShlLHQpe3JldHVybiBuZXcgUHIoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOmUsLi4ueSh0KX0pfWNvbnN0IHhyPXAoIlpvZExhenkiLChlLHQpPT57WXMuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5ZZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmdldHRlcigpfSk7ZnVuY3Rpb24gQ3IoZSl7cmV0dXJuIG5ldyB4cih7dHlwZToibGF6eSIsZ2V0dGVyOmV9KX1jb25zdCBFcj1wKCJab2RQcm9taXNlIiwoZSx0KT0+e3dwLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+UWcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBRYShlKXtyZXR1cm4gbmV3IEVyKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6ZX0pfWNvbnN0IE9yPXAoIlpvZEZ1bmN0aW9uIiwoZSx0KT0+e2twLmluaXQoZSx0KSx4LmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+WmcoKX0pO2Z1bmN0aW9uIHV0KGUpe3JldHVybiBuZXcgT3Ioe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpBcnJheS5pc0FycmF5KGU/LmlucHV0KT9jcihlPy5pbnB1dCk6ZT8uaW5wdXQ/P1QoaigpKSxvdXRwdXQ6ZT8ub3V0cHV0Pz9qKCl9KX1jb25zdCBFdD1wKCJab2RDdXN0b20iLChlLHQpPT57JHAuaW5pdChlLHQpLHguaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5SZygpfSk7ZnVuY3Rpb24gWWEoZSl7Y29uc3QgdD1uZXcgSih7Y2hlY2s6ImN1c3RvbSJ9KTtyZXR1cm4gdC5fem9kLmNoZWNrPWUsdH1mdW5jdGlvbiBBcihlLHQpe3JldHVybiBpaChFdCxlPz8oKCk9PiEwKSx0KX1mdW5jdGlvbiBScihlLHQ9e30pe3JldHVybiBhaChFdCxlLHQpfWZ1bmN0aW9uIFpyKGUsdCl7cmV0dXJuIGNoKGUsdCl9Y29uc3QgWGE9bGgsZWM9ZGgsTnI9cCgiWm9kSW5zdGFuY2VPZiIsKGUsdCk9PntFdC5pbml0KGUsdCl9LHtwcm9wZXJ0aWVzKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soYW4oZSx0KSl9fSk7ZnVuY3Rpb24gdGMoZSx0PXt9KXtjb25zdCBuPW5ldyBOcih7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjpvPT5vIGluc3RhbmNlb2YgZSxhYm9ydDohMCwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5iYWcuQ2xhc3M9ZSxuLl96b2QuY2hlY2s9bz0+e28udmFsdWUgaW5zdGFuY2VvZiBlfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOmUubmFtZSxpbnB1dDpvLnZhbHVlLGluc3Q6bixwYXRoOlsuLi5uLl96b2QuZGVmLnBhdGg/P1tdXX0pfSxufWNvbnN0IG5jPSguLi5lKT0+cGgoe0NvZGVjOkN0LEJvb2xlYW46JHQsU3RyaW5nOmd0fSwuLi5lKTtmdW5jdGlvbiBvYyhlKXtjb25zdCB0PUNyKCgpPT5DKFtoKGUpLFAoKSxEKCksQW4oKSxUKHQpLEEoaCgpLHQpXSkpO3JldHVybiB0fWZ1bmN0aW9uIERuKGUsdCl7cmV0dXJuIG5ldyB6cih7dHlwZToicGlwZSIsaW46am4oZSksb3V0OnR9KX1jb25zdCBzdj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kQW55OlhvLFpvZEFycmF5Om9yLFpvZEJhc2U2NDpQbixab2RCYXNlNjRVUkw6eG4sWm9kQmlnSW50OlN0LFpvZEJpZ0ludEZvcm1hdDpPbixab2RCb29sZWFuOiR0LFpvZENJRFJ2NDpUbixab2RDSURSdjY6SW4sWm9kQ1VJRDp5bixab2RDVUlEMjpfbixab2RDYXRjaDp3cixab2RDb2RlYzpDdCxab2RDcmVkaXRDYXJkOktvLFpvZEN1c3RvbTpFdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6TWUsWm9kRGF0ZTpabixab2REZWZhdWx0OmdyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpzcixab2RFMTY0OkNuLFpvZEVtYWlsOm1uLFpvZEVtb2ppOnZuLFpvZEVudW06S2UsWm9kRXhhY3RPcHRpb25hbDpNbixab2RGaWxlOnByLFpvZEZ1bmN0aW9uOk9yLFpvZEdVSUQ6Z24sWm9kSUJBTjpXbyxab2RJUHY0OlNuLFpvZElQdjY6em4sWm9kSVNPRGF0ZTpidCxab2RJU09EYXRlVGltZTp2dCxab2RJU09EdXJhdGlvbjpfdCxab2RJU09UaW1lOnl0LFpvZEluc3RhbmNlT2Y6TnIsWm9kSW50ZXJzZWN0aW9uOmlyLFpvZEpXVDpFbixab2RLU1VJRDokbixab2RMYXp5OnhyLFpvZExpdGVyYWw6ZHIsWm9kTUFDOkpvLFpvZE1hcDp1cixab2ROYU46U3IsWm9kTmFub0lEOmJuLFpvZE5ldmVyOnRyLFpvZE5vbk9wdGlvbmFsOnFuLFpvZE51bGw6WW8sWm9kTnVsbGFibGU6bXIsWm9kTnVtYmVyOnd0LFpvZE51bWJlckZvcm1hdDpxZSxab2RPYmplY3Q6enQsWm9kT3B0aW9uYWw6UHQsWm9kUGlwZTp4dCxab2RQcmVmYXVsdDpicixab2RQcmVwcm9jZXNzOnpyLFpvZFByb21pc2U6RXIsWm9kUmVhZG9ubHk6VHIsWm9kUmVjb3JkOkplLFpvZFNldDpscixab2RTdHJpbmc6Z3QsWm9kU3RyaW5nRm9ybWF0OkwsWm9kU3VjY2Vzczprcixab2RTeW1ib2w6R28sWm9kVGVtcGxhdGVMaXRlcmFsOlByLFpvZFRyYW5zZm9ybTpocixab2RUdXBsZTphcixab2RUeXBlOngsWm9kVUxJRDprbixab2RVUkw6a3QsWm9kVVVJRDprZSxab2RVbmRlZmluZWQ6UW8sWm9kVW5pb246VHQsWm9kVW5rbm93bjplcixab2RWb2lkOm5yLFpvZFhJRDp3bixab2RYb3I6cnIsX1pvZFN0cmluZzpmbixfZGVmYXVsdDp2cixfZnVuY3Rpb246dXQsYW55OlJuLGFycmF5OlQsYmFzZTY0Om1hLGJhc2U2NHVybDpnYSxiaWdpbnQ6Q2EsYm9vbGVhbjpELGNhdGNoOiRyLGNoZWNrOllhLGNpZHJ2NDpoYSxjaWRydjY6ZmEsY29kZWM6S2EsY3JlZGl0Q2FyZDpiYSxjdWlkOnNhLGN1aWQyOmlhLGN1cnJlbmN5Q29kZTpTYSxjdXN0b206QXIsZGF0ZTpaYSxkZXNjcmliZTpYYSxkaXNjcmltaW5hdGVkVW5pb246Tm4sZTE2NDp2YSxlbWFpbDpXaSxlbW9qaTpvYSxlbnVtOnRlLGV4YWN0T3B0aW9uYWw6ZnIsZmlsZTpGYSxmbG9hdDMyOlRhLGZsb2F0NjQ6SWEsZnVuY3Rpb246dXQsZ3VpZDpHaSxoYXNoOnphLGhleDokYSxob3N0bmFtZTp3YSxodHRwVXJsOm5hLGliYW46eWEsaW5zdGFuY2VvZjp0YyxpbnQ6cXQsaW50MzI6UGEsaW50NjQ6RWEsaW50ZXJzZWN0aW9uOkl0LGludmVydENvZGVjOldhLGlwdjQ6bGEsaXB2NjpwYSxqc29uOm9jLGp3dDpfYSxrZXlvZjpOYSxrc3VpZDp1YSxsYXp5OkNyLGxpdGVyYWw6Zixsb29zZU9iamVjdDpYLGxvb3NlUmVjb3JkOkRhLG1hYzpkYSxtYXA6TGEsbWV0YTplYyxuYW46SmEsbmFub2lkOnJhLG5hdGl2ZUVudW06SGEsbmV2ZXI6VmUsbm9ub3B0aW9uYWw6X3IsbnVsbDpBbixudWxsYWJsZTpjdCxudWxsaXNoOkJhLG51bWJlcjpQLG9iamVjdDpnLG9wdGlvbmFsOkIscGFydGlhbFJlY29yZDpxYSxwaXBlOkR0LHByZWZhdWx0OnlyLHByZXByb2Nlc3M6RG4scHJvbWlzZTpRYSxyZWFkb25seTpJcixyZWNvcmQ6QSxyZWZpbmU6UnIsc2V0OlVhLHN0cmljdE9iamVjdDpqYSxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6a2Esc3RyaW5nYm9vbDpuYyxzdWNjZXNzOlZhLHN1cGVyUmVmaW5lOlpyLHN5bWJvbDpBYSx0ZW1wbGF0ZUxpdGVyYWw6R2EsdHJhbnNmb3JtOmpuLHR1cGxlOmNyLHVpbnQzMjp4YSx1aW50NjQ6T2EsdWxpZDphYSx1bmRlZmluZWQ6YXQsdW5pb246Qyx1bmtub3duOmosdXJsOnRhLHV1aWQ6UWksdXVpZHY0OllpLHV1aWR2NjpYaSx1dWlkdjc6ZWEsdm9pZDpSYSx4aWQ6Y2EseG9yOk1hfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLF9oPXtpbnZhbGlkX3R5cGU6ImludmFsaWRfdHlwZSIsdG9vX2JpZzoidG9vX2JpZyIsdG9vX3NtYWxsOiJ0b29fc21hbGwiLGludmFsaWRfZm9ybWF0OiJpbnZhbGlkX2Zvcm1hdCIsbm90X211bHRpcGxlX29mOiJub3RfbXVsdGlwbGVfb2YiLHVucmVjb2duaXplZF9rZXlzOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW52YWxpZF91bmlvbjoiaW52YWxpZF91bmlvbiIsaW52YWxpZF9rZXk6ImludmFsaWRfa2V5IixpbnZhbGlkX2VsZW1lbnQ6ImludmFsaWRfZWxlbWVudCIsaW52YWxpZF92YWx1ZToiaW52YWxpZF92YWx1ZSIsY3VzdG9tOiJjdXN0b20ifTtmdW5jdGlvbiBraChlKXtHKHtjdXN0b21FcnJvcjplfSl9ZnVuY3Rpb24gd2goKXtyZXR1cm4gRygpLmN1c3RvbUVycm9yfXZhciBmbztmb3x8KGZvPXt9KTtmdW5jdGlvbiAkaChlKXtyZXR1cm4gQ2kodnQsZSl9ZnVuY3Rpb24gaXYoZSl7cmV0dXJuIEVpKGJ0LGUpfWZ1bmN0aW9uIGF2KGUpe3JldHVybiBPaSh5dCxlKX1mdW5jdGlvbiBjdihlKXtyZXR1cm4gQWkoX3QsZSl9Y29uc3QgcmM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLFpvZElTT0RhdGU6YnQsWm9kSVNPRGF0ZVRpbWU6dnQsWm9kSVNPRHVyYXRpb246X3QsWm9kSVNPVGltZTp5dCxkYXRlOml2LGRhdGV0aW1lOiRoLGR1cmF0aW9uOmN2LHRpbWU6YXZ9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksUz17Li4uc3YsLi4ub3YsaXNvOnJjfSx1dj1uZXcgU2V0KFsiJHNjaGVtYSIsIiRyZWYiLCIkZGVmcyIsImRlZmluaXRpb25zIiwiJGlkIiwiaWQiLCIkY29tbWVudCIsIiRhbmNob3IiLCIkdm9jYWJ1bGFyeSIsIiRkeW5hbWljUmVmIiwiJGR5bmFtaWNBbmNob3IiLCJ0eXBlIiwiZW51bSIsImNvbnN0IiwiYW55T2YiLCJvbmVPZiIsImFsbE9mIiwibm90IiwicHJvcGVydGllcyIsInJlcXVpcmVkIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsInByb3BlcnR5TmFtZXMiLCJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyIsIml0ZW1zIiwicHJlZml4SXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJtaW5JdGVtcyIsIm1heEl0ZW1zIiwidW5pcXVlSXRlbXMiLCJjb250YWlucyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiLCJtaW5MZW5ndGgiLCJtYXhMZW5ndGgiLCJwYXR0ZXJuIiwiZm9ybWF0IiwibWluaW11bSIsIm1heGltdW0iLCJleGNsdXNpdmVNaW5pbXVtIiwiZXhjbHVzaXZlTWF4aW11bSIsIm11bHRpcGxlT2YiLCJkZXNjcmlwdGlvbiIsImRlZmF1bHQiLCJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJpZiIsInRoZW4iLCJlbHNlIiwiZGVwZW5kZW50U2NoZW1hcyIsImRlcGVuZGVudFJlcXVpcmVkIiwibnVsbGFibGUiLCJyZWFkT25seSJdKTtmdW5jdGlvbiBsdihlLHQpe2NvbnN0IG49ZS4kc2NoZW1hO3JldHVybiBuPT09Imh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIj8iZHJhZnQtMjAyMC0xMiI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMiPyJkcmFmdC03IjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyI/ImRyYWZ0LTQiOnQ/PyJkcmFmdC0yMDIwLTEyIn1mdW5jdGlvbiBudShlLHQpe3JldHVybiBlLm1hcCgobixvKT0+bzx0P246bi5vcHRpb25hbCgpKX1mdW5jdGlvbiBkdihlKXtyZXR1cm4gZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpfWZ1bmN0aW9uIHB2KGUsdCl7aWYoIWUuc3RhcnRzV2l0aCgiIyIpKXRocm93IG5ldyBFcnJvcigiRXh0ZXJuYWwgJHJlZiBpcyBub3Qgc3VwcG9ydGVkLCBvbmx5IGxvY2FsIHJlZnMgKCMvLi4uKSBhcmUgYWxsb3dlZCIpO2NvbnN0IG49ZS5zbGljZSgxKS5zcGxpdCgiLyIpLmZpbHRlcihCb29sZWFuKTtpZihuLmxlbmd0aD09PTApcmV0dXJuIHQucm9vdFNjaGVtYTtjb25zdCBvPXQudmVyc2lvbj09PSJkcmFmdC0yMDIwLTEyIj8iJGRlZnMiOiJkZWZpbml0aW9ucyI7aWYoblswXT09PW8pe2NvbnN0IHI9blsxXT09PXZvaWQgMD92b2lkIDA6ZHYoblsxXSk7aWYoIXJ8fCF0LmRlZnNbcl0pdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCk7cmV0dXJuIHQuZGVmc1tyXX10aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKX1mdW5jdGlvbiBodihlLHQpe3JldHVybiBTLnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKHR5cGVvZiByIT0ib2JqZWN0Inx8cj09PW51bGx8fEFycmF5LmlzQXJyYXkocikpcmV0dXJuO2NvbnN0IHM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocik7aWYodC5taW5Qcm9wZXJ0aWVzIT09dm9pZCAwJiZzLmxlbmd0aDx0Lm1pblByb3BlcnRpZXMmJm8uaXNzdWVzLnB1c2goe29yaWdpbjoib2JqZWN0Iixjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5Qcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gc21hbGw6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlID49JHt0Lm1pblByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5tYXhQcm9wZXJ0aWVzIT09dm9pZCAwJiZzLmxlbmd0aD50Lm1heFByb3BlcnRpZXMmJm8uaXNzdWVzLnB1c2goe29yaWdpbjoib2JqZWN0Iixjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4UHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIGJpZzogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPD0ke3QubWF4UHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0LmtleVNjaGVtYSlmb3IoY29uc3QgaSBvZiBzKXtjb25zdCBhPXQua2V5U2NoZW1hLnNhZmVQYXJzZShpKTthLnN1Y2Nlc3N8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmEuZXJyb3IuaXNzdWVzLGlucHV0OmkscGF0aDpbaV0sY29udGludWU6ITB9KX19KS5waXBlKGUpfWZ1bmN0aW9uIGFzKGUsdCl7aWYoZT09PW51bGwpcmV0dXJuInoiO2NvbnN0IG49dHlwZW9mIGU7aWYobiE9PSJvYmplY3QiKXtpZihuPT09Im51bWJlciImJk51bWJlci5pc05hTihlKSlyZXR1cm4gbnVsbDtjb25zdCBvPVN0cmluZyhlKTtyZXR1cm5gJHtuWzBdfSR7by5sZW5ndGh9OiR7b31gfWlmKHQuaGFzKGUpKXJldHVybiBudWxsO3QuYWRkKGUpO3RyeXtpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCBzPVtdO2Zvcihjb25zdCBpIG9mIGUpe2NvbnN0IGE9YXMoaSx0KTtpZihhPT09bnVsbClyZXR1cm4gbnVsbDtzLnB1c2goYSl9cmV0dXJuYGEke3MubGVuZ3RofTpbJHtzLmpvaW4oIiwiKX1dYH1jb25zdCBvPU9iamVjdC5rZXlzKGUpLnNvcnQoKSxyPVtdO2Zvcihjb25zdCBzIG9mIG8pe2NvbnN0IGk9YXMoZVtzXSx0KTtpZihpPT09bnVsbClyZXR1cm4gbnVsbDtyLnB1c2goYCR7cy5sZW5ndGh9OiR7c309JHtpfWApfXJldHVybmBvJHtyLmxlbmd0aH06eyR7ci5qb2luKCIsIil9fWB9ZmluYWxseXt0LmRlbGV0ZShlKX19Y29uc3QgZnY9bmV3IFNldChbIml0ZW1zIiwicHJlZml4SXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNvbnRhaW5zIiwicHJvcGVydHlOYW1lcyIsIm5vdCIsImlmIiwidGhlbiIsImVsc2UiLCJhbGxPZiIsImFueU9mIiwib25lT2YiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiY29udGVudFNjaGVtYSJdKSxtdj1uZXcgU2V0KFsicHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwiZGVwZW5kZW50U2NoZW1hcyIsImRlcGVuZGVuY2llcyIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiXSk7ZnVuY3Rpb24gWnQoZSl7cmV0dXJuIHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGw/ITE6QXJyYXkuaXNBcnJheShlKT9lLnNvbWUoWnQpOnR5cGVvZiBlLiRyZWY9PSJzdHJpbmciPyEwOk9iamVjdC5lbnRyaWVzKGUpLnNvbWUoKFt0LG5dKT0+ZnYuaGFzKHQpP1p0KG4pOiFtdi5oYXModCl8fHR5cGVvZiBuIT0ib2JqZWN0Inx8bj09PW51bGw/ITE6T2JqZWN0LnZhbHVlcyhuKS5zb21lKFp0KSl9ZnVuY3Rpb24gb3UoZSl7cmV0dXJuIGU9PT0xPyJlbGVtZW50IjoiZWxlbWVudHMifWZ1bmN0aW9uIGd2KGUsdCl7cmV0dXJuIFMudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYoQXJyYXkuaXNBcnJheShyKSl7aWYodC51bmlxdWVJdGVtcz09PSEwKXtjb25zdCBzPW5ldyBNYXA7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspe2NvbnN0IGE9YXMocltpXSxuZXcgU2V0KTtpZihhPT09bnVsbCljb250aW51ZTtjb25zdCBsPXMuZ2V0KGEpO2lmKGw9PT12b2lkIDApe3Muc2V0KGEsaSk7Y29udGludWV9by5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBpdGVtcyBtdXN0IGJlIHVuaXF1ZTogZWxlbWVudCBhdCBpbmRleCAke2l9IGR1cGxpY2F0ZXMgdGhlIG9uZSBhdCBpbmRleCAke2x9YCxpbnB1dDpyLHBhdGg6W2ldLGNvbnRpbnVlOiEwfSl9fWlmKHQuY29udGFpbnNTY2hlbWEpe2NvbnN0IHM9dC5taW5Db250YWlucz8/MSxpPXQubWF4Q29udGFpbnMhPT12b2lkIDA/dC5tYXhDb250YWlucysxOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgYT0wO2Zvcihjb25zdCBsIG9mIHIpaWYodC5jb250YWluc1NjaGVtYS5zYWZlUGFyc2UobCkuc3VjY2VzcyYmKythPj1pKWJyZWFrO2E8cyYmby5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHtzfSBtYXRjaGluZyAke291KHMpfTsgZm91bmQgJHthfWAsaW5wdXQ6cixjb250aW51ZTohMH0pLHQubWF4Q29udGFpbnMhPT12b2lkIDAmJmE+dC5tYXhDb250YWlucyYmby5pc3N1ZXMucHVzaCh7Y29kZToiY3VzdG9tIixtZXNzYWdlOmBBcnJheSBtdXN0IGNvbnRhaW4gYXQgbW9zdCAke3QubWF4Q29udGFpbnN9IG1hdGNoaW5nICR7b3UodC5tYXhDb250YWlucyl9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSl9fX0pLnBpcGUoZSl9ZnVuY3Rpb24gcnUoZSx0KXtpZihlIT09ITEpcmV0dXJuIGU9PT12b2lkIDB8fGU9PT0hMD9TLmFueSgpOnNlKGUsdCl9Y29uc3QgdnY9L14oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkOlswLTVdXGQoPzpcLlxkKyk/KD86WnxbKy1dKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZCkkLztmdW5jdGlvbiBTaChlLHQpe2lmKGUubm90IT09dm9pZCAwKXtpZih0eXBlb2YgZS5ub3Q9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhlLm5vdCkubGVuZ3RoPT09MClyZXR1cm4gUy5uZXZlcigpO3Rocm93IG5ldyBFcnJvcigibm90IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWm9kIChleGNlcHQgeyBub3Q6IHt9IH0gZm9yIG5ldmVyKSIpfWlmKGUudW5ldmFsdWF0ZWRJdGVtcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkSXRlbXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmlmIT09dm9pZCAwfHxlLnRoZW4hPT12b2lkIDB8fGUuZWxzZSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNvbmRpdGlvbmFsIHNjaGVtYXMgKGlmL3RoZW4vZWxzZSkgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmRlcGVuZGVudFNjaGVtYXMhPT12b2lkIDB8fGUuZGVwZW5kZW50UmVxdWlyZWQhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJkZXBlbmRlbnRTY2hlbWFzIGFuZCBkZXBlbmRlbnRSZXF1aXJlZCBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuJHJlZil7Y29uc3Qgcj1lLiRyZWY7aWYodC5yZWZzLmhhcyhyKSlyZXR1cm4gdC5yZWZzLmdldChyKTtpZih0LnByb2Nlc3NpbmcuaGFzKHIpKXJldHVybiBTLmxhenkoKCk9PntpZighdC5yZWZzLmhhcyhyKSl0aHJvdyBuZXcgRXJyb3IoYENpcmN1bGFyIHJlZmVyZW5jZSBub3QgcmVzb2x2ZWQ6ICR7cn1gKTtyZXR1cm4gdC5yZWZzLmdldChyKX0pO3QucHJvY2Vzc2luZy5hZGQocik7Y29uc3Qgcz1wdihyLHQpLGk9c2Uocyx0KTtyZXR1cm4gdC5yZWZzLnNldChyLGkpLHQucHJvY2Vzc2luZy5kZWxldGUociksaX1pZihlLmVudW0hPT12b2lkIDApe2NvbnN0IHI9ZS5lbnVtO2lmKHQudmVyc2lvbj09PSJvcGVuYXBpLTMuMCImJmUubnVsbGFibGU9PT0hMCYmci5sZW5ndGg9PT0xJiZyWzBdPT09bnVsbClyZXR1cm4gUy5udWxsKCk7aWYoci5sZW5ndGg9PT0wKXJldHVybiBTLm5ldmVyKCk7aWYoci5sZW5ndGg9PT0xKXJldHVybiBTLmxpdGVyYWwoclswXSk7aWYoci5ldmVyeShpPT50eXBlb2YgaT09InN0cmluZyIpKXJldHVybiBTLmVudW0ocik7Y29uc3Qgcz1yLm1hcChpPT5TLmxpdGVyYWwoaSkpO3JldHVybiBzLmxlbmd0aDwyP3NbMF06Uy51bmlvbihbc1swXSxzWzFdLC4uLnMuc2xpY2UoMildKX1pZihlLmNvbnN0IT09dm9pZCAwKXJldHVybiBTLmxpdGVyYWwoZS5jb25zdCk7Y29uc3Qgbj1lLnR5cGU7aWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3Qgcj1uLm1hcChzPT57Y29uc3QgaT17Li4uZSx0eXBlOnN9O3JldHVybiBTaChpLHQpfSk7cmV0dXJuIHIubGVuZ3RoPT09MD9TLm5ldmVyKCk6ci5sZW5ndGg9PT0xP3JbMF06Uy51bmlvbihyKX1pZighbilyZXR1cm4gUy5hbnkoKTtsZXQgbztzd2l0Y2gobil7Y2FzZSJzdHJpbmciOntsZXQgcj1TLnN0cmluZygpO2lmKGUuZm9ybWF0KXtjb25zdCBzPWUuZm9ybWF0O3M9PT0iZW1haWwiP3I9ci5jaGVjayhTLmVtYWlsKCkpOnM9PT0idXJpInx8cz09PSJ1cmktcmVmZXJlbmNlIj9yPXIuY2hlY2soUy51cmwoKSk6cz09PSJ1dWlkInx8cz09PSJndWlkIj9yPXIuY2hlY2soUy51dWlkKCkpOnM9PT0iZGF0ZS10aW1lIj9yPXIuY2hlY2soUy5pc28uZGF0ZXRpbWUoe29mZnNldDohMH0pKTpzPT09ImRhdGUiP3I9ci5jaGVjayhTLmlzby5kYXRlKCkpOnM9PT0idGltZSI/cj1yLmNoZWNrKFMucmVnZXgodnYpKTpzPT09ImR1cmF0aW9uIj9yPXIuY2hlY2soUy5pc28uZHVyYXRpb24oKSk6cz09PSJob3N0bmFtZSI/cj1yLmNoZWNrKFMuaG9zdG5hbWUoKSk6cz09PSJpcHY0Ij9yPXIuY2hlY2soUy5pcHY0KCkpOnM9PT0iaXB2NiI/cj1yLmNoZWNrKFMuaXB2NigpKTpzPT09Im1hYyI/cj1yLmNoZWNrKFMubWFjKCkpOnM9PT0iY2lkciI/cj1yLmNoZWNrKFMuY2lkcnY0KCkpOnM9PT0iY2lkci12NiI/cj1yLmNoZWNrKFMuY2lkcnY2KCkpOnM9PT0iYmFzZTY0Ij9yPXIuY2hlY2soUy5iYXNlNjQoKSk6cz09PSJiYXNlNjR1cmwiP3I9ci5jaGVjayhTLmJhc2U2NHVybCgpKTpzPT09ImUxNjQiP3I9ci5jaGVjayhTLmUxNjQoKSk6cz09PSJjcmVkaXRfY2FyZCI/cj1yLmNoZWNrKFMuY3JlZGl0Q2FyZCgpKTpzPT09ImliYW4iP3I9ci5jaGVjayhTLmliYW4oKSk6cz09PSJqd3QiP3I9ci5jaGVjayhTLmp3dCgpKTpzPT09ImVtb2ppIj9yPXIuY2hlY2soUy5lbW9qaSgpKTpzPT09Im5hbm9pZCI/cj1yLmNoZWNrKFMubmFub2lkKCkpOnM9PT0iY3VpZCI/cj1yLmNoZWNrKFMuY3VpZCgpKTpzPT09ImN1aWQyIj9yPXIuY2hlY2soUy5jdWlkMigpKTpzPT09InVsaWQiP3I9ci5jaGVjayhTLnVsaWQoKSk6cz09PSJ4aWQiP3I9ci5jaGVjayhTLnhpZCgpKTpzPT09ImtzdWlkIiYmKHI9ci5jaGVjayhTLmtzdWlkKCkpKX10eXBlb2YgZS5taW5MZW5ndGg9PSJudW1iZXIiJiYocj1yLm1pbihlLm1pbkxlbmd0aCkpLHR5cGVvZiBlLm1heExlbmd0aD09Im51bWJlciImJihyPXIubWF4KGUubWF4TGVuZ3RoKSksZS5wYXR0ZXJuJiYocj1yLnJlZ2V4KG5ldyBSZWdFeHAoZS5wYXR0ZXJuKSkpLG89cjticmVha31jYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjp7bGV0IHI9bj09PSJpbnRlZ2VyIj9TLm51bWJlcigpLmludCgpOlMubnVtYmVyKCk7dHlwZW9mIGUubWluaW11bT09Im51bWJlciImJmUuZXhjbHVzaXZlTWluaW11bSE9PSEwJiYocj1yLm1pbihlLm1pbmltdW0pKSx0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNYXhpbXVtIT09ITAmJihyPXIubWF4KGUubWF4aW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1pbmltdW09PSJudW1iZXIiP3I9ci5ndChlLmV4Y2x1c2l2ZU1pbmltdW0pOmUuZXhjbHVzaXZlTWluaW11bT09PSEwJiZ0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmKHI9ci5ndChlLm1pbmltdW0pKSx0eXBlb2YgZS5leGNsdXNpdmVNYXhpbXVtPT0ibnVtYmVyIj9yPXIubHQoZS5leGNsdXNpdmVNYXhpbXVtKTplLmV4Y2x1c2l2ZU1heGltdW09PT0hMCYmdHlwZW9mIGUubWF4aW11bT09Im51bWJlciImJihyPXIubHQoZS5tYXhpbXVtKSksdHlwZW9mIGUubXVsdGlwbGVPZj09Im51bWJlciImJihyPXIubXVsdGlwbGVPZihlLm11bHRpcGxlT2YpKSxvPXI7YnJlYWt9Y2FzZSJib29sZWFuIjp7bz1TLmJvb2xlYW4oKTticmVha31jYXNlIm51bGwiOntvPVMubnVsbCgpO2JyZWFrfWNhc2Uib2JqZWN0Ijp7Y29uc3Qgcj17fSxzPWUucHJvcGVydGllc3x8e30saT1uZXcgU2V0KGUucmVxdWlyZWR8fFtdKSxhPXR5cGVvZiBlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT0ib2JqZWN0Ij9zZShlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLHQpOnZvaWQgMDtmb3IoY29uc3RbbSx2XW9mIE9iamVjdC5lbnRyaWVzKHMpKXtjb25zdCBiPXNlKHYsdCk7V2UocixtLGkuaGFzKG0pP2I6Yi5vcHRpb25hbCgpKX1pZihlLnBhdHRlcm5Qcm9wZXJ0aWVzKXtjb25zdCBtPWUucGF0dGVyblByb3BlcnRpZXMsdj1PYmplY3Qua2V5cyhtKSxiPVtdO2Zvcihjb25zdCBrIG9mIHYpe2NvbnN0IHc9c2UobVtrXSx0KSxSPVMuc3RyaW5nKCkucmVnZXgobmV3IFJlZ0V4cChrKSk7Yi5wdXNoKFMubG9vc2VSZWNvcmQoUix3KSl9Y29uc3QgXz1bXTtpZihPYmplY3Qua2V5cyhyKS5sZW5ndGg+MCYmXy5wdXNoKFMub2JqZWN0KHIpLnBhc3N0aHJvdWdoKCkpLF8ucHVzaCguLi5iKSxfLmxlbmd0aD09PTApbz1TLm9iamVjdCh7fSkucGFzc3Rocm91Z2goKTtlbHNlIGlmKF8ubGVuZ3RoPT09MSlvPV9bMF07ZWxzZXtsZXQgaz1TLmludGVyc2VjdGlvbihfWzBdLF9bMV0pO2ZvcihsZXQgdz0yO3c8Xy5sZW5ndGg7dysrKWs9Uy5pbnRlcnNlY3Rpb24oayxfW3ddKTtvPWt9aWYoZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExKXtjb25zdCBrPU9iamVjdC5rZXlzKHIpLHc9di5tYXAoTz0+bmV3IFJlZ0V4cChPKSksUj1vO289by5jaGVjayhPPT57aWYoIU5lKE8udmFsdWUpKXJldHVybjtjb25zdCAkPVtdO2Zvcihjb25zdCB6IG9mIE9iamVjdC5rZXlzKE8udmFsdWUpKWsuaW5jbHVkZXMoeil8fHcuc29tZShNPT5NLnRlc3QoeikpfHwkLnB1c2goeik7JC5sZW5ndGgmJk8uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOiQsaW5wdXQ6Ty52YWx1ZSxpbnN0OlJ9KX0pfX1lbHNle2NvbnN0IG09Uy5vYmplY3Qocik7ZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExP289bS5zdHJpY3QoKTphP289bS5jYXRjaGFsbChhKTpvPW0ucGFzc3Rocm91Z2goKX1jb25zdCBsPWUucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmZS5wcm9wZXJ0eU5hbWVzIT09ITAsdT10eXBlb2YgZS5taW5Qcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1pblByb3BlcnRpZXM6dm9pZCAwLGQ9dHlwZW9mIGUubWF4UHJvcGVydGllcz09Im51bWJlciI/ZS5tYXhQcm9wZXJ0aWVzOnZvaWQgMDtpZihsfHx1IT09dm9pZCAwfHxkIT09dm9pZCAwKXtsZXQgbTtpZihsKXtjb25zdCB2PXR5cGVvZiBlLnByb3BlcnR5TmFtZXM9PSJvYmplY3QiJiZlLnByb3BlcnR5TmFtZXMudHlwZT09PXZvaWQgMD97dHlwZToic3RyaW5nIiwuLi5lLnByb3BlcnR5TmFtZXN9OmUucHJvcGVydHlOYW1lczttPXNlKHYsdCl9bz1odihvLHtrZXlTY2hlbWE6bSxtaW5Qcm9wZXJ0aWVzOnUsbWF4UHJvcGVydGllczpkfSl9YnJlYWt9Y2FzZSJhcnJheSI6e2NvbnN0IHI9ZS5wcmVmaXhJdGVtcyxzPWUuaXRlbXM7aWYociYmQXJyYXkuaXNBcnJheShyKSl7Y29uc3QgaT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGE9ci5tYXAobT0+c2UobSx0KSksbD1udShhLGkpLHU9QXJyYXkuaXNBcnJheShzKT92b2lkIDA6cnUocyx0KSxkPVMudHVwbGUobCk7bz11P2QucmVzdCh1KTpkLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYoQXJyYXkuaXNBcnJheShzKSl7Y29uc3QgaT10eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciI/ZS5taW5JdGVtczowLGE9cy5tYXAobT0+c2UobSx0KSksbD1udShhLGkpLHU9cnUoZS5hZGRpdGlvbmFsSXRlbXMsdCksZD1TLnR1cGxlKGwpO289dT9kLnJlc3QodSk6ZCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2soUy5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKHMhPT12b2lkIDApe2NvbnN0IGk9c2Uocyx0KTtsZXQgYT1TLmFycmF5KGkpO3R5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKGE9YS5taW4oZS5taW5JdGVtcykpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKGE9YS5tYXgoZS5tYXhJdGVtcykpLG89YX1lbHNlIG89Uy5hcnJheShTLmFueSgpKTsoZS51bmlxdWVJdGVtcz09PSEwfHxlLmNvbnRhaW5zIT09dm9pZCAwKSYmKG89Z3Yobyx7dW5pcXVlSXRlbXM6ZS51bmlxdWVJdGVtcz09PSEwLGNvbnRhaW5zU2NoZW1hOmUuY29udGFpbnMhPT12b2lkIDA/c2UoZS5jb250YWlucyx0KTp2b2lkIDAsbWluQ29udGFpbnM6dHlwZW9mIGUubWluQ29udGFpbnM9PSJudW1iZXIiP2UubWluQ29udGFpbnM6dm9pZCAwLG1heENvbnRhaW5zOnR5cGVvZiBlLm1heENvbnRhaW5zPT0ibnVtYmVyIj9lLm1heENvbnRhaW5zOnZvaWQgMH0pKTticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdHlwZTogJHtufWApfXJldHVybiBvfWZ1bmN0aW9uIHNlKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT9TLmFueSgpOlMubmV2ZXIoKTtsZXQgbj1TaChlLHQpO2NvbnN0IG89ZS50eXBlfHxlLmVudW0hPT12b2lkIDB8fGUuY29uc3QhPT12b2lkIDA7aWYoZS5hbnlPZiYmQXJyYXkuaXNBcnJheShlLmFueU9mKSl7Y29uc3QgYT1lLmFueU9mLm1hcCh1PT5zZSh1LHQpKSxsPVMudW5pb24oYSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sbCk6bH1pZihlLm9uZU9mJiZBcnJheS5pc0FycmF5KGUub25lT2YpKXtjb25zdCBhPWUub25lT2YubWFwKHU9PnNlKHUsdCkpLGw9Uy54b3IoYSk7bj1vP1MuaW50ZXJzZWN0aW9uKG4sbCk6bH1pZihlLmFsbE9mJiZBcnJheS5pc0FycmF5KGUuYWxsT2YpKWlmKGUuYWxsT2YubGVuZ3RoPT09MCluPW8/bjpTLmFueSgpO2Vsc2V7bGV0IGE9bz9uOnNlKGUuYWxsT2ZbMF0sdCk7Y29uc3QgbD1vPzA6MTtmb3IobGV0IHU9bDt1PGUuYWxsT2YubGVuZ3RoO3UrKylhPVMuaW50ZXJzZWN0aW9uKGEsc2UoZS5hbGxPZlt1XSx0KSk7bj1hfWUubnVsbGFibGU9PT0hMCYmdC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmKG49Uy5udWxsYWJsZShuKSksZS5yZWFkT25seT09PSEwJiYobj1TLnJlYWRvbmx5KG4pKSxlLmRlZmF1bHQhPT12b2lkIDAmJihuPW4uZGVmYXVsdChlLmRlZmF1bHQpKTtjb25zdCByPXt9LHM9WyIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciJdO2Zvcihjb25zdCBhIG9mIHMpYSBpbiBlJiYoclthXT1lW2FdKTtjb25zdCBpPVsiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiXTtmb3IoY29uc3QgYSBvZiBpKWEgaW4gZSYmKHJbYV09ZVthXSk7aWYoZS50eXBlPT09Im9iamVjdCImJmUuJHJlZj09PXZvaWQgMCl7ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiYhWnQoZS5wcm9wZXJ0eU5hbWVzKSYmKHIucHJvcGVydHlOYW1lcz1lLnByb3BlcnR5TmFtZXMpO2Zvcihjb25zdCBhIG9mWyJtaW5Qcm9wZXJ0aWVzIiwibWF4UHJvcGVydGllcyJdKWVbYV0hPT12b2lkIDAmJihyW2FdPWVbYV0pfWlmKGUudHlwZT09PSJhcnJheSImJmUuJHJlZj09PXZvaWQgMCl7ZS5jb250YWlucyE9PXZvaWQgMCYmIVp0KGUuY29udGFpbnMpJiYoci5jb250YWlucz1lLmNvbnRhaW5zKTtmb3IoY29uc3QgYSBvZlsidW5pcXVlSXRlbXMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9Zm9yKGNvbnN0IGEgb2YgT2JqZWN0LmtleXMoZSkpdXYuaGFzKGEpfHxXZShyLGEsZVthXSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZ0LnJlZ2lzdHJ5LmFkZChuLHIpLGUuZGVzY3JpcHRpb24mJihuPW4uZGVzY3JpYmUoZS5kZXNjcmlwdGlvbikpLG59ZnVuY3Rpb24gemgoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP1MuYW55KCk6Uy5uZXZlcigpO2xldCBuO3RyeXtuPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiZnJvbUpTT05TY2hlbWEgaW5wdXQgaXMgbm90IHZhbGlkIEpTT04gKHBvc3NpYmx5IGN5Y2xpYyk7IHVzZSAkZGVmcy8kcmVmIGZvciByZWN1cnNpdmUgc2NoZW1hcyIpfWNvbnN0IG89bHYobix0Py5kZWZhdWx0VGFyZ2V0KSxyPW4uJGRlZnN8fG4uZGVmaW5pdGlvbnN8fHt9LHM9e3ZlcnNpb246byxkZWZzOnIscmVmczpuZXcgTWFwLHByb2Nlc3Npbmc6bmV3IFNldCxyb290U2NoZW1hOm4scmVnaXN0cnk6dD8ucmVnaXN0cnk/P2dlfTtyZXR1cm4gc2UobixzKX1mdW5jdGlvbiBUaChlKXtyZXR1cm4gWmkoZSx7b2JqZWN0OnQ9PnQucGFydGlhbCgpLHVuaW9uOnQ9Pntjb25zdCBuPXQuX3pvZC5kZWY7cmV0dXJuIG4uZGlzY3JpbWluYXRvcj09PXZvaWQgMD90OkMobi5vcHRpb25zKX19KX1mdW5jdGlvbiBidihlLHQpe2lmKCF0Py5sZW5ndGgpcmV0dXJuIGU7Y29uc3Qgbj1lLl96b2QuZGVmO3JldHVybiBLKGUscmUobix7Y2hlY2tzOlsuLi5uLmNoZWNrcz8/W10sLi4udF19KSx7cGFyZW50OiEwfSl9ZnVuY3Rpb24gSWgoZSl7cmV0dXJuIGJ2KGUub3V0LGUuY2hlY2tzKX1mdW5jdGlvbiB5dihlKXtyZXR1cm4gZS5pbi5fem9kLnRyYWl0cy5oYXMoIiRab2RUcmFuc2Zvcm0iKT9JaChlKTplLmlufWZ1bmN0aW9uIFBoKGUpe3JldHVybiBaaShlLHtwaXBlOnQ9Pnl2KHQuX3pvZC5kZWYpLGRlZmF1bHQ6KHQsbik9Pm4/Qih0Ll96b2QuZGVmLmlubmVyVHlwZSk6dCxjYXRjaDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24geGgoZSl7cmV0dXJuIFppKGUse3BpcGU6dD0+SWgodC5fem9kLmRlZikscHJlZmF1bHQ6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIF92KGUpe3JldHVybiBFcChndCxlKX1mdW5jdGlvbiBrdihlKXtyZXR1cm4gTnAod3QsZSl9ZnVuY3Rpb24gd3YoZSl7cmV0dXJuIEhwKCR0LGUpfWZ1bmN0aW9uICR2KGUpe3JldHVybiBCcChTdCxlKX1mdW5jdGlvbiBTdihlKXtyZXR1cm4gbmgoWm4sZSl9Y29uc3QgQ2g9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJpZ2ludDokdixib29sZWFuOnd2LGRhdGU6U3YsbnVtYmVyOmt2LHN0cmluZzpfdn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxzdT1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOl9zLCRpbnB1dDp0aSwkb3V0cHV0OmVpLElOVkFMSUQ6b2ksTkVWRVI6eXMsVGltZVByZWNpc2lvbjp4aSxab2RBbnk6WG8sWm9kQXJyYXk6b3IsWm9kQmFzZTY0OlBuLFpvZEJhc2U2NFVSTDp4bixab2RCaWdJbnQ6U3QsWm9kQmlnSW50Rm9ybWF0Ok9uLFpvZEJvb2xlYW46JHQsWm9kQ0lEUnY0OlRuLFpvZENJRFJ2NjpJbixab2RDVUlEOnluLFpvZENVSUQyOl9uLFpvZENhdGNoOndyLFpvZENvZGVjOkN0LFpvZENvbXBpbGVBc3luY0Vycm9yOnJpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOnNpLFpvZENyZWRpdENhcmQ6S28sWm9kQ3VzdG9tOkV0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpNZSxab2REYXRlOlpuLFpvZERlZmF1bHQ6Z3IsWm9kRGlzY3JpbWluYXRlZFVuaW9uOnNyLFpvZEUxNjQ6Q24sWm9kRW1haWw6bW4sWm9kRW1vamk6dm4sWm9kRW51bTpLZSxab2RFcnJvcjp5aCxab2RFeGFjdE9wdGlvbmFsOk1uLFpvZEZpbGU6cHIsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBmb30sWm9kRnVuY3Rpb246T3IsWm9kR1VJRDpnbixab2RJQkFOOldvLFpvZElQdjQ6U24sWm9kSVB2Njp6bixab2RJU09EYXRlOmJ0LFpvZElTT0RhdGVUaW1lOnZ0LFpvZElTT0R1cmF0aW9uOl90LFpvZElTT1RpbWU6eXQsWm9kSW5zdGFuY2VPZjpOcixab2RJbnRlcnNlY3Rpb246aXIsWm9kSXNzdWVDb2RlOl9oLFpvZEpXVDpFbixab2RLU1VJRDokbixab2RMYXp5OnhyLFpvZExpdGVyYWw6ZHIsWm9kTUFDOkpvLFpvZE1hcDp1cixab2ROYU46U3IsWm9kTmFub0lEOmJuLFpvZE5ldmVyOnRyLFpvZE5vbk9wdGlvbmFsOnFuLFpvZE51bGw6WW8sWm9kTnVsbGFibGU6bXIsWm9kTnVtYmVyOnd0LFpvZE51bWJlckZvcm1hdDpxZSxab2RPYmplY3Q6enQsWm9kT3B0aW9uYWw6UHQsWm9kUGlwZTp4dCxab2RQcmVmYXVsdDpicixab2RQcmVwcm9jZXNzOnpyLFpvZFByb21pc2U6RXIsWm9kUmVhZG9ubHk6VHIsWm9kUmVhbEVycm9yOnVlLFpvZFJlY29yZDpKZSxab2RTZXQ6bHIsWm9kU3RyaW5nOmd0LFpvZFN0cmluZ0Zvcm1hdDpMLFpvZFN1Y2Nlc3M6a3IsWm9kU3ltYm9sOkdvLFpvZFRlbXBsYXRlTGl0ZXJhbDpQcixab2RUcmFuc2Zvcm06aHIsWm9kVHVwbGU6YXIsWm9kVHlwZTp4LFpvZFVMSUQ6a24sWm9kVVJMOmt0LFpvZFVVSUQ6a2UsWm9kVW5kZWZpbmVkOlFvLFpvZFVuaW9uOlR0LFpvZFVua25vd246ZXIsWm9kVm9pZDpucixab2RYSUQ6d24sWm9kWG9yOnJyLF9ab2RTdHJpbmc6Zm4sX2RlZmF1bHQ6dnIsX2Z1bmN0aW9uOnV0LGFueTpSbixhcnJheTpULGJhc2U2NDptYSxiYXNlNjR1cmw6Z2EsYmlnaW50OkNhLGJvb2xlYW46RCxjYXRjaDokcixjaGVjazpZYSxjaWRydjQ6aGEsY2lkcnY2OmZhLGNsb25lOkssY29kZWM6S2EsY29lcmNlOkNoLGNvbXBpbGU6aWksY29uZmlnOkcsY29yZTpnaCxjcmVkaXRDYXJkOmJhLGN1aWQ6c2EsY3VpZDI6aWEsY3VycmVuY3lDb2RlOlNhLGN1c3RvbTpBcixkYXRlOlphLGRlY29kZTpVaSxkZWNvZGVBc3luYzpGaSxkZWVwUGFydGlhbDpUaCxkZXNjcmliZTpYYSxkaXNjcmltaW5hdGVkVW5pb246Tm4sZTE2NDp2YSxlbWFpbDpXaSxlbW9qaTpvYSxlbmNvZGU6TGksZW5jb2RlQXN5bmM6SGksZW5kc1dpdGg6c24sZW51bTp0ZSxleGFjdE9wdGlvbmFsOmZyLGZpbGU6RmEsZmxhdHRlbkVycm9yOkNvLGZsb2F0MzI6VGEsZmxvYXQ2NDpJYSxmb3JtYXRFcnJvcjpFbyxmcm9tSlNPTlNjaGVtYTp6aCxmdW5jdGlvbjp1dCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOkpzLGdldEVycm9yTWFwOndoLGdsb2JhbFJlZ2lzdHJ5OmdlLGd0OkNlLGd0ZTpwZSxndWlkOkdpLGhhc2g6emEsaGV4OiRhLGhvc3RuYW1lOndhLGh0dHBVcmw6bmEsaWJhbjp5YSxpbmNsdWRlczpvbixpbnB1dDpQaCxpbnN0YW5jZW9mOnRjLGludDpxdCxpbnQzMjpQYSxpbnQ2NDpFYSxpbnRlcnNlY3Rpb246SXQsaW52ZXJ0Q29kZWM6V2EsaXB2NDpsYSxpcHY2OnBhLGlzbzpyYyxqc29uOm9jLGp3dDpfYSxrZXlvZjpOYSxrc3VpZDp1YSxsYXp5OkNyLGxlbmd0aDpmdCxsaXRlcmFsOmYsbG9jYWxlczpYcyxsb29zZU9iamVjdDpYLGxvb3NlUmVjb3JkOkRhLGxvd2VyY2FzZTp0bixsdDp4ZSxsdGU6ZGUsbWFjOmRhLG1hcDpMYSxtYXhMZW5ndGg6aHQsbWF4U2l6ZTpHZSxtZW1vaXplcjpNbyxtZXRhOmVjLG1pbWU6Y24sbWluTGVuZ3RoOmplLG1pblNpemU6RWUsbXVsdGlwbGVPZjpCZSxuYW46SmEsbmFub2lkOnJhLG5hdGl2ZUVudW06SGEsbmVnYXRpdmU6SG8sbmV2ZXI6VmUsbm9ubmVnYXRpdmU6Qm8sbm9ub3B0aW9uYWw6X3Isbm9ucG9zaXRpdmU6Rm8sbm9ybWFsaXplOnVuLG51bGw6QW4sbnVsbGFibGU6Y3QsbnVsbGlzaDpCYSxudW1iZXI6UCxvYmplY3Q6ZyxvcHRpb25hbDpCLG91dHB1dDp4aCxvdmVyd3JpdGU6JGUscGFyc2U6amkscGFyc2VBc3luYzpNaSxwYXJ0aWFsUmVjb3JkOnFhLHBpcGU6RHQscG9zaXRpdmU6VW8scHJlZmF1bHQ6eXIscHJlcHJvY2VzczpEbixwcmV0dGlmeUVycm9yOndzLHByb21pc2U6UWEscHJvcGVydGllczphbixwcm9wZXJ0eTpWbyxyZWFkb25seTpJcixyZWNvcmQ6QSxyZWZpbmU6UnIscmVnZXg6ZW4scmVnZXhlczpObyxyZWdpc3RyeTpxbyxzYWZlRGVjb2RlOlZpLHNhZmVEZWNvZGVBc3luYzpLaSxzYWZlRW5jb2RlOkJpLHNhZmVFbmNvZGVBc3luYzpKaSxzYWZlUGFyc2U6cWksc2FmZVBhcnNlQXN5bmM6RGksc2V0OlVhLHNldEVycm9yTWFwOmtoLHNpemU6cHQsc2x1Z2lmeTpobixzdGFydHNXaXRoOnJuLHN0cmljdE9iamVjdDpqYSxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6a2Esc3RyaW5nYm9vbDpuYyxzdWNjZXNzOlZhLHN1cGVyUmVmaW5lOlpyLHN5bWJvbDpBYSx0ZW1wbGF0ZUxpdGVyYWw6R2EsdG9KU09OU2NoZW1hOlJpLHRvTG93ZXJDYXNlOmRuLHRvVXBwZXJDYXNlOnBuLHRvWm9kOmtvLHRyYW5zZm9ybTpqbix0cmVlaWZ5RXJyb3I6a3MsdHJpbTpsbix0dXBsZTpjcix1aW50MzI6eGEsdWludDY0Ok9hLHVsaWQ6YWEsdW5kZWZpbmVkOmF0LHVuaW9uOkMsdW5rbm93bjpqLHVwcGVyY2FzZTpubix1cmw6dGEsdXRpbDpicyx1dWlkOlFpLHV1aWR2NDpZaSx1dWlkdjY6WGksdXVpZHY3OmVhLHZhbGlkYXRlOkFvLHZhbGlkYXRlQXN5bmM6Um8sdm9pZDpSYSx3aXRoUGFyc2VyOmFpLHhpZDpjYSx4b3I6TWF9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksenY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpfcywkaW5wdXQ6dGksJG91dHB1dDplaSxJTlZBTElEOm9pLE5FVkVSOnlzLFRpbWVQcmVjaXNpb246eGksWm9kQW55OlhvLFpvZEFycmF5Om9yLFpvZEJhc2U2NDpQbixab2RCYXNlNjRVUkw6eG4sWm9kQmlnSW50OlN0LFpvZEJpZ0ludEZvcm1hdDpPbixab2RCb29sZWFuOiR0LFpvZENJRFJ2NDpUbixab2RDSURSdjY6SW4sWm9kQ1VJRDp5bixab2RDVUlEMjpfbixab2RDYXRjaDp3cixab2RDb2RlYzpDdCxab2RDb21waWxlQXN5bmNFcnJvcjpyaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjpzaSxab2RDcmVkaXRDYXJkOktvLFpvZEN1c3RvbTpFdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6TWUsWm9kRGF0ZTpabixab2REZWZhdWx0OmdyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpzcixab2RFMTY0OkNuLFpvZEVtYWlsOm1uLFpvZEVtb2ppOnZuLFpvZEVudW06S2UsWm9kRXJyb3I6eWgsWm9kRXhhY3RPcHRpb25hbDpNbixab2RGaWxlOnByLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gZm99LFpvZEZ1bmN0aW9uOk9yLFpvZEdVSUQ6Z24sWm9kSUJBTjpXbyxab2RJUHY0OlNuLFpvZElQdjY6em4sWm9kSVNPRGF0ZTpidCxab2RJU09EYXRlVGltZTp2dCxab2RJU09EdXJhdGlvbjpfdCxab2RJU09UaW1lOnl0LFpvZEluc3RhbmNlT2Y6TnIsWm9kSW50ZXJzZWN0aW9uOmlyLFpvZElzc3VlQ29kZTpfaCxab2RKV1Q6RW4sWm9kS1NVSUQ6JG4sWm9kTGF6eTp4cixab2RMaXRlcmFsOmRyLFpvZE1BQzpKbyxab2RNYXA6dXIsWm9kTmFOOlNyLFpvZE5hbm9JRDpibixab2ROZXZlcjp0cixab2ROb25PcHRpb25hbDpxbixab2ROdWxsOllvLFpvZE51bGxhYmxlOm1yLFpvZE51bWJlcjp3dCxab2ROdW1iZXJGb3JtYXQ6cWUsWm9kT2JqZWN0Onp0LFpvZE9wdGlvbmFsOlB0LFpvZFBpcGU6eHQsWm9kUHJlZmF1bHQ6YnIsWm9kUHJlcHJvY2Vzczp6cixab2RQcm9taXNlOkVyLFpvZFJlYWRvbmx5OlRyLFpvZFJlYWxFcnJvcjp1ZSxab2RSZWNvcmQ6SmUsWm9kU2V0OmxyLFpvZFN0cmluZzpndCxab2RTdHJpbmdGb3JtYXQ6TCxab2RTdWNjZXNzOmtyLFpvZFN5bWJvbDpHbyxab2RUZW1wbGF0ZUxpdGVyYWw6UHIsWm9kVHJhbnNmb3JtOmhyLFpvZFR1cGxlOmFyLFpvZFR5cGU6eCxab2RVTElEOmtuLFpvZFVSTDprdCxab2RVVUlEOmtlLFpvZFVuZGVmaW5lZDpRbyxab2RVbmlvbjpUdCxab2RVbmtub3duOmVyLFpvZFZvaWQ6bnIsWm9kWElEOnduLFpvZFhvcjpycixfWm9kU3RyaW5nOmZuLF9kZWZhdWx0OnZyLF9mdW5jdGlvbjp1dCxhbnk6Um4sYXJyYXk6VCxiYXNlNjQ6bWEsYmFzZTY0dXJsOmdhLGJpZ2ludDpDYSxib29sZWFuOkQsY2F0Y2g6JHIsY2hlY2s6WWEsY2lkcnY0OmhhLGNpZHJ2NjpmYSxjbG9uZTpLLGNvZGVjOkthLGNvZXJjZTpDaCxjb21waWxlOmlpLGNvbmZpZzpHLGNvcmU6Z2gsY3JlZGl0Q2FyZDpiYSxjdWlkOnNhLGN1aWQyOmlhLGN1cnJlbmN5Q29kZTpTYSxjdXN0b206QXIsZGF0ZTpaYSxkZWNvZGU6VWksZGVjb2RlQXN5bmM6RmksZGVlcFBhcnRpYWw6VGgsZGVmYXVsdDpzdSxkZXNjcmliZTpYYSxkaXNjcmltaW5hdGVkVW5pb246Tm4sZTE2NDp2YSxlbWFpbDpXaSxlbW9qaTpvYSxlbmNvZGU6TGksZW5jb2RlQXN5bmM6SGksZW5kc1dpdGg6c24sZW51bTp0ZSxleGFjdE9wdGlvbmFsOmZyLGZpbGU6RmEsZmxhdHRlbkVycm9yOkNvLGZsb2F0MzI6VGEsZmxvYXQ2NDpJYSxmb3JtYXRFcnJvcjpFbyxmcm9tSlNPTlNjaGVtYTp6aCxmdW5jdGlvbjp1dCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOkpzLGdldEVycm9yTWFwOndoLGdsb2JhbFJlZ2lzdHJ5OmdlLGd0OkNlLGd0ZTpwZSxndWlkOkdpLGhhc2g6emEsaGV4OiRhLGhvc3RuYW1lOndhLGh0dHBVcmw6bmEsaWJhbjp5YSxpbmNsdWRlczpvbixpbnB1dDpQaCxpbnN0YW5jZW9mOnRjLGludDpxdCxpbnQzMjpQYSxpbnQ2NDpFYSxpbnRlcnNlY3Rpb246SXQsaW52ZXJ0Q29kZWM6V2EsaXB2NDpsYSxpcHY2OnBhLGlzbzpyYyxqc29uOm9jLGp3dDpfYSxrZXlvZjpOYSxrc3VpZDp1YSxsYXp5OkNyLGxlbmd0aDpmdCxsaXRlcmFsOmYsbG9jYWxlczpYcyxsb29zZU9iamVjdDpYLGxvb3NlUmVjb3JkOkRhLGxvd2VyY2FzZTp0bixsdDp4ZSxsdGU6ZGUsbWFjOmRhLG1hcDpMYSxtYXhMZW5ndGg6aHQsbWF4U2l6ZTpHZSxtZW1vaXplcjpNbyxtZXRhOmVjLG1pbWU6Y24sbWluTGVuZ3RoOmplLG1pblNpemU6RWUsbXVsdGlwbGVPZjpCZSxuYW46SmEsbmFub2lkOnJhLG5hdGl2ZUVudW06SGEsbmVnYXRpdmU6SG8sbmV2ZXI6VmUsbm9ubmVnYXRpdmU6Qm8sbm9ub3B0aW9uYWw6X3Isbm9ucG9zaXRpdmU6Rm8sbm9ybWFsaXplOnVuLG51bGw6QW4sbnVsbGFibGU6Y3QsbnVsbGlzaDpCYSxudW1iZXI6UCxvYmplY3Q6ZyxvcHRpb25hbDpCLG91dHB1dDp4aCxvdmVyd3JpdGU6JGUscGFyc2U6amkscGFyc2VBc3luYzpNaSxwYXJ0aWFsUmVjb3JkOnFhLHBpcGU6RHQscG9zaXRpdmU6VW8scHJlZmF1bHQ6eXIscHJlcHJvY2VzczpEbixwcmV0dGlmeUVycm9yOndzLHByb21pc2U6UWEscHJvcGVydGllczphbixwcm9wZXJ0eTpWbyxyZWFkb25seTpJcixyZWNvcmQ6QSxyZWZpbmU6UnIscmVnZXg6ZW4scmVnZXhlczpObyxyZWdpc3RyeTpxbyxzYWZlRGVjb2RlOlZpLHNhZmVEZWNvZGVBc3luYzpLaSxzYWZlRW5jb2RlOkJpLHNhZmVFbmNvZGVBc3luYzpKaSxzYWZlUGFyc2U6cWksc2FmZVBhcnNlQXN5bmM6RGksc2V0OlVhLHNldEVycm9yTWFwOmtoLHNpemU6cHQsc2x1Z2lmeTpobixzdGFydHNXaXRoOnJuLHN0cmljdE9iamVjdDpqYSxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6a2Esc3RyaW5nYm9vbDpuYyxzdWNjZXNzOlZhLHN1cGVyUmVmaW5lOlpyLHN5bWJvbDpBYSx0ZW1wbGF0ZUxpdGVyYWw6R2EsdG9KU09OU2NoZW1hOlJpLHRvTG93ZXJDYXNlOmRuLHRvVXBwZXJDYXNlOnBuLHRvWm9kOmtvLHRyYW5zZm9ybTpqbix0cmVlaWZ5RXJyb3I6a3MsdHJpbTpsbix0dXBsZTpjcix1aW50MzI6eGEsdWludDY0Ok9hLHVsaWQ6YWEsdW5kZWZpbmVkOmF0LHVuaW9uOkMsdW5rbm93bjpqLHVwcGVyY2FzZTpubix1cmw6dGEsdXRpbDpicyx1dWlkOlFpLHV1aWR2NDpZaSx1dWlkdjY6WGksdXVpZHY3OmVhLHZhbGlkYXRlOkFvLHZhbGlkYXRlQXN5bmM6Um8sdm9pZDpSYSx3aXRoUGFyc2VyOmFpLHhpZDpjYSx4b3I6TWEsejpzdX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxVZT0iaW8ubW9kZWxjb250ZXh0cHJvdG9jb2wvcmVsYXRlZC10YXNrIixqcj0iMi4wIixXPUFyKGU9PmUhPT1udWxsJiYodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIikpLEVoPUMoW2goKSxQKCkuaW50KCldKSxPaD1oKCk7WCh7dHRsOlAoKS5vcHRpb25hbCgpLHBvbGxJbnRlcnZhbDpQKCkub3B0aW9uYWwoKX0pO2NvbnN0IFR2PWcoe3R0bDpQKCkub3B0aW9uYWwoKX0pLEl2PWcoe3Rhc2tJZDpoKCl9KSxzYz1YKHtwcm9ncmVzc1Rva2VuOkVoLm9wdGlvbmFsKCksW1VlXTpJdi5vcHRpb25hbCgpfSksZmU9Zyh7X21ldGE6c2Mub3B0aW9uYWwoKX0pLExuPWZlLmV4dGVuZCh7dGFzazpUdi5vcHRpb25hbCgpfSksUHY9ZT0+TG4uc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsbmU9Zyh7bWV0aG9kOmgoKSxwYXJhbXM6ZmUubG9vc2UoKS5vcHRpb25hbCgpfSkseWU9Zyh7X21ldGE6c2Mub3B0aW9uYWwoKX0pLF9lPWcoe21ldGhvZDpoKCkscGFyYW1zOnllLmxvb3NlKCkub3B0aW9uYWwoKX0pLG9lPVgoe19tZXRhOnNjLm9wdGlvbmFsKCl9KSxVbj1DKFtoKCksUCgpLmludCgpXSksQWg9Zyh7anNvbnJwYzpmKGpyKSxpZDpVbiwuLi5uZS5zaGFwZX0pLnN0cmljdCgpLGl1PWU9PkFoLnNhZmVQYXJzZShlKS5zdWNjZXNzLFJoPWcoe2pzb25ycGM6ZihqciksLi4uX2Uuc2hhcGV9KS5zdHJpY3QoKSx4dj1lPT5SaC5zYWZlUGFyc2UoZSkuc3VjY2VzcyxpYz1nKHtqc29ucnBjOmYoanIpLGlkOlVuLHJlc3VsdDpvZX0pLnN0cmljdCgpLHJvPWU9PmljLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBVOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkoVXx8KFU9e30pKTtjb25zdCBhYz1nKHtqc29ucnBjOmYoanIpLGlkOlVuLm9wdGlvbmFsKCksZXJyb3I6Zyh7Y29kZTpQKCkuaW50KCksbWVzc2FnZTpoKCksZGF0YTpqKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCksQ3Y9ZT0+YWMuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsRXY9QyhbQWgsUmgsaWMsYWNdKTtDKFtpYyxhY10pO2NvbnN0IGNjPW9lLnN0cmljdCgpLE92PXllLmV4dGVuZCh7cmVxdWVzdElkOlVuLm9wdGlvbmFsKCkscmVhc29uOmgoKS5vcHRpb25hbCgpfSksdWM9X2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiKSxwYXJhbXM6T3Z9KSxBdj1nKHtzcmM6aCgpLG1pbWVUeXBlOmgoKS5vcHRpb25hbCgpLHNpemVzOlQoaCgpKS5vcHRpb25hbCgpLHRoZW1lOnRlKFsibGlnaHQiLCJkYXJrIl0pLm9wdGlvbmFsKCl9KSxIbj1nKHtpY29uczpUKEF2KS5vcHRpb25hbCgpfSksbHQ9Zyh7bmFtZTpoKCksdGl0bGU6aCgpLm9wdGlvbmFsKCl9KSxNcj1sdC5leHRlbmQoey4uLmx0LnNoYXBlLC4uLkhuLnNoYXBlLHZlcnNpb246aCgpLHdlYnNpdGVVcmw6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCl9KSxSdj1JdChnKHthcHBseURlZmF1bHRzOkQoKS5vcHRpb25hbCgpfSksQShoKCksaigpKSksWnY9RG4oZT0+ZSYmdHlwZW9mIGU9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShlKSYmT2JqZWN0LmtleXMoZSkubGVuZ3RoPT09MD97Zm9ybTp7fX06ZSxJdChnKHtmb3JtOlJ2Lm9wdGlvbmFsKCksdXJsOlcub3B0aW9uYWwoKX0pLEEoaCgpLGooKSkub3B0aW9uYWwoKSkpLE52PVgoe2xpc3Q6Vy5vcHRpb25hbCgpLGNhbmNlbDpXLm9wdGlvbmFsKCkscmVxdWVzdHM6WCh7c2FtcGxpbmc6WCh7Y3JlYXRlTWVzc2FnZTpXLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOlgoe2NyZWF0ZTpXLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLGp2PVgoe2xpc3Q6Vy5vcHRpb25hbCgpLGNhbmNlbDpXLm9wdGlvbmFsKCkscmVxdWVzdHM6WCh7dG9vbHM6WCh7Y2FsbDpXLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLE12PWcoe2V4cGVyaW1lbnRhbDpBKGgoKSxXKS5vcHRpb25hbCgpLHNhbXBsaW5nOmcoe2NvbnRleHQ6Vy5vcHRpb25hbCgpLHRvb2xzOlcub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksZWxpY2l0YXRpb246WnYub3B0aW9uYWwoKSxyb290czpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdGFza3M6TnYub3B0aW9uYWwoKSxleHRlbnNpb25zOkEoaCgpLFcpLm9wdGlvbmFsKCl9KSxxdj1mZS5leHRlbmQoe3Byb3RvY29sVmVyc2lvbjpoKCksY2FwYWJpbGl0aWVzOk12LGNsaWVudEluZm86TXJ9KSxEdj1uZS5leHRlbmQoe21ldGhvZDpmKCJpbml0aWFsaXplIikscGFyYW1zOnF2fSksTHY9Zyh7ZXhwZXJpbWVudGFsOkEoaCgpLFcpLm9wdGlvbmFsKCksbG9nZ2luZzpXLm9wdGlvbmFsKCksY29tcGxldGlvbnM6Vy5vcHRpb25hbCgpLHByb21wdHM6Zyh7bGlzdENoYW5nZWQ6RCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHJlc291cmNlczpnKHtzdWJzY3JpYmU6RCgpLm9wdGlvbmFsKCksbGlzdENoYW5nZWQ6RCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpqdi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6QShoKCksVykub3B0aW9uYWwoKX0pLFV2PW9lLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmgoKSxjYXBhYmlsaXRpZXM6THYsc2VydmVySW5mbzpNcixpbnN0cnVjdGlvbnM6aCgpLm9wdGlvbmFsKCl9KSxIdj1fZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2luaXRpYWxpemVkIikscGFyYW1zOnllLm9wdGlvbmFsKCl9KSxxcj1uZS5leHRlbmQoe21ldGhvZDpmKCJwaW5nIikscGFyYW1zOmZlLm9wdGlvbmFsKCl9KSxGdj1nKHtwcm9ncmVzczpQKCksdG90YWw6QihQKCkpLG1lc3NhZ2U6QihoKCkpfSksQnY9Zyh7Li4ueWUuc2hhcGUsLi4uRnYuc2hhcGUscHJvZ3Jlc3NUb2tlbjpFaH0pLGxjPV9lLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvcHJvZ3Jlc3MiKSxwYXJhbXM6QnZ9KSxWdj1mZS5leHRlbmQoe2N1cnNvcjpPaC5vcHRpb25hbCgpfSksRm49bmUuZXh0ZW5kKHtwYXJhbXM6VnYub3B0aW9uYWwoKX0pLEJuPW9lLmV4dGVuZCh7bmV4dEN1cnNvcjpPaC5vcHRpb25hbCgpfSksSnY9dGUoWyJ3b3JraW5nIiwiaW5wdXRfcmVxdWlyZWQiLCJjb21wbGV0ZWQiLCJmYWlsZWQiLCJjYW5jZWxsZWQiXSksVm49Zyh7dGFza0lkOmgoKSxzdGF0dXM6SnYsdHRsOkMoW1AoKSxBbigpXSksY3JlYXRlZEF0OmgoKSxsYXN0VXBkYXRlZEF0OmgoKSxwb2xsSW50ZXJ2YWw6QihQKCkpLHN0YXR1c01lc3NhZ2U6QihoKCkpfSksZGM9b2UuZXh0ZW5kKHt0YXNrOlZufSksS3Y9eWUubWVyZ2UoVm4pLG1vPV9lLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIikscGFyYW1zOkt2fSkscGM9bmUuZXh0ZW5kKHttZXRob2Q6ZigidGFza3MvZ2V0IikscGFyYW1zOmZlLmV4dGVuZCh7dGFza0lkOmgoKX0pfSksaGM9b2UubWVyZ2UoVm4pLGZjPW5lLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL3Jlc3VsdCIpLHBhcmFtczpmZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pO29lLmxvb3NlKCk7Y29uc3QgbWM9Rm4uZXh0ZW5kKHttZXRob2Q6ZigidGFza3MvbGlzdCIpfSksZ2M9Qm4uZXh0ZW5kKHt0YXNrczpUKFZuKX0pLHZjPW5lLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL2NhbmNlbCIpLHBhcmFtczpmZS5leHRlbmQoe3Rhc2tJZDpoKCl9KX0pLFd2PW9lLm1lcmdlKFZuKSxaaD1nKHt1cmk6aCgpLG1pbWVUeXBlOkIoaCgpKSxfbWV0YTpBKGgoKSxqKCkpLm9wdGlvbmFsKCl9KSxOaD1aaC5leHRlbmQoe3RleHQ6aCgpfSksYmM9aCgpLnJlZmluZShlPT57dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX0se21lc3NhZ2U6IkludmFsaWQgQmFzZTY0IHN0cmluZyJ9KSxqaD1aaC5leHRlbmQoe2Jsb2I6YmN9KSxKbj10ZShbInVzZXIiLCJhc3Npc3RhbnQiXSksT3Q9Zyh7YXVkaWVuY2U6VChKbikub3B0aW9uYWwoKSxwcmlvcml0eTpQKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLGxhc3RNb2RpZmllZDokaCh7b2Zmc2V0OiEwfSkub3B0aW9uYWwoKX0pLE1oPWcoey4uLmx0LnNoYXBlLC4uLkhuLnNoYXBlLHVyaTpoKCksZGVzY3JpcHRpb246QihoKCkpLG1pbWVUeXBlOkIoaCgpKSxzaXplOkIoUCgpKSxhbm5vdGF0aW9uczpPdC5vcHRpb25hbCgpLF9tZXRhOkIoWCh7fSkpfSksR3Y9Zyh7Li4ubHQuc2hhcGUsLi4uSG4uc2hhcGUsdXJpVGVtcGxhdGU6aCgpLGRlc2NyaXB0aW9uOkIoaCgpKSxtaW1lVHlwZTpCKGgoKSksYW5ub3RhdGlvbnM6T3Qub3B0aW9uYWwoKSxfbWV0YTpCKFgoe30pKX0pLFF2PUZuLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9saXN0Iil9KSxxaD1Cbi5leHRlbmQoe3Jlc291cmNlczpUKE1oKX0pLFl2PUZuLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy90ZW1wbGF0ZXMvbGlzdCIpfSksWHY9Qm4uZXh0ZW5kKHtyZXNvdXJjZVRlbXBsYXRlczpUKEd2KX0pLHljPWZlLmV4dGVuZCh7dXJpOmgoKX0pLGViPXljLHRiPW5lLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9yZWFkIikscGFyYW1zOmVifSksRGg9b2UuZXh0ZW5kKHtjb250ZW50czpUKEMoW05oLGpoXSkpfSksbmI9X2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnllLm9wdGlvbmFsKCl9KSxvYj15YyxyYj1uZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvc3Vic2NyaWJlIikscGFyYW1zOm9ifSksc2I9eWMsaWI9bmUuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3Vuc3Vic2NyaWJlIikscGFyYW1zOnNifSksYWI9eWUuZXh0ZW5kKHt1cmk6aCgpfSksY2I9X2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCIpLHBhcmFtczphYn0pLHViPWcoe25hbWU6aCgpLGRlc2NyaXB0aW9uOkIoaCgpKSxyZXF1aXJlZDpCKEQoKSl9KSxsYj1nKHsuLi5sdC5zaGFwZSwuLi5Ibi5zaGFwZSxkZXNjcmlwdGlvbjpCKGgoKSksYXJndW1lbnRzOkIoVCh1YikpLF9tZXRhOkIoWCh7fSkpfSksZGI9Rm4uZXh0ZW5kKHttZXRob2Q6ZigicHJvbXB0cy9saXN0Iil9KSxwYj1Cbi5leHRlbmQoe3Byb21wdHM6VChsYil9KSxoYj1mZS5leHRlbmQoe25hbWU6aCgpLGFyZ3VtZW50czpBKGgoKSxoKCkpLm9wdGlvbmFsKCl9KSxmYj1uZS5leHRlbmQoe21ldGhvZDpmKCJwcm9tcHRzL2dldCIpLHBhcmFtczpoYn0pLF9jPWcoe3R5cGU6ZigidGV4dCIpLHRleHQ6aCgpLGFubm90YXRpb25zOk90Lm9wdGlvbmFsKCksX21ldGE6QShoKCksaigpKS5vcHRpb25hbCgpfSksa2M9Zyh7dHlwZTpmKCJpbWFnZSIpLGRhdGE6YmMsbWltZVR5cGU6aCgpLGFubm90YXRpb25zOk90Lm9wdGlvbmFsKCksX21ldGE6QShoKCksaigpKS5vcHRpb25hbCgpfSksd2M9Zyh7dHlwZTpmKCJhdWRpbyIpLGRhdGE6YmMsbWltZVR5cGU6aCgpLGFubm90YXRpb25zOk90Lm9wdGlvbmFsKCksX21ldGE6QShoKCksaigpKS5vcHRpb25hbCgpfSksbWI9Zyh7dHlwZTpmKCJ0b29sX3VzZSIpLG5hbWU6aCgpLGlkOmgoKSxpbnB1dDpBKGgoKSxqKCkpLF9tZXRhOkEoaCgpLGooKSkub3B0aW9uYWwoKX0pLExoPWcoe3R5cGU6ZigicmVzb3VyY2UiKSxyZXNvdXJjZTpDKFtOaCxqaF0pLGFubm90YXRpb25zOk90Lm9wdGlvbmFsKCksX21ldGE6QShoKCksaigpKS5vcHRpb25hbCgpfSksVWg9TWguZXh0ZW5kKHt0eXBlOmYoInJlc291cmNlX2xpbmsiKX0pLEtuPUMoW19jLGtjLHdjLFVoLExoXSksZ2I9Zyh7cm9sZTpKbixjb250ZW50OktufSksdmI9b2UuZXh0ZW5kKHtkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtZXNzYWdlczpUKGdiKX0pLGJiPV9lLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvcHJvbXB0cy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6eWUub3B0aW9uYWwoKX0pLHliPWcoe3RpdGxlOmgoKS5vcHRpb25hbCgpLHJlYWRPbmx5SGludDpEKCkub3B0aW9uYWwoKSxkZXN0cnVjdGl2ZUhpbnQ6RCgpLm9wdGlvbmFsKCksaWRlbXBvdGVudEhpbnQ6RCgpLm9wdGlvbmFsKCksb3BlbldvcmxkSGludDpEKCkub3B0aW9uYWwoKX0pLF9iPWcoe3Rhc2tTdXBwb3J0OnRlKFsicmVxdWlyZWQiLCJvcHRpb25hbCIsImZvcmJpZGRlbiJdKS5vcHRpb25hbCgpfSksJGM9Zyh7Li4ubHQuc2hhcGUsLi4uSG4uc2hhcGUsZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksaW5wdXRTY2hlbWE6Zyh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOkEoaCgpLFcpLm9wdGlvbmFsKCkscmVxdWlyZWQ6VChoKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChqKCkpLG91dHB1dFNjaGVtYTpnKHt0eXBlOmYoIm9iamVjdCIpLHByb3BlcnRpZXM6QShoKCksVykub3B0aW9uYWwoKSxyZXF1aXJlZDpUKGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKGooKSkub3B0aW9uYWwoKSxhbm5vdGF0aW9uczp5Yi5vcHRpb25hbCgpLGV4ZWN1dGlvbjpfYi5vcHRpb25hbCgpLF9tZXRhOkEoaCgpLGooKSkub3B0aW9uYWwoKX0pLEhoPUZuLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2xpc3QiKX0pLGtiPUJuLmV4dGVuZCh7dG9vbHM6VCgkYyl9KSxEcj1vZS5leHRlbmQoe2NvbnRlbnQ6VChLbikuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6QShoKCksaigpKS5vcHRpb25hbCgpLGlzRXJyb3I6RCgpLm9wdGlvbmFsKCl9KTtEci5vcihvZS5leHRlbmQoe3Rvb2xSZXN1bHQ6aigpfSkpO2NvbnN0IHdiPUxuLmV4dGVuZCh7bmFtZTpoKCksYXJndW1lbnRzOkEoaCgpLGooKSkub3B0aW9uYWwoKX0pLEZoPW5lLmV4dGVuZCh7bWV0aG9kOmYoInRvb2xzL2NhbGwiKSxwYXJhbXM6d2J9KSwkYj1fZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Rvb2xzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczp5ZS5vcHRpb25hbCgpfSk7Zyh7YXV0b1JlZnJlc2g6RCgpLmRlZmF1bHQoITApLGRlYm91bmNlTXM6UCgpLmludCgpLm5vbm5lZ2F0aXZlKCkuZGVmYXVsdCgzMDApfSk7Y29uc3QgQmg9dGUoWyJkZWJ1ZyIsImluZm8iLCJub3RpY2UiLCJ3YXJuaW5nIiwiZXJyb3IiLCJjcml0aWNhbCIsImFsZXJ0IiwiZW1lcmdlbmN5Il0pLFNiPWZlLmV4dGVuZCh7bGV2ZWw6Qmh9KSx6Yj1uZS5leHRlbmQoe21ldGhvZDpmKCJsb2dnaW5nL3NldExldmVsIikscGFyYW1zOlNifSksVGI9eWUuZXh0ZW5kKHtsZXZlbDpCaCxsb2dnZXI6aCgpLm9wdGlvbmFsKCksZGF0YTpqKCl9KSxJYj1fZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL21lc3NhZ2UiKSxwYXJhbXM6VGJ9KSxQYj1nKHtuYW1lOmgoKS5vcHRpb25hbCgpfSkseGI9Zyh7aGludHM6VChQYikub3B0aW9uYWwoKSxjb3N0UHJpb3JpdHk6UCgpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxzcGVlZFByaW9yaXR5OlAoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksaW50ZWxsaWdlbmNlUHJpb3JpdHk6UCgpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKX0pLENiPWcoe21vZGU6dGUoWyJhdXRvIiwicmVxdWlyZWQiLCJub25lIl0pLm9wdGlvbmFsKCl9KSxFYj1nKHt0eXBlOmYoInRvb2xfcmVzdWx0IiksdG9vbFVzZUlkOmgoKS5kZXNjcmliZSgiVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29ycmVzcG9uZGluZyB0b29sIGNhbGwuIiksY29udGVudDpUKEtuKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpnKHt9KS5sb29zZSgpLm9wdGlvbmFsKCksaXNFcnJvcjpEKCkub3B0aW9uYWwoKSxfbWV0YTpBKGgoKSxqKCkpLm9wdGlvbmFsKCl9KSxPYj1ObigidHlwZSIsW19jLGtjLHdjXSksZ289Tm4oInR5cGUiLFtfYyxrYyx3YyxtYixFYl0pLEFiPWcoe3JvbGU6Sm4sY29udGVudDpDKFtnbyxUKGdvKV0pLF9tZXRhOkEoaCgpLGooKSkub3B0aW9uYWwoKX0pLFJiPUxuLmV4dGVuZCh7bWVzc2FnZXM6VChBYiksbW9kZWxQcmVmZXJlbmNlczp4Yi5vcHRpb25hbCgpLHN5c3RlbVByb21wdDpoKCkub3B0aW9uYWwoKSxpbmNsdWRlQ29udGV4dDp0ZShbIm5vbmUiLCJ0aGlzU2VydmVyIiwiYWxsU2VydmVycyJdKS5vcHRpb25hbCgpLHRlbXBlcmF0dXJlOlAoKS5vcHRpb25hbCgpLG1heFRva2VuczpQKCkuaW50KCksc3RvcFNlcXVlbmNlczpUKGgoKSkub3B0aW9uYWwoKSxtZXRhZGF0YTpXLm9wdGlvbmFsKCksdG9vbHM6VCgkYykub3B0aW9uYWwoKSx0b29sQ2hvaWNlOkNiLm9wdGlvbmFsKCl9KSxaYj1uZS5leHRlbmQoe21ldGhvZDpmKCJzYW1wbGluZy9jcmVhdGVNZXNzYWdlIikscGFyYW1zOlJifSksVmg9b2UuZXh0ZW5kKHttb2RlbDpoKCksc3RvcFJlYXNvbjpCKHRlKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyJdKS5vcihoKCkpKSxyb2xlOkpuLGNvbnRlbnQ6T2J9KSxKaD1vZS5leHRlbmQoe21vZGVsOmgoKSxzdG9wUmVhc29uOkIodGUoWyJlbmRUdXJuIiwic3RvcFNlcXVlbmNlIiwibWF4VG9rZW5zIiwidG9vbFVzZSJdKS5vcihoKCkpKSxyb2xlOkpuLGNvbnRlbnQ6QyhbZ28sVChnbyldKX0pLE5iPWcoe3R5cGU6ZigiYm9vbGVhbiIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGRlZmF1bHQ6RCgpLm9wdGlvbmFsKCl9KSxqYj1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1pbkxlbmd0aDpQKCkub3B0aW9uYWwoKSxtYXhMZW5ndGg6UCgpLm9wdGlvbmFsKCksZm9ybWF0OnRlKFsiZW1haWwiLCJ1cmkiLCJkYXRlIiwiZGF0ZS10aW1lIl0pLm9wdGlvbmFsKCksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLE1iPWcoe3R5cGU6dGUoWyJudW1iZXIiLCJpbnRlZ2VyIl0pLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1pbmltdW06UCgpLm9wdGlvbmFsKCksbWF4aW11bTpQKCkub3B0aW9uYWwoKSxkZWZhdWx0OlAoKS5vcHRpb25hbCgpfSkscWI9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxlbnVtOlQoaCgpKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksRGI9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxvbmVPZjpUKGcoe2NvbnN0OmgoKSx0aXRsZTpoKCl9KSksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLExiPWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZW51bTpUKGgoKSksZW51bU5hbWVzOlQoaCgpKS5vcHRpb25hbCgpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxVYj1DKFtxYixEYl0pLEhiPWcoe3R5cGU6ZigiYXJyYXkiKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5JdGVtczpQKCkub3B0aW9uYWwoKSxtYXhJdGVtczpQKCkub3B0aW9uYWwoKSxpdGVtczpnKHt0eXBlOmYoInN0cmluZyIpLGVudW06VChoKCkpfSksZGVmYXVsdDpUKGgoKSkub3B0aW9uYWwoKX0pLEZiPWcoe3R5cGU6ZigiYXJyYXkiKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxtaW5JdGVtczpQKCkub3B0aW9uYWwoKSxtYXhJdGVtczpQKCkub3B0aW9uYWwoKSxpdGVtczpnKHthbnlPZjpUKGcoe2NvbnN0OmgoKSx0aXRsZTpoKCl9KSl9KSxkZWZhdWx0OlQoaCgpKS5vcHRpb25hbCgpfSksQmI9QyhbSGIsRmJdKSxWYj1DKFtMYixVYixCYl0pLEpiPUMoW1ZiLE5iLGpiLE1iXSksS2I9TG4uZXh0ZW5kKHttb2RlOmYoImZvcm0iKS5vcHRpb25hbCgpLG1lc3NhZ2U6aCgpLHJlcXVlc3RlZFNjaGVtYTpnKHt0eXBlOmYoIm9iamVjdCIpLHByb3BlcnRpZXM6QShoKCksSmIpLHJlcXVpcmVkOlQoaCgpKS5vcHRpb25hbCgpfSl9KSxXYj1Mbi5leHRlbmQoe21vZGU6ZigidXJsIiksbWVzc2FnZTpoKCksZWxpY2l0YXRpb25JZDpoKCksdXJsOmgoKS51cmwoKX0pLEdiPUMoW0tiLFdiXSksUWI9bmUuZXh0ZW5kKHttZXRob2Q6ZigiZWxpY2l0YXRpb24vY3JlYXRlIikscGFyYW1zOkdifSksWWI9eWUuZXh0ZW5kKHtlbGljaXRhdGlvbklkOmgoKX0pLFhiPV9lLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvZWxpY2l0YXRpb24vY29tcGxldGUiKSxwYXJhbXM6WWJ9KSxleT1vZS5leHRlbmQoe2FjdGlvbjp0ZShbImFjY2VwdCIsImRlY2xpbmUiLCJjYW5jZWwiXSksY29udGVudDpEbihlPT5lPT09bnVsbD92b2lkIDA6ZSxBKGgoKSxDKFtoKCksUCgpLEQoKSxUKGgoKSldKSkub3B0aW9uYWwoKSl9KSx0eT1nKHt0eXBlOmYoInJlZi9yZXNvdXJjZSIpLHVyaTpoKCl9KSxueT1nKHt0eXBlOmYoInJlZi9wcm9tcHQiKSxuYW1lOmgoKX0pLG95PWZlLmV4dGVuZCh7cmVmOkMoW255LHR5XSksYXJndW1lbnQ6Zyh7bmFtZTpoKCksdmFsdWU6aCgpfSksY29udGV4dDpnKHthcmd1bWVudHM6QShoKCksaCgpKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLHJ5PW5lLmV4dGVuZCh7bWV0aG9kOmYoImNvbXBsZXRpb24vY29tcGxldGUiKSxwYXJhbXM6b3l9KSxzeT1vZS5leHRlbmQoe2NvbXBsZXRpb246WCh7dmFsdWVzOlQoaCgpKS5tYXgoMTAwKSx0b3RhbDpCKFAoKS5pbnQoKSksaGFzTW9yZTpCKEQoKSl9KX0pLGl5PWcoe3VyaTpoKCkuc3RhcnRzV2l0aCgiZmlsZTovLyIpLG5hbWU6aCgpLm9wdGlvbmFsKCksX21ldGE6QShoKCksaigpKS5vcHRpb25hbCgpfSksYXk9bmUuZXh0ZW5kKHttZXRob2Q6Zigicm9vdHMvbGlzdCIpLHBhcmFtczpmZS5vcHRpb25hbCgpfSksY3k9b2UuZXh0ZW5kKHtyb290czpUKGl5KX0pLHV5PV9lLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvcm9vdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOnllLm9wdGlvbmFsKCl9KTtDKFtxcixEdixyeSx6YixmYixkYixRdixZdix0YixyYixpYixGaCxIaCxwYyxmYyxtYyx2Y10pO0MoW3VjLGxjLEh2LHV5LG1vXSk7QyhbY2MsVmgsSmgsZXksY3ksaGMsZ2MsZGNdKTtDKFtxcixaYixRYixheSxwYyxmYyxtYyx2Y10pO0MoW3VjLGxjLEliLGNiLG5iLCRiLGJiLG1vLFhiXSk7QyhbY2MsVXYsc3ksdmIscGIscWgsWHYsRGgsRHIsa2IsaGMsZ2MsZGNdKTtjbGFzcyBaIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKGBNQ1AgZXJyb3IgJHt0fTogJHtufWApLHRoaXMuY29kZT10LHRoaXMuZGF0YT1vLHRoaXMubmFtZT0iTWNwRXJyb3IifXN0YXRpYyBmcm9tRXJyb3IodCxuLG8pe2lmKHQ9PT1VLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQmJm8pe2NvbnN0IHI9bztpZihyLmVsaWNpdGF0aW9ucylyZXR1cm4gbmV3IGx5KHIuZWxpY2l0YXRpb25zLG4pfXJldHVybiBuZXcgWih0LG4sbyl9fWNsYXNzIGx5IGV4dGVuZHMgWntjb25zdHJ1Y3Rvcih0LG49YFVSTCBlbGljaXRhdGlvbiR7dC5sZW5ndGg+MT8icyI6IiJ9IHJlcXVpcmVkYCl7c3VwZXIoVS5VcmxFbGljaXRhdGlvblJlcXVpcmVkLG4se2VsaWNpdGF0aW9uczp0fSl9Z2V0IGVsaWNpdGF0aW9ucygpe3JldHVybiB0aGlzLmRhdGE/LmVsaWNpdGF0aW9ucz8/W119fWZ1bmN0aW9uIExlKGUpe3JldHVybiBlPT09ImNvbXBsZXRlZCJ8fGU9PT0iZmFpbGVkInx8ZT09PSJjYW5jZWxsZWQifW5ldyBTZXQoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2eHl6MDEyMzQ1Njc4OSIpO2Z1bmN0aW9uIGF1KGUpe2NvbnN0IG49dHYoZSk/Lm1ldGhvZDtpZighbil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBpcyBtaXNzaW5nIGEgbWV0aG9kIGxpdGVyYWwiKTtjb25zdCBvPW52KG4pO2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBtZXRob2QgbGl0ZXJhbCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIG99ZnVuY3Rpb24gY3UoZSx0KXtjb25zdCBuPXZoKGUsdCk7aWYoIW4uc3VjY2Vzcyl0aHJvdyBuLmVycm9yO3JldHVybiBuLmRhdGF9Y29uc3QgZHk9NmU0O2NsYXNzIHB5e2NvbnN0cnVjdG9yKHQpe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9yZXF1ZXN0TWVzc2FnZUlkPTAsdGhpcy5fcmVxdWVzdEhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzPW5ldyBNYXAsdGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXNwb25zZUhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3RpbWVvdXRJbmZvPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnM9bmV3IFNldCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzPW5ldyBNYXAsdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKHVjLG49Pnt0aGlzLl9vbmNhbmNlbChuKX0pLHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihsYyxuPT57dGhpcy5fb25wcm9ncmVzcyhuKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIocXIsbj0+KHt9KSksdGhpcy5fdGFza1N0b3JlPXQ/LnRhc2tTdG9yZSx0aGlzLl90YXNrTWVzc2FnZVF1ZXVlPXQ/LnRhc2tNZXNzYWdlUXVldWUsdGhpcy5fdGFza1N0b3JlJiYodGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihwYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBaKFUuSW52YWxpZFBhcmFtcywiRmFpbGVkIHRvIHJldHJpZXZlIHRhc2s6IFRhc2sgbm90IGZvdW5kIik7cmV0dXJuey4uLnJ9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihmYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hc3luYygpPT57Y29uc3Qgcz1uLnBhcmFtcy50YXNrSWQ7aWYodGhpcy5fdGFza01lc3NhZ2VRdWV1ZSl7bGV0IGE7Zm9yKDthPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZShzLG8uc2Vzc2lvbklkKTspe2lmKGEudHlwZT09PSJyZXNwb25zZSJ8fGEudHlwZT09PSJlcnJvciIpe2NvbnN0IGw9YS5tZXNzYWdlLHU9bC5pZCxkPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KHUpO2lmKGQpaWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUodSksYS50eXBlPT09InJlc3BvbnNlIilkKGwpO2Vsc2V7Y29uc3QgbT1sLHY9bmV3IFoobS5lcnJvci5jb2RlLG0uZXJyb3IubWVzc2FnZSxtLmVycm9yLmRhdGEpO2Qodil9ZWxzZXtjb25zdCBtPWEudHlwZT09PSJyZXNwb25zZSI/IlJlc3BvbnNlIjoiRXJyb3IiO3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGAke219IGhhbmRsZXIgbWlzc2luZyBmb3IgcmVxdWVzdCAke3V9YCkpfWNvbnRpbnVlfWF3YWl0IHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLm1lc3NhZ2Use3JlbGF0ZWRSZXF1ZXN0SWQ6by5yZXF1ZXN0SWR9KX19Y29uc3QgaT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhzLG8uc2Vzc2lvbklkKTtpZighaSl0aHJvdyBuZXcgWihVLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke3N9YCk7aWYoIUxlKGkuc3RhdHVzKSlyZXR1cm4gYXdhaXQgdGhpcy5fd2FpdEZvclRhc2tVcGRhdGUocyxvLnNpZ25hbCksYXdhaXQgcigpO2lmKExlKGkuc3RhdHVzKSl7Y29uc3QgYT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFza1Jlc3VsdChzLG8uc2Vzc2lvbklkKTtyZXR1cm4gdGhpcy5fY2xlYXJUYXNrUXVldWUocyksey4uLmEsX21ldGE6ey4uLmEuX21ldGEsW1VlXTp7dGFza0lkOnN9fX19cmV0dXJuIGF3YWl0IHIoKX07cmV0dXJuIGF3YWl0IHIoKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIobWMsYXN5bmMobixvKT0+e3RyeXtjb25zdHt0YXNrczpyLG5leHRDdXJzb3I6c309YXdhaXQgdGhpcy5fdGFza1N0b3JlLmxpc3RUYXNrcyhuLnBhcmFtcz8uY3Vyc29yLG8uc2Vzc2lvbklkKTtyZXR1cm57dGFza3M6cixuZXh0Q3Vyc29yOnMsX21ldGE6e319fWNhdGNoKHIpe3Rocm93IG5ldyBaKFUuSW52YWxpZFBhcmFtcyxgRmFpbGVkIHRvIGxpc3QgdGFza3M6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcih2Yyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcil0aHJvdyBuZXcgWihVLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke24ucGFyYW1zLnRhc2tJZH1gKTtpZihMZShyLnN0YXR1cykpdGhyb3cgbmV3IFooVS5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgY2FuY2VsIHRhc2sgaW4gdGVybWluYWwgc3RhdHVzOiAke3Iuc3RhdHVzfWApO2F3YWl0IHRoaXMuX3Rhc2tTdG9yZS51cGRhdGVUYXNrU3RhdHVzKG4ucGFyYW1zLnRhc2tJZCwiY2FuY2VsbGVkIiwiQ2xpZW50IGNhbmNlbGxlZCB0YXNrIGV4ZWN1dGlvbi4iLG8uc2Vzc2lvbklkKSx0aGlzLl9jbGVhclRhc2tRdWV1ZShuLnBhcmFtcy50YXNrSWQpO2NvbnN0IHM9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcyl0aHJvdyBuZXcgWihVLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kIGFmdGVyIGNhbmNlbGxhdGlvbjogJHtuLnBhcmFtcy50YXNrSWR9YCk7cmV0dXJue19tZXRhOnt9LC4uLnN9fWNhdGNoKHIpe3Rocm93IHIgaW5zdGFuY2VvZiBaP3I6bmV3IFooVS5JbnZhbGlkUmVxdWVzdCxgRmFpbGVkIHRvIGNhbmNlbCB0YXNrOiAke3IgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpfWApfX0pKX1hc3luYyBfb25jYW5jZWwodCl7aWYoIXQucGFyYW1zLnJlcXVlc3RJZClyZXR1cm47dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LnBhcmFtcy5yZXF1ZXN0SWQpPy5hYm9ydCh0LnBhcmFtcy5yZWFzb24pfV9zZXR1cFRpbWVvdXQodCxuLG8scixzPSExKXt0aGlzLl90aW1lb3V0SW5mby5zZXQodCx7dGltZW91dElkOnNldFRpbWVvdXQocixuKSxzdGFydFRpbWU6RGF0ZS5ub3coKSx0aW1lb3V0Om4sbWF4VG90YWxUaW1lb3V0Om8scmVzZXRUaW1lb3V0T25Qcm9ncmVzczpzLG9uVGltZW91dDpyfSl9X3Jlc2V0VGltZW91dCh0KXtjb25zdCBuPXRoaXMuX3RpbWVvdXRJbmZvLmdldCh0KTtpZighbilyZXR1cm4hMTtjb25zdCBvPURhdGUubm93KCktbi5zdGFydFRpbWU7aWYobi5tYXhUb3RhbFRpbWVvdXQmJm8+PW4ubWF4VG90YWxUaW1lb3V0KXRocm93IHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSxaLmZyb21FcnJvcihVLlJlcXVlc3RUaW1lb3V0LCJNYXhpbXVtIHRvdGFsIHRpbWVvdXQgZXhjZWVkZWQiLHttYXhUb3RhbFRpbWVvdXQ6bi5tYXhUb3RhbFRpbWVvdXQsdG90YWxFbGFwc2VkOm99KTtyZXR1cm4gY2xlYXJUaW1lb3V0KG4udGltZW91dElkKSxuLnRpbWVvdXRJZD1zZXRUaW1lb3V0KG4ub25UaW1lb3V0LG4udGltZW91dCksITB9X2NsZWFudXBUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO24mJihjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSl9YXN5bmMgY29ubmVjdCh0KXtpZih0aGlzLl90cmFuc3BvcnQpdGhyb3cgbmV3IEVycm9yKCJBbHJlYWR5IGNvbm5lY3RlZCB0byBhIHRyYW5zcG9ydC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIHRvIGEgbmV3IHRyYW5zcG9ydCwgb3IgdXNlIGEgc2VwYXJhdGUgUHJvdG9jb2wgaW5zdGFuY2UgcGVyIGNvbm5lY3Rpb24uIik7dGhpcy5fdHJhbnNwb3J0PXQ7Y29uc3Qgbj10aGlzLnRyYW5zcG9ydD8ub25jbG9zZTt0aGlzLl90cmFuc3BvcnQub25jbG9zZT0oKT0+e24/LigpLHRoaXMuX29uY2xvc2UoKX07Y29uc3Qgbz10aGlzLnRyYW5zcG9ydD8ub25lcnJvcjt0aGlzLl90cmFuc3BvcnQub25lcnJvcj1zPT57bz8uKHMpLHRoaXMuX29uZXJyb3Iocyl9O2NvbnN0IHI9dGhpcy5fdHJhbnNwb3J0Py5vbm1lc3NhZ2U7dGhpcy5fdHJhbnNwb3J0Lm9ubWVzc2FnZT0ocyxpKT0+e3I/LihzLGkpLHJvKHMpfHxDdihzKT90aGlzLl9vbnJlc3BvbnNlKHMpOml1KHMpP3RoaXMuX29ucmVxdWVzdChzLGkpOnh2KHMpP3RoaXMuX29ubm90aWZpY2F0aW9uKHMpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmtub3duIG1lc3NhZ2UgdHlwZTogJHtKU09OLnN0cmluZ2lmeShzKX1gKSl9LGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zdGFydCgpfV9vbmNsb3NlKCl7Y29uc3QgdD10aGlzLl9yZXNwb25zZUhhbmRsZXJzO3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmNsZWFyKCksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmNsZWFyKCksdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl90aW1lb3V0SW5mby52YWx1ZXMoKSljbGVhclRpbWVvdXQoby50aW1lb3V0SWQpO3RoaXMuX3RpbWVvdXRJbmZvLmNsZWFyKCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnZhbHVlcygpKW8uYWJvcnQoKTt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuY2xlYXIoKTtjb25zdCBuPVouZnJvbUVycm9yKFUuQ29ubmVjdGlvbkNsb3NlZCwiQ29ubmVjdGlvbiBjbG9zZWQiKTt0aGlzLl90cmFuc3BvcnQ9dm9pZCAwLHRoaXMub25jbG9zZT8uKCk7Zm9yKGNvbnN0IG8gb2YgdC52YWx1ZXMoKSlvKG4pfV9vbmVycm9yKHQpe3RoaXMub25lcnJvcj8uKHQpfV9vbm5vdGlmaWNhdGlvbih0KXtjb25zdCBuPXRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tOb3RpZmljYXRpb25IYW5kbGVyO24hPT12b2lkIDAmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm4odCkpLmNhdGNoKG89PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmNhdWdodCBlcnJvciBpbiBub3RpZmljYXRpb24gaGFuZGxlcjogJHtvfWApKSl9X29ucmVxdWVzdCh0LG4pe2NvbnN0IG89dGhpcy5fcmVxdWVzdEhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tSZXF1ZXN0SGFuZGxlcixyPXRoaXMuX3RyYW5zcG9ydCxzPXQucGFyYW1zPy5fbWV0YT8uW1VlXT8udGFza0lkO2lmKG89PT12b2lkIDApe2NvbnN0IGQ9e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpVLk1ldGhvZE5vdEZvdW5kLG1lc3NhZ2U6Ik1ldGhvZCBub3QgZm91bmQifX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT90aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6ZCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGVucXVldWUgZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpOnI/LnNlbmQoZCkuY2F0Y2gobT0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGFuIGVycm9yIHJlc3BvbnNlOiAke219YCkpKTtyZXR1cm59Y29uc3QgaT1uZXcgQWJvcnRDb250cm9sbGVyO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5zZXQodC5pZCxpKTtjb25zdCBhPVB2KHQucGFyYW1zKT90LnBhcmFtcy50YXNrOnZvaWQgMCxsPXRoaXMuX3Rhc2tTdG9yZT90aGlzLnJlcXVlc3RUYXNrU3RvcmUodCxyPy5zZXNzaW9uSWQpOnZvaWQgMCx1PXtzaWduYWw6aS5zaWduYWwsc2Vzc2lvbklkOnI/LnNlc3Npb25JZCxfbWV0YTp0LnBhcmFtcz8uX21ldGEsc2VuZE5vdGlmaWNhdGlvbjphc3luYyBkPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgbT17cmVsYXRlZFJlcXVlc3RJZDp0LmlkfTtzJiYobS5yZWxhdGVkVGFzaz17dGFza0lkOnN9KSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihkLG0pfSxzZW5kUmVxdWVzdDphc3luYyhkLG0sdik9PntpZihpLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBaKFUuQ29ubmVjdGlvbkNsb3NlZCwiUmVxdWVzdCB3YXMgY2FuY2VsbGVkIik7Y29uc3QgYj17Li4udixyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJiFiLnJlbGF0ZWRUYXNrJiYoYi5yZWxhdGVkVGFzaz17dGFza0lkOnN9KTtjb25zdCBfPWIucmVsYXRlZFRhc2s/LnRhc2tJZD8/cztyZXR1cm4gXyYmbCYmYXdhaXQgbC51cGRhdGVUYXNrU3RhdHVzKF8sImlucHV0X3JlcXVpcmVkIiksYXdhaXQgdGhpcy5yZXF1ZXN0KGQsbSxiKX0sYXV0aEluZm86bj8uYXV0aEluZm8scmVxdWVzdElkOnQuaWQscmVxdWVzdEluZm86bj8ucmVxdWVzdEluZm8sdGFza0lkOnMsdGFza1N0b3JlOmwsdGFza1JlcXVlc3RlZFR0bDphPy50dGwsY2xvc2VTU0VTdHJlYW06bj8uY2xvc2VTU0VTdHJlYW0sY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtOm4/LmNsb3NlU3RhbmRhbG9uZVNTRVN0cmVhbX07UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2EmJnRoaXMuYXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQubWV0aG9kKX0pLnRoZW4oKCk9Pm8odCx1KSkudGhlbihhc3luYyBkPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgbT17cmVzdWx0OmQsanNvbnJwYzoiMi4wIixpZDp0LmlkfTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJyZXNwb25zZSIsbWVzc2FnZTptLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpOmF3YWl0IHI/LnNlbmQobSl9LGFzeW5jIGQ9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtqc29ucnBjOiIyLjAiLGlkOnQuaWQsZXJyb3I6e2NvZGU6TnVtYmVyLmlzU2FmZUludGVnZXIoZC5jb2RlKT9kLmNvZGU6VS5JbnRlcm5hbEVycm9yLG1lc3NhZ2U6ZC5tZXNzYWdlPz8iSW50ZXJuYWwgZXJyb3IiLC4uLmQuZGF0YSE9PXZvaWQgMCYme2RhdGE6ZC5kYXRhfX19O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6ImVycm9yIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0pLmNhdGNoKGQ9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCByZXNwb25zZTogJHtkfWApKSkuZmluYWxseSgoKT0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQodC5pZCk9PT1pJiZ0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZGVsZXRlKHQuaWQpfSl9X29ucHJvZ3Jlc3ModCl7Y29uc3R7cHJvZ3Jlc3NUb2tlbjpuLC4uLm99PXQucGFyYW1zLHI9TnVtYmVyKG4pLHM9dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5nZXQocik7aWYoIXMpe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBmb3IgYW4gdW5rbm93biB0b2tlbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufWNvbnN0IGk9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQociksYT10aGlzLl90aW1lb3V0SW5mby5nZXQocik7aWYoYSYmaSYmYS5yZXNldFRpbWVvdXRPblByb2dyZXNzKXRyeXt0aGlzLl9yZXNldFRpbWVvdXQocil9Y2F0Y2gobCl7dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUociksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUociksdGhpcy5fY2xlYW51cFRpbWVvdXQociksaShsKTtyZXR1cm59cyhvKX1fb25yZXNwb25zZSh0KXtjb25zdCBuPU51bWJlcih0LmlkKSxvPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KG4pO2lmKG8pe2lmKHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKG4pLHJvKHQpKW8odCk7ZWxzZXtjb25zdCBpPW5ldyBaKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtvKGkpfXJldHVybn1jb25zdCByPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KG4pO2lmKHI9PT12b2lkIDApe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHJlc3BvbnNlIGZvciBhbiB1bmtub3duIG1lc3NhZ2UgSUQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCkpO3JldHVybn10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShuKSx0aGlzLl9jbGVhbnVwVGltZW91dChuKTtsZXQgcz0hMTtpZihybyh0KSYmdC5yZXN1bHQmJnR5cGVvZiB0LnJlc3VsdD09Im9iamVjdCIpe2NvbnN0IGk9dC5yZXN1bHQ7aWYoaS50YXNrJiZ0eXBlb2YgaS50YXNrPT0ib2JqZWN0Iil7Y29uc3QgYT1pLnRhc2s7dHlwZW9mIGEudGFza0lkPT0ic3RyaW5nIiYmKHM9ITAsdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLnNldChhLnRhc2tJZCxuKSl9fWlmKHN8fHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLHJvKHQpKXIodCk7ZWxzZXtjb25zdCBpPVouZnJvbUVycm9yKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtyKGkpfX1nZXQgdHJhbnNwb3J0KCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydH1hc3luYyBjbG9zZSgpe2F3YWl0IHRoaXMuX3RyYW5zcG9ydD8uY2xvc2UoKX1hc3luYypyZXF1ZXN0U3RyZWFtKHQsbixvKXtjb25zdHt0YXNrOnJ9PW8/P3t9O2lmKCFyKXt0cnl7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5yZXF1ZXN0KHQsbixvKX19Y2F0Y2goaSl7eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOmkgaW5zdGFuY2VvZiBaP2k6bmV3IFooVS5JbnRlcm5hbEVycm9yLFN0cmluZyhpKSl9fXJldHVybn1sZXQgczt0cnl7Y29uc3QgaT1hd2FpdCB0aGlzLnJlcXVlc3QodCxkYyxvKTtpZihpLnRhc2spcz1pLnRhc2sudGFza0lkLHlpZWxke3R5cGU6InRhc2tDcmVhdGVkIix0YXNrOmkudGFza307ZWxzZSB0aHJvdyBuZXcgWihVLkludGVybmFsRXJyb3IsIlRhc2sgY3JlYXRpb24gZGlkIG5vdCByZXR1cm4gYSB0YXNrIik7Zm9yKDs7KXtjb25zdCBhPWF3YWl0IHRoaXMuZ2V0VGFzayh7dGFza0lkOnN9LG8pO2lmKHlpZWxke3R5cGU6InRhc2tTdGF0dXMiLHRhc2s6YX0sTGUoYS5zdGF0dXMpKXthLnN0YXR1cz09PSJjb21wbGV0ZWQiP3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9OmEuc3RhdHVzPT09ImZhaWxlZCI/eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBaKFUuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IGZhaWxlZGApfTphLnN0YXR1cz09PSJjYW5jZWxsZWQiJiYoeWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBaKFUuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IHdhcyBjYW5jZWxsZWRgKX0pO3JldHVybn1pZihhLnN0YXR1cz09PSJpbnB1dF9yZXF1aXJlZCIpe3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9O3JldHVybn1jb25zdCBsPWEucG9sbEludGVydmFsPz90aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO2F3YWl0IG5ldyBQcm9taXNlKHU9PnNldFRpbWVvdXQodSxsKSksbz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIFo/aTpuZXcgWihVLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19fXJlcXVlc3QodCxuLG8pe2NvbnN0e3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppLHRhc2s6YSxyZWxhdGVkVGFzazpsfT1vPz97fTtyZXR1cm4gbmV3IFByb21pc2UoKHUsZCk9Pntjb25zdCBtPU89PntkKE8pfTtpZighdGhpcy5fdHJhbnNwb3J0KXttKG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpKTtyZXR1cm59aWYodGhpcy5fb3B0aW9ucz8uZW5mb3JjZVN0cmljdENhcGFiaWxpdGllcz09PSEwKXRyeXt0aGlzLmFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodC5tZXRob2QpLGEmJnRoaXMuYXNzZXJ0VGFza0NhcGFiaWxpdHkodC5tZXRob2QpfWNhdGNoKE8pe20oTyk7cmV0dXJufW8/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtjb25zdCB2PXRoaXMuX3JlcXVlc3RNZXNzYWdlSWQrKyxiPXsuLi50LGpzb25ycGM6IjIuMCIsaWQ6dn07bz8ub25wcm9ncmVzcyYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuc2V0KHYsby5vbnByb2dyZXNzKSxiLnBhcmFtcz17Li4udC5wYXJhbXMsX21ldGE6ey4uLnQucGFyYW1zPy5fbWV0YXx8e30scHJvZ3Jlc3NUb2tlbjp2fX0pLGEmJihiLnBhcmFtcz17Li4uYi5wYXJhbXMsdGFzazphfSksbCYmKGIucGFyYW1zPXsuLi5iLnBhcmFtcyxfbWV0YTp7Li4uYi5wYXJhbXM/Ll9tZXRhfHx7fSxbVWVdOmx9fSk7Y29uc3QgXz1PPT57dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUodiksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUodiksdGhpcy5fY2xlYW51cFRpbWVvdXQodiksdGhpcy5fdHJhbnNwb3J0Py5zZW5kKHtqc29ucnBjOiIyLjAiLG1ldGhvZDoibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiLHBhcmFtczp7cmVxdWVzdElkOnYscmVhc29uOlN0cmluZyhPKX19LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKHo9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7en1gKSkpO2NvbnN0ICQ9TyBpbnN0YW5jZW9mIFo/TzpuZXcgWihVLlJlcXVlc3RUaW1lb3V0LFN0cmluZyhPKSk7ZCgkKX07dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5zZXQodixPPT57aWYoIW8/LnNpZ25hbD8uYWJvcnRlZCl7aWYoTyBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBkKE8pO3RyeXtjb25zdCAkPXZoKG4sTy5yZXN1bHQpOyQuc3VjY2Vzcz91KCQuZGF0YSk6ZCgkLmVycm9yKX1jYXRjaCgkKXtkKCQpfX19KSxvPy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e18obz8uc2lnbmFsPy5yZWFzb24pfSk7Y29uc3Qgaz1vPy50aW1lb3V0Pz9keSx3PSgpPT5fKFouZnJvbUVycm9yKFUuUmVxdWVzdFRpbWVvdXQsIlJlcXVlc3QgdGltZWQgb3V0Iix7dGltZW91dDprfSkpO3RoaXMuX3NldHVwVGltZW91dCh2LGssbz8ubWF4VG90YWxUaW1lb3V0LHcsbz8ucmVzZXRUaW1lb3V0T25Qcm9ncmVzcz8/ITEpO2NvbnN0IFI9bD8udGFza0lkO2lmKFIpe2NvbnN0IE89JD0+e2NvbnN0IHo9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQodik7ej96KCQpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNwb25zZSBoYW5kbGVyIG1pc3NpbmcgZm9yIHNpZGUtY2hhbm5lbGVkIHJlcXVlc3QgJHt2fWApKX07dGhpcy5fcmVxdWVzdFJlc29sdmVycy5zZXQodixPKSx0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2UoUix7dHlwZToicmVxdWVzdCIsbWVzc2FnZTpiLHRpbWVzdGFtcDpEYXRlLm5vdygpfSkuY2F0Y2goJD0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KHYpLGQoJCl9KX1lbHNlIHRoaXMuX3RyYW5zcG9ydC5zZW5kKGIse3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2goTz0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KHYpLGQoTyl9KX0pfWFzeW5jIGdldFRhc2sodCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2dldCIscGFyYW1zOnR9LGhjLG4pfWFzeW5jIGdldFRhc2tSZXN1bHQodCxuLG8pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvcmVzdWx0IixwYXJhbXM6dH0sbixvKX1hc3luYyBsaXN0VGFza3ModCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2xpc3QiLHBhcmFtczp0fSxnYyxuKX1hc3luYyBjYW5jZWxUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9jYW5jZWwiLHBhcmFtczp0fSxXdixuKX1hc3luYyBub3RpZmljYXRpb24odCxuKXtpZighdGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpO3RoaXMuYXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0Lm1ldGhvZCk7Y29uc3Qgbz1uPy5yZWxhdGVkVGFzaz8udGFza0lkO2lmKG8pe2NvbnN0IGE9ey4uLnQsanNvbnJwYzoiMi4wIixwYXJhbXM6ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LFtVZV06bi5yZWxhdGVkVGFza319fTthd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uobyx7dHlwZToibm90aWZpY2F0aW9uIixtZXNzYWdlOmEsdGltZXN0YW1wOkRhdGUubm93KCl9KTtyZXR1cm59aWYoKHRoaXMuX29wdGlvbnM/LmRlYm91bmNlZE5vdGlmaWNhdGlvbk1ldGhvZHM/P1tdKS5pbmNsdWRlcyh0Lm1ldGhvZCkmJiF0LnBhcmFtcyYmIW4/LnJlbGF0ZWRSZXF1ZXN0SWQmJiFuPy5yZWxhdGVkVGFzayl7aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuaGFzKHQubWV0aG9kKSlyZXR1cm47dGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuYWRkKHQubWV0aG9kKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuZGVsZXRlKHQubWV0aG9kKSwhdGhpcy5fdHJhbnNwb3J0KXJldHVybjtsZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbVWVdOm4ucmVsYXRlZFRhc2t9fX0pLHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLG4pLmNhdGNoKGw9PnRoaXMuX29uZXJyb3IobCkpfSk7cmV0dXJufWxldCBpPXsuLi50LGpzb25ycGM6IjIuMCJ9O24/LnJlbGF0ZWRUYXNrJiYoaT17Li4uaSxwYXJhbXM6ey4uLmkucGFyYW1zLF9tZXRhOnsuLi5pLnBhcmFtcz8uX21ldGF8fHt9LFtVZV06bi5yZWxhdGVkVGFza319fSksYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnNlbmQoaSxuKX1zZXRSZXF1ZXN0SGFuZGxlcih0LG4pe2NvbnN0IG89YXUodCk7dGhpcy5hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkobyksdGhpcy5fcmVxdWVzdEhhbmRsZXJzLnNldChvLChyLHMpPT57Y29uc3QgaT1jdSh0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobihpLHMpKX0pfXJlbW92ZVJlcXVlc3RIYW5kbGVyKHQpe3RoaXMuX3JlcXVlc3RIYW5kbGVycy5kZWxldGUodCl9YXNzZXJ0Q2FuU2V0UmVxdWVzdEhhbmRsZXIodCl7aWYodGhpcy5fcmVxdWVzdEhhbmRsZXJzLmhhcyh0KSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWVzdCBoYW5kbGVyIGZvciAke3R9IGFscmVhZHkgZXhpc3RzLCB3aGljaCB3b3VsZCBiZSBvdmVycmlkZGVuYCl9c2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pe2NvbnN0IG89YXUodCk7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuc2V0KG8scj0+e2NvbnN0IHM9Y3UodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4ocykpfSl9cmVtb3ZlTm90aWZpY2F0aW9uSGFuZGxlcih0KXt0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5kZWxldGUodCl9X2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHQpe2NvbnN0IG49dGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmdldCh0KTtuIT09dm9pZCAwJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmRlbGV0ZSh0KSl9YXN5bmMgX2VucXVldWVUYXNrTWVzc2FnZSh0LG4sbyl7aWYoIXRoaXMuX3Rhc2tTdG9yZXx8IXRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5xdWV1ZSB0YXNrIG1lc3NhZ2U6IHRhc2tTdG9yZSBhbmQgdGFza01lc3NhZ2VRdWV1ZSBhcmUgbm90IGNvbmZpZ3VyZWQiKTtjb25zdCByPXRoaXMuX29wdGlvbnM/Lm1heFRhc2tRdWV1ZVNpemU7YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5lbnF1ZXVlKHQsbixvLHIpfWFzeW5jIF9jbGVhclRhc2tRdWV1ZSh0LG4pe2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2NvbnN0IG89YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlQWxsKHQsbik7Zm9yKGNvbnN0IHIgb2YgbylpZihyLnR5cGU9PT0icmVxdWVzdCImJml1KHIubWVzc2FnZSkpe2NvbnN0IHM9ci5tZXNzYWdlLmlkLGk9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQocyk7aT8oaShuZXcgWihVLkludGVybmFsRXJyb3IsIlRhc2sgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZCIpKSx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShzKSk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc29sdmVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtzfSBkdXJpbmcgdGFzayAke3R9IGNsZWFudXBgKSl9fX1hc3luYyBfd2FpdEZvclRhc2tVcGRhdGUodCxuKXtsZXQgbz10aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZT8uZ2V0VGFzayh0KTtyPy5wb2xsSW50ZXJ2YWwmJihvPXIucG9sbEludGVydmFsKX1jYXRjaHt9cmV0dXJuIG5ldyBQcm9taXNlKChyLHMpPT57aWYobi5hYm9ydGVkKXtzKG5ldyBaKFUuSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpO3JldHVybn1jb25zdCBpPXNldFRpbWVvdXQocixvKTtuLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e2NsZWFyVGltZW91dChpKSxzKG5ldyBaKFUuSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpfSx7b25jZTohMH0pfSl9cmVxdWVzdFRhc2tTdG9yZSh0LG4pe2NvbnN0IG89dGhpcy5fdGFza1N0b3JlO2lmKCFvKXRocm93IG5ldyBFcnJvcigiTm8gdGFzayBzdG9yZSBjb25maWd1cmVkIik7cmV0dXJue2NyZWF0ZVRhc2s6YXN5bmMgcj0+e2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gcmVxdWVzdCBwcm92aWRlZCIpO3JldHVybiBhd2FpdCBvLmNyZWF0ZVRhc2socix0LmlkLHttZXRob2Q6dC5tZXRob2QscGFyYW1zOnQucGFyYW1zfSxuKX0sZ2V0VGFzazphc3luYyByPT57Y29uc3Qgcz1hd2FpdCBvLmdldFRhc2socixuKTtpZighcyl0aHJvdyBuZXcgWihVLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybiBzfSxzdG9yZVRhc2tSZXN1bHQ6YXN5bmMocixzLGkpPT57YXdhaXQgby5zdG9yZVRhc2tSZXN1bHQocixzLGksbik7Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZihhKXtjb25zdCBsPW1vLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6YX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKGwpLExlKGEuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxnZXRUYXNrUmVzdWx0OnI9Pm8uZ2V0VGFza1Jlc3VsdChyLG4pLHVwZGF0ZVRhc2tTdGF0dXM6YXN5bmMocixzLGkpPT57Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZighYSl0aHJvdyBuZXcgWihVLkludmFsaWRQYXJhbXMsYFRhc2sgIiR7cn0iIG5vdCBmb3VuZCAtIGl0IG1heSBoYXZlIGJlZW4gY2xlYW5lZCB1cGApO2lmKExlKGEuc3RhdHVzKSl0aHJvdyBuZXcgWihVLkludmFsaWRQYXJhbXMsYENhbm5vdCB1cGRhdGUgdGFzayAiJHtyfSIgZnJvbSB0ZXJtaW5hbCBzdGF0dXMgIiR7YS5zdGF0dXN9IiB0byAiJHtzfSIuIFRlcm1pbmFsIHN0YXRlcyAoY29tcGxldGVkLCBmYWlsZWQsIGNhbmNlbGxlZCkgY2Fubm90IHRyYW5zaXRpb24gdG8gb3RoZXIgc3RhdGVzLmApO2F3YWl0IG8udXBkYXRlVGFza1N0YXR1cyhyLHMsaSxuKTtjb25zdCBsPWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKGwpe2NvbnN0IHU9bW8ucGFyc2Uoe21ldGhvZDoibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiLHBhcmFtczpsfSk7YXdhaXQgdGhpcy5ub3RpZmljYXRpb24odSksTGUobC5zdGF0dXMpJiZ0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcihyKX19LGxpc3RUYXNrczpyPT5vLmxpc3RUYXNrcyhyLG4pfX19ZnVuY3Rpb24gdXUoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIGh5KGUsdCl7Y29uc3Qgbj17Li4uZX07Zm9yKGNvbnN0IG8gaW4gdCl7Y29uc3Qgcj1vLHM9dFtyXTtpZihzPT09dm9pZCAwKWNvbnRpbnVlO2NvbnN0IGk9bltyXTt1dShpKSYmdXUocyk/bltyXT17Li4uaSwuLi5zfTpuW3JdPXN9cmV0dXJuIG59KGU9PnR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnR5cGVvZiBQcm94eTwidSI/bmV3IFByb3h5KGUse2dldDoodCxuKT0+KHR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnQpW25dfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIHJlcXVpcmU8InUiKXJldHVybiByZXF1aXJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCcpfSk7Y2xhc3MgZnkgZXh0ZW5kcyBweXtfcmVnaXN0ZXJlZE1ldGhvZHM9bmV3IFNldDtfZXZlbnRTbG90cz1uZXcgTWFwO29uRXZlbnREaXNwYXRjaCh0LG4pe31fZW5zdXJlRXZlbnRTbG90KHQpe2xldCBuPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFuKXtsZXQgbz10aGlzLmV2ZW50U2NoZW1hc1t0XTtpZighbyl0aHJvdyBFcnJvcihgVW5rbm93biBldmVudDogJHtTdHJpbmcodCl9YCk7bj17bGlzdGVuZXJzOltdfSx0aGlzLl9ldmVudFNsb3RzLnNldCh0LG4pO2xldCByPW8uc2hhcGUubWV0aG9kLnZhbHVlO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChyKTtsZXQgcz1uO3N1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIobyxpPT57bGV0IGE9aS5wYXJhbXM7dGhpcy5vbkV2ZW50RGlzcGF0Y2godCxhKSxzLm9uSGFuZGxlcj8uKGEpO2ZvcihsZXQgbCBvZlsuLi5zLmxpc3RlbmVyc10pbChhKX0pfXJldHVybiBufXNldEV2ZW50SGFuZGxlcih0LG4pe2xldCBvPXRoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KTtvLm9uSGFuZGxlciYmbiYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdIG9uJHtTdHJpbmcodCl9IGhhbmRsZXIgcmVwbGFjZWQuIFVzZSBhZGRFdmVudExpc3RlbmVyKCIke1N0cmluZyh0KX0iLCDigKYpIHRvIGFkZCBtdWx0aXBsZSBsaXN0ZW5lcnMgd2l0aG91dCByZXBsYWNpbmcuYCksby5vbkhhbmRsZXI9bn1nZXRFdmVudEhhbmRsZXIodCl7cmV0dXJuIHRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpPy5vbkhhbmRsZXJ9YWRkRXZlbnRMaXN0ZW5lcih0LG4pe3RoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KS5saXN0ZW5lcnMucHVzaChuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsbil7bGV0IG89dGhpcy5fZXZlbnRTbG90cy5nZXQodCk7aWYoIW8pcmV0dXJuO2xldCByPW8ubGlzdGVuZXJzLmluZGV4T2Yobik7ciE9PS0xJiZvLmxpc3RlbmVycy5zcGxpY2UociwxKX1zZXRSZXF1ZXN0SGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0UmVxdWVzdEhhbmRsZXIiKSxzdXBlci5zZXRSZXF1ZXN0SGFuZGxlcih0LG4pfTtzZXROb3RpZmljYXRpb25IYW5kbGVyPSh0LG4pPT57dGhpcy5fYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LCJzZXROb3RpZmljYXRpb25IYW5kbGVyIiksc3VwZXIuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pfTt3YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKHQsbixvKXtuJiZvJiZjb25zb2xlLndhcm4oYFtNQ1AgQXBwc10gJHt0fSBoYW5kbGVyIHJlcGxhY2VkLiBQcmV2aW91cyBoYW5kbGVyIHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZC5gKX1yZXBsYWNlUmVxdWVzdEhhbmRsZXI9KHQsbik9PntsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQobyksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07X2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCxuKXtsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTtpZih0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5oYXMobykpdGhyb3cgRXJyb3IoYEhhbmRsZXIgZm9yICIke299IiBhbHJlYWR5IHJlZ2lzdGVyZWQgKHZpYSAke259KS4gVXNlIGFkZEV2ZW50TGlzdGVuZXIoKSB0byBhdHRhY2ggbXVsdGlwbGUgbGlzdGVuZXJzLCBvciB0aGUgb24qIHNldHRlciBmb3IgcmVwbGFjZSBzZW1hbnRpY3MuYCk7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pfX12YXIgbXk9IjIwMjYtMDEtMjYiLGd5PSJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQtcGFydGlhbCI7Y2xhc3Mgdnl7ZXZlbnRUYXJnZXQ7ZXZlbnRTb3VyY2U7bWVzc2FnZUxpc3RlbmVyO2NvbnN0cnVjdG9yKHQ9d2luZG93LnBhcmVudCxuKXt0aGlzLmV2ZW50VGFyZ2V0PXQsdGhpcy5ldmVudFNvdXJjZT1uLHRoaXMubWVzc2FnZUxpc3RlbmVyPW89PntpZihuJiZvLnNvdXJjZSE9PXRoaXMuZXZlbnRTb3VyY2Upe2NvbnNvbGUuZGVidWcoIklnbm9yaW5nIG1lc3NhZ2UgZnJvbSB1bmtub3duIHNvdXJjZSIsbyk7cmV0dXJufWxldCByPUV2LnNhZmVQYXJzZShvLmRhdGEpO3Iuc3VjY2Vzcz8oY29uc29sZS5kZWJ1ZygiUGFyc2VkIG1lc3NhZ2UiLHIuZGF0YSksdGhpcy5vbm1lc3NhZ2U/LihyLmRhdGEpKTpvLmRhdGE/Lmpzb25ycGMhPT0iMi4wIj9jb25zb2xlLmRlYnVnKCJJZ25vcmluZyBub24tSlNPTi1SUEMgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pOihjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcGFyc2UgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pLHRoaXMub25lcnJvcj8uKEVycm9yKCJJbnZhbGlkIEpTT04tUlBDIG1lc3NhZ2UgcmVjZWl2ZWQ6ICIrci5lcnJvci5tZXNzYWdlKSkpfX1hc3luYyBzdGFydCgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLm1lc3NhZ2VMaXN0ZW5lcil9YXN5bmMgc2VuZCh0LG4pe3QubWV0aG9kIT09Z3kmJmNvbnNvbGUuZGVidWcoIlNlbmRpbmcgbWVzc2FnZSIsdCksdGhpcy5ldmVudFRhcmdldC5wb3N0TWVzc2FnZSh0LCIqIil9YXN5bmMgY2xvc2UoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpLHRoaXMub25jbG9zZT8uKCl9b25jbG9zZTtvbmVycm9yO29ubWVzc2FnZTtzZXNzaW9uSWQ7c2V0UHJvdG9jb2xWZXJzaW9ufXZhciBieT1DKFtmKCJsaWdodCIpLGYoImRhcmsiKV0pLmRlc2NyaWJlKCJDb2xvciB0aGVtZSBwcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKSxMdD1DKFtmKCJpbmxpbmUiKSxmKCJmdWxsc2NyZWVuIiksZigicGlwIildKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlIGZvciBVSSBwcmVzZW50YXRpb24uIikseXk9QyhbZigiLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnkiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXRlcnRpYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZ2hvc3QiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtaW5mbyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWRpc2FibGVkIiksZigiLS1jb2xvci10ZXh0LXByaW1hcnkiKSxmKCItLWNvbG9yLXRleHQtc2Vjb25kYXJ5IiksZigiLS1jb2xvci10ZXh0LXRlcnRpYXJ5IiksZigiLS1jb2xvci10ZXh0LWludmVyc2UiKSxmKCItLWNvbG9yLXRleHQtZ2hvc3QiKSxmKCItLWNvbG9yLXRleHQtaW5mbyIpLGYoIi0tY29sb3ItdGV4dC1kYW5nZXIiKSxmKCItLWNvbG9yLXRleHQtc3VjY2VzcyIpLGYoIi0tY29sb3ItdGV4dC13YXJuaW5nIiksZigiLS1jb2xvci10ZXh0LWRpc2FibGVkIiksZigiLS1jb2xvci1ib3JkZXItcHJpbWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLXRlcnRpYXJ5IiksZigiLS1jb2xvci1ib3JkZXItaW52ZXJzZSIpLGYoIi0tY29sb3ItYm9yZGVyLWdob3N0IiksZigiLS1jb2xvci1ib3JkZXItaW5mbyIpLGYoIi0tY29sb3ItYm9yZGVyLWRhbmdlciIpLGYoIi0tY29sb3ItYm9yZGVyLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJvcmRlci13YXJuaW5nIiksZigiLS1jb2xvci1ib3JkZXItZGlzYWJsZWQiKSxmKCItLWNvbG9yLXJpbmctcHJpbWFyeSIpLGYoIi0tY29sb3ItcmluZy1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLXJpbmctaW52ZXJzZSIpLGYoIi0tY29sb3ItcmluZy1pbmZvIiksZigiLS1jb2xvci1yaW5nLWRhbmdlciIpLGYoIi0tY29sb3ItcmluZy1zdWNjZXNzIiksZigiLS1jb2xvci1yaW5nLXdhcm5pbmciKSxmKCItLWZvbnQtc2FucyIpLGYoIi0tZm9udC1tb25vIiksZigiLS1mb250LXdlaWdodC1ub3JtYWwiKSxmKCItLWZvbnQtd2VpZ2h0LW1lZGl1bSIpLGYoIi0tZm9udC13ZWlnaHQtc2VtaWJvbGQiKSxmKCItLWZvbnQtd2VpZ2h0LWJvbGQiKSxmKCItLWZvbnQtdGV4dC14cy1zaXplIiksZigiLS1mb250LXRleHQtc20tc2l6ZSIpLGYoIi0tZm9udC10ZXh0LW1kLXNpemUiKSxmKCItLWZvbnQtdGV4dC1sZy1zaXplIiksZigiLS1mb250LWhlYWRpbmcteHMtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXNtLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1tZC1zaXplIiksZigiLS1mb250LWhlYWRpbmctbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0yeGwtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1zaXplIiksZigiLS1mb250LXRleHQteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14cy1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLXNtLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbWQtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1sZy1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLXhsLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctMnhsLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctM3hsLWxpbmUtaGVpZ2h0IiksZigiLS1ib3JkZXItcmFkaXVzLXhzIiksZigiLS1ib3JkZXItcmFkaXVzLXNtIiksZigiLS1ib3JkZXItcmFkaXVzLW1kIiksZigiLS1ib3JkZXItcmFkaXVzLWxnIiksZigiLS1ib3JkZXItcmFkaXVzLXhsIiksZigiLS1ib3JkZXItcmFkaXVzLWZ1bGwiKSxmKCItLWJvcmRlci13aWR0aC1yZWd1bGFyIiksZigiLS1zaGFkb3ctaGFpcmxpbmUiKSxmKCItLXNoYWRvdy1zbSIpLGYoIi0tc2hhZG93LW1kIiksZigiLS1zaGFkb3ctbGciKV0pLmRlc2NyaWJlKCJDU1MgdmFyaWFibGUga2V5cyBhdmFpbGFibGUgdG8gTUNQIGFwcHMgZm9yIHRoZW1pbmcuIiksX3k9QSh5eS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSxDKFtoKCksYXQoKV0pLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKTtnKHttZXRob2Q6ZigidWkvb3Blbi1saW5rIikscGFyYW1zOmcoe3VybDpoKCkuZGVzY3JpYmUoIlVSTCB0byBvcGVuIGluIHRoZSBob3N0J3MgYnJvd3NlciIpfSl9KTt2YXIga3k9Zyh7aXNFcnJvcjpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgaG9zdCBmYWlsZWQgdG8gb3BlbiB0aGUgVVJMIChlLmcuLCBkdWUgdG8gc2VjdXJpdHkgcG9saWN5KS4iKX0pLnBhc3N0aHJvdWdoKCksd3k9Zyh7aXNFcnJvcjpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgZG93bmxvYWQgZmFpbGVkIChlLmcuLCB1c2VyIGNhbmNlbGxlZCBvciBob3N0IGRlbmllZCkuIil9KS5wYXNzdGhyb3VnaCgpLCR5PWcoe2lzRXJyb3I6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIGRlbGl2ZXIgdGhlIG1lc3NhZ2UuIil9KS5wYXNzdGhyb3VnaCgpO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcHJveHktcmVhZHkiKSxwYXJhbXM6Zyh7fSl9KTt2YXIgU2M9Zyh7Y29ubmVjdERvbWFpbnM6VChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYE9yaWdpbnMgZm9yIG5ldHdvcmsgcmVxdWVzdHMgKGZldGNoL1hIUi9XZWJTb2NrZXQpLgoKLSBNYXBzIHRvIENTUCBcYGNvbm5lY3Qtc3JjXGAgZGlyZWN0aXZlCi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayBjb25uZWN0aW9ucyAoc2VjdXJlIGRlZmF1bHQpYCkscmVzb3VyY2VEb21haW5zOlQoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcmlnaW5zIGZvciBzdGF0aWMgcmVzb3VyY2VzIChpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBmb250cywgbWVkaWEpLlxuXG4tIE1hcHMgdG8gQ1NQIGBpbWctc3JjYCwgYHNjcmlwdC1zcmNgLCBgc3R5bGUtc3JjYCwgYGZvbnQtc3JjYCwgYG1lZGlhLXNyY2AgZGlyZWN0aXZlc1xuLSBXaWxkY2FyZCBzdWJkb21haW5zIHN1cHBvcnRlZDogYGh0dHBzOi8vKi5leGFtcGxlLmNvbWBcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayByZXNvdXJjZXMgKHNlY3VyZSBkZWZhdWx0KSIpLGZyYW1lRG9tYWluczpUKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3IgbmVzdGVkIGlmcmFtZXMuXG5cbi0gTWFwcyB0byBDU1AgYGZyYW1lLXNyY2AgZGlyZWN0aXZlXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5lc3RlZCBpZnJhbWVzIGFsbG93ZWQgKGBmcmFtZS1zcmMgJ25vbmUnYCkiKSxiYXNlVXJpRG9tYWluczpUKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQWxsb3dlZCBiYXNlIFVSSXMgZm9yIHRoZSBkb2N1bWVudC5cblxuLSBNYXBzIHRvIENTUCBgYmFzZS11cmlgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBvbmx5IHNhbWUgb3JpZ2luIGFsbG93ZWQgKGBiYXNlLXVyaSAnc2VsZidgKSIpfSksemM9Zyh7Y2FtZXJhOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2FtZXJhIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2FtZXJhYCBmZWF0dXJlLiIpLG1pY3JvcGhvbmU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBtaWNyb3Bob25lIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgbWljcm9waG9uZWAgZmVhdHVyZS4iKSxnZW9sb2NhdGlvbjpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGdlb2xvY2F0aW9uIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgZ2VvbG9jYXRpb25gIGZlYXR1cmUuIiksY2xpcGJvYXJkV3JpdGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBjbGlwYm9hcmQgd3JpdGUgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBjbGlwYm9hcmQtd3JpdGVgIGZlYXR1cmUuIil9KTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiKSxwYXJhbXM6Zyh7d2lkdGg6UCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk5ldyB3aWR0aCBpbiBwaXhlbHMuIiksaGVpZ2h0OlAoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgaGVpZ2h0IGluIHBpeGVscy4iKX0pfSk7dmFyIFN5PWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOkEoaCgpLGooKS5kZXNjcmliZSgiQ29tcGxldGUgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcyBrZXktdmFsdWUgcGFpcnMuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpfSl9KSx6eT1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOkEoaCgpLGooKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKX0pfSksVHk9Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1jYW5jZWxsZWQiKSxwYXJhbXM6Zyh7cmVhc29uOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdPcHRpb25hbCByZWFzb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gKGUuZy4sICJ1c2VyIGFjdGlvbiIsICJ0aW1lb3V0IikuJyl9KX0pLEl5PWcoe2ZvbnRzOmgoKS5vcHRpb25hbCgpfSksUHk9Zyh7dmFyaWFibGVzOl95Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgdGhlIGFwcC4iKSxjc3M6SXkub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NTIGJsb2NrcyB0aGF0IGFwcHMgY2FuIGluamVjdC4iKX0pLHh5PWcoe21ldGhvZDpmKCJ1aS9yZXNvdXJjZS10ZWFyZG93biIpLHBhcmFtczpnKHt9KX0pO0EoaCgpLGooKSk7dmFyIGx1PWcoe3RleHQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0ZXh0IGNvbnRlbnQgYmxvY2tzLiIpLGltYWdlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgaW1hZ2UgY29udGVudCBibG9ja3MuIiksYXVkaW86Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBhdWRpbyBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGNvbnRlbnQgYmxvY2tzLiIpLHJlc291cmNlTGluazpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGxpbmsgY29udGVudCBibG9ja3MuIiksc3RydWN0dXJlZENvbnRlbnQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGNvbnRlbnQuIil9KTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTt2YXIgQ3k9Zyh7ZXhwZXJpbWVudGFsOkEoaCgpLEEoaCgpLFJuKCkpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIiksb3BlbkxpbmtzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgb3BlbmluZyBleHRlcm5hbCBVUkxzLiIpLGRvd25sb2FkRmlsZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGZpbGUgZG93bmxvYWRzIHZpYSB1aS9kb3dubG9hZC1maWxlLiIpLHNlcnZlclRvb2xzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgdG9vbCBjYWxscyB0byB0aGUgTUNQIHNlcnZlci4iKSxzZXJ2ZXJSZXNvdXJjZXM6Zyh7bGlzdENoYW5nZWQ6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgcmVzb3VyY2UgcmVhZHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksbG9nZ2luZzpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgbG9nIG1lc3NhZ2VzLiIpLHNhbmRib3g6Zyh7cGVybWlzc2lvbnM6emMub3B0aW9uYWwoKS5kZXNjcmliZSgiUGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGUgaG9zdCAoY2FtZXJhLCBtaWNyb3Bob25lLCBnZW9sb2NhdGlvbikuIiksY3NwOlNjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBkb21haW5zIGFwcHJvdmVkIGJ5IHRoZSBob3N0LiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBjb25maWd1cmF0aW9uIGFwcGxpZWQgYnkgdGhlIGhvc3QuIiksdXBkYXRlTW9kZWxDb250ZXh0Omx1Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYWNjZXB0cyBjb250ZXh0IHVwZGF0ZXMgKHVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0KSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGZvciBmdXR1cmUgdHVybnMuIiksbWVzc2FnZTpsdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlY2VpdmluZyBjb250ZW50IG1lc3NhZ2VzICh1aS9tZXNzYWdlKSBmcm9tIHRoZSB2aWV3LiIpLHNhbXBsaW5nOmcoe3Rvb2xzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdG9vbCB1c2UgdmlhIGB0b29sc2AgYW5kIGB0b29sQ2hvaWNlYCBwYXJhbWV0ZXJzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBMTE0gc2FtcGxpbmcgKHNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UpIGZyb20gdGhlIHZpZXcuXG5NaXJyb3JzIHRoZSBNQ1AgYENsaWVudENhcGFiaWxpdGllcy5zYW1wbGluZ2Agc2hhcGUgc28gaG9zdHMgY2FuIHBhc3MgaXQgdGhyb3VnaC4iKX0pLEV5PWcoe2V4cGVyaW1lbnRhbDpBKGgoKSxBKGgoKSxSbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgc3VwcG9ydHMgdG9vbHMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgZXhwb3NlcyBNQ1Atc3R5bGUgdG9vbHMgdGhhdCB0aGUgaG9zdCBjYW4gY2FsbC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6VChMdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgYXBwIHN1cHBvcnRzLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6Zyh7fSkub3B0aW9uYWwoKX0pO2coe2NzcDpTYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjb25maWd1cmF0aW9uIGZvciBVSSByZXNvdXJjZXMuIikscGVybWlzc2lvbnM6emMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgYnkgdGhlIFVJIHJlc291cmNlLiIpLGRvbWFpbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZShgRGVkaWNhdGVkIG9yaWdpbiBmb3IgdmlldyBzYW5kYm94LgoKVXNlZnVsIHdoZW4gdmlld3MgbmVlZCBzdGFibGUsIGRlZGljYXRlZCBvcmlnaW5zIGZvciBPQXV0aCBjYWxsYmFja3MsIENPUlMgcG9saWNpZXMsIG9yIEFQSSBrZXkgYWxsb3dsaXN0cy4KCioqSG9zdC1kZXBlbmRlbnQ6KiogVGhlIGZvcm1hdCBhbmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgdGhpcyBmaWVsZCBhcmUgZGV0ZXJtaW5lZCBieSBlYWNoIGhvc3QuIFNlcnZlcnMgTVVTVCBjb25zdWx0IGhvc3Qtc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGV4cGVjdGVkIGRvbWFpbiBmb3JtYXQuIENvbW1vbiBwYXR0ZXJucyBpbmNsdWRlOgotIEhhc2gtYmFzZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB7aGFzaH0uY2xhdWRlbWNwY29udGVudC5jb21cYCkKLSBVUkwtZGVyaXZlZCBzdWJkb21haW5zIChlLmcuLCBcYHd3dy1leGFtcGxlLWNvbS5vYWl1c2VyY29udGVudC5jb21cYCkKCklmIG9taXR0ZWQsIGhvc3QgdXNlcyBkZWZhdWx0IHNhbmRib3ggb3JpZ2luICh0eXBpY2FsbHkgcGVyLWNvbnZlcnNhdGlvbikuYCkscHJlZmVyc0JvcmRlcjpEKCkub3B0aW9uYWwoKS5kZXNjcmliZShgVmlzdWFsIGJvdW5kYXJ5IHByZWZlcmVuY2UgLSB0cnVlIGlmIHZpZXcgcHJlZmVycyBhIHZpc2libGUgYm9yZGVyLgoKQm9vbGVhbiByZXF1ZXN0aW5nIHdoZXRoZXIgYSB2aXNpYmxlIGJvcmRlciBhbmQgYmFja2dyb3VuZCBpcyBwcm92aWRlZCBieSB0aGUgaG9zdC4gU3BlY2lmeWluZyBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgdGhpcyBpcyByZWNvbW1lbmRlZCBiZWNhdXNlIGhvc3RzJyBkZWZhdWx0cyBtYXkgdmFyeS4KCi0gXGB0cnVlXGA6IHJlcXVlc3QgdmlzaWJsZSBib3JkZXIgKyBiYWNrZ3JvdW5kCi0gXGBmYWxzZVxgOiByZXF1ZXN0IG5vIHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIG9taXR0ZWQ6IGhvc3QgZGVjaWRlcyBib3JkZXJgKX0pO2coe21ldGhvZDpmKCJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIpLHBhcmFtczpnKHttb2RlOkx0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIGJlaW5nIHJlcXVlc3RlZC4iKX0pfSk7dmFyIE95PWcoe21vZGU6THQuZGVzY3JpYmUoIlRoZSBkaXNwbGF5IG1vZGUgdGhhdCB3YXMgYWN0dWFsbHkgc2V0LiBNYXkgZGlmZmVyIGZyb20gcmVxdWVzdGVkIGlmIG5vdCBzdXBwb3J0ZWQuIil9KS5wYXNzdGhyb3VnaCgpLEF5PUMoW2YoIm1vZGVsIiksZigiYXBwIildKS5kZXNjcmliZSgiVG9vbCB2aXNpYmlsaXR5IHNjb3BlIC0gd2hvIGNhbiBhY2Nlc3MgdGhlIHRvb2wuIik7Zyh7cmVzb3VyY2VVcmk6aCgpLm9wdGlvbmFsKCksdmlzaWJpbGl0eTpUKEF5KS5vcHRpb25hbCgpLmRlc2NyaWJlKGBXaG8gY2FuIGFjY2VzcyB0aGlzIHRvb2wuIERlZmF1bHQ6IFsibW9kZWwiLCAiYXBwIl0KLSAibW9kZWwiOiBUb29sIHZpc2libGUgdG8gYW5kIGNhbGxhYmxlIGJ5IHRoZSBhZ2VudAotICJhcHAiOiBUb29sIGNhbGxhYmxlIGJ5IHRoZSBhcHAgZnJvbSB0aGlzIHNlcnZlciBvbmx5YCksY3NwOlZlKCkub3B0aW9uYWwoKSxwZXJtaXNzaW9uczpWZSgpLm9wdGlvbmFsKCl9KTtnKHttaW1lVHlwZXM6VChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0FycmF5IG9mIHN1cHBvcnRlZCBNSU1FIHR5cGVzIGZvciBVSSByZXNvdXJjZXMuXG5NdXN0IGluY2x1ZGUgYCJ0ZXh0L2h0bWw7cHJvZmlsZT1tY3AtYXBwImAgZm9yIE1DUCBBcHBzIHN1cHBvcnQuJyl9KTtnKHttZXRob2Q6ZigidWkvZG93bmxvYWQtZmlsZSIpLHBhcmFtczpnKHtjb250ZW50czpUKEMoW0xoLFVoXSkpLmRlc2NyaWJlKCJSZXNvdXJjZSBjb250ZW50cyB0byBkb3dubG9hZCDigJQgZW1iZWRkZWQgKGlubGluZSBkYXRhKSBvciBsaW5rZWQgKGhvc3QgZmV0Y2hlcykuIFVzZXMgc3RhbmRhcmQgTUNQIHJlc291cmNlIHR5cGVzLiIpfSl9KTtnKHttZXRob2Q6ZigidWkvbWVzc2FnZSIpLHBhcmFtczpnKHtyb2xlOmYoInVzZXIiKS5kZXNjcmliZSgnTWVzc2FnZSByb2xlLCBjdXJyZW50bHkgb25seSAidXNlciIgaXMgc3VwcG9ydGVkLicpLGNvbnRlbnQ6VChLbikuZGVzY3JpYmUoIk1lc3NhZ2UgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2FuZGJveC1yZXNvdXJjZS1yZWFkeSIpLHBhcmFtczpnKHtodG1sOmgoKS5kZXNjcmliZSgiSFRNTCBjb250ZW50IHRvIGxvYWQgaW50byB0aGUgaW5uZXIgaWZyYW1lLiIpLHNhbmRib3g6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgaW5uZXIgaWZyYW1lJ3Mgc2FuZGJveCBhdHRyaWJ1dGUuIiksY3NwOlNjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBjb25maWd1cmF0aW9uIGZyb20gcmVzb3VyY2UgbWV0YWRhdGEuIikscGVybWlzc2lvbnM6emMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpfSl9KTt2YXIgUnk9Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1yZXN1bHQiKSxwYXJhbXM6RHIuZGVzY3JpYmUoIlN0YW5kYXJkIE1DUCB0b29sIGV4ZWN1dGlvbiByZXN1bHQuIil9KSxLaD1nKHt0b29sSW5mbzpnKHtpZDpVbi5vcHRpb25hbCgpLmRlc2NyaWJlKCJKU09OLVJQQyBpZCBvZiB0aGUgdG9vbHMvY2FsbCByZXF1ZXN0LiIpLHRvb2w6JGMuZGVzY3JpYmUoIlRvb2wgZGVmaW5pdGlvbiBpbmNsdWRpbmcgbmFtZSwgaW5wdXRTY2hlbWEsIGV0Yy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1ldGFkYXRhIG9mIHRoZSB0b29sIGNhbGwgdGhhdCBpbnN0YW50aWF0ZWQgdGhpcyBBcHAuIiksdGhlbWU6Ynkub3B0aW9uYWwoKS5kZXNjcmliZSgiQ3VycmVudCBjb2xvciB0aGVtZSBwcmVmZXJlbmNlLiIpLHN0eWxlczpQeS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTdHlsZSBjb25maWd1cmF0aW9uIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksZGlzcGxheU1vZGU6THQub3B0aW9uYWwoKS5kZXNjcmliZSgiSG93IHRoZSBVSSBpcyBjdXJyZW50bHkgZGlzcGxheWVkLiIpLGF2YWlsYWJsZURpc3BsYXlNb2RlczpUKEx0KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGVzIHRoZSBob3N0IHN1cHBvcnRzLiIpLGNvbnRhaW5lckRpbWVuc2lvbnM6QyhbZyh7aGVpZ2h0OlAoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIGhlaWdodCBpbiBwaXhlbHMuIil9KSxnKHttYXhIZWlnaHQ6QyhbUCgpLGF0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSldKS5hbmQoQyhbZyh7d2lkdGg6UCgpLmRlc2NyaWJlKCJGaXhlZCBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSksZyh7bWF4V2lkdGg6QyhbUCgpLGF0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciB3aWR0aCBpbiBwaXhlbHMuIil9KV0pKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBDb250YWluZXIgZGltZW5zaW9ucy4gUmVwcmVzZW50cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaWZyYW1lIG9yIG90aGVyCmNvbnRhaW5lciBob2xkaW5nIHRoZSBhcHAuIFNwZWNpZnkgZWl0aGVyIHdpZHRoIG9yIG1heFdpZHRoLCBhbmQgZWl0aGVyIGhlaWdodCBvciBtYXhIZWlnaHQuYCksbG9jYWxlOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBwcmVmZXJlbmNlIGluIEJDUCA0NyBmb3JtYXQuIiksdGltZVpvbmU6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlVzZXIncyB0aW1lem9uZSBpbiBJQU5BIGZvcm1hdC4iKSx1c2VyQWdlbnQ6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmllci4iKSxwbGF0Zm9ybTpDKFtmKCJ3ZWIiKSxmKCJkZXNrdG9wIiksZigibW9iaWxlIildKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQbGF0Zm9ybSB0eXBlIGZvciByZXNwb25zaXZlIGRlc2lnbiBkZWNpc2lvbnMuIiksZGV2aWNlQ2FwYWJpbGl0aWVzOmcoe3RvdWNoOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdG91Y2ggaW5wdXQuIiksaG92ZXI6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIldoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBob3ZlciBpbnRlcmFjdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEZXZpY2UgaW5wdXQgY2FwYWJpbGl0aWVzLiIpLHNhZmVBcmVhSW5zZXRzOmcoe3RvcDpQKCkuZGVzY3JpYmUoIlRvcCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLHJpZ2h0OlAoKS5kZXNjcmliZSgiUmlnaHQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxib3R0b206UCgpLmRlc2NyaWJlKCJCb3R0b20gc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxsZWZ0OlAoKS5kZXNjcmliZSgiTGVmdCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTW9iaWxlIHNhZmUgYXJlYSBib3VuZGFyaWVzIGluIHBpeGVscy4iKX0pLnBhc3N0aHJvdWdoKCksWnk9Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvaG9zdC1jb250ZXh0LWNoYW5nZWQiKSxwYXJhbXM6S2guZGVzY3JpYmUoIlBhcnRpYWwgY29udGV4dCB1cGRhdGUgY29udGFpbmluZyBvbmx5IGNoYW5nZWQgZmllbGRzLiIpfSk7Zyh7bWV0aG9kOmYoInVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IikscGFyYW1zOmcoe2NvbnRlbnQ6VChLbikub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGV4dCBjb250ZW50IGJsb2NrcyAodGV4dCwgaW1hZ2UsIGV0Yy4pLiIpLHN0cnVjdHVyZWRDb250ZW50OkEoaCgpLGooKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL2luaXRpYWxpemUiKSxwYXJhbXM6Zyh7YXBwSW5mbzpNci5kZXNjcmliZSgiQXBwIGlkZW50aWZpY2F0aW9uIChuYW1lIGFuZCB2ZXJzaW9uKS4iKSxhcHBDYXBhYmlsaXRpZXM6RXkuZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBhcHAgcHJvdmlkZXMuIikscHJvdG9jb2xWZXJzaW9uOmgoKS5kZXNjcmliZSgiUHJvdG9jb2wgdmVyc2lvbiB0aGlzIGFwcCBzdXBwb3J0cy4iKX0pfSk7dmFyIE55PWcoe3Byb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoJ05lZ290aWF0ZWQgcHJvdG9jb2wgdmVyc2lvbiBzdHJpbmcgKGUuZy4sICIyMDI1LTExLTIxIikuJyksaG9zdEluZm86TXIuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmljYXRpb24gYW5kIHZlcnNpb24uIiksaG9zdENhcGFiaWxpdGllczpDeS5kZXNjcmliZSgiRmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBwcm92aWRlZCBieSB0aGUgaG9zdC4iKSxob3N0Q29udGV4dDpLaC5kZXNjcmliZSgiUmljaCBjb250ZXh0IGFib3V0IHRoZSBob3N0IGVudmlyb25tZW50LiIpfSkucGFzc3Rocm91Z2goKSxqeT17dGFyZ2V0OiJkcmFmdC0yMDIwLTEyIn07YXN5bmMgZnVuY3Rpb24gZHUoZSx0KXtsZXQgbj1lWyJ+c3RhbmRhcmQiXTtpZihuLmpzb25TY2hlbWEpcmV0dXJuIG4uanNvblNjaGVtYVt0XShqeSk7aWYobi52ZW5kb3I9PT0iem9kIil7bGV0e3o6b309YXdhaXQgZGYoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnp2KSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKTtyZXR1cm4gby50b0pTT05TY2hlbWEoZSx7aW86dH0pfXRocm93IEVycm9yKGBTY2hlbWEgKHZlbmRvcjogJHtuLnZlbmRvcn0pIGRvZXMgbm90IGltcGxlbWVudCBTdGFuZGFyZCBKU09OIFNjaGVtYSAofnN0YW5kYXJkLmpzb25TY2hlbWEpLiBVc2UgYSBsaWJyYXJ5IHRoYXQgZG9lcyAoem9kIHY0LCBBcmtUeXBlLCBWYWxpYm90KSBvciB3cmFwIHlvdXIgc2NoZW1hIGFjY29yZGluZ2x5LmApfWFzeW5jIGZ1bmN0aW9uIHB1KGUsdCxuPSIiKXtsZXQgbz1hd2FpdCBlWyJ+c3RhbmRhcmQiXS52YWxpZGF0ZSh0KTtpZihvLmlzc3Vlcyl7bGV0IHI9by5pc3N1ZXMubWFwKHM9PntsZXQgaT1zLnBhdGg/Lm1hcChhPT50eXBlb2YgYT09Im9iamVjdCI/YS5rZXk6YSkuam9pbigiLiIpO3JldHVybiBpP2Ake2l9OiAke3MubWVzc2FnZX1gOnMubWVzc2FnZX0pLmpvaW4oIjsgIik7dGhyb3cgRXJyb3IobityKX1yZXR1cm4gby52YWx1ZX1mdW5jdGlvbiBNeShlKXtsZXQgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dC5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLGUpLHQuc3R5bGUuY29sb3JTY2hlbWU9ZX1mdW5jdGlvbiBxeShlLHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtmb3IobGV0W24sb11vZiBPYmplY3QuZW50cmllcyhlKSlvIT09dm9pZCAwJiZ0LnN0eWxlLnNldFByb3BlcnR5KG4sbyl9ZnVuY3Rpb24gRHkoZSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9fbWNwLWhvc3QtZm9udHMiKSlyZXR1cm47bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTt0LmlkPSJfX21jcC1ob3N0LWZvbnRzIix0LnRleHRDb250ZW50PWUsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0KX1jbGFzcyBUYyBleHRlbmRzIGZ5e19hcHBJbmZvO19jYXBhYmlsaXRpZXM7b3B0aW9ucztfaG9zdENhcGFiaWxpdGllcztfaG9zdEluZm87X2hvc3RDb250ZXh0O19yZWdpc3RlcmVkVG9vbHM9e307X2luaXRpYWxpemVkU2VudD0hMTtfYXNzZXJ0SW5pdGlhbGl6ZWQodCl7aWYodGhpcy5faW5pdGlhbGl6ZWRTZW50KXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSBBcHAuJHt0fSgpIGNhbGxlZCBiZWZvcmUgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIEF3YWl0IGFwcC5jb25uZWN0KCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsIG9yIG1vdmUgZGF0YSBsb2FkaW5nIHRvIGFuIG9udG9vbHJlc3VsdCBoYW5kbGVyLmA7aWYodGhpcy5vcHRpb25zPy5zdHJpY3QpdGhyb3cgRXJyb3Iobik7Y29uc29sZS53YXJuKGAke259LiBUaGlzIHdpbGwgdGhyb3cgaW4gYSBmdXR1cmUgcmVsZWFzZS5gKX1ldmVudFNjaGVtYXM9e3Rvb2xpbnB1dDpTeSx0b29saW5wdXRwYXJ0aWFsOnp5LHRvb2xyZXN1bHQ6UnksdG9vbGNhbmNlbGxlZDpUeSxob3N0Y29udGV4dGNoYW5nZWQ6Wnl9O3N0YXRpYyBPTkVfU0hPVF9FVkVOVFM9bmV3IFNldChbInRvb2xpbnB1dCIsInRvb2xpbnB1dHBhcnRpYWwiLCJ0b29scmVzdWx0IiwidG9vbGNhbmNlbGxlZCJdKTtfZXZlckhhZExpc3RlbmVyPW5ldyBTZXQ7X2Fzc2VydEhhbmRsZXJUaW1pbmcodCl7aWYoIVRjLk9ORV9TSE9UX0VWRU5UUy5oYXModCl8fHRoaXMuX2V2ZXJIYWRMaXN0ZW5lci5oYXModCl8fCh0aGlzLl9ldmVySGFkTGlzdGVuZXIuYWRkKHQpLCF0aGlzLl9pbml0aWFsaXplZFNlbnQpKXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSAiJHtTdHJpbmcodCl9IiBoYW5kbGVyIHJlZ2lzdGVyZWQgYWZ0ZXIgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIFRoZSBob3N0IG1heSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIG5vdGlmaWNhdGlvbi4gUmVnaXN0ZXIgaGFuZGxlcnMgYmVmb3JlIGNhbGxpbmcgYXBwLmNvbm5lY3QoKS5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihuKX1zZXRFdmVudEhhbmRsZXIodCxuKXtuJiZ0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLnNldEV2ZW50SGFuZGxlcih0LG4pfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIodCxuKX1vbkV2ZW50RGlzcGF0Y2godCxuKXt0PT09Imhvc3Rjb250ZXh0Y2hhbmdlZCImJih0aGlzLl9ob3N0Q29udGV4dD17Li4udGhpcy5faG9zdENvbnRleHQsLi4ubn0pfWNvbnN0cnVjdG9yKHQsbj17fSxvPXthdXRvUmVzaXplOiEwfSl7c3VwZXIobyksdGhpcy5fYXBwSW5mbz10LHRoaXMuX2NhcGFiaWxpdGllcz1uLHRoaXMub3B0aW9ucz1vLG8uYWxsb3dVbnNhZmVFdmFsfHxHKHtqaXRsZXNzOiEwfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihxcixyPT4oY29uc29sZS5sb2coIlJlY2VpdmVkIHBpbmc6IixyLnBhcmFtcykse30pKSx0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix2b2lkIDApfXJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHQpe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGFmdGVyIHRyYW5zcG9ydCBpcyBlc3RhYmxpc2hlZCIpO3RoaXMuX2NhcGFiaWxpdGllcz1oeSh0aGlzLl9jYXBhYmlsaXRpZXMsdCl9cmVnaXN0ZXJUb29sKHQsbixvKXtpZih0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF0pdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtsZXQgcj10aGlzLHM9KCk9PntyLl9pbml0aWFsaXplZFNlbnQmJnIuX2NhcGFiaWxpdGllcy50b29scz8ubGlzdENoYW5nZWQmJnIuc2VuZFRvb2xMaXN0Q2hhbmdlZCgpfSxpPW4uaW5wdXRTY2hlbWEhPT12b2lkIDAsYT17dGl0bGU6bi50aXRsZSxkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOm4uaW5wdXRTY2hlbWEsb3V0cHV0U2NoZW1hOm4ub3V0cHV0U2NoZW1hLGFubm90YXRpb25zOm4uYW5ub3RhdGlvbnMsX21ldGE6bi5fbWV0YSxlbmFibGVkOiEwLGVuYWJsZSgpe3RoaXMuZW5hYmxlZD0hMCxzKCl9LGRpc2FibGUoKXt0aGlzLmVuYWJsZWQ9ITEscygpfSx1cGRhdGUobCl7T2JqZWN0LmFzc2lnbih0aGlzLGwpLHMoKX0scmVtb3ZlKCl7ci5fcmVnaXN0ZXJlZFRvb2xzW3RdPT09YSYmKGRlbGV0ZSByLl9yZWdpc3RlcmVkVG9vbHNbdF0scygpKX0saGFuZGxlcjphc3luYyhsLHUpPT57aWYoIWEuZW5hYmxlZCl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGRpc2FibGVkYCk7bGV0IGQ7aWYoaSl7bGV0IG09YS5pbnB1dFNjaGVtYSx2PW0/YXdhaXQgcHUobSxsPz97fSxgSW52YWxpZCBpbnB1dCBmb3IgdG9vbCAke3R9OiBgKTpsPz97fTtkPWF3YWl0IG8odix1KX1lbHNlIGQ9YXdhaXQgbyh1KTtyZXR1cm4gYS5vdXRwdXRTY2hlbWEmJiFkLmlzRXJyb3ImJihkLnN0cnVjdHVyZWRDb250ZW50PWF3YWl0IHB1KGEub3V0cHV0U2NoZW1hLGQuc3RydWN0dXJlZENvbnRlbnQsYEludmFsaWQgb3V0cHV0IGZvciB0b29sICR7dH06IGApKSxkfX07cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XT1hLCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMmJiF0aGlzLnRyYW5zcG9ydCYmdGhpcy5yZWdpc3RlckNhcGFiaWxpdGllcyh7dG9vbHM6e2xpc3RDaGFuZ2VkOiEwfX0pLHRoaXMuZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKSxzKCksYX1fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITE7ZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKXt0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZHx8KHRoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSEwLHRoaXMub25jYWxsdG9vbD1hc3luYyh0LG4pPT57bGV0IG89dGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3QubmFtZV07aWYoIW8pdGhyb3cgRXJyb3IoYFRvb2wgJHt0Lm5hbWV9IG5vdCBmb3VuZGApO3JldHVybiBvLmhhbmRsZXIodC5hcmd1bWVudHMsbil9LHRoaXMub25saXN0dG9vbHM9YXN5bmModCxuKT0+KHt0b29sczphd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyh0aGlzLl9yZWdpc3RlcmVkVG9vbHMpLmZpbHRlcigoW28scl0pPT5yLmVuYWJsZWQpLm1hcChhc3luYyhbbyxyXSk9PntsZXQgcz17bmFtZTpvLHRpdGxlOnIudGl0bGUsZGVzY3JpcHRpb246ci5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpyLmlucHV0U2NoZW1hP2F3YWl0IGR1KHIuaW5wdXRTY2hlbWEsImlucHV0Iik6e3R5cGU6Im9iamVjdCIscHJvcGVydGllczp7fX19O3JldHVybiByLm91dHB1dFNjaGVtYSYmKHMub3V0cHV0U2NoZW1hPWF3YWl0IGR1KHIub3V0cHV0U2NoZW1hLCJvdXRwdXQiKSksci5hbm5vdGF0aW9ucyYmKHMuYW5ub3RhdGlvbnM9ci5hbm5vdGF0aW9ucyksci5fbWV0YSYmKHMuX21ldGE9ci5fbWV0YSksc30pKX0pKX1hc3luYyBzZW5kVG9vbExpc3RDaGFuZ2VkKHQ9e30pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kVG9vbExpc3RDaGFuZ2VkIiksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiLHBhcmFtczp0fSl9Z2V0SG9zdENhcGFiaWxpdGllcygpe3JldHVybiB0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzfWdldEhvc3RWZXJzaW9uKCl7cmV0dXJuIHRoaXMuX2hvc3RJbmZvfWdldEhvc3RDb250ZXh0KCl7cmV0dXJuIHRoaXMuX2hvc3RDb250ZXh0fWdldCBvbnRvb2xpbnB1dCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iil9c2V0IG9udG9vbGlucHV0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiLHQpfWdldCBvbnRvb2xpbnB1dHBhcnRpYWwoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiKX1zZXQgb250b29saW5wdXRwYXJ0aWFsKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIix0KX1nZXQgb250b29scmVzdWx0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iil9c2V0IG9udG9vbHJlc3VsdCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIsdCl9Z2V0IG9udG9vbGNhbmNlbGxlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIpfXNldCBvbnRvb2xjYW5jZWxsZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiLHQpfWdldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIil9c2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHQpfV9vbnRlYXJkb3duO2dldCBvbnRlYXJkb3duKCl7cmV0dXJuIHRoaXMuX29udGVhcmRvd259c2V0IG9udGVhcmRvd24odCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbnRlYXJkb3duIix0aGlzLl9vbnRlYXJkb3duLHQpLHRoaXMuX29udGVhcmRvd249dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcih4eSwobixvKT0+e2lmKCF0aGlzLl9vbnRlYXJkb3duKXRocm93IEVycm9yKCJObyBvbnRlYXJkb3duIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29udGVhcmRvd24obi5wYXJhbXMsbyl9KX1fb25jYWxsdG9vbDtnZXQgb25jYWxsdG9vbCgpe3JldHVybiB0aGlzLl9vbmNhbGx0b29sfXNldCBvbmNhbGx0b29sKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25jYWxsdG9vbCIsdGhpcy5fb25jYWxsdG9vbCx0KSx0aGlzLl9vbmNhbGx0b29sPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoRmgsKG4sbyk9PntpZighdGhpcy5fb25jYWxsdG9vbCl0aHJvdyBFcnJvcigiTm8gb25jYWxsdG9vbCBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmNhbGx0b29sKG4ucGFyYW1zLG8pfSl9X29ubGlzdHRvb2xzO2dldCBvbmxpc3R0b29scygpe3JldHVybiB0aGlzLl9vbmxpc3R0b29sc31zZXQgb25saXN0dG9vbHModCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmxpc3R0b29scyIsdGhpcy5fb25saXN0dG9vbHMsdCksdGhpcy5fb25saXN0dG9vbHM9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihIaCwobixvKT0+e2lmKCF0aGlzLl9vbmxpc3R0b29scyl0aHJvdyBFcnJvcigiTm8gb25saXN0dG9vbHMgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHMobi5wYXJhbXMsbyl9KX1hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQpe3N3aXRjaCh0KXtjYXNlInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiOmlmKCF0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPy5zYW1wbGluZyl0aHJvdyBFcnJvcihgSG9zdCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nIChyZXF1aXJlZCBmb3IgJHt0fSlgKTticmVha319YXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KHQpe3N3aXRjaCh0KXtjYXNlInRvb2xzL2NhbGwiOmNhc2UidG9vbHMvbGlzdCI6aWYoIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyl0aHJvdyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdG9vbCBjYXBhYmlsaXR5IChyZXF1aXJlZCBmb3IgJHt0fSlgKTtyZXR1cm47Y2FzZSJwaW5nIjpjYXNlInVpL3Jlc291cmNlLXRlYXJkb3duIjpyZXR1cm47ZGVmYXVsdDp0aHJvdyBFcnJvcihgTm8gaGFuZGxlciBmb3IgbWV0aG9kICR7dH0gcmVnaXN0ZXJlZGApfX1hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQpe31hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2sgaGFuZGxlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3luYyBjYWxsU2VydmVyVG9vbCh0LG4pe2lmKHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjYWxsU2VydmVyVG9vbCIpLHR5cGVvZiB0PT0ic3RyaW5nIil0aHJvdyBFcnJvcihgY2FsbFNlcnZlclRvb2woKSBleHBlY3RzIGFuIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBhIHN0cmluZyAoIiR7dH0iKS4gRGlkIHlvdSBtZWFuOiBjYWxsU2VydmVyVG9vbCh7IG5hbWU6ICIke3R9IiwgYXJndW1lbnRzOiB7IC4uLiB9IH0pP2ApO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidG9vbHMvY2FsbCIscGFyYW1zOnR9LERyLHtvbnByb2dyZXNzOigpPT57fSxyZXNldFRpbWVvdXRPblByb2dyZXNzOiEwLC4uLm59KX1hc3luYyByZWFkU2VydmVyUmVzb3VyY2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlYWRTZXJ2ZXJSZXNvdXJjZSIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvcmVhZCIscGFyYW1zOnR9LERoLG4pfWFzeW5jIGxpc3RTZXJ2ZXJSZXNvdXJjZXModCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImxpc3RTZXJ2ZXJSZXNvdXJjZXMiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL2xpc3QiLHBhcmFtczp0fSxxaCxuKX1hc3luYyBjcmVhdGVTYW1wbGluZ01lc3NhZ2UodCxuKXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY3JlYXRlU2FtcGxpbmdNZXNzYWdlIik7bGV0IG89dC50b29scz9KaDpWaDtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiLHBhcmFtczp0fSxvLG4pfXNlbmRNZXNzYWdlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kTWVzc2FnZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9tZXNzYWdlIixwYXJhbXM6dH0sJHksbil9c2VuZExvZyh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy9tZXNzYWdlIixwYXJhbXM6dH0pfXVwZGF0ZU1vZGVsQ29udGV4dCh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgidXBkYXRlTW9kZWxDb250ZXh0IiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IixwYXJhbXM6dH0sY2Msbil9b3BlbkxpbmsodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoIm9wZW5MaW5rIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL29wZW4tbGluayIscGFyYW1zOnR9LGt5LG4pfXNlbmRPcGVuTGluaz10aGlzLm9wZW5MaW5rO2Rvd25sb2FkRmlsZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiZG93bmxvYWRGaWxlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2Rvd25sb2FkLWZpbGUiLHBhcmFtczp0fSx3eSxuKX1yZXF1ZXN0VGVhcmRvd24odD17fSl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIscGFyYW1zOnR9KX1yZXF1ZXN0RGlzcGxheU1vZGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlcXVlc3REaXNwbGF5TW9kZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIscGFyYW1zOnR9LE95LG4pfXNlbmRTaXplQ2hhbmdlZCh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiLHBhcmFtczp0fSl9c2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKXtsZXQgdD0hMSxuPTAsbz0wLHI9KCk9Pnt0fHwodD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0PSExO2xldCBpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWkuc3R5bGUuaGVpZ2h0O2kuc3R5bGUuaGVpZ2h0PSJtYXgtY29udGVudCI7bGV0IGw9TWF0aC5jZWlsKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtpLnN0eWxlLmhlaWdodD1hO2xldCB1PU1hdGguY2VpbCh3aW5kb3cuaW5uZXJXaWR0aCk7KHUhPT1ufHxsIT09bykmJihuPXUsbz1sLHRoaXMuc2VuZFNpemVDaGFuZ2VkKHt3aWR0aDp1LGhlaWdodDpsfSkpfSkpfTtyKCk7bGV0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKHIpO3JldHVybiBzLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxzLm9ic2VydmUoZG9jdW1lbnQuYm9keSksKCk9PnMuZGlzY29ubmVjdCgpfWFzeW5jIGNvbm5lY3QodD1uZXcgdnkod2luZG93LnBhcmVudCx3aW5kb3cucGFyZW50KSxuKXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQXBwIGlzIGFscmVhZHkgY29ubmVjdGVkLiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgYWdhaW4uIik7dGhpcy5faW5pdGlhbGl6ZWRTZW50PSExLGF3YWl0IHN1cGVyLmNvbm5lY3QodCk7dHJ5e2xldCBvPWF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9pbml0aWFsaXplIixwYXJhbXM6e2FwcENhcGFiaWxpdGllczp0aGlzLl9jYXBhYmlsaXRpZXMsYXBwSW5mbzp0aGlzLl9hcHBJbmZvLHByb3RvY29sVmVyc2lvbjpteX19LE55LG4pO2lmKG89PT12b2lkIDApdGhyb3cgRXJyb3IoYFNlcnZlciBzZW50IGludmFsaWQgaW5pdGlhbGl6ZSByZXN1bHQ6ICR7b31gKTt0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPW8uaG9zdENhcGFiaWxpdGllcyx0aGlzLl9ob3N0SW5mbz1vLmhvc3RJbmZvLHRoaXMuX2hvc3RDb250ZXh0PW8uaG9zdENvbnRleHQsYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCJ9KSx0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITAsdGhpcy5vcHRpb25zPy5hdXRvUmVzaXplJiZ0aGlzLnNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl9Y2F0Y2gobyl7dGhyb3cgdGhpcy5jbG9zZSgpLG99fX1sZXQgaHU9IiI7Y29uc3QgV2g9KGUsdCxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PntpZighZSlyZXR1cm47KGUudGhlbWU9PT0ibGlnaHQifHxlLnRoZW1lPT09ImRhcmsiKSYmdC5hcHBseURvY3VtZW50VGhlbWUoZS50aGVtZSk7Y29uc3Qgbz1lLnN0eWxlcz8udmFyaWFibGVzO28mJnR5cGVvZiBvPT0ib2JqZWN0IiYmdC5hcHBseUhvc3RTdHlsZVZhcmlhYmxlcyhvKTtjb25zdCByPWUuc3R5bGVzPy5jc3M/LmZvbnRzO3R5cGVvZiByPT0ic3RyaW5nIiYmciYmciE9PWh1JiYodC5hcHBseUhvc3RGb250cyhyKSxodT1yKTtjb25zdCBzPWUuc2FmZUFyZWFJbnNldHM7aWYocylmb3IoY29uc3QgaSBvZlsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0pe2NvbnN0IGE9TnVtYmVyKHNbaV0/PzApO24uc3R5bGUuc2V0UHJvcGVydHkoYC0taW5zZXQtJHtpfWAsYCR7TnVtYmVyLmlzRmluaXRlKGEpJiZhPjA/YTowfXB4YCl9fSxPZT1uZXcgVGMoe25hbWU6ImhvdGVsLXN0b3JlZnJvbnQiLHZlcnNpb246IjEuMC4wIn0se29wZW5MaW5rczp7fX0pLEdoPXthcHBseURvY3VtZW50VGhlbWU6TXksYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6cXksYXBwbHlIb3N0Rm9udHM6RHl9LGxlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLGM9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IG50PSIiLEtyPSIiLFFoPXt9LFloPSExLFhoPSIiLE49e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LHdlPTE7Y29uc3QgTHk9NTtsZXQgUT1udWxsLGR0PVtdLEhlPSIiLHplPVtdLFk9bnVsbCx2bz0wO2NvbnN0IFV5PW5ldyBTZXQoWyJmb3JnZXRQcmVmZXJlbmNlcyIsImFkZFRvVHJpcCIsImNsZWFyVHJpcCIsInJlcXVlc3RCb29raW5nIiwiY2FuY2VsQm9va2luZyIsImNoYW5nZUJvb2tpbmciLCJzaWduSW4iLCJzaWduT3V0Il0pLGZ1PWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7cmV0dXJuIHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zInx8dD09PSJuZWVkcy1kYXRlcyI/YGhvdGVsOiR7ZS5ob3RlbD8uaWQ/PyIifWA6dD09PSJleHRyYXMiP2UuZm9yQm9va2luZz9gZXh0cmFzOmJvb2tpbmc6JHtlLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX1gOmBleHRyYXM6JHtlLmhvdGVsPy5pZD8/IiJ9YDp0PT09InBvbGljeSJ8fHQ9PT0icG9saWNpZXMifHx0PT09InBvbGljeS1taXNzaW5nIj9gcG9saWN5OiR7ZS5ob3RlbD8uaWQ/PyIifToke2UudG9waWM/PyIifWA6dD09PSJjYW5jZWxsYXRpb24tcHJldmlldyI/YGNhbmNlbDoke2UuYm9va2luZz8uY29uZmlybWF0aW9uQ29kZT8/IiJ9YDp0PT09ImNoYW5nZS1wcmV2aWV3Ij9gY2hhbmdlOiR7ZS5jb25maXJtYXRpb25Db2RlPz9lLmJvb2tpbmc/LmNvbmZpcm1hdGlvbkNvZGU/PyIifWA6dD09PSJkZXN0aW5hdGlvbnMiP2BkZXN0aW5hdGlvbnM6JHtlLnNjb3BlPy5uYW1lPz8iIn1gOnQ9PT0iaG90ZWxzInx8dD09PSJuby1ob3RlbHMiP2Bob3RlbHM6JHtlLmFzaz8uY2l0eT8/IiJ9OiR7ZS5hc2s/LnF1ZXJ5Pz9lLnF1ZXJ5Pz8iIn1gOnR9LGNzPWU9PnshWXx8RnkuaGFzKFN0cmluZyhZLnZpZXcpKXx8ZnUoZSkhPT1mdShZKSYmKHplPVsuLi56ZSx7cGF5bG9hZDpZLGxhYmVsOkJ5KFkpLHZlcnNpb246dm99XS5zbGljZSgtNikpfSxIeT1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpLG49ZT8uc3RheT8uY2hlY2tJbj97Y2hlY2tJbjplLnN0YXkuY2hlY2tJbixjaGVja091dDplLnN0YXkuY2hlY2tPdXQsZ3Vlc3RzOmUuc3RheS5ndWVzdHM/PzJ9Ont9O2lmKHQ9PT0idHJpcCIpcmV0dXJue2tleToidmlld1RyaXAiLGFyZ3M6e319O2lmKHQ9PT0iYm9va2luZ3MiKXJldHVybntrZXk6Imxpc3RCb29raW5ncyIsYXJnczp7fX07aWYoKHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zIikmJmUuaG90ZWw/LmlkKXJldHVybntrZXk6ImdldEhvdGVsIixhcmdzOntob3RlbDplLmhvdGVsLmlkLC4uLm4sLi4uZS5yb29tc193YW50ZWQ/e3Jvb21zOmUucm9vbXNfd2FudGVkfTp7fX19O2lmKHQ9PT0iZXh0cmFzIiYmZS5mb3JCb29raW5nKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2Jvb2tpbmc6ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9fTtpZih0PT09ImV4dHJhcyImJmUuaG90ZWw/LmlkKXJldHVybntrZXk6Imxpc3RFeHRyYXMiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubn19O2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm57a2V5OiJpdGluZXJhcnkiLGFyZ3M6e3RpdGxlOmUudGl0bGUsLi4ubixkYXlzOihlLmRheXM/P1tdKS5tYXAobz0+KHtsYWJlbDpvLmxhYmVsLC4uLm8ubm90ZT97bm90ZTpvLm5vdGV9Ont9LGl0ZW1zOihvLml0ZW1zPz9bXSkubWFwKHI9PnIuaWQpfSkpfX19LG11PWU9Pnt6ZT16ZS5maWx0ZXIodD0+IWUuaW5jbHVkZXMoU3RyaW5nKHQucGF5bG9hZD8udmlldykpKX0sRnk9bmV3IFNldChbImJvb2tpbmciLCJjYW5jZWxsZWQiLCJjaGFuZ2VkIiwiZXJyb3IiLCJuZWVkcy1ndWVzdCIsInNpZ25lZC1vdXQiLCJtZW1iZXItc2lnbi1pbiJdKSxCeT1lPT57Y29uc3QgdD1TdHJpbmcoZT8udmlldz8/IiIpO2lmKHQ9PT0iY29tcGFyaXNvbiIpcmV0dXJuYCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDtpZih0PT09Iml0aW5lcmFyeSIpcmV0dXJuInRoZSBwbGFuIjtpZih0PT09Im5vLWhvdGVscyIpcmV0dXJuInRoZSBzZWFyY2giO2lmKHQ9PT0iZGVzdGluYXRpb25zIilyZXR1cm4gZS5zY29wZT8ubmFtZT9TdHJpbmcoZS5zY29wZS5uYW1lKToiYWxsIGRlc3RpbmF0aW9ucyI7aWYodD09PSJob3RlbHMiKXtpZihlLmFzaz8uY2l0eSlyZXR1cm4gU3RyaW5nKGUuYXNrLmNpdHkpO2NvbnN0IG49Wy4uLm5ldyBTZXQoKGUuaG90ZWxzPz9bXSkubWFwKG89PlN0cmluZyhvLmNpdHkpKSldO3JldHVybiBuLmxlbmd0aD09PTE/U3RyaW5nKG5bMF0pOmAke2UudG90YWw/PzB9IGhvdGVsc2B9cmV0dXJuIHQ9PT0iaG90ZWwifHx0PT09Im5vLXJvb21zInx8dD09PSJuZWVkcy1kYXRlcyI/U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKTp0PT09ImNhbmNlbGxhdGlvbi1wcmV2aWV3Ij8idGhlIGNhbmNlbGxhdGlvbiI6dD09PSJjaGFuZ2UtcHJldmlldyI/InRoZSBjaGFuZ2UiOnQ9PT0ibWVtYmVyIj8ieW91ciBtZW1iZXJzaGlwIjp0PT09ImV4dHJhcyI/ZS5mb3JCb29raW5nP2BhZGQtb25zIGZvciAke2UuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfWA6YCR7U3RyaW5nKGUuaG90ZWw/Lm5hbWU/PyJ0aGUgaG90ZWwiKX0gYWRkLW9uc2A6dD09PSJ0cmlwIj8idGhlIHRyaXAiOnQ9PT0iYm9va2luZ3MiPyJ5b3VyIGJvb2tpbmdzIjp0PT09InBvbGljeSJ8fHQ9PT0icG9saWNpZXMiPyJ0aGUgcG9saWNpZXMiOiJiYWNrIn0sVnk9KCk9Pntjb25zdCBlPWxlKCJiYWNrYnRuIiksdD16ZS5hdCgtMSk7ZS5oaWRkZW49IXQsdCYmKGUudGV4dENvbnRlbnQ9YOKAuSAke3QubGFiZWx9YCl9O2xldCBOdD0iIix1cz0iIixVdD0wLEljPSExO2NvbnN0IGVmPWU9Pntjb25zdCB0PWU/LlsiY3VybGVzcy90cmlwIl07dCYmKHR5cGVvZiB0LnRyaXBJZD09InN0cmluZyImJnQudHJpcElkJiYodXM9dC50cmlwSWQpLFV0PU51bWJlcih0LmNvdW50Pz8wKSxBcnJheS5pc0FycmF5KHQubGluZXMpJiYoZHQ9dC5saW5lcyxJYz0hMCkpfSxKeT1lPT51cz97Li4uZSx0cmlwOnVzfTplLEt5PWU9PlFoW2VdPz8iIjtsZXQgTHI9ITE7Y29uc3QgZ3U9ZT0+e0xyPWUsZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmNhcmQiKT8uY2xhc3NMaXN0LnRvZ2dsZSgiYnVzeSIsZSl9O2xldCBibz0wLGxzPSIiO2NvbnN0IFY9KGUsdD17fSxuPXt9KT0+e2NvbnN0IG89S3koZSk7aWYoIW8pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgbm8gdG9vbCBmb3IgJHtlfWApKTtpZihMcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO2d1KCEwKTtjb25zdCByPWJvO3JldHVybiBPZS5jYWxsU2VydmVyVG9vbCh7bmFtZTpvLGFyZ3VtZW50czpKeSh0KX0pLmZpbmFsbHkoKCk9Pmd1KCExKSkudGhlbihzPT57ZWYocz8uX21ldGEpO2NvbnN0IGk9cz8uc3RydWN0dXJlZENvbnRlbnQsYT1pJiZuLmZvbGQ/bi5mb2xkKGkpOmk7bHM9aT9KU09OLnN0cmluZ2lmeShpKToiIjtjb25zdCBsPVV5LmhhcyhlKSYmYSYmYS52aWV3IT09ImVycm9yIjtyZXR1cm4gcj09PWJvJiZhPyhuLnB1c2ghPT0hMSYmY3MoYSksbCYmKHZvKz0xKSxhLnZpZXc9PT0iYm9va2luZyImJihtdShbInRyaXAiLCJuZWVkcy1kYXRlcyIsIm5lZWRzLWd1ZXN0Il0pLFNlPW51bGwpLChhLnZpZXc9PT0iY2FuY2VsbGVkInx8YS52aWV3PT09ImNoYW5nZWQiKSYmbXUoWyJjYW5jZWxsYXRpb24tcHJldmlldyIsImNoYW5nZS1wcmV2aWV3Il0pLHR0KGEpKTpsJiYodm8rPTEpLFd5KHMpLHN9KX0sV3k9ZT0+e2NvbnN0IHQ9KGU/LmNvbnRlbnQ/P1tdKS5maW5kKG49Pm4/LnR5cGU9PT0idGV4dCIpPy50ZXh0OyF0fHwhT2UuZ2V0SG9zdENhcGFiaWxpdGllcygpPy51cGRhdGVNb2RlbENvbnRleHR8fE9lLnVwZGF0ZU1vZGVsQ29udGV4dCh7Y29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKHQpfV19KS5jYXRjaCgoKT0+e30pfSxXbj1lPT57bGV0IHQ9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rPTEpdD0odCozMStlLmNoYXJDb2RlQXQobikpJTM2MDtyZXR1cm5gLS1zaG90LWE6aHNsKCR7dH0gNDIlIDM0JSk7LS1zaG90LWI6aHNsKCR7KHQrMzgpJTM2MH0gNDYlIDIyJSlgfSxHbj1lPT5lLnJlcGxhY2UoL1teXHB7TH1ccHtOfSBdL2d1LCIgIikuc3BsaXQoL1xzKy8pLmZpbHRlcihCb29sZWFuKS5zbGljZSgwLDIpLm1hcCh0PT50WzBdPy50b1VwcGVyQ2FzZSgpPz8iIikuam9pbigiIiksR3k9Jzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiAzLjVsMi42IDUuMyA1LjkuOS00LjMgNC4xIDEgNS44TDEyIDE2LjkgNi44IDE5LjZsMS01LjhMMy41IDkuN2w1LjktLjl6Ii8+PC9zdmc+JyxReT1lPT5lJiZ0eXBlb2YgZS52YWx1ZT09Im51bWJlciI/YDxzcGFuIGNsYXNzPSJyYXRlIj4ke0d5fSR7YyhlLnZhbHVlKX08c3BhbiBjbGFzcz0idC1mcm9tIj48c21hbGw+IMK3ICR7YyhlLmNvdW50KX08L3NtYWxsPjwvc3Bhbj48L3NwYW4+YDoiIixlZT0oKT0+WWg/YDxkaXYgY2xhc3M9ImRlbW8iPjxiPkRlbW88L2I+PHNwYW4+JHtjKFhofHwiRGVtb25zdHJhdGlvbiBkYXRhOiB0aGVzZSByYXRlcyBhbmQgcm9vbSBjb3VudHMgd2VyZSBtYWRlIHVwIGZvciB0aGlzIGRlbW8uIil9PC9zcGFuPjwvZGl2PmA6IiIsSHQ9ZT0+e2NvbnN0IHQ9bmV3IERhdGUoYCR7ZX1UMTI6MDA6MDBaYCk7cmV0dXJuIE51bWJlci5pc05hTih0LmdldFRpbWUoKSk/ZTp0LnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tR0IiLHt3ZWVrZGF5OiJzaG9ydCIsZGF5OiJudW1lcmljIixtb250aDoic2hvcnQiLHRpbWVab25lOiJVVEMifSl9LGRzPShlLHQpPT5NYXRoLnJvdW5kKChEYXRlLnBhcnNlKGAke3R9VDEyOjAwOjAwWmApLURhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkpLzg2NGU1KSxEZT1lPT5lPy5jaGVja0luJiZlPy5jaGVja091dD9gJHtIdChlLmNoZWNrSW4pfSDigJMgJHtIdChlLmNoZWNrT3V0KX0gwrcgJHtkcyhlLmNoZWNrSW4sZS5jaGVja091dCl9ICR7ZHMoZS5jaGVja0luLGUuY2hlY2tPdXQpPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsWXk9KGUsdCxuKT0+e2NvbnN0IG89ZHQuZmluZChyPT5yLmtpbmQ9PT0icm9vbSImJnIuaG90ZWxJZD09PWUmJnIucm9vbVJlZj09PXQmJnIuc3RheT8uY2hlY2tJbj09PW4/LmNoZWNrSW4mJnIuc3RheT8uY2hlY2tPdXQ9PT1uPy5jaGVja091dCk7cmV0dXJuIE51bWJlcihvPy5xdWFudGl0eT8/MCl9LFh5PShlLHQpPT57Y29uc3Qgbj1kdC5maW5kKG89Pm8ua2luZD09PSJleHRyYSImJm8uaG90ZWxJZD09PWUmJm8uZXh0cmFSZWY9PT10KTtyZXR1cm4gTnVtYmVyKG4/LnF1YW50aXR5Pz8wKX0seW89KGUsdCxuLG89MSk9PnQ+MD9gPHNwYW4gY2xhc3M9InN0ZXAiPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dC0xfSIgYXJpYS1sYWJlbD0iT25lIGZld2VyICR7YyhuKX0iPuKIkjwvYnV0dG9uPgogICAgICAgICA8c3BhbiBjbGFzcz0ibiI+JHt0fTwvc3Bhbj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QrMX0iIGFyaWEtbGFiZWw9Ik9uZSBtb3JlICR7YyhuKX0iPis8L2J1dHRvbj4KICAgICAgIDwvc3Bhbj5gOmA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFkZCIgJHtlfSBkYXRhLW49IiR7b30iIGFyaWEtbGFiZWw9IkFkZCAke2Mobil9Ij4KICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi40IgogICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiLz48L3N2Zz4KICAgICAgIDwvYnV0dG9uPmAsdGY9KGUsdCk9Pntjb25zdCBuPXR8fGVfKCk7cmV0dXJuKCFOLmNoZWNrSW58fE4uY2hlY2tJbjxuKSYmKE4uY2hlY2tJbj1uKSwoIU4uY2hlY2tPdXR8fE4uY2hlY2tPdXQ8PU4uY2hlY2tJbikmJihOLmNoZWNrT3V0PXBzKE4uY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjaSIgdmFsdWU9IiR7YyhOLmNoZWNrSW4pfSIgbWluPSIke2Mobil9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY28iIHZhbHVlPSIke2MoTi5jaGVja091dCl9IiBtaW49IiR7YyhwcyhOLmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgIDxsYWJlbCBjbGFzcz0iZ3Vlc3RzIj5Sb29tcwogICAgICA8c3BhbiBjbGFzcz0ic3RlcCBsaWdodCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ibiIgaWQ9InJuIj4ke2Mod2UpfTwvc3Bhbj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSIxIiBhcmlhLWxhYmVsPSJPbmUgbW9yZSByb29tIj4rPC9idXR0b24+CiAgICAgIDwvc3Bhbj4KICAgIDwvbGFiZWw+CiAgICA8c3BhbiBjbGFzcz0ibmlnaHRzIiBpZD0ibmlnaHRzIj4ke2MoUGMoKSl9PC9zcGFuPgogIDwvZGl2PmB9LFBjPSgpPT57Y29uc3QgZT1OLmNoZWNrSW4mJk4uY2hlY2tPdXQ/ZHMoTi5jaGVja0luLE4uY2hlY2tPdXQpOjAsdD1lPjA/YCR7ZX0gJHtlPT09MT8ibmlnaHQiOiJuaWdodHMifWA6IiIsbj13ZT4xP2Ake3dlfSByb29tc2A6IiI7cmV0dXJuW3Qsbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKX0scHM9KGUsdCk9Pm5ldyBEYXRlKERhdGUucGFyc2UoYCR7ZX1UMTI6MDA6MDBaYCkrdCo4NjRlNSkudG9JU09TdHJpbmcoKS5zbGljZSgwLDEwKSxlXz0oKT0+bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLHRfPWU9Pntjb25zdCB0PWA8ZGl2IGNsYXNzPSJmaW5kZXIiPgogICAgICA8aW5wdXQgaWQ9IndoZXJlIiB0eXBlPSJzZWFyY2giIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQSBjaXR5LCBhIGNvdW50cnkgb3IgYSBob3RlbCIgYXJpYS1sYWJlbD0iV2hlcmUgdG8iPgogICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iZmluZCI+RmluZDwvYnV0dG9uPgogICAgPC9kaXY+YCxuPXI9PmA8ZGl2IGNsYXNzPSJwbGFjZXMiPiR7ci5tYXAoKHMsaSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2U9IiR7YyhzLm5hbWUpfSIke2k+PW90PyIgaGlkZGVuIjoiIn0+JHtjKHMubmFtZSl9IDxzbWFsbD4ke2Mocy5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0ke3IubGVuZ3RoPm90P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7ci5sZW5ndGgtb3R9IG1vcmU8L2J1dHRvbj5gOiIifTwvZGl2PmAsbz1lLnNjb3BlO3JldHVybiBvP1tlZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKG8ubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+JHtjKGUudG90YWwpfSAke2MoZS52b2NhYj8ubm91blBsdXJhbD8/ImhvdGVscyIpfSBpbiAke2MoKG8uY2l0aWVzPz9bXSkubGVuZ3RoKX0gY2l0aWVzPC9kaXY+PC9kaXY+YCxuKG8uY2l0aWVzPz9bXSksYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2UtYWxsPSIke2Moby5uYW1lKX0iPkFsbCAke2MoZS50b3RhbCl9IGluICR7YyhvLm5hbWUpfTwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpOltlZSgpLHQsLi4uKGUucmVnaW9ucz8/W10pLm1hcChyPT5gCiAgICAgIDxkaXYgY2xhc3M9InJlZ2lvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY291bnRyeW5hbWUiPiR7YyhyLm5hbWUpfSA8c21hbGw+JHtjKHIuY291bnQpfTwvc21hbGw+PC9kaXY+CiAgICAgICAgJHsoci5jb3VudHJpZXM/P1tdKS5tYXAocz0+e2NvbnN0IGk9cy5jaXRpZXM/P1tdLGE9aS5sZW5ndGg9PT0xP2lbMF06dm9pZCAwO3JldHVybmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc3QiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkZXN0LWNvdW50cnkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iJHtjKHMubmFtZSl9Ij4ke2Mocy5uYW1lKX0ke2EmJmEubmFtZSE9PXMubmFtZT9gPHNtYWxsPiDCtyAke2MoYS5uYW1lKX08L3NtYWxsPmA6IiJ9IDxzbWFsbCBjbGFzcz0ibiI+JHtjKHMuY291bnQpfTwvc21hbGw+PC9idXR0b24+CiAgICAgICAgICAgICR7aS5sZW5ndGg+MT9uKGkpOiIifQogICAgICAgICAgPC9kaXY+YH0pLmpvaW4oIiIpfQogICAgICA8L2Rpdj5gKSxgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFsbC1ob3RlbHMiPkJyb3dzZSBhbGwgJHtjKGUudG90YWwpfTwvYnV0dG9uPjwvZGl2PmBdLmpvaW4oIiIpfSxvdD04LG5fPVtbImdyb3VwIiwiRGVmYXVsdCJdLFsicHJpY2UtbG93IiwiTG93ZXN0IHByaWNlIl0sWyJwcmljZS1oaWdoIiwiSGlnaGVzdCBwcmljZSJdLFsicmF0aW5nIiwiUmF0aW5nIl1dLG9fPWU9Pntjb25zdCB0PWUuaG90ZWxzPz9bXSxuPVsuLi5uZXcgU2V0KHQubWFwKGs9PlN0cmluZyhrLmNpdHkpKSldLG89az0+e2NvbnN0IHc9dC5maW5kKFI9PlIuY2l0eT09PWspPy5jb3VudHJ5O3JldHVybiB3JiYhU3RyaW5nKHcpLnN0YXJ0c1dpdGgoayk/U3RyaW5nKHcpOiIifSxyPVsuLi5uZXcgU2V0KHQubWFwKGs9PlN0cmluZyhrLmNvdW50cnk/PyIiKSkpXSxzPXIubGVuZ3RoPjEsaT1rPT5gCiAgICA8ZGl2IGNsYXNzPSJjaXR5Z3JvdXAiPgogICAgICAke24ubGVuZ3RoPjE/YDxkaXYgY2xhc3M9ImNpdHluYW1lIj4ke2Moayl9JHshcyYmbyhrKT9gPHNtYWxsPiDCtyAke2MobyhrKSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKHc9PncuY2l0eT09PWspLm1hcCh3PT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7Yyh3LmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtXbihTdHJpbmcody5pZCkpfSI+CiAgICAgICAgICAgICAgJHt3LmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKHcuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKEduKFN0cmluZyh3Lm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7dy5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7Yyh3LmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2Mody5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7YyhuLmxlbmd0aD4xP3cuYXJlYT8/dy5jaXR5Olt3LmFyZWEsdy5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mcm9tIj4ke3cuZnJvbU5pZ2h0bHk/YCR7Yyh3LmZyb21OaWdodGx5KX08c21hbGw+IC8gbmlnaHQ8L3NtYWxsPmA6IiJ9PC9zcGFuPgogICAgICAgICAgICAgICAgJHtReSh3LnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj5gLGE9TnVtYmVyKGUudG90YWw/P3QubGVuZ3RoKSxsPWEtdC5sZW5ndGgsdT1lLnBsYWNlcz8/W10sZD0hIWUuYXNrPy5jaXR5LG09dS5sZW5ndGh8fGQ/YDxkaXYgY2xhc3M9InBsYWNlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IldoZXJlIj4KICAgICAgICAgICAke2Q/JzxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wbGFjZT0iIj5BbGwgcGxhY2VzPC9idXR0b24+JzoiIn0KICAgICAgICAgICAke3UubWFwKChrLHcpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2Moay5wbGFjZSl9IiR7dz49b3Q/IiBoaWRkZW4iOiIifT4ke2Moay5sYWJlbCl9IDxzbWFsbD4ke2Moay5jb3VudCl9PC9zbWFsbD48L2J1dHRvbj5gKS5qb2luKCIiKX0KICAgICAgICAgICAke3UubGVuZ3RoPm90P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJtb3JlLXBsYWNlcyI+KyR7dS5sZW5ndGgtb3R9IG1vcmU8L2J1dHRvbj5gOiIifQogICAgICAgICA8L2Rpdj5gOiIiLHY9U3RyaW5nKGUuc29ydD8/Imdyb3VwIiksYj0hKChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MSksXz10Lmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJwbGFjZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJPcmRlciI+CiAgICAgICAgICAgPHNwYW4gY2xhc3M9InNvcnRzLWsiPlNvcnQ8L3NwYW4+CiAgICAgICAgICAgJHtuXy5maWx0ZXIoKFtrXSk9PmJ8fCFrLnN0YXJ0c1dpdGgoInByaWNlIikpLm1hcCgoW2ssd10pPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSBzb3J0IiB0eXBlPSJidXR0b24iIGRhdGEtc29ydD0iJHtrfSIgYXJpYS1wcmVzc2VkPSIke2s9PT12PyJ0cnVlIjoiZmFsc2UifSI+JHt3fTwvYnV0dG9uPmApLmpvaW4oIiIpfQogICAgICAgICA8L2Rpdj5gOiIiO3JldHVybltlZSgpLG0sXyxlLndpZGVuZWQ/YDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIG1hdGNoZWQgJHtjKGUud2lkZW5lZC5mcm9tKX0uIFRoZXNlIGFyZSAke2MoZS53aWRlbmVkLnRvKX0uPC9kaXY+YDoiIixgPGRpdj4ke3M/ci5tYXAoaz0+YDxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj4ke2Moayl9PC9kaXY+JHtuLmZpbHRlcih3PT50LnNvbWUoUj0+Ui5jaXR5PT09dyYmU3RyaW5nKFIuY291bnRyeT8/IiIpPT09aykpLm1hcChpKS5qb2luKCIiKX1gKS5qb2luKCIiKTpuLm1hcChpKS5qb2luKCIiKX08L2Rpdj5gLChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UXVvdGVkIGluICR7YyhlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9IOKAlCBubyByYXRlIGlzIGFwcGxpZWQgaGVyZSwgc28gdGhpcyBpcyBub3QgYSBwcmljZSBvcmRlci4gT25lIGNpdHkgb3Igb25lIGNvdW50cnkgZ2l2ZXMgb25lIGN1cnJlbmN5LjwvZGl2PmA6IiIsZS5vdmVyQnVkZ2V0P2A8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5vdmVyQnVkZ2V0KX0gbW9yZSBtYXRjaGVkIGFuZCBjYW1lIGluIG92ZXIgdGhlIHByaWNlIGNlaWxpbmcuPC9kaXY+YDoiIixsPjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHt0Lmxlbmd0aH0gb2YgJHthfS48L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtaG90ZWxzIj5TaG93ICR7TWF0aC5taW4oMjAsbCl9IG1vcmU8L2J1dHRvbj48L2Rpdj5gOiIiXS5qb2luKCIiKX0scl89ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXTtyZXR1cm4gdC5sZW5ndGg/W2VlKCksYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7Yyh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobj0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKG4uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7V24oU3RyaW5nKG4uaWQpKX0iPgogICAgICAgICAgJHtuLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKG4uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoR24oU3RyaW5nKG4ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHtjKG4ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7Yyhbbi5hcmVhLG4uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7bi5mcm9tTmlnaHRseT9gJHtjKG4uZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YDxkaXYgY2xhc3M9ImVtcHR5Ij5Ob3RoaW5nIG1hdGNoZWQke2UucXVlcnk/YCAiJHtjKGUucXVlcnkpfSJgOiIifS4gVHJ5IGEgY2l0eS48L2Rpdj5gfSxuZj1lPT5gCiAgPGRpdiBjbGFzcz0iaGVybyIgc3R5bGU9IiR7V24oU3RyaW5nKGUuaWQpKX0iPgogICAgJHtlLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKGUuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2MoR24oU3RyaW5nKGUubmFtZSkpKX08L3NwYW4+CiAgICAke2UuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke2MoZS5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7YyhlLnJhdGluZy52YWx1ZSl94piFICgke2MoZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHtjKGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke2ModCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCxzXz0oZSx0LG4pPT57Y29uc3Qgbz1ZeShTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIke1duKGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7Yyh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOmMoR24oU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2ModC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Mocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvblVudGlsP2AgdW50aWwgJHtjKFN0cmluZyh0LmZyZWVDYW5jZWxsYXRpb25VbnRpbCkuc2xpY2UoMCwxMCkpfWA6IiJ9PC9zcGFuPmA6JzxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5Ob24tcmVmdW5kYWJsZTwvc3Bhbj4nfQogICAgICAgICAgJHtOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7Yyh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAke3QucHVibGljU3RheVRvdGFsP2A8ZGl2IGNsYXNzPSJwLXdhcyI+JHtjKHQucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7Yyh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7Yyh0Lm5pZ2h0bHkpfSAvIG5pZ2h0JHt3ZT4xP2AgwrcgJHt3ZX0gcm9vbXNgOiIifSDCtyBpbmNsLiB0YXg8L2Rpdj4KICAgICAgICAke3QubWVtYmVyUmF0ZT9gPGRpdiBjbGFzcz0icC1tZW1iZXIiPiR7Yyh0Lm1lbWJlclJhdGUudGllcil9IHJhdGU8L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke3lvKGBkYXRhLWFkZC1yb29tPSIke2ModC5pZCl9IiBkYXRhLWhvdGVsPSIke2MoZS5pZCl9ImAsbyxTdHJpbmcodC5uYW1lKSx3ZSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxpXz0oZSx0KT0+IUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDI/IiI6YAogIDxkaXYgY2xhc3M9ImZsZXgtZGF0ZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJOZWFyYnkgYXJyaXZhbCBkYXRlcyI+CiAgICAke3QubWFwKG49PmA8YnV0dG9uIGNsYXNzPSJmZCR7bi5jaG9zZW4/IiBvbiI6IiJ9JHtuLmZyb20/IiI6IiBvdXQifSR7bi5iZXN0PyIgYmVzdCI6IiJ9IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhlKX0iIGRhdGEtY2k9IiR7YyhuLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtjKG4uY2hlY2tPdXQpfSIgYXJpYS1sYWJlbD0iQXJyaXZlICR7YyhIdChTdHJpbmcobi5jaGVja0luKSkpfSR7bi5mcm9tP2AsIGZyb20gJHtjKG4uZnJvbSl9YDoiLCBub3RoaW5nIGxlZnQifSI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLWRheSI+JHtjKEh0KFN0cmluZyhuLmNoZWNrSW4pKSl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1wcmljZSI+JHtuLmZyb20/YyhuLmZyb20pOiJGdWxsIn08L3NwYW4+CiAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogIDwvZGl2PmAsdnU9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnJvb21zPz9bXSxvPWUuc3RheT8/TjtyZXR1cm5bZWUoKSxuZih0KSx0ZihTdHJpbmcodC5pZCksdC50b2RheVRoZXJlKSxpXyhTdHJpbmcodC5pZCksZS5kYXRlcyksZS5uZWVkc0RhdGVzPyc8ZGl2IGNsYXNzPSJlbXB0eSI+TG9va2luZyB1cCByb29tc+KApjwvZGl2Pic6ZS5ub1Jvb21zP2A8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLm5vUm9vbXMpfTwvZGl2PmA6YDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+c18odCxyLG8pKS5qb2luKCIiKX08L2Rpdj5gLChlLmV4dHJhcz8/W10pLmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1leHRyYXM9IiR7Yyh0LmlkKX0iPkFkZC1vbnMgYW5kIGV4cGVyaWVuY2VzPC9idXR0b24+YDoiIiwoZS5wb2xpY2llcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5wb2xpY2llcy5tYXAocj0+YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wb2xpY3k9IiR7YyhyLnRvcGljKX0iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iPiR7YyhyLnRpdGxlKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sYV89ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLmV4dHJhcz8/W10sbz1lLmZvckJvb2tpbmc7cmV0dXJuIG8/W2VlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj5BZGQtb25zIGZvciAke2Moby5jb25maXJtYXRpb25Db2RlKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2ModC5uYW1lKX0gwrcgJHtjKERlKG8uc3RheSkpfTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Moci5wcmljZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7YyhyLnBlcil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHt5byhgZGF0YS1ib29raW5nLWV4dHJhPSIke2Moci5pZCl9IiBkYXRhLWJvb2tpbmc9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSJgLE51bWJlcihvLmhlbGQ/LltyLmlkXT8/MCksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsJzxkaXYgY2xhc3M9Im5vdGUiPkVhY2ggY2hhbmdlIGlzIHNob3duIHdpdGggaXRzIG5ldyB0b3RhbCBiZWZvcmUgYW55dGhpbmcgbW92ZXMuIE5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLjwvZGl2PicsJzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+QmFjayB0byB5b3VyIGJvb2tpbmdzPC9idXR0b24+J10uam9pbigiIik6W2VlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2ModC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IGl0IG9mZmVycyBiZXNpZGUgdGhlIHJvb208L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhyLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIuZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhyLnByaWNlKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7YyhyLnBlcil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke3lvKGBkYXRhLWFkZC1leHRyYT0iJHtjKHIuaWQpfSIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSJgLFh5KFN0cmluZyh0LmlkKSxTdHJpbmcoci5pZCkpLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+QmFjayB0byAke2ModC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sY189ZT0+e2NvbnN0IHQ9ZS5raW5kPT09InJvb20iP2BkYXRhLWFkZC1yb29tPSIke2MoZS5yb29tUmVmKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmhvdGVsSWQpfSIgZGF0YS1jaT0iJHtjKGUuc3RheT8uY2hlY2tJbil9IiBkYXRhLWNvPSIke2MoZS5zdGF5Py5jaGVja091dCl9IiBkYXRhLWd1PSIke2MoZS5zdGF5Py5ndWVzdHMpfSJgOmBkYXRhLWFkZC1leHRyYT0iJHtjKGUuZXh0cmFSZWY/P2UudGl0bGUpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaG90ZWxJZCl9ImA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhlLmtpbmQ9PT0icm9vbSI/YCR7ZS5ob3RlbE5hbWV9IMK3ICR7RGUoZS5zdGF5KX0ke2UucmVmdW5kYWJsZT09PSExPyIgwrcgbm9uLXJlZnVuZGFibGUiOiIifWA6YCR7ZS5ob3RlbE5hbWV9JHtlLmRldGFpbD9gIMK3ICR7ZS5kZXRhaWx9YDoiIn1gKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2MoZS50b3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2MoZS51bml0KX0ke2Uua2luZD09PSJyb29tIj8iIC8gbmlnaHQiOiIgZWFjaCJ9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7eW8odCxOdW1iZXIoZS5xdWFudGl0eT8/MSksU3RyaW5nKGUudGl0bGUpKX08L2Rpdj4KICAgIDwvZGl2PmB9LGJ1PShlLHQpPT5gPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Sb29tcyBhbmQgYWRkLW9uczwvc3Bhbj48c3Bhbj4ke2MoZS5zdWJ0b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+VGF4ZXMgYW5kIGZlZXM8L3NwYW4+PHNwYW4+JHtjKGUudGF4ZXNBbmRGZWVzKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIGdvb2QiPjxzcGFuPiR7YyhlLm1lbWJlclNhdmluZy50aWVyKX0gbWVtYmVyIHJhdGU8L3NwYW4+PHNwYW4+4oiSICR7YyhlLm1lbWJlclNhdmluZy5zYXZlZCl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2ModCl9PC9zcGFuPjxzcGFuPiR7YyhlLnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Qb2ludHMgdGhpcyBlYXJuczwvc3Bhbj48c3Bhbj4ke2MoTnVtYmVyKGUubWVtYmVyU2F2aW5nLnBvaW50cykudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfTwvc3Bhbj48L2Rpdj5gOiIifQogICA8L2Rpdj5gLHVfPWU9Pntjb25zdCB0PWUubGluZXM/P1tdO2lmKHQubGVuZ3RoPT09MClyZXR1cm5bZWUoKSwnPGRpdiBjbGFzcz0iZW1wdHkiPlRoZSB0cmlwIGlzIGVtcHR5LjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5Ccm93c2UgJHtjKG50KX0gaG90ZWxzPC9idXR0b24+PC9kaXY+YF0uam9pbigiIik7Y29uc3Qgbj1bLi4ubmV3IFNldCh0Lm1hcChvPT5TdHJpbmcoby5kYXk/PyIiKSkpXS5zb3J0KCk7cmV0dXJuW2VlKCksbi5tYXAobz0+YAogICAgICAke28/YDxkaXYgY2xhc3M9ImRheSI+JHtjKEh0KG8pKX08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QuZmlsdGVyKHI9PlN0cmluZyhyLmRheT8/IiIpPT09bykubWFwKGNfKS5qb2luKCIiKX08L2Rpdj5gKS5qb2luKCIiKSwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChvPT5gJHtjKG8udGl0bGUpfTogJHtjKG8ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIiwuLi5BcnJheS5pc0FycmF5KGUuZ3JvdXBzKSYmZS5ncm91cHMubGVuZ3RoPjE/W2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZWQgaW4gJHtjKChlLmN1cnJlbmNpZXM/P1tdKS5qb2luKCIgYW5kICIpKX0sIHNlcGFyYXRlbHkuIE5vdGhpbmcgaGVyZSBjb252ZXJ0cyBvbmUgaW50byB0aGUgb3RoZXI7IGVhY2ggaG90ZWwgaXMgYm9va2VkIGFuZCBwYWlkIGluIGl0cyBvd24uPC9kaXY+YCwuLi5lLmdyb3Vwcy5tYXAobz0+YnUobyxgVG90YWwgaW4gJHtvLmN1cnJlbmN5fWApKV06W2J1KGUsIlRvdGFsIildLC4uLkFycmF5LmlzQXJyYXkoZS5uZWVkc1Jvb20pJiZlLm5lZWRzUm9vbS5sZW5ndGg/ZS5uZWVkc1Jvb20ubWFwKG89PmA8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgICA8Yj5Hb2VzIHdpdGggYSBzdGF5PC9iPgogICAgICAgICAgICAgPHNwYW4+JHtjKChvLmV4dHJhcz8/W10pLmpvaW4oIiBhbmQgIikpfSBpcyAke2Moby5ob3RlbE5hbWUpfSdzIHNlcnZpY2UgZm9yIGl0cyBndWVzdHMsIHNvIGl0IGlzIGJvb2tlZCB3aXRoIGEgcm9vbSB0aGVyZSAtIG9yIGFkZGVkIHRvIGEgYm9va2luZyB5b3UgYWxyZWFkeSBoYXZlLjwvc3Bhbj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2Moby5ob3RlbElkKX0iPlJvb21zIGF0ICR7YyhvLmhvdGVsTmFtZSl9PC9idXR0b24+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgIDwvZGl2PmApOlsnPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1ib29rIj5SZXF1ZXN0IGJvb2tpbmc8L2J1dHRvbj48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gUmVxdWVzdGluZyBhIGJvb2tpbmcgYXNrcyAke2MobnQpfSB0byBob2xkIHRoZSByb29tcyBhbmQgZ2l2ZXMgeW91IGEgY29uZmlybWF0aW9uIGNvZGUuPC9kaXY+YCxvZigpXSxRPyIiOmA8ZGl2IGNsYXNzPSJub3RlIj5BICR7YyhudCl9IENpcmNsZSBtZW1iZXI/IDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+U2lnbiBpbiBmb3IgdGhlIG1lbWJlciByYXRlPC9idXR0b24+LjwvZGl2PiR7X28oKX1gXS5qb2luKCIiKX0seGM9W3tpZDoia2luZy1iZWQiLGxhYmVsOiJLaW5nIGJlZCJ9LHtpZDoidHdpbi1iZWRzIixsYWJlbDoiVHdpbiBiZWRzIn0se2lkOiJoaWdoLWZsb29yIixsYWJlbDoiSGlnaCBmbG9vciJ9LHtpZDoibG93LWZsb29yIixsYWJlbDoiTG93IGZsb29yIn0se2lkOiJxdWlldC1yb29tIixsYWJlbDoiUXVpZXQgcm9vbSJ9LHtpZDoiY29ubmVjdGluZy1yb29tcyIsbGFiZWw6IkNvbm5lY3Rpbmcgcm9vbXMifSx7aWQ6ImVhcmx5LWNoZWNrLWluIixsYWJlbDoiRWFybHkgY2hlY2staW4ifSx7aWQ6ImxhdGUtYXJyaXZhbCIsbGFiZWw6IkxhdGUgYXJyaXZhbCJ9LHtpZDoiYWNjZXNzaWJsZS1yb29tIixsYWJlbDoiQWNjZXNzaWJsZSByb29tIn1dLGxfPXsia2luZy1iZWQiOiJ0d2luLWJlZHMiLCJ0d2luLWJlZHMiOiJraW5nLWJlZCIsImhpZ2gtZmxvb3IiOiJsb3ctZmxvb3IiLCJsb3ctZmxvb3IiOiJoaWdoLWZsb29yIn07bGV0IFNlPW51bGw7Y29uc3Qgb2Y9KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9Imd1ZXN0IiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPkd1ZXN0IG5hbWU8aW5wdXQgaWQ9ImduYW1lIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IHNob3VsZCBhcHBlYXIgb24gdGhlIGJvb2tpbmciIHZhbHVlPSIke2MoU2U/Lm5hbWU/PyIiKX0iPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZ21haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkZvciB0aGUgY29uZmlybWF0aW9uIiB2YWx1ZT0iJHtjKFNlPy5lbWFpbD8/IiIpfSI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYXNrcyI+CiAgICAgIDxkaXYgY2xhc3M9ImFza3MtdCI+QXNrIHRoZSBkZXNrIGZvcjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaGlwcyI+JHt4Yy5tYXAodD0+YDxidXR0b24gY2xhc3M9ImNoaXAgYXNrIiB0eXBlPSJidXR0b24iIGRhdGEtYXNrPSIke2ModC5pZCl9IiBhcmlhLXByZXNzZWQ9IiR7KFNlP1NlLnJlcXVlc3RzOlE/LnByZWZlcmVuY2VzPz9bXSkuaW5jbHVkZXModC5pZCk/InRydWUiOiJmYWxzZSJ9Ij4ke2ModC5sYWJlbCl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgICAgPGxhYmVsPkFycml2aW5nIGF0PGlucHV0IGlkPSJndGltZSIgdHlwZT0idGltZSIgYXV0b2NvbXBsZXRlPSJvZmYiIHZhbHVlPSIke2MoU2U/LmFycml2aW5nQXQ/PyIiKX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkFueXRoaW5nIGVsc2U8aW5wdXQgaWQ9Imdub3RlIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkluIHlvdXIgb3duIHdvcmRzIOKAlCBvcHRpb25hbCIgdmFsdWU9IiR7YyhTZT8ubm90ZXM/PyIiKX0iPjwvbGFiZWw+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJub3RlIj5UaGVzZSBnbyB0byB0aGUgZGVzayBhcyByZXF1ZXN0cy4gJHtjKG50KX0gbWVldHMgd2hhdCBpdCBjYW4gb24gdGhlIGRheTsgbm9uZSBvZiBpdCBpcyBoZWxkLjwvZGl2PgogICAgICAke1E/YDxsYWJlbCBjbGFzcz0icmVtZW1iZXIiPjxpbnB1dCBpZD0iZ3JlbWVtYmVyIiB0eXBlPSJjaGVja2JveCIke1NlPy5yZW1lbWJlcj8iIGNoZWNrZWQiOiIifT4gUmVtZW1iZXIgdGhlIGJlZCwgZmxvb3IgYW5kIHJvb20gcmVxdWVzdHMgb24gbXkgJHtjKFEucHJvZ3JhbW1lPz8ibWVtYmVyc2hpcCIpfSBmb3IgbmV4dCB0aW1lPC9sYWJlbD5gOiIifQogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9vayI+SG9sZCB0aGVzZSByb29tczwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uPC9kaXY+CiAgPC9kaXY+YCxkXz1lPT5bYDxkaXYgY2xhc3M9ImVyciI+VGhlIGJvb2tpbmcgbmVlZHMgJHtjKChlLm1pc3Npbmc/P1tdKS5qb2luKCIgYW5kICIpfHwiYSBuYW1lIGFuZCBhbiBlbWFpbCIpfS48L2Rpdj5gLG9mKCEwKSwnPGRpdiBjbGFzcz0ibm90ZSI+Tm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uPC9kaXY+J10uam9pbigiIikscF89ZT0+e2NvbnN0IHQ9ZS5tZW1iZXI/P3t9O3JldHVybltlZSgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7Yyh0LnByb2dyYW1tZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHQubmFtZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7Yyh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHtjKE51bWJlcih0LnBvaW50cz8/MCkudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ1bnBhaWQiPjxiPiR7YyhNYXRoLnJvdW5kKCh0LnRpZXI/LmRpc2NvdW50Pz8wKSoxMDApKX0lIG9mZjwvYj48c3Bhbj5Sb29tIHJhdGVzIGFuZCB0cmlwIHRvdGFscyBub3cgc2hvdyB0aGUgJHtjKHQudGllcj8ubmFtZSl9IG1lbWJlciByYXRlLiBOb3RoaW5nIGlzIGNoYXJnZWQgYnkgc2lnbmluZyBpbi48L3NwYW4+PC9kaXY+YCwodC5wcmVmZXJlbmNlcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iYXNrZWQiPgogICAgICAgICAgIDxiPlNhdmVkIGZvciB5b3VyIG5leHQgc3RheXM8L2I+CiAgICAgICAgICAgPHNwYW4+JHtjKHQucHJlZmVyZW5jZXMubWFwKG49PnhjLmZpbmQobz0+by5pZD09PW4pPy5sYWJlbD8/bikuam9pbigiLCAiKSl9IC0gdGlja2VkIG9uIHRoZSBib29raW5nIGZvcm0sIGFuZCBhc2tlZCBmb3Igb25seSB3aGVuIHlvdSBib29rIHdpdGggdGhlbS48L3NwYW4+CiAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZvcmdldC1wcmVmcyI+Rm9yZ2V0IHRoZW08L2J1dHRvbj4KICAgICAgICAgPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1vdXQiPlNpZ24gb3V0PC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LGhfPSgpPT5bJzxkaXYgY2xhc3M9ImVyciI+Tm8gbWVtYmVyc2hpcCBtYXRjaGVzIHRoYXQgbnVtYmVyIGFuZCBzdXJuYW1lLiBDaGVjayBib3RoIGFzIHRoZXkgYXJlIHByaW50ZWQg4oCUIG5vdGhpbmcgZWxzZSBpcyBuZWVkZWQsIHRoaXMgY29ubmVjdG9yIG5ldmVyIGFza3MgZm9yIGEgcGFzc3dvcmQuPC9kaXY+JyxfbyghMCldLmpvaW4oIiIpLF9vPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJzaWduaW4iJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+TWVtYmVyc2hpcCBudW1iZXI8aW5wdXQgaWQ9Im1udW0iIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgaXMgcHJpbnRlZCI+PC9sYWJlbD4KICAgICAgPGxhYmVsPlN1cm5hbWU8aW5wdXQgaWQ9Im1zdXIiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVGhlIHN1cm5hbWUgb24gaXQiPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLWluIj5TaWduIGluPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBwYXNzd29yZCBpcyBhc2tlZCBmb3IgYW5kIG5vbmUgaXMgc3RvcmVkLiBTaWduaW5nIGluIHNob3dzIHRoZSBtZW1iZXIgcmF0ZTsgbm90aGluZyBpcyBjaGFyZ2VkLjwvZGl2PgogIDwvZGl2PmAsZl89ZT0+e2NvbnN0IHQ9ZS5yZXF1ZXN0ZWQ/P1tdO3JldHVybiB0Lmxlbmd0aD9gPGRpdiBjbGFzcz0iYXNrZWQke2UuYWNjZXNzaWJpbGl0eT8iIGZsYWciOiIifSI+CiAgICA8Yj5SZXF1ZXN0ZWQsIG5vdCBoZWxkPC9iPgogICAgJHt0Lm1hcChuPT5gPHNwYW4+JHtjKG4pfTwvc3Bhbj5gKS5qb2luKCIiKX0KICA8L2Rpdj5gOiIifSx5dT1lPT5TdHJpbmcoZS5ob2xkVW50aWw/PyIiKS5zbGljZSgwLDE2KS5yZXBsYWNlKCJUIiwiICIpLG1fPWU9Pntjb25zdCB0PUFycmF5LmlzQXJyYXkoZS5ib29raW5ncykmJmUuYm9va2luZ3MubGVuZ3RoP2UuYm9va2luZ3M6W2UuYm9va2luZz8/e31dLG49dC5sZW5ndGg+MSxvPShyLHMsaSk9PltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPkNvbmZpcm1hdGlvbiBjb2RlPC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7YyhyLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHIuaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHtjKERlKHIuc3RheSkpfSDCtyAke2Moci5ndWVzdD8ubmFtZT8/IiIpfTwvZGl2PgogICAgICAgPC9kaXY+YCxuP2A8ZGl2IGNsYXNzPSJub3RlIj5IZWxkIHVudGlsICR7Yyh5dShyKSl9IFVUQy48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJtb25leS1vdXQiPjxzcGFuPlRvdGFsIGZvciB0aGUgc3RheTwvc3Bhbj48c3Bhbj4ke2Mocyl9PC9zcGFuPjwvZGl2PmAsZl8oaSksYDxkaXYgY2xhc3M9InJvd3MiPiR7KHIucXVvdGU/LmxpbmVzPz9bXSkubWFwKHZfKS5qb2luKCIiKX08L2Rpdj5gLG4/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtjKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgJHtjKHIuaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKTtyZXR1cm5bZWUoKSxuP2A8ZGl2IGNsYXNzPSJub3RlIj4ke3QubGVuZ3RofSBib29raW5ncywgb25lIGZvciBlYWNoIHN0YXkuIEVhY2ggaG90ZWwgaG9sZHMgaXRzIG93biBuaWdodHMgdW5kZXIgaXRzIG93biBjb2RlLCBhbmQgZWFjaCBpcyBjaGFuZ2VkIG9yIGNhbmNlbGxlZCBvbiBpdHMgb3duLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+JHtuPyJUaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgdGhlIHRpbWUgdW5kZXIgZWFjaCBjb2RlLiI6YFRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCAke2MoeXUodFswXSkpfSBVVEMuYH0gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmAsLi4udC5tYXAocj0+bj9vKHIsU3RyaW5nKHIudG90YWw/PyIiKSxyKTpvKHIsU3RyaW5nKGUudG90YWw/PyIiKSxlKSksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgJHtuPyIiOmA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJvb2tpbmctZXh0cmFzPSIke2ModFswXT8uY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7Yyh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGlzIGJvb2tpbmc8L2J1dHRvbj5gfQogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxnXz1lPT5bYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUuZGV0YWlsPz9lLndoeT8/IlRoYXQgY291bGQgbm90IGJlIGRvbmUuIil9PC9kaXY+YCxVdD4wPyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCI+VmlldyB0aGUgdHJpcDwvYnV0dG9uPjwvZGl2Pic6IiJdLmpvaW4oIiIpLHZfPWU9PmAKICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKGUua2luZD09PSJyb29tIj9EZShlLnN0YXkpOmUuZGV0YWlsPz8iIil9PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2MoZS50b3RhbCl9PC9kaXY+PC9kaXY+CiAgPC9kaXY+YCxiXz17cmVxdWVzdGVkOiJ3YXJuIixjb25maXJtZWQ6Imdvb2QiLGNhbmNlbGxlZDoiYmFkIixleHBpcmVkOiJiYWQifSx5Xz1lPT57Y29uc3QgdD1lLnJlcXVlc3RzPy5raW5kcz8/W107aWYoIXQubGVuZ3RoKXJldHVybiIiO2NvbnN0IG49dC5tYXAobz0+eGMuZmluZChyPT5yLmlkPT09byk/LmxhYmVsPz9vKTtyZXR1cm5gPGRpdiBjbGFzcz0ibWV0YSBhc2tlZC1saW5lIj5Bc2tlZCBmb3IgJHtjKG4uam9pbigiLCAiKS50b0xvd2VyQ2FzZSgpKX08L2Rpdj5gfSxfXz1lPT57Y29uc3QgdD1lLmJvb2tpbmdzPz9bXTtyZXR1cm4gdC5sZW5ndGg9PT0wPyc8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZ3MgaW4gdGhpcyBjb252ZXJzYXRpb24geWV0LjwvZGl2Pic6W2VlKCksYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobj0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKG4uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke2MoRGUobi5zdGF5KSl9PC9kaXY+CiAgICAgICAgICAke3lfKG4pfQogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHtiX1tTdHJpbmcobi5zdGF0dXMpXT8/IiJ9Ij4ke2Mobi5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKG4ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke24uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG4uc3RhdHVzPT09ImNvbmZpcm1lZCI/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWw8L2J1dHRvbj5gOiIifTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKX0sX3U9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNhbmNlbGxlZCIsbj1lLmJvb2tpbmc/P3t9O3JldHVybltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNhbmNlbGxlZCI6IkNhbmNlbGxpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dD8iVGhlIGhvdGVsIGNoYXJnZXMiOiJDYW5jZWxsaW5nIHdvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2MoZS5mZWUpfTwvc3Bhbj48L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5ydWxlKX08L2Rpdj5gLHQ/IiI6ZS5jYW5jZWxsYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPktlZXAgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIGRhbmdlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2FuY2VsPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGUgYm9va2luZzwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6JzxkaXYgY2xhc3M9Im5vdGUiPlRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwgb24gdGhpcyBib29raW5nLjwvZGl2PiddLmpvaW4oIiIpfSxrdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2hhbmdlZCIsbj1lLmJvb2tpbmc/P3t9LG89KHIscyxpKT0+cz9gPGRpdiBjbGFzcz0ibGVnJHtpPyIgd2FzIjoiIn0iPgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2siPiR7YyhyKX08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWd2Ij4ke2Mocy5jaGVja0luKX0g4oaSICR7YyhzLmNoZWNrT3V0KX0gwrcgJHtjKHMubmlnaHRzKX0gJHtOdW1iZXIocy5uaWdodHMpPT09MT8ibmlnaHQiOiJuaWdodHMifTwvZGl2PgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ20iPiR7YyhzLnJvb21OYW1lKX0ke051bWJlcihzLnJvb21zKT4xP2AgwrcgJHtjKHMucm9vbXMpfSByb29tc2A6IiJ9IMK3ICR7YyhzLnRvdGFsKX08L2Rpdj4KICAgICAgICAgPC9kaXY+YDoiIjtyZXR1cm5bZWUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNoYW5nZWQiOiJDaGFuZ2luZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Mobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGUuaG90ZWxOYW1lP2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoZS5ob3RlbE5hbWUpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImxlZ3MiPiR7byh0PyJXYXMiOiJOb3ciLGUuZnJvbSwhMCl9JHtvKHQ/Ik5vdyI6IldvdWxkIGJlIixlLnRvLCExKX08L2Rpdj5gLGUuYWRkT24/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSI+PHNwYW4+JHtjKGUuYWRkT24ubmFtZSl9PC9zcGFuPjxzcGFuPiR7YyhlLmFkZE9uLmZyb20pfSDihpIgJHtjKGUuYWRkT24udG8pfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGUuZGlmZmVyZW5jZT9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2UucmVmdW5kRHVlP3Q/IlRoZSBkZXNrIG93ZXMiOiJXb3VsZCBjb21lIGJhY2siOnQ/IlRoZSBkZXNrIGFza3MgZm9yIjoiV291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7YyhlLmRpZmZlcmVuY2UpfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5ydWxlKX08L2Rpdj5gLHQ/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj48L2Rpdj4nOmUuY2hhbmdlYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkxlYXZlIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2hhbmdlPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPiR7ZS5hZGRPbiYmZS5mcm9tPy5jaGVja0luPT09ZS50bz8uY2hlY2tJbiYmZS5mcm9tPy5jaGVja091dD09PWUudG8/LmNoZWNrT3V0PyJVcGRhdGUgdGhlIGJvb2tpbmciOiJNb3ZlIHRoZSBib29raW5nIn08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKX0sV3I9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7YyhlLnRpdGxlKX08L2g0PiR7YyhlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHtjKG8udGl0bGUpfTwvaDQ+JHtjKG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHtjKHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+QmFjayB0byAke2ModC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sa189ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXI9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtyLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9Ij4KICAgICAgJHtyLnJlY29tbWVuZGVkPyc8ZGl2IGNsYXNzPSJwaWNrbWFyayI+UmVjb21tZW5kZWQ8L2Rpdj4nOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHIuaG90ZWwuaWQpfSIgc3R5bGU9IiR7V24oU3RyaW5nKHIuaG90ZWwuaWQpKX0iPgogICAgICAgICR7ci5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhyLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7YyhHbihTdHJpbmcoci5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1ib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHtjKHIuaG90ZWwubmFtZSl9PC9kaXY+CiAgICAgICAgJHtyLnByaWNlP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7YyhyLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsPiB0b3RhbCDCtyAke2Moci5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPjwvZGl2PmA6ci5mcm9tP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7YyhyLmZyb20pfTxzbWFsbD4gLyBuaWdodCBmcm9tPC9zbWFsbD48L2Rpdj5gOiIifQogICAgICAgICR7ci5iZXN0Rm9yP2A8ZGl2IGNsYXNzPSJ3aHkiPiR7YyhyLmJlc3RGb3IpfTwvZGl2PmA6IiJ9CiAgICAgICAgJHsoci5wcm9zPz9bXSkubGVuZ3RofHwoci5jb25zPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHIucHJvcz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke2Mocyl9PC9zcGFuPjwvZGl2PmApLC4uLihyLmNvbnM/P1tdKS5tYXAocz0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke2Mocyl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW2VlKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhEZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7YyhlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCIgc3R5bGU9Ii0tY29sczoke3QubGVuZ3RofSI+CiAgICAgICA8ZGl2IGNsYXNzPSJjbXAtY29ybmVyIj48L2Rpdj4KICAgICAgICR7dC5tYXAobykuam9pbigiIil9CiAgICAgICAke24ubWFwKChyLHMpPT5gPGRpdiBjbGFzcz0iayI+JHtjKHIpfTwvZGl2PiR7dC5tYXAoaT0+YDxkaXYgY2xhc3M9InYke3MlMj8iIGFsdCI6IiJ9Ij4ke2MoaS5yb3dzPy5bc10/LnZhbHVlPz8i4oCUIil9PC9kaXY+YCkuam9pbigiIil9YCkuam9pbigiIil9CiAgICAgPC9kaXY+PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChyPT5gJHtjKHIubmFtZSl9OiAke2Moci53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj5PcGVuIGEgJHtjKGUudm9jYWI/Lm5vdW4/PyJob3RlbCIpfSB0byBzZWUgaXRzIHJvb21zJHtlLnN0YXk/LmNoZWNrSW4/IiBmb3IgdGhlc2UgbmlnaHRzIjoiIn0uPC9kaXY+YF0uam9pbigiIil9LHdfPWU9Pntjb25zdCB0PWUuZGF5cz8/W107cmV0dXJuW2VlKCksYDxkaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj4KICAgICAgICR7ZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoRGUoZS5zdGF5KSl9PC9kaXY+YDoiIn0KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJnYXAiPjxiPiR7YyhOdW1iZXIoZS5pblRyaXA/PzApK051bWJlcihlLmJvb2tlZD8/MCkpfS8ke2MoZS5wbGFubmVkKX08L2I+PHNwYW4+JHtjKGUuZ2FwPz8iIil9PC9zcGFuPjwvZGl2PmAsYDxkaXYgY2xhc3M9ImRheXMiPiR7dC5tYXAoKG4sbyk9PmAKICAgICAgPGRpdiBjbGFzcz0iZGF5cm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXludW0iPjxiPiR7bysxfTwvYj48aT48L2k+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5Ym9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXlsYWJlbCI+JHtjKG4ubGFiZWwpfSR7bi5kYXRlP2A8c21hbGw+IMK3ICR7YyhTdHJpbmcobi5kYXRlKS5zbGljZSg1KSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICAgICAgJHtuLm5vdGU/YDxkaXYgY2xhc3M9ImRheW5vdGUiPiR7YyhuLm5vdGUpfTwvZGl2PmA6IiJ9CiAgICAgICAgICAkeyhuLml0ZW1zPz9bXSkubWFwKHI9PmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhbi1pdGVtIiR7ci5raW5kPT09ImhvdGVsIj9gIGRhdGEtaG90ZWw9IiR7YyhyLmlkKX0iIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiJHtyLmNoZWNrSW4/YCBkYXRhLWNpPSIke2Moci5jaGVja0luKX0iIGRhdGEtY289IiR7YyhyLmNoZWNrT3V0KX0iYDoiIn1gOiIifT4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2MoW3IuZGV0YWlsLHIubmlnaHRzP051bWJlcihyLm5pZ2h0Pz8xKT4xP2BuaWdodCAke3IubmlnaHR9IG9mICR7ci5uaWdodHN9YDpgJHtyLm5pZ2h0c30gJHtyLm5pZ2h0cz09PTE/Im5pZ2h0IjoibmlnaHRzIn0gaGVyZWA6IiIsci5wcmljZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imluc3RhdGUgJHtyLmJvb2tlZHx8ci5pblRyaXA/InllcyI6Im5vIn0iPiR7ci5ib29rZWQ/YEJvb2tlZCDCtyAke2Moci5ib29rZWQpfWA6ci5pblRyaXA/IkluIHRoZSB0cmlwIjoiUGxhbiBvbmx5In08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG49PmAke2Mobi5uYW1lKX06ICR7YyhuLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSx0dD1lPT57aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm47ZS50b29sTmFtZXMmJihRaD1lLnRvb2xOYW1lcyksZS5icmFuZCYmKG50PVN0cmluZyhlLmJyYW5kKSksZS5sb2dvVXJsJiYoS3I9U3RyaW5nKGUubG9nb1VybCkpLHR5cGVvZiBlLmRlbW89PSJib29sZWFuIiYmKFloPWUuZGVtbyksZS5kZW1vTm90ZSYmKFhoPVN0cmluZyhlLmRlbW9Ob3RlKSksdHlwZW9mIGUucm9vbXNfd2FudGVkPT0ibnVtYmVyIiYmKHdlPWUucm9vbXNfd2FudGVkKSxlLnZpZXc9PT0ibWVtYmVyIiYmZS5tZW1iZXI/LnRpZXI/Lm5hbWU/UT1lLm1lbWJlcjplLm1lbWJlcj8udGllcj8ubmFtZSYmKFE9UT8ucHJvZ3JhbW1lPT09ZS5tZW1iZXIucHJvZ3JhbW1lJiZRPy50aWVyPy5uYW1lPT09ZS5tZW1iZXIudGllci5uYW1lP3suLi5RLC4uLmUubWVtYmVyfTplLm1lbWJlciksKGUudmlldz09PSJzaWduZWQtb3V0Inx8ZS5zaWduZWRJbj09PSExKSYmKFE9bnVsbCksZS5zdGF5Py5jaGVja0luJiYhanQmJihOPXtjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn0pLCFJYyYmKGUudmlldz09PSJ0cmlwInx8ZS52aWV3PT09Im5lZWRzLWRhdGVzIikmJihkdD1lLmxpbmVzPz9bXSksKGUudmlldz09PSJib29raW5nInx8ZS52aWV3PT09ImVtcHR5LXRyaXAiKSYmKGR0PVtdLFV0PTApLEhlPVN0cmluZyhlLnZpZXc/PyIiKSxWeSgpO2NvbnN0IHQ9bGUoImJyYW5kIik7S3I/KHQuc3JjPUtyLHQuaGlkZGVuPSExLGxlKCJ0aXRsZSIpLmhpZGRlbj0hMCk6KHQuaGlkZGVuPSEwLGxlKCJ0aXRsZSIpLmhpZGRlbj0hMSxsZSgidGl0bGUiKS50ZXh0Q29udGVudD1udHx8IkhvdGVscyIpLGxlKCJzdWIiKS50ZXh0Q29udGVudD16XyhlKSxJXygpLFRfKCk7Y29uc3Qgbj17aG90ZWxzOm9fLGRlc3RpbmF0aW9uczp0Xywibm8taG90ZWxzIjpyXyxob3RlbDp2dSwibm8tcm9vbXMiOnZ1LCJob3RlbC1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoYXQgaG90ZWwgaXMgbm90IGluIHRoaXMgY29ubmVjdG9yLjwvZGl2PicsZXh0cmFzOmFfLHRyaXA6dV8sIm5lZWRzLWRhdGVzIjpTXyxib29raW5nOm1fLCJuZWVkcy1ndWVzdCI6ZF8sbWVtYmVyOnBfLCJtZW1iZXItbm90LWZvdW5kIjpoXywic2lnbmVkLW91dCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+U2lnbmVkIG91dC4gUmF0ZXMgYXJlIHRoZSBwdWJsaWMgb25lcyBhZ2Fpbi48L2Rpdj48ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+PC9kaXY+JywiZW1wdHktdHJpcCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhlcmUgaXMgbm90aGluZyBpbiB0aGUgdHJpcCB5ZXQuPC9kaXY+Jyxib29raW5nczpfXywiY2FuY2VsbGF0aW9uLXByZXZpZXciOl91LGNhbmNlbGxlZDpfdSwiY2hhbmdlLXByZXZpZXciOmt1LGNoYW5nZWQ6a3UsImJvb2tpbmctbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5nIGhlcmUgbWF0Y2hlcyB0aGF0IGNvZGUuPC9kaXY+Jyxjb21wYXJpc29uOmtfLCJub3RoaW5nLXRvLWNvbXBhcmUiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vbmUgb2YgdGhvc2UgYXJlIGhvdGVscyB0aGlzIGNvbm5lY3RvciBrbm93cy48L2Rpdj4nLGl0aW5lcmFyeTp3XywiZW1wdHktaXRpbmVyYXJ5IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5BbiBpdGluZXJhcnkgbmVlZHMgYXQgbGVhc3Qgb25lIGRheS48L2Rpdj4nLHBvbGljeTpXcixwb2xpY2llczpXciwicG9saWN5LW1pc3NpbmciOldyLGVycm9yOmdfLCJuby1tZW1iZXIiOigpPT5gPGRpdiBjbGFzcz0iZW1wdHkiPk5vYm9keSBpcyBzaWduZWQgaW4sIHNvIHRoZXJlIGlzIG5vdGhpbmcgc2F2ZWQgdG8gZm9yZ2V0LjwvZGl2PiR7X28oITApfWAsIm1lbWJlci1zaWduLWluIjooKT0+W2VlKCksJzxkaXYgY2xhc3M9Im5vdGUiPlNpZ24gaW4gd2l0aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIHByaW50ZWQgb24gdGhlIGNhcmQgdG8gc2VlIHRoZSBtZW1iZXIgcmF0ZSBvbiBldmVyeSBwcmljZSBoZXJlLjwvZGl2PicsX28oITApXS5qb2luKCIiKX07KEhlPT09ImhvdGVsInx8SGU9PT0ibm8tcm9vbXMifHxIZT09PSJuZWVkcy1kYXRlcyIpJiZlLmhvdGVsPy5pZD8oTnQ9U3RyaW5nKGUuaG90ZWwuaWQpLGUubmVlZHNEYXRlcyYmc2V0VGltZW91dCgoKT0+VXIoKSwwKSk6KE50PSIiLENjKCkpLFk9ZTtjb25zdCBvPW5bSGVdO2xlKCJjb250ZW50IikuaW5uZXJIVE1MPShvP28oZSk6YDxkaXYgY2xhc3M9ImVyciI+JHtjKGUuZXJyb3I/PyJTb21ldGhpbmcgY2FtZSBiYWNrIHRoYXQgdGhpcyBjYXJkIGRvZXMgbm90IGtub3cgaG93IHRvIGRyYXcuIil9JHtlLmRldGFpbD9gPGJyPiR7YyhlLmRldGFpbCl9YDoiIn08L2Rpdj5gKSskXyhlKX0sJF89ZT0+e2NvbnN0IHQ9ISFPZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/Lm1lc3NhZ2Usbj0oZS5zdWdnZXN0aW9ucz8/W10pLm1hcCgobyxyKT0+bz8uYXNrP2A8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtc3VnZ2VzdD0iJHtyfSI+JHtjKG8ubGFiZWwpfTwvYnV0dG9uPmA6bz8uc2F5JiZ0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHNheSIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7YyhvLmxhYmVsKX0gPHNtYWxsPsK3IGluIHRoZSBjaGF0PC9zbWFsbD48L2J1dHRvbj5gOiIiKS5qb2luKCIiKTtyZXR1cm4gbj9gPGRpdiBjbGFzcz0ic3VnZ2VzdCI+JHtufTwvZGl2PmA6IiJ9LFNfPWU9PltlZSgpLGUuaG90ZWw/bmYoZS5ob3RlbCk6IiIsYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUud2h5Pz8iV2hpY2ggbmlnaHRzPyBBIHJvb20gbmVlZHMgYSBjaGVjay1pbiBhbmQgYSBjaGVjay1vdXQgZGF0ZS4iKX08L2Rpdj5gLHRmKFN0cmluZyhlLmhvdGVsPy5pZD8/IiIpLGUuaG90ZWw/LnRvZGF5VGhlcmUpXS5qb2luKCIiKSx6Xz1lPT5lLnZpZXc9PT0iaG90ZWxzIj9gJHtlLnRvdGFsPz8wfSAke051bWJlcihlLnRvdGFsKT09PTE/ImhvdGVsIjoiaG90ZWxzIn1gOmUudmlldz09PSJob3RlbCJ8fGUudmlldz09PSJuby1yb29tcyI/RGUoZS5zdGF5KTplLnZpZXc9PT0idHJpcCI/KGUubGluZXM/P1tdKS5sZW5ndGg/U3RyaW5nKGUudG90YWw/PyIiKToiIjplLnZpZXc9PT0iY29tcGFyaXNvbiI/YCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDplLnZpZXc9PT0iaXRpbmVyYXJ5Ij9OdW1iZXIoZS5ib29rZWQpPjA/YCR7ZS5ib29rZWR9LyR7ZS5wbGFubmVkfSBib29rZWRgOmAke2UuaW5UcmlwfS8ke2UucGxhbm5lZH0gaW4gdGhlIHRyaXBgOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIixUXz0oKT0+e2NvbnN0IGU9bGUoIm1lbWJlcmNoaXAiKTtRPyhlLmhpZGRlbj0hMSxlLnRleHRDb250ZW50PWAke1EudGllcj8ubmFtZT8/Ik1lbWJlciJ9IMK3ICR7TWF0aC5yb3VuZCgoUS50aWVyPy5kaXNjb3VudD8/MCkqMTAwKX0lIG9mZmAsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwibWVtYmVyIiksZS5zZXRBdHRyaWJ1dGUoInRpdGxlIixgJHtRLm5hbWV9IMK3ICR7US5wcm9ncmFtbWV9YCkpOihlLmhpZGRlbj1IZT09PSJtZW1iZXItbm90LWZvdW5kIixlLnRleHRDb250ZW50PSJNZW1iZXIgc2lnbiBpbiIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwiYXNrLXNpZ24taW4iKSxlLnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKSl9LElfPSgpPT57Y29uc3QgZT1sZSgiaGVhZHRyaXAiKSx0PUljP1V0OlV0fHxkdC5sZW5ndGg7ZS5oaWRkZW49dD09PTB8fEhlPT09InRyaXAiLGxlKCJoZWFkdHJpcG4iKS50ZXh0Q29udGVudD1TdHJpbmcodCl9LFBfPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1Iik7Tj17Y2hlY2tJbjplPy52YWx1ZT8/Ti5jaGVja0luLGNoZWNrT3V0OnQ/LnZhbHVlPz9OLmNoZWNrT3V0LGd1ZXN0czpOdW1iZXIobj8udmFsdWU/P04uZ3Vlc3RzKXx8Mn19LGlvPShlPXt9KT0+Ti5jaGVja0luJiZOLmNoZWNrT3V0P3tjaGVja0luOk4uY2hlY2tJbixjaGVja091dDpOLmNoZWNrT3V0LGd1ZXN0czpOLmd1ZXN0cywuLi5lfTplO2xldCBocyxqdD0hMTtjb25zdCBDYz0oKT0+e2NsZWFyVGltZW91dChocyksanQ9ITF9LFVyPShlPTApPT57TnQmJihjbGVhclRpbWVvdXQoaHMpLGp0PSEwLGhzPXNldFRpbWVvdXQoKCk9PntpZighTnQpe2p0PSExO3JldHVybn1pZihMcil7VXIoMTUwKTtyZXR1cm59anQ9ITEsVigiZ2V0SG90ZWwiLHtob3RlbDpOdCxyb29tczp3ZSwuLi5pbygpfSkuY2F0Y2goKCk9PkYoIkNvdWxkIG5vdCBsb2FkIHRob3NlIG5pZ2h0cy4iKSl9LGUpKX0sRj1lPT57bGUoImNvbnRlbnQiKS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLGA8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlKX08L2Rpdj5gKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGU9Pntjb25zdCB0PWUudGFyZ2V0Py5jbG9zZXN0KCJbZGF0YS1ob3RlbF0sW2RhdGEtYWN0XSxbZGF0YS1wb2xpY3ldLFtkYXRhLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jYW5jZWxdLFtkYXRhLWNvbmZpcm0tY2hhbmdlXSxbZGF0YS1leHRyYXNdLFtkYXRhLXJvb21zLW5dLFtkYXRhLWFza10sW2RhdGEtYm9va2luZy1leHRyYXNdLFtkYXRhLWJvb2tpbmctZXh0cmFdLFtkYXRhLXN1Z2dlc3RdLFtkYXRhLXBsYWNlXSxbZGF0YS1wbGFjZS1hbGxdLFtkYXRhLXNvcnRdIik7aWYoIXQpcmV0dXJuO2NvbnN0IG49dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXNrIik7aWYobiE9PW51bGwpe2NvbnN0ICQ9dC5nZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIpIT09InRydWUiO3Quc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLFN0cmluZygkKSk7Y29uc3Qgej1sX1tuXTskJiZ6JiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuYXNrW2RhdGEtYXNrPSIke3p9Il1gKT8uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpO3JldHVybn1jb25zdCBvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXJvb21zLW4iKTtpZihvIT09bnVsbCl7UF8oKSx3ZT1NYXRoLm1pbihMeSxNYXRoLm1heCgxLHdlK051bWJlcihvKSkpO2NvbnN0ICQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJuIik7JCYmKCQudGV4dENvbnRlbnQ9U3RyaW5nKHdlKSk7Y29uc3Qgej1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmlnaHRzIik7eiYmKHoudGV4dENvbnRlbnQ9UGMoKSksVXIoNDUwKTtyZXR1cm59Y29uc3Qgcj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtcm9vbSIpO2lmKHIhPT1udWxsKXtjb25zdCAkPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLHo9TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSksTT10Lmhhc0F0dHJpYnV0ZSgiZGF0YS1jaSIpP3tjaGVja0luOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNpIik/PyIiLGNoZWNrT3V0OnQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik/PyIiLGd1ZXN0czpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtZ3UiKT8/Mil9OmlvKCk7VigiYWRkVG9UcmlwIix7aG90ZWw6JCxyb29tOnIscm9vbXM6eiwuLi5NfSkuY2F0Y2goKCk9PkYoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBzPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1leHRyYSIpO2lmKHMhPT1udWxsKXtWKCJhZGRUb1RyaXAiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIixleHRyYTpzLHF1YW50aXR5Ok51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1uIik/PzEpfSkuY2F0Y2goKCk9PkYoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBsYWNlIik7aWYoaSE9PW51bGwpe2NvbnN0ICQ9WT8uYXNrPy5zb3J0LHo9WT8udmlldz09PSJob3RlbHMiP1k/LmFzaz8ucXVlcnk6dm9pZCAwO1YoImxpc3RIb3RlbHMiLHsuLi5pP3tjaXR5Oml9Ont9LC4uLiQ/e3NvcnQ6JH06e30sLi4uaSYmej97cXVlcnk6en06e319KS5jYXRjaCgoKT0+RigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgYT10LmdldEF0dHJpYnV0ZSgiZGF0YS1zb3J0Iik7aWYoYSE9PW51bGwpe2NvbnN0e3NvcnQ6JCwuLi56fT1ZPy5hc2s/P3t9O1YoImxpc3RIb3RlbHMiLHsuLi56LC4uLmEhPT0iZ3JvdXAiP3tzb3J0OmF9Ont9fSkuY2F0Y2goKCk9PkYoIkNvdWxkIG5vdCByZW9yZGVyIHRoZSBsaXN0LiIpKTtyZXR1cm59Y29uc3QgbD10LmdldEF0dHJpYnV0ZSgiZGF0YS1wbGFjZS1hbGwiKTtpZihsIT09bnVsbCl7VigibGlzdEhvdGVscyIse2NpdHk6bCxhbGw6ITB9KS5jYXRjaCgoKT0+RigiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgdT10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhcyIpO2lmKHUhPT1udWxsKXtWKCJsaXN0RXh0cmFzIix7Ym9va2luZzp1fSkuY2F0Y2goKCk9PkYoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgZD10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhIik7aWYoZCE9PW51bGwpe1YoInByZXZpZXdDaGFuZ2UiLHtib29raW5nOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmciKT8/IiIsZXh0cmE6ZCxxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5GKCJDb3VsZCBub3Qgd29yayBvdXQgdGhhdCBjaGFuZ2UuIikpO3JldHVybn1jb25zdCBtPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKG0hPT1udWxsKXtWKCJsaXN0RXh0cmFzIix7aG90ZWw6bSwuLi5pbygpfSkuY2F0Y2goKCk9PkYoIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3Qgdj10LmdldEF0dHJpYnV0ZSgiZGF0YS1wb2xpY3kiKTtpZih2IT09bnVsbCl7VigicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzp2fSkuY2F0Y2goKCk9PkYoIkNvdWxkIG5vdCBsb2FkIHRoYXQgcG9saWN5LiIpKTtyZXR1cm59Y29uc3QgYj10LmdldEF0dHJpYnV0ZSgiZGF0YS1jYW5jZWwiKTtpZihiIT09bnVsbCl7VigicHJldmlld0NhbmNlbGxhdGlvbiIse2Jvb2tpbmc6Yn0pLmNhdGNoKCgpPT5GKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0IF89dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZihfIT09bnVsbCl7VigiY2FuY2VsQm9va2luZyIse2Jvb2tpbmc6Xyxjb25maXJtZWQ6ITB9KS5jYXRjaCgoKT0+RigiQ291bGQgbm90IGNhbmNlbCB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBrPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2hhbmdlIik7aWYoayE9PW51bGwpe2NvbnN0ICQ9WT8udG8/P3t9LHo9WT8uZnJvbT8/e30sTT1ZPy5hZGRPbixxPSQuY2hlY2tJbiYmKCQuY2hlY2tJbiE9PXouY2hlY2tJbnx8JC5jaGVja091dCE9PXouY2hlY2tPdXQpO1YoImNoYW5nZUJvb2tpbmciLHtib29raW5nOmssY29uZmlybWVkOiEwLC4uLnE/e2NoZWNrSW46JC5jaGVja0luLGNoZWNrT3V0OiQuY2hlY2tPdXR9Ont9LC4uLk0/LmlkP3tleHRyYTpNLmlkLHF1YW50aXR5Ok51bWJlcihNLnRvKX06e30sLi4uJC5yb29tcyE9PXZvaWQgMCYmTnVtYmVyKCQucm9vbXMpIT09TnVtYmVyKHoucm9vbXMpP3tyb29tczpOdW1iZXIoJC5yb29tcyl9Ont9LC4uLiQucm9vbU5hbWUmJiQucm9vbU5hbWUhPT16LnJvb21OYW1lP3tyb29tOiQucm9vbU5hbWV9Ont9fSkuY2F0Y2goKCk9PkYoIkNvdWxkIG5vdCBjaGFuZ2UgdGhhdCBib29raW5nLiIpKTtyZXR1cm59Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiZGF0YS1hY3QiKTtpZih3PT09ImJhY2siKXtjb25zdCAkPXplLmF0KC0xKTtpZighJHx8THIpcmV0dXJuO3plPXplLnNsaWNlKDAsLTEpLGJvKz0xLENjKCk7Y29uc3Qgej0kLnZlcnNpb249PT12bz92b2lkIDA6SHkoJC5wYXlsb2FkKTt6PyhZPSQucGF5bG9hZCxWKHoua2V5LHouYXJncyx7cHVzaDohMX0pLmNhdGNoKCgpPT50dCgkLnBheWxvYWQpKSk6dHQoJC5wYXlsb2FkKTtyZXR1cm59aWYodz09PSJtb3JlLXBsYWNlcyIpe2Zvcihjb25zdCAkIG9mKHQuY2xvc2VzdCgiLnBsYWNlcyIpPz9kb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbCgiLmNoaXAucGxhY2VbaGlkZGVuXSIpKSQuaGlkZGVuPSExO3QucmVtb3ZlKCk7cmV0dXJufWlmKHc9PT0iYWxsLWhvdGVscyIpe1YoImxpc3RIb3RlbHMiLHthbGw6ITB9KS5jYXRjaCgoKT0+RigiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk7cmV0dXJufWlmKHc9PT0iZmluZCIpe3JmKCk7cmV0dXJufWlmKHc9PT0ibW9yZS1ob3RlbHMiKXtjb25zdCAkPVk7aWYoISR8fCQudmlldyE9PSJob3RlbHMiKXJldHVybjtWKCJsaXN0SG90ZWxzIix7Li4uJC5hc2s/P3t9LG9mZnNldDooJC5ob3RlbHM/P1tdKS5sZW5ndGgsbGltaXQ6MjB9LHtmb2xkOno9Pno/LnZpZXc9PT0iaG90ZWxzIj97Li4ueixob3RlbHM6Wy4uLiQuaG90ZWxzPz9bXSwuLi56LmhvdGVscz8/W11dLHNob3duOigkLmhvdGVscz8/W10pLmxlbmd0aCsoei5ob3RlbHM/P1tdKS5sZW5ndGgsb2Zmc2V0OjAscGxhY2VzOiQucGxhY2VzfTp6fSkuY2F0Y2goKCk9PkYoIkNvdWxkIG5vdCBsb2FkIG1vcmUgaG90ZWxzLiIpKTtyZXR1cm59aWYodz09PSJob21lIil7VigibGlzdEhvdGVscyIse30pLmNhdGNoKCgpPT5GKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYodz09PSJtZW1iZXIiKXtpZighUSlyZXR1cm47Y29uc3QgJD17dmlldzoibWVtYmVyIixtZW1iZXI6UX07Y3MoJCksdHQoJCk7cmV0dXJufWlmKHc9PT0iYXNrLXNpZ24taW4iKXtjb25zdCAkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaWduaW4iKTtpZigkKSQuaGlkZGVuPSExO2Vsc2V7Y29uc3Qgej17dmlldzoibWVtYmVyLXNpZ24taW4ifTtjcyh6KSx0dCh6KX1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy5mb2N1cygpO3JldHVybn1pZih3PT09InNpZ24taW4iKXtjb25zdCAkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LnZhbHVlLnRyaW0oKT8/IiIsej1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXN1ciIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCEkfHwheil7RigiQm90aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIG9uIGl0LCBwbGVhc2UuIik7cmV0dXJufVYoInNpZ25JbiIse251bWJlcjokLHN1cm5hbWU6en0pLmNhdGNoKCgpPT5GKCJDb3VsZCBub3Qgc2lnbiBpbi4iKSk7cmV0dXJufWlmKHc9PT0iZm9yZ2V0LXByZWZzIil7VigiZm9yZ2V0UHJlZmVyZW5jZXMiLHt9KS5jYXRjaCgoKT0+RigiQ291bGQgbm90IGZvcmdldCB0aGVtLiIpKTtyZXR1cm59Y29uc3QgUj10LmdldEF0dHJpYnV0ZSgiZGF0YS1zdWdnZXN0Iik7aWYoUiE9PW51bGwpe2NvbnN0ICQ9KFk/LnN1Z2dlc3Rpb25zPz9bXSlbTnVtYmVyKFIpXTskPy5hc2s/LnRvb2w/VihTdHJpbmcoJC5hc2sudG9vbCksJC5hc2suYXJncz8/e30pLmNhdGNoKCgpPT5GKCJDb3VsZCBub3QgZG8gdGhhdCBqdXN0IG5vdy4iKSk6JD8uc2F5JiZPZS5zZW5kTWVzc2FnZSh7cm9sZToidXNlciIsY29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKCQuc2F5KX1dfSkuY2F0Y2goKCk9PkYoIkNvdWxkIG5vdCBzZW5kIHRoYXQgdG8gdGhlIGNoYXQuIikpO3JldHVybn1pZih3PT09InNpZ24tb3V0Iil7UT1udWxsLFYoInNpZ25PdXQiLHt9KS5jYXRjaCgoKT0+RigiQ291bGQgbm90IHNpZ24gb3V0LiIpKTtyZXR1cm59aWYodz09PSJhc2stYm9vayIpe2NvbnN0ICQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1ZXN0Iik7JCYmKCQuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8uZm9jdXMoKTtyZXR1cm59aWYodz09PSJib29rIil7Y29uc3QgJD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLE09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdub3RlIik/LnZhbHVlLnRyaW0oKT8/IiIscT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3RpbWUiKT8udmFsdWUudHJpbSgpPz8iIixhZT1bLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFza1thcmlhLXByZXNzZWQ9InRydWUiXScpXS5tYXAoUW49PlFuLmRhdGFzZXQuYXNrPz8iIiksWWU9ISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JlbWVtYmVyIik/LmNoZWNrZWQ7aWYoU2U9e25hbWU6JCxlbWFpbDp6LG5vdGVzOk0sYXJyaXZpbmdBdDpxLHJlcXVlc3RzOmFlLHJlbWVtYmVyOlllfSwhJHx8IXouaW5jbHVkZXMoIkAiKSl7RigkPydUaGF0IGVtYWlsIGhhcyBubyAiQCIgaW4gaXQgLSB0aGUgY29uZmlybWF0aW9uIG5lZWRzIGFuIGFkZHJlc3MgaXQgY2FuIHJlYWNoLic6IlRoZSBib29raW5nIG5lZWRzIGEgbmFtZSBhbmQgYW4gZW1haWwgdG8gc2VuZCB0aGUgY29uZmlybWF0aW9uIHRvLiIpO3JldHVybn1WKCJyZXF1ZXN0Qm9va2luZyIse25hbWU6JCxlbWFpbDp6LC4uLk0/e25vdGVzOk19Ont9LC4uLnE/e2Fycml2aW5nQXQ6cX06e30sLi4uYWUubGVuZ3RoP3tyZXF1ZXN0czphZX06e30sLi4uWWU/e3JlbWVtYmVyUmVxdWVzdHM6ITB9Ont9fSkuY2F0Y2goKCk9PkYoIkNvdWxkIG5vdCBhc2sgZm9yIHRob3NlIHJvb21zLiIpKTtyZXR1cm59aWYodz09PSJib29raW5ncyIpe1YoImxpc3RCb29raW5ncyIse30pLmNhdGNoKCgpPT5GKCJDb3VsZCBub3QgbG9hZCB5b3VyIGJvb2tpbmdzLiIpKTtyZXR1cm59aWYodz09PSJ0cmlwIil7Vigidmlld1RyaXAiLHt9KS5jYXRjaCgoKT0+RigiQ291bGQgbm90IGxvYWQgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBPPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik7aWYoTyl7Y29uc3QgJD10LmdldEF0dHJpYnV0ZSgiZGF0YS1jaSIpLHo9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKTskJiZ6JiYoTi5jaGVja0luPSQsTi5jaGVja091dD16KSxWKCJnZXRIb3RlbCIse2hvdGVsOk8sLi4uaW8oKX0pLmNhdGNoKCgpPT5GKCJDb3VsZCBub3QgbG9hZCB0aGF0IGhvdGVsLiIpKX19KTtjb25zdCByZj0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndoZXJlIik/LnZhbHVlLnRyaW0oKT8/IiI7ZSYmVigibGlzdEhvdGVscyIse3F1ZXJ5OmV9KS5jYXRjaCgoKT0+RigiQ291bGQgbm90IHNlYXJjaCBqdXN0IG5vdy4iKSl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGU9PntpZihlLnRhcmdldD8uaWQ9PT0id2hlcmUiJiZlLmtleT09PSJFbnRlciIpe2UucHJldmVudERlZmF1bHQoKSxyZigpO3JldHVybn1jb25zdCB0PWUudGFyZ2V0OyF0fHx0LmdldEF0dHJpYnV0ZSgicm9sZSIpIT09ImJ1dHRvbiJ8fGUua2V5IT09IkVudGVyIiYmZS5rZXkhPT0iICJ8fChlLnByZXZlbnREZWZhdWx0KCksdC5jbGljaygpKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ7aWYodD8uaWQhPT0iY2kiJiZ0Py5pZCE9PSJjbyIpcmV0dXJuO2NvbnN0IG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIiksbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKTtpZighbnx8IW8pcmV0dXJuO2lmKHQuaWQ9PT0iY2kiJiZuLnZhbHVlKXtjb25zdCBzPXBzKG4udmFsdWUsMSk7by5taW49cywoIW8udmFsdWV8fG8udmFsdWU8PW4udmFsdWUpJiYoby52YWx1ZT1zKX1OLmNoZWNrSW49bi52YWx1ZXx8Ti5jaGVja0luLE4uY2hlY2tPdXQ9by52YWx1ZXx8Ti5jaGVja091dDtjb25zdCByPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTtyJiYoci50ZXh0Q29udGVudD1QYygpKSxVcigpfSk7Y29uc3Qgc2Y9KGUsdCk9Pnt0cnl7ZWYodCk7Y29uc3Qgbj1lP0pTT04uc3RyaW5naWZ5KGUpOiIiO2lmKG4mJm49PT1scyYmSlNPTi5zdHJpbmdpZnkoWSk9PT1scylyZXR1cm47emU9W10sYm8rPTEsQ2MoKSx0dChlKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKCJbY2FyZF0gcmVuZGVyIGZhaWxlZCIsbiksbGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGlzIGNhcmQgY291bGQgbm90IGJlIGRyYXduLiBBc2sgYWdhaW4gaW4gdGhlIGNoYXQuPC9kaXY+J319O09lLm9udG9vbHJlc3VsdD1lPT5zZihlPy5zdHJ1Y3R1cmVkQ29udGVudCxlPy5fbWV0YSk7T2Uub25ob3N0Y29udGV4dGNoYW5nZWQ9ZT0+V2goZSxHaCk7T2UuY29ubmVjdCgpLnRoZW4oKCk9Pntjb25zdCBlPU9lLmdldEhvc3RDb250ZXh0KCk7V2goZSxHaCk7Y29uc3QgdD1lPy50b29sSW5mbz8ucmVzdWx0Py5zdHJ1Y3R1cmVkQ29udGVudDt0JiZzZih0LGU/LnRvb2xJbmZvPy5yZXN1bHQ/Ll9tZXRhKX0pLmNhdGNoKCgpPT57bGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5Db3VsZCBub3QgY29ubmVjdCB0byB0aGUgaG9zdC48L2Rpdj4nfSk7PC9zY3JpcHQ+CiAgICA8c3R5bGUgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbj46cm9vdHstLWtpdC1iZzogI2ZmZmZmZjstLWtpdC1iZy1zb2Z0OiAjZjZmN2Y5Oy0ta2l0LWZnOiAjMWExZjJiOy0ta2l0LWZnLXNvZnQ6ICM2MjZiN2E7LS1raXQtZmctZmFpbnQ6ICM4YTkzYTE7LS1raXQtbGluZTogI2UzZTdlZDstLWtpdC1hY2NlbnQ6ICMxYTFmMmI7LS1raXQtYWNjZW50LWZnOiAjZmZmZmZmOy0ta2l0LWxpbms6ICMyNTYzZWI7LS1raXQtZ29vZDogIzFhN2Y1YTstLWtpdC1nb29kLWJnOiAjZGRmM2U0Oy0ta2l0LWJhZDogI2IzMjYxZTstLWtpdC1iYWQtYmc6ICNmYmU2ZTQ7LS1raXQtd2FybjogIzhhNWEwMDstLWtpdC13YXJuLWJnOiAjZmRmMGQ1Oy0ta2l0LXJpbmc6ICMyNTYzZWJ9W2RhdGEtdGhlbWU9ZGFya117LS1raXQtYmc6ICMxZDFmMjM7LS1raXQtYmctc29mdDogIzI2MjkyZTstLWtpdC1mZzogI2VjZWVmMTstLWtpdC1mZy1zb2Z0OiAjYTRhYmI2Oy0ta2l0LWZnLWZhaW50OiAjN2M4NDkxOy0ta2l0LWxpbmU6ICMzNjNhNDE7LS1raXQtYWNjZW50OiAjZWNlZWYxOy0ta2l0LWFjY2VudC1mZzogIzFkMWYyMzstLWtpdC1saW5rOiAjN2FhN2ZmOy0ta2l0LWdvb2Q6ICM2ZmQzYTI7LS1raXQtZ29vZC1iZzogIzFmM2EyZDstLWtpdC1iYWQ6ICNmZjhhODA7LS1raXQtYmFkLWJnOiAjM2QyMzIyOy0ta2l0LXdhcm46ICNmMmM0NmI7LS1raXQtd2Fybi1iZzogIzNhMzAyMDstLWtpdC1yaW5nOiAjN2FhN2ZmfTpyb290ey0tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtcHJpbWFyeSwgdmFyKC0ta2l0LWJnKSk7LS1iZy1zb2Z0OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSwgdmFyKC0ta2l0LWJnLXNvZnQpKTstLWZnOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnksIHZhcigtLWtpdC1mZykpOy0tZmctc29mdDogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnksIHZhcigtLWtpdC1mZy1zb2Z0KSk7LS1mZy1mYWludDogdmFyKC0tY29sb3ItdGV4dC10ZXJ0aWFyeSwgdmFyKC0ta2l0LWZnLWZhaW50KSk7LS1saW5lOiB2YXIoLS1jb2xvci1ib3JkZXItcHJpbWFyeSwgdmFyKC0ta2l0LWxpbmUpKTstLWFjY2VudDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50KSk7LS1hY2NlbnQtZmc6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudC1mZykpOy0tbGluazogdmFyKC0tY29sb3ItdGV4dC1pbmZvLCB2YXIoLS1raXQtbGluaykpOy0tZ29vZDogdmFyKC0tY29sb3ItdGV4dC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZCkpOy0tZ29vZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZC1iZykpOy0tYmFkOiB2YXIoLS1jb2xvci10ZXh0LWRhbmdlciwgdmFyKC0ta2l0LWJhZCkpOy0tYmFkLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWRhbmdlciwgdmFyKC0ta2l0LWJhZC1iZykpOy0td2FybjogdmFyKC0tY29sb3ItdGV4dC13YXJuaW5nLCB2YXIoLS1raXQtd2FybikpOy0td2Fybi1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nLCB2YXIoLS1raXQtd2Fybi1iZykpOy0tcmluZzogdmFyKC0tY29sb3ItcmluZy1wcmltYXJ5LCB2YXIoLS1raXQtcmluZykpOy0tcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnLCAxNHB4KTstLXJhZGl1cy1zbTogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbSwgOXB4KTstLWZvbnQ6IHZhcigtLWZvbnQtc2Fucywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sIHNhbnMtc2VyaWYpOy0tbW9ubzogdmFyKC0tZm9udC1tb25vLCB1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgTWVubG8sIG1vbm9zcGFjZSk7LS1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSwgMCAxcHggMnB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSwgMCAycHggNXB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSl9Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9Ym9keXttYXJnaW46MDtmb250LWZhbWlseTp2YXIoLS1mb250KTtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfS5jYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JveC1zaGFkb3c6dmFyKC0tc2hhZG93KTttYXgtd2lkdGg6NTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctbGVmdDp2YXIoLS1pbnNldC1sZWZ0LCAwcHgpO3BhZGRpbmctcmlnaHQ6dmFyKC0taW5zZXQtcmlnaHQsIDBweCl9LmhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O3BhZGRpbmc6MTRweCAxOHB4IDB9LmhlYWQgLnRpdGxle2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmhlYWQgLnRpdGxlW2hpZGRlbl17ZGlzcGxheTpub25lfSNjb250ZW50e3BhZGRpbmc6MTBweCAxOHB4IDE4cHh9LnJlZnJlc2h7bWFyZ2luLWxlZnQ6OHB4O2FsaWduLXNlbGY6Y2VudGVyO2ZsZXg6bm9uZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTJzLGNvbG9yIC4xMnN9LnJlZnJlc2g6aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmVmcmVzaDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi42fS5yZWZyZXNoW2hpZGRlbl17ZGlzcGxheTpub25lfS5yZWZyZXNoIHN2Z3t3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2Rpc3BsYXk6YmxvY2t9LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOmtpdC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBraXQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5lbXB0eXtwYWRkaW5nOjE4cHggMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweH0uaGludHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWFsaWduOmNlbnRlcn0ubm90ZXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmc6MCAwIDEwcHh9Lm1vbm97Zm9udC1mYW1pbHk6dmFyKC0tbW9ubyk7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1mYWludCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5iYWRnZS5va3tjb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5iYWRnZS53YXJuLC5iYWRnZS50b2Rve2NvbG9yOnZhcigtLXdhcm4pO2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyl9LmJhZGdlLmVycntjb2xvcjp2YXIoLS1iYWQpO2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKX0uYnV5e21hcmdpbi10b3A6MTRweDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NDRweDtwYWRkaW5nOjExcHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWFjY2VudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY1MDtjdXJzb3I6cG9pbnRlcn0uYnV5OmRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLWNvbG9yOnZhcigtLWxpbmUpO2NvbG9yOnZhcigtLWZnLWZhaW50KTtjdXJzb3I6ZGVmYXVsdH0uYnV5LmFsdCwuZ2hvc3R7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZ2hvc3R7ZmxleDoxO21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nOjlweCAxMHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcn0ubGlua3tib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzo2cHggMCAwO2NvbG9yOnZhcigtLWxpbmspO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ucXR5e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweH0ucXR5IGJ1dHRvbnt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTdweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5xdHkgc3BhbnttaW4td2lkdGg6MjZweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MH1idXR0b246Zm9jdXMtdmlzaWJsZSxhOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tcmluZyk7b3V0bGluZS1vZmZzZXQ6MnB4fUBtZWRpYShtYXgtd2lkdGg6NDMwcHgpey5jYXJke2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0uaGVhZHtwYWRkaW5nOjEycHggMTRweCAwfSNjb250ZW50e3BhZGRpbmc6OHB4IDE0cHggMTRweH0uYnV5e21pbi1oZWlnaHQ6NDhweDtmb250LXNpemU6MTVweH0uZ2hvc3R7bWluLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMy41cHh9LnF0eSBidXR0b257d2lkdGg6NDJweDtoZWlnaHQ6NDJweDtmb250LXNpemU6MTlweH0ucmVmcmVzaHt3aWR0aDozNHB4O2hlaWdodDozNHB4fS5oaW50LC5ub3RlLC5lbXB0eXtmb250LXNpemU6MTNweH19QG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246bm9uZX0qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fVtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9I2NvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0uaGVhZHttaW4taGVpZ2h0OjI4cHh9LmhvbWV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbjowO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO21pbi13aWR0aDowfS5ob21lOmhvdmVye29wYWNpdHk6LjcyfS5oZWFkIC5icmFuZHttYXgtaGVpZ2h0OjM0cHg7bWF4LXdpZHRoOjE1MHB4O29iamVjdC1maXQ6Y29udGFpbn0uaGVhZCAudGl0bGV7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxNXB4O2xldHRlci1zcGFjaW5nOi0uMDFlbX0uYmFja2J0bntib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTFweCA0cHggOHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwO21heC13aWR0aDo0MiU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y3Vyc29yOnBvaW50ZXJ9LmJhY2tidG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZyl9LmhlYWQgLnN1Yntjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4O21hcmdpbi1pbmxpbmUtc3RhcnQ6YXV0bzt0ZXh0LWFsaWduOmVuZH0uaGVhZHRyaXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NXB4IDExcHggNXB4IDlweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXJ9LmhlYWR0cmlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LmhlYWQgLnN1YisuaGVhZHRyaXB7bWFyZ2luLWlubGluZS1zdGFydDowfS5jYXJkLmJ1c3l7b3BhY2l0eTouNjJ9LmNhcmQuYnVzeSBidXR0b24sLmNhcmQuYnVzeSBpbnB1dCwuY2FyZC5idXN5IHNlbGVjdHtwb2ludGVyLWV2ZW50czpub25lfS5tZW1iZXJjaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYyMDt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXJ9Lm1lbWJlcmNoaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubGlua3l7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDtmb250OmluaGVyaXQ7Y29sb3I6dmFyKC0tbGluayk7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ucC13YXN7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5wLW1lbWJlcntmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5zdW0uZ29vZCBzcGFuOmxhc3QtY2hpbGR7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZGVtb3tkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40NX0uZGVtbyBie2ZvbnQtd2VpZ2h0OjcwMH0uY2l0eWdyb3VwKy5jaXR5Z3JvdXB7bWFyZ2luLXRvcDoxNHB4fS5jaXR5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1ib3R0b206OHB4fS5jaXR5bmFtZSBzbWFsbHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDA7b3BhY2l0eTouNzV9LnRpbGVze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTk2cHgsMWZyKSk7Z2FwOjEwcHh9LnRpbGV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDp2YXIoLS1iZyk7dGV4dC1hbGlnbjpzdGFydDtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjB9LnRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLWZhaW50KX0udC1zaG90e3Bvc2l0aW9uOnJlbGF0aXZlO2FzcGVjdC1yYXRpbzoxNiAvIDEwO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0udC1zaG90IGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0udC1tYXJre2ZvbnQtc2l6ZTozMHB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTtvcGFjaXR5Oi45Mjt0ZXh0LXNoYWRvdzowIDFweCAxMnB4IHJnYigwIDAgMCAvIDIyJSk7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS50LXNob3QgaW1nLC5oZXJvIGltZ3t6LWluZGV4OjF9LnQtYnJhbmR7ei1pbmRleDoyO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0LWJsb2NrLXN0YXJ0OjhweDtpbnNldC1pbmxpbmUtc3RhcnQ6OHB4O2JhY2tncm91bmQ6IzAwMDAwMDYxO2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW19LnQtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7cGFkZGluZzoxMHB4IDExcHggMTFweH0udC1uYW1le2ZvbnQtd2VpZ2h0OjY0MDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuMztkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDoyO2xpbmUtY2xhbXA6Mjstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVuO21pbi1oZWlnaHQ6Mi42ZW19LnQtd2hlcmV7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnQtZm9vdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjhweDttYXJnaW4tdG9wOjJweH0udC1mcm9te2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MH0udC1mcm9tIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTFweH0ucmF0ZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yYXRlIHN2Z3tjb2xvcjojZThhMzNkfS5oZXJve3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YXNwZWN0LXJhdGlvOjIxIC8gODtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9Lmhlcm8gLnQtbWFya3tmb250LXNpemU6NDBweH0uaC1uYW1le2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjY4MDtsZXR0ZXItc3BhY2luZzotLjAxNWVtO2xpbmUtaGVpZ2h0OjEuMjV9Lmgtd2hlcmV7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweH0uaC1zdW17Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS41NTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDlweDtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5zdGF5e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDExMnB4LDFmcikgbWlubWF4KDExMnB4LDFmcikgYXV0byAxZnI7Z2FwOjhweDthbGlnbi1pdGVtczplbmQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zdGF5IGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdGF5IGlucHV0LC5zdGF5IHNlbGVjdHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo3cHggNnB4O21pbi13aWR0aDowO3dpZHRoOjEwMCV9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lm5pZ2h0c3tmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nLWJvdHRvbTo4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGF5IC5nb3t3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTNweDtwYWRkaW5nOjhweCAxNHB4O2N1cnNvcjpwb2ludGVyfS5zdGF5IC5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTtjdXJzb3I6ZGVmYXVsdH0uZmxleC1kYXRlc3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZzoycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW47LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmZke2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4O21pbi13aWR0aDo3OHB4O3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQ6aW5oZXJpdDt0ZXh0LWFsaWduOmxlZnQ7Y3Vyc29yOnBvaW50ZXJ9LmZkOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5mZC1kYXl7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtO2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOm5vd3JhcH0uZmQtcHJpY2V7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2NTA7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZmQub257YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Y3Vyc29yOmRlZmF1bHR9LmZkLm9uIC5mZC1kYXl7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtvcGFjaXR5Oi44NX0uZmQuYmVzdHtib3JkZXItY29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uZmQuYmVzdCAuZmQtcHJpY2UsLmZkLmJlc3QgLmZkLWRheXtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5mZC5vdXQgLmZkLXByaWNle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtd2VpZ2h0OjUwMH0udGh1bWJ7Z3JpZC1hcmVhOnRodW1iO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2ZsZXg6MCAwIGF1dG99LnRodW1iIGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0ubGVnc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmxlZ3tib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjlweCAxMXB4fS5sZWcud2Fze29wYWNpdHk6LjcyfS5sZWcud2FzIC5sZWd2e3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LmxlZ2t7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubGVndntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NDA7bWFyZ2luLXRvcDoycHh9LmxlZ217Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjJweH0ucm93c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LnJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBwcmljZSBhY3Rpb24iO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHggMTFweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgcHJpY2UgYWN0aW9uIn0ucm93IC5ib2R5e2dyaWQtYXJlYTpib2R5O21pbi13aWR0aDowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweH0ucm93IC5uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucm93IC5tZXRhe2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS40O2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjM7bGluZS1jbGFtcDozOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW59LnJvdyAucHJpY2V7Z3JpZC1hcmVhOnByaWNlO3RleHQtYWxpZ246ZW5kO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucm93IC5wLXRvdGFse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjYwfS5yb3cgLnAtdW5pdHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucm93IC5hY3Rpb257Z3JpZC1hcmVhOmFjdGlvbn0uYmFkZ2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O21hcmdpbi10b3A6MnB4fS5iYWRnZXtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6MnB4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5iYWRnZS5nb29ke2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uYmFkZ2Uud2FybntiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pfS5iYWRnZS5iYWR7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCl9LmFkZHtkaXNwbGF5OmlubGluZS1ncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDozOHB4O2hlaWdodDozOHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0fS5hZGQ6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmFkZFtkaXNhYmxlZF17b3BhY2l0eTouNDtjdXJzb3I6ZGVmYXVsdH0uc3RlcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHh9LnN0ZXAgYnV0dG9ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnN0ZXAgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6I2ZmZmZmZjJlfS5zdGVwIC5ue21pbi13aWR0aDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheXtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luOjEycHggMCA2cHh9LnN1bXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpO21hcmdpbi10b3A6MTJweDtwYWRkaW5nLXRvcDoxMHB4O2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uc3Vte2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdW0udG90YWx7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZm9vdHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4fS5nb3tmbGV4OjE7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoxMXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2ODA7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoxMnB4IDE2cHg7Y3Vyc29yOnBvaW50ZXJ9LmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41NTtjdXJzb3I6ZGVmYXVsdH0uZ28ucXVpZXR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo2MjB9LmdvLmRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWJhZCk7Y29sb3I6dmFyKC0tYmcpfS5ub3Rle2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS41fS5mb3Jte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjExcHg7bWFyZ2luLXRvcDoxMHB4fS5mb3JtIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5mb3JtIGlucHV0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjhweCA5cHh9LmZvcm0gLnR3b3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjhweH0uY29uZntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MTZweCAxMnB4fS5jb25mIC5jb2Rle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjcyMDtsZXR0ZXItc3BhY2luZzouMDZlbTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbmYgLndoZXJle2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwfS5jb25mIC53aGVue2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnVucGFpZHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnVucGFpZCBie2ZvbnQtd2VpZ2h0OjcyMH0ud2Fybm5vdGV7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzo5cHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udGlsZS5vdmVye29wYWNpdHk6LjgyfS5hc2tlZC1saW5le2ZvbnQtc3R5bGU6aXRhbGljfS5hc2tlZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYXNrZWQgYntmb250LXdlaWdodDo3MjA7Y29sb3I6dmFyKC0tZmcpfS5hc2tlZC5mbGFne2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLXdhcm4pfS5hc2tlZC5mbGFnIGJ7Y29sb3I6dmFyKC0td2Fybil9LmFza3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5hc2tzLXR7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcC5hc2t7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHh9LmNoaXAuYXNrW2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKX0ubW9uZXktb3V0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wcm9zZXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjY7Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6cHJlLXdyYXB9LnByb3NlIGg0e21hcmdpbjoxNHB4IDAgNHB4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZW1wdHl7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHg7cGFkZGluZzoxOHB4IDRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZXJye2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LnRpbGVze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNTBweCwxZnIpKTtnYXA6OHB4fS50LW1hcmt7Zm9udC1zaXplOjI0cHh9LnN0YXl7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnJ9LnN0YXkgLmd1ZXN0c3tncmlkLWNvbHVtbjoxfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5zdGF5IC5nb3tncmlkLWNvbHVtbjoyO3dpZHRoOjEwMCV9LnJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBhY3Rpb24iICJwcmljZSBhY3Rpb24iO3Jvdy1nYXA6NnB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgYWN0aW9uIiAidGh1bWIgcHJpY2UgYWN0aW9uIn0ucm93LndpdGh0aHVtYiAudGh1bWJ7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDthbGlnbi1zZWxmOnN0YXJ0fS5yb3cgLnByaWNle3RleHQtYWxpZ246c3RhcnR9LmZvcm0gLnR3b3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX0uY21wLXdyYXB7b3ZlcmZsb3cteDphdXRvO21hcmdpbi1pbmxpbmU6LTJweDtwYWRkaW5nOjJweH0uY21we2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDc2cHgsOTZweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMTJweCwxZnIpKTthbGlnbi1pdGVtczpzdHJldGNoO2NvbHVtbi1nYXA6OHB4fS5jbXAtY29ybmVye2dyaWQtY29sdW1uOjF9LmNtcC1oZWFke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO21pbi13aWR0aDowfS5jbXAtaGVhZC5waWNre2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWFjY2VudCl9LmNtcC1oZWFkIC50LXNob3R7YXNwZWN0LXJhdGlvOjE2IC8gOTtib3JkZXI6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJX0uY29sLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmc6MTBweCAxMXB4IDEycHh9LmNvbC1uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uY29sLXByaWNle2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbC1wcmljZSBzbWFsbHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LndoeXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtmb250LXN0eWxlOml0YWxpYztjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItaW5saW5lLXN0YXJ0OjJweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nLWlubGluZS1zdGFydDo4cHh9LnBje2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweDtmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDV9LnBjIGRpdntkaXNwbGF5OmZsZXg7Z2FwOjVweH0ucGMgLm17ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo3MDB9LnBjIC5wcm8gLm17Y29sb3I6dmFyKC0tZ29vZCl9LnBjIC5jb24gLm17Y29sb3I6dmFyKC0tZmctc29mdCl9LmNtcCAuaywuY21wIC52e2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NTtwYWRkaW5nOjZweCA4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY21wIC5re2dyaWQtY29sdW1uOjE7Y29sb3I6dmFyKC0tZmctc29mdCk7cG9zaXRpb246c3RpY2t5O2luc2V0LWlubGluZS1zdGFydDowO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5jbXAgLnZ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jbXAgLnYuYWx0LC5jbXAgLms6aGFzKCsudi5hbHQpe2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czo2cHh9LnBpY2ttYXJre2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtwYWRkaW5nOjNweCA4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmRheXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fS5kYXlyb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoyOHB4IDFmcjtnYXA6MTBweH0uZGF5bnVte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHh9LmRheW51bSBie2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5bnVtIGl7ZmxleDoxO3dpZHRoOjFweDtiYWNrZ3JvdW5kOnZhcigtLWxpbmUpfS5kYXlyb3c6bGFzdC1jaGlsZCAuZGF5bnVtIGl7ZGlzcGxheTpub25lfS5kYXlib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtwYWRkaW5nLWJvdHRvbToxNHB4O21pbi13aWR0aDowfS5kYXlsYWJlbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmRheW5vdGV7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LnBsYW4taXRlbXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHh9LnBsYW4taXRlbSAubmFtZXtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnBsYW4taXRlbSAubWV0YXtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uaW5zdGF0ZXtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDt3aGl0ZS1zcGFjZTpub3dyYXB9Lmluc3RhdGUueWVze2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uaW5zdGF0ZS5ub3tiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXB7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2FwIGJ7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtd2VpZ2h0OjcwMH1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsuY21we2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNjhweCw4NHB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDEwOHB4LDFmcikpfX0uc3VnZ2VzdHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDttYXJnaW4tdG9wOjE0cHh9LnN1Z2dlc3QgLmNoaXB7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NXB4IDExcHg7Y29sb3I6dmFyKC0tZmcpfS5zdWdnZXN0IC5jaGlwOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5zdWdnZXN0IC5jaGlwOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LmZvcm0gbGFiZWwucmVtZW1iZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmb250LXdlaWdodDo0MDA7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O21hcmdpbi10b3A6MTBweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LXRyYW5zZm9ybTpub25lO2xldHRlci1zcGFjaW5nOjB9LmZvcm0gbGFiZWwucmVtZW1iZXIgaW5wdXR7bWFyZ2luOjJweCAwIDB9LnBsYWNlc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweH0uY2hpcC5wbGFjZXtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo0cHggMTBweDtjb2xvcjp2YXIoLS1mZyl9LmNoaXAucGxhY2Ugc21hbGx7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jaGlwLnBsYWNlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5jaGlwLnBsYWNlOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LnN1Z2dlc3QgLmNoaXAuc2F5IHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpfS5maW5kZXJ7ZGlzcGxheTpmbGV4O2dhcDo4cHh9LmZpbmRlciBpbnB1dHtmbGV4OjE7bWluLXdpZHRoOjA7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OXB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpfS5maW5kZXIgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjFweH0ucmVnaW9ue2Rpc3BsYXk6Z3JpZDtnYXA6MTBweH0uY291bnRyeW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjZweH0uY291bnRyeW5hbWUgc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2xldHRlci1zcGFjaW5nOjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kZXN0e2Rpc3BsYXk6Z3JpZDtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbGluZSl9LmRlc3Q6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOjB9LmRlc3QtY291bnRyeXtqdXN0aWZ5LXNlbGY6c3RhcnQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDpub25lO2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmxlZnR9LmRlc3QtY291bnRyeSBzbWFsbHtmb250LXdlaWdodDo0MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LmRlc3QtY291bnRyeSAubntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRlc3QtY291bnRyeTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5kZXN0LWNvdW50cnk6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZmluZGVyIC5nb3tmbGV4Om5vbmU7cGFkZGluZzo5cHggMThweDtmb250LXNpemU6MTNweH0uc29ydHMta3thbGlnbi1zZWxmOmNlbnRlcjtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1yaWdodDoycHh9LmNoaXAuc29ydFthcmlhLXByZXNzZWQ9dHJ1ZV17YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyl9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8ZGl2IGNsYXNzPSJjYXJkIj4KICAgICAgPGRpdiBjbGFzcz0iaGVhZCI+CiAgICAgICAgPCEtLSBUaGUgZ3JvdXAncyB3b3JkbWFyayBhcnJpdmVzIFdJVEggVEhFIERBVEEgYXMgYGxvZ29VcmxgLiBOb3RoaW5nIGlzCiAgICAgICAgICAgICBiYWtlZCBpbiBoZXJlOiBhIGxvZ28gY29tcGlsZWQgaW50byB0aGUgY2FyZCBpcyB0aGUgZmlyc3QgYnJhbmQncywKICAgICAgICAgICAgIGFuZCBldmVyeSBob3RlbCBncm91cCBhZnRlciB0aGVtIHdvdWxkIHdlYXIgaXQuIC0tPgogICAgICAgIDwhLS0gVGhlIHdheSBiYWNrLCBvbiBldmVyeSB2aWV3LiBXaXRob3V0IGl0IHRoZSB0cmlwLCB0aGUgYm9va2luZ3MgbGlzdAogICAgICAgICAgICAgYW5kIGEgY2FuY2VsbGVkIGJvb2tpbmcgYXJlIGFsbCBwbGFjZXMgYSBndWVzdCBjYW4gcmVhY2ggYW5kIG5vdAogICAgICAgICAgICAgbGVhdmUgKHJvYmluLCAyMDI2LTA5LTE4KS4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaG9tZSIgaWQ9ImhvbWUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImhvbWUiIGFyaWEtbGFiZWw9IkJhY2sgdG8gdGhlIGhvdGVscyI+CiAgICAgICAgICA8aW1nIGNsYXNzPSJicmFuZCIgaWQ9ImJyYW5kIiBhbHQ9IiIgaGlkZGVuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InRpdGxlIiBpZD0idGl0bGUiPjwvc3Bhbj4KICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8IS0tIE9uZSBzdGVwIGJhY2sgSU5TSURFIHRoZSBjYXJkLiBUaGUgYnJhbmQgYWJvdmUgZ29lcyBob21lLCB3aGljaCBpcyBhCiAgICAgICAgICAgICBkaWZmZXJlbnQgYW5zd2VyOyB0aGlzIGNvbWVzIGJhY2sgdG8gdGhlIG9uZSB0aGV5IHdlcmUgcmVhZGluZyAtIHRoZQogICAgICAgICAgICAgdGhyZWUgaG90ZWxzIHRoZXkgd2VyZSBjb21wYXJpbmcgd2hlbiB0aGV5IHRhcHBlZCBvbmUgKHJvYmluLAogICAgICAgICAgICAgMjAyNi0wOS0yMSkuIEhpZGRlbiB1bmxlc3MgdGhlcmUgaXMgc29tZXdoZXJlIHRvIGdvIGJhY2sgdG8sIGFuZAogICAgICAgICAgICAgY2xlYXJlZCB3aGVuZXZlciB0aGUgY29udmVyc2F0aW9uIHNlbmRzIGEgbmV3IGFuc3dlci4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYmFja2J0biIgaWQ9ImJhY2tidG4iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJhY2siIGhpZGRlbj48L2J1dHRvbj4KICAgICAgICA8c3BhbiBjbGFzcz0ic3ViIiBpZD0ic3ViIj48L3NwYW4+CiAgICAgICAgPCEtLSBUaGUgdGllciwgb3IgdGhlIHdheSBpbi4gQSBtZW1iZXIgcmF0ZSBpcyBhIGZhY3QgYWJvdXQgZXZlcnkgcHJpY2UKICAgICAgICAgICAgIG9uIHRoZSBjYXJkLCBzbyBpdCBiZWxvbmdzIGluIHRoZSBoZWFkZXIgcmF0aGVyIHRoYW4gb24gb25lIHZpZXcuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9Im1lbWJlcmNoaXAiIGlkPSJtZW1iZXJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+PC9idXR0b24+CiAgICAgICAgPCEtLSBUaGUgdHJpcCwgZnJvbSB0aGUgdG9wLiBUaGUgc2hvcHBpbmcgY2FyZCBsZWFybmVkIG9uIDIwMjYtMDktMTcgdGhhdAogICAgICAgICAgICAgYSBmb290ZXItb25seSBjYXJ0IG1lYW5zIHNjcm9sbGluZyBwYXN0IHR3ZW50eSB0aWxlcyB0byByZWFjaCBpdC4KICAgICAgICAgICAgIFNob3duIG9uY2UgdGhlIHRyaXAgaGFzIHNvbWV0aGluZyBpbiBpdCwgaGlkZGVuIG9uIHRoZSB0cmlwIHZpZXcuIC0tPgogICAgICAgIDxidXR0b24gY2xhc3M9ImhlYWR0cmlwIiBpZD0iaGVhZHRyaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9InRyaXAiIGhpZGRlbiBhcmlhLWxhYmVsPSJWaWV3IHRoZSB0cmlwIj4KICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIgogICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICA8cGF0aCBkPSJNNCA4LjVoMTZ2MTFhMS41IDEuNSAwIDAgMS0xLjUgMS41aC0xM0ExLjUgMS41IDAgMCAxIDQgMTkuNXoiIC8+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik05IDguNVY2YTIgMiAwIDAgMSAyLTJoMmEyIDIgMCAwIDEgMiAydjIuNSIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPHNwYW4gaWQ9ImhlYWR0cmlwbiI+MDwvc3Bhbj4KICAgICAgICA8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiPjxkaXYgY2xhc3M9ImVtcHR5Ij5Mb2FkaW5n4oCmPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K', 'base64').toString('utf8');
|
|
5
|
+
export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgbWY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLGdmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxOYz17fSxiZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24oZCl7cmV0dXJuIFByb21pc2UuYWxsKGQubWFwKG09PlByb21pc2UucmVzb2x2ZShtKS50aGVuKGI9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmJ9KSxiPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpifSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSx1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGw9dT8ubm9uY2V8fHU/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAoZD0+e2lmKGQ9Z2YoZCxvKSxkIGluIE5jKXJldHVybjtOY1tkXT0hMDtjb25zdCBtPWQuZW5kc1dpdGgoIi5jc3MiKSxiPW0/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgaz1hLmxlbmd0aC0xO2s+PTA7ay0tKXtjb25zdCAkPWFba107aWYoJC5ocmVmPT09ZCYmKCFtfHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2R9Il0ke2J9YCkpcmV0dXJuO2NvbnN0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKF8ucmVsPW0/InN0eWxlc2hlZXQiOm1mLG18fChfLmFzPSJzY3JpcHQiKSxfLmNyb3NzT3JpZ2luPSIiLF8uaHJlZj1kLGwmJl8uc2V0QXR0cmlidXRlKCJub25jZSIsbCksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChfKSxtKXJldHVybiBuZXcgUHJvbWlzZSgoaywkKT0+e18uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsayksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7ZH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiB2ZihlKXtyZXR1cm4gZX1mdW5jdGlvbiB5ZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBJbygpe3JldHVybiBlPT5lfWZ1bmN0aW9uIF9mKGUpe31mdW5jdGlvbiBrZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIHdmKGUpe31mdW5jdGlvbiB0cyhlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBucyhlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+X3MobikpLmpvaW4odCl9ZnVuY3Rpb24gaG8oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzICRme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gS3QoZSl7cmV0dXJuIG5ldyAkZihlKX1mdW5jdGlvbiB2cyhlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBSZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gUHUoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgamM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24geHUoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT1qYylyZXR1cm4gbz09PXZvaWQgMCYmKG89amMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIFNmKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gWWUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBQbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiBUZShlKXtyZXR1cm4gUG8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gQ3UoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBZZSh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBFdShlLHQsbil7dCBpbiBlP1llKGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gSmUoZSx0LG4sbyl7Y29uc3Qgcj1UZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9DdShlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTpFdShlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiB6ZihlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/Q3UoZSxuLCgpPT50W25dKTpFdShlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBpZSguLi5lKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobik7T2JqZWN0LmFzc2lnbih0LG8pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSx0KX1mdW5jdGlvbiBUZihlKXtyZXR1cm4gaWUoZS5fem9kLmRlZil9ZnVuY3Rpb24gSWYoZSx0KXtyZXR1cm4gdD90LnJlZHVjZSgobixvKT0+bj8uW29dLGUpOmV9ZnVuY3Rpb24gUGYoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlKSxuPXQubWFwKG89PmVbb10pO3JldHVybiBQcm9taXNlLmFsbChuKS50aGVuKG89Pntjb25zdCByPXt9O2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXJbdFtzXV09b1tzXTtyZXR1cm4gcn0pfWZ1bmN0aW9uIHhmKGU9MTApe2NvbnN0IHQ9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjtsZXQgbj0iIjtmb3IobGV0IG89MDtvPGU7bysrKW4rPXRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnQubGVuZ3RoKV07cmV0dXJuIG59ZnVuY3Rpb24gT3UoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIEF1KGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoL1teXHdccy1dL2csIiIpLnJlcGxhY2UoL1tcc18tXSsvZywiLSIpLnJlcGxhY2UoL14tK3wtKyQvZywiIil9Y29uc3QgeXM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlOiguLi5lKT0+e307ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGwmJiFBcnJheS5pc0FycmF5KGUpfWNvbnN0IFJ1PUt0KCgpPT57aWYoY2Uuaml0bGVzc3x8dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcygiQ2xvdWRmbGFyZSIpKXJldHVybiExO3RyeXtjb25zdCBlPUZ1bmN0aW9uO3JldHVybiBuZXcgZSgiIiksITB9Y2F0Y2h7cmV0dXJuITF9fSk7ZnVuY3Rpb24gTmUoZSl7aWYoc3QoZSk9PT0hMSlyZXR1cm4hMTtjb25zdCB0PWUuY29uc3RydWN0b3I7aWYodD09PXZvaWQgMHx8dHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITA7Y29uc3Qgbj10LnByb3RvdHlwZTtyZXR1cm4hKHN0KG4pPT09ITF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9ZnVuY3Rpb24geG8oZSl7cmV0dXJuIE5lKGUpP3suLi5lfTpBcnJheS5pc0FycmF5KGUpP1suLi5lXTplIGluc3RhbmNlb2YgTWFwP25ldyBNYXAoZSk6ZSBpbnN0YW5jZW9mIFNldD9uZXcgU2V0KGUpOmV9ZnVuY3Rpb24gQ2YoZSl7bGV0IHQ9MDtmb3IoY29uc3QgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiZ0Kys7cmV0dXJuIHR9Y29uc3QgRWY9ZT0+e2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4idW5kZWZpbmVkIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNOYU4oZSk/Im5hbiI6Im51bWJlciI7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uIjtjYXNlImJpZ2ludCI6cmV0dXJuImJpZ2ludCI7Y2FzZSJzeW1ib2wiOnJldHVybiJzeW1ib2wiO2Nhc2Uib2JqZWN0IjpyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmU9PT1udWxsPyJudWxsIjplLnRoZW4mJnR5cGVvZiBlLnRoZW49PSJmdW5jdGlvbiImJmUuY2F0Y2gmJnR5cGVvZiBlLmNhdGNoPT0iZnVuY3Rpb24iPyJwcm9taXNlIjp0eXBlb2YgTWFwPCJ1IiYmZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjp0eXBlb2YgU2V0PCJ1IiYmZSBpbnN0YW5jZW9mIFNldD8ic2V0Ijp0eXBlb2YgRGF0ZTwidSImJmUgaW5zdGFuY2VvZiBEYXRlPyJkYXRlIjp0eXBlb2YgRmlsZTwidSImJmUgaW5zdGFuY2VvZiBGaWxlPyJmaWxlIjoib2JqZWN0IjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKX19LGZvPW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJzeW1ib2wiXSksWnU9bmV3IFNldChbInN0cmluZyIsIm51bWJlciIsImJpZ2ludCIsImJvb2xlYW4iLCJzeW1ib2wiLCJ1bmRlZmluZWQiXSk7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csIlxcJCYiKX1mdW5jdGlvbiBLKGUsdCxuKXtjb25zdCBvPW5ldyBlLl96b2QuY29uc3RyKHQ/P2UuX3pvZC5kZWYpO3JldHVybighdHx8bj8ucGFyZW50KSYmKG8uX3pvZC5wYXJlbnQ9ZSksb31mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZTtpZighdClyZXR1cm57fTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJue2Vycm9yOigpPT50fTtpZih0Py5tZXNzYWdlIT09dm9pZCAwKXtpZih0Py5lcnJvciE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtcyIpO3QuZXJyb3I9dC5tZXNzYWdlfXJldHVybiBkZWxldGUgdC5tZXNzYWdlLHR5cGVvZiB0LmVycm9yPT0ic3RyaW5nIj97Li4udCxlcnJvcjooKT0+dC5lcnJvcn06dH1mdW5jdGlvbiBPZihlKXtsZXQgdDtyZXR1cm4gbmV3IFByb3h5KHt9LHtnZXQobixvLHIpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0KHQsbyxyKX0sc2V0KG4sbyxyLHMpe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3Quc2V0KHQsbyxyLHMpfSxoYXMobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lmhhcyh0LG8pfSxkZWxldGVQcm9wZXJ0eShuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodCxvKX0sb3duS2V5cyhuKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0Lm93bktleXModCl9LGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLG8pe3JldHVybiB0Pz8odD1lKCkpLFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbyl9LGRlZmluZVByb3BlcnR5KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlZmluZVByb3BlcnR5KHQsbyxyKX19KX1mdW5jdGlvbiBfcyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJiaWdpbnQiP2UudG9TdHJpbmcoKSsibiI6dHlwZW9mIGU9PSJzdHJpbmciP2AiJHtlfSJgOmAke2V9YH1mdW5jdGlvbiBOdShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZmlsdGVyKHQ9PmVbdF0uX3pvZC5vcHRpbiE9PXZvaWQgMCYmZVt0XS5fem9kLm9wdG91dD09PSJvcHRpb25hbCIpfWNvbnN0IGp1PXtzYWZlaW50OltOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUl0saW50MzI6Wy0yMTQ3NDgzNjQ4LDIxNDc0ODM2NDddLHVpbnQzMjpbMCw0Mjk0OTY3Mjk1XSxmbG9hdDMyOlstMzQwMjgyMzQ2NjM4NTI4ODZlMjIsMzQwMjgyMzQ2NjM4NTI4ODZlMjJdLGZsb2F0NjQ6Wy1OdW1iZXIuTUFYX1ZBTFVFLE51bWJlci5NQVhfVkFMVUVdfSxNdT17aW50NjQ6W0JpZ0ludCgiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSxCaWdJbnQoIjkyMjMzNzIwMzY4NTQ3NzU4MDciKV0sdWludDY0OltCaWdJbnQoMCksQmlnSW50KCIxODQ0Njc0NDA3MzcwOTU1MTYxNSIpXX07ZnVuY3Rpb24gcXUoZSx0KXtjb25zdCBuPWUuX3pvZC5kZWYsbz1uLmNoZWNrcztpZihvJiZvLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcigiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzIik7Y29uc3Qgcz17fTtyZXR1cm4gSmUocyxlLENvKGUsdCkpLEsoZSxpZShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBDbyhlLHQpe2NvbnN0IG49VGUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBEdShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQoQ28oZSx0KSksaT17fTtyZXR1cm4gSmUoaSxlLFJlZmxlY3Qub3duS2V5cyhUZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLEsoZSxpZShuLHtzaGFwZTppLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBMdShlLHQpe2lmKCFOZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gZXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO2NvbnN0IG49ZS5fem9kLmRlZi5jaGVja3M7aWYobiYmbi5sZW5ndGg+MCl7Y29uc3Qgcj1UZShlKTtmb3IoY29uc3QgcyBvZiBSZWZsZWN0Lm93bktleXModCkpaWYoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC4iKX1yZXR1cm4gSyhlLGllKGUuX3pvZC5kZWYse3NoYXBlOlV1KGUsdCl9KSl9ZnVuY3Rpb24gVXUoZSx0KXtjb25zdCBuPXt9O3JldHVybiBKZShuLGUsUmVmbGVjdC5vd25LZXlzKFRlKGUpKSksemYobix0KSxufWZ1bmN0aW9uIEh1KGUsdCl7aWYoIU5lKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdCIpO3JldHVybiBLKGUsaWUoZS5fem9kLmRlZix7c2hhcGU6VXUoZSx0KX0pKX1mdW5jdGlvbiBCdShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtKZShuLGUsUmVmbGVjdC5vd25LZXlzKFRlKGUpKSksSmUobix0LFJlZmxlY3Qub3duS2V5cyhUZSh0KSkpO2NvbnN0IG89aWUoZS5fem9kLmRlZix7c2hhcGU6bixnZXQgY2F0Y2hhbGwoKXtyZXR1cm4gdC5fem9kLmRlZi5jYXRjaGFsbH0sY2hlY2tzOnQuX3pvZC5kZWYuY2hlY2tzPz9bXX0pO3JldHVybiBLKGUsbyl9ZnVuY3Rpb24gb3MoZSx0LG4sbz0icGFydGlhbCIpe2NvbnN0IHM9dC5fem9kLmRlZi5jaGVja3M7aWYocyYmcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoYC4ke299KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c2ApO2NvbnN0IGE9bj9uZXcgU2V0KENvKHQsbikpOnZvaWQgMCx1PXt9O3JldHVybiBKZSh1LHQsUmVmbGVjdC5vd25LZXlzKFRlKHQpKSxlJiYoKGwsZCk9PmEmJiFhLmhhcyhkKT9sOm5ldyBlKHt0eXBlOiJvcHRpb25hbCIsaW5uZXJUeXBlOmx9KSkpLEsodCxpZSh0Ll96b2QuZGVmLHtzaGFwZTp1LGNoZWNrczpbXX0pKX1mdW5jdGlvbiBGdShlLHQsbil7Y29uc3Qgbz1uP25ldyBTZXQoQ28odCxuKSk6dm9pZCAwLHI9e307cmV0dXJuIEplKHIsdCxSZWZsZWN0Lm93bktleXMoVGUodCkpLChzLGkpPT5vJiYhby5oYXMoaSk/czpuZXcgZSh7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTpzfSkpLEsodCxpZSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIHVlKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVnUoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBnZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIHR0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIHJzKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiB5ZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOnR0KGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz90dChzPy4oZSkpPz90dCh0Py5lcnJvcj8uKGUpKT8/dHQobi5jdXN0b21FcnJvcj8uKGUpKT8/dHQobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IHUgb2YgT2JqZWN0LmtleXMoZSkpdT09PSJpbnN0Inx8dT09PSJzY2hlbWEifHx1PT09ImNvbnRpbnVlInx8dT09PSJpbnB1dCJ8fHU9PT0iX19wcm90b19fInx8KGFbdV09ZVt1XSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gRW8oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IEFmPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIE9vKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIUFmLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gQW8oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIEp1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gaXQoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBSZihlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gS3UoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIFd1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gWmYoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gS3UodCtuKX1mdW5jdGlvbiBOZihlKXtyZXR1cm4gV3UoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIGpmKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiBNZihlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBxZntjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIEd1KGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6RGYoZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBQZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBSbyhlLHQsbil7cmV0dXJuIFBlKGUsdCxuLCExKX1mdW5jdGlvbiBXdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4gUGUodGhpcyxuLG8odGhpcykpfSxzZXQocil7UGUodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIERmKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjpQZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe1BlKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBMZihlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IFdyLEFlPSExO2NvbnN0IFVmPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7QWU9ITB9fTtmdW5jdGlvbiBBKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYmV3IhPT1lLl96b2Qpe1dyPXZvaWQgMDtyZXR1cm59V3I9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LFVmKTtjb25zdCByPUFlO0FlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIEFlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksQWU9QWV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxBZT1BZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gUXUoZSx0LG4sbyl7Y29uc3Qgcj1MZihlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IFl1PSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24ga3MoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtZdV09ITAsdH1jb25zdCB3cz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6TXUsQ09OU1RBTlRfQ0FUQ0g6WXUsQ2xhc3M6cWYsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6anUsYWJvcnRlZDp1ZSxhbGxvd3NFdmFsOlJ1LGFzc2VydDp3Zixhc3NlcnRFcXVhbDp2Zixhc3NlcnRJczpfZixhc3NlcnROZXZlcjprZixhc3NlcnROb3RFcXVhbDp5Zixhc3NpZ25Qcm9wOlllLGF0dGFjaFNjaGVtYTpycyxiYXNlNjRUb1VpbnQ4QXJyYXk6S3UsYmFzZTY0dXJsVG9VaW50OEFycmF5OlpmLGNhY2hlZDpLdCxjYXB0dXJlU3RhY2tUcmFjZTp5cyxjbGVhbkVudW06UmYsY2xlYW5SZWdleDpSZSxjbG9uZTpLLGNsb25lRGVmOlRmLGNvZGVQb2ludExlbmd0aDpPbyxjb25zdGFudENhdGNoOmtzLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6T2YsZGVmaW5lTGF6eTp4dSxkZWZpbmVMYXp5SW50ZXJuYWw6QSxkZXJpdmVkOld0LGVzYzpPdSxlc2NhcGVSZWdleDpJZSxleHBsaWNpdGx5QWJvcnRlZDpWdSxleHRlbmQ6THUsZmluYWxpemVJc3N1ZTp5ZSxmbG9hdFNhZmVSZW1haW5kZXI6UHUsZ2V0RWxlbWVudEF0UGF0aDpJZixnZXRFbnVtVmFsdWVzOnRzLGdldExlbmd0aGFibGVPcmlnaW46QW8sZ2V0UGFyc2VkVHlwZTpFZixnZXRTaXphYmxlT3JpZ2luOkVvLGhleFRvVWludDhBcnJheTpqZixoaWRlOlJvLGluc3RhbGxMYXp5UHJvcDpRdSxpc09iamVjdDpzdCxpc1BsYWluT2JqZWN0Ok5lLGlzc3VlOml0LGpvaW5WYWx1ZXM6bnMsanNvblN0cmluZ2lmeVJlcGxhY2VyOmhvLG1lbWJlcnM6R3UsbWVyZ2U6QnUsbWVyZ2VEZWZzOmllLG5vcm1hbGl6ZVBhcmFtczp5LG51bGxpc2g6dnMsbnVtS2V5czpDZixvYmplY3RDbG9uZTpTZixvbWl0OkR1LG9wdGlvbmFsS2V5czpOdSxvd246UGUscGFyc2VkVHlwZTpKdSxwYXJ0aWFsOm9zLHBpY2s6cXUscHJlZml4SXNzdWVzOmdlLHByaW1pdGl2ZVR5cGVzOlp1LHByb21pc2VBbGxPYmplY3Q6UGYscHJvcGVydHlLZXlUeXBlczpmbyxyYW5kb21TdHJpbmc6eGYscmF3U2hhcGU6UG8scmVxdWlyZWQ6RnUsc2FmZUV4dGVuZDpIdSxzaGFsbG93Q2xvbmU6eG8sc2x1Z2lmeTpBdSxzdHJpbmdpZnlQcmltaXRpdmU6X3MsdG9ab2Q6SW8sdWludDhBcnJheVRvQmFzZTY0Old1LHVpbnQ4QXJyYXlUb0Jhc2U2NHVybDpOZix1aW50OEFycmF5VG9IZXg6TWYsdW53cmFwTWVzc2FnZTp0dH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgTWM7Y29uc3QgJHM9T2JqZWN0LmZyZWV6ZSh7c3RhdHVzOiJhYm9ydGVkIn0pLEdyPXt2YWx1ZTp2b2lkIDAsZW51bWVyYWJsZTohMX07bGV0IHFjPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvcjpudWxsO2Z1bmN0aW9uIEhmKGUpe2NvbnN0IHQ9cWM7aWYodCl7Y29uc3Qgbj10LnN0YWNrVHJhY2VMaW1pdDtpZih0eXBlb2Ygbj09Im51bWJlciIpe3RyeXt0LnN0YWNrVHJhY2VMaW1pdD0wfWNhdGNoe3JldHVybiBxYz1udWxsLG5ldyBlfXRyeXtyZXR1cm4gbmV3IGV9ZmluYWxseXt0LnN0YWNrVHJhY2VMaW1pdD1ufX19cmV0dXJuIG5ldyBlfWZ1bmN0aW9uIHAoZSx0LG4sbyl7Y29uc3Qgcj17fTtmdW5jdGlvbiBzKGIpe3RoaXMuZGVmPWIsdGhpcy5jb25zdHI9bSx0aGlzLnRyYWl0cz1uZXcgU2V0fXMucHJvdG90eXBlPXI7Y29uc3QgaT1uLGE9aSYmbmV3IFdlYWtTZXQ7ZnVuY3Rpb24gdShiLHYpe2lmKGIuX3pvZCl7aWYoYi5fem9kLnRyYWl0cy5oYXMoZSkpcmV0dXJufWVsc2V7R3IudmFsdWU9bmV3IHModik7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfem9kIixHcil9ZmluYWxseXtHci52YWx1ZT12b2lkIDB9fWlmKGIuX3pvZC50cmFpdHMuYWRkKGUpLHQoYix2KSxhKXtjb25zdCBrPU9iamVjdC5nZXRQcm90b3R5cGVPZihiKSwkPWIuX3pvZC5jb25zdHIucHJvdG90eXBlO2xldCBJPWs7Zm9yKDtJJiZJIT09JDspST1PYmplY3QuZ2V0UHJvdG90eXBlT2YoSSk7Y29uc3QgUj1JPz9rO2EuaGFzKFIpfHwoYS5hZGQoUiksR3UoUixpKSl9Y29uc3QgXz1tLnByb3RvdHlwZTtmb3IoY29uc3QgayBpbiBfKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfLGspJiYoayBpbiBifHwoYltrXT1fW2tdLmJpbmQoYikpKX1jb25zdCBsPW8/LlBhcmVudD8/T2JqZWN0O2NsYXNzIGQgZXh0ZW5kcyBse31PYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibmFtZSIse3ZhbHVlOmV9KTtmdW5jdGlvbiBtKGIpe2NvbnN0IHY9bz8uUGFyZW50P0hmKGQpOnRoaXM7dSh2LGIpO2NvbnN0IF89di5fem9kLmRlZmVycmVkO2lmKF8pe2Zvcihjb25zdCAkIG9mIF8pJCgpO3YuX3pvZC5kZWZlcnJlZD12b2lkIDB9Y29uc3Qgaz1nbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZz8ucG9zdFByb2Nlc3NvcjtyZXR1cm4gayYmayh2KSx2fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiaW5pdCIse3ZhbHVlOnV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmI9Pm8/LlBhcmVudCYmYiBpbnN0YW5jZW9mIG8uUGFyZW50PyEwOmI/Ll96b2Q/LnRyYWl0cz8uaGFzKGUpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sIm5hbWUiLHt2YWx1ZTplfSksbX1jb25zdCBTcz1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIFplIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuIil9fWNsYXNzIFpvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke3R9YCksdGhpcy5uYW1lPSJab2RFbmNvZGVFcnJvciJ9fShNYz1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWc/PyhNYy5fX3pvZF9nbG9iYWxDb25maWc9e30pO2NvbnN0IGNlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnO2Z1bmN0aW9uIFEoZSl7cmV0dXJuIGUmJk9iamVjdC5hc3NpZ24oY2UsZSksY2V9ZnVuY3Rpb24gQmYoKXtjb25zdCBlPXRoaXMuX3pvZDtyZXR1cm4gZS5tZXNzYWdlPz8oZS5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KGUuZGVmLGhvLDIpKSxlLm1lc3NhZ2V9ZnVuY3Rpb24gRmYoZSl7dGhpcy5fem9kLm1lc3NhZ2U9ZX1jb25zdCBWZj17Z2V0OkJmLHNldDpGZixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sUXI9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfSxEYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKSxYdT0oZSx0KT0+e2UubmFtZT0iJFpvZEVycm9yIixRci52YWx1ZT10LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc3N1ZXMiLFFyKSxRci52YWx1ZT12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1lc3NhZ2UiLFZmKTtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtEYy5oYXMobil8fChEYy5hZGQobiksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInRvU3RyaW5nIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz0oKT0+dGhpcy5tZXNzYWdlO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidG9TdHJpbmciLHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pKX0sZWw9cCgiJFpvZEVycm9yIixYdSksZmU9cCgiJFpvZEVycm9yIixYdSx2b2lkIDAse1BhcmVudDpFcnJvcn0pO2Z1bmN0aW9uIEpmKGUsdCxuKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl8fCh0PT09Il9fcHJvdG9fXyI/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bigpLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk6ZVt0XT1uKCkpLGVbdF19ZnVuY3Rpb24gTm8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17fSxvPVtdO2Zvcihjb25zdCByIG9mIGUuaXNzdWVzKXIucGF0aC5sZW5ndGg+MD9KZihuLHIucGF0aFswXSwoKT0+W10pLnB1c2godChyKSk6by5wdXNoKHQocikpO3JldHVybntmb3JtRXJyb3JzOm8sZmllbGRFcnJvcnM6bn19ZnVuY3Rpb24gam8oZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17X2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e2Zvcihjb25zdCBpIG9mIHIuaXNzdWVzKWlmKGkuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmaS5lcnJvcnMubGVuZ3RoKWkuZXJyb3JzLm1hcChhPT5vKHtpc3N1ZXM6YX0sWy4uLnMsLi4uaS5wYXRoXSkpO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2UgaWYoaS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmkuaXNzdWVzfSxbLi4ucywuLi5pLnBhdGhdKTtlbHNle2NvbnN0IGE9Wy4uLnMsLi4uaS5wYXRoXTtpZihhLmxlbmd0aD09PTApbi5fZXJyb3JzLnB1c2godChpKSk7ZWxzZXtsZXQgdT1uLGw9MDtmb3IoO2w8YS5sZW5ndGg7KXtjb25zdCBkPWFbbF0sbT1sPT09YS5sZW5ndGgtMTtpZihkPT09Il9lcnJvcnMiKXttJiZ1Ll9lcnJvcnMucHVzaCh0KGkpKSxsKys7Y29udGludWV9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUsZCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LGQse3ZhbHVlOntfZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IGI9dVtkXTttJiZiLl9lcnJvcnMucHVzaCh0KGkpKSx1PWIsbCsrfX19fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIHpzKGUsdD1uPT5uLm1lc3NhZ2Upe2NvbnN0IG49e2Vycm9yczpbXX0sbz0ocixzPVtdKT0+e3ZhciBpO2Zvcihjb25zdCBhIG9mIHIuaXNzdWVzKWlmKGEuY29kZT09PSJpbnZhbGlkX3VuaW9uIiYmYS5lcnJvcnMubGVuZ3RoKWEuZXJyb3JzLm1hcCh1PT5vKHtpc3N1ZXM6dX0sWy4uLnMsLi4uYS5wYXRoXSkpO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfa2V5IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2UgaWYoYS5jb2RlPT09ImludmFsaWRfZWxlbWVudCIpbyh7aXNzdWVzOmEuaXNzdWVzfSxbLi4ucywuLi5hLnBhdGhdKTtlbHNle2NvbnN0IHU9Wy4uLnMsLi4uYS5wYXRoXTtpZih1Lmxlbmd0aD09PTApe24uZXJyb3JzLnB1c2godChhKSk7Y29udGludWV9bGV0IGw9bixkPTA7Zm9yKDtkPHUubGVuZ3RoOyl7Y29uc3QgbT11W2RdLGI9ZD09PXUubGVuZ3RoLTE7dHlwZW9mIG09PSJzdHJpbmciPyhsLnByb3BlcnRpZXM/PyhsLnByb3BlcnRpZXM9e30pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLnByb3BlcnRpZXMsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3BlcnRpZXMsbSx7dmFsdWU6e2Vycm9yczpbXX0sZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxsPWwucHJvcGVydGllc1ttXSk6KGwuaXRlbXM/PyhsLml0ZW1zPVtdKSwoaT1sLml0ZW1zKVttXT8/KGlbbV09e2Vycm9yczpbXX0pLGw9bC5pdGVtc1ttXSksYiYmbC5lcnJvcnMucHVzaCh0KGEpKSxkKyt9fX07cmV0dXJuIG8oZSksbn1mdW5jdGlvbiB0bChlKXtjb25zdCB0PVtdLG49ZS5tYXAobz0+dHlwZW9mIG89PSJvYmplY3QiP28ua2V5Om8pO2Zvcihjb25zdCBvIG9mIG4pdHlwZW9mIG89PSJudW1iZXIiP3QucHVzaChgWyR7b31dYCk6dHlwZW9mIG89PSJzeW1ib2wiP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKG8pKX1dYCk6L1teXHckXS8udGVzdChvKT90LnB1c2goYFske0pTT04uc3RyaW5naWZ5KG8pfV1gKToodC5sZW5ndGgmJnQucHVzaCgiLiIpLHQucHVzaChvKSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gVHMoZSl7Y29uc3QgdD1bXSxuPVsuLi5lLmlzc3Vlc10uc29ydCgobyxyKT0+KG8ucGF0aD8/W10pLmxlbmd0aC0oci5wYXRoPz9bXSkubGVuZ3RoKTtmb3IoY29uc3QgbyBvZiBuKXQucHVzaChg4pyWICR7by5tZXNzYWdlfWApLG8ucGF0aD8ubGVuZ3RoJiZ0LnB1c2goYCAg4oaSIGF0ICR7dGwoby5wYXRoKX1gKTtyZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gTW8oZSx0KXtyZXR1cm57Y2FsbGVlOnQ/LmNhbGxlZT8/ZSxFcnI6dD8uRXJyfX1jb25zdCBHdD1lPT57Y29uc3QgdD0obixvLHIscyk9Pntjb25zdCBpPXI/ey4uLnIsYXN5bmM6ITF9Onthc3luYzohMX0sYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFplO2lmKGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgdT1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAobD0+eWUobCxpLFEoKSkpKTt0aHJvdyB5cyh1LHM/LmNhbGxlZT8/dCksdX1yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LHNzPUd0KGZlKSxRdD1lPT57Y29uc3QgdD1hc3luYyhuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgYT1uLl96b2QucnVuKHt2YWx1ZTpvLGlzc3VlczpbXX0saSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UmJihhPWF3YWl0IGEpLGEuaXNzdWVzLmxlbmd0aCl7Y29uc3QgdT1uZXcocz8uRXJyPz9lKShhLmlzc3Vlcy5tYXAobD0+eWUobCxpLFEoKSkpKTt0aHJvdyB5cyh1LHM/LmNhbGxlZT8/dCksdX1yZXR1cm4gYS52YWx1ZX07cmV0dXJuIHR9LGlzPVF0KGZlKSxZdD1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiExfTp7YXN5bmM6ITF9LHM9dC5fem9kLnJ1bih7dmFsdWU6bixpc3N1ZXM6W119LHIpO2lmKHMgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBaZTtyZXR1cm4gcy5pc3N1ZXMubGVuZ3RoP29sKGUscy5pc3N1ZXMscik6e3N1Y2Nlc3M6ITAsZGF0YTpzLnZhbHVlfX0sbmw9WXQoZmUpO2Z1bmN0aW9uIG9sKGUsdCxuKXtsZXQgbztyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtyZXR1cm4gb3x8KG89bmV3IGUodC5tYXAocj0+eWUocixuLFEoKSkpKSx0PXZvaWQgMCxuPXZvaWQgMCksb30sc2V0IGVycm9yKHIpe289cix0PXZvaWQgMCxuPXZvaWQgMH19fWNvbnN0IFh0PWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxhc3luYzohMH06e2FzeW5jOiEwfTtsZXQgcz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlJiYocz1hd2FpdCBzKSxzLmlzc3Vlcy5sZW5ndGg/b2woZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSxLZj1YdChmZSksV2Y9U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuaW52YWxpZCIpLEdmPVN5bWJvbC5mb3IoInpvZC5jb21waWxlLmZhbGxiYWNrIikscW89KChlLHQsbik9Pntjb25zdCBvPWUuX3pvZC5iYWcudmFsaWRhdG9yO2lmKG8hPT12b2lkIDApe2lmKG8odCkhPT1XZilyZXR1cm4hMDtpZihvLmRlZmluaXRlPT09ITAmJm49PT12b2lkIDApcmV0dXJuITF9cmV0dXJuIFFmKGUsdCxuKX0pO2Z1bmN0aW9uIFFmKGUsdCxuKXtjb25zdCBvPW4/ey4uLm4sYXN5bmM6ITEsYWJvcnRFYXJseTohMH06e2FzeW5jOiExLGFib3J0RWFybHk6ITB9LHI9ZS5fem9kLmJhZy5mYWxsYmFja1J1bjtsZXQgcztpZihyPyhvW0dmXT0hMCxzPXIoe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSk6cz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbykscyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IFplO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg9PT0wfWNvbnN0IERvPWFzeW5jKGUsdCxuKT0+e2NvbnN0IG89bj97Li4ubixhc3luYzohMCxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITAsYWJvcnRFYXJseTohMH07bGV0IHI9ZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZSYmKHI9YXdhaXQgciksci5pc3N1ZXMubGVuZ3RoPT09MH0sSXM9ZT0+e2NvbnN0IHQ9R3QoZSksbj0obyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIHQobyxyLGEsTW8obixpKSl9O3JldHVybiBufSxZZj1JcyhmZSksUHM9ZT0+e2NvbnN0IHQ9R3QoZSksbj0obyxyLHMsaSk9PnQobyxyLHMsTW8obixpKSk7cmV0dXJuIG59LFhmPVBzKGZlKSx4cz1lPT57Y29uc3QgdD1RdChlKSxuPWFzeW5jKG8scixzLGkpPT57Y29uc3QgYT1zP3suLi5zLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBhd2FpdCB0KG8scixhLE1vKG4saSkpfTtyZXR1cm4gbn0sZW09eHMoZmUpLENzPWU9Pntjb25zdCB0PVF0KGUpLG49YXN5bmMobyxyLHMsaSk9PmF3YWl0IHQobyxyLHMsTW8obixpKSk7cmV0dXJuIG59LHRtPUNzKGZlKSxFcz1lPT4odCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBZdChlKSh0LG4scil9LG5tPUVzKGZlKSxPcz1lPT4odCxuLG8pPT5ZdChlKSh0LG4sbyksb209T3MoZmUpLEFzPWU9PmFzeW5jKHQsbixvKT0+e2NvbnN0IHI9bz97Li4ubyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gWHQoZSkodCxuLHIpfSxybT1BcyhmZSksUnM9ZT0+YXN5bmModCxuLG8pPT5YdChlKSh0LG4sbyksc209UnMoZmUpLHJsPS9eW2NDXVswLTlhLXpdezYsfSQvLHNsPS9eWzAtOWEtel0rJC8saWw9L15bMC03XVswLTlBLUhKS01OUC1UVi1aYS1oamttbnAtdHYtel17MjV9JC8sYWw9L15bMC05YS12QS1WXXsyMH0kLyxjbD0vXltBLVphLXowLTldezI3fSQvLHVsPS9eW2EtekEtWjAtOV8tXXsyMX0kLztmdW5jdGlvbiBsbChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXlthLXpBLVowLTlfLV17JHtlfX0kYCl9Y29uc3QgZGw9L15QKD86KFxkK1cpfCg/IS4qVykoPz1cZHxUXGQpKFxkK1kpPyhcZCtNKT8oXGQrRCk/KFQoPz1cZCkoXGQrSCk/KFxkK00pPyhcZCsoWy4sXVxkKyk/Uyk/KT8pJC8saW09L15bLStdP1AoPyEkKSg/Oig/OlstK10/XGQrWSl8KD86Wy0rXT9cZCtbLixdXGQrWSQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86KD86Wy0rXT9cZCtXKXwoPzpbLStdP1xkK1suLF1cZCtXJCkpPyg/Oig/OlstK10/XGQrRCl8KD86Wy0rXT9cZCtbLixdXGQrRCQpKT8oPzpUKD89W1xkKy1dKSg/Oig/OlstK10/XGQrSCl8KD86Wy0rXT9cZCtbLixdXGQrSCQpKT8oPzooPzpbLStdP1xkK00pfCg/OlstK10/XGQrWy4sXVxkK00kKSk/KD86Wy0rXT9cZCsoPzpbLixdXGQrKT9TKT8pPz8kLyxwbD0vXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC8sYXQ9ZT0+ZT9uZXcgUmVnRXhwKGBeKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LSR7ZX1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSkkYCk6L14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtOF1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvLGFtPWF0KDQpLGNtPWF0KDYpLHVtPWF0KDcpLGhsPS9eKD86W0EtWmEtejAtOV8nK1wtXStcLikqW0EtWmEtejAtOV8nK1wtXSpbQS1aYS16MC05XystXUAoPzpbQS1aYS16MC05XVtBLVphLXowLTlcLV0qXC4pK1tBLVphLXpdezIsfSQvLGxtPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLGRtPS9eKChbXjw+KClcW1xdXFwuLDs6XHNAIl0rKFwuW148PigpXFtcXVxcLiw7OlxzQCJdKykqKXwoIi4rIikpQCgoXFtbMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XC5bMC05XXsxLDN9XSl8KChbYS16QS1aXC0wLTldK1wuKStbYS16QS1aXXsyLH0pKSQvLGZsPS9eW15cc0AiXXsxLDY0fUBbXlxzQF17MSwyNTV9JC91LHBtPWZsLGhtPS9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLGZtPSJeKD89W1xcc1xcU10qW1xccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XFxwe1JlZ2lvbmFsX0luZGljYXRvcn1cXHUyMEUzXSlbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7RW1vamlfQ29tcG9uZW50fV0rJCI7ZnVuY3Rpb24gbWwoKXtyZXR1cm4gbmV3IFJlZ0V4cChmbSwidSIpfWNvbnN0IGdsPS9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLyxibD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvLHZsPWU9Pntjb25zdCB0PUllKGU/PyI6Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oPzpbMC05QS1GXXsyfSR7dH0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7dH0pezV9WzAtOWEtZl17Mn0kYCl9LHlsPS9eKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLyhbMC05XXxbMS0yXVswLTldfDNbMC0yXSkkLyxfbD0vXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKVwvKDEyWzAtOF18MVswMV1bMC05XXxbMS05XT9bMC05XSkkLyxtbT0vXiR8Xig/OlswLTlhLXpBLVorL117NH0pKig/Oig/OlswLTlhLXpBLVorL117Mn09PSl8KD86WzAtOWEtekEtWisvXXszfT0pKT8kLyxnbT0vXig/OltBLVphLXowLTlfLV17NH0pKig/OltBLVphLXowLTlfLV17MiwzfSk/JC8sa2w9L14oPz0uezEsMjUzfVwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlstMC05YS16QS1aXXswLDYxfVswLTlhLXpBLVpdKT8pKlwuPyQvLHdsPS9eKD89LnsxLDI1M30kKShbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT9cLikrW2EtekEtWl17Miw2M30kLyxacz0vXmh0dHBzPyQvLCRsPS9eXCtbMS05XVxkezYsMTR9JC8sTnM9L15cZCg/OlsgLV0/XGQpezExLDE4fSQvLFNsPS9eKD86QUVEfEFGTnxBTEx8QU1EfEFPQXxBUlN8QVVEfEFXR3xBWk58QkFNfEJCRHxCRFR8QkhEfEJJRnxCTUR8Qk5EfEJPQnxCT1Z8QlJMfEJTRHxCVE58QldQfEJZTnxCWkR8Q0FEfENERnxDSEV8Q0hGfENIV3xDTEZ8Q0xQfENOWXxDT1B8Q09VfENSQ3xDVVB8Q1ZFfENaS3xESkZ8REtLfERPUHxEWkR8RUdQfEVSTnxFVEJ8RVVSfEZKRHxGS1B8R0JQfEdFTHxHSFN8R0lQfEdNRHxHTkZ8R1RRfEdZRHxIS0R8SE5MfEhUR3xIVUZ8SURSfElMU3xJTlJ8SVFEfElSUnxJU0t8Sk1EfEpPRHxKUFl8S0VTfEtHU3xLSFJ8S01GfEtQV3xLUld8S1dEfEtZRHxLWlR8TEFLfExCUHxMS1J8TFJEfExTTHxMWUR8TUFEfE1ETHxNR0F8TUtEfE1NS3xNTlR8TU9QfE1SVXxNVVJ8TVZSfE1XS3xNWE58TVhWfE1ZUnxNWk58TkFEfE5HTnxOSU98Tk9LfE5QUnxOWkR8T01SfFBBQnxQRU58UEdLfFBIUHxQS1J8UExOfFBZR3xRQVJ8Uk9OfFJTRHxSVUJ8UldGfFNBUnxTQkR8U0NSfFNER3xTRUt8U0dEfFNIUHxTTEV8U09TfFNSRHxTU1B8U1ROfFNWQ3xTWVB8U1pMfFRIQnxUSlN8VE1UfFRORHxUT1B8VFJZfFRURHxUV0R8VFpTfFVBSHxVR1h8VVNEfFVTTnxVWUl8VVlVfFVZV3xVWlN8VkVEfFZFU3xWTkR8VlVWfFdTVHxYQUR8WEFGfFhBR3xYQVV8WEJBfFhCQnxYQkN8WEJEfFhDRHxYQ0d8WERSfFhPRnxYUER8WFBGfFhQVHxYU1V8WFRTfFhVQXxYWFh8WUVSfFpBUnxaTVd8WldHKSQvLGpzPS9eW0EtWl17Mn0oPyEwMHwwMXw5OSlcZHsyfVtBLVowLTldezExLDMwfSQvLHpsPSIoPzooPzpcXGRcXGRbMjQ2OF1bMDQ4XXxcXGRcXGRbMTM1NzldWzI2XXxcXGRcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXGR7NH0tKD86KD86MFsxMzU3OF18MVswMl0pLSg/OjBbMS05XXxbMTJdXFxkfDNbMDFdKXwoPzowWzQ2OV18MTEpLSg/OjBbMS05XXxbMTJdXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXGR8MlswLThdKSkpIjtmdW5jdGlvbiBibShlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7ZX0kYCl9Y29uc3QgVGw9Ym0oemwpO2Z1bmN0aW9uIGFzKGUpe2NvbnN0IHQ9Iig/OlswMV1cXGR8MlswLTNdKTpbMC01XVxcZCI7cmV0dXJuIHR5cGVvZiBlLnByZWNpc2lvbj09Im51bWJlciI/ZS5wcmVjaXNpb249PT0tMT9gJHt0fWA6ZS5wcmVjaXNpb249PT0wP2Ake3R9OlswLTVdXFxkYDpgJHt0fTpbMC01XVxcZFxcLlxcZHske2UucHJlY2lzaW9ufX1gOmUuc2Vjb25kcz9gJHt0fTpbMC01XVxcZCg/OlxcLlxcZCspP2A6YCR7dH0oPzo6WzAtNV1cXGQoPzpcXC5cXGQrKT8pP2B9ZnVuY3Rpb24gSWwoZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke2FzKGUpfSRgKX1mdW5jdGlvbiBQbChlKXtjb25zdCB0PVsiWiJdO2Uub2Zmc2V0JiZ0LnB1c2goIihbKy1dKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkKSIpO2NvbnN0IG49YCR7YXMoe3ByZWNpc2lvbjplLnByZWNpc2lvbixzZWNvbmRzOiEwfSl9KD86JHt0LmpvaW4oInwiKX0pYCxvPWUubG9jYWw/YCR7bn18JHthcyh7cHJlY2lzaW9uOmUucHJlY2lzaW9ufSl9YDpuO3JldHVybiBuZXcgUmVnRXhwKGBeJHt6bH1UKD86JHtvfSkkYCl9Y29uc3QgeGw9L15bXHNcU117MCx9JC8sQ2w9ZT0+e2NvbnN0IHQ9ZT9gW1xcc1xcU117JHtlPy5taW5pbXVtPz8wfSwke2U/Lm1heGltdW0/PyIifX1gOiJbXFxzXFxTXSoiO3JldHVybiBuZXcgUmVnRXhwKGBeJHt0fSRgKX0sRWw9L14tP1xkK24/JC8sT2w9L14tP1xkKyQvLExvPS9eLT9cZCsoPzpcLlxkKyk/JC8sQWw9L14oPzp0cnVlfGZhbHNlKSQvaSxSbD0vXm51bGwkL2ksWmw9L151bmRlZmluZWQkL2ksTmw9L15bXkEtWl0qJC8samw9L15bXmEtel0qJC8sTWw9L15bMC05YS1mQS1GXSokLztmdW5jdGlvbiBlbihlLHQpe3JldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2V9fSR7dH0kYCl9ZnVuY3Rpb24gdG4oZSl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Xy1deyR7ZX19JGApfWNvbnN0IHZtPS9eWzAtOWEtZkEtRl17MzJ9JC8seW09ZW4oMjIsIj09IiksX209dG4oMjIpLGttPS9eWzAtOWEtZkEtRl17NDB9JC8sd209ZW4oMjcsIj0iKSwkbT10bigyNyksU209L15bMC05YS1mQS1GXXs2NH0kLyx6bT1lbig0MywiPSIpLFRtPXRuKDQzKSxJbT0vXlswLTlhLWZBLUZdezk2fSQvLFBtPWVuKDY0LCIiKSx4bT10big2NCksQ209L15bMC05YS1mQS1GXXsxMjh9JC8sRW09ZW4oODYsIj09IiksT209dG4oODYpLFVvPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxhbnlTdHJpbmc6eGwsYmFzZTY0Om1tLGJhc2U2NHVybDpnbSxiaWdpbnQ6RWwsYm9vbGVhbjpBbCxicm93c2VyRW1haWw6aG0sY2lkcnY0OnlsLGNpZHJ2NjpfbCxjcmVkaXRDYXJkOk5zLGN1aWQ6cmwsY3VpZDI6c2wsY3VycmVuY3lDb2RlOlNsLGRhdGU6VGwsZGF0ZXRpbWU6UGwsZG9tYWluOndsLGR1cmF0aW9uOmRsLGUxNjQ6JGwsZW1haWw6aGwsZW1vamk6bWwsZXh0ZW5kZWREdXJhdGlvbjppbSxndWlkOnBsLGhleDpNbCxob3N0bmFtZTprbCxodG1sNUVtYWlsOmxtLGh0dHBQcm90b2NvbDpacyxpYmFuOmpzLGlkbkVtYWlsOnBtLGludGVnZXI6T2wsaXB2NDpnbCxpcHY2OmJsLGtzdWlkOmNsLGxvd2VyY2FzZTpObCxtYWM6dmwsbWQ1X2Jhc2U2NDp5bSxtZDVfYmFzZTY0dXJsOl9tLG1kNV9oZXg6dm0sbmFub2lkOnVsLG5hbm9pZE9mTGVuZ3RoOmxsLG51bGw6UmwsbnVtYmVyOkxvLHJmYzUzMjJFbWFpbDpkbSxzaGExX2Jhc2U2NDp3bSxzaGExX2Jhc2U2NHVybDokbSxzaGExX2hleDprbSxzaGEyNTZfYmFzZTY0OnptLHNoYTI1Nl9iYXNlNjR1cmw6VG0sc2hhMjU2X2hleDpTbSxzaGEzODRfYmFzZTY0OlBtLHNoYTM4NF9iYXNlNjR1cmw6eG0sc2hhMzg0X2hleDpJbSxzaGE1MTJfYmFzZTY0OkVtLHNoYTUxMl9iYXNlNjR1cmw6T20sc2hhNTEyX2hleDpDbSxzdHJpbmc6Q2wsdGltZTpJbCx1bGlkOmlsLHVuZGVmaW5lZDpabCx1bmljb2RlRW1haWw6ZmwsdXBwZXJjYXNlOmpsLHV1aWQ6YXQsdXVpZDQ6YW0sdXVpZDY6Y20sdXVpZDc6dW0seGlkOmFsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLFY9cCgiJFpvZENoZWNrIiwoZSx0KT0+e3ZhciBuO2UuX3pvZD8/KGUuX3pvZD17fSksZS5fem9kLmRlZj10LChuPWUuX3pvZCkub25hdHRhY2g/PyhuLm9uYXR0YWNoPVtdKX0pLE1zPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIXZzKHQpJiZ0LnNpemUhPT12b2lkIDB9LHFzPWU9Pntjb25zdCB0PWUudmFsdWU7cmV0dXJuIXZzKHQpJiZ0Lmxlbmd0aCE9PXZvaWQgMH0sbW89e251bWJlcjoibnVtYmVyIixiaWdpbnQ6ImJpZ2ludCIsb2JqZWN0OiJkYXRlIn0sRHM9cCgiJFpvZENoZWNrTGVzc1RoYW4iLChlLHQpPT57Vi5pbml0KGUsdCk7Y29uc3Qgbj1tb1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZTw9dC52YWx1ZTpvLnZhbHVlPHQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46bW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19iaWciLG1heGltdW06dHlwZW9mIHQudmFsdWU9PSJvYmplY3QiP3QudmFsdWUuZ2V0VGltZSgpOnQudmFsdWUsaW5wdXQ6by52YWx1ZSxpbmNsdXNpdmU6dC5pbmNsdXNpdmUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksTHM9cCgiJFpvZENoZWNrR3JlYXRlclRoYW4iLChlLHQpPT57Vi5pbml0KGUsdCk7Y29uc3Qgbj1tb1t0eXBlb2YgdC52YWx1ZV07ZS5fem9kLmNoZWNrPW89PnsodC5pbmNsdXNpdmU/by52YWx1ZT49dC52YWx1ZTpvLnZhbHVlPnQudmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46bW9bdHlwZW9mIG8udmFsdWVdPz9uLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxxbD1wKCIkWm9kQ2hlY2tNdWx0aXBsZU9mIiwoZSx0KT0+e1YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57aWYodHlwZW9mIG4udmFsdWUhPXR5cGVvZiB0LnZhbHVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay4iKTsodHlwZW9mIG4udmFsdWU9PSJiaWdpbnQiP3QudmFsdWUhPT1CaWdJbnQoMCkmJm4udmFsdWUldC52YWx1ZT09PUJpZ0ludCgwKTpQdShuLnZhbHVlLHQudmFsdWUpPT09MCl8fG4uaXNzdWVzLnB1c2goe29yaWdpbjp0eXBlb2Ygbi52YWx1ZSxjb2RlOiJub3RfbXVsdGlwbGVfb2YiLGRpdmlzb3I6dC52YWx1ZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLERsPXAoIiRab2RDaGVja051bWJlckZvcm1hdCIsKGUsdCk9PntWLmluaXQoZSx0KSx0LmZvcm1hdD10LmZvcm1hdHx8ImZsb2F0NjQiO2NvbnN0IG49dC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxvPW4/ImludCI6Im51bWJlciIsW3Isc109anVbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1pPT57Y29uc3QgYT1pLnZhbHVlO2lmKG4pe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXtpLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDpvLGZvcm1hdDp0LmZvcm1hdCxjb2RlOiJpbnZhbGlkX3R5cGUiLGNvbnRpbnVlOiExLGlucHV0OmEsaW5zdDplfSk7cmV0dXJufWlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhKSl7YT4wP2kuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixub3RlOiJJbnRlZ2VycyBtdXN0IGJlIHdpdGhpbiB0aGUgc2FmZSBpbnRlZ2VyIHJhbmdlLiIsaW5zdDplLG9yaWdpbjpvLGluY2x1c2l2ZTohMCxjb250aW51ZTohdC5hYm9ydH0pOmkuaXNzdWVzLnB1c2goe2lucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufX1hPHImJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTpyLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSxhPnMmJmkuaXNzdWVzLnB1c2goe29yaWdpbjoibnVtYmVyIixpbnB1dDphLGNvZGU6InRvb19iaWciLG1heGltdW06cyxpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksTGw9cCgiJFpvZENoZWNrQmlnSW50Rm9ybWF0IiwoZSx0KT0+e1YuaW5pdChlLHQpO2NvbnN0W24sb109TXVbdC5mb3JtYXRdO2UuX3pvZC5jaGVjaz1yPT57Y29uc3Qgcz1yLnZhbHVlO3M8biYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOm4saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLHM+byYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJiaWdpbnQiLGlucHV0OnMsY29kZToidG9vX2JpZyIsbWF4aW11bTpvLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxVbD1wKCIkWm9kQ2hlY2tNYXhTaXplIiwoZSx0KT0+e3ZhciBuO1YuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49TXMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZTw9dC5tYXhpbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46RW8ociksY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksSGw9cCgiJFpvZENoZWNrTWluU2l6ZSIsKGUsdCk9Pnt2YXIgbjtWLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPU1zKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZTtyLnNpemU+PXQubWluaW11bXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOkVvKHIpLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pbmltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksQmw9cCgiJFpvZENoZWNrU2l6ZUVxdWFscyIsKGUsdCk9Pnt2YXIgbjtWLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPU1zKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIuc2l6ZTtpZihzPT09dC5zaXplKXJldHVybjtjb25zdCBpPXM+dC5zaXplO28uaXNzdWVzLnB1c2goe29yaWdpbjpFbyhyKSwuLi5pP3tjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQuc2l6ZX06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0LnNpemV9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEZsPXAoIiRab2RDaGVja01heExlbmd0aCIsKGUsdCk9Pnt2YXIgbjtWLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPXFzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoO2lmKCh0eXBlb2Ygcj09InN0cmluZyImJnM+dC5tYXhpbXVtP09vKHIpOnMpPD10Lm1heGltdW0pcmV0dXJuO2NvbnN0IGE9QW8ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heGltdW0saW5jbHVzaXZlOiEwLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksVmw9cCgiJFpvZENoZWNrTWluTGVuZ3RoIiwoZSx0KT0+e3ZhciBuO1YuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49cXMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5taW5pbXVtJiZzPHQubWluaW11bSoyP09vKHIpOnMpPj10Lm1pbmltdW0pcmV0dXJuO2NvbnN0IGE9QW8ocik7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxKbD1wKCIkWm9kQ2hlY2tMZW5ndGhFcXVhbHMiLChlLHQpPT57dmFyIG47Vi5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1xcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aCxpPXR5cGVvZiByPT0ic3RyaW5nIiYmcz49dC5sZW5ndGgmJnM8PXQubGVuZ3RoKjI/T28ocik6cztpZihpPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9QW8ociksdT1pPnQubGVuZ3RoO28uaXNzdWVzLnB1c2goe29yaWdpbjphLC4uLnU/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5sZW5ndGh9Ontjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5sZW5ndGh9LGluY2x1c2l2ZTohMCxleGFjdDohMCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG5uPXAoIiRab2RDaGVja1N0cmluZ0Zvcm1hdCIsKGUsdCk9Pnt2YXIgbixvO1YuaW5pdChlLHQpLHQucGF0dGVybj8obj1lLl96b2QpLmNoZWNrPz8obi5jaGVjaz1yPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChyLnZhbHVlKSYmci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQsaW5wdXQ6ci52YWx1ZSwuLi50LnBhdHRlcm4/e3BhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCl9Ont9LGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfSk6KG89ZS5fem9kKS5jaGVjaz8/KG8uY2hlY2s9KCk9Pnt9KX0pLEtsPXAoIiRab2RDaGVja1JlZ2V4IiwoZSx0KT0+e25uLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3QucGF0dGVybi5sYXN0SW5kZXg9MCwhdC5wYXR0ZXJuLnRlc3Qobi52YWx1ZSkmJm4uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsaW5wdXQ6bi52YWx1ZSxwYXR0ZXJuOnQucGF0dGVybi50b1N0cmluZygpLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFdsPXAoIiRab2RDaGVja0xvd2VyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TmwpLG5uLmluaXQoZSx0KX0pLEdsPXAoIiRab2RDaGVja1VwcGVyQ2FzZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49amwpLG5uLmluaXQoZSx0KX0pLFFsPXAoIiRab2RDaGVja0luY2x1ZGVzIiwoZSx0KT0+e1YuaW5pdChlLHQpO2NvbnN0IG49SWUodC5pbmNsdWRlcyksbz1uZXcgUmVnRXhwKHR5cGVvZiB0LnBvc2l0aW9uPT0ibnVtYmVyIj9gXi57JHt0LnBvc2l0aW9ufSx9JHtufWA6bik7dC5wYXR0ZXJuPW8sZS5fem9kLmNoZWNrPXI9PntyLnZhbHVlLmluY2x1ZGVzKHQuaW5jbHVkZXMsdC5wb3NpdGlvbil8fHIuaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJpbmNsdWRlcyIsaW5jbHVkZXM6dC5pbmNsdWRlcyxpbnB1dDpyLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFlsPXAoIiRab2RDaGVja1N0YXJ0c1dpdGgiLChlLHQpPT57Vi5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGBeJHtJZSh0LnByZWZpeCl9LipgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLnN0YXJ0c1dpdGgodC5wcmVmaXgpfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLHByZWZpeDp0LnByZWZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLFhsPXAoIiRab2RDaGVja0VuZHNXaXRoIiwoZSx0KT0+e1YuaW5pdChlLHQpO2NvbnN0IG49bmV3IFJlZ0V4cChgLioke0llKHQuc3VmZml4KX0kYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPW4pLGUuX3pvZC5jaGVjaz1vPT57by52YWx1ZS5lbmRzV2l0aCh0LnN1ZmZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLHN1ZmZpeDp0LnN1ZmZpeCxpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIGdvKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZ2UobixlLmlzc3VlcykpfWNvbnN0IGVkPXAoIiRab2RDaGVja1Byb3BlcnR5IiwoZSx0KT0+e1YuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz10LnNjaGVtYS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZVt0LnByb3BlcnR5XSxpc3N1ZXM6W119LHt9KTtpZihvIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gby50aGVuKHI9PmdvKHIsbix0LnByb3BlcnR5KSk7Z28obyxuLHQucHJvcGVydHkpfX0pLHRkPXAoIiRab2RDaGVja1Byb3BlcnRpZXMiLChlLHQpPT57Vi5pbml0KGUsdCksUm8oZSxTeW1ib2wuaXRlcmF0b3IsZnVuY3Rpb24qKCl7eWllbGQgZX0pO2xldCBuO2UuX3pvZC5jaGVjaz1vPT57aWYoby52YWx1ZT09bnVsbCl7by5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im9iamVjdCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpvLnZhbHVlLGluc3Q6ZX0pO3JldHVybn1uPz8obj1SZWZsZWN0Lm93bktleXModC5zaGFwZSkubWFwKGk9PltpLHQuc2hhcGVbaV1dKSk7Y29uc3Qgcj1vLnZhbHVlO2xldCBzO2Zvcihjb25zdFtpLGFdb2Ygbil7Y29uc3QgdT1hLl96b2QucnVuKHt2YWx1ZTpyW2ldLGlzc3VlczpbXX0se30pO3UgaW5zdGFuY2VvZiBQcm9taXNlPyhzPz8ocz1bXSkscy5wdXNoKHUudGhlbihsPT5nbyhsLG8saSkpKSk6Z28odSxvLGkpfWlmKHMpcmV0dXJuIFByb21pc2UuYWxsKHMpLnRoZW4oKCk9Pnt9KX19KSxuZD1wKCIkWm9kQ2hlY2tNaW1lVHlwZSIsKGUsdCk9PntWLmluaXQoZSx0KTtjb25zdCBuPW5ldyBTZXQodC5taW1lKTtlLl96b2QuY2hlY2s9bz0+e24uaGFzKG8udmFsdWUudHlwZSl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0Lm1pbWUsaW5wdXQ6by52YWx1ZS50eXBlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLG9kPXAoIiRab2RDaGVja092ZXJ3cml0ZSIsKGUsdCk9PntWLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e24udmFsdWU9dC50eChuLnZhbHVlKX19KTtjbGFzcyByZHtjb25zdHJ1Y3Rvcih0PVtdLG49e30pe3RoaXMuY29udGVudD1bXSx0aGlzLmluZGVudD0wLHRoaXMuYXJncz10LHRoaXMuY2xvc2VkPW59aW5kZW50ZWQodCl7dGhpcy5pbmRlbnQrPTE7dHJ5e3QodGhpcyl9ZmluYWxseXt0aGlzLmluZGVudC09MX19d3JpdGUodCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpe3QodGhpcyx7ZXhlY3V0aW9uOiJzeW5jIn0pLHQodGhpcyx7ZXhlY3V0aW9uOiJhc3luYyJ9KTtyZXR1cm59Y29uc3Qgbz10LnNwbGl0KGAKYCkuZmlsdGVyKGk9PmkpLHI9TWF0aC5taW4oLi4uby5tYXAoaT0+aS5sZW5ndGgtaS50cmltU3RhcnQoKS5sZW5ndGgpKSxzPW8ubWFwKGk9Pmkuc2xpY2UocikpLm1hcChpPT4iICIucmVwZWF0KHRoaXMuaW5kZW50KjIpK2kpO2Zvcihjb25zdCBpIG9mIHMpdGhpcy5jb250ZW50LnB1c2goaSl9Y29tcGlsZSgpe2NvbnN0IHQ9RnVuY3Rpb24sbj10aGlzPy5jb250ZW50Pz9bIiJdO3JldHVybiBuZXcgdCguLi5PYmplY3Qua2V5cyh0aGlzLmNsb3NlZCksYHJldHVybiBmdW5jdGlvbiAoJHt0aGlzLmFyZ3Muam9pbigiLCAiKX0pIHsKJHtuLmpvaW4oYApgKX0KfTtgKSguLi5PYmplY3QudmFsdWVzKHRoaXMuY2xvc2VkKSl9fWNvbnN0IHNkPXttYWpvcjo0LG1pbm9yOjYscGF0Y2g6NX0seD1wKCIkWm9kVHlwZSIsKGUsdCk9Pnt2YXIgbjtlPz8oZT17fSksZS5fem9kLmRlZj10LGUuX3pvZC5iYWc9ZS5fem9kLmJhZ3x8e30sZS5fem9kLnZlcnNpb249c2Q7Y29uc3Qgbz1lLl96b2QuZGVmLmNoZWNrcyxyPWUuX3pvZC50cmFpdHMuaGFzKCIkWm9kQ2hlY2siKT9bZSwuLi5vPz9bXV06bz8ubGVuZ3RoP1suLi5vXTpbXTtmb3IoY29uc3QgcyBvZiByKWZvcihjb25zdCBpIG9mIHMuX3pvZC5vbmF0dGFjaClpKGUpO2lmKHIubGVuZ3RoPT09MCkobj1lLl96b2QpLmRlZmVycmVkPz8obi5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkPy5wdXNoKCgpPT57ZS5fem9kLnJ1bj1lLl96b2QucGFyc2V9KTtlbHNle2NvbnN0IHM9KGEsdSxsKT0+e2lmKGEubWVtbylyZXR1cm4gYTtsZXQgZD11ZShhKSxtO2Zvcihjb25zdCBiIG9mIHUpe2lmKGIuX3pvZC5kZWYud2hlbil7aWYoVnUoYSl8fCFiLl96b2QuZGVmLndoZW4oYSkpY29udGludWV9ZWxzZSBpZihkKWNvbnRpbnVlO2NvbnN0IHY9YS5pc3N1ZXMubGVuZ3RoLF89Yi5fem9kLmNoZWNrKGEpO2lmKF8gaW5zdGFuY2VvZiBQcm9taXNlJiZsPy5hc3luYz09PSExKXRocm93IG5ldyBaZTtpZihtfHxfIGluc3RhbmNlb2YgUHJvbWlzZSltPShtPz9Qcm9taXNlLnJlc29sdmUoKSkudGhlbihhc3luYygpPT57YXdhaXQgXyxhLmlzc3Vlcy5sZW5ndGghPT12JiYocnMoYS5pc3N1ZXMsdixlKSxkfHwoZD11ZShhLHYpKSl9KTtlbHNle2lmKGEuaXNzdWVzLmxlbmd0aD09PXYpY29udGludWU7cnMoYS5pc3N1ZXMsdixlKSxkfHwoZD11ZShhLHYpKX19cmV0dXJuIG0/bS50aGVuKCgpPT5hKTphfSxpPShhLHUsbCk9PntpZih1ZShhKSlyZXR1cm4gYS5hYm9ydGVkPSEwLGE7Y29uc3QgZD1zKHUscixsKTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYobC5hc3luYz09PSExKXRocm93IG5ldyBaZTtyZXR1cm4gZC50aGVuKG09PmUuX3pvZC5wYXJzZShtLGwpKX1yZXR1cm4gZS5fem9kLnBhcnNlKGQsbCl9O2UuX3pvZC5ydW49KGEsdSk9PntpZih1LnNraXBDaGVja3MpcmV0dXJuIGUuX3pvZC5wYXJzZShhLHUpO2lmKHUuZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3QgZD1lLl96b2QucGFyc2Uoe3ZhbHVlOmEudmFsdWUsaXNzdWVzOltdfSx7Li4udSxza2lwQ2hlY2tzOiEwfSk7cmV0dXJuIGQgaW5zdGFuY2VvZiBQcm9taXNlP2QudGhlbihtPT5pKG0sYSx1KSk6aShkLGEsdSl9Y29uc3QgbD1lLl96b2QucGFyc2UoYSx1KTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl7aWYodS5hc3luYz09PSExKXRocm93IG5ldyBaZTtyZXR1cm4gbC50aGVuKGQ9PnMoZCxyLHUpKX1yZXR1cm4gcyhsLHIsdSl9fX0se2dldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIFJvKHRoaXMsIn5zdGFuZGFyZCIsVXModGhpcykpfSxzZXQifnN0YW5kYXJkIihlKXtQZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfX0pLGlkPShlLHQpPT5lLmlzc3Vlcy5sZW5ndGg/e2lzc3VlczplLmlzc3Vlcy5tYXAobj0+eWUobix0LFEoKSkpfTp7dmFsdWU6ZS52YWx1ZX07YXN5bmMgZnVuY3Rpb24gQW0oZSx0KXtjb25zdCBuPXthc3luYzohMH07cmV0dXJuIGlkKGF3YWl0IGUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKSxuKX1mdW5jdGlvbiBVcyhlKXtyZXR1cm57dmFsaWRhdGU6dD0+e2NvbnN0IG49e2FzeW5jOiExfTt0cnl7Y29uc3Qgbz1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbik7aWYoIShvIGluc3RhbmNlb2YgUHJvbWlzZSkpcmV0dXJuIGlkKG8sbil9Y2F0Y2h7fXJldHVybiBBbShlLHQpfSx2ZW5kb3I6InpvZCIsdmVyc2lvbjoxfX1jb25zdCBvbj1wKCIkWm9kU3RyaW5nIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPXQucGF0dGVybj8/eGwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9U3RyaW5nKG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJzdHJpbmcifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxIPXAoIiRab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57bm4uaW5pdChlLHQpLG9uLmluaXQoZSx0KX0pLGFkPXAoIiRab2RHVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1wbCksSC5pbml0KGUsdCl9KSxjZD1wKCIkWm9kVVVJRCIsKGUsdCk9PntpZih0LnZlcnNpb24pe2NvbnN0IG89e3YxOjEsdjI6Mix2MzozLHY0OjQsdjU6NSx2Njo2LHY3Ojcsdjg6OH1bdC52ZXJzaW9uXTtpZihvPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246ICIke3QudmVyc2lvbn0iYCk7dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWF0KG8pKX1lbHNlIHQucGF0dGVybj8/KHQucGF0dGVybj1hdCgpKTtILmluaXQoZSx0KX0pLHVkPXAoIiRab2RFbWFpbCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49aGwpLEguaW5pdChlLHQpfSksSHM9MSxVdD0yO2Z1bmN0aW9uIEJzKGUpe3RyeXtyZXR1cm4gdHlwZW9mIFVSTDwidSImJnR5cGVvZiBVUkwuY2FuUGFyc2U9PSJmdW5jdGlvbiI/VVJMLmNhblBhcnNlKGUpOihuZXcgVVJMKGUpLCEwKX1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gbGQoZSx0KXtyZXR1cm4hKCJub3JtYWxpemUiaW4gdCkmJiEoImhvc3RuYW1lImluIHQpJiYhKCJwcm90b2NvbCJpbiB0KT9CcyhlKXx8VXQ6ZGQoZSx0KX1mdW5jdGlvbiBkZChlLHQpe2lmKCF0Lm5vcm1hbGl6ZSYmdC5wcm90b2NvbD8uc291cmNlPT09WnMuc291cmNlJiYhL15odHRwcz86XC9cLy9pLnRlc3QoZSkpcmV0dXJuIEhzO3RyeXtpZih0eXBlb2YgVVJMPCJ1Iil7Y29uc3Qgbj1VUkw7aWYodHlwZW9mIG4ucGFyc2U9PSJmdW5jdGlvbiIpcmV0dXJuIG4ucGFyc2UoZSk/P1V0fXJldHVybiBuZXcgVVJMKGUpfWNhdGNoe3JldHVybiBVdH19Y29uc3QgUm09L1tcdFxuXHJdL2c7ZnVuY3Rpb24gY3MoZSl7cmV0dXJuIGUucmVwbGFjZShSbSwiIil9ZnVuY3Rpb24gcGQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5ob3N0bmFtZSl9ZnVuY3Rpb24gaGQoZSx0KXtyZXR1cm4gdC5sYXN0SW5kZXg9MCx0LnRlc3QoZS5wcm90b2NvbC5lbmRzV2l0aCgiOiIpP2UucHJvdG9jb2wuc2xpY2UoMCwtMSk6ZS5wcm90b2NvbCl9Y29uc3QgZmQ9cCgiJFpvZFVSTCIsKGUsdCk9PntILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e3RyeXtjb25zdCBvPW4udmFsdWUudHJpbSgpLHI9bGQobyx0KTtpZihyPT09SHMpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBVUkwgZm9ybWF0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09VXQpe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59aWYocj09PSEwKXtuLnZhbHVlPWNzKG8pO3JldHVybn10Lmhvc3RuYW1lJiYhcGQocix0Lmhvc3RuYW1lKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIGhvc3RuYW1lIixwYXR0ZXJuOnQuaG9zdG5hbWUuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksdC5wcm90b2NvbCYmIWhkKHIsdC5wcm90b2NvbCkmJm4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsbm90ZToiSW52YWxpZCBwcm90b2NvbCIscGF0dGVybjp0LnByb3RvY29sLnNvdXJjZSxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLG4udmFsdWU9dC5ub3JtYWxpemU/ci5ocmVmOmNzKG8pO3JldHVybn1jYXRjaHtuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fX0pLG1kPXAoIiRab2RFbW9qaSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49bWwoKSksSC5pbml0KGUsdCl9KSxnZD1wKCIkWm9kTmFub0lEIiwoZSx0KT0+e2lmKHQubGVuZ3RoIT09dm9pZCAwJiYoIU51bWJlci5pc0ludGVnZXIodC5sZW5ndGgpfHx0Lmxlbmd0aDwxKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmFub2lkIGxlbmd0aDogJHt0Lmxlbmd0aH1gKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dC5sZW5ndGg9PT12b2lkIDA/dWw6bGwodC5sZW5ndGgpKSxILmluaXQoZSx0KX0pLGJkPXAoIiRab2RDVUlEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1ybCksSC5pbml0KGUsdCl9KSx2ZD1wKCIkWm9kQ1VJRDIiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXNsKSxILmluaXQoZSx0KX0pLHlkPXAoIiRab2RVTElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1pbCksSC5pbml0KGUsdCl9KSxfZD1wKCIkWm9kWElEIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1hbCksSC5pbml0KGUsdCl9KSxrZD1wKCIkWm9kS1NVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWNsKSxILmluaXQoZSx0KX0pLHdkPXAoIiRab2RJU09EYXRlVGltZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49UGwodCkpLEguaW5pdChlLHQpfSksJGQ9cCgiJFpvZElTT0RhdGUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVRsKSxILmluaXQoZSx0KX0pLFNkPXAoIiRab2RJU09UaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1JbCh0KSksSC5pbml0KGUsdCl9KSx6ZD1wKCIkWm9kSVNPRHVyYXRpb24iLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPWRsKSxILmluaXQoZSx0KX0pLFRkPXAoIiRab2RJUHY0IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1nbCksSC5pbml0KGUsdCl9KSxabT0vXlswLTlhLWZBLUY6Ll0rJC87ZnVuY3Rpb24gRnMoZSl7cmV0dXJuIFptLnRlc3QoZSk/QnMoYGh0dHA6Ly9bJHtlfV1gKTohMX1jb25zdCBJZD1wKCIkWm9kSVB2NiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49YmwpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57RnMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImlwdjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksUGQ9cCgiJFpvZE1BQyIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dmwodC5kZWxpbWl0ZXIpKSxILmluaXQoZSx0KX0pLHhkPXAoIiRab2RDSURSdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXlsKSxILmluaXQoZSx0KX0pO2Z1bmN0aW9uIENkKGUpe2NvbnN0IHQ9ZS5zcGxpdCgiLyIpO2lmKHQubGVuZ3RoIT09MilyZXR1cm4hMTtjb25zdFtuLG9dPXQ7aWYoIW8pcmV0dXJuITE7Y29uc3Qgcj1OdW1iZXIobyk7cmV0dXJuYCR7cn1gIT09b3x8cjwwfHxyPjEyOD8hMTpGcyhuKX1jb25zdCBFZD1wKCIkWm9kQ0lEUnY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1fbCksSC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntDZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiY2lkcnY2IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIFZzKGUpe2lmKGU9PT0iIilyZXR1cm4hMDtpZigvXHMvLnRlc3QoZSl8fGUubGVuZ3RoJTQhPT0wKXJldHVybiExO3RyeXtyZXR1cm4gYXRvYihlKSwhMH1jYXRjaHtyZXR1cm4hMX19Y29uc3QgT2Q9L15bMC05YS16QS1aKy9dKj17MCwyfSQvLEFkPXAoIiRab2RCYXNlNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU9kKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1ZzKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksSnM9L15bQS1aYS16MC05Xy1dKiQvO2Z1bmN0aW9uIFJkKGUpe2lmKCFKcy50ZXN0KGUpKXJldHVybiExO2NvbnN0IHQ9ZS5yZXBsYWNlKC9bLV9dL2csbz0+bz09PSItIj8iKyI6Ii8iKSxuPXQucGFkRW5kKE1hdGguY2VpbCh0Lmxlbmd0aC80KSo0LCI9Iik7cmV0dXJuIFZzKG4pfWNvbnN0IFpkPXAoIiRab2RCYXNlNjRVUkwiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUpzKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1JkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJiYXNlNjR1cmwiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksTmQ9cCgiJFpvZEUxNjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPSRsKSxILmluaXQoZSx0KX0pLE5tPS9bLSBdL2c7ZnVuY3Rpb24gam0oZSl7bGV0IHQ9ZS5sZW5ndGgsbj0xLG89MDtmb3IoO3Q7KXtjb25zdCByPWUuY2hhckNvZGVBdCgtLXQpLTQ4O25ePTEsbys9bj9bMCwyLDQsNiw4LDEsMyw1LDcsOV1bcl06cn1yZXR1cm4gbyUxMD09PTB9ZnVuY3Rpb24gamQoZSl7cmV0dXJuIE5zLnRlc3QoZSk/am0oZS5yZXBsYWNlKE5tLCIiKSk6ITF9Y29uc3QgTWQ9cCgiJFpvZENyZWRpdENhcmQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPU5zKSxILmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e2pkKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjcmVkaXRfY2FyZCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBNbShlKXtsZXQgdD0wO2NvbnN0IG49ZS5sZW5ndGg7Zm9yKGxldCBvPTQ7bzxuO28rKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobyk7dD0ocj49NjU/dCoxMDArKHItNTUpOnQqMTArKHItNDgpKSU5N31mb3IobGV0IG89MDtvPDQ7bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fXJldHVybiB0PT09MX1mdW5jdGlvbiBxZChlKXtyZXR1cm4ganMudGVzdChlKT9NbShlKTohMX1jb25zdCBEZD1wKCIkWm9kSUJBTiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49anMpLEguaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57cWQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImliYW4iLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gTGQoZSx0PW51bGwpe3RyeXtjb25zdCBuPWUuc3BsaXQoIi4iKTtpZihuLmxlbmd0aCE9PTMpcmV0dXJuITE7Y29uc3Rbb109bjtpZighbylyZXR1cm4hMTtjb25zdCByPUpTT04ucGFyc2UoYXRvYihvKSk7cmV0dXJuISgidHlwImluIHImJnI/LnR5cCE9PSJKV1QifHwhci5hbGd8fHQmJighKCJhbGciaW4gcil8fHIuYWxnIT09dCkpfWNhdGNoe3JldHVybiExfX1jb25zdCBVZD1wKCIkWm9kSldUIiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57TGQobi52YWx1ZSx0LmFsZyl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6Imp3dCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxIZD1wKCIkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0IiwoZSx0KT0+e0guaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5mbihuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLEtzPXAoIiRab2ROdW1iZXIiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49TG8sZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9TnVtYmVyKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWU7aWYodHlwZW9mIHI9PSJudW1iZXIiJiYhTnVtYmVyLmlzTmFOKHIpJiZOdW1iZXIuaXNGaW5pdGUocikpcmV0dXJuIG47Y29uc3Qgcz10eXBlb2Ygcj09Im51bWJlciI/TnVtYmVyLmlzTmFOKHIpPyJOYU4iOk51bWJlci5pc0Zpbml0ZShyKT92b2lkIDA6U3RyaW5nKHIpOnZvaWQgMDtyZXR1cm4gbi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im51bWJlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZSwuLi5zP3tyZWNlaXZlZDpzfTp7fX0pLG59fSksQmQ9cCgiJFpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntEbC5pbml0KGUsdCksS3MuaW5pdChlLHQpfSksV3M9cCgiJFpvZEJvb2xlYW4iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49QWwsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9ISFuLnZhbHVlfWNhdGNoe31jb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0iYm9vbGVhbiJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJib29sZWFuIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxHcz1wKCIkWm9kQmlnSW50IiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPUVsLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPUJpZ0ludChuLnZhbHVlKX1jYXRjaHt9cmV0dXJuIHR5cGVvZiBuLnZhbHVlPT0iYmlnaW50Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJpZ2ludCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG59fSksRmQ9cCgiJFpvZEJpZ0ludEZvcm1hdCIsKGUsdCk9PntMbC5pbml0KGUsdCksR3MuaW5pdChlLHQpfSksVmQ9cCgiJFpvZFN5bWJvbCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPT0ic3ltYm9sInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InN5bWJvbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksSmQ9cCgiJFpvZFVuZGVmaW5lZCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1abCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW3ZvaWQgMF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI+InUifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoidW5kZWZpbmVkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxLZD1wKCIkWm9kTnVsbCIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1SbCxlLl96b2QudmFsdWVzPW5ldyBTZXQoW251bGxdKSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHI9PT1udWxsfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVsbCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLGluc3Q6ZX0pLG59fSksV2Q9cCgiJFpvZEFueSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9bj0+bn0pLEdkPXAoIiRab2RVbmtub3duIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksUWQ9cCgiJFpvZE5ldmVyIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+KG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJuZXZlciIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pfSksWWQ9cCgiJFpvZFZvaWQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ2b2lkIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxYZD1wKCIkWm9kRGF0ZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1uZXcgRGF0ZShuLnZhbHVlKX1jYXRjaHt9Y29uc3Qgcj1uLnZhbHVlLHM9ciBpbnN0YW5jZW9mIERhdGU7cmV0dXJuIHMmJiFOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpfHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiZGF0ZSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpyLC4uLnM/e3JlY2VpdmVkOiJJbnZhbGlkIERhdGUifTp7fSxpbnN0OmV9KSxufX0pO2Z1bmN0aW9uIExjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4uZ2UobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1jb25zdCBlcD1wKCIkWm9kQXJyYXkiLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj1jZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KHMpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYXJyYXkiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO28udmFsdWU9bj9uLmFsbG9jKGUsbyxBcnJheShzLmxlbmd0aCkscik6QXJyYXkocy5sZW5ndGgpO2NvbnN0IGk9W10sYT1yPy5hYm9ydEVhcmx5O2ZvcihsZXQgdT0wO3U8cy5sZW5ndGg7dSsrKXtjb25zdCBsPXNbdV0sZD10LmVsZW1lbnQuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtpZihkIGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2goZC50aGVuKG09PkxjKG0sbyx1KSkpO2Vsc2UgaWYoTGMoZCxvLHUpLGEmJmQuaXNzdWVzLmxlbmd0aCE9PTAmJnVlKGQpKWJyZWFrfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIGJvKGUsdCxuLG8scixzKXtjb25zdCBpPW4gaW4gbyxhPXM9PT0ib3B0aW9uYWwiO2lmKCEoIWkmJmEmJnI9PT0ib3B0aW9uYWwiKSl7aWYoZS5pc3N1ZXMubGVuZ3RoKXtpZihyIT09dm9pZCAwJiZhJiYhaSlyZXR1cm47dC5pc3N1ZXMucHVzaCguLi5nZShuLGUuaXNzdWVzKSl9aWYoIWkmJnI9PT12b2lkIDApe2UuaXNzdWVzLmxlbmd0aHx8dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OnZvaWQgMCxwYXRoOltuXX0pO3JldHVybn1lLnZhbHVlPT09dm9pZCAwPyhpfHxyPT09ImRlZmF1bHRlZCImJiFhKSYmKHQudmFsdWVbbl09dm9pZCAwKTp0LnZhbHVlW25dPWUudmFsdWV9fWNvbnN0IHFtPVtdO2Z1bmN0aW9uIHRwKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZS5zaGFwZSksbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUuc2hhcGUpLG89bi5sZW5ndGg/bjpxbSxyPW8ubGVuZ3RoP1suLi50LC4uLm9dOnQ7Zm9yKGNvbnN0IGkgb2YgcilpZighZS5zaGFwZT8uW2ldPy5fem9kPy50cmFpdHM/LmhhcygiJFpvZFR5cGUiKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCBhdCBrZXkgIiR7U3RyaW5nKGkpfSI6IGV4cGVjdGVkIGEgWm9kIHNjaGVtYWApO2NvbnN0IHM9TnUoZS5zaGFwZSk7cmV0dXJuey4uLmUsYWxsS2V5czpyLHN5bWJvbEtleXM6byxrZXlTZXQ6bmV3IFNldCh0KSxudW1LZXlzOnQubGVuZ3RoLG9wdGlvbmFsS2V5czpuZXcgU2V0KHMpfX1mdW5jdGlvbiBucChlLHQsbixvLHIscyxpKXtjb25zdCBhPVtdLHU9ci5rZXlTZXQsbD1yLmNhdGNoYWxsLl96b2QsZD1sLmRlZi50eXBlLG09bC5vcHRpbixiPWwub3B0b3V0O2xldCB2PTA7Zm9yKGNvbnN0IF8gaW4gdCl7aWYoaSYmbi5pc3N1ZXMubGVuZ3RoIT09dil7aWYodWUobix2KSlicmVhazt2PW4uaXNzdWVzLmxlbmd0aH1pZih1LmhhcyhfKSljb250aW51ZTtpZihfPT09Il9fcHJvdG9fXyIpe2Q9PT0ibmV2ZXIiJiZhLnB1c2goXyk7Y29udGludWV9aWYoZD09PSJuZXZlciIpe2EucHVzaChfKTtjb250aW51ZX1jb25zdCBrPWwucnVuKHt2YWx1ZTp0W19dLGlzc3VlczpbXX0sbyk7ayBpbnN0YW5jZW9mIFByb21pc2U/ZS5wdXNoKGsudGhlbigkPT5ibygkLG4sXyx0LG0sYikpKTpibyhrLG4sXyx0LG0sYil9cmV0dXJuIGEubGVuZ3RoJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsa2V5czphLGlucHV0OnQsaW5zdDpzLGNvbnRpbnVlOiEwfSksZS5sZW5ndGg/UHJvbWlzZS5hbGwoZSkudGhlbigoKT0+bik6bn1jb25zdCBvcD1wKCIkWm9kT2JqZWN0IiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCJzaGFwZSIpLG89bj8uZ2V0P24uZ2V0LnJhdzp0LnNoYXBlPz97fTtpZihvKXtjb25zdCBsPSgpPT57Y29uc3QgZD17Li4ub307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzaGFwZSIse3ZhbHVlOmR9KSxsLnJhdz1kLGR9O2wucmF3PW8sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7Z2V0Omx9KX1jb25zdCByPUt0KCgpPT50cCh0KSk7QShlLCJwcm9wVmFsdWVzIixsPT57Y29uc3QgZD1sLmRlZi5zaGFwZSxtPXt9O2Zvcihjb25zdCBiIGluIGQpe2NvbnN0IHY9ZFtiXS5fem9kO2lmKHYudmFsdWVzKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxiKXx8WWUobSxiLG5ldyBTZXQpO2Zvcihjb25zdCBfIG9mIHYudmFsdWVzKW1bYl0uYWRkKF8pO3Yub3B0aW4hPT12b2lkIDAmJm1bYl0uYWRkKHZvaWQgMCl9fXJldHVybiBtfSk7Y29uc3Qgcz1zdCxpPXQuY2F0Y2hhbGw7bGV0IGE7Y29uc3QgdT1jZS5tZW1vaXplcjt1Py5hdHRhY2goZSksZS5fem9kLnBhcnNlPShsLGQpPT57YT8/KGE9ci52YWx1ZSk7Y29uc3QgbT1sLnZhbHVlO2lmKCFzKG0pKXJldHVybiBsLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om0saW5zdDplfSksbDtsLnZhbHVlPXU/dS5hbGxvYyhlLGwse30sZCk6e307Y29uc3QgYj1bXSx2PWEuc2hhcGUsXz1kPy5hYm9ydEVhcmx5O2xldCBrPWwuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiBhLmFsbEtleXMpe2lmKF8mJmwuaXNzdWVzLmxlbmd0aCE9PWspe2lmKHVlKGwsaykpYnJlYWs7az1sLmlzc3Vlcy5sZW5ndGh9aWYoJD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IEk9dlskXSxSPUkuX3pvZC5vcHRpbixKPUkuX3pvZC5vcHRvdXQsdz1JLl96b2QucnVuKHt2YWx1ZTptWyRdLGlzc3VlczpbXX0sZCk7dyBpbnN0YW5jZW9mIFByb21pc2U/Yi5wdXNoKHcudGhlbih6PT5ibyh6LGwsJCxtLFIsSikpKTpibyh3LGwsJCxtLFIsSil9cmV0dXJuIGk/bnAoYixtLGwsZCxyLnZhbHVlLGUsXz09PSEwKTpiLmxlbmd0aD9Qcm9taXNlLmFsbChiKS50aGVuKCgpPT5sKTpsfX0pLHJwPXAoIiRab2RPYmplY3RKSVQiLChlLHQpPT57b3AuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89S3QoKCk9PnRwKHQpKSxyPWNlLm1lbW9pemVyLHM9dj0+e2NvbnN0IF89by52YWx1ZSxrPV8uc3ltYm9sS2V5cywkPW5ldyByZChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6dixpbnN0OmUsbWVtbzpyLHN5bXM6a30pLEk9ej0+YHNoYXBlWyR7en1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7en1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLFI9KHosTik9PmAKICAgICAgICAgIGxldCAke3p9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7en0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7en0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7Tn0sIC4uLmlzcy5wYXRoXSA6IFske059XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke3p9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke3p9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBKPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHc9MDtmb3IoY29uc3QgeiBvZiBfLmFsbEtleXMpSlt6XT1ga2V5XyR7dysrfWA7JC53cml0ZShyPyJjb25zdCBuZXdSZXN1bHQgPSBtZW1vLmFsbG9jKGluc3QsIHBheWxvYWQsIHt9LCBjdHgpOyI6ImNvbnN0IG5ld1Jlc3VsdCA9IHt9OyIpO2Zvcihjb25zdCB6IG9mIF8uYWxsS2V5cyl7aWYoej09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IE49Slt6XSxzZT10eXBlb2Ygej09InN5bWJvbCI/YHN5bXNbJHtrLmluZGV4T2Yoeil9XWA6T3UoeiksVWU9YCR7c2V9IGluIGlucHV0YCxSdD12W3pdLFp0PVJ0Py5fem9kPy5vcHRpbixaYz1adCE9PXZvaWQgMCxoZj1SdD8uX3pvZD8ub3B0b3V0PT09Im9wdGlvbmFsIjtpZigkLndyaXRlKGBjb25zdCAke059ID0gJHtJKHNlKX07YCksWmMmJmhmKXtjb25zdCBmZj1adD09PSJvcHRpb25hbCI/YCR7Tn1fcHJlc2VudGA6YCR7Tn0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke059X3ByZXNlbnRgOyQud3JpdGUoYAogICAgICAgIGNvbnN0ICR7Tn1fcHJlc2VudCA9ICR7VWV9OwogICAgICAgIGlmICghJHtOfS5pc3N1ZXMubGVuZ3RoIHx8ICR7Tn1fcHJlc2VudCkgewogICAgICAgICAgaWYgKCR7Tn0uaXNzdWVzLmxlbmd0aCkgeyR7UihOLHNlKX0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoJHtmZn0pIHsKICAgICAgICAgICAgbmV3UmVzdWx0WyR7c2V9XSA9ICR7Tn0udmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgYCl9ZWxzZSBaYz8oJC53cml0ZShgCiAgICAgICAgaWYgKCR7Tn0uaXNzdWVzLmxlbmd0aCkgeyR7UihOLHNlKX0KICAgICAgICB9CiAgICAgIGApLFp0PT09ImRlZmF1bHRlZCI/JC53cml0ZShgbmV3UmVzdWx0WyR7c2V9XSA9ICR7Tn0udmFsdWU7YCk6JC53cml0ZShgCiAgICAgICAgaWYgKCR7Tn0udmFsdWUgIT09IHVuZGVmaW5lZCB8fCAke1VlfSkgewogICAgICAgICAgbmV3UmVzdWx0WyR7c2V9XSA9ICR7Tn0udmFsdWU7CiAgICAgICAgfQogICAgICBgKSk6JC53cml0ZShgCiAgICAgICAgY29uc3QgJHtOfV9wcmVzZW50ID0gJHtVZX07CiAgICAgICAgaWYgKCR7Tn0uaXNzdWVzLmxlbmd0aCkgeyR7UihOLHNlKX0KICAgICAgICB9CiAgICAgICAgaWYgKCEke059X3ByZXNlbnQgJiYgISR7Tn0uaXNzdWVzLmxlbmd0aCkgewogICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7CiAgICAgICAgICAgIGNvZGU6ICJpbnZhbGlkX3R5cGUiLAogICAgICAgICAgICBleHBlY3RlZDogIm5vbm9wdGlvbmFsIiwKICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCwKICAgICAgICAgICAgcGF0aDogWyR7c2V9XQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoY3R4ICYmIGN0eC5hYm9ydEVhcmx5KSB7CiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCR7Tn1fcHJlc2VudCkgewogICAgICAgICAgbmV3UmVzdWx0WyR7c2V9XSA9ICR7Tn0udmFsdWU7CiAgICAgICAgfQoKICAgICAgYCl9cmV0dXJuICQud3JpdGUoInBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7IiksJC53cml0ZSgicmV0dXJuIHBheWxvYWQ7IiksJC5jb21waWxlKCl9O2xldCBpO2NvbnN0IGE9c3QsdT0hY2Uuaml0bGVzcyxkPXUmJlJ1LnZhbHVlLG09dC5jYXRjaGFsbDtsZXQgYjtlLl96b2QucGFyc2U9KHYsXyk9PntiPz8oYj1vLnZhbHVlKTtjb25zdCBrPXYudmFsdWU7cmV0dXJuIGEoayk/dSYmZCYmXz8uYXN5bmM9PT0hMSYmXy5qaXRsZXNzIT09ITA/KGl8fChpPXModC5zaGFwZSkpLHY9aSh2LF8pLG0/bnAoW10sayx2LF8sYixlLF8/LmFib3J0RWFybHk9PT0hMCk6dik6bih2LF8pOih2Lmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OmssaW5zdDplfSksdil9fSk7ZnVuY3Rpb24gVWMoZSx0LG4sbyl7Zm9yKGNvbnN0IHMgb2YgZSlpZihzLmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB0LnZhbHVlPXMudmFsdWUsdDtjb25zdCByPWUuZmlsdGVyKHM9PiF1ZShzKSk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1yWzBdLnZhbHVlLHJbMF0pOih0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGk9PnllKGksbyxRKCkpKSl9KSx0KX1jb25zdCBIbz1wKCIkWm9kVW5pb24iLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJvcHRpbiIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiKT8iZGVmYXVsdGVkIjpvLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluIT09dm9pZCAwKT8ib3B0aW9uYWwiOnZvaWQgMCksQShlLCJvcHRvdXQiLG89Pm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIik/Im9wdGlvbmFsIjp2b2lkIDApLEEoZSwidmFsdWVzIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QudmFsdWVzKSlyZXR1cm4gbmV3IFNldChvLmRlZi5vcHRpb25zLmZsYXRNYXAocj0+QXJyYXkuZnJvbShyLl96b2QudmFsdWVzKSkpfSksQShlLCJwYXR0ZXJuIixvPT57aWYoby5kZWYub3B0aW9ucy5ldmVyeShyPT5yLl96b2QucGF0dGVybikpe2NvbnN0IHI9by5kZWYub3B0aW9ucy5tYXAocz0+cy5fem9kLnBhdHRlcm4pO3JldHVybiBuZXcgUmVnRXhwKGBeKCR7ci5tYXAocz0+UmUocy5zb3VyY2UpKS5qb2luKCJ8Iil9KSRgKX19KTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgdT1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7aWYodSBpbnN0YW5jZW9mIFByb21pc2UpaS5wdXNoKHUpLHM9ITA7ZWxzZXtpZih1Lmlzc3Vlcy5sZW5ndGg9PT0wKXJldHVybiB1O2kucHVzaCh1KX19cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5VYyhhLG8sZSxyKSk6VWMoaSxvLGUscil9fSk7ZnVuY3Rpb24gSGMoZSx0LG4sbyl7Y29uc3Qgcj1bXTtmb3IobGV0IHM9MDtzPGUubGVuZ3RoO3MrKyllW3NdLmlzc3Vlcy5sZW5ndGg9PT0wJiZyLnB1c2gocyk7cmV0dXJuIHIubGVuZ3RoPT09MT8odC52YWx1ZT1lW3JbMF1dLnZhbHVlLHQpOihyLmxlbmd0aD09PTA/dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOmUubWFwKHM9PnMuaXNzdWVzLm1hcChpPT55ZShpLG8sUSgpKSkpfSk6dC5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsaW5wdXQ6dC52YWx1ZSxpbnN0Om4sZXJyb3JzOltdLGluY2x1c2l2ZTohMSxtYXRjaGVzOnJ9KSx0KX1jb25zdCBzcD1wKCIkWm9kWG9yIiwoZSx0KT0+e0hvLmluaXQoZSx0KSx0LmluY2x1c2l2ZT0hMTtjb25zdCBuPXQub3B0aW9ucy5sZW5ndGg9PT0xP3Qub3B0aW9uc1swXS5fem9kLnJ1bjpudWxsO2UuX3pvZC5wYXJzZT0obyxyKT0+e2lmKG4pcmV0dXJuIG4obyxyKTtsZXQgcz0hMTtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIHQub3B0aW9ucyl7Y29uc3QgdT1hLl96b2QucnVuKHt2YWx1ZTpvLnZhbHVlLGlzc3VlczpbXX0scik7dSBpbnN0YW5jZW9mIFByb21pc2U/KGkucHVzaCh1KSxzPSEwKTppLnB1c2godSl9cmV0dXJuIHM/UHJvbWlzZS5hbGwoaSkudGhlbihhPT5IYyhhLG8sZSxyKSk6SGMoaSxvLGUscil9fSk7ZnVuY3Rpb24gUXMoZSx0KXtjb25zdCBuPWUuX3pvZDtsZXQgbz1uLmJhZy5vcHRpb25zTWFwO298fChvPWlwKG4uZGVmKSxuLmJhZy5vcHRpb25zTWFwPW8pO2NvbnN0IHI9by5nZXQodCk7aWYocj09PW51bGwpdGhyb3cgbmV3IEVycm9yKGBBbWJpZ3VvdXMgZGlzY3JpbWluYXRvciB2YWx1ZSAiJHtTdHJpbmcodCl9ImApO3JldHVybiByfWZ1bmN0aW9uIGlwKGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3QgbiBvZiBlLm9wdGlvbnMpe2NvbnN0IG89bi5fem9kLnByb3BWYWx1ZXM/LltlLmRpc2NyaW1pbmF0b3JdO2lmKCFvfHxvLnNpemU9PT0wKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCAiJHtlLm9wdGlvbnMuaW5kZXhPZihuKX0iYCk7Zm9yKGNvbnN0IHIgb2YgbylpZih0LmhhcyhyKSl7aWYociE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyhyKX0iYCk7dC5zZXQocixudWxsKX1lbHNlIHQuc2V0KHIsbil9cmV0dXJuIHR9Y29uc3QgYXA9cCgiJFpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9Pnt0LmluY2x1c2l2ZT0hMSxIby5pbml0KGUsdCk7Y29uc3Qgbj1lLl96b2QucGFyc2U7QShlLCJwcm9wVmFsdWVzIixyPT57Y29uc3Qgcz17fTtsZXQgaT0wO2Zvcihjb25zdCBhIG9mIHIuZGVmLm9wdGlvbnMpe2NvbnN0IHU9YS5fem9kLnByb3BWYWx1ZXM7aWYoIXV8fE9iamVjdC5rZXlzKHUpLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3IuZGVmLm9wdGlvbnMuaW5kZXhPZihhKX0iYCk7dVtyLmRlZi5kaXNjcmltaW5hdG9yXT8uaGFzKHZvaWQgMCkmJmkrKztmb3IoY29uc3RbbCxkXW9mIE9iamVjdC5lbnRyaWVzKHUpKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocyxsKXx8WWUocyxsLG5ldyBTZXQpO2Zvcihjb25zdCBtIG9mIGQpc1tsXS5hZGQobSl9fXJldHVybiFyLmRlZi51bmlvbkZhbGxiYWNrJiZpPjEmJnNbci5kZWYuZGlzY3JpbWluYXRvcl0/LmRlbGV0ZSh2b2lkIDApLHN9KSx0Lm9wdGlvbnMuZm9yRWFjaCgocixzKT0+e2NvbnN0IGk9UG8oci5fem9kLmRlZik7aWYoaSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHQuZGlzY3JpbWluYXRvcikpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke3N9ImApfSk7Y29uc3Qgbz1LdCgoKT0+aXAodCkpO2UuX3pvZC5wYXJzZT0ocixzKT0+e2NvbnN0IGk9ci52YWx1ZTtpZighc3QoaSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6Im9iamVjdCIsaW5wdXQ6aSxpbnN0OmV9KSxyO2NvbnN0IGE9aT8uW3QuZGlzY3JpbWluYXRvcl0sdT1vLnZhbHVlLmdldChhKTtyZXR1cm4gdSYmKGEhPT12b2lkIDB8fHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIik/dS5fem9kLnJ1bihyLHMpOnQudW5pb25GYWxsYmFja3x8cy5kaXJlY3Rpb249PT0iYmFja3dhcmQiP24ocixzKTooci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF91bmlvbiIsZXJyb3JzOltdLG5vdGU6Ik5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3IiLGRpc2NyaW1pbmF0b3I6dC5kaXNjcmltaW5hdG9yLG9wdGlvbnM6QXJyYXkuZnJvbShvLnZhbHVlLmtleXMoKSkuZmlsdGVyKGw9Pm8udmFsdWUuZ2V0KGwpIT09bnVsbCksaW5wdXQ6aSxwYXRoOlt0LmRpc2NyaW1pbmF0b3JdLGluc3Q6ZX0pLHIpfX0pLGNwPXAoIiRab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlLHM9dC5sZWZ0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyksaT10LnJpZ2h0Ll96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlfHxpIGluc3RhbmNlb2YgUHJvbWlzZT9Qcm9taXNlLmFsbChbcyxpXSkudGhlbigoW3UsbF0pPT5CYyhuLHUsbCkpOkJjKG4scyxpKX19KTtmdW5jdGlvbiB2byhlLHQpe2lmKGU9PT10KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKGUgaW5zdGFuY2VvZiBEYXRlJiZ0IGluc3RhbmNlb2YgRGF0ZSYmK2U9PSt0KXJldHVybnt2YWxpZDohMCxkYXRhOmV9O2lmKE5lKGUpJiZOZSh0KSl7Y29uc3Qgbj1PYmplY3Qua2V5cyh0KSxvPU9iamVjdC5rZXlzKGUpLmZpbHRlcihzPT5uLmluZGV4T2YocykhPT0tMSkscj17Li4uZSwuLi50fTtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwiX19wcm90b19fIikmJmRlbGV0ZSByLl9fcHJvdG9fXztmb3IoY29uc3QgcyBvZiBvKXtpZihzPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgaT12byhlW3NdLHRbc10pO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbcywuLi5pLm1lcmdlRXJyb3JQYXRoXX07cltzXT1pLmRhdGF9cmV0dXJue3ZhbGlkOiEwLGRhdGE6cn19aWYoQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KSl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119O2NvbnN0IG49W107Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe2NvbnN0IHI9ZVtvXSxzPXRbb10saT12byhyLHMpO2lmKCFpLnZhbGlkKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbbywuLi5pLm1lcmdlRXJyb3JQYXRoXX07bi5wdXNoKGkuZGF0YSl9cmV0dXJue3ZhbGlkOiEwLGRhdGE6bn19cmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltdfX1mdW5jdGlvbiBCYyhlLHQsbil7Y29uc3Qgbz1uZXcgTWFwO2xldCByO2NvbnN0IHM9bmV3IE1hcCxpPShsLGQpPT57bGV0IG07aWYobC5jb2RlPT09InVucmVjb2duaXplZF9rZXlzIiYmIWwucGF0aD8ubGVuZ3RoKXI/PyhyPWwpLG09bC5rZXlzO2Vsc2UgaWYobC5jb2RlPT09ImludmFsaWRfa2V5IiYmbC5vcmlnaW49PT0icmVjb3JkIiYmbC5wYXRoPy5sZW5ndGg9PT0xKXtjb25zdCBiPVN0cmluZyhsLnBhdGhbMF0pO3MuaGFzKGIpfHxzLnNldChiLGwpLG09W2JdfWVsc2UgcmV0dXJuITE7Zm9yKGNvbnN0IGIgb2YgbSlvLmhhcyhiKXx8by5zZXQoYix7fSksby5nZXQoYilbZF09ITA7cmV0dXJuITB9O2Zvcihjb25zdCBsIG9mIHQuaXNzdWVzKWkobCwibCIpfHxlLmlzc3Vlcy5wdXNoKGwpO2Zvcihjb25zdCBsIG9mIG4uaXNzdWVzKWkobCwiciIpfHxlLmlzc3Vlcy5wdXNoKGwpO2NvbnN0IGE9Wy4uLm9dLmZpbHRlcigoWyxsXSk9PmwubCYmbC5yKS5tYXAoKFtsXSk9PmwpO2lmKGEubGVuZ3RoKXtjb25zdCBsPXI/YS5maWx0ZXIoZD0+ci5rZXlzLmluY2x1ZGVzKGQpKTpbXTtsLmxlbmd0aCYmZS5pc3N1ZXMucHVzaCh7Li4ucixrZXlzOmx9KTtmb3IoY29uc3QgZCBvZiBhKSFsLmluY2x1ZGVzKGQpJiZzLmhhcyhkKSYmZS5pc3N1ZXMucHVzaChzLmdldChkKSl9Y29uc3QgdT12byh0LnZhbHVlLG4udmFsdWUpO2lmKCF1LnZhbGlkKXtpZih1ZShlKSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVubWVyZ2FibGUgaW50ZXJzZWN0aW9uLiBFcnJvciBwYXRoOiAke0pTT04uc3RyaW5naWZ5KHUubWVyZ2VFcnJvclBhdGgpfWApfXJldHVybiBlLnZhbHVlPXUuZGF0YSxlfWNvbnN0IFlzPXAoIiRab2RUdXBsZSIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPXQuaXRlbXMsbz1jZS5tZW1vaXplcjtvPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiByLmlzc3Vlcy5wdXNoKHtpbnB1dDppLGluc3Q6ZSxleHBlY3RlZDoidHVwbGUiLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxyO3IudmFsdWU9bz9vLmFsbG9jKGUscixbXSxzKTpbXTtjb25zdCBhPVtdLHU9RmMobiwib3B0aW4iKSxsPUZjKG4sIm9wdG91dCIpO2lmKCF0LnJlc3Qpe2lmKGkubGVuZ3RoPHUpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp1LGluY2x1c2l2ZTohMCxpbnB1dDppLGluc3Q6ZSxvcmlnaW46ImFycmF5In0pLHI7aS5sZW5ndGg+bi5sZW5ndGgmJnIuaXNzdWVzLnB1c2goe2NvZGU6InRvb19iaWciLG1heGltdW06bi5sZW5ndGgsaW5jbHVzaXZlOiEwLGlucHV0OmksaW5zdDplLG9yaWdpbjoiYXJyYXkifSl9Y29uc3QgZD1uZXcgQXJyYXkobi5sZW5ndGgpLG09dC5yZXN0P3M/LmFib3J0RWFybHk6dm9pZCAwO2xldCBiPSExO2ZvcihsZXQgdj0wO3Y8bi5sZW5ndGg7disrKXtjb25zdCBfPW5bdl0uX3pvZC5ydW4oe3ZhbHVlOmlbdl0saXNzdWVzOltdfSxzKTtfIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goXy50aGVuKGs9PntkW3ZdPWt9KSk6KGRbdl09XyxtJiYhYiYmXy5pc3N1ZXMubGVuZ3RoJiYoYj11ZShfKSkpfWlmKHQucmVzdCYmIWIpe2xldCB2PW4ubGVuZ3RoLTE7Y29uc3QgXz1pLnNsaWNlKG4ubGVuZ3RoKTtsZXQgaz1yLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0ICQgb2YgXyl7aWYobSYmci5pc3N1ZXMubGVuZ3RoIT09ayl7aWYodWUocixrKSlicmVhaztrPXIuaXNzdWVzLmxlbmd0aH12Kys7Y29uc3QgST10LnJlc3QuX3pvZC5ydW4oe3ZhbHVlOiQsaXNzdWVzOltdfSxzKTtJIGluc3RhbmNlb2YgUHJvbWlzZT9hLnB1c2goSS50aGVuKFI9PlZjKFIscix2KSkpOlZjKEkscix2KX19cmV0dXJuIGEubGVuZ3RoP1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PkpjKGQscixuLGksbCkpOkpjKGQscixuLGksbCl9fSk7ZnVuY3Rpb24gRmMoZSx0KXtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZighKHQ9PT0ib3B0aW4iP2Vbbl0uX3pvZC5vcHRpbiE9PXZvaWQgMDplW25dLl96b2Qub3B0b3V0PT09Im9wdGlvbmFsIikpcmV0dXJuIG4rMTtyZXR1cm4gMH1mdW5jdGlvbiBWYyhlLHQsbil7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmdlKG4sZS5pc3N1ZXMpKSx0LnZhbHVlW25dPWUudmFsdWV9ZnVuY3Rpb24gSmMoZSx0LG4sbyxyKXtmb3IobGV0IHM9MDtzPG4ubGVuZ3RoO3MrKyl7Y29uc3QgaT1lW3NdLGE9czxvLmxlbmd0aDtpZighYSYmcz49ciYmbltzXS5fem9kLm9wdGluPT09Im9wdGlvbmFsIil7dC52YWx1ZS5sZW5ndGg9czticmVha31pZihpLmlzc3Vlcy5sZW5ndGgpe2lmKCFhJiZzPj1yKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfXQuaXNzdWVzLnB1c2goLi4uZ2UocyxpLmlzc3VlcykpfXQudmFsdWVbc109aS52YWx1ZX1mb3IobGV0IHM9dC52YWx1ZS5sZW5ndGgtMTtzPj1vLmxlbmd0aCYmKG5bc10uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiJiZ0LnZhbHVlW3NdPT09dm9pZCAwKTtzLS0pdC52YWx1ZS5sZW5ndGg9cztyZXR1cm4gdH1jb25zdCB1cD1wKCIkWm9kUmVjb3JkIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49Y2UubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighTmUocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJyZWNvcmQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cyxpbnN0OmV9KSxvO2NvbnN0IGk9W10sYT10LmtleVR5cGUuX3pvZC52YWx1ZXM7aWYoYSYmIXQucGFydGlhbCl7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2NvbnN0IHU9bmV3IFNldDtmb3IoY29uc3QgZCBvZiBhKWlmKHR5cGVvZiBkPT0ic3RyaW5nInx8dHlwZW9mIGQ9PSJudW1iZXIifHx0eXBlb2YgZD09InN5bWJvbCIpe2lmKHUuYWRkKHR5cGVvZiBkPT0ibnVtYmVyIj9kLnRvU3RyaW5nKCk6ZCksZD09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IG09dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpkLGlzc3VlczpbXX0scik7aWYobSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYobS5pc3N1ZXMubGVuZ3RoKXtvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczptLmlzc3Vlcy5tYXAoXz0+eWUoXyxyLFEoKSkpLGlucHV0OmQscGF0aDpbZF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1tLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCB2PXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2RdLGlzc3VlczpbXX0scik7diBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKHYudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmdlKGQsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KHYuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5nZShkLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlKX1sZXQgbDtmb3IoY29uc3QgZCBpbiBzKWlmKCF1LmhhcyhkKSlpZih0Lm1vZGU9PT0ibG9vc2UiKXtpZihkPT09Il9fcHJvdG9fXyIpY29udGludWU7by52YWx1ZVtkXT1zW2RdfWVsc2UgbD1sPz9bXSxsLnB1c2goZCk7bCYmbC5sZW5ndGg+MCYmby5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGlucHV0OnMsaW5zdDplLGtleXM6bCxjb250aW51ZTohMH0pfWVsc2V7by52YWx1ZT1uP24uYWxsb2MoZSxvLHt9LHIpOnt9O2xldCB1O2Zvcihjb25zdCBsIG9mIFJlZmxlY3Qub3duS2V5cyhzKSl7aWYobD09PSJfX3Byb3RvX18ifHwhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsbCkpY29udGludWU7bGV0IGQ9dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7aWYoZCBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5Iik7aWYodHlwZW9mIGw9PSJzdHJpbmciJiZMby50ZXN0KGwpJiZkLmlzc3Vlcy5sZW5ndGgpe2NvbnN0IF89dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpOdW1iZXIobCksaXNzdWVzOltdfSxyKTtpZihfIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtfLmlzc3Vlcy5sZW5ndGg9PT0wJiYoZD1fKX1pZihkLmlzc3Vlcy5sZW5ndGgpe3QubW9kZT09PSJsb29zZSI/by52YWx1ZVtsXT1zW2xdOmE/KHU9dT8/W10sdS5wdXNoKGwpKTpvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczpkLmlzc3Vlcy5tYXAoXz0+eWUoXyxyLFEoKSkpLGlucHV0OmwscGF0aDpbbF0saW5zdDplfSk7Y29udGludWV9Y29uc3QgYj1kLnZhbHVlO2lmKGI9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCB2PXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpzW2xdLGlzc3VlczpbXX0scik7diBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKHYudGhlbihfPT57Xy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLmdlKGwsXy5pc3N1ZXMpKSxvLnZhbHVlW2JdPV8udmFsdWV9KSk6KHYuaXNzdWVzLmxlbmd0aCYmby5pc3N1ZXMucHVzaCguLi5nZShsLHYuaXNzdWVzKSksby52YWx1ZVtiXT12LnZhbHVlKX11JiZ1Lmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czp1LGNvbnRpbnVlOiEwfSl9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSksbHA9cCgiJFpvZE1hcCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWNlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im1hcCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IE1hcCxyKTpuZXcgTWFwO2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgdT1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0W2wsZF1vZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT11KXtpZih1ZShvLHUpKWJyZWFrO3U9by5pc3N1ZXMubGVuZ3RofWNvbnN0IG09dC5rZXlUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0sciksYj10LnZhbHVlVHlwZS5fem9kLnJ1bih7dmFsdWU6ZCxpc3N1ZXM6W119LHIpO20gaW5zdGFuY2VvZiBQcm9taXNlfHxiIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goUHJvbWlzZS5hbGwoW20sYl0pLnRoZW4oKFt2LF9dKT0+e0tjKHYsXyxvLGwscyxlLHIpfSkpOktjKG0sYixvLGwscyxlLHIpfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIEtjKGUsdCxuLG8scixzLGkpe2UuaXNzdWVzLmxlbmd0aCYmKGZvLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi5nZShvLGUuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoibWFwIixpbnB1dDpyLGluc3Q6cyxpc3N1ZXM6ZS5pc3N1ZXMubWFwKGE9PnllKGEsaSxRKCkpKX0pKSx0Lmlzc3Vlcy5sZW5ndGgmJihmby5oYXModHlwZW9mIG8pP24uaXNzdWVzLnB1c2goLi4uZ2Uobyx0Lmlzc3VlcykpOm4uaXNzdWVzLnB1c2goe29yaWdpbjoibWFwIixjb2RlOiJpbnZhbGlkX2VsZW1lbnQiLGlucHV0OnIsaW5zdDpzLGtleTpvLGlzc3Vlczp0Lmlzc3Vlcy5tYXAoYT0+eWUoYSxpLFEoKSkpfSkpLG4udmFsdWUuc2V0KGUudmFsdWUsdC52YWx1ZSl9Y29uc3QgZHA9cCgiJFpvZFNldCIsKGUsdCk9Pnt4LmluaXQoZSx0KTtjb25zdCBuPWNlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIShzIGluc3RhbmNlb2YgU2V0KSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7aW5wdXQ6cyxpbnN0OmUsZXhwZWN0ZWQ6InNldCIsY29kZToiaW52YWxpZF90eXBlIn0pLG87Y29uc3QgaT1bXTtvLnZhbHVlPW4/bi5hbGxvYyhlLG8sbmV3IFNldCxyKTpuZXcgU2V0O2NvbnN0IGE9cj8uYWJvcnRFYXJseTtsZXQgdT1vLmlzc3Vlcy5sZW5ndGg7Zm9yKGNvbnN0IGwgb2Ygcyl7aWYoYSYmby5pc3N1ZXMubGVuZ3RoIT09dSl7aWYodWUobyx1KSlicmVhazt1PW8uaXNzdWVzLmxlbmd0aH1jb25zdCBkPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7ZCBpbnN0YW5jZW9mIFByb21pc2U/aS5wdXNoKGQudGhlbihtPT5XYyhtLG8pKSk6V2MoZCxvKX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KTtmdW5jdGlvbiBXYyhlLHQpe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi5lLmlzc3VlcyksdC52YWx1ZS5hZGQoZS52YWx1ZSl9Y29uc3QgcHA9cCgiJFpvZEVudW0iLChlLHQpPT57eC5pbml0KGUsdCk7Y29uc3Qgbj10cyh0LmVudHJpZXMpLG89bmV3IFNldChuKTtlLl96b2QudmFsdWVzPW8sQShlLCJwYXR0ZXJuIixyPT57Y29uc3Qgcz10cyhyLmRlZi5lbnRyaWVzKS5maWx0ZXIoaT0+Zm8uaGFzKHR5cGVvZiBpKSk7cmV0dXJuIG5ldyBSZWdFeHAocy5sZW5ndGg/YF4oJHtzLm1hcChpPT5JZShpLnRvU3RyaW5nKCkpKS5qb2luKCJ8Iil9KSRgOiJeW15cXHNcXFNdJCIpfSksZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO3JldHVybiBvLmhhcyhpKXx8ci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOm4saW5wdXQ6aSxpbnN0OmV9KSxyfX0pLGhwPXAoIiRab2RMaXRlcmFsIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0LnZhbHVlcyk7ZS5fem9kLnZhbHVlcz1uLEEoZSwicGF0dGVybiIsbz0+e2NvbnN0IHI9by5kZWYudmFsdWVzO3JldHVybiBuZXcgUmVnRXhwKHIubGVuZ3RoP2BeKCR7ci5tYXAocz0+dHlwZW9mIHM9PSJzdHJpbmciP0llKHMpOnM/SWUocy50b1N0cmluZygpKTpTdHJpbmcocykpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7cmV0dXJuIG4uaGFzKHMpfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6dC52YWx1ZXMsaW5wdXQ6cyxpbnN0OmV9KSxvfX0pLGZwPXAoIiRab2RGaWxlIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gciBpbnN0YW5jZW9mIEZpbGV8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJmaWxlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxtcD1wKCIkWm9kVHJhbnNmb3JtIiwoZSx0KT0+e3guaW5pdChlLHQpLGUuX3pvZC5vcHRpbj0ib3B0aW9uYWwiLGNlLm1lbW9pemVyPy5ndWFyZChlKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFpvKGUuY29uc3RydWN0b3IubmFtZSk7Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO2lmKG8uYXN5bmMpcmV0dXJuKHIgaW5zdGFuY2VvZiBQcm9taXNlP3I6UHJvbWlzZS5yZXNvbHZlKHIpKS50aGVuKGk9PihuLnZhbHVlPWksbikpO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBaZTtyZXR1cm4gbi52YWx1ZT1yLG59fSk7ZnVuY3Rpb24gR2MoZSx0KXtyZXR1cm4gZS52YWx1ZT10Lmlzc3Vlcy5sZW5ndGg/dm9pZCAwOnQudmFsdWUsZX1jb25zdCBYcz1wKCIkWm9kT3B0aW9uYWwiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxlLl96b2Qub3B0b3V0PSJvcHRpb25hbCIsQShlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vLHZvaWQgMF0pOnZvaWQgMH0pLEEoZSwicGF0dGVybiIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtyZXR1cm4gbz9uZXcgUmVnRXhwKGBeKCR7UmUoby5zb3VyY2UpfSk/JGApOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG4udmFsdWU9PT12b2lkIDApe2lmKHQuaW5uZXJUeXBlLl96b2Qub3B0aW4hPT0iZGVmYXVsdGVkIilyZXR1cm4gbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5HYyhuLHMpKTpHYyhuLHIpfXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfX0pLGdwPXAoIiRab2RFeGFjdE9wdGlvbmFsIiwoZSx0KT0+e1hzLmluaXQoZSx0KSxBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxBKGUsInBhdHRlcm4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm4pLGUuX3pvZC5wYXJzZT0obixvKT0+dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLGJwPXAoIiRab2ROdWxsYWJsZSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiksQShlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCksQShlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtSZShvLnNvdXJjZSl9fG51bGwpJGApOnZvaWQgMH0pLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM/bmV3IFNldChbLi4ubi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLG51bGxdKTp2b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+bi52YWx1ZT09PW51bGw/bjp0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksdnA9cCgiJFpvZERlZmF1bHQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtpZihuLnZhbHVlPT09dm9pZCAwKXJldHVybiBuLnZhbHVlPXQuZGVmYXVsdFZhbHVlLG47Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+UWMocyx0KSk6UWMocix0KX19KTtmdW5jdGlvbiBRYyhlLHQpe3JldHVybiBlLnZhbHVlPT09dm9pZCAwJiYoZS52YWx1ZT10LmRlZmF1bHRWYWx1ZSksZX1jb25zdCB5cD1wKCIkWm9kUHJlZmF1bHQiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLm9wdGluPSJkZWZhdWx0ZWQiLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+KG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkInx8bi52YWx1ZT09PXZvaWQgMCYmKG4udmFsdWU9dC5kZWZhdWx0VmFsdWUpLHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbykpfSksX3A9cCgiJFpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwidmFsdWVzIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7cmV0dXJuIG8/bmV3IFNldChbLi4ub10uZmlsdGVyKHI9PnIhPT12b2lkIDApKTp2b2lkIDB9KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5ZYyhzLGUpKTpZYyhyLGUpfX0pO2Z1bmN0aW9uIFljKGUsdCl7cmV0dXJuIWUuaXNzdWVzLmxlbmd0aCYmZS52YWx1ZT09PXZvaWQgMCYmZS5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoibm9ub3B0aW9uYWwiLGlucHV0OmUudmFsdWUsaW5zdDp0fSksZX1jb25zdCBrcD1wKCIkWm9kU3VjY2VzcyIsKGUsdCk9Pnt4LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFpvKCJab2RTdWNjZXNzIik7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cy5pc3N1ZXMubGVuZ3RoPT09MCxuKSk6KG4udmFsdWU9ci5pc3N1ZXMubGVuZ3RoPT09MCxuKX19KTtmdW5jdGlvbiBYYyhlLHQsbixvKXtyZXR1cm4gdC5pc3N1ZXMubGVuZ3RoPyhlLnZhbHVlPW4uY2F0Y2hWYWx1ZSh7Li4udCx2YWx1ZTplLnZhbHVlLGVycm9yOntpc3N1ZXM6dC5pc3N1ZXMubWFwKHI9PnllKHIsbyxRKCkpKX0saW5wdXQ6ZS52YWx1ZX0pLGUpOihlLnZhbHVlPXQudmFsdWUsdC5tZW1vJiYoZS5tZW1vPSEwKSxlKX1jb25zdCB3cD1wKCIkWm9kQ2F0Y2giLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW49PT0iZGVmYXVsdGVkIj8iZGVmYXVsdGVkIjoib3B0aW9uYWwiKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxBKGUsInZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6bi52YWx1ZSxpc3N1ZXM6W119LG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+WGMobixzLHQsbykpOlhjKG4scix0LG8pfX0pLCRwPXAoIiRab2ROYU4iLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4oKHR5cGVvZiBuLnZhbHVlIT0ibnVtYmVyInx8IU51bWJlci5pc05hTihuLnZhbHVlKSkmJm4uaXNzdWVzLnB1c2goe2lucHV0Om4udmFsdWUsaW5zdDplLGV4cGVjdGVkOiJuYW4iLGNvZGU6ImludmFsaWRfdHlwZSJ9KSxuKX0pLGVpPXAoIiRab2RQaXBlIiwoZSx0KT0+e3guaW5pdChlLHQpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnZhbHVlcyksQShlLCJvcHRpbiIsbj0+bi5kZWYuaW4uX3pvZC5vcHRpbiksQShlLCJvcHRvdXQiLG49Pm4uZGVmLm91dC5fem9kLm9wdG91dCksQShlLCJwcm9wVmFsdWVzIixuPT5uLmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+bm8oaSx0LmluLG8pKTpubyhzLHQuaW4sbyl9Y29uc3Qgcj10LmluLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5ubyhzLHQub3V0LG8pKTpubyhyLHQub3V0LG8pfX0pO2Z1bmN0aW9uIG5vKGUsdCxuKXtyZXR1cm4gZS5pc3N1ZXMuc29tZShvPT5vLmNvZGUhPT0idW5yZWNvZ25pemVkX2tleXMiKT8oZS5hYm9ydGVkPSEwLGUpOnQuX3pvZC5ydW4oe3ZhbHVlOmUudmFsdWUsaXNzdWVzOmUuaXNzdWVzfSxuKX1jb25zdCB0aT1wKCIkWm9kQ29kZWMiLChlLHQpPT57eC5pbml0KGUsdCksQShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSxBKGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSxBKGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSxBKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoKG8uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCBzPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2U/cy50aGVuKGk9Pm9vKGksdCxvKSk6b28ocyx0LG8pfWVsc2V7Y29uc3Qgcz10Lm91dC5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+b28oaSx0LG8pKTpvbyhzLHQsbyl9fX0pO2Z1bmN0aW9uIG9vKGUsdCxuKXtpZihlLmlzc3Vlcy5sZW5ndGgpcmV0dXJuIGUuYWJvcnRlZD0hMCxlO2lmKChuLmRpcmVjdGlvbnx8ImZvcndhcmQiKT09PSJmb3J3YXJkIil7Y29uc3Qgcj10LnRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+cm8oZSxzLHQub3V0LG4pKTpybyhlLHIsdC5vdXQsbil9ZWxzZXtjb25zdCByPXQucmV2ZXJzZVRyYW5zZm9ybShlLnZhbHVlLGUpO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+cm8oZSxzLHQuaW4sbikpOnJvKGUscix0LmluLG4pfX1mdW5jdGlvbiBybyhlLHQsbixvKXtyZXR1cm4gZS5pc3N1ZXMubGVuZ3RoPyhlLmFib3J0ZWQ9ITAsZSk6bi5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6ZS5pc3N1ZXN9LG8pfWNvbnN0IFNwPXAoIiRab2RQcmVwcm9jZXNzIiwoZSx0KT0+e2VpLmluaXQoZSx0KX0pLHpwPXAoIiRab2RSZWFkb25seSIsKGUsdCk9Pnt4LmluaXQoZSx0KSxBKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpLEEoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEEoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4pLEEoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKGV1KTpldShyKX19KTtmdW5jdGlvbiBldShlKXtyZXR1cm4gZS5tZW1vfHwoZS52YWx1ZT1PYmplY3QuZnJlZXplKGUudmFsdWUpKSxlfWZ1bmN0aW9uIERtKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtsZXQgbj10LnBhdHRlcm4sbz0hIXQuZm9ybWF0Py5pbmNsdWRlcygiaW50IikscixzO2Zvcihjb25zdCBhIG9mIHQuY2hlY2tzPz9bXSl7Y29uc3QgdT1hLl96b2QuZGVmO3UucGF0dGVybiYmKG49dS5wYXR0ZXJuKSxvfHwobz0hIXUuZm9ybWF0Py5pbmNsdWRlcygiaW50IikpO2NvbnN0IGw9dS5taW5pbXVtPz91Lmxlbmd0aCxkPXUubWF4aW11bT8/dS5sZW5ndGg7bCE9PXZvaWQgMCYmKHI9PT12b2lkIDB8fGw+cikmJihyPWwpLGQhPT12b2lkIDAmJihzPT09dm9pZCAwfHxkPHMpJiYocz1kKX1pZihuKXJldHVybiBuLnNvdXJjZTtpZihyIT09dm9pZCAwJiZzIT09dm9pZCAwJiZyPnMpcmV0dXJuIig/ISkiO2lmKHIhPT12b2lkIDB8fHMhPT12b2lkIDApcmV0dXJuIENsKHttaW5pbXVtOnIsbWF4aW11bTpzfSkuc291cmNlO2NvbnN0IGk9ZS5fem9kLnBhdHRlcm47cmV0dXJuKG8mJmk9PT1Mbz9PbDppKT8uc291cmNlfWZ1bmN0aW9uIHVzKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZixuPWUuX3pvZC5wYXR0ZXJuPy5zb3VyY2Usbz10LmlubmVyVHlwZT8/ZS5fem9kLmlubmVyVHlwZTtpZihvKXtjb25zdCByPW8uX3pvZC5wYXR0ZXJuPy5zb3VyY2Uscz11cyhvKTtyZXR1cm4gbiYmciYmcyYmcyE9PXI/bi5yZXBsYWNlKFJlKHIpLCgpPT5SZShzKSk6bn1pZih0Lm9wdGlvbnMpe2NvbnN0IHI9dC5vcHRpb25zLm1hcCh1cyk7aWYoci5ldmVyeShCb29sZWFuKSlyZXR1cm5gXigke3IubWFwKHM9PlJlKHMpKS5qb2luKCJ8Iil9KSRgfXJldHVybiBEbShlKX1jb25zdCBUcD1wKCIkWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e3guaW5pdChlLHQpO2NvbnN0IG49W107Zm9yKGNvbnN0IG8gb2YgdC5wYXJ0cylpZih0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsKXtjb25zdCByPXVzKG8pO2lmKCFyKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7Wy4uLm8uX3pvZC50cmFpdHNdLnNoaWZ0KCl9YCk7bi5wdXNoKFJlKHIpKX1lbHNlIGlmKG89PT1udWxsfHxadS5oYXModHlwZW9mIG8pKW4ucHVzaChJZShgJHtvfWApKTtlbHNlIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7b31gKTtlLl96b2QucGF0dGVybj1uZXcgUmVnRXhwKGBeJHtuLmpvaW4oIiIpfSRgKSxlLl96b2QucGFyc2U9KG8scik9PnR5cGVvZiBvLnZhbHVlIT0ic3RyaW5nIj8oby5pc3N1ZXMucHVzaCh7aW5wdXQ6by52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6InN0cmluZyIsY29kZToiaW52YWxpZF90eXBlIn0pLG8pOihlLl96b2QucGF0dGVybi5sYXN0SW5kZXg9MCxlLl96b2QucGF0dGVybi50ZXN0KG8udmFsdWUpfHxvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0Pz8idGVtcGxhdGVfbGl0ZXJhbCIscGF0dGVybjplLl96b2QucGF0dGVybi5zb3VyY2V9KSxvKX0pLElwPXAoIiRab2RGdW5jdGlvbiIsKGUsdCk9Pih4LmluaXQoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2RlZiIse3ZhbHVlOnR9KSxlLl96b2QuZGVmPXQsZS5pbXBsZW1lbnQ9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9zcyhlLl9kZWYuaW5wdXQsbyk6byxzPVJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P3NzKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLmltcGxlbWVudEFzeW5jPW49PntpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImltcGxlbWVudEFzeW5jKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3luYyBmdW5jdGlvbiguLi5vKXtjb25zdCByPWUuX2RlZi5pbnB1dD9hd2FpdCBpcyhlLl9kZWYuaW5wdXQsbyk6byxzPWF3YWl0IFJlZmxlY3QuYXBwbHkobix0aGlzLHIpO3JldHVybiBlLl9kZWYub3V0cHV0P2F3YWl0IGlzKGUuX2RlZi5vdXRwdXQscyk6c30sIl96b2QiLHt2YWx1ZTplLl96b2QsZW51bWVyYWJsZTohMX0pfSxlLl96b2QucGFyc2U9KG4sbyk9PnR5cGVvZiBuLnZhbHVlIT0iZnVuY3Rpb24iPyhuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJmdW5jdGlvbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxuKTooZS5fZGVmLm91dHB1dCYmZS5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlPT09InByb21pc2UiP24udmFsdWU9ZS5pbXBsZW1lbnRBc3luYyhuLnZhbHVlKTpuLnZhbHVlPWUuaW1wbGVtZW50KG4udmFsdWUpLG4pLGUuaW5wdXQ9KC4uLm4pPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBBcnJheS5pc0FycmF5KG5bMF0pP25ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6bmV3IFlzKHt0eXBlOiJ0dXBsZSIsaXRlbXM6blswXSxyZXN0Om5bMV19KSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pOm5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6blswXSxvdXRwdXQ6ZS5fZGVmLm91dHB1dH0pfSxlLm91dHB1dD1uPT57Y29uc3Qgbz1lLmNvbnN0cnVjdG9yO3JldHVybiBuZXcgbyh7dHlwZToiZnVuY3Rpb24iLGlucHV0OmUuX2RlZi5pbnB1dCxvdXRwdXQ6bn0pfSxlKSksUHA9cCgiJFpvZFByb21pc2UiLChlLHQpPT57eC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5Qcm9taXNlLnJlc29sdmUobi52YWx1ZSkudGhlbihyPT50LmlubmVyVHlwZS5fem9kLnJ1bih7dmFsdWU6cixpc3N1ZXM6W119LG8pKX0pLG5pPXAoIiRab2RMYXp5IiwoZSx0KT0+e3guaW5pdChlLHQpLHh1KGUuX3pvZCwiaW5uZXJUeXBlIiwoKT0+e2NvbnN0IG49dDtyZXR1cm4gbi5fY2FjaGVkSW5uZXJ8fChuLl9jYWNoZWRJbm5lcj10LmdldHRlcigpKSxuLl9jYWNoZWRJbm5lcn0pLEEoZSwicGF0dGVybiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pLEEoZSwicHJvcFZhbHVlcyIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/LnByb3BWYWx1ZXMpLEEoZSwib3B0aW4iLG49Pm4uaW5uZXJUeXBlPy5fem9kPy5vcHRpbj8/dm9pZCAwKSxBKGUsIm9wdG91dCIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dD8/dm9pZCAwKSxlLl96b2QucGFyc2U9KG4sbyk9PmUuX3pvZC5pbm5lclR5cGUuX3pvZC5ydW4obixvKX0pLHhwPXAoIiRab2RDdXN0b20iLChlLHQpPT57Vi5pbml0KGUsdCkseC5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT5uLGUuX3pvZC5jaGVjaz1uPT57Y29uc3Qgbz1uLnZhbHVlLHI9dC5mbihvKTtpZihyIGluc3RhbmNlb2YgUHJvbWlzZSlyZXR1cm4gci50aGVuKHM9PnR1KHMsbixvLGUpKTt0dShyLG4sbyxlKX19KTtmdW5jdGlvbiB0dShlLHQsbixvKXtpZighZSl7Y29uc3Qgcj17Y29kZToiY3VzdG9tIixpbnB1dDpuLGluc3Q6byxwYXRoOlsuLi5vLl96b2QuZGVmLnBhdGg/P1tdXSxjb250aW51ZTohby5fem9kLmRlZi5hYm9ydH07by5fem9kLmRlZi5wYXJhbXMmJihyLnBhcmFtcz1vLl96b2QuZGVmLnBhcmFtcyksdC5pc3N1ZXMucHVzaChpdChyKSl9fWNsYXNzIENwIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2Fubm90IHBhcnNlIGEgcmVmZXJlbmNlIGN5Y2xlIHRoYXQgY2xvc2VzIHRocm91Z2ggYSB0cmFuc2Zvcm0iKSx0aGlzLm5hbWU9IlpvZEN5Y2xpY0Vycm9yIn19Y29uc3QgbHM9In5tZW1vIixudT1bXTtmdW5jdGlvbiBFcChlKXtyZXR1cm4gZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1mdW5jdGlvbiBZcihlKXtyZXR1cm4gZS5tYXAodD0+dC5wYXRoP3suLi50LHBhdGg6dC5wYXRoLnNsaWNlKCl9OnsuLi50fSl9Y29uc3QgT3A9bmV3IFdlYWtNYXAsbnQ9MCx1bz0xLE50PTI7ZnVuY3Rpb24ganQoZSx0LG4pe2NvbnN0IG89T3AuZ2V0KGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG8/TnQ6bnQ7aWYodC5oYXMoZSkpcmV0dXJuIE50O3QuYWRkKGUpO2xldCByPW50O2NvbnN0IHM9ZD0+e2lmKHIhPT1OdCYmZD8uX3pvZCl7Y29uc3QgbT1qdChkLHQsbik7bT5yJiYocj1tKX19LGk9KGQsbSk9PntsZXQgYj1udDtmb3IoY29uc3QgdiBvZiBSZWZsZWN0Lm93bktleXMoZCkpe2NvbnN0IF89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLHYpO2lmKCFfLmVudW1lcmFibGUpY29udGludWU7Y29uc3Qgaz1fLmdldD91bzpfLnZhbHVlPy5fem9kP2p0KF8udmFsdWUsdCxuKTpudDtrPmImJihiPWspfXJldHVybiBifSxhPWQ9PntkPnImJihyPWQpfSx1PWUuX3pvZC5kZWY7c3dpdGNoKHUudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBkPVBvKHUpO2EoZD9pKGQpOnVvKSxzKHUuY2F0Y2hhbGwpO2JyZWFrfWNhc2UiYXJyYXkiOnModS5lbGVtZW50KTticmVhaztjYXNlInR1cGxlIjpmb3IoY29uc3QgZCBvZiB1Lml0ZW1zKXMoZCk7cyh1LnJlc3QpO2JyZWFrO2Nhc2UicmVjb3JkIjpjYXNlIm1hcCI6cyh1LmtleVR5cGUpLHModS52YWx1ZVR5cGUpO2JyZWFrO2Nhc2Uic2V0IjpzKHUudmFsdWVUeXBlKTticmVhaztjYXNlInVuaW9uIjpmb3IoY29uc3QgZCBvZiB1Lm9wdGlvbnMpcyhkKTticmVhaztjYXNlImludGVyc2VjdGlvbiI6cyh1LmxlZnQpLHModS5yaWdodCk7YnJlYWs7Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6cyh1LmlubmVyVHlwZSk7YnJlYWs7Y2FzZSJwaXBlIjpzKHUuaW4pLHModS5vdXQpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnModS5pbnB1dCkscyh1Lm91dHB1dCk7YnJlYWs7Y2FzZSJsYXp5Ijp7Y29uc3QgZD11Ll9jYWNoZWRJbm5lcj8/KG4/ZS5fem9kLmlubmVyVHlwZTp2b2lkIDApO2EoZD9qdChkLHQsITEpOnVvKTticmVha31jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6YnJlYWs7ZGVmYXVsdDpmb3IoY29uc3QgZCBpbiB1KXtjb25zdCBtPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodSxkKTtpZighbXx8bS5nZXQpY29udGludWU7Y29uc3QgYj1tLnZhbHVlO2lmKCEoIWJ8fHR5cGVvZiBiIT0ib2JqZWN0Iikpe2lmKGIuX3pvZClzKGIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShiKSlmb3IoY29uc3QgdiBvZiBiKXModil9fX1yZXR1cm4gdC5kZWxldGUoZSksTG0oZSxyKX1mdW5jdGlvbiBMbShlLHQpe3JldHVybiB0IT09dW8mJk9wLnNldChlLHQ9PT1OdCksdH1mdW5jdGlvbiBVbShlKXtyZXR1cm4ganQoZSxuZXcgU2V0LCEwKSE9PW50fWZ1bmN0aW9uIEhtKGUsdCl7bGV0IG49ZS5idWNrZXRzLmdldCh0KTtyZXR1cm4gbnx8KG49bmV3IFdlYWtNYXAsZS5idWNrZXRzLnNldCh0LG4pKSxufWxldCBzbztjb25zdCBpbz1bXSxCbT17YWxsb2MoZSx0LG4pe2NvbnN0IG89c287aWYoIW8pcmV0dXJuIG47c289dm9pZCAwO2NvbnN0IHI9e3ZhbHVlOm4saXNzdWVzOm51bGx9O3JldHVybiBvLnNldCh0LnZhbHVlLHIpLGlvLnB1c2gociksbn0sZ3VhcmQoZSl7dmFyIHQ7KHQ9ZS5fem9kKS5kZWZlcnJlZD8/KHQuZGVmZXJyZWQ9W10pLGUuX3pvZC5kZWZlcnJlZC5wdXNoKCgpPT57Y29uc3Qgbj1lLl96b2QucGFyc2Usbz0ocixzKT0+e2lmKHMuZGlyZWN0aW9uIT09ImJhY2t3YXJkIiYmQXAocyxyLnZhbHVlKSl0aHJvdyBuZXcgQ3A7cmV0dXJuIG4ocixzKX07ZS5fem9kLnBhcnNlPW8sZS5fem9kLnJ1bj09PW4mJihlLl96b2QucnVuPW8pfSl9LGF0dGFjaChlKXt2YXIgdDtsZXQgbixvPSExLHIsczsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBpPWUuX3pvZC5wYXJzZSxhPSh1LGwpPT57aWYobj09PXZvaWQgMCl7Y29uc3QgST1qdChlLG5ldyBTZXQsITEpO2lmKEk9PT1udClyZXR1cm4gZS5fem9kLnBhcnNlPWksZS5fem9kLnJ1bj09PWEmJihlLl96b2QucnVuPWkpLGkodSxsKTtJPT09TnR8fG8/bj0hMDpvPSEwfWNvbnN0IGQ9dS52YWx1ZTtpZighRXAoZCkpcmV0dXJuIGkodSxsKTtsZXQgbT1sW2xzXTttfHwobT17YnVja2V0czpuZXcgV2Vha01hcCxiYWNrRWRnZXM6dm9pZCAwfSxsW2xzXT1tKTtsZXQgYjtyPT09bD9iPXM6KGI9SG0obSxlKSxyPWwscz1iKTtjb25zdCB2PWIuZ2V0KGQpO2lmKHYpcmV0dXJuIHUudmFsdWU9di52YWx1ZSx2Lmlzc3Vlcz92Lmlzc3Vlcy5sZW5ndGgmJnUuaXNzdWVzLnB1c2goLi4uWXIodi5pc3N1ZXMpKToodS5tZW1vPSEwLG0uYmFja0VkZ2VzPz8obS5iYWNrRWRnZXM9bmV3IFdlYWtTZXQpLG0uYmFja0VkZ2VzLmFkZCh2LnZhbHVlKSksdTtzbz1iO2NvbnN0IF89aW8ubGVuZ3RoLGs9aSh1LGwpO3NvPXZvaWQgMDtjb25zdCAkPWlvLmxlbmd0aD5fP2lvLnBvcCgpOnZvaWQgMDtyZXR1cm4gayBpbnN0YW5jZW9mIFByb21pc2U/ay50aGVuKEk9PigkJiYoJC5pc3N1ZXM9SS5pc3N1ZXMubGVuZ3RoP1lyKEkuaXNzdWVzKTpudSksSSkpOigkJiYoJC5pc3N1ZXM9ay5pc3N1ZXMubGVuZ3RoP1lyKGsuaXNzdWVzKTpudSksayl9O2UuX3pvZC5wYXJzZT1hLGUuX3pvZC5ydW49PT1pJiYoZS5fem9kLnJ1bj1hKX0pfX07ZnVuY3Rpb24gQm8oKXtyZXR1cm4gQm19ZnVuY3Rpb24gQXAoZSx0KXtjb25zdCBuPWVbbHNdPy5iYWNrRWRnZXM7cmV0dXJuIG4hPT12b2lkIDAmJkVwKHQpJiZuLmhhcyh0KX1jb25zdCBGbT0oKT0+e2NvbnN0IGU9e3N0cmluZzp7dW5pdDoiY2hhcmFjdGVycyIsdmVyYjoidG8gaGF2ZSJ9LGZpbGU6e3VuaXQ6ImJ5dGVzIix2ZXJiOiJ0byBoYXZlIn0sYXJyYXk6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sc2V0Ont1bml0OiJpdGVtcyIsdmVyYjoidG8gaGF2ZSJ9LG1hcDp7dW5pdDoiZW50cmllcyIsdmVyYjoidG8gaGF2ZSJ9fTtmdW5jdGlvbiB0KHMpe3JldHVybiBlW3NdPz9udWxsfWNvbnN0IG49e3JlZ2V4OiJpbnB1dCIsZW1haWw6ImVtYWlsIGFkZHJlc3MiLHVybDoiVVJMIixlbW9qaToiZW1vamkiLHV1aWQ6IlVVSUQiLHV1aWR2NDoiVVVJRHY0Iix1dWlkdjY6IlVVSUR2NiIsbmFub2lkOiJuYW5vaWQiLGd1aWQ6IkdVSUQiLGN1aWQ6ImN1aWQiLGN1aWQyOiJjdWlkMiIsdWxpZDoiVUxJRCIseGlkOiJYSUQiLGtzdWlkOiJLU1VJRCIsZGF0ZXRpbWU6IklTTyBkYXRldGltZSIsZGF0ZToiSVNPIGRhdGUiLHRpbWU6IklTTyB0aW1lIixkdXJhdGlvbjoiSVNPIGR1cmF0aW9uIixpcHY0OiJJUHY0IGFkZHJlc3MiLGlwdjY6IklQdjYgYWRkcmVzcyIsbWFjOiJNQUMgYWRkcmVzcyIsY2lkcnY0OiJJUHY0IHJhbmdlIixjaWRydjY6IklQdjYgcmFuZ2UiLGJhc2U2NDoiYmFzZTY0LWVuY29kZWQgc3RyaW5nIixiYXNlNjR1cmw6ImJhc2U2NHVybC1lbmNvZGVkIHN0cmluZyIsanNvbl9zdHJpbmc6IkpTT04gc3RyaW5nIixlMTY0OiJFLjE2NCBudW1iZXIiLGN1cnJlbmN5X2NvZGU6ImN1cnJlbmN5IGNvZGUiLGNyZWRpdF9jYXJkOiJjcmVkaXQgY2FyZCBudW1iZXIiLGliYW46IklCQU4iLGp3dDoiSldUIix0ZW1wbGF0ZV9saXRlcmFsOiJpbnB1dCJ9LG89e25hbjoiTmFOIn07ZnVuY3Rpb24gcihzLGkpe3JldHVybiBzPT09Im51bWJlciImJnR5cGVvZiBpPT0ibnVtYmVyIiYmIU51bWJlci5pc0Zpbml0ZShpKT9TdHJpbmcoaSk6b1tzXT8/c31yZXR1cm4gcz0+e3N3aXRjaChzLmNvZGUpe2Nhc2UiaW52YWxpZF90eXBlIjp7Y29uc3QgaT1yKHMuZXhwZWN0ZWQpLGE9SnUocy5pbnB1dCksdT1yKGEscy5pbnB1dCk7cmV0dXJuYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7aX0sIHJlY2VpdmVkICR7dX1gfWNhc2UiaW52YWxpZF92YWx1ZSI6cmV0dXJuIHMudmFsdWVzLmxlbmd0aD09PTE/YEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7X3Mocy52YWx1ZXNbMF0pfWA6YEludmFsaWQgb3B0aW9uOiBleHBlY3RlZCBvbmUgb2YgJHtucyhzLnZhbHVlcywifCIpfWA7Y2FzZSJ0b29fYmlnIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ijw9IjoiPCIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gaGF2ZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX0gJHthLnVuaXQ/PyJlbGVtZW50cyJ9YDpgVG9vIGJpZzogZXhwZWN0ZWQgJHtzLm9yaWdpbj8/InZhbHVlIn0gdG8gYmUgJHtpfSR7cy5tYXhpbXVtLnRvU3RyaW5nKCl9YH1jYXNlInRvb19zbWFsbCI6e2NvbnN0IGk9cy5leGFjdD8iZXhhY3RseSAiOnMuaW5jbHVzaXZlPyI+PSI6Ij4iLGE9dChzLm9yaWdpbik7cmV0dXJuIGE/YFRvbyBzbWFsbDogZXhwZWN0ZWQgJHtzLm9yaWdpbn0gdG8gaGF2ZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX0gJHthLnVuaXR9YDpgVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBiZSAke2l9JHtzLm1pbmltdW0udG9TdHJpbmcoKX1gfWNhc2UiaW52YWxpZF9mb3JtYXQiOntjb25zdCBpPXM7cmV0dXJuIGkuZm9ybWF0PT09InN0YXJ0c193aXRoIj9gSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCAiJHtpLnByZWZpeH0iYDppLmZvcm1hdD09PSJlbmRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBlbmQgd2l0aCAiJHtpLnN1ZmZpeH0iYDppLmZvcm1hdD09PSJpbmNsdWRlcyI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgIiR7aS5pbmNsdWRlc30iYDppLmZvcm1hdD09PSJyZWdleCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IG1hdGNoIHBhdHRlcm4gJHtpLnBhdHRlcm59YDpgSW52YWxpZCAke25baS5mb3JtYXRdPz9zLmZvcm1hdH1gfWNhc2Uibm90X211bHRpcGxlX29mIjpyZXR1cm5gSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke3MuZGl2aXNvcn1gO2Nhc2UidW5yZWNvZ25pemVkX2tleXMiOnJldHVybmBVbnJlY29nbml6ZWQga2V5JHtzLmtleXMubGVuZ3RoPjE/InMiOiIifTogJHtucyhzLmtleXMsIiwgIil9YDtjYXNlImludmFsaWRfa2V5IjpyZXR1cm5gSW52YWxpZCBrZXkgaW4gJHtzLm9yaWdpbn1gO2Nhc2UiaW52YWxpZF91bmlvbiI6cmV0dXJuIHMub3B0aW9ucyYmQXJyYXkuaXNBcnJheShzLm9wdGlvbnMpJiZzLm9wdGlvbnMubGVuZ3RoPjA/YEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHtzLm9wdGlvbnMubWFwKGE9PmAnJHthfSdgKS5qb2luKCIgfCAiKX1gOnMuaW5jbHVzaXZlPT09ITE/IkludmFsaWQgaW5wdXQ6IG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZWQiOiJJbnZhbGlkIGlucHV0IjtjYXNlImludmFsaWRfZWxlbWVudCI6cmV0dXJuYEludmFsaWQgdmFsdWUgaW4gJHtzLm9yaWdpbn1gO2RlZmF1bHQ6cmV0dXJuIkludmFsaWQgaW5wdXQifX19O2Z1bmN0aW9uIFJwKCl7cmV0dXJue2xvY2FsZUVycm9yOkZtKCl9fWNvbnN0IG9pPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbjpScH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKTt2YXIgb3U7Y29uc3Qgcmk9U3ltYm9sKCJab2RPdXRwdXQiKSxzaT1TeW1ib2woIlpvZElucHV0Iik7Y2xhc3MgWnB7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IFdlYWtNYXAsdGhpcy5faWRtYXA9bmV3IE1hcH1hZGQodCwuLi5uKXtjb25zdCBvPW5bMF07cmV0dXJuIHRoaXMuX21hcC5zZXQodCxvKSxvJiZ0eXBlb2Ygbz09Im9iamVjdCImJiJpZCJpbiBvJiZ0aGlzLl9pZG1hcC5zZXQoby5pZCx0KSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwLHRoaXN9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gbiYmdHlwZW9mIG49PSJvYmplY3QiJiYiaWQiaW4gbiYmdGhpcy5faWRtYXAuZGVsZXRlKG4uaWQpLHRoaXMuX21hcC5kZWxldGUodCksdGhpc31nZXQodCl7Y29uc3Qgbj10Ll96b2QucGFyZW50O2lmKG4pe2NvbnN0IG89ey4uLnRoaXMuZ2V0KG4pPz97fX07ZGVsZXRlIG8uaWQ7Y29uc3Qgcj17Li4ubywuLi50aGlzLl9tYXAuZ2V0KHQpfTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoP3I6dm9pZCAwfXJldHVybiB0aGlzLl9tYXAuZ2V0KHQpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX19ZnVuY3Rpb24gRm8oKXtyZXR1cm4gbmV3IFpwfShvdT1nbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeT8/KG91Ll9fem9kX2dsb2JhbFJlZ2lzdHJ5PUZvKCkpO2NvbnN0IGJlPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnksaWk9KCk9Pnt0aHJvdyBuZXcgRXJyb3IoInpvZCBjb21waWxlKCkgaXMgbm90IGJ1bmRsZWQgaW50byBjYXJkcyAtIHNlZSBwYWNrYWdlcy9pbnRlcm5hbC9jYXJkLWtpdC92aXRlLXNsaW0ubWpzIil9O2NsYXNzIGFpIGV4dGVuZHMgRXJyb3J7fWNsYXNzIGNpIGV4dGVuZHMgRXJyb3J7fWNsYXNzIHVpIGV4dGVuZHMgRXJyb3J7fWNvbnN0IGxpPWlpLGRpPWlpLFZtPWlpO2Z1bmN0aW9uIFZvKGUpe3JldHVybiBlLmNoZWNrcyYmKGUuY2hlY2tzPVsuLi5lLmNoZWNrc10pLGV9ZnVuY3Rpb24gTnAoZSx0KXtyZXR1cm4gbmV3IGUoVm8oe3R5cGU6InN0cmluZyIsLi4ueSh0KX0pKX1mdW5jdGlvbiBqcChlLHQpe3JldHVybiBuZXcgZShWbyh7dHlwZToic3RyaW5nIixjb2VyY2U6ITAsLi4ueSh0KX0pKX1mdW5jdGlvbiBwaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtYWlsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIGhpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZ3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBmaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gbWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjQiLC4uLnkodCl9KX1mdW5jdGlvbiBnaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NiIsLi4ueSh0KX0pfWZ1bmN0aW9uIGJpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY3IiwuLi55KHQpfSl9ZnVuY3Rpb24gSm8oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gdmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlbW9qaSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB5aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Im5hbm9pZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBfaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24ga2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjdWlkMiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB3aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVsaWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gJGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ4aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gU2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJrc3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiB6aShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi55KHQpfSl9ZnVuY3Rpb24gVGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpcHY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIE1wKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibWFjIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIElpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIFBpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY2lkcnY2IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIHhpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIENpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiYmFzZTY0dXJsIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIEVpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZTE2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBxcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImNyZWRpdF9jYXJkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4ueSh0KX0pfWZ1bmN0aW9uIERwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaWJhbiIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1mdW5jdGlvbiBPaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6Imp3dCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnkodCl9KX1jb25zdCBBaT17QW55Om51bGwsTWludXRlOi0xLFNlY29uZDowLE1pbGxpc2Vjb25kOjMsTWljcm9zZWNvbmQ6Nn07ZnVuY3Rpb24gUmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRldGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLG9mZnNldDohMSxsb2NhbDohMSxwcmVjaXNpb246bnVsbCwuLi55KHQpfSl9ZnVuY3Rpb24gWmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJkYXRlIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIE5pKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidGltZSIsY2hlY2s6InN0cmluZ19mb3JtYXQiLHByZWNpc2lvbjpudWxsLC4uLnkodCl9KX1mdW5jdGlvbiBqaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImR1cmF0aW9uIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsLi4ueSh0KX0pfWZ1bmN0aW9uIExwKGUsdCl7cmV0dXJuIG5ldyBlKFZvKHt0eXBlOiJudW1iZXIiLGNoZWNrczpbXSwuLi55KHQpfSkpfWZ1bmN0aW9uIFVwKGUsdCl7cmV0dXJuIG5ldyBlKFZvKHt0eXBlOiJudW1iZXIiLGNvZXJjZTohMCxjaGVja3M6W10sLi4ueSh0KX0pKX1mdW5jdGlvbiBIcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJzYWZlaW50IiwuLi55KHQpfSl9ZnVuY3Rpb24gQnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIEZwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImZsb2F0NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBWcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIEpwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQzMiIsLi4ueSh0KX0pfWZ1bmN0aW9uIEtwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJib29sZWFuIiwuLi55KHQpfSl9ZnVuY3Rpb24gV3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gR3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsLi4ueSh0KX0pfWZ1bmN0aW9uIFFwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNvZXJjZTohMCwuLi55KHQpfSl9ZnVuY3Rpb24gWXAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY2hlY2s6ImJpZ2ludF9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiaW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBYcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJ1aW50NjQiLC4uLnkodCl9KX1mdW5jdGlvbiBlaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3ltYm9sIiwuLi55KHQpfSl9ZnVuY3Rpb24gdGgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InVuZGVmaW5lZCIsLi4ueSh0KX0pfWZ1bmN0aW9uIG5oKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsIiwuLi55KHQpfSl9ZnVuY3Rpb24gb2goZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJhbnkifSl9ZnVuY3Rpb24gcmgoZSl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmtub3duIn0pfWZ1bmN0aW9uIHNoKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuZXZlciIsLi4ueSh0KX0pfWZ1bmN0aW9uIGloKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ2b2lkIiwuLi55KHQpfSl9ZnVuY3Rpb24gYWgoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRhdGUiLC4uLnkodCl9KX1mdW5jdGlvbiBjaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsY29lcmNlOiEwLC4uLnkodCl9KX1mdW5jdGlvbiB1aChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibmFuIiwuLi55KHQpfSl9ZnVuY3Rpb24geGUoZSx0KXtyZXR1cm4gbmV3IERzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gcGUoZSx0KXtyZXR1cm4gbmV3IERzKHtjaGVjazoibGVzc190aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gQ2UoZSx0KXtyZXR1cm4gbmV3IExzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiExfSl9ZnVuY3Rpb24gaGUoZSx0KXtyZXR1cm4gbmV3IExzKHtjaGVjazoiZ3JlYXRlcl90aGFuIiwuLi55KHQpLHZhbHVlOmUsaW5jbHVzaXZlOiEwfSl9ZnVuY3Rpb24gS28oZSl7cmV0dXJuIENlKDAsZSl9ZnVuY3Rpb24gV28oZSl7cmV0dXJuIHhlKDAsZSl9ZnVuY3Rpb24gR28oZSl7cmV0dXJuIHBlKDAsZSl9ZnVuY3Rpb24gUW8oZSl7cmV0dXJuIGhlKDAsZSl9ZnVuY3Rpb24gS2UoZSx0KXtyZXR1cm4gbmV3IHFsKHtjaGVjazoibXVsdGlwbGVfb2YiLC4uLnkodCksdmFsdWU6ZX0pfWZ1bmN0aW9uIFhlKGUsdCl7cmV0dXJuIG5ldyBVbCh7Y2hlY2s6Im1heF9zaXplIiwuLi55KHQpLG1heGltdW06ZX0pfWZ1bmN0aW9uIEVlKGUsdCl7cmV0dXJuIG5ldyBIbCh7Y2hlY2s6Im1pbl9zaXplIiwuLi55KHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIGh0KGUsdCl7cmV0dXJuIG5ldyBCbCh7Y2hlY2s6InNpemVfZXF1YWxzIiwuLi55KHQpLHNpemU6ZX0pfWZ1bmN0aW9uIGZ0KGUsdCl7cmV0dXJuIG5ldyBGbCh7Y2hlY2s6Im1heF9sZW5ndGgiLC4uLnkodCksbWF4aW11bTplfSl9ZnVuY3Rpb24gamUoZSx0KXtyZXR1cm4gbmV3IFZsKHtjaGVjazoibWluX2xlbmd0aCIsLi4ueSh0KSxtaW5pbXVtOmV9KX1mdW5jdGlvbiBtdChlLHQpe3JldHVybiBuZXcgSmwoe2NoZWNrOiJsZW5ndGhfZXF1YWxzIiwuLi55KHQpLGxlbmd0aDplfSl9ZnVuY3Rpb24gcm4oZSx0KXtyZXR1cm4gbmV3IEtsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJyZWdleCIsLi4ueSh0KSxwYXR0ZXJuOmV9KX1mdW5jdGlvbiBzbihlKXtyZXR1cm4gbmV3IFdsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJsb3dlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiBhbihlKXtyZXR1cm4gbmV3IEdsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJ1cHBlcmNhc2UiLC4uLnkoZSl9KX1mdW5jdGlvbiBjbihlLHQpe3JldHVybiBuZXcgUWwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIiwuLi55KHQpLGluY2x1ZGVzOmV9KX1mdW5jdGlvbiB1bihlLHQpe3JldHVybiBuZXcgWWwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InN0YXJ0c193aXRoIiwuLi55KHQpLHByZWZpeDplfSl9ZnVuY3Rpb24gbG4oZSx0KXtyZXR1cm4gbmV3IFhsKHtjaGVjazoic3RyaW5nX2Zvcm1hdCIsZm9ybWF0OiJlbmRzX3dpdGgiLC4uLnkodCksc3VmZml4OmV9KX1mdW5jdGlvbiBZbyhlLHQsbil7cmV0dXJuIG5ldyBlZCh7Y2hlY2s6InByb3BlcnR5Iixwcm9wZXJ0eTplLHNjaGVtYTp0LC4uLnkobil9KX1mdW5jdGlvbiBkbihlLHQpe3JldHVybiBuZXcgdGQoe2NoZWNrOiJwcm9wZXJ0aWVzIixzaGFwZTplLC4uLnkodCl9KX1mdW5jdGlvbiBwbihlLHQpe3JldHVybiBuZXcgbmQoe2NoZWNrOiJtaW1lX3R5cGUiLG1pbWU6ZSwuLi55KHQpfSl9ZnVuY3Rpb24gJGUoZSl7cmV0dXJuIG5ldyBvZCh7Y2hlY2s6Im92ZXJ3cml0ZSIsdHg6ZX0pfWZ1bmN0aW9uIGhuKGUpe3JldHVybiAkZSh0PT50Lm5vcm1hbGl6ZShlKSl9ZnVuY3Rpb24gZm4oKXtyZXR1cm4gJGUoZT0+ZS50cmltKCkpfWZ1bmN0aW9uIG1uKCl7cmV0dXJuICRlKGU9PmUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gZ24oKXtyZXR1cm4gJGUoZT0+ZS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBibigpe3JldHVybiAkZShlPT5BdShlKSl9ZnVuY3Rpb24gbGgoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiYXJyYXkiLGVsZW1lbnQ6dCwuLi55KG4pfSl9ZnVuY3Rpb24gSm0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCwuLi55KG4pfSl9ZnVuY3Rpb24gS20oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6dCxpbmNsdXNpdmU6ITEsLi4ueShuKX0pfWZ1bmN0aW9uIFdtKGUsdCxuLG8pe3JldHVybiBuZXcgZSh7dHlwZToidW5pb24iLG9wdGlvbnM6bixkaXNjcmltaW5hdG9yOnQsLi4ueShvKX0pfWZ1bmN0aW9uIEdtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImludGVyc2VjdGlvbiIsbGVmdDp0LHJpZ2h0Om59KX1mdW5jdGlvbiBRbShlLHQsbixvKXtjb25zdCByPW4gaW5zdGFuY2VvZiB4LHM9cj9vOm4saT1yP246bnVsbDtyZXR1cm4gbmV3IGUoe3R5cGU6InR1cGxlIixpdGVtczp0LHJlc3Q6aSwuLi55KHMpfSl9ZnVuY3Rpb24gWW0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gWG0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJtYXAiLGtleVR5cGU6dCx2YWx1ZVR5cGU6biwuLi55KG8pfSl9ZnVuY3Rpb24gZWcoZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToic2V0Iix2YWx1ZVR5cGU6dCwuLi55KG4pfSl9ZnVuY3Rpb24gdGcoZSx0LG4pe2NvbnN0IG89QXJyYXkuaXNBcnJheSh0KT9PYmplY3QuZnJvbUVudHJpZXModC5tYXAocj0+W3Iscl0pKTp0O3JldHVybiBuZXcgZSh7dHlwZToiZW51bSIsZW50cmllczpvLC4uLnkobil9KX1mdW5jdGlvbiBuZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIG9nKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxpdGVyYWwiLHZhbHVlczpBcnJheS5pc0FycmF5KHQpP3Q6W3RdLC4uLnkobil9KX1mdW5jdGlvbiBkaChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZmlsZSIsLi4ueSh0KX0pfWZ1bmN0aW9uIHJnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTp0fSl9ZnVuY3Rpb24gc2coZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGlnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBhZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6dCxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24iP24oKTp4byhuKX19KX1mdW5jdGlvbiBjZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJub25vcHRpb25hbCIsaW5uZXJUeXBlOnQsLi4ueShuKX0pfWZ1bmN0aW9uIHVnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGxnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6dCxjYXRjaFZhbHVlOnR5cGVvZiBuPT0iZnVuY3Rpb24iP246a3Mobil9KX1mdW5jdGlvbiBkZyhlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJwaXBlIixpbjp0LG91dDpufSl9ZnVuY3Rpb24gcGcoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlYWRvbmx5Iixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIGhnKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InRlbXBsYXRlX2xpdGVyYWwiLHBhcnRzOnQsLi4ueShuKX0pfWZ1bmN0aW9uIGZnKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJsYXp5IixnZXR0ZXI6dH0pfWZ1bmN0aW9uIG1nKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJwcm9taXNlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIHBoKGUsdCxuKXtjb25zdCBvPXkobik7cmV0dXJuIG8uYWJvcnQ/PyhvLmFib3J0PSEwKSxuZXcgZSh7dHlwZToiY3VzdG9tIixjaGVjazoiY3VzdG9tIixmbjp0LC4uLm99KX1mdW5jdGlvbiBoaChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ueShuKX0pfWZ1bmN0aW9uIGZoKGUsdCl7Y29uc3Qgbj1taChvPT4oby5hZGRJc3N1ZT1yPT57aWYodHlwZW9mIHI9PSJzdHJpbmciKW8uaXNzdWVzLnB1c2goaXQocixvLnZhbHVlLG4uX3pvZC5kZWYpKTtlbHNle2NvbnN0IHM9cjtzLmZhdGFsJiYocy5jb250aW51ZT0hMSkscy5jb2RlPz8ocy5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gc3x8KHMuaW5wdXQ9by52YWx1ZSkscy5pbnN0Pz8ocy5pbnN0PW4pLHMuY29udGludWU/PyhzLmNvbnRpbnVlPSFuLl96b2QuZGVmLmFib3J0KSxvLmlzc3Vlcy5wdXNoKGl0KHMpKX19LGUoby52YWx1ZSxvKSksdCk7cmV0dXJuIG59ZnVuY3Rpb24gbWgoZSx0KXtjb25zdCBuPW5ldyBWKHtjaGVjazoiY3VzdG9tIiwuLi55KHQpfSk7cmV0dXJuIG4uX3pvZC5jaGVjaz1lLG59ZnVuY3Rpb24gZ2goZSl7Y29uc3QgdD1uZXcgVih7Y2hlY2s6ImRlc2NyaWJlIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWJlLmdldChuKT8/e307YmUuYWRkKG4sey4uLm8sZGVzY3JpcHRpb246ZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIGJoKGUpe2NvbnN0IHQ9bmV3IFYoe2NoZWNrOiJtZXRhIn0pO3JldHVybiB0Ll96b2Qub25hdHRhY2g9W249Pntjb25zdCBvPWJlLmdldChuKT8/e307YmUuYWRkKG4sey4uLm8sLi4uZX0pfV0sdC5fem9kLmNoZWNrPSgpPT57fSx0fWZ1bmN0aW9uIHZoKGUsdCl7Y29uc3Qgbj15KHQpO2xldCBvPW4udHJ1dGh5Pz9bInRydWUiLCIxIiwieWVzIiwib24iLCJ5IiwiZW5hYmxlZCJdLHI9bi5mYWxzeT8/WyJmYWxzZSIsIjAiLCJubyIsIm9mZiIsIm4iLCJkaXNhYmxlZCJdO24uY2FzZSE9PSJzZW5zaXRpdmUiJiYobz1vLm1hcCh2PT50eXBlb2Ygdj09InN0cmluZyI/di50b0xvd2VyQ2FzZSgpOnYpLHI9ci5tYXAodj0+dHlwZW9mIHY9PSJzdHJpbmciP3YudG9Mb3dlckNhc2UoKTp2KSk7Y29uc3Qgcz1uZXcgU2V0KG8pLGk9bmV3IFNldChyKSxhPWUuQ29kZWM/P3RpLHU9ZS5Cb29sZWFuPz9XcyxsPWUuU3RyaW5nPz9vbixkPW5ldyBsKHt0eXBlOiJzdHJpbmciLGVycm9yOm4uZXJyb3J9KSxtPW5ldyB1KHt0eXBlOiJib29sZWFuIixlcnJvcjpuLmVycm9yfSksYj1uZXcgYSh7dHlwZToicGlwZSIsaW46ZCxvdXQ6bSx0cmFuc2Zvcm06KCh2LF8pPT57bGV0IGs9djtyZXR1cm4gbi5jYXNlIT09InNlbnNpdGl2ZSImJihrPWsudG9Mb3dlckNhc2UoKSkscy5oYXMoayk/ITA6aS5oYXMoayk/ITE6KF8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLGV4cGVjdGVkOiJzdHJpbmdib29sIix2YWx1ZXM6Wy4uLnMsLi4uaV0saW5wdXQ6Xy52YWx1ZSxpbnN0OmIsY29udGludWU6ITF9KSx7fSl9KSxyZXZlcnNlVHJhbnNmb3JtOigodixfKT0+dj09PSEwP29bMF18fCJ0cnVlIjpyWzBdfHwiZmFsc2UiKSxlcnJvcjpuLmVycm9yfSk7cmV0dXJuIGIuX3pvZC5iYWcudHJ1dGh5PW8sYi5fem9kLmJhZy5mYWxzeT1yLGIuX3pvZC5iYWcuY2FzZT1uLmNhc2U/PyJpbnNlbnNpdGl2ZSIsYn1mdW5jdGlvbiBndChlLHQsbixvPXt9KXtjb25zdCByPXkobykscz17Y2hlY2s6InN0cmluZ19mb3JtYXQiLHR5cGU6InN0cmluZyIsZm9ybWF0OnQsZm46dHlwZW9mIG49PSJmdW5jdGlvbiI/bjphPT5uLnRlc3QoYSksLi4ucn07cmV0dXJuIG4gaW5zdGFuY2VvZiBSZWdFeHAmJihzLnBhdHRlcm49biksbmV3IGUocyl9Y29uc3QgZ2c9KCk9Pih7fSksYmc9KCk9Pih7fSksdmc9KCk9Pih7fSkseWc9KCk9Pih7fSksX2c9KCk9Pih7fSkseWg9KCk9PigpPT4oe30pLGRzPSgpPT4oKT0+KHt9KSxrZz0oKT0+KHt9KSx2ZT0oKT0+KHt9KSx3Zz0oKT0+KHt9KSwkZz0oKT0+KHt9KSxTZz0oKT0+KHt9KSx6Zz0oKT0+KHt9KSxUZz0oKT0+KHt9KSxJZz0oKT0+KHt9KSxQZz0oKT0+KHt9KSx4Zz0oKT0+KHt9KSxDZz0oKT0+KHt9KSxFZz0oKT0+KHt9KSxPZz0oKT0+KHt9KSxBZz0oKT0+KHt9KSxSZz0oKT0+KHt9KSxaZz0oKT0+KHt9KSxOZz0oKT0+KHt9KSxqZz0oKT0+KHt9KSxNZz0oKT0+KHt9KSxxZz0oKT0+KHt9KSxEZz0oKT0+KHt9KSxMZz0oKT0+KHt9KSxVZz0oKT0+KHt9KSxIZz0oKT0+KHt9KSxCZz0oKT0+KHt9KSxGZz0oKT0+KHt9KSxWZz0oKT0+KHt9KSxfaD0oKT0+KHt9KSxKZz0oKT0+KHt9KSxLZz0oKT0+KHt9KSxXZz0oKT0+KHt9KSxHZz0oKT0+KHt9KSxRZz0oKT0+KHt9KSxZZz0oKT0+KHt9KSxYZz0oKT0+KHt9KSxlYj0oKT0+KHt9KSx0Yj0oKT0+KHt9KSxuYj0oKT0+KHt9KSxvYj0oKT0+KHt9KSxraD0oKT0+KHt9KSxyYj0oKT0+KHt9KSxNaT0oKT0+KHt9KTtjbGFzcyBzYnt9Y29uc3QgaWI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHdoPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkWm9kQW55OldkLCRab2RBcnJheTplcCwkWm9kQXN5bmNFcnJvcjpaZSwkWm9kQmFzZTY0OkFkLCRab2RCYXNlNjRVUkw6WmQsJFpvZEJpZ0ludDpHcywkWm9kQmlnSW50Rm9ybWF0OkZkLCRab2RCb29sZWFuOldzLCRab2RDSURSdjQ6eGQsJFpvZENJRFJ2NjpFZCwkWm9kQ1VJRDpiZCwkWm9kQ1VJRDI6dmQsJFpvZENhdGNoOndwLCRab2RDaGVjazpWLCRab2RDaGVja0JpZ0ludEZvcm1hdDpMbCwkWm9kQ2hlY2tFbmRzV2l0aDpYbCwkWm9kQ2hlY2tHcmVhdGVyVGhhbjpMcywkWm9kQ2hlY2tJbmNsdWRlczpRbCwkWm9kQ2hlY2tMZW5ndGhFcXVhbHM6SmwsJFpvZENoZWNrTGVzc1RoYW46RHMsJFpvZENoZWNrTG93ZXJDYXNlOldsLCRab2RDaGVja01heExlbmd0aDpGbCwkWm9kQ2hlY2tNYXhTaXplOlVsLCRab2RDaGVja01pbWVUeXBlOm5kLCRab2RDaGVja01pbkxlbmd0aDpWbCwkWm9kQ2hlY2tNaW5TaXplOkhsLCRab2RDaGVja011bHRpcGxlT2Y6cWwsJFpvZENoZWNrTnVtYmVyRm9ybWF0OkRsLCRab2RDaGVja092ZXJ3cml0ZTpvZCwkWm9kQ2hlY2tQcm9wZXJ0aWVzOnRkLCRab2RDaGVja1Byb3BlcnR5OmVkLCRab2RDaGVja1JlZ2V4OktsLCRab2RDaGVja1NpemVFcXVhbHM6QmwsJFpvZENoZWNrU3RhcnRzV2l0aDpZbCwkWm9kQ2hlY2tTdHJpbmdGb3JtYXQ6bm4sJFpvZENoZWNrVXBwZXJDYXNlOkdsLCRab2RDb2RlYzp0aSwkWm9kQ3JlZGl0Q2FyZDpNZCwkWm9kQ3VzdG9tOnhwLCRab2RDdXN0b21TdHJpbmdGb3JtYXQ6SGQsJFpvZEN5Y2xpY0Vycm9yOkNwLCRab2REYXRlOlhkLCRab2REZWZhdWx0OnZwLCRab2REaXNjcmltaW5hdGVkVW5pb246YXAsJFpvZEUxNjQ6TmQsJFpvZEVtYWlsOnVkLCRab2RFbW9qaTptZCwkWm9kRW5jb2RlRXJyb3I6Wm8sJFpvZEVudW06cHAsJFpvZEVycm9yOmVsLCRab2RFeGFjdE9wdGlvbmFsOmdwLCRab2RGaWxlOmZwLCRab2RGdW5jdGlvbjpJcCwkWm9kR1VJRDphZCwkWm9kSUJBTjpEZCwkWm9kSVB2NDpUZCwkWm9kSVB2NjpJZCwkWm9kSVNPRGF0ZTokZCwkWm9kSVNPRGF0ZVRpbWU6d2QsJFpvZElTT0R1cmF0aW9uOnpkLCRab2RJU09UaW1lOlNkLCRab2RJbnRlcnNlY3Rpb246Y3AsJFpvZEpXVDpVZCwkWm9kS1NVSUQ6a2QsJFpvZExhenk6bmksJFpvZExpdGVyYWw6aHAsJFpvZE1BQzpQZCwkWm9kTWFwOmxwLCRab2ROYU46JHAsJFpvZE5hbm9JRDpnZCwkWm9kTmV2ZXI6UWQsJFpvZE5vbk9wdGlvbmFsOl9wLCRab2ROdWxsOktkLCRab2ROdWxsYWJsZTpicCwkWm9kTnVtYmVyOktzLCRab2ROdW1iZXJGb3JtYXQ6QmQsJFpvZE9iamVjdDpvcCwkWm9kT2JqZWN0SklUOnJwLCRab2RPcHRpb25hbDpYcywkWm9kUGlwZTplaSwkWm9kUHJlZmF1bHQ6eXAsJFpvZFByZXByb2Nlc3M6U3AsJFpvZFByb21pc2U6UHAsJFpvZFJlYWRvbmx5OnpwLCRab2RSZWFsRXJyb3I6ZmUsJFpvZFJlY29yZDp1cCwkWm9kUmVnaXN0cnk6WnAsJFpvZFNldDpkcCwkWm9kU3RyaW5nOm9uLCRab2RTdHJpbmdGb3JtYXQ6SCwkWm9kU3VjY2VzczprcCwkWm9kU3ltYm9sOlZkLCRab2RUZW1wbGF0ZUxpdGVyYWw6VHAsJFpvZFRyYW5zZm9ybTptcCwkWm9kVHVwbGU6WXMsJFpvZFR5cGU6eCwkWm9kVUxJRDp5ZCwkWm9kVVJMOmZkLCRab2RVVUlEOmNkLCRab2RVbmRlZmluZWQ6SmQsJFpvZFVuaW9uOkhvLCRab2RVbmtub3duOkdkLCRab2RWb2lkOllkLCRab2RYSUQ6X2QsJFpvZFhvcjpzcCwkYnJhbmQ6U3MsJGNvbnN0cnVjdG9yOnAsJGlucHV0OnNpLCRvdXRwdXQ6cmksRG9jOnJkLElOVkFMSUQ6YWksSlNPTlNjaGVtYTppYixKU09OU2NoZW1hR2VuZXJhdG9yOnNiLE5FVkVSOiRzLFRpbWVQcmVjaXNpb246QWksVVJMX0JBRF9GT1JNQVQ6SHMsVVJMX1VOUEFSU0VBQkxFOlV0LFpvZENvbXBpbGVBc3luY0Vycm9yOmNpLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOnVpLF9hbnk6b2gsX2FycmF5OmxoLF9iYXNlNjQ6eGksX2Jhc2U2NHVybDpDaSxfYmlnaW50OkdwLF9ib29sZWFuOktwLF9jYXRjaDpsZyxfY2hlY2s6bWgsX2NpZHJ2NDpJaSxfY2lkcnY2OlBpLF9jb2VyY2VkQmlnaW50OlFwLF9jb2VyY2VkQm9vbGVhbjpXcCxfY29lcmNlZERhdGU6Y2gsX2NvZXJjZWROdW1iZXI6VXAsX2NvZXJjZWRTdHJpbmc6anAsX2NyZWRpdENhcmQ6cXAsX2N1aWQ6X2ksX2N1aWQyOmtpLF9jdXN0b206cGgsX2RhdGU6YWgsX2RlY29kZTpQcyxfZGVjb2RlQXN5bmM6Q3MsX2RlZmF1bHQ6YWcsX2Rpc2NyaW1pbmF0ZWRVbmlvbjpXbSxfZTE2NDpFaSxfZW1haWw6cGksX2Vtb2ppOnZpLF9lbmNvZGU6SXMsX2VuY29kZUFzeW5jOnhzLF9lbmRzV2l0aDpsbixfZW51bTp0ZyxfZmlsZTpkaCxfZmxvYXQzMjpCcCxfZmxvYXQ2NDpGcCxfZ3Q6Q2UsX2d0ZTpoZSxfZ3VpZDpoaSxfaWJhbjpEcCxfaW5jbHVkZXM6Y24sX2ludDpIcCxfaW50MzI6VnAsX2ludDY0OllwLF9pbnRlcnNlY3Rpb246R20sX2lwdjQ6emksX2lwdjY6VGksX2lzb0RhdGU6WmksX2lzb0RhdGVUaW1lOlJpLF9pc29EdXJhdGlvbjpqaSxfaXNvVGltZTpOaSxfand0Ok9pLF9rc3VpZDpTaSxfbGF6eTpmZyxfbGVuZ3RoOm10LF9saXRlcmFsOm9nLF9sb3dlcmNhc2U6c24sX2x0OnhlLF9sdGU6cGUsX21hYzpNcCxfbWFwOlhtLF9tYXg6cGUsX21heExlbmd0aDpmdCxfbWF4U2l6ZTpYZSxfbWltZTpwbixfbWluOmhlLF9taW5MZW5ndGg6amUsX21pblNpemU6RWUsX211bHRpcGxlT2Y6S2UsX25hbjp1aCxfbmFub2lkOnlpLF9uYXRpdmVFbnVtOm5nLF9uZWdhdGl2ZTpXbyxfbmV2ZXI6c2gsX25vbm5lZ2F0aXZlOlFvLF9ub25vcHRpb25hbDpjZyxfbm9ucG9zaXRpdmU6R28sX25vcm1hbGl6ZTpobixfbnVsbDpuaCxfbnVsbGFibGU6aWcsX251bWJlcjpMcCxfb3B0aW9uYWw6c2csX292ZXJ3cml0ZTokZSxfcGFyc2U6R3QsX3BhcnNlQXN5bmM6UXQsX3BpcGU6ZGcsX3Bvc2l0aXZlOktvLF9wcm9taXNlOm1nLF9wcm9wZXJ0aWVzOmRuLF9wcm9wZXJ0eTpZbyxfcmVhZG9ubHk6cGcsX3JlY29yZDpZbSxfcmVmaW5lOmhoLF9yZWdleDpybixfc2FmZURlY29kZTpPcyxfc2FmZURlY29kZUFzeW5jOlJzLF9zYWZlRW5jb2RlOkVzLF9zYWZlRW5jb2RlQXN5bmM6QXMsX3NhZmVQYXJzZTpZdCxfc2FmZVBhcnNlQXN5bmM6WHQsX3NldDplZyxfc2l6ZTpodCxfc2x1Z2lmeTpibixfc3RhcnRzV2l0aDp1bixfc3RyaW5nOk5wLF9zdHJpbmdGb3JtYXQ6Z3QsX3N0cmluZ2Jvb2w6dmgsX3N1Y2Nlc3M6dWcsX3N1cGVyUmVmaW5lOmZoLF9zeW1ib2w6ZWgsX3RlbXBsYXRlTGl0ZXJhbDpoZyxfdG9Mb3dlckNhc2U6bW4sX3RvVXBwZXJDYXNlOmduLF90cmFuc2Zvcm06cmcsX3RyaW06Zm4sX3R1cGxlOlFtLF91aW50MzI6SnAsX3VpbnQ2NDpYcCxfdWxpZDp3aSxfdW5kZWZpbmVkOnRoLF91bmlvbjpKbSxfdW5rbm93bjpyaCxfdXBwZXJjYXNlOmFuLF91cmw6Sm8sX3V1aWQ6ZmksX3V1aWR2NDptaSxfdXVpZHY2OmdpLF91dWlkdjc6YmksX3ZvaWQ6aWgsX3hpZDokaSxfeG9yOkttLGJhc2U2NENoYXJzZXQ6T2QsYmFzZTY0dXJsQ2hhcnNldDpKcyxjYW5QYXJzZVVSTDpCcyxjbG9uZTpLLGNvbXBpbGU6bGksY29tcGlsZUZuOlZtLGNvbmZpZzpRLGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZDpkcyxjcmVhdGVUb0pTT05TY2hlbWFNZXRob2Q6eWgsZGVjb2RlOlhmLGRlY29kZUFzeW5jOnRtLGRlc2NyaWJlOmdoLGVuY29kZTpZZixlbmNvZGVBc3luYzplbSxleHRyYWN0RGVmczp5ZyxmaW5hbGl6ZTpfZyxmbGF0dGVuRXJyb3I6Tm8sZm9ybWF0RXJyb3I6am8sZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjpRcyxnbG9iYWxDb25maWc6Y2UsZ2xvYmFsUmVnaXN0cnk6YmUsaGFuZGxlVW5yZXByZXNlbnRhYmxlOmJnLGluaXRpYWxpemVDb250ZXh0OmdnLGlzQmFja0VkZ2U6QXAsaXNSZWN1cnNpdmVTY2hlbWE6VW0saXNWYWxpZEJhc2U2NDpWcyxpc1ZhbGlkQmFzZTY0VVJMOlJkLGlzVmFsaWRDSURSdjY6Q2QsaXNWYWxpZENyZWRpdENhcmQ6amQsaXNWYWxpZElCQU46cWQsaXNWYWxpZElQdjY6RnMsaXNWYWxpZEpXVDpMZCxsb2NhbGVzOm9pLG1lbW9pemVyOkJvLG1lcmdlVmFsdWVzOnZvLG1ldGE6YmgscGFyc2U6c3MscGFyc2VBc3luYzppcyxwYXJzZVVSTE9iamVjdDpkZCxwcmV0dGlmeUVycm9yOlRzLHByb2Nlc3M6a2cscHJvY2Vzc1NjaGVtYTp2ZyxyZWdleGVzOlVvLHJlZ2lzdHJ5OkZvLHNhZmVEZWNvZGU6b20sc2FmZURlY29kZUFzeW5jOnNtLHNhZmVFbmNvZGU6bm0sc2FmZUVuY29kZUFzeW5jOnJtLHNhZmVQYXJzZTpubCxzYWZlUGFyc2VBc3luYzpLZixzdGFuZGFyZFByb3BzOlVzLHN0cmlwVGFiQW5kTmV3bGluZTpjcyx0b0RvdFBhdGg6dGwsdG9KU09OU2NoZW1hOk1pLHRvWm9kOklvLHRyZWVpZnlFcnJvcjp6cyx1cmxIb3N0bmFtZU9rOnBkLHVybFByb3RvY29sT2s6aGQsdXRpbDp3cyx2YWxpZGF0ZTpxbyx2YWxpZGF0ZUFzeW5jOkRvLHZhbGlkYXRlVVJMOmxkLHZlcnNpb246c2Qsd2l0aFBhcnNlcjpkaX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxydT1TeW1ib2woInoudmlzaXQvcmVzb2x2aW5nIik7ZnVuY3Rpb24gcWkoZSx0KXtjb25zdCBuPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6KGksYSk9Pntjb25zdCB1PXRbaS5fem9kLmRlZi50eXBlXTtyZXR1cm4gdT91KGksYSk6aX0sbz1uZXcgTWFwO2Z1bmN0aW9uIHIoaSl7Y29uc3QgYT1vLmdldChpKTtpZihhPT09cnUpcmV0dXJuIG5ldyBuaSh7dHlwZToibGF6eSIsZ2V0dGVyOigpPT5vLmdldChpKX0pO2lmKGEhPT12b2lkIDApcmV0dXJuIGE7by5zZXQoaSxydSk7Y29uc3QgdT1zKGkpLGw9bih1LHUhPT1pKTtyZXR1cm4gby5zZXQoaSxsKSxsfWZ1bmN0aW9uIHMoaSl7Y29uc3QgYT1pLl96b2QuZGVmO3N3aXRjaChhLnR5cGUpe2Nhc2Uib2JqZWN0Ijp7Y29uc3QgbD1hLnNoYXBlLGQ9T2JqZWN0LmtleXMobCk7bGV0IG09ITE7Y29uc3QgYj17fTtmb3IoY29uc3QgXyBvZiBkKXtjb25zdCBrPXIobFtfXSk7ayE9PWxbX10mJihtPSEwKSxiW19dPWt9bGV0IHY9YS5jYXRjaGFsbDtyZXR1cm4gYS5jYXRjaGFsbCYmKHY9cihhLmNhdGNoYWxsKSx2IT09YS5jYXRjaGFsbCYmKG09ITApKSxtP0soaSx7Li4uYSxzaGFwZTpiLGNhdGNoYWxsOnZ9KTppfWNhc2UiYXJyYXkiOntjb25zdCBsPXIoYS5lbGVtZW50KTtyZXR1cm4gbD09PWEuZWxlbWVudD9pOksoaSx7Li4uYSxlbGVtZW50Omx9KX1jYXNlInR1cGxlIjp7Y29uc3QgbD1hLml0ZW1zO2xldCBkPSExO2NvbnN0IG09W107Zm9yKGNvbnN0IHYgb2YgbCl7Y29uc3QgXz1yKHYpO18hPT12JiYoZD0hMCksbS5wdXNoKF8pfWxldCBiPWEucmVzdDtyZXR1cm4gYS5yZXN0JiYoYj1yKGEucmVzdCksYiE9PWEucmVzdCYmKGQ9ITApKSxkP0soaSx7Li4uYSxpdGVtczptLHJlc3Q6Yn0pOml9Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjp7Y29uc3QgbD1yKGEua2V5VHlwZSksZD1yKGEudmFsdWVUeXBlKTtyZXR1cm4gbD09PWEua2V5VHlwZSYmZD09PWEudmFsdWVUeXBlP2k6SyhpLHsuLi5hLGtleVR5cGU6bCx2YWx1ZVR5cGU6ZH0pfWNhc2Uic2V0Ijp7Y29uc3QgbD1yKGEudmFsdWVUeXBlKTtyZXR1cm4gbD09PWEudmFsdWVUeXBlP2k6SyhpLHsuLi5hLHZhbHVlVHlwZTpsfSl9Y2FzZSJ1bmlvbiI6e2NvbnN0IGw9YS5vcHRpb25zO2xldCBkPSExO2NvbnN0IG09W107Zm9yKGNvbnN0IGIgb2YgbCl7Y29uc3Qgdj1yKGIpO3YhPT1iJiYoZD0hMCksbS5wdXNoKHYpfXJldHVybiBkP0soaSx7Li4uYSxvcHRpb25zOm19KTppfWNhc2UiaW50ZXJzZWN0aW9uIjp7Y29uc3QgbD1yKGEubGVmdCksZD1yKGEucmlnaHQpO3JldHVybiBsPT09YS5sZWZ0JiZkPT09YS5yaWdodD9pOksoaSx7Li4uYSxsZWZ0OmwscmlnaHQ6ZH0pfWNhc2Uib3B0aW9uYWwiOmNhc2UibnVsbGFibGUiOmNhc2UiZGVmYXVsdCI6Y2FzZSJwcmVmYXVsdCI6Y2FzZSJjYXRjaCI6Y2FzZSJyZWFkb25seSI6Y2FzZSJub25vcHRpb25hbCI6Y2FzZSJwcm9taXNlIjpjYXNlInN1Y2Nlc3MiOntjb25zdCBsPXIoYS5pbm5lclR5cGUpO3JldHVybiBsPT09YS5pbm5lclR5cGU/aTpLKGksey4uLmEsaW5uZXJUeXBlOmx9KX1jYXNlInBpcGUiOntjb25zdCBsPXIoYS5pbiksZD1yKGEub3V0KTtyZXR1cm4gbD09PWEuaW4mJmQ9PT1hLm91dD9pOksoaSx7Li4uYSxpbjpsLG91dDpkfSl9Y2FzZSJmdW5jdGlvbiI6e2NvbnN0IGw9cihhLmlucHV0KSxkPXIoYS5vdXRwdXQpO3JldHVybiBsPT09YS5pbnB1dCYmZD09PWEub3V0cHV0P2k6SyhpLHsuLi5hLGlucHV0Omwsb3V0cHV0OmR9KX1jYXNlImxhenkiOntjb25zdCBsPWEuZ2V0dGVyLHtfY2FjaGVkSW5uZXI6ZCwuLi5tfT1hO3JldHVybiBLKGksey4uLm0sZ2V0dGVyOigpPT5yKGwoKSl9KX1jYXNlInRlbXBsYXRlX2xpdGVyYWwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJpbnQiOmNhc2UiYm9vbGVhbiI6Y2FzZSJiaWdpbnQiOmNhc2Uic3ltYm9sIjpjYXNlInVuZGVmaW5lZCI6Y2FzZSJudWxsIjpjYXNlInZvaWQiOmNhc2UibmV2ZXIiOmNhc2UiYW55IjpjYXNlInVua25vd24iOmNhc2UiZGF0ZSI6Y2FzZSJuYW4iOmNhc2UiZW51bSI6Y2FzZSJsaXRlcmFsIjpjYXNlImZpbGUiOmNhc2UidHJhbnNmb3JtIjpjYXNlImN1c3RvbSI6cmV0dXJuIGk7ZGVmYXVsdDpyZXR1cm4gaX19cmV0dXJuIHIoZSl9ZnVuY3Rpb24gRGkoZSl7cmV0dXJuISFlLl96b2R9ZnVuY3Rpb24gJGgoZSx0KXtyZXR1cm4gRGkoZSk/bmwoZSx0KTplLnNhZmVQYXJzZSh0KX1mdW5jdGlvbiBhYihlKXtpZighZSlyZXR1cm47bGV0IHQ7aWYoRGkoZSk/dD1lLl96b2Q/LmRlZj8uc2hhcGU6dD1lLnNoYXBlLCEhdCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdHJ5e3JldHVybiB0KCl9Y2F0Y2h7cmV0dXJufXJldHVybiB0fX1mdW5jdGlvbiBjYihlKXtpZihEaShlKSl7Y29uc3Qgcz1lLl96b2Q/LmRlZjtpZihzKXtpZihzLnZhbHVlIT09dm9pZCAwKXJldHVybiBzLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocy52YWx1ZXMpJiZzLnZhbHVlcy5sZW5ndGg+MClyZXR1cm4gcy52YWx1ZXNbMF19fWNvbnN0IG49ZS5fZGVmO2lmKG4pe2lmKG4udmFsdWUhPT12b2lkIDApcmV0dXJuIG4udmFsdWU7aWYoQXJyYXkuaXNBcnJheShuLnZhbHVlcykmJm4udmFsdWVzLmxlbmd0aD4wKXJldHVybiBuLnZhbHVlc1swXX1jb25zdCBvPWUudmFsdWU7aWYobyE9PXZvaWQgMClyZXR1cm4gb31jb25zdCB1Yj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsZW5kc1dpdGg6bG4sZ3Q6Q2UsZ3RlOmhlLGluY2x1ZGVzOmNuLGxlbmd0aDptdCxsb3dlcmNhc2U6c24sbHQ6eGUsbHRlOnBlLG1heExlbmd0aDpmdCxtYXhTaXplOlhlLG1pbWU6cG4sbWluTGVuZ3RoOmplLG1pblNpemU6RWUsbXVsdGlwbGVPZjpLZSxuZWdhdGl2ZTpXbyxub25uZWdhdGl2ZTpRbyxub25wb3NpdGl2ZTpHbyxub3JtYWxpemU6aG4sb3ZlcndyaXRlOiRlLHBvc2l0aXZlOktvLHByb3BlcnRpZXM6ZG4scHJvcGVydHk6WW8scmVnZXg6cm4sc2l6ZTpodCxzbHVnaWZ5OmJuLHN0YXJ0c1dpdGg6dW4sdG9Mb3dlckNhc2U6bW4sdG9VcHBlckNhc2U6Z24sdHJpbTpmbix1cHBlcmNhc2U6YW59LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksc3U9bmV3IFdlYWtTZXQoW09iamVjdC5wcm90b3R5cGUsRXJyb3IucHJvdG90eXBlXSk7ZnVuY3Rpb24gYW8oZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe2NvbnN0IG89bih0aGlzKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KSxvfSxzZXQobyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7dmFsdWU6byxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX19KX1jb25zdCBTaD0oZSx0KT0+e2VsLmluaXQoZSx0KSxlLm5hbWU9IlpvZEVycm9yIjtjb25zdCBuPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtzdS5oYXMobil8fChzdS5hZGQobiksYW8obiwiZm9ybWF0IixvPT5yPT5qbyhvLHIpKSxhbyhuLCJmbGF0dGVuIixvPT5yPT5ObyhvLHIpKSxhbyhuLCJhZGRJc3N1ZSIsbz0+cj0+e28uaXNzdWVzLnB1c2gociksby5tZXNzYWdlPUpTT04uc3RyaW5naWZ5KG8uaXNzdWVzLGhvLDIpfSksYW8obiwiYWRkSXNzdWVzIixvPT5yPT57by5pc3N1ZXMucHVzaCguLi5yKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsaG8sMil9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiaXNFbXB0eSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldCgpe3JldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGg9PT0wfX0pKX0semg9cCgiWm9kRXJyb3IiLFNoKSxsZT1wKCJab2RFcnJvciIsU2gsdm9pZCAwLHtQYXJlbnQ6RXJyb3J9KSxMaT1HdChsZSksVWk9UXQobGUpLEhpPVl0KGxlKSxCaT1YdChsZSksRmk9SXMobGUpLFZpPVBzKGxlKSxKaT14cyhsZSksS2k9Q3MobGUpLFdpPUVzKGxlKSxHaT1PcyhsZSksUWk9QXMobGUpLFlpPVJzKGxlKTtmdW5jdGlvbiBsYigpe2NlLmxvY2FsZUVycm9yfHxRKFJwKCkpfWZ1bmN0aW9uIGV0KCl7Y2UubWVtb2l6ZXJ8fFEoe21lbW9pemVyOkJvKCl9KX1jb25zdCBFPXAoIlpvZFR5cGUiLChlLHQpPT4obGIoKSx4LmluaXQoZSx0KSxlLmRlZj10LGUudHlwZT10LnR5cGUsZSkse2NoZWNrKC4uLmUpe2NvbnN0IHQ9dGhpcy5kZWY7cmV0dXJuIHRoaXMuY2xvbmUoaWUodCx7Y2hlY2tzOlsuLi50LmNoZWNrcz8/W10sLi4uZS5tYXAobj0+dHlwZW9mIG49PSJmdW5jdGlvbiI/e196b2Q6e2NoZWNrOm4sZGVmOntjaGVjazoiY3VzdG9tIn0sb25hdHRhY2g6W119fTpuKV19KSx7cGFyZW50OiEwfSl9LHdpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soLi4uZSl9LGNsb25lKGUsdCl7cmV0dXJuIEsodGhpcyxlLHQpfSxicmFuZCgpe3JldHVybiB0aGlzfSxyZWdpc3RlcihlLHQpe3JldHVybiBlLmFkZCh0aGlzLHQpLHRoaXN9LHJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKERyKGUsdCkpfSxzdXBlclJlZmluZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKExyKGUsdCkpfSxvdmVyd3JpdGUoZSl7cmV0dXJuIHRoaXMuY2hlY2soJGUoZSkpfSxvcHRpb25hbCgpe3JldHVybiBGKHRoaXMpfSxleGFjdE9wdGlvbmFsKCl7cmV0dXJuIF9yKHRoaXMpfSxudWxsYWJsZSgpe3JldHVybiB1dCh0aGlzKX0sbnVsbGlzaCgpe3JldHVybiBGKHV0KHRoaXMpKX0sbm9ub3B0aW9uYWwoZSl7cmV0dXJuIFRyKHRoaXMsZSl9LGFycmF5KCl7cmV0dXJuIFAodGhpcyl9LG9yKGUpe3JldHVybiBPKFt0aGlzLGVdKX0sYW5kKGUpe3JldHVybiBQdCh0aGlzLGUpfSx0cmFuc2Zvcm0oZSl7cmV0dXJuIEJ0KHRoaXMsTG4oZSkpfSxkZWZhdWx0KGUpe3JldHVybiAkcih0aGlzLGUpfSxwcmVmYXVsdChlKXtyZXR1cm4genIodGhpcyxlKX0sY2F0Y2goZSl7cmV0dXJuIHhyKHRoaXMsZSl9LHBpcGUoZSl7cmV0dXJuIEJ0KHRoaXMsZSl9LHJlYWRvbmx5KCl7cmV0dXJuIEFyKHRoaXMpfSxkZXNjcmliZShlKXtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gYmUuYWRkKHQse2Rlc2NyaXB0aW9uOmV9KSx0fSxtZXRhKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4gYmUuZ2V0KHRoaXMpO2NvbnN0IHQ9dGhpcy5jbG9uZSgpO3JldHVybiBiZS5hZGQodCxlWzBdKSx0fSxpc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc30saXNOdWxsYWJsZSgpe3JldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzfSxhcHBseShlLC4uLnQpe3JldHVybiB0Lmxlbmd0aD09PTA/ZSh0aGlzKTplKHRoaXMsLi4udCl9LGdldCJ+c3RhbmRhcmQiKCl7cmV0dXJuIFJvKHRoaXMsIn5zdGFuZGFyZCIsey4uLlVzKHRoaXMpLGpzb25TY2hlbWE6e2lucHV0OmRzKCksb3V0cHV0OmRzKCl9fSl9LHNldCJ+c3RhbmRhcmQiKGUpe1BlKHRoaXMsIn5zdGFuZGFyZCIsZSl9LHBhcnNlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gTGkodGhpcyx0LG4se2NhbGxlZTplfSl9LHBhcnNlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBVaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZVBhcnNlKGUsdCl7cmV0dXJuIEhpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZVBhcnNlQXN5bmMoZSx0KXtyZXR1cm4gQmkodGhpcyxlLHQpfSxnZXQgc3BhKCl7cmV0dXJuIHRoaXM/LnNhZmVQYXJzZUFzeW5jfSxzZXQgc3BhKGUpe1BlKHRoaXMsInNwYSIsZSl9LHZhbGlkYXRlKGUsdCl7cmV0dXJuIHFvKHRoaXMsZSx0KX0sdmFsaWRhdGVBc3luYyhlLHQpe3JldHVybiBEbyh0aGlzLGUsdCl9LGVuY29kZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIEZpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxkZWNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBWaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZW5jb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBKaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlQXN5bmM6YXN5bmMgZnVuY3Rpb24gZSh0LG4pe3JldHVybiBhd2FpdCBLaSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sc2FmZUVuY29kZShlLHQpe3JldHVybiBXaSh0aGlzLGUsdCl9LHNhZmVEZWNvZGUoZSx0KXtyZXR1cm4gR2kodGhpcyxlLHQpfSxhc3luYyBzYWZlRW5jb2RlQXN5bmMoZSx0KXtyZXR1cm4gUWkodGhpcyxlLHQpfSxhc3luYyBzYWZlRGVjb2RlQXN5bmMoZSx0KXtyZXR1cm4gWWkodGhpcyxlLHQpfSx0b0pTT05TY2hlbWEoZSl7cmV0dXJuIHloKCkoZSl9LGdldCBkZXNjcmlwdGlvbigpe3JldHVybiBiZS5nZXQodGhpcyk/LmRlc2NyaXB0aW9ufSxnZXQgX2RlZigpe3JldHVybiB0aGlzLl96b2QuZGVmfX0pLHZuPXAoIl9ab2RTdHJpbmciLChlLHQpPT57b24uaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT53ZygpfSxXdCh7Zm9ybWF0OmU9PnZlKCkuZm9ybWF0Pz9udWxsLG1pbkxlbmd0aDplPT52ZSgpLm1pbmltdW0/P251bGwsbWF4TGVuZ3RoOmU9PnZlKCkubWF4aW11bT8/bnVsbH0se3JlZ2V4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHJuKC4uLmUpKX0saW5jbHVkZXMoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soY24oLi4uZSkpfSxzdGFydHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHVuKC4uLmUpKX0sZW5kc1dpdGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sobG4oLi4uZSkpfSxtaW4oLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soamUoLi4uZSkpfSxtYXgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soZnQoLi4uZSkpfSxsZW5ndGgoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2sobXQoLi4uZSkpfSxub25lbXB0eSguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhqZSgxLC4uLmUpKX0sbG93ZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKHNuKGUpKX0sdXBwZXJjYXNlKGUpe3JldHVybiB0aGlzLmNoZWNrKGFuKGUpKX0sdHJpbSgpe3JldHVybiB0aGlzLmNoZWNrKGZuKCkpfSxub3JtYWxpemUoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soaG4oLi4uZSkpfSx0b0xvd2VyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKG1uKCkpfSx0b1VwcGVyQ2FzZSgpe3JldHVybiB0aGlzLmNoZWNrKGduKCkpfSxzbHVnaWZ5KCl7cmV0dXJuIHRoaXMuY2hlY2soYm4oKSl9fSkpLGJ0PXAoIlpvZFN0cmluZyIsKGUsdCk9Pntvbi5pbml0KGUsdCksdm4uaW5pdChlLHQpfSx7ZW1haWwoZSl7cmV0dXJuIHRoaXMuY2hlY2socGkoeW4sZSkpfSx1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2soSm8od3QsZSkpfSxqd3QoZSl7cmV0dXJuIHRoaXMuY2hlY2soT2koWm4sZSkpfSxlbW9qaShlKXtyZXR1cm4gdGhpcy5jaGVjayh2aShrbixlKSl9LGd1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soaGkoX24sZSkpfSx1dWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKGZpKHdlLGUpKX0sdXVpZHY0KGUpe3JldHVybiB0aGlzLmNoZWNrKG1pKHdlLGUpKX0sdXVpZHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKGdpKHdlLGUpKX0sdXVpZHY3KGUpe3JldHVybiB0aGlzLmNoZWNrKGJpKHdlLGUpKX0sbmFub2lkKGUpe3JldHVybiB0aGlzLmNoZWNrKHlpKHduLGUpKX0sY3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhfaSgkbixlKSl9LGN1aWQyKGUpe3JldHVybiB0aGlzLmNoZWNrKGtpKFNuLGUpKX0sdWxpZChlKXtyZXR1cm4gdGhpcy5jaGVjayh3aSh6bixlKSl9LGJhc2U2NChlKXtyZXR1cm4gdGhpcy5jaGVjayh4aShPbixlKSl9LGJhc2U2NHVybChlKXtyZXR1cm4gdGhpcy5jaGVjayhDaShBbixlKSl9LHhpZChlKXtyZXR1cm4gdGhpcy5jaGVjaygkaShUbixlKSl9LGtzdWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKFNpKEluLGUpKX0saXB2NChlKXtyZXR1cm4gdGhpcy5jaGVjayh6aShQbixlKSl9LGlwdjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soVGkoeG4sZSkpfSxjaWRydjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soSWkoQ24sZSkpfSxjaWRydjYoZSl7cmV0dXJuIHRoaXMuY2hlY2soUGkoRW4sZSkpfSxlMTY0KGUpe3JldHVybiB0aGlzLmNoZWNrKEVpKFJuLGUpKX0sZGF0ZXRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2soUmkodnQsZSkpfSxkYXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKFppKHl0LGUpKX0sdGltZShlKXtyZXR1cm4gdGhpcy5jaGVjayhOaShfdCxlKSl9LGR1cmF0aW9uKGUpe3JldHVybiB0aGlzLmNoZWNrKGppKGt0LGUpKX19KTtmdW5jdGlvbiBoKGUpe3JldHVybiBOcChidCxlKX1jb25zdCBMPXAoIlpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntILmluaXQoZSx0KSx2bi5pbml0KGUsdCl9KSx2dD1wKCJab2RJU09EYXRlVGltZSIsKGUsdCk9Pnt3ZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KSx5dD1wKCJab2RJU09EYXRlIiwoZSx0KT0+eyRkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pLF90PXAoIlpvZElTT1RpbWUiLChlLHQpPT57U2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSksa3Q9cCgiWm9kSVNPRHVyYXRpb24iLChlLHQpPT57emQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSkseW49cCgiWm9kRW1haWwiLChlLHQpPT57dWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gWGkoZSl7cmV0dXJuIHBpKHluLGUpfWNvbnN0IF9uPXAoIlpvZEdVSUQiLChlLHQpPT57YWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gZWEoZSl7cmV0dXJuIGhpKF9uLGUpfWNvbnN0IHdlPXAoIlpvZFVVSUQiLChlLHQpPT57Y2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gdGEoZSl7cmV0dXJuIGZpKHdlLGUpfWZ1bmN0aW9uIG5hKGUpe3JldHVybiBtaSh3ZSxlKX1mdW5jdGlvbiBvYShlKXtyZXR1cm4gZ2kod2UsZSl9ZnVuY3Rpb24gcmEoZSl7cmV0dXJuIGJpKHdlLGUpfWNvbnN0IHd0PXAoIlpvZFVSTCIsKGUsdCk9PntmZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBzYShlKXtyZXR1cm4gSm8od3QsZSl9ZnVuY3Rpb24gaWEoZSl7cmV0dXJuIEpvKHd0LHtwcm90b2NvbDpacyxob3N0bmFtZTp3bCwuLi55KGUpfSl9Y29uc3Qga249cCgiWm9kRW1vamkiLChlLHQpPT57bWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gYWEoZSl7cmV0dXJuIHZpKGtuLGUpfWNvbnN0IHduPXAoIlpvZE5hbm9JRCIsKGUsdCk9PntnZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBjYShlKXtyZXR1cm4geWkod24sZSl9Y29uc3QgJG49cCgiWm9kQ1VJRCIsKGUsdCk9PntiZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiB1YShlKXtyZXR1cm4gX2koJG4sZSl9Y29uc3QgU249cCgiWm9kQ1VJRDIiLChlLHQpPT57dmQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gbGEoZSl7cmV0dXJuIGtpKFNuLGUpfWNvbnN0IHpuPXAoIlpvZFVMSUQiLChlLHQpPT57eWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gZGEoZSl7cmV0dXJuIHdpKHpuLGUpfWNvbnN0IFRuPXAoIlpvZFhJRCIsKGUsdCk9PntfZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBwYShlKXtyZXR1cm4gJGkoVG4sZSl9Y29uc3QgSW49cCgiWm9kS1NVSUQiLChlLHQpPT57a2QuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gaGEoZSl7cmV0dXJuIFNpKEluLGUpfWNvbnN0IFBuPXAoIlpvZElQdjQiLChlLHQpPT57VGQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gZmEoZSl7cmV0dXJuIHppKFBuLGUpfWNvbnN0IFhvPXAoIlpvZE1BQyIsKGUsdCk9PntQZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBtYShlKXtyZXR1cm4gTXAoWG8sZSl9Y29uc3QgeG49cCgiWm9kSVB2NiIsKGUsdCk9PntJZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiBnYShlKXtyZXR1cm4gVGkoeG4sZSl9Y29uc3QgQ249cCgiWm9kQ0lEUnY0IiwoZSx0KT0+e3hkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGJhKGUpe3JldHVybiBJaShDbixlKX1jb25zdCBFbj1wKCJab2RDSURSdjYiLChlLHQpPT57RWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gdmEoZSl7cmV0dXJuIFBpKEVuLGUpfWNvbnN0IE9uPXAoIlpvZEJhc2U2NCIsKGUsdCk9PntBZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiB5YShlKXtyZXR1cm4geGkoT24sZSl9Y29uc3QgQW49cCgiWm9kQmFzZTY0VVJMIiwoZSx0KT0+e1pkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIF9hKGUpe3JldHVybiBDaShBbixlKX1jb25zdCBSbj1wKCJab2RFMTY0IiwoZSx0KT0+e05kLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGthKGUpe3JldHVybiBFaShSbixlKX1jb25zdCBlcj1wKCJab2RDcmVkaXRDYXJkIiwoZSx0KT0+e01kLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHdhKGUpe3JldHVybiBxcChlcixlKX1jb25zdCB0cj1wKCJab2RJQkFOIiwoZSx0KT0+e0RkLmluaXQoZSx0KSxMLmluaXQoZSx0KX0pO2Z1bmN0aW9uICRhKGUpe3JldHVybiBEcCh0cixlKX1jb25zdCBabj1wKCJab2RKV1QiLChlLHQpPT57VWQuaW5pdChlLHQpLEwuaW5pdChlLHQpfSk7ZnVuY3Rpb24gU2EoZSl7cmV0dXJuIE9pKFpuLGUpfWNvbnN0IHFlPXAoIlpvZEN1c3RvbVN0cmluZ0Zvcm1hdCIsKGUsdCk9PntIZC5pbml0KGUsdCksTC5pbml0KGUsdCl9KTtmdW5jdGlvbiB6YShlLHQsbj17fSl7cmV0dXJuIGd0KHFlLGUsdCxuKX1mdW5jdGlvbiBUYShlKXtyZXR1cm4gZ3QocWUsImhvc3RuYW1lIixrbCxlKX1mdW5jdGlvbiBJYShlKXtyZXR1cm4gZ3QocWUsImhleCIsTWwsZSl9ZnVuY3Rpb24gUGEoZSl7cmV0dXJuIGd0KHFlLCJjdXJyZW5jeV9jb2RlIixTbCxlKX1mdW5jdGlvbiB4YShlLHQpe2NvbnN0IG49dD8uZW5jPz8iaGV4IixvPWAke2V9XyR7bn1gLHI9VW9bb107aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgaGFzaCBmb3JtYXQ6ICR7b31gKTtyZXR1cm4gZ3QocWUsbyxyLHQpfWNvbnN0ICR0PXAoIlpvZE51bWJlciIsKGUsdCk9PntLcy5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PiRnKCksZS5pc0Zpbml0ZT0hMH0sV3Qoe21pblZhbHVlOmU9Pntjb25zdHttaW5pbXVtOnQsZXhjbHVzaXZlTWluaW11bTpufT12ZSgpO3JldHVybiBNYXRoLm1heCh0Pz9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKX0sbWF4VmFsdWU6ZT0+e2NvbnN0e21heGltdW06dCxleGNsdXNpdmVNYXhpbXVtOm59PXZlKCk7cmV0dXJuIE1hdGgubWluKHQ/P051bWJlci5QT1NJVElWRV9JTkZJTklUWSxuPz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfSxpc0ludDplPT57Y29uc3R7aXNJbnQ6dCxtdWx0aXBsZU9mOm59PXZlKCk7cmV0dXJuISF0fHwhIW4/LnNvbWUoTnVtYmVyLmlzU2FmZUludGVnZXIpfSxmb3JtYXQ6ZT0+dmUoKS5mb3JtYXQ/P251bGx9LHtndChlLHQpe3JldHVybiB0aGlzLmNoZWNrKENlKGUsdCkpfSxndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhoZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soaGUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soeGUoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHBlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhwZShlLHQpKX0saW50KGUpe3JldHVybiB0aGlzLmNoZWNrKEh0KGUpKX0sc2FmZShlKXtyZXR1cm4gdGhpcy5jaGVjayhIdChlKSl9LHBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKENlKDAsZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhoZSgwLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soeGUoMCxlKSl9LG5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKHBlKDAsZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soS2UoZSx0KSl9LHN0ZXAoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhLZShlLHQpKX0sZmluaXRlKCl7cmV0dXJuIHRoaXN9fSkpO2Z1bmN0aW9uIEMoZSl7cmV0dXJuIExwKCR0LGUpfWNvbnN0IERlPXAoIlpvZE51bWJlckZvcm1hdCIsKGUsdCk9PntCZC5pbml0KGUsdCksJHQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gSHQoZSl7cmV0dXJuIEhwKERlLGUpfWZ1bmN0aW9uIENhKGUpe3JldHVybiBCcChEZSxlKX1mdW5jdGlvbiBFYShlKXtyZXR1cm4gRnAoRGUsZSl9ZnVuY3Rpb24gT2EoZSl7cmV0dXJuIFZwKERlLGUpfWZ1bmN0aW9uIEFhKGUpe3JldHVybiBKcChEZSxlKX1jb25zdCBTdD1wKCJab2RCb29sZWFuIiwoZSx0KT0+e1dzLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+U2coKX0pO2Z1bmN0aW9uIEQoZSl7cmV0dXJuIEtwKFN0LGUpfWNvbnN0IHp0PXAoIlpvZEJpZ0ludCIsKGUsdCk9PntHcy5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnpnKCl9LFd0KHttaW5WYWx1ZTplPT52ZSgpLm1pbmltdW0/P251bGwsbWF4VmFsdWU6ZT0+dmUoKS5tYXhpbXVtPz9udWxsLGZvcm1hdDplPT52ZSgpLmZvcm1hdD8/bnVsbH0se2d0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKGhlKGUsdCkpfSxtaW4oZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhoZShlLHQpKX0sZ3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhDZShlLHQpKX0sbHQoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayh4ZShlLHQpKX0sbHRlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2socGUoZSx0KSl9LG1heChlLHQpe3JldHVybiB0aGlzLmNoZWNrKHBlKGUsdCkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhDZShCaWdJbnQoMCksZSkpfSxuZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayh4ZShCaWdJbnQoMCksZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhwZShCaWdJbnQoMCksZSkpfSxub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhoZShCaWdJbnQoMCksZSkpfSxtdWx0aXBsZU9mKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soS2UoZSx0KSl9fSkpO2Z1bmN0aW9uIFJhKGUpe3JldHVybiBHcCh6dCxlKX1jb25zdCBObj1wKCJab2RCaWdJbnRGb3JtYXQiLChlLHQpPT57RmQuaW5pdChlLHQpLHp0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIFphKGUpe3JldHVybiBZcChObixlKX1mdW5jdGlvbiBOYShlKXtyZXR1cm4gWHAoTm4sZSl9Y29uc3QgbnI9cCgiWm9kU3ltYm9sIiwoZSx0KT0+e1ZkLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VGcoKX0pO2Z1bmN0aW9uIGphKGUpe3JldHVybiBlaChucixlKX1jb25zdCBvcj1wKCJab2RVbmRlZmluZWQiLChlLHQpPT57SmQuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5QZygpfSk7ZnVuY3Rpb24gY3QoZSl7cmV0dXJuIHRoKG9yLGUpfWNvbnN0IHJyPXAoIlpvZE51bGwiLChlLHQpPT57S2QuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5JZygpfSk7ZnVuY3Rpb24gam4oZSl7cmV0dXJuIG5oKHJyLGUpfWNvbnN0IHNyPXAoIlpvZEFueSIsKGUsdCk9PntXZC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkVnKCl9KTtmdW5jdGlvbiBNbigpe3JldHVybiBvaChzcil9Y29uc3QgaXI9cCgiWm9kVW5rbm93biIsKGUsdCk9PntHZC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk9nKCl9KTtmdW5jdGlvbiBxKCl7cmV0dXJuIHJoKGlyKX1jb25zdCBhcj1wKCJab2ROZXZlciIsKGUsdCk9PntRZC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkNnKCl9KTtmdW5jdGlvbiBXZShlKXtyZXR1cm4gc2goYXIsZSl9Y29uc3QgY3I9cCgiWm9kVm9pZCIsKGUsdCk9PntZZC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnhnKCl9KTtmdW5jdGlvbiBNYShlKXtyZXR1cm4gaWgoY3IsZSl9Y29uc3QgcW49cCgiWm9kRGF0ZSIsKGUsdCk9PntYZC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkFnKCksZS5taW49KG4sbyk9PmUuY2hlY2soaGUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2socGUobixvKSl9LFd0KHttaW5EYXRlOmU9Pntjb25zdHttaW5pbXVtOnR9PXZlKCk7cmV0dXJuIHQ/bmV3IERhdGUodCk6bnVsbH0sbWF4RGF0ZTplPT57Y29uc3R7bWF4aW11bTp0fT12ZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9fSx7fSkpO2Z1bmN0aW9uIHFhKGUpe3JldHVybiBhaChxbixlKX1jb25zdCB1cj1wKCJab2RBcnJheSIsKGUsdCk9PntldCgpLGVwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RmcoKSxlLmVsZW1lbnQ9dC5lbGVtZW50fSx7bWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soamUoZSx0KSl9LG5vbmVtcHR5KGUpe3JldHVybiB0aGlzLmNoZWNrKGplKDEsZSkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhmdChlLHQpKX0sbGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sobXQoZSx0KSl9LHVud3JhcCgpe3JldHVybiB0aGlzLmVsZW1lbnR9fSk7ZnVuY3Rpb24gUChlLHQpe3JldHVybiBsaCh1cixlLHQpfWZ1bmN0aW9uIERhKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZi5zaGFwZTtyZXR1cm4gbmUoT2JqZWN0LmtleXModCkpfWNvbnN0IFR0PXAoIlpvZE9iamVjdCIsKGUsdCk9PntldCgpLHJwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VmcoKSxRdShlLCJzaGFwZSIsbj0+bi5fem9kLmRlZi5zaGFwZSwhMSl9LHtrZXlvZigpe3JldHVybiBuZShPYmplY3Qua2V5cyh0aGlzLl96b2QuZGVmLnNoYXBlKSl9LGNhdGNoYWxsKGUpe3JldHVybiB0aGlzLmNsb25lKGllKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOmV9KSl9LHBhc3N0aHJvdWdoKCl7cmV0dXJuIHRoaXMuY2xvbmUoaWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6cSgpfSkpfSxsb29zZSgpe3JldHVybiB0aGlzLmNsb25lKGllKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOnEoKX0pKX0sc3RyaWN0KCl7cmV0dXJuIHRoaXMuY2xvbmUoaWUodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6V2UoKX0pKX0sc3RyaXAoKXtyZXR1cm4gdGhpcy5jbG9uZShpZSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDp2b2lkIDB9KSl9LGV4dGVuZChlKXtyZXR1cm4gTHUodGhpcyxlKX0sc2FmZUV4dGVuZChlKXtyZXR1cm4gSHUodGhpcyxlKX0sbWVyZ2UoZSl7cmV0dXJuIEJ1KHRoaXMsZSl9LHBpY2soZSl7cmV0dXJuIHF1KHRoaXMsZSl9LG9taXQoZSl7cmV0dXJuIER1KHRoaXMsZSl9LHBhcnRpYWwoLi4uZSl7cmV0dXJuIG9zKHh0LHRoaXMsZVswXSl9LGV4YWN0UGFydGlhbCguLi5lKXtyZXR1cm4gb3MoVW4sdGhpcyxlWzBdLCJleGFjdFBhcnRpYWwiKX0scmVxdWlyZWQoLi4uZSl7cmV0dXJuIEZ1KEhuLHRoaXMsZVswXSl9fSk7ZnVuY3Rpb24gZyhlLHQpe2NvbnN0IG49e3R5cGU6Im9iamVjdCIsc2hhcGU6ZT8/e30sLi4ueSh0KX07cmV0dXJuIG5ldyBUdChuKX1mdW5jdGlvbiBMYShlLHQpe3JldHVybiBuZXcgVHQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpXZSgpLC4uLnkodCl9KX1mdW5jdGlvbiB0ZShlLHQpe3JldHVybiBuZXcgVHQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpxKCksLi4ueSh0KX0pfWNvbnN0IEl0PXAoIlpvZFVuaW9uIiwoZSx0KT0+e0hvLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+X2goKSxlLm9wdGlvbnM9dC5vcHRpb25zfSk7ZnVuY3Rpb24gTyhlLHQpe3JldHVybiBuZXcgSXQoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsLi4ueSh0KX0pfWNvbnN0IGxyPXAoIlpvZFhvciIsKGUsdCk9PntJdC5pbml0KGUsdCksc3AuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5faCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiBVYShlLHQpe3JldHVybiBuZXcgbHIoe3R5cGU6InVuaW9uIixvcHRpb25zOmUsaW5jbHVzaXZlOiExLC4uLnkodCl9KX1jb25zdCBkcj1wKCJab2REaXNjcmltaW5hdGVkVW5pb24iLChlLHQpPT57SXQuaW5pdChlLHQpLGFwLmluaXQoZSx0KX0pO2Z1bmN0aW9uIERuKGUsdCxuKXtyZXR1cm4gbmV3IGRyKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGRpc2NyaW1pbmF0b3I6ZSwuLi55KG4pfSl9Y29uc3QgcHI9cCgiWm9kSW50ZXJzZWN0aW9uIiwoZSx0KT0+e2NwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+SmcoKX0pO2Z1bmN0aW9uIFB0KGUsdCl7cmV0dXJuIG5ldyBwcih7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OmUscmlnaHQ6dH0pfWNvbnN0IGhyPXAoIlpvZFR1cGxlIiwoZSx0KT0+e2V0KCksWXMuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5LZygpfSx7cmVzdChlKXtyZXR1cm4gdGhpcy5jbG9uZSh7Li4udGhpcy5fem9kLmRlZixyZXN0OmV9KX0scGFydGlhbCgpe2NvbnN0IGU9dGhpcy5fem9kLmRlZjtpZihlLmNoZWNrcz8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiLnBhcnRpYWwoKSBjYW5ub3QgYmUgdXNlZCBvbiB0dXBsZSBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtyZXR1cm4gdGhpcy5jbG9uZSh7Li4uZSxpdGVtczplLml0ZW1zLm1hcCh0PT5uZXcgeHQoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6dH0pKX0pfX0pO2Z1bmN0aW9uIGZyKGUsdCxuKXtjb25zdCBvPXQgaW5zdGFuY2VvZiB4LHI9bz9uOnQscz1vP3Q6bnVsbDtyZXR1cm4gbmV3IGhyKHt0eXBlOiJ0dXBsZSIsaXRlbXM6ZSxyZXN0OnMsLi4ueShyKX0pfWNvbnN0IEdlPXAoIlpvZFJlY29yZCIsKGUsdCk9PntldCgpLHVwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+V2coKSxlLmtleVR5cGU9dC5rZXlUeXBlLGUudmFsdWVUeXBlPXQudmFsdWVUeXBlfSk7ZnVuY3Rpb24gWihlLHQsbil7cmV0dXJuIXR8fCF0Ll96b2Q/bmV3IEdlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6aCgpLHZhbHVlVHlwZTplLC4uLnkodCl9KTpuZXcgR2Uoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnkobil9KX1mdW5jdGlvbiBIYShlLHQsbil7cmV0dXJuIG5ldyBHZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4ueShuKSxwYXJ0aWFsOiEwfSl9ZnVuY3Rpb24gQmEoZSx0LG4pe3JldHVybiBuZXcgR2Uoe3R5cGU6InJlY29yZCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LG1vZGU6Imxvb3NlIiwuLi55KG4pfSl9Y29uc3QgbXI9cCgiWm9kTWFwIiwoZSx0KT0+e2V0KCksbHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5IZygpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGUsZS5taW49KC4uLm4pPT5lLmNoZWNrKEVlKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soRWUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKFhlKC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKGh0KC4uLm4pKX0pO2Z1bmN0aW9uIEZhKGUsdCxuKXtyZXR1cm4gbmV3IG1yKHt0eXBlOiJtYXAiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi55KG4pfSl9Y29uc3QgZ3I9cCgiWm9kU2V0IiwoZSx0KT0+e2V0KCksZHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5CZygpLGUubWluPSguLi5uKT0+ZS5jaGVjayhFZSguLi5uKSksZS5ub25lbXB0eT1uPT5lLmNoZWNrKEVlKDEsbikpLGUubWF4PSguLi5uKT0+ZS5jaGVjayhYZSguLi5uKSksZS5zaXplPSguLi5uKT0+ZS5jaGVjayhodCguLi5uKSl9KTtmdW5jdGlvbiBWYShlLHQpe3JldHVybiBuZXcgZ3Ioe3R5cGU6InNldCIsdmFsdWVUeXBlOmUsLi4ueSh0KX0pfWNvbnN0IFFlPXAoIlpvZEVudW0iLChlLHQpPT57cHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obyxyLHMpPT5SZygpLGUuZW51bT10LmVudHJpZXMsZS5vcHRpb25zPVsuLi5lLl96b2QudmFsdWVzXTtjb25zdCBuPW5ldyBTZXQoT2JqZWN0LmtleXModC5lbnRyaWVzKSk7ZS5leHRyYWN0PShvLHIpPT57Y29uc3Qgcz17fTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKXNbaV09dC5lbnRyaWVzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgUWUoey4uLnQsY2hlY2tzOltdLC4uLnkociksZW50cmllczpzfSl9LGUuZXhjbHVkZT0obyxyKT0+e2NvbnN0IHM9ey4uLnQuZW50cmllc307Zm9yKGNvbnN0IGkgb2YgbylpZihuLmhhcyhpKSlkZWxldGUgc1tpXTtlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7aX0gbm90IGZvdW5kIGluIGVudW1gKTtyZXR1cm4gbmV3IFFlKHsuLi50LGNoZWNrczpbXSwuLi55KHIpLGVudHJpZXM6c30pfX0pO2Z1bmN0aW9uIG5lKGUsdCl7Y29uc3Qgbj1BcnJheS5pc0FycmF5KGUpP09iamVjdC5mcm9tRW50cmllcyhlLm1hcChvPT5bbyxvXSkpOmU7cmV0dXJuIG5ldyBRZSh7dHlwZToiZW51bSIsZW50cmllczpuLC4uLnkodCl9KX1mdW5jdGlvbiBKYShlLHQpe3JldHVybiBuZXcgUWUoe3R5cGU6ImVudW0iLGVudHJpZXM6ZSwuLi55KHQpfSl9Y29uc3QgYnI9cCgiWm9kTGl0ZXJhbCIsKGUsdCk9PntocC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlpnKCksZS52YWx1ZXM9bmV3IFNldCh0LnZhbHVlcyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInZhbHVlIix7Z2V0KCl7aWYodC52YWx1ZXMubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHNjaGVtYSBjb250YWlucyBtdWx0aXBsZSB2YWxpZCBsaXRlcmFsIHZhbHVlcy4gVXNlIGAudmFsdWVzYCBpbnN0ZWFkLiIpO3JldHVybiB0LnZhbHVlc1swXX19KX0pO2Z1bmN0aW9uIGYoZSx0KXtyZXR1cm4gbmV3IGJyKHt0eXBlOiJsaXRlcmFsIix2YWx1ZXM6QXJyYXkuaXNBcnJheShlKT9lOltlXSwuLi55KHQpfSl9Y29uc3QgdnI9cCgiWm9kRmlsZSIsKGUsdCk9PntmcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk1nKCksZS5taW49KG4sbyk9PmUuY2hlY2soRWUobixvKSksZS5tYXg9KG4sbyk9PmUuY2hlY2soWGUobixvKSksZS5taW1lPShuLG8pPT5lLmNoZWNrKHBuKEFycmF5LmlzQXJyYXkobik/bjpbbl0sbykpfSk7ZnVuY3Rpb24gS2EoZSl7cmV0dXJuIGRoKHZyLGUpfWNvbnN0IHlyPXAoIlpvZFRyYW5zZm9ybSIsKGUsdCk9PntldCgpLG1wLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VWcoKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpdGhyb3cgbmV3IFpvKGUuY29uc3RydWN0b3IubmFtZSk7bi5hZGRJc3N1ZT1zPT57aWYodHlwZW9mIHM9PSJzdHJpbmciKW4uaXNzdWVzLnB1c2goaXQocyxuLnZhbHVlLHQpKTtlbHNle2NvbnN0IGk9cztpLmZhdGFsJiYoaS5jb250aW51ZT0hMSksaS5jb2RlPz8oaS5jb2RlPSJjdXN0b20iKSwiaW5wdXQiaW4gaXx8KGkuaW5wdXQ9bi52YWx1ZSksaS5pbnN0Pz8oaS5pbnN0PWUpLG4uaXNzdWVzLnB1c2goaXQoaSkpfX07Y29uc3Qgcj10LnRyYW5zZm9ybShuLnZhbHVlLG4pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4ocz0+KG4udmFsdWU9cyxuKSk6KG4udmFsdWU9cixuKX19KTtmdW5jdGlvbiBMbihlKXtyZXR1cm4gbmV3IHlyKHt0eXBlOiJ0cmFuc2Zvcm0iLHRyYW5zZm9ybTplfSl9Y29uc3QgeHQ9cCgiWm9kT3B0aW9uYWwiLChlLHQpPT57WHMuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5raCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIEYoZSl7cmV0dXJuIG5ldyB4dCh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTplfSl9Y29uc3QgVW49cCgiWm9kRXhhY3RPcHRpb25hbCIsKGUsdCk9PntncC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmtoKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gX3IoZSl7cmV0dXJuIG5ldyBVbih7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTplfSl9Y29uc3Qga3I9cCgiWm9kTnVsbGFibGUiLChlLHQpPT57YnAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5HZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIHV0KGUpe3JldHVybiBuZXcga3Ioe3R5cGU6Im51bGxhYmxlIixpbm5lclR5cGU6ZX0pfWZ1bmN0aW9uIFdhKGUpe3JldHVybiBGKHV0KGUpKX1jb25zdCB3cj1wKCJab2REZWZhdWx0IiwoZSx0KT0+e3ZwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+WWcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGUsZS5yZW1vdmVEZWZhdWx0PWUudW53cmFwfSk7ZnVuY3Rpb24gJHIoZSx0KXtyZXR1cm4gbmV3IHdyKHt0eXBlOiJkZWZhdWx0Iixpbm5lclR5cGU6ZSxnZXQgZGVmYXVsdFZhbHVlKCl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoKTp4byh0KX19KX1jb25zdCBTcj1wKCJab2RQcmVmYXVsdCIsKGUsdCk9Pnt5cC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlhnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24genIoZSx0KXtyZXR1cm4gbmV3IFNyKHt0eXBlOiJwcmVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6eG8odCl9fSl9Y29uc3QgSG49cCgiWm9kTm9uT3B0aW9uYWwiLChlLHQpPT57X3AuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5RZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFRyKGUsdCl7cmV0dXJuIG5ldyBIbih7dHlwZToibm9ub3B0aW9uYWwiLGlubmVyVHlwZTplLC4uLnkodCl9KX1jb25zdCBJcj1wKCJab2RTdWNjZXNzIiwoZSx0KT0+e2twLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cWcoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBHYShlKXtyZXR1cm4gbmV3IElyKHt0eXBlOiJzdWNjZXNzIixpbm5lclR5cGU6ZX0pfWNvbnN0IFByPXAoIlpvZENhdGNoIiwoZSx0KT0+e3dwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+ZWIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGUsZS5yZW1vdmVDYXRjaD1lLnVud3JhcH0pO2Z1bmN0aW9uIHhyKGUsdCl7cmV0dXJuIG5ldyBQcih7dHlwZToiY2F0Y2giLGlubmVyVHlwZTplLGNhdGNoVmFsdWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDprcyh0KX0pfWNvbnN0IENyPXAoIlpvZE5hTiIsKGUsdCk9PnskcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pk5nKCl9KTtmdW5jdGlvbiBRYShlKXtyZXR1cm4gdWgoQ3IsZSl9Y29uc3QgQ3Q9cCgiWm9kUGlwZSIsKGUsdCk9PntlaS5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnRiKCksZS5pbj10LmluLGUub3V0PXQub3V0fSk7ZnVuY3Rpb24gQnQoZSx0KXtyZXR1cm4gbmV3IEN0KHt0eXBlOiJwaXBlIixpbjplLG91dDp0fSl9Y29uc3QgRXQ9cCgiWm9kQ29kZWMiLChlLHQpPT57Q3QuaW5pdChlLHQpLHRpLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFlhKGUsdCxuKXtyZXR1cm4gbmV3IEV0KHt0eXBlOiJwaXBlIixpbjplLG91dDp0LHRyYW5zZm9ybTpuLmRlY29kZSxyZXZlcnNlVHJhbnNmb3JtOm4uZW5jb2RlfSl9ZnVuY3Rpb24gWGEoZSl7Y29uc3QgdD1lLl96b2QuZGVmO3JldHVybiBuZXcgRXQoe3R5cGU6InBpcGUiLGluOnQub3V0LG91dDp0LmluLHRyYW5zZm9ybTp0LnJldmVyc2VUcmFuc2Zvcm0scmV2ZXJzZVRyYW5zZm9ybTp0LnRyYW5zZm9ybX0pfWNvbnN0IEVyPXAoIlpvZFByZXByb2Nlc3MiLChlLHQpPT57Q3QuaW5pdChlLHQpLFNwLmluaXQoZSx0KX0pLE9yPXAoIlpvZFJlYWRvbmx5IiwoZSx0KT0+e3pwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+bmIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBBcihlKXtyZXR1cm4gbmV3IE9yKHt0eXBlOiJyZWFkb25seSIsaW5uZXJUeXBlOmV9KX1jb25zdCBScj1wKCJab2RUZW1wbGF0ZUxpdGVyYWwiLChlLHQpPT57VHAuaW5pdChlLHQpLEUuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5qZygpfSk7ZnVuY3Rpb24gZWMoZSx0KXtyZXR1cm4gbmV3IFJyKHt0eXBlOiJ0ZW1wbGF0ZV9saXRlcmFsIixwYXJ0czplLC4uLnkodCl9KX1jb25zdCBacj1wKCJab2RMYXp5IiwoZSx0KT0+e25pLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cmIoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5nZXR0ZXIoKX0pO2Z1bmN0aW9uIE5yKGUpe3JldHVybiBuZXcgWnIoe3R5cGU6ImxhenkiLGdldHRlcjplfSl9Y29uc3QganI9cCgiWm9kUHJvbWlzZSIsKGUsdCk9PntQcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9Pm9iKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gdGMoZSl7cmV0dXJuIG5ldyBqcih7dHlwZToicHJvbWlzZSIsaW5uZXJUeXBlOmV9KX1jb25zdCBNcj1wKCJab2RGdW5jdGlvbiIsKGUsdCk9PntJcC5pbml0KGUsdCksRS5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkxnKCl9KTtmdW5jdGlvbiBsdChlKXtyZXR1cm4gbmV3IE1yKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6QXJyYXkuaXNBcnJheShlPy5pbnB1dCk/ZnIoZT8uaW5wdXQpOmU/LmlucHV0Pz9QKHEoKSksb3V0cHV0OmU/Lm91dHB1dD8/cSgpfSl9Y29uc3QgT3Q9cCgiWm9kQ3VzdG9tIiwoZSx0KT0+e3hwLmluaXQoZSx0KSxFLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+RGcoKX0pO2Z1bmN0aW9uIG5jKGUpe2NvbnN0IHQ9bmV3IFYoe2NoZWNrOiJjdXN0b20ifSk7cmV0dXJuIHQuX3pvZC5jaGVjaz1lLHR9ZnVuY3Rpb24gcXIoZSx0KXtyZXR1cm4gcGgoT3QsZT8/KCgpPT4hMCksdCl9ZnVuY3Rpb24gRHIoZSx0PXt9KXtyZXR1cm4gaGgoT3QsZSx0KX1mdW5jdGlvbiBMcihlLHQpe3JldHVybiBmaChlLHQpfWNvbnN0IG9jPWdoLHJjPWJoLFVyPXAoIlpvZEluc3RhbmNlT2YiLChlLHQpPT57T3QuaW5pdChlLHQpfSx7cHJvcGVydGllcyhlLHQpe3JldHVybiB0aGlzLmNoZWNrKGRuKGUsdCkpfX0pO2Z1bmN0aW9uIHNjKGUsdD17fSl7Y29uc3Qgbj1uZXcgVXIoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46bz0+byBpbnN0YW5jZW9mIGUsYWJvcnQ6ITAsLi4ueSh0KX0pO3JldHVybiBuLl96b2QuYmFnLkNsYXNzPWUsbi5fem9kLmNoZWNrPW89PntvLnZhbHVlIGluc3RhbmNlb2YgZXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDplLm5hbWUsaW5wdXQ6by52YWx1ZSxpbnN0Om4scGF0aDpbLi4ubi5fem9kLmRlZi5wYXRoPz9bXV19KX0sbn1jb25zdCBpYz0oLi4uZSk9PnZoKHtDb2RlYzpFdCxCb29sZWFuOlN0LFN0cmluZzpidH0sLi4uZSk7ZnVuY3Rpb24gYWMoZSl7Y29uc3QgdD1OcigoKT0+TyhbaChlKSxDKCksRCgpLGpuKCksUCh0KSxaKGgoKSx0KV0pKTtyZXR1cm4gdH1mdW5jdGlvbiBCbihlLHQpe3JldHVybiBuZXcgRXIoe3R5cGU6InBpcGUiLGluOkxuKGUpLG91dDp0fSl9Y29uc3QgZGI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLFpvZEFueTpzcixab2RBcnJheTp1cixab2RCYXNlNjQ6T24sWm9kQmFzZTY0VVJMOkFuLFpvZEJpZ0ludDp6dCxab2RCaWdJbnRGb3JtYXQ6Tm4sWm9kQm9vbGVhbjpTdCxab2RDSURSdjQ6Q24sWm9kQ0lEUnY2OkVuLFpvZENVSUQ6JG4sWm9kQ1VJRDI6U24sWm9kQ2F0Y2g6UHIsWm9kQ29kZWM6RXQsWm9kQ3JlZGl0Q2FyZDplcixab2RDdXN0b206T3QsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OnFlLFpvZERhdGU6cW4sWm9kRGVmYXVsdDp3cixab2REaXNjcmltaW5hdGVkVW5pb246ZHIsWm9kRTE2NDpSbixab2RFbWFpbDp5bixab2RFbW9qaTprbixab2RFbnVtOlFlLFpvZEV4YWN0T3B0aW9uYWw6VW4sWm9kRmlsZTp2cixab2RGdW5jdGlvbjpNcixab2RHVUlEOl9uLFpvZElCQU46dHIsWm9kSVB2NDpQbixab2RJUHY2OnhuLFpvZElTT0RhdGU6eXQsWm9kSVNPRGF0ZVRpbWU6dnQsWm9kSVNPRHVyYXRpb246a3QsWm9kSVNPVGltZTpfdCxab2RJbnN0YW5jZU9mOlVyLFpvZEludGVyc2VjdGlvbjpwcixab2RKV1Q6Wm4sWm9kS1NVSUQ6SW4sWm9kTGF6eTpacixab2RMaXRlcmFsOmJyLFpvZE1BQzpYbyxab2RNYXA6bXIsWm9kTmFOOkNyLFpvZE5hbm9JRDp3bixab2ROZXZlcjphcixab2ROb25PcHRpb25hbDpIbixab2ROdWxsOnJyLFpvZE51bGxhYmxlOmtyLFpvZE51bWJlcjokdCxab2ROdW1iZXJGb3JtYXQ6RGUsWm9kT2JqZWN0OlR0LFpvZE9wdGlvbmFsOnh0LFpvZFBpcGU6Q3QsWm9kUHJlZmF1bHQ6U3IsWm9kUHJlcHJvY2VzczpFcixab2RQcm9taXNlOmpyLFpvZFJlYWRvbmx5Ok9yLFpvZFJlY29yZDpHZSxab2RTZXQ6Z3IsWm9kU3RyaW5nOmJ0LFpvZFN0cmluZ0Zvcm1hdDpMLFpvZFN1Y2Nlc3M6SXIsWm9kU3ltYm9sOm5yLFpvZFRlbXBsYXRlTGl0ZXJhbDpScixab2RUcmFuc2Zvcm06eXIsWm9kVHVwbGU6aHIsWm9kVHlwZTpFLFpvZFVMSUQ6em4sWm9kVVJMOnd0LFpvZFVVSUQ6d2UsWm9kVW5kZWZpbmVkOm9yLFpvZFVuaW9uOkl0LFpvZFVua25vd246aXIsWm9kVm9pZDpjcixab2RYSUQ6VG4sWm9kWG9yOmxyLF9ab2RTdHJpbmc6dm4sX2RlZmF1bHQ6JHIsX2Z1bmN0aW9uOmx0LGFueTpNbixhcnJheTpQLGJhc2U2NDp5YSxiYXNlNjR1cmw6X2EsYmlnaW50OlJhLGJvb2xlYW46RCxjYXRjaDp4cixjaGVjazpuYyxjaWRydjQ6YmEsY2lkcnY2OnZhLGNvZGVjOllhLGNyZWRpdENhcmQ6d2EsY3VpZDp1YSxjdWlkMjpsYSxjdXJyZW5jeUNvZGU6UGEsY3VzdG9tOnFyLGRhdGU6cWEsZGVzY3JpYmU6b2MsZGlzY3JpbWluYXRlZFVuaW9uOkRuLGUxNjQ6a2EsZW1haWw6WGksZW1vamk6YWEsZW51bTpuZSxleGFjdE9wdGlvbmFsOl9yLGZpbGU6S2EsZmxvYXQzMjpDYSxmbG9hdDY0OkVhLGZ1bmN0aW9uOmx0LGd1aWQ6ZWEsaGFzaDp4YSxoZXg6SWEsaG9zdG5hbWU6VGEsaHR0cFVybDppYSxpYmFuOiRhLGluc3RhbmNlb2Y6c2MsaW50Okh0LGludDMyOk9hLGludDY0OlphLGludGVyc2VjdGlvbjpQdCxpbnZlcnRDb2RlYzpYYSxpcHY0OmZhLGlwdjY6Z2EsanNvbjphYyxqd3Q6U2Esa2V5b2Y6RGEsa3N1aWQ6aGEsbGF6eTpOcixsaXRlcmFsOmYsbG9vc2VPYmplY3Q6dGUsbG9vc2VSZWNvcmQ6QmEsbWFjOm1hLG1hcDpGYSxtZXRhOnJjLG5hbjpRYSxuYW5vaWQ6Y2EsbmF0aXZlRW51bTpKYSxuZXZlcjpXZSxub25vcHRpb25hbDpUcixudWxsOmpuLG51bGxhYmxlOnV0LG51bGxpc2g6V2EsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6RixwYXJ0aWFsUmVjb3JkOkhhLHBpcGU6QnQscHJlZmF1bHQ6enIscHJlcHJvY2VzczpCbixwcm9taXNlOnRjLHJlYWRvbmx5OkFyLHJlY29yZDpaLHJlZmluZTpEcixzZXQ6VmEsc3RyaWN0T2JqZWN0OkxhLHN0cmluZzpoLHN0cmluZ0Zvcm1hdDp6YSxzdHJpbmdib29sOmljLHN1Y2Nlc3M6R2Esc3VwZXJSZWZpbmU6THIsc3ltYm9sOmphLHRlbXBsYXRlTGl0ZXJhbDplYyx0cmFuc2Zvcm06TG4sdHVwbGU6ZnIsdWludDMyOkFhLHVpbnQ2NDpOYSx1bGlkOmRhLHVuZGVmaW5lZDpjdCx1bmlvbjpPLHVua25vd246cSx1cmw6c2EsdXVpZDp0YSx1dWlkdjQ6bmEsdXVpZHY2Om9hLHV1aWR2NzpyYSx2b2lkOk1hLHhpZDpwYSx4b3I6VWF9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksVGg9e2ludmFsaWRfdHlwZToiaW52YWxpZF90eXBlIix0b29fYmlnOiJ0b29fYmlnIix0b29fc21hbGw6InRvb19zbWFsbCIsaW52YWxpZF9mb3JtYXQ6ImludmFsaWRfZm9ybWF0Iixub3RfbXVsdGlwbGVfb2Y6Im5vdF9tdWx0aXBsZV9vZiIsdW5yZWNvZ25pemVkX2tleXM6InVucmVjb2duaXplZF9rZXlzIixpbnZhbGlkX3VuaW9uOiJpbnZhbGlkX3VuaW9uIixpbnZhbGlkX2tleToiaW52YWxpZF9rZXkiLGludmFsaWRfZWxlbWVudDoiaW52YWxpZF9lbGVtZW50IixpbnZhbGlkX3ZhbHVlOiJpbnZhbGlkX3ZhbHVlIixjdXN0b206ImN1c3RvbSJ9O2Z1bmN0aW9uIEloKGUpe1Eoe2N1c3RvbUVycm9yOmV9KX1mdW5jdGlvbiBQaCgpe3JldHVybiBRKCkuY3VzdG9tRXJyb3J9dmFyIHlvO3lvfHwoeW89e30pO2Z1bmN0aW9uIHhoKGUpe3JldHVybiBSaSh2dCxlKX1mdW5jdGlvbiBwYihlKXtyZXR1cm4gWmkoeXQsZSl9ZnVuY3Rpb24gaGIoZSl7cmV0dXJuIE5pKF90LGUpfWZ1bmN0aW9uIGZiKGUpe3JldHVybiBqaShrdCxlKX1jb25zdCBjYz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsWm9kSVNPRGF0ZTp5dCxab2RJU09EYXRlVGltZTp2dCxab2RJU09EdXJhdGlvbjprdCxab2RJU09UaW1lOl90LGRhdGU6cGIsZGF0ZXRpbWU6eGgsZHVyYXRpb246ZmIsdGltZTpoYn0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxTPXsuLi5kYiwuLi51Yixpc286Y2N9LG1iPW5ldyBTZXQoWyIkc2NoZW1hIiwiJHJlZiIsIiRkZWZzIiwiZGVmaW5pdGlvbnMiLCIkaWQiLCJpZCIsIiRjb21tZW50IiwiJGFuY2hvciIsIiR2b2NhYnVsYXJ5IiwiJGR5bmFtaWNSZWYiLCIkZHluYW1pY0FuY2hvciIsInR5cGUiLCJlbnVtIiwiY29uc3QiLCJhbnlPZiIsIm9uZU9mIiwiYWxsT2YiLCJub3QiLCJwcm9wZXJ0aWVzIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwicHJvcGVydHlOYW1lcyIsIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIiwiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNvbnRhaW5zIiwibWluQ29udGFpbnMiLCJtYXhDb250YWlucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsInBhdHRlcm4iLCJmb3JtYXQiLCJtaW5pbXVtIiwibWF4aW11bSIsImV4Y2x1c2l2ZU1pbmltdW0iLCJleGNsdXNpdmVNYXhpbXVtIiwibXVsdGlwbGVPZiIsImRlc2NyaXB0aW9uIiwiZGVmYXVsdCIsImNvbnRlbnRFbmNvZGluZyIsImNvbnRlbnRNZWRpYVR5cGUiLCJjb250ZW50U2NoZW1hIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImlmIiwidGhlbiIsImVsc2UiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW50UmVxdWlyZWQiLCJudWxsYWJsZSIsInJlYWRPbmx5Il0pO2Z1bmN0aW9uIGdiKGUsdCl7Y29uc3Qgbj1lLiRzY2hlbWE7cmV0dXJuIG49PT0iaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiPyJkcmFmdC0yMDIwLTEyIjpuPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI/ImRyYWZ0LTciOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIj8iZHJhZnQtNCI6dD8/ImRyYWZ0LTIwMjAtMTIifWZ1bmN0aW9uIGl1KGUsdCl7cmV0dXJuIGUubWFwKChuLG8pPT5vPHQ/bjpuLm9wdGlvbmFsKCkpfWZ1bmN0aW9uIGJiKGUpe3JldHVybiBlLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iil9ZnVuY3Rpb24gdmIoZSx0KXtpZighZS5zdGFydHNXaXRoKCIjIikpdGhyb3cgbmV3IEVycm9yKCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkIik7Y29uc3Qgbj1lLnNsaWNlKDEpLnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gdC5yb290U2NoZW1hO2NvbnN0IG89dC52ZXJzaW9uPT09ImRyYWZ0LTIwMjAtMTIiPyIkZGVmcyI6ImRlZmluaXRpb25zIjtpZihuWzBdPT09byl7Y29uc3Qgcj1uWzFdPT09dm9pZCAwP3ZvaWQgMDpiYihuWzFdKTtpZighcnx8IXQuZGVmc1tyXSl0aHJvdyBuZXcgRXJyb3IoYFJlZmVyZW5jZSBub3QgZm91bmQ6ICR7ZX1gKTtyZXR1cm4gdC5kZWZzW3JdfXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApfWZ1bmN0aW9uIHliKGUsdCl7cmV0dXJuIFMudHJhbnNmb3JtKG89Pm8pLmNoZWNrKG89Pntjb25zdCByPW8udmFsdWU7aWYodHlwZW9mIHIhPSJvYmplY3QifHxyPT09bnVsbHx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm47Y29uc3Qgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKTtpZih0Lm1pblByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPHQubWluUHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lm1pblByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBzbWFsbDogZXhwZWN0ZWQgb2JqZWN0IHRvIGhhdmUgPj0ke3QubWluUHJvcGVydGllc30gcHJvcGVydGllc2AsaW5wdXQ6cixpbnN0OmUsY29udGludWU6ITB9KSx0Lm1heFByb3BlcnRpZXMhPT12b2lkIDAmJnMubGVuZ3RoPnQubWF4UHJvcGVydGllcyYmby5pc3N1ZXMucHVzaCh7b3JpZ2luOiJvYmplY3QiLGNvZGU6InRvb19iaWciLG1heGltdW06dC5tYXhQcm9wZXJ0aWVzLGluY2x1c2l2ZTohMCxtZXNzYWdlOmBUb28gYmlnOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA8PSR7dC5tYXhQcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQua2V5U2NoZW1hKWZvcihjb25zdCBpIG9mIHMpe2NvbnN0IGE9dC5rZXlTY2hlbWEuc2FmZVBhcnNlKGkpO2Euc3VjY2Vzc3x8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9rZXkiLG9yaWdpbjoicmVjb3JkIixpc3N1ZXM6YS5lcnJvci5pc3N1ZXMsaW5wdXQ6aSxwYXRoOltpXSxjb250aW51ZTohMH0pfX0pLnBpcGUoZSl9ZnVuY3Rpb24gcHMoZSx0KXtpZihlPT09bnVsbClyZXR1cm4ieiI7Y29uc3Qgbj10eXBlb2YgZTtpZihuIT09Im9iamVjdCIpe2lmKG49PT0ibnVtYmVyIiYmTnVtYmVyLmlzTmFOKGUpKXJldHVybiBudWxsO2NvbnN0IG89U3RyaW5nKGUpO3JldHVybmAke25bMF19JHtvLmxlbmd0aH06JHtvfWB9aWYodC5oYXMoZSkpcmV0dXJuIG51bGw7dC5hZGQoZSk7dHJ5e2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHM9W107Zm9yKGNvbnN0IGkgb2YgZSl7Y29uc3QgYT1wcyhpLHQpO2lmKGE9PT1udWxsKXJldHVybiBudWxsO3MucHVzaChhKX1yZXR1cm5gYSR7cy5sZW5ndGh9Olske3Muam9pbigiLCIpfV1gfWNvbnN0IG89T2JqZWN0LmtleXMoZSkuc29ydCgpLHI9W107Zm9yKGNvbnN0IHMgb2Ygbyl7Y29uc3QgaT1wcyhlW3NdLHQpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO3IucHVzaChgJHtzLmxlbmd0aH06JHtzfT0ke2l9YCl9cmV0dXJuYG8ke3IubGVuZ3RofTp7JHtyLmpvaW4oIiwiKX19YH1maW5hbGx5e3QuZGVsZXRlKGUpfX1jb25zdCBfYj1uZXcgU2V0KFsiaXRlbXMiLCJwcmVmaXhJdGVtcyIsImFkZGl0aW9uYWxJdGVtcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29udGFpbnMiLCJwcm9wZXJ0eU5hbWVzIiwibm90IiwiaWYiLCJ0aGVuIiwiZWxzZSIsImFsbE9mIiwiYW55T2YiLCJvbmVPZiIsInVuZXZhbHVhdGVkSXRlbXMiLCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMiLCJjb250ZW50U2NoZW1hIl0pLGtiPW5ldyBTZXQoWyJwcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJkZXBlbmRlbnRTY2hlbWFzIiwiZGVwZW5kZW5jaWVzIiwiJGRlZnMiLCJkZWZpbml0aW9ucyJdKTtmdW5jdGlvbiBNdChlKXtyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbD8hMTpBcnJheS5pc0FycmF5KGUpP2Uuc29tZShNdCk6dHlwZW9mIGUuJHJlZj09InN0cmluZyI/ITA6T2JqZWN0LmVudHJpZXMoZSkuc29tZSgoW3Qsbl0pPT5fYi5oYXModCk/TXQobik6IWtiLmhhcyh0KXx8dHlwZW9mIG4hPSJvYmplY3QifHxuPT09bnVsbD8hMTpPYmplY3QudmFsdWVzKG4pLnNvbWUoTXQpKX1mdW5jdGlvbiBhdShlKXtyZXR1cm4gZT09PTE/ImVsZW1lbnQiOiJlbGVtZW50cyJ9ZnVuY3Rpb24gd2IoZSx0KXtyZXR1cm4gUy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZihBcnJheS5pc0FycmF5KHIpKXtpZih0LnVuaXF1ZUl0ZW1zPT09ITApe2NvbnN0IHM9bmV3IE1hcDtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7Y29uc3QgYT1wcyhyW2ldLG5ldyBTZXQpO2lmKGE9PT1udWxsKWNvbnRpbnVlO2NvbnN0IHU9cy5nZXQoYSk7aWYodT09PXZvaWQgMCl7cy5zZXQoYSxpKTtjb250aW51ZX1vLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IGl0ZW1zIG11c3QgYmUgdW5pcXVlOiBlbGVtZW50IGF0IGluZGV4ICR7aX0gZHVwbGljYXRlcyB0aGUgb25lIGF0IGluZGV4ICR7dX1gLGlucHV0OnIscGF0aDpbaV0sY29udGludWU6ITB9KX19aWYodC5jb250YWluc1NjaGVtYSl7Y29uc3Qgcz10Lm1pbkNvbnRhaW5zPz8xLGk9dC5tYXhDb250YWlucyE9PXZvaWQgMD90Lm1heENvbnRhaW5zKzE6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBhPTA7Zm9yKGNvbnN0IHUgb2YgcilpZih0LmNvbnRhaW5zU2NoZW1hLnNhZmVQYXJzZSh1KS5zdWNjZXNzJiYrK2E+PWkpYnJlYWs7YTxzJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCAke3N9IG1hdGNoaW5nICR7YXUocyl9OyBmb3VuZCAke2F9YCxpbnB1dDpyLGNvbnRpbnVlOiEwfSksdC5tYXhDb250YWlucyE9PXZvaWQgMCYmYT50Lm1heENvbnRhaW5zJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJjdXN0b20iLG1lc3NhZ2U6YEFycmF5IG11c3QgY29udGFpbiBhdCBtb3N0ICR7dC5tYXhDb250YWluc30gbWF0Y2hpbmcgJHthdSh0Lm1heENvbnRhaW5zKX1gLGlucHV0OnIsY29udGludWU6ITB9KX19fSkucGlwZShlKX1mdW5jdGlvbiBjdShlLHQpe2lmKGUhPT0hMSlyZXR1cm4gZT09PXZvaWQgMHx8ZT09PSEwP1MuYW55KCk6YWUoZSx0KX1jb25zdCAkYj0vXig/OlswMV1cZHwyWzAtM10pOlswLTVdXGQ6WzAtNV1cZCg/OlwuXGQrKT8oPzpafFsrLV0oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkKSQvO2Z1bmN0aW9uIENoKGUsdCl7aWYoZS5ub3QhPT12b2lkIDApe2lmKHR5cGVvZiBlLm5vdD09Im9iamVjdCImJk9iamVjdC5rZXlzKGUubm90KS5sZW5ndGg9PT0wKXJldHVybiBTLm5ldmVyKCk7dGhyb3cgbmV3IEVycm9yKCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpIil9aWYoZS51bmV2YWx1YXRlZEl0ZW1zIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRJdGVtcyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS51bmV2YWx1YXRlZFByb3BlcnRpZXMhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJ1bmV2YWx1YXRlZFByb3BlcnRpZXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuaWYhPT12b2lkIDB8fGUudGhlbiE9PXZvaWQgMHx8ZS5lbHNlIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuZGVwZW5kZW50U2NoZW1hcyE9PXZvaWQgMHx8ZS5kZXBlbmRlbnRSZXF1aXJlZCE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoImRlcGVuZGVudFNjaGVtYXMgYW5kIGRlcGVuZGVudFJlcXVpcmVkIGFyZSBub3Qgc3VwcG9ydGVkIik7aWYoZS4kcmVmKXtjb25zdCByPWUuJHJlZjtpZih0LnJlZnMuaGFzKHIpKXJldHVybiB0LnJlZnMuZ2V0KHIpO2lmKHQucHJvY2Vzc2luZy5oYXMocikpcmV0dXJuIFMubGF6eSgoKT0+e2lmKCF0LnJlZnMuaGFzKHIpKXRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyfWApO3JldHVybiB0LnJlZnMuZ2V0KHIpfSk7dC5wcm9jZXNzaW5nLmFkZChyKTtjb25zdCBzPXZiKHIsdCksaT1hZShzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsaSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxpfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiBTLm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIFMubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIFMubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGk9PnR5cGVvZiBpPT0ic3RyaW5nIikpcmV0dXJuIFMuZW51bShyKTtjb25zdCBzPXIubWFwKGk9PlMubGl0ZXJhbChpKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTpTLnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIFMubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBpPXsuLi5lLHR5cGU6c307cmV0dXJuIENoKGksdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP1MubmV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTpTLnVuaW9uKHIpfWlmKCFuKXJldHVybiBTLmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPVMuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKFMuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayhTLnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayhTLnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayhTLmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKFMuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2soUy5yZWdleCgkYikpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayhTLmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2soUy5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayhTLmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2soUy5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2soUy5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2soUy5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2soUy5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayhTLmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKFMuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKFMuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2soUy5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKFMuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKFMuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayhTLmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2soUy5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2soUy5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayhTLmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKFMudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKFMueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKFMua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP1MubnVtYmVyKCkuaW50KCk6Uy5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPVMuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289Uy5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxpPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGE9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP2FlKGUuYWRkaXRpb25hbFByb3BlcnRpZXMsdCk6dm9pZCAwO2Zvcihjb25zdFttLGJdb2YgT2JqZWN0LmVudHJpZXMocykpe2NvbnN0IHY9YWUoYix0KTtZZShyLG0saS5oYXMobSk/djp2Lm9wdGlvbmFsKCkpfWlmKGUucGF0dGVyblByb3BlcnRpZXMpe2NvbnN0IG09ZS5wYXR0ZXJuUHJvcGVydGllcyxiPU9iamVjdC5rZXlzKG0pLHY9W107Zm9yKGNvbnN0IGsgb2YgYil7Y29uc3QgJD1hZShtW2tdLHQpLEk9Uy5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKGspKTt2LnB1c2goUy5sb29zZVJlY29yZChJLCQpKX1jb25zdCBfPVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZfLnB1c2goUy5vYmplY3QocikucGFzc3Rocm91Z2goKSksXy5wdXNoKC4uLnYpLF8ubGVuZ3RoPT09MClvPVMub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoXy5sZW5ndGg9PT0xKW89X1swXTtlbHNle2xldCBrPVMuaW50ZXJzZWN0aW9uKF9bMF0sX1sxXSk7Zm9yKGxldCAkPTI7JDxfLmxlbmd0aDskKyspaz1TLmludGVyc2VjdGlvbihrLF9bJF0pO289a31pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0IGs9T2JqZWN0LmtleXMociksJD1iLm1hcChSPT5uZXcgUmVnRXhwKFIpKSxJPW87bz1vLmNoZWNrKFI9PntpZighTmUoUi52YWx1ZSkpcmV0dXJuO2NvbnN0IEo9W107Zm9yKGNvbnN0IHcgb2YgT2JqZWN0LmtleXMoUi52YWx1ZSkpay5pbmNsdWRlcyh3KXx8JC5zb21lKHo9PnoudGVzdCh3KSl8fEoucHVzaCh3KTtKLmxlbmd0aCYmUi5pc3N1ZXMucHVzaCh7Y29kZToidW5yZWNvZ25pemVkX2tleXMiLGtleXM6SixpbnB1dDpSLnZhbHVlLGluc3Q6SX0pfSl9fWVsc2V7Y29uc3QgbT1TLm9iamVjdChyKTtlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITE/bz1tLnN0cmljdCgpOmE/bz1tLmNhdGNoYWxsKGEpOm89bS5wYXNzdGhyb3VnaCgpfWNvbnN0IHU9ZS5wcm9wZXJ0eU5hbWVzIT09dm9pZCAwJiZlLnByb3BlcnR5TmFtZXMhPT0hMCxsPXR5cGVvZiBlLm1pblByb3BlcnRpZXM9PSJudW1iZXIiP2UubWluUHJvcGVydGllczp2b2lkIDAsZD10eXBlb2YgZS5tYXhQcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1heFByb3BlcnRpZXM6dm9pZCAwO2lmKHV8fGwhPT12b2lkIDB8fGQhPT12b2lkIDApe2xldCBtO2lmKHUpe2NvbnN0IGI9dHlwZW9mIGUucHJvcGVydHlOYW1lcz09Im9iamVjdCImJmUucHJvcGVydHlOYW1lcy50eXBlPT09dm9pZCAwP3t0eXBlOiJzdHJpbmciLC4uLmUucHJvcGVydHlOYW1lc306ZS5wcm9wZXJ0eU5hbWVzO209YWUoYix0KX1vPXliKG8se2tleVNjaGVtYTptLG1pblByb3BlcnRpZXM6bCxtYXhQcm9wZXJ0aWVzOmR9KX1icmVha31jYXNlImFycmF5Ijp7Y29uc3Qgcj1lLnByZWZpeEl0ZW1zLHM9ZS5pdGVtcztpZihyJiZBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1yLm1hcChtPT5hZShtLHQpKSx1PWl1KGEsaSksbD1BcnJheS5pc0FycmF5KHMpP3ZvaWQgMDpjdShzLHQpLGQ9Uy50dXBsZSh1KTtvPWw/ZC5yZXN0KGwpOmQsdHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKFMubWluTGVuZ3RoKGUubWluSXRlbXMpKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYobz1vLmNoZWNrKFMubWF4TGVuZ3RoKGUubWF4SXRlbXMpKSl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHMpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1zLm1hcChtPT5hZShtLHQpKSx1PWl1KGEsaSksbD1jdShlLmFkZGl0aW9uYWxJdGVtcyx0KSxkPVMudHVwbGUodSk7bz1sP2QucmVzdChsKTpkLHR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1pbkxlbmd0aChlLm1pbkl0ZW1zKSkpLHR5cGVvZiBlLm1heEl0ZW1zPT0ibnVtYmVyIiYmKG89by5jaGVjayhTLm1heExlbmd0aChlLm1heEl0ZW1zKSkpfWVsc2UgaWYocyE9PXZvaWQgMCl7Y29uc3QgaT1hZShzLHQpO2xldCBhPVMuYXJyYXkoaSk7dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYoYT1hLm1pbihlLm1pbkl0ZW1zKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYoYT1hLm1heChlLm1heEl0ZW1zKSksbz1hfWVsc2Ugbz1TLmFycmF5KFMuYW55KCkpOyhlLnVuaXF1ZUl0ZW1zPT09ITB8fGUuY29udGFpbnMhPT12b2lkIDApJiYobz13YihvLHt1bmlxdWVJdGVtczplLnVuaXF1ZUl0ZW1zPT09ITAsY29udGFpbnNTY2hlbWE6ZS5jb250YWlucyE9PXZvaWQgMD9hZShlLmNvbnRhaW5zLHQpOnZvaWQgMCxtaW5Db250YWluczp0eXBlb2YgZS5taW5Db250YWlucz09Im51bWJlciI/ZS5taW5Db250YWluczp2b2lkIDAsbWF4Q29udGFpbnM6dHlwZW9mIGUubWF4Q29udGFpbnM9PSJudW1iZXIiP2UubWF4Q29udGFpbnM6dm9pZCAwfSkpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke259YCl9cmV0dXJuIG99ZnVuY3Rpb24gYWUoZSx0KXtpZih0eXBlb2YgZT09ImJvb2xlYW4iKXJldHVybiBlP1MuYW55KCk6Uy5uZXZlcigpO2xldCBuPUNoKGUsdCk7Y29uc3Qgbz1lLnR5cGV8fGUuZW51bSE9PXZvaWQgMHx8ZS5jb25zdCE9PXZvaWQgMDtpZihlLmFueU9mJiZBcnJheS5pc0FycmF5KGUuYW55T2YpKXtjb25zdCBhPWUuYW55T2YubWFwKGw9PmFlKGwsdCkpLHU9Uy51bmlvbihhKTtuPW8/Uy5pbnRlcnNlY3Rpb24obix1KTp1fWlmKGUub25lT2YmJkFycmF5LmlzQXJyYXkoZS5vbmVPZikpe2NvbnN0IGE9ZS5vbmVPZi5tYXAobD0+YWUobCx0KSksdT1TLnhvcihhKTtuPW8/Uy5pbnRlcnNlY3Rpb24obix1KTp1fWlmKGUuYWxsT2YmJkFycmF5LmlzQXJyYXkoZS5hbGxPZikpaWYoZS5hbGxPZi5sZW5ndGg9PT0wKW49bz9uOlMuYW55KCk7ZWxzZXtsZXQgYT1vP246YWUoZS5hbGxPZlswXSx0KTtjb25zdCB1PW8/MDoxO2ZvcihsZXQgbD11O2w8ZS5hbGxPZi5sZW5ndGg7bCsrKWE9Uy5pbnRlcnNlY3Rpb24oYSxhZShlLmFsbE9mW2xdLHQpKTtuPWF9ZS5udWxsYWJsZT09PSEwJiZ0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiYobj1TLm51bGxhYmxlKG4pKSxlLnJlYWRPbmx5PT09ITAmJihuPVMucmVhZG9ubHkobikpLGUuZGVmYXVsdCE9PXZvaWQgMCYmKG49bi5kZWZhdWx0KGUuZGVmYXVsdCkpO2NvbnN0IHI9e30scz1bIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl07Zm9yKGNvbnN0IGEgb2YgcylhIGluIGUmJihyW2FdPWVbYV0pO2NvbnN0IGk9WyJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSJdO2Zvcihjb25zdCBhIG9mIGkpYSBpbiBlJiYoclthXT1lW2FdKTtpZihlLnR5cGU9PT0ib2JqZWN0IiYmZS4kcmVmPT09dm9pZCAwKXtlLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJiFNdChlLnByb3BlcnR5TmFtZXMpJiYoci5wcm9wZXJ0eU5hbWVzPWUucHJvcGVydHlOYW1lcyk7Zm9yKGNvbnN0IGEgb2ZbIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9aWYoZS50eXBlPT09ImFycmF5IiYmZS4kcmVmPT09dm9pZCAwKXtlLmNvbnRhaW5zIT09dm9pZCAwJiYhTXQoZS5jb250YWlucykmJihyLmNvbnRhaW5zPWUuY29udGFpbnMpO2Zvcihjb25zdCBhIG9mWyJ1bmlxdWVJdGVtcyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1mb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhlKSltYi5oYXMoYSl8fFllKHIsYSxlW2FdKTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnQucmVnaXN0cnkuYWRkKG4sciksZS5kZXNjcmlwdGlvbiYmKG49bi5kZXNjcmliZShlLmRlc2NyaXB0aW9uKSksbn1mdW5jdGlvbiBFaChlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/Uy5hbnkoKTpTLm5ldmVyKCk7bGV0IG47dHJ5e249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzIil9Y29uc3Qgbz1nYihuLHQ/LmRlZmF1bHRUYXJnZXQpLHI9bi4kZGVmc3x8bi5kZWZpbml0aW9uc3x8e30scz17dmVyc2lvbjpvLGRlZnM6cixyZWZzOm5ldyBNYXAscHJvY2Vzc2luZzpuZXcgU2V0LHJvb3RTY2hlbWE6bixyZWdpc3RyeTp0Py5yZWdpc3RyeT8/YmV9O3JldHVybiBhZShuLHMpfWZ1bmN0aW9uIE9oKGUpe3JldHVybiBxaShlLHtvYmplY3Q6dD0+dC5wYXJ0aWFsKCksdW5pb246dD0+e2NvbnN0IG49dC5fem9kLmRlZjtyZXR1cm4gbi5kaXNjcmltaW5hdG9yPT09dm9pZCAwP3Q6TyhuLm9wdGlvbnMpfX0pfWZ1bmN0aW9uIFNiKGUsdCl7aWYoIXQ/Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBuPWUuX3pvZC5kZWY7cmV0dXJuIEsoZSxpZShuLHtjaGVja3M6Wy4uLm4uY2hlY2tzPz9bXSwuLi50XX0pLHtwYXJlbnQ6ITB9KX1mdW5jdGlvbiBBaChlKXtyZXR1cm4gU2IoZS5vdXQsZS5jaGVja3MpfWZ1bmN0aW9uIHpiKGUpe3JldHVybiBlLmluLl96b2QudHJhaXRzLmhhcygiJFpvZFRyYW5zZm9ybSIpP0FoKGUpOmUuaW59ZnVuY3Rpb24gUmgoZSl7cmV0dXJuIHFpKGUse3BpcGU6dD0+emIodC5fem9kLmRlZiksZGVmYXVsdDoodCxuKT0+bj9GKHQuX3pvZC5kZWYuaW5uZXJUeXBlKTp0LGNhdGNoOih0LG4pPT5uP3QuX3pvZC5kZWYuaW5uZXJUeXBlOnR9KX1mdW5jdGlvbiBaaChlKXtyZXR1cm4gcWkoZSx7cGlwZTp0PT5BaCh0Ll96b2QuZGVmKSxwcmVmYXVsdDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gVGIoZSl7cmV0dXJuIGpwKGJ0LGUpfWZ1bmN0aW9uIEliKGUpe3JldHVybiBVcCgkdCxlKX1mdW5jdGlvbiBQYihlKXtyZXR1cm4gV3AoU3QsZSl9ZnVuY3Rpb24geGIoZSl7cmV0dXJuIFFwKHp0LGUpfWZ1bmN0aW9uIENiKGUpe3JldHVybiBjaChxbixlKX1jb25zdCBOaD1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsYmlnaW50OnhiLGJvb2xlYW46UGIsZGF0ZTpDYixudW1iZXI6SWIsc3RyaW5nOlRifSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHV1PU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCwkYnJhbmQ6U3MsJGlucHV0OnNpLCRvdXRwdXQ6cmksSU5WQUxJRDphaSxORVZFUjokcyxUaW1lUHJlY2lzaW9uOkFpLFpvZEFueTpzcixab2RBcnJheTp1cixab2RCYXNlNjQ6T24sWm9kQmFzZTY0VVJMOkFuLFpvZEJpZ0ludDp6dCxab2RCaWdJbnRGb3JtYXQ6Tm4sWm9kQm9vbGVhbjpTdCxab2RDSURSdjQ6Q24sWm9kQ0lEUnY2OkVuLFpvZENVSUQ6JG4sWm9kQ1VJRDI6U24sWm9kQ2F0Y2g6UHIsWm9kQ29kZWM6RXQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6Y2ksWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6dWksWm9kQ3JlZGl0Q2FyZDplcixab2RDdXN0b206T3QsWm9kQ3VzdG9tU3RyaW5nRm9ybWF0OnFlLFpvZERhdGU6cW4sWm9kRGVmYXVsdDp3cixab2REaXNjcmltaW5hdGVkVW5pb246ZHIsWm9kRTE2NDpSbixab2RFbWFpbDp5bixab2RFbW9qaTprbixab2RFbnVtOlFlLFpvZEVycm9yOnpoLFpvZEV4YWN0T3B0aW9uYWw6VW4sWm9kRmlsZTp2cixnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kKCl7cmV0dXJuIHlvfSxab2RGdW5jdGlvbjpNcixab2RHVUlEOl9uLFpvZElCQU46dHIsWm9kSVB2NDpQbixab2RJUHY2OnhuLFpvZElTT0RhdGU6eXQsWm9kSVNPRGF0ZVRpbWU6dnQsWm9kSVNPRHVyYXRpb246a3QsWm9kSVNPVGltZTpfdCxab2RJbnN0YW5jZU9mOlVyLFpvZEludGVyc2VjdGlvbjpwcixab2RJc3N1ZUNvZGU6VGgsWm9kSldUOlpuLFpvZEtTVUlEOkluLFpvZExhenk6WnIsWm9kTGl0ZXJhbDpicixab2RNQUM6WG8sWm9kTWFwOm1yLFpvZE5hTjpDcixab2ROYW5vSUQ6d24sWm9kTmV2ZXI6YXIsWm9kTm9uT3B0aW9uYWw6SG4sWm9kTnVsbDpycixab2ROdWxsYWJsZTprcixab2ROdW1iZXI6JHQsWm9kTnVtYmVyRm9ybWF0OkRlLFpvZE9iamVjdDpUdCxab2RPcHRpb25hbDp4dCxab2RQaXBlOkN0LFpvZFByZWZhdWx0OlNyLFpvZFByZXByb2Nlc3M6RXIsWm9kUHJvbWlzZTpqcixab2RSZWFkb25seTpPcixab2RSZWFsRXJyb3I6bGUsWm9kUmVjb3JkOkdlLFpvZFNldDpncixab2RTdHJpbmc6YnQsWm9kU3RyaW5nRm9ybWF0OkwsWm9kU3VjY2VzczpJcixab2RTeW1ib2w6bnIsWm9kVGVtcGxhdGVMaXRlcmFsOlJyLFpvZFRyYW5zZm9ybTp5cixab2RUdXBsZTpocixab2RUeXBlOkUsWm9kVUxJRDp6bixab2RVUkw6d3QsWm9kVVVJRDp3ZSxab2RVbmRlZmluZWQ6b3IsWm9kVW5pb246SXQsWm9kVW5rbm93bjppcixab2RWb2lkOmNyLFpvZFhJRDpUbixab2RYb3I6bHIsX1pvZFN0cmluZzp2bixfZGVmYXVsdDokcixfZnVuY3Rpb246bHQsYW55Ok1uLGFycmF5OlAsYmFzZTY0OnlhLGJhc2U2NHVybDpfYSxiaWdpbnQ6UmEsYm9vbGVhbjpELGNhdGNoOnhyLGNoZWNrOm5jLGNpZHJ2NDpiYSxjaWRydjY6dmEsY2xvbmU6Syxjb2RlYzpZYSxjb2VyY2U6TmgsY29tcGlsZTpsaSxjb25maWc6USxjb3JlOndoLGNyZWRpdENhcmQ6d2EsY3VpZDp1YSxjdWlkMjpsYSxjdXJyZW5jeUNvZGU6UGEsY3VzdG9tOnFyLGRhdGU6cWEsZGVjb2RlOlZpLGRlY29kZUFzeW5jOktpLGRlZXBQYXJ0aWFsOk9oLGRlc2NyaWJlOm9jLGRpc2NyaW1pbmF0ZWRVbmlvbjpEbixlMTY0OmthLGVtYWlsOlhpLGVtb2ppOmFhLGVuY29kZTpGaSxlbmNvZGVBc3luYzpKaSxlbmRzV2l0aDpsbixlbnVtOm5lLGV4YWN0T3B0aW9uYWw6X3IsZmlsZTpLYSxmbGF0dGVuRXJyb3I6Tm8sZmxvYXQzMjpDYSxmbG9hdDY0OkVhLGZvcm1hdEVycm9yOmpvLGZyb21KU09OU2NoZW1hOkVoLGZ1bmN0aW9uOmx0LGdldERpc2NyaW1pbmF0ZWRPcHRpb246UXMsZ2V0RXJyb3JNYXA6UGgsZ2xvYmFsUmVnaXN0cnk6YmUsZ3Q6Q2UsZ3RlOmhlLGd1aWQ6ZWEsaGFzaDp4YSxoZXg6SWEsaG9zdG5hbWU6VGEsaHR0cFVybDppYSxpYmFuOiRhLGluY2x1ZGVzOmNuLGlucHV0OlJoLGluc3RhbmNlb2Y6c2MsaW50Okh0LGludDMyOk9hLGludDY0OlphLGludGVyc2VjdGlvbjpQdCxpbnZlcnRDb2RlYzpYYSxpcHY0OmZhLGlwdjY6Z2EsaXNvOmNjLGpzb246YWMsand0OlNhLGtleW9mOkRhLGtzdWlkOmhhLGxhenk6TnIsbGVuZ3RoOm10LGxpdGVyYWw6Zixsb2NhbGVzOm9pLGxvb3NlT2JqZWN0OnRlLGxvb3NlUmVjb3JkOkJhLGxvd2VyY2FzZTpzbixsdDp4ZSxsdGU6cGUsbWFjOm1hLG1hcDpGYSxtYXhMZW5ndGg6ZnQsbWF4U2l6ZTpYZSxtZW1vaXplcjpCbyxtZXRhOnJjLG1pbWU6cG4sbWluTGVuZ3RoOmplLG1pblNpemU6RWUsbXVsdGlwbGVPZjpLZSxuYW46UWEsbmFub2lkOmNhLG5hdGl2ZUVudW06SmEsbmVnYXRpdmU6V28sbmV2ZXI6V2Usbm9ubmVnYXRpdmU6UW8sbm9ub3B0aW9uYWw6VHIsbm9ucG9zaXRpdmU6R28sbm9ybWFsaXplOmhuLG51bGw6am4sbnVsbGFibGU6dXQsbnVsbGlzaDpXYSxudW1iZXI6QyxvYmplY3Q6ZyxvcHRpb25hbDpGLG91dHB1dDpaaCxvdmVyd3JpdGU6JGUscGFyc2U6TGkscGFyc2VBc3luYzpVaSxwYXJ0aWFsUmVjb3JkOkhhLHBpcGU6QnQscG9zaXRpdmU6S28scHJlZmF1bHQ6enIscHJlcHJvY2VzczpCbixwcmV0dGlmeUVycm9yOlRzLHByb21pc2U6dGMscHJvcGVydGllczpkbixwcm9wZXJ0eTpZbyxyZWFkb25seTpBcixyZWNvcmQ6WixyZWZpbmU6RHIscmVnZXg6cm4scmVnZXhlczpVbyxyZWdpc3RyeTpGbyxzYWZlRGVjb2RlOkdpLHNhZmVEZWNvZGVBc3luYzpZaSxzYWZlRW5jb2RlOldpLHNhZmVFbmNvZGVBc3luYzpRaSxzYWZlUGFyc2U6SGksc2FmZVBhcnNlQXN5bmM6Qmksc2V0OlZhLHNldEVycm9yTWFwOkloLHNpemU6aHQsc2x1Z2lmeTpibixzdGFydHNXaXRoOnVuLHN0cmljdE9iamVjdDpMYSxzdHJpbmc6aCxzdHJpbmdGb3JtYXQ6emEsc3RyaW5nYm9vbDppYyxzdWNjZXNzOkdhLHN1cGVyUmVmaW5lOkxyLHN5bWJvbDpqYSx0ZW1wbGF0ZUxpdGVyYWw6ZWMsdG9KU09OU2NoZW1hOk1pLHRvTG93ZXJDYXNlOm1uLHRvVXBwZXJDYXNlOmduLHRvWm9kOklvLHRyYW5zZm9ybTpMbix0cmVlaWZ5RXJyb3I6enMsdHJpbTpmbix0dXBsZTpmcix1aW50MzI6QWEsdWludDY0Ok5hLHVsaWQ6ZGEsdW5kZWZpbmVkOmN0LHVuaW9uOk8sdW5rbm93bjpxLHVwcGVyY2FzZTphbix1cmw6c2EsdXRpbDp3cyx1dWlkOnRhLHV1aWR2NDpuYSx1dWlkdjY6b2EsdXVpZHY3OnJhLHZhbGlkYXRlOnFvLHZhbGlkYXRlQXN5bmM6RG8sdm9pZDpNYSx3aXRoUGFyc2VyOmRpLHhpZDpwYSx4b3I6VWF9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksRWI9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRicmFuZDpTcywkaW5wdXQ6c2ksJG91dHB1dDpyaSxJTlZBTElEOmFpLE5FVkVSOiRzLFRpbWVQcmVjaXNpb246QWksWm9kQW55OnNyLFpvZEFycmF5OnVyLFpvZEJhc2U2NDpPbixab2RCYXNlNjRVUkw6QW4sWm9kQmlnSW50Onp0LFpvZEJpZ0ludEZvcm1hdDpObixab2RCb29sZWFuOlN0LFpvZENJRFJ2NDpDbixab2RDSURSdjY6RW4sWm9kQ1VJRDokbixab2RDVUlEMjpTbixab2RDYXRjaDpQcixab2RDb2RlYzpFdCxab2RDb21waWxlQXN5bmNFcnJvcjpjaSxab2RDb21waWxlVW5zdXBwb3J0ZWRFcnJvcjp1aSxab2RDcmVkaXRDYXJkOmVyLFpvZEN1c3RvbTpPdCxab2RDdXN0b21TdHJpbmdGb3JtYXQ6cWUsWm9kRGF0ZTpxbixab2REZWZhdWx0OndyLFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpkcixab2RFMTY0OlJuLFpvZEVtYWlsOnluLFpvZEVtb2ppOmtuLFpvZEVudW06UWUsWm9kRXJyb3I6emgsWm9kRXhhY3RPcHRpb25hbDpVbixab2RGaWxlOnZyLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4geW99LFpvZEZ1bmN0aW9uOk1yLFpvZEdVSUQ6X24sWm9kSUJBTjp0cixab2RJUHY0OlBuLFpvZElQdjY6eG4sWm9kSVNPRGF0ZTp5dCxab2RJU09EYXRlVGltZTp2dCxab2RJU09EdXJhdGlvbjprdCxab2RJU09UaW1lOl90LFpvZEluc3RhbmNlT2Y6VXIsWm9kSW50ZXJzZWN0aW9uOnByLFpvZElzc3VlQ29kZTpUaCxab2RKV1Q6Wm4sWm9kS1NVSUQ6SW4sWm9kTGF6eTpacixab2RMaXRlcmFsOmJyLFpvZE1BQzpYbyxab2RNYXA6bXIsWm9kTmFOOkNyLFpvZE5hbm9JRDp3bixab2ROZXZlcjphcixab2ROb25PcHRpb25hbDpIbixab2ROdWxsOnJyLFpvZE51bGxhYmxlOmtyLFpvZE51bWJlcjokdCxab2ROdW1iZXJGb3JtYXQ6RGUsWm9kT2JqZWN0OlR0LFpvZE9wdGlvbmFsOnh0LFpvZFBpcGU6Q3QsWm9kUHJlZmF1bHQ6U3IsWm9kUHJlcHJvY2VzczpFcixab2RQcm9taXNlOmpyLFpvZFJlYWRvbmx5Ok9yLFpvZFJlYWxFcnJvcjpsZSxab2RSZWNvcmQ6R2UsWm9kU2V0OmdyLFpvZFN0cmluZzpidCxab2RTdHJpbmdGb3JtYXQ6TCxab2RTdWNjZXNzOklyLFpvZFN5bWJvbDpucixab2RUZW1wbGF0ZUxpdGVyYWw6UnIsWm9kVHJhbnNmb3JtOnlyLFpvZFR1cGxlOmhyLFpvZFR5cGU6RSxab2RVTElEOnpuLFpvZFVSTDp3dCxab2RVVUlEOndlLFpvZFVuZGVmaW5lZDpvcixab2RVbmlvbjpJdCxab2RVbmtub3duOmlyLFpvZFZvaWQ6Y3IsWm9kWElEOlRuLFpvZFhvcjpscixfWm9kU3RyaW5nOnZuLF9kZWZhdWx0OiRyLF9mdW5jdGlvbjpsdCxhbnk6TW4sYXJyYXk6UCxiYXNlNjQ6eWEsYmFzZTY0dXJsOl9hLGJpZ2ludDpSYSxib29sZWFuOkQsY2F0Y2g6eHIsY2hlY2s6bmMsY2lkcnY0OmJhLGNpZHJ2Njp2YSxjbG9uZTpLLGNvZGVjOllhLGNvZXJjZTpOaCxjb21waWxlOmxpLGNvbmZpZzpRLGNvcmU6d2gsY3JlZGl0Q2FyZDp3YSxjdWlkOnVhLGN1aWQyOmxhLGN1cnJlbmN5Q29kZTpQYSxjdXN0b206cXIsZGF0ZTpxYSxkZWNvZGU6VmksZGVjb2RlQXN5bmM6S2ksZGVlcFBhcnRpYWw6T2gsZGVmYXVsdDp1dSxkZXNjcmliZTpvYyxkaXNjcmltaW5hdGVkVW5pb246RG4sZTE2NDprYSxlbWFpbDpYaSxlbW9qaTphYSxlbmNvZGU6RmksZW5jb2RlQXN5bmM6SmksZW5kc1dpdGg6bG4sZW51bTpuZSxleGFjdE9wdGlvbmFsOl9yLGZpbGU6S2EsZmxhdHRlbkVycm9yOk5vLGZsb2F0MzI6Q2EsZmxvYXQ2NDpFYSxmb3JtYXRFcnJvcjpqbyxmcm9tSlNPTlNjaGVtYTpFaCxmdW5jdGlvbjpsdCxnZXREaXNjcmltaW5hdGVkT3B0aW9uOlFzLGdldEVycm9yTWFwOlBoLGdsb2JhbFJlZ2lzdHJ5OmJlLGd0OkNlLGd0ZTpoZSxndWlkOmVhLGhhc2g6eGEsaGV4OklhLGhvc3RuYW1lOlRhLGh0dHBVcmw6aWEsaWJhbjokYSxpbmNsdWRlczpjbixpbnB1dDpSaCxpbnN0YW5jZW9mOnNjLGludDpIdCxpbnQzMjpPYSxpbnQ2NDpaYSxpbnRlcnNlY3Rpb246UHQsaW52ZXJ0Q29kZWM6WGEsaXB2NDpmYSxpcHY2OmdhLGlzbzpjYyxqc29uOmFjLGp3dDpTYSxrZXlvZjpEYSxrc3VpZDpoYSxsYXp5Ok5yLGxlbmd0aDptdCxsaXRlcmFsOmYsbG9jYWxlczpvaSxsb29zZU9iamVjdDp0ZSxsb29zZVJlY29yZDpCYSxsb3dlcmNhc2U6c24sbHQ6eGUsbHRlOnBlLG1hYzptYSxtYXA6RmEsbWF4TGVuZ3RoOmZ0LG1heFNpemU6WGUsbWVtb2l6ZXI6Qm8sbWV0YTpyYyxtaW1lOnBuLG1pbkxlbmd0aDpqZSxtaW5TaXplOkVlLG11bHRpcGxlT2Y6S2UsbmFuOlFhLG5hbm9pZDpjYSxuYXRpdmVFbnVtOkphLG5lZ2F0aXZlOldvLG5ldmVyOldlLG5vbm5lZ2F0aXZlOlFvLG5vbm9wdGlvbmFsOlRyLG5vbnBvc2l0aXZlOkdvLG5vcm1hbGl6ZTpobixudWxsOmpuLG51bGxhYmxlOnV0LG51bGxpc2g6V2EsbnVtYmVyOkMsb2JqZWN0Omcsb3B0aW9uYWw6RixvdXRwdXQ6Wmgsb3ZlcndyaXRlOiRlLHBhcnNlOkxpLHBhcnNlQXN5bmM6VWkscGFydGlhbFJlY29yZDpIYSxwaXBlOkJ0LHBvc2l0aXZlOktvLHByZWZhdWx0OnpyLHByZXByb2Nlc3M6Qm4scHJldHRpZnlFcnJvcjpUcyxwcm9taXNlOnRjLHByb3BlcnRpZXM6ZG4scHJvcGVydHk6WW8scmVhZG9ubHk6QXIscmVjb3JkOloscmVmaW5lOkRyLHJlZ2V4OnJuLHJlZ2V4ZXM6VW8scmVnaXN0cnk6Rm8sc2FmZURlY29kZTpHaSxzYWZlRGVjb2RlQXN5bmM6WWksc2FmZUVuY29kZTpXaSxzYWZlRW5jb2RlQXN5bmM6UWksc2FmZVBhcnNlOkhpLHNhZmVQYXJzZUFzeW5jOkJpLHNldDpWYSxzZXRFcnJvck1hcDpJaCxzaXplOmh0LHNsdWdpZnk6Ym4sc3RhcnRzV2l0aDp1bixzdHJpY3RPYmplY3Q6TGEsc3RyaW5nOmgsc3RyaW5nRm9ybWF0OnphLHN0cmluZ2Jvb2w6aWMsc3VjY2VzczpHYSxzdXBlclJlZmluZTpMcixzeW1ib2w6amEsdGVtcGxhdGVMaXRlcmFsOmVjLHRvSlNPTlNjaGVtYTpNaSx0b0xvd2VyQ2FzZTptbix0b1VwcGVyQ2FzZTpnbix0b1pvZDpJbyx0cmFuc2Zvcm06TG4sdHJlZWlmeUVycm9yOnpzLHRyaW06Zm4sdHVwbGU6ZnIsdWludDMyOkFhLHVpbnQ2NDpOYSx1bGlkOmRhLHVuZGVmaW5lZDpjdCx1bmlvbjpPLHVua25vd246cSx1cHBlcmNhc2U6YW4sdXJsOnNhLHV0aWw6d3MsdXVpZDp0YSx1dWlkdjQ6bmEsdXVpZHY2Om9hLHV1aWR2NzpyYSx2YWxpZGF0ZTpxbyx2YWxpZGF0ZUFzeW5jOkRvLHZvaWQ6TWEsd2l0aFBhcnNlcjpkaSx4aWQ6cGEseG9yOlVhLHo6dXV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksQmU9ImlvLm1vZGVsY29udGV4dHByb3RvY29sL3JlbGF0ZWQtdGFzayIsSHI9IjIuMCIsRz1xcihlPT5lIT09bnVsbCYmKHR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpKSxqaD1PKFtoKCksQygpLmludCgpXSksTWg9aCgpO3RlKHt0dGw6QygpLm9wdGlvbmFsKCkscG9sbEludGVydmFsOkMoKS5vcHRpb25hbCgpfSk7Y29uc3QgT2I9Zyh7dHRsOkMoKS5vcHRpb25hbCgpfSksQWI9Zyh7dGFza0lkOmgoKX0pLHVjPXRlKHtwcm9ncmVzc1Rva2VuOmpoLm9wdGlvbmFsKCksW0JlXTpBYi5vcHRpb25hbCgpfSksbWU9Zyh7X21ldGE6dWMub3B0aW9uYWwoKX0pLEZuPW1lLmV4dGVuZCh7dGFzazpPYi5vcHRpb25hbCgpfSksUmI9ZT0+Rm4uc2FmZVBhcnNlKGUpLnN1Y2Nlc3Msb2U9Zyh7bWV0aG9kOmgoKSxwYXJhbXM6bWUubG9vc2UoKS5vcHRpb25hbCgpfSksX2U9Zyh7X21ldGE6dWMub3B0aW9uYWwoKX0pLGtlPWcoe21ldGhvZDpoKCkscGFyYW1zOl9lLmxvb3NlKCkub3B0aW9uYWwoKX0pLHJlPXRlKHtfbWV0YTp1Yy5vcHRpb25hbCgpfSksVm49TyhbaCgpLEMoKS5pbnQoKV0pLHFoPWcoe2pzb25ycGM6ZihIciksaWQ6Vm4sLi4ub2Uuc2hhcGV9KS5zdHJpY3QoKSxsdT1lPT5xaC5zYWZlUGFyc2UoZSkuc3VjY2VzcyxEaD1nKHtqc29ucnBjOmYoSHIpLC4uLmtlLnNoYXBlfSkuc3RyaWN0KCksWmI9ZT0+RGguc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsbGM9Zyh7anNvbnJwYzpmKEhyKSxpZDpWbixyZXN1bHQ6cmV9KS5zdHJpY3QoKSxjbz1lPT5sYy5zYWZlUGFyc2UoZSkuc3VjY2Vzczt2YXIgVTsoZnVuY3Rpb24oZSl7ZVtlLkNvbm5lY3Rpb25DbG9zZWQ9LTMyZTNdPSJDb25uZWN0aW9uQ2xvc2VkIixlW2UuUmVxdWVzdFRpbWVvdXQ9LTMyMDAxXT0iUmVxdWVzdFRpbWVvdXQiLGVbZS5QYXJzZUVycm9yPS0zMjcwMF09IlBhcnNlRXJyb3IiLGVbZS5JbnZhbGlkUmVxdWVzdD0tMzI2MDBdPSJJbnZhbGlkUmVxdWVzdCIsZVtlLk1ldGhvZE5vdEZvdW5kPS0zMjYwMV09Ik1ldGhvZE5vdEZvdW5kIixlW2UuSW52YWxpZFBhcmFtcz0tMzI2MDJdPSJJbnZhbGlkUGFyYW1zIixlW2UuSW50ZXJuYWxFcnJvcj0tMzI2MDNdPSJJbnRlcm5hbEVycm9yIixlW2UuVXJsRWxpY2l0YXRpb25SZXF1aXJlZD0tMzIwNDJdPSJVcmxFbGljaXRhdGlvblJlcXVpcmVkIn0pKFV8fChVPXt9KSk7Y29uc3QgZGM9Zyh7anNvbnJwYzpmKEhyKSxpZDpWbi5vcHRpb25hbCgpLGVycm9yOmcoe2NvZGU6QygpLmludCgpLG1lc3NhZ2U6aCgpLGRhdGE6cSgpLm9wdGlvbmFsKCl9KX0pLnN0cmljdCgpLE5iPWU9PmRjLnNhZmVQYXJzZShlKS5zdWNjZXNzLGpiPU8oW3FoLERoLGxjLGRjXSk7TyhbbGMsZGNdKTtjb25zdCBwYz1yZS5zdHJpY3QoKSxNYj1fZS5leHRlbmQoe3JlcXVlc3RJZDpWbi5vcHRpb25hbCgpLHJlYXNvbjpoKCkub3B0aW9uYWwoKX0pLGhjPWtlLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvY2FuY2VsbGVkIikscGFyYW1zOk1ifSkscWI9Zyh7c3JjOmgoKSxtaW1lVHlwZTpoKCkub3B0aW9uYWwoKSxzaXplczpQKGgoKSkub3B0aW9uYWwoKSx0aGVtZTpuZShbImxpZ2h0IiwiZGFyayJdKS5vcHRpb25hbCgpfSksSm49Zyh7aWNvbnM6UChxYikub3B0aW9uYWwoKX0pLGR0PWcoe25hbWU6aCgpLHRpdGxlOmgoKS5vcHRpb25hbCgpfSksQnI9ZHQuZXh0ZW5kKHsuLi5kdC5zaGFwZSwuLi5Kbi5zaGFwZSx2ZXJzaW9uOmgoKSx3ZWJzaXRlVXJsOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpfSksRGI9UHQoZyh7YXBwbHlEZWZhdWx0czpEKCkub3B0aW9uYWwoKX0pLFooaCgpLHEoKSkpLExiPUJuKGU9PmUmJnR5cGVvZiBlPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoZSkmJk9iamVjdC5rZXlzKGUpLmxlbmd0aD09PTA/e2Zvcm06e319OmUsUHQoZyh7Zm9ybTpEYi5vcHRpb25hbCgpLHVybDpHLm9wdGlvbmFsKCl9KSxaKGgoKSxxKCkpLm9wdGlvbmFsKCkpKSxVYj10ZSh7bGlzdDpHLm9wdGlvbmFsKCksY2FuY2VsOkcub3B0aW9uYWwoKSxyZXF1ZXN0czp0ZSh7c2FtcGxpbmc6dGUoe2NyZWF0ZU1lc3NhZ2U6Ry5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjp0ZSh7Y3JlYXRlOkcub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksSGI9dGUoe2xpc3Q6Ry5vcHRpb25hbCgpLGNhbmNlbDpHLm9wdGlvbmFsKCkscmVxdWVzdHM6dGUoe3Rvb2xzOnRlKHtjYWxsOkcub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksQmI9Zyh7ZXhwZXJpbWVudGFsOlooaCgpLEcpLm9wdGlvbmFsKCksc2FtcGxpbmc6Zyh7Y29udGV4dDpHLm9wdGlvbmFsKCksdG9vbHM6Ry5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpMYi5vcHRpb25hbCgpLHJvb3RzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczpVYi5vcHRpb25hbCgpLGV4dGVuc2lvbnM6WihoKCksRykub3B0aW9uYWwoKX0pLEZiPW1lLmV4dGVuZCh7cHJvdG9jb2xWZXJzaW9uOmgoKSxjYXBhYmlsaXRpZXM6QmIsY2xpZW50SW5mbzpCcn0pLFZiPW9lLmV4dGVuZCh7bWV0aG9kOmYoImluaXRpYWxpemUiKSxwYXJhbXM6RmJ9KSxKYj1nKHtleHBlcmltZW50YWw6WihoKCksRykub3B0aW9uYWwoKSxsb2dnaW5nOkcub3B0aW9uYWwoKSxjb21wbGV0aW9uczpHLm9wdGlvbmFsKCkscHJvbXB0czpnKHtsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCkscmVzb3VyY2VzOmcoe3N1YnNjcmliZTpEKCkub3B0aW9uYWwoKSxsaXN0Q2hhbmdlZDpEKCkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCksdG9vbHM6Zyh7bGlzdENoYW5nZWQ6RCgpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOkhiLm9wdGlvbmFsKCksZXh0ZW5zaW9uczpaKGgoKSxHKS5vcHRpb25hbCgpfSksS2I9cmUuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246aCgpLGNhcGFiaWxpdGllczpKYixzZXJ2ZXJJbmZvOkJyLGluc3RydWN0aW9uczpoKCkub3B0aW9uYWwoKX0pLFdiPWtlLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6X2Uub3B0aW9uYWwoKX0pLEZyPW9lLmV4dGVuZCh7bWV0aG9kOmYoInBpbmciKSxwYXJhbXM6bWUub3B0aW9uYWwoKX0pLEdiPWcoe3Byb2dyZXNzOkMoKSx0b3RhbDpGKEMoKSksbWVzc2FnZTpGKGgoKSl9KSxRYj1nKHsuLi5fZS5zaGFwZSwuLi5HYi5zaGFwZSxwcm9ncmVzc1Rva2VuOmpofSksZmM9a2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9wcm9ncmVzcyIpLHBhcmFtczpRYn0pLFliPW1lLmV4dGVuZCh7Y3Vyc29yOk1oLm9wdGlvbmFsKCl9KSxLbj1vZS5leHRlbmQoe3BhcmFtczpZYi5vcHRpb25hbCgpfSksV249cmUuZXh0ZW5kKHtuZXh0Q3Vyc29yOk1oLm9wdGlvbmFsKCl9KSxYYj1uZShbIndvcmtpbmciLCJpbnB1dF9yZXF1aXJlZCIsImNvbXBsZXRlZCIsImZhaWxlZCIsImNhbmNlbGxlZCJdKSxHbj1nKHt0YXNrSWQ6aCgpLHN0YXR1czpYYix0dGw6TyhbQygpLGpuKCldKSxjcmVhdGVkQXQ6aCgpLGxhc3RVcGRhdGVkQXQ6aCgpLHBvbGxJbnRlcnZhbDpGKEMoKSksc3RhdHVzTWVzc2FnZTpGKGgoKSl9KSxtYz1yZS5leHRlbmQoe3Rhc2s6R259KSxldj1fZS5tZXJnZShHbiksX289a2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiKSxwYXJhbXM6ZXZ9KSxnYz1vZS5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9nZXQiKSxwYXJhbXM6bWUuZXh0ZW5kKHt0YXNrSWQ6aCgpfSl9KSxiYz1yZS5tZXJnZShHbiksdmM9b2UuZXh0ZW5kKHttZXRob2Q6ZigidGFza3MvcmVzdWx0IikscGFyYW1zOm1lLmV4dGVuZCh7dGFza0lkOmgoKX0pfSk7cmUubG9vc2UoKTtjb25zdCB5Yz1Lbi5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9saXN0Iil9KSxfYz1Xbi5leHRlbmQoe3Rhc2tzOlAoR24pfSksa2M9b2UuZXh0ZW5kKHttZXRob2Q6ZigidGFza3MvY2FuY2VsIikscGFyYW1zOm1lLmV4dGVuZCh7dGFza0lkOmgoKX0pfSksdHY9cmUubWVyZ2UoR24pLExoPWcoe3VyaTpoKCksbWltZVR5cGU6RihoKCkpLF9tZXRhOlooaCgpLHEoKSkub3B0aW9uYWwoKX0pLFVoPUxoLmV4dGVuZCh7dGV4dDpoKCl9KSx3Yz1oKCkucmVmaW5lKGU9Pnt0cnl7cmV0dXJuIGF0b2IoZSksITB9Y2F0Y2h7cmV0dXJuITF9fSx7bWVzc2FnZToiSW52YWxpZCBCYXNlNjQgc3RyaW5nIn0pLEhoPUxoLmV4dGVuZCh7YmxvYjp3Y30pLFFuPW5lKFsidXNlciIsImFzc2lzdGFudCJdKSxBdD1nKHthdWRpZW5jZTpQKFFuKS5vcHRpb25hbCgpLHByaW9yaXR5OkMoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksbGFzdE1vZGlmaWVkOnhoKHtvZmZzZXQ6ITB9KS5vcHRpb25hbCgpfSksQmg9Zyh7Li4uZHQuc2hhcGUsLi4uSm4uc2hhcGUsdXJpOmgoKSxkZXNjcmlwdGlvbjpGKGgoKSksbWltZVR5cGU6RihoKCkpLHNpemU6RihDKCkpLGFubm90YXRpb25zOkF0Lm9wdGlvbmFsKCksX21ldGE6Rih0ZSh7fSkpfSksbnY9Zyh7Li4uZHQuc2hhcGUsLi4uSm4uc2hhcGUsdXJpVGVtcGxhdGU6aCgpLGRlc2NyaXB0aW9uOkYoaCgpKSxtaW1lVHlwZTpGKGgoKSksYW5ub3RhdGlvbnM6QXQub3B0aW9uYWwoKSxfbWV0YTpGKHRlKHt9KSl9KSxvdj1Lbi5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvbGlzdCIpfSksRmg9V24uZXh0ZW5kKHtyZXNvdXJjZXM6UChCaCl9KSxydj1Lbi5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvdGVtcGxhdGVzL2xpc3QiKX0pLHN2PVduLmV4dGVuZCh7cmVzb3VyY2VUZW1wbGF0ZXM6UChudil9KSwkYz1tZS5leHRlbmQoe3VyaTpoKCl9KSxpdj0kYyxhdj1vZS5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvcmVhZCIpLHBhcmFtczppdn0pLFZoPXJlLmV4dGVuZCh7Y29udGVudHM6UChPKFtVaCxIaF0pKX0pLGN2PWtlLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpfZS5vcHRpb25hbCgpfSksdXY9JGMsbHY9b2UuZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3N1YnNjcmliZSIpLHBhcmFtczp1dn0pLGR2PSRjLHB2PW9lLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy91bnN1YnNjcmliZSIpLHBhcmFtczpkdn0pLGh2PV9lLmV4dGVuZCh7dXJpOmgoKX0pLGZ2PWtlLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL3VwZGF0ZWQiKSxwYXJhbXM6aHZ9KSxtdj1nKHtuYW1lOmgoKSxkZXNjcmlwdGlvbjpGKGgoKSkscmVxdWlyZWQ6RihEKCkpfSksZ3Y9Zyh7Li4uZHQuc2hhcGUsLi4uSm4uc2hhcGUsZGVzY3JpcHRpb246RihoKCkpLGFyZ3VtZW50czpGKFAobXYpKSxfbWV0YTpGKHRlKHt9KSl9KSxidj1Lbi5leHRlbmQoe21ldGhvZDpmKCJwcm9tcHRzL2xpc3QiKX0pLHZ2PVduLmV4dGVuZCh7cHJvbXB0czpQKGd2KX0pLHl2PW1lLmV4dGVuZCh7bmFtZTpoKCksYXJndW1lbnRzOlooaCgpLGgoKSkub3B0aW9uYWwoKX0pLF92PW9lLmV4dGVuZCh7bWV0aG9kOmYoInByb21wdHMvZ2V0IikscGFyYW1zOnl2fSksU2M9Zyh7dHlwZTpmKCJ0ZXh0IiksdGV4dDpoKCksYW5ub3RhdGlvbnM6QXQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxxKCkpLm9wdGlvbmFsKCl9KSx6Yz1nKHt0eXBlOmYoImltYWdlIiksZGF0YTp3YyxtaW1lVHlwZTpoKCksYW5ub3RhdGlvbnM6QXQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxxKCkpLm9wdGlvbmFsKCl9KSxUYz1nKHt0eXBlOmYoImF1ZGlvIiksZGF0YTp3YyxtaW1lVHlwZTpoKCksYW5ub3RhdGlvbnM6QXQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxxKCkpLm9wdGlvbmFsKCl9KSxrdj1nKHt0eXBlOmYoInRvb2xfdXNlIiksbmFtZTpoKCksaWQ6aCgpLGlucHV0OlooaCgpLHEoKSksX21ldGE6WihoKCkscSgpKS5vcHRpb25hbCgpfSksSmg9Zyh7dHlwZTpmKCJyZXNvdXJjZSIpLHJlc291cmNlOk8oW1VoLEhoXSksYW5ub3RhdGlvbnM6QXQub3B0aW9uYWwoKSxfbWV0YTpaKGgoKSxxKCkpLm9wdGlvbmFsKCl9KSxLaD1CaC5leHRlbmQoe3R5cGU6ZigicmVzb3VyY2VfbGluayIpfSksWW49TyhbU2MsemMsVGMsS2gsSmhdKSx3dj1nKHtyb2xlOlFuLGNvbnRlbnQ6WW59KSwkdj1yZS5leHRlbmQoe2Rlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1lc3NhZ2VzOlAod3YpfSksU3Y9a2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9wcm9tcHRzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpfZS5vcHRpb25hbCgpfSksenY9Zyh7dGl0bGU6aCgpLm9wdGlvbmFsKCkscmVhZE9ubHlIaW50OkQoKS5vcHRpb25hbCgpLGRlc3RydWN0aXZlSGludDpEKCkub3B0aW9uYWwoKSxpZGVtcG90ZW50SGludDpEKCkub3B0aW9uYWwoKSxvcGVuV29ybGRIaW50OkQoKS5vcHRpb25hbCgpfSksVHY9Zyh7dGFza1N1cHBvcnQ6bmUoWyJyZXF1aXJlZCIsIm9wdGlvbmFsIiwiZm9yYmlkZGVuIl0pLm9wdGlvbmFsKCl9KSxJYz1nKHsuLi5kdC5zaGFwZSwuLi5Kbi5zaGFwZSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxpbnB1dFNjaGVtYTpnKHt0eXBlOmYoIm9iamVjdCIpLHByb3BlcnRpZXM6WihoKCksRykub3B0aW9uYWwoKSxyZXF1aXJlZDpQKGgoKSkub3B0aW9uYWwoKX0pLmNhdGNoYWxsKHEoKSksb3V0cHV0U2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpaKGgoKSxHKS5vcHRpb25hbCgpLHJlcXVpcmVkOlAoaCgpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwocSgpKS5vcHRpb25hbCgpLGFubm90YXRpb25zOnp2Lm9wdGlvbmFsKCksZXhlY3V0aW9uOlR2Lm9wdGlvbmFsKCksX21ldGE6WihoKCkscSgpKS5vcHRpb25hbCgpfSksV2g9S24uZXh0ZW5kKHttZXRob2Q6ZigidG9vbHMvbGlzdCIpfSksSXY9V24uZXh0ZW5kKHt0b29sczpQKEljKX0pLFZyPXJlLmV4dGVuZCh7Y29udGVudDpQKFluKS5kZWZhdWx0KFtdKSxzdHJ1Y3R1cmVkQ29udGVudDpaKGgoKSxxKCkpLm9wdGlvbmFsKCksaXNFcnJvcjpEKCkub3B0aW9uYWwoKX0pO1ZyLm9yKHJlLmV4dGVuZCh7dG9vbFJlc3VsdDpxKCl9KSk7Y29uc3QgUHY9Rm4uZXh0ZW5kKHtuYW1lOmgoKSxhcmd1bWVudHM6WihoKCkscSgpKS5vcHRpb25hbCgpfSksR2g9b2UuZXh0ZW5kKHttZXRob2Q6ZigidG9vbHMvY2FsbCIpLHBhcmFtczpQdn0pLHh2PWtlLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvdG9vbHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOl9lLm9wdGlvbmFsKCl9KTtnKHthdXRvUmVmcmVzaDpEKCkuZGVmYXVsdCghMCksZGVib3VuY2VNczpDKCkuaW50KCkubm9ubmVnYXRpdmUoKS5kZWZhdWx0KDMwMCl9KTtjb25zdCBRaD1uZShbImRlYnVnIiwiaW5mbyIsIm5vdGljZSIsIndhcm5pbmciLCJlcnJvciIsImNyaXRpY2FsIiwiYWxlcnQiLCJlbWVyZ2VuY3kiXSksQ3Y9bWUuZXh0ZW5kKHtsZXZlbDpRaH0pLEV2PW9lLmV4dGVuZCh7bWV0aG9kOmYoImxvZ2dpbmcvc2V0TGV2ZWwiKSxwYXJhbXM6Q3Z9KSxPdj1fZS5leHRlbmQoe2xldmVsOlFoLGxvZ2dlcjpoKCkub3B0aW9uYWwoKSxkYXRhOnEoKX0pLEF2PWtlLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvbWVzc2FnZSIpLHBhcmFtczpPdn0pLFJ2PWcoe25hbWU6aCgpLm9wdGlvbmFsKCl9KSxadj1nKHtoaW50czpQKFJ2KS5vcHRpb25hbCgpLGNvc3RQcmlvcml0eTpDKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLHNwZWVkUHJpb3JpdHk6QygpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxpbnRlbGxpZ2VuY2VQcmlvcml0eTpDKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpfSksTnY9Zyh7bW9kZTpuZShbImF1dG8iLCJyZXF1aXJlZCIsIm5vbmUiXSkub3B0aW9uYWwoKX0pLGp2PWcoe3R5cGU6ZigidG9vbF9yZXN1bHQiKSx0b29sVXNlSWQ6aCgpLmRlc2NyaWJlKCJUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHRvb2wgY2FsbC4iKSxjb250ZW50OlAoWW4pLmRlZmF1bHQoW10pLHN0cnVjdHVyZWRDb250ZW50Omcoe30pLmxvb3NlKCkub3B0aW9uYWwoKSxpc0Vycm9yOkQoKS5vcHRpb25hbCgpLF9tZXRhOlooaCgpLHEoKSkub3B0aW9uYWwoKX0pLE12PURuKCJ0eXBlIixbU2MsemMsVGNdKSxrbz1EbigidHlwZSIsW1NjLHpjLFRjLGt2LGp2XSkscXY9Zyh7cm9sZTpRbixjb250ZW50Ok8oW2tvLFAoa28pXSksX21ldGE6WihoKCkscSgpKS5vcHRpb25hbCgpfSksRHY9Rm4uZXh0ZW5kKHttZXNzYWdlczpQKHF2KSxtb2RlbFByZWZlcmVuY2VzOlp2Lm9wdGlvbmFsKCksc3lzdGVtUHJvbXB0OmgoKS5vcHRpb25hbCgpLGluY2x1ZGVDb250ZXh0Om5lKFsibm9uZSIsInRoaXNTZXJ2ZXIiLCJhbGxTZXJ2ZXJzIl0pLm9wdGlvbmFsKCksdGVtcGVyYXR1cmU6QygpLm9wdGlvbmFsKCksbWF4VG9rZW5zOkMoKS5pbnQoKSxzdG9wU2VxdWVuY2VzOlAoaCgpKS5vcHRpb25hbCgpLG1ldGFkYXRhOkcub3B0aW9uYWwoKSx0b29sczpQKEljKS5vcHRpb25hbCgpLHRvb2xDaG9pY2U6TnYub3B0aW9uYWwoKX0pLEx2PW9lLmV4dGVuZCh7bWV0aG9kOmYoInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiKSxwYXJhbXM6RHZ9KSxZaD1yZS5leHRlbmQoe21vZGVsOmgoKSxzdG9wUmVhc29uOkYobmUoWyJlbmRUdXJuIiwic3RvcFNlcXVlbmNlIiwibWF4VG9rZW5zIl0pLm9yKGgoKSkpLHJvbGU6UW4sY29udGVudDpNdn0pLFhoPXJlLmV4dGVuZCh7bW9kZWw6aCgpLHN0b3BSZWFzb246RihuZShbImVuZFR1cm4iLCJzdG9wU2VxdWVuY2UiLCJtYXhUb2tlbnMiLCJ0b29sVXNlIl0pLm9yKGgoKSkpLHJvbGU6UW4sY29udGVudDpPKFtrbyxQKGtvKV0pfSksVXY9Zyh7dHlwZTpmKCJib29sZWFuIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksZGVmYXVsdDpEKCkub3B0aW9uYWwoKX0pLEh2PWcoe3R5cGU6Zigic3RyaW5nIiksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluTGVuZ3RoOkMoKS5vcHRpb25hbCgpLG1heExlbmd0aDpDKCkub3B0aW9uYWwoKSxmb3JtYXQ6bmUoWyJlbWFpbCIsInVyaSIsImRhdGUiLCJkYXRlLXRpbWUiXSkub3B0aW9uYWwoKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksQnY9Zyh7dHlwZTpuZShbIm51bWJlciIsImludGVnZXIiXSksdGl0bGU6aCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246aCgpLm9wdGlvbmFsKCksbWluaW11bTpDKCkub3B0aW9uYWwoKSxtYXhpbXVtOkMoKS5vcHRpb25hbCgpLGRlZmF1bHQ6QygpLm9wdGlvbmFsKCl9KSxGdj1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLGVudW06UChoKCkpLGRlZmF1bHQ6aCgpLm9wdGlvbmFsKCl9KSxWdj1nKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG9uZU9mOlAoZyh7Y29uc3Q6aCgpLHRpdGxlOmgoKX0pKSxkZWZhdWx0OmgoKS5vcHRpb25hbCgpfSksSnY9Zyh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpoKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpoKCkub3B0aW9uYWwoKSxlbnVtOlAoaCgpKSxlbnVtTmFtZXM6UChoKCkpLm9wdGlvbmFsKCksZGVmYXVsdDpoKCkub3B0aW9uYWwoKX0pLEt2PU8oW0Z2LFZ2XSksV3Y9Zyh7dHlwZTpmKCJhcnJheSIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOkMoKS5vcHRpb25hbCgpLG1heEl0ZW1zOkMoKS5vcHRpb25hbCgpLGl0ZW1zOmcoe3R5cGU6Zigic3RyaW5nIiksZW51bTpQKGgoKSl9KSxkZWZhdWx0OlAoaCgpKS5vcHRpb25hbCgpfSksR3Y9Zyh7dHlwZTpmKCJhcnJheSIpLHRpdGxlOmgoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOmgoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOkMoKS5vcHRpb25hbCgpLG1heEl0ZW1zOkMoKS5vcHRpb25hbCgpLGl0ZW1zOmcoe2FueU9mOlAoZyh7Y29uc3Q6aCgpLHRpdGxlOmgoKX0pKX0pLGRlZmF1bHQ6UChoKCkpLm9wdGlvbmFsKCl9KSxRdj1PKFtXdixHdl0pLFl2PU8oW0p2LEt2LFF2XSksWHY9TyhbWXYsVXYsSHYsQnZdKSxleT1Gbi5leHRlbmQoe21vZGU6ZigiZm9ybSIpLm9wdGlvbmFsKCksbWVzc2FnZTpoKCkscmVxdWVzdGVkU2NoZW1hOmcoe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpaKGgoKSxYdikscmVxdWlyZWQ6UChoKCkpLm9wdGlvbmFsKCl9KX0pLHR5PUZuLmV4dGVuZCh7bW9kZTpmKCJ1cmwiKSxtZXNzYWdlOmgoKSxlbGljaXRhdGlvbklkOmgoKSx1cmw6aCgpLnVybCgpfSksbnk9TyhbZXksdHldKSxveT1vZS5leHRlbmQoe21ldGhvZDpmKCJlbGljaXRhdGlvbi9jcmVhdGUiKSxwYXJhbXM6bnl9KSxyeT1fZS5leHRlbmQoe2VsaWNpdGF0aW9uSWQ6aCgpfSksc3k9a2UuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9lbGljaXRhdGlvbi9jb21wbGV0ZSIpLHBhcmFtczpyeX0pLGl5PXJlLmV4dGVuZCh7YWN0aW9uOm5lKFsiYWNjZXB0IiwiZGVjbGluZSIsImNhbmNlbCJdKSxjb250ZW50OkJuKGU9PmU9PT1udWxsP3ZvaWQgMDplLFooaCgpLE8oW2goKSxDKCksRCgpLFAoaCgpKV0pKS5vcHRpb25hbCgpKX0pLGF5PWcoe3R5cGU6ZigicmVmL3Jlc291cmNlIiksdXJpOmgoKX0pLGN5PWcoe3R5cGU6ZigicmVmL3Byb21wdCIpLG5hbWU6aCgpfSksdXk9bWUuZXh0ZW5kKHtyZWY6TyhbY3ksYXldKSxhcmd1bWVudDpnKHtuYW1lOmgoKSx2YWx1ZTpoKCl9KSxjb250ZXh0Omcoe2FyZ3VtZW50czpaKGgoKSxoKCkpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksbHk9b2UuZXh0ZW5kKHttZXRob2Q6ZigiY29tcGxldGlvbi9jb21wbGV0ZSIpLHBhcmFtczp1eX0pLGR5PXJlLmV4dGVuZCh7Y29tcGxldGlvbjp0ZSh7dmFsdWVzOlAoaCgpKS5tYXgoMTAwKSx0b3RhbDpGKEMoKS5pbnQoKSksaGFzTW9yZTpGKEQoKSl9KX0pLHB5PWcoe3VyaTpoKCkuc3RhcnRzV2l0aCgiZmlsZTovLyIpLG5hbWU6aCgpLm9wdGlvbmFsKCksX21ldGE6WihoKCkscSgpKS5vcHRpb25hbCgpfSksaHk9b2UuZXh0ZW5kKHttZXRob2Q6Zigicm9vdHMvbGlzdCIpLHBhcmFtczptZS5vcHRpb25hbCgpfSksZnk9cmUuZXh0ZW5kKHtyb290czpQKHB5KX0pLG15PWtlLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvcm9vdHMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOl9lLm9wdGlvbmFsKCl9KTtPKFtGcixWYixseSxFdixfdixidixvdixydixhdixsdixwdixHaCxXaCxnYyx2Yyx5YyxrY10pO08oW2hjLGZjLFdiLG15LF9vXSk7TyhbcGMsWWgsWGgsaXksZnksYmMsX2MsbWNdKTtPKFtGcixMdixveSxoeSxnYyx2Yyx5YyxrY10pO08oW2hjLGZjLEF2LGZ2LGN2LHh2LFN2LF9vLHN5XSk7TyhbcGMsS2IsZHksJHYsdnYsRmgsc3YsVmgsVnIsSXYsYmMsX2MsbWNdKTtjbGFzcyBqIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLG8pe3N1cGVyKGBNQ1AgZXJyb3IgJHt0fTogJHtufWApLHRoaXMuY29kZT10LHRoaXMuZGF0YT1vLHRoaXMubmFtZT0iTWNwRXJyb3IifXN0YXRpYyBmcm9tRXJyb3IodCxuLG8pe2lmKHQ9PT1VLlVybEVsaWNpdGF0aW9uUmVxdWlyZWQmJm8pe2NvbnN0IHI9bztpZihyLmVsaWNpdGF0aW9ucylyZXR1cm4gbmV3IGd5KHIuZWxpY2l0YXRpb25zLG4pfXJldHVybiBuZXcgaih0LG4sbyl9fWNsYXNzIGd5IGV4dGVuZHMgantjb25zdHJ1Y3Rvcih0LG49YFVSTCBlbGljaXRhdGlvbiR7dC5sZW5ndGg+MT8icyI6IiJ9IHJlcXVpcmVkYCl7c3VwZXIoVS5VcmxFbGljaXRhdGlvblJlcXVpcmVkLG4se2VsaWNpdGF0aW9uczp0fSl9Z2V0IGVsaWNpdGF0aW9ucygpe3JldHVybiB0aGlzLmRhdGE/LmVsaWNpdGF0aW9ucz8/W119fWZ1bmN0aW9uIEhlKGUpe3JldHVybiBlPT09ImNvbXBsZXRlZCJ8fGU9PT0iZmFpbGVkInx8ZT09PSJjYW5jZWxsZWQifW5ldyBTZXQoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2eHl6MDEyMzQ1Njc4OSIpO2Z1bmN0aW9uIGR1KGUpe2NvbnN0IG49YWIoZSk/Lm1ldGhvZDtpZighbil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBpcyBtaXNzaW5nIGEgbWV0aG9kIGxpdGVyYWwiKTtjb25zdCBvPWNiKG4pO2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIlNjaGVtYSBtZXRob2QgbGl0ZXJhbCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIG99ZnVuY3Rpb24gcHUoZSx0KXtjb25zdCBuPSRoKGUsdCk7aWYoIW4uc3VjY2Vzcyl0aHJvdyBuLmVycm9yO3JldHVybiBuLmRhdGF9Y29uc3QgYnk9NmU0O2NsYXNzIHZ5e2NvbnN0cnVjdG9yKHQpe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9yZXF1ZXN0TWVzc2FnZUlkPTAsdGhpcy5fcmVxdWVzdEhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzPW5ldyBNYXAsdGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9yZXNwb25zZUhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3RpbWVvdXRJbmZvPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnM9bmV3IFNldCx0aGlzLl90YXNrUHJvZ3Jlc3NUb2tlbnM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzPW5ldyBNYXAsdGhpcy5zZXROb3RpZmljYXRpb25IYW5kbGVyKGhjLG49Pnt0aGlzLl9vbmNhbmNlbChuKX0pLHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihmYyxuPT57dGhpcy5fb25wcm9ncmVzcyhuKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoRnIsbj0+KHt9KSksdGhpcy5fdGFza1N0b3JlPXQ/LnRhc2tTdG9yZSx0aGlzLl90YXNrTWVzc2FnZVF1ZXVlPXQ/LnRhc2tNZXNzYWdlUXVldWUsdGhpcy5fdGFza1N0b3JlJiYodGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihnYyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhuLnBhcmFtcy50YXNrSWQsby5zZXNzaW9uSWQpO2lmKCFyKXRocm93IG5ldyBqKFUuSW52YWxpZFBhcmFtcywiRmFpbGVkIHRvIHJldHJpZXZlIHRhc2s6IFRhc2sgbm90IGZvdW5kIik7cmV0dXJuey4uLnJ9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcih2Yyxhc3luYyhuLG8pPT57Y29uc3Qgcj1hc3luYygpPT57Y29uc3Qgcz1uLnBhcmFtcy50YXNrSWQ7aWYodGhpcy5fdGFza01lc3NhZ2VRdWV1ZSl7bGV0IGE7Zm9yKDthPWF3YWl0IHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUuZGVxdWV1ZShzLG8uc2Vzc2lvbklkKTspe2lmKGEudHlwZT09PSJyZXNwb25zZSJ8fGEudHlwZT09PSJlcnJvciIpe2NvbnN0IHU9YS5tZXNzYWdlLGw9dS5pZCxkPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KGwpO2lmKGQpaWYodGhpcy5fcmVxdWVzdFJlc29sdmVycy5kZWxldGUobCksYS50eXBlPT09InJlc3BvbnNlIilkKHUpO2Vsc2V7Y29uc3QgbT11LGI9bmV3IGoobS5lcnJvci5jb2RlLG0uZXJyb3IubWVzc2FnZSxtLmVycm9yLmRhdGEpO2QoYil9ZWxzZXtjb25zdCBtPWEudHlwZT09PSJyZXNwb25zZSI/IlJlc3BvbnNlIjoiRXJyb3IiO3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGAke219IGhhbmRsZXIgbWlzc2luZyBmb3IgcmVxdWVzdCAke2x9YCkpfWNvbnRpbnVlfWF3YWl0IHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLm1lc3NhZ2Use3JlbGF0ZWRSZXF1ZXN0SWQ6by5yZXF1ZXN0SWR9KX19Y29uc3QgaT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFzayhzLG8uc2Vzc2lvbklkKTtpZighaSl0aHJvdyBuZXcgaihVLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke3N9YCk7aWYoIUhlKGkuc3RhdHVzKSlyZXR1cm4gYXdhaXQgdGhpcy5fd2FpdEZvclRhc2tVcGRhdGUocyxvLnNpZ25hbCksYXdhaXQgcigpO2lmKEhlKGkuc3RhdHVzKSl7Y29uc3QgYT1hd2FpdCB0aGlzLl90YXNrU3RvcmUuZ2V0VGFza1Jlc3VsdChzLG8uc2Vzc2lvbklkKTtyZXR1cm4gdGhpcy5fY2xlYXJUYXNrUXVldWUocyksey4uLmEsX21ldGE6ey4uLmEuX21ldGEsW0JlXTp7dGFza0lkOnN9fX19cmV0dXJuIGF3YWl0IHIoKX07cmV0dXJuIGF3YWl0IHIoKX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoeWMsYXN5bmMobixvKT0+e3RyeXtjb25zdHt0YXNrczpyLG5leHRDdXJzb3I6c309YXdhaXQgdGhpcy5fdGFza1N0b3JlLmxpc3RUYXNrcyhuLnBhcmFtcz8uY3Vyc29yLG8uc2Vzc2lvbklkKTtyZXR1cm57dGFza3M6cixuZXh0Q3Vyc29yOnMsX21ldGE6e319fWNhdGNoKHIpe3Rocm93IG5ldyBqKFUuSW52YWxpZFBhcmFtcyxgRmFpbGVkIHRvIGxpc3QgdGFza3M6ICR7ciBpbnN0YW5jZW9mIEVycm9yP3IubWVzc2FnZTpTdHJpbmcocil9YCl9fSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihrYyxhc3luYyhuLG8pPT57dHJ5e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcil0aHJvdyBuZXcgaihVLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kOiAke24ucGFyYW1zLnRhc2tJZH1gKTtpZihIZShyLnN0YXR1cykpdGhyb3cgbmV3IGooVS5JbnZhbGlkUGFyYW1zLGBDYW5ub3QgY2FuY2VsIHRhc2sgaW4gdGVybWluYWwgc3RhdHVzOiAke3Iuc3RhdHVzfWApO2F3YWl0IHRoaXMuX3Rhc2tTdG9yZS51cGRhdGVUYXNrU3RhdHVzKG4ucGFyYW1zLnRhc2tJZCwiY2FuY2VsbGVkIiwiQ2xpZW50IGNhbmNlbGxlZCB0YXNrIGV4ZWN1dGlvbi4iLG8uc2Vzc2lvbklkKSx0aGlzLl9jbGVhclRhc2tRdWV1ZShuLnBhcmFtcy50YXNrSWQpO2NvbnN0IHM9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcyl0aHJvdyBuZXcgaihVLkludmFsaWRQYXJhbXMsYFRhc2sgbm90IGZvdW5kIGFmdGVyIGNhbmNlbGxhdGlvbjogJHtuLnBhcmFtcy50YXNrSWR9YCk7cmV0dXJue19tZXRhOnt9LC4uLnN9fWNhdGNoKHIpe3Rocm93IHIgaW5zdGFuY2VvZiBqP3I6bmV3IGooVS5JbnZhbGlkUmVxdWVzdCxgRmFpbGVkIHRvIGNhbmNlbCB0YXNrOiAke3IgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpfWApfX0pKX1hc3luYyBfb25jYW5jZWwodCl7aWYoIXQucGFyYW1zLnJlcXVlc3RJZClyZXR1cm47dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmdldCh0LnBhcmFtcy5yZXF1ZXN0SWQpPy5hYm9ydCh0LnBhcmFtcy5yZWFzb24pfV9zZXR1cFRpbWVvdXQodCxuLG8scixzPSExKXt0aGlzLl90aW1lb3V0SW5mby5zZXQodCx7dGltZW91dElkOnNldFRpbWVvdXQocixuKSxzdGFydFRpbWU6RGF0ZS5ub3coKSx0aW1lb3V0Om4sbWF4VG90YWxUaW1lb3V0Om8scmVzZXRUaW1lb3V0T25Qcm9ncmVzczpzLG9uVGltZW91dDpyfSl9X3Jlc2V0VGltZW91dCh0KXtjb25zdCBuPXRoaXMuX3RpbWVvdXRJbmZvLmdldCh0KTtpZighbilyZXR1cm4hMTtjb25zdCBvPURhdGUubm93KCktbi5zdGFydFRpbWU7aWYobi5tYXhUb3RhbFRpbWVvdXQmJm8+PW4ubWF4VG90YWxUaW1lb3V0KXRocm93IHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSxqLmZyb21FcnJvcihVLlJlcXVlc3RUaW1lb3V0LCJNYXhpbXVtIHRvdGFsIHRpbWVvdXQgZXhjZWVkZWQiLHttYXhUb3RhbFRpbWVvdXQ6bi5tYXhUb3RhbFRpbWVvdXQsdG90YWxFbGFwc2VkOm99KTtyZXR1cm4gY2xlYXJUaW1lb3V0KG4udGltZW91dElkKSxuLnRpbWVvdXRJZD1zZXRUaW1lb3V0KG4ub25UaW1lb3V0LG4udGltZW91dCksITB9X2NsZWFudXBUaW1lb3V0KHQpe2NvbnN0IG49dGhpcy5fdGltZW91dEluZm8uZ2V0KHQpO24mJihjbGVhclRpbWVvdXQobi50aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJbmZvLmRlbGV0ZSh0KSl9YXN5bmMgY29ubmVjdCh0KXtpZih0aGlzLl90cmFuc3BvcnQpdGhyb3cgbmV3IEVycm9yKCJBbHJlYWR5IGNvbm5lY3RlZCB0byBhIHRyYW5zcG9ydC4gQ2FsbCBjbG9zZSgpIGJlZm9yZSBjb25uZWN0aW5nIHRvIGEgbmV3IHRyYW5zcG9ydCwgb3IgdXNlIGEgc2VwYXJhdGUgUHJvdG9jb2wgaW5zdGFuY2UgcGVyIGNvbm5lY3Rpb24uIik7dGhpcy5fdHJhbnNwb3J0PXQ7Y29uc3Qgbj10aGlzLnRyYW5zcG9ydD8ub25jbG9zZTt0aGlzLl90cmFuc3BvcnQub25jbG9zZT0oKT0+e24/LigpLHRoaXMuX29uY2xvc2UoKX07Y29uc3Qgbz10aGlzLnRyYW5zcG9ydD8ub25lcnJvcjt0aGlzLl90cmFuc3BvcnQub25lcnJvcj1zPT57bz8uKHMpLHRoaXMuX29uZXJyb3Iocyl9O2NvbnN0IHI9dGhpcy5fdHJhbnNwb3J0Py5vbm1lc3NhZ2U7dGhpcy5fdHJhbnNwb3J0Lm9ubWVzc2FnZT0ocyxpKT0+e3I/LihzLGkpLGNvKHMpfHxOYihzKT90aGlzLl9vbnJlc3BvbnNlKHMpOmx1KHMpP3RoaXMuX29ucmVxdWVzdChzLGkpOlpiKHMpP3RoaXMuX29ubm90aWZpY2F0aW9uKHMpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmtub3duIG1lc3NhZ2UgdHlwZTogJHtKU09OLnN0cmluZ2lmeShzKX1gKSl9LGF3YWl0IHRoaXMuX3RyYW5zcG9ydC5zdGFydCgpfV9vbmNsb3NlKCl7Y29uc3QgdD10aGlzLl9yZXNwb25zZUhhbmRsZXJzO3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmNsZWFyKCksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmNsZWFyKCksdGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuY2xlYXIoKTtmb3IoY29uc3QgbyBvZiB0aGlzLl90aW1lb3V0SW5mby52YWx1ZXMoKSljbGVhclRpbWVvdXQoby50aW1lb3V0SWQpO3RoaXMuX3RpbWVvdXRJbmZvLmNsZWFyKCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLnZhbHVlcygpKW8uYWJvcnQoKTt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuY2xlYXIoKTtjb25zdCBuPWouZnJvbUVycm9yKFUuQ29ubmVjdGlvbkNsb3NlZCwiQ29ubmVjdGlvbiBjbG9zZWQiKTt0aGlzLl90cmFuc3BvcnQ9dm9pZCAwLHRoaXMub25jbG9zZT8uKCk7Zm9yKGNvbnN0IG8gb2YgdC52YWx1ZXMoKSlvKG4pfV9vbmVycm9yKHQpe3RoaXMub25lcnJvcj8uKHQpfV9vbm5vdGlmaWNhdGlvbih0KXtjb25zdCBuPXRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tOb3RpZmljYXRpb25IYW5kbGVyO24hPT12b2lkIDAmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pm4odCkpLmNhdGNoKG89PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBVbmNhdWdodCBlcnJvciBpbiBub3RpZmljYXRpb24gaGFuZGxlcjogJHtvfWApKSl9X29ucmVxdWVzdCh0LG4pe2NvbnN0IG89dGhpcy5fcmVxdWVzdEhhbmRsZXJzLmdldCh0Lm1ldGhvZCk/P3RoaXMuZmFsbGJhY2tSZXF1ZXN0SGFuZGxlcixyPXRoaXMuX3RyYW5zcG9ydCxzPXQucGFyYW1zPy5fbWV0YT8uW0JlXT8udGFza0lkO2lmKG89PT12b2lkIDApe2NvbnN0IGQ9e2pzb25ycGM6IjIuMCIsaWQ6dC5pZCxlcnJvcjp7Y29kZTpVLk1ldGhvZE5vdEZvdW5kLG1lc3NhZ2U6Ik1ldGhvZCBub3QgZm91bmQifX07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT90aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToiZXJyb3IiLG1lc3NhZ2U6ZCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKS5jYXRjaChtPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGVucXVldWUgZXJyb3IgcmVzcG9uc2U6ICR7bX1gKSkpOnI/LnNlbmQoZCkuY2F0Y2gobT0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGFuIGVycm9yIHJlc3BvbnNlOiAke219YCkpKTtyZXR1cm59Y29uc3QgaT1uZXcgQWJvcnRDb250cm9sbGVyO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5zZXQodC5pZCxpKTtjb25zdCBhPVJiKHQucGFyYW1zKT90LnBhcmFtcy50YXNrOnZvaWQgMCx1PXRoaXMuX3Rhc2tTdG9yZT90aGlzLnJlcXVlc3RUYXNrU3RvcmUodCxyPy5zZXNzaW9uSWQpOnZvaWQgMCxsPXtzaWduYWw6aS5zaWduYWwsc2Vzc2lvbklkOnI/LnNlc3Npb25JZCxfbWV0YTp0LnBhcmFtcz8uX21ldGEsc2VuZE5vdGlmaWNhdGlvbjphc3luYyBkPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgbT17cmVsYXRlZFJlcXVlc3RJZDp0LmlkfTtzJiYobS5yZWxhdGVkVGFzaz17dGFza0lkOnN9KSxhd2FpdCB0aGlzLm5vdGlmaWNhdGlvbihkLG0pfSxzZW5kUmVxdWVzdDphc3luYyhkLG0sYik9PntpZihpLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBqKFUuQ29ubmVjdGlvbkNsb3NlZCwiUmVxdWVzdCB3YXMgY2FuY2VsbGVkIik7Y29uc3Qgdj17Li4uYixyZWxhdGVkUmVxdWVzdElkOnQuaWR9O3MmJiF2LnJlbGF0ZWRUYXNrJiYodi5yZWxhdGVkVGFzaz17dGFza0lkOnN9KTtjb25zdCBfPXYucmVsYXRlZFRhc2s/LnRhc2tJZD8/cztyZXR1cm4gXyYmdSYmYXdhaXQgdS51cGRhdGVUYXNrU3RhdHVzKF8sImlucHV0X3JlcXVpcmVkIiksYXdhaXQgdGhpcy5yZXF1ZXN0KGQsbSx2KX0sYXV0aEluZm86bj8uYXV0aEluZm8scmVxdWVzdElkOnQuaWQscmVxdWVzdEluZm86bj8ucmVxdWVzdEluZm8sdGFza0lkOnMsdGFza1N0b3JlOnUsdGFza1JlcXVlc3RlZFR0bDphPy50dGwsY2xvc2VTU0VTdHJlYW06bj8uY2xvc2VTU0VTdHJlYW0sY2xvc2VTdGFuZGFsb25lU1NFU3RyZWFtOm4/LmNsb3NlU3RhbmRhbG9uZVNTRVN0cmVhbX07UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2EmJnRoaXMuYXNzZXJ0VGFza0hhbmRsZXJDYXBhYmlsaXR5KHQubWV0aG9kKX0pLnRoZW4oKCk9Pm8odCxsKSkudGhlbihhc3luYyBkPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgbT17cmVzdWx0OmQsanNvbnJwYzoiMi4wIixpZDp0LmlkfTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJyZXNwb25zZSIsbWVzc2FnZTptLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpOmF3YWl0IHI/LnNlbmQobSl9LGFzeW5jIGQ9PntpZihpLnNpZ25hbC5hYm9ydGVkKXJldHVybjtjb25zdCBtPXtqc29ucnBjOiIyLjAiLGlkOnQuaWQsZXJyb3I6e2NvZGU6TnVtYmVyLmlzU2FmZUludGVnZXIoZC5jb2RlKT9kLmNvZGU6VS5JbnRlcm5hbEVycm9yLG1lc3NhZ2U6ZC5tZXNzYWdlPz8iSW50ZXJuYWwgZXJyb3IiLC4uLmQuZGF0YSE9PXZvaWQgMCYme2RhdGE6ZC5kYXRhfX19O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/YXdhaXQgdGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6ImVycm9yIixtZXNzYWdlOm0sdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCk6YXdhaXQgcj8uc2VuZChtKX0pLmNhdGNoKGQ9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCByZXNwb25zZTogJHtkfWApKSkuZmluYWxseSgoKT0+e3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQodC5pZCk9PT1pJiZ0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZGVsZXRlKHQuaWQpfSl9X29ucHJvZ3Jlc3ModCl7Y29uc3R7cHJvZ3Jlc3NUb2tlbjpuLC4uLm99PXQucGFyYW1zLHI9TnVtYmVyKG4pLHM9dGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5nZXQocik7aWYoIXMpe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBmb3IgYW4gdW5rbm93biB0b2tlbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSk7cmV0dXJufWNvbnN0IGk9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQociksYT10aGlzLl90aW1lb3V0SW5mby5nZXQocik7aWYoYSYmaSYmYS5yZXNldFRpbWVvdXRPblByb2dyZXNzKXRyeXt0aGlzLl9yZXNldFRpbWVvdXQocil9Y2F0Y2godSl7dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUociksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUociksdGhpcy5fY2xlYW51cFRpbWVvdXQociksaSh1KTtyZXR1cm59cyhvKX1fb25yZXNwb25zZSh0KXtjb25zdCBuPU51bWJlcih0LmlkKSxvPXRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZ2V0KG4pO2lmKG8pe2lmKHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKG4pLGNvKHQpKW8odCk7ZWxzZXtjb25zdCBpPW5ldyBqKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtvKGkpfXJldHVybn1jb25zdCByPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KG4pO2lmKHI9PT12b2lkIDApe3RoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZWNlaXZlZCBhIHJlc3BvbnNlIGZvciBhbiB1bmtub3duIG1lc3NhZ2UgSUQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCkpO3JldHVybn10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmRlbGV0ZShuKSx0aGlzLl9jbGVhbnVwVGltZW91dChuKTtsZXQgcz0hMTtpZihjbyh0KSYmdC5yZXN1bHQmJnR5cGVvZiB0LnJlc3VsdD09Im9iamVjdCIpe2NvbnN0IGk9dC5yZXN1bHQ7aWYoaS50YXNrJiZ0eXBlb2YgaS50YXNrPT0ib2JqZWN0Iil7Y29uc3QgYT1pLnRhc2s7dHlwZW9mIGEudGFza0lkPT0ic3RyaW5nIiYmKHM9ITAsdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLnNldChhLnRhc2tJZCxuKSl9fWlmKHN8fHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKG4pLGNvKHQpKXIodCk7ZWxzZXtjb25zdCBpPWouZnJvbUVycm9yKHQuZXJyb3IuY29kZSx0LmVycm9yLm1lc3NhZ2UsdC5lcnJvci5kYXRhKTtyKGkpfX1nZXQgdHJhbnNwb3J0KCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydH1hc3luYyBjbG9zZSgpe2F3YWl0IHRoaXMuX3RyYW5zcG9ydD8uY2xvc2UoKX1hc3luYypyZXF1ZXN0U3RyZWFtKHQsbixvKXtjb25zdHt0YXNrOnJ9PW8/P3t9O2lmKCFyKXt0cnl7eWllbGR7dHlwZToicmVzdWx0IixyZXN1bHQ6YXdhaXQgdGhpcy5yZXF1ZXN0KHQsbixvKX19Y2F0Y2goaSl7eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOmkgaW5zdGFuY2VvZiBqP2k6bmV3IGooVS5JbnRlcm5hbEVycm9yLFN0cmluZyhpKSl9fXJldHVybn1sZXQgczt0cnl7Y29uc3QgaT1hd2FpdCB0aGlzLnJlcXVlc3QodCxtYyxvKTtpZihpLnRhc2spcz1pLnRhc2sudGFza0lkLHlpZWxke3R5cGU6InRhc2tDcmVhdGVkIix0YXNrOmkudGFza307ZWxzZSB0aHJvdyBuZXcgaihVLkludGVybmFsRXJyb3IsIlRhc2sgY3JlYXRpb24gZGlkIG5vdCByZXR1cm4gYSB0YXNrIik7Zm9yKDs7KXtjb25zdCBhPWF3YWl0IHRoaXMuZ2V0VGFzayh7dGFza0lkOnN9LG8pO2lmKHlpZWxke3R5cGU6InRhc2tTdGF0dXMiLHRhc2s6YX0sSGUoYS5zdGF0dXMpKXthLnN0YXR1cz09PSJjb21wbGV0ZWQiP3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9OmEuc3RhdHVzPT09ImZhaWxlZCI/eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBqKFUuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IGZhaWxlZGApfTphLnN0YXR1cz09PSJjYW5jZWxsZWQiJiYoeWllbGR7dHlwZToiZXJyb3IiLGVycm9yOm5ldyBqKFUuSW50ZXJuYWxFcnJvcixgVGFzayAke3N9IHdhcyBjYW5jZWxsZWRgKX0pO3JldHVybn1pZihhLnN0YXR1cz09PSJpbnB1dF9yZXF1aXJlZCIpe3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMuZ2V0VGFza1Jlc3VsdCh7dGFza0lkOnN9LG4sbyl9O3JldHVybn1jb25zdCB1PWEucG9sbEludGVydmFsPz90aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO2F3YWl0IG5ldyBQcm9taXNlKGw9PnNldFRpbWVvdXQobCx1KSksbz8uc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpfX1jYXRjaChpKXt5aWVsZHt0eXBlOiJlcnJvciIsZXJyb3I6aSBpbnN0YW5jZW9mIGo/aTpuZXcgaihVLkludGVybmFsRXJyb3IsU3RyaW5nKGkpKX19fXJlcXVlc3QodCxuLG8pe2NvbnN0e3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppLHRhc2s6YSxyZWxhdGVkVGFzazp1fT1vPz97fTtyZXR1cm4gbmV3IFByb21pc2UoKGwsZCk9Pntjb25zdCBtPVI9PntkKFIpfTtpZighdGhpcy5fdHJhbnNwb3J0KXttKG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpKTtyZXR1cm59aWYodGhpcy5fb3B0aW9ucz8uZW5mb3JjZVN0cmljdENhcGFiaWxpdGllcz09PSEwKXRyeXt0aGlzLmFzc2VydENhcGFiaWxpdHlGb3JNZXRob2QodC5tZXRob2QpLGEmJnRoaXMuYXNzZXJ0VGFza0NhcGFiaWxpdHkodC5tZXRob2QpfWNhdGNoKFIpe20oUik7cmV0dXJufW8/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtjb25zdCBiPXRoaXMuX3JlcXVlc3RNZXNzYWdlSWQrKyx2PXsuLi50LGpzb25ycGM6IjIuMCIsaWQ6Yn07bz8ub25wcm9ncmVzcyYmKHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuc2V0KGIsby5vbnByb2dyZXNzKSx2LnBhcmFtcz17Li4udC5wYXJhbXMsX21ldGE6ey4uLnQucGFyYW1zPy5fbWV0YXx8e30scHJvZ3Jlc3NUb2tlbjpifX0pLGEmJih2LnBhcmFtcz17Li4udi5wYXJhbXMsdGFzazphfSksdSYmKHYucGFyYW1zPXsuLi52LnBhcmFtcyxfbWV0YTp7Li4udi5wYXJhbXM/Ll9tZXRhfHx7fSxbQmVdOnV9fSk7Y29uc3QgXz1SPT57dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUoYiksdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUoYiksdGhpcy5fY2xlYW51cFRpbWVvdXQoYiksdGhpcy5fdHJhbnNwb3J0Py5zZW5kKHtqc29ucnBjOiIyLjAiLG1ldGhvZDoibm90aWZpY2F0aW9ucy9jYW5jZWxsZWQiLHBhcmFtczp7cmVxdWVzdElkOmIscmVhc29uOlN0cmluZyhSKX19LHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aX0pLmNhdGNoKHc9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBjYW5jZWxsYXRpb246ICR7d31gKSkpO2NvbnN0IEo9UiBpbnN0YW5jZW9mIGo/UjpuZXcgaihVLlJlcXVlc3RUaW1lb3V0LFN0cmluZyhSKSk7ZChKKX07dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5zZXQoYixSPT57aWYoIW8/LnNpZ25hbD8uYWJvcnRlZCl7aWYoUiBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBkKFIpO3RyeXtjb25zdCBKPSRoKG4sUi5yZXN1bHQpO0ouc3VjY2Vzcz9sKEouZGF0YSk6ZChKLmVycm9yKX1jYXRjaChKKXtkKEopfX19KSxvPy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e18obz8uc2lnbmFsPy5yZWFzb24pfSk7Y29uc3Qgaz1vPy50aW1lb3V0Pz9ieSwkPSgpPT5fKGouZnJvbUVycm9yKFUuUmVxdWVzdFRpbWVvdXQsIlJlcXVlc3QgdGltZWQgb3V0Iix7dGltZW91dDprfSkpO3RoaXMuX3NldHVwVGltZW91dChiLGssbz8ubWF4VG90YWxUaW1lb3V0LCQsbz8ucmVzZXRUaW1lb3V0T25Qcm9ncmVzcz8/ITEpO2NvbnN0IEk9dT8udGFza0lkO2lmKEkpe2NvbnN0IFI9Sj0+e2NvbnN0IHc9dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5nZXQoYik7dz93KEopOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNwb25zZSBoYW5kbGVyIG1pc3NpbmcgZm9yIHNpZGUtY2hhbm5lbGVkIHJlcXVlc3QgJHtifWApKX07dGhpcy5fcmVxdWVzdFJlc29sdmVycy5zZXQoYixSKSx0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2UoSSx7dHlwZToicmVxdWVzdCIsbWVzc2FnZTp2LHRpbWVzdGFtcDpEYXRlLm5vdygpfSkuY2F0Y2goSj0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KGIpLGQoSil9KX1lbHNlIHRoaXMuX3RyYW5zcG9ydC5zZW5kKHYse3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2goUj0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KGIpLGQoUil9KX0pfWFzeW5jIGdldFRhc2sodCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2dldCIscGFyYW1zOnR9LGJjLG4pfWFzeW5jIGdldFRhc2tSZXN1bHQodCxuLG8pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvcmVzdWx0IixwYXJhbXM6dH0sbixvKX1hc3luYyBsaXN0VGFza3ModCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2xpc3QiLHBhcmFtczp0fSxfYyxuKX1hc3luYyBjYW5jZWxUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9jYW5jZWwiLHBhcmFtczp0fSx0dixuKX1hc3luYyBub3RpZmljYXRpb24odCxuKXtpZighdGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpO3RoaXMuYXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0Lm1ldGhvZCk7Y29uc3Qgbz1uPy5yZWxhdGVkVGFzaz8udGFza0lkO2lmKG8pe2NvbnN0IGE9ey4uLnQsanNvbnJwYzoiMi4wIixwYXJhbXM6ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LFtCZV06bi5yZWxhdGVkVGFza319fTthd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uobyx7dHlwZToibm90aWZpY2F0aW9uIixtZXNzYWdlOmEsdGltZXN0YW1wOkRhdGUubm93KCl9KTtyZXR1cm59aWYoKHRoaXMuX29wdGlvbnM/LmRlYm91bmNlZE5vdGlmaWNhdGlvbk1ldGhvZHM/P1tdKS5pbmNsdWRlcyh0Lm1ldGhvZCkmJiF0LnBhcmFtcyYmIW4/LnJlbGF0ZWRSZXF1ZXN0SWQmJiFuPy5yZWxhdGVkVGFzayl7aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuaGFzKHQubWV0aG9kKSlyZXR1cm47dGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuYWRkKHQubWV0aG9kKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuZGVsZXRlKHQubWV0aG9kKSwhdGhpcy5fdHJhbnNwb3J0KXJldHVybjtsZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbQmVdOm4ucmVsYXRlZFRhc2t9fX0pLHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLG4pLmNhdGNoKHU9PnRoaXMuX29uZXJyb3IodSkpfSk7cmV0dXJufWxldCBpPXsuLi50LGpzb25ycGM6IjIuMCJ9O24/LnJlbGF0ZWRUYXNrJiYoaT17Li4uaSxwYXJhbXM6ey4uLmkucGFyYW1zLF9tZXRhOnsuLi5pLnBhcmFtcz8uX21ldGF8fHt9LFtCZV06bi5yZWxhdGVkVGFza319fSksYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnNlbmQoaSxuKX1zZXRSZXF1ZXN0SGFuZGxlcih0LG4pe2NvbnN0IG89ZHUodCk7dGhpcy5hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkobyksdGhpcy5fcmVxdWVzdEhhbmRsZXJzLnNldChvLChyLHMpPT57Y29uc3QgaT1wdSh0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobihpLHMpKX0pfXJlbW92ZVJlcXVlc3RIYW5kbGVyKHQpe3RoaXMuX3JlcXVlc3RIYW5kbGVycy5kZWxldGUodCl9YXNzZXJ0Q2FuU2V0UmVxdWVzdEhhbmRsZXIodCl7aWYodGhpcy5fcmVxdWVzdEhhbmRsZXJzLmhhcyh0KSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWVzdCBoYW5kbGVyIGZvciAke3R9IGFscmVhZHkgZXhpc3RzLCB3aGljaCB3b3VsZCBiZSBvdmVycmlkZGVuYCl9c2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pe2NvbnN0IG89ZHUodCk7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuc2V0KG8scj0+e2NvbnN0IHM9cHUodCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4ocykpfSl9cmVtb3ZlTm90aWZpY2F0aW9uSGFuZGxlcih0KXt0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5kZWxldGUodCl9X2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHQpe2NvbnN0IG49dGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmdldCh0KTtuIT09dm9pZCAwJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmRlbGV0ZSh0KSl9YXN5bmMgX2VucXVldWVUYXNrTWVzc2FnZSh0LG4sbyl7aWYoIXRoaXMuX3Rhc2tTdG9yZXx8IXRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5xdWV1ZSB0YXNrIG1lc3NhZ2U6IHRhc2tTdG9yZSBhbmQgdGFza01lc3NhZ2VRdWV1ZSBhcmUgbm90IGNvbmZpZ3VyZWQiKTtjb25zdCByPXRoaXMuX29wdGlvbnM/Lm1heFRhc2tRdWV1ZVNpemU7YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5lbnF1ZXVlKHQsbixvLHIpfWFzeW5jIF9jbGVhclRhc2tRdWV1ZSh0LG4pe2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2NvbnN0IG89YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlQWxsKHQsbik7Zm9yKGNvbnN0IHIgb2YgbylpZihyLnR5cGU9PT0icmVxdWVzdCImJmx1KHIubWVzc2FnZSkpe2NvbnN0IHM9ci5tZXNzYWdlLmlkLGk9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQocyk7aT8oaShuZXcgaihVLkludGVybmFsRXJyb3IsIlRhc2sgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZCIpKSx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShzKSk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc29sdmVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtzfSBkdXJpbmcgdGFzayAke3R9IGNsZWFudXBgKSl9fX1hc3luYyBfd2FpdEZvclRhc2tVcGRhdGUodCxuKXtsZXQgbz10aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZT8uZ2V0VGFzayh0KTtyPy5wb2xsSW50ZXJ2YWwmJihvPXIucG9sbEludGVydmFsKX1jYXRjaHt9cmV0dXJuIG5ldyBQcm9taXNlKChyLHMpPT57aWYobi5hYm9ydGVkKXtzKG5ldyBqKFUuSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpO3JldHVybn1jb25zdCBpPXNldFRpbWVvdXQocixvKTtuLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e2NsZWFyVGltZW91dChpKSxzKG5ldyBqKFUuSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpfSx7b25jZTohMH0pfSl9cmVxdWVzdFRhc2tTdG9yZSh0LG4pe2NvbnN0IG89dGhpcy5fdGFza1N0b3JlO2lmKCFvKXRocm93IG5ldyBFcnJvcigiTm8gdGFzayBzdG9yZSBjb25maWd1cmVkIik7cmV0dXJue2NyZWF0ZVRhc2s6YXN5bmMgcj0+e2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gcmVxdWVzdCBwcm92aWRlZCIpO3JldHVybiBhd2FpdCBvLmNyZWF0ZVRhc2socix0LmlkLHttZXRob2Q6dC5tZXRob2QscGFyYW1zOnQucGFyYW1zfSxuKX0sZ2V0VGFzazphc3luYyByPT57Y29uc3Qgcz1hd2FpdCBvLmdldFRhc2socixuKTtpZighcyl0aHJvdyBuZXcgaihVLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybiBzfSxzdG9yZVRhc2tSZXN1bHQ6YXN5bmMocixzLGkpPT57YXdhaXQgby5zdG9yZVRhc2tSZXN1bHQocixzLGksbik7Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZihhKXtjb25zdCB1PV9vLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6YX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKHUpLEhlKGEuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxnZXRUYXNrUmVzdWx0OnI9Pm8uZ2V0VGFza1Jlc3VsdChyLG4pLHVwZGF0ZVRhc2tTdGF0dXM6YXN5bmMocixzLGkpPT57Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZighYSl0aHJvdyBuZXcgaihVLkludmFsaWRQYXJhbXMsYFRhc2sgIiR7cn0iIG5vdCBmb3VuZCAtIGl0IG1heSBoYXZlIGJlZW4gY2xlYW5lZCB1cGApO2lmKEhlKGEuc3RhdHVzKSl0aHJvdyBuZXcgaihVLkludmFsaWRQYXJhbXMsYENhbm5vdCB1cGRhdGUgdGFzayAiJHtyfSIgZnJvbSB0ZXJtaW5hbCBzdGF0dXMgIiR7YS5zdGF0dXN9IiB0byAiJHtzfSIuIFRlcm1pbmFsIHN0YXRlcyAoY29tcGxldGVkLCBmYWlsZWQsIGNhbmNlbGxlZCkgY2Fubm90IHRyYW5zaXRpb24gdG8gb3RoZXIgc3RhdGVzLmApO2F3YWl0IG8udXBkYXRlVGFza1N0YXR1cyhyLHMsaSxuKTtjb25zdCB1PWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKHUpe2NvbnN0IGw9X28ucGFyc2Uoe21ldGhvZDoibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiLHBhcmFtczp1fSk7YXdhaXQgdGhpcy5ub3RpZmljYXRpb24obCksSGUodS5zdGF0dXMpJiZ0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcihyKX19LGxpc3RUYXNrczpyPT5vLmxpc3RUYXNrcyhyLG4pfX19ZnVuY3Rpb24gaHUoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIHl5KGUsdCl7Y29uc3Qgbj17Li4uZX07Zm9yKGNvbnN0IG8gaW4gdCl7Y29uc3Qgcj1vLHM9dFtyXTtpZihzPT09dm9pZCAwKWNvbnRpbnVlO2NvbnN0IGk9bltyXTtodShpKSYmaHUocyk/bltyXT17Li4uaSwuLi5zfTpuW3JdPXN9cmV0dXJuIG59KGU9PnR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnR5cGVvZiBQcm94eTwidSI/bmV3IFByb3h5KGUse2dldDoodCxuKT0+KHR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnQpW25dfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIHJlcXVpcmU8InUiKXJldHVybiByZXF1aXJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCcpfSk7Y2xhc3MgX3kgZXh0ZW5kcyB2eXtfcmVnaXN0ZXJlZE1ldGhvZHM9bmV3IFNldDtfZXZlbnRTbG90cz1uZXcgTWFwO29uRXZlbnREaXNwYXRjaCh0LG4pe31fZW5zdXJlRXZlbnRTbG90KHQpe2xldCBuPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFuKXtsZXQgbz10aGlzLmV2ZW50U2NoZW1hc1t0XTtpZighbyl0aHJvdyBFcnJvcihgVW5rbm93biBldmVudDogJHtTdHJpbmcodCl9YCk7bj17bGlzdGVuZXJzOltdfSx0aGlzLl9ldmVudFNsb3RzLnNldCh0LG4pO2xldCByPW8uc2hhcGUubWV0aG9kLnZhbHVlO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChyKTtsZXQgcz1uO3N1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIobyxpPT57bGV0IGE9aS5wYXJhbXM7dGhpcy5vbkV2ZW50RGlzcGF0Y2godCxhKSxzLm9uSGFuZGxlcj8uKGEpO2ZvcihsZXQgdSBvZlsuLi5zLmxpc3RlbmVyc10pdShhKX0pfXJldHVybiBufXNldEV2ZW50SGFuZGxlcih0LG4pe2xldCBvPXRoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KTtvLm9uSGFuZGxlciYmbiYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdIG9uJHtTdHJpbmcodCl9IGhhbmRsZXIgcmVwbGFjZWQuIFVzZSBhZGRFdmVudExpc3RlbmVyKCIke1N0cmluZyh0KX0iLCDigKYpIHRvIGFkZCBtdWx0aXBsZSBsaXN0ZW5lcnMgd2l0aG91dCByZXBsYWNpbmcuYCksby5vbkhhbmRsZXI9bn1nZXRFdmVudEhhbmRsZXIodCl7cmV0dXJuIHRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpPy5vbkhhbmRsZXJ9YWRkRXZlbnRMaXN0ZW5lcih0LG4pe3RoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KS5saXN0ZW5lcnMucHVzaChuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsbil7bGV0IG89dGhpcy5fZXZlbnRTbG90cy5nZXQodCk7aWYoIW8pcmV0dXJuO2xldCByPW8ubGlzdGVuZXJzLmluZGV4T2Yobik7ciE9PS0xJiZvLmxpc3RlbmVycy5zcGxpY2UociwxKX1zZXRSZXF1ZXN0SGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0UmVxdWVzdEhhbmRsZXIiKSxzdXBlci5zZXRSZXF1ZXN0SGFuZGxlcih0LG4pfTtzZXROb3RpZmljYXRpb25IYW5kbGVyPSh0LG4pPT57dGhpcy5fYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LCJzZXROb3RpZmljYXRpb25IYW5kbGVyIiksc3VwZXIuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pfTt3YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKHQsbixvKXtuJiZvJiZjb25zb2xlLndhcm4oYFtNQ1AgQXBwc10gJHt0fSBoYW5kbGVyIHJlcGxhY2VkLiBQcmV2aW91cyBoYW5kbGVyIHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZC5gKX1yZXBsYWNlUmVxdWVzdEhhbmRsZXI9KHQsbik9PntsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQobyksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07X2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCxuKXtsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTtpZih0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5oYXMobykpdGhyb3cgRXJyb3IoYEhhbmRsZXIgZm9yICIke299IiBhbHJlYWR5IHJlZ2lzdGVyZWQgKHZpYSAke259KS4gVXNlIGFkZEV2ZW50TGlzdGVuZXIoKSB0byBhdHRhY2ggbXVsdGlwbGUgbGlzdGVuZXJzLCBvciB0aGUgb24qIHNldHRlciBmb3IgcmVwbGFjZSBzZW1hbnRpY3MuYCk7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pfX12YXIga3k9IjIwMjYtMDEtMjYiLHd5PSJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQtcGFydGlhbCI7Y2xhc3MgJHl7ZXZlbnRUYXJnZXQ7ZXZlbnRTb3VyY2U7bWVzc2FnZUxpc3RlbmVyO2NvbnN0cnVjdG9yKHQ9d2luZG93LnBhcmVudCxuKXt0aGlzLmV2ZW50VGFyZ2V0PXQsdGhpcy5ldmVudFNvdXJjZT1uLHRoaXMubWVzc2FnZUxpc3RlbmVyPW89PntpZihuJiZvLnNvdXJjZSE9PXRoaXMuZXZlbnRTb3VyY2Upe2NvbnNvbGUuZGVidWcoIklnbm9yaW5nIG1lc3NhZ2UgZnJvbSB1bmtub3duIHNvdXJjZSIsbyk7cmV0dXJufWxldCByPWpiLnNhZmVQYXJzZShvLmRhdGEpO3Iuc3VjY2Vzcz8oY29uc29sZS5kZWJ1ZygiUGFyc2VkIG1lc3NhZ2UiLHIuZGF0YSksdGhpcy5vbm1lc3NhZ2U/LihyLmRhdGEpKTpvLmRhdGE/Lmpzb25ycGMhPT0iMi4wIj9jb25zb2xlLmRlYnVnKCJJZ25vcmluZyBub24tSlNPTi1SUEMgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pOihjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcGFyc2UgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pLHRoaXMub25lcnJvcj8uKEVycm9yKCJJbnZhbGlkIEpTT04tUlBDIG1lc3NhZ2UgcmVjZWl2ZWQ6ICIrci5lcnJvci5tZXNzYWdlKSkpfX1hc3luYyBzdGFydCgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLm1lc3NhZ2VMaXN0ZW5lcil9YXN5bmMgc2VuZCh0LG4pe3QubWV0aG9kIT09d3kmJmNvbnNvbGUuZGVidWcoIlNlbmRpbmcgbWVzc2FnZSIsdCksdGhpcy5ldmVudFRhcmdldC5wb3N0TWVzc2FnZSh0LCIqIil9YXN5bmMgY2xvc2UoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpLHRoaXMub25jbG9zZT8uKCl9b25jbG9zZTtvbmVycm9yO29ubWVzc2FnZTtzZXNzaW9uSWQ7c2V0UHJvdG9jb2xWZXJzaW9ufXZhciBTeT1PKFtmKCJsaWdodCIpLGYoImRhcmsiKV0pLmRlc2NyaWJlKCJDb2xvciB0aGVtZSBwcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKSxGdD1PKFtmKCJpbmxpbmUiKSxmKCJmdWxsc2NyZWVuIiksZigicGlwIildKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlIGZvciBVSSBwcmVzZW50YXRpb24uIiksenk9TyhbZigiLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnkiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXRlcnRpYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZ2hvc3QiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtaW5mbyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWRpc2FibGVkIiksZigiLS1jb2xvci10ZXh0LXByaW1hcnkiKSxmKCItLWNvbG9yLXRleHQtc2Vjb25kYXJ5IiksZigiLS1jb2xvci10ZXh0LXRlcnRpYXJ5IiksZigiLS1jb2xvci10ZXh0LWludmVyc2UiKSxmKCItLWNvbG9yLXRleHQtZ2hvc3QiKSxmKCItLWNvbG9yLXRleHQtaW5mbyIpLGYoIi0tY29sb3ItdGV4dC1kYW5nZXIiKSxmKCItLWNvbG9yLXRleHQtc3VjY2VzcyIpLGYoIi0tY29sb3ItdGV4dC13YXJuaW5nIiksZigiLS1jb2xvci10ZXh0LWRpc2FibGVkIiksZigiLS1jb2xvci1ib3JkZXItcHJpbWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLXRlcnRpYXJ5IiksZigiLS1jb2xvci1ib3JkZXItaW52ZXJzZSIpLGYoIi0tY29sb3ItYm9yZGVyLWdob3N0IiksZigiLS1jb2xvci1ib3JkZXItaW5mbyIpLGYoIi0tY29sb3ItYm9yZGVyLWRhbmdlciIpLGYoIi0tY29sb3ItYm9yZGVyLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJvcmRlci13YXJuaW5nIiksZigiLS1jb2xvci1ib3JkZXItZGlzYWJsZWQiKSxmKCItLWNvbG9yLXJpbmctcHJpbWFyeSIpLGYoIi0tY29sb3ItcmluZy1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLXJpbmctaW52ZXJzZSIpLGYoIi0tY29sb3ItcmluZy1pbmZvIiksZigiLS1jb2xvci1yaW5nLWRhbmdlciIpLGYoIi0tY29sb3ItcmluZy1zdWNjZXNzIiksZigiLS1jb2xvci1yaW5nLXdhcm5pbmciKSxmKCItLWZvbnQtc2FucyIpLGYoIi0tZm9udC1tb25vIiksZigiLS1mb250LXdlaWdodC1ub3JtYWwiKSxmKCItLWZvbnQtd2VpZ2h0LW1lZGl1bSIpLGYoIi0tZm9udC13ZWlnaHQtc2VtaWJvbGQiKSxmKCItLWZvbnQtd2VpZ2h0LWJvbGQiKSxmKCItLWZvbnQtdGV4dC14cy1zaXplIiksZigiLS1mb250LXRleHQtc20tc2l6ZSIpLGYoIi0tZm9udC10ZXh0LW1kLXNpemUiKSxmKCItLWZvbnQtdGV4dC1sZy1zaXplIiksZigiLS1mb250LWhlYWRpbmcteHMtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXNtLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1tZC1zaXplIiksZigiLS1mb250LWhlYWRpbmctbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0yeGwtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1zaXplIiksZigiLS1mb250LXRleHQteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14cy1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLXNtLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbWQtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1sZy1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLXhsLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctMnhsLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctM3hsLWxpbmUtaGVpZ2h0IiksZigiLS1ib3JkZXItcmFkaXVzLXhzIiksZigiLS1ib3JkZXItcmFkaXVzLXNtIiksZigiLS1ib3JkZXItcmFkaXVzLW1kIiksZigiLS1ib3JkZXItcmFkaXVzLWxnIiksZigiLS1ib3JkZXItcmFkaXVzLXhsIiksZigiLS1ib3JkZXItcmFkaXVzLWZ1bGwiKSxmKCItLWJvcmRlci13aWR0aC1yZWd1bGFyIiksZigiLS1zaGFkb3ctaGFpcmxpbmUiKSxmKCItLXNoYWRvdy1zbSIpLGYoIi0tc2hhZG93LW1kIiksZigiLS1zaGFkb3ctbGciKV0pLmRlc2NyaWJlKCJDU1MgdmFyaWFibGUga2V5cyBhdmFpbGFibGUgdG8gTUNQIGFwcHMgZm9yIHRoZW1pbmcuIiksVHk9Wih6eS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSxPKFtoKCksY3QoKV0pLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKTtnKHttZXRob2Q6ZigidWkvb3Blbi1saW5rIikscGFyYW1zOmcoe3VybDpoKCkuZGVzY3JpYmUoIlVSTCB0byBvcGVuIGluIHRoZSBob3N0J3MgYnJvd3NlciIpfSl9KTt2YXIgSXk9Zyh7aXNFcnJvcjpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgaG9zdCBmYWlsZWQgdG8gb3BlbiB0aGUgVVJMIChlLmcuLCBkdWUgdG8gc2VjdXJpdHkgcG9saWN5KS4iKX0pLnBhc3N0aHJvdWdoKCksUHk9Zyh7aXNFcnJvcjpEKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgZG93bmxvYWQgZmFpbGVkIChlLmcuLCB1c2VyIGNhbmNlbGxlZCBvciBob3N0IGRlbmllZCkuIil9KS5wYXNzdGhyb3VnaCgpLHh5PWcoe2lzRXJyb3I6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIGRlbGl2ZXIgdGhlIG1lc3NhZ2UuIil9KS5wYXNzdGhyb3VnaCgpO2coe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcHJveHktcmVhZHkiKSxwYXJhbXM6Zyh7fSl9KTt2YXIgUGM9Zyh7Y29ubmVjdERvbWFpbnM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYE9yaWdpbnMgZm9yIG5ldHdvcmsgcmVxdWVzdHMgKGZldGNoL1hIUi9XZWJTb2NrZXQpLgoKLSBNYXBzIHRvIENTUCBcYGNvbm5lY3Qtc3JjXGAgZGlyZWN0aXZlCi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayBjb25uZWN0aW9ucyAoc2VjdXJlIGRlZmF1bHQpYCkscmVzb3VyY2VEb21haW5zOlAoaCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcmlnaW5zIGZvciBzdGF0aWMgcmVzb3VyY2VzIChpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBmb250cywgbWVkaWEpLlxuXG4tIE1hcHMgdG8gQ1NQIGBpbWctc3JjYCwgYHNjcmlwdC1zcmNgLCBgc3R5bGUtc3JjYCwgYGZvbnQtc3JjYCwgYG1lZGlhLXNyY2AgZGlyZWN0aXZlc1xuLSBXaWxkY2FyZCBzdWJkb21haW5zIHN1cHBvcnRlZDogYGh0dHBzOi8vKi5leGFtcGxlLmNvbWBcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayByZXNvdXJjZXMgKHNlY3VyZSBkZWZhdWx0KSIpLGZyYW1lRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3IgbmVzdGVkIGlmcmFtZXMuXG5cbi0gTWFwcyB0byBDU1AgYGZyYW1lLXNyY2AgZGlyZWN0aXZlXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5lc3RlZCBpZnJhbWVzIGFsbG93ZWQgKGBmcmFtZS1zcmMgJ25vbmUnYCkiKSxiYXNlVXJpRG9tYWluczpQKGgoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQWxsb3dlZCBiYXNlIFVSSXMgZm9yIHRoZSBkb2N1bWVudC5cblxuLSBNYXBzIHRvIENTUCBgYmFzZS11cmlgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBvbmx5IHNhbWUgb3JpZ2luIGFsbG93ZWQgKGBiYXNlLXVyaSAnc2VsZidgKSIpfSkseGM9Zyh7Y2FtZXJhOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2FtZXJhIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2FtZXJhYCBmZWF0dXJlLiIpLG1pY3JvcGhvbmU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBtaWNyb3Bob25lIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgbWljcm9waG9uZWAgZmVhdHVyZS4iKSxnZW9sb2NhdGlvbjpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGdlb2xvY2F0aW9uIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgZ2VvbG9jYXRpb25gIGZlYXR1cmUuIiksY2xpcGJvYXJkV3JpdGU6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBjbGlwYm9hcmQgd3JpdGUgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBjbGlwYm9hcmQtd3JpdGVgIGZlYXR1cmUuIil9KTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiKSxwYXJhbXM6Zyh7d2lkdGg6QygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk5ldyB3aWR0aCBpbiBwaXhlbHMuIiksaGVpZ2h0OkMoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgaGVpZ2h0IGluIHBpeGVscy4iKX0pfSk7dmFyIEN5PWcoe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOlooaCgpLHEoKS5kZXNjcmliZSgiQ29tcGxldGUgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcyBrZXktdmFsdWUgcGFpcnMuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpfSl9KSxFeT1nKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiKSxwYXJhbXM6Zyh7YXJndW1lbnRzOlooaCgpLHEoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKX0pfSksT3k9Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1jYW5jZWxsZWQiKSxwYXJhbXM6Zyh7cmVhc29uOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdPcHRpb25hbCByZWFzb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gKGUuZy4sICJ1c2VyIGFjdGlvbiIsICJ0aW1lb3V0IikuJyl9KX0pLEF5PWcoe2ZvbnRzOmgoKS5vcHRpb25hbCgpfSksUnk9Zyh7dmFyaWFibGVzOlR5Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgdGhlIGFwcC4iKSxjc3M6QXkub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NTIGJsb2NrcyB0aGF0IGFwcHMgY2FuIGluamVjdC4iKX0pLFp5PWcoe21ldGhvZDpmKCJ1aS9yZXNvdXJjZS10ZWFyZG93biIpLHBhcmFtczpnKHt9KX0pO1ooaCgpLHEoKSk7dmFyIGZ1PWcoe3RleHQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0ZXh0IGNvbnRlbnQgYmxvY2tzLiIpLGltYWdlOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgaW1hZ2UgY29udGVudCBibG9ja3MuIiksYXVkaW86Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBhdWRpbyBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGNvbnRlbnQgYmxvY2tzLiIpLHJlc291cmNlTGluazpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGxpbmsgY29udGVudCBibG9ja3MuIiksc3RydWN0dXJlZENvbnRlbnQ6Zyh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGNvbnRlbnQuIil9KTtnKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIikscGFyYW1zOmcoe30pLm9wdGlvbmFsKCl9KTt2YXIgTnk9Zyh7ZXhwZXJpbWVudGFsOlooaCgpLFooaCgpLE1uKCkpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIiksb3BlbkxpbmtzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgb3BlbmluZyBleHRlcm5hbCBVUkxzLiIpLGRvd25sb2FkRmlsZTpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGZpbGUgZG93bmxvYWRzIHZpYSB1aS9kb3dubG9hZC1maWxlLiIpLHNlcnZlclRvb2xzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgdG9vbCBjYWxscyB0byB0aGUgTUNQIHNlcnZlci4iKSxzZXJ2ZXJSZXNvdXJjZXM6Zyh7bGlzdENoYW5nZWQ6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgcmVzb3VyY2UgcmVhZHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksbG9nZ2luZzpnKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgbG9nIG1lc3NhZ2VzLiIpLHNhbmRib3g6Zyh7cGVybWlzc2lvbnM6eGMub3B0aW9uYWwoKS5kZXNjcmliZSgiUGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGUgaG9zdCAoY2FtZXJhLCBtaWNyb3Bob25lLCBnZW9sb2NhdGlvbikuIiksY3NwOlBjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBkb21haW5zIGFwcHJvdmVkIGJ5IHRoZSBob3N0LiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBjb25maWd1cmF0aW9uIGFwcGxpZWQgYnkgdGhlIGhvc3QuIiksdXBkYXRlTW9kZWxDb250ZXh0OmZ1Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYWNjZXB0cyBjb250ZXh0IHVwZGF0ZXMgKHVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0KSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGZvciBmdXR1cmUgdHVybnMuIiksbWVzc2FnZTpmdS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlY2VpdmluZyBjb250ZW50IG1lc3NhZ2VzICh1aS9tZXNzYWdlKSBmcm9tIHRoZSB2aWV3LiIpLHNhbXBsaW5nOmcoe3Rvb2xzOmcoe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdG9vbCB1c2UgdmlhIGB0b29sc2AgYW5kIGB0b29sQ2hvaWNlYCBwYXJhbWV0ZXJzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBMTE0gc2FtcGxpbmcgKHNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UpIGZyb20gdGhlIHZpZXcuXG5NaXJyb3JzIHRoZSBNQ1AgYENsaWVudENhcGFiaWxpdGllcy5zYW1wbGluZ2Agc2hhcGUgc28gaG9zdHMgY2FuIHBhc3MgaXQgdGhyb3VnaC4iKX0pLGp5PWcoe2V4cGVyaW1lbnRhbDpaKGgoKSxaKGgoKSxNbigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLHRvb2xzOmcoe2xpc3RDaGFuZ2VkOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgc3VwcG9ydHMgdG9vbHMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgZXhwb3NlcyBNQ1Atc3R5bGUgdG9vbHMgdGhhdCB0aGUgaG9zdCBjYW4gY2FsbC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UChGdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgYXBwIHN1cHBvcnRzLiIpfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6Zyh7fSkub3B0aW9uYWwoKX0pO2coe2NzcDpQYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjb25maWd1cmF0aW9uIGZvciBVSSByZXNvdXJjZXMuIikscGVybWlzc2lvbnM6eGMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgYnkgdGhlIFVJIHJlc291cmNlLiIpLGRvbWFpbjpoKCkub3B0aW9uYWwoKS5kZXNjcmliZShgRGVkaWNhdGVkIG9yaWdpbiBmb3IgdmlldyBzYW5kYm94LgoKVXNlZnVsIHdoZW4gdmlld3MgbmVlZCBzdGFibGUsIGRlZGljYXRlZCBvcmlnaW5zIGZvciBPQXV0aCBjYWxsYmFja3MsIENPUlMgcG9saWNpZXMsIG9yIEFQSSBrZXkgYWxsb3dsaXN0cy4KCioqSG9zdC1kZXBlbmRlbnQ6KiogVGhlIGZvcm1hdCBhbmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgdGhpcyBmaWVsZCBhcmUgZGV0ZXJtaW5lZCBieSBlYWNoIGhvc3QuIFNlcnZlcnMgTVVTVCBjb25zdWx0IGhvc3Qtc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGV4cGVjdGVkIGRvbWFpbiBmb3JtYXQuIENvbW1vbiBwYXR0ZXJucyBpbmNsdWRlOgotIEhhc2gtYmFzZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB7aGFzaH0uY2xhdWRlbWNwY29udGVudC5jb21cYCkKLSBVUkwtZGVyaXZlZCBzdWJkb21haW5zIChlLmcuLCBcYHd3dy1leGFtcGxlLWNvbS5vYWl1c2VyY29udGVudC5jb21cYCkKCklmIG9taXR0ZWQsIGhvc3QgdXNlcyBkZWZhdWx0IHNhbmRib3ggb3JpZ2luICh0eXBpY2FsbHkgcGVyLWNvbnZlcnNhdGlvbikuYCkscHJlZmVyc0JvcmRlcjpEKCkub3B0aW9uYWwoKS5kZXNjcmliZShgVmlzdWFsIGJvdW5kYXJ5IHByZWZlcmVuY2UgLSB0cnVlIGlmIHZpZXcgcHJlZmVycyBhIHZpc2libGUgYm9yZGVyLgoKQm9vbGVhbiByZXF1ZXN0aW5nIHdoZXRoZXIgYSB2aXNpYmxlIGJvcmRlciBhbmQgYmFja2dyb3VuZCBpcyBwcm92aWRlZCBieSB0aGUgaG9zdC4gU3BlY2lmeWluZyBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgdGhpcyBpcyByZWNvbW1lbmRlZCBiZWNhdXNlIGhvc3RzJyBkZWZhdWx0cyBtYXkgdmFyeS4KCi0gXGB0cnVlXGA6IHJlcXVlc3QgdmlzaWJsZSBib3JkZXIgKyBiYWNrZ3JvdW5kCi0gXGBmYWxzZVxgOiByZXF1ZXN0IG5vIHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIG9taXR0ZWQ6IGhvc3QgZGVjaWRlcyBib3JkZXJgKX0pO2coe21ldGhvZDpmKCJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIpLHBhcmFtczpnKHttb2RlOkZ0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIGJlaW5nIHJlcXVlc3RlZC4iKX0pfSk7dmFyIE15PWcoe21vZGU6RnQuZGVzY3JpYmUoIlRoZSBkaXNwbGF5IG1vZGUgdGhhdCB3YXMgYWN0dWFsbHkgc2V0LiBNYXkgZGlmZmVyIGZyb20gcmVxdWVzdGVkIGlmIG5vdCBzdXBwb3J0ZWQuIil9KS5wYXNzdGhyb3VnaCgpLHF5PU8oW2YoIm1vZGVsIiksZigiYXBwIildKS5kZXNjcmliZSgiVG9vbCB2aXNpYmlsaXR5IHNjb3BlIC0gd2hvIGNhbiBhY2Nlc3MgdGhlIHRvb2wuIik7Zyh7cmVzb3VyY2VVcmk6aCgpLm9wdGlvbmFsKCksdmlzaWJpbGl0eTpQKHF5KS5vcHRpb25hbCgpLmRlc2NyaWJlKGBXaG8gY2FuIGFjY2VzcyB0aGlzIHRvb2wuIERlZmF1bHQ6IFsibW9kZWwiLCAiYXBwIl0KLSAibW9kZWwiOiBUb29sIHZpc2libGUgdG8gYW5kIGNhbGxhYmxlIGJ5IHRoZSBhZ2VudAotICJhcHAiOiBUb29sIGNhbGxhYmxlIGJ5IHRoZSBhcHAgZnJvbSB0aGlzIHNlcnZlciBvbmx5YCksY3NwOldlKCkub3B0aW9uYWwoKSxwZXJtaXNzaW9uczpXZSgpLm9wdGlvbmFsKCl9KTtnKHttaW1lVHlwZXM6UChoKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0FycmF5IG9mIHN1cHBvcnRlZCBNSU1FIHR5cGVzIGZvciBVSSByZXNvdXJjZXMuXG5NdXN0IGluY2x1ZGUgYCJ0ZXh0L2h0bWw7cHJvZmlsZT1tY3AtYXBwImAgZm9yIE1DUCBBcHBzIHN1cHBvcnQuJyl9KTtnKHttZXRob2Q6ZigidWkvZG93bmxvYWQtZmlsZSIpLHBhcmFtczpnKHtjb250ZW50czpQKE8oW0poLEtoXSkpLmRlc2NyaWJlKCJSZXNvdXJjZSBjb250ZW50cyB0byBkb3dubG9hZCDigJQgZW1iZWRkZWQgKGlubGluZSBkYXRhKSBvciBsaW5rZWQgKGhvc3QgZmV0Y2hlcykuIFVzZXMgc3RhbmRhcmQgTUNQIHJlc291cmNlIHR5cGVzLiIpfSl9KTtnKHttZXRob2Q6ZigidWkvbWVzc2FnZSIpLHBhcmFtczpnKHtyb2xlOmYoInVzZXIiKS5kZXNjcmliZSgnTWVzc2FnZSByb2xlLCBjdXJyZW50bHkgb25seSAidXNlciIgaXMgc3VwcG9ydGVkLicpLGNvbnRlbnQ6UChZbikuZGVzY3JpYmUoIk1lc3NhZ2UgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2FuZGJveC1yZXNvdXJjZS1yZWFkeSIpLHBhcmFtczpnKHtodG1sOmgoKS5kZXNjcmliZSgiSFRNTCBjb250ZW50IHRvIGxvYWQgaW50byB0aGUgaW5uZXIgaWZyYW1lLiIpLHNhbmRib3g6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgaW5uZXIgaWZyYW1lJ3Mgc2FuZGJveCBhdHRyaWJ1dGUuIiksY3NwOlBjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBjb25maWd1cmF0aW9uIGZyb20gcmVzb3VyY2UgbWV0YWRhdGEuIikscGVybWlzc2lvbnM6eGMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpfSl9KTt2YXIgRHk9Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1yZXN1bHQiKSxwYXJhbXM6VnIuZGVzY3JpYmUoIlN0YW5kYXJkIE1DUCB0b29sIGV4ZWN1dGlvbiByZXN1bHQuIil9KSxlZj1nKHt0b29sSW5mbzpnKHtpZDpWbi5vcHRpb25hbCgpLmRlc2NyaWJlKCJKU09OLVJQQyBpZCBvZiB0aGUgdG9vbHMvY2FsbCByZXF1ZXN0LiIpLHRvb2w6SWMuZGVzY3JpYmUoIlRvb2wgZGVmaW5pdGlvbiBpbmNsdWRpbmcgbmFtZSwgaW5wdXRTY2hlbWEsIGV0Yy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1ldGFkYXRhIG9mIHRoZSB0b29sIGNhbGwgdGhhdCBpbnN0YW50aWF0ZWQgdGhpcyBBcHAuIiksdGhlbWU6U3kub3B0aW9uYWwoKS5kZXNjcmliZSgiQ3VycmVudCBjb2xvciB0aGVtZSBwcmVmZXJlbmNlLiIpLHN0eWxlczpSeS5vcHRpb25hbCgpLmRlc2NyaWJlKCJTdHlsZSBjb25maWd1cmF0aW9uIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksZGlzcGxheU1vZGU6RnQub3B0aW9uYWwoKS5kZXNjcmliZSgiSG93IHRoZSBVSSBpcyBjdXJyZW50bHkgZGlzcGxheWVkLiIpLGF2YWlsYWJsZURpc3BsYXlNb2RlczpQKEZ0KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGVzIHRoZSBob3N0IHN1cHBvcnRzLiIpLGNvbnRhaW5lckRpbWVuc2lvbnM6TyhbZyh7aGVpZ2h0OkMoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIGhlaWdodCBpbiBwaXhlbHMuIil9KSxnKHttYXhIZWlnaHQ6TyhbQygpLGN0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSldKS5hbmQoTyhbZyh7d2lkdGg6QygpLmRlc2NyaWJlKCJGaXhlZCBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSksZyh7bWF4V2lkdGg6TyhbQygpLGN0KCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciB3aWR0aCBpbiBwaXhlbHMuIil9KV0pKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBDb250YWluZXIgZGltZW5zaW9ucy4gUmVwcmVzZW50cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaWZyYW1lIG9yIG90aGVyCmNvbnRhaW5lciBob2xkaW5nIHRoZSBhcHAuIFNwZWNpZnkgZWl0aGVyIHdpZHRoIG9yIG1heFdpZHRoLCBhbmQgZWl0aGVyIGhlaWdodCBvciBtYXhIZWlnaHQuYCksbG9jYWxlOmgoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBwcmVmZXJlbmNlIGluIEJDUCA0NyBmb3JtYXQuIiksdGltZVpvbmU6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlVzZXIncyB0aW1lem9uZSBpbiBJQU5BIGZvcm1hdC4iKSx1c2VyQWdlbnQ6aCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmllci4iKSxwbGF0Zm9ybTpPKFtmKCJ3ZWIiKSxmKCJkZXNrdG9wIiksZigibW9iaWxlIildKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQbGF0Zm9ybSB0eXBlIGZvciByZXNwb25zaXZlIGRlc2lnbiBkZWNpc2lvbnMuIiksZGV2aWNlQ2FwYWJpbGl0aWVzOmcoe3RvdWNoOkQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdG91Y2ggaW5wdXQuIiksaG92ZXI6RCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIldoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBob3ZlciBpbnRlcmFjdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEZXZpY2UgaW5wdXQgY2FwYWJpbGl0aWVzLiIpLHNhZmVBcmVhSW5zZXRzOmcoe3RvcDpDKCkuZGVzY3JpYmUoIlRvcCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLHJpZ2h0OkMoKS5kZXNjcmliZSgiUmlnaHQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxib3R0b206QygpLmRlc2NyaWJlKCJCb3R0b20gc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxsZWZ0OkMoKS5kZXNjcmliZSgiTGVmdCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTW9iaWxlIHNhZmUgYXJlYSBib3VuZGFyaWVzIGluIHBpeGVscy4iKX0pLnBhc3N0aHJvdWdoKCksTHk9Zyh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvaG9zdC1jb250ZXh0LWNoYW5nZWQiKSxwYXJhbXM6ZWYuZGVzY3JpYmUoIlBhcnRpYWwgY29udGV4dCB1cGRhdGUgY29udGFpbmluZyBvbmx5IGNoYW5nZWQgZmllbGRzLiIpfSk7Zyh7bWV0aG9kOmYoInVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IikscGFyYW1zOmcoe2NvbnRlbnQ6UChZbikub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGV4dCBjb250ZW50IGJsb2NrcyAodGV4dCwgaW1hZ2UsIGV0Yy4pLiIpLHN0cnVjdHVyZWRDb250ZW50OlooaCgpLHEoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKX0pfSk7Zyh7bWV0aG9kOmYoInVpL2luaXRpYWxpemUiKSxwYXJhbXM6Zyh7YXBwSW5mbzpCci5kZXNjcmliZSgiQXBwIGlkZW50aWZpY2F0aW9uIChuYW1lIGFuZCB2ZXJzaW9uKS4iKSxhcHBDYXBhYmlsaXRpZXM6ankuZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBhcHAgcHJvdmlkZXMuIikscHJvdG9jb2xWZXJzaW9uOmgoKS5kZXNjcmliZSgiUHJvdG9jb2wgdmVyc2lvbiB0aGlzIGFwcCBzdXBwb3J0cy4iKX0pfSk7dmFyIFV5PWcoe3Byb3RvY29sVmVyc2lvbjpoKCkuZGVzY3JpYmUoJ05lZ290aWF0ZWQgcHJvdG9jb2wgdmVyc2lvbiBzdHJpbmcgKGUuZy4sICIyMDI1LTExLTIxIikuJyksaG9zdEluZm86QnIuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmljYXRpb24gYW5kIHZlcnNpb24uIiksaG9zdENhcGFiaWxpdGllczpOeS5kZXNjcmliZSgiRmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBwcm92aWRlZCBieSB0aGUgaG9zdC4iKSxob3N0Q29udGV4dDplZi5kZXNjcmliZSgiUmljaCBjb250ZXh0IGFib3V0IHRoZSBob3N0IGVudmlyb25tZW50LiIpfSkucGFzc3Rocm91Z2goKSxIeT17dGFyZ2V0OiJkcmFmdC0yMDIwLTEyIn07YXN5bmMgZnVuY3Rpb24gbXUoZSx0KXtsZXQgbj1lWyJ+c3RhbmRhcmQiXTtpZihuLmpzb25TY2hlbWEpcmV0dXJuIG4uanNvblNjaGVtYVt0XShIeSk7aWYobi52ZW5kb3I9PT0iem9kIil7bGV0e3o6b309YXdhaXQgYmYoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PkViKSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKTtyZXR1cm4gby50b0pTT05TY2hlbWEoZSx7aW86dH0pfXRocm93IEVycm9yKGBTY2hlbWEgKHZlbmRvcjogJHtuLnZlbmRvcn0pIGRvZXMgbm90IGltcGxlbWVudCBTdGFuZGFyZCBKU09OIFNjaGVtYSAofnN0YW5kYXJkLmpzb25TY2hlbWEpLiBVc2UgYSBsaWJyYXJ5IHRoYXQgZG9lcyAoem9kIHY0LCBBcmtUeXBlLCBWYWxpYm90KSBvciB3cmFwIHlvdXIgc2NoZW1hIGFjY29yZGluZ2x5LmApfWFzeW5jIGZ1bmN0aW9uIGd1KGUsdCxuPSIiKXtsZXQgbz1hd2FpdCBlWyJ+c3RhbmRhcmQiXS52YWxpZGF0ZSh0KTtpZihvLmlzc3Vlcyl7bGV0IHI9by5pc3N1ZXMubWFwKHM9PntsZXQgaT1zLnBhdGg/Lm1hcChhPT50eXBlb2YgYT09Im9iamVjdCI/YS5rZXk6YSkuam9pbigiLiIpO3JldHVybiBpP2Ake2l9OiAke3MubWVzc2FnZX1gOnMubWVzc2FnZX0pLmpvaW4oIjsgIik7dGhyb3cgRXJyb3IobityKX1yZXR1cm4gby52YWx1ZX1mdW5jdGlvbiBCeShlKXtsZXQgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dC5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLGUpLHQuc3R5bGUuY29sb3JTY2hlbWU9ZX1mdW5jdGlvbiBGeShlLHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtmb3IobGV0W24sb11vZiBPYmplY3QuZW50cmllcyhlKSlvIT09dm9pZCAwJiZ0LnN0eWxlLnNldFByb3BlcnR5KG4sbyl9ZnVuY3Rpb24gVnkoZSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9fbWNwLWhvc3QtZm9udHMiKSlyZXR1cm47bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTt0LmlkPSJfX21jcC1ob3N0LWZvbnRzIix0LnRleHRDb250ZW50PWUsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0KX1jbGFzcyBDYyBleHRlbmRzIF95e19hcHBJbmZvO19jYXBhYmlsaXRpZXM7b3B0aW9ucztfaG9zdENhcGFiaWxpdGllcztfaG9zdEluZm87X2hvc3RDb250ZXh0O19yZWdpc3RlcmVkVG9vbHM9e307X2luaXRpYWxpemVkU2VudD0hMTtfYXNzZXJ0SW5pdGlhbGl6ZWQodCl7aWYodGhpcy5faW5pdGlhbGl6ZWRTZW50KXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSBBcHAuJHt0fSgpIGNhbGxlZCBiZWZvcmUgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIEF3YWl0IGFwcC5jb25uZWN0KCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsIG9yIG1vdmUgZGF0YSBsb2FkaW5nIHRvIGFuIG9udG9vbHJlc3VsdCBoYW5kbGVyLmA7aWYodGhpcy5vcHRpb25zPy5zdHJpY3QpdGhyb3cgRXJyb3Iobik7Y29uc29sZS53YXJuKGAke259LiBUaGlzIHdpbGwgdGhyb3cgaW4gYSBmdXR1cmUgcmVsZWFzZS5gKX1ldmVudFNjaGVtYXM9e3Rvb2xpbnB1dDpDeSx0b29saW5wdXRwYXJ0aWFsOkV5LHRvb2xyZXN1bHQ6RHksdG9vbGNhbmNlbGxlZDpPeSxob3N0Y29udGV4dGNoYW5nZWQ6THl9O3N0YXRpYyBPTkVfU0hPVF9FVkVOVFM9bmV3IFNldChbInRvb2xpbnB1dCIsInRvb2xpbnB1dHBhcnRpYWwiLCJ0b29scmVzdWx0IiwidG9vbGNhbmNlbGxlZCJdKTtfZXZlckhhZExpc3RlbmVyPW5ldyBTZXQ7X2Fzc2VydEhhbmRsZXJUaW1pbmcodCl7aWYoIUNjLk9ORV9TSE9UX0VWRU5UUy5oYXModCl8fHRoaXMuX2V2ZXJIYWRMaXN0ZW5lci5oYXModCl8fCh0aGlzLl9ldmVySGFkTGlzdGVuZXIuYWRkKHQpLCF0aGlzLl9pbml0aWFsaXplZFNlbnQpKXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSAiJHtTdHJpbmcodCl9IiBoYW5kbGVyIHJlZ2lzdGVyZWQgYWZ0ZXIgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIFRoZSBob3N0IG1heSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIG5vdGlmaWNhdGlvbi4gUmVnaXN0ZXIgaGFuZGxlcnMgYmVmb3JlIGNhbGxpbmcgYXBwLmNvbm5lY3QoKS5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihuKX1zZXRFdmVudEhhbmRsZXIodCxuKXtuJiZ0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLnNldEV2ZW50SGFuZGxlcih0LG4pfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIodCxuKX1vbkV2ZW50RGlzcGF0Y2godCxuKXt0PT09Imhvc3Rjb250ZXh0Y2hhbmdlZCImJih0aGlzLl9ob3N0Q29udGV4dD17Li4udGhpcy5faG9zdENvbnRleHQsLi4ubn0pfWNvbnN0cnVjdG9yKHQsbj17fSxvPXthdXRvUmVzaXplOiEwfSl7c3VwZXIobyksdGhpcy5fYXBwSW5mbz10LHRoaXMuX2NhcGFiaWxpdGllcz1uLHRoaXMub3B0aW9ucz1vLG8uYWxsb3dVbnNhZmVFdmFsfHxRKHtqaXRsZXNzOiEwfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcihGcixyPT4oY29uc29sZS5sb2coIlJlY2VpdmVkIHBpbmc6IixyLnBhcmFtcykse30pKSx0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix2b2lkIDApfXJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHQpe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGFmdGVyIHRyYW5zcG9ydCBpcyBlc3RhYmxpc2hlZCIpO3RoaXMuX2NhcGFiaWxpdGllcz15eSh0aGlzLl9jYXBhYmlsaXRpZXMsdCl9cmVnaXN0ZXJUb29sKHQsbixvKXtpZih0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF0pdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtsZXQgcj10aGlzLHM9KCk9PntyLl9pbml0aWFsaXplZFNlbnQmJnIuX2NhcGFiaWxpdGllcy50b29scz8ubGlzdENoYW5nZWQmJnIuc2VuZFRvb2xMaXN0Q2hhbmdlZCgpfSxpPW4uaW5wdXRTY2hlbWEhPT12b2lkIDAsYT17dGl0bGU6bi50aXRsZSxkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOm4uaW5wdXRTY2hlbWEsb3V0cHV0U2NoZW1hOm4ub3V0cHV0U2NoZW1hLGFubm90YXRpb25zOm4uYW5ub3RhdGlvbnMsX21ldGE6bi5fbWV0YSxlbmFibGVkOiEwLGVuYWJsZSgpe3RoaXMuZW5hYmxlZD0hMCxzKCl9LGRpc2FibGUoKXt0aGlzLmVuYWJsZWQ9ITEscygpfSx1cGRhdGUodSl7T2JqZWN0LmFzc2lnbih0aGlzLHUpLHMoKX0scmVtb3ZlKCl7ci5fcmVnaXN0ZXJlZFRvb2xzW3RdPT09YSYmKGRlbGV0ZSByLl9yZWdpc3RlcmVkVG9vbHNbdF0scygpKX0saGFuZGxlcjphc3luYyh1LGwpPT57aWYoIWEuZW5hYmxlZCl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGRpc2FibGVkYCk7bGV0IGQ7aWYoaSl7bGV0IG09YS5pbnB1dFNjaGVtYSxiPW0/YXdhaXQgZ3UobSx1Pz97fSxgSW52YWxpZCBpbnB1dCBmb3IgdG9vbCAke3R9OiBgKTp1Pz97fTtkPWF3YWl0IG8oYixsKX1lbHNlIGQ9YXdhaXQgbyhsKTtyZXR1cm4gYS5vdXRwdXRTY2hlbWEmJiFkLmlzRXJyb3ImJihkLnN0cnVjdHVyZWRDb250ZW50PWF3YWl0IGd1KGEub3V0cHV0U2NoZW1hLGQuc3RydWN0dXJlZENvbnRlbnQsYEludmFsaWQgb3V0cHV0IGZvciB0b29sICR7dH06IGApKSxkfX07cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XT1hLCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMmJiF0aGlzLnRyYW5zcG9ydCYmdGhpcy5yZWdpc3RlckNhcGFiaWxpdGllcyh7dG9vbHM6e2xpc3RDaGFuZ2VkOiEwfX0pLHRoaXMuZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKSxzKCksYX1fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITE7ZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKXt0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZHx8KHRoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSEwLHRoaXMub25jYWxsdG9vbD1hc3luYyh0LG4pPT57bGV0IG89dGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3QubmFtZV07aWYoIW8pdGhyb3cgRXJyb3IoYFRvb2wgJHt0Lm5hbWV9IG5vdCBmb3VuZGApO3JldHVybiBvLmhhbmRsZXIodC5hcmd1bWVudHMsbil9LHRoaXMub25saXN0dG9vbHM9YXN5bmModCxuKT0+KHt0b29sczphd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyh0aGlzLl9yZWdpc3RlcmVkVG9vbHMpLmZpbHRlcigoW28scl0pPT5yLmVuYWJsZWQpLm1hcChhc3luYyhbbyxyXSk9PntsZXQgcz17bmFtZTpvLHRpdGxlOnIudGl0bGUsZGVzY3JpcHRpb246ci5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpyLmlucHV0U2NoZW1hP2F3YWl0IG11KHIuaW5wdXRTY2hlbWEsImlucHV0Iik6e3R5cGU6Im9iamVjdCIscHJvcGVydGllczp7fX19O3JldHVybiByLm91dHB1dFNjaGVtYSYmKHMub3V0cHV0U2NoZW1hPWF3YWl0IG11KHIub3V0cHV0U2NoZW1hLCJvdXRwdXQiKSksci5hbm5vdGF0aW9ucyYmKHMuYW5ub3RhdGlvbnM9ci5hbm5vdGF0aW9ucyksci5fbWV0YSYmKHMuX21ldGE9ci5fbWV0YSksc30pKX0pKX1hc3luYyBzZW5kVG9vbExpc3RDaGFuZ2VkKHQ9e30pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kVG9vbExpc3RDaGFuZ2VkIiksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiLHBhcmFtczp0fSl9Z2V0SG9zdENhcGFiaWxpdGllcygpe3JldHVybiB0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzfWdldEhvc3RWZXJzaW9uKCl7cmV0dXJuIHRoaXMuX2hvc3RJbmZvfWdldEhvc3RDb250ZXh0KCl7cmV0dXJuIHRoaXMuX2hvc3RDb250ZXh0fWdldCBvbnRvb2xpbnB1dCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iil9c2V0IG9udG9vbGlucHV0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiLHQpfWdldCBvbnRvb2xpbnB1dHBhcnRpYWwoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiKX1zZXQgb250b29saW5wdXRwYXJ0aWFsKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIix0KX1nZXQgb250b29scmVzdWx0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iil9c2V0IG9udG9vbHJlc3VsdCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIsdCl9Z2V0IG9udG9vbGNhbmNlbGxlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIpfXNldCBvbnRvb2xjYW5jZWxsZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiLHQpfWdldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIil9c2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHQpfV9vbnRlYXJkb3duO2dldCBvbnRlYXJkb3duKCl7cmV0dXJuIHRoaXMuX29udGVhcmRvd259c2V0IG9udGVhcmRvd24odCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbnRlYXJkb3duIix0aGlzLl9vbnRlYXJkb3duLHQpLHRoaXMuX29udGVhcmRvd249dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihaeSwobixvKT0+e2lmKCF0aGlzLl9vbnRlYXJkb3duKXRocm93IEVycm9yKCJObyBvbnRlYXJkb3duIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29udGVhcmRvd24obi5wYXJhbXMsbyl9KX1fb25jYWxsdG9vbDtnZXQgb25jYWxsdG9vbCgpe3JldHVybiB0aGlzLl9vbmNhbGx0b29sfXNldCBvbmNhbGx0b29sKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25jYWxsdG9vbCIsdGhpcy5fb25jYWxsdG9vbCx0KSx0aGlzLl9vbmNhbGx0b29sPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoR2gsKG4sbyk9PntpZighdGhpcy5fb25jYWxsdG9vbCl0aHJvdyBFcnJvcigiTm8gb25jYWxsdG9vbCBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmNhbGx0b29sKG4ucGFyYW1zLG8pfSl9X29ubGlzdHRvb2xzO2dldCBvbmxpc3R0b29scygpe3JldHVybiB0aGlzLl9vbmxpc3R0b29sc31zZXQgb25saXN0dG9vbHModCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmxpc3R0b29scyIsdGhpcy5fb25saXN0dG9vbHMsdCksdGhpcy5fb25saXN0dG9vbHM9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihXaCwobixvKT0+e2lmKCF0aGlzLl9vbmxpc3R0b29scyl0aHJvdyBFcnJvcigiTm8gb25saXN0dG9vbHMgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHMobi5wYXJhbXMsbyl9KX1hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQpe3N3aXRjaCh0KXtjYXNlInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiOmlmKCF0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPy5zYW1wbGluZyl0aHJvdyBFcnJvcihgSG9zdCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nIChyZXF1aXJlZCBmb3IgJHt0fSlgKTticmVha319YXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KHQpe3N3aXRjaCh0KXtjYXNlInRvb2xzL2NhbGwiOmNhc2UidG9vbHMvbGlzdCI6aWYoIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyl0aHJvdyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdG9vbCBjYXBhYmlsaXR5IChyZXF1aXJlZCBmb3IgJHt0fSlgKTtyZXR1cm47Y2FzZSJwaW5nIjpjYXNlInVpL3Jlc291cmNlLXRlYXJkb3duIjpyZXR1cm47ZGVmYXVsdDp0aHJvdyBFcnJvcihgTm8gaGFuZGxlciBmb3IgbWV0aG9kICR7dH0gcmVnaXN0ZXJlZGApfX1hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQpe31hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2sgaGFuZGxlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3luYyBjYWxsU2VydmVyVG9vbCh0LG4pe2lmKHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjYWxsU2VydmVyVG9vbCIpLHR5cGVvZiB0PT0ic3RyaW5nIil0aHJvdyBFcnJvcihgY2FsbFNlcnZlclRvb2woKSBleHBlY3RzIGFuIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBhIHN0cmluZyAoIiR7dH0iKS4gRGlkIHlvdSBtZWFuOiBjYWxsU2VydmVyVG9vbCh7IG5hbWU6ICIke3R9IiwgYXJndW1lbnRzOiB7IC4uLiB9IH0pP2ApO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidG9vbHMvY2FsbCIscGFyYW1zOnR9LFZyLHtvbnByb2dyZXNzOigpPT57fSxyZXNldFRpbWVvdXRPblByb2dyZXNzOiEwLC4uLm59KX1hc3luYyByZWFkU2VydmVyUmVzb3VyY2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlYWRTZXJ2ZXJSZXNvdXJjZSIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvcmVhZCIscGFyYW1zOnR9LFZoLG4pfWFzeW5jIGxpc3RTZXJ2ZXJSZXNvdXJjZXModCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImxpc3RTZXJ2ZXJSZXNvdXJjZXMiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL2xpc3QiLHBhcmFtczp0fSxGaCxuKX1hc3luYyBjcmVhdGVTYW1wbGluZ01lc3NhZ2UodCxuKXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY3JlYXRlU2FtcGxpbmdNZXNzYWdlIik7bGV0IG89dC50b29scz9YaDpZaDtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiLHBhcmFtczp0fSxvLG4pfXNlbmRNZXNzYWdlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kTWVzc2FnZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9tZXNzYWdlIixwYXJhbXM6dH0seHksbil9c2VuZExvZyh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy9tZXNzYWdlIixwYXJhbXM6dH0pfXVwZGF0ZU1vZGVsQ29udGV4dCh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgidXBkYXRlTW9kZWxDb250ZXh0IiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IixwYXJhbXM6dH0scGMsbil9b3BlbkxpbmsodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoIm9wZW5MaW5rIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL29wZW4tbGluayIscGFyYW1zOnR9LEl5LG4pfXNlbmRPcGVuTGluaz10aGlzLm9wZW5MaW5rO2Rvd25sb2FkRmlsZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiZG93bmxvYWRGaWxlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2Rvd25sb2FkLWZpbGUiLHBhcmFtczp0fSxQeSxuKX1yZXF1ZXN0VGVhcmRvd24odD17fSl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIscGFyYW1zOnR9KX1yZXF1ZXN0RGlzcGxheU1vZGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlcXVlc3REaXNwbGF5TW9kZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIscGFyYW1zOnR9LE15LG4pfXNlbmRTaXplQ2hhbmdlZCh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiLHBhcmFtczp0fSl9c2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKXtsZXQgdD0hMSxuPTAsbz0wLHI9KCk9Pnt0fHwodD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0PSExO2xldCBpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWkuc3R5bGUuaGVpZ2h0O2kuc3R5bGUuaGVpZ2h0PSJtYXgtY29udGVudCI7bGV0IHU9TWF0aC5jZWlsKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtpLnN0eWxlLmhlaWdodD1hO2xldCBsPU1hdGguY2VpbCh3aW5kb3cuaW5uZXJXaWR0aCk7KGwhPT1ufHx1IT09bykmJihuPWwsbz11LHRoaXMuc2VuZFNpemVDaGFuZ2VkKHt3aWR0aDpsLGhlaWdodDp1fSkpfSkpfTtyKCk7bGV0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKHIpO3JldHVybiBzLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxzLm9ic2VydmUoZG9jdW1lbnQuYm9keSksKCk9PnMuZGlzY29ubmVjdCgpfWFzeW5jIGNvbm5lY3QodD1uZXcgJHkod2luZG93LnBhcmVudCx3aW5kb3cucGFyZW50KSxuKXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQXBwIGlzIGFscmVhZHkgY29ubmVjdGVkLiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgYWdhaW4uIik7dGhpcy5faW5pdGlhbGl6ZWRTZW50PSExLGF3YWl0IHN1cGVyLmNvbm5lY3QodCk7dHJ5e2xldCBvPWF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9pbml0aWFsaXplIixwYXJhbXM6e2FwcENhcGFiaWxpdGllczp0aGlzLl9jYXBhYmlsaXRpZXMsYXBwSW5mbzp0aGlzLl9hcHBJbmZvLHByb3RvY29sVmVyc2lvbjpreX19LFV5LG4pO2lmKG89PT12b2lkIDApdGhyb3cgRXJyb3IoYFNlcnZlciBzZW50IGludmFsaWQgaW5pdGlhbGl6ZSByZXN1bHQ6ICR7b31gKTt0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPW8uaG9zdENhcGFiaWxpdGllcyx0aGlzLl9ob3N0SW5mbz1vLmhvc3RJbmZvLHRoaXMuX2hvc3RDb250ZXh0PW8uaG9zdENvbnRleHQsYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCJ9KSx0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITAsdGhpcy5vcHRpb25zPy5hdXRvUmVzaXplJiZ0aGlzLnNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl9Y2F0Y2gobyl7dGhyb3cgdGhpcy5jbG9zZSgpLG99fX1sZXQgYnU9IiI7Y29uc3QgdGY9KGUsdCxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PntpZighZSlyZXR1cm47KGUudGhlbWU9PT0ibGlnaHQifHxlLnRoZW1lPT09ImRhcmsiKSYmdC5hcHBseURvY3VtZW50VGhlbWUoZS50aGVtZSk7Y29uc3Qgbz1lLnN0eWxlcz8udmFyaWFibGVzO28mJnR5cGVvZiBvPT0ib2JqZWN0IiYmdC5hcHBseUhvc3RTdHlsZVZhcmlhYmxlcyhvKTtjb25zdCByPWUuc3R5bGVzPy5jc3M/LmZvbnRzO3R5cGVvZiByPT0ic3RyaW5nIiYmciYmciE9PWJ1JiYodC5hcHBseUhvc3RGb250cyhyKSxidT1yKTtjb25zdCBzPWUuc2FmZUFyZWFJbnNldHM7aWYocylmb3IoY29uc3QgaSBvZlsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0pe2NvbnN0IGE9TnVtYmVyKHNbaV0/PzApO24uc3R5bGUuc2V0UHJvcGVydHkoYC0taW5zZXQtJHtpfWAsYCR7TnVtYmVyLmlzRmluaXRlKGEpJiZhPjA/YTowfXB4YCl9fSxPZT1uZXcgQ2Moe25hbWU6ImhvdGVsLXN0b3JlZnJvbnQiLHZlcnNpb246IjEuMC4wIn0se29wZW5MaW5rczp7fX0pLG5mPXthcHBseURvY3VtZW50VGhlbWU6QnksYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6RnksYXBwbHlIb3N0Rm9udHM6Vnl9LGRlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLGM9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IG90PSIiLFhyPSIiLG9mPXt9LHJmPSExLHNmPSIiLFQ9e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LFk9MTtjb25zdCB2dT01O2xldCBYPW51bGwscHQ9W10sRmU9IiIsemU9W10sVz1udWxsLHdvPTA7Y29uc3QgSnk9bmV3IFNldChbImZvcmdldFByZWZlcmVuY2VzIiwiYWRkVG9UcmlwIiwiY2xlYXJUcmlwIiwicmVxdWVzdEJvb2tpbmciLCJjYW5jZWxCb29raW5nIiwiY2hhbmdlQm9va2luZyIsInNpZ25JbiIsInNpZ25PdXQiXSkseXU9ZT0+e2NvbnN0IHQ9U3RyaW5nKGU/LnZpZXc/PyIiKTtyZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9gaG90ZWw6JHtlLmhvdGVsPy5pZD8/IiJ9YDp0PT09ImV4dHJhcyI/ZS5mb3JCb29raW5nP2BleHRyYXM6Ym9va2luZzoke2UuZm9yQm9va2luZy5jb25maXJtYXRpb25Db2RlfWA6YGV4dHJhczoke2UuaG90ZWw/LmlkPz8iIn1gOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyJ8fHQ9PT0icG9saWN5LW1pc3NpbmciP2Bwb2xpY3k6JHtlLmhvdGVsPy5pZD8/IiJ9OiR7ZS50b3BpYz8/IiJ9YDp0PT09ImNhbmNlbGxhdGlvbi1wcmV2aWV3Ij9gY2FuY2VsOiR7ZS5ib29raW5nPy5jb25maXJtYXRpb25Db2RlPz8iIn1gOnQ9PT0iY2hhbmdlLXByZXZpZXciP2BjaGFuZ2U6JHtlLmNvbmZpcm1hdGlvbkNvZGU/P2UuYm9va2luZz8uY29uZmlybWF0aW9uQ29kZT8/IiJ9YDp0PT09ImRlc3RpbmF0aW9ucyI/YGRlc3RpbmF0aW9uczoke2Uuc2NvcGU/Lm5hbWU/PyIifWA6dD09PSJob3RlbHMifHx0PT09Im5vLWhvdGVscyI/YGhvdGVsczoke2UuYXNrPy5jaXR5Pz8iIn06JHtlLmFzaz8ucXVlcnk/P2UucXVlcnk/PyIifWA6dH0sbG89ZT0+eyFXfHxXeS5oYXMoU3RyaW5nKFcudmlldykpfHx5dShlKSE9PXl1KFcpJiYoemU9Wy4uLnplLHtwYXlsb2FkOlcsbGFiZWw6R3koVyksdmVyc2lvbjp3b31dLnNsaWNlKC02KSl9LEt5PWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIiksbj1lPy5zdGF5Py5jaGVja0luP3tjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn06e307aWYodD09PSJ0cmlwIilyZXR1cm57a2V5OiJ2aWV3VHJpcCIsYXJnczp7fX07aWYodD09PSJib29raW5ncyIpcmV0dXJue2tleToibGlzdEJvb2tpbmdzIixhcmdzOnt9fTtpZigodD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMiKSYmZS5ob3RlbD8uaWQpcmV0dXJue2tleToiZ2V0SG90ZWwiLGFyZ3M6e2hvdGVsOmUuaG90ZWwuaWQsLi4ubiwuLi5lLnJvb21zX3dhbnRlZD97cm9vbXM6ZS5yb29tc193YW50ZWR9Ont9fX07aWYodD09PSJleHRyYXMiJiZlLmZvckJvb2tpbmcpcmV0dXJue2tleToibGlzdEV4dHJhcyIsYXJnczp7Ym9va2luZzplLmZvckJvb2tpbmcuY29uZmlybWF0aW9uQ29kZX19O2lmKHQ9PT0iZXh0cmFzIiYmZS5ob3RlbD8uaWQpcmV0dXJue2tleToibGlzdEV4dHJhcyIsYXJnczp7aG90ZWw6ZS5ob3RlbC5pZCwuLi5ufX07aWYodD09PSJpdGluZXJhcnkiKXJldHVybntrZXk6Iml0aW5lcmFyeSIsYXJnczp7dGl0bGU6ZS50aXRsZSwuLi5uLGRheXM6KGUuZGF5cz8/W10pLm1hcChvPT4oe2xhYmVsOm8ubGFiZWwsLi4uby5ub3RlP3tub3RlOm8ubm90ZX06e30saXRlbXM6KG8uaXRlbXM/P1tdKS5tYXAocj0+ci5pZCl9KSl9fX0sX3U9ZT0+e3plPXplLmZpbHRlcih0PT4hZS5pbmNsdWRlcyhTdHJpbmcodC5wYXlsb2FkPy52aWV3KSkpfSxXeT1uZXcgU2V0KFsiZmluZC1ib29raW5nIiwiYm9va2luZyIsImNhbmNlbGxlZCIsImNoYW5nZWQiLCJlcnJvciIsIm5lZWRzLWd1ZXN0Iiwic2lnbmVkLW91dCIsIm1lbWJlci1zaWduLWluIl0pLEd5PWU9Pntjb25zdCB0PVN0cmluZyhlPy52aWV3Pz8iIik7aWYodD09PSJjb21wYXJpc29uIilyZXR1cm5gJHsoZS5jb2x1bW5zPz9bXSkubGVuZ3RofSBzaWRlIGJ5IHNpZGVgO2lmKHQ9PT0iaXRpbmVyYXJ5IilyZXR1cm4idGhlIHBsYW4iO2lmKHQ9PT0ibm8taG90ZWxzIilyZXR1cm4idGhlIHNlYXJjaCI7aWYodD09PSJkZXN0aW5hdGlvbnMiKXJldHVybiBlLnNjb3BlPy5uYW1lP1N0cmluZyhlLnNjb3BlLm5hbWUpOiJhbGwgZGVzdGluYXRpb25zIjtpZih0PT09ImhvdGVscyIpe2lmKGUuYXNrPy5jaXR5KXJldHVybiBTdHJpbmcoZS5hc2suY2l0eSk7Y29uc3Qgbj1bLi4ubmV3IFNldCgoZS5ob3RlbHM/P1tdKS5tYXAobz0+U3RyaW5nKG8uY2l0eSkpKV07cmV0dXJuIG4ubGVuZ3RoPT09MT9TdHJpbmcoblswXSk6YCR7ZS50b3RhbD8/MH0gaG90ZWxzYH1yZXR1cm4gdD09PSJob3RlbCJ8fHQ9PT0ibm8tcm9vbXMifHx0PT09Im5lZWRzLWRhdGVzIj9TdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpOnQ9PT0iY2FuY2VsbGF0aW9uLXByZXZpZXciPyJ0aGUgY2FuY2VsbGF0aW9uIjp0PT09ImNoYW5nZS1wcmV2aWV3Ij8idGhlIGNoYW5nZSI6dD09PSJtZW1iZXIiPyJ5b3VyIG1lbWJlcnNoaXAiOnQ9PT0iZXh0cmFzIj9lLmZvckJvb2tpbmc/YGFkZC1vbnMgZm9yICR7ZS5mb3JCb29raW5nLmNvbmZpcm1hdGlvbkNvZGV9YDpgJHtTdHJpbmcoZS5ob3RlbD8ubmFtZT8/InRoZSBob3RlbCIpfSBhZGQtb25zYDp0PT09InRyaXAiPyJ0aGUgdHJpcCI6dD09PSJib29raW5ncyI/InlvdXIgYm9va2luZ3MiOnQ9PT0icG9saWN5Inx8dD09PSJwb2xpY2llcyI/InRoZSBwb2xpY2llcyI6ImJhY2sifSxReT0oKT0+e2NvbnN0IGU9ZGUoImJhY2tidG4iKSx0PXplLmF0KC0xKTtlLmhpZGRlbj0hdCx0JiYoZS50ZXh0Q29udGVudD1g4oC5ICR7dC5sYWJlbH1gKX07bGV0IHF0PSIiLGhzPSIiLFZ0PTAsRWM9ITE7Y29uc3QgYWY9ZT0+e2NvbnN0IHQ9ZT8uWyJjdXJsZXNzL3RyaXAiXTt0JiYodHlwZW9mIHQudHJpcElkPT0ic3RyaW5nIiYmdC50cmlwSWQmJihocz10LnRyaXBJZCksVnQ9TnVtYmVyKHQuY291bnQ/PzApLEFycmF5LmlzQXJyYXkodC5saW5lcykmJihwdD10LmxpbmVzLEVjPSEwKSl9LFl5PWU9PmhzP3suLi5lLHRyaXA6aHN9OmUsWHk9ZT0+b2ZbZV0/PyIiO2xldCBYbj0hMTtjb25zdCBrdT1lPT57WG49ZSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuY2FyZCIpPy5jbGFzc0xpc3QudG9nZ2xlKCJidXN5IixlKX07bGV0ICRvPTAsZnM9IiI7Y29uc3QgQj0oZSx0PXt9LG49e30pPT57Y29uc3Qgbz1YeShlKTtpZighbylyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBubyB0b29sIGZvciAke2V9YCkpO2lmKFhuKXJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7a3UoITApO2NvbnN0IHI9JG87cmV0dXJuIE9lLmNhbGxTZXJ2ZXJUb29sKHtuYW1lOm8sYXJndW1lbnRzOll5KHQpfSkuZmluYWxseSgoKT0+a3UoITEpKS50aGVuKHM9PnthZihzPy5fbWV0YSk7Y29uc3QgaT1zPy5zdHJ1Y3R1cmVkQ29udGVudCxhPWkmJm4uZm9sZD9uLmZvbGQoaSk6aTtmcz1pP0pTT04uc3RyaW5naWZ5KGkpOiIiO2NvbnN0IHU9SnkuaGFzKGUpJiZhJiZhLnZpZXchPT0iZXJyb3IiO3JldHVybiByPT09JG8mJmE/KG4ucHVzaCE9PSExJiZsbyhhKSx1JiYod28rPTEpLGEudmlldz09PSJib29raW5nIiYmKF91KFsidHJpcCIsIm5lZWRzLWRhdGVzIiwibmVlZHMtZ3Vlc3QiXSksU2U9bnVsbCksKGEudmlldz09PSJjYW5jZWxsZWQifHxhLnZpZXc9PT0iY2hhbmdlZCIpJiZfdShbImNhbmNlbGxhdGlvbi1wcmV2aWV3IiwiY2hhbmdlLXByZXZpZXciXSksVmUoYSkpOnUmJih3bys9MSksZV8ocyksc30pfSxlXz1lPT57Y29uc3QgdD0oZT8uY29udGVudD8/W10pLmZpbmQobj0+bj8udHlwZT09PSJ0ZXh0Iik/LnRleHQ7IXR8fCFPZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/LnVwZGF0ZU1vZGVsQ29udGV4dHx8T2UudXBkYXRlTW9kZWxDb250ZXh0KHtjb250ZW50Olt7dHlwZToidGV4dCIsdGV4dDpTdHJpbmcodCl9XX0pLmNhdGNoKCgpPT57fSl9LGVvPWU9PntsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bis9MSl0PSh0KjMxK2UuY2hhckNvZGVBdChuKSklMzYwO3JldHVybmAtLXNob3QtYTpoc2woJHt0fSA0MiUgMzQlKTstLXNob3QtYjpoc2woJHsodCszOCklMzYwfSA0NiUgMjIlKWB9LHRvPWU9PmUucmVwbGFjZSgvW15ccHtMfVxwe059IF0vZ3UsIiAiKS5zcGxpdCgvXHMrLykuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMikubWFwKHQ9PnRbMF0/LnRvVXBwZXJDYXNlKCk/PyIiKS5qb2luKCIiKSx0Xz0nPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDMuNWwyLjYgNS4zIDUuOS45LTQuMyA0LjEgMSA1LjhMMTIgMTYuOSA2LjggMTkuNmwxLTUuOEwzLjUgOS43bDUuOS0uOXoiLz48L3N2Zz4nLG5fPWU9PmUmJnR5cGVvZiBlLnZhbHVlPT0ibnVtYmVyIj9gPHNwYW4gY2xhc3M9InJhdGUiPiR7dF99JHtjKGUudmFsdWUpfTxzcGFuIGNsYXNzPSJ0LWZyb20iPjxzbWFsbD4gwrcgJHtjKGUuY291bnQpfTwvc21hbGw+PC9zcGFuPjwvc3Bhbj5gOiIiLGVlPSgpPT5yZj9gPGRpdiBjbGFzcz0iZGVtbyI+PGI+RGVtbzwvYj48c3Bhbj4ke2Moc2Z8fCJEZW1vbnN0cmF0aW9uIGRhdGE6IHRoZXNlIHJhdGVzIGFuZCByb29tIGNvdW50cyB3ZXJlIG1hZGUgdXAgZm9yIHRoaXMgZGVtby4iKX08L3NwYW4+PC9kaXY+YDoiIixKdD1lPT57Y29uc3QgdD1uZXcgRGF0ZShgJHtlfVQxMjowMDowMFpgKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9lOnQudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1HQiIse3dlZWtkYXk6InNob3J0IixkYXk6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsdGltZVpvbmU6IlVUQyJ9KX0sbXM9KGUsdCk9Pk1hdGgucm91bmQoKERhdGUucGFyc2UoYCR7dH1UMTI6MDA6MDBaYCktRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSkvODY0ZTUpLExlPWU9PmU/LmNoZWNrSW4mJmU/LmNoZWNrT3V0P2Ake0p0KGUuY2hlY2tJbil9IOKAkyAke0p0KGUuY2hlY2tPdXQpfSDCtyAke21zKGUuY2hlY2tJbixlLmNoZWNrT3V0KX0gJHttcyhlLmNoZWNrSW4sZS5jaGVja091dCk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9YDoiIixvXz0oZSx0LG4pPT57Y29uc3Qgbz1wdC5maW5kKHI9PnIua2luZD09PSJyb29tIiYmci5ob3RlbElkPT09ZSYmci5yb29tUmVmPT09dCYmci5zdGF5Py5jaGVja0luPT09bj8uY2hlY2tJbiYmci5zdGF5Py5jaGVja091dD09PW4/LmNoZWNrT3V0KTtyZXR1cm4gTnVtYmVyKG8/LnF1YW50aXR5Pz8wKX0scl89KGUsdCk9Pntjb25zdCBuPXB0LmZpbmQobz0+by5raW5kPT09ImV4dHJhIiYmby5ob3RlbElkPT09ZSYmby5leHRyYVJlZj09PXQpO3JldHVybiBOdW1iZXIobj8ucXVhbnRpdHk/PzApfSxTbz0oZSx0LG4sbz0xKT0+dD4wP2A8c3BhbiBjbGFzcz0ic3RlcCI+CiAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiAke2V9IGRhdGEtbj0iJHt0LTF9IiBhcmlhLWxhYmVsPSJPbmUgZmV3ZXIgJHtjKG4pfSI+4oiSPC9idXR0b24+CiAgICAgICAgIDxzcGFuIGNsYXNzPSJuIj4ke3R9PC9zcGFuPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dCsxfSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgJHtjKG4pfSI+KzwvYnV0dG9uPgogICAgICAgPC9zcGFuPmA6YDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWRkIiAke2V9IGRhdGEtbj0iJHtvfSIgYXJpYS1sYWJlbD0iQWRkICR7YyhuKX0iPgogICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjQiCiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDV2MTRNNSAxMmgxNCIvPjwvc3ZnPgogICAgICAgPC9idXR0b24+YCxjZj0oZSx0KT0+e2NvbnN0IG49dHx8T2MoKTtyZXR1cm4oIVQuY2hlY2tJbnx8VC5jaGVja0luPG4pJiYoVC5jaGVja0luPW4pLCghVC5jaGVja091dHx8VC5jaGVja091dDw9VC5jaGVja0luKSYmKFQuY2hlY2tPdXQ9TWUoVC5jaGVja0luLDEpKSxgCiAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICA8bGFiZWw+Q2hlY2staW48aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImNpIiB2YWx1ZT0iJHtjKFQuY2hlY2tJbil9IiBtaW49IiR7YyhuKX0iPjwvbGFiZWw+CiAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjbyIgdmFsdWU9IiR7YyhULmNoZWNrT3V0KX0iIG1pbj0iJHtjKE1lKFQuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGxhYmVsIGNsYXNzPSJndWVzdHMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1yb29tcy1uPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0icm4iPiR7YyhZKX08L3NwYW4+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICA8L3NwYW4+CiAgICA8L2xhYmVsPgogICAgPHNwYW4gY2xhc3M9Im5pZ2h0cyIgaWQ9Im5pZ2h0cyI+JHtjKEpyKCkpfTwvc3Bhbj4KICA8L2Rpdj5gfSxKcj0oKT0+e2NvbnN0IGU9VC5jaGVja0luJiZULmNoZWNrT3V0P21zKFQuY2hlY2tJbixULmNoZWNrT3V0KTowLHQ9ZT4wP2Ake2V9ICR7ZT09PTE/Im5pZ2h0IjoibmlnaHRzIn1gOiIiLG49WT4xP2Ake1l9IHJvb21zYDoiIjtyZXR1cm5bdCxuXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpfSxNZT0oZSx0KT0+bmV3IERhdGUoRGF0ZS5wYXJzZShgJHtlfVQxMjowMDowMFpgKSt0Kjg2NGU1KS50b0lTT1N0cmluZygpLnNsaWNlKDAsMTApLE9jPSgpPT5uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCksc189ZT0+e2NvbnN0IHQ9T2MoKTsoIVQuY2hlY2tJbnx8VC5jaGVja0luPHQpJiYoVC5jaGVja0luPXQpLCghVC5jaGVja091dHx8VC5jaGVja091dDw9VC5jaGVja0luKSYmKFQuY2hlY2tPdXQ9TWUoVC5jaGVja0luLDEpKTtjb25zdCBuPWA8ZGl2IGNsYXNzPSJzZWFyY2giPgogICAgICA8bGFiZWwgY2xhc3M9IndoZXJlIj5XaGVyZSB0bzxpbnB1dCBpZD0id2hlcmUiIHR5cGU9InNlYXJjaCIgYXV0b2NvbXBsZXRlPSJvZmYiIHBsYWNlaG9sZGVyPSJBIGNpdHksIGEgY291bnRyeSBvciBhIGhvdGVsIiBhcmlhLWxhYmVsPSJXaGVyZSB0byI+PC9sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0ic3RheSI+CiAgICAgICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJkY2kiIHZhbHVlPSIke2MoVC5jaGVja0luKX0iIG1pbj0iJHtjKHQpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWw+Q2hlY2stb3V0PGlucHV0IHR5cGU9ImRhdGUiIGlkPSJkY28iIHZhbHVlPSIke2MoVC5jaGVja091dCl9IiBtaW49IiR7YyhNZShULmNoZWNrSW4sMSkpfSI+PC9sYWJlbD4KICAgICAgICA8bGFiZWwgY2xhc3M9Imd1ZXN0cyI+Um9vbXMKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iLTEiIGFyaWEtbGFiZWw9Ik9uZSBmZXdlciByb29tIj7iiJI8L2J1dHRvbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im4iIGlkPSJybiI+JHtjKFkpfTwvc3Bhbj4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcm9vbXMtbj0iMSIgYXJpYS1sYWJlbD0iT25lIG1vcmUgcm9vbSI+KzwvYnV0dG9uPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvbGFiZWw+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZpbmQiPlNlYXJjaDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAsbz1zPT5gPGRpdiBjbGFzcz0icGxhY2VzIj4ke3MubWFwKChpLGEpPT5gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIke2MoaS5uYW1lKX0iJHthPj1ydD8iIGhpZGRlbiI6IiJ9PiR7YyhpLm5hbWUpfSA8c21hbGw+JHtjKGkuY291bnQpfTwvc21hbGw+PC9idXR0b24+YCkuam9pbigiIil9JHtzLmxlbmd0aD5ydD9gPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ibW9yZS1wbGFjZXMiPiske3MubGVuZ3RoLXJ0fSBtb3JlPC9idXR0b24+YDoiIn08L2Rpdj5gLHI9ZS5zY29wZTtyZXR1cm4gcj9bZWUoKSxgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhyLm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhlLnRvdGFsKX0gJHtjKGUudm9jYWI/Lm5vdW5QbHVyYWw/PyJob3RlbHMiKX0gaW4gJHtjKChyLmNpdGllcz8/W10pLmxlbmd0aCl9IGNpdGllczwvZGl2PjwvZGl2PmAsbyhyLmNpdGllcz8/W10pLGA8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlLWFsbD0iJHtjKHIubmFtZSl9Ij5BbGwgJHtjKGUudG90YWwpfSBpbiAke2Moci5uYW1lKX08L2J1dHRvbj48L2Rpdj5gXS5qb2luKCIiKTpbZWUoKSxuLC4uLihlLnJlZ2lvbnM/P1tdKS5tYXAocz0+YAogICAgICA8ZGl2IGNsYXNzPSJyZWdpb24iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj4ke2Mocy5uYW1lKX0gPHNtYWxsPiR7YyhzLmNvdW50KX08L3NtYWxsPjwvZGl2PgogICAgICAgICR7KHMuY291bnRyaWVzPz9bXSkubWFwKGk9Pntjb25zdCBhPWkuY2l0aWVzPz9bXSx1PWEubGVuZ3RoPT09MT9hWzBdOnZvaWQgMDtyZXR1cm5gCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXN0Ij4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGVzdC1jb3VudHJ5IiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2U9IiR7YyhpLm5hbWUpfSI+JHtjKGkubmFtZSl9JHt1JiZ1Lm5hbWUhPT1pLm5hbWU/YDxzbWFsbD4gwrcgJHtjKHUubmFtZSl9PC9zbWFsbD5gOiIifSA8c21hbGwgY2xhc3M9Im4iPiR7YyhpLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPgogICAgICAgICAgICAke2EubGVuZ3RoPjE/byhhKToiIn0KICAgICAgICAgIDwvZGl2PmB9KS5qb2luKCIiKX0KICAgICAgPC9kaXY+YCksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFsbC1ob3RlbHMiPkJyb3dzZSBhbGwgJHtjKGUudG90YWwpfTwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZpbmQtYm9va2luZyI+RmluZCBhIGJvb2tpbmc8L2J1dHRvbj4KICAgICA8L2Rpdj5gXS5qb2luKCIiKX0scnQ9OCxpXz1lPT57Y29uc3QgdD1lLmZvclN0YXk7cmV0dXJuIHQ/YDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7Yyh0LnRvdGFsKX08c21hbGw+IMK3ICR7TnVtYmVyKHQucm9vbXMpPjE/YCR7Yyh0LnJvb21zKX0gcm9vbXMgw5cgYDoiIn0ke2ModC5uaWdodHMpfSAke051bWJlcih0Lm5pZ2h0cyk9PT0xPyJuaWdodCI6Im5pZ2h0cyJ9LCB0YXhlcyBpbjwvc21hbGw+PC9zcGFuPmA6ZS5ub1Jvb21zRm9yU3RheT8nPHNwYW4gY2xhc3M9InQtZnJvbSB0LW5vbmUiPk5vIHJvb20gZm9yIHRoZXNlIGRhdGVzPC9zcGFuPic6YDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7ZS5mcm9tTmlnaHRseT9gJHtjKGUuZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+YH0sYV89ZT0+e2NvbnN0IHQ9ZS5mb3JTdGF5O2lmKCF0KXJldHVybiIiO2NvbnN0IG49W3QuZnJlZUNhbmNlbGxhdGlvbj8nPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uPC9zcGFuPic6IiIsTnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke2ModC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJdLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gbi5sZW5ndGg/YDxzcGFuIGNsYXNzPSJ0LXRhZ3MiPiR7bi5qb2luKCIiKX08L3NwYW4+YDoiIn0sRHQ9KCk9PlQuY2hlY2tJbiYmVC5jaGVja091dD97Y2hlY2tJbjpULmNoZWNrSW4sY2hlY2tPdXQ6VC5jaGVja091dCxndWVzdHM6VC5ndWVzdHMsLi4uWT4xP3tyb29tczpZfTp7fX06e30sY189ZT0+e2NvbnN0e2NoZWNrSW46dCxjaGVja091dDpuLGd1ZXN0czpvLHJvb21zOnIsLi4uc309ZT8/e307cmV0dXJuIHN9LHVfPWU9Pntjb25zdCB0PU9jKCk7cmV0dXJuKCFULmNoZWNrSW58fFQuY2hlY2tJbjx0KSYmKFQuY2hlY2tJbj10KSwoIVQuY2hlY2tPdXR8fFQuY2hlY2tPdXQ8PVQuY2hlY2tJbikmJihULmNoZWNrT3V0PU1lKFQuY2hlY2tJbiwxKSksYAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJsY2kiIHZhbHVlPSIke2MoVC5jaGVja0luKX0iIG1pbj0iJHtjKHQpfSI+PC9sYWJlbD4KICAgIDxsYWJlbD5DaGVjay1vdXQ8aW5wdXQgdHlwZT0iZGF0ZSIgaWQ9ImxjbyIgdmFsdWU9IiR7YyhULmNoZWNrT3V0KX0iIG1pbj0iJHtjKE1lKFQuY2hlY2tJbiwxKSl9Ij48L2xhYmVsPgogICAgPGxhYmVsIGNsYXNzPSJndWVzdHMiPlJvb21zCiAgICAgIDxzcGFuIGNsYXNzPSJzdGVwIGxpZ2h0Ij4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1saXN0LXJvb21zPSItMSIgYXJpYS1sYWJlbD0iT25lIGZld2VyIHJvb20iPuKIkjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJuIiBpZD0ibHJuIj4ke2MoWSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWxpc3Qtcm9vbXM9IjEiIGFyaWEtbGFiZWw9Ik9uZSBtb3JlIHJvb20iPis8L2J1dHRvbj4KICAgICAgPC9zcGFuPgogICAgPC9sYWJlbD4KICAgICR7ZT9gPHNwYW4gY2xhc3M9Im5pZ2h0cyI+JHtjKEpyKCkpfTwvc3Bhbj5gOic8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0icHJpY2UtbGlzdCI+U2hvdyBwcmljZXM8L2J1dHRvbj4nfQogIDwvZGl2PmB9LGxfPVtbImdyb3VwIiwiRGVmYXVsdCJdLFsicHJpY2UtbG93IiwiTG93ZXN0IHByaWNlIl0sWyJwcmljZS1oaWdoIiwiSGlnaGVzdCBwcmljZSJdLFsicmF0aW5nIiwiUmF0aW5nIl1dLGRfPWU9Pntjb25zdCB0PWUuaG90ZWxzPz9bXSxuPVsuLi5uZXcgU2V0KHQubWFwKGs9PlN0cmluZyhrLmNpdHkpKSldLG89az0+e2NvbnN0ICQ9dC5maW5kKEk9PkkuY2l0eT09PWspPy5jb3VudHJ5O3JldHVybiAkJiYhU3RyaW5nKCQpLnN0YXJ0c1dpdGgoayk/U3RyaW5nKCQpOiIifSxyPVsuLi5uZXcgU2V0KHQubWFwKGs9PlN0cmluZyhrLmNvdW50cnk/PyIiKSkpXSxzPXIubGVuZ3RoPjEsaT1rPT5gCiAgICA8ZGl2IGNsYXNzPSJjaXR5Z3JvdXAiPgogICAgICAke24ubGVuZ3RoPjE/YDxkaXYgY2xhc3M9ImNpdHluYW1lIj4ke2Moayl9JHshcyYmbyhrKT9gPHNtYWxsPiDCtyAke2MobyhrKSl9PC9zbWFsbD5gOiIifTwvZGl2PmA6IiJ9CiAgICAgIDxkaXYgY2xhc3M9InRpbGVzIj4KICAgICAgICAke3QuZmlsdGVyKCQ9PiQuY2l0eT09PWspLm1hcCgkPT5gCiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YygkLmlkKX0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1zaG90IiBzdHlsZT0iJHtlbyhTdHJpbmcoJC5pZCkpfSI+CiAgICAgICAgICAgICAgJHskLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKCQuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHtjKHRvKFN0cmluZygkLm5hbWUpKSl9PC9zcGFuPgogICAgICAgICAgICAgICR7JC5icmFuZD9gPHNwYW4gY2xhc3M9InQtYnJhbmQiPiR7YygkLmJyYW5kKX08L3NwYW4+YDoiIn0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1ib2R5Ij4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1uYW1lIj4ke2MoJC5uYW1lKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7YyhuLmxlbmd0aD4xPyQuYXJlYT8/JC5jaXR5OlskLmFyZWEsJC5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX08L3NwYW4+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgICAgICAke2lfKCQpfQogICAgICAgICAgICAgICAgJHtuXygkLnJhdGluZyl9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICR7YV8oJCl9CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmAsYT1OdW1iZXIoZS50b3RhbD8/dC5sZW5ndGgpLHU9YS10Lmxlbmd0aCxsPWUucGxhY2VzPz9bXSxkPSEhZS5hc2s/LmNpdHksbT1sLmxlbmd0aHx8ZD9gPGRpdiBjbGFzcz0icGxhY2VzIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iV2hlcmUiPgogICAgICAgICAgICR7ZD8nPGJ1dHRvbiBjbGFzcz0iY2hpcCBwbGFjZSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBsYWNlPSIiPkFsbCBwbGFjZXM8L2J1dHRvbj4nOiIifQogICAgICAgICAgICR7bC5tYXAoKGssJCk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIiB0eXBlPSJidXR0b24iIGRhdGEtcGxhY2U9IiR7YyhrLnBsYWNlKX0iJHskPj1ydD8iIGhpZGRlbiI6IiJ9PiR7YyhrLmxhYmVsKX0gPHNtYWxsPiR7YyhrLmNvdW50KX08L3NtYWxsPjwvYnV0dG9uPmApLmpvaW4oIiIpfQogICAgICAgICAgICR7bC5sZW5ndGg+cnQ/YDxidXR0b24gY2xhc3M9ImNoaXAgcGxhY2UiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtcGxhY2VzIj4rJHtsLmxlbmd0aC1ydH0gbW9yZTwvYnV0dG9uPmA6IiJ9CiAgICAgICAgIDwvZGl2PmA6IiIsYj1TdHJpbmcoZS5zb3J0Pz8iZ3JvdXAiKSx2PSEoKGUuY3VycmVuY2llcz8/W10pLmxlbmd0aD4xKSxfPXQubGVuZ3RoPjE/YDxkaXYgY2xhc3M9InBsYWNlcyIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9Ik9yZGVyIj4KICAgICAgICAgICA8c3BhbiBjbGFzcz0ic29ydHMtayI+U29ydDwvc3Bhbj4KICAgICAgICAgICAke2xfLmZpbHRlcigoW2tdKT0+dnx8IWsuc3RhcnRzV2l0aCgicHJpY2UiKSkubWFwKChbaywkXSk9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIHBsYWNlIHNvcnQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1zb3J0PSIke2t9IiBhcmlhLXByZXNzZWQ9IiR7az09PWI/InRydWUiOiJmYWxzZSJ9Ij4keyR9PC9idXR0b24+YCkuam9pbigiIil9CiAgICAgICAgIDwvZGl2PmA6IiI7cmV0dXJuW2VlKCksbSxfLHVfKCEhZS5zdGF5Py5jaGVja0luKSxlLndpZGVuZWQ/YDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIG1hdGNoZWQgJHtjKGUud2lkZW5lZC5mcm9tKX0uIFRoZXNlIGFyZSAke2MoZS53aWRlbmVkLnRvKX0uPC9kaXY+YDoiIixgPGRpdj4ke3M/ci5tYXAoaz0+YDxkaXYgY2xhc3M9ImNvdW50cnluYW1lIj4ke2Moayl9PC9kaXY+JHtuLmZpbHRlcigkPT50LnNvbWUoST0+SS5jaXR5PT09JCYmU3RyaW5nKEkuY291bnRyeT8/IiIpPT09aykpLm1hcChpKS5qb2luKCIiKX1gKS5qb2luKCIiKTpuLm1hcChpKS5qb2luKCIiKX08L2Rpdj5gLChlLmN1cnJlbmNpZXM/P1tdKS5sZW5ndGg+MT9gPGRpdiBjbGFzcz0ibm90ZSI+UXVvdGVkIGluICR7YyhlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9IOKAlCBubyByYXRlIGlzIGFwcGxpZWQgaGVyZSwgc28gdGhpcyBpcyBub3QgYSBwcmljZSBvcmRlci4gT25lIGNpdHkgb3Igb25lIGNvdW50cnkgZ2l2ZXMgb25lIGN1cnJlbmN5LjwvZGl2PmA6IiIsZS5vdmVyQnVkZ2V0P2A8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5vdmVyQnVkZ2V0KX0gbW9yZSBtYXRjaGVkIGFuZCBjYW1lIGluIG92ZXIgdGhlIHByaWNlIGNlaWxpbmcuPC9kaXY+YDoiIix1PjA/YDxkaXYgY2xhc3M9Im5vdGUiPlNob3dpbmcgJHt0Lmxlbmd0aH0gb2YgJHthfS48L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Im1vcmUtaG90ZWxzIj5TaG93ICR7TWF0aC5taW4oMjAsdSl9IG1vcmU8L2J1dHRvbj48L2Rpdj5gOiIiXS5qb2luKCIiKX0scF89ZT0+e2NvbnN0IHQ9ZS5uZWFyZXN0Pz9bXTtyZXR1cm4gdC5sZW5ndGg/W2VlKCksYDxkaXYgY2xhc3M9Indhcm5ub3RlIj5Ob3RoaW5nIGNhbWUgaW4gdW5kZXIgdGhlIHByaWNlIGNlaWxpbmcuICR7Yyh0Lmxlbmd0aD09PTE/IlRoZSBuZWFyZXN0IGlzIjoiVGhlIG5lYXJlc3QgYXJlIil9IG92ZXIgaXQuPC9kaXY+YCxgPGRpdiBjbGFzcz0idGlsZXMiPiR7dC5tYXAobj0+YAogICAgICA8YnV0dG9uIGNsYXNzPSJ0aWxlIG92ZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKG4uaWQpfSI+CiAgICAgICAgPHNwYW4gY2xhc3M9InQtc2hvdCIgc3R5bGU9IiR7ZW8oU3RyaW5nKG4uaWQpKX0iPgogICAgICAgICAgJHtuLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKG4uaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2ModG8oU3RyaW5nKG4ubmFtZSkpKX08L3NwYW4+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtbmFtZSI+JHtjKG4ubmFtZSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtd2hlcmUiPiR7Yyhbbi5hcmVhLG4uY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9InQtZm9vdCI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7bi5mcm9tTmlnaHRseT9gJHtjKG4uZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5PdmVyPC9zcGFuPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YF0uam9pbigiIik6YDxkaXYgY2xhc3M9ImVtcHR5Ij5Ob3RoaW5nIG1hdGNoZWQke2UucXVlcnk/YCAiJHtjKGUucXVlcnkpfSJgOiIifS4gVHJ5IGEgY2l0eS48L2Rpdj5gfSx1Zj1lPT5gCiAgPGRpdiBjbGFzcz0iaGVybyIgc3R5bGU9IiR7ZW8oU3RyaW5nKGUuaWQpKX0iPgogICAgJHtlLmltYWdlVXJsP2A8aW1nIHNyYz0iJHtjKGUuaW1hZ2VVcmwpfSIgYWx0PSIiPmA6IiJ9CiAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke2ModG8oU3RyaW5nKGUubmFtZSkpKX08L3NwYW4+CiAgICAke2UuYnJhbmQ/YDxzcGFuIGNsYXNzPSJ0LWJyYW5kIj4ke2MoZS5icmFuZCl9PC9zcGFuPmA6IiJ9CiAgPC9kaXY+CiAgPGRpdj4KICAgIDxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKGUubmFtZSl9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoW2UuYXJlYSxlLmNpdHksU3RyaW5nKGUuY291bnRyeT8/IiIpLnN0YXJ0c1dpdGgoU3RyaW5nKGUuY2l0eSkpPyIiOmUuY291bnRyeV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9JHtlLnJhdGluZz9gIMK3ICR7YyhlLnJhdGluZy52YWx1ZSl94piFICgke2MoZS5yYXRpbmcuY291bnQpfSlgOiIifTwvZGl2PgogIDwvZGl2PgogICR7ZS5zdW1tYXJ5P2A8ZGl2IGNsYXNzPSJoLXN1bSI+JHtjKGUuc3VtbWFyeSl9PC9kaXY+YDoiIn0KICAkeyhlLmFtZW5pdGllcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5hbWVuaXRpZXMuc2xpY2UoMCw4KS5tYXAodD0+YDxzcGFuIGNsYXNzPSJjaGlwIj4ke2ModCl9PC9zcGFuPmApLmpvaW4oIiIpfTwvZGl2PmA6IiJ9YCxoXz0oZSx0LG4pPT57Y29uc3Qgbz1vXyhTdHJpbmcoZS5pZCksU3RyaW5nKHQuaWQpLG4pLHI9W3QuYmVkcyx0LnZpZXcsYFNsZWVwcyAke3Quc2xlZXBzfWAsdC5zaXplU3FtP2Ake3Quc2l6ZVNxbX1twrJgOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyB3aXRodGh1bWIiPgogICAgICA8c3BhbiBjbGFzcz0idGh1bWIiIHN0eWxlPSIke2VvKGAke2UuaWR9OiR7dC5pZH1gKX0iPgogICAgICAgICR7dC5pbWFnZVVybD9gPGltZyBzcmM9IiR7Yyh0LmltYWdlVXJsKX0iIGFsdD0iIj5gOmModG8oU3RyaW5nKHQubmFtZSkpKX0KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke2ModC5uYW1lKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2Mocil9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj4KICAgICAgICAgICR7dC5icmVha2Zhc3Q/JzxzcGFuIGNsYXNzPSJiYWRnZSBnb29kIj5CcmVha2Zhc3Q8L3NwYW4+JzoiIn0KICAgICAgICAgICR7dC5yZWZ1bmRhYmxlP2A8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+RnJlZSBjYW5jZWxsYXRpb24ke3QuZnJlZUNhbmNlbGxhdGlvblVudGlsP2AgdW50aWwgJHtjKFN0cmluZyh0LmZyZWVDYW5jZWxsYXRpb25VbnRpbCkuc2xpY2UoMCwxMCkpfWA6IiJ9PC9zcGFuPmA6JzxzcGFuIGNsYXNzPSJiYWRnZSB3YXJuIj5Ob24tcmVmdW5kYWJsZTwvc3Bhbj4nfQogICAgICAgICAgJHtOdW1iZXIodC5yb29tc0xlZnQpPD0zP2A8c3BhbiBjbGFzcz0iYmFkZ2UiPiR7Yyh0LnJvb21zTGVmdCl9IGxlZnQ8L3NwYW4+YDoiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAke3QucHVibGljU3RheVRvdGFsP2A8ZGl2IGNsYXNzPSJwLXdhcyI+JHtjKHQucHVibGljU3RheVRvdGFsKX08L2Rpdj5gOiIifQogICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7Yyh0LnJvb21zVG90YWw/P3Quc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7Yyh0Lm5pZ2h0bHkpfSAvIG5pZ2h0JHtZPjE/YCDCtyAke1l9IHJvb21zYDoiIn0gwrcgaW5jbC4gdGF4PC9kaXY+CiAgICAgICAgJHt0Lm1lbWJlclJhdGU/YDxkaXYgY2xhc3M9InAtbWVtYmVyIj4ke2ModC5tZW1iZXJSYXRlLnRpZXIpfSByYXRlPC9kaXY+YDoiIn0KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtTbyhgZGF0YS1hZGQtcm9vbT0iJHtjKHQuaWQpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaWQpfSJgLG8sU3RyaW5nKHQubmFtZSksWSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxmXz0oZSx0KT0+IUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDI/IiI6YAogIDxkaXYgY2xhc3M9ImZsZXgtZGF0ZXMiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJOZWFyYnkgYXJyaXZhbCBkYXRlcyI+CiAgICAke3QubWFwKG49PmA8YnV0dG9uIGNsYXNzPSJmZCR7bi5jaG9zZW4/IiBvbiI6IiJ9JHtuLmZyb20/IiI6IiBvdXQifSR7bi5iZXN0PyIgYmVzdCI6IiJ9IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7YyhlKX0iIGRhdGEtY2k9IiR7YyhuLmNoZWNrSW4pfSIgZGF0YS1jbz0iJHtjKG4uY2hlY2tPdXQpfSIgYXJpYS1sYWJlbD0iQXJyaXZlICR7YyhKdChTdHJpbmcobi5jaGVja0luKSkpfSR7bi5mcm9tP2AsIGZyb20gJHtjKG4uZnJvbSl9YDoiLCBub3RoaW5nIGxlZnQifSI+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZkLWRheSI+JHtjKEp0KFN0cmluZyhuLmNoZWNrSW4pKSl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJmZC1wcmljZSI+JHtuLmZyb20/YyhuLmZyb20pOiJGdWxsIn08L3NwYW4+CiAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogIDwvZGl2PmAsd3U9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnJvb21zPz9bXSxvPWUuc3RheT8/VDtyZXR1cm5bZWUoKSx1Zih0KSxjZihTdHJpbmcodC5pZCksdC50b2RheVRoZXJlKSxmXyhTdHJpbmcodC5pZCksZS5kYXRlcyksZS5uZWVkc0RhdGVzPyc8ZGl2IGNsYXNzPSJlbXB0eSI+TG9va2luZyB1cCByb29tc+KApjwvZGl2Pic6ZS5ub1Jvb21zP2A8ZGl2IGNsYXNzPSJlcnIiPiR7YyhlLm5vUm9vbXMpfTwvZGl2PmA6YDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+aF8odCxyLG8pKS5qb2luKCIiKX08L2Rpdj5gLChlLmV4dHJhcz8/W10pLmxlbmd0aD9gPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1leHRyYXM9IiR7Yyh0LmlkKX0iPkFkZC1vbnMgYW5kIGV4cGVyaWVuY2VzPC9idXR0b24+YDoiIiwoZS5wb2xpY2llcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iY2hpcHMiPiR7ZS5wb2xpY2llcy5tYXAocj0+YDxidXR0b24gY2xhc3M9ImNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1wb2xpY3k9IiR7YyhyLnRvcGljKX0iIGRhdGEtaG90ZWw9IiR7Yyh0LmlkKX0iPiR7YyhyLnRpdGxlKX08L2J1dHRvbj5gKS5qb2luKCIiKX08L2Rpdj5gOiIiXS5qb2luKCIiKX0sbV89ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLmV4dHJhcz8/W10sbz1lLmZvckJvb2tpbmc7cmV0dXJuIG8/W2VlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj5BZGQtb25zIGZvciAke2Moby5jb25maXJtYXRpb25Db2RlKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2ModC5uYW1lKX0gwrcgJHtjKExlKG8uc3RheSkpfTwvZGl2PjwvZGl2PmAsYDxkaXYgY2xhc3M9InJvd3MiPiR7bi5tYXAocj0+YAogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhyLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icHJpY2UiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2Moci5wcmljZSl9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7YyhyLnBlcil9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtTbyhgZGF0YS1ib29raW5nLWV4dHJhPSIke2Moci5pZCl9IiBkYXRhLWJvb2tpbmc9IiR7YyhvLmNvbmZpcm1hdGlvbkNvZGUpfSJgLE51bWJlcihvLmhlbGQ/LltyLmlkXT8/MCksU3RyaW5nKHIubmFtZSkpfTwvZGl2PgogICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsJzxkaXYgY2xhc3M9Im5vdGUiPkVhY2ggY2hhbmdlIGlzIHNob3duIHdpdGggaXRzIG5ldyB0b3RhbCBiZWZvcmUgYW55dGhpbmcgbW92ZXMuIE5vdGhpbmcgaXMgY2hhcmdlZCBoZXJlLjwvZGl2PicsJzxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+QmFjayB0byB5b3VyIGJvb2tpbmdzPC9idXR0b24+J10uam9pbigiIik6W2VlKCksYDxkaXY+PGRpdiBjbGFzcz0iaC1uYW1lIj4ke2ModC5uYW1lKX08L2Rpdj48ZGl2IGNsYXNzPSJoLXdoZXJlIj5XaGF0IGl0IG9mZmVycyBiZXNpZGUgdGhlIHJvb208L2Rpdj48L2Rpdj5gLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhyLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKHIuZGVzY3JpcHRpb24pfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdG90YWwiPiR7YyhyLnByaWNlKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+cGVyICR7YyhyLnBlcil9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke1NvKGBkYXRhLWFkZC1leHRyYT0iJHtjKHIuaWQpfSIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSJgLHJfKFN0cmluZyh0LmlkKSxTdHJpbmcoci5pZCkpLFN0cmluZyhyLm5hbWUpKX08L2Rpdj4KICAgICAgPC9kaXY+YCkuam9pbigiIil9PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+QmFjayB0byAke2ModC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0sZ189ZT0+e2NvbnN0IHQ9ZS5raW5kPT09InJvb20iP2BkYXRhLWFkZC1yb29tPSIke2MoZS5yb29tUmVmKX0iIGRhdGEtaG90ZWw9IiR7YyhlLmhvdGVsSWQpfSIgZGF0YS1jaT0iJHtjKGUuc3RheT8uY2hlY2tJbil9IiBkYXRhLWNvPSIke2MoZS5zdGF5Py5jaGVja091dCl9IiBkYXRhLWd1PSIke2MoZS5zdGF5Py5ndWVzdHMpfSJgOmBkYXRhLWFkZC1leHRyYT0iJHtjKGUuZXh0cmFSZWY/P2UudGl0bGUpfSIgZGF0YS1ob3RlbD0iJHtjKGUuaG90ZWxJZCl9ImA7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKGUudGl0bGUpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhlLmtpbmQ9PT0icm9vbSI/YCR7ZS5ob3RlbE5hbWV9IMK3ICR7TGUoZS5zdGF5KX0ke2UucmVmdW5kYWJsZT09PSExPyIgwrcgbm9uLXJlZnVuZGFibGUiOiIifWA6YCR7ZS5ob3RlbE5hbWV9JHtlLmRldGFpbD9gIMK3ICR7ZS5kZXRhaWx9YDoiIn1gKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InByaWNlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2MoZS50b3RhbCl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icC11bml0Ij4ke2MoZS51bml0KX0ke2Uua2luZD09PSJyb29tIj8iIC8gbmlnaHQiOiIgZWFjaCJ9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPiR7U28odCxOdW1iZXIoZS5xdWFudGl0eT8/MSksU3RyaW5nKGUudGl0bGUpKX08L2Rpdj4KICAgIDwvZGl2PmB9LCR1PShlLHQpPT5gPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Sb29tcyBhbmQgYWRkLW9uczwvc3Bhbj48c3Bhbj4ke2MoZS5zdWJ0b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgIDxkaXYgY2xhc3M9InN1bSI+PHNwYW4+VGF4ZXMgYW5kIGZlZXM8L3NwYW4+PHNwYW4+JHtjKGUudGF4ZXNBbmRGZWVzKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIGdvb2QiPjxzcGFuPiR7YyhlLm1lbWJlclNhdmluZy50aWVyKX0gbWVtYmVyIHJhdGU8L3NwYW4+PHNwYW4+4oiSICR7YyhlLm1lbWJlclNhdmluZy5zYXZlZCl9PC9zcGFuPjwvZGl2PmA6IiJ9CiAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2ModCl9PC9zcGFuPjxzcGFuPiR7YyhlLnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgJHtlLm1lbWJlclNhdmluZz9gPGRpdiBjbGFzcz0ic3VtIj48c3Bhbj5Qb2ludHMgdGhpcyBlYXJuczwvc3Bhbj48c3Bhbj4ke2MoTnVtYmVyKGUubWVtYmVyU2F2aW5nLnBvaW50cykudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfTwvc3Bhbj48L2Rpdj5gOiIifQogICA8L2Rpdj5gLGJfPWU9Pntjb25zdCB0PWUubGluZXM/P1tdO2lmKHQubGVuZ3RoPT09MClyZXR1cm5bZWUoKSwnPGRpdiBjbGFzcz0iZW1wdHkiPlRoZSB0cmlwIGlzIGVtcHR5LjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5Ccm93c2UgJHtjKG90KX0gaG90ZWxzPC9idXR0b24+PC9kaXY+YF0uam9pbigiIik7Y29uc3Qgbj1bLi4ubmV3IFNldCh0Lm1hcChvPT5TdHJpbmcoby5kYXk/PyIiKSkpXS5zb3J0KCk7cmV0dXJuW2VlKCksbi5tYXAobz0+YAogICAgICAke28/YDxkaXYgY2xhc3M9ImRheSI+JHtjKEp0KG8pKX08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QuZmlsdGVyKHI9PlN0cmluZyhyLmRheT8/IiIpPT09bykubWFwKGdfKS5qb2luKCIiKX08L2Rpdj5gKS5qb2luKCIiKSwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChvPT5gJHtjKG8udGl0bGUpfTogJHtjKG8ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIiwuLi5BcnJheS5pc0FycmF5KGUuZ3JvdXBzKSYmZS5ncm91cHMubGVuZ3RoPjE/W2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZWQgaW4gJHtjKChlLmN1cnJlbmNpZXM/P1tdKS5qb2luKCIgYW5kICIpKX0sIHNlcGFyYXRlbHkuIE5vdGhpbmcgaGVyZSBjb252ZXJ0cyBvbmUgaW50byB0aGUgb3RoZXI7IGVhY2ggaG90ZWwgaXMgYm9va2VkIGFuZCBwYWlkIGluIGl0cyBvd24uPC9kaXY+YCwuLi5lLmdyb3Vwcy5tYXAobz0+JHUobyxgVG90YWwgaW4gJHtvLmN1cnJlbmN5fWApKV06WyR1KGUsIlRvdGFsIildLC4uLkFycmF5LmlzQXJyYXkoZS5uZWVkc1Jvb20pJiZlLm5lZWRzUm9vbS5sZW5ndGg/ZS5uZWVkc1Jvb20ubWFwKG89PmA8ZGl2IGNsYXNzPSJhc2tlZCI+CiAgICAgICAgICAgICA8Yj5Hb2VzIHdpdGggYSBzdGF5PC9iPgogICAgICAgICAgICAgPHNwYW4+JHtjKChvLmV4dHJhcz8/W10pLmpvaW4oIiBhbmQgIikpfSBpcyAke2Moby5ob3RlbE5hbWUpfSdzIHNlcnZpY2UgZm9yIGl0cyBndWVzdHMsIHNvIGl0IGlzIGJvb2tlZCB3aXRoIGEgcm9vbSB0aGVyZSAtIG9yIGFkZGVkIHRvIGEgYm9va2luZyB5b3UgYWxyZWFkeSBoYXZlLjwvc3Bhbj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWhvdGVsPSIke2Moby5ob3RlbElkKX0iPlJvb21zIGF0ICR7YyhvLmhvdGVsTmFtZSl9PC9idXR0b24+CiAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgIDwvZGl2PmApOlsnPGRpdiBjbGFzcz0iZm9vdCI+PGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1ib29rIj5SZXF1ZXN0IGJvb2tpbmc8L2J1dHRvbj48L2Rpdj4nLGA8ZGl2IGNsYXNzPSJub3RlIj5Ob3RoaW5nIGlzIGNoYXJnZWQgaGVyZS4gUmVxdWVzdGluZyBhIGJvb2tpbmcgYXNrcyAke2Mob3QpfSB0byBob2xkIHRoZSByb29tcyBhbmQgZ2l2ZXMgeW91IGEgY29uZmlybWF0aW9uIGNvZGUuPC9kaXY+YCxsZigpXSxYPyIiOmA8ZGl2IGNsYXNzPSJub3RlIj5BICR7YyhvdCl9IENpcmNsZSBtZW1iZXI/IDxidXR0b24gY2xhc3M9Imxpbmt5IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stc2lnbi1pbiI+U2lnbiBpbiBmb3IgdGhlIG1lbWJlciByYXRlPC9idXR0b24+LjwvZGl2PiR7em8oKX1gXS5qb2luKCIiKX0sQWM9W3tpZDoia2luZy1iZWQiLGxhYmVsOiJLaW5nIGJlZCJ9LHtpZDoidHdpbi1iZWRzIixsYWJlbDoiVHdpbiBiZWRzIn0se2lkOiJoaWdoLWZsb29yIixsYWJlbDoiSGlnaCBmbG9vciJ9LHtpZDoibG93LWZsb29yIixsYWJlbDoiTG93IGZsb29yIn0se2lkOiJxdWlldC1yb29tIixsYWJlbDoiUXVpZXQgcm9vbSJ9LHtpZDoiY29ubmVjdGluZy1yb29tcyIsbGFiZWw6IkNvbm5lY3Rpbmcgcm9vbXMifSx7aWQ6ImVhcmx5LWNoZWNrLWluIixsYWJlbDoiRWFybHkgY2hlY2staW4ifSx7aWQ6ImxhdGUtYXJyaXZhbCIsbGFiZWw6IkxhdGUgYXJyaXZhbCJ9LHtpZDoiYWNjZXNzaWJsZS1yb29tIixsYWJlbDoiQWNjZXNzaWJsZSByb29tIn1dLHZfPXsia2luZy1iZWQiOiJ0d2luLWJlZHMiLCJ0d2luLWJlZHMiOiJraW5nLWJlZCIsImhpZ2gtZmxvb3IiOiJsb3ctZmxvb3IiLCJsb3ctZmxvb3IiOiJoaWdoLWZsb29yIn07bGV0IFNlPW51bGw7Y29uc3QgbGY9KGU9ITEpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9Imd1ZXN0IiR7ZT8iIjoiIGhpZGRlbiJ9PgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgPGxhYmVsPkd1ZXN0IG5hbWU8aW5wdXQgaWQ9ImduYW1lIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkFzIGl0IHNob3VsZCBhcHBlYXIgb24gdGhlIGJvb2tpbmciIHZhbHVlPSIke2MoU2U/Lm5hbWU/PyIiKX0iPjwvbGFiZWw+CiAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZ21haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkZvciB0aGUgY29uZmlybWF0aW9uIiB2YWx1ZT0iJHtjKFNlPy5lbWFpbD8/IiIpfSI+PC9sYWJlbD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYXNrcyI+CiAgICAgIDxkaXYgY2xhc3M9ImFza3MtdCI+QXNrIHRoZSBkZXNrIGZvcjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaGlwcyI+JHtBYy5tYXAodD0+YDxidXR0b24gY2xhc3M9ImNoaXAgYXNrIiB0eXBlPSJidXR0b24iIGRhdGEtYXNrPSIke2ModC5pZCl9IiBhcmlhLXByZXNzZWQ9IiR7KFNlP1NlLnJlcXVlc3RzOlg/LnByZWZlcmVuY2VzPz9bXSkuaW5jbHVkZXModC5pZCk/InRydWUiOiJmYWxzZSJ9Ij4ke2ModC5sYWJlbCl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgICAgPGxhYmVsPkFycml2aW5nIGF0PGlucHV0IGlkPSJndGltZSIgdHlwZT0idGltZSIgYXV0b2NvbXBsZXRlPSJvZmYiIHZhbHVlPSIke2MoU2U/LmFycml2aW5nQXQ/PyIiKX0iPjwvbGFiZWw+CiAgICAgICAgPGxhYmVsPkFueXRoaW5nIGVsc2U8aW5wdXQgaWQ9Imdub3RlIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkluIHlvdXIgb3duIHdvcmRzIOKAlCBvcHRpb25hbCIgdmFsdWU9IiR7YyhTZT8ubm90ZXM/PyIiKX0iPjwvbGFiZWw+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJub3RlIj5UaGVzZSBnbyB0byB0aGUgZGVzayBhcyByZXF1ZXN0cy4gJHtjKG90KX0gbWVldHMgd2hhdCBpdCBjYW4gb24gdGhlIGRheTsgbm9uZSBvZiBpdCBpcyBoZWxkLjwvZGl2PgogICAgICAke1g/YDxsYWJlbCBjbGFzcz0icmVtZW1iZXIiPjxpbnB1dCBpZD0iZ3JlbWVtYmVyIiB0eXBlPSJjaGVja2JveCIke1NlPy5yZW1lbWJlcj8iIGNoZWNrZWQiOiIifT4gUmVtZW1iZXIgdGhlIGJlZCwgZmxvb3IgYW5kIHJvb20gcmVxdWVzdHMgb24gbXkgJHtjKFgucHJvZ3JhbW1lPz8ibWVtYmVyc2hpcCIpfSBmb3IgbmV4dCB0aW1lPC9sYWJlbD5gOiIifQogICAgPC9kaXY+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9vayI+SG9sZCB0aGVzZSByb29tczwvYnV0dG9uPgogICAgPGRpdiBjbGFzcz0ibm90ZSI+Tm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uPC9kaXY+CiAgPC9kaXY+YCx5Xz1lPT5bYDxkaXYgY2xhc3M9ImVyciI+VGhlIGJvb2tpbmcgbmVlZHMgJHtjKChlLm1pc3Npbmc/P1tdKS5qb2luKCIgYW5kICIpfHwiYSBuYW1lIGFuZCBhbiBlbWFpbCIpfS48L2Rpdj5gLGxmKCEwKSwnPGRpdiBjbGFzcz0ibm90ZSI+Tm8gY2FyZCBpcyB0YWtlbiBhbmQgbm90aGluZyBpcyBjaGFyZ2VkLiBZb3UgcHJlc2VudCBhIGNhcmQgYXQgY2hlY2staW4uPC9kaXY+J10uam9pbigiIiksX189ZT0+e2NvbnN0IHQ9ZS5tZW1iZXI/P3t9O3JldHVybltlZSgpLGA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7Yyh0LnByb2dyYW1tZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHQubmFtZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIiBzdHlsZT0iZm9udC1zaXplOjIwcHgiPiR7Yyh0LnRpZXI/Lm5hbWUpfTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHtjKE51bWJlcih0LnBvaW50cz8/MCkudG9Mb2NhbGVTdHJpbmcoImVuLUdCIikpfSBwb2ludHM8L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ1bnBhaWQiPjxiPiR7YyhNYXRoLnJvdW5kKCh0LnRpZXI/LmRpc2NvdW50Pz8wKSoxMDApKX0lIG9mZjwvYj48c3Bhbj5Sb29tIHJhdGVzIGFuZCB0cmlwIHRvdGFscyBub3cgc2hvdyB0aGUgJHtjKHQudGllcj8ubmFtZSl9IG1lbWJlciByYXRlLiBOb3RoaW5nIGlzIGNoYXJnZWQgYnkgc2lnbmluZyBpbi48L3NwYW4+PC9kaXY+YCwodC5wcmVmZXJlbmNlcz8/W10pLmxlbmd0aD9gPGRpdiBjbGFzcz0iYXNrZWQiPgogICAgICAgICAgIDxiPlNhdmVkIGZvciB5b3VyIG5leHQgc3RheXM8L2I+CiAgICAgICAgICAgPHNwYW4+JHtjKHQucHJlZmVyZW5jZXMubWFwKG49PkFjLmZpbmQobz0+by5pZD09PW4pPy5sYWJlbD8/bikuam9pbigiLCAiKSl9IC0gdGlja2VkIG9uIHRoZSBib29raW5nIGZvcm0sIGFuZCBhc2tlZCBmb3Igb25seSB3aGVuIHlvdSBib29rIHdpdGggdGhlbS48L3NwYW4+CiAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGlua3kiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImZvcmdldC1wcmVmcyI+Rm9yZ2V0IHRoZW08L2J1dHRvbj4KICAgICAgICAgPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSI+RmluZCBhIGhvdGVsPC9idXR0b24+CiAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0ic2lnbi1vdXQiPlNpZ24gb3V0PC9idXR0b24+CiAgICAgPC9kaXY+YF0uam9pbigiIil9LGtfPSgpPT5bJzxkaXYgY2xhc3M9ImVyciI+Tm8gbWVtYmVyc2hpcCBtYXRjaGVzIHRoYXQgbnVtYmVyIGFuZCBzdXJuYW1lLiBDaGVjayBib3RoIGFzIHRoZXkgYXJlIHByaW50ZWQg4oCUIG5vdGhpbmcgZWxzZSBpcyBuZWVkZWQsIHRoaXMgY29ubmVjdG9yIG5ldmVyIGFza3MgZm9yIGEgcGFzc3dvcmQuPC9kaXY+Jyx6byghMCldLmpvaW4oIiIpLHpvPShlPSExKT0+YAogIDxkaXYgY2xhc3M9ImZvcm0iIGlkPSJzaWduaW4iJHtlPyIiOiIgaGlkZGVuIn0+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+TWVtYmVyc2hpcCBudW1iZXI8aW5wdXQgaWQ9Im1udW0iIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgaXMgcHJpbnRlZCI+PC9sYWJlbD4KICAgICAgPGxhYmVsPlN1cm5hbWU8aW5wdXQgaWQ9Im1zdXIiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iVGhlIHN1cm5hbWUgb24gaXQiPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJzaWduLWluIj5TaWduIGluPC9idXR0b24+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj5ObyBwYXNzd29yZCBpcyBhc2tlZCBmb3IgYW5kIG5vbmUgaXMgc3RvcmVkLiBTaWduaW5nIGluIHNob3dzIHRoZSBtZW1iZXIgcmF0ZTsgbm90aGluZyBpcyBjaGFyZ2VkLjwvZGl2PgogIDwvZGl2PmAsd189ZT0+e2NvbnN0IHQ9ZS5yZXF1ZXN0ZWQ/P1tdO3JldHVybiB0Lmxlbmd0aD9gPGRpdiBjbGFzcz0iYXNrZWQke2UuYWNjZXNzaWJpbGl0eT8iIGZsYWciOiIifSI+CiAgICA8Yj5SZXF1ZXN0ZWQsIG5vdCBoZWxkPC9iPgogICAgJHt0Lm1hcChuPT5gPHNwYW4+JHtjKG4pfTwvc3Bhbj5gKS5qb2luKCIiKX0KICA8L2Rpdj5gOiIifSxTdT1lPT5TdHJpbmcoZS5ob2xkVW50aWw/PyIiKS5zbGljZSgwLDE2KS5yZXBsYWNlKCJUIiwiICIpLCRfPWU9Pntjb25zdCB0PUFycmF5LmlzQXJyYXkoZS5ib29raW5ncykmJmUuYm9va2luZ3MubGVuZ3RoP2UuYm9va2luZ3M6W2UuYm9va2luZz8/e31dLG49dC5sZW5ndGg+MSxvPShyLHMsaSk9PltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPkNvbmZpcm1hdGlvbiBjb2RlPC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUiPiR7YyhyLmNvbmZpcm1hdGlvbkNvZGUpfTwvZGl2PgogICAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHtjKHIuaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgPGRpdiBjbGFzcz0id2hlbiI+JHtjKExlKHIuc3RheSkpfSDCtyAke2Moci5ndWVzdD8ubmFtZT8/IiIpfTwvZGl2PgogICAgICAgPC9kaXY+YCxuP2A8ZGl2IGNsYXNzPSJub3RlIj5IZWxkIHVudGlsICR7YyhTdShyKSl9IFVUQy48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJtb25leS1vdXQiPjxzcGFuPlRvdGFsIGZvciB0aGUgc3RheTwvc3Bhbj48c3Bhbj4ke2Mocyl9PC9zcGFuPjwvZGl2PmAsd18oaSksYDxkaXYgY2xhc3M9InJvd3MiPiR7KHIucXVvdGU/LmxpbmVzPz9bXSkubWFwKHpfKS5qb2luKCIiKX08L2Rpdj5gLG4/YDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ib29raW5nLWV4dHJhcz0iJHtjKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKHIuY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWwgJHtjKHIuaG90ZWxOYW1lKX08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKTtyZXR1cm5bZWUoKSxuP2A8ZGl2IGNsYXNzPSJub3RlIj4ke3QubGVuZ3RofSBib29raW5ncywgb25lIGZvciBlYWNoIHN0YXkuIEVhY2ggaG90ZWwgaG9sZHMgaXRzIG93biBuaWdodHMgdW5kZXIgaXRzIG93biBjb2RlLCBhbmQgZWFjaCBpcyBjaGFuZ2VkIG9yIGNhbmNlbGxlZCBvbiBpdHMgb3duLjwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9InVucGFpZCI+CiAgICAgICA8Yj5Ob3RoaW5nIGhhcyBiZWVuIGNoYXJnZWQuPC9iPgogICAgICAgPHNwYW4+JHtuPyJUaGUgcm9vbXMgYXJlIGhlbGQgdW50aWwgdGhlIHRpbWUgdW5kZXIgZWFjaCBjb2RlLiI6YFRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCAke2MoU3UodFswXSkpfSBVVEMuYH0gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmAsLi4udC5tYXAocj0+bj9vKHIsU3RyaW5nKHIudG90YWw/PyIiKSxyKTpvKHIsU3RyaW5nKGUudG90YWw/PyIiKSxlKSksYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgJHtuPyIiOmA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJvb2tpbmctZXh0cmFzPSIke2ModFswXT8uY29uZmlybWF0aW9uQ29kZSl9Ij5BZGQtb25zPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7Yyh0WzBdPy5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGlzIGJvb2tpbmc8L2J1dHRvbj5gfQogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxTXz1lPT5bYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUuZGV0YWlsPz9lLndoeT8/IlRoYXQgY291bGQgbm90IGJlIGRvbmUuIil9PC9kaXY+YCxWdD4wPyc8ZGl2IGNsYXNzPSJmb290Ij48YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCI+VmlldyB0aGUgdHJpcDwvYnV0dG9uPjwvZGl2Pic6IiJdLmpvaW4oIiIpLHpfPWU9PmAKICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHtjKGUua2luZD09PSJyb29tIj9MZShlLnN0YXkpOmUuZGV0YWlsPz8iIil9PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InByaWNlIj48ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke2MoZS50b3RhbCl9PC9kaXY+PC9kaXY+CiAgPC9kaXY+YCxUXz17cmVxdWVzdGVkOiJ3YXJuIixjb25maXJtZWQ6Imdvb2QiLGNhbmNlbGxlZDoiYmFkIixleHBpcmVkOiJiYWQifSxJXz1lPT57Y29uc3QgdD1lLnJlcXVlc3RzPy5raW5kcz8/W107aWYoIXQubGVuZ3RoKXJldHVybiIiO2NvbnN0IG49dC5tYXAobz0+QWMuZmluZChyPT5yLmlkPT09byk/LmxhYmVsPz9vKTtyZXR1cm5gPGRpdiBjbGFzcz0ibWV0YSBhc2tlZC1saW5lIj5Bc2tlZCBmb3IgJHtjKG4uam9pbigiLCAiKS50b0xvd2VyQ2FzZSgpKX08L2Rpdj5gfSxQXz1lPT57Y29uc3QgdD1lLmJvb2tpbmdzPz9bXTtyZXR1cm4gZS5ub3RGb3VuZCYmdC5sZW5ndGg9PT0wP2A8ZGl2IGNsYXNzPSJlcnIiPk5vIGJvb2tpbmcgbWF0Y2hlcyAke2MoZS5ub3RGb3VuZCl9IHdpdGggdGhhdCBlbWFpbC4gQm90aCBoYXZlIHRvIGJlIGFzIHRoZXkgYXJlIG9uIHRoZSBjb25maXJtYXRpb24uPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJmaW5kLWJvb2tpbmciPlRyeSBhZ2FpbjwvYnV0dG9uPjwvZGl2PmA6dC5sZW5ndGg9PT0wPyc8ZGl2IGNsYXNzPSJlbXB0eSI+Tm8gYm9va2luZ3MgaW4gdGhpcyBjb252ZXJzYXRpb24geWV0LjwvZGl2Pic6W2VlKCksYDxkaXYgY2xhc3M9InJvd3MiPiR7dC5tYXAobj0+YAogICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKG4uaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfSDCtyAke2MoTGUobi5zdGF5KSl9PC9kaXY+CiAgICAgICAgICAke0lfKG4pfQogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHtUX1tTdHJpbmcobi5zdGF0dXMpXT8/IiJ9Ij4ke2Mobi5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHtjKG4ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke24uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG4uc3RhdHVzPT09ImNvbmZpcm1lZCI/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYm9va2luZy1leHRyYXM9IiR7YyhuLmNvbmZpcm1hdGlvbkNvZGUpfSI+QWRkLW9uczwvYnV0dG9uPgogICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWNhbmNlbD0iJHtjKG4uY29uZmlybWF0aW9uQ29kZSl9Ij5DYW5jZWw8L2J1dHRvbj5gOiIifTwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKX0senU9ZT0+e2NvbnN0IHQ9ZS52aWV3PT09ImNhbmNlbGxlZCIsbj1lLmJvb2tpbmc/P3t9O3JldHVybltgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNhbmNlbGxlZCI6IkNhbmNlbGxpbmcifTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHtjKG4uY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgPC9kaXY+YCxgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0gdG90YWwiPjxzcGFuPiR7dD8iVGhlIGhvdGVsIGNoYXJnZXMiOiJDYW5jZWxsaW5nIHdvdWxkIGNvc3QifTwvc3Bhbj48c3Bhbj4ke2MoZS5mZWUpfTwvc3Bhbj48L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5ydWxlKX08L2Rpdj5gLHQ/IiI6ZS5jYW5jZWxsYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPktlZXAgaXQ8L2J1dHRvbj4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIGRhbmdlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2FuY2VsPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbCB0aGUgYm9va2luZzwvYnV0dG9uPgogICAgICAgICAgIDwvZGl2PmA6JzxkaXYgY2xhc3M9Im5vdGUiPlRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwgb24gdGhpcyBib29raW5nLjwvZGl2PiddLmpvaW4oIiIpfSxUdT1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2hhbmdlZCIsbj1lLmJvb2tpbmc/P3t9LG89KHIscyxpKT0+cz9gPGRpdiBjbGFzcz0ibGVnJHtpPyIgd2FzIjoiIn0iPgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2siPiR7YyhyKX08L2Rpdj4KICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWd2Ij4ke2Mocy5jaGVja0luKX0g4oaSICR7YyhzLmNoZWNrT3V0KX0gwrcgJHtjKHMubmlnaHRzKX0gJHtOdW1iZXIocy5uaWdodHMpPT09MT8ibmlnaHQiOiJuaWdodHMifTwvZGl2PgogICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ20iPiR7YyhzLnJvb21OYW1lKX0ke051bWJlcihzLnJvb21zKT4xP2AgwrcgJHtjKHMucm9vbXMpfSByb29tc2A6IiJ9IMK3ICR7YyhzLnRvdGFsKX08L2Rpdj4KICAgICAgICAgPC9kaXY+YDoiIjtyZXR1cm5bZWUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj4ke3Q/IkNoYW5nZWQiOiJDaGFuZ2luZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke2Mobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGUuaG90ZWxOYW1lP2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoZS5ob3RlbE5hbWUpfTwvZGl2PmA6IiIsYDxkaXYgY2xhc3M9ImxlZ3MiPiR7byh0PyJXYXMiOiJOb3ciLGUuZnJvbSwhMCl9JHtvKHQ/Ik5vdyI6IldvdWxkIGJlIixlLnRvLCExKX08L2Rpdj5gLGUuYWRkT24/YDxkaXYgY2xhc3M9InN1bXMiPjxkaXYgY2xhc3M9InN1bSI+PHNwYW4+JHtjKGUuYWRkT24ubmFtZSl9PC9zcGFuPjxzcGFuPiR7YyhlLmFkZE9uLmZyb20pfSDihpIgJHtjKGUuYWRkT24udG8pfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGUuZGlmZmVyZW5jZT9gPGRpdiBjbGFzcz0ic3VtcyI+PGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj4ke2UucmVmdW5kRHVlP3Q/IlRoZSBkZXNrIG93ZXMiOiJXb3VsZCBjb21lIGJhY2siOnQ/IlRoZSBkZXNrIGFza3MgZm9yIjoiV291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7YyhlLmRpZmZlcmVuY2UpfTwvc3Bhbj48L2Rpdj48L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj4ke2MoZS5ydWxlKX08L2Rpdj5gLHQ/JzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+TXkgYm9va2luZ3M8L2J1dHRvbj48L2Rpdj4nOmUuY2hhbmdlYWJsZT9gPGRpdiBjbGFzcz0iZm9vdCI+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyBxdWlldCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYm9va2luZ3MiPkxlYXZlIGl0PC9idXR0b24+CiAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLWNvbmZpcm0tY2hhbmdlPSIke2Mobi5jb25maXJtYXRpb25Db2RlKX0iPiR7ZS5hZGRPbiYmZS5mcm9tPy5jaGVja0luPT09ZS50bz8uY2hlY2tJbiYmZS5mcm9tPy5jaGVja091dD09PWUudG8/LmNoZWNrT3V0PyJVcGRhdGUgdGhlIGJvb2tpbmciOiJNb3ZlIHRoZSBib29raW5nIn08L2J1dHRvbj4KICAgICAgICAgICA8L2Rpdj5gOiIiXS5qb2luKCIiKX0sZXM9ZT0+e2NvbnN0IHQ9ZS5ob3RlbD8/e30sbj1lLnZpZXc9PT0icG9saWN5Ij9gPGg0PiR7YyhlLnRpdGxlKX08L2g0PiR7YyhlLnRleHQpfWA6KGUudG9waWNzPz9bXSkubWFwKG89PmA8aDQ+JHtjKG8udGl0bGUpfTwvaDQ+JHtjKG8udGV4dCl9YCkuam9pbigiIik7cmV0dXJuW2A8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHtjKHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCB0aGUgaG90ZWwgcHVibGlzaGVzPC9kaXY+PC9kaXY+YCxlLnZpZXc9PT0icG9saWN5LW1pc3NpbmciP2A8ZGl2IGNsYXNzPSJlbXB0eSI+JHtjKHQubmFtZSl9IGRvZXMgbm90IHB1Ymxpc2ggYW55dGhpbmcgYWJvdXQgdGhhdCBoZXJlLjwvZGl2PmA6YDxkaXYgY2xhc3M9InByb3NlIj4ke259PC9kaXY+YCxgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHQuaWQpfSI+QmFjayB0byAke2ModC5uYW1lKX08L2J1dHRvbj5gXS5qb2luKCIiKX0seF89ZT0+e2NvbnN0IHQ9ZS5jb2x1bW5zPz9bXSxuPWUucm93TGFiZWxzPz9bXSxvPXI9PmAKICAgIDxkaXYgY2xhc3M9ImNtcC1oZWFkJHtyLnJlY29tbWVuZGVkPyIgcGljayI6IiJ9Ij4KICAgICAgJHtyLnJlY29tbWVuZGVkPyc8ZGl2IGNsYXNzPSJwaWNrbWFyayI+UmVjb21tZW5kZWQ8L2Rpdj4nOiIifQogICAgICA8YnV0dG9uIGNsYXNzPSJ0LXNob3QiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHtjKHIuaG90ZWwuaWQpfSIgc3R5bGU9IiR7ZW8oU3RyaW5nKHIuaG90ZWwuaWQpKX0iPgogICAgICAgICR7ci5ob3RlbC5pbWFnZVVybD9gPGltZyBzcmM9IiR7YyhyLmhvdGVsLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgICAgIDxzcGFuIGNsYXNzPSJ0LW1hcmsiPiR7Yyh0byhTdHJpbmcoci5ob3RlbC5uYW1lKSkpfTwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1ib2R5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbmFtZSI+JHtjKHIuaG90ZWwubmFtZSl9PC9kaXY+CiAgICAgICAgJHtyLnByaWNlP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7YyhyLnByaWNlLnN0YXlUb3RhbCl9PHNtYWxsPiB0b3RhbCDCtyAke2Moci5wcmljZS5uaWdodGx5KX0vbmlnaHQ8L3NtYWxsPjwvZGl2PmA6ci5mcm9tP2A8ZGl2IGNsYXNzPSJjb2wtcHJpY2UiPiR7YyhyLmZyb20pfTxzbWFsbD4gLyBuaWdodCBmcm9tPC9zbWFsbD48L2Rpdj5gOiIifQogICAgICAgICR7ci5iZXN0Rm9yP2A8ZGl2IGNsYXNzPSJ3aHkiPiR7YyhyLmJlc3RGb3IpfTwvZGl2PmA6IiJ9CiAgICAgICAgJHsoci5wcm9zPz9bXSkubGVuZ3RofHwoci5jb25zPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJwYyI+JHtbLi4uKHIucHJvcz8/W10pLm1hcChzPT5gPGRpdiBjbGFzcz0icHJvIj48c3BhbiBjbGFzcz0ibSI+Kzwvc3Bhbj48c3Bhbj4ke2Mocyl9PC9zcGFuPjwvZGl2PmApLC4uLihyLmNvbnM/P1tdKS5tYXAocz0+YDxkaXYgY2xhc3M9ImNvbiI+PHNwYW4gY2xhc3M9Im0iPuKIkjwvc3Bhbj48c3Bhbj4ke2Mocyl9PC9zcGFuPjwvZGl2PmApXS5qb2luKCIiKX08L2Rpdj5gOiIifQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW2VlKCksZS50aXRsZT9gPGRpdiBjbGFzcz0iaC1uYW1lIj4ke2MoZS50aXRsZSl9PC9kaXY+YDoiIixlLnN0YXk/YDxkaXYgY2xhc3M9Imgtd2hlcmUiPiR7YyhMZShlLnN0YXkpKX08L2Rpdj5gOiIiLEFycmF5LmlzQXJyYXkoZS5jdXJyZW5jaWVzKSYmZS5jdXJyZW5jaWVzLmxlbmd0aD4xP2A8ZGl2IGNsYXNzPSJub3RlIj5QcmljZXMgYXJlIGluIGVhY2ggaG90ZWwncyBvd24gY3VycmVuY3kgKCR7YyhlLmN1cnJlbmNpZXMuam9pbigiLCAiKSl9KS4gVGhleSBhcmUgbm90IGNvbnZlcnRlZCwgc28gdGhlIGNvbHVtbnMgYXJlIG5vdCBhIHByaWNlIHJhbmtpbmcuPC9kaXY+YDoiIixgPGRpdiBjbGFzcz0iY21wLXdyYXAiPjxkaXYgY2xhc3M9ImNtcCIgc3R5bGU9Ii0tY29sczoke3QubGVuZ3RofSI+CiAgICAgICA8ZGl2IGNsYXNzPSJjbXAtY29ybmVyIj48L2Rpdj4KICAgICAgICR7dC5tYXAobykuam9pbigiIil9CiAgICAgICAke24ubWFwKChyLHMpPT5gPGRpdiBjbGFzcz0iayI+JHtjKHIpfTwvZGl2PiR7dC5tYXAoaT0+YDxkaXYgY2xhc3M9InYke3MlMj8iIGFsdCI6IiJ9Ij4ke2MoaS5yb3dzPy5bc10/LnZhbHVlPz8i4oCUIil9PC9kaXY+YCkuam9pbigiIil9YCkuam9pbigiIil9CiAgICAgPC9kaXY+PC9kaXY+YCwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChyPT5gJHtjKHIubmFtZSl9OiAke2Moci53aHkpfWApLmpvaW4oIjxicj4iKX08L2Rpdj5gOiIiLGA8ZGl2IGNsYXNzPSJub3RlIj5PcGVuIGEgJHtjKGUudm9jYWI/Lm5vdW4/PyJob3RlbCIpfSB0byBzZWUgaXRzIHJvb21zJHtlLnN0YXk/LmNoZWNrSW4/IiBmb3IgdGhlc2UgbmlnaHRzIjoiIn0uPC9kaXY+YF0uam9pbigiIil9LENfPWU9Pntjb25zdCB0PWUuZGF5cz8/W107cmV0dXJuW2VlKCksYDxkaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7YyhlLnRpdGxlKX08L2Rpdj4KICAgICAgICR7ZS5zdGF5P2A8ZGl2IGNsYXNzPSJoLXdoZXJlIj4ke2MoTGUoZS5zdGF5KSl9PC9kaXY+YDoiIn0KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJnYXAiPjxiPiR7YyhOdW1iZXIoZS5pblRyaXA/PzApK051bWJlcihlLmJvb2tlZD8/MCkpfS8ke2MoZS5wbGFubmVkKX08L2I+PHNwYW4+JHtjKGUuZ2FwPz8iIil9PC9zcGFuPjwvZGl2PmAsYDxkaXYgY2xhc3M9ImRheXMiPiR7dC5tYXAoKG4sbyk9PmAKICAgICAgPGRpdiBjbGFzcz0iZGF5cm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXludW0iPjxiPiR7bysxfTwvYj48aT48L2k+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZGF5Ym9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXlsYWJlbCI+JHtjKG4ubGFiZWwpfSR7bi5kYXRlP2A8c21hbGw+IMK3ICR7YyhTdHJpbmcobi5kYXRlKS5zbGljZSg1KSl9PC9zbWFsbD5gOiIifTwvZGl2PgogICAgICAgICAgJHtuLm5vdGU/YDxkaXYgY2xhc3M9ImRheW5vdGUiPiR7YyhuLm5vdGUpfTwvZGl2PmA6IiJ9CiAgICAgICAgICAkeyhuLml0ZW1zPz9bXSkubWFwKHI9PmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icGxhbi1pdGVtIiR7ci5raW5kPT09ImhvdGVsIj9gIGRhdGEtaG90ZWw9IiR7YyhyLmlkKX0iIHJvbGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjAiJHtyLmNoZWNrSW4/YCBkYXRhLWNpPSIke2Moci5jaGVja0luKX0iIGRhdGEtY289IiR7YyhyLmNoZWNrT3V0KX0iYDoiIn1gOiIifT4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHtjKHIubmFtZSl9PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke2MoW3IuZGV0YWlsLHIubmlnaHRzP051bWJlcihyLm5pZ2h0Pz8xKT4xP2BuaWdodCAke3IubmlnaHR9IG9mICR7ci5uaWdodHN9YDpgJHtyLm5pZ2h0c30gJHtyLm5pZ2h0cz09PTE/Im5pZ2h0IjoibmlnaHRzIn0gaGVyZWA6IiIsci5wcmljZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKSl9PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imluc3RhdGUgJHtyLmJvb2tlZHx8ci5pblRyaXA/InllcyI6Im5vIn0iPiR7ci5ib29rZWQ/YEJvb2tlZCDCtyAke2Moci5ib29rZWQpfWA6ci5pblRyaXA/IkluIHRoZSB0cmlwIjoiUGxhbiBvbmx5In08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj5gKS5qb2luKCIiKX08L2Rpdj5gLChlLmRyb3BwZWQ/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImVyciI+JHtlLmRyb3BwZWQubWFwKG49PmAke2Mobi5uYW1lKX06ICR7YyhuLndoeSl9YCkuam9pbigiPGJyPiIpfTwvZGl2PmA6IiJdLmpvaW4oIiIpfSxWZT1lPT57aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm47ZS50b29sTmFtZXMmJihvZj1lLnRvb2xOYW1lcyksZS5icmFuZCYmKG90PVN0cmluZyhlLmJyYW5kKSksZS5sb2dvVXJsJiYoWHI9U3RyaW5nKGUubG9nb1VybCkpLHR5cGVvZiBlLmRlbW89PSJib29sZWFuIiYmKHJmPWUuZGVtbyksZS5kZW1vTm90ZSYmKHNmPVN0cmluZyhlLmRlbW9Ob3RlKSksdHlwZW9mIGUucm9vbXNfd2FudGVkPT0ibnVtYmVyIiYmKFk9ZS5yb29tc193YW50ZWQpLGUudmlldz09PSJtZW1iZXIiJiZlLm1lbWJlcj8udGllcj8ubmFtZT9YPWUubWVtYmVyOmUubWVtYmVyPy50aWVyPy5uYW1lJiYoWD1YPy5wcm9ncmFtbWU9PT1lLm1lbWJlci5wcm9ncmFtbWUmJlg/LnRpZXI/Lm5hbWU9PT1lLm1lbWJlci50aWVyLm5hbWU/ey4uLlgsLi4uZS5tZW1iZXJ9OmUubWVtYmVyKSwoZS52aWV3PT09InNpZ25lZC1vdXQifHxlLnNpZ25lZEluPT09ITEpJiYoWD1udWxsKSxlLnN0YXk/LmNoZWNrSW4mJiFMdCYmKFQ9e2NoZWNrSW46ZS5zdGF5LmNoZWNrSW4sY2hlY2tPdXQ6ZS5zdGF5LmNoZWNrT3V0LGd1ZXN0czplLnN0YXkuZ3Vlc3RzPz8yfSksIUVjJiYoZS52aWV3PT09InRyaXAifHxlLnZpZXc9PT0ibmVlZHMtZGF0ZXMiKSYmKHB0PWUubGluZXM/P1tdKSwoZS52aWV3PT09ImJvb2tpbmcifHxlLnZpZXc9PT0iZW1wdHktdHJpcCIpJiYocHQ9W10sVnQ9MCksRmU9U3RyaW5nKGUudmlldz8/IiIpLFF5KCk7Y29uc3QgdD1kZSgiYnJhbmQiKTtYcj8odC5zcmM9WHIsdC5oaWRkZW49ITEsZGUoInRpdGxlIikuaGlkZGVuPSEwKToodC5oaWRkZW49ITAsZGUoInRpdGxlIikuaGlkZGVuPSExLGRlKCJ0aXRsZSIpLnRleHRDb250ZW50PW90fHwiSG90ZWxzIiksZGUoInN1YiIpLnRleHRDb250ZW50PUFfKGUpLFpfKCksUl8oKTtjb25zdCBuPXtob3RlbHM6ZF8sZGVzdGluYXRpb25zOnNfLCJuby1ob3RlbHMiOnBfLGhvdGVsOnd1LCJuby1yb29tcyI6d3UsImhvdGVsLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhhdCBob3RlbCBpcyBub3QgaW4gdGhpcyBjb25uZWN0b3IuPC9kaXY+JyxleHRyYXM6bV8sdHJpcDpiXywibmVlZHMtZGF0ZXMiOk9fLGJvb2tpbmc6JF8sIm5lZWRzLWd1ZXN0Ijp5XyxtZW1iZXI6X18sIm1lbWJlci1ub3QtZm91bmQiOmtfLCJzaWduZWQtb3V0IjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5TaWduZWQgb3V0LiBSYXRlcyBhcmUgdGhlIHB1YmxpYyBvbmVzIGFnYWluLjwvZGl2PjxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJob21lIj5GaW5kIGEgaG90ZWw8L2J1dHRvbj48L2Rpdj4nLCJlbXB0eS10cmlwIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGVyZSBpcyBub3RoaW5nIGluIHRoZSB0cmlwIHlldC48L2Rpdj4nLGJvb2tpbmdzOlBfLCJjYW5jZWxsYXRpb24tcHJldmlldyI6enUsY2FuY2VsbGVkOnp1LCJjaGFuZ2UtcHJldmlldyI6VHUsY2hhbmdlZDpUdSwiYm9va2luZy1ub3QtZm91bmQiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmcgaGVyZSBtYXRjaGVzIHRoYXQgY29kZS48L2Rpdj4nLGNvbXBhcmlzb246eF8sIm5vdGhpbmctdG8tY29tcGFyZSI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+Tm9uZSBvZiB0aG9zZSBhcmUgaG90ZWxzIHRoaXMgY29ubmVjdG9yIGtub3dzLjwvZGl2PicsaXRpbmVyYXJ5OkNfLCJlbXB0eS1pdGluZXJhcnkiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPkFuIGl0aW5lcmFyeSBuZWVkcyBhdCBsZWFzdCBvbmUgZGF5LjwvZGl2PicscG9saWN5OmVzLHBvbGljaWVzOmVzLCJwb2xpY3ktbWlzc2luZyI6ZXMsZXJyb3I6U18sImZpbmQtYm9va2luZyI6KCk9PltlZSgpLCc8ZGl2IGNsYXNzPSJub3RlIj5BIGJvb2tpbmcgbWFkZSBpbiBhbm90aGVyIGNvbnZlcnNhdGlvbiBpcyBmb3VuZCB3aXRoIHRoZSBjb25maXJtYXRpb24gY29kZSBhbmQgdGhlIGVtYWlsIGl0IHdhcyBtYWRlIHdpdGggLSBib3RoLCBhcyB0aGV5IGFyZSBvbiB0aGUgY29uZmlybWF0aW9uLjwvZGl2PicsYDxkaXYgY2xhc3M9ImZvcm0iPgogICAgICAgICAgIDxkaXYgY2xhc3M9InR3byI+CiAgICAgICAgICAgICA8bGFiZWw+Q29uZmlybWF0aW9uIGNvZGU8aW5wdXQgaWQ9ImZjb2RlIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlNMLeKApiI+PC9sYWJlbD4KICAgICAgICAgICAgIDxsYWJlbD5FbWFpbDxpbnB1dCBpZD0iZm1haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IlRoZSBvbmUgb24gdGhlIGJvb2tpbmciPjwvbGFiZWw+CiAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9Imxvb2t1cC1ib29raW5nIj5GaW5kIGl0PC9idXR0b24+CiAgICAgICAgIDwvZGl2PmBdLmpvaW4oIiIpLCJuby1tZW1iZXIiOigpPT5gPGRpdiBjbGFzcz0iZW1wdHkiPk5vYm9keSBpcyBzaWduZWQgaW4sIHNvIHRoZXJlIGlzIG5vdGhpbmcgc2F2ZWQgdG8gZm9yZ2V0LjwvZGl2PiR7em8oITApfWAsIm1lbWJlci1zaWduLWluIjooKT0+W2VlKCksJzxkaXYgY2xhc3M9Im5vdGUiPlNpZ24gaW4gd2l0aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIHByaW50ZWQgb24gdGhlIGNhcmQgdG8gc2VlIHRoZSBtZW1iZXIgcmF0ZSBvbiBldmVyeSBwcmljZSBoZXJlLjwvZGl2Picsem8oITApXS5qb2luKCIiKX07KEZlPT09ImhvdGVsInx8RmU9PT0ibm8tcm9vbXMifHxGZT09PSJuZWVkcy1kYXRlcyIpJiZlLmhvdGVsPy5pZD8ocXQ9U3RyaW5nKGUuaG90ZWwuaWQpLGUubmVlZHNEYXRlcyYmc2V0VGltZW91dCgoKT0+S3IoKSwwKSk6KHF0PSIiLFJjKCkpLFc9ZTtjb25zdCBvPW5bRmVdO2RlKCJjb250ZW50IikuaW5uZXJIVE1MPShvP28oZSk6YDxkaXYgY2xhc3M9ImVyciI+JHtjKGUuZXJyb3I/PyJTb21ldGhpbmcgY2FtZSBiYWNrIHRoYXQgdGhpcyBjYXJkIGRvZXMgbm90IGtub3cgaG93IHRvIGRyYXcuIil9JHtlLmRldGFpbD9gPGJyPiR7YyhlLmRldGFpbCl9YDoiIn08L2Rpdj5gKStFXyhlKX0sRV89ZT0+e2NvbnN0IHQ9ISFPZS5nZXRIb3N0Q2FwYWJpbGl0aWVzKCk/Lm1lc3NhZ2Usbj0oZS5zdWdnZXN0aW9ucz8/W10pLm1hcCgobyxyKT0+bz8uYXNrP2A8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtc3VnZ2VzdD0iJHtyfSI+JHtjKG8ubGFiZWwpfTwvYnV0dG9uPmA6bz8uc2F5JiZ0P2A8YnV0dG9uIGNsYXNzPSJjaGlwIHNheSIgdHlwZT0iYnV0dG9uIiBkYXRhLXN1Z2dlc3Q9IiR7cn0iPiR7YyhvLmxhYmVsKX0gPHNtYWxsPsK3IGluIHRoZSBjaGF0PC9zbWFsbD48L2J1dHRvbj5gOiIiKS5qb2luKCIiKTtyZXR1cm4gbj9gPGRpdiBjbGFzcz0ic3VnZ2VzdCI+JHtufTwvZGl2PmA6IiJ9LE9fPWU9PltlZSgpLGUuaG90ZWw/dWYoZS5ob3RlbCk6IiIsYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUud2h5Pz8iV2hpY2ggbmlnaHRzPyBBIHJvb20gbmVlZHMgYSBjaGVjay1pbiBhbmQgYSBjaGVjay1vdXQgZGF0ZS4iKX08L2Rpdj5gLGNmKFN0cmluZyhlLmhvdGVsPy5pZD8/IiIpLGUuaG90ZWw/LnRvZGF5VGhlcmUpXS5qb2luKCIiKSxBXz1lPT5lLnZpZXc9PT0iaG90ZWxzIj9gJHtlLnRvdGFsPz8wfSAke051bWJlcihlLnRvdGFsKT09PTE/ImhvdGVsIjoiaG90ZWxzIn1gOmUudmlldz09PSJob3RlbCJ8fGUudmlldz09PSJuby1yb29tcyI/TGUoZS5zdGF5KTplLnZpZXc9PT0idHJpcCI/KGUubGluZXM/P1tdKS5sZW5ndGg/U3RyaW5nKGUudG90YWw/PyIiKToiIjplLnZpZXc9PT0iY29tcGFyaXNvbiI/YCR7KGUuY29sdW1ucz8/W10pLmxlbmd0aH0gc2lkZSBieSBzaWRlYDplLnZpZXc9PT0iaXRpbmVyYXJ5Ij9OdW1iZXIoZS5ib29rZWQpPjA/YCR7ZS5ib29rZWR9LyR7ZS5wbGFubmVkfSBib29rZWRgOmAke2UuaW5UcmlwfS8ke2UucGxhbm5lZH0gaW4gdGhlIHRyaXBgOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIixSXz0oKT0+e2NvbnN0IGU9ZGUoIm1lbWJlcmNoaXAiKTtYPyhlLmhpZGRlbj0hMSxlLnRleHRDb250ZW50PWAke1gudGllcj8ubmFtZT8/Ik1lbWJlciJ9IMK3ICR7TWF0aC5yb3VuZCgoWC50aWVyPy5kaXNjb3VudD8/MCkqMTAwKX0lIG9mZmAsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwibWVtYmVyIiksZS5zZXRBdHRyaWJ1dGUoInRpdGxlIixgJHtYLm5hbWV9IMK3ICR7WC5wcm9ncmFtbWV9YCkpOihlLmhpZGRlbj1GZT09PSJtZW1iZXItbm90LWZvdW5kIixlLnRleHRDb250ZW50PSJNZW1iZXIgc2lnbiBpbiIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtYWN0IiwiYXNrLXNpZ24taW4iKSxlLnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKSl9LFpfPSgpPT57Y29uc3QgZT1kZSgiaGVhZHRyaXAiKSx0PUVjP1Z0OlZ0fHxwdC5sZW5ndGg7ZS5oaWRkZW49dD09PTB8fEZlPT09InRyaXAiLGRlKCJoZWFkdHJpcG4iKS50ZXh0Q29udGVudD1TdHJpbmcodCl9LE5fPSgpPT57Y29uc3QgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2kiKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbyIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1Iik7VD17Y2hlY2tJbjplPy52YWx1ZT8/VC5jaGVja0luLGNoZWNrT3V0OnQ/LnZhbHVlPz9ULmNoZWNrT3V0LGd1ZXN0czpOdW1iZXIobj8udmFsdWU/P1QuZ3Vlc3RzKXx8Mn19LHBvPShlPXt9KT0+VC5jaGVja0luJiZULmNoZWNrT3V0P3tjaGVja0luOlQuY2hlY2tJbixjaGVja091dDpULmNoZWNrT3V0LGd1ZXN0czpULmd1ZXN0cywuLi5lfTplO2xldCBncyxMdD0hMTtjb25zdCBSYz0oKT0+e2NsZWFyVGltZW91dChncyksTHQ9ITF9LEtyPShlPTApPT57cXQmJihjbGVhclRpbWVvdXQoZ3MpLEx0PSEwLGdzPXNldFRpbWVvdXQoKCk9PntpZighcXQpe0x0PSExO3JldHVybn1pZihYbil7S3IoMTUwKTtyZXR1cm59THQ9ITEsQigiZ2V0SG90ZWwiLHtob3RlbDpxdCxyb29tczpZLC4uLnBvKCl9KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IGxvYWQgdGhvc2UgbmlnaHRzLiIpKX0sZSkpfSxNPWU9PntkZSgiY29udGVudCIpLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYDxkaXYgY2xhc3M9ImVyciI+JHtjKGUpfTwvZGl2PmApfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQ/LmNsb3Nlc3QoIltkYXRhLWhvdGVsXSxbZGF0YS1hY3RdLFtkYXRhLXBvbGljeV0sW2RhdGEtY2FuY2VsXSxbZGF0YS1jb25maXJtLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jaGFuZ2VdLFtkYXRhLWV4dHJhc10sW2RhdGEtcm9vbXMtbl0sW2RhdGEtYXNrXSxbZGF0YS1ib29raW5nLWV4dHJhc10sW2RhdGEtYm9va2luZy1leHRyYV0sW2RhdGEtc3VnZ2VzdF0sW2RhdGEtcGxhY2VdLFtkYXRhLXBsYWNlLWFsbF0sW2RhdGEtc29ydF0sW2RhdGEtbGlzdC1yb29tc10iKTtpZighdClyZXR1cm47Y29uc3Qgbj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hc2siKTtpZihuIT09bnVsbCl7Y29uc3Qgdz10LmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0idHJ1ZSI7dC5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsU3RyaW5nKHcpKTtjb25zdCB6PXZfW25dO3cmJnomJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5hc2tbZGF0YS1hc2s9IiR7en0iXWApPy5zZXRBdHRyaWJ1dGUoImFyaWEtcHJlc3NlZCIsImZhbHNlIik7cmV0dXJufWNvbnN0IG89dC5nZXRBdHRyaWJ1dGUoImRhdGEtbGlzdC1yb29tcyIpO2lmKG8hPT1udWxsKXtZPU1hdGgubWluKHZ1LE1hdGgubWF4KDEsWStOdW1iZXIobykpKTtjb25zdCB3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJscm4iKTt3JiYody50ZXh0Q29udGVudD1TdHJpbmcoWSkpLFRvKDQ1MCk7cmV0dXJufWNvbnN0IHI9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcm9vbXMtbiIpO2lmKHIhPT1udWxsKXtOXygpLFk9TWF0aC5taW4odnUsTWF0aC5tYXgoMSxZK051bWJlcihyKSkpO2NvbnN0IHc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJuIik7dyYmKHcudGV4dENvbnRlbnQ9U3RyaW5nKFkpKTtjb25zdCB6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTt6JiYoei50ZXh0Q29udGVudD1KcigpKSxLcig0NTApO3JldHVybn1jb25zdCBzPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1yb29tIik7aWYocyE9PW51bGwpe2NvbnN0IHc9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsej1OdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSxOPXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/e2NoZWNrSW46dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKT8/IiIsY2hlY2tPdXQ6dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKT8/IiIsZ3Vlc3RzOk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1ndSIpPz8yKX06cG8oKTtCKCJhZGRUb1RyaXAiLHtob3RlbDp3LHJvb206cyxyb29tczp6LC4uLk59KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGk9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWRkLWV4dHJhIik7aWYoaSE9PW51bGwpe0IoImFkZFRvVHJpcCIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLGV4dHJhOmkscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSl9KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IGNoYW5nZSB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGE9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGxhY2UiKTtpZihhIT09bnVsbCl7Y29uc3Qgdz1XPy5hc2s/LnNvcnQsej1XPy52aWV3PT09ImhvdGVscyI/Vz8uYXNrPy5xdWVyeTp2b2lkIDA7YnMoKTtjb25zdCBOPVc/LnZpZXc9PT0iZGVzdGluYXRpb25zInx8ISFXPy5zdGF5Py5jaGVja0luO0IoImxpc3RIb3RlbHMiLHsuLi5hP3tjaXR5OmF9Ont9LC4uLnc/e3NvcnQ6d306e30sLi4uYSYmej97cXVlcnk6en06e30sLi4uTj9EdCgpOnt9fSkuY2F0Y2goKCk9Pk0oIkNvdWxkIG5vdCBsb2FkIHRob3NlIGhvdGVscy4iKSk7cmV0dXJufWNvbnN0IHU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtc29ydCIpO2lmKHUhPT1udWxsKXtjb25zdHtzb3J0OncsLi4uen09Vz8uYXNrPz97fTtCKCJsaXN0SG90ZWxzIix7Li4ueiwuLi51IT09Imdyb3VwIj97c29ydDp1fTp7fX0pLmNhdGNoKCgpPT5NKCJDb3VsZCBub3QgcmVvcmRlciB0aGUgbGlzdC4iKSk7cmV0dXJufWNvbnN0IGw9dC5nZXRBdHRyaWJ1dGUoImRhdGEtcGxhY2UtYWxsIik7aWYobCE9PW51bGwpe0IoImxpc3RIb3RlbHMiLHtjaXR5OmwsYWxsOiEwLC4uLkR0KCl9KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IGxvYWQgdGhvc2UgaG90ZWxzLiIpKTtyZXR1cm59Y29uc3QgZD10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhcyIpO2lmKGQhPT1udWxsKXtCKCJsaXN0RXh0cmFzIix7Ym9va2luZzpkfSkuY2F0Y2goKCk9Pk0oIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3QgbT10LmdldEF0dHJpYnV0ZSgiZGF0YS1ib29raW5nLWV4dHJhIik7aWYobSE9PW51bGwpe0IoInByZXZpZXdDaGFuZ2UiLHtib29raW5nOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWJvb2tpbmciKT8/IiIsZXh0cmE6bSxxdWFudGl0eTpOdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKX0pLmNhdGNoKCgpPT5NKCJDb3VsZCBub3Qgd29yayBvdXQgdGhhdCBjaGFuZ2UuIikpO3JldHVybn1jb25zdCBiPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKGIhPT1udWxsKXtCKCJsaXN0RXh0cmFzIix7aG90ZWw6YiwuLi5wbygpfSkuY2F0Y2goKCk9Pk0oIkNvdWxkIG5vdCBsb2FkIHRoZSBhZGQtb25zLiIpKTtyZXR1cm59Y29uc3Qgdj10LmdldEF0dHJpYnV0ZSgiZGF0YS1wb2xpY3kiKTtpZih2IT09bnVsbCl7QigicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzp2fSkuY2F0Y2goKCk9Pk0oIkNvdWxkIG5vdCBsb2FkIHRoYXQgcG9saWN5LiIpKTtyZXR1cm59Y29uc3QgXz10LmdldEF0dHJpYnV0ZSgiZGF0YS1jYW5jZWwiKTtpZihfIT09bnVsbCl7QigicHJldmlld0NhbmNlbGxhdGlvbiIse2Jvb2tpbmc6X30pLmNhdGNoKCgpPT5NKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0IGs9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZihrIT09bnVsbCl7QigiY2FuY2VsQm9va2luZyIse2Jvb2tpbmc6ayxjb25maXJtZWQ6ITB9KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IGNhbmNlbCB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCAkPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvbmZpcm0tY2hhbmdlIik7aWYoJCE9PW51bGwpe2NvbnN0IHc9Vz8udG8/P3t9LHo9Vz8uZnJvbT8/e30sTj1XPy5hZGRPbixzZT13LmNoZWNrSW4mJih3LmNoZWNrSW4hPT16LmNoZWNrSW58fHcuY2hlY2tPdXQhPT16LmNoZWNrT3V0KTtCKCJjaGFuZ2VCb29raW5nIix7Ym9va2luZzokLGNvbmZpcm1lZDohMCwuLi5zZT97Y2hlY2tJbjp3LmNoZWNrSW4sY2hlY2tPdXQ6dy5jaGVja091dH06e30sLi4uTj8uaWQ/e2V4dHJhOk4uaWQscXVhbnRpdHk6TnVtYmVyKE4udG8pfTp7fSwuLi53LnJvb21zIT09dm9pZCAwJiZOdW1iZXIody5yb29tcykhPT1OdW1iZXIoei5yb29tcyk/e3Jvb21zOk51bWJlcih3LnJvb21zKX06e30sLi4udy5yb29tTmFtZSYmdy5yb29tTmFtZSE9PXoucm9vbU5hbWU/e3Jvb206dy5yb29tTmFtZX06e319KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IGNoYW5nZSB0aGF0IGJvb2tpbmcuIikpO3JldHVybn1jb25zdCBJPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFjdCIpO2lmKEk9PT0iYmFjayIpe2NvbnN0IHc9emUuYXQoLTEpO2lmKCF3fHxYbilyZXR1cm47emU9emUuc2xpY2UoMCwtMSksJG8rPTEsUmMoKTtjb25zdCB6PXcudmVyc2lvbj09PXdvP3ZvaWQgMDpLeSh3LnBheWxvYWQpO3o/KFc9dy5wYXlsb2FkLEIoei5rZXksei5hcmdzLHtwdXNoOiExfSkuY2F0Y2goKCk9PlZlKHcucGF5bG9hZCkpKTpWZSh3LnBheWxvYWQpO3JldHVybn1pZihJPT09Im1vcmUtcGxhY2VzIil7Zm9yKGNvbnN0IHcgb2YodC5jbG9zZXN0KCIucGxhY2VzIik/P2RvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKCIuY2hpcC5wbGFjZVtoaWRkZW5dIikpdy5oaWRkZW49ITE7dC5yZW1vdmUoKTtyZXR1cm59aWYoST09PSJhbGwtaG90ZWxzIil7YnMoKSxCKCJsaXN0SG90ZWxzIix7YWxsOiEwLC4uLkR0KCl9KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IGxvYWQgdGhlIGhvdGVscy4iKSk7cmV0dXJufWlmKEk9PT0icHJpY2UtbGlzdCIpe1RvKDApO3JldHVybn1pZihJPT09ImZpbmQtYm9va2luZyIpe2NvbnN0IHc9e3ZpZXc6ImZpbmQtYm9va2luZyJ9O2xvKHcpLFZlKHcpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmY29kZSIpPy5mb2N1cygpO3JldHVybn1pZihJPT09Imxvb2t1cC1ib29raW5nIil7Y29uc3Qgdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmNvZGUiKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCF3fHwhei5pbmNsdWRlcygiQCIpKXtNKCJCb3RoIHRoZSBjb25maXJtYXRpb24gY29kZSBhbmQgdGhlIGVtYWlsIHRoZSBib29raW5nIHdhcyBtYWRlIHdpdGgsIHBsZWFzZS4iKTtyZXR1cm59QigibGlzdEJvb2tpbmdzIix7Ym9va2luZzp3LGVtYWlsOnp9KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IGxvb2sgdGhhdCB1cC4iKSk7cmV0dXJufWlmKEk9PT0iZmluZCIpe2RmKCk7cmV0dXJufWlmKEk9PT0ibW9yZS1ob3RlbHMiKXtjb25zdCB3PVc7aWYoIXd8fHcudmlldyE9PSJob3RlbHMiKXJldHVybjtCKCJsaXN0SG90ZWxzIix7Li4udy5hc2s/P3t9LG9mZnNldDoody5ob3RlbHM/P1tdKS5sZW5ndGgsbGltaXQ6MjB9LHtmb2xkOno9Pno/LnZpZXc9PT0iaG90ZWxzIj97Li4ueixob3RlbHM6Wy4uLncuaG90ZWxzPz9bXSwuLi56LmhvdGVscz8/W11dLHNob3duOih3LmhvdGVscz8/W10pLmxlbmd0aCsoei5ob3RlbHM/P1tdKS5sZW5ndGgsb2Zmc2V0OjAscGxhY2VzOncucGxhY2VzfTp6fSkuY2F0Y2goKCk9Pk0oIkNvdWxkIG5vdCBsb2FkIG1vcmUgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJob21lIil7QigibGlzdEhvdGVscyIse30pLmNhdGNoKCgpPT5NKCJDb3VsZCBub3QgbG9hZCB0aGUgaG90ZWxzLiIpKTtyZXR1cm59aWYoST09PSJtZW1iZXIiKXtpZighWClyZXR1cm47Y29uc3Qgdz17dmlldzoibWVtYmVyIixtZW1iZXI6WH07bG8odyksVmUodyk7cmV0dXJufWlmKEk9PT0iYXNrLXNpZ24taW4iKXtjb25zdCB3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaWduaW4iKTtpZih3KXcuaGlkZGVuPSExO2Vsc2V7Y29uc3Qgej17dmlldzoibWVtYmVyLXNpZ24taW4ifTtsbyh6KSxWZSh6KX1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibW51bSIpPy5mb2N1cygpO3JldHVybn1pZihJPT09InNpZ24taW4iKXtjb25zdCB3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtbnVtIik/LnZhbHVlLnRyaW0oKT8/IiIsej1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXN1ciIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCF3fHwheil7TSgiQm90aCB0aGUgbWVtYmVyc2hpcCBudW1iZXIgYW5kIHRoZSBzdXJuYW1lIG9uIGl0LCBwbGVhc2UuIik7cmV0dXJufUIoInNpZ25JbiIse251bWJlcjp3LHN1cm5hbWU6en0pLmNhdGNoKCgpPT5NKCJDb3VsZCBub3Qgc2lnbiBpbi4iKSk7cmV0dXJufWlmKEk9PT0iZm9yZ2V0LXByZWZzIil7QigiZm9yZ2V0UHJlZmVyZW5jZXMiLHt9KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IGZvcmdldCB0aGVtLiIpKTtyZXR1cm59Y29uc3QgUj10LmdldEF0dHJpYnV0ZSgiZGF0YS1zdWdnZXN0Iik7aWYoUiE9PW51bGwpe2NvbnN0IHc9KFc/LnN1Z2dlc3Rpb25zPz9bXSlbTnVtYmVyKFIpXTt3Py5hc2s/LnRvb2w/QihTdHJpbmcody5hc2sudG9vbCksdy5hc2suYXJncz8/e30pLmNhdGNoKCgpPT5NKCJDb3VsZCBub3QgZG8gdGhhdCBqdXN0IG5vdy4iKSk6dz8uc2F5JiZPZS5zZW5kTWVzc2FnZSh7cm9sZToidXNlciIsY29udGVudDpbe3R5cGU6InRleHQiLHRleHQ6U3RyaW5nKHcuc2F5KX1dfSkuY2F0Y2goKCk9Pk0oIkNvdWxkIG5vdCBzZW5kIHRoYXQgdG8gdGhlIGNoYXQuIikpO3JldHVybn1pZihJPT09InNpZ24tb3V0Iil7WD1udWxsLEIoInNpZ25PdXQiLHt9KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IHNpZ24gb3V0LiIpKTtyZXR1cm59aWYoST09PSJhc2stYm9vayIpe2NvbnN0IHc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1ZXN0Iik7dyYmKHcuaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8uZm9jdXMoKTtyZXR1cm59aWYoST09PSJib29rIil7Y29uc3Qgdz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIix6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLE49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdub3RlIik/LnZhbHVlLnRyaW0oKT8/IiIsc2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd0aW1lIik/LnZhbHVlLnRyaW0oKT8/IiIsVWU9Wy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hc2tbYXJpYS1wcmVzc2VkPSJ0cnVlIl0nKV0ubWFwKFp0PT5adC5kYXRhc2V0LmFzaz8/IiIpLFJ0PSEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyZW1lbWJlciIpPy5jaGVja2VkO2lmKFNlPXtuYW1lOncsZW1haWw6eixub3RlczpOLGFycml2aW5nQXQ6c2UscmVxdWVzdHM6VWUscmVtZW1iZXI6UnR9LCF3fHwhei5pbmNsdWRlcygiQCIpKXtNKHc/J1RoYXQgZW1haWwgaGFzIG5vICJAIiBpbiBpdCAtIHRoZSBjb25maXJtYXRpb24gbmVlZHMgYW4gYWRkcmVzcyBpdCBjYW4gcmVhY2guJzoiVGhlIGJvb2tpbmcgbmVlZHMgYSBuYW1lIGFuZCBhbiBlbWFpbCB0byBzZW5kIHRoZSBjb25maXJtYXRpb24gdG8uIik7cmV0dXJufUIoInJlcXVlc3RCb29raW5nIix7bmFtZTp3LGVtYWlsOnosLi4uTj97bm90ZXM6Tn06e30sLi4uc2U/e2Fycml2aW5nQXQ6c2V9Ont9LC4uLlVlLmxlbmd0aD97cmVxdWVzdHM6VWV9Ont9LC4uLlJ0P3tyZW1lbWJlclJlcXVlc3RzOiEwfTp7fX0pLmNhdGNoKCgpPT5NKCJDb3VsZCBub3QgYXNrIGZvciB0aG9zZSByb29tcy4iKSk7cmV0dXJufWlmKEk9PT0iYm9va2luZ3MiKXtCKCJsaXN0Qm9va2luZ3MiLHt9KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IGxvYWQgeW91ciBib29raW5ncy4iKSk7cmV0dXJufWlmKEk9PT0idHJpcCIpe0IoInZpZXdUcmlwIix7fSkuY2F0Y2goKCk9Pk0oIkNvdWxkIG5vdCBsb2FkIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3QgSj10LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpO2lmKEope2NvbnN0IHc9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKSx6PXQuZ2V0QXR0cmlidXRlKCJkYXRhLWNvIik7dyYmeiYmKFQuY2hlY2tJbj13LFQuY2hlY2tPdXQ9eiksQigiZ2V0SG90ZWwiLHtob3RlbDpKLC4uLnBvKCl9KS5jYXRjaCgoKT0+TSgiQ291bGQgbm90IGxvYWQgdGhhdCBob3RlbC4iKSl9fSk7Y29uc3QgZGY9KCk9Pntjb25zdCBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3aGVyZSIpPy52YWx1ZS50cmltKCk/PyIiO2lmKCFlKXtNKCJXaGVyZSB0bz8gQSBjaXR5LCBhIGNvdW50cnkgb3IgYSBob3RlbC4iKTtyZXR1cm59YnMoKTtjb25zdCBuPShXPy5yZWdpb25zPz9bXSkuZmxhdE1hcChvPT4oby5jb3VudHJpZXM/P1tdKS5mbGF0TWFwKHI9PltyLm5hbWUsLi4uKHIuY2l0aWVzPz9bXSkubWFwKHM9PnMubmFtZSldKSkuZmluZChvPT5vLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCkpO0IoImxpc3RIb3RlbHMiLHsuLi5uP3tjaXR5Om59OntxdWVyeTplfSwuLi5EdCgpfSkuY2F0Y2goKCk9Pk0oIkNvdWxkIG5vdCBzZWFyY2gganVzdCBub3cuIikpfSxicz0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjaSIpLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRjbyIpO2U/LnZhbHVlJiYoVC5jaGVja0luPWUudmFsdWUpLHQ/LnZhbHVlJiYoVC5jaGVja091dD10LnZhbHVlKX07bGV0IEl1O2NvbnN0IFRvPShlPTApPT57Y2xlYXJUaW1lb3V0KEl1KSxJdT1zZXRUaW1lb3V0KCgpPT57aWYoVz8udmlldz09PSJob3RlbHMiKXtpZihYbil7VG8oMTUwKTtyZXR1cm59QigibGlzdEhvdGVscyIsey4uLmNfKFcuYXNrKSwuLi5EdCgpfSkuY2F0Y2goKCk9Pk0oIkNvdWxkIG5vdCBwcmljZSB0aG9zZSBuaWdodHMuIikpfX0sZSl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGU9PntpZihlLnRhcmdldD8uaWQ9PT0id2hlcmUiJiZlLmtleT09PSJFbnRlciIpe2UucHJldmVudERlZmF1bHQoKSxkZigpO3JldHVybn1jb25zdCB0PWUudGFyZ2V0OyF0fHx0LmdldEF0dHJpYnV0ZSgicm9sZSIpIT09ImJ1dHRvbiJ8fGUua2V5IT09IkVudGVyIiYmZS5rZXkhPT0iICJ8fChlLnByZXZlbnREZWZhdWx0KCksdC5jbGljaygpKX0pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZT0+e2NvbnN0IHQ9ZS50YXJnZXQsbz17ZGNpOlsiZGNpIiwiZGNvIl0sZGNvOlsiZGNpIiwiZGNvIl0sbGNpOlsibGNpIiwibGNvIl0sbGNvOlsibGNpIiwibGNvIl19W3Q/LmlkPz8iIl07aWYobyl7Y29uc3QgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChvWzBdKSx1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9bMV0pO2lmKCFhfHwhdSlyZXR1cm47aWYodC5pZD09PW9bMF0mJmEudmFsdWUpe2NvbnN0IGw9TWUoYS52YWx1ZSwxKTt1Lm1pbj1sLCghdS52YWx1ZXx8dS52YWx1ZTw9YS52YWx1ZSkmJih1LnZhbHVlPWwpfVQuY2hlY2tJbj1hLnZhbHVlfHxULmNoZWNrSW4sVC5jaGVja091dD11LnZhbHVlfHxULmNoZWNrT3V0LG9bMF09PT0ibGNpIiYmVG8oMzAwKTtyZXR1cm59aWYodD8uaWQhPT0iY2kiJiZ0Py5pZCE9PSJjbyIpcmV0dXJuO2NvbnN0IHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIikscz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKTtpZighcnx8IXMpcmV0dXJuO2lmKHQuaWQ9PT0iY2kiJiZyLnZhbHVlKXtjb25zdCBhPU1lKHIudmFsdWUsMSk7cy5taW49YSwoIXMudmFsdWV8fHMudmFsdWU8PXIudmFsdWUpJiYocy52YWx1ZT1hKX1ULmNoZWNrSW49ci52YWx1ZXx8VC5jaGVja0luLFQuY2hlY2tPdXQ9cy52YWx1ZXx8VC5jaGVja091dDtjb25zdCBpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuaWdodHMiKTtpJiYoaS50ZXh0Q29udGVudD1KcigpKSxLcigpfSk7Y29uc3QgcGY9KGUsdCk9Pnt0cnl7YWYodCk7Y29uc3Qgbj1lP0pTT04uc3RyaW5naWZ5KGUpOiIiO2lmKG4mJm49PT1mcyYmSlNPTi5zdHJpbmdpZnkoVyk9PT1mcylyZXR1cm47emU9W10sJG8rPTEsUmMoKSxWZShlKX1jYXRjaChuKXtjb25zb2xlLmVycm9yKCJbY2FyZF0gcmVuZGVyIGZhaWxlZCIsbiksZGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGlzIGNhcmQgY291bGQgbm90IGJlIGRyYXduLiBBc2sgYWdhaW4gaW4gdGhlIGNoYXQuPC9kaXY+J319O09lLm9udG9vbHJlc3VsdD1lPT5wZihlPy5zdHJ1Y3R1cmVkQ29udGVudCxlPy5fbWV0YSk7T2Uub25ob3N0Y29udGV4dGNoYW5nZWQ9ZT0+dGYoZSxuZik7T2UuY29ubmVjdCgpLnRoZW4oKCk9Pntjb25zdCBlPU9lLmdldEhvc3RDb250ZXh0KCk7dGYoZSxuZik7Y29uc3QgdD1lPy50b29sSW5mbz8ucmVzdWx0Py5zdHJ1Y3R1cmVkQ29udGVudDt0JiZwZih0LGU/LnRvb2xJbmZvPy5yZXN1bHQ/Ll9tZXRhKX0pLmNhdGNoKCgpPT57ZGUoImNvbnRlbnQiKS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImVtcHR5Ij5Db3VsZCBub3QgY29ubmVjdCB0byB0aGUgaG9zdC48L2Rpdj4nfSk7PC9zY3JpcHQ+CiAgICA8c3R5bGUgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbj46cm9vdHstLWtpdC1iZzogI2ZmZmZmZjstLWtpdC1iZy1zb2Z0OiAjZjZmN2Y5Oy0ta2l0LWZnOiAjMWExZjJiOy0ta2l0LWZnLXNvZnQ6ICM2MjZiN2E7LS1raXQtZmctZmFpbnQ6ICM4YTkzYTE7LS1raXQtbGluZTogI2UzZTdlZDstLWtpdC1hY2NlbnQ6ICMxYTFmMmI7LS1raXQtYWNjZW50LWZnOiAjZmZmZmZmOy0ta2l0LWxpbms6ICMyNTYzZWI7LS1raXQtZ29vZDogIzFhN2Y1YTstLWtpdC1nb29kLWJnOiAjZGRmM2U0Oy0ta2l0LWJhZDogI2IzMjYxZTstLWtpdC1iYWQtYmc6ICNmYmU2ZTQ7LS1raXQtd2FybjogIzhhNWEwMDstLWtpdC13YXJuLWJnOiAjZmRmMGQ1Oy0ta2l0LXJpbmc6ICMyNTYzZWJ9W2RhdGEtdGhlbWU9ZGFya117LS1raXQtYmc6ICMxZDFmMjM7LS1raXQtYmctc29mdDogIzI2MjkyZTstLWtpdC1mZzogI2VjZWVmMTstLWtpdC1mZy1zb2Z0OiAjYTRhYmI2Oy0ta2l0LWZnLWZhaW50OiAjN2M4NDkxOy0ta2l0LWxpbmU6ICMzNjNhNDE7LS1raXQtYWNjZW50OiAjZWNlZWYxOy0ta2l0LWFjY2VudC1mZzogIzFkMWYyMzstLWtpdC1saW5rOiAjN2FhN2ZmOy0ta2l0LWdvb2Q6ICM2ZmQzYTI7LS1raXQtZ29vZC1iZzogIzFmM2EyZDstLWtpdC1iYWQ6ICNmZjhhODA7LS1raXQtYmFkLWJnOiAjM2QyMzIyOy0ta2l0LXdhcm46ICNmMmM0NmI7LS1raXQtd2Fybi1iZzogIzNhMzAyMDstLWtpdC1yaW5nOiAjN2FhN2ZmfTpyb290ey0tYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtcHJpbWFyeSwgdmFyKC0ta2l0LWJnKSk7LS1iZy1zb2Z0OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXNlY29uZGFyeSwgdmFyKC0ta2l0LWJnLXNvZnQpKTstLWZnOiB2YXIoLS1jb2xvci10ZXh0LXByaW1hcnksIHZhcigtLWtpdC1mZykpOy0tZmctc29mdDogdmFyKC0tY29sb3ItdGV4dC1zZWNvbmRhcnksIHZhcigtLWtpdC1mZy1zb2Z0KSk7LS1mZy1mYWludDogdmFyKC0tY29sb3ItdGV4dC10ZXJ0aWFyeSwgdmFyKC0ta2l0LWZnLWZhaW50KSk7LS1saW5lOiB2YXIoLS1jb2xvci1ib3JkZXItcHJpbWFyeSwgdmFyKC0ta2l0LWxpbmUpKTstLWFjY2VudDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50KSk7LS1hY2NlbnQtZmc6IHZhcigtLWNvbG9yLXRleHQtaW52ZXJzZSwgdmFyKC0ta2l0LWFjY2VudC1mZykpOy0tbGluazogdmFyKC0tY29sb3ItdGV4dC1pbmZvLCB2YXIoLS1raXQtbGluaykpOy0tZ29vZDogdmFyKC0tY29sb3ItdGV4dC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZCkpOy0tZ29vZC1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1zdWNjZXNzLCB2YXIoLS1raXQtZ29vZC1iZykpOy0tYmFkOiB2YXIoLS1jb2xvci10ZXh0LWRhbmdlciwgdmFyKC0ta2l0LWJhZCkpOy0tYmFkLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWRhbmdlciwgdmFyKC0ta2l0LWJhZC1iZykpOy0td2FybjogdmFyKC0tY29sb3ItdGV4dC13YXJuaW5nLCB2YXIoLS1raXQtd2FybikpOy0td2Fybi1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nLCB2YXIoLS1raXQtd2Fybi1iZykpOy0tcmluZzogdmFyKC0tY29sb3ItcmluZy1wcmltYXJ5LCB2YXIoLS1raXQtcmluZykpOy0tcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxnLCAxNHB4KTstLXJhZGl1cy1zbTogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbSwgOXB4KTstLWZvbnQ6IHZhcigtLWZvbnQtc2Fucywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAiU2Vnb2UgVUkiLCBSb2JvdG8sIHNhbnMtc2VyaWYpOy0tbW9ubzogdmFyKC0tZm9udC1tb25vLCB1aS1tb25vc3BhY2UsICJTRiBNb25vIiwgTWVubG8sIG1vbm9zcGFjZSk7LS1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbSwgMCAxcHggMnB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSwgMCAycHggNXB4IHJnYmEoMTAsIDIwLCA0MCwgLjA0KSl9Kntib3gtc2l6aW5nOmJvcmRlci1ib3h9Ym9keXttYXJnaW46MDtmb250LWZhbWlseTp2YXIoLS1mb250KTtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfS5jYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JveC1zaGFkb3c6dmFyKC0tc2hhZG93KTttYXgtd2lkdGg6NTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctbGVmdDp2YXIoLS1pbnNldC1sZWZ0LCAwcHgpO3BhZGRpbmctcmlnaHQ6dmFyKC0taW5zZXQtcmlnaHQsIDBweCl9LmhlYWR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O3BhZGRpbmc6MTRweCAxOHB4IDB9LmhlYWQgLnRpdGxle2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsZXR0ZXItc3BhY2luZzotLjAxZW19LmhlYWQgLnRpdGxlW2hpZGRlbl17ZGlzcGxheTpub25lfSNjb250ZW50e3BhZGRpbmc6MTBweCAxOHB4IDE4cHh9LnJlZnJlc2h7bWFyZ2luLWxlZnQ6OHB4O2FsaWduLXNlbGY6Y2VudGVyO2ZsZXg6bm9uZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMTJzLGNvbG9yIC4xMnN9LnJlZnJlc2g6aG92ZXI6bm90KDpkaXNhYmxlZCl7Y29sb3I6dmFyKC0tZmcpO2JvcmRlci1jb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmVmcmVzaDpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi42fS5yZWZyZXNoW2hpZGRlbl17ZGlzcGxheTpub25lfS5yZWZyZXNoIHN2Z3t3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2Rpc3BsYXk6YmxvY2t9LnJlZnJlc2guYnVzeSBzdmd7YW5pbWF0aW9uOmtpdC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyBraXQtc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5lbXB0eXtwYWRkaW5nOjE4cHggMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTNweH0uaGludHttYXJnaW4tdG9wOjhweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWFsaWduOmNlbnRlcn0ubm90ZXtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3BhZGRpbmc6MCAwIDEwcHh9Lm1vbm97Zm9udC1mYW1pbHk6dmFyKC0tbW9ubyk7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1mYWludCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzozcHggOXB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjExLjVweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5iYWRnZS5va3tjb2xvcjp2YXIoLS1nb29kKTtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpfS5iYWRnZS53YXJuLC5iYWRnZS50b2Rve2NvbG9yOnZhcigtLXdhcm4pO2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyl9LmJhZGdlLmVycntjb2xvcjp2YXIoLS1iYWQpO2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKX0uYnV5e21hcmdpbi10b3A6MTRweDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6NDRweDtwYWRkaW5nOjExcHggMTRweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWFjY2VudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjY1MDtjdXJzb3I6cG9pbnRlcn0uYnV5OmRpc2FibGVke2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLWNvbG9yOnZhcigtLWxpbmUpO2NvbG9yOnZhcigtLWZnLWZhaW50KTtjdXJzb3I6ZGVmYXVsdH0uYnV5LmFsdCwuZ2hvc3R7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKX0uZ2hvc3R7ZmxleDoxO21pbi1oZWlnaHQ6NDBweDtwYWRkaW5nOjlweCAxMHB4O2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtjdXJzb3I6cG9pbnRlcn0ubGlua3tib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzo2cHggMCAwO2NvbG9yOnZhcigtLWxpbmspO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ucXR5e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjJweH0ucXR5IGJ1dHRvbnt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtmb250LWZhbWlseTp2YXIoLS1mb250KTtmb250LXNpemU6MTdweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyfS5xdHkgc3BhbnttaW4td2lkdGg6MjZweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MH1idXR0b246Zm9jdXMtdmlzaWJsZSxhOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tcmluZyk7b3V0bGluZS1vZmZzZXQ6MnB4fUBtZWRpYShtYXgtd2lkdGg6NDMwcHgpey5jYXJke2JvcmRlci1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0uaGVhZHtwYWRkaW5nOjEycHggMTRweCAwfSNjb250ZW50e3BhZGRpbmc6OHB4IDE0cHggMTRweH0uYnV5e21pbi1oZWlnaHQ6NDhweDtmb250LXNpemU6MTVweH0uZ2hvc3R7bWluLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMy41cHh9LnF0eSBidXR0b257d2lkdGg6NDJweDtoZWlnaHQ6NDJweDtmb250LXNpemU6MTlweH0ucmVmcmVzaHt3aWR0aDozNHB4O2hlaWdodDozNHB4fS5oaW50LC5ub3RlLC5lbXB0eXtmb250LXNpemU6MTNweH19QG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246bm9uZX0qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fVtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9I2NvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0uaGVhZHttaW4taGVpZ2h0OjI4cHh9LmhvbWV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbjowO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO21pbi13aWR0aDowfS5ob21lOmhvdmVye29wYWNpdHk6LjcyfS5oZWFkIC5icmFuZHttYXgtaGVpZ2h0OjM0cHg7bWF4LXdpZHRoOjE1MHB4O29iamVjdC1maXQ6Y29udGFpbn0uaGVhZCAudGl0bGV7Zm9udC13ZWlnaHQ6NjUwO2ZvbnQtc2l6ZToxNXB4O2xldHRlci1zcGFjaW5nOi0uMDFlbX0uYmFja2J0bntib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzo0cHggMTFweCA0cHggOHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwO21heC13aWR0aDo0MiU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y3Vyc29yOnBvaW50ZXJ9LmJhY2tidG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZyl9LmhlYWQgLnN1Yntjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTIuNXB4O21hcmdpbi1pbmxpbmUtc3RhcnQ6YXV0bzt0ZXh0LWFsaWduOmVuZH0uaGVhZHRyaXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6NXB4IDExcHggNXB4IDlweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXJ9LmhlYWR0cmlwOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9LmhlYWQgLnN1YisuaGVhZHRyaXB7bWFyZ2luLWlubGluZS1zdGFydDowfS5jYXJkLmJ1c3l7b3BhY2l0eTouNjJ9LmNhcmQuYnVzeSBidXR0b24sLmNhcmQuYnVzeSBpbnB1dCwuY2FyZC5idXN5IHNlbGVjdHtwb2ludGVyLWV2ZW50czpub25lfS5tZW1iZXJjaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmctc29mdCk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMHB4O2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYyMDt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXJ9Lm1lbWJlcmNoaXA6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KX0ubGlua3l7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO3BhZGRpbmc6MDtmb250OmluaGVyaXQ7Y29sb3I6dmFyKC0tbGluayk7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ucC13YXN7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS5wLW1lbWJlcntmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5zdW0uZ29vZCBzcGFuOmxhc3QtY2hpbGR7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uZGVtb3tkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40NX0uZGVtbyBie2ZvbnQtd2VpZ2h0OjcwMH0uY2l0eWdyb3VwKy5jaXR5Z3JvdXB7bWFyZ2luLXRvcDoxNHB4fS5jaXR5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1ib3R0b206OHB4fS5jaXR5bmFtZSBzbWFsbHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDA7b3BhY2l0eTouNzV9LnRpbGVze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KGF1dG8tZmlsbCxtaW5tYXgoMTk2cHgsMWZyKSk7Z2FwOjEwcHh9LnRpbGV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDp2YXIoLS1iZyk7dGV4dC1hbGlnbjpzdGFydDtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjB9LnRpbGU6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLWZhaW50KX0udC1zaG90e3Bvc2l0aW9uOnJlbGF0aXZlO2FzcGVjdC1yYXRpbzoxNiAvIDEwO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTQwZGVnLHZhcigtLXNob3QtYSksdmFyKC0tc2hvdC1iKSk7Y29sb3I6I2ZmZn0udC1zaG90IGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0udC1tYXJre2ZvbnQtc2l6ZTozMHB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDRlbTtvcGFjaXR5Oi45Mjt0ZXh0LXNoYWRvdzowIDFweCAxMnB4IHJnYigwIDAgMCAvIDIyJSk7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS50LXNob3QgaW1nLC5oZXJvIGltZ3t6LWluZGV4OjF9LnQtYnJhbmR7ei1pbmRleDoyO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0LWJsb2NrLXN0YXJ0OjhweDtpbnNldC1pbmxpbmUtc3RhcnQ6OHB4O2JhY2tncm91bmQ6IzAwMDAwMDYxO2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAyZW19LnQtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7cGFkZGluZzoxMHB4IDExcHggMTFweH0udC1uYW1le2ZvbnQtd2VpZ2h0OjY0MDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuMztkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDoyO2xpbmUtY2xhbXA6Mjstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVuO21pbi1oZWlnaHQ6Mi42ZW19LnQtd2hlcmV7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnQtZm9vdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjhweDttYXJnaW4tdG9wOjJweH0udC1mcm9te2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY1MH0udC1mcm9tIHNtYWxse2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtmb250LXNpemU6MTFweH0ucmF0ZXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6M3B4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5yYXRlIHN2Z3tjb2xvcjojZThhMzNkfS5oZXJve3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6MTRweDtvdmVyZmxvdzpoaWRkZW47YXNwZWN0LXJhdGlvOjIxIC8gODtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmZ9Lmhlcm8gLnQtbWFya3tmb250LXNpemU6NDBweH0uaC1uYW1le2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjY4MDtsZXR0ZXItc3BhY2luZzotLjAxNWVtO2xpbmUtaGVpZ2h0OjEuMjV9Lmgtd2hlcmV7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweH0uaC1zdW17Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS41NTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHh9LmNoaXB7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDlweDtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5zdGF5e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDExMnB4LDFmcikgbWlubWF4KDExMnB4LDFmcikgYXV0byAxZnI7Z2FwOjhweDthbGlnbi1pdGVtczplbmQ7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4fS5zdGF5IGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdGF5IGlucHV0LC5zdGF5IHNlbGVjdHtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo3cHggNnB4O21pbi13aWR0aDowO3dpZHRoOjEwMCV9LnN0ZXAubGlnaHR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7cGFkZGluZzoycHh9LnN0ZXAubGlnaHQgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCl9Lm5pZ2h0c3tmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtwYWRkaW5nLWJvdHRvbTo4cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGF5IC5nb3t3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5cHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjY1MDtmb250LXNpemU6MTNweDtwYWRkaW5nOjhweCAxNHB4O2N1cnNvcjpwb2ludGVyfS5zdGF5IC5nb1tkaXNhYmxlZF17b3BhY2l0eTouNTtjdXJzb3I6ZGVmYXVsdH0uZmxleC1kYXRlc3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtvdmVyZmxvdy14OmF1dG87cGFkZGluZzoycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW47LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmZke2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4O21pbi13aWR0aDo3OHB4O3BhZGRpbmc6N3B4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQ6aW5oZXJpdDt0ZXh0LWFsaWduOmxlZnQ7Y3Vyc29yOnBvaW50ZXJ9LmZkOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5mZC1kYXl7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtO2NvbG9yOnZhcigtLWZnLXNvZnQpO3doaXRlLXNwYWNlOm5vd3JhcH0uZmQtcHJpY2V7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo2NTA7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZmQub257YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Y3Vyc29yOmRlZmF1bHR9LmZkLm9uIC5mZC1kYXl7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtvcGFjaXR5Oi44NX0uZmQuYmVzdHtib3JkZXItY29sb3I6dmFyKC0tZ29vZCk7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKX0uZmQuYmVzdCAuZmQtcHJpY2UsLmZkLmJlc3QgLmZkLWRheXtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1nb29kKSA3OCUsYmxhY2spfS5mZC5vdXQgLmZkLXByaWNle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtd2VpZ2h0OjUwMH0udGh1bWJ7Z3JpZC1hcmVhOnRodW1iO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czoxMHB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE0MGRlZyx2YXIoLS1zaG90LWEpLHZhcigtLXNob3QtYikpO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2ZsZXg6MCAwIGF1dG99LnRodW1iIGltZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb3Zlcn0ubGVnc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LmxlZ3tib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjlweCAxMXB4fS5sZWcud2Fze29wYWNpdHk6LjcyfS5sZWcud2FzIC5sZWd2e3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9LmxlZ2t7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ubGVndntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NDA7bWFyZ2luLXRvcDoycHh9LmxlZ217Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjJweH0ucm93c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHh9LnJvd3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBwcmljZSBhY3Rpb24iO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHggMTFweH0ucm93LndpdGh0aHVtYntncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgcHJpY2UgYWN0aW9uIn0ucm93IC5ib2R5e2dyaWQtYXJlYTpib2R5O21pbi13aWR0aDowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweH0ucm93IC5uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwO2xpbmUtaGVpZ2h0OjEuM30ucm93IC5tZXRhe2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS40O2Rpc3BsYXk6LXdlYmtpdC1ib3g7LXdlYmtpdC1saW5lLWNsYW1wOjM7bGluZS1jbGFtcDozOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDtvdmVyZmxvdzpoaWRkZW59LnJvdyAucHJpY2V7Z3JpZC1hcmVhOnByaWNlO3RleHQtYWxpZ246ZW5kO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ucm93IC5wLXRvdGFse2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjYwfS5yb3cgLnAtdW5pdHtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucm93IC5hY3Rpb257Z3JpZC1hcmVhOmFjdGlvbn0uYmFkZ2Vze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O21hcmdpbi10b3A6MnB4fS5iYWRnZXtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6MnB4IDhweDtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5iYWRnZS5nb29ke2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uYmFkZ2Uud2FybntiYWNrZ3JvdW5kOnZhcigtLXdhcm4tYmcpO2NvbG9yOnZhcigtLXdhcm4pfS5iYWRnZS5iYWR7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpO2NvbG9yOnZhcigtLWJhZCl9LmFkZHtkaXNwbGF5OmlubGluZS1ncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjt3aWR0aDozOHB4O2hlaWdodDozOHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0fS5hZGQ6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCl9LmFkZFtkaXNhYmxlZF17b3BhY2l0eTouNDtjdXJzb3I6ZGVmYXVsdH0uc3RlcHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHh9LnN0ZXAgYnV0dG9ue3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo5OTlweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnN0ZXAgYnV0dG9uOmhvdmVye2JhY2tncm91bmQ6I2ZmZmZmZjJlfS5zdGVwIC5ue21pbi13aWR0aDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjY4MDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRheXtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMDVlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tZmctc29mdCk7bWFyZ2luOjEycHggMCA2cHh9LnN1bXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpO21hcmdpbi10b3A6MTJweDtwYWRkaW5nLXRvcDoxMHB4O2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uc3Vte2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdW0udG90YWx7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZm9vdHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4fS5nb3tmbGV4OjE7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoxMXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2ODA7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoxMnB4IDE2cHg7Y3Vyc29yOnBvaW50ZXJ9LmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41NTtjdXJzb3I6ZGVmYXVsdH0uZ28ucXVpZXR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo2MjB9LmdvLmRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWJhZCk7Y29sb3I6dmFyKC0tYmcpfS5ub3Rle2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7bGluZS1oZWlnaHQ6MS41fS5mb3Jte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjExcHg7bWFyZ2luLXRvcDoxMHB4fS5mb3JtIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5mb3JtIGlucHV0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjhweCA5cHh9LmZvcm0gLnR3b3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjhweH0uY29uZntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6MTZweCAxMnB4fS5jb25mIC5jb2Rle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjcyMDtsZXR0ZXItc3BhY2luZzouMDZlbTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbmYgLndoZXJle2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjIwfS5jb25mIC53aGVue2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnVucGFpZHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnVucGFpZCBie2ZvbnQtd2VpZ2h0OjcyMH0ud2Fybm5vdGV7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKTtjb2xvcjp2YXIoLS13YXJuKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzo5cHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNX0udGlsZS5vdmVye29wYWNpdHk6LjgyfS5hc2tlZC1saW5le2ZvbnQtc3R5bGU6aXRhbGljfS5hc2tlZHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYXNrZWQgYntmb250LXdlaWdodDo3MjA7Y29sb3I6dmFyKC0tZmcpfS5hc2tlZC5mbGFne2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLXdhcm4pfS5hc2tlZC5mbGFnIGJ7Y29sb3I6dmFyKC0td2Fybil9LmFza3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5hc2tzLXR7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uY2hpcC5hc2t7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMS41cHh9LmNoaXAuYXNrW2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKX0ubW9uZXktb3V0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wcm9zZXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjY7Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6cHJlLXdyYXB9LnByb3NlIGg0e21hcmdpbjoxNHB4IDAgNHB4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZW1wdHl7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHg7cGFkZGluZzoxOHB4IDRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZXJye2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LnRpbGVze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNTBweCwxZnIpKTtnYXA6OHB4fS50LW1hcmt7Zm9udC1zaXplOjI0cHh9LnN0YXl7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnJ9LnN0YXkgLmd1ZXN0c3tncmlkLWNvbHVtbjoxfS5zdGVwLmxpZ2h0e2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmc6MnB4fS5zdGVwLmxpZ2h0IGJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5zdGF5IC5nb3tncmlkLWNvbHVtbjoyO3dpZHRoOjEwMCV9LnJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBhY3Rpb24iICJwcmljZSBhY3Rpb24iO3Jvdy1nYXA6NnB4fS5yb3cud2l0aHRodW1ie2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRodW1iIGJvZHkgYWN0aW9uIiAidGh1bWIgcHJpY2UgYWN0aW9uIn0ucm93LndpdGh0aHVtYiAudGh1bWJ7d2lkdGg6NDhweDtoZWlnaHQ6NDhweDthbGlnbi1zZWxmOnN0YXJ0fS5yb3cgLnByaWNle3RleHQtYWxpZ246c3RhcnR9LmZvcm0gLnR3b3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX0uY21wLXdyYXB7b3ZlcmZsb3cteDphdXRvO21hcmdpbi1pbmxpbmU6LTJweDtwYWRkaW5nOjJweH0uY21we2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWlubWF4KDc2cHgsOTZweCkgcmVwZWF0KHZhcigtLWNvbHMpLG1pbm1heCgxMTJweCwxZnIpKTthbGlnbi1pdGVtczpzdHJldGNoO2NvbHVtbi1nYXA6OHB4fS5jbXAtY29ybmVye2dyaWQtY29sdW1uOjF9LmNtcC1oZWFke2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO21pbi13aWR0aDowfS5jbXAtaGVhZC5waWNre2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4IHZhcigtLWFjY2VudCl9LmNtcC1oZWFkIC50LXNob3R7YXNwZWN0LXJhdGlvOjE2IC8gOTtib3JkZXI6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTAwJX0uY29sLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NnB4O3BhZGRpbmc6MTBweCAxMXB4IDEycHh9LmNvbC1uYW1le2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwO2xpbmUtaGVpZ2h0OjEuM30uY29sLXByaWNle2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmNvbC1wcmljZSBzbWFsbHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LndoeXtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtmb250LXN0eWxlOml0YWxpYztjb2xvcjp2YXIoLS1mZy1zb2Z0KTtib3JkZXItaW5saW5lLXN0YXJ0OjJweCBzb2xpZCB2YXIoLS1saW5lKTtwYWRkaW5nLWlubGluZS1zdGFydDo4cHh9LnBje2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjNweDtmb250LXNpemU6MTEuNXB4O2xpbmUtaGVpZ2h0OjEuNDV9LnBjIGRpdntkaXNwbGF5OmZsZXg7Z2FwOjVweH0ucGMgLm17ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo3MDB9LnBjIC5wcm8gLm17Y29sb3I6dmFyKC0tZ29vZCl9LnBjIC5jb24gLm17Y29sb3I6dmFyKC0tZmctc29mdCl9LmNtcCAuaywuY21wIC52e2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS40NTtwYWRkaW5nOjZweCA4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY21wIC5re2dyaWQtY29sdW1uOjE7Y29sb3I6dmFyKC0tZmctc29mdCk7cG9zaXRpb246c3RpY2t5O2luc2V0LWlubGluZS1zdGFydDowO2JhY2tncm91bmQ6dmFyKC0tYmcpfS5jbXAgLnZ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jbXAgLnYuYWx0LC5jbXAgLms6aGFzKCsudi5hbHQpe2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czo2cHh9LnBpY2ttYXJre2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtwYWRkaW5nOjNweCA4cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmRheXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MnB4fS5kYXlyb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoyOHB4IDFmcjtnYXA6MTBweH0uZGF5bnVte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo0cHh9LmRheW51bSBie2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5bnVtIGl7ZmxleDoxO3dpZHRoOjFweDtiYWNrZ3JvdW5kOnZhcigtLWxpbmUpfS5kYXlyb3c6bGFzdC1jaGlsZCAuZGF5bnVtIGl7ZGlzcGxheTpub25lfS5kYXlib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtwYWRkaW5nLWJvdHRvbToxNHB4O21pbi13aWR0aDowfS5kYXlsYWJlbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtsaW5lLWhlaWdodDoxLjN9LmRheW5vdGV7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6dmFyKC0tZmctc29mdCl9LnBsYW4taXRlbXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2dhcDo4cHg7YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHh9LnBsYW4taXRlbSAubmFtZXtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnBsYW4taXRlbSAubWV0YXtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uaW5zdGF0ZXtmb250LXNpemU6MTAuNXB4O2ZvbnQtd2VpZ2h0OjY1MDtib3JkZXItcmFkaXVzOjk5OXB4O3BhZGRpbmc6M3B4IDhweDt3aGl0ZS1zcGFjZTpub3dyYXB9Lmluc3RhdGUueWVze2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyk7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tZ29vZCkgNzglLGJsYWNrKX0uaW5zdGF0ZS5ub3tiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5nYXB7ZGlzcGxheTpmbGV4O2dhcDo4cHg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjEwcHggMTFweDtmb250LXNpemU6MTIuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uZ2FwIGJ7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtd2VpZ2h0OjcwMH1AbWVkaWEobWF4LXdpZHRoOjQ2MHB4KXsuY21we2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoNjhweCw4NHB4KSByZXBlYXQodmFyKC0tY29scyksbWlubWF4KDEwOHB4LDFmcikpfX0uc3VnZ2VzdHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweDttYXJnaW4tdG9wOjE0cHh9LnN1Z2dlc3QgLmNoaXB7Y3Vyc29yOnBvaW50ZXI7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6NXB4IDExcHg7Y29sb3I6dmFyKC0tZmcpfS5zdWdnZXN0IC5jaGlwOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5zdWdnZXN0IC5jaGlwOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LmZvcm0gbGFiZWwucmVtZW1iZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmb250LXdlaWdodDo0MDA7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O21hcmdpbi10b3A6MTBweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTt0ZXh0LXRyYW5zZm9ybTpub25lO2xldHRlci1zcGFjaW5nOjB9LmZvcm0gbGFiZWwucmVtZW1iZXIgaW5wdXR7bWFyZ2luOjJweCAwIDB9LnBsYWNlc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjZweH0uY2hpcC5wbGFjZXtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEycHg7cGFkZGluZzo0cHggMTBweDtjb2xvcjp2YXIoLS1mZyl9LmNoaXAucGxhY2Ugc21hbGx7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5jaGlwLnBsYWNlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpfS5jaGlwLnBsYWNlOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdmFyKC0tYWNjZW50KTtvdXRsaW5lLW9mZnNldDoycHh9LnN1Z2dlc3QgLmNoaXAuc2F5IHNtYWxse2NvbG9yOnZhcigtLWZnLXNvZnQpfS5maW5kZXJ7ZGlzcGxheTpmbGV4O2dhcDo4cHh9LmZpbmRlciBpbnB1dHtmbGV4OjE7bWluLXdpZHRoOjA7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OXB4IDEycHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpfS5maW5kZXIgaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjFweH0ucmVnaW9ue2Rpc3BsYXk6Z3JpZDtnYXA6MTBweH0uY291bnRyeW5hbWV7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wNGVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1zb2Z0KTttYXJnaW4tdG9wOjZweH0uY291bnRyeW5hbWUgc21hbGx7Zm9udC13ZWlnaHQ6NTAwO2xldHRlci1zcGFjaW5nOjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5kZXN0e2Rpc3BsYXk6Z3JpZDtnYXA6NnB4O3BhZGRpbmctYm90dG9tOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbGluZSl9LmRlc3Q6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOjB9LmRlc3QtY291bnRyeXtqdXN0aWZ5LXNlbGY6c3RhcnQ7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDpub25lO2JvcmRlcjowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmxlZnR9LmRlc3QtY291bnRyeSBzbWFsbHtmb250LXdlaWdodDo0MDA7Y29sb3I6dmFyKC0tZmctc29mdCl9LmRlc3QtY291bnRyeSAubntmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LmRlc3QtY291bnRyeTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5kZXN0LWNvdW50cnk6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1hY2NlbnQpO291dGxpbmUtb2Zmc2V0OjJweH0uZmluZGVyIC5nb3tmbGV4Om5vbmU7cGFkZGluZzo5cHggMThweDtmb250LXNpemU6MTNweH0uc29ydHMta3thbGlnbi1zZWxmOmNlbnRlcjtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjA0ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpO21hcmdpbi1yaWdodDoycHh9LmNoaXAuc29ydFthcmlhLXByZXNzZWQ9dHJ1ZV17YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2JvcmRlci1jb2xvcjp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyl9LnNlYXJjaHtkaXNwbGF5OmdyaWQ7Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjEwcHh9LnNlYXJjaCAuc3RheXtwYWRkaW5nOjA7YmFja2dyb3VuZDpub25lfS5zZWFyY2ggLndoZXJle2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo2NTA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zZWFyY2ggLndoZXJlIGlucHV0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpub25lO2xldHRlci1zcGFjaW5nOjA7Y29sb3I6dmFyKC0tZmcpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzo5cHggMTFweH0uc2VhcmNoIC53aGVyZSBpbnB1dDpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MXB4fS5zZWFyY2ggLnN0YXkgLmdve3BhZGRpbmc6OXB4IDE0cHg7Zm9udC1zaXplOjEzcHh9LnQtdGFnc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjRweDttYXJnaW4tdG9wOjRweH0udC1mcm9tLnQtbm9uZXtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEycHh9LnN0YXkgLmdvLnF1aWV0e3BhZGRpbmc6OHB4IDEycHg7Zm9udC1zaXplOjEyLjVweH08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+CiAgICAgICAgPCEtLSBUaGUgd2F5IGJhY2ssIG9uIGV2ZXJ5IHZpZXcuIFdpdGhvdXQgaXQgdGhlIHRyaXAsIHRoZSBib29raW5ncyBsaXN0CiAgICAgICAgICAgICBhbmQgYSBjYW5jZWxsZWQgYm9va2luZyBhcmUgYWxsIHBsYWNlcyBhIGd1ZXN0IGNhbiByZWFjaCBhbmQgbm90CiAgICAgICAgICAgICBsZWF2ZSAocm9iaW4sIDIwMjYtMDktMTgpLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJob21lIiBpZD0iaG9tZSIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iaG9tZSIgYXJpYS1sYWJlbD0iQmFjayB0byB0aGUgaG90ZWxzIj4KICAgICAgICAgIDxpbWcgY2xhc3M9ImJyYW5kIiBpZD0iYnJhbmQiIGFsdD0iIiBoaWRkZW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGl0bGUiIGlkPSJ0aXRsZSI+PC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwhLS0gT25lIHN0ZXAgYmFjayBJTlNJREUgdGhlIGNhcmQuIFRoZSBicmFuZCBhYm92ZSBnb2VzIGhvbWUsIHdoaWNoIGlzIGEKICAgICAgICAgICAgIGRpZmZlcmVudCBhbnN3ZXI7IHRoaXMgY29tZXMgYmFjayB0byB0aGUgb25lIHRoZXkgd2VyZSByZWFkaW5nIC0gdGhlCiAgICAgICAgICAgICB0aHJlZSBob3RlbHMgdGhleSB3ZXJlIGNvbXBhcmluZyB3aGVuIHRoZXkgdGFwcGVkIG9uZSAocm9iaW4sCiAgICAgICAgICAgICAyMDI2LTA5LTIxKS4gSGlkZGVuIHVubGVzcyB0aGVyZSBpcyBzb21ld2hlcmUgdG8gZ28gYmFjayB0bywgYW5kCiAgICAgICAgICAgICBjbGVhcmVkIHdoZW5ldmVyIHRoZSBjb252ZXJzYXRpb24gc2VuZHMgYSBuZXcgYW5zd2VyLiAtLT4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJiYWNrYnRuIiBpZD0iYmFja2J0biIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0iYmFjayIgaGlkZGVuPjwvYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdWIiIGlkPSJzdWIiPjwvc3Bhbj4KICAgICAgICA8IS0tIFRoZSB0aWVyLCBvciB0aGUgd2F5IGluLiBBIG1lbWJlciByYXRlIGlzIGEgZmFjdCBhYm91dCBldmVyeSBwcmljZQogICAgICAgICAgICAgb24gdGhlIGNhcmQsIHNvIGl0IGJlbG9uZ3MgaW4gdGhlIGhlYWRlciByYXRoZXIgdGhhbiBvbiBvbmUgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibWVtYmVyY2hpcCIgaWQ9Im1lbWJlcmNoaXAiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImFzay1zaWduLWluIj48L2J1dHRvbj4KICAgICAgICA8IS0tIFRoZSB0cmlwLCBmcm9tIHRoZSB0b3AuIFRoZSBzaG9wcGluZyBjYXJkIGxlYXJuZWQgb24gMjAyNi0wOS0xNyB0aGF0CiAgICAgICAgICAgICBhIGZvb3Rlci1vbmx5IGNhcnQgbWVhbnMgc2Nyb2xsaW5nIHBhc3QgdHdlbnR5IHRpbGVzIHRvIHJlYWNoIGl0LgogICAgICAgICAgICAgU2hvd24gb25jZSB0aGUgdHJpcCBoYXMgc29tZXRoaW5nIGluIGl0LCBoaWRkZW4gb24gdGhlIHRyaXAgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVhZHRyaXAiIGlkPSJoZWFkdHJpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCIgaGlkZGVuIGFyaWEtbGFiZWw9IlZpZXcgdGhlIHRyaXAiPgogICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiCiAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00IDguNWgxNnYxMWExLjUgMS41IDAgMCAxLTEuNSAxLjVoLTEzQTEuNSAxLjUgMCAwIDEgNCAxOS41eiIgLz4KICAgICAgICAgICAgPHBhdGggZD0iTTkgOC41VjZhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2Mi41IiAvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgICA8c3BhbiBpZD0iaGVhZHRyaXBuIj4wPC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iZW1wdHkiPkxvYWRpbmfigKY8L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogIDwvYm9keT4KPC9odG1sPgo=', '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 = '
|
|
7
|
+
export const HOTEL_CARD_SOURCE_SHA = 'a864c6bae64abc80947cd6c746c34518dabaca7a2ecb01a431f91bab6db0bce9';
|
|
8
8
|
//# sourceMappingURL=card.generated.js.map
|