{
  "formatVersion": 1,
  "experienceId": "steady-hands",
  "revision": 1,
  "minHostVersion": "0.1.0",
  "title": "Find Your Level",
  "subtitle": "A practical little tool for a steady frame.",
  "icon": "compass",
  "tint": "#BCE2DB",
  "runtime": "web",
  "tables": [],
  "seeds": [],
  "dataBindings": [],
  "capabilities": [
    "motion"
  ],
  "connections": [],
  "web": {
    "entry": "web/index.html"
  },
  "assets": [
    {
      "path": "web/runtime.js",
      "mediaType": "application/javascript",
      "data": "InVzZSBzdHJpY3QiO3ZhciBPbmVBcHBSdW50aW1lPSgoKT0+e3ZhciBKZT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIHhyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dmFyIEFyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO3ZhciBrcj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBDcj0ocyx0KT0+e2Zvcih2YXIgZSBpbiB0KUplKHMsZSx7Z2V0OnRbZV0sZW51bWVyYWJsZTohMH0pfSwkcj0ocyx0LGUscik9PntpZih0JiZ0eXBlb2YgdD09Im9iamVjdCJ8fHR5cGVvZiB0PT0iZnVuY3Rpb24iKWZvcihsZXQgaSBvZiBBcih0KSkha3IuY2FsbChzLGkpJiZpIT09ZSYmSmUocyxpLHtnZXQ6KCk9PnRbaV0sZW51bWVyYWJsZTohKHI9eHIodCxpKSl8fHIuZW51bWVyYWJsZX0pO3JldHVybiBzfTt2YXIgVHI9cz0+JHIoSmUoe30sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHMpO3ZhciByaT17fTtDcihyaSx7QnJvd3NlclN0b3JlOigpPT5qZSxwYXJzZVZpc2lvbkpTT046KCk9PlR0LHJlbmRlckV4cGVyaWVuY2U6KCk9Pkl0fSk7ZnVuY3Rpb24gSXIocyl7cmV0dXJuIHMhPT1udWxsP3tjb21tZW50OnMsdmFyaWF0aW9uczpbXX06e3ZhcmlhdGlvbnM6W119fWZ1bmN0aW9uIFByKHMsdCxlLHIsaSl7bGV0IG49e21vdmU6cyx2YXJpYXRpb25zOml9O3JldHVybiB0JiYobi5zdWZmaXg9dCksZSYmKG4ubmFnPWUpLHIhPT1udWxsJiYobi5jb21tZW50PXIpLG59ZnVuY3Rpb24gUnIoLi4ucyl7bGV0W3QsLi4uZV09cyxyPXQ7Zm9yKGxldCBpIG9mIGUpaSE9PW51bGwmJihyLnZhcmlhdGlvbnM9W2ksLi4uaS52YXJpYXRpb25zXSxpLnZhcmlhdGlvbnM9W10scj1pKTtyZXR1cm4gdH1mdW5jdGlvbiBOcihzLHQpe2lmKHQubWFya2VyJiZ0Lm1hcmtlci5jb21tZW50KXtsZXQgZT10LnJvb3Q7Zm9yKDs7KXtsZXQgcj1lLnZhcmlhdGlvbnNbMF07aWYoIXIpe2UuY29tbWVudD10Lm1hcmtlci5jb21tZW50O2JyZWFrfWU9cn19cmV0dXJue2hlYWRlcnM6cyxyb290OnQucm9vdCxyZXN1bHQ6KHQubWFya2VyJiZ0Lm1hcmtlci5yZXN1bHQpPz92b2lkIDB9fWZ1bmN0aW9uIExyKHMsdCl7ZnVuY3Rpb24gZSgpe3RoaXMuY29uc3RydWN0b3I9c31lLnByb3RvdHlwZT10LnByb3RvdHlwZSxzLnByb3RvdHlwZT1uZXcgZX1mdW5jdGlvbiBBZShzLHQsZSxyKXt2YXIgaT1FcnJvci5jYWxsKHRoaXMscyk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKGksQWUucHJvdG90eXBlKSxpLmV4cGVjdGVkPXQsaS5mb3VuZD1lLGkubG9jYXRpb249cixpLm5hbWU9IlN5bnRheEVycm9yIixpfUxyKEFlLEVycm9yKTtmdW5jdGlvbiBXZShzLHQsZSl7cmV0dXJuIGU9ZXx8IiAiLHMubGVuZ3RoPnQ/czoodC09cy5sZW5ndGgsZSs9ZS5yZXBlYXQodCkscytlLnNsaWNlKDAsdCkpfUFlLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24ocyl7dmFyIHQ9IkVycm9yOiAiK3RoaXMubWVzc2FnZTtpZih0aGlzLmxvY2F0aW9uKXt2YXIgZT1udWxsLHI7Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKylpZihzW3JdLnNvdXJjZT09PXRoaXMubG9jYXRpb24uc291cmNlKXtlPXNbcl0udGV4dC5zcGxpdCgvXHJcbnxcbnxcci9nKTticmVha312YXIgaT10aGlzLmxvY2F0aW9uLnN0YXJ0LG49dGhpcy5sb2NhdGlvbi5zb3VyY2UmJnR5cGVvZiB0aGlzLmxvY2F0aW9uLnNvdXJjZS5vZmZzZXQ9PSJmdW5jdGlvbiI/dGhpcy5sb2NhdGlvbi5zb3VyY2Uub2Zmc2V0KGkpOmksYT10aGlzLmxvY2F0aW9uLnNvdXJjZSsiOiIrbi5saW5lKyI6IituLmNvbHVtbjtpZihlKXt2YXIgbD10aGlzLmxvY2F0aW9uLmVuZCx3PVdlKCIiLG4ubGluZS50b1N0cmluZygpLmxlbmd0aCwiICIpLGs9ZVtpLmxpbmUtMV0sJD1pLmxpbmU9PT1sLmxpbmU/bC5jb2x1bW46ay5sZW5ndGgrMSxUPSQtaS5jb2x1bW58fDE7dCs9YAogLS0+IGArYStgCmArdytgIHwKYCtuLmxpbmUrIiB8ICIraytgCmArdysiIHwgIitXZSgiIixpLmNvbHVtbi0xLCIgIikrV2UoIiIsVCwiXiIpfWVsc2UgdCs9YAogYXQgYCthfXJldHVybiB0fTtBZS5idWlsZE1lc3NhZ2U9ZnVuY3Rpb24ocyx0KXt2YXIgZT17bGl0ZXJhbDpmdW5jdGlvbihrKXtyZXR1cm4nIicraShrLnRleHQpKyciJ30sY2xhc3M6ZnVuY3Rpb24oayl7dmFyICQ9ay5wYXJ0cy5tYXAoZnVuY3Rpb24oVCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoVCk/bihUWzBdKSsiLSIrbihUWzFdKTpuKFQpfSk7cmV0dXJuIlsiKyhrLmludmVydGVkPyJeIjoiIikrJC5qb2luKCIiKSsiXSJ9LGFueTpmdW5jdGlvbigpe3JldHVybiJhbnkgY2hhcmFjdGVyIn0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuImVuZCBvZiBpbnB1dCJ9LG90aGVyOmZ1bmN0aW9uKGspe3JldHVybiBrLmRlc2NyaXB0aW9ufX07ZnVuY3Rpb24gcihrKXtyZXR1cm4gay5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIGkoayl7cmV0dXJuIGsucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyIvZywnXFwiJykucmVwbGFjZSgvXDAvZywiXFwwIikucmVwbGFjZSgvXHQvZywiXFx0IikucmVwbGFjZSgvXG4vZywiXFxuIikucmVwbGFjZSgvXHIvZywiXFxyIikucmVwbGFjZSgvW1x4MDAtXHgwRl0vZyxmdW5jdGlvbigkKXtyZXR1cm4iXFx4MCIrcigkKX0pLnJlcGxhY2UoL1tceDEwLVx4MUZceDdGLVx4OUZdL2csZnVuY3Rpb24oJCl7cmV0dXJuIlxceCIrcigkKX0pfWZ1bmN0aW9uIG4oayl7cmV0dXJuIGsucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoL1xdL2csIlxcXSIpLnJlcGxhY2UoL1xeL2csIlxcXiIpLnJlcGxhY2UoLy0vZywiXFwtIikucmVwbGFjZSgvXDAvZywiXFwwIikucmVwbGFjZSgvXHQvZywiXFx0IikucmVwbGFjZSgvXG4vZywiXFxuIikucmVwbGFjZSgvXHIvZywiXFxyIikucmVwbGFjZSgvW1x4MDAtXHgwRl0vZyxmdW5jdGlvbigkKXtyZXR1cm4iXFx4MCIrcigkKX0pLnJlcGxhY2UoL1tceDEwLVx4MUZceDdGLVx4OUZdL2csZnVuY3Rpb24oJCl7cmV0dXJuIlxceCIrcigkKX0pfWZ1bmN0aW9uIGEoayl7cmV0dXJuIGVbay50eXBlXShrKX1mdW5jdGlvbiBsKGspe3ZhciAkPWsubWFwKGEpLFQsRTtpZigkLnNvcnQoKSwkLmxlbmd0aD4wKXtmb3IoVD0xLEU9MTtUPCQubGVuZ3RoO1QrKykkW1QtMV0hPT0kW1RdJiYoJFtFXT0kW1RdLEUrKyk7JC5sZW5ndGg9RX1zd2l0Y2goJC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gJFswXTtjYXNlIDI6cmV0dXJuICRbMF0rIiBvciAiKyRbMV07ZGVmYXVsdDpyZXR1cm4gJC5zbGljZSgwLC0xKS5qb2luKCIsICIpKyIsIG9yICIrJFskLmxlbmd0aC0xXX19ZnVuY3Rpb24gdyhrKXtyZXR1cm4gaz8nIicraShrKSsnIic6ImVuZCBvZiBpbnB1dCJ9cmV0dXJuIkV4cGVjdGVkICIrbChzKSsiIGJ1dCAiK3codCkrIiBmb3VuZC4ifTtmdW5jdGlvbiBPcihzLHQpe3Q9dCE9PXZvaWQgMD90Ont9O3ZhciBlPXt9LHI9dC5ncmFtbWFyU291cmNlLGk9e3Bnbjp1dH0sbj11dCxhPSJbIixsPSciJyx3PSJdIixrPSIuIiwkPSJPLU8tTyIsVD0iTy1PIixFPSIwLTAtMCIsQz0iMC0wIixEPSIkIixCPSJ7IixWPSJ9IixiZT0iOyIsQ2U9IigiLEhlPSIpIixTZT0iMS0wIixwZT0iMC0xIixSZT0iMS8yLTEvMiIsZD0iKiIsdT0vXlthLXpBLVpdLyxnPS9eW14iXS8seD0vXlswLTldLyx2PS9eWy5dLyx5PS9eW2EtekEtWjEtOFwtPV0vLFM9L15bKyNdLyxmPS9eWyE/XS8sYj0vXltefV0vLF89L15bXlxyXG5dLyxSPS9eWyBcdFxyXG5dLyxxPXNlKCJ0YWcgcGFpciIpLFE9SigiWyIsITEpLGo9SignIicsITEpLGhlPUooIl0iLCExKSxHPXNlKCJ0YWcgbmFtZSIpLEw9bGUoW1siYSIsInoiXSxbIkEiLCJaIl1dLCExLCExKSxLPXNlKCJ0YWcgdmFsdWUiKSxaPWxlKFsnIiddLCEwLCExKSxkZT1zZSgibW92ZSBudW1iZXIiKSx1ZT1sZShbWyIwIiwiOSJdXSwhMSwhMSksemU9SigiLiIsITEpLG50PWxlKFsiLiJdLCExLCExKSxSdD1zZSgic3RhbmRhcmQgYWxnZWJyYWljIG5vdGF0aW9uIiksTnQ9SigiTy1PLU8iLCExKSxMdD1KKCJPLU8iLCExKSxPdD1KKCIwLTAtMCIsITEpLE10PUooIjAtMCIsITEpLG90PWxlKFtbImEiLCJ6Il0sWyJBIiwiWiJdLFsiMSIsIjgiXSwiLSIsIj0iXSwhMSwhMSksRHQ9bGUoWyIrIiwiIyJdLCExLCExKSxxdD1zZSgic3VmZml4IGFubm90YXRpb24iKSxhdD1sZShbIiEiLCI/Il0sITEsITEpLEt0PXNlKCJOQUciKSxGdD1KKCIkIiwhMSksVXQ9c2UoImJyYWNlIGNvbW1lbnQiKSxCdD1KKCJ7IiwhMSksbHQ9bGUoWyJ9Il0sITAsITEpLGp0PUooIn0iLCExKSxIdD1zZSgicmVzdCBvZiBsaW5lIGNvbW1lbnQiKSx6dD1KKCI7IiwhMSksY3Q9bGUoWyJcciIsYApgXSwhMCwhMSksUXQ9c2UoInZhcmlhdGlvbiIpLEp0PUooIigiLCExKSxXdD1KKCIpIiwhMSksVnQ9c2UoImdhbWUgdGVybWluYXRpb24gbWFya2VyIiksR3Q9SigiMS0wIiwhMSksWXQ9SigiMC0xIiwhMSksWnQ9SigiMS8yLTEvMiIsITEpLFh0PUooIioiLCExKSxlcj1zZSgid2hpdGVzcGFjZSIpLGR0PWxlKFsiICIsIgkiLCJcciIsYApgXSwhMSwhMSksdHI9ZnVuY3Rpb24obyxwKXtyZXR1cm4gTnIobyxwKX0scnI9ZnVuY3Rpb24obyl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhvKX0saXI9ZnVuY3Rpb24obyxwKXtyZXR1cm5bbyxwXX0sc3I9ZnVuY3Rpb24obyxwKXtyZXR1cm57cm9vdDpvLG1hcmtlcjpwfX0sbnI9ZnVuY3Rpb24obyxwKXtyZXR1cm4gUnIoSXIobyksLi4ucC5mbGF0KCkpfSxvcj1mdW5jdGlvbihvLHAsaCxQLE4pe3JldHVybiBQcihvLHAsaCxQLE4pfSxhcj1mdW5jdGlvbihvKXtyZXR1cm4gb30sbHI9ZnVuY3Rpb24obyl7cmV0dXJuIG8ucmVwbGFjZSgvW1xyXG5dKy9nLCIgIil9LGNyPWZ1bmN0aW9uKG8pe3JldHVybiBvLnRyaW0oKX0sZHI9ZnVuY3Rpb24obyl7cmV0dXJuIG99LHByPWZ1bmN0aW9uKG8scCl7cmV0dXJue3Jlc3VsdDpvLGNvbW1lbnQ6cH19LGM9dC5wZWckY3VyclBvc3wwLEVlPVt7bGluZToxLGNvbHVtbjoxfV0sb2U9YyxOZT10LnBlZyRtYXhGYWlsRXhwZWN0ZWR8fFtdLEE9dC5wZWckc2lsZW50RmFpbHN8MCwkZTtpZih0LnN0YXJ0UnVsZSl7aWYoISh0LnN0YXJ0UnVsZSBpbiBpKSl0aHJvdyBuZXcgRXJyb3IoYENhbid0IHN0YXJ0IHBhcnNpbmcgZnJvbSBydWxlICJgK3Quc3RhcnRSdWxlKyciLicpO249aVt0LnN0YXJ0UnVsZV19ZnVuY3Rpb24gSihvLHApe3JldHVybnt0eXBlOiJsaXRlcmFsIix0ZXh0Om8saWdub3JlQ2FzZTpwfX1mdW5jdGlvbiBsZShvLHAsaCl7cmV0dXJue3R5cGU6ImNsYXNzIixwYXJ0czpvLGludmVydGVkOnAsaWdub3JlQ2FzZTpofX1mdW5jdGlvbiBocigpe3JldHVybnt0eXBlOiJlbmQifX1mdW5jdGlvbiBzZShvKXtyZXR1cm57dHlwZToib3RoZXIiLGRlc2NyaXB0aW9uOm99fWZ1bmN0aW9uIHB0KG8pe3ZhciBwPUVlW29dLGg7aWYocClyZXR1cm4gcDtpZihvPj1FZS5sZW5ndGgpaD1FZS5sZW5ndGgtMTtlbHNlIGZvcihoPW87IUVlWy0taF07KTtmb3IocD1FZVtoXSxwPXtsaW5lOnAubGluZSxjb2x1bW46cC5jb2x1bW59O2g8bzspcy5jaGFyQ29kZUF0KGgpPT09MTA/KHAubGluZSsrLHAuY29sdW1uPTEpOnAuY29sdW1uKyssaCsrO3JldHVybiBFZVtvXT1wLHB9ZnVuY3Rpb24gaHQobyxwLGgpe3ZhciBQPXB0KG8pLE49cHQocCksRj17c291cmNlOnIsc3RhcnQ6e29mZnNldDpvLGxpbmU6UC5saW5lLGNvbHVtbjpQLmNvbHVtbn0sZW5kOntvZmZzZXQ6cCxsaW5lOk4ubGluZSxjb2x1bW46Ti5jb2x1bW59fTtyZXR1cm4gRn1mdW5jdGlvbiBJKG8pe2M8b2V8fChjPm9lJiYob2U9YyxOZT1bXSksTmUucHVzaChvKSl9ZnVuY3Rpb24gdXIobyxwLGgpe3JldHVybiBuZXcgQWUoQWUuYnVpbGRNZXNzYWdlKG8scCksbyxwLGgpfWZ1bmN0aW9uIHV0KCl7dmFyIG8scCxoO3JldHVybiBvPWMscD1mcigpLGg9dnIoKSxvPXRyKHAsaCksb31mdW5jdGlvbiBmcigpe3ZhciBvLHAsaDtmb3Iobz1jLHA9W10saD1mdCgpO2ghPT1lOylwLnB1c2goaCksaD1mdCgpO3JldHVybiBoPXRlKCksbz1ycihwKSxvfWZ1bmN0aW9uIGZ0KCl7dmFyIG8scCxoLFAsTixGLF9lO3JldHVybiBBKyssbz1jLHRlKCkscy5jaGFyQ29kZUF0KGMpPT09OTE/KHA9YSxjKyspOihwPWUsQT09PTAmJkkoUSkpLHAhPT1lPyh0ZSgpLGg9Z3IoKSxoIT09ZT8odGUoKSxzLmNoYXJDb2RlQXQoYyk9PT0zND8oUD1sLGMrKyk6KFA9ZSxBPT09MCYmSShqKSksUCE9PWU/KE49bXIoKSxzLmNoYXJDb2RlQXQoYyk9PT0zND8oRj1sLGMrKyk6KEY9ZSxBPT09MCYmSShqKSksRiE9PWU/KHRlKCkscy5jaGFyQ29kZUF0KGMpPT09OTM/KF9lPXcsYysrKTooX2U9ZSxBPT09MCYmSShoZSkpLF9lIT09ZT9vPWlyKGgsTik6KGM9byxvPWUpKTooYz1vLG89ZSkpOihjPW8sbz1lKSk6KGM9byxvPWUpKTooYz1vLG89ZSksQS0tLG89PT1lJiZBPT09MCYmSShxKSxvfWZ1bmN0aW9uIGdyKCl7dmFyIG8scCxoO2lmKEErKyxvPWMscD1bXSxoPXMuY2hhckF0KGMpLHUudGVzdChoKT9jKys6KGg9ZSxBPT09MCYmSShMKSksaCE9PWUpZm9yKDtoIT09ZTspcC5wdXNoKGgpLGg9cy5jaGFyQXQoYyksdS50ZXN0KGgpP2MrKzooaD1lLEE9PT0wJiZJKEwpKTtlbHNlIHA9ZTtyZXR1cm4gcCE9PWU/bz1zLnN1YnN0cmluZyhvLGMpOm89cCxBLS0sbz09PWUmJihwPWUsQT09PTAmJkkoRykpLG99ZnVuY3Rpb24gbXIoKXt2YXIgbyxwLGg7Zm9yKEErKyxvPWMscD1bXSxoPXMuY2hhckF0KGMpLGcudGVzdChoKT9jKys6KGg9ZSxBPT09MCYmSShaKSk7aCE9PWU7KXAucHVzaChoKSxoPXMuY2hhckF0KGMpLGcudGVzdChoKT9jKys6KGg9ZSxBPT09MCYmSShaKSk7cmV0dXJuIG89cy5zdWJzdHJpbmcobyxjKSxBLS0scD1lLEE9PT0wJiZJKEspLG99ZnVuY3Rpb24gdnIoKXt2YXIgbyxwLGg7cmV0dXJuIG89YyxwPWd0KCksdGUoKSxoPUVyKCksaD09PWUmJihoPW51bGwpLHRlKCksbz1zcihwLGgpLG99ZnVuY3Rpb24gZ3QoKXt2YXIgbyxwLGgsUDtmb3Iobz1jLHA9UWUoKSxwPT09ZSYmKHA9bnVsbCksaD1bXSxQPW10KCk7UCE9PWU7KWgucHVzaChQKSxQPW10KCk7cmV0dXJuIG89bnIocCxoKSxvfWZ1bmN0aW9uIG10KCl7dmFyIG8scCxoLFAsTixGLF9lLExlO2lmKG89Yyx0ZSgpLGJyKCksdGUoKSxwPV9yKCkscCE9PWUpe2ZvcihoPXlyKCksaD09PWUmJihoPW51bGwpLFA9W10sTj12dCgpO04hPT1lOylQLnB1c2goTiksTj12dCgpO2ZvcihOPXRlKCksRj1RZSgpLEY9PT1lJiYoRj1udWxsKSxfZT1bXSxMZT1idCgpO0xlIT09ZTspX2UucHVzaChMZSksTGU9YnQoKTtvPW9yKHAsaCxQLEYsX2UpfWVsc2UgYz1vLG89ZTtyZXR1cm4gb31mdW5jdGlvbiBicigpe3ZhciBvLHAsaCxQLE4sRjtmb3IoQSsrLG89YyxwPVtdLGg9cy5jaGFyQXQoYykseC50ZXN0KGgpP2MrKzooaD1lLEE9PT0wJiZJKHVlKSk7aCE9PWU7KXAucHVzaChoKSxoPXMuY2hhckF0KGMpLHgudGVzdChoKT9jKys6KGg9ZSxBPT09MCYmSSh1ZSkpO2lmKHMuY2hhckNvZGVBdChjKT09PTQ2PyhoPWssYysrKTooaD1lLEE9PT0wJiZJKHplKSksaCE9PWUpe2ZvcihQPXRlKCksTj1bXSxGPXMuY2hhckF0KGMpLHYudGVzdChGKT9jKys6KEY9ZSxBPT09MCYmSShudCkpO0YhPT1lOylOLnB1c2goRiksRj1zLmNoYXJBdChjKSx2LnRlc3QoRik/YysrOihGPWUsQT09PTAmJkkobnQpKTtwPVtwLGgsUCxOXSxvPXB9ZWxzZSBjPW8sbz1lO3JldHVybiBBLS0sbz09PWUmJihwPWUsQT09PTAmJkkoZGUpKSxvfWZ1bmN0aW9uIF9yKCl7dmFyIG8scCxoLFAsTixGO2lmKEErKyxvPWMscD1jLHMuc3Vic3RyKGMsNSk9PT0kPyhoPSQsYys9NSk6KGg9ZSxBPT09MCYmSShOdCkpLGg9PT1lJiYocy5zdWJzdHIoYywzKT09PVQ/KGg9VCxjKz0zKTooaD1lLEE9PT0wJiZJKEx0KSksaD09PWUmJihzLnN1YnN0cihjLDUpPT09RT8oaD1FLGMrPTUpOihoPWUsQT09PTAmJkkoT3QpKSxoPT09ZSYmKHMuc3Vic3RyKGMsMyk9PT1DPyhoPUMsYys9Myk6KGg9ZSxBPT09MCYmSShNdCkpLGg9PT1lKSkpKWlmKGg9YyxQPXMuY2hhckF0KGMpLHUudGVzdChQKT9jKys6KFA9ZSxBPT09MCYmSShMKSksUCE9PWUpe2lmKE49W10sRj1zLmNoYXJBdChjKSx5LnRlc3QoRik/YysrOihGPWUsQT09PTAmJkkob3QpKSxGIT09ZSlmb3IoO0YhPT1lOylOLnB1c2goRiksRj1zLmNoYXJBdChjKSx5LnRlc3QoRik/YysrOihGPWUsQT09PTAmJkkob3QpKTtlbHNlIE49ZTtOIT09ZT8oUD1bUCxOXSxoPVApOihjPWgsaD1lKX1lbHNlIGM9aCxoPWU7cmV0dXJuIGghPT1lPyhQPXMuY2hhckF0KGMpLFMudGVzdChQKT9jKys6KFA9ZSxBPT09MCYmSShEdCkpLFA9PT1lJiYoUD1udWxsKSxoPVtoLFBdLHA9aCk6KGM9cCxwPWUpLHAhPT1lP289cy5zdWJzdHJpbmcobyxjKTpvPXAsQS0tLG89PT1lJiYocD1lLEE9PT0wJiZJKFJ0KSksb31mdW5jdGlvbiB5cigpe3ZhciBvLHAsaDtmb3IoQSsrLG89YyxwPVtdLGg9cy5jaGFyQXQoYyksZi50ZXN0KGgpP2MrKzooaD1lLEE9PT0wJiZJKGF0KSk7aCE9PWU7KXAucHVzaChoKSxwLmxlbmd0aD49Mj9oPWU6KGg9cy5jaGFyQXQoYyksZi50ZXN0KGgpP2MrKzooaD1lLEE9PT0wJiZJKGF0KSkpO3JldHVybiBwLmxlbmd0aDwxPyhjPW8sbz1lKTpvPXAsQS0tLG89PT1lJiYocD1lLEE9PT0wJiZJKHF0KSksb31mdW5jdGlvbiB2dCgpe3ZhciBvLHAsaCxQLE47aWYoQSsrLG89Yyx0ZSgpLHMuY2hhckNvZGVBdChjKT09PTM2PyhwPUQsYysrKToocD1lLEE9PT0wJiZJKEZ0KSkscCE9PWUpe2lmKGg9YyxQPVtdLE49cy5jaGFyQXQoYykseC50ZXN0KE4pP2MrKzooTj1lLEE9PT0wJiZJKHVlKSksTiE9PWUpZm9yKDtOIT09ZTspUC5wdXNoKE4pLE49cy5jaGFyQXQoYykseC50ZXN0KE4pP2MrKzooTj1lLEE9PT0wJiZJKHVlKSk7ZWxzZSBQPWU7UCE9PWU/aD1zLnN1YnN0cmluZyhoLGMpOmg9UCxoIT09ZT9vPWFyKGgpOihjPW8sbz1lKX1lbHNlIGM9byxvPWU7cmV0dXJuIEEtLSxvPT09ZSYmQT09PTAmJkkoS3QpLG99ZnVuY3Rpb24gUWUoKXt2YXIgbztyZXR1cm4gbz13cigpLG89PT1lJiYobz1TcigpKSxvfWZ1bmN0aW9uIHdyKCl7dmFyIG8scCxoLFAsTjtpZihBKyssbz1jLHMuY2hhckNvZGVBdChjKT09PTEyMz8ocD1CLGMrKyk6KHA9ZSxBPT09MCYmSShCdCkpLHAhPT1lKXtmb3IoaD1jLFA9W10sTj1zLmNoYXJBdChjKSxiLnRlc3QoTik/YysrOihOPWUsQT09PTAmJkkobHQpKTtOIT09ZTspUC5wdXNoKE4pLE49cy5jaGFyQXQoYyksYi50ZXN0KE4pP2MrKzooTj1lLEE9PT0wJiZJKGx0KSk7aD1zLnN1YnN0cmluZyhoLGMpLHMuY2hhckNvZGVBdChjKT09PTEyNT8oUD1WLGMrKyk6KFA9ZSxBPT09MCYmSShqdCkpLFAhPT1lP289bHIoaCk6KGM9byxvPWUpfWVsc2UgYz1vLG89ZTtyZXR1cm4gQS0tLG89PT1lJiYocD1lLEE9PT0wJiZJKFV0KSksb31mdW5jdGlvbiBTcigpe3ZhciBvLHAsaCxQLE47aWYoQSsrLG89YyxzLmNoYXJDb2RlQXQoYyk9PT01OT8ocD1iZSxjKyspOihwPWUsQT09PTAmJkkoenQpKSxwIT09ZSl7Zm9yKGg9YyxQPVtdLE49cy5jaGFyQXQoYyksXy50ZXN0KE4pP2MrKzooTj1lLEE9PT0wJiZJKGN0KSk7TiE9PWU7KVAucHVzaChOKSxOPXMuY2hhckF0KGMpLF8udGVzdChOKT9jKys6KE49ZSxBPT09MCYmSShjdCkpO2g9cy5zdWJzdHJpbmcoaCxjKSxvPWNyKGgpfWVsc2UgYz1vLG89ZTtyZXR1cm4gQS0tLG89PT1lJiYocD1lLEE9PT0wJiZJKEh0KSksb31mdW5jdGlvbiBidCgpe3ZhciBvLHAsaCxQO3JldHVybiBBKyssbz1jLHRlKCkscy5jaGFyQ29kZUF0KGMpPT09NDA/KHA9Q2UsYysrKToocD1lLEE9PT0wJiZJKEp0KSkscCE9PWU/KGg9Z3QoKSxoIT09ZT8odGUoKSxzLmNoYXJDb2RlQXQoYyk9PT00MT8oUD1IZSxjKyspOihQPWUsQT09PTAmJkkoV3QpKSxQIT09ZT9vPWRyKGgpOihjPW8sbz1lKSk6KGM9byxvPWUpKTooYz1vLG89ZSksQS0tLG89PT1lJiZBPT09MCYmSShRdCksb31mdW5jdGlvbiBFcigpe3ZhciBvLHAsaDtyZXR1cm4gQSsrLG89YyxzLnN1YnN0cihjLDMpPT09U2U/KHA9U2UsYys9Myk6KHA9ZSxBPT09MCYmSShHdCkpLHA9PT1lJiYocy5zdWJzdHIoYywzKT09PXBlPyhwPXBlLGMrPTMpOihwPWUsQT09PTAmJkkoWXQpKSxwPT09ZSYmKHMuc3Vic3RyKGMsNyk9PT1SZT8ocD1SZSxjKz03KToocD1lLEE9PT0wJiZJKFp0KSkscD09PWUmJihzLmNoYXJDb2RlQXQoYyk9PT00Mj8ocD1kLGMrKyk6KHA9ZSxBPT09MCYmSShYdCkpKSkpLHAhPT1lPyh0ZSgpLGg9UWUoKSxoPT09ZSYmKGg9bnVsbCksbz1wcihwLGgpKTooYz1vLG89ZSksQS0tLG89PT1lJiYocD1lLEE9PT0wJiZJKFZ0KSksb31mdW5jdGlvbiB0ZSgpe3ZhciBvLHA7Zm9yKEErKyxvPVtdLHA9cy5jaGFyQXQoYyksUi50ZXN0KHApP2MrKzoocD1lLEE9PT0wJiZJKGR0KSk7cCE9PWU7KW8ucHVzaChwKSxwPXMuY2hhckF0KGMpLFIudGVzdChwKT9jKys6KHA9ZSxBPT09MCYmSShkdCkpO3JldHVybiBBLS0scD1lLEE9PT0wJiZJKGVyKSxvfWlmKCRlPW4oKSx0LnBlZyRsaWJyYXJ5KXJldHVybntwZWckcmVzdWx0OiRlLHBlZyRjdXJyUG9zOmMscGVnJEZBSUxFRDplLHBlZyRtYXhGYWlsRXhwZWN0ZWQ6TmUscGVnJG1heEZhaWxQb3M6b2V9O2lmKCRlIT09ZSYmYz09PXMubGVuZ3RoKXJldHVybiAkZTt0aHJvdyAkZSE9PWUmJmM8cy5sZW5ndGgmJkkoaHIoKSksdXIoTmUsb2U8cy5sZW5ndGg/cy5jaGFyQXQob2UpOm51bGwsb2U8cy5sZW5ndGg/aHQob2Usb2UrMSk6aHQob2Usb2UpKX0vKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDI1LCBKZWZmIEhseXdhIChqaGx5d2FAZ21haWwuY29tKQogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAqCiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKgogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQogKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgogKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgogKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqL3ZhciBNZT0weGZmZmZmZmZmZmZmZmZmZmZuO2Z1bmN0aW9uIFZlKHMsdCl7cmV0dXJuKHM8PHR8cz4+NjRuLXQpJjB4ZmZmZmZmZmZmZmZmZmZmZm59ZnVuY3Rpb24gX3Qocyx0KXtyZXR1cm4gcyp0Jk1lfWZ1bmN0aW9uIE1yKHMpe3JldHVybiBmdW5jdGlvbigpe2xldCB0PUJpZ0ludChzJk1lKSxlPUJpZ0ludChzPj42NG4mTWUpLHI9X3QoVmUoX3QodCw1biksN24pLDluKTtyZXR1cm4gZV49dCx0PShWZSh0LDI0bileZV5lPDwxNm4pJk1lLGU9VmUoZSwzN24pLHM9ZTw8NjRufHQscn19dmFyIEtlPU1yKDB4YTE4N2ViMzljZGNhZWQ4ZjMxYzRiMzY1YjEwMmUwMWVuKSxEcj1BcnJheS5mcm9tKHtsZW5ndGg6Mn0sKCk9PkFycmF5LmZyb20oe2xlbmd0aDo2fSwoKT0+QXJyYXkuZnJvbSh7bGVuZ3RoOjEyOH0sKCk9PktlKCkpKSkscXI9QXJyYXkuZnJvbSh7bGVuZ3RoOjh9LCgpPT5LZSgpKSxLcj1BcnJheS5mcm9tKHtsZW5ndGg6MTZ9LCgpPT5LZSgpKSxHZT1LZSgpLFg9InciLGllPSJiIixIPSJwIix0dD0ibiIsRGU9ImIiLEllPSJyIixtZT0icSIsej0iayIsWWU9InJuYnFrYm5yL3BwcHBwcHBwLzgvOC84LzgvUFBQUFBQUFAvUk5CUUtCTlIgdyBLUWtxIC0gMCAxIix4ZT1jbGFzc3tjb2xvcjtmcm9tO3RvO3BpZWNlO2NhcHR1cmVkO3Byb21vdGlvbjtmbGFncztzYW47bGFuO2JlZm9yZTthZnRlcjtjb25zdHJ1Y3Rvcih0LGUpe2xldHtjb2xvcjpyLHBpZWNlOmksZnJvbTpuLHRvOmEsZmxhZ3M6bCxjYXB0dXJlZDp3LHByb21vdGlvbjprfT1lLCQ9VyhuKSxUPVcoYSk7dGhpcy5jb2xvcj1yLHRoaXMucGllY2U9aSx0aGlzLmZyb209JCx0aGlzLnRvPVQsdGhpcy5zYW49dC5fbW92ZVRvU2FuKGUsdC5fbW92ZXMoe2xlZ2FsOiEwfSkpLHRoaXMubGFuPSQrVCx0aGlzLmJlZm9yZT10LmZlbigpLHQuX21ha2VNb3ZlKGUpLHRoaXMuYWZ0ZXI9dC5mZW4oKSx0Ll91bmRvTW92ZSgpLHRoaXMuZmxhZ3M9IiI7Zm9yKGxldCBFIGluIE0pTVtFXSZsJiYodGhpcy5mbGFncys9eWVbRV0pO3cmJih0aGlzLmNhcHR1cmVkPXcpLGsmJih0aGlzLnByb21vdGlvbj1rLHRoaXMubGFuKz1rKX1pc0NhcHR1cmUoKXtyZXR1cm4gdGhpcy5mbGFncy5pbmRleE9mKHllLkNBUFRVUkUpPi0xfWlzUHJvbW90aW9uKCl7cmV0dXJuIHRoaXMuZmxhZ3MuaW5kZXhPZih5ZS5QUk9NT1RJT04pPi0xfWlzRW5QYXNzYW50KCl7cmV0dXJuIHRoaXMuZmxhZ3MuaW5kZXhPZih5ZS5FUF9DQVBUVVJFKT4tMX1pc0tpbmdzaWRlQ2FzdGxlKCl7cmV0dXJuIHRoaXMuZmxhZ3MuaW5kZXhPZih5ZS5LU0lERV9DQVNUTEUpPi0xfWlzUXVlZW5zaWRlQ2FzdGxlKCl7cmV0dXJuIHRoaXMuZmxhZ3MuaW5kZXhPZih5ZS5RU0lERV9DQVNUTEUpPi0xfWlzQmlnUGF3bigpe3JldHVybiB0aGlzLmZsYWdzLmluZGV4T2YoeWUuQklHX1BBV04pPi0xfX0sWT0tMSx5ZT17Tk9STUFMOiJuIixDQVBUVVJFOiJjIixCSUdfUEFXTjoiYiIsRVBfQ0FQVFVSRToiZSIsUFJPTU9USU9OOiJwIixLU0lERV9DQVNUTEU6ImsiLFFTSURFX0NBU1RMRToicSIsTlVMTF9NT1ZFOiItIn07dmFyIE09e05PUk1BTDoxLENBUFRVUkU6MixCSUdfUEFXTjo0LEVQX0NBUFRVUkU6OCxQUk9NT1RJT046MTYsS1NJREVfQ0FTVExFOjMyLFFTSURFX0NBU1RMRTo2NCxOVUxMX01PVkU6MTI4fSxydD17RXZlbnQ6Ij8iLFNpdGU6Ij8iLERhdGU6Ij8/Pz8uPz8uPz8iLFJvdW5kOiI/IixXaGl0ZToiPyIsQmxhY2s6Ij8iLFJlc3VsdDoiKiJ9LEZyPXtXaGl0ZVRpdGxlOm51bGwsQmxhY2tUaXRsZTpudWxsLFdoaXRlRWxvOm51bGwsQmxhY2tFbG86bnVsbCxXaGl0ZVVTQ0Y6bnVsbCxCbGFja1VTQ0Y6bnVsbCxXaGl0ZU5BOm51bGwsQmxhY2tOQTpudWxsLFdoaXRlVHlwZTpudWxsLEJsYWNrVHlwZTpudWxsLEV2ZW50RGF0ZTpudWxsLEV2ZW50U3BvbnNvcjpudWxsLFNlY3Rpb246bnVsbCxTdGFnZTpudWxsLEJvYXJkOm51bGwsT3BlbmluZzpudWxsLFZhcmlhdGlvbjpudWxsLFN1YlZhcmlhdGlvbjpudWxsLEVDTzpudWxsLE5JQzpudWxsLFRpbWU6bnVsbCxVVENUaW1lOm51bGwsVVRDRGF0ZTpudWxsLFRpbWVDb250cm9sOm51bGwsU2V0VXA6bnVsbCxGRU46bnVsbCxUZXJtaW5hdGlvbjpudWxsLEFubm90YXRvcjpudWxsLE1vZGU6bnVsbCxQbHlDb3VudDpudWxsfSxVcj17Li4ucnQsLi4uRnJ9LE89e2E4OjAsYjg6MSxjODoyLGQ4OjMsZTg6NCxmODo1LGc4OjYsaDg6NyxhNzoxNixiNzoxNyxjNzoxOCxkNzoxOSxlNzoyMCxmNzoyMSxnNzoyMixoNzoyMyxhNjozMixiNjozMyxjNjozNCxkNjozNSxlNjozNixmNjozNyxnNjozOCxoNjozOSxhNTo0OCxiNTo0OSxjNTo1MCxkNTo1MSxlNTo1MixmNTo1MyxnNTo1NCxoNTo1NSxhNDo2NCxiNDo2NSxjNDo2NixkNDo2NyxlNDo2OCxmNDo2OSxnNDo3MCxoNDo3MSxhMzo4MCxiMzo4MSxjMzo4MixkMzo4MyxlMzo4NCxmMzo4NSxnMzo4NixoMzo4NyxhMjo5NixiMjo5NyxjMjo5OCxkMjo5OSxlMjoxMDAsZjI6MTAxLGcyOjEwMixoMjoxMDMsYTE6MTEyLGIxOjExMyxjMToxMTQsZDE6MTE1LGUxOjExNixmMToxMTcsZzE6MTE4LGgxOjExOX0sWmU9e2I6WzE2LDMyLDE3LDE1XSx3OlstMTYsLTMyLC0xNywtMTVdfSx5dD17bjpbLTE4LC0zMywtMzEsLTE0LDE4LDMzLDMxLDE0XSxiOlstMTcsLTE1LDE3LDE1XSxyOlstMTYsMSwxNiwtMV0scTpbLTE3LC0xNiwtMTUsMSwxNywxNiwxNSwtMV0sazpbLTE3LC0xNiwtMTUsMSwxNywxNiwxNSwtMV19LEJyPVsyMCwwLDAsMCwwLDAsMCwyNCwwLDAsMCwwLDAsMCwyMCwwLDAsMjAsMCwwLDAsMCwwLDI0LDAsMCwwLDAsMCwyMCwwLDAsMCwwLDIwLDAsMCwwLDAsMjQsMCwwLDAsMCwyMCwwLDAsMCwwLDAsMCwyMCwwLDAsMCwyNCwwLDAsMCwyMCwwLDAsMCwwLDAsMCwwLDAsMjAsMCwwLDI0LDAsMCwyMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIwLDIsMjQsMiwyMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiw1Myw1Niw1MywyLDAsMCwwLDAsMCwwLDI0LDI0LDI0LDI0LDI0LDI0LDU2LDAsNTYsMjQsMjQsMjQsMjQsMjQsMjQsMCwwLDAsMCwwLDAsMiw1Myw1Niw1MywyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMCwyLDI0LDIsMjAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMCwwLDAsMjQsMCwwLDIwLDAsMCwwLDAsMCwwLDAsMCwyMCwwLDAsMCwyNCwwLDAsMCwyMCwwLDAsMCwwLDAsMCwyMCwwLDAsMCwwLDI0LDAsMCwwLDAsMjAsMCwwLDAsMCwyMCwwLDAsMCwwLDAsMjQsMCwwLDAsMCwwLDIwLDAsMCwyMCwwLDAsMCwwLDAsMCwyNCwwLDAsMCwwLDAsMCwyMF0sanI9WzE3LDAsMCwwLDAsMCwwLDE2LDAsMCwwLDAsMCwwLDE1LDAsMCwxNywwLDAsMCwwLDAsMTYsMCwwLDAsMCwwLDE1LDAsMCwwLDAsMTcsMCwwLDAsMCwxNiwwLDAsMCwwLDE1LDAsMCwwLDAsMCwwLDE3LDAsMCwwLDE2LDAsMCwwLDE1LDAsMCwwLDAsMCwwLDAsMCwxNywwLDAsMTYsMCwwLDE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMTcsMCwxNiwwLDE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE3LDE2LDE1LDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwxLDEsMSwwLC0xLC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwwLDAsMCwwLDAsLTE1LC0xNiwtMTcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsLTE1LDAsLTE2LDAsLTE3LDAsMCwwLDAsMCwwLDAsMCwwLDAsLTE1LDAsMCwtMTYsMCwwLC0xNywwLDAsMCwwLDAsMCwwLDAsLTE1LDAsMCwwLC0xNiwwLDAsMCwtMTcsMCwwLDAsMCwwLDAsLTE1LDAsMCwwLDAsLTE2LDAsMCwwLDAsLTE3LDAsMCwwLDAsLTE1LDAsMCwwLDAsMCwtMTYsMCwwLDAsMCwwLC0xNywwLDAsLTE1LDAsMCwwLDAsMCwwLC0xNiwwLDAsMCwwLDAsMCwtMTddLEhyPXtwOjEsbjoyLGI6NCxyOjgscToxNixrOjMyfSx6cj0icG5icnFrUE5CUlFLIix3dD1bdHQsRGUsSWUsbWVdLFFyPTcsSnI9NixXcj0xLFZyPTAsT2U9e1t6XTpNLktTSURFX0NBU1RMRSxbbWVdOk0uUVNJREVfQ0FTVExFfSxmZT17dzpbe3NxdWFyZTpPLmExLGZsYWc6TS5RU0lERV9DQVNUTEV9LHtzcXVhcmU6Ty5oMSxmbGFnOk0uS1NJREVfQ0FTVExFfV0sYjpbe3NxdWFyZTpPLmE4LGZsYWc6TS5RU0lERV9DQVNUTEV9LHtzcXVhcmU6Ty5oOCxmbGFnOk0uS1NJREVfQ0FTVExFfV19LEdyPXtiOldyLHc6SnJ9LFhlPSItLSI7ZnVuY3Rpb24gd2Uocyl7cmV0dXJuIHM+PjR9ZnVuY3Rpb24gUGUocyl7cmV0dXJuIHMmMTV9ZnVuY3Rpb24gRXQocyl7cmV0dXJuIjAxMjM0NTY3ODkiLmluZGV4T2YocykhPT0tMX1mdW5jdGlvbiBXKHMpe2xldCB0PVBlKHMpLGU9d2Uocyk7cmV0dXJuImFiY2RlZmdoIi5zdWJzdHJpbmcodCx0KzEpKyI4NzY1NDMyMSIuc3Vic3RyaW5nKGUsZSsxKX1mdW5jdGlvbiBUZShzKXtyZXR1cm4gcz09PVg/aWU6WH1mdW5jdGlvbiBZcihzKXtsZXQgdD1zLnNwbGl0KC9ccysvKTtpZih0Lmxlbmd0aCE9PTYpcmV0dXJue29rOiExLGVycm9yOiJJbnZhbGlkIEZFTjogbXVzdCBjb250YWluIHNpeCBzcGFjZS1kZWxpbWl0ZWQgZmllbGRzIn07bGV0IGU9cGFyc2VJbnQodFs1XSwxMCk7aWYoaXNOYU4oZSl8fGU8PTApcmV0dXJue29rOiExLGVycm9yOiJJbnZhbGlkIEZFTjogbW92ZSBudW1iZXIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIifTtsZXQgcj1wYXJzZUludCh0WzRdLDEwKTtpZihpc05hTihyKXx8cjwwKXJldHVybntvazohMSxlcnJvcjoiSW52YWxpZCBGRU46IGhhbGYgbW92ZSBjb3VudGVyIG51bWJlciBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIifTtpZighL14oLXxbYWJjZGVmZ2hdWzM2XSkkLy50ZXN0KHRbM10pKXJldHVybntvazohMSxlcnJvcjoiSW52YWxpZCBGRU46IGVuLXBhc3NhbnQgc3F1YXJlIGlzIGludmFsaWQifTtpZigvW15rS3FRLV0vLnRlc3QodFsyXSkpcmV0dXJue29rOiExLGVycm9yOiJJbnZhbGlkIEZFTjogY2FzdGxpbmcgYXZhaWxhYmlsaXR5IGlzIGludmFsaWQifTtpZighL14od3xiKSQvLnRlc3QodFsxXSkpcmV0dXJue29rOiExLGVycm9yOiJJbnZhbGlkIEZFTjogc2lkZS10by1tb3ZlIGlzIGludmFsaWQifTtsZXQgaT10WzBdLnNwbGl0KCIvIik7aWYoaS5sZW5ndGghPT04KXJldHVybntvazohMSxlcnJvcjoiSW52YWxpZCBGRU46IHBpZWNlIGRhdGEgZG9lcyBub3QgY29udGFpbiA4ICcvJy1kZWxpbWl0ZWQgcm93cyJ9O2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKXtsZXQgbD0wLHc9ITE7Zm9yKGxldCBrPTA7azxpW2FdLmxlbmd0aDtrKyspaWYoRXQoaVthXVtrXSkpe2lmKHcpcmV0dXJue29rOiExLGVycm9yOiJJbnZhbGlkIEZFTjogcGllY2UgZGF0YSBpcyBpbnZhbGlkIChjb25zZWN1dGl2ZSBudW1iZXIpIn07bCs9cGFyc2VJbnQoaVthXVtrXSwxMCksdz0hMH1lbHNle2lmKCEvXltwcm5icWtQUk5CUUtdJC8udGVzdChpW2FdW2tdKSlyZXR1cm57b2s6ITEsZXJyb3I6IkludmFsaWQgRkVOOiBwaWVjZSBkYXRhIGlzIGludmFsaWQgKGludmFsaWQgcGllY2UpIn07bCs9MSx3PSExfWlmKGwhPT04KXJldHVybntvazohMSxlcnJvcjoiSW52YWxpZCBGRU46IHBpZWNlIGRhdGEgaXMgaW52YWxpZCAodG9vIG1hbnkgc3F1YXJlcyBpbiByYW5rKSJ9fWlmKHRbM11bMV09PSIzIiYmdFsxXT09IncifHx0WzNdWzFdPT0iNiImJnRbMV09PSJiIilyZXR1cm57b2s6ITEsZXJyb3I6IkludmFsaWQgRkVOOiBpbGxlZ2FsIGVuLXBhc3NhbnQgc3F1YXJlIn07bGV0IG49W3tjb2xvcjoid2hpdGUiLHJlZ2V4Oi9LL2d9LHtjb2xvcjoiYmxhY2siLHJlZ2V4Oi9rL2d9XTtmb3IobGV0e2NvbG9yOmEscmVnZXg6bH1vZiBuKXtpZighbC50ZXN0KHRbMF0pKXJldHVybntvazohMSxlcnJvcjpgSW52YWxpZCBGRU46IG1pc3NpbmcgJHthfSBraW5nYH07aWYoKHRbMF0ubWF0Y2gobCl8fFtdKS5sZW5ndGg+MSlyZXR1cm57b2s6ITEsZXJyb3I6YEludmFsaWQgRkVOOiB0b28gbWFueSAke2F9IGtpbmdzYH19cmV0dXJuIEFycmF5LmZyb20oaVswXStpWzddKS5zb21lKGE9PmEudG9VcHBlckNhc2UoKT09PSJQIik/e29rOiExLGVycm9yOiJJbnZhbGlkIEZFTjogc29tZSBwYXducyBhcmUgb24gdGhlIGVkZ2Ugcm93cyJ9OntvazohMH19ZnVuY3Rpb24gWnIocyx0KXtsZXQgZT1zLmZyb20scj1zLnRvLGk9cy5waWVjZSxuPTAsYT0wLGw9MDtmb3IobGV0IHc9MCxrPXQubGVuZ3RoO3c8azt3Kyspe2xldCAkPXRbd10uZnJvbSxUPXRbd10udG8sRT10W3ddLnBpZWNlO2k9PT1FJiZlIT09JCYmcj09PVQmJihuKyssd2UoZSk9PT13ZSgkKSYmYSsrLFBlKGUpPT09UGUoJCkmJmwrKyl9cmV0dXJuIG4+MD9hPjAmJmw+MD9XKGUpOmw+MD9XKGUpLmNoYXJBdCgxKTpXKGUpLmNoYXJBdCgwKToiIn1mdW5jdGlvbiBnZShzLHQsZSxyLGksbj12b2lkIDAsYT1NLk5PUk1BTCl7bGV0IGw9d2Uocik7aWYoaT09PUgmJihsPT09UXJ8fGw9PT1WcikpZm9yKGxldCB3PTA7dzx3dC5sZW5ndGg7dysrKXtsZXQgaz13dFt3XTtzLnB1c2goe2NvbG9yOnQsZnJvbTplLHRvOnIscGllY2U6aSxjYXB0dXJlZDpuLHByb21vdGlvbjprLGZsYWdzOmF8TS5QUk9NT1RJT059KX1lbHNlIHMucHVzaCh7Y29sb3I6dCxmcm9tOmUsdG86cixwaWVjZTppLGNhcHR1cmVkOm4sZmxhZ3M6YX0pfWZ1bmN0aW9uIFN0KHMpe2xldCB0PXMuY2hhckF0KDApO3JldHVybiB0Pj0iYSImJnQ8PSJoIj9zLm1hdGNoKC9bYS1oXVxkLipbYS1oXVxkLyk/dm9pZCAwOkg6KHQ9dC50b0xvd2VyQ2FzZSgpLHQ9PT0ibyI/ejp0KX1mdW5jdGlvbiBldChzKXtyZXR1cm4gcy5yZXBsYWNlKC89LywiIikucmVwbGFjZSgvWysjXT9bPyFdKiQvLCIiKX12YXIgcWU9Y2xhc3N7X2JvYXJkPW5ldyBBcnJheSgxMjgpO190dXJuPVg7X2hlYWRlcj17fTtfa2luZ3M9e3c6WSxiOll9O19lcFNxdWFyZT0tMTtfaGFsZk1vdmVzPTA7X21vdmVOdW1iZXI9MDtfaGlzdG9yeT1bXTtfY29tbWVudHM9e307X2Nhc3RsaW5nPXt3OjAsYjowfTtfaGFzaD0wbjtfcG9zaXRpb25Db3VudD1uZXcgTWFwO2NvbnN0cnVjdG9yKHQ9WWUse3NraXBWYWxpZGF0aW9uOmU9ITF9PXt9KXt0aGlzLmxvYWQodCx7c2tpcFZhbGlkYXRpb246ZX0pfWNsZWFyKHtwcmVzZXJ2ZUhlYWRlcnM6dD0hMX09e30pe3RoaXMuX2JvYXJkPW5ldyBBcnJheSgxMjgpLHRoaXMuX2tpbmdzPXt3OlksYjpZfSx0aGlzLl90dXJuPVgsdGhpcy5fY2FzdGxpbmc9e3c6MCxiOjB9LHRoaXMuX2VwU3F1YXJlPVksdGhpcy5faGFsZk1vdmVzPTAsdGhpcy5fbW92ZU51bWJlcj0xLHRoaXMuX2hpc3Rvcnk9W10sdGhpcy5fY29tbWVudHM9e30sdGhpcy5faGVhZGVyPXQ/dGhpcy5faGVhZGVyOnsuLi5Vcn0sdGhpcy5faGFzaD10aGlzLl9jb21wdXRlSGFzaCgpLHRoaXMuX3Bvc2l0aW9uQ291bnQ9bmV3IE1hcCx0aGlzLl9oZWFkZXIuU2V0VXA9bnVsbCx0aGlzLl9oZWFkZXIuRkVOPW51bGx9bG9hZCh0LHtza2lwVmFsaWRhdGlvbjplPSExLHByZXNlcnZlSGVhZGVyczpyPSExfT17fSl7bGV0IGk9dC5zcGxpdCgvXHMrLyk7aWYoaS5sZW5ndGg+PTImJmkubGVuZ3RoPDYpe2xldCBsPVsiLSIsIi0iLCIwIiwiMSJdO3Q9aS5jb25jYXQobC5zbGljZSgtKDYtaS5sZW5ndGgpKSkuam9pbigiICIpfWlmKGk9dC5zcGxpdCgvXHMrLyksIWUpe2xldHtvazpsLGVycm9yOnd9PVlyKHQpO2lmKCFsKXRocm93IG5ldyBFcnJvcih3KX1sZXQgbj1pWzBdLGE9MDt0aGlzLmNsZWFyKHtwcmVzZXJ2ZUhlYWRlcnM6cn0pO2ZvcihsZXQgbD0wO2w8bi5sZW5ndGg7bCsrKXtsZXQgdz1uLmNoYXJBdChsKTtpZih3PT09Ii8iKWErPTg7ZWxzZSBpZihFdCh3KSlhKz1wYXJzZUludCh3LDEwKTtlbHNle2xldCBrPXc8ImEiP1g6aWU7dGhpcy5fcHV0KHt0eXBlOncudG9Mb3dlckNhc2UoKSxjb2xvcjprfSxXKGEpKSxhKyt9fXRoaXMuX3R1cm49aVsxXSxpWzJdLmluZGV4T2YoIksiKT4tMSYmKHRoaXMuX2Nhc3RsaW5nLnd8PU0uS1NJREVfQ0FTVExFKSxpWzJdLmluZGV4T2YoIlEiKT4tMSYmKHRoaXMuX2Nhc3RsaW5nLnd8PU0uUVNJREVfQ0FTVExFKSxpWzJdLmluZGV4T2YoImsiKT4tMSYmKHRoaXMuX2Nhc3RsaW5nLmJ8PU0uS1NJREVfQ0FTVExFKSxpWzJdLmluZGV4T2YoInEiKT4tMSYmKHRoaXMuX2Nhc3RsaW5nLmJ8PU0uUVNJREVfQ0FTVExFKSx0aGlzLl9lcFNxdWFyZT1pWzNdPT09Ii0iP1k6T1tpWzNdXSx0aGlzLl9oYWxmTW92ZXM9cGFyc2VJbnQoaVs0XSwxMCksdGhpcy5fbW92ZU51bWJlcj1wYXJzZUludChpWzVdLDEwKSx0aGlzLl9oYXNoPXRoaXMuX2NvbXB1dGVIYXNoKCksdGhpcy5fdXBkYXRlU2V0dXAodCksdGhpcy5faW5jUG9zaXRpb25Db3VudCgpfWZlbih7Zm9yY2VFbnBhc3NhbnRTcXVhcmU6dD0hMX09e30pe2xldCBlPTAscj0iIjtmb3IobGV0IGE9Ty5hODthPD1PLmgxO2ErKyl7aWYodGhpcy5fYm9hcmRbYV0pe2U+MCYmKHIrPWUsZT0wKTtsZXR7Y29sb3I6bCx0eXBlOnd9PXRoaXMuX2JvYXJkW2FdO3IrPWw9PT1YP3cudG9VcHBlckNhc2UoKTp3LnRvTG93ZXJDYXNlKCl9ZWxzZSBlKys7YSsxJjEzNiYmKGU+MCYmKHIrPWUpLGEhPT1PLmgxJiYocis9Ii8iKSxlPTAsYSs9OCl9bGV0IGk9IiI7dGhpcy5fY2FzdGxpbmdbWF0mTS5LU0lERV9DQVNUTEUmJihpKz0iSyIpLHRoaXMuX2Nhc3RsaW5nW1hdJk0uUVNJREVfQ0FTVExFJiYoaSs9IlEiKSx0aGlzLl9jYXN0bGluZ1tpZV0mTS5LU0lERV9DQVNUTEUmJihpKz0iayIpLHRoaXMuX2Nhc3RsaW5nW2llXSZNLlFTSURFX0NBU1RMRSYmKGkrPSJxIiksaT1pfHwiLSI7bGV0IG49Ii0iO2lmKHRoaXMuX2VwU3F1YXJlIT09WSlpZih0KW49Vyh0aGlzLl9lcFNxdWFyZSk7ZWxzZXtsZXQgYT10aGlzLl9lcFNxdWFyZSsodGhpcy5fdHVybj09PVg/MTY6LTE2KSxsPVthKzEsYS0xXTtmb3IobGV0IHcgb2YgbCl7aWYodyYxMzYpY29udGludWU7bGV0IGs9dGhpcy5fdHVybjtpZih0aGlzLl9ib2FyZFt3XT8uY29sb3I9PT1rJiZ0aGlzLl9ib2FyZFt3XT8udHlwZT09PUgpe3RoaXMuX21ha2VNb3ZlKHtjb2xvcjprLGZyb206dyx0bzp0aGlzLl9lcFNxdWFyZSxwaWVjZTpILGNhcHR1cmVkOkgsZmxhZ3M6TS5FUF9DQVBUVVJFfSk7bGV0ICQ9IXRoaXMuX2lzS2luZ0F0dGFja2VkKGspO2lmKHRoaXMuX3VuZG9Nb3ZlKCksJCl7bj1XKHRoaXMuX2VwU3F1YXJlKTticmVha319fX1yZXR1cm5bcix0aGlzLl90dXJuLGksbix0aGlzLl9oYWxmTW92ZXMsdGhpcy5fbW92ZU51bWJlcl0uam9pbigiICIpfV9waWVjZUtleSh0KXtpZighdGhpcy5fYm9hcmRbdF0pcmV0dXJuIDBuO2xldHtjb2xvcjplLHR5cGU6cn09dGhpcy5fYm9hcmRbdF0saT17dzowLGI6MX1bZV0sbj17cDowLG46MSxiOjIscjozLHE6NCxrOjV9W3JdO3JldHVybiBEcltpXVtuXVt0XX1fZXBLZXkoKXtyZXR1cm4gdGhpcy5fZXBTcXVhcmU9PT1ZPzBuOnFyW3RoaXMuX2VwU3F1YXJlJjddfV9jYXN0bGluZ0tleSgpe2xldCB0PXRoaXMuX2Nhc3RsaW5nLnc+PjV8dGhpcy5fY2FzdGxpbmcuYj4+MztyZXR1cm4gS3JbdF19X2NvbXB1dGVIYXNoKCl7bGV0IHQ9MG47Zm9yKGxldCBlPU8uYTg7ZTw9Ty5oMTtlKyspe2lmKGUmMTM2KXtlKz03O2NvbnRpbnVlfXRoaXMuX2JvYXJkW2VdJiYodF49dGhpcy5fcGllY2VLZXkoZSkpfXJldHVybiB0Xj10aGlzLl9lcEtleSgpLHRePXRoaXMuX2Nhc3RsaW5nS2V5KCksdGhpcy5fdHVybj09PSJiIiYmKHRePUdlKSx0fV91cGRhdGVTZXR1cCh0KXt0aGlzLl9oaXN0b3J5Lmxlbmd0aD4wfHwodCE9PVllPyh0aGlzLl9oZWFkZXIuU2V0VXA9IjEiLHRoaXMuX2hlYWRlci5GRU49dCk6KHRoaXMuX2hlYWRlci5TZXRVcD1udWxsLHRoaXMuX2hlYWRlci5GRU49bnVsbCkpfXJlc2V0KCl7dGhpcy5sb2FkKFllKX1nZXQodCl7cmV0dXJuIHRoaXMuX2JvYXJkW09bdF1dfWZpbmRQaWVjZSh0KXtsZXQgZT1bXTtmb3IobGV0IHI9Ty5hODtyPD1PLmgxO3IrKyl7aWYociYxMzYpe3IrPTc7Y29udGludWV9IXRoaXMuX2JvYXJkW3JdfHx0aGlzLl9ib2FyZFtyXT8uY29sb3IhPT10LmNvbG9yfHx0aGlzLl9ib2FyZFtyXS5jb2xvcj09PXQuY29sb3ImJnRoaXMuX2JvYXJkW3JdLnR5cGU9PT10LnR5cGUmJmUucHVzaChXKHIpKX1yZXR1cm4gZX1wdXQoe3R5cGU6dCxjb2xvcjplfSxyKXtyZXR1cm4gdGhpcy5fcHV0KHt0eXBlOnQsY29sb3I6ZX0scik/KHRoaXMuX3VwZGF0ZUNhc3RsaW5nUmlnaHRzKCksdGhpcy5fdXBkYXRlRW5QYXNzYW50U3F1YXJlKCksdGhpcy5fdXBkYXRlU2V0dXAodGhpcy5mZW4oKSksITApOiExfV9zZXQodCxlKXt0aGlzLl9oYXNoXj10aGlzLl9waWVjZUtleSh0KSx0aGlzLl9ib2FyZFt0XT1lLHRoaXMuX2hhc2hePXRoaXMuX3BpZWNlS2V5KHQpfV9wdXQoe3R5cGU6dCxjb2xvcjplfSxyKXtpZih6ci5pbmRleE9mKHQudG9Mb3dlckNhc2UoKSk9PT0tMXx8IShyIGluIE8pKXJldHVybiExO2xldCBpPU9bcl07aWYodD09eiYmISh0aGlzLl9raW5nc1tlXT09WXx8dGhpcy5fa2luZ3NbZV09PWkpKXJldHVybiExO2xldCBuPXRoaXMuX2JvYXJkW2ldO3JldHVybiBuJiZuLnR5cGU9PT16JiYodGhpcy5fa2luZ3Nbbi5jb2xvcl09WSksdGhpcy5fc2V0KGkse3R5cGU6dCxjb2xvcjplfSksdD09PXomJih0aGlzLl9raW5nc1tlXT1pKSwhMH1fY2xlYXIodCl7dGhpcy5faGFzaF49dGhpcy5fcGllY2VLZXkodCksZGVsZXRlIHRoaXMuX2JvYXJkW3RdfXJlbW92ZSh0KXtsZXQgZT10aGlzLmdldCh0KTtyZXR1cm4gdGhpcy5fY2xlYXIoT1t0XSksZSYmZS50eXBlPT09eiYmKHRoaXMuX2tpbmdzW2UuY29sb3JdPVkpLHRoaXMuX3VwZGF0ZUNhc3RsaW5nUmlnaHRzKCksdGhpcy5fdXBkYXRlRW5QYXNzYW50U3F1YXJlKCksdGhpcy5fdXBkYXRlU2V0dXAodGhpcy5mZW4oKSksZX1fdXBkYXRlQ2FzdGxpbmdSaWdodHMoKXt0aGlzLl9oYXNoXj10aGlzLl9jYXN0bGluZ0tleSgpO2xldCB0PXRoaXMuX2JvYXJkW08uZTFdPy50eXBlPT09eiYmdGhpcy5fYm9hcmRbTy5lMV0/LmNvbG9yPT09WCxlPXRoaXMuX2JvYXJkW08uZThdPy50eXBlPT09eiYmdGhpcy5fYm9hcmRbTy5lOF0/LmNvbG9yPT09aWU7KCF0fHx0aGlzLl9ib2FyZFtPLmExXT8udHlwZSE9PUllfHx0aGlzLl9ib2FyZFtPLmExXT8uY29sb3IhPT1YKSYmKHRoaXMuX2Nhc3RsaW5nLncmPS02NSksKCF0fHx0aGlzLl9ib2FyZFtPLmgxXT8udHlwZSE9PUllfHx0aGlzLl9ib2FyZFtPLmgxXT8uY29sb3IhPT1YKSYmKHRoaXMuX2Nhc3RsaW5nLncmPS0zMyksKCFlfHx0aGlzLl9ib2FyZFtPLmE4XT8udHlwZSE9PUllfHx0aGlzLl9ib2FyZFtPLmE4XT8uY29sb3IhPT1pZSkmJih0aGlzLl9jYXN0bGluZy5iJj0tNjUpLCghZXx8dGhpcy5fYm9hcmRbTy5oOF0/LnR5cGUhPT1JZXx8dGhpcy5fYm9hcmRbTy5oOF0/LmNvbG9yIT09aWUpJiYodGhpcy5fY2FzdGxpbmcuYiY9LTMzKSx0aGlzLl9oYXNoXj10aGlzLl9jYXN0bGluZ0tleSgpfV91cGRhdGVFblBhc3NhbnRTcXVhcmUoKXtpZih0aGlzLl9lcFNxdWFyZT09PVkpcmV0dXJuO2xldCB0PXRoaXMuX2VwU3F1YXJlKyh0aGlzLl90dXJuPT09WD8tMTY6MTYpLGU9dGhpcy5fZXBTcXVhcmUrKHRoaXMuX3R1cm49PT1YPzE2Oi0xNikscj1bZSsxLGUtMV07aWYodGhpcy5fYm9hcmRbdF0hPT1udWxsfHx0aGlzLl9ib2FyZFt0aGlzLl9lcFNxdWFyZV0hPT1udWxsfHx0aGlzLl9ib2FyZFtlXT8uY29sb3IhPT1UZSh0aGlzLl90dXJuKXx8dGhpcy5fYm9hcmRbZV0/LnR5cGUhPT1IKXt0aGlzLl9oYXNoXj10aGlzLl9lcEtleSgpLHRoaXMuX2VwU3F1YXJlPVk7cmV0dXJufWxldCBpPW49PiEobiYxMzYpJiZ0aGlzLl9ib2FyZFtuXT8uY29sb3I9PT10aGlzLl90dXJuJiZ0aGlzLl9ib2FyZFtuXT8udHlwZT09PUg7ci5zb21lKGkpfHwodGhpcy5faGFzaF49dGhpcy5fZXBLZXkoKSx0aGlzLl9lcFNxdWFyZT1ZKX1fYXR0YWNrZWQodCxlLHIpe2xldCBpPVtdO2ZvcihsZXQgbj1PLmE4O248PU8uaDE7bisrKXtpZihuJjEzNil7bis9Nztjb250aW51ZX1pZih0aGlzLl9ib2FyZFtuXT09PXZvaWQgMHx8dGhpcy5fYm9hcmRbbl0uY29sb3IhPT10KWNvbnRpbnVlO2xldCBhPXRoaXMuX2JvYXJkW25dLGw9bi1lO2lmKGw9PT0wKWNvbnRpbnVlO2xldCB3PWwrMTE5O2lmKEJyW3ddJkhyW2EudHlwZV0pe2lmKGEudHlwZT09PUgpe2lmKGw+MCYmYS5jb2xvcj09PVh8fGw8PTAmJmEuY29sb3I9PT1pZSlpZihyKWkucHVzaChXKG4pKTtlbHNlIHJldHVybiEwO2NvbnRpbnVlfWlmKGEudHlwZT09PSJuInx8YS50eXBlPT09ImsiKWlmKHIpe2kucHVzaChXKG4pKTtjb250aW51ZX1lbHNlIHJldHVybiEwO2xldCBrPWpyW3ddLCQ9bitrLFQ9ITE7Zm9yKDskIT09ZTspe2lmKHRoaXMuX2JvYXJkWyRdIT1udWxsKXtUPSEwO2JyZWFrfSQrPWt9aWYoIVQpaWYocil7aS5wdXNoKFcobikpO2NvbnRpbnVlfWVsc2UgcmV0dXJuITB9fXJldHVybiByP2k6ITF9YXR0YWNrZXJzKHQsZSl7cmV0dXJuIGU/dGhpcy5fYXR0YWNrZWQoZSxPW3RdLCEwKTp0aGlzLl9hdHRhY2tlZCh0aGlzLl90dXJuLE9bdF0sITApfV9pc0tpbmdBdHRhY2tlZCh0KXtsZXQgZT10aGlzLl9raW5nc1t0XTtyZXR1cm4gZT09PS0xPyExOnRoaXMuX2F0dGFja2VkKFRlKHQpLGUpfWhhc2goKXtyZXR1cm4gdGhpcy5faGFzaC50b1N0cmluZygxNil9aXNBdHRhY2tlZCh0LGUpe3JldHVybiB0aGlzLl9hdHRhY2tlZChlLE9bdF0pfWlzQ2hlY2soKXtyZXR1cm4gdGhpcy5faXNLaW5nQXR0YWNrZWQodGhpcy5fdHVybil9aW5DaGVjaygpe3JldHVybiB0aGlzLmlzQ2hlY2soKX1pc0NoZWNrbWF0ZSgpe3JldHVybiB0aGlzLmlzQ2hlY2soKSYmdGhpcy5fbW92ZXMoKS5sZW5ndGg9PT0wfWlzU3RhbGVtYXRlKCl7cmV0dXJuIXRoaXMuaXNDaGVjaygpJiZ0aGlzLl9tb3ZlcygpLmxlbmd0aD09PTB9aXNJbnN1ZmZpY2llbnRNYXRlcmlhbCgpe2xldCB0PXtiOjAsbjowLHI6MCxxOjAsazowLHA6MH0sZT1bXSxyPTAsaT0wO2ZvcihsZXQgbj1PLmE4O248PU8uaDE7bisrKXtpZihpPShpKzEpJTIsbiYxMzYpe24rPTc7Y29udGludWV9bGV0IGE9dGhpcy5fYm9hcmRbbl07YSYmKHRbYS50eXBlXT1hLnR5cGUgaW4gdD90W2EudHlwZV0rMToxLGEudHlwZT09PURlJiZlLnB1c2goaSkscisrKX1pZihyPT09MilyZXR1cm4hMDtpZihyPT09MyYmKHRbRGVdPT09MXx8dFt0dF09PT0xKSlyZXR1cm4hMDtpZihyPT09dFtEZV0rMil7bGV0IG49MCxhPWUubGVuZ3RoO2ZvcihsZXQgbD0wO2w8YTtsKyspbis9ZVtsXTtpZihuPT09MHx8bj09PWEpcmV0dXJuITB9cmV0dXJuITF9aXNUaHJlZWZvbGRSZXBldGl0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFBvc2l0aW9uQ291bnQodGhpcy5faGFzaCk+PTN9aXNEcmF3QnlGaWZ0eU1vdmVzKCl7cmV0dXJuIHRoaXMuX2hhbGZNb3Zlcz49MTAwfWlzRHJhdygpe3JldHVybiB0aGlzLmlzRHJhd0J5RmlmdHlNb3ZlcygpfHx0aGlzLmlzU3RhbGVtYXRlKCl8fHRoaXMuaXNJbnN1ZmZpY2llbnRNYXRlcmlhbCgpfHx0aGlzLmlzVGhyZWVmb2xkUmVwZXRpdGlvbigpfWlzR2FtZU92ZXIoKXtyZXR1cm4gdGhpcy5pc0NoZWNrbWF0ZSgpfHx0aGlzLmlzRHJhdygpfW1vdmVzKHt2ZXJib3NlOnQ9ITEsc3F1YXJlOmU9dm9pZCAwLHBpZWNlOnI9dm9pZCAwfT17fSl7bGV0IGk9dGhpcy5fbW92ZXMoe3NxdWFyZTplLHBpZWNlOnJ9KTtyZXR1cm4gdD9pLm1hcChuPT5uZXcgeGUodGhpcyxuKSk6aS5tYXAobj0+dGhpcy5fbW92ZVRvU2FuKG4saSkpfV9tb3Zlcyh7bGVnYWw6dD0hMCxwaWVjZTplPXZvaWQgMCxzcXVhcmU6cj12b2lkIDB9PXt9KXtsZXQgaT1yP3IudG9Mb3dlckNhc2UoKTp2b2lkIDAsbj1lPy50b0xvd2VyQ2FzZSgpLGE9W10sbD10aGlzLl90dXJuLHc9VGUobCksaz1PLmE4LCQ9Ty5oMSxUPSExO2lmKGkpaWYoaSBpbiBPKWs9JD1PW2ldLFQ9ITA7ZWxzZSByZXR1cm5bXTtmb3IobGV0IEM9aztDPD0kO0MrKyl7aWYoQyYxMzYpe0MrPTc7Y29udGludWV9aWYoIXRoaXMuX2JvYXJkW0NdfHx0aGlzLl9ib2FyZFtDXS5jb2xvcj09PXcpY29udGludWU7bGV0e3R5cGU6RH09dGhpcy5fYm9hcmRbQ10sQjtpZihEPT09SCl7aWYobiYmbiE9PUQpY29udGludWU7Qj1DK1plW2xdWzBdLHRoaXMuX2JvYXJkW0JdfHwoZ2UoYSxsLEMsQixIKSxCPUMrWmVbbF1bMV0sR3JbbF09PT13ZShDKSYmIXRoaXMuX2JvYXJkW0JdJiZnZShhLGwsQyxCLEgsdm9pZCAwLE0uQklHX1BBV04pKTtmb3IobGV0IFY9MjtWPDQ7VisrKUI9QytaZVtsXVtWXSwhKEImMTM2KSYmKHRoaXMuX2JvYXJkW0JdPy5jb2xvcj09PXc/Z2UoYSxsLEMsQixILHRoaXMuX2JvYXJkW0JdLnR5cGUsTS5DQVBUVVJFKTpCPT09dGhpcy5fZXBTcXVhcmUmJmdlKGEsbCxDLEIsSCxILE0uRVBfQ0FQVFVSRSkpfWVsc2V7aWYobiYmbiE9PUQpY29udGludWU7Zm9yKGxldCBWPTAsYmU9eXRbRF0ubGVuZ3RoO1Y8YmU7VisrKXtsZXQgQ2U9eXRbRF1bVl07Zm9yKEI9QztCKz1DZSwhKEImMTM2KTspe2lmKCF0aGlzLl9ib2FyZFtCXSlnZShhLGwsQyxCLEQpO2Vsc2V7aWYodGhpcy5fYm9hcmRbQl0uY29sb3I9PT1sKWJyZWFrO2dlKGEsbCxDLEIsRCx0aGlzLl9ib2FyZFtCXS50eXBlLE0uQ0FQVFVSRSk7YnJlYWt9aWYoRD09PXR0fHxEPT09eilicmVha319fX1pZigobj09PXZvaWQgMHx8bj09PXopJiYoIVR8fCQ9PT10aGlzLl9raW5nc1tsXSkpe2lmKHRoaXMuX2Nhc3RsaW5nW2xdJk0uS1NJREVfQ0FTVExFKXtsZXQgQz10aGlzLl9raW5nc1tsXSxEPUMrMjshdGhpcy5fYm9hcmRbQysxXSYmIXRoaXMuX2JvYXJkW0RdJiYhdGhpcy5fYXR0YWNrZWQodyx0aGlzLl9raW5nc1tsXSkmJiF0aGlzLl9hdHRhY2tlZCh3LEMrMSkmJiF0aGlzLl9hdHRhY2tlZCh3LEQpJiZnZShhLGwsdGhpcy5fa2luZ3NbbF0sRCx6LHZvaWQgMCxNLktTSURFX0NBU1RMRSl9aWYodGhpcy5fY2FzdGxpbmdbbF0mTS5RU0lERV9DQVNUTEUpe2xldCBDPXRoaXMuX2tpbmdzW2xdLEQ9Qy0yOyF0aGlzLl9ib2FyZFtDLTFdJiYhdGhpcy5fYm9hcmRbQy0yXSYmIXRoaXMuX2JvYXJkW0MtM10mJiF0aGlzLl9hdHRhY2tlZCh3LHRoaXMuX2tpbmdzW2xdKSYmIXRoaXMuX2F0dGFja2VkKHcsQy0xKSYmIXRoaXMuX2F0dGFja2VkKHcsRCkmJmdlKGEsbCx0aGlzLl9raW5nc1tsXSxELHosdm9pZCAwLE0uUVNJREVfQ0FTVExFKX19aWYoIXR8fHRoaXMuX2tpbmdzW2xdPT09LTEpcmV0dXJuIGE7bGV0IEU9W107Zm9yKGxldCBDPTAsRD1hLmxlbmd0aDtDPEQ7QysrKXRoaXMuX21ha2VNb3ZlKGFbQ10pLHRoaXMuX2lzS2luZ0F0dGFja2VkKGwpfHxFLnB1c2goYVtDXSksdGhpcy5fdW5kb01vdmUoKTtyZXR1cm4gRX1tb3ZlKHQse3N0cmljdDplPSExfT17fSl7bGV0IHI9bnVsbDtpZih0eXBlb2YgdD09InN0cmluZyIpcj10aGlzLl9tb3ZlRnJvbVNhbih0LGUpO2Vsc2UgaWYodD09PW51bGwpcj10aGlzLl9tb3ZlRnJvbVNhbihYZSxlKTtlbHNlIGlmKHR5cGVvZiB0PT0ib2JqZWN0Iil7bGV0IG49dGhpcy5fbW92ZXMoKTtmb3IobGV0IGE9MCxsPW4ubGVuZ3RoO2E8bDthKyspaWYodC5mcm9tPT09VyhuW2FdLmZyb20pJiZ0LnRvPT09VyhuW2FdLnRvKSYmKCEoInByb21vdGlvbiJpbiBuW2FdKXx8dC5wcm9tb3Rpb249PT1uW2FdLnByb21vdGlvbikpe3I9blthXTticmVha319aWYoIXIpdGhyb3cgdHlwZW9mIHQ9PSJzdHJpbmciP25ldyBFcnJvcihgSW52YWxpZCBtb3ZlOiAke3R9YCk6bmV3IEVycm9yKGBJbnZhbGlkIG1vdmU6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7aWYodGhpcy5pc0NoZWNrKCkmJnIuZmxhZ3MmTS5OVUxMX01PVkUpdGhyb3cgbmV3IEVycm9yKCJOdWxsIG1vdmUgbm90IGFsbG93ZWQgd2hlbiBpbiBjaGVjayIpO2xldCBpPW5ldyB4ZSh0aGlzLHIpO3JldHVybiB0aGlzLl9tYWtlTW92ZShyKSx0aGlzLl9pbmNQb3NpdGlvbkNvdW50KCksaX1fcHVzaCh0KXt0aGlzLl9oaXN0b3J5LnB1c2goe21vdmU6dCxraW5nczp7Yjp0aGlzLl9raW5ncy5iLHc6dGhpcy5fa2luZ3Mud30sdHVybjp0aGlzLl90dXJuLGNhc3RsaW5nOntiOnRoaXMuX2Nhc3RsaW5nLmIsdzp0aGlzLl9jYXN0bGluZy53fSxlcFNxdWFyZTp0aGlzLl9lcFNxdWFyZSxoYWxmTW92ZXM6dGhpcy5faGFsZk1vdmVzLG1vdmVOdW1iZXI6dGhpcy5fbW92ZU51bWJlcn0pfV9tb3ZlUGllY2UodCxlKXt0aGlzLl9oYXNoXj10aGlzLl9waWVjZUtleSh0KSx0aGlzLl9ib2FyZFtlXT10aGlzLl9ib2FyZFt0XSxkZWxldGUgdGhpcy5fYm9hcmRbdF0sdGhpcy5faGFzaF49dGhpcy5fcGllY2VLZXkoZSl9X21ha2VNb3ZlKHQpe2xldCBlPXRoaXMuX3R1cm4scj1UZShlKTtpZih0aGlzLl9wdXNoKHQpLHQuZmxhZ3MmTS5OVUxMX01PVkUpe2U9PT1pZSYmdGhpcy5fbW92ZU51bWJlcisrLHRoaXMuX2hhbGZNb3ZlcysrLHRoaXMuX3R1cm49cix0aGlzLl9lcFNxdWFyZT1ZO3JldHVybn1pZih0aGlzLl9oYXNoXj10aGlzLl9lcEtleSgpLHRoaXMuX2hhc2hePXRoaXMuX2Nhc3RsaW5nS2V5KCksdC5jYXB0dXJlZCYmKHRoaXMuX2hhc2hePXRoaXMuX3BpZWNlS2V5KHQudG8pKSx0aGlzLl9tb3ZlUGllY2UodC5mcm9tLHQudG8pLHQuZmxhZ3MmTS5FUF9DQVBUVVJFJiYodGhpcy5fdHVybj09PWllP3RoaXMuX2NsZWFyKHQudG8tMTYpOnRoaXMuX2NsZWFyKHQudG8rMTYpKSx0LnByb21vdGlvbiYmKHRoaXMuX2NsZWFyKHQudG8pLHRoaXMuX3NldCh0LnRvLHt0eXBlOnQucHJvbW90aW9uLGNvbG9yOmV9KSksdGhpcy5fYm9hcmRbdC50b10udHlwZT09PXope2lmKHRoaXMuX2tpbmdzW2VdPXQudG8sdC5mbGFncyZNLktTSURFX0NBU1RMRSl7bGV0IGk9dC50by0xLG49dC50bysxO3RoaXMuX21vdmVQaWVjZShuLGkpfWVsc2UgaWYodC5mbGFncyZNLlFTSURFX0NBU1RMRSl7bGV0IGk9dC50bysxLG49dC50by0yO3RoaXMuX21vdmVQaWVjZShuLGkpfXRoaXMuX2Nhc3RsaW5nW2VdPTB9aWYodGhpcy5fY2FzdGxpbmdbZV0pe2ZvcihsZXQgaT0wLG49ZmVbZV0ubGVuZ3RoO2k8bjtpKyspaWYodC5mcm9tPT09ZmVbZV1baV0uc3F1YXJlJiZ0aGlzLl9jYXN0bGluZ1tlXSZmZVtlXVtpXS5mbGFnKXt0aGlzLl9jYXN0bGluZ1tlXV49ZmVbZV1baV0uZmxhZzticmVha319aWYodGhpcy5fY2FzdGxpbmdbcl0pe2ZvcihsZXQgaT0wLG49ZmVbcl0ubGVuZ3RoO2k8bjtpKyspaWYodC50bz09PWZlW3JdW2ldLnNxdWFyZSYmdGhpcy5fY2FzdGxpbmdbcl0mZmVbcl1baV0uZmxhZyl7dGhpcy5fY2FzdGxpbmdbcl1ePWZlW3JdW2ldLmZsYWc7YnJlYWt9fWlmKHRoaXMuX2hhc2hePXRoaXMuX2Nhc3RsaW5nS2V5KCksdC5mbGFncyZNLkJJR19QQVdOKXtsZXQgaTtlPT09aWU/aT10LnRvLTE2Omk9dC50bysxNiwhKHQudG8tMSYxMzYpJiZ0aGlzLl9ib2FyZFt0LnRvLTFdPy50eXBlPT09SCYmdGhpcy5fYm9hcmRbdC50by0xXT8uY29sb3I9PT1yfHwhKHQudG8rMSYxMzYpJiZ0aGlzLl9ib2FyZFt0LnRvKzFdPy50eXBlPT09SCYmdGhpcy5fYm9hcmRbdC50bysxXT8uY29sb3I9PT1yPyh0aGlzLl9lcFNxdWFyZT1pLHRoaXMuX2hhc2hePXRoaXMuX2VwS2V5KCkpOnRoaXMuX2VwU3F1YXJlPVl9ZWxzZSB0aGlzLl9lcFNxdWFyZT1ZO3QucGllY2U9PT1IP3RoaXMuX2hhbGZNb3Zlcz0wOnQuZmxhZ3MmKE0uQ0FQVFVSRXxNLkVQX0NBUFRVUkUpP3RoaXMuX2hhbGZNb3Zlcz0wOnRoaXMuX2hhbGZNb3ZlcysrLGU9PT1pZSYmdGhpcy5fbW92ZU51bWJlcisrLHRoaXMuX3R1cm49cix0aGlzLl9oYXNoXj1HZX11bmRvKCl7bGV0IHQ9dGhpcy5faGFzaCxlPXRoaXMuX3VuZG9Nb3ZlKCk7aWYoZSl7bGV0IHI9bmV3IHhlKHRoaXMsZSk7cmV0dXJuIHRoaXMuX2RlY1Bvc2l0aW9uQ291bnQodCkscn1yZXR1cm4gbnVsbH1fdW5kb01vdmUoKXtsZXQgdD10aGlzLl9oaXN0b3J5LnBvcCgpO2lmKHQ9PT12b2lkIDApcmV0dXJuIG51bGw7dGhpcy5faGFzaF49dGhpcy5fZXBLZXkoKSx0aGlzLl9oYXNoXj10aGlzLl9jYXN0bGluZ0tleSgpO2xldCBlPXQubW92ZTt0aGlzLl9raW5ncz10LmtpbmdzLHRoaXMuX3R1cm49dC50dXJuLHRoaXMuX2Nhc3RsaW5nPXQuY2FzdGxpbmcsdGhpcy5fZXBTcXVhcmU9dC5lcFNxdWFyZSx0aGlzLl9oYWxmTW92ZXM9dC5oYWxmTW92ZXMsdGhpcy5fbW92ZU51bWJlcj10Lm1vdmVOdW1iZXIsdGhpcy5faGFzaF49dGhpcy5fZXBLZXkoKSx0aGlzLl9oYXNoXj10aGlzLl9jYXN0bGluZ0tleSgpLHRoaXMuX2hhc2hePUdlO2xldCByPXRoaXMuX3R1cm4saT1UZShyKTtpZihlLmZsYWdzJk0uTlVMTF9NT1ZFKXJldHVybiBlO2lmKHRoaXMuX21vdmVQaWVjZShlLnRvLGUuZnJvbSksZS5waWVjZSYmKHRoaXMuX2NsZWFyKGUuZnJvbSksdGhpcy5fc2V0KGUuZnJvbSx7dHlwZTplLnBpZWNlLGNvbG9yOnJ9KSksZS5jYXB0dXJlZClpZihlLmZsYWdzJk0uRVBfQ0FQVFVSRSl7bGV0IG47cj09PWllP249ZS50by0xNjpuPWUudG8rMTYsdGhpcy5fc2V0KG4se3R5cGU6SCxjb2xvcjppfSl9ZWxzZSB0aGlzLl9zZXQoZS50byx7dHlwZTplLmNhcHR1cmVkLGNvbG9yOml9KTtpZihlLmZsYWdzJihNLktTSURFX0NBU1RMRXxNLlFTSURFX0NBU1RMRSkpe2xldCBuLGE7ZS5mbGFncyZNLktTSURFX0NBU1RMRT8obj1lLnRvKzEsYT1lLnRvLTEpOihuPWUudG8tMixhPWUudG8rMSksdGhpcy5fbW92ZVBpZWNlKGEsbil9cmV0dXJuIGV9cGduKHtuZXdsaW5lOnQ9YApgLG1heFdpZHRoOmU9MH09e30pe2xldCByPVtdLGk9ITE7Zm9yKGxldCBFIGluIHRoaXMuX2hlYWRlcil0aGlzLl9oZWFkZXJbRV0mJnIucHVzaChgWyR7RX0gIiR7dGhpcy5faGVhZGVyW0VdfSJdYCt0KSxpPSEwO2kmJnRoaXMuX2hpc3RvcnkubGVuZ3RoJiZyLnB1c2godCk7bGV0IG49RT0+e2xldCBDPXRoaXMuX2NvbW1lbnRzW3RoaXMuZmVuKCldO2lmKHR5cGVvZiBDPCJ1Iil7bGV0IEQ9RS5sZW5ndGg+MD8iICI6IiI7RT1gJHtFfSR7RH17JHtDfX1gfXJldHVybiBFfSxhPVtdO2Zvcig7dGhpcy5faGlzdG9yeS5sZW5ndGg+MDspYS5wdXNoKHRoaXMuX3VuZG9Nb3ZlKCkpO2xldCBsPVtdLHc9IiI7Zm9yKGEubGVuZ3RoPT09MCYmbC5wdXNoKG4oIiIpKTthLmxlbmd0aD4wOyl7dz1uKHcpO2xldCBFPWEucG9wKCk7aWYoIUUpYnJlYWs7aWYoIXRoaXMuX2hpc3RvcnkubGVuZ3RoJiZFLmNvbG9yPT09ImIiKXtsZXQgQz1gJHt0aGlzLl9tb3ZlTnVtYmVyfS4gLi4uYDt3PXc/YCR7d30gJHtDfWA6Q31lbHNlIEUuY29sb3I9PT0idyImJih3Lmxlbmd0aCYmbC5wdXNoKHcpLHc9dGhpcy5fbW92ZU51bWJlcisiLiIpO3c9dysiICIrdGhpcy5fbW92ZVRvU2FuKEUsdGhpcy5fbW92ZXMoe2xlZ2FsOiEwfSkpLHRoaXMuX21ha2VNb3ZlKEUpfWlmKHcubGVuZ3RoJiZsLnB1c2gobih3KSksbC5wdXNoKHRoaXMuX2hlYWRlci5SZXN1bHR8fCIqIiksZT09PTApcmV0dXJuIHIuam9pbigiIikrbC5qb2luKCIgIik7bGV0IGs9ZnVuY3Rpb24oKXtyZXR1cm4gci5sZW5ndGg+MCYmcltyLmxlbmd0aC0xXT09PSIgIj8oci5wb3AoKSwhMCk6ITF9LCQ9ZnVuY3Rpb24oRSxDKXtmb3IobGV0IEQgb2YgQy5zcGxpdCgiICIpKWlmKEQpe2lmKEUrRC5sZW5ndGg+ZSl7Zm9yKDtrKCk7KUUtLTtyLnB1c2godCksRT0wfXIucHVzaChEKSxFKz1ELmxlbmd0aCxyLnB1c2goIiAiKSxFKyt9cmV0dXJuIGsoKSYmRS0tLEV9LFQ9MDtmb3IobGV0IEU9MDtFPGwubGVuZ3RoO0UrKyl7aWYoVCtsW0VdLmxlbmd0aD5lJiZsW0VdLmluY2x1ZGVzKCJ7Iikpe1Q9JChULGxbRV0pO2NvbnRpbnVlfVQrbFtFXS5sZW5ndGg+ZSYmRSE9PTA/KHJbci5sZW5ndGgtMV09PT0iICImJnIucG9wKCksci5wdXNoKHQpLFQ9MCk6RSE9PTAmJihyLnB1c2goIiAiKSxUKyspLHIucHVzaChsW0VdKSxUKz1sW0VdLmxlbmd0aH1yZXR1cm4gci5qb2luKCIiKX1oZWFkZXIoLi4udCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKz0yKXR5cGVvZiB0W2VdPT0ic3RyaW5nIiYmdHlwZW9mIHRbZSsxXT09InN0cmluZyImJih0aGlzLl9oZWFkZXJbdFtlXV09dFtlKzFdKTtyZXR1cm4gdGhpcy5faGVhZGVyfXNldEhlYWRlcih0LGUpe3JldHVybiB0aGlzLl9oZWFkZXJbdF09ZT8/cnRbdF0/P251bGwsdGhpcy5nZXRIZWFkZXJzKCl9cmVtb3ZlSGVhZGVyKHQpe3JldHVybiB0IGluIHRoaXMuX2hlYWRlcj8odGhpcy5faGVhZGVyW3RdPXJ0W3RdfHxudWxsLCEwKTohMX1nZXRIZWFkZXJzKCl7bGV0IHQ9e307Zm9yKGxldFtlLHJdb2YgT2JqZWN0LmVudHJpZXModGhpcy5faGVhZGVyKSlyIT09bnVsbCYmKHRbZV09cik7cmV0dXJuIHR9bG9hZFBnbih0LHtzdHJpY3Q6ZT0hMSxuZXdsaW5lQ2hhcjpyPWBccj8KYH09e30pe3IhPT1gXHI/CmAmJih0PXQucmVwbGFjZShuZXcgUmVnRXhwKHIsImciKSxgCmApKTtsZXQgaT1Pcih0KTt0aGlzLnJlc2V0KCk7bGV0IG49aS5oZWFkZXJzLGE9IiI7Zm9yKGxldCBrIGluIG4pay50b0xvd2VyQ2FzZSgpPT09ImZlbiImJihhPW5ba10pLHRoaXMuaGVhZGVyKGssbltrXSk7aWYoIWUpYSYmdGhpcy5sb2FkKGEse3ByZXNlcnZlSGVhZGVyczohMH0pO2Vsc2UgaWYobi5TZXRVcD09PSIxIil7aWYoISgiRkVOImluIG4pKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBQR046IEZFTiB0YWcgbXVzdCBiZSBzdXBwbGllZCB3aXRoIFNldFVwIHRhZyIpO3RoaXMubG9hZChuLkZFTix7cHJlc2VydmVIZWFkZXJzOiEwfSl9bGV0IGw9aS5yb290O2Zvcig7bDspe2lmKGwubW92ZSl7bGV0IGs9dGhpcy5fbW92ZUZyb21TYW4obC5tb3ZlLGUpO2lmKGs9PW51bGwpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1vdmUgaW4gUEdOOiAke2wubW92ZX1gKTt0aGlzLl9tYWtlTW92ZShrKSx0aGlzLl9pbmNQb3NpdGlvbkNvdW50KCl9bC5jb21tZW50IT09dm9pZCAwJiYodGhpcy5fY29tbWVudHNbdGhpcy5mZW4oKV09bC5jb21tZW50KSxsPWwudmFyaWF0aW9uc1swXX1sZXQgdz1pLnJlc3VsdDt3JiZPYmplY3Qua2V5cyh0aGlzLl9oZWFkZXIpLmxlbmd0aCYmdGhpcy5faGVhZGVyLlJlc3VsdCE9PXcmJnRoaXMuc2V0SGVhZGVyKCJSZXN1bHQiLHcpfV9tb3ZlVG9TYW4odCxlKXtsZXQgcj0iIjtpZih0LmZsYWdzJk0uS1NJREVfQ0FTVExFKXI9Ik8tTyI7ZWxzZSBpZih0LmZsYWdzJk0uUVNJREVfQ0FTVExFKXI9Ik8tTy1PIjtlbHNle2lmKHQuZmxhZ3MmTS5OVUxMX01PVkUpcmV0dXJuIFhlO2lmKHQucGllY2UhPT1IKXtsZXQgaT1acih0LGUpO3IrPXQucGllY2UudG9VcHBlckNhc2UoKStpfXQuZmxhZ3MmKE0uQ0FQVFVSRXxNLkVQX0NBUFRVUkUpJiYodC5waWVjZT09PUgmJihyKz1XKHQuZnJvbSlbMF0pLHIrPSJ4Iikscis9Vyh0LnRvKSx0LnByb21vdGlvbiYmKHIrPSI9Iit0LnByb21vdGlvbi50b1VwcGVyQ2FzZSgpKX1yZXR1cm4gdGhpcy5fbWFrZU1vdmUodCksdGhpcy5pc0NoZWNrKCkmJih0aGlzLmlzQ2hlY2ttYXRlKCk/cis9IiMiOnIrPSIrIiksdGhpcy5fdW5kb01vdmUoKSxyfV9tb3ZlRnJvbVNhbih0LGU9ITEpe2xldCByPWV0KHQpO2lmKGV8fChyPT09IjAtMCI/cj0iTy1PIjpyPT09IjAtMC0wIiYmKHI9Ik8tTy1PIikpLHI9PVhlKXJldHVybntjb2xvcjp0aGlzLl90dXJuLGZyb206MCx0bzowLHBpZWNlOiJrIixmbGFnczpNLk5VTExfTU9WRX07bGV0IGk9U3Qociksbj10aGlzLl9tb3Zlcyh7bGVnYWw6ITAscGllY2U6aX0pO2ZvcihsZXQgRT0wLEM9bi5sZW5ndGg7RTxDO0UrKylpZihyPT09ZXQodGhpcy5fbW92ZVRvU2FuKG5bRV0sbikpKXJldHVybiBuW0VdO2lmKGUpcmV0dXJuIG51bGw7bGV0IGEsbCx3LGssJCxUPSExO2lmKGw9ci5tYXRjaCgvKFtwbmJycWtQTkJSUUtdKT8oW2EtaF1bMS04XSl4Py0/KFthLWhdWzEtOF0pKFtxcmJuUVJCTl0pPy8pLGw/KGE9bFsxXSx3PWxbMl0saz1sWzNdLCQ9bFs0XSx3Lmxlbmd0aD09MSYmKFQ9ITApKToobD1yLm1hdGNoKC8oW3BuYnJxa1BOQlJRS10pPyhbYS1oXT9bMS04XT8peD8tPyhbYS1oXVsxLThdKShbcXJiblFSQk5dKT8vKSxsJiYoYT1sWzFdLHc9bFsyXSxrPWxbM10sJD1sWzRdLHcubGVuZ3RoPT0xJiYoVD0hMCkpKSxpPVN0KHIpLG49dGhpcy5fbW92ZXMoe2xlZ2FsOiEwLHBpZWNlOmF8fGl9KSwhaylyZXR1cm4gbnVsbDtmb3IobGV0IEU9MCxDPW4ubGVuZ3RoO0U8QztFKyspaWYodyl7aWYoKCFhfHxhLnRvTG93ZXJDYXNlKCk9PW5bRV0ucGllY2UpJiZPW3ddPT1uW0VdLmZyb20mJk9ba109PW5bRV0udG8mJighJHx8JC50b0xvd2VyQ2FzZSgpPT1uW0VdLnByb21vdGlvbikpcmV0dXJuIG5bRV07aWYoVCl7bGV0IEQ9VyhuW0VdLmZyb20pO2lmKCghYXx8YS50b0xvd2VyQ2FzZSgpPT1uW0VdLnBpZWNlKSYmT1trXT09bltFXS50byYmKHc9PURbMF18fHc9PURbMV0pJiYoISR8fCQudG9Mb3dlckNhc2UoKT09bltFXS5wcm9tb3Rpb24pKXJldHVybiBuW0VdfX1lbHNlIGlmKHI9PT1ldCh0aGlzLl9tb3ZlVG9TYW4obltFXSxuKSkucmVwbGFjZSgieCIsIiIpKXJldHVybiBuW0VdO3JldHVybiBudWxsfWFzY2lpKCl7bGV0IHQ9YCAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCmA7Zm9yKGxldCBlPU8uYTg7ZTw9Ty5oMTtlKyspe2lmKFBlKGUpPT09MCYmKHQrPSIgIisiODc2NTQzMjEiW3dlKGUpXSsiIHwiKSx0aGlzLl9ib2FyZFtlXSl7bGV0IHI9dGhpcy5fYm9hcmRbZV0udHlwZSxuPXRoaXMuX2JvYXJkW2VdLmNvbG9yPT09WD9yLnRvVXBwZXJDYXNlKCk6ci50b0xvd2VyQ2FzZSgpO3QrPSIgIituKyIgIn1lbHNlIHQrPSIgLiAiO2UrMSYxMzYmJih0Kz1gfApgLGUrPTgpfXJldHVybiB0Kz1gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKYCx0Kz0iICAgICBhICBiICBjICBkICBlICBmICBnICBoIix0fXBlcmZ0KHQpe2xldCBlPXRoaXMuX21vdmVzKHtsZWdhbDohMX0pLHI9MCxpPXRoaXMuX3R1cm47Zm9yKGxldCBuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXRoaXMuX21ha2VNb3ZlKGVbbl0pLHRoaXMuX2lzS2luZ0F0dGFja2VkKGkpfHwodC0xPjA/cis9dGhpcy5wZXJmdCh0LTEpOnIrKyksdGhpcy5fdW5kb01vdmUoKTtyZXR1cm4gcn1zZXRUdXJuKHQpe3JldHVybiB0aGlzLl90dXJuPT10PyExOih0aGlzLm1vdmUoIi0tIiksITApfXR1cm4oKXtyZXR1cm4gdGhpcy5fdHVybn1ib2FyZCgpe2xldCB0PVtdLGU9W107Zm9yKGxldCByPU8uYTg7cjw9Ty5oMTtyKyspdGhpcy5fYm9hcmRbcl09PW51bGw/ZS5wdXNoKG51bGwpOmUucHVzaCh7c3F1YXJlOlcociksdHlwZTp0aGlzLl9ib2FyZFtyXS50eXBlLGNvbG9yOnRoaXMuX2JvYXJkW3JdLmNvbG9yfSkscisxJjEzNiYmKHQucHVzaChlKSxlPVtdLHIrPTgpO3JldHVybiB0fXNxdWFyZUNvbG9yKHQpe2lmKHQgaW4gTyl7bGV0IGU9T1t0XTtyZXR1cm4od2UoZSkrUGUoZSkpJTI9PT0wPyJsaWdodCI6ImRhcmsifXJldHVybiBudWxsfWhpc3Rvcnkoe3ZlcmJvc2U6dD0hMX09e30pe2xldCBlPVtdLHI9W107Zm9yKDt0aGlzLl9oaXN0b3J5Lmxlbmd0aD4wOyllLnB1c2godGhpcy5fdW5kb01vdmUoKSk7Zm9yKDs7KXtsZXQgaT1lLnBvcCgpO2lmKCFpKWJyZWFrO3Q/ci5wdXNoKG5ldyB4ZSh0aGlzLGkpKTpyLnB1c2godGhpcy5fbW92ZVRvU2FuKGksdGhpcy5fbW92ZXMoKSkpLHRoaXMuX21ha2VNb3ZlKGkpfXJldHVybiByfV9nZXRQb3NpdGlvbkNvdW50KHQpe3JldHVybiB0aGlzLl9wb3NpdGlvbkNvdW50LmdldCh0KT8/MH1faW5jUG9zaXRpb25Db3VudCgpe3RoaXMuX3Bvc2l0aW9uQ291bnQuc2V0KHRoaXMuX2hhc2gsKHRoaXMuX3Bvc2l0aW9uQ291bnQuZ2V0KHRoaXMuX2hhc2gpPz8wKSsxKX1fZGVjUG9zaXRpb25Db3VudCh0KXtsZXQgZT10aGlzLl9wb3NpdGlvbkNvdW50LmdldCh0KT8/MDtlPT09MT90aGlzLl9wb3NpdGlvbkNvdW50LmRlbGV0ZSh0KTp0aGlzLl9wb3NpdGlvbkNvdW50LnNldCh0LGUtMSl9X3BydW5lQ29tbWVudHMoKXtsZXQgdD1bXSxlPXt9LHI9aT0+e2kgaW4gdGhpcy5fY29tbWVudHMmJihlW2ldPXRoaXMuX2NvbW1lbnRzW2ldKX07Zm9yKDt0aGlzLl9oaXN0b3J5Lmxlbmd0aD4wOyl0LnB1c2godGhpcy5fdW5kb01vdmUoKSk7Zm9yKHIodGhpcy5mZW4oKSk7Oyl7bGV0IGk9dC5wb3AoKTtpZighaSlicmVhazt0aGlzLl9tYWtlTW92ZShpKSxyKHRoaXMuZmVuKCkpfXRoaXMuX2NvbW1lbnRzPWV9Z2V0Q29tbWVudCgpe3JldHVybiB0aGlzLl9jb21tZW50c1t0aGlzLmZlbigpXX1zZXRDb21tZW50KHQpe3RoaXMuX2NvbW1lbnRzW3RoaXMuZmVuKCldPXQucmVwbGFjZSgieyIsIlsiKS5yZXBsYWNlKCJ9IiwiXSIpfWRlbGV0ZUNvbW1lbnQoKXtyZXR1cm4gdGhpcy5yZW1vdmVDb21tZW50KCl9cmVtb3ZlQ29tbWVudCgpe2xldCB0PXRoaXMuX2NvbW1lbnRzW3RoaXMuZmVuKCldO3JldHVybiBkZWxldGUgdGhpcy5fY29tbWVudHNbdGhpcy5mZW4oKV0sdH1nZXRDb21tZW50cygpe3JldHVybiB0aGlzLl9wcnVuZUNvbW1lbnRzKCksT2JqZWN0LmtleXModGhpcy5fY29tbWVudHMpLm1hcCh0PT4oe2Zlbjp0LGNvbW1lbnQ6dGhpcy5fY29tbWVudHNbdF19KSl9ZGVsZXRlQ29tbWVudHMoKXtyZXR1cm4gdGhpcy5yZW1vdmVDb21tZW50cygpfXJlbW92ZUNvbW1lbnRzKCl7cmV0dXJuIHRoaXMuX3BydW5lQ29tbWVudHMoKSxPYmplY3Qua2V5cyh0aGlzLl9jb21tZW50cykubWFwKHQ9PntsZXQgZT10aGlzLl9jb21tZW50c1t0XTtyZXR1cm4gZGVsZXRlIHRoaXMuX2NvbW1lbnRzW3RdLHtmZW46dCxjb21tZW50OmV9fSl9c2V0Q2FzdGxpbmdSaWdodHModCxlKXtmb3IobGV0IGkgb2ZbeixtZV0pZVtpXSE9PXZvaWQgMCYmKGVbaV0/dGhpcy5fY2FzdGxpbmdbdF18PU9lW2ldOnRoaXMuX2Nhc3RsaW5nW3RdJj1+T2VbaV0pO3RoaXMuX3VwZGF0ZUNhc3RsaW5nUmlnaHRzKCk7bGV0IHI9dGhpcy5nZXRDYXN0bGluZ1JpZ2h0cyh0KTtyZXR1cm4oZVt6XT09PXZvaWQgMHx8ZVt6XT09PXJbel0pJiYoZVttZV09PT12b2lkIDB8fGVbbWVdPT09clttZV0pfWdldENhc3RsaW5nUmlnaHRzKHQpe3JldHVybntbel06KHRoaXMuX2Nhc3RsaW5nW3RdJk9lW3pdKSE9PTAsW21lXToodGhpcy5fY2FzdGxpbmdbdF0mT2VbbWVdKSE9PTB9fW1vdmVOdW1iZXIoKXtyZXR1cm4gdGhpcy5fbW92ZU51bWJlcn19O2Z1bmN0aW9uIGtlKCl7aWYodHlwZW9mIGdsb2JhbFRoaXMuY3J5cHRvPy5yYW5kb21VVUlEPT0iZnVuY3Rpb24iKXJldHVybiBnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21VVUlEKCk7aWYodHlwZW9mIGdsb2JhbFRoaXMuY3J5cHRvPy5nZXRSYW5kb21WYWx1ZXMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJUaGUgaG9zdCBtdXN0IHByb3ZpZGUgYSBzZWN1cmUgaWRlbnRpZmllciBnZW5lcmF0b3IiKTtsZXQgcz1nbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTtzWzZdPXNbNl0mMTV8NjQsc1s4XT1zWzhdJjYzfDEyODtsZXQgdD1BcnJheS5mcm9tKHMsZT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKTtyZXR1cm5gJHt0LnNsaWNlKDAsOCl9LSR7dC5zbGljZSg4LDEyKX0tJHt0LnNsaWNlKDEyLDE2KX0tJHt0LnNsaWNlKDE2LDIwKX0tJHt0LnNsaWNlKDIwKX1gfWZ1bmN0aW9uIEF0KHM9Z2xvYmFsVGhpcyl7bGV0IHQ9cz8ub25lQXBwO2lmKCEoIXR8fHR5cGVvZiB0IT0ib2JqZWN0Inx8dHlwZW9mIHQuY2FsbCE9ImZ1bmN0aW9uIikpcmV0dXJuIHR9ZnVuY3Rpb24geHQocyx0KXtsZXQgZT1zO2lmKCFlfHxlLnRhYmxlSWQhPT10fHx0eXBlb2YgZS5pZCE9InN0cmluZyJ8fCFlLnZhbHVlc3x8dHlwZW9mIGUudmFsdWVzIT0ib2JqZWN0Inx8QXJyYXkuaXNBcnJheShlLnZhbHVlcykpdGhyb3cgbmV3IEVycm9yKCJUaGUgaG9zdCByZXR1cm5lZCBhbiBpbnZhbGlkIHJlY29yZC4iKTtyZXR1cm57dGFibGVJZDp0LGlkOmUuaWQsdmFsdWVzOmUudmFsdWVzLHVwZGF0ZWRBdDplLnVwZGF0ZWRBdD8/bmV3IERhdGUoKS50b0lTT1N0cmluZygpLC4uLnR5cGVvZiBlLnZlcnNpb249PSJudW1iZXIiP3t2ZXJzaW9uOmUudmVyc2lvbn06e319fXZhciBYcj1rZSxpdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuYnJpZGdlPXQ7dGhpcy5iaW5kaW5ncz1lfWJyaWRnZTtiaW5kaW5ncztwZXJzaXN0ZW5jZT0iaG9zdCI7cmVjb3Jkcz1bXTtjaGVjayh0LGU9ITEpe2lmKCF0aGlzLmJpbmRpbmdzLnNvbWUocj0+ci50YWJsZUlkPT09dCYmKCFlfHxyLmFjY2Vzcz09PSJ3cml0ZSIpKSl0aHJvdyBuZXcgRXJyb3IoYFRoaXMgZXhwZXJpZW5jZSBoYXMgbm8gJHtlPyJ3cml0ZSI6InJlYWQifSBncmFudCBmb3IgdGhpcyB0YWJsZS5gKX1hc3luYyBpbml0KHQpe2xldCBlPWF3YWl0IFByb21pc2UuYWxsKFsuLi5uZXcgU2V0KHRoaXMuYmluZGluZ3MubWFwKHI9PnIudGFibGVJZCkpXS5tYXAoYXN5bmMgcj0+e2xldCBpPWF3YWl0IHRoaXMuYnJpZGdlLmNhbGwoInJlY29yZHMucXVlcnkiLHt0YWJsZUlkOnJ9KTtpZighQXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBob3N0IGRpZCBub3QgcmV0dXJuIGEgdGFibGUgc25hcHNob3QuIik7cmV0dXJuIGkuZmlsdGVyKG49PiFuLmRlbGV0ZWQpLm1hcChuPT54dChuLHIpKX0pKTt0aGlzLnJlY29yZHM9ZS5mbGF0KCl9cm93cyh0KXtyZXR1cm4gdGhpcy5jaGVjayh0KSx0aGlzLnJlY29yZHMuZmlsdGVyKGU9PmUudGFibGVJZD09PXQpfWFzeW5jIHVwc2VydCh0LGUscj1YcigpKXt0aGlzLmNoZWNrKHQsITApO2xldCBpPXRoaXMucmVjb3Jkcy5maW5kKGw9PmwudGFibGVJZD09PXQmJmwuaWQ9PT1yKSxuPXt0YWJsZUlkOnQsaWQ6cix2YWx1ZXM6ey4uLmk/LnZhbHVlcywuLi5lfSx2ZXJzaW9uOmk/LnZlcnNpb24/PzB9O2lmKEpTT04uc3RyaW5naWZ5KG4pLmxlbmd0aD45ZTUpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHVwZGF0ZSBpcyB0b28gbGFyZ2UgZm9yIHRoZSBsYWIgYnJpZGdlLiBVc2UgYSBzbWFsbGVyIHBob3RvIG9yIGZld2VyIGZpZWxkcy4iKTtsZXQgYT14dChhd2FpdCB0aGlzLmJyaWRnZS5jYWxsKCJyZWNvcmRzLnB1dCIsbiksdCk7cmV0dXJuIHRoaXMucmVjb3Jkcz10aGlzLnJlY29yZHMuZmlsdGVyKGw9PiEobC50YWJsZUlkPT09dCYmbC5pZD09PXIpKSx0aGlzLnJlY29yZHMucHVzaChhKSxhfWFzeW5jIHJlbW92ZSh0LGUpe2lmKHRoaXMuY2hlY2sodCwhMCksIXRoaXMuYnJpZGdlLm1ldGhvZHM/LmluY2x1ZGVzKCJyZWNvcmRzLmRlbGV0ZSIpKXRocm93IG5ldyBFcnJvcigiVGhpcyB2ZXJzaW9uIG9mIHRoZSBsYWIgZG9lcyBub3QgZXhwb3NlIHJlY29yZCBkZWxldGlvbi4iKTtsZXQgcj10aGlzLnJlY29yZHMuZmluZChpPT5pLnRhYmxlSWQ9PT10JiZpLmlkPT09ZSk7YXdhaXQgdGhpcy5icmlkZ2UuY2FsbCgicmVjb3Jkcy5kZWxldGUiLHt0YWJsZUlkOnQsaWQ6ZSx2ZXJzaW9uOnI/LnZlcnNpb259KSx0aGlzLnJlY29yZHM9dGhpcy5yZWNvcmRzLmZpbHRlcihpPT4hKGkudGFibGVJZD09PXQmJmkuaWQ9PT1lKSl9Y2xvc2UoKXt9fSxGZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuYnJpZGdlPXQ7dGhpcy5wa2c9ZTt0aGlzLnN0b3JlPW5ldyBpdCh0LGUuZGF0YUJpbmRpbmdzKX1icmlkZ2U7cGtnO3N0b3JlO3N1cHBvcnRzKHQpe3JldHVybiB0aGlzLmJyaWRnZS5tZXRob2RzPy5pbmNsdWRlcyh0KT8/WyJyZWNvcmRzLnF1ZXJ5IiwicmVjb3Jkcy5wdXQiLCJyZXF1ZXN0IiwiY2FtZXJhIiwibG9jYXRpb24iLCJub3RpZnkiXS5pbmNsdWRlcyh0KX1hc3luYyByZXF1ZXN0KHQsZT17fSl7aWYoIXRoaXMucGtnLmNvbm5lY3Rpb25zLnNvbWUocj0+ci5pZD09PXQpKXRocm93IG5ldyBFcnJvcigiVGhpcyBleHBlcmllbmNlIGhhcyBubyBtYXRjaGluZyByZXF1ZXN0IGRlZmluaXRpb24uIik7cmV0dXJuIHRoaXMuYnJpZGdlLmNhbGwoInJlcXVlc3QiLHtyZXF1ZXN0SWQ6dCxpbnB1dDplfSl9YXN5bmMgY2FwdHVyZSh0PSJjYW1lcmEiLGU9ITEpe2xldCByPWF3YWl0IHRoaXMuYnJpZGdlLmNhbGwoImNhbWVyYSIse3NvdXJjZTp0LG9jcjplfSk7aWYocj09PW51bGwpcmV0dXJuIG51bGw7bGV0IGk9cjtpZih0eXBlb2YgaT8uaW1hZ2UhPSJzdHJpbmcifHwhL15kYXRhOmltYWdlXC9bYS16QS1aMC05ListXSs7YmFzZTY0LFtBLVphLXowLTkrL10rPXswLDJ9JC8udGVzdChpLmltYWdlKXx8aS5pbWFnZS5sZW5ndGg+MjAqMTAyNCoxMDI0KXRocm93IG5ldyBFcnJvcigiVGhlIGhvc3QgcmV0dXJuZWQgYW4gaW52YWxpZCBvciBvdmVyc2l6ZWQgcGhvdG8uIik7cmV0dXJue2ltYWdlOmkuaW1hZ2UsLi4udHlwZW9mIGkudGV4dD09InN0cmluZyI/e3RleHQ6aS50ZXh0fTp7fX19YXN5bmMgcGhvdG8odCxlLHI9InBob3RvIil7bGV0IGk9dGhpcy5zdG9yZS5yb3dzKHQpLmZpbmQodz0+dy5pZD09PWUpLG49aT8udmFsdWVzW3JdO2lmKHR5cGVvZiBuIT0ic3RyaW5nInx8IW4pcmV0dXJuIiI7aWYobi5zdGFydHNXaXRoKCJkYXRhOmltYWdlLyIpKXJldHVybiBuO2lmKCF0aGlzLnN1cHBvcnRzKCJwaG90b3MucmVhZCIpKXJldHVybiIiO2xldCBhPWF3YWl0IHRoaXMuYnJpZGdlLmNhbGwoInBob3Rvcy5yZWFkIix7dGFibGVJZDp0LGlkOmUsZmllbGQ6cn0pLGw9dHlwZW9mIGE9PSJzdHJpbmciP2E6YT8uaW1hZ2U7cmV0dXJuIHR5cGVvZiBsPT0ic3RyaW5nIiYmbC5zdGFydHNXaXRoKCJkYXRhOmltYWdlLyIpP2w6IiJ9YXN5bmMgbG9jYXRpb24oKXtsZXQgdD1hd2FpdCB0aGlzLmJyaWRnZS5jYWxsKCJsb2NhdGlvbiIse30pO2lmKCF0Py5jb29yZHN8fCFOdW1iZXIuaXNGaW5pdGUodC5jb29yZHMubGF0aXR1ZGUpfHwhTnVtYmVyLmlzRmluaXRlKHQuY29vcmRzLmxvbmdpdHVkZSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgaG9zdCByZXR1cm5lZCBubyB1c2FibGUgbG9jYXRpb24uIik7cmV0dXJue2Nvb3Jkczp7bGF0aXR1ZGU6dC5jb29yZHMubGF0aXR1ZGUsbG9uZ2l0dWRlOnQuY29vcmRzLmxvbmdpdHVkZSxhY2N1cmFjeTp0LmNvb3Jkcy5hY2N1cmFjeT8/MH0sdGltZXN0YW1wOnQudGltZXN0YW1wPz9EYXRlLm5vdygpfX1hc3luYyBub3RpZnkodCxlLHIpe3JldHVybiB0aGlzLmJyaWRnZS5jYWxsKCJub3RpZnkiLHt0aXRsZTp0LGJvZHk6ZSxzZWNvbmRzOk1hdGgubWF4KDEscil9KX1hc3luYyBtb3Rpb24oKXtpZighdGhpcy5zdXBwb3J0cygibW90aW9uLnNhbXBsZSIpKXRocm93IG5ldyBFcnJvcigiTmF0aXZlIG1vdGlvbiBzYW1wbGluZyBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgbGFiIGJ1aWxkLiIpO3JldHVybiB0aGlzLmJyaWRnZS5jYWxsKCJtb3Rpb24uc2FtcGxlIix7fSl9fTt2YXIgc3Q9cz0+U3RyaW5nKHM/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+KHsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSlbdF0pLG09KHMsdD0iIixlKT0+e2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7cmV0dXJuIHIuY2xhc3NOYW1lPXQsZSE9PXZvaWQgMCYmKHIudGV4dENvbnRlbnQ9ZSkscn0sZWU9cz0+e2xldCB0PW0oImRpdiIsInRvYXN0IixzKTtkb2N1bWVudC5ib2R5LmFwcGVuZCh0KSxzZXRUaW1lb3V0KCgpPT50LnJlbW92ZSgpLDI4MDApfSxrdD0ocyx0KT0+dC5zcGxpdCgiLiIpLmZpbHRlcihCb29sZWFuKS5yZWR1Y2UoKGUscik9PmU/LltyXSxzKSx2ZT0oKT0+bmV3IERhdGUoKS50b0lTT1N0cmluZygpLGNlPXM9Pk51bWJlci5pc0Zpbml0ZShOdW1iZXIocykpP051bWJlcihzKTowO2Z1bmN0aW9uIGFlKHMsdCl7bGV0IGU9cy5xdWVyeVNlbGVjdG9yKCIuZXJyb3IiKTtlfHwoZT1tKCJkaXYiLCJlcnJvciIpLHMuYXBwZW5kKGUpKSxlLnRleHRDb250ZW50PXR9ZnVuY3Rpb24gcmUocyx0PSJ0ZXh0IixlPSIiKXtsZXQgcj1tKCJsYWJlbCIsIiIscyksaT1tKCJpbnB1dCIpO3JldHVybiBpLnR5cGU9dCxpLnZhbHVlPWUsci5hcHBlbmQoaSkse3dyYXA6cixmaWVsZDppfX1mdW5jdGlvbiBVKHMsdCxlPSExKXtsZXQgcj1tKCJidXR0b24iLGU/InByaW1hcnkiOiIiLHMpO3JldHVybiByLnR5cGU9ImJ1dHRvbiIsci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsYXN5bmMoKT0+e3RyeXthd2FpdCB0KCl9Y2F0Y2goaSl7ZWUoaSBpbnN0YW5jZW9mIEVycm9yP2kubWVzc2FnZToiQWN0aW9uIGZhaWxlZCIpfX0pLHJ9ZnVuY3Rpb24gbmUocyx0KXtzLmFwcGVuZChtKCJwIiwiaGludCIsdCkpfXZhciBqZT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm5hbWU9dH1uYW1lO2RiO3BlcnNpc3RlbmNlPSJpbmRleGVkZGIiO3JlY29yZHM9W107YXN5bmMgaW5pdCh0KXt0cnl7dGhpcy5kYj1hd2FpdCBuZXcgUHJvbWlzZSgocixpKT0+e2xldCBuPWluZGV4ZWREQi5vcGVuKHRoaXMubmFtZSwxKTtuLm9udXBncmFkZW5lZWRlZD0oKT0+bi5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUoInJlY29yZHMiLHtrZXlQYXRoOiJrZXkifSksbi5vbnN1Y2Nlc3M9KCk9PnIobi5yZXN1bHQpLG4ub25lcnJvcj0oKT0+aShuZXcgRXJyb3IoIlBlcnNpc3RlbnQgYnJvd3NlciBzdG9yYWdlIGlzIHVuYXZhaWxhYmxlLiBPcGVuIHRoaXMgZXhwZXJpZW5jZSBkaXJlY3RseSBvciB1c2UgdGhlIG5hdGl2ZSBob3N0LiIpKX0pO2xldCBlPWF3YWl0IHRoaXMucmVhZEFsbCgpO3RoaXMucmVjb3Jkcz1lLm1hcCgoe2tleTpyLC4uLml9KT0+aSl9Y2F0Y2h7dGhpcy5wZXJzaXN0ZW5jZT0ic2Vzc2lvbi1tZW1vcnkiLHRoaXMucmVjb3Jkcz1bXX1mb3IobGV0IGUgb2YgdCl0aGlzLnJlY29yZHMuc29tZShyPT5yLnRhYmxlSWQ9PT1lLnRhYmxlSWQmJnIuaWQ9PT1lLmlkKXx8YXdhaXQgdGhpcy51cHNlcnQoZS50YWJsZUlkLGUudmFsdWVzLGUuaWQpfXJlYWRBbGwoKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsZSk9PntsZXQgcj10aGlzLmRiLnRyYW5zYWN0aW9uKCJyZWNvcmRzIikub2JqZWN0U3RvcmUoInJlY29yZHMiKS5nZXRBbGwoKTtyLm9uc3VjY2Vzcz0oKT0+dChyLnJlc3VsdCksci5vbmVycm9yPSgpPT5lKHIuZXJyb3IpfSl9cm93cyh0KXtyZXR1cm4gdGhpcy5yZWNvcmRzLmZpbHRlcihlPT5lLnRhYmxlSWQ9PT10KX1hc3luYyB1cHNlcnQodCxlLHI9a2UoKSl7bGV0IGk9dGhpcy5yZWNvcmRzLmZpbmQoYT0+YS50YWJsZUlkPT09dCYmYS5pZD09PXIpLG49e3RhYmxlSWQ6dCxpZDpyLHZhbHVlczp7Li4uaT8udmFsdWVzLC4uLmV9LHVwZGF0ZWRBdDp2ZSgpfTtyZXR1cm4gdGhpcy5wZXJzaXN0ZW5jZT09PSJpbmRleGVkZGIiJiZhd2FpdCBuZXcgUHJvbWlzZSgoYSxsKT0+e2xldCB3PXRoaXMuZGIudHJhbnNhY3Rpb24oInJlY29yZHMiLCJyZWFkd3JpdGUiKTt3Lm9iamVjdFN0b3JlKCJyZWNvcmRzIikucHV0KHsuLi5uLGtleTpgJHt0fToke3J9YH0pLHcub25jb21wbGV0ZT0oKT0+YSgpLHcub25lcnJvcj0oKT0+bChuZXcgRXJyb3IoIkNvdWxkIG5vdCBzYXZlIHRvIGJyb3dzZXIgc3RvcmFnZS4gQ2hlY2sgYXZhaWxhYmxlIGRldmljZSBzcGFjZS4iKSl9KSx0aGlzLnJlY29yZHM9dGhpcy5yZWNvcmRzLmZpbHRlcihhPT4hKGEuaWQ9PT1yJiZhLnRhYmxlSWQ9PT10KSksdGhpcy5yZWNvcmRzLnB1c2gobiksbn1hc3luYyByZW1vdmUodCxlKXt0aGlzLnBlcnNpc3RlbmNlPT09ImluZGV4ZWRkYiImJmF3YWl0IG5ldyBQcm9taXNlKChyLGkpPT57bGV0IG49dGhpcy5kYi50cmFuc2FjdGlvbigicmVjb3JkcyIsInJlYWR3cml0ZSIpO24ub2JqZWN0U3RvcmUoInJlY29yZHMiKS5kZWxldGUoYCR7dH06JHtlfWApLG4ub25jb21wbGV0ZT0oKT0+cigpLG4ub25lcnJvcj0oKT0+aShuLmVycm9yKX0pLHRoaXMucmVjb3Jkcz10aGlzLnJlY29yZHMuZmlsdGVyKHI9PiEoci50YWJsZUlkPT09dCYmci5pZD09PWUpKX1jbG9zZSgpe3RoaXMuZGI/LmNsb3NlKCl9fTthc3luYyBmdW5jdGlvbiBVZShzKXtpZighcy50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpKXRocm93IG5ldyBFcnJvcigiQ2hvb3NlIGFuIGltYWdlIGZpbGUuIik7aWYocy5zaXplPjIwKjEwMjQqMTAyNCl0aHJvdyBuZXcgRXJyb3IoIkNob29zZSBhbiBpbWFnZSBzbWFsbGVyIHRoYW4gMjAgTUIuIik7bGV0IHQ9VVJMLmNyZWF0ZU9iamVjdFVSTChzKTt0cnl7bGV0IGU9bmV3IEltYWdlO2Uuc3JjPXQsYXdhaXQgZS5kZWNvZGUoKTtsZXQgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxpPU1hdGgubWluKDEsMTIwMC9NYXRoLm1heChlLndpZHRoLGUuaGVpZ2h0KSk7cmV0dXJuIHIud2lkdGg9TWF0aC5yb3VuZChlLndpZHRoKmkpLHIuaGVpZ2h0PU1hdGgucm91bmQoZS5oZWlnaHQqaSksci5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShlLDAsMCxyLndpZHRoLHIuaGVpZ2h0KSxyLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjgyKX1maW5hbGx5e1VSTC5yZXZva2VPYmplY3RVUkwodCl9fWFzeW5jIGZ1bmN0aW9uIEJlKHMpe2lmKCFzLnN0YXJ0c1dpdGgoImRhdGE6aW1hZ2UvIil8fHMubGVuZ3RoPjIwKjEwMjQqMTAyNCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkZXZpY2UgcmV0dXJuZWQgYW4gaW52YWxpZCBvciBvdmVyc2l6ZWQgaW1hZ2UuIik7bGV0IHQ9bmV3IEltYWdlO3Quc3JjPXMsYXdhaXQgdC5kZWNvZGUoKTtsZXQgZT1NYXRoLm1pbigxLDExMDAvTWF0aC5tYXgodC53aWR0aCx0LmhlaWdodCkpO2ZvcihsZXQgcj0wO3I8NjtyKyspe2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2kud2lkdGg9TWF0aC5tYXgoMSxNYXRoLnJvdW5kKHQud2lkdGgqZSkpLGkuaGVpZ2h0PU1hdGgubWF4KDEsTWF0aC5yb3VuZCh0LmhlaWdodCplKSksaS5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZSh0LDAsMCxpLndpZHRoLGkuaGVpZ2h0KTtsZXQgbj1pLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsTWF0aC5tYXgoLjQ1LC44Mi1yKi4wNikpO2lmKG4ubGVuZ3RoPDdlNSlyZXR1cm4gbjtlKj0uNzJ9dGhyb3cgbmV3IEVycm9yKCJUaGlzIHBob3RvIGlzIHRvbyBsYXJnZSBmb3IgdGhlIGRldmVsb3BtZW50IGJyaWRnZS4gQ2hvb3NlIGEgc21hbGxlciBpbWFnZS4iKX1mdW5jdGlvbiBlaShzKXtyZXR1cm4gcy5vdXRwdXRfdGV4dD8/cy5vdXRwdXQ/LmZsYXRNYXAodD0+dC5jb250ZW50Pz9bXSkuZmlsdGVyKHQ9PnQudHlwZT09PSJvdXRwdXRfdGV4dCIpLm1hcCh0PT50LnRleHQpLmpvaW4oIiIpPz8iIn1mdW5jdGlvbiBUdChzKXtsZXQgdD1zLnJlcGxhY2UoL15gYGAoPzpqc29uKT9ccyovaSwiIikucmVwbGFjZSgvXHMqYGBgJC8sIiIpLnRyaW0oKSxlPUpTT04ucGFyc2UodCk7aWYoIWV8fHR5cGVvZiBlIT0ib2JqZWN0Inx8QXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtb2RlbCByZXR1cm5lZCBhbiBpbnZhbGlkIHJlc3VsdC4gWW91ciBwaG90byBpcyBzdGlsbCBhdmFpbGFibGU7IGVkaXQgb3IgcmV0cnkuIik7cmV0dXJuIGV9YXN5bmMgZnVuY3Rpb24gdGkocyx0LGUscil7aWYoIXQudHJpbSgpKXRocm93IG5ldyBFcnJvcigiRW50ZXIgeW91ciBvd24gQVBJIGtleSBmb3IgdGhpcyBzZXNzaW9uLiBJdCBpcyBub3Qgc2F2ZWQuIik7aWYoIXIudHJpbSgpKXRocm93IG5ldyBFcnJvcigiRW50ZXIgYSB2aXNpb24tY2FwYWJsZSBtb2RlbCBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50LiIpO2xldCBpPWF3YWl0IGZldGNoKHMudXJsLHttZXRob2Q6IlBPU1QiLHJlZGlyZWN0OiJlcnJvciIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24iLEF1dGhvcml6YXRpb246YEJlYXJlciAke3R9YH0sYm9keTpKU09OLnN0cmluZ2lmeSh7bW9kZWw6cixpbnB1dDpbe3JvbGU6InVzZXIiLGNvbnRlbnQ6W3t0eXBlOiJpbnB1dF90ZXh0Iix0ZXh0OmAke3MucHJvbXB0fQpSZXR1cm4gYSBKU09OIG9iamVjdCBvbmx5OyBubyBtYXJrZG93bi5gfSx7dHlwZToiaW5wdXRfaW1hZ2UiLGltYWdlX3VybDplfV19XX0pfSk7aWYoIWkub2spdGhyb3cgbmV3IEVycm9yKGBBSSByZXF1ZXN0IGZhaWxlZCAoJHtpLnN0YXR1c30pLiBDaGVjayB0aGUga2V5LCBtb2RlbCwgcXVvdGEgYW5kIHByb3ZpZGVyIGF2YWlsYWJpbGl0eS4gTm8gcmVzdWx0IHdhcyBzYXZlZCBhdXRvbWF0aWNhbGx5LmApO3JldHVybiBUdChlaShhd2FpdCBpLmpzb24oKSkpfWFzeW5jIGZ1bmN0aW9uIEl0KHMsdCxlPXt9KXtsZXQgcj1bXSxpPWUubW9kZT8/ImJhc2VsaW5lIixuPWk9PT0iYmFzZWxpbmUiP0F0KCk6dm9pZCAwLGE9bj9uZXcgRmUobix0KTp2b2lkIDAsbD1hPy5zdG9yZT8/bmV3IGplKGk9PT0ibmF0aXZlLXByZXZpZXciPyJvbmVhcHAtbmF0aXZlLXByZXZpZXciOmBvbmVhcHAtd2ViLSR7dC5leHBlcmllbmNlSWR9YCk7cy5yZXBsYWNlQ2hpbGRyZW4oKSxzLmNsYXNzTmFtZT0iZXhwZXJpZW5jZSIscy5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1hY2NlbnQiLHQudGludCk7dHJ5e2F3YWl0IGwuaW5pdCh0LnNlZWRzKX1jYXRjaChkKXtyZXR1cm4gYWUocyxTdHJpbmcoZCkpLCgpPT57fX1sZXQgdz1tKCJoZWFkZXIiKTtpZih3LmFwcGVuZChtKCJzcGFuIiwic3RhdHVzLWRvdCIpLG0oInNwYW4iLCJxdWlldCIsdC50aXRsZSksbSgic3BhbiIsImJhZGdlIixhPyJEZXZlbG9wbWVudCBicmlkZ2UgbGFiIjppPT09Im5hdGl2ZS1wcmV2aWV3Ij8iQnJvd3NlciBwcmV2aWV3IjoiSFRNTCBtaW5pIGFwcCIpKSxzLmFwcGVuZCh3KSxsLnBlcnNpc3RlbmNlPT09InNlc3Npb24tbWVtb3J5Iil7bGV0IGQ9bSgiZGl2IiwiZXJyb3IiLCJUaGlzIHNhbmRib3ggY2Fubm90IHJldGFpbiBicm93c2VyIGRhdGEgYWZ0ZXIgY2xvc2luZy4gQ2hhbmdlcyBiZWxvdyBsYXN0IG9ubHkgZm9yIHRoaXMgb3BlbiBzZXNzaW9uLiBUaGUgbmF0aXZlIGhvc3QgYW5kIHNlcGFyYXRlLW9yaWdpbiBicm93c2VyIGNvbXBhcmF0b3Igc3VwcG9ydCBwZXJzaXN0ZW50IHN0b3JhZ2UuIik7cy5hcHBlbmQoZCl9aWYoYSl7bGV0IGQ9bSgiZGl2IiwiY2FyZCIpO2QuYXBwZW5kKG0oImgzIiwiIiwiRGV2ZWxvcG1lbnQgYnJpZGdlIGxhYiIpLG0oInAiLCJoaW50IiwiVGhpcyBzZXBhcmF0ZWx5IGF1dGhvcml6ZWQgZXhwZXJpbWVudCB1c2VzIHNoYXJlZCBuYXRpdmUgdGFibGVzIGFuZCB5b3VyIHNhdmVkIEFQSSBjb25uZWN0aW9ucy4gSXQgaXMgbm90IGFuIEFwcCBTdG9yZSBiYXNlbGluZSBvciBBcHBsZSBwZXJtaXNzaW9uLiBLZXlzIGFyZSBuZXZlciByZXR1cm5lZCB0byB0aGlzIHBhZ2UuIikpLHMuYXBwZW5kKGQpfWxldCBrPW0oImRpdiIsInN0YWNrIik7cy5hcHBlbmQoayk7bGV0ICQ9ZS5hc3NldFVSTD8/KGQ9PmAuLi8ke2R9YCksVD0oKT0+e2Uub25EYXRhQ2hhbmdlZD8uKCksd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvbmVhcHAtcHJldmlldy1kYXRhIikpfSxFPWQ9Pmwucm93cyhTdHJpbmcoZD8/IiIpKSxDPWQ9PntsZXQgdT1tKCJzZWN0aW9uIiwiY2FyZCIpO3JldHVybiBkJiZ1LmFwcGVuZChtKCJoMiIsIiIsZCkpLHV9LEQ9ZD0+e2xldCB1PXQuY29ubmVjdGlvbnMuZmluZChnPT5nLmlkPT09ZCk7aWYoIXUpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHBhY2thZ2UgaGFzIG5vIG1hdGNoaW5nIEFQSSBjb25uZWN0aW9uLiIpO3JldHVybiB1fSxCPWBvbmVhcHA6JHt0LmV4cGVyaWVuY2VJZH06cHJlZmVyZW5jZXNgLFY9e307dHJ5e1Y9SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShCKT8/Int9Iil9Y2F0Y2h7fWxldCBiZT0oZCx1KT0+e1ZbZF09dTt0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oQixKU09OLnN0cmluZ2lmeShWKSl9Y2F0Y2h7fX0sQ2U9e3N0YWNrKGQpe2xldCB1PW0oImRpdiIsInN0YWNrIik7Zm9yKGxldCBnIG9mIGQuY2hpbGRyZW4/P1tdKVNlKGcsdSk7cmV0dXJuIHV9LGdyaWQoZCl7bGV0IHU9bSgiZGl2IiwiZ3JpZCIpO3Uuc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1ucz1gcmVwZWF0KCR7TWF0aC5taW4oNCxjZShkLnByb3BzLmNvbHVtbnMpfHwyKX0sbWlubWF4KDAsMWZyKSlgO2ZvcihsZXQgZyBvZiBkLmNoaWxkcmVuPz9bXSlTZShnLHUpO3JldHVybiB1fSx0ZXh0KGQpe2xldCB1PVN0cmluZyhkLnByb3BzLnRleHQ/PyIiKTtyZXR1cm4gZC5wcm9wcy52YXJpYW50PT09InRpdGxlIj9tKCJoMSIsIiIsdSk6bSgicCIsZC5wcm9wcy52YXJpYW50PT09ImV5ZWJyb3ciPyJleWVicm93IjoiYm9keS10ZXh0Iix1KX0saW1hZ2UoZCl7bGV0IHU9bSgiaW1nIiwiaW1hZ2UtYXJ0Iik7cmV0dXJuIHUuc3JjPSQoU3RyaW5nKGQucHJvcHMuYXNzZXQpKSx1LmFsdD1TdHJpbmcoZC5wcm9wcy5hbHQ/PyIiKSx1fSxtZXRyaWMoZCl7bGV0IHU9QygpLGc9bSgicCIsIm1ldHJpYy12YWx1ZSIpO3UuYXBwZW5kKGcsbSgicCIsIm1ldHJpYy1sYWJlbCIsU3RyaW5nKGQucHJvcHMubGFiZWw/PyIiKSkpO2xldCB4PSgpPT57bGV0IHY9RShkLnByb3BzLnRhYmxlSWQpLHk9ZC5wcm9wcy5vcGVyYXRpb249PT0iY291bnQiP3YubGVuZ3RoOnYucmVkdWNlKChTLGYpPT5TK2NlKGYudmFsdWVzW1N0cmluZyhkLnByb3BzLmZpZWxkKV0pLDApO2cudGV4dENvbnRlbnQ9YCR7TWF0aC5yb3VuZCh5KS50b0xvY2FsZVN0cmluZygpfSR7U3RyaW5nKGQucHJvcHMuc3VmZml4Pz8iIil9YH07cmV0dXJuIHgoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigib25lYXBwLXByZXZpZXctZGF0YSIseCksci5wdXNoKCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigib25lYXBwLXByZXZpZXctZGF0YSIseCkpLHV9LGNoYXJ0KGQpe2xldCB1PUMoU3RyaW5nKGQucHJvcHMudGl0bGU/PyJZb3VyIGFjdGl2aXR5IikpLGc9bSgiZGl2IiwiY2hhcnQtYmFycyIpLHg9RShkLnByb3BzLnRhYmxlSWQpLHY9TWF0aC5tYXgoMSwuLi54Lm1hcCh5PT5jZSh5LnZhbHVlc1tTdHJpbmcoZC5wcm9wcy5maWVsZCldKSkpO2ZvcihsZXQgeSBvZiB4KXtsZXQgUz1tKCJkaXYiLCJjaGFydC1iYXIiKTtTLnN0eWxlLmhlaWdodD1gJHtNYXRoLm1heCgyLGNlKHkudmFsdWVzW1N0cmluZyhkLnByb3BzLmZpZWxkKV0pL3YqMTAwKX0lYCxTLnRpdGxlPVN0cmluZyh5LnZhbHVlc1tTdHJpbmcoZC5wcm9wcy5maWVsZCldKSxnLmFwcGVuZChTKX1yZXR1cm4gdS5hcHBlbmQoZyksdX0sbGlzdChkKXtsZXQgdT1DKFN0cmluZyhkLnByb3BzLnRpdGxlPz8iU2F2ZWQgaGVyZSIpKSxnPSgpPT57dS5xdWVyeVNlbGVjdG9yQWxsKCIucmVjb3JkLC5lbXB0eSIpLmZvckVhY2godj0+di5yZW1vdmUoKSk7bGV0IHg9RShkLnByb3BzLnRhYmxlSWQpLnNsaWNlKCkucmV2ZXJzZSgpO3gubGVuZ3RofHx1LmFwcGVuZChtKCJwIiwiZW1wdHkiLCJOb3RoaW5nIGhlcmUgeWV0LiBZb3VyIGZpcnN0IGVudHJ5IGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4iKSk7Zm9yKGxldCB2IG9mIHgpe2xldCB5PW0oImFydGljbGUiLCJyZWNvcmQiKTtpZih0eXBlb2Ygdi52YWx1ZXMucGhvdG89PSJzdHJpbmciKXtsZXQgZj1tKCJpbWciKTthPyhmLmhpZGRlbj0hMCxhLnBob3RvKHYudGFibGVJZCx2LmlkLCJwaG90byIpLnRoZW4oYj0+e2ImJihmLnNyYz1iLGYuaGlkZGVuPSExKX0pLmNhdGNoKCgpPT57fSkpOmYuc3JjPXYudmFsdWVzLnBob3RvLGYuYWx0PSJTYXZlZCBwaG90byIseS5hcHBlbmQoZil9bGV0IFM9bSgiZGl2IiwicmVjb3JkLW1haW4iKTtpZihTLmFwcGVuZChtKCJoMyIsIiIsU3RyaW5nKHYudmFsdWVzW1N0cmluZyhkLnByb3BzLnRpdGxlRmllbGQ/PyJ0aXRsZSIpXT8/IlNhdmVkIGl0ZW0iKSksbSgicCIsIiIsU3RyaW5nKHYudmFsdWVzW1N0cmluZyhkLnByb3BzLmRldGFpbEZpZWxkPz8idGV4dCIpXT8/IiIpKSkseS5hcHBlbmQoUyxVKCJFZGl0Iixhc3luYygpPT57bGV0IGY9ey4uLnYudmFsdWVzfTtmb3IobGV0IGIgb2YgdC50YWJsZXMuZmluZChfPT5fLmlkPT09di50YWJsZUlkKT8uZmllbGRzPz9bXSl7aWYoYi50eXBlPT09ImltYWdlInx8Yi50eXBlPT09Impzb24ifHxiLnR5cGU9PT0icmVmZXJlbmNlIiljb250aW51ZTtsZXQgXz13aW5kb3cucHJvbXB0KGIubmFtZSxTdHJpbmcoZltiLm5hbWVdPz8iIikpO2lmKF89PT1udWxsKXJldHVybjtmW2IubmFtZV09Yi50eXBlPT09Im51bWJlciI/Y2UoXyk6Yi50eXBlPT09ImJvb2xlYW4iP189PT0idHJ1ZSI6X31hd2FpdCBsLnVwc2VydCh2LnRhYmxlSWQsZix2LmlkKSxUKCksZygpfSksVSgiRGVsZXRlIixhc3luYygpPT57d2luZG93LmNvbmZpcm0oIkRlbGV0ZSB0aGlzIHNhdmVkIHJlY29yZD8iKSYmKGF3YWl0IGwucmVtb3ZlKHYudGFibGVJZCx2LmlkKSxUKCksZygpKX0pKSxhKXtsZXQgZj15LnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiIpO3QuZGF0YUJpbmRpbmdzLnNvbWUoYj0+Yi50YWJsZUlkPT09di50YWJsZUlkJiZiLmFjY2Vzcz09PSJ3cml0ZSIpP2Euc3VwcG9ydHMoInJlY29yZHMuZGVsZXRlIil8fGZbMV0/LnJlbW92ZSgpOmYuZm9yRWFjaChiPT5iLnJlbW92ZSgpKX11LmFwcGVuZCh5KX19O3JldHVybiBnKCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm9uZWFwcC1wcmV2aWV3LWRhdGEiLGcpLHIucHVzaCgoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9uZWFwcC1wcmV2aWV3LWRhdGEiLGcpKSx1fSxmb3JtKGQpe2xldCB1PUMoU3RyaW5nKGQucHJvcHMudGl0bGU/PyJBZGQgc29tZXRoaW5nIikpLGc9bSgiZm9ybSIpLHY9KGQucHJvcHMuZmllbGRzPz9bXSkubWFwKGY9PntsZXQgYj1yZShmLmxhYmVsLGYudHlwZT09PSJudW1iZXIiPyJudW1iZXIiOmYudHlwZT09PSJkYXRlIj8iZGF0ZXRpbWUtbG9jYWwiOiJ0ZXh0Iik7cmV0dXJuIGIuZmllbGQucmVxdWlyZWQ9ITAsZy5hcHBlbmQoYi53cmFwKSx7Li4uYixkZWZpbml0aW9uOmZ9fSkseT1tKCJidXR0b24iLCJwcmltYXJ5IiwiU2F2ZSIpO3kudHlwZT0ic3VibWl0IjtsZXQgUz1tKCJkaXYiLCJhY3Rpb25zIik7cmV0dXJuIFMuYXBwZW5kKHkpLGcuYXBwZW5kKFMpLGcuYWRkRXZlbnRMaXN0ZW5lcigic3VibWl0Iixhc3luYyBmPT57Zi5wcmV2ZW50RGVmYXVsdCgpLHkuZGlzYWJsZWQ9ITA7dHJ5e2xldCBiPXt9O2ZvcihsZXQgXyBvZiB2KWJbXy5kZWZpbml0aW9uLm5hbWVdPV8uZGVmaW5pdGlvbi50eXBlPT09Im51bWJlciI/Y2UoXy5maWVsZC52YWx1ZSk6Xy5kZWZpbml0aW9uLnR5cGU9PT0iZGF0ZSI/bmV3IERhdGUoXy5maWVsZC52YWx1ZSkudG9JU09TdHJpbmcoKTpfLmZpZWxkLnZhbHVlO2lmKGQucHJvcHMubm90aWZpY2F0aW9uKXtsZXQgXz1uZXcgRGF0ZShTdHJpbmcoYi5kYXRlKSkuZ2V0VGltZSgpO2lmKF88PURhdGUubm93KCkpdGhyb3cgbmV3IEVycm9yKCJDaG9vc2UgYSB0aW1lIGluIHRoZSBmdXR1cmUuIik7YT8oYXdhaXQgYS5ub3RpZnkoU3RyaW5nKGIudGl0bGUpLCJBIHJlbWluZGVyIGZyb20gIit0LnRpdGxlLChfLURhdGUubm93KCkpLzFlMyksbmUodSwiU2NoZWR1bGVkIHdpdGggdGhlIG5hdGl2ZSBob3N0LiBEZXZpY2Ugbm90aWZpY2F0aW9uIHBlcm1pc3Npb25zIHN0aWxsIGFwcGx5LiIpKToobmUodSwiU2F2ZWQuIFJlbGlhYmxlIG5vdGlmaWNhdGlvbnMgYWZ0ZXIgY2xvc2luZyByZXF1aXJlIHRoZSBuYXRpdmUgaG9zdDsgdGhpcyBicm93c2VyIGNhbiBvbmx5IGFsZXJ0IHdoaWxlIGl0cyBwYWdlIHJlbWFpbnMgb3Blbi4iKSwiTm90aWZpY2F0aW9uImluIHdpbmRvdyYmYXdhaXQgTm90aWZpY2F0aW9uLnJlcXVlc3RQZXJtaXNzaW9uKCk9PT0iZ3JhbnRlZCImJnNldFRpbWVvdXQoKCk9Pm5ldyBOb3RpZmljYXRpb24oU3RyaW5nKGIudGl0bGUpKSxNYXRoLm1pbigyMTQ3NDgzNjQ3LF8tRGF0ZS5ub3coKSkpKX1hd2FpdCBsLnVwc2VydChTdHJpbmcoZC5wcm9wcy50YWJsZUlkKSxiKSxUKCksZy5yZXNldCgpLGVlKCJTYXZlZCBvbiB0aGlzIGRldmljZSIpfWNhdGNoKGIpe2FlKHUsYiBpbnN0YW5jZW9mIEVycm9yP2IubWVzc2FnZToiQ291bGQgbm90IHNhdmUiKX1maW5hbGx5e3kuZGlzYWJsZWQ9ITF9fSksdS5hcHBlbmQoZyksdX0sYnV0dG9uKGQpe3JldHVybiBVKFN0cmluZyhkLnByb3BzLnRpdGxlPz8iQ29udGludWUiKSxhc3luYygpPT57ZC5hY3Rpb24/LnR5cGU9PT0iaW5zZXJ0IiYmZC5hY3Rpb24udGFibGVJZD8oYXdhaXQgbC51cHNlcnQoZC5hY3Rpb24udGFibGVJZCxkLmFjdGlvbi52YWx1ZXM/P3t9KSxUKCksZWUoIlNhdmVkIikpOmQuYWN0aW9uPy50eXBlPT09Im5vdGlmeSI/YT9hd2FpdCBhLm5vdGlmeShTdHJpbmcoZC5wcm9wcy50aXRsZT8/dC50aXRsZSksZC5hY3Rpb24ubWVzc2FnZT8/IkEgbm90ZSBmcm9tIHlvdXIgYWdlbnQiLGNlKGQuYWN0aW9uLnZhbHVlcz8uc2Vjb25kcyl8fDYwKTplZShkLmFjdGlvbi5tZXNzYWdlPz8iQSBub3RlIGZyb20geW91ciBhZ2VudCIpOmQuYWN0aW9uPy50eXBlPT09Im5hdmlnYXRlIj9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ub2RlPSIke0NTUy5lc2NhcGUoZC5hY3Rpb24udGFyZ2V0Pz8iIil9Il1gKT8uc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgifSk6ZWUoIlRoaXMgYWN0aW9uIG5lZWRzIHRoZSBuYXRpdmUgaG9zdC4iKX0sITApfSxmbGFzaGNhcmRzKGQpe2xldCB1PUMoIkEgbGl0dGxlIHByYWN0aWNlIiksZz1tKCJzZWxlY3QiKTtnLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIlZvY2FidWxhcnkgc2VjdGlvbiIpO2xldCB4PUUoZC5wcm9wcy50YWJsZUlkKSx2PVsuLi5uZXcgU2V0KHgubWFwKF89PlN0cmluZyhfLnZhbHVlc1tTdHJpbmcoZC5wcm9wcy5zZWN0aW9uRmllbGQpXSkpKV07Zm9yKGxldCBfIG9mIHYpe2xldCBSPW0oIm9wdGlvbiIsIiIsYFNlY3Rpb24gJHtffWApO1IudmFsdWU9XyxnLmFwcGVuZChSKX1nLnZhbHVlPVYuc2VjdGlvbj8/dlswXT8/IiIsdS5hcHBlbmQoZyk7bGV0IHk9MCxTPSExLGY9bSgiZGl2Iik7dS5hcHBlbmQoZik7bGV0IGI9KCk9PntmLnJlcGxhY2VDaGlsZHJlbigpO2xldCBfPXguZmlsdGVyKGo9PlN0cmluZyhqLnZhbHVlc1tTdHJpbmcoZC5wcm9wcy5zZWN0aW9uRmllbGQpXSk9PT1nLnZhbHVlKSxSPV9beSVfLmxlbmd0aF07aWYoIVIpe2YuYXBwZW5kKG0oInAiLCJlbXB0eSIsIkFkZCBzb21lIHdvcmRzIHRvIGJlZ2luLiIpKTtyZXR1cm59bGV0IHE9bSgiYnV0dG9uIiwiZmxhc2hjYXJkIik7cS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJSZXZlYWwgZmxhc2hjYXJkIikscS5pbm5lckhUTUw9YDxzbWFsbD4ke3klXy5sZW5ndGgrMX0gLyAke18ubGVuZ3RofTwvc21hbGw+PHNwYW4gY2xhc3M9IndvcmQiPiR7c3QoUi52YWx1ZXNbU3RyaW5nKGQucHJvcHMuZnJvbnRGaWVsZCldKX08L3NwYW4+JHtTP2A8c3BhbiBjbGFzcz0ibWVhbmluZyI+JHtzdChSLnZhbHVlc1tTdHJpbmcoZC5wcm9wcy5iYWNrRmllbGQpXSl9PC9zcGFuPjxzbWFsbD4ke3N0KFIudmFsdWVzLmV4YW1wbGU/PyIiKX08L3NtYWxsPmA6IjxzbWFsbD5UYXAgdG8gcmV2ZWFsPC9zbWFsbD4ifWAscS5vbmNsaWNrPSgpPT57Uz0hUyxiKCl9O2xldCBRPW0oImRpdiIsImFjdGlvbnMiKTtmb3IobGV0W2osaGVdb2ZbWyJBZ2FpbiIsITFdLFsiR290IGl0IiwhMF1dKVEuYXBwZW5kKFUoaixhc3luYygpPT57bGV0IEc9bC5yb3dzKFN0cmluZyhkLnByb3BzLnByb2dyZXNzVGFibGVJZCkpLmZpbmQoTD0+TC52YWx1ZXMud29yZElkPT09Ui5pZCk7YXdhaXQgbC51cHNlcnQoU3RyaW5nKGQucHJvcHMucHJvZ3Jlc3NUYWJsZUlkKSx7d29yZElkOlIuaWQsa25vd246aGUscmV2aWV3czpjZShHPy52YWx1ZXMucmV2aWV3cykrMSxsYXN0UmV2aWV3OnZlKCl9LFIuaWQpLHkrKyxTPSExLFQoKSxiKCl9LGhlKSk7Zi5hcHBlbmQocSxRKX07cmV0dXJuIGcub25jaGFuZ2U9KCk9PntiZSgic2VjdGlvbiIsZy52YWx1ZSkseT0wLFM9ITEsYigpfSxiKCksdX0sbWF0Y2hpbmcoZCl7bGV0IHU9QyhTdHJpbmcoZC5wcm9wcy50aXRsZT8/IkZpbmQgdGhlIHBhaXIiKSksZz1tKCJkaXYiLCJtYXRjaC1ib2FyZCIpLHg9RShkLnByb3BzLnRhYmxlSWQpLmZpbHRlcihiPT5TdHJpbmcoYi52YWx1ZXMuc2VjdGlvbik9PT0oVi5zZWN0aW9uPz8iMSIpKS5zbGljZSgwLDQpLHY9bSgiZGl2Iiwic3RhY2siKSx5PW0oImRpdiIsInN0YWNrIiksUyxmPW5ldyBTZXQ7Zm9yKGxldCBiIG9mIHgpe2xldCBfPVUoU3RyaW5nKGIudmFsdWVzW1N0cmluZyhkLnByb3BzLmZyb250RmllbGQpXSksKCk9PntTPWIuaWQsdi5xdWVyeVNlbGVjdG9yQWxsKCJidXR0b24iKS5mb3JFYWNoKFI9PlIuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKSksXy5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpfSk7Xy5kYXRhc2V0LmlkPWIuaWQsdi5hcHBlbmQoXyl9Zm9yKGxldCBiIG9mIHguc2xpY2UoKS5yZXZlcnNlKCkpe2xldCBfPVUoU3RyaW5nKGIudmFsdWVzW1N0cmluZyhkLnByb3BzLmJhY2tGaWVsZCldKSxhc3luYygpPT57aWYoIVMpcmV0dXJuO2lmKFMhPT1iLmlkKXtlZSgiVHJ5IGFub3RoZXIgY29ubmVjdGlvbiIpO3JldHVybn1mLmFkZChiLmlkKSxfLmRpc2FibGVkPSEwLF8uY2xhc3NMaXN0LmFkZCgibWF0Y2hlZCIpO2xldCBSPXYucXVlcnlTZWxlY3RvcihgW2RhdGEtaWQ9IiR7Yi5pZH0iXWApO1ImJihSLmRpc2FibGVkPSEwLFIuY2xhc3NMaXN0LmFkZCgibWF0Y2hlZCIpKSxhd2FpdCBsLnVwc2VydChTdHJpbmcoZC5wcm9wcy5wcm9ncmVzc1RhYmxlSWQpLHt3b3JkSWQ6Yi5pZCxrbm93bjohMCxsYXN0UmV2aWV3OnZlKCl9LGIuaWQpLFM9dm9pZCAwLFQoKSxmLnNpemU9PT14Lmxlbmd0aCYmZWUoIkV2ZXJ5IGNvbm5lY3Rpb24gZm91bmQuIE5pY2VseSBkb25lLiIpfSk7eS5hcHBlbmQoXyl9cmV0dXJuIGcuYXBwZW5kKHYseSksdS5hcHBlbmQoZyksdX0sY2hlc3MoZCl7bGV0IHU9QygiWW91ciBuZXh0IG1vdmUiKSxnPUUoZC5wcm9wcy50YWJsZUlkKSx4PTAsdix5PTAsUyxmPW0oImRpdiIpO3UuYXBwZW5kKGYpO2xldCBiPXt3azoiXHUyNjU0Iix3cToiXHUyNjU1Iix3cjoiXHUyNjU2Iix3YjoiXHUyNjU3Iix3bjoiXHUyNjU4Iix3cDoiXHUyNjU5IixiazoiXHUyNjVBIixicToiXHUyNjVCIixicjoiXHUyNjVDIixiYjoiXHUyNjVEIixibjoiXHUyNjVFIixicDoiXHUyNjVGIn0sXz0oKT0+e2xldCBxPWdbeF07cSYmKFM9bmV3IHFlKFN0cmluZyhxLnZhbHVlcy5mZW4pKSx5PTAsdj12b2lkIDAsUigpKX0sUj0oKT0+e2YucmVwbGFjZUNoaWxkcmVuKCk7bGV0IHE9Z1t4XTtpZighcSlyZXR1cm47bGV0IFE9bSgic2VsZWN0Iik7US5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJDaGVzcyBsZXNzb24iKSxnLmZvckVhY2goKEcsTCk9PntsZXQgSz1tKCJvcHRpb24iLCIiLFN0cmluZyhHLnZhbHVlcy50aXRsZSkpO0sudmFsdWU9U3RyaW5nKEwpLFEuYXBwZW5kKEspfSksUS52YWx1ZT1TdHJpbmcoeCksUS5vbmNoYW5nZT0oKT0+e3g9TnVtYmVyKFEudmFsdWUpLF8oKX0sZi5hcHBlbmQoUSxtKCJwIiwiaGludCIsU3RyaW5nKHEudmFsdWVzLmxlc3NvbikpKTtsZXQgaj1tKCJkaXYiLCJjaGVzc2JvYXJkIik7ai5zZXRBdHRyaWJ1dGUoInJvbGUiLCJncm91cCIpLGouc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiSW50ZXJhY3RpdmUgY2hlc3MgYm9hcmQiKTtsZXQgaGU9dj9TLm1vdmVzKHtzcXVhcmU6dix2ZXJib3NlOiEwfSkubWFwKEc9PkcudG8pOltdO2ZvcihsZXQgRz04O0c+PTE7Ry0tKWZvcihsZXQgTD0wO0w8ODtMKyspe2xldCBLPWAkeyJhYmNkZWZnaCJbTF19JHtHfWAsWj1TLmdldChLKSxkZT1tKCJidXR0b24iLGBzcXVhcmUgJHsoTCtHKSUyPT09MD8iZGFyayI6IiJ9ICR7dj09PUs/InNlbGVjdGVkIjoiIn0gJHtoZS5pbmNsdWRlcyhLKT8ibGVnYWwiOiIifWAsWj9iW2Ake1ouY29sb3J9JHtaLnR5cGV9YF06IiIpO2RlLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsYCR7S30ke1o/YCAke1ouY29sb3I9PT0idyI/IndoaXRlIjoiYmxhY2sifSAke1oudHlwZX1gOiIifWApLChMPT09MHx8Rz09PTEpJiZkZS5hcHBlbmQobSgic21hbGwiLCIiLEw9PT0wP1N0cmluZyhHKToiYWJjZGVmZ2giW0xdKSksZGUub25jbGljaz1hc3luYygpPT57aWYodil7bGV0IHVlO3RyeXt1ZT1TLm1vdmUoe2Zyb206dix0bzpLLHByb21vdGlvbjoicSJ9KX1jYXRjaHt2PVo/LmNvbG9yPT09Uy50dXJuKCk/Szp2b2lkIDAsUigpO3JldHVybn1sZXQgemU9cS52YWx1ZXMubW92ZXNbeV07aWYoYCR7dWUuZnJvbX0ke3VlLnRvfWAhPT16ZSl7Uy51bmRvKCksZWUoIkxlZ2FsIG1vdmUuIExvb2sgZm9yIHRoZSBsZXNzb25cdTIwMTlzIHN0cm9uZ2VyIG1vdmUuIiksdj12b2lkIDAsUigpO3JldHVybn15Kyssdj12b2lkIDAseT09PXEudmFsdWVzLm1vdmVzLmxlbmd0aCYmKGF3YWl0IGwudXBzZXJ0KFN0cmluZyhkLnByb3BzLnByb2dyZXNzVGFibGVJZCkse3B1enpsZUlkOnEuaWQsY29tcGxldGU6ITAsYXR0ZW1wdHM6MX0scS5pZCksVCgpLGVlKCJMZXNzb24gY29tcGxldGUuIE9uZSBnb29kIG1vdmUgZm91bmQuIikpLFIoKX1lbHNlIHY9Wj8uY29sb3I9PT1TLnR1cm4oKT9LOnZvaWQgMCxSKCl9LGouYXBwZW5kKGRlKX1mLmFwcGVuZChqLG0oInNwYW4iLCJiYWRnZSIseT09PXEudmFsdWVzLm1vdmVzLmxlbmd0aD8iTGVzc29uIGNvbXBsZXRlIjpgJHtTLnR1cm4oKT09PSJ3Ij8iV2hpdGUiOiJCbGFjayJ9IHRvIG1vdmVgKSxVKCJSZXNldCBwb3NpdGlvbiIsXykpfTtyZXR1cm4gXygpLHV9LGFzeW5jIG1hcChkKXtsZXQgdT1DKFN0cmluZyhkLnByb3BzLnRpdGxlPz8iWW91ciByb3V0ZSIpKSxnPW0oImRpdiIsIm1hcC13cmFwIikseD1tKCJpbWciKTt4LnNyYz0kKFN0cmluZyhkLnByb3BzLm1hcEFzc2V0KSkseC5hbHQ9Ik9yaWdpbmFsIGlsbHVzdHJhdGl2ZSBvZmZsaW5lIG1hcCB3aXRoIHNhbXBsZSB3YWxraW5nIHJvdXRlIixnLmFwcGVuZCh4KSx1LmFwcGVuZChnLG0oInAiLCJxdWlldCIsIklsbHVzdHJhdGl2ZSByb3V0ZSBmaXh0dXJlIFx4QjcgT3JpZ2luYWwgYXJ0d29yayBceEI3IE5vdCBhIHZlcmlmaWVkIGhpa2luZyByb3V0ZSIpKTtsZXQgdix5PW0oInAiLCJoaW50Iik7dS5hcHBlbmQoeSk7bGV0IFM9ZC5wcm9wcy5ib3VuZHMsZj1fPT57aWYodj1fLHkudGV4dENvbnRlbnQ9YCR7Xy5jb29yZHMubGF0aXR1ZGUudG9GaXhlZCg1KX0sICR7Xy5jb29yZHMubG9uZ2l0dWRlLnRvRml4ZWQoNSl9IFx4QjcgXHhCMSR7TWF0aC5yb3VuZChfLmNvb3Jkcy5hY2N1cmFjeSl9IG1gLGcucXVlcnlTZWxlY3RvcigiLm1hcC1tYXJrZXIiKT8ucmVtb3ZlKCksXy5jb29yZHMubG9uZ2l0dWRlPj1TWzBdJiZfLmNvb3Jkcy5sb25naXR1ZGU8PVNbMl0mJl8uY29vcmRzLmxhdGl0dWRlPj1TWzFdJiZfLmNvb3Jkcy5sYXRpdHVkZTw9U1szXSl7bGV0IFI9bSgiZGl2IiwibWFwLW1hcmtlciIpO1Iuc3R5bGUubGVmdD1gJHsoXy5jb29yZHMubG9uZ2l0dWRlLVNbMF0pLyhTWzJdLVNbMF0pKjEwMH0lYCxSLnN0eWxlLnRvcD1gJHsoU1szXS1fLmNvb3Jkcy5sYXRpdHVkZSkvKFNbM10tU1sxXSkqMTAwfSVgLGcuYXBwZW5kKFIpfWVsc2UgeS50ZXh0Q29udGVudCs9IiBceEI3IFlvdSBhcmUgb3V0c2lkZSB0aGUgc2FtcGxlIG1hcC4ifSxiPW0oImRpdiIsImFjdGlvbnMiKTtyZXR1cm4gYi5hcHBlbmQoVSgiVXNlIG15IGxvY2F0aW9uIixhc3luYygpPT57aWYoeS50ZXh0Q29udGVudD0iV2FpdGluZyBmb3IgcGVybWlzc2lvbiBhbmQgYSBsb2NhdGlvbiBmaXhcdTIwMjYiLGEpe2YoYXdhaXQgYS5sb2NhdGlvbigpKTtyZXR1cm59aWYoIW5hdmlnYXRvci5nZW9sb2NhdGlvbil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgYnJvd3NlciBkb2VzIG5vdCBwcm92aWRlIGxvY2F0aW9uLiIpO25hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZiwoKT0+e3kudGV4dENvbnRlbnQ9IkxvY2F0aW9uIHVuYXZhaWxhYmxlIG9yIHBlcm1pc3Npb24gZGVuaWVkLiBUaGUgc2F2ZWQgbWFwIHN0aWxsIHdvcmtzLiJ9LHtlbmFibGVIaWdoQWNjdXJhY3k6ITAsdGltZW91dDoyZTR9KX0sITApLFUoIlNhdmUgYSB3YXlwb2ludCIsYXN5bmMoKT0+e2lmKCF2KXRocm93IG5ldyBFcnJvcigiR2V0IGEgbG9jYXRpb24gZml4IGJlZm9yZSBzYXZpbmcgYSB3YXlwb2ludC4iKTtsZXQgXz1wcm9tcHQoIk5hbWUgdGhpcyBwbGFjZSIsIkEgcGxhY2UgdG8gcmVtZW1iZXIiKTtfJiYoYXdhaXQgbC51cHNlcnQoU3RyaW5nKGQucHJvcHMudGFibGVJZCkse3RpdGxlOl8sbGF0aXR1ZGU6di5jb29yZHMubGF0aXR1ZGUsbG9uZ2l0dWRlOnYuY29vcmRzLmxvbmdpdHVkZSx0cmlwSWQ6U3RyaW5nKGQucHJvcHMudHJpcElkKX0pLFQoKSxlZShhPyJXYXlwb2ludCBzYXZlZCB0byBzaGFyZWQgbmF0aXZlIGRhdGEiOiJXYXlwb2ludCBzYXZlZCBvZmZsaW5lIikpfSksVSgiRXhwb3J0IHJvdXRlIixhc3luYygpPT57bGV0IF89YXdhaXQoYXdhaXQgZmV0Y2goJChTdHJpbmcoZC5wcm9wcy5yb3V0ZUFzc2V0KSkpKS5ibG9iKCksUj1tKCJhIik7Ui5ocmVmPVVSTC5jcmVhdGVPYmplY3RVUkwoXyksUi5kb3dubG9hZD0iY29hc3RhbC1yb3V0ZS5nZW9qc29uIixSLmNsaWNrKCksc2V0VGltZW91dCgoKT0+VVJMLnJldm9rZU9iamVjdFVSTChSLmhyZWYpLDFlMyl9KSksdS5hcHBlbmQoYiksbmUodSxhPyJEZXZlbG9wbWVudCBsYWI6IHRoZSBsb2NhdGlvbiBmaXggYW5kIHdheXBvaW50IHRhYmxlIGNvbWUgZnJvbSB0aGUgbmF0aXZlIGhvc3QuIFRoZSBpbmNsdWRlZCBhcnR3b3JrIGlzIHN0aWxsIGFuIGlsbHVzdHJhdGl2ZSBtYXA7IGxpY2Vuc2VkIGJhc2VtYXAgZG93bmxvYWRzIHVzZSB0aGUgbmF0aXZlIG1hcCBleHBlcmllbmNlIGFuZCBhcmUgbm90IGJyaWRnZWQgaGVyZS4iOiJUaGUgaW5jbHVkZWQgcm91dGUgYW5kIGFydHdvcmsgcmVtYWluIGxvY2FsLiBBIGxpY2Vuc2VkIG9mZmxpbmUgYmFzZW1hcCBkb3dubG9hZCBpcyBhIG5hdGl2ZS1ob3N0IGNhcGFiaWxpdHk7IGJyb3dzZXIgYmFzZWxpbmUgY29tcGFyaXNvbiBkb2VzIG5vdCBwcmV0ZW5kIHRoaXMgc2FtcGxlIGlzIGRvd25sb2FkZWQgbWFwIGNvdmVyYWdlLiIpLHV9LGFzeW5jIGFpUGhvdG8oZCl7bGV0IHU9QyhTdHJpbmcoZC5wcm9wcy50aXRsZT8/Ikxvb2sgYSBsaXR0bGUgY2xvc2VyIikpLGc9cmUoIlRha2Ugb3IgY2hvb3NlIGEgcGhvdG8iLCJmaWxlIik7Zy5maWVsZC5hY2NlcHQ9ImltYWdlLyoiLGcuZmllbGQuc2V0QXR0cmlidXRlKCJjYXB0dXJlIiwiZW52aXJvbm1lbnQiKSx1LmFwcGVuZChnLndyYXApO2xldCB4PSIiLHY9a2UoKSx5PW0oImltZyIsInBob3RvLXByZXZpZXciKTt5LmFsdD0iWW91ciBzZWxlY3RlZCBwaG90byIseS5oaWRkZW49ITAsdS5hcHBlbmQoeSk7bGV0IGY9KGQucHJvcHMucmVzdWx0RmllbGRzPz9bXSkubWFwKEw9PntsZXQgSz1yZShMLmxhYmVsLEwudHlwZT09PSJudW1iZXIiPyJudW1iZXIiOiJ0ZXh0Iik7cmV0dXJuIHUuYXBwZW5kKEsud3JhcCksey4uLkssZGVmaW5pdGlvbjpMfX0pLGI9RChkLnByb3BzLnJlcXVlc3RJZCksXyxSO2lmKGEpZy53cmFwLmhpZGRlbj0hMCxuZSh1LCJEZXZlbG9wbWVudCBsYWI6IGFuYWx5c2lzIHVzZXMgdGhlIG1vZGVsIGFuZCBBUEkga2V5IGNvbmZpZ3VyZWQgaW4gbmF0aXZlIFNldHRpbmdzLiBObyBjcmVkZW50aWFsIHZhbHVlIGlzIHNoYXJlZCB3aXRoIHRoaXMgcGFnZS4iKTtlbHNle2xldCBMPW0oImRldGFpbHMiKTtMLmFwcGVuZChtKCJzdW1tYXJ5IiwiIiwiVXNlIHlvdXIgb3duIEFJIGNvbm5lY3Rpb24iKSk7bGV0IEs9cmUoIlZpc2lvbi1jYXBhYmxlIG1vZGVsIiwidGV4dCIsVi5tb2RlbD8/IiIpLFo9cmUoIkFQSSBrZXkgXHhCNyBzZXNzaW9uIG9ubHkiLCJwYXNzd29yZCIpO189Sy5maWVsZCxSPVouZmllbGQsUi5hdXRvY29tcGxldGU9Im9mZiIsTC5hcHBlbmQoSy53cmFwLFoud3JhcCksbmUoTCwiU2VudCBkaXJlY3RseSB0byB0aGUgY29uZmlndXJlZCBwcm92aWRlciBmcm9tIHRoaXMgYnJvd3Nlci4gVGhlIGtleSBpcyBoZWxkIG9ubHkgaW4gdGhpcyBwYWdlXHUyMDE5cyBtZW1vcnkuIE5hdGl2ZSBzZWN1cmUgY3JlZGVudGlhbCByZXVzZSByZXF1aXJlcyB0aGUgbmF0aXZlIGhvc3Q7IHByb3ZpZGVyIENPUlMgcmVzdHJpY3Rpb25zIG1heSByZXF1aXJlIHlvdXIgb3duIGJhY2tlbmQuIiksTC5hcHBlbmQobSgicCIsIm1vbm8iLG5ldyBVUkwoYi51cmwpLm9yaWdpbikpLHUuYXBwZW5kKEwpfWxldCBxPW0oInAiLCJoaW50Iik7dS5hcHBlbmQocSk7bGV0IFE9TD0+e3g9TCx5LnNyYz14LHkuaGlkZGVuPSExLHEudGV4dENvbnRlbnQ9IlBob3RvIHJlYWR5LiBTYXZlIGl0IG9mZmxpbmUgbm93IG9yIHNlbmQgaXQgdG8geW91ciBBSSBjb25uZWN0aW9uLiJ9O2lmKGcuZmllbGQub25jaGFuZ2U9YXN5bmMoKT0+e3RyeXtsZXQgTD1nLmZpZWxkLmZpbGVzPy5bMF07TCYmUShhd2FpdCBVZShMKSl9Y2F0Y2goTCl7YWUodSxTdHJpbmcoTCkpfX0sYSl7bGV0IEw9bSgiZGl2IiwiYWN0aW9ucyIpO2ZvcihsZXRbSyxaXW9mW1siY2FtZXJhIiwiVGFrZSBwaG90byB3aXRoIE9uZSBBcHAiXSxbImxpYnJhcnkiLCJDaG9vc2UgZnJvbSBkZXZpY2UgcGhvdG9zIl1dKUwuYXBwZW5kKFUoWixhc3luYygpPT57bGV0IGRlPWF3YWl0IGEuY2FwdHVyZShLKTtkZSYmUShhd2FpdCBCZShkZS5pbWFnZSkpfSkpO3UuYXBwZW5kKEwpfWxldCBqPVUoIkFuYWx5emUgcGhvdG8iLGFzeW5jKCk9PntpZigheCl0aHJvdyBuZXcgRXJyb3IoIlRha2Ugb3IgY2hvb3NlIGEgcGhvdG8gZmlyc3QuIik7ai5kaXNhYmxlZD0hMCxxLnRleHRDb250ZW50PSJTZW5kaW5nIHRoaXMgcGhvdG8gdG8geW91ciBzZWxlY3RlZCBBSSBwcm92aWRlclx1MjAyNiI7dHJ5e18mJmJlKCJtb2RlbCIsXy52YWx1ZSk7bGV0IEw9YT9hd2FpdCBhLnJlcXVlc3QoYi5pZCx7aW1hZ2U6eH0pOmF3YWl0IHRpKGIsUj8udmFsdWU/PyIiLHgsXz8udmFsdWU/PyIiKTtpZighTHx8dHlwZW9mIEwhPSJvYmplY3QifHxBcnJheS5pc0FycmF5KEwpKXRocm93IG5ldyBFcnJvcigiVGhlIG1vZGVsIHJldHVybmVkIG5vIHN0cnVjdHVyZWQgcmVzdWx0LiIpO2ZvcihsZXQgSyBvZiBmKUsuZmllbGQudmFsdWU9U3RyaW5nKGt0KEwsYi5maWVsZE1hcHBpbmc/LltLLmRlZmluaXRpb24ubmFtZV0/P0suZGVmaW5pdGlvbi5uYW1lKT8/IiIpO3EudGV4dENvbnRlbnQ9IkFuYWx5c2lzIHJlYWR5LiBSZXZpZXcgYW5kIGVkaXQgdGhlIGVzdGltYXRlLCB0aGVuIHNhdmUuIn1jYXRjaChMKXthZSh1LEwgaW5zdGFuY2VvZiBFcnJvcj9MLm1lc3NhZ2U6Ik5ldHdvcmsgb3IgYnJvd3NlciBDT1JTIGVycm9yLiBDaGVjayB5b3VyIGNvbm5lY3Rpb24gb3IgdXNlIHlvdXIgb3duIGJhY2tlbmQuIikscS50ZXh0Q29udGVudD0iTm8gYXV0b21hdGljIHJldHJ5IHdhcyBtYWRlOyB0aGUgcHJvdmlkZXIgbWF5IGhhdmUgcHJvY2Vzc2VkIG9yIGJpbGxlZCB0aGUgcmVxdWVzdC4gWW91ciBwaG90byBpcyBzdGlsbCBhdmFpbGFibGUuIn1maW5hbGx5e2ouZGlzYWJsZWQ9ITF9fSwhMCksaGU9VShhPyJTYXZlIHRvIHNoYXJlZCBuYXRpdmUgdGFibGUiOiJTYXZlIG9uIHRoaXMgZGV2aWNlIixhc3luYygpPT57aWYoIXgpdGhyb3cgbmV3IEVycm9yKCJDaG9vc2UgYSBwaG90byBmaXJzdC4iKTtsZXQgTD17cGhvdG86eCxkYXRlOnZlKCl9O2ZvcihsZXQgSyBvZiBmKUxbSy5kZWZpbml0aW9uLm5hbWVdPUsuZGVmaW5pdGlvbi50eXBlPT09Im51bWJlciI/Y2UoSy5maWVsZC52YWx1ZSk6Sy5maWVsZC52YWx1ZTtMLnRpdGxlfHwoTC50aXRsZT0iUGhvdG8gYXdhaXRpbmcgYW5hbHlzaXMiKSxhd2FpdCBsLnVwc2VydChTdHJpbmcoZC5wcm9wcy50YWJsZUlkKSxMLHYpLHY9a2UoKSxUKCkscS50ZXh0Q29udGVudD1hPyJTYXZlZCB0byB0aGUgc2hhcmVkIG5hdGl2ZSB0YWJsZS4gT3BlbiB0aGUgbmF0aXZlIGV4cGVyaWVuY2UgdG8gc2VlIHRoZSBzYW1lIHBob3RvIGFuZCByZXN1bHQuIjoiU2F2ZWQgbG9jYWxseS4gUmVvcGVuIHRoaXMgZXhwZXJpZW5jZSB0byBzZWUgeW91ciBwaG90byBhbmQgcmVzdWx0IGluIGhpc3RvcnkuIixlZShhPyJTYXZlZCB0byBzaGFyZWQgbmF0aXZlIGRhdGEiOiJTYXZlZCBvbiB0aGlzIGRldmljZSIpfSksRz1tKCJkaXYiLCJhY3Rpb25zIik7cmV0dXJuIEcuYXBwZW5kKGosaGUpLHUuYXBwZW5kKEcpLHV9LGNhbWVyYShkKXtsZXQgdT1DKFN0cmluZyhkLnByb3BzLnRpdGxlPz8iS2VlcCBhIHBob3RvIikpLGc9cmUoIlRha2Ugb3IgY2hvb3NlIGEgcGhvdG8iLCJmaWxlIikseD1yZSgiUGhvdG8gdGl0bGUiKTtnLmZpZWxkLmFjY2VwdD0iaW1hZ2UvKiIsZy5maWVsZC5zZXRBdHRyaWJ1dGUoImNhcHR1cmUiLCJlbnZpcm9ubWVudCIpO2xldCB2PW0oImltZyIsInBob3RvLXByZXZpZXciKTt2LmhpZGRlbj0hMCx2LmFsdD0iU2VsZWN0ZWQgcGhvdG8iO2xldCB5PSIiLFM9Zj0+e3k9Zix2LnNyYz15LHYuaGlkZGVuPSExfTtpZihnLmZpZWxkLm9uY2hhbmdlPWFzeW5jKCk9Pnt0cnl7Zy5maWVsZC5maWxlcz8uWzBdJiZTKGF3YWl0IFVlKGcuZmllbGQuZmlsZXNbMF0pKX1jYXRjaChmKXthZSh1LFN0cmluZyhmKSl9fSx1LmFwcGVuZChnLndyYXAsdix4LndyYXApLGEpe2cud3JhcC5oaWRkZW49ITA7bGV0IGY9bSgiZGl2IiwiYWN0aW9ucyIpO2ZvcihsZXRbYixfXW9mW1siY2FtZXJhIiwiVGFrZSBwaG90byB3aXRoIE9uZSBBcHAiXSxbImxpYnJhcnkiLCJDaG9vc2UgZnJvbSBkZXZpY2UgcGhvdG9zIl1dKWYuYXBwZW5kKFUoXyxhc3luYygpPT57bGV0IFI9YXdhaXQgYS5jYXB0dXJlKGIpO1ImJlMoYXdhaXQgQmUoUi5pbWFnZSkpfSkpO3UuYXBwZW5kKGYpfXJldHVybiB1LmFwcGVuZChVKCJTYXZlIHBob3RvIixhc3luYygpPT57aWYoIXkpdGhyb3cgbmV3IEVycm9yKCJDaG9vc2UgYSBwaG90byBmaXJzdC4iKTtpZighZC5wcm9wcy50YWJsZUlkKXRocm93IG5ldyBFcnJvcigiVGhpcyBjYW1lcmEgY29tcG9uZW50IG5lZWRzIGEgZGVzdGluYXRpb24gdGFibGUuIik7YXdhaXQgbC51cHNlcnQoU3RyaW5nKGQucHJvcHMudGFibGVJZCkse3Bob3RvOnksdGl0bGU6eC5maWVsZC52YWx1ZXx8IkEgcGhvdG8iLGRhdGU6dmUoKX0pLFQoKSxlZShhPyJQaG90byBzYXZlZCB0byBzaGFyZWQgbmF0aXZlIGRhdGEiOiJQaG90byBzYXZlZCBvbiB0aGlzIGRldmljZSIpfSwhMCkpLHV9LHNjb3JlcyhkKXtsZXQgdT1DKCJUb2RheVx1MjAxOXMgc2NvcmVib2FyZCIpLGc7aWYoYSluZSh1LCJEZXZlbG9wbWVudCBsYWI6IHJlcXVlc3RzIHVzZSB0aGUgc3BvcnRzIGNyZWRlbnRpYWwgc2F2ZWQgaW4gbmF0aXZlIFNldHRpbmdzLiBZb3VyIGtleSBuZXZlciBlbnRlcnMgdGhpcyBwYWdlLiIpO2Vsc2V7bGV0IGY9cmUoImZvb3RiYWxsLWRhdGEub3JnIEFQSSBrZXkgXHhCNyBzZXNzaW9uIG9ubHkiLCJwYXNzd29yZCIpO2c9Zi5maWVsZCxnLmF1dG9jb21wbGV0ZT0ib2ZmIix1LmFwcGVuZChmLndyYXApfWxldCB4PW0oImRpdiIpLHY9bSgicCIsImhpbnQiKTt1LmFwcGVuZCh2LHgpO2xldCB5PSgpPT57eC5yZXBsYWNlQ2hpbGRyZW4oKTtsZXQgZj1FKGQucHJvcHMudGFibGVJZCksYj1FKGQucHJvcHMuZmF2b3JpdGVzVGFibGVJZCkubWFwKF89PlN0cmluZyhfLnZhbHVlcy50aXRsZSkudG9Mb3dlckNhc2UoKSk7Zi5sZW5ndGh8fHguYXBwZW5kKG0oInAiLCJlbXB0eSIsIk5vIGNhY2hlZCBzY29yZXMgeWV0LiBDb25uZWN0IHlvdXIgcHJvdmlkZXIgdG8gbG9hZCB0b2RheVx1MjAxOXMgbWF0Y2hlcy4iKSk7Zm9yKGxldCBfIG9mIGYpe2xldCBSPW0oImRpdiIsInNjb3JlIikscT1TdHJpbmcoXy52YWx1ZXMuaG9tZSksUT1TdHJpbmcoXy52YWx1ZXMuYXdheSk7Ui5hcHBlbmQobSgic3BhbiIsIiIsYCR7Yi5zb21lKGo9PnEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhqKSk/Ilx1MjYwNSAiOiIifSR7cX1gKSxtKCJzdHJvbmciLCIiLGAke18udmFsdWVzLmhvbWVTY29yZT8/Ilx1MjAxMyJ9IDogJHtfLnZhbHVlcy5hd2F5U2NvcmU/PyJcdTIwMTMifWApLG0oInNwYW4iLCJhd2F5IixRKSkseC5hcHBlbmQoUixtKCJwIiwicXVpZXQiLGAke18udmFsdWVzLnN0YXR1cz8/IiJ9IFx4QjcgUmV0cmlldmVkICR7Xy52YWx1ZXMucmV0cmlldmVkQXQ/bmV3IERhdGUoU3RyaW5nKF8udmFsdWVzLnJldHJpZXZlZEF0KSkudG9Mb2NhbGVTdHJpbmcoKToidW5rbm93biJ9YCkpfX0sUz1VKCJSZWZyZXNoIHNjb3JlcyIsYXN5bmMoKT0+e2lmKCFhJiYhZz8udmFsdWUpdGhyb3cgbmV3IEVycm9yKCJFbnRlciB5b3VyIG93biBmb290YmFsbC1kYXRhLm9yZyB0b2tlbiBmb3IgdGhpcyBzZXNzaW9uLiIpO2xldCBmPUQoZC5wcm9wcy5yZXF1ZXN0SWQpO1MuZGlzYWJsZWQ9ITA7dHJ5e2xldCBiO2lmKGEpe2xldCBfPWF3YWl0IGEucmVxdWVzdChmLmlkKTtiPUFycmF5LmlzQXJyYXkoXyk/XzpfPy5tYXRjaGVzfWVsc2V7bGV0IF89YXdhaXQgZmV0Y2goZi51cmwse3JlZGlyZWN0OiJlcnJvciIsaGVhZGVyczp7IlgtQXV0aC1Ub2tlbiI6Zy52YWx1ZX19KTtpZighXy5vayl0aHJvdyBuZXcgRXJyb3IoYFNwb3J0cyBwcm92aWRlciByZXR1cm5lZCAke18uc3RhdHVzfTsgZXhpc3RpbmcgY2FjaGUgaXMgcHJlc2VydmVkLmApO2I9KGF3YWl0IF8uanNvbigpKS5tYXRjaGVzfWlmKCFBcnJheS5pc0FycmF5KGIpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBwcm92aWRlciByZXNwb25zZTsgZXhpc3RpbmcgY2FjaGUgaXMgcHJlc2VydmVkLiIpO2ZvcihsZXQgXyBvZiBiKXtsZXQgUj17cmV0cmlldmVkQXQ6dmUoKX07Zm9yKGxldFtxLFFdb2YgT2JqZWN0LmVudHJpZXMoZi5maWVsZE1hcHBpbmc/P3t9KSl7bGV0IGo9a3QoXyxRKTtqIT09dm9pZCAwJiYoUltxXT1qKX1hd2FpdCBsLnVwc2VydChTdHJpbmcoZC5wcm9wcy50YWJsZUlkKSxSLGBtYXRjaC0ke18uaWR9YCl9VCgpLHYudGV4dENvbnRlbnQ9IlVwZGF0ZWQuIENvdmVyYWdlIGFuZCBkZWxheSBkZXBlbmQgb24geW91ciBwcm92aWRlciBwbGFuLiIseSgpfWNhdGNoKGIpe2FlKHUsYiBpbnN0YW5jZW9mIEVycm9yP2IubWVzc2FnZToiTmV0d29yayBvciBicm93c2VyIENPUlMgcmVzdHJpY3Rpb247IHVzZSB0aGUgbmF0aXZlIGhvc3Qgb3IgYSBiYWNrZW5kIHlvdSBjb250cm9sLiIpfWZpbmFsbHl7Uy5kaXNhYmxlZD0hMX19LCEwKTtyZXR1cm4gdS5hcHBlbmQobSgiZGl2IiwiYWN0aW9ucyIpKSx1Lmxhc3RFbGVtZW50Q2hpbGQuYXBwZW5kKFMpLHkoKSx1fSxqb3VybmFsKGQpe2xldCB1PUMoU3RyaW5nKGQucHJvcHMudGl0bGU/PyJLZWVwIGEgbWVtb3J5IikpLGc9cmUoIlRpdGxlIikseD1tKCJ0ZXh0YXJlYSIpO3gucGxhY2Vob2xkZXI9IldoYXQgd291bGQgeW91IGxpa2UgdG8gcmVtZW1iZXI/Iix4LnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIkpvdXJuYWwgZW50cnkiKTtsZXQgdj1yZSgiQWRkIGEgcGhvdG8gKG9wdGlvbmFsKSIsImZpbGUiKTt2LmZpZWxkLmFjY2VwdD0iaW1hZ2UvKiI7bGV0IHk9IiIsUz1tKCJwIiwicXVpZXQiKTt2LmZpZWxkLm9uY2hhbmdlPWFzeW5jKCk9Pnt0cnl7di5maWVsZC5maWxlcz8uWzBdJiYoeT1hd2FpdCBVZSh2LmZpZWxkLmZpbGVzWzBdKSxTLnRleHRDb250ZW50PSJQaG90byBhdHRhY2hlZCIpfWNhdGNoKGIpe2FlKHUsU3RyaW5nKGIpKX19LHUuYXBwZW5kKGcud3JhcCx4LHYud3JhcCxTKSxhJiYodi53cmFwLmhpZGRlbj0hMCx1LmFwcGVuZChVKCJBdHRhY2ggYSBkZXZpY2UgcGhvdG8iLGFzeW5jKCk9PntsZXQgYj1hd2FpdCBhLmNhcHR1cmUoImxpYnJhcnkiKTtiJiYoeT1hd2FpdCBCZShiLmltYWdlKSxTLnRleHRDb250ZW50PSJEZXZpY2UgcGhvdG8gYXR0YWNoZWQiKX0pKSk7bGV0IGY9bSgiZGl2IiwiYWN0aW9ucyIpO3JldHVybiBmLmFwcGVuZChVKCJTYXZlIHRoaXMgbWVtb3J5Iixhc3luYygpPT57aWYoIXgudmFsdWUudHJpbSgpKXRocm93IG5ldyBFcnJvcigiV3JpdGUgYSBmZXcgd29yZHMgYmVmb3JlIHNhdmluZy4iKTthd2FpdCBsLnVwc2VydChTdHJpbmcoZC5wcm9wcy50YWJsZUlkKSx7dHJpcElkOlN0cmluZyhkLnByb3BzLnRyaXBJZD8/IiIpLHRpdGxlOmcuZmllbGQudmFsdWV8fCJBIG5vdGUgZnJvbSB0aGUgcm9hZCIsdGV4dDp4LnZhbHVlLHBob3RvOnksZGF0ZTp2ZSgpfSksVCgpLGcuZmllbGQudmFsdWU9IiIseC52YWx1ZT0iIix2LmZpZWxkLnZhbHVlPSIiLHk9IiIsUy50ZXh0Q29udGVudD0iIixlZShhPyJNZW1vcnkgc2F2ZWQgdG8gc2hhcmVkIG5hdGl2ZSBkYXRhIjoiTWVtb3J5IHNhdmVkIG9mZmxpbmUiKX0sITApKSx1LmFwcGVuZChmKSx1fSxjaGVja2xpc3QoZCl7bGV0IHU9QyhTdHJpbmcoZC5wcm9wcy50aXRsZT8/IkEgZmV3IHVzZWZ1bCB0aGluZ3MiKSksZz1tKCJkaXYiKTt1LmFwcGVuZChnKTtsZXQgeD0oKT0+e2cucmVwbGFjZUNoaWxkcmVuKCk7Zm9yKGxldCB5IG9mIEUoZC5wcm9wcy50YWJsZUlkKSl7bGV0IFM9bSgibGFiZWwiLGBjaGVjay1yb3cgJHt5LnZhbHVlcy5kb25lPyJkb25lIjoiIn1gKSxmPW0oImlucHV0Iik7Zi50eXBlPSJjaGVja2JveCIsZi5jaGVja2VkPSEheS52YWx1ZXMuZG9uZSxmLm9uY2hhbmdlPWFzeW5jKCk9Pnthd2FpdCBsLnVwc2VydCh5LnRhYmxlSWQse2RvbmU6Zi5jaGVja2VkfSx5LmlkKSxUKCkseCgpfSxTLmFwcGVuZChmLG0oInNwYW4iLCIiLFN0cmluZyh5LnZhbHVlcy50aXRsZSkpKSxnLmFwcGVuZChTKX19O3goKTtsZXQgdj1yZSgiQWRkIGFuIGl0ZW0iKTtyZXR1cm4gdS5hcHBlbmQodi53cmFwLFUoIkFkZCB0byB0aGUgbGlzdCIsYXN5bmMoKT0+e3YuZmllbGQudmFsdWUudHJpbSgpJiYoYXdhaXQgbC51cHNlcnQoU3RyaW5nKGQucHJvcHMudGFibGVJZCkse3RpdGxlOnYuZmllbGQudmFsdWUsZG9uZTohMX0pLHYuZmllbGQudmFsdWU9IiIsVCgpLHgoKSl9KSksdX0sbW90aW9uKGQpe2xldCB1PUMoU3RyaW5nKGQucHJvcHMudGl0bGU/PyJGaW5kIHlvdXIgbGV2ZWwiKSksZz1tKCJkaXYiLCJsZXZlbCIpLHg9bSgiZGl2IiwiYnViYmxlIiksdj1tKCJwIiwibW9ubyIsIk5vIHNlbnNvciBkYXRhIHlldCIpO2lmKGcuYXBwZW5kKHgpLHUuYXBwZW5kKGcsdiksYSl7bGV0IFM9VSgiUmVhZCBuYXRpdmUgbW90aW9uIHNhbXBsZSIsYXN5bmMoKT0+e2xldCBmPWF3YWl0IGEubW90aW9uKCk7aWYoIVtmLngsZi55LGYuel0uZXZlcnkoTnVtYmVyLmlzRmluaXRlKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBob3N0IHJldHVybmVkIG5vIG1vdGlvbiByZWFkaW5nLiIpO3guc3R5bGUubGVmdD1gJHs1MCtNYXRoLm1heCgtMzUsTWF0aC5taW4oMzUsZi54KjM1KSl9JWAseC5zdHlsZS50b3A9YCR7NTArTWF0aC5tYXgoLTM1LE1hdGgubWluKDM1LC1mLnkqMzUpKX0lYCx2LnRleHRDb250ZW50PWB4ICR7Zi54LnRvRml4ZWQoMyl9IGcgXHhCNyB5ICR7Zi55LnRvRml4ZWQoMyl9IGdgfSk7cmV0dXJuIFMuZGlzYWJsZWQ9IWEuc3VwcG9ydHMoIm1vdGlvbi5zYW1wbGUiKSx1LmFwcGVuZChTKSxuZSh1LCJEZXZlbG9wbWVudCBsYWI6IGVhY2ggdGFwIHJlcXVlc3RzIG9uZSBuYXRpdmUgYWNjZWxlcm9tZXRlciByZWFkaW5nIGFmdGVyIHBlcm1pc3Npb24uIENvbnRpbnVvdXMgbW90aW9uIHN0cmVhbWluZyBpcyBub3QgcGFydCBvZiB0aGlzIGJyaWRnZS4iKSx1fWxldCB5PVUoIkVuYWJsZSBtb3Rpb24gc2Vuc29yIixhc3luYygpPT57bGV0IFM9d2luZG93LkRldmljZU9yaWVudGF0aW9uRXZlbnQ7aWYoIVMpdGhyb3cgbmV3IEVycm9yKCJNb3Rpb24gc2Vuc29ycyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGJyb3dzZXIuIik7aWYoUy5yZXF1ZXN0UGVybWlzc2lvbiYmYXdhaXQgUy5yZXF1ZXN0UGVybWlzc2lvbigpIT09ImdyYW50ZWQiKXRocm93IG5ldyBFcnJvcigiTW90aW9uIHBlcm1pc3Npb24gd2FzIG5vdCBncmFudGVkLiIpO2xldCBmPWI9PntsZXQgXz1NYXRoLm1heCgtMzUsTWF0aC5taW4oMzUsYi5nYW1tYT8/MCkpLFI9TWF0aC5tYXgoLTM1LE1hdGgubWluKDM1LGIuYmV0YT8/MCkpO3guc3R5bGUubGVmdD1gJHs1MCtffSVgLHguc3R5bGUudG9wPWAkezUwK1J9JWAsdi50ZXh0Q29udGVudD1gVGlsdCAke18udG9GaXhlZCgxKX1ceEIwIFx4QjcgJHtSLnRvRml4ZWQoMSl9XHhCMGB9O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJkZXZpY2VvcmllbnRhdGlvbiIsZiksci5wdXNoKCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGV2aWNlb3JpZW50YXRpb24iLGYpKSxzZXRUaW1lb3V0KCgpPT57di50ZXh0Q29udGVudD09PSJObyBzZW5zb3IgZGF0YSB5ZXQiJiYodi50ZXh0Q29udGVudD0iTm8gc2Vuc29yIGV2ZW50cyByZWNlaXZlZC4gVGhpcyBkZXNrdG9wL2Jyb3dzZXIgbWF5IG5vdCBleHBvc2UgbW90aW9uLiIpfSwzNTAwKSx5LmRpc2FibGVkPSEwfSk7cmV0dXJuIHUuYXBwZW5kKHkpLG5lKHUsIlBlcm1pc3Npb24gaXMgcmVxdWVzdGVkIGluIHJlc3BvbnNlIHRvIHRoaXMgdGFwLiBTZW5zb3Igc3VwcG9ydCBhbmQgcGVybWlzc2lvbiBwZXJzaXN0ZW5jZSBhcmUgbWVhc3VyZWQgc2VwYXJhdGVseSBvbiByZWFsIGRldmljZXMuIiksdX0sc2Nhbm5lcihkKXtsZXQgdT1DKFN0cmluZyhkLnByb3BzLnRpdGxlPz8iS2VlcCBhIHJlY2VpcHQiKSksZz1yZSgiVGFrZSBvciBjaG9vc2UgYSByZWNlaXB0IiwiZmlsZSIpLHg9cmUoIk1lcmNoYW50IC8gdGl0bGUiKSx2PXJlKCJUb3RhbCIsIm51bWJlciIpLHk9bSgidGV4dGFyZWEiKTtnLmZpZWxkLmFjY2VwdD0iaW1hZ2UvKiIsZy5maWVsZC5zZXRBdHRyaWJ1dGUoImNhcHR1cmUiLCJlbnZpcm9ubWVudCIpLHkucGxhY2Vob2xkZXI9IlJlY2VpcHQgdGV4dCBvciBub3RlcyIseS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJSZWNlaXB0IHRleHQiKTtsZXQgUz0iIixmPW0oImltZyIsInBob3RvLXByZXZpZXciKTtyZXR1cm4gZi5oaWRkZW49ITAsZi5hbHQ9IlJlY2VpcHQgcGhvdG8iLGcuZmllbGQub25jaGFuZ2U9YXN5bmMoKT0+e3RyeXtnLmZpZWxkLmZpbGVzPy5bMF0mJihTPWF3YWl0IFVlKGcuZmllbGQuZmlsZXNbMF0pLGYuc3JjPVMsZi5oaWRkZW49ITEpfWNhdGNoKGIpe2FlKHUsU3RyaW5nKGIpKX19LHUuYXBwZW5kKGcud3JhcCxmLHgud3JhcCx2LndyYXAseSksYT8oZy53cmFwLmhpZGRlbj0hMCx1LmFwcGVuZChVKCJTY2FuIHJlY2VpcHQgd2l0aCBPbmUgQXBwIixhc3luYygpPT57bGV0IGI9YXdhaXQgYS5jYXB0dXJlKCJjYW1lcmEiLCEwKTtiJiYoUz1hd2FpdCBCZShiLmltYWdlKSxmLnNyYz1TLGYuaGlkZGVuPSExLHkudmFsdWU9Yi50ZXh0Pz8iIix4LmZpZWxkLnZhbHVlPXkudmFsdWUuc3BsaXQoYApgKVswXT8/IiIsdi5maWVsZC52YWx1ZT1bLi4ueS52YWx1ZS5tYXRjaEFsbCgvXGJcZCtbLixdXGR7Mn1cYi9nKV0uYXQoLTEpPy5bMF0/LnJlcGxhY2UoIiwiLCIuIik/PyIiKX0pKSxuZSh1LCJEZXZlbG9wbWVudCBsYWI6IGNhbWVyYSBhbmQgb24tZGV2aWNlIHRleHQgcmVjb2duaXRpb24gY29tZSBmcm9tIHRoZSBhdXRob3JpemVkIG5hdGl2ZSBob3N0LiBSZXZpZXcgdGhlIHRleHQgYW5kIHRvdGFsIGJlZm9yZSBzYXZpbmcuIikpOm5lKHUsIkJyb3dzZXIgYmFzZWxpbmU6IHNhdmUgdGhlIHBob3RvIGFuZCBlZGl0YWJsZSBub3Rlcy4gT24tZGV2aWNlIE9DUiBpcyBhIG5hdGl2ZSBtb2R1bGU7IHRoaXMgcGFnZSBkb2VzIG5vdCBjbGFpbSB0byBoYXZlIHNjYW5uZWQgdGV4dCBpdCBoYXMgbm90IHJlY29nbml6ZWQuIiksdS5hcHBlbmQoVSgiU2F2ZSByZWNlaXB0Iixhc3luYygpPT57aWYoIVMmJiF5LnZhbHVlLnRyaW0oKSl0aHJvdyBuZXcgRXJyb3IoIkNob29zZSBhIHJlY2VpcHQgcGhvdG8gb3IgYWRkIG5vdGVzIGZpcnN0LiIpO2F3YWl0IGwudXBzZXJ0KFN0cmluZyhkLnByb3BzLnRhYmxlSWQpLHtwaG90bzpTLHRpdGxlOnguZmllbGQudmFsdWV8fCJSZWNlaXB0IixhbW91bnQ6Y2Uodi5maWVsZC52YWx1ZSksdGV4dDp5LnZhbHVlLGRhdGU6dmUoKX0pLFQoKSxlZShhPyJSZWNlaXB0IHNhdmVkIHRvIHNoYXJlZCBuYXRpdmUgZGF0YSI6IlJlY2VpcHQgc2F2ZWQgb2ZmbGluZSIpfSwhMCkpLHV9LGNvbm5lY3Rpb24oZCl7aWYoYSl7bGV0IHk9QyhTdHJpbmcoZC5wcm9wcy50aXRsZT8/IkNvbm5lY3QgYSBzZXJ2aWNlIikpLFM9bSgiZGl2Iik7cmV0dXJuIG5lKHksIkRldmVsb3BtZW50IGxhYjogc2lnbiBpbiB0byBEcm9wYm94IG9uY2UgdGhyb3VnaCB0aGUgbmF0aXZlIENsb3VkIFBvY2tldCBleHBlcmllbmNlLCB0aGVuIHVzZSBpdHMgc2F2ZWQgY29ubmVjdGlvbiBoZXJlLiBUb2tlbnMgYXJlIG5vdCBleHBvc2VkIHRvIHRoaXMgSFRNTCBwYWdlLiIpLHkuYXBwZW5kKFUoIkxpc3QgY29ubmVjdGVkIERyb3Bib3ggZmlsZXMiLGFzeW5jKCk9Pnt0cnl7bGV0IGY9YXdhaXQgYS5yZXF1ZXN0KFN0cmluZyhkLnByb3BzLnJlcXVlc3RJZCkpO2lmKCFBcnJheS5pc0FycmF5KGY/LmVudHJpZXMpKXRocm93IG5ldyBFcnJvcigiVGhlIHByb3ZpZGVyIHJldHVybmVkIG5vIGZpbGUgbGlzdC4iKTtTLnJlcGxhY2VDaGlsZHJlbigpO2ZvcihsZXQgYiBvZiBmLmVudHJpZXMpUy5hcHBlbmQobSgicCIsImhpbnQiLFN0cmluZyhiLm5hbWU/PyJGaWxlIikpKTtmLmVudHJpZXMubGVuZ3RofHxTLmFwcGVuZChtKCJwIiwiZW1wdHkiLCJUaGlzIERyb3Bib3ggZm9sZGVyIGlzIGVtcHR5LiIpKX1jYXRjaChmKXthZSh5LGYgaW5zdGFuY2VvZiBFcnJvcj9mLm1lc3NhZ2U6IlNldCB1cCB0aGUgRHJvcGJveCBjb25uZWN0aW9uIGluIHRoZSBuYXRpdmUgZXhwZXJpZW5jZSBmaXJzdC4iKX19LCEwKSxTKSx5fWxldCB1PUMoU3RyaW5nKGQucHJvcHMudGl0bGU/PyJDb25uZWN0IGEgc2VydmljZSIpKSxnPXJlKCJEcm9wYm94IGFwcCBrZXkgKHB1YmxpYyBjbGllbnQgSUQpIiwidGV4dCIsVi5kcm9wYm94QXBwS2V5Pz8iIikseD1VKCJDb25uZWN0IERyb3Bib3giLGFzeW5jKCk9PntpZih3aW5kb3cudG9wIT09d2luZG93KXRocm93IG5ldyBFcnJvcigiT3BlbiB0aGlzIGV4cGVyaWVuY2UgZGlyZWN0bHkgYmVmb3JlIGNvbm5lY3RpbmcgRHJvcGJveDsgYXV0aG9yaXphdGlvbiBwcm92aWRlcnMgbWF5IGJsb2NrIGVtYmVkZGVkIHNpZ24taW4uIik7aWYoIWcuZmllbGQudmFsdWUpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGRldmVsb3BtZW50IGRlbW8gbmVlZHMgYSByZWdpc3RlcmVkIERyb3Bib3ggYXBwIGtleSBhbmQgbWF0Y2hpbmcgcmVkaXJlY3QgVVJJLiIpO2JlKCJkcm9wYm94QXBwS2V5IixnLmZpZWxkLnZhbHVlKTtsZXQgeT1DdCg0OCksUz1QdChhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgiU0hBLTI1NiIsbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHkpKSksZj1DdCgyNCk7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgiZHJvcGJveC5wa2NlIixKU09OLnN0cmluZ2lmeSh7dmVyaWZpZXI6eSxzdGF0ZTpmLGFwcEtleTpnLmZpZWxkLnZhbHVlLHJlZGlyZWN0OmAke2xvY2F0aW9uLm9yaWdpbn0ke2xvY2F0aW9uLnBhdGhuYW1lfWB9KSk7bGV0IGI9bmV3IFVSTFNlYXJjaFBhcmFtcyh7Y2xpZW50X2lkOmcuZmllbGQudmFsdWUscmVzcG9uc2VfdHlwZToiY29kZSIsY29kZV9jaGFsbGVuZ2U6Uyxjb2RlX2NoYWxsZW5nZV9tZXRob2Q6IlMyNTYiLHN0YXRlOmYscmVkaXJlY3RfdXJpOmAke2xvY2F0aW9uLm9yaWdpbn0ke2xvY2F0aW9uLnBhdGhuYW1lfWAsdG9rZW5fYWNjZXNzX3R5cGU6Im9ubGluZSJ9KTtsb2NhdGlvbi5hc3NpZ24oYGh0dHBzOi8vd3d3LmRyb3Bib3guY29tL29hdXRoMi9hdXRob3JpemU/JHtifWApfSwhMCk7dS5hcHBlbmQoZy53cmFwLHgpLG5lKHUsIlRoaXMgYnJvd3NlciBjb25uZWN0aW9uIGlzIHNlcGFyYXRlIGZyb20gbmF0aXZlIGNyZWRlbnRpYWxzLiBBIHJlYWwgcHJvZHVjdCB3b3VsZCBwcmUtcmVnaXN0ZXIgaXRzIHB1YmxpYyBhcHAgSUQgc28gdXNlcnMganVzdCBzaWduIGluLiBObyBjbGllbnQgc2VjcmV0IGlzIHNoaXBwZWQuIFRoZSByZWZlcmVuY2UgZGVtbyBrZWVwcyBhY2Nlc3MgdG9rZW5zIGluIHBhZ2UgbWVtb3J5LCBub3QgbG9jYWwgc3RvcmFnZS4iKTtsZXQgdj1tKCJkaXYiKTtyZXR1cm4gdS5hcHBlbmQodiksSGUodSx2KSx1fSxpbmJveCgpe2xldCBkPUMoIkZyb20geW91ciBhZ2VudCIpO3JldHVybiBkLmFwcGVuZChtKCJwIiwiaGludCIsIlBhY2thZ2VzLCByZWxlYXNlIG5vdGVzLCBhbmQgcmVtaW5kZXJzIGNvbWUgdG9nZXRoZXIgaW4gdGhlIG5hdGl2ZSBBY3Rpdml0eSB0YWIuIFRoaXMgaXNvbGF0ZWQgYmFzZWxpbmUgZG9lcyBub3QgcmVhZCB0aGUgaG9zdFx1MjAxOXMgcHJpdmF0ZSBpbmJveC4iKSksZH19O2FzeW5jIGZ1bmN0aW9uIEhlKGQsdSl7bGV0IGc9bmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLHg9Zy5nZXQoImNvZGUiKTtpZih4KXRyeXtsZXQgdj1KU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImRyb3Bib3gucGtjZSIpPz8ibnVsbCIpO2lmKCF2fHxnLmdldCgic3RhdGUiKSE9PXYuc3RhdGUpdGhyb3cgbmV3IEVycm9yKCJEcm9wYm94IGF1dGhvcml6YXRpb24gc3RhdGUgZGlkIG5vdCBtYXRjaC4gU3RhcnQgdGhlIGNvbm5lY3Rpb24gYWdhaW4uIik7c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgiZHJvcGJveC5wa2NlIiksaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIiIsbG9jYXRpb24ucGF0aG5hbWUpO2xldCB5PWF3YWl0IGZldGNoKCJodHRwczovL2FwaS5kcm9wYm94YXBpLmNvbS9vYXV0aDIvdG9rZW4iLHttZXRob2Q6IlBPU1QiLHJlZGlyZWN0OiJlcnJvciIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9LGJvZHk6bmV3IFVSTFNlYXJjaFBhcmFtcyh7Z3JhbnRfdHlwZToiYXV0aG9yaXphdGlvbl9jb2RlIixjb2RlOngsY2xpZW50X2lkOnYuYXBwS2V5LGNvZGVfdmVyaWZpZXI6di52ZXJpZmllcixyZWRpcmVjdF91cmk6di5yZWRpcmVjdH0pfSk7aWYoIXkub2spdGhyb3cgbmV3IEVycm9yKGBEcm9wYm94IGF1dGhvcml6YXRpb24gZmFpbGVkICgke3kuc3RhdHVzfSkuYCk7bGV0IFM9YXdhaXQgeS5qc29uKCksZj1hd2FpdCBmZXRjaCgiaHR0cHM6Ly9hcGkuZHJvcGJveGFwaS5jb20vMi9maWxlcy9saXN0X2ZvbGRlciIse21ldGhvZDoiUE9TVCIscmVkaXJlY3Q6ImVycm9yIixoZWFkZXJzOntBdXRob3JpemF0aW9uOmBCZWFyZXIgJHtTLmFjY2Vzc190b2tlbn1gLCJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7cGF0aDoiIixsaW1pdDoyMH0pfSk7aWYoIWYub2spdGhyb3cgbmV3IEVycm9yKGBEcm9wYm94IHJldHVybmVkICR7Zi5zdGF0dXN9LmApO2xldCBiPWF3YWl0IGYuanNvbigpO2ZvcihsZXQgXyBvZiBiLmVudHJpZXM/P1tdKXUuYXBwZW5kKG0oInAiLCJoaW50IixfLm5hbWUpKTtlZSgiQ29ubmVjdGVkIGZvciB0aGlzIGJyb3dzZXIgc2Vzc2lvbiIpfWNhdGNoKHYpe2FlKGQsdiBpbnN0YW5jZW9mIEVycm9yP3YubWVzc2FnZToiRHJvcGJveCBjb25uZWN0aW9uIGZhaWxlZCIpfX1hc3luYyBmdW5jdGlvbiBTZShkLHUpe2xldCBnPW0oImRpdiIpO2cuZGF0YXNldC5ub2RlPWQuaWQsdS5hcHBlbmQoZyk7dHJ5e2xldCB4PUNlW2QudHlwZV07aWYoIXgpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBjb21wb25lbnQ6ICR7ZC50eXBlfWApO2cuYXBwZW5kKGF3YWl0IHgoZCkpfWNhdGNoKHgpe2FlKGcseCBpbnN0YW5jZW9mIEVycm9yP3gubWVzc2FnZToiVGhpcyBjb21wb25lbnQgY291bGQgbm90IGxvYWQiKX19YXdhaXQgU2UodC5uYXRpdmUucm9vdCxrKTtsZXQgcGU9bSgiZm9vdGVyIiwic291cmNlLW5vdGljZSIpO3BlLnRleHRDb250ZW50PWE/IkRldmVsb3BtZW50LW9ubHkgcHJpdmlsZWdlZCBicmlkZ2UgZXhwZXJpbWVudC4gU2hhcmVkIHJlY29yZHMsIG5hdGl2ZSByZXF1ZXN0cywgYW5kIGRldmljZSBwZXJtaXNzaW9ucyBhcmUgc3VwcGxpZWQgYnkgdGhlIGF1dGhvcml6ZWQgaG9zdDsgbm8gcmF3IGNyZWRlbnRpYWwgdmFsdWVzIGVudGVyIHRoaXMgcGFnZS4iOmk9PT0ibmF0aXZlLXByZXZpZXciPyJCcm93c2VyIHNpbXVsYXRpb24gb2YgdGhlIGRlY2xhcmF0aXZlIGNvbXBvbmVudCB0cmVlLiBEZXZpY2Utc3BlY2lmaWMgY2FwYWJpbGl0aWVzLCBzZWN1cmUgc3RvcmFnZSwgYW5kIG5vdGlmaWNhdGlvbnMgcmVxdWlyZSB0ZXN0aW5nIGluIHRoZSBFeHBvIGRldmVsb3BtZW50IGJ1aWxkLiI6IlBhY2thZ2VkIEhUTUwgYmFzZWxpbmUuIENvZGUgYW5kIGluY2x1ZGVkIGFzc2V0cyBydW4gbG9jYWxseTsgcHJpdmF0ZSBob3N0IHRhYmxlcyBhbmQgY3JlZGVudGlhbHMgYXJlIG5vdCBleHBvc2VkLiBCcm93c2VyIHN0b3JhZ2UgYW5kIHBlcm1pc3Npb24gYmVoYXZpb3IgYXJlIGRldmljZS1kZXBlbmRlbnQuIixzLmFwcGVuZChwZSk7bGV0IFJlPVUoIkV4cG9ydCBteSBsb2NhbCBkYXRhIiwoKT0+e2xldCBkPW5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeSh7ZXhwZXJpZW5jZUlkOnQuZXhwZXJpZW5jZUlkLHJlY29yZHM6bC5yZWNvcmRzfSxudWxsLDIpXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KSx1PW0oImEiKTt1LmhyZWY9VVJMLmNyZWF0ZU9iamVjdFVSTChkKSx1LmRvd25sb2FkPWAke3QuZXhwZXJpZW5jZUlkfS1kYXRhLmpzb25gLHUuY2xpY2soKSxzZXRUaW1lb3V0KCgpPT5VUkwucmV2b2tlT2JqZWN0VVJMKHUuaHJlZiksMWUzKX0pO3JldHVybiBwZS5hcHBlbmQobSgiZGl2IiwiYWN0aW9ucyIpKSxwZS5sYXN0RWxlbWVudENoaWxkLmFwcGVuZChSZSksYSYmcGUubGFzdEVsZW1lbnRDaGlsZC5hcHBlbmQoVSgiUmVmcmVzaCBzaGFyZWQgdGFibGVzIixhc3luYygpPT57YXdhaXQgbC5pbml0KFtdKSxUKCksZWUoIlNoYXJlZCB0YWJsZXMgcmVmcmVzaGVkIil9KSksKCk9Pntmb3IobGV0IGQgb2YgcilkKCk7bC5jbG9zZSgpfX1mdW5jdGlvbiBQdChzKXtsZXQgdD1zIGluc3RhbmNlb2YgVWludDhBcnJheT9zOm5ldyBVaW50OEFycmF5KHMpO3JldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4udCkpLnJlcGxhY2UoL1wrL2csIi0iKS5yZXBsYWNlKC9cLy9nLCJfIikucmVwbGFjZSgvPSskLywiIil9ZnVuY3Rpb24gQ3Qocyl7cmV0dXJuIFB0KGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkocykpKX12YXIgJHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9uZWFwcC1jb25maWciKTtpZigkdCl7InNlcnZpY2VXb3JrZXIiaW4gbmF2aWdhdG9yJiZsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aCgiLmxvY2FsaG9zdCIpJiZuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcigiL21pbmlhcHAvc3cuanMiLHtzY29wZToiL21pbmlhcHAvIn0pLmNhdGNoKCgpPT57fSk7dHJ5e2xldCBzPUpTT04ucGFyc2UoJHQudGV4dENvbnRlbnQ/PyJ7fSIpO0l0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHAiKSxzLHttb2RlOiJiYXNlbGluZSIsYXNzZXRVUkw6dD0+Z2xvYmFsVGhpcy5fX09ORUFQUF9QQUNLQUdFRF9BU1NFVFNfXz8uW3RdPz9gLi4vJHt0fWB9KX1jYXRjaHtkb2N1bWVudC5ib2R5LnRleHRDb250ZW50PSJUaGlzIHBhY2thZ2UgY291bGQgbm90IGJlIG9wZW5lZC4ifX1yZXR1cm4gVHIocmkpO30pKCk7Cg==",
      "sha256": "82c18a6ec2992c3be9fc0ba72766264666ea9497857ab4f724847a74935da19c"
    },
    {
      "path": "web/style.css",
      "mediaType": "text/css",
      "data": "W2hpZGRlbl0gewogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQo6cm9vdCB7CiAgZm9udC1mYW1pbHk6CiAgICBJbnRlciwKICAgIHVpLXNhbnMtc2VyaWYsCiAgICAtYXBwbGUtc3lzdGVtLAogICAgQmxpbmtNYWNTeXN0ZW1Gb250LAogICAgJ1NlZ29lIFVJJywKICAgIHNhbnMtc2VyaWY7CiAgY29sb3I6ICNlY2VlZTg7CiAgYmFja2dyb3VuZDogIzE0MTkxNTsKICBmb250LXN5bnRoZXNpczogbm9uZTsKICBsaW5lLWhlaWdodDogMS41OwogIC0tYWNjZW50OiAjYzhmMjc5OwogIC0tbXV0ZWQ6ICNhMmFhYTM7CiAgLS1wYW5lbDogIzIwMjcyMDsKICAtLWxpbmU6ICMzNTQwMzQ7Cn0KKiB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQpib2R5IHsKICBtYXJnaW46IDA7Cn0KYnV0dG9uLAppbnB1dCwKc2VsZWN0LAp0ZXh0YXJlYSB7CiAgZm9udDogaW5oZXJpdDsKfQpidXR0b24gewogIGN1cnNvcjogcG9pbnRlcjsKfQpidXR0b246ZGlzYWJsZWQgewogIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgb3BhY2l0eTogMC40NTsKfQpidXR0b24sCmEsCmlucHV0LApzZWxlY3QsCnRleHRhcmVhIHsKICBvdXRsaW5lLW9mZnNldDogNHB4Owp9CmJ1dHRvbjpmb2N1cy12aXNpYmxlLAphOmZvY3VzLXZpc2libGUsCmlucHV0OmZvY3VzLXZpc2libGUsCnNlbGVjdDpmb2N1cy12aXNpYmxlLAp0ZXh0YXJlYTpmb2N1cy12aXNpYmxlIHsKICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tYWNjZW50KTsKfQpidXR0b24gewogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgYmFja2dyb3VuZDogIzJiMzUyYjsKICBjb2xvcjogaW5oZXJpdDsKICBwYWRkaW5nOiAxMHB4IDE1cHg7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICB0cmFuc2l0aW9uOiAwLjE1czsKfQpidXR0b246aG92ZXIgewogIGJhY2tncm91bmQ6ICMzNTQyMzQ7Cn0KYnV0dG9uLnByaW1hcnkgewogIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7CiAgY29sb3I6ICMxNzIwMTY7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQpidXR0b24uc2Vjb25kYXJ5IHsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoucXVpZXQgewogIGZvbnQtc2l6ZTogMTJweDsKICBjb2xvcjogdmFyKC0tbXV0ZWQpOwp9Ci5iYWRnZSB7CiAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgcGFkZGluZzogNHB4IDhweDsKICBib3JkZXItcmFkaXVzOiAxMDBweDsKICBmb250LXNpemU6IDEwcHg7CiAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogIGNvbG9yOiB2YXIoLS1tdXRlZCk7Cn0KLnN0YWNrIHsKICBkaXNwbGF5OiBncmlkOwogIGdhcDogMjBweDsKfQouZ3JpZCB7CiAgZGlzcGxheTogZ3JpZDsKICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7CiAgZ2FwOiAxMnB4Owp9Ci5jYXJkIHsKICBwYWRkaW5nOiAyMHB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxpbmUpOwogIGJvcmRlci1yYWRpdXM6IDE5cHg7CiAgYmFja2dyb3VuZDogdmFyKC0tcGFuZWwpOwogIG1pbi13aWR0aDogMDsKfQouZXhwZXJpZW5jZSB7CiAgbWF4LXdpZHRoOiA3MjBweDsKICBtYXJnaW46IGF1dG87CiAgcGFkZGluZzogMjhweCAyMnB4IDYwcHg7Cn0KLmV4cGVyaWVuY2UgPiBoZWFkZXIgewogIGRpc3BsYXk6IGZsZXg7CiAgZ2FwOiAxMHB4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgbWFyZ2luLWJvdHRvbTogMzBweDsKfQouZXhwZXJpZW5jZSA+IGhlYWRlciAuYmFkZ2UgewogIG1hcmdpbi1sZWZ0OiBhdXRvOwp9CmgxLApoMiwKaDMsCnAgewogIG1hcmdpbjogMDsKfQpoMSB7CiAgZm9udC1zaXplOiAzNXB4OwogIGxpbmUtaGVpZ2h0OiAxLjE1OwogIGxldHRlci1zcGFjaW5nOiAtMC4wNDVlbTsKICBmb250LXdlaWdodDogNjUwOwp9CmgyIHsKICBmb250LXNpemU6IDIwcHg7CiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwp9CmgzIHsKICBmb250LXNpemU6IDE1cHg7Cn0KLmV5ZWJyb3cgewogIGZvbnQtc2l6ZTogMTBweDsKICBsZXR0ZXItc3BhY2luZzogMC4xNmVtOwogIGNvbG9yOiB2YXIoLS1hY2NlbnQpOwogIGZvbnQtd2VpZ2h0OiA3MDA7Cn0KLmJvZHktdGV4dCB7CiAgY29sb3I6ICNhZGI4YWU7CiAgZm9udC1zaXplOiAxNHB4OwogIG1heC13aWR0aDogNTNjaDsKfQouc2VjdGlvbi1oZWFkIHsKICBkaXNwbGF5OiBmbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIGdhcDogMTJweDsKICBtYXJnaW4tYm90dG9tOiAxNnB4Owp9Ci5hY3Rpb25zIHsKICBkaXNwbGF5OiBmbGV4OwogIGdhcDogOXB4OwogIGZsZXgtd3JhcDogd3JhcDsKICBtYXJnaW4tdG9wOiAxNnB4Owp9CmxhYmVsIHsKICBmb250LXNpemU6IDEycHg7CiAgY29sb3I6ICNiNWMwYjU7CiAgZGlzcGxheTogZ3JpZDsKICBnYXA6IDdweDsKICBtYXJnaW4tdG9wOiAxMnB4Owp9CmlucHV0LAp0ZXh0YXJlYSwKc2VsZWN0IHsKICB3aWR0aDogMTAwJTsKICBib3JkZXI6IDFweCBzb2xpZCAjM2M0OTNiOwogIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgYmFja2dyb3VuZDogIzE3MWQxODsKICBjb2xvcjogI2YyZjNlZDsKICBwYWRkaW5nOiAxMXB4IDEycHg7CiAgbWluLXdpZHRoOiAwOwp9CnRleHRhcmVhIHsKICBtaW4taGVpZ2h0OiA5NHB4OwogIHJlc2l6ZTogdmVydGljYWw7Cn0KaW5wdXRbdHlwZT0nY2hlY2tib3gnXSB7CiAgd2lkdGg6IDE4cHg7CiAgaGVpZ2h0OiAxOHB4OwogIGFjY2VudC1jb2xvcjogdmFyKC0tYWNjZW50KTsKfQppbnB1dFt0eXBlPSdmaWxlJ10gewogIGZvbnQtc2l6ZTogMTJweDsKICBwYWRkaW5nOiA5cHg7Cn0KLmVycm9yIHsKICBjb2xvcjogI2ZmZDBiNjsKICBiYWNrZ3JvdW5kOiAjMzkyNzFmOwogIGJvcmRlcjogMXB4IHNvbGlkICM2NjQ3MzE7CiAgYm9yZGVyLXJhZGl1czogMTBweDsKICBwYWRkaW5nOiAxMXB4OwogIGZvbnQtc2l6ZTogMTJweDsKICBtYXJnaW4tdG9wOiAxMnB4Owp9Ci5zdWNjZXNzIHsKICBjb2xvcjogdmFyKC0tYWNjZW50KTsKICBmb250LXNpemU6IDEycHg7CiAgbWFyZ2luLXRvcDogMTBweDsKfQouZW1wdHkgewogIGNvbG9yOiB2YXIoLS1tdXRlZCk7CiAgZm9udC1zaXplOiAxM3B4OwogIHBhZGRpbmc6IDE4cHggMDsKfQoubWV0cmljLXZhbHVlIHsKICBmb250LXNpemU6IDM1cHg7CiAgbGluZS1oZWlnaHQ6IDEuMjsKICBsZXR0ZXItc3BhY2luZzogLTAuMDRlbTsKfQoubWV0cmljLWxhYmVsIHsKICBmb250LXNpemU6IDExcHg7CiAgY29sb3I6IHZhcigtLW11dGVkKTsKICBtYXJnaW4tdG9wOiA4cHg7Cn0KLnBob3RvLXByZXZpZXcgewogIGRpc3BsYXk6IGJsb2NrOwogIG1heC13aWR0aDogMTAwJTsKICBtYXgtaGVpZ2h0OiAyODBweDsKICBvYmplY3QtZml0OiBjb3ZlcjsKICBib3JkZXItcmFkaXVzOiAxM3B4OwogIG1hcmdpbi10b3A6IDEycHg7Cn0KLmltYWdlLWFydCB7CiAgd2lkdGg6IDEwMCU7CiAgZGlzcGxheTogYmxvY2s7CiAgYm9yZGVyLXJhZGl1czogMTVweDsKICBtYXgtaGVpZ2h0OiAyNDBweDsKICBvYmplY3QtZml0OiBjb3ZlcjsKfQouZmxhc2hjYXJkIHsKICB3aWR0aDogMTAwJTsKICBtaW4taGVpZ2h0OiAyMDVweDsKICBkaXNwbGF5OiBmbGV4OwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgYm9yZGVyOiAxcHggc29saWQgIzUyNjA0YTsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCAjMzU0MzJkLCAjMjQyZjIyKTsKICBib3JkZXItcmFkaXVzOiAxNnB4OwogIGdhcDogMTJweDsKICBwYWRkaW5nOiAyNHB4Owp9Ci5mbGFzaGNhcmQgLndvcmQgewogIGZvbnQtc2l6ZTogMzZweDsKICBsZXR0ZXItc3BhY2luZzogLTAuMDRlbTsKfQouZmxhc2hjYXJkIC5tZWFuaW5nIHsKICBmb250LXNpemU6IDIycHg7CiAgY29sb3I6IHZhcigtLWFjY2VudCk7Cn0KLmZsYXNoY2FyZCBzbWFsbCB7CiAgY29sb3I6ICNiMWJkYTg7Cn0KLm1hdGNoLWJvYXJkIHsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICBnYXA6IDEwcHg7Cn0KLm1hdGNoLWJvYXJkIGJ1dHRvbiB7CiAgbWluLWhlaWdodDogNTJweDsKfQoubWF0Y2gtYm9hcmQgLnNlbGVjdGVkIHsKICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudCk7CiAgYmFja2dyb3VuZDogIzQwNTEzNjsKfQoubWF0Y2gtYm9hcmQgLm1hdGNoZWQgewogIG9wYWNpdHk6IDAuNDU7CiAgY29sb3I6IHZhcigtLWFjY2VudCk7Cn0KLnJlY29yZCB7CiAgZGlzcGxheTogZmxleDsKICBnYXA6IDEycHg7CiAgcGFkZGluZzogMTVweCAwOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKfQoucmVjb3JkOmxhc3QtY2hpbGQgewogIGJvcmRlci1ib3R0b206IDA7Cn0KLnJlY29yZCBpbWcgewogIHdpZHRoOiA0OHB4OwogIGhlaWdodDogNDhweDsKICBvYmplY3QtZml0OiBjb3ZlcjsKICBib3JkZXItcmFkaXVzOiA4cHg7Cn0KLnJlY29yZC1tYWluIHsKICBmbGV4OiAxOwogIG1pbi13aWR0aDogMDsKfQoucmVjb3JkLW1haW4gcCB7CiAgY29sb3I6IHZhcigtLW11dGVkKTsKICBmb250LXNpemU6IDEycHg7CiAgbWFyZ2luLXRvcDogNHB4OwogIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwp9Ci5yZWNvcmQgYnV0dG9uIHsKICBmb250LXNpemU6IDEwcHg7CiAgcGFkZGluZzogNXB4IDhweDsKfQouY2hlc3Nib2FyZCB7CiAgZGlzcGxheTogZ3JpZDsKICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg4LCAxZnIpOwogIGFzcGVjdC1yYXRpbzogMTsKICBtYXgtd2lkdGg6IDQyMHB4OwogIG1hcmdpbjogMTZweCBhdXRvOwogIGJvcmRlci1yYWRpdXM6IDhweDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5zcXVhcmUgewogIGJvcmRlcjogMDsKICBib3JkZXItcmFkaXVzOiAwOwogIHBhZGRpbmc6IDA7CiAgZGlzcGxheTogZmxleDsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGZvbnQtc2l6ZTogY2xhbXAoMjNweCwgNnZ3LCAzOXB4KTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgYmFja2dyb3VuZDogI2RjZTRjYzsKICBjb2xvcjogIzE0MjIxNjsKICBhc3BlY3QtcmF0aW86IDE7CiAgdGV4dC1zaGFkb3c6IDAgMXB4IDFweCAjNjY2Owp9Ci5zcXVhcmUuZGFyayB7CiAgYmFja2dyb3VuZDogIzZkODU2MzsKfQouc3F1YXJlLnNlbGVjdGVkIHsKICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCA0cHggI2ZmZTE5YTsKfQouc3F1YXJlLmxlZ2FsOmFmdGVyIHsKICBjb250ZW50OiAnJzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDEwcHg7CiAgaGVpZ2h0OiAxMHB4OwogIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgYmFja2dyb3VuZDogIzE4MjUxNjg4Owp9Ci5zcXVhcmUgc21hbGwgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBsZWZ0OiAzcHg7CiAgYm90dG9tOiAxcHg7CiAgZm9udC1zaXplOiA4cHg7CiAgY29sb3I6ICMxNzIwMTY7CiAgdGV4dC1zaGFkb3c6IG5vbmU7Cn0KLm1hcC13cmFwIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgYm9yZGVyLXJhZGl1czogMTRweDsKICBvdmVyZmxvdzogaGlkZGVuOwogIGJhY2tncm91bmQ6ICNiN2M3OWI7CiAgbWluLWhlaWdodDogMjMwcHg7Cn0KLm1hcC13cmFwIHN2ZywKLm1hcC13cmFwIGltZyB7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiBhdXRvOwp9Ci5tYXAtbWFya2VyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDEzcHg7CiAgaGVpZ2h0OiAxM3B4OwogIGJhY2tncm91bmQ6ICNmZTc5NGM7CiAgYm9yZGVyOiAzcHggc29saWQgd2hpdGU7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGJveC1zaGFkb3c6IDAgMCAwIDRweCAjZmY3OTRjMzM7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7Cn0KLnNjb3JlIHsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG8gMWZyOwogIGdhcDogMTJweDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIHBhZGRpbmc6IDE2cHggMDsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbGluZSk7CiAgZm9udC1zaXplOiAxM3B4Owp9Ci5zY29yZSAuYXdheSB7CiAgdGV4dC1hbGlnbjogcmlnaHQ7Cn0KLnNjb3JlIHN0cm9uZyB7CiAgZm9udC1zaXplOiAyMnB4Owp9Ci5sZXZlbCB7CiAgaGVpZ2h0OiAxODVweDsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoIzI2M2MzMiwgIzFhMjkyMSk7CiAgYm9yZGVyLXJhZGl1czogMTVweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbWFyZ2luOiAxNnB4IDA7CiAgYm9yZGVyOiAxcHggc29saWQgIzRjNjU1NTsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5sZXZlbDpiZWZvcmUsCi5sZXZlbDphZnRlciB7CiAgY29udGVudDogJyc7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJhY2tncm91bmQ6ICM1Yzc2NjM7Cn0KLmxldmVsOmJlZm9yZSB7CiAgd2lkdGg6IDFweDsKICBoZWlnaHQ6IDEwMCU7CiAgbGVmdDogNTAlOwp9Ci5sZXZlbDphZnRlciB7CiAgaGVpZ2h0OiAxcHg7CiAgd2lkdGg6IDEwMCU7CiAgdG9wOiA1MCU7Cn0KLmJ1YmJsZSB7CiAgd2lkdGg6IDM4cHg7CiAgaGVpZ2h0OiAzOHB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBsZWZ0OiA1MCU7CiAgdG9wOiA1MCU7CiAgYm9yZGVyOiAycHggc29saWQgI2RiZjdjMzsKICBiYWNrZ3JvdW5kOiAjYjdlOTc2OTk7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogIGJveC1zaGFkb3c6IDAgMCAyNXB4ICNjOGYyNzkzMzsKfQouY2hlY2stcm93IHsKICBkaXNwbGF5OiBmbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgZ2FwOiAxMnB4OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICBwYWRkaW5nOiAxMnB4IDA7CiAgZm9udC1zaXplOiAxNHB4Owp9Ci5jaGVjay1yb3cgaW5wdXQgewogIGZsZXgtc2hyaW5rOiAwOwp9Ci5jaGVjay1yb3cuZG9uZSBzcGFuIHsKICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICBjb2xvcjogdmFyKC0tbXV0ZWQpOwp9Ci5zb3VyY2Utbm90aWNlIHsKICBmb250LXNpemU6IDEwcHg7CiAgY29sb3I6IHZhcigtLW11dGVkKTsKICBtYXJnaW4tdG9wOiAyNHB4OwogIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1saW5lKTsKICBwYWRkaW5nLXRvcDogMTRweDsKfQouaW5saW5lLWlucHV0IHsKICBkaXNwbGF5OiBmbGV4OwogIGdhcDogOHB4OwogIGFsaWduLWl0ZW1zOiBlbmQ7Cn0KLmlubGluZS1pbnB1dCBsYWJlbCB7CiAgZmxleDogMTsKfQouaW5saW5lLWlucHV0IGJ1dHRvbiB7CiAgbWFyZ2luLXRvcDogMTJweDsKfQouY2hhcnQtYmFycyB7CiAgZGlzcGxheTogZmxleDsKICBnYXA6IDEwcHg7CiAgYWxpZ24taXRlbXM6IGVuZDsKICBoZWlnaHQ6IDEwMHB4OwogIG1hcmdpbi10b3A6IDE2cHg7Cn0KLmNoYXJ0LWJhciB7CiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTsKICBib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDsKICBtaW4td2lkdGg6IDE1cHg7CiAgZmxleDogMTsKfQpkZXRhaWxzIHsKICBmb250LXNpemU6IDEycHg7CiAgbWFyZ2luLXRvcDogMTJweDsKfQpzdW1tYXJ5IHsKICBjdXJzb3I6IHBvaW50ZXI7CiAgY29sb3I6IHZhcigtLW11dGVkKTsKfQouaGludCB7CiAgZm9udC1zaXplOiAxMnB4OwogIGxpbmUtaGVpZ2h0OiAxLjY7CiAgY29sb3I6ICNhZmI5YWY7CiAgbWFyZ2luLXRvcDogMTBweDsKfQoudG9hc3QgewogIHBvc2l0aW9uOiBmaXhlZDsKICBib3R0b206IDIycHg7CiAgbGVmdDogNTAlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQpOwogIGNvbG9yOiAjMTYyMDE0OwogIHBhZGRpbmc6IDEwcHggMThweDsKICBib3JkZXItcmFkaXVzOiAxMDBweDsKICB6LWluZGV4OiAxMDA7CiAgZm9udC1zaXplOiAxMnB4OwogIGJveC1zaGFkb3c6IDAgNHB4IDMwcHggIzAwMDU7Cn0KLmNvbmZpZy1ib3ggewogIGJhY2tncm91bmQ6ICMxNDFiMTY7CiAgcGFkZGluZzogMTRweDsKICBib3JkZXItcmFkaXVzOiAxMnB4OwogIG1hcmdpbi10b3A6IDEycHg7Cn0KLnN0YXR1cy1kb3QgewogIHdpZHRoOiA2cHg7CiAgaGVpZ2h0OiA2cHg7CiAgYmFja2dyb3VuZDogdmFyKC0tYWNjZW50KTsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9Ci5tb25vIHsKICBmb250LWZhbWlseTogdWktbW9ub3NwYWNlLCBtb25vc3BhY2U7CiAgZm9udC1zaXplOiAxMXB4Owp9CmEgewogIGNvbG9yOiB2YXIoLS1hY2NlbnQpOwp9CkBtZWRpYSAobWF4LXdpZHRoOiA0MDBweCkgewogIGgxIHsKICAgIGZvbnQtc2l6ZTogMzBweDsKICB9CiAgLmV4cGVyaWVuY2UgewogICAgcGFkZGluZzogMjJweCAxNnB4OwogIH0KICAuY2FyZCB7CiAgICBwYWRkaW5nOiAxNnB4OwogIH0KICAuZ3JpZCB7CiAgICBnYXA6IDhweDsKICB9CiAgLm1ldHJpYy12YWx1ZSB7CiAgICBmb250LXNpemU6IDI4cHg7CiAgfQp9Cg==",
      "sha256": "3cb0d6d57b6b9132de9e728f67a08e66507065fc580e18105c5866de53363c00"
    },
    {
      "path": "web/index.html",
      "mediaType": "text/html",
      "data": "PCFkb2N0eXBlIGh0bWw+PGh0bWwgbGFuZz0iZW4iPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij48bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSx2aWV3cG9ydC1maXQ9Y292ZXIiPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2VjdXJpdHktUG9saWN5IiBjb250ZW50PSJkZWZhdWx0LXNyYyAnbm9uZSc7IHNjcmlwdC1zcmMgJ3NlbGYnOyBzdHlsZS1zcmMgJ3NlbGYnICd1bnNhZmUtaW5saW5lJzsgaW1nLXNyYyAnc2VsZicgZGF0YTogYmxvYjo7IGNvbm5lY3Qtc3JjICdzZWxmJyBkYXRhOiBibG9iOiA7IG1lZGlhLXNyYyAnc2VsZicgYmxvYjo7IHdvcmtlci1zcmMgJ3NlbGYnOyBiYXNlLXVyaSAnbm9uZSc7IGZvcm0tYWN0aW9uICdub25lJzsgb2JqZWN0LXNyYyAnbm9uZSciPjxtZXRhIG5hbWU9InRoZW1lLWNvbG9yIiBjb250ZW50PSIjMTQxOTE1Ij48dGl0bGU+RmluZCBZb3VyIExldmVsPC90aXRsZT48bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlLmNzcyI+PC9oZWFkPjxib2R5PjxtYWluIGlkPSJhcHAiPjwvbWFpbj48c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2pzb24iIGlkPSJvbmVhcHAtY29uZmlnIj57ImZvcm1hdFZlcnNpb24iOjEsImV4cGVyaWVuY2VJZCI6InN0ZWFkeS1oYW5kcyIsInJldmlzaW9uIjoxLCJtaW5Ib3N0VmVyc2lvbiI6IjAuMS4wIiwidGl0bGUiOiJGaW5kIFlvdXIgTGV2ZWwiLCJzdWJ0aXRsZSI6IkEgcHJhY3RpY2FsIGxpdHRsZSB0b29sIGZvciBhIHN0ZWFkeSBmcmFtZS4iLCJpY29uIjoiY29tcGFzcyIsInRpbnQiOiIjQkNFMkRCIiwicnVudGltZSI6Im5hdGl2ZSIsInRhYmxlcyI6W10sInNlZWRzIjpbXSwiZGF0YUJpbmRpbmdzIjpbXSwiY2FwYWJpbGl0aWVzIjpbIm1vdGlvbiJdLCJjb25uZWN0aW9ucyI6W10sIm5hdGl2ZSI6eyJyb290Ijp7ImlkIjoicm9vdCIsInR5cGUiOiJzdGFjayIsInByb3BzIjp7ImdhcCI6MjB9LCJjaGlsZHJlbiI6W3siaWQiOiJpbnRybyIsInR5cGUiOiJzdGFjayIsInByb3BzIjp7fSwiY2hpbGRyZW4iOlt7ImlkIjoiZXllYnJvdyIsInR5cGUiOiJ0ZXh0IiwicHJvcHMiOnsidGV4dCI6Ik1BREUgRk9SIFlPVVIgRVZFUllEQVkiLCJ2YXJpYW50IjoiZXllYnJvdyJ9fSx7ImlkIjoiaGVhZGluZyIsInR5cGUiOiJ0ZXh0IiwicHJvcHMiOnsidGV4dCI6IkZpbmQgeW91ciBsZXZlbCIsInZhcmlhbnQiOiJ0aXRsZSJ9fSx7ImlkIjoiZGVzY3JpcHRpb24iLCJ0eXBlIjoidGV4dCIsInByb3BzIjp7InRleHQiOiJVc2UgbW90aW9uIHNlbnNvcnMgdG8gbGluZSB1cCBhIHBob3RvIG9yIGNoZWNrIGEgc3VyZmFjZS4gQnJvd3NlciBzZW5zb3IgYXZhaWxhYmlsaXR5IGFuZCBwZXJtaXNzaW9uIHBlcnNpc3RlbmNlIHZhcnkuIiwidmFyaWFudCI6ImJvZHkifX1dfSx7ImlkIjoibGV2ZWwiLCJ0eXBlIjoibW90aW9uIiwicHJvcHMiOnsidGl0bGUiOiJEZXNrIGxldmVsIiwibW9kZSI6ImxldmVsIn19XX19LCJhc3NldHMiOltdLCJyZWxlYXNlTm90ZXMiOiJGaXJzdCBlZGl0aW9uLiBTYW1wbGUgY29udGVudCBpcyBsYWJlbGVkOyB5b3VyIGVkaXRzIHN0YXkgb24gdGhpcyBkZXZpY2UuIn08L3NjcmlwdD48c2NyaXB0IHNyYz0icnVudGltZS5qcyIgZGVmZXI+PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4=",
      "sha256": "47e3a610d77cacf9b4cdf5b1a7abdf865ef553102c61005115fb5e3b54f45b6a"
    }
  ],
  "releaseNotes": "Packaged HTML baseline. Its own browser storage and credentials; no privileged host bridge."
}
