You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2 lines
663 KiB
2 lines
663 KiB
//{"version":"3.8.7","encode":"base64"}
|
|
dmFyIF9fVW5pU2VydmljZVN0YXJ0VGltZV9fID0gRGF0ZS5ub3coKTt2YXIgZ2xvYmFsPXRoaXM7IHZhciBwcm9jZXNzPXtlbnY6e319OyB2YXIgc2V0VGltZW91dD1nbG9iYWwuc2V0VGltZW91dDsKKCgpPT57dmFyIHNJPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgbEk9KGcscyk9Pntmb3IodmFyIHAgaW4gcylzSShnLHAse2dldDpzW3BdLGVudW1lcmFibGU6ITB9KX07dmFyIFRhPU9iamVjdC5mcmVlemU7ZnVuY3Rpb24gZGMoe2dldEN1cnJlbnRQYWdlczpnLHVuaTpzLFVuaVNoYXJlZDpwLFZ1ZTp3LFZ1ZVNoYXJlZDprfSl7dmFyIFM9ZnVuY3Rpb24oZCxFLEIsV2UpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBMdCgpe2xldCBWZT1nKCksb3Q9VmUubGVuZ3RoO2lmKG90KXJldHVybiBWZVtvdC0xXX1mdW5jdGlvbiBlbigpe2xldCBWZT1MdCgpO2lmKFZlKXJldHVybiBWZS4kdm19ZnVuY3Rpb24geHQoVmUsb3QsYnQpe2lmKEIuaXNTdHJpbmcoVmUpKWJ0PW90LG90PVZlLFZlPWVuKCk7ZWxzZSBpZih0eXBlb2YgVmU9PSJudW1iZXIiKXtsZXQgU249ZygpLmZpbmQoSnQ9Pkp0LiRwYWdlLmlkPT09VmUpO1NuP1ZlPVNuLiR2bTpWZT1lbigpfWlmKCFWZSlyZXR1cm47aWYoVmUuX19jYWxsX2hvb2spcmV0dXJuIFZlLl9fY2FsbF9ob29rKG90LGJ0KTtsZXQgdG49VmUuJFtvdF07cmV0dXJuIHRuJiZFLmludm9rZUFycmF5Rm5zKHRuLGJ0KX1mdW5jdGlvbiBJKFZlLG90LGJ0LHRuKXtCLmlzRnVuY3Rpb24ob3QpJiZXZS5pbmplY3RIb29rKFZlLG90LmJpbmQoYnQpLHRuKX1mdW5jdGlvbiBTdChWZSxvdCxidCl7dmFyIHRuO2xldCBTbj1WZS5tcFR5cGV8fGJ0LiRtcFR5cGU7aWYoISghU258fFNuPT09ImNvbXBvbmVudCIpJiYoT2JqZWN0LmtleXMoVmUpLmZvckVhY2goSnQ9PntpZihFLmlzVW5pTGlmZWN5Y2xlSG9vayhKdCxWZVtKdF0sITEpKXtsZXQgcnI9VmVbSnRdO0IuaXNBcnJheShycik/cnIuZm9yRWFjaChBcj0+SShKdCxBcixidCxvdCkpOkkoSnQscnIsYnQsb3QpfX0pLFNuPT09InBhZ2UiKSl7b3QuX19pc1Zpc2libGU9ITA7dHJ5e3h0KGJ0LEUuT05fTE9BRCxvdC5hdHRycy5fX3BhZ2VRdWVyeSksZGVsZXRlIG90LmF0dHJzLl9fcGFnZVF1ZXJ5LCgodG49YnQuJHBhZ2UpPT09bnVsbHx8dG49PT12b2lkIDA/dm9pZCAwOnRuLm9wZW5UeXBlKSE9PSJwcmVsb2FkUGFnZSImJnh0KGJ0LEUuT05fU0hPVyl9Y2F0Y2goSnQpe2NvbnNvbGUuZXJyb3IoSnQubWVzc2FnZStFLkxJTkVGRUVEK0p0LnN0YWNrKX19fWZ1bmN0aW9uIFBuKFZlLG90KXtzdChvdCxWZS4kcmVuZGVyanMsVmVbIiQiK0UuUkVOREVSSlNfTU9EVUxFU10pfWZ1bmN0aW9uIHN0KFZlLG90LGJ0PXt9KXtpZighQi5pc0FycmF5KG90KSlyZXR1cm47bGV0IHRuPVZlLnVpZCxTbj1WZS4kd3hzTW9kdWxlc3x8KFZlLiR3eHNNb2R1bGVzPVtdKSxKdD1WZS5jdHg7b3QuZm9yRWFjaChycj0+e2J0W3JyXSYmKEp0W3JyXT1XKHRuLGJ0W3JyXSxyciksU24ucHVzaChycikpfSl9ZnVuY3Rpb24gVyhWZSxvdCxidCl7bGV0IHRuPXt9O3JldHVybiBuZXcgUHJveHkodG4se2dldChTbixKdCl7cmV0dXJuIHRuW0p0XXx8KHRuW0p0XT1aKFZlLG90LGJ0LEp0KSl9fSl9ZnVuY3Rpb24gWihWZSxvdCxidCx0bil7bGV0IFNuPSgpPT57fSxKdD0oKT0+RS5XWFNfUFJPVE9DT0wrSlNPTi5zdHJpbmdpZnkoW1ZlLG90LGJ0KyIuIit0bl0pO3JldHVybiBuZXcgUHJveHkoU24se2dldChycixBcil7cmV0dXJuIEFyPT09InRvSlNPTiI/SnQ6U25bQXJdfHwoU25bQXJdPVooVmUsb3QsYnQrIi4iK3RuLEFyKSl9LGFwcGx5KHJyLEFyLE9yKXtyZXR1cm4gRS5XWFNfUFJPVE9DT0wrSlNPTi5zdHJpbmdpZnkoW1ZlLG90LGJ0KyIuIit0bixbLi4uT3JdXSl9fSl9ZnVuY3Rpb24gZm4oVmUsb3Qpe3N0KG90LFZlLiR3eHMsVmVbIiQiK0UuV1hTX01PRFVMRVNdKX1mdW5jdGlvbiBzbihWZSxvdCxidCl7Zm4oVmUsb3QpLFBuKFZlLG90KSxTdChWZSxvdCxidCl9ZnVuY3Rpb24gX24oVmUsb3QsYnQpe3JldHVybiBWZVtvdF09YnR9ZnVuY3Rpb24gV24oVmUpe3JldHVybiBmdW5jdGlvbihidCx0bixTbil7aWYoIXRuKXRocm93IGJ0O2xldCBKdD1WZS5faW5zdGFuY2U7aWYoIUp0fHwhSnQucHJveHkpdGhyb3cgYnQ7eHQoSnQucHJveHksRS5PTl9FUlJPUixidCl9fWZ1bmN0aW9uIHBpKFZlLG90KXtyZXR1cm4gVmU/Wy4uLm5ldyBTZXQoW10uY29uY2F0KFZlLG90KSldOm90fWZ1bmN0aW9uIHZpKFZlKXtFLlVuaUxpZmVjeWNsZUhvb2tzLmZvckVhY2gob3Q9PntWZVtvdF09cGl9KX1sZXQgYXIsU3I9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IixDbj0vXig/OltBLVphLXpcZCsvXXs0fSkqPyg/OltBLVphLXpcZCsvXXsyfSg/Oj09KT98W0EtWmEtelxkKy9dezN9PT8pPyQvO3R5cGVvZiBhdG9iIT0iZnVuY3Rpb24iP2FyPWZ1bmN0aW9uKFZlKXtpZihWZT1TdHJpbmcoVmUpLnJlcGxhY2UoL1tcdFxuXGZcciBdKy9nLCIiKSwhQ24udGVzdChWZSkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSAnYXRvYicgb24gJ1dpbmRvdyc6IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIik7VmUrPSI9PSIuc2xpY2UoMi0oVmUubGVuZ3RoJjMpKTtmb3IodmFyIG90LGJ0PSIiLHRuLFNuLEp0PTA7SnQ8VmUubGVuZ3RoOylvdD1Tci5pbmRleE9mKFZlLmNoYXJBdChKdCsrKSk8PDE4fFNyLmluZGV4T2YoVmUuY2hhckF0KEp0KyspKTw8MTJ8KHRuPVNyLmluZGV4T2YoVmUuY2hhckF0KEp0KyspKSk8PDZ8KFNuPVNyLmluZGV4T2YoVmUuY2hhckF0KEp0KyspKSksYnQrPXRuPT09NjQ/U3RyaW5nLmZyb21DaGFyQ29kZShvdD4+MTYmMjU1KTpTbj09PTY0P1N0cmluZy5mcm9tQ2hhckNvZGUob3Q+PjE2JjI1NSxvdD4+OCYyNTUpOlN0cmluZy5mcm9tQ2hhckNvZGUob3Q+PjE2JjI1NSxvdD4+OCYyNTUsb3QmMjU1KTtyZXR1cm4gYnR9OmFyPWF0b2I7ZnVuY3Rpb24gd3IoVmUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoYXIoVmUpLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24ob3Qpe3JldHVybiIlIisoIjAwIitvdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfSkuam9pbigiIikpfWZ1bmN0aW9uIENyKCl7bGV0IFZlPXMuZ2V0U3RvcmFnZVN5bmMoInVuaV9pZF90b2tlbiIpfHwiIixvdD1WZS5zcGxpdCgiLiIpO2lmKCFWZXx8b3QubGVuZ3RoIT09MylyZXR1cm57dWlkOm51bGwscm9sZTpbXSxwZXJtaXNzaW9uOltdLHRva2VuRXhwaXJlZDowfTtsZXQgYnQ7dHJ5e2J0PUpTT04ucGFyc2Uod3Iob3RbMV0pKX1jYXRjaCh0bil7dGhyb3cgbmV3IEVycm9yKCJcdTgzQjdcdTUzRDZcdTVGNTNcdTUyNERcdTc1MjhcdTYyMzdcdTRGRTFcdTYwNkZcdTUxRkFcdTk1MTlcdUZGMENcdThCRTZcdTdFQzZcdTk1MTlcdThCRUZcdTRGRTFcdTYwNkZcdTRFM0FcdUZGMUEiK3RuLm1lc3NhZ2UpfXJldHVybiBidC50b2tlbkV4cGlyZWQ9YnQuZXhwKjFlMyxkZWxldGUgYnQuZXhwLGRlbGV0ZSBidC5pYXQsYnR9ZnVuY3Rpb24gbWkoVmUpe1ZlLnVuaUlESGFzUm9sZT1mdW5jdGlvbihvdCl7bGV0e3JvbGU6YnR9PUNyKCk7cmV0dXJuIGJ0LmluZGV4T2Yob3QpPi0xfSxWZS51bmlJREhhc1Blcm1pc3Npb249ZnVuY3Rpb24ob3Qpe2xldHtwZXJtaXNzaW9uOmJ0fT1DcigpO3JldHVybiB0aGlzLnVuaUlESGFzUm9sZSgiYWRtaW4iKXx8YnQuaW5kZXhPZihvdCk+LTF9LFZlLnVuaUlEVG9rZW5WYWxpZD1mdW5jdGlvbigpe2xldHt0b2tlbkV4cGlyZWQ6b3R9PUNyKCk7cmV0dXJuIG90PkRhdGUubm93KCl9fWZ1bmN0aW9uIHJpKFZlKXtsZXQgb3Q9VmUuX2NvbnRleHQuY29uZmlnO290LmVycm9ySGFuZGxlcj1FLmludm9rZUNyZWF0ZUVycm9ySGFuZGxlcihWZSxXbiksdmkob3Qub3B0aW9uTWVyZ2VTdHJhdGVnaWVzKTtsZXQgYnQ9b3QuZ2xvYmFsUHJvcGVydGllczttaShidCksYnQuJHNldD1fbixidC4kYXBwbHlPcHRpb25zPXNuLEUuaW52b2tlQ3JlYXRlVnVlQXBwSG9vayhWZSl9cmV0dXJuIGQuaW5pdEFwcD1yaSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZH0oe30scCxrLHcpO3JldHVybiBTfWZ1bmN0aW9uIHR1KGcse252dWU6cyxVbmlTaGFyZWQ6cCxWdWVTaGFyZWQ6dyxWdWVSZWFjdGl2aXR5Omt9KXtsZXQgUz17cGxhdGZvcm06cy5jb25maWcuZW52LnBsYXRmb3JtLFVuaVNoYXJlZDpwLFZ1ZVNoYXJlZDp3LFZ1ZVJlYWN0aXZpdHk6a307cmV0dXJuIGcoUyxzLmRvY3VtZW50KX1mdW5jdGlvbiBjSSh7c2V0VGltZW91dDpnLGNsZWFyVGltZW91dDpzLHVuaTpwLGdldEN1cnJlbnRQYWdlczp3LFZ1ZTprLHdlZXg6UyxwbHVzOmQsQnJvYWRjYXN0Q2hhbm5lbDpFLFVuaVZpZXdKU0JyaWRnZTpCLFZ1ZVNoYXJlZDpXZSxVbmlTaGFyZWQ6THQsX191bmlDb25maWc6ZW59KXt2YXIgeHQ9ZnVuY3Rpb24oSSxTdCxQbil7InVzZSBzdHJpY3QiO2xldCBzdD1bIm5hdmlnYXRlIiwicmVkaXJlY3QiLCJzd2l0Y2hUYWIiLCJyZUxhdW5jaCIsIm5hdmlnYXRlQmFjayJdLFc9WyJzbGlkZS1pbi1yaWdodCIsInNsaWRlLWluLWxlZnQiLCJzbGlkZS1pbi10b3AiLCJzbGlkZS1pbi1ib3R0b20iLCJmYWRlLWluIiwiem9vbS1vdXQiLCJ6b29tLWZhZGUtb3V0IiwicG9wLWluIiwibm9uZSJdLFo9WyJzbGlkZS1vdXQtcmlnaHQiLCJzbGlkZS1vdXQtbGVmdCIsInNsaWRlLW91dC10b3AiLCJzbGlkZS1vdXQtYm90dG9tIiwiZmFkZS1vdXQiLCJ6b29tLWluIiwiem9vbS1mYWRlLWluIiwicG9wLW91dCIsIm5vbmUiXSxmbj17aG92ZXJDbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibmF2aWdhdG9yLWhvdmVyIn0sdXJsOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxvcGVuVHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibmF2aWdhdGUiLHZhbGlkYXRvcihtKXtyZXR1cm4gQm9vbGVhbih+c3QuaW5kZXhPZihtKSl9fSxkZWx0YTp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxob3ZlclN0YXJ0VGltZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo1MH0saG92ZXJTdGF5VGltZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo2MDB9LGV4aXN0czp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0saG92ZXJTdG9wUHJvcGFnYXRpb246e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxhbmltYXRpb25UeXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIiLHZhbGlkYXRvcihtKXtyZXR1cm4hbXx8Vy5jb25jYXQoWikuaW5jbHVkZXMobSl9fSxhbmltYXRpb25EdXJhdGlvbjp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDozMDB9fTtmdW5jdGlvbiBzbihtKXtyZXR1cm4oKT0+e2lmKG0ub3BlblR5cGUhPT0ibmF2aWdhdGVCYWNrIiYmIW0udXJsKXtjb25zb2xlLmVycm9yKCI8bmF2aWdhdG9yLz4gc2hvdWxkIGhhdmUgdXJsIGF0dHJpYnV0ZSB3aGVuIHVzaW5nIG5hdmlnYXRlVG8sIHJlZGlyZWN0VG8sIHJlTGF1bmNoIG9yIHN3aXRjaFRhYiIpO3JldHVybn1sZXQgUj1wYXJzZUludChtLmFuaW1hdGlvbkR1cmF0aW9uKTtzd2l0Y2gobS5vcGVuVHlwZSl7Y2FzZSJuYXZpZ2F0ZSI6cC5uYXZpZ2F0ZVRvKHt1cmw6bS51cmwsYW5pbWF0aW9uVHlwZTptLmFuaW1hdGlvblR5cGV8fCJwb3AtaW4iLGFuaW1hdGlvbkR1cmF0aW9uOlJ9KTticmVhaztjYXNlInJlZGlyZWN0IjpwLnJlZGlyZWN0VG8oe3VybDptLnVybCxleGlzdHM6bS5leGlzdHN9KTticmVhaztjYXNlInN3aXRjaFRhYiI6cC5zd2l0Y2hUYWIoe3VybDptLnVybH0pO2JyZWFrO2Nhc2UicmVMYXVuY2giOnAucmVMYXVuY2goe3VybDptLnVybH0pO2JyZWFrO2Nhc2UibmF2aWdhdGVCYWNrIjpwLm5hdmlnYXRlQmFjayh7ZGVsdGE6bS5kZWx0YSxhbmltYXRpb25UeXBlOm0uYW5pbWF0aW9uVHlwZXx8InBvcC1vdXQiLGFuaW1hdGlvbkR1cmF0aW9uOlJ9KTticmVha319fWZ1bmN0aW9uIF9uKG0pe2lmKG0uaG92ZXJDbGFzcyYmbS5ob3ZlckNsYXNzIT09Im5vbmUiKXtsZXQgUj17aG92ZXJDbGFzczptLmhvdmVyQ2xhc3N9O3JldHVybiBTdC5oYXNPd24obSwiaG92ZXJTdGFydFRpbWUiKSYmKFIuaG92ZXJTdGFydFRpbWU9bS5ob3ZlclN0YXJ0VGltZSksU3QuaGFzT3duKG0sImhvdmVyU3RheVRpbWUiKSYmKFIuaG92ZXJTdGF5VGltZT1tLmhvdmVyU3RheVRpbWUpLFN0Lmhhc093bihtLCJob3ZlclN0b3BQcm9wYWdhdGlvbiIpJiYoUi5ob3ZlclN0b3BQcm9wYWdhdGlvbj1tLmhvdmVyU3RvcFByb3BhZ2F0aW9uKSxSfXJldHVybnt9fWZ1bmN0aW9uIFduKG0sUil7cmV0dXJuIEkuY3JlYXRlRWxlbWVudFZOb2RlKCJ1LXRleHQiLFN0LmV4dGVuZCh7YXBwZW5kQXNUcmVlOiEwfSxSKSxtKX1sZXQgcGk9W3sibmF2aWdhdG9yLWhvdmVyIjp7IiI6e2JhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwLjEpIixvcGFjaXR5Oi43fX19XSx2aT1JLmRlZmluZUNvbXBvbmVudCh7bmFtZToiTmF2aWdhdG9yIixwcm9wczpmbixzdHlsZXM6cGksc2V0dXAobSx7c2xvdHM6Un0pe2xldCBVPXNuKG0pO3JldHVybigpPT5JLmNyZWF0ZVZOb2RlKCJ2aWV3IixJLm1lcmdlUHJvcHMoX24obSkse29uQ2xpY2s6VX0pLFtSLmRlZmF1bHQmJlIuZGVmYXVsdCgpXSl9fSk7ZnVuY3Rpb24gYXIobSl7cmV0dXJuIFN5bWJvbChtKX1mdW5jdGlvbiBTcigpe2xldCBtO3RyeXttPUkuZ2V0Q3VycmVudEluc3RhbmNlKCkucm9vdC5wcm94eS4kcGFnZS5pZH1jYXRjaChSKXtsZXQgVT1kLndlYnZpZXcuY3VycmVudFdlYnZpZXcoKS5pZDttPWlzTmFOKE51bWJlcihVKSk/VTpOdW1iZXIoVSl9cmV0dXJuIG19bGV0IENuLHdyLENyO2Z1bmN0aW9uIG1pKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmdHlwZW9mIGRvY3VtZW50PT0ib2JqZWN0Ij8id2VidmlldyI6InY4In1mdW5jdGlvbiByaSgpe3JldHVybiBDbi53ZWJ2aWV3LmN1cnJlbnRXZWJ2aWV3KCkuaWR9bGV0IFZlLG90LGJ0PXt9O2Z1bmN0aW9uIHRuKG0pe2xldCBSPW0uZGF0YSYmbS5kYXRhLl9fbWVzc2FnZTtpZighUnx8IVIuX19wYWdlKXJldHVybjtsZXQgVT1SLl9fcGFnZSwkPWJ0W1VdOyQmJiQoUiksUi5rZWVwfHxkZWxldGUgYnRbVV19ZnVuY3Rpb24gU24obSxSKXttaSgpPT09InY4Ij9Dcj8oVmUmJlZlLmNsb3NlKCksVmU9bmV3IENyKHJpKCkpLFZlLm9ubWVzc2FnZT10bik6b3R8fChvdD13ci5yZXF1aXJlTW9kdWxlKCJnbG9iYWxFdmVudCIpLG90LmFkZEV2ZW50TGlzdGVuZXIoInBsdXNNZXNzYWdlIix0bikpOndpbmRvdy5fX3BsdXNNZXNzYWdlPXRuLGJ0W21dPVJ9Y2xhc3MgSnR7Y29uc3RydWN0b3IoUil7dGhpcy53ZWJ2aWV3PVJ9c2VuZE1lc3NhZ2UoUil7bGV0IFU9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh7X19tZXNzYWdlOntkYXRhOlJ9fSkpLCQ9dGhpcy53ZWJ2aWV3LmlkO0NyP25ldyBDcigkKS5wb3N0TWVzc2FnZShVKTpDbi53ZWJ2aWV3LnBvc3RNZXNzYWdlVG9VbmlOVmlldyYmQ24ud2Vidmlldy5wb3N0TWVzc2FnZVRvVW5pTlZpZXcoVSwkKX1jbG9zZSgpe3RoaXMud2Vidmlldy5jbG9zZSgpfX1mdW5jdGlvbiBycih7Y29udGV4dDptPXt9LHVybDpSLGRhdGE6VT17fSxzdHlsZTokPXt9LG9uTWVzc2FnZTpYLG9uQ2xvc2U6Sn0pe2xldCB0ZT1lbi5kYXJrbW9kZTtDbj1tLnBsdXN8fGQsd3I9bS53ZWV4fHwodHlwZW9mIFM9PSJvYmplY3QiP1M6bnVsbCksQ3I9bS5Ccm9hZGNhc3RDaGFubmVsfHwodHlwZW9mIEU9PSJvYmplY3QiP0U6bnVsbCk7bGV0IGNlPXthdXRvQmFja0J1dHRvbjohMCx0aXRsZVNpemU6IjE3cHgifSxwZT1gcGFnZSR7RGF0ZS5ub3coKX1gOyQ9U3QuZXh0ZW5kKHt9LCQpLCQudGl0bGVOVmlldyE9PSExJiYkLnRpdGxlTlZpZXchPT0ibm9uZSImJigkLnRpdGxlTlZpZXc9U3QuZXh0ZW5kKGNlLCQudGl0bGVOVmlldykpO2xldCBQZT17dG9wOjAsYm90dG9tOjAsdXNpbmdDb21wb25lbnRzOnt9LHBvcEdlc3R1cmU6ImNsb3NlIixzY3JvbGxJbmRpY2F0b3I6Im5vbmUiLGFuaW1hdGlvblR5cGU6InBvcC1pbiIsYW5pbWF0aW9uRHVyYXRpb246MjAwLHVuaU5WaWV3OntwYXRoOmAvJHtSfS5qc2AsZGVmYXVsdEZvbnRTaXplOjE2LHZpZXdwb3J0OkNuLnNjcmVlbi5yZXNvbHV0aW9uV2lkdGh9fTskPVN0LmV4dGVuZChQZSwkKTtsZXQgZmU9Q24ud2Vidmlldy5jcmVhdGUoIiIscGUsJCx7ZXh0cmFzOntmcm9tOnJpKCkscnVudGltZTptaSgpLGRhdGE6U3QuZXh0ZW5kKHt9LFUse2Rhcmttb2RlOnRlfSksdXNlR2xvYmFsRXZlbnQ6IUNyfX0pO3JldHVybiBmZS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsSiksU24ocGUsd2U9PntTdC5pc0Z1bmN0aW9uKFgpJiZYKHdlLmRhdGEpLHdlLmtlZXB8fGZlLmNsb3NlKCJhdXRvIil9KSxmZS5zaG93KCQuYW5pbWF0aW9uVHlwZSwkLmFuaW1hdGlvbkR1cmF0aW9uKSxuZXcgSnQoZmUpfWxldCBBcj17Zm9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sT3I9YXIoInVsIik7ZnVuY3Rpb24gT24oKXtsZXQgbT1bXTtyZXR1cm4gSS5wcm92aWRlKE9yLHthZGRIYW5kbGVyKFIpe20ucHVzaChSKX0scmVtb3ZlSGFuZGxlcihSKXttLnNwbGljZShtLmluZGV4T2YoUiksMSl9fSksbX1sZXQgZG49SS5kZWZpbmVDb21wb25lbnQoe25hbWU6IkxhYmVsIixwcm9wczpBcixzdHlsZXM6W10sc2V0dXAobSx7c2xvdHM6Un0pe2xldCBVPVNyKCksJD1PbigpLFg9Sj0+e20uZm9yP0IuZW1pdChgdW5pLWxhYmVsLWNsaWNrLSR7VX0tJHttLmZvcn1gLEosITApOiQubGVuZ3RoJiYkWzBdKEosITApfTtyZXR1cm4oKT0+SS5jcmVhdGVWTm9kZSgidmlldyIse29uQ2xpY2s6WH0sW1IuZGVmYXVsdCYmUi5kZWZhdWx0KCldKX19KTtmdW5jdGlvbiBUcihtLFIpe19pKG0uaWQsUiksSS53YXRjaCgoKT0+bS5pZCwoVSwkKT0+e0NvKCQsUiwhMCksX2koVSxSLCEwKX0pLEkub25Vbm1vdW50ZWQoKCk9PntDbyhtLmlkLFIpfSl9ZnVuY3Rpb24gX2kobSxSLFUpe2xldCAkPVNyKCk7VSYmIW18fCFTdC5pc1BsYWluT2JqZWN0KFIpfHxPYmplY3Qua2V5cyhSKS5mb3JFYWNoKFg9PntVP1guaW5kZXhPZigiQCIpIT09MCYmWC5pbmRleE9mKCJ1bmktIikhPT0wJiZCLm9uKGB1bmktJHtYfS0keyR9LSR7bX1gLFJbWF0pOlguaW5kZXhPZigidW5pLSIpPT09MD9CLm9uKFgsUltYXSk6bSYmQi5vbihgdW5pLSR7WH0tJHskfS0ke219YCxSW1hdKX0pfWZ1bmN0aW9uIENvKG0sUixVKXtsZXQgJD1TcigpO1UmJiFtfHwhU3QuaXNQbGFpbk9iamVjdChSKXx8T2JqZWN0LmtleXMoUikuZm9yRWFjaChYPT57VT9YLmluZGV4T2YoIkAiKSE9PTAmJlguaW5kZXhPZigidW5pLSIpIT09MCYmQi5vZmYoYHVuaS0ke1h9LSR7JH0tJHttfWAsUltYXSk6WC5pbmRleE9mKCJ1bmktIik9PT0wP0Iub2ZmKFgsUltYXSk6bSYmQi5vZmYoYHVuaS0ke1h9LSR7JH0tJHttfWAsUltYXSl9KX1mdW5jdGlvbiBjYShtKXtyZXR1cm4gT2JqZWN0LmtleXMobSkubWFwKFI9PltSLG1bUl1dKX1sZXQgRmk9WyJjbGFzcyIsInN0eWxlIl0sWW89L15vbltBLVpdKy8sQW89KG09e30pPT57bGV0e2V4Y2x1ZGVMaXN0ZW5lcnM6Uj0hMSxleGNsdWRlS2V5czpVPVtdfT1tLCQ9SS5nZXRDdXJyZW50SW5zdGFuY2UoKSxYPUkuc2hhbGxvd1JlZih7fSksSj1JLnNoYWxsb3dSZWYoe30pLHRlPUkuc2hhbGxvd1JlZih7fSksY2U9VS5jb25jYXQoRmkpO3JldHVybiAkLmF0dHJzPUkucmVhY3RpdmUoJC5hdHRycyksSS53YXRjaEVmZmVjdCgoKT0+e2xldCBwZT1jYSgkLmF0dHJzKS5yZWR1Y2UoKFBlLFtmZSx3ZV0pPT4oY2UuaW5jbHVkZXMoZmUpP1BlLmV4Y2x1ZGVbZmVdPXdlOllvLnRlc3QoZmUpPyhSfHwoUGUuYXR0cnNbZmVdPXdlKSxQZS5saXN0ZW5lcnNbZmVdPXdlKTpQZS5hdHRyc1tmZV09d2UsUGUpLHtleGNsdWRlOnt9LGF0dHJzOnt9LGxpc3RlbmVyczp7fX0pO1gudmFsdWU9cGUuYXR0cnMsSi52YWx1ZT1wZS5saXN0ZW5lcnMsdGUudmFsdWU9cGUuZXhjbHVkZX0pLHskYXR0cnM6WCwkbGlzdGVuZXJzOkosJGV4Y2x1ZGVBdHRyczp0ZX19LEppPXtpZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0saG92ZXJDbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiYnV0dG9uLWhvdmVyIn0saG92ZXJTdGFydFRpbWU6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MjB9LGhvdmVyU3RheVRpbWU6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6NzB9LGhvdmVyU3RvcFByb3BhZ2F0aW9uOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZGlzYWJsZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxmb3JtVHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sb3BlblR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGxvYWRpbmc6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxwbGFpbjp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9fSxNcj1hcigidWYiKSx1YT1be3ViOnsiIjp7ZmxleERpcmVjdGlvbjoicm93IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLHBvc2l0aW9uOiJyZWxhdGl2ZSIscGFkZGluZ0xlZnQ6IjUiLHBhZGRpbmdSaWdodDoiNSIsb3ZlcmZsb3c6ImhpZGRlbiIsY29sb3I6IiMwMDAwMDAiLGJhY2tncm91bmRDb2xvcjoiI2Y4ZjhmOCIsYm9yZGVyUmFkaXVzOiI1Iixib3JkZXJTdHlsZToic29saWQiLGJvcmRlcldpZHRoOiIxIixib3JkZXJDb2xvcjoiI2RiZGJkYiJ9fSwidWItdCI6eyIiOntjb2xvcjoiIzAwMDAwMCIsZm9udFNpemU6IjE4Iix0ZXh0RGVjb3JhdGlvbjoibm9uZSIsbGluZUhlaWdodDoiNDYifX0sInViLWQiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjZjhmOGY4In19LCJ1Yi1wIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiIzAwN2FmZiIsYm9yZGVyQ29sb3I6IiMwMDYyY2MifX0sInViLXciOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjZTY0MzQwIixib3JkZXJDb2xvcjoiI2I4MzYzMyJ9fSwidWItZC10Ijp7IiI6e2NvbG9yOiIjMDAwMDAwIn19LCJ1Yi1wLXQiOnsiIjp7Y29sb3I6IiNmZmZmZmYifX0sInViLXctdCI6eyIiOntjb2xvcjoiI2ZmZmZmZiJ9fSwidWItZC1kIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2Y3ZjdmNyJ9fSwidWItcC1kIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiIzYzYWNmYyIsYm9yZGVyQ29sb3I6IiM0ZjhhY2EifX0sInViLXctZCI6eyIiOntiYWNrZ3JvdW5kQ29sb3I6IiNlYzhiODkiLGJvcmRlckNvbG9yOiIjYmQ2ZjZlIn19LCJ1Yi1kLXQtZCI6eyIiOntjb2xvcjoiI2NjY2NjYyJ9fSwidWItcC10LWQiOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSJ9fSwidWItdy10LWQiOnsiIjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSJ9fSwidWItZC1wbGFpbiI6eyIiOntib3JkZXJDb2xvcjoiIzM1MzUzNSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1wLXBsYWluIjp7IiI6e2JvcmRlckNvbG9yOiIjMDA3YWZmIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXctcGxhaW4iOnsiIjp7Ym9yZGVyQ29sb3I6IiNlNjQzNDAiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItZC10LXBsYWluIjp7IiI6e2NvbG9yOiIjMzUzNTM1In19LCJ1Yi1wLXQtcGxhaW4iOnsiIjp7Y29sb3I6IiMwMDdhZmYifX0sInViLXctdC1wbGFpbiI6eyIiOntjb2xvcjoiI2U2NDM0MCJ9fSwidWItZC1kLXBsYWluIjp7IiI6e2JvcmRlckNvbG9yOiIjYzZjNmM2IixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXAtZC1wbGFpbiI6eyIiOntib3JkZXJDb2xvcjoiI2M2YzZjNiIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi13LWQtcGxhaW4iOnsiIjp7Ym9yZGVyQ29sb3I6IiNjNmM2YzYiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItZC10LWQtcGxhaW4iOnsiIjp7Y29sb3I6InJnYmEoMCwwLDAsMC4yKSJ9fSwidWItcC10LWQtcGxhaW4iOnsiIjp7Y29sb3I6InJnYmEoMCwwLDAsMC4yKSJ9fSwidWItdy10LWQtcGxhaW4iOnsiIjp7Y29sb3I6InJnYmEoMCwwLDAsMC4yKSJ9fSwidWItbWluaSI6eyIiOntsaW5lSGVpZ2h0OiIzMCIsZm9udFNpemU6IjEzIixwYWRkaW5nVG9wOjAscGFkZGluZ1JpZ2h0OiIxNy41IixwYWRkaW5nQm90dG9tOjAscGFkZGluZ0xlZnQ6IjE3LjUifX0sInViLWxvYWRpbmciOnsiIjp7d2lkdGg6IjE4IixoZWlnaHQ6IjE4IixtYXJnaW5SaWdodDoiMTAifX0sInViLWQtbG9hZGluZyI6eyIiOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXAtbG9hZGluZyI6eyIiOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLXctbG9hZGluZyI6eyIiOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkifX0sInViLWQtbG9hZGluZy1wbGFpbiI6eyIiOntjb2xvcjoiIzM1MzUzNSJ9fSwidWItcC1sb2FkaW5nLXBsYWluIjp7IiI6e2NvbG9yOiIjMDA3YWZmIixiYWNrZ3JvdW5kQ29sb3I6IiMwMDYyY2MifX0sInViLXctbG9hZGluZy1wbGFpbiI6eyIiOntjb2xvcjoiI2U2NDM0MCIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIn19LCJ1Yi1kLWhvdmVyIjp7IiI6e29wYWNpdHk6LjgsYmFja2dyb3VuZENvbG9yOiIjZGVkZWRlIn19LCJ1Yi1wLWhvdmVyIjp7IiI6e29wYWNpdHk6LjgsYmFja2dyb3VuZENvbG9yOiIjMDA2MmNjIn19LCJ1Yi13LWhvdmVyIjp7IiI6e29wYWNpdHk6LjgsYmFja2dyb3VuZENvbG9yOiIjY2UzYzM5In19LCJ1Yi1kLXQtaG92ZXIiOnsiIjp7Y29sb3I6InJnYmEoMCwwLDAsMC42KSJ9fSwidWItcC10LWhvdmVyIjp7IiI6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikifX0sInViLXctdC1ob3ZlciI6eyIiOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIn19LCJ1Yi1kLWhvdmVyLXBsYWluIjp7IiI6e2NvbG9yOiJyZ2JhKDUzLDUzLDUzLDAuNikiLGJvcmRlckNvbG9yOiJyZ2JhKDUzLDUzLDUzLDAuNikiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItcC1ob3Zlci1wbGFpbiI6eyIiOntjb2xvcjoicmdiYSgyNiwxNzMsMjUsMC42KSIsYm9yZGVyQ29sb3I6InJnYmEoMCwxMjIsMjU1LDAuNikiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fSwidWItdy1ob3Zlci1wbGFpbiI6eyIiOntjb2xvcjoicmdiYSgyMzAsNjcsNjQsMC42KSIsYm9yZGVyQ29sb3I6InJnYmEoMjMwLDY3LDY0LDAuNikiLGJhY2tncm91bmRDb2xvcjoicmdiYSgwLDAsMCwwKSJ9fX1dLE9vPXtkZWZhdWx0OiJkIixwcmltYXJ5OiJwIix3YXJuOiJ3In0sVG89SS5kZWZpbmVDb21wb25lbnQoe2luaGVyaXRBdHRyczohMSxuYW1lOiJCdXR0b24iLHByb3BzOlN0LmV4dGVuZChKaSx7dHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZGVmYXVsdCJ9LHNpemU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImRlZmF1bHQifX0pLHN0eWxlczp1YSxzZXR1cChtLHtzbG90czpSLGF0dHJzOlV9KXtsZXR7JGF0dHJzOiQsJGV4Y2x1ZGVBdHRyczpYLCRsaXN0ZW5lcnM6Sn09QW8oe2V4Y2x1ZGVMaXN0ZW5lcnM6ITB9KSx0ZT1tLnR5cGUsY2U9SS5yZWYobnVsbCkscGU9SS5pbmplY3QoTXIsITEpLFBlPShFdCxqZSk9PntsZXQgQnQ9Si52YWx1ZS5vbkNsaWNrfHwoKCk9Pnt9KTtpZihtLmRpc2FibGVkKXJldHVybjtCdChFdCk7bGV0IGNuPW0uZm9ybVR5cGU7aWYoY24pe2lmKCFwZSlyZXR1cm47Y249PT0ic3VibWl0Ij9wZS5zdWJtaXQoRXQpOmNuPT09InJlc2V0IiYmcGUucmVzZXQoRXQpfX0sZmU9RXQ9PntsZXQgamU9InViLSIrT29bdGVdK0V0O3JldHVybiBtLmRpc2FibGVkJiYoamUrPSItZCIpLG0ucGxhaW4mJihqZSs9Ii1wbGFpbiIpLG0uc2l6ZT09PSJtaW5pIiYmRXQ9PT0iLXQiJiYoamUrPSIgdWItbWluaSIpLGplfSx3ZT1FdD0+e2lmKG0uZGlzYWJsZWQpcmV0dXJuIiI7bGV0IGplPSJ1Yi0iK09vW3RlXStFdCsiLWhvdmVyIjtyZXR1cm4gbS5wbGFpbiYmKGplKz0iLXBsYWluIiksamV9LGN0PUkuaW5qZWN0KE9yLCExKTtjdCYmKGN0LmFkZEhhbmRsZXIoUGUpLEkub25CZWZvcmVVbm1vdW50KCgpPT57Y3QucmVtb3ZlSGFuZGxlcihQZSl9KSksVHIobSx7ImxhYmVsLWNsaWNrIjpQZX0pO2xldCBndD1JLmNvbXB1dGVkKCgpPT57bGV0IEV0PXt9O2ZvcihsZXQgamUgaW4gSi52YWx1ZSl7bGV0IEJ0PUoudmFsdWVbamVdO2plIT09Im9uQ2xpY2siJiYoRXRbamVdPUJ0KX1yZXR1cm4gRXR9KSwkdD0oKT0+e2lmKCFSLmRlZmF1bHQpcmV0dXJuW107bGV0IEV0PVIuZGVmYXVsdCgpO3JldHVybiBFdC5sZW5ndGg9PT0xJiZFdFswXS50eXBlPT09SS5UZXh0P1tXbihFdFswXS5jaGlsZHJlbix7Y2xhc3M6InViLXQgIitmZSgiLXQiKX0pXTpFdH07cmV0dXJuKCk9PntsZXQgRXQ9U3QuZXh0ZW5kKHt9LF9uKG0pLHtob3ZlckNsYXNzOndlKCIiKX0sJC52YWx1ZSxYLnZhbHVlLGd0LnZhbHVlKTtyZXR1cm4gSS5jcmVhdGVWTm9kZSgidmlldyIsSS5tZXJnZVByb3BzKHtyZWY6Y2UsY2xhc3M6WyJ1YiIsZmUoIiIpXSxvbkNsaWNrOlBlfSxFdCksW20ubG9hZGluZz9JLmNyZWF0ZVZOb2RlKCJsb2FkaW5nLWluZGljYXRvciIsSS5tZXJnZVByb3BzKHtjbGFzczpbInViLWxvYWRpbmciLGB1Yi0ke09vW3RlXX0tbG9hZGluZ2BdfSx7YXJyb3c6ImZhbHNlIixhbmltYXRpbmc6InRydWUifSksbnVsbCk6bnVsbCwuLi4kdCgpXSl9fX0pLFppPXtzY2FsZUFyZWE6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfX07ZnVuY3Rpb24gaWkobSl7bGV0IFI9W107cmV0dXJuIFN0LmlzQXJyYXkobSkmJm0uZm9yRWFjaChVPT57SS5pc1ZOb2RlKFUpP1UudHlwZT09PUkuRnJhZ21lbnQ/Ui5wdXNoKC4uLmlpKFUuY2hpbGRyZW4pKTpSLnB1c2goVSk6U3QuaXNBcnJheShVKSYmUi5wdXNoKC4uLmlpKFUpKX0pLFJ9ZnVuY3Rpb24gcW8obSl7bGV0IFI9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24oJCl7cmV0dXJuIFJbJF18fChSWyRdPW0oJCkpfX1sZXQgdW89cW8oZnVuY3Rpb24obSl7bGV0IFI9e30sVT0vOyg/IVteKF0qXCkpL2csJD0vOiguKykvO3JldHVybiBtLnNwbGl0KFUpLmZvckVhY2goZnVuY3Rpb24oWCl7aWYoWCl7bGV0IEo9WC5zcGxpdCgkKTtKLmxlbmd0aD4xJiYoUltKWzBdLnRyaW0oKV09SlsxXS50cmltKCkpfX0pLFJ9KSxObj1tPT5uZXcgUHJvbWlzZSgoUixVKT0+e2lmKCFtKXJldHVybiBSKHt3aWR0aDowLGhlaWdodDowLHRvcDowLGxlZnQ6MH0pO1MucmVxdWlyZU1vZHVsZSgiZG9tIikuZ2V0Q29tcG9uZW50UmVjdChtLCh7c2l6ZTpYfSk9PntSKFgpfSl9KSxocj1JLmRlZmluZUNvbXBvbmVudCh7bmFtZToiTW92YWJsZUFyZWEiLHByb3BzOlppLHN0eWxlczpbeyJ1bmktbW92YWJsZS1hcmVhIjp7IiI6e292ZXJmbG93OiJoaWRkZW4iLHdpZHRoOiIxMHB4IixoZWlnaHQ6IjEwcHgifX19XSxzZXR1cChtLHtzbG90czpSfSl7bGV0IFU9SS5yZWYoMCksJD1JLnJlZigwKSxYPUkucmVmKDApLEo9SS5yZWYoMCksdGU9SS5yZWYoITEpLGNlPUkucmVmKG51bGwpLHBlPVtdLFBlPW51bGwsZmU9amU9PntQZT1qZX0sd2U9KCk9Pk5uKGNlLnZhbHVlKS50aGVuKCh7d2lkdGg6amUsaGVpZ2h0OkJ0LHRvcDpjbixsZWZ0Old0fSk9PntVLnZhbHVlPWplLCQudmFsdWU9QnQsWC52YWx1ZT1jbixKLnZhbHVlPVd0fSksY3Q9KCk9Pnt3ZSgpLnRoZW4oKCk9PntwZS5mb3JFYWNoKGZ1bmN0aW9uKGplKXtqZS5zZXRQYXJlbnQoKX0pfSl9O0kub25Nb3VudGVkKCgpPT57ZygoKT0+e3RlLnZhbHVlPSEwLGN0KCl9LDIwMCl9KTtsZXQgZ3Q9e29uUGFuc3RhcnQoamUpe1BlJiZQZS50b3VjaHN0YXJ0KGplKX0sb25QYW5tb3ZlKGplKXtqZS5zdG9wUHJvcGFnYXRpb24oKSxQZSYmUGUudG91Y2htb3ZlKGplKX0sb25QYW5lbmQoamUpe1BlJiZQZS50b3VjaGVuZChqZSksUGU9bnVsbH19LCR0PWplPT57cGUucHVzaChqZSl9LEV0PWplPT57bGV0IEJ0PXBlLmluZGV4T2YoamUpO0J0Pj0wJiZwZS5zcGxpY2UoQnQsMSl9O3JldHVybiBJLnByb3ZpZGUoIl9pc01vdW50ZWQiLHRlKSxJLnByb3ZpZGUoInBhcmVudFNpemUiLHt3aWR0aDpVLGhlaWdodDokLHRvcDpYLGxlZnQ6Sn0pLEkucHJvdmlkZSgiYWRkTW92YWJsZVZpZXdDb250ZXh0IiwkdCksSS5wcm92aWRlKCJyZW1vdmVNb3ZhYmxlVmlld0NvbnRleHQiLEV0KSxJLnByb3ZpZGUoInNldFRvdWNoTW92YWJsZVZpZXdDb250ZXh0IixmZSksKCk9PntsZXQgamU9Ui5kZWZhdWx0JiZSLmRlZmF1bHQoKSxCdD1paShqZSk7cmV0dXJuIEkuY3JlYXRlVk5vZGUoInZpZXciLEkubWVyZ2VQcm9wcyh7cmVmOmNlLGNsYXNzOiJ1bmktbW92YWJsZS1hcmVhIn0sZ3QpLFtCdF0pfX19KTtmdW5jdGlvbiBmbyhtKXtsZXQgUj17fTtmdW5jdGlvbiBVKGZlLHdlKXtSW2ZlXSYmUltmZV0od2UpfWZ1bmN0aW9uICQoZmUsd2Upe1JbZmVdPWZ1bmN0aW9uKGN0KXtTdC5pc0Z1bmN0aW9uKHdlKSYmKGN0LnRvdWNoZXM9Y3QuY2hhbmdlZFRvdWNoZXMsd2UoY3QpPT09ITEmJmN0LnN0b3BQcm9wYWdhdGlvbigpKX19bGV0IFg9MCxKPTAsdGU9MCxjZT0wLHBlPWZ1bmN0aW9uKGZlLHdlLGN0LGd0KXtpZihtKHt0YXJnZXQ6ZmUudGFyZ2V0LGN1cnJlbnRUYXJnZXQ6ZmUuY3VycmVudFRhcmdldCxzdG9wUHJvcGFnYXRpb246ZmUuc3RvcFByb3BhZ2F0aW9uLmJpbmQoZmUpLHRvdWNoZXM6ZmUudG91Y2hlcyxjaGFuZ2VkVG91Y2hlczpmZS5jaGFuZ2VkVG91Y2hlcyxkZXRhaWw6e3N0YXRlOndlLHg6Y3QseTpndCxkeDpjdC1YLGR5Omd0LUosZGR4OmN0LXRlLGRkeTpndC1jZSx0aW1lU3RhbXA6ZmUudGltZVN0YW1wfHxEYXRlLm5vdygpfX0pPT09ITEpcmV0dXJuITF9LFBlPW51bGw7cmV0dXJuICQoInRvdWNoc3RhcnQiLGZ1bmN0aW9uKGZlKXtpZighUGUpcmV0dXJuIFBlPWZlLFg9dGU9ZmUudG91Y2hlc1swXS5wYWdlWCxKPWNlPWZlLnRvdWNoZXNbMF0ucGFnZVkscGUoZmUsInN0YXJ0IixYLEopfSksJCgidG91Y2htb3ZlIixmdW5jdGlvbihmZSl7aWYoUGUpe2xldCB3ZT1wZShmZSwibW92ZSIsZmUudG91Y2hlc1swXS5wYWdlWCxmZS50b3VjaGVzWzBdLnBhZ2VZKTtyZXR1cm4gdGU9ZmUudG91Y2hlc1swXS5wYWdlWCxjZT1mZS50b3VjaGVzWzBdLnBhZ2VZLHdlfX0pLCQoInRvdWNoZW5kIixmdW5jdGlvbihmZSl7aWYoUGUpcmV0dXJuIFBlPW51bGwscGUoZmUsImVuZCIsZmUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVgsZmUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVkpfSkse3RvdWNoc3RhcnQ6ZnVuY3Rpb24oZmUpe1UoInRvdWNoc3RhcnQiLGZlKX0sdG91Y2htb3ZlOmZ1bmN0aW9uKGZlKXtVKCJ0b3VjaG1vdmUiLGZlKX0sdG91Y2hlbmQ6ZnVuY3Rpb24oZmUpe1UoInRvdWNoZW5kIixmZSl9fX1mdW5jdGlvbiBHbihtLFIpe3JldHVybihVLCQpPT57bS52YWx1ZSYmUihVLFhpKFUsbS52YWx1ZSwkfHx7fSkpfX1mdW5jdGlvbiBYaShtLFIsVT17fSl7cmV0dXJuIFI9UWkoUikse3R5cGU6bSx0aW1lU3RhbXA6RGF0ZS5ub3coKSx0YXJnZXQ6UixjdXJyZW50VGFyZ2V0OlIsZGV0YWlsOlV9fWxldCBQbz1Qbi5jYWNoZVN0cmluZ0Z1bmN0aW9uKG09Pm0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCkrbS5zbGljZSgxKSk7ZnVuY3Rpb24gUWkobSl7bGV0e29mZnNldExlZnQ6UixvZmZzZXRUb3A6VX09bSwkPW0uYXR0cixYPXt9O3JldHVybiBPYmplY3Qua2V5cygkfHx7fSkuZm9yRWFjaChKPT57Si5pbmRleE9mKCJkYXRhIik9PT0wJiYoWFtQbyhKLnJlcGxhY2UoImRhdGEiLCIiKSldPSRbSl0pfSkse2lkOiQmJiQuaWR8fCIiLGRhdGFzZXQ6WCxvZmZzZXRMZWZ0OlJ8fDAsb2Zmc2V0VG9wOlV8fDB9fWZ1bmN0aW9uIGJpKG0sUixVKXtyZXR1cm4gbT5SLVUmJm08UitVfWZ1bmN0aW9uIEpuKG0sUil7cmV0dXJuIGJpKG0sMCxSKX1mdW5jdGlvbiBEcigpe31Eci5wcm90b3R5cGUueD1mdW5jdGlvbihtKXtyZXR1cm4gTWF0aC5zcXJ0KG0pfTtmdW5jdGlvbiBJbihtLFIpe3RoaXMuX209bSx0aGlzLl9mPTFlMypSLHRoaXMuX3N0YXJ0VGltZT0wLHRoaXMuX3Y9MH1Jbi5wcm90b3R5cGUuc2V0Vj1mdW5jdGlvbihtLFIpe2xldCBVPU1hdGgucG93KE1hdGgucG93KG0sMikrTWF0aC5wb3coUiwyKSwuNSk7dGhpcy5feF92PW0sdGhpcy5feV92PVIsdGhpcy5feF9hPS10aGlzLl9mKnRoaXMuX3hfdi9VLHRoaXMuX3lfYT0tdGhpcy5fZip0aGlzLl95X3YvVSx0aGlzLl90PU1hdGguYWJzKG0vdGhpcy5feF9hKXx8TWF0aC5hYnMoUi90aGlzLl95X2EpLHRoaXMuX2xhc3REdD1udWxsLHRoaXMuX3N0YXJ0VGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKX0sSW4ucHJvdG90eXBlLnNldFM9ZnVuY3Rpb24obSxSKXt0aGlzLl94X3M9bSx0aGlzLl95X3M9Un0sSW4ucHJvdG90eXBlLnM9ZnVuY3Rpb24obSl7bT09PXZvaWQgMCYmKG09KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzKSxtPnRoaXMuX3QmJihtPXRoaXMuX3QsdGhpcy5fbGFzdER0PW0pO2xldCBSPXRoaXMuX3hfdiptKy41KnRoaXMuX3hfYSpNYXRoLnBvdyhtLDIpK3RoaXMuX3hfcyxVPXRoaXMuX3lfdiptKy41KnRoaXMuX3lfYSpNYXRoLnBvdyhtLDIpK3RoaXMuX3lfcztyZXR1cm4odGhpcy5feF9hPjAmJlI8dGhpcy5fZW5kUG9zaXRpb25YfHx0aGlzLl94X2E8MCYmUj50aGlzLl9lbmRQb3NpdGlvblgpJiYoUj10aGlzLl9lbmRQb3NpdGlvblgpLCh0aGlzLl95X2E+MCYmVTx0aGlzLl9lbmRQb3NpdGlvbll8fHRoaXMuX3lfYTwwJiZVPnRoaXMuX2VuZFBvc2l0aW9uWSkmJihVPXRoaXMuX2VuZFBvc2l0aW9uWSkse3g6Uix5OlV9fSxJbi5wcm90b3R5cGUuZHM9ZnVuY3Rpb24obSl7cmV0dXJuIG09PT12b2lkIDAmJihtPShuZXcgRGF0ZSgpLmdldFRpbWUoKS10aGlzLl9zdGFydFRpbWUpLzFlMyksbT50aGlzLl90JiYobT10aGlzLl90KSx7ZHg6dGhpcy5feF92K3RoaXMuX3hfYSptLGR5OnRoaXMuX3lfdit0aGlzLl95X2EqbX19LEluLnByb3RvdHlwZS5kZWx0YT1mdW5jdGlvbigpe3JldHVybnt4Oi0xLjUqTWF0aC5wb3codGhpcy5feF92LDIpL3RoaXMuX3hfYXx8MCx5Oi0xLjUqTWF0aC5wb3codGhpcy5feV92LDIpL3RoaXMuX3lfYXx8MH19LEluLnByb3RvdHlwZS5kdD1mdW5jdGlvbigpe3JldHVybi10aGlzLl94X3YvdGhpcy5feF9hfSxJbi5wcm90b3R5cGUuZG9uZT1mdW5jdGlvbigpe2xldCBtPWJpKHRoaXMucygpLngsdGhpcy5fZW5kUG9zaXRpb25YKXx8YmkodGhpcy5zKCkueSx0aGlzLl9lbmRQb3NpdGlvblkpfHx0aGlzLl9sYXN0RHQ9PT10aGlzLl90O3JldHVybiB0aGlzLl9sYXN0RHQ9bnVsbCxtfSxJbi5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKG0sUil7dGhpcy5fZW5kUG9zaXRpb25YPW0sdGhpcy5fZW5kUG9zaXRpb25ZPVJ9LEluLnByb3RvdHlwZS5yZWNvbmZpZ3VyZT1mdW5jdGlvbihtLFIpe3RoaXMuX209bSx0aGlzLl9mPTFlMypSfTtmdW5jdGlvbiBVbihtLFIsVSl7dGhpcy5fbT1tLHRoaXMuX2s9Uix0aGlzLl9jPVUsdGhpcy5fc29sdXRpb249bnVsbCx0aGlzLl9lbmRQb3NpdGlvbj0wLHRoaXMuX3N0YXJ0VGltZT0wfVVuLnByb3RvdHlwZS5fc29sdmU9ZnVuY3Rpb24obSxSKXtsZXQgVT10aGlzLl9jLCQ9dGhpcy5fbSxYPXRoaXMuX2ssSj1VKlUtNCokKlg7aWYoSj09PTApe2xldCBmZT0tVS8oMiokKSx3ZT1tLGN0PVIvKGZlKm0pO3JldHVybnt4OmZ1bmN0aW9uKGd0KXtyZXR1cm4od2UrY3QqZ3QpKk1hdGgucG93KE1hdGguRSxmZSpndCl9LGR4OmZ1bmN0aW9uKGd0KXtsZXQgJHQ9TWF0aC5wb3coTWF0aC5FLGZlKmd0KTtyZXR1cm4gZmUqKHdlK2N0Kmd0KSokdCtjdCokdH19fWlmKEo+MCl7bGV0IGZlPSgtVS1NYXRoLnNxcnQoSikpLygyKiQpLHdlPSgtVStNYXRoLnNxcnQoSikpLygyKiQpLGN0PShSLWZlKm0pLyh3ZS1mZSksZ3Q9bS1jdDtyZXR1cm57eDpmdW5jdGlvbigkdCl7bGV0IEV0LGplO3JldHVybiAkdD09PXRoaXMuX3QmJihFdD10aGlzLl9wb3dFUjFULGplPXRoaXMuX3Bvd0VSMlQpLHRoaXMuX3Q9JHQsRXR8fChFdD10aGlzLl9wb3dFUjFUPU1hdGgucG93KE1hdGguRSxmZSokdCkpLGplfHwoamU9dGhpcy5fcG93RVIyVD1NYXRoLnBvdyhNYXRoLkUsd2UqJHQpKSxndCpFdCtjdCpqZX0sZHg6ZnVuY3Rpb24oJHQpe2xldCBFdCxqZTtyZXR1cm4gJHQ9PT10aGlzLl90JiYoRXQ9dGhpcy5fcG93RVIxVCxqZT10aGlzLl9wb3dFUjJUKSx0aGlzLl90PSR0LEV0fHwoRXQ9dGhpcy5fcG93RVIxVD1NYXRoLnBvdyhNYXRoLkUsZmUqJHQpKSxqZXx8KGplPXRoaXMuX3Bvd0VSMlQ9TWF0aC5wb3coTWF0aC5FLHdlKiR0KSksZ3QqZmUqRXQrY3Qqd2UqamV9fX1sZXQgdGU9TWF0aC5zcXJ0KDQqJCpYLVUqVSkvKDIqJCksY2U9LVUvMiokLHBlPW0sUGU9KFItY2UqbSkvdGU7cmV0dXJue3g6ZnVuY3Rpb24oZmUpe3JldHVybiBNYXRoLnBvdyhNYXRoLkUsY2UqZmUpKihwZSpNYXRoLmNvcyh0ZSpmZSkrUGUqTWF0aC5zaW4odGUqZmUpKX0sZHg6ZnVuY3Rpb24oZmUpe2xldCB3ZT1NYXRoLnBvdyhNYXRoLkUsY2UqZmUpLGN0PU1hdGguY29zKHRlKmZlKSxndD1NYXRoLnNpbih0ZSpmZSk7cmV0dXJuIHdlKihQZSp0ZSpjdC1wZSp0ZSpndCkrY2Uqd2UqKFBlKmd0K3BlKmN0KX19fSxVbi5wcm90b3R5cGUueD1mdW5jdGlvbihtKXtyZXR1cm4gbT09PXZvaWQgMCYmKG09KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzKSx0aGlzLl9zb2x1dGlvbj90aGlzLl9lbmRQb3NpdGlvbit0aGlzLl9zb2x1dGlvbi54KG0pOjB9LFVuLnByb3RvdHlwZS5keD1mdW5jdGlvbihtKXtyZXR1cm4gbT09PXZvaWQgMCYmKG09KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzKSx0aGlzLl9zb2x1dGlvbj90aGlzLl9zb2x1dGlvbi5keChtKTowfSxVbi5wcm90b3R5cGUuc2V0RW5kPWZ1bmN0aW9uKG0sUixVKXtpZihVfHwoVT1uZXcgRGF0ZSgpLmdldFRpbWUoKSksbSE9PXRoaXMuX2VuZFBvc2l0aW9ufHwhSm4oUiwuMSkpe1I9Unx8MDtsZXQgJD10aGlzLl9lbmRQb3NpdGlvbjt0aGlzLl9zb2x1dGlvbiYmKEpuKFIsLjEpJiYoUj10aGlzLl9zb2x1dGlvbi5keCgoVS10aGlzLl9zdGFydFRpbWUpLzFlMykpLCQ9dGhpcy5fc29sdXRpb24ueCgoVS10aGlzLl9zdGFydFRpbWUpLzFlMyksSm4oUiwuMSkmJihSPTApLEpuKCQsLjEpJiYoJD0wKSwkKz10aGlzLl9lbmRQb3NpdGlvbiksdGhpcy5fc29sdXRpb24mJkpuKCQtbSwuMSkmJkpuKFIsLjEpfHwodGhpcy5fZW5kUG9zaXRpb249bSx0aGlzLl9zb2x1dGlvbj10aGlzLl9zb2x2ZSgkLXRoaXMuX2VuZFBvc2l0aW9uLFIpLHRoaXMuX3N0YXJ0VGltZT1VKX19LFVuLnByb3RvdHlwZS5zbmFwPWZ1bmN0aW9uKG0pe3RoaXMuX3N0YXJ0VGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSx0aGlzLl9lbmRQb3NpdGlvbj1tLHRoaXMuX3NvbHV0aW9uPXt4OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LGR4OmZ1bmN0aW9uKCl7cmV0dXJuIDB9fX0sVW4ucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24obSl7cmV0dXJuIG18fChtPW5ldyBEYXRlKCkuZ2V0VGltZSgpKSxiaSh0aGlzLngoKSx0aGlzLl9lbmRQb3NpdGlvbiwuMSkmJkpuKHRoaXMuZHgoKSwuMSl9LFVuLnByb3RvdHlwZS5yZWNvbmZpZ3VyZT1mdW5jdGlvbihtLFIsVSl7dGhpcy5fbT1tLHRoaXMuX2s9Uix0aGlzLl9jPVUsdGhpcy5kb25lKCl8fCh0aGlzLl9zb2x1dGlvbj10aGlzLl9zb2x2ZSh0aGlzLngoKS10aGlzLl9lbmRQb3NpdGlvbix0aGlzLmR4KCkpLHRoaXMuX3N0YXJ0VGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSl9LFVuLnByb3RvdHlwZS5zcHJpbmdDb25zdGFudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSxVbi5wcm90b3R5cGUuZGFtcGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jfSxVbi5wcm90b3R5cGUuY29uZmlndXJhdGlvbj1mdW5jdGlvbigpe2Z1bmN0aW9uIG0oVSwkKXtVLnJlY29uZmlndXJlKDEsJCxVLmRhbXBpbmcoKSl9ZnVuY3Rpb24gUihVLCQpe1UucmVjb25maWd1cmUoMSxVLnNwcmluZ0NvbnN0YW50KCksJCl9cmV0dXJuW3tsYWJlbDoiU3ByaW5nIENvbnN0YW50IixyZWFkOnRoaXMuc3ByaW5nQ29uc3RhbnQuYmluZCh0aGlzKSx3cml0ZTptLmJpbmQodGhpcyx0aGlzKSxtaW46MTAwLG1heDoxZTN9LHtsYWJlbDoiRGFtcGluZyIscmVhZDp0aGlzLmRhbXBpbmcuYmluZCh0aGlzKSx3cml0ZTpSLmJpbmQodGhpcyx0aGlzKSxtaW46MSxtYXg6NTAwfV19O2Z1bmN0aW9uIHFyKG0sUixVKXt0aGlzLl9zcHJpbmdYPW5ldyBVbihtLFIsVSksdGhpcy5fc3ByaW5nWT1uZXcgVW4obSxSLFUpLHRoaXMuX3NwcmluZ1NjYWxlPW5ldyBVbihtLFIsVSksdGhpcy5fc3RhcnRUaW1lPTB9cXIucHJvdG90eXBlLnNldEVuZD1mdW5jdGlvbihtLFIsVSwkKXtsZXQgWD1uZXcgRGF0ZSgpLmdldFRpbWUoKTt0aGlzLl9zcHJpbmdYLnNldEVuZChtLCQsWCksdGhpcy5fc3ByaW5nWS5zZXRFbmQoUiwkLFgpLHRoaXMuX3NwcmluZ1NjYWxlLnNldEVuZChVLCQsWCksdGhpcy5fc3RhcnRUaW1lPVh9LHFyLnByb3RvdHlwZS54PWZ1bmN0aW9uKCl7bGV0IG09KG5ldyBEYXRlKCkuZ2V0VGltZSgpLXRoaXMuX3N0YXJ0VGltZSkvMWUzO3JldHVybnt4OnRoaXMuX3NwcmluZ1gueChtKSx5OnRoaXMuX3NwcmluZ1kueChtKSxzY2FsZTp0aGlzLl9zcHJpbmdTY2FsZS54KG0pfX0scXIucHJvdG90eXBlLmRvbmU9ZnVuY3Rpb24oKXtsZXQgbT1uZXcgRGF0ZSgpLmdldFRpbWUoKTtyZXR1cm4gdGhpcy5fc3ByaW5nWC5kb25lKG0pJiZ0aGlzLl9zcHJpbmdZLmRvbmUobSkmJnRoaXMuX3NwcmluZ1NjYWxlLmRvbmUobSl9LHFyLnByb3RvdHlwZS5yZWNvbmZpZ3VyZT1mdW5jdGlvbihtLFIsVSl7dGhpcy5fc3ByaW5nWC5yZWNvbmZpZ3VyZShtLFIsVSksdGhpcy5fc3ByaW5nWS5yZWNvbmZpZ3VyZShtLFIsVSksdGhpcy5fc3ByaW5nU2NhbGUucmVjb25maWd1cmUobSxSLFUpfTtsZXQgSW89e2RpcmVjdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibm9uZSJ9LGluZXJ0aWE6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxvdXRPZkJvdW5kczp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MH0seTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxkYW1waW5nOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjIwfSxmcmljdGlvbjp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoyfSxkaXNhYmxlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHNjYWxlOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sc2NhbGVNaW46e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6LjV9LHNjYWxlTWF4Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjEwfSxzY2FsZVZhbHVlOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjF9LGFuaW1hdGlvbjp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITB9fTtmdW5jdGlvbiBvaShtLFIpe3JldHVybisoKDFlMyptLTFlMypSKS8xZTMpLnRvRml4ZWQoMSl9ZnVuY3Rpb24gS3IobSxSLFUpe2xldCAkPXtpZDowLGNhbmNlbGxlZDohMX0sWD1mdW5jdGlvbih0ZSl7dGUmJnRlLmlkJiZGcih0ZS5pZCksdGUmJih0ZS5jYW5jZWxsZWQ9ITApfTtmdW5jdGlvbiBKKHRlLGNlLHBlLFBlKXtpZighdGV8fCF0ZS5jYW5jZWxsZWQpe3BlKGNlKTtsZXQgZmU9Y2UuZG9uZSgpO2ZlfHx0ZS5jYW5jZWxsZWR8fCh0ZS5pZD1lbyhKLmJpbmQobnVsbCx0ZSxjZSxwZSxQZSkpKSxmZSYmUGUmJlBlKGNlKX19cmV0dXJuIEooJCxtLFIsVSkse2NhbmNlbDpYLmJpbmQobnVsbCwkKSxtb2RlbDptfX1sZXQgc3I9ITE7ZnVuY3Rpb24gVmkobSl7c3J8fChzcj0hMCxlbyhmdW5jdGlvbigpe20oKSxzcj0hMX0pKX1mdW5jdGlvbiBlbyhtKXtyZXR1cm4gZyhtLDE2KX1mdW5jdGlvbiBGcihtKXtzKG0pfWxldCBFaT1TLnJlcXVpcmVNb2R1bGUoImFuaW1hdGlvbiIpLGdyPUkuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJNb3ZhYmxlVmlldyIscHJvcHM6SW8sZW1pdHM6WyJjaGFuZ2UiLCJzY2FsZSJdLHN0eWxlczpbeyJ1bmktbW92YWJsZS12aWV3Ijp7IiI6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiIwcHgiLGxlZnQ6IjBweCIsd2lkdGg6IjEwcHgiLGhlaWdodDoiMTBweCJ9fX1dLHNldHVwKG0se2VtaXQ6UixzbG90czpVfSl7bGV0ICQ9SS5yZWYobnVsbCksWD1HbigkLFIpLEo9SS5pbmplY3QoInNldFRvdWNoTW92YWJsZVZpZXdDb250ZXh0IiwoKT0+e30pLHRlPWduKG0sWCwkLEopO3JldHVybigpPT57bGV0IGNlPXtwcmV2ZW50R2VzdHVyZTohMH07cmV0dXJuIEkuY3JlYXRlVk5vZGUoInZpZXciLEkubWVyZ2VQcm9wcyh7cmVmOiQsb25Ub3VjaHN0YXJ0OnRlLGNsYXNzOiJ1bmktbW92YWJsZS12aWV3IixzdHlsZToidHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOyJ9LGNlKSxbVS5kZWZhdWx0JiZVLmRlZmF1bHQoKV0pfX19KTtmdW5jdGlvbiBnbihtLFIsVSwkKXtsZXQgWD1JLmluamVjdCgiX2lzTW91bnRlZCIsSS5yZWYoITEpKSxKPUkuaW5qZWN0KCJwYXJlbnRTaXplIix7d2lkdGg6SS5yZWYoMCksaGVpZ2h0OkkucmVmKDApLHRvcDpJLnJlZigwKSxsZWZ0OkkucmVmKDApfSksdGU9SS5pbmplY3QoImFkZE1vdmFibGVWaWV3Q29udGV4dCIsKCk9Pnt9KSxjZT1JLmluamVjdCgicmVtb3ZlTW92YWJsZVZpZXdDb250ZXh0IiwoKT0+e30pLHBlPXt0b3VjaHN0YXJ0OigpPT57fSx0b3VjaG1vdmU6KCk9Pnt9LHRvdWNoZW5kOigpPT57fX07ZnVuY3Rpb24gUGUoQmUpe3JldHVybiBOdW1iZXIoQmUpfHwwfWZ1bmN0aW9uIGZlKEJlKXtyZXR1cm4gQmU9TnVtYmVyKEJlKSxpc05hTihCZSk/MTpCZX1sZXQgd2U9SS5yZWYoUGUobS54KSksY3Q9SS5yZWYoUGUobS55KSksZ3Q9SS5yZWYoZmUoTnVtYmVyKG0uc2NhbGVWYWx1ZSkpKSwkdD1JLnJlZigwKSxFdD1JLnJlZigwKSxqZT1JLnJlZigwKSxCdD1JLnJlZigwKSxjbj1JLnJlZigwKSxXdD1JLnJlZigwKSxodD1udWxsLFp0PW51bGwsUm49e3g6MCx5OjB9LEd0PXt4OjAseTowfSxVdD0xLEZ0PTAscXQ9MCxYbz0hMSxjaSxlaSxHaT1udWxsLEdhPW51bGwsTW49e3RvcDowLGxlZnQ6MCx3aWR0aDowLGhlaWdodDowfSxEbj1uZXcgRHIsSXI9bmV3IERyLEZuPXtoaXN0b3J5WDpbMCwwXSxoaXN0b3J5WTpbMCwwXSxoaXN0b3J5VDpbMCwwXX0sYnI9SS5jb21wdXRlZCgoKT0+e2xldCBCZT1OdW1iZXIobS5kYW1waW5nKTtyZXR1cm4gaXNOYU4oQmUpPzIwOkJlfSksenI9SS5jb21wdXRlZCgoKT0+e2xldCBCZT1OdW1iZXIobS5mcmljdGlvbik7cmV0dXJuIGlzTmFOKEJlKXx8QmU8PTA/MjpCZX0pLFFvPUkuY29tcHV0ZWQoKCk9PntsZXQgQmU9TnVtYmVyKG0uc2NhbGVNaW4pO3JldHVybiBpc05hTihCZSk/LjU6QmV9KSxjcz1JLmNvbXB1dGVkKCgpPT57bGV0IEJlPU51bWJlcihtLnNjYWxlTWF4KTtyZXR1cm4gaXNOYU4oQmUpPzEwOkJlfSksbm49SS5jb21wdXRlZCgoKT0+bS5kaXJlY3Rpb249PT0iYWxsInx8bS5kaXJlY3Rpb249PT0iaG9yaXpvbnRhbCIpLHBuPUkuY29tcHV0ZWQoKCk9Pm0uZGlyZWN0aW9uPT09ImFsbCJ8fG0uZGlyZWN0aW9uPT09InZlcnRpY2FsIiksVm49bmV3IHFyKDEsOSpNYXRoLnBvdyhici52YWx1ZSwyKS80MCxici52YWx1ZSksem49bmV3IEluKDEsenIudmFsdWUpO0kud2F0Y2goKCk9Pm0ueCxCZT0+e3dlLnZhbHVlPVBlKEJlKX0pLEkud2F0Y2goKCk9Pm0ueSxCZT0+e2N0LnZhbHVlPVBlKEJlKX0pLEkud2F0Y2goKCk9Pm0uc2NhbGVWYWx1ZSxCZT0+e2d0LnZhbHVlPWZlKE51bWJlcihCZSkpfSksSS53YXRjaCh3ZSx1cyksSS53YXRjaChjdCxZYSksSS53YXRjaChndCxlYSksSS53YXRjaChRbyxOYSksSS53YXRjaChjcyxOYSk7ZnVuY3Rpb24gQ2koKXtadCYmWnQuY2FuY2VsKCksaHQmJmh0LmNhbmNlbCgpfWZ1bmN0aW9uIHVzKEJlKXtpZihubi52YWx1ZSl7aWYoQmUrR3QueD09PUZ0KXJldHVybiBGdDtodCYmaHQuY2FuY2VsKCksYm8oQmUrR3QueCxjdC52YWx1ZStHdC55LFV0KX1yZXR1cm4gQmV9ZnVuY3Rpb24gWWEoQmUpe2lmKHBuLnZhbHVlKXtpZihCZStHdC55PT09cXQpcmV0dXJuIHF0O2h0JiZodC5jYW5jZWwoKSxibyh3ZS52YWx1ZStHdC54LEJlK0d0LnksVXQpfXJldHVybiBCZX1mdW5jdGlvbiBOYSgpe2lmKCFtLnNjYWxlKXJldHVybiExO0xpKFV0LCEwKX1mdW5jdGlvbiBlYShCZSl7cmV0dXJuIG0uc2NhbGU/KEJlPV9vKEJlKSxMaShCZSwhMCksQmUpOiExfWZ1bmN0aW9uIHNvKCl7bS5kaXNhYmxlZHx8KENpKCksRm4uaGlzdG9yeVg9WzAsMF0sRm4uaGlzdG9yeVk9WzAsMF0sRm4uaGlzdG9yeVQ9WzAsMF0sbm4udmFsdWUmJihjaT1GdCkscG4udmFsdWUmJihlaT1xdCksR2k9bnVsbCxHYT1udWxsLFhvPSEwKX1mdW5jdGlvbiBxYShCZSl7aWYoIW0uZGlzYWJsZWQmJlhvKXtsZXQgUHQ9RnQsT3Q9cXQ7aWYoR2E9PT1udWxsJiYoR2E9TWF0aC5hYnMoQmUuZGV0YWlsLmR4L0JlLmRldGFpbC5keSk+MT8iaHRvdWNobW92ZSI6InZ0b3VjaG1vdmUiKSxubi52YWx1ZSYmKFB0PUJlLmRldGFpbC5keCtjaSxGbi5oaXN0b3J5WC5zaGlmdCgpLEZuLmhpc3RvcnlYLnB1c2goUHQpLCFwbi52YWx1ZSYmR2k9PT1udWxsJiYoR2k9TWF0aC5hYnMoQmUuZGV0YWlsLmR4L0JlLmRldGFpbC5keSk8MSkpLHBuLnZhbHVlJiYoT3Q9QmUuZGV0YWlsLmR5K2VpLEZuLmhpc3RvcnlZLnNoaWZ0KCksRm4uaGlzdG9yeVkucHVzaChPdCksIW5uLnZhbHVlJiZHaT09PW51bGwmJihHaT1NYXRoLmFicyhCZS5kZXRhaWwuZHkvQmUuZGV0YWlsLmR4KTwxKSksRm4uaGlzdG9yeVQuc2hpZnQoKSxGbi5oaXN0b3J5VC5wdXNoKEJlLmRldGFpbC50aW1lU3RhbXApLCFHaSl7bGV0IHluPSJ0b3VjaCI7UHQ8amUudmFsdWU/bS5vdXRPZkJvdW5kcz8oeW49InRvdWNoLW91dC1vZi1ib3VuZHMiLFB0PWplLnZhbHVlLURuLngoamUudmFsdWUtUHQpKTpQdD1qZS52YWx1ZTpQdD5jbi52YWx1ZSYmKG0ub3V0T2ZCb3VuZHM/KHluPSJ0b3VjaC1vdXQtb2YtYm91bmRzIixQdD1jbi52YWx1ZStEbi54KFB0LWNuLnZhbHVlKSk6UHQ9Y24udmFsdWUpLE90PEJ0LnZhbHVlP20ub3V0T2ZCb3VuZHM/KHluPSJ0b3VjaC1vdXQtb2YtYm91bmRzIixPdD1CdC52YWx1ZS1Jci54KEJ0LnZhbHVlLU90KSk6T3Q9QnQudmFsdWU6T3Q+V3QudmFsdWUmJihtLm91dE9mQm91bmRzPyh5bj0idG91Y2gtb3V0LW9mLWJvdW5kcyIsT3Q9V3QudmFsdWUrSXIueChPdC1XdC52YWx1ZSkpOk90PVd0LnZhbHVlKSxWaShmdW5jdGlvbigpe0ZvKFB0LE90LFV0LHluKX0pfX19ZnVuY3Rpb24gZnMoKXtpZighbS5kaXNhYmxlZCYmWG8mJihYbz0hMSwhR2kmJiFkcygib3V0LW9mLWJvdW5kcyIpJiZtLmluZXJ0aWEpKXtsZXQgQmU9MWUzKihGbi5oaXN0b3J5WFsxXS1Gbi5oaXN0b3J5WFswXSkvKEZuLmhpc3RvcnlUWzFdLUZuLmhpc3RvcnlUWzBdKSxQdD0xZTMqKEZuLmhpc3RvcnlZWzFdLUZuLmhpc3RvcnlZWzBdKS8oRm4uaGlzdG9yeVRbMV0tRm4uaGlzdG9yeVRbMF0pO3puLnNldFYoQmUsUHQpLHpuLnNldFMoRnQscXQpO2xldCBPdD16bi5kZWx0YSgpLngseW49em4uZGVsdGEoKS55LEVyPU90K0Z0LEFpPXluK3F0O0VyPGplLnZhbHVlPyhFcj1qZS52YWx1ZSxBaT1xdCsoamUudmFsdWUtRnQpKnluL090KTpFcj5jbi52YWx1ZSYmKEVyPWNuLnZhbHVlLEFpPXF0Kyhjbi52YWx1ZS1GdCkqeW4vT3QpLEFpPEJ0LnZhbHVlPyhBaT1CdC52YWx1ZSxFcj1GdCsoQnQudmFsdWUtcXQpKk90L3luKTpBaT5XdC52YWx1ZSYmKEFpPVd0LnZhbHVlLEVyPUZ0KyhXdC52YWx1ZS1xdCkqT3QveW4pLHpuLnNldEVuZChFcixBaSksWnQ9S3Ioem4sZnVuY3Rpb24oKXtsZXQgWWk9em4ucygpLEVvPVlpLngsa2E9WWkueTtGbyhFbyxrYSxVdCwiZnJpY3Rpb24iKX0sZnVuY3Rpb24oKXtadC5jYW5jZWwoKX0pfX1mdW5jdGlvbiBXcihCZSxQdCl7bGV0IE90PSExO3JldHVybiBCZT5jbi52YWx1ZT8oQmU9Y24udmFsdWUsT3Q9ITApOkJlPGplLnZhbHVlJiYoQmU9amUudmFsdWUsT3Q9ITApLFB0Pld0LnZhbHVlPyhQdD1XdC52YWx1ZSxPdD0hMCk6UHQ8QnQudmFsdWUmJihQdD1CdC52YWx1ZSxPdD0hMCkse3g6QmUseTpQdCxvdXRPZkJvdW5kczpPdH19ZnVuY3Rpb24gS2EoKXtSbi54PU1uLmxlZnQtSi5sZWZ0LnZhbHVlLFJuLnk9TW4udG9wLUoudG9wLnZhbHVlfWZ1bmN0aW9uIEphKEJlKXtCZT1CZXx8VXQsQmU9X28oQmUpLEV0LnZhbHVlPU1uLmhlaWdodC9VdCwkdC52YWx1ZT1Nbi53aWR0aC9VdDtsZXQgUHQ9RXQudmFsdWUqQmUsT3Q9JHQudmFsdWUqQmU7R3QueD0oT3QtJHQudmFsdWUpLzIsR3QueT0oUHQtRXQudmFsdWUpLzJ9ZnVuY3Rpb24gRG8oKXtsZXQgQmU9MC1Sbi54K0d0LngsUHQ9Si53aWR0aC52YWx1ZS0kdC52YWx1ZS1Sbi54LUd0Lng7amUudmFsdWU9TWF0aC5taW4oQmUsUHQpLGNuLnZhbHVlPU1hdGgubWF4KEJlLFB0KTtsZXQgT3Q9MC1Sbi55K0d0LnkseW49Si5oZWlnaHQudmFsdWUtRXQudmFsdWUtUm4ueS1HdC55O0J0LnZhbHVlPU1hdGgubWluKE90LHluKSxXdC52YWx1ZT1NYXRoLm1heChPdCx5bil9ZnVuY3Rpb24gTGkoQmUsUHQpe2lmKG0uc2NhbGUpe0JlPV9vKEJlKSxKYShCZSksRG8oKTtsZXQgT3Q9V3IoRnQscXQpLHluPU90LngsRXI9T3QueTtQdD9ibyh5bixFcixCZSwiIiwhMCwhMCk6VmkoZnVuY3Rpb24oKXtGbyh5bixFcixCZSwiIiwhMCwhMCl9KX19ZnVuY3Rpb24gX28oQmUpe3JldHVybiBCZT1NYXRoLm1heCguNSxRby52YWx1ZSxCZSksQmU9TWF0aC5taW4oMTAsY3MudmFsdWUsQmUpLEJlfWZ1bmN0aW9uIGJvKEJlLFB0LE90LHluLEVyLEFpKXtDaSgpLG5uLnZhbHVlfHwoQmU9RnQpLHBuLnZhbHVlfHwoUHQ9cXQpLG0uc2NhbGV8fChPdD1VdCk7bGV0IFlpPVdyKEJlLFB0KTtpZihCZT1ZaS54LFB0PVlpLnksIW0uYW5pbWF0aW9uKXtGbyhCZSxQdCxPdCx5bixFcixBaSk7cmV0dXJufVZuLl9zcHJpbmdYLl9zb2x1dGlvbj1udWxsLFZuLl9zcHJpbmdZLl9zb2x1dGlvbj1udWxsLFZuLl9zcHJpbmdTY2FsZS5fc29sdXRpb249bnVsbCxWbi5fc3ByaW5nWC5fZW5kUG9zaXRpb249RnQsVm4uX3NwcmluZ1kuX2VuZFBvc2l0aW9uPXF0LFZuLl9zcHJpbmdTY2FsZS5fZW5kUG9zaXRpb249VXQsVm4uc2V0RW5kKEJlLFB0LE90LDEpLGh0PUtyKFZuLGZ1bmN0aW9uKCl7bGV0IEVvPVZuLngoKSxrYT1Fby54LHRhPUVvLnksZ3M9RW8uc2NhbGU7Rm8oa2EsdGEsZ3MseW4sRXIsQWkpfSxmdW5jdGlvbigpe2h0LmNhbmNlbCgpfSl9ZnVuY3Rpb24gZHMoQmUpe2xldCBQdD1XcihGdCxxdCksT3Q9UHQueCx5bj1QdC55LEVyPVB0Lm91dE9mQm91bmRzO3JldHVybiBFciYmYm8oT3QseW4sVXQsQmUpLEVyfWZ1bmN0aW9uIEZvKEJlLFB0LE90LHluPSIiLEVyLEFpKXtCZSE9PW51bGwmJkJlLnRvU3RyaW5nKCkhPT0iTmFOIiYmdHlwZW9mIEJlPT0ibnVtYmVyInx8KEJlPUZ0fHwwKSxQdCE9PW51bGwmJlB0LnRvU3RyaW5nKCkhPT0iTmFOIiYmdHlwZW9mIFB0PT0ibnVtYmVyInx8KFB0PXF0fHwwKSxCZT1OdW1iZXIoQmUudG9GaXhlZCgxKSksUHQ9TnVtYmVyKFB0LnRvRml4ZWQoMSkpLE90PU51bWJlcihPdC50b0ZpeGVkKDEpKSxGdD09PUJlJiZxdD09PVB0fHxFcnx8UigiY2hhbmdlIix7eDpvaShCZSxHdC54KSx5Om9pKFB0LEd0LnkpLHNvdXJjZTp5bn0pLG0uc2NhbGV8fChPdD1VdCksT3Q9X28oT3QpLE90PStPdC50b0ZpeGVkKDMpLEFpJiZPdCE9PVV0JiZSKCJzY2FsZSIse3g6QmUseTpQdCxzY2FsZTpPdH0pO2xldCBZaT1gdHJhbnNsYXRlKCR7QmV9cHgsICR7UHR9cHgpIHNjYWxlKCR7T3R9KWA7RWkudHJhbnNpdGlvbihVLnZhbHVlLHtzdHlsZXM6e3RyYW5zZm9ybTpZaX0sZHVyYXRpb246MCxkZWxheTowfSksRnQ9QmUscXQ9UHQsVXQ9T3R9ZnVuY3Rpb24gQnMoKXtyZXR1cm4gTm4oVS52YWx1ZSkudGhlbihCZT0+e01uPUJlfSl9ZnVuY3Rpb24gaHMoKXtpZighWC52YWx1ZSlyZXR1cm47Q2koKTtsZXQgQmU9bS5zY2FsZT9ndC52YWx1ZToxO0thKCksSmEoQmUpLERvKCksRnQ9d2UudmFsdWUrR3QueCxxdD1jdC52YWx1ZStHdC55O2xldCBQdD1XcihGdCxxdCksT3Q9UHQueCx5bj1QdC55O0ZvKE90LHluLEJlLCIiLCEwKX1yZXR1cm4gSS5vbk1vdW50ZWQoKCk9PntwZT1mbyhQdD0+e3N3aXRjaChQdC5kZXRhaWwuc3RhdGUpe2Nhc2Uic3RhcnQiOnNvKCk7YnJlYWs7Y2FzZSJtb3ZlIjpxYShQdCk7YnJlYWs7Y2FzZSJlbmQiOmZzKCl9fSksZygoKT0+e0JzKCkudGhlbigoKT0+e2hzKCl9KX0sMTAwKSx6bi5yZWNvbmZpZ3VyZSgxLHpyLnZhbHVlKSxWbi5yZWNvbmZpZ3VyZSgxLDkqTWF0aC5wb3coYnIudmFsdWUsMikvNDAsYnIudmFsdWUpO2xldCBCZT17c2V0UGFyZW50OmhzfTt0ZShCZSksSS5vblVubW91bnRlZCgoKT0+e2NlKEJlKX0pfSksSS5vblVubW91bnRlZCgoKT0+e0NpKCl9KSwoKT0+eyQocGUpfX1sZXQgSnI9MTYsa3I9e2FjdGl2ZUNvbG9yOlBuLlBSSU1BUllfQ09MT1IsYmFja2dyb3VuZENvbG9yOiIjRUJFQkVCIixhY3RpdmVNb2RlOiJiYWNrd2FyZHMifSxNdD17cGVyY2VudDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowLHZhbGlkYXRvcihtKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChtKSl9fSxmb250U2l6ZTp7dHlwZTpbU3RyaW5nLE51bWJlcl0sZGVmYXVsdDpKcn0sc2hvd0luZm86e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxzdHJva2VXaWR0aDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo2LHZhbGlkYXRvcihtKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChtKSl9fSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDprci5hY3RpdmVDb2xvcn0sYWN0aXZlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6a3IuYWN0aXZlQ29sb3J9LGJhY2tncm91bmRDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDprci5iYWNrZ3JvdW5kQ29sb3J9LGFjdGl2ZTp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGFjdGl2ZU1vZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6a3IuYWN0aXZlTW9kZX0sZHVyYXRpb246e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MzAsdmFsaWRhdG9yKG0pe3JldHVybiFpc05hTihwYXJzZUZsb2F0KG0pKX19LGJvcmRlclJhZGl1czp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfX0sT2U9W3sidW5pLXByb2dyZXNzIjp7IiI6e2ZsZXg6MSxmbGV4RGlyZWN0aW9uOiJyb3ciLGFsaWduSXRlbXM6ImNlbnRlciJ9fSwidW5pLXByb2dyZXNzLWJhciI6eyIiOntmbGV4OjF9fSwidW5pLXByb2dyZXNzLWlubmVyLWJhciI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUifX0sInVuaS1wcm9ncmVzcy1pbmZvIjp7IiI6e21hcmdpbkxlZnQ6IjE1cHgifX19XSxacj1JLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUHJvZ3Jlc3MiLHByb3BzOk10LHN0eWxlczpPZSxlbWl0czpbImFjdGl2ZWVuZCJdLHNldHVwKG0se2VtaXQ6Un0pe2xldCBVPUkucmVmKG51bGwpLCQ9SS5yZWYobnVsbCksWD1HbihVLFIpLEo9SWkobSk7cmV0dXJuIEkud2F0Y2goKCk9PkoucmVhbFBlcmNlbnQsKHRlLGNlKT0+e0oubGFzdFBlcmNlbnQ9Y2V8fDAsYWkoSixtLFgpfSksSS5vbk1vdW50ZWQoKCk9PntnKCgpPT57Tm4oJC52YWx1ZSkudGhlbigoe3dpZHRoOnRlfSk9PntKLnByb2dyZXNzV2lkdGg9dGV8fDAsYWkoSixtLFgpfSl9LDUwKX0pLCgpPT57bGV0e3Nob3dJbmZvOnRlLGZvbnRTaXplOmNlfT1tLHtvdXRlckJhclN0eWxlOnBlLGlubmVyQmFyU3R5bGU6UGUsY3VycmVudFBlcmNlbnQ6ZmV9PUo7cmV0dXJuIEkuY3JlYXRlVk5vZGUoImRpdiIse3JlZjpVLGNsYXNzOiJ1bmktcHJvZ3Jlc3MifSxbSS5jcmVhdGVWTm9kZSgiZGl2Iix7cmVmOiQsc3R5bGU6cGUsY2xhc3M6InVuaS1wcm9ncmVzcy1iYXIifSxbSS5jcmVhdGVWTm9kZSgiZGl2Iix7c3R5bGU6UGUsY2xhc3M6InVuaS1wcm9ncmVzcy1pbm5lci1iYXIifSxudWxsKV0pLHRlP1duKGZlKyIlIix7Y2xhc3M6InVuaS1wcm9ncmVzcy1pbmZvIixzdHlsZTp7Zm9udFNpemU6Y2V9fSk6bnVsbF0pfX19KTtmdW5jdGlvbiBJaShtKXtsZXQgUj1JLnJlZigwKSxVPUkucmVmKDApLCQ9SS5jb21wdXRlZCgoKT0+KHtiYWNrZ3JvdW5kQ29sb3I6bS5iYWNrZ3JvdW5kQ29sb3IsYm9yZGVyUmFkaXVzOm0uYm9yZGVyUmFkaXVzLGhlaWdodDptLnN0cm9rZVdpZHRofSkpLFg9SS5jb21wdXRlZCgoKT0+e2xldCBjZT1tLmNvbG9yIT09a3IuYWN0aXZlQ29sb3ImJm0uYWN0aXZlQ29sb3I9PT1rci5hY3RpdmVDb2xvcj9tLmNvbG9yOm0uYWN0aXZlQ29sb3I7cmV0dXJue3dpZHRoOlIudmFsdWUqVS52YWx1ZS8xMDAsaGVpZ2h0Om0uc3Ryb2tlV2lkdGgsYmFja2dyb3VuZENvbG9yOmNlLGJvcmRlclJhZGl1czptLmJvcmRlclJhZGl1c319KSxKPUkuY29tcHV0ZWQoKCk9PntsZXQgY2U9cGFyc2VGbG9hdChtLnBlcmNlbnQpO3JldHVybiBjZTwwJiYoY2U9MCksY2U+MTAwJiYoY2U9MTAwKSxjZX0pO3JldHVybiBJLnJlYWN0aXZlKHtvdXRlckJhclN0eWxlOiQsaW5uZXJCYXJTdHlsZTpYLHJlYWxQZXJjZW50OkosY3VycmVudFBlcmNlbnQ6UixzdHJva2VUaW1lcjowLGxhc3RQZXJjZW50OjAscHJvZ3Jlc3NXaWR0aDpVfSl9ZnVuY3Rpb24gYWkobSxSLFUpe20uc3Ryb2tlVGltZXImJmNsZWFySW50ZXJ2YWwobS5zdHJva2VUaW1lciksUi5hY3RpdmU/KG0uY3VycmVudFBlcmNlbnQ9Ui5hY3RpdmVNb2RlPT09a3IuYWN0aXZlTW9kZT8wOm0ubGFzdFBlcmNlbnQsbS5zdHJva2VUaW1lcj1zZXRJbnRlcnZhbCgoKT0+e20uY3VycmVudFBlcmNlbnQrMT5tLnJlYWxQZXJjZW50PyhtLmN1cnJlbnRQZXJjZW50PW0ucmVhbFBlcmNlbnQsbS5zdHJva2VUaW1lciYmY2xlYXJJbnRlcnZhbChtLnN0cm9rZVRpbWVyKSxVKCJhY3RpdmVlbmQiLHt9KSk6bS5jdXJyZW50UGVyY2VudCs9MX0scGFyc2VGbG9hdChSLmR1cmF0aW9uKSkpOm0uY3VycmVudFBlcmNlbnQ9bS5yZWFsUGVyY2VudH1sZXQgVnI9e3ZhbHVlOnt0eXBlOkFycmF5LGRlZmF1bHQoKXtyZXR1cm5bXX0sdmFsaWRhdG9yOmZ1bmN0aW9uKG0pe3JldHVybiBTdC5pc0FycmF5KG0pJiZtLmZpbHRlcihSPT50eXBlb2YgUj09Im51bWJlciIpLmxlbmd0aD09PW0ubGVuZ3RofX0saW5kaWNhdG9yU3R5bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGluZGljYXRvckNsYXNzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxtYXNrU3R5bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG1hc2tDbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LE5pPVN0LmV4dGVuZCh7fSxWcix7aGVpZ2h0Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjB9LG1hc2tUb3BTdHlsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sbWFza0JvdHRvbVN0eWxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0pLHByPUkuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJQaWNrZXJWaWV3Iixwcm9wczpOaSxlbWl0czpbImNoYW5nZSIsInVwZGF0ZTp2YWx1ZSJdLHNldHVwKG0se3Nsb3RzOlIsZW1pdDpVfSl7bGV0ICQ9SS5yZWYobnVsbCksWD0kcihtKSxKPUduKCQsVSksdGU9W10sY2U9UGU9PkFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGUuZmlsdGVyKGZlPT5mZS50eXBlIT09SS5Db21tZW50KSxQZSkscGU9UGU9PkkuY29tcHV0ZWQoe2dldCgpe2xldCBmZT1jZShQZS52bm9kZSk7cmV0dXJuIFgudmFsdWVbZmVdfHwwfSxzZXQoZmUpe2lmKCFQZS5kYXRhLl9pc01vdW50ZWQpcmV0dXJuO2xldCB3ZT1jZShQZS52bm9kZSk7aWYod2U8MClyZXR1cm47aWYoWC52YWx1ZVt3ZV0hPT1mZSl7WC52YWx1ZVt3ZV09ZmU7bGV0IGd0PVgudmFsdWUubWFwKCR0PT4kdCk7VSgidXBkYXRlOnZhbHVlIixndCksSigiY2hhbmdlIix7dmFsdWU6Z3R9KX19fSk7cmV0dXJuIEkucHJvdmlkZSgiZ2V0UGlja2VyVmlld0NvbHVtbiIscGUpLEkucHJvdmlkZSgicGlja2VyVmlld1Byb3BzIixtKSwoKT0+e2xldCBQZT1SLmRlZmF1bHQmJlIuZGVmYXVsdCgpO3RlPWlpKFBlKTtsZXQgZmU9bS5oZWlnaHQ/e2hlaWdodDpgJHtwYXJzZUZsb2F0KG0uaGVpZ2h0KX1weGB9Ont9O3JldHVybiBJLmNyZWF0ZVZOb2RlKCJ2aWV3IixJLm1lcmdlUHJvcHMoe3JlZjokLGNsYXNzOiJ1bmktcGlja2VyLXZpZXciLHN0eWxlOmZlfSx7cHJldmVudEdlc3R1cmU6ITB9KSxbSS5jcmVhdGVWTm9kZSgidmlldyIse2NsYXNzOiJ1bmktcGlja2VyLXZpZXctd3JhcHBlciJ9LFt0ZV0pXSl9fSxzdHlsZXM6W3sidW5pLXBpY2tlci12aWV3Ijp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9fSwidW5pLXBpY2tlci12aWV3LXdyYXBwZXIiOnsiIjp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoicm93Iixwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxyaWdodDowLGJvdHRvbTowLG92ZXJmbG93OiJoaWRkZW4ifX19XX0pO2Z1bmN0aW9uICRyKG0pe2xldCBSPUkucmVhY3RpdmUoWy4uLm0udmFsdWVdKSxVPUkucmVhY3RpdmUoe3ZhbHVlOlJ9KTtyZXR1cm4gSS53YXRjaCgoKT0+bS52YWx1ZSwkPT57VS52YWx1ZS5sZW5ndGg9JC5sZW5ndGgsSS5uZXh0VGljaygoKT0+eyQuZm9yRWFjaCgoWCxKKT0+e1ghPT1VLnZhbHVlW0pdJiZVLnZhbHVlLnNwbGljZShKLDEsWCl9KX0pfSksVX1sZXQgWHI9Uy5yZXF1aXJlTW9kdWxlKCJkb20iKSxQcj1TLmNvbmZpZy5lbnYucGxhdGZvcm0udG9Mb3dlckNhc2UoKT09PSJhbmRyb2lkIjtmdW5jdGlvbiBraShtKXtyZXR1cm4gU3QuZXh0ZW5kKHt9LFN0LmlzU3RyaW5nKG0pP3VvKG0pOm0pfWxldCBsbj17bGVuZ3RoOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjB9fSwkaT1JLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUGlja2VyVmlld0NvbHVtbiIscHJvcHM6bG4sZGF0YTooKT0+KHtfaXNNb3VudGVkOiExfSksc2V0dXAobSx7c2xvdHM6Un0pe2xldCBVPUkuZ2V0Q3VycmVudEluc3RhbmNlKCksJD1JLnJlZihudWxsKSxYPUkucmVmKG51bGwpLEo9SS5yZWYobnVsbCksdGU9SS5yZWYobnVsbCksY2U9SS5pbmplY3QoInBpY2tlclZpZXdQcm9wcyIpLFBlPUkuaW5qZWN0KCJnZXRQaWNrZXJWaWV3Q29sdW1uIikoVSksZmU9SS5jb21wdXRlZCgoKT0+a2koY2UuaW5kaWNhdG9yU3R5bGUpKSx3ZT1JLmNvbXB1dGVkKCgpPT5raShjZS5tYXNrVG9wU3R5bGUpKSxjdD1JLmNvbXB1dGVkKCgpPT5raShjZS5tYXNrQm90dG9tU3R5bGUpKSxndD1JLnJlZigwKTtndC52YWx1ZT1VcihmZS52YWx1ZSk7bGV0ICR0PUkucmVmKDApOyR0LnZhbHVlPXBhcnNlRmxvYXQoY2UuaGVpZ2h0KTtsZXR7c2V0Q3VycmVudDpFdCxvblNjcm9sbGVuZDpqZX09dG8obSxQZSxYLGd0KSxCdD0oKT0+e2xldCBXdCxodDtnKCgpPT57UHJvbWlzZS5hbGwoW05uKCQudmFsdWUpLnRoZW4oKHtoZWlnaHQ6WnR9KT0+e1d0PSR0LnZhbHVlPVp0fSksUHImJm0ubGVuZ3RoP05uKEoudmFsdWUpLnRoZW4oKHtoZWlnaHQ6WnR9KT0+e2h0PWd0LnZhbHVlPVp0L3BhcnNlRmxvYXQobS5sZW5ndGgpfSk6Tm4odGUudmFsdWUpLnRoZW4oKHtoZWlnaHQ6WnR9KT0+e2h0PWd0LnZhbHVlPVp0fSldKS50aGVuKCgpPT57V3QmJmh0P2coKCk9PntVLmRhdGEuX2lzTW91bnRlZD0hMCxFdChQZS52YWx1ZSwhMSwhMCl9LDUwKTpCdCgpfSl9LDUwKX07SS5vbk1vdW50ZWQoQnQpO2xldCBjbj1XdD0+V3Q/UHI/SS5jcmVhdGVWTm9kZSgiZGl2Iix7cmVmOkosc3R5bGU6ImZsZXgtZGlyZWN0aW9uOmNvbHVtbjsifSxbV3RdKTpXdDpudWxsO3JldHVybigpPT57bGV0IFd0PVIuZGVmYXVsdCYmUi5kZWZhdWx0KCksaHQ9KCR0LnZhbHVlLWd0LnZhbHVlKS8yLFp0PWAkeyR0LnZhbHVlLWh0fXB4YCxSbj17c2hvd1Njcm9sbGJhcjohMSxzY3JvbGxUb0JlZ2luOiExLGRlY2VsZXJhdGlvblJhdGU6LjMsc2Nyb2xsWTohMH07cmV0dXJuIFByfHwoUm4uc2Nyb2xsVG9wPVBlLnZhbHVlKmd0LnZhbHVlKSxJLmNyZWF0ZVZOb2RlKCJ2aWV3Iix7cmVmOiQsY2xhc3M6InVuaS1waWNrZXItdmlldy1jb2x1bW4ifSxbSS5jcmVhdGVWTm9kZSgic2Nyb2xsLXZpZXciLEkubWVyZ2VQcm9wcyh7Y2xhc3M6InVuaS1waWNrZXItdmlldy1ncm91cCIsc3R5bGU6ImZsZXgtZGlyZWN0aW9uOmNvbHVtbjsiLG9uU2Nyb2xsZW5kOmplfSxSbiksW0kuY3JlYXRlVk5vZGUoInZpZXciLHtyZWY6WCxjbGFzczoidW5pLXBpY2tlci12aWV3LWNvbnRlbnQiLHN0eWxlOntwYWRkaW5nVG9wOmAke2h0fXB4YCxwYWRkaW5nQm90dG9tOmAke2h0fXB4YH19LFtjbihXdCldKV0pLEkuY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtjbGFzczoidW5pLXBpY2tlci12aWV3LW1hc2sifSxbSS5jcmVhdGVWTm9kZSgidS1zY2FsYWJsZSIse2NsYXNzOiJ1bmktcGlja2VyLXZpZXctbWFzayB1bmktcGlja2VyLXZpZXctbWFzay10b3AiLHN0eWxlOlN0LmV4dGVuZCh7fSx3ZS52YWx1ZSx7Ym90dG9tOlp0fSl9LG51bGwpLEkuY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtjbGFzczoidW5pLXBpY2tlci12aWV3LW1hc2sgdW5pLXBpY2tlci12aWV3LW1hc2stYm90dG9tIixzdHlsZTpTdC5leHRlbmQoe30sY3QudmFsdWUse3RvcDpadH0pfSxudWxsKV0pLEkuY3JlYXRlVk5vZGUoInUtc2NhbGFibGUiLHtyZWY6dGUsY2xhc3M6InVuaS1waWNrZXItdmlldy1pbmRpY2F0b3IiLHN0eWxlOlN0LmV4dGVuZCh7fSxmZS52YWx1ZSx7dG9wOmAke2h0fXB4YH0pfSxudWxsKV0pfX0sc3R5bGVzOlt7InVuaS1waWNrZXItdmlldy1jb2x1bW4iOnsiIjp7ZmxleDoxLHBvc2l0aW9uOiJyZWxhdGl2ZSIsYWxpZ25JdGVtczoic3RyZXRjaCIsb3ZlcmZsb3c6ImhpZGRlbiJ9fSwidW5pLXBpY2tlci12aWV3LW1hc2siOnsiIjp7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MCxwb2ludGVyRXZlbnRzOiJub25lIn19LCJ1bmktcGlja2VyLXZpZXctbWFzay10b3AiOnsiIjp7Ym90dG9tOjAsYmFja2dyb3VuZEltYWdlOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSkscmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpKSJ9fSwidW5pLXBpY2tlci12aWV3LW1hc2stYm90dG9tIjp7IiI6e3RvcDowLGJhY2tncm91bmRJbWFnZToibGluZWFyLWdyYWRpZW50KHRvIHRvcCxyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpLHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSkifX0sInVuaS1waWNrZXItdmlldy1ncm91cCI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxyaWdodDowLGJvdHRvbTowfX0sInVuaS1waWNrZXItdmlldy1jb250ZW50Ijp7IiI6e2ZsZXhEaXJlY3Rpb246ImNvbHVtbiIscGFkZGluZ1RvcDowLHBhZGRpbmdSaWdodDowLHBhZGRpbmdCb3R0b206MCxwYWRkaW5nTGVmdDowfX0sInVuaS1waWNrZXItdmlldy1pbmRpY2F0b3IiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAscmlnaHQ6MCx0b3A6MCxoZWlnaHQ6IjM0cHgiLHBvaW50ZXJFdmVudHM6Im5vbmUiLGJvcmRlckNvbG9yOiIjZTVlNWU1Iixib3JkZXJUb3BXaWR0aDoiMXB4Iixib3JkZXJCb3R0b21XaWR0aDoiMXB4In19fV19KTtmdW5jdGlvbiBVcihtKXtsZXQgVT0obS5oZWlnaHR8fG0ubGluZUhlaWdodHx8IiIpLm1hdGNoKC8oLT9bXGRcLl0rKXB4LyksJD0wO3JldHVybiBVJiYoJD1wYXJzZUZsb2F0KFVbMV0pKSwkfWZ1bmN0aW9uIHRvKG0sUixVLCQpe2xldCBYO2Z1bmN0aW9uIEoocGUsUGU9ITApe1hyLnNjcm9sbFRvRWxlbWVudChVLnZhbHVlLHtvZmZzZXQ6cGUqJC52YWx1ZSxhbmltYXRlZDpQZX0pLFBlJiYoWD1EYXRlLm5vdygpKX1JLndhdGNoKCgpPT5tLmxlbmd0aCwoKT0+e2coKCk9Pnt0ZShSLnZhbHVlLCEwLCEwKX0sMTUwKX0pLEkud2F0Y2goUixwZT0+SihwZSkpO2xldCB0ZT0ocGUsUGU9ITAsZmUpPT57Ui52YWx1ZT09PXBlJiYhZmV8fChSLnZhbHVlPXBlLFByJiZKKHBlLFBlKSl9O3JldHVybntzZXRDdXJyZW50OnRlLG9uU2Nyb2xsZW5kOnBlPT57aWYoRGF0ZS5ub3coKS1YPDM0MClyZXR1cm47bGV0IFBlPXBlLmRldGFpbC5jb250ZW50T2Zmc2V0LnksZmU9TWF0aC5yb3VuZChQZS8kLnZhbHVlKTtQZSUkLnZhbHVlP3RlKGZlLCEwLCEwKTpSLnZhbHVlPWZlfX19bGV0IGJuPXtTRUxFQ1RPUjoic2VsZWN0b3IiLE1VTFRJU0VMRUNUT1I6Im11bHRpU2VsZWN0b3IiLFRJTUU6InRpbWUiLERBVEU6ImRhdGUifSxIcj17WUVBUjoieWVhciIsTU9OVEg6Im1vbnRoIixEQVk6ImRheSJ9O2Z1bmN0aW9uIGlyKG0pe3JldHVybiBtPjk/bTpgMCR7bX1gfWZ1bmN0aW9uIHlpKG0sUil7bT1TdHJpbmcobXx8IiIpO2xldCBVPW5ldyBEYXRlO2lmKFI9PT1ibi5USU1FKXtsZXQgJD1tLnNwbGl0KCI6Iik7JC5sZW5ndGg9PT0yJiZVLnNldEhvdXJzKHBhcnNlSW50KCRbMF0pLHBhcnNlSW50KCRbMV0pKX1lbHNle2xldCAkPW0uc3BsaXQoIi0iKTskLmxlbmd0aD09PTMmJlUuc2V0RnVsbFllYXIocGFyc2VJbnQoJFswXSkscGFyc2VJbnQoU3RyaW5nKHBhcnNlRmxvYXQoJFsxXSktMSkpLHBhcnNlSW50KCRbMl0pKX1yZXR1cm4gVX1mdW5jdGlvbiBSaShtKXtpZihtLm1vZGU9PT1ibi5USU1FKXJldHVybiIwMDowMCI7aWYobS5tb2RlPT09Ym4uREFURSl7bGV0IFI9bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLTEwMDtzd2l0Y2gobS5maWVsZHMpe2Nhc2UgSHIuWUVBUjpyZXR1cm4gUjtjYXNlIEhyLk1PTlRIOnJldHVybiBSKyItMDEiO2RlZmF1bHQ6cmV0dXJuIFIrIi0wMS0wMSJ9fXJldHVybiIifWZ1bmN0aW9uIHZyKG0pe2lmKG0ubW9kZT09PWJuLlRJTUUpcmV0dXJuIjIzOjU5IjtpZihtLm1vZGU9PT1ibi5EQVRFKXtsZXQgUj1uZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkrMTAwO3N3aXRjaChtLmZpZWxkcyl7Y2FzZSBIci5ZRUFSOnJldHVybiBSO2Nhc2UgSHIuTU9OVEg6cmV0dXJuIFIrIi0xMiI7ZGVmYXVsdDpyZXR1cm4gUisiLTEyLTMxIn19cmV0dXJuIiJ9bGV0IFFyPXtuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxyYW5nZTp7dHlwZTpBcnJheSxkZWZhdWx0KCl7cmV0dXJuW119fSxyYW5nZUtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sdmFsdWU6e3R5cGU6W051bWJlcixTdHJpbmcsQXJyYXldLGRlZmF1bHQ6MH0sbW9kZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpibi5TRUxFQ1RPUix2YWxpZGF0b3IobSl7cmV0dXJuIE9iamVjdC52YWx1ZXMoYm4pLmluZGV4T2YobSk+PTB9fSxmaWVsZHM6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHN0YXJ0Ont0eXBlOlN0cmluZyxkZWZhdWx0OlJpfSxlbmQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6dnJ9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX19LFpuPUkuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJQaWNrZXIiLHByb3BzOlFyLGVtaXRzOlsiY2hhbmdlIiwiY2FuY2VsIiwiY29sdW1uY2hhbmdlIl0sc2V0dXAobSx7c2xvdHM6UixlbWl0OlV9KXtsZXQgJD1JLnJlZihudWxsKSxYPUduKCQsVSksSj1JLnJlZihudWxsKSx0ZT1JLnJlZihudWxsKSxjZT0oKT0+e2xldCBFdD1tLnZhbHVlO3N3aXRjaChtLm1vZGUpe2Nhc2UgYm4uTVVMVElTRUxFQ1RPUjp7U3QuaXNBcnJheShFdCl8fChFdD1bXSksU3QuaXNBcnJheShKLnZhbHVlKXx8KEoudmFsdWU9W10pO2xldCBqZT1KLnZhbHVlLmxlbmd0aD1NYXRoLm1heChFdC5sZW5ndGgsbS5yYW5nZS5sZW5ndGgpO2ZvcihsZXQgQnQ9MDtCdDxqZTtCdCsrKXtsZXQgY249TnVtYmVyKEV0W0J0XSksV3Q9TnVtYmVyKEoudmFsdWVbQnRdKSxodD1pc05hTihjbik/aXNOYU4oV3QpPzA6V3Q6Y247Si52YWx1ZS5zcGxpY2UoQnQsMSxodDwwPzA6aHQpfX1icmVhaztjYXNlIGJuLlRJTUU6Y2FzZSBibi5EQVRFOkoudmFsdWU9U3RyaW5nKEV0KTticmVhaztkZWZhdWx0OntsZXQgamU9TnVtYmVyKEV0KTtKLnZhbHVlPWplPDA/MDpqZTticmVha319fSxwZT1FdD0+e3RlLnZhbHVlJiZ0ZS52YWx1ZS5zZW5kTWVzc2FnZShFdCl9LFBlPUV0PT57bGV0IGplPXtldmVudDoiY2FuY2VsIn07dGUudmFsdWU9cnIoe3VybDoiX191bmlhcHBwaWNrZXIiLGRhdGE6RXQsc3R5bGU6e3RpdGxlTlZpZXc6ITEsYW5pbWF0aW9uVHlwZToibm9uZSIsYW5pbWF0aW9uRHVyYXRpb246MCxiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDApIixwb3BHZXN0dXJlOiJub25lIn0sb25NZXNzYWdlOkJ0PT57bGV0IGNuPUJ0LmV2ZW50O2lmKGNuPT09ImNyZWF0ZWQiKXtwZShFdCk7cmV0dXJufWlmKGNuPT09ImNvbHVtbmNoYW5nZSIpe2RlbGV0ZSBCdC5ldmVudCxYKGNuLEJ0KTtyZXR1cm59amU9QnR9LG9uQ2xvc2U6KCk9Pnt0ZS52YWx1ZT1udWxsO2xldCBCdD1qZS5ldmVudDtkZWxldGUgamUuZXZlbnQsQnQmJlgoQnQsamUpfX0pfSxmZT1FdD0+e2QubmF0aXZlVUlbbS5tb2RlPT09Ym4uVElNRT8icGlja1RpbWUiOiJwaWNrRGF0ZSJdKGplPT57bGV0IEJ0PWplLmRhdGU7WCgiY2hhbmdlIix7dmFsdWU6bS5tb2RlPT09Ym4uVElNRT9gJHtpcihCdC5nZXRIb3VycygpKX06JHtpcihCdC5nZXRNaW51dGVzKCkpfWA6YCR7QnQuZ2V0RnVsbFllYXIoKX0tJHtpcihCdC5nZXRNb250aCgpKzEpfS0ke2lyKEJ0LmdldERhdGUoKSl9YH0pfSwoKT0+e1goImNhbmNlbCIse30pfSxtLm1vZGU9PT1ibi5USU1FP3t0aW1lOnlpKG0udmFsdWUsYm4uVElNRSl9OntkYXRlOnlpKG0udmFsdWUsYm4uREFURSksbWluRGF0ZTp5aShtLnN0YXJ0LGJuLkRBVEUpLG1heERhdGU6eWkobS5lbmQsYm4uREFURSl9KX0sd2U9RXQ9PnsoRXQubW9kZT09PWJuLlRJTUV8fEV0Lm1vZGU9PT1ibi5EQVRFKSYmIUV0LmZpZWxkcz9mZSgpOihFdC5maWVsZHM9T2JqZWN0LnZhbHVlcyhIcikuaW5jbHVkZXMoRXQuZmllbGRzKT9FdC5maWVsZHM6SHIuREFZLFBlKEV0KSl9LGN0PUV0PT57bS5kaXNhYmxlZHx8d2UoU3QuZXh0ZW5kKHt9LG0se3ZhbHVlOkoudmFsdWUsbG9jYWxlOnAuZ2V0TG9jYWxlKCl9KSl9LGd0PUkuaW5qZWN0KE1yLCExKSwkdD17c3VibWl0OigpPT5bbS5uYW1lLEoudmFsdWVdLHJlc2V0OigpPT57c3dpdGNoKG0ubW9kZSl7Y2FzZSBibi5TRUxFQ1RPUjpKLnZhbHVlPTA7YnJlYWs7Y2FzZSBibi5NVUxUSVNFTEVDVE9SOlN0LmlzQXJyYXkobS52YWx1ZSkmJihKLnZhbHVlPW0udmFsdWUubWFwKEV0PT4wKSk7YnJlYWs7Y2FzZSBibi5EQVRFOmNhc2UgYm4uVElNRTpKLnZhbHVlPSIiO2JyZWFrfX19O3JldHVybiBndCYmKGd0LmFkZEZpZWxkKCR0KSxJLm9uQmVmb3JlVW5tb3VudCgoKT0+Z3QucmVtb3ZlRmllbGQoJHQpKSksT2JqZWN0LmtleXMobSkuZm9yRWFjaChFdD0+e0kud2F0Y2goKCk9Pm1bRXRdLGplPT57bGV0IEJ0PXt9O0J0W0V0XT1qZSxwZShCdCl9LHtkZWVwOiEwfSl9KSxJLndhdGNoKCgpPT5tLnZhbHVlLGNlLHtkZWVwOiEwfSksY2UoKSwoKT0+SS5jcmVhdGVWTm9kZSgidmlldyIse3JlZjokLG9uQ2xpY2s6Y3R9LFtSLmRlZmF1bHQmJlIuZGVmYXVsdCgpXSl9fSksWG49e25hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG1pbjp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxtYXg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MTAwfSx2YWx1ZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDowfSxzdGVwOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjF9LGRpc2FibGVkOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiNlOWU5ZTkifSxiYWNrZ3JvdW5kQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiNlOWU5ZTkifSxhY3RpdmVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwN2FmZiJ9LHNlbGVjdGVkQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiMwMDdhZmYifSxibG9ja0NvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIjZmZmZmZmIn0sYmxvY2tTaXplOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjI4fSxzaG93VmFsdWU6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfX0sSG49W3sidW5pLXNsaWRlciI6eyIiOntmbGV4OjEsZmxleERpcmVjdGlvbjoiY29sdW1uIn19LCJ1bmktc2xpZGVyLXdyYXBwZXIiOnsiIjp7ZmxleERpcmVjdGlvbjoicm93IixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixhbGlnbkl0ZW1zOiJjZW50ZXIifX0sInVuaS1zbGlkZXItdGFwLWFyZWEiOnsiIjp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsZmxleERpcmVjdGlvbjoicm93IixhbGlnbkl0ZW1zOiJjZW50ZXIiLHBhZGRpbmdUb3A6IjE0IixwYWRkaW5nQm90dG9tOiIxNCJ9fSwidW5pLXNsaWRlci1oYW5kbGUtd3JhcHBlciI6eyIiOntwb3NpdGlvbjoicmVsYXRpdmUiLGZsZXg6MSxiYWNrZ3JvdW5kQ29sb3I6IiNlOWU5ZTkiLGhlaWdodDoiMiIsYm9yZGVyUmFkaXVzOiI1IixtYXJnaW5SaWdodDoiMTQiLG1hcmdpbkxlZnQ6IjE0In19LCJ1bmktc2xpZGVyLXRyYWNrIjp7IiI6e2hlaWdodDoiMiIsYm9yZGVyUmFkaXVzOiI2IixiYWNrZ3JvdW5kQ29sb3I6IiMwMDdhZmYifX0sInVuaS1zbGlkZXItdGh1bWIiOnsiIjp7cG9zaXRpb246ImFic29sdXRlIix0b3A6IjEiLHdpZHRoOiIyOCIsaGVpZ2h0OiIyOCIsYm9yZGVyUmFkaXVzOjUwLGJveFNoYWRvdzoiMCAwIDRweCAjZWJlYmViIn19LCJ1bmktc2xpZGVyLXZhbHVlIjp7IiI6e2NvbG9yOiIjODg4ODg4Iixmb250U2l6ZToiMTYiLHdpZHRoOiIzMCJ9fX1dLFFuPUkuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJVU2xpZGVyIixwcm9wczpYbixzdHlsZXM6SG4sc2V0dXAobSx7ZW1pdDpSfSl7bGV0IFU9SS5yZWYobnVsbCksJD1JLnJlZihudWxsKSxYPUduKFUsUiksSj1scihtKSx0ZT1obyhtLEosWCk7cmV0dXJuIGdvKG0sSiksSS53YXRjaCgoKT0+bS52YWx1ZSxjZT0+e0ouc2xpZGVyVmFsdWU9TnVtYmVyKGNlKX0pLEkub25Nb3VudGVkKCgpPT57ZygoKT0+e05uKCQudmFsdWUpLnRoZW4oKHt3aWR0aDpjZSxsZWZ0OnBlfSk9PntKLnNsaWRlckxlZnQ9cGUsSi5zbGlkZXJXaWR0aD1jZXx8MCxKLnNsaWRlclZhbHVlPU51bWJlcihtLnZhbHVlKX0pfSwxMDApfSksKCk9PntsZXR7c2hvd1ZhbHVlOmNlfT1tLHt0cmFja1RhcFN0eWxlOnBlLHRyYWNrU3R5bGU6UGUsdHJhY2tBY3RpdmVTdHlsZTpmZSx0aHVtYlN0eWxlOndlLHNsaWRlclZhbHVlOmN0fT1KO3JldHVybiBJLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczoidW5pLXNsaWRlciIscmVmOlV9LFtJLmNyZWF0ZVZOb2RlKCJkaXYiLHtjbGFzczoidW5pLXNsaWRlci13cmFwcGVyIn0sW0kuY3JlYXRlVk5vZGUoImRpdiIsSS5tZXJnZVByb3BzKHtjbGFzczoidW5pLXNsaWRlci10YXAtYXJlYSIsc3R5bGU6cGV9LHRlKSxbSS5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zbGlkZXItaGFuZGxlLXdyYXBwZXIiLHN0eWxlOlBlLHJlZjokfSxbSS5jcmVhdGVWTm9kZSgiZGl2Iix7Y2xhc3M6InVuaS1zbGlkZXItdHJhY2siLHN0eWxlOmZlfSxudWxsKV0pLEkuY3JlYXRlVk5vZGUoImRpdiIse2NsYXNzOiJ1bmktc2xpZGVyLXRodW1iIixzdHlsZTp3ZX0sbnVsbCldKSxjZT9XbihjdCsiIix7Y2xhc3M6InVuaS1zbGlkZXItdmFsdWUifSk6bnVsbF0pXSl9fX0pO2Z1bmN0aW9uIGxyKG0pe2xldCBSPUkucmVmKDApLFU9SS5yZWYoMCksJD1JLnJlZigwKSxYPSgpPT5tLmJhY2tncm91bmRDb2xvciE9PSIjZTllOWU5Ij9tLmJhY2tncm91bmRDb2xvcjptLmNvbG9yIT09IiMwMDdhZmYiP20uY29sb3I6IiMwMDdhZmYiLEo9KCk9Pm0uYWN0aXZlQ29sb3IhPT0iIzAwN2FmZiI/bS5hY3RpdmVDb2xvcjptLnNlbGVjdGVkQ29sb3IhPT0iI2U5ZTllOSI/bS5zZWxlY3RlZENvbG9yOiIjZTllOWU5Iix0ZT0oKT0+e2xldCBQZT1OdW1iZXIobS5tYXgpLGZlPU51bWJlcihtLm1pbik7cmV0dXJuKCQudmFsdWUtZmUpLyhQZS1mZSkqVS52YWx1ZX0sY2U9TnVtYmVyKG0uYmxvY2tTaXplKS8yO3JldHVybiBJLnJlYWN0aXZlKHtzbGlkZXJMZWZ0OlIsc2xpZGVyV2lkdGg6VSxzbGlkZXJWYWx1ZTokLHNsaWRlclRodW1iT2Zmc2V0OmNlLHRyYWNrVGFwU3R5bGU6SS5jb21wdXRlZCgoKT0+KHtwYWRkaW5nVG9wOmNlLHBhZGRpbmdCb3R0b206Y2V9KSksdHJhY2tTdHlsZTpJLmNvbXB1dGVkKCgpPT4oe2JhY2tncm91bmRDb2xvcjpYKCksbWFyZ2luTGVmdDpjZSxtYXJnaW5SaWdodDpjZX0pKSx0cmFja0FjdGl2ZVN0eWxlOkkuY29tcHV0ZWQoKCk9Pih7YmFja2dyb3VuZENvbG9yOkooKSx3aWR0aDp0ZSgpfSkpLHRodW1iU3R5bGU6SS5jb21wdXRlZCgoKT0+KHt3aWR0aDptLmJsb2NrU2l6ZSxoZWlnaHQ6bS5ibG9ja1NpemUsYmFja2dyb3VuZENvbG9yOm0uYmxvY2tDb2xvcixsZWZ0OnRlKCl9KSl9KX1mdW5jdGlvbiBobyhtLFIsVSl7bGV0ICQ9bnVsbDtmdW5jdGlvbiBYKGNlLHBlKXttLmRpc2FibGVkfHwoY2U9PT0ibW92ZSI/KEoocGUpLFUoImNoYW5naW5nIix7dmFsdWU6Ui5zbGlkZXJWYWx1ZX0pKTpjZT09PSJlbmQiJiYoSihwZSksVSgiY2hhbmdlIix7dmFsdWU6Ui5zbGlkZXJWYWx1ZX0pKSl9ZnVuY3Rpb24gSihjZSl7Y2UtPVIuc2xpZGVyVGh1bWJPZmZzZXQsY2U8MCYmKGNlPTApLGNlPlIuc2xpZGVyV2lkdGgmJihjZT1SLnNsaWRlcldpZHRoKTtsZXQgcGU9TnVtYmVyKG0ubWF4KSxQZT1OdW1iZXIobS5taW4pLGZlPU51bWJlcihtLnN0ZXApLHdlPWNlL1Iuc2xpZGVyV2lkdGgqKHBlLVBlKTtmZT4wJiZ3ZT5mZSYmd2UlZmUvZmUhPT0wP3dlLT13ZSVmZTp3ZT1wYXJzZUludCh3ZSsiIiksUi5zbGlkZXJWYWx1ZT13ZStQZX1yZXR1cm57b25Ub3VjaHN0YXJ0KGNlKXtjZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT0xJiYhJCYmKCQ9Y2UsWCgic3RhcnQiLGNlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYKSl9LG9uVG91Y2htb3ZlKGNlKXtjZS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT0xJiYkJiZYKCJtb3ZlIixjZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCl9LG9uVG91Y2hlbmQoY2Upe2NlLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PTEmJiQmJigkPW51bGwsWCgiZW5kIixjZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCkpfX19ZnVuY3Rpb24gZ28obSxSKXtsZXQgVT1JLmluamVjdChNciwhMSksJD17c3VibWl0OigpPT57bGV0IFg9WyIiLG51bGxdO3JldHVybiBtLm5hbWUmJihYWzBdPW0ubmFtZSxYWzFdPVIuc2xpZGVyVmFsdWUpLFh9LHJlc2V0OigpPT57Ui5zbGlkZXJWYWx1ZT1OdW1iZXIobS52YWx1ZSl9fTtVJiYoVS5hZGRGaWVsZCgkKSxJLm9uVW5tb3VudGVkKCgpPT57VS5yZW1vdmVGaWVsZCgkKX0pKX1sZXQgTm89e25hbWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGNoZWNrZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSx0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJzd2l0Y2gifSxpZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sZGlzYWJsZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwN2FmZiJ9fSxubz17c3dpdGNoOiJzd2l0Y2giLGNoZWNrYm94OiJjaGVja2JveCJ9LGtvPXt3aWR0aDo1MixoZWlnaHQ6MzJ9LGpyPUkuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJTd2l0Y2giLHByb3BzOk5vLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAobSx7ZW1pdDpSfSl7bGV0IFU9SS5yZWYobnVsbCksJD1JLnJlZihtLmNoZWNrZWQpLFg9UnIobSwkKSxKPUduKFUsUik7SS53YXRjaCgoKT0+bS5jaGVja2VkLGNlPT57JC52YWx1ZT1jZX0pO2xldCB0ZT0oY2UscGUpPT57bS5kaXNhYmxlZHx8KCQudmFsdWU9Y2UuZGV0YWlsP2NlLmRldGFpbC52YWx1ZTohJC52YWx1ZSxKKCJjaGFuZ2UiLHt2YWx1ZTokLnZhbHVlfSkpfTtyZXR1cm4gWCYmKFguYWRkSGFuZGxlcih0ZSksSS5vbkJlZm9yZVVubW91bnQoKCk9PntYLnJlbW92ZUhhbmRsZXIodGUpfSkpLFRyKG0seyJsYWJlbC1jbGljayI6dGV9KSwoKT0+e2xldHtjb2xvcjpjZSx0eXBlOnBlLGRpc2FibGVkOlBlfT1tO3JldHVybiBJLmNyZWF0ZVZOb2RlKCJkaXYiLHtyZWY6VX0sW3BlPT09bm8uc3dpdGNoP0kuY3JlYXRlVk5vZGUoImRjLXN3aXRjaCIsSS5tZXJnZVByb3BzKHtkYXRhVW5jVHlwZToidW5pLXN3aXRjaCJ9LHtvbkNoYW5nZTp0ZX0se2NoZWNrZWQ6JC52YWx1ZSxjb2xvcjpjZSxkaXNhYmxlZDpQZX0se3N0eWxlOmtvfSksbnVsbCk6bnVsbCxwZT09PW5vLmNoZWNrYm94P0kuY3JlYXRlVk5vZGUoSS5yZXNvbHZlQ29tcG9uZW50KCJjaGVja2JveCIpLEkubWVyZ2VQcm9wcyh7c3R5bGU6e2NvbG9yOmNlfX0se2NoZWNrZWQ6JC52YWx1ZSxkaXNhYmxlZDpQZX0se29uQ2xpY2s6dGV9KSxudWxsKTpudWxsXSl9fX0pO2Z1bmN0aW9uIFJyKG0sUil7bGV0IFU9SS5pbmplY3QoTXIsITEpLCQ9SS5pbmplY3QoT3IsITEpLFg9e3N1Ym1pdDooKT0+e2xldCBKPVsiIixudWxsXTtyZXR1cm4gbS5uYW1lJiYoSlswXT1tLm5hbWUsSlsxXT1SLnZhbHVlKSxKfSxyZXNldDooKT0+e1IudmFsdWU9ITF9fTtyZXR1cm4gVSYmKFUuYWRkRmllbGQoWCksSS5vblVubW91bnRlZCgoKT0+e1UucmVtb3ZlRmllbGQoWCl9KSksJH1sZXQgcm89e2NoZWNrZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxpZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sZGlzYWJsZWQ6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzAwN2FmZiJ9LHZhbHVlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sS289YXIoInVjZyIpLHhpPXtuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sVWk9W3sidW5pLWNoZWNrYm94Ijp7IiI6e2ZsZXhEaXJlY3Rpb246InJvdyIsYWxpZ25JdGVtczoiY2VudGVyIn19LCJ1bmktY2hlY2tib3gtaW5wdXQiOnsiIjp7anVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYWxpZ25JdGVtczoiY2VudGVyIixwb3NpdGlvbjoicmVsYXRpdmUiLGJvcmRlcldpZHRoOiIxIixib3JkZXJDb2xvcjoiI2QxZDFkMSIsYm9yZGVyU3R5bGU6InNvbGlkIixiYWNrZ3JvdW5kQ29sb3I6IiNmZmZmZmYiLGJvcmRlclJhZGl1czoiMyIsd2lkdGg6IjIyIixoZWlnaHQ6IjIyIn19LCJ1bmktaWNvbiI6eyIiOntmb250RmFtaWx5OiJ1bmluY29tcG9uZW50cyIsZm9udFNpemU6IjE2IixtYXJnaW5MZWZ0OiIyIixtYXJnaW5Ub3A6IjIiLGNvbG9yOiIjMDA3YWZmIn19LCJ1bmktY2hlY2tib3gtaW5wdXQtZGlzYWJsZWQiOnsiIjp7YmFja2dyb3VuZENvbG9yOiIjZTFlMWUxIn19LCJ1bmktY2hlY2tib3gtaW5wdXQtZGlzYWJsZWQtYmVmb3JlIjp7IiI6e2NvbG9yOiIjYWRhZGFkIn19LCJ1bmktY2hlY2tib3gtc2xvdCI6eyIiOntmb250U2l6ZToiMTYiLG1hcmdpbkxlZnQ6IjUifX19XSxSbz1JLmRlZmluZUNvbXBvbmVudCh7bmFtZToiQ2hlY2tib3giLHByb3BzOnJvLHN0eWxlczpVaSxzZXR1cChtLHtzbG90czpSfSl7bGV0IFU9SS5yZWYobnVsbCksJD1JLnJlZihtLmNoZWNrZWQpLFg9SS5yZWYobS52YWx1ZSksSj1JLmNvbXB1dGVkKCgpPT5tLmRpc2FibGVkPyIjYWRhZGFkIjptLmNvbG9yKSx0ZT0oKT0+eyQudmFsdWU9ITF9LGNlPSh3ZSxjdCk9PnttLmRpc2FibGVkfHwoJC52YWx1ZT0hJC52YWx1ZSxwZSYmcGUuY2hlY2tib3hDaGFuZ2Uod2UpKX0se3VuaUNoZWNrR3JvdXA6cGUsdW5pTGFiZWw6UGV9PUJpKCQsWCx0ZSk7UGUmJihQZS5hZGRIYW5kbGVyKGNlKSxJLm9uQmVmb3JlVW5tb3VudCgoKT0+e1BlLnJlbW92ZUhhbmRsZXIoY2UpfSkpLFRyKG0seyJsYWJlbC1jbGljayI6Y2V9KSxJLndhdGNoKFsoKT0+bS5jaGVja2VkLCgpPT5tLnZhbHVlXSwoW3dlLGN0XSk9PnskLnZhbHVlPXdlLFgudmFsdWU9Y3R9KTtsZXQgZmU9KCk9PntpZighUi5kZWZhdWx0KXJldHVybltdO2xldCB3ZT1SLmRlZmF1bHQoKTtyZXR1cm4gd2UubGVuZ3RoPT09MSYmd2VbMF0udHlwZT09PVRleHQ/W1duKHdlWzBdLmNoaWxkcmVuLHtjbGFzczoidW5pLWNoZWNrYm94LXNsb3QifSldOndlfTtyZXR1cm4oKT0+SS5jcmVhdGVWTm9kZSgiZGl2IixJLm1lcmdlUHJvcHMoe3JlZjpVfSx7ZGF0YVVuY1R5cGU6InVuaS1jaGVja2JveCJ9LHtvbkNsaWNrOmNlLGNsYXNzOiJ1bmktY2hlY2tib3gifSksW0kuY3JlYXRlVk5vZGUoImRpdiIse2NsYXNzOlsidW5pLWNoZWNrYm94LWlucHV0Iix7InVuaS1jaGVja2JveC1pbnB1dC1kaXNhYmxlZCI6bS5kaXNhYmxlZH1dfSxbJC52YWx1ZT9XbigiXHVFQTA4Iix7Y2xhc3M6InVuaS1pY29uIixzdHlsZTp7Y29sb3I6Si52YWx1ZX19KTpudWxsXSksLi4uZmUoKV0pfX0pO2Z1bmN0aW9uIEJpKG0sUixVKXtsZXQgJD1JLmNvbXB1dGVkKCgpPT4oe2NoZWNrYm94Q2hlY2tlZDpCb29sZWFuKG0udmFsdWUpLHZhbHVlOlIudmFsdWV9KSksWD17cmVzZXQ6VX0sSj1JLmluamVjdChLbywhMSk7SiYmSi5hZGRGaWVsZCgkKTtsZXQgdGU9SS5pbmplY3QoTXIsITEpO3RlJiZ0ZS5hZGRGaWVsZChYKTtsZXQgY2U9SS5pbmplY3QoT3IsITEpO3JldHVybiBJLm9uQmVmb3JlVW5tb3VudCgoKT0+e0omJkoucmVtb3ZlRmllbGQoJCksdGUmJnRlLnJlbW92ZUZpZWxkKFgpfSkse3VuaUNoZWNrR3JvdXA6Six1bmlGb3JtOnRlLHVuaUxhYmVsOmNlfX1sZXQgSGk9SS5kZWZpbmVDb21wb25lbnQoe25hbWU6IkNoZWNrYm94R3JvdXAiLHByb3BzOnhpLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAobSx7c2xvdHM6UixlbWl0OlV9KXtsZXQgJD1JLnJlZihudWxsKSxYPUduKCQsVSk7cmV0dXJuIHhvKG0sWCksKCk9PkkuY3JlYXRlVk5vZGUoImRpdiIse3JlZjokLGNsYXNzOiJ1bmktY2hlY2tib3gtZ3JvdXAifSxbUi5kZWZhdWx0JiZSLmRlZmF1bHQoKV0pfX0pO2Z1bmN0aW9uIHhvKG0sUil7bGV0IFU9W10sJD0oKT0+VS5yZWR1Y2UoKEosdGUpPT4odGUudmFsdWUuY2hlY2tib3hDaGVja2VkJiZKLnB1c2godGUudmFsdWUudmFsdWUpLEopLG5ldyBBcnJheSk7SS5wcm92aWRlKEtvLHthZGRGaWVsZChKKXtVLnB1c2goSil9LHJlbW92ZUZpZWxkKEope1Uuc3BsaWNlKFUuaW5kZXhPZihKKSwxKX0sY2hlY2tib3hDaGFuZ2UoSil7UigiY2hhbmdlIix7dmFsdWU6JCgpfSl9fSk7bGV0IFg9SS5pbmplY3QoTXIsITEpO3JldHVybiBYJiZYLmFkZEZpZWxkKHtzdWJtaXQ6KCk9PntsZXQgSj1bIiIsbnVsbF07cmV0dXJuIG0ubmFtZSE9PSIiJiYoSlswXT1tLm5hbWUsSlsxXT0kKCkpLEp9fSksJH1sZXQgeD17Y2hlY2tlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGlkOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxkaXNhYmxlZDp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIjMDA3YWZmIn0sdmFsdWU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxRPWFyKCJ1Y2ciKSxoZT17bmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LHNlPVt7InVuaS1yYWRpbyI6eyIiOnthbGlnbkl0ZW1zOiJjZW50ZXIiLGZsZXhEaXJlY3Rpb246InJvdyJ9fSwidW5pLXJhZGlvLWlucHV0Ijp7IiI6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixtYXJnaW5SaWdodDoiNSIsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJXaWR0aDoiMSIsYm9yZGVyQ29sb3I6IiNkMWQxZDEiLGJvcmRlclJhZGl1czo1MCx3aWR0aDoiMjIiLGhlaWdodDoiMjIiLG91dGxpbmU6MH19LCJ1bmktcmFkaW8taW5wdXQtaWNvbiI6eyIiOntmb250RmFtaWx5OiJ1bmluY29tcG9uZW50cyIsZm9udFNpemU6IjE0Iixjb2xvcjoiI2ZmZmZmZiJ9fSwidW5pLXJhZGlvLWlucHV0LWRpc2FibGVkIjp7IiI6e2JhY2tncm91bmRDb2xvcjoiI2UxZTFlMSIsYm9yZGVyQ29sb3I6IiNkMWQxZDEiLGNvbG9yOiIjYWRhZGFkIn19LCJ1bmktcmFkaW8tc2xvdCI6eyIiOntmb250U2l6ZToiMTYiLG1hcmdpbkxlZnQ6IjUifX19XSxkZT1JLmRlZmluZUNvbXBvbmVudCh7bmFtZToiUmFkaW8iLHByb3BzOngsc3R5bGVzOnNlLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAobSx7c2xvdHM6Un0pe2xldCBVPUkucmVmKG51bGwpLCQ9SS5yZWYobS5jaGVja2VkKSxYPUkucmVmKG0udmFsdWUpLEo9SS5jb21wdXRlZCgoKT0+e2xldCBjdD1tLmRpc2FibGVkPyIjYWRhZGFkIjptLmNvbG9yO3JldHVybiAkLnZhbHVlP3tiYWNrZ3JvdW5kQ29sb3I6Y3QsYm9yZGVyQ29sb3I6Y3R9Ontib3JkZXJDb2xvcjoiI2QxZDFkMSJ9fSksdGU9KCk9PnskLnZhbHVlPSExfSx7dW5pQ2hlY2tHcm91cDpjZSx1bmlMYWJlbDpwZSxmaWVsZDpQZX09bXQoJCxYLHRlKSxmZT0oY3QsZ3QpPT57bS5kaXNhYmxlZHx8JC52YWx1ZXx8KCQudmFsdWU9ISQudmFsdWUsY2UmJmNlLnJhZGlvQ2hhbmdlKGN0LFBlKSl9O3BlJiYocGUuYWRkSGFuZGxlcihmZSksSS5vbkJlZm9yZVVubW91bnQoKCk9PntwZS5yZW1vdmVIYW5kbGVyKGZlKX0pKSxUcihtLHsibGFiZWwtY2xpY2siOmZlfSksSS53YXRjaChbKCk9Pm0uY2hlY2tlZCwoKT0+bS52YWx1ZV0sKFtjdCxndF0pPT57JC52YWx1ZT1jdCxYLnZhbHVlPWd0fSk7bGV0IHdlPSgpPT57aWYoIVIuZGVmYXVsdClyZXR1cm5bXTtsZXQgY3Q9Ui5kZWZhdWx0KCk7cmV0dXJuIGN0Lmxlbmd0aD09PTEmJmN0WzBdLnR5cGU9PT1UZXh0P1tXbihjdFswXS5jaGlsZHJlbix7Y2xhc3M6InVuaS1yYWRpby1zbG90In0pXTpjdH07cmV0dXJuKCk9PntsZXR7ZGlzYWJsZWQ6Y3R9PW07cmV0dXJuIEkuY3JlYXRlVk5vZGUoImRpdiIsSS5tZXJnZVByb3BzKHtyZWY6VX0se2RhdGFVbmNUeXBlOiJ1bmktcmFkaW8ifSx7b25DbGljazpmZSxjbGFzczoidW5pLXJhZGlvIn0pLFtJLmNyZWF0ZVZOb2RlKCJkaXYiLHtzdHlsZTpKLnZhbHVlLGNsYXNzOlsidW5pLXJhZGlvLWlucHV0Iix7InVuaS1yYWRpby1pbnB1dC1kaXNhYmxlZCI6Y3R9XX0sWyQudmFsdWU/V24oIlx1RUEwOCIse2NsYXNzOiJ1bmktcmFkaW8taW5wdXQtaWNvbiJ9KTpudWxsXSksLi4ud2UoKV0pfX19KTtmdW5jdGlvbiBtdChtLFIsVSl7bGV0ICQ9SS5jb21wdXRlZCh7Z2V0OigpPT4oe3JhZGlvQ2hlY2tlZDpCb29sZWFuKG0udmFsdWUpLHZhbHVlOlIudmFsdWV9KSxzZXQ6KHtyYWRpb0NoZWNrZWQ6cGV9KT0+e20udmFsdWU9cGV9fSksWD17cmVzZXQ6VX0sSj1JLmluamVjdChRLCExKTtKJiZKLmFkZEZpZWxkKCQpO2xldCB0ZT1JLmluamVjdChNciwhMSk7dGUmJnRlLmFkZEZpZWxkKFgpO2xldCBjZT1JLmluamVjdChPciwhMSk7cmV0dXJuIEkub25CZWZvcmVVbm1vdW50KCgpPT57SiYmSi5yZW1vdmVGaWVsZCgkKSx0ZSYmdGUucmVtb3ZlRmllbGQoWCl9KSx7dW5pQ2hlY2tHcm91cDpKLHVuaUZvcm06dGUsdW5pTGFiZWw6Y2UsZmllbGQ6JH19bGV0IEs9SS5kZWZpbmVDb21wb25lbnQoe25hbWU6IlJhZGlvR3JvdXAiLHByb3BzOmhlLGVtaXRzOlsiY2hhbmdlIl0sc2V0dXAobSx7c2xvdHM6UixlbWl0OlV9KXtsZXQgJD1JLnJlZihudWxsKSxYPUduKCQsVSk7cmV0dXJuIHoobSxYKSwoKT0+SS5jcmVhdGVWTm9kZSgiZGl2Iix7cmVmOiR9LFtSLmRlZmF1bHQmJlIuZGVmYXVsdCgpXSl9fSk7ZnVuY3Rpb24geihtLFIpe2xldCBVPVtdO0kub25Nb3VudGVkKCgpPT57Y2UoVS5sZW5ndGgtMSl9KTtsZXQgJD0oKT0+e3ZhciBwZTtyZXR1cm4ocGU9VS5maW5kKFBlPT5QZS52YWx1ZS5yYWRpb0NoZWNrZWQpKT09bnVsbD92b2lkIDA6cGUudmFsdWUudmFsdWV9O0kucHJvdmlkZShRLHthZGRGaWVsZChwZSl7VS5wdXNoKHBlKX0scmVtb3ZlRmllbGQocGUpe1Uuc3BsaWNlKFUuaW5kZXhPZihwZSksMSl9LHJhZGlvQ2hhbmdlKHBlLFBlKXtsZXQgZmU9VS5pbmRleE9mKFBlKTtjZShmZSwhMCksUigiY2hhbmdlIix7dmFsdWU6JCgpfSl9fSk7bGV0IFg9SS5pbmplY3QoTXIsITEpLEo9e3N1Ym1pdDooKT0+e2xldCBwZT1bIiIsbnVsbF07cmV0dXJuIG0ubmFtZSE9PSIiJiYocGVbMF09bS5uYW1lLHBlWzFdPSQoKSkscGV9fTtYJiYoWC5hZGRGaWVsZChKKSxJLm9uQmVmb3JlVW5tb3VudCgoKT0+e1gucmVtb3ZlRmllbGQoSil9KSk7ZnVuY3Rpb24gdGUocGUsUGUpe3BlLnZhbHVlPXtyYWRpb0NoZWNrZWQ6UGUsdmFsdWU6cGUudmFsdWUudmFsdWV9fWZ1bmN0aW9uIGNlKHBlLFBlKXtVLmZvckVhY2goKGZlLHdlKT0+e3dlIT09cGUmJlBlJiZ0ZShVW3dlXSwhMSl9KX1yZXR1cm4gVX1sZXQgaWU9WyJ1LWlucHV0IiwidS10ZXh0YXJlYSJdLHhlPUkuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJGb3JtIixlbWl0czpbInN1Ym1pdCIsInJlc2V0Il0sc2V0dXAoe30se3Nsb3RzOm0sZW1pdDpSfSl7bGV0IFU9SS5yZWYobnVsbCksJD1HbihVLFIpLFg9W10sSjtyZXR1cm4gSS5wcm92aWRlKE1yLHthZGRGaWVsZCh0ZSl7WC5wdXNoKHRlKX0scmVtb3ZlRmllbGQodGUpe1guc3BsaWNlKFguaW5kZXhPZih0ZSksMSl9LHN1Ym1pdCh0ZSl7bGV0IGNlPXt9O0omJkooY2UpO2xldCBwZT1YLnJlZHVjZSgoUGUsZmUpPT57aWYoZmUuc3VibWl0KXtsZXRbd2UsY3RdPWZlLnN1Ym1pdCgpO3dlJiYoUGVbd2VdPWN0KX1yZXR1cm4gUGV9LE9iamVjdC5jcmVhdGUobnVsbCkpO09iamVjdC5hc3NpZ24oY2UscGUpLCQoInN1Ym1pdCIse3ZhbHVlOmNlfSl9LHJlc2V0KHRlKXtKJiZKKCksWC5mb3JFYWNoKGNlPT5jZS5yZXNldCYmY2UucmVzZXQoKSksJCgicmVzZXQiLHRlKX19KSwoKT0+e2xldCB0ZT1tLmRlZmF1bHQmJm0uZGVmYXVsdCgpO3JldHVybiBKPW50KHRlKSxJLmNyZWF0ZVZOb2RlKCJ2aWV3Iix7cmVmOlV9LFt0ZV0pfX19KTtmdW5jdGlvbiBudChtKXtsZXQgUj1TLnJlcXVpcmVNb2R1bGUoInBsdXMiKSxVPSgkLFgpPT57KFh8fG18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEope2llLmluZGV4T2YoU3RyaW5nKEoudHlwZSkpPj0wJiZKLmVsJiZKLmVsLmF0dHImJkouZWwuYXR0ci5uYW1lJiYoJD8kW0ouZWwuYXR0ci5uYW1lXT1SLmdldFZhbHVlKEouZWwubm9kZUlkKTpKLmVsLnNldFZhbHVlKCIiKSksU3QuaXNBcnJheShKLmNoaWxkcmVuKSYmSi5jaGlsZHJlbiYmSi5jaGlsZHJlbi5sZW5ndGgmJlUoJCxKLmNoaWxkcmVuKX0pfTtyZXR1cm4gVX1sZXQgWXQ9e3R5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHNpemU6e3R5cGU6W1N0cmluZyxOdW1iZXJdLGRlZmF1bHQ6MjN9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sVG49e3N1Y2Nlc3M6IiMwOWJiMDciLGluZm86IiMxMGFlZmYiLHdhcm46IiNmNzYyNjAiLHdhaXRpbmc6IiMxMGFlZmYiLHNhZmVfc3VjY2VzczoiIzA5YmIwNyIsc2FmZV93YXJuOiIjZmZiZTAwIixzdWNjZXNzX2NpcmNsZToiIzA5YmIwNyIsc3VjY2Vzc19ub19jaXJjbGU6IiMwOWJiMDciLHdhaXRpbmdfY2lyY2xlOiIjMTBhZWZmIixjaXJjbGU6IiNjOWM5YzkiLGRvd25sb2FkOiIjMDliYjA3IixpbmZvX2NpcmNsZToiIzA5YmIwNyIsY2FuY2VsOiIjZjQzNTMwIixzZWFyY2g6IiNiMmIyYjIiLGNsZWFyOiIjYjJiMmIyIn0sam49e3N1Y2Nlc3M6Ilx1RUEwNiIsaW5mbzoiXHVFQTAzIix3YXJuOiJcdUVBMEIiLHdhaXRpbmc6Ilx1RUEwOSIsc2FmZV9zdWNjZXNzOiJcdUVBMDQiLHNhZmVfd2FybjoiXHVFQTA1IixzdWNjZXNzX2NpcmNsZToiXHVFQTA3IixzdWNjZXNzX25vX2NpcmNsZToiXHVFQTA4Iix3YWl0aW5nX2NpcmNsZToiXHVFQTBBIixjaXJjbGU6Ilx1RUEwMSIsZG93bmxvYWQ6Ilx1RUEwMiIsaW5mb19jaXJjbGU6Ilx1RUEwQyIsY2FuY2VsOiJcdUVBMEQiLHNlYXJjaDoiXHVFQTBFIixjbGVhcjoiXHVFQTBGIn0seHI9W3sidW5pLWljb24iOnsiIjp7Zm9udEZhbWlseToidW5pbmNvbXBvbmVudHMifX19XSxtcj1JLmRlZmluZUNvbXBvbmVudCh7bmFtZToiSWNvbiIscHJvcHM6WXQsc3R5bGVzOnhyLHNldHVwKG0se30pe3JldHVybigpPT5XbihqblttLnR5cGVdLHtjbGFzczoidW5pLWljb24iLHN0eWxlOntjb2xvcjptLmNvbG9yfHxUblttLnR5cGVdLGZvbnRTaXplOm0uc2l6ZX19KX19KSxwbz17aW5kaWNhdG9yRG90czp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHZlcnRpY2FsOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sYXV0b3BsYXk6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxjaXJjdWxhcjp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LGludGVydmFsOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjVlM30sZHVyYXRpb246e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6NTAwfSxjdXJyZW50Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjB9LGluZGljYXRvckNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJyZ2JhKDAsMCwwLC4zKSJ9LGluZGljYXRvckFjdGl2ZUNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIjMDAwMDAwIn0scHJldmlvdXNNYXJnaW46e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG5leHRNYXJnaW46e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGN1cnJlbnRJdGVtSWQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHNraXBIaWRkZW5JdGVtTGF5b3V0Ont0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX0sZGlzcGxheU11bHRpcGxlSXRlbXM6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6MX0sZGlzYWJsZVRvdWNoOnt0eXBlOltCb29sZWFuLFN0cmluZ10sZGVmYXVsdDohMX19LHZvPVMuY29uZmlnLmVudi5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpPT09ImFuZHJvaWQiLEpvPVt7InVuaS1zd2lwZXIiOnsiIjp7cG9zaXRpb246InJlbGF0aXZlIixoZWlnaHQ6IjE1MHB4In19LCJ1bmktc3dpcGVyLXNsaWRlciI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6MCx0b3A6MCxyaWdodDowLGJvdHRvbTowfX0sInVuaS1zd2lwZXItZG90cyI6eyIiOntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6MCxyaWdodDowLGJvdHRvbToiMTAiLGhlaWdodDoiMTAifX19XSxtbz1JLmRlZmluZUNvbXBvbmVudCh7bmFtZToiU3dpcGVyIixwcm9wczpwbyxzdHlsZXM6Sm8sZW1pdHM6WyJjaGFuZ2UiLCJ0cmFuc2l0aW9uIiwiYW5pbWF0aW9uZmluaXNoIl0sc2V0dXAobSx7c2xvdHM6UixlbWl0OlV9KXtsZXQgJD1JLnJlZihudWxsKSxYPVtdLEo9R24oJCxVKSx0ZT1ZbihtKSxjZT1Cbih0ZSxtLFgsSik7cmV0dXJuIEkud2F0Y2goWygpPT5tLmN1cnJlbnQsKCk9Pm0uY3VycmVudEl0ZW1JZF0sKFtwZSxQZV0pPT57ZXIodGUsbSxYKX0pLEkub25Nb3VudGVkKCgpPT57ZygoKT0+e05uKCQudmFsdWUpLnRoZW4oKHt3aWR0aDpwZSxoZWlnaHQ6UGV9KT0+e3RlLnN3aXBlcldpZHRoPXBlLHRlLnN3aXBlckhlaWdodD1QZX0pfSw1MCl9KSwoKT0+e2xldCBwZT1SLmRlZmF1bHQmJlIuZGVmYXVsdCgpLHtpbmRpY2F0b3JTdHlsZTpQZSxjdXJyZW50U3luYzpmZX09dGU7cmV0dXJuIFg9aWkocGUpLEkuY3JlYXRlVk5vZGUoImRpdiIse3JlZjokLGNsYXNzOiJ1bmktc3dpcGVyIn0sW0kuY3JlYXRlVk5vZGUoInNsaWRlciIsSS5tZXJnZVByb3BzKHtjbGFzczoidW5pLXN3aXBlci1zbGlkZXIifSx7YXV0b1BsYXk6bS5hdXRvcGxheSxpbnRlcnZhbDptLmludGVydmFsLGluZGV4OmZlLGtlZXBJbmRleDohMCxzaG93SW5kaWNhdG9yczptLmluZGljYXRvckRvdHMsaW5maW5pdGU6bS5jaXJjdWxhcix2ZXJ0aWNhbDptLnZlcnRpY2FsLHNjcm9sbGFibGU6IW0uZGlzYWJsZVRvdWNofSxjZSksW1gsSS5jcmVhdGVWTm9kZSgiaW5kaWNhdG9yIix7Y2xhc3M6InVuaS1zd2lwZXItZG90cyIsc3R5bGU6UGV9LG51bGwpXSldKX19fSk7ZnVuY3Rpb24gWW4obSl7bGV0IFI9SS5yZWYoMCksVT1JLnJlZigwKSwkPUkucmVmKG0uY3VycmVudCksWD1JLnJlZigiYXV0b3BsYXkiKSxKPUkuY29tcHV0ZWQoKCk9Pih7aXRlbUNvbG9yOm0uaW5kaWNhdG9yQ29sb3IsaXRlbVNlbGVjdGVkQ29sb3I6bS5pbmRpY2F0b3JBY3RpdmVDb2xvcixpdGVtU2l6ZTo4LG9wYWNpdHk6bS5pbmRpY2F0b3JEb3RzPzE6MH0pKTtyZXR1cm4gSS5yZWFjdGl2ZSh7c3dpcGVyV2lkdGg6Uixzd2lwZXJIZWlnaHQ6VSxpbmRpY2F0b3JTdHlsZTpKLGN1cnJlbnRTeW5jOiQsY3VycmVudENoYW5nZVNvdXJjZTpYfSl9ZnVuY3Rpb24gQm4obSxSLFUsJCl7bGV0IFg9MCxKPWZlPT57bGV0IHdlPWZlLmRldGFpbCxjdD1SLnZlcnRpY2FsLGd0PShjdD93ZS5vZmZzZXRZUmF0aW86d2Uub2Zmc2V0WFJhdGlvKXx8MDtpZigoZmUuZHJhZ3x8ZmUuZHJhZykmJihtLmN1cnJlbnRDaGFuZ2VTb3VyY2U9InRvdWNoIiksZ3Q9PT0wKXtsZXQgJHQ9TWF0aC5hYnMoWCk7aWYoJHQ9PT0xKXJldHVybjskdD4uNSYmKGd0PTEpfVg9Z3QsJCgidHJhbnNpdGlvbiIse2R4OmN0PzA6LW0uc3dpcGVyV2lkdGgqZ3QsZHk6Y3Q/LW0uc3dpcGVySGVpZ2h0Kmd0OjB9KX0sdGU9ZmU9PntsZXQgd2U9KCk9PnskKCJhbmltYXRpb25maW5pc2giLHBlKCkpLG0uY3VycmVudENoYW5nZVNvdXJjZT0iYXV0b3BsYXkifTt2bz93ZSgpOmcod2UsNTApfSxjZT1mZT0+e1N0LmlzU3RyaW5nKGZlLmRldGFpbC5zb3VyY2UpJiYobS5jdXJyZW50Q2hhbmdlU291cmNlPWZlLmRldGFpbC5zb3VyY2UpLG0uY3VycmVudFN5bmM9ZmUuZGV0YWlsLmluZGV4LFg9MH07ZnVuY3Rpb24gcGUoKXtsZXQgZmU9TnVtYmVyKG0uY3VycmVudFN5bmMpLHdlPVVbZmVdfHx7fSxjdD13ZS5jb21wb25lbnRJbnN0YW5jZSYmd2UuY29tcG9uZW50SW5zdGFuY2UuaXRlbUlkfHwiIjtyZXR1cm57Y3VycmVudDpmZSxjdXJyZW50SXRlbUlkOmN0LHNvdXJjZTptLmN1cnJlbnRDaGFuZ2VTb3VyY2V9fXJldHVybiBJLndhdGNoKCgpPT5tLmN1cnJlbnRTeW5jLGZlPT57JCgiY2hhbmdlIixwZSgpKX0pLHtvblNjcm9sbDpKLG9uU2Nyb2xsZW5kOnRlLG9uQ2hhbmdlOmNlfX1mdW5jdGlvbiBlcihtLFIsVSl7bGV0ICQ9LTE7aWYoUi5jdXJyZW50SXRlbUlkKWZvcihsZXQgWD0wLEo9VTtYPEoubGVuZ3RoO1grKyl7bGV0IHRlPUpbWF0uY29tcG9uZW50SW5zdGFuY2U7aWYodGUmJnRlLml0ZW1JZD09PVIuY3VycmVudEl0ZW1JZCl7JD1YO2JyZWFrfX0kPDAmJigkPU1hdGgucm91bmQoTnVtYmVyKFIuY3VycmVudCkpfHwwKSwkPSQ8MD8wOiQsbS5jdXJyZW50U3luYyE9PSQmJihtLmN1cnJlbnRDaGFuZ2VTb3VyY2U9IiIsbS5jdXJyZW50U3luYz0kKX1sZXQgU2k9e2l0ZW1JZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn19LGlzPUkuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJTd2lwZXJJdGVtIixwcm9wczpTaSxzZXR1cChtLHtzbG90czpSfSl7cmV0dXJuKCk9PkkuY3JlYXRlVk5vZGUoImRpdiIse2NsYXNzOiJ1bmktc3dpcGVyLWl0ZW0iLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6MCx0b3A6MCxyaWdodDowLGJvdHRvbTowLG92ZXJmbG93OiJoaWRkZW4ifX0sW1IuZGVmYXVsdCYmUi5kZWZhdWx0KCldKX19KTt2YXIgZmE9L148KFstQS1aYS16MC05X10rKSgoPzpccytbYS16QS1aXzpdWy1hLXpBLVowLTlfOi5dKig/OlxzKj1ccyooPzooPzoiW14iXSoiKXwoPzonW14nXSonKXxbXj5cc10rKSk/KSopXHMqKFwvPyk+Lyxfcj0vXjxcLyhbLUEtWmEtejAtOV9dKylbXj5dKj4vLFBhPS8oW2EtekEtWl86XVstYS16QS1aMC05XzouXSopKD86XHMqPVxzKig/Oig/OiIoKD86XFwufFteIl0pKikiKXwoPzonKCg/OlxcLnxbXiddKSopJyl8KFtePlxzXSspKSk/L2csJGE9Qm8oImFyZWEsYmFzZSxiYXNlZm9udCxicixjb2wsZnJhbWUsaHIsaW1nLGlucHV0LGxpbmssbWV0YSxwYXJhbSxlbWJlZCxjb21tYW5kLGtleWdlbixzb3VyY2UsdHJhY2ssd2JyIiksVWE9Qm8oImEsYWRkcmVzcyxhcnRpY2xlLGFwcGxldCxhc2lkZSxhdWRpbyxibG9ja3F1b3RlLGJ1dHRvbixjYW52YXMsY2VudGVyLGRkLGRlbCxkaXIsZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLGZyYW1lc2V0LGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaWZyYW1lLGlzaW5kZXgsbGksbWFwLG1lbnUsbm9mcmFtZXMsbm9zY3JpcHQsb2JqZWN0LG9sLG91dHB1dCxwLHByZSxzZWN0aW9uLHNjcmlwdCx0YWJsZSx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0cix1bCx2aWRlbyIpLEhhPUJvKCJhYmJyLGFjcm9ueW0sYXBwbGV0LGIsYmFzZWZvbnQsYmRvLGJpZyxicixidXR0b24sY2l0ZSxjb2RlLGRlbCxkZm4sZW0sZm9udCxpLGlmcmFtZSxpbWcsaW5wdXQsaW5zLGtiZCxsYWJlbCxtYXAsb2JqZWN0LHEscyxzYW1wLHNjcmlwdCxzZWxlY3Qsc21hbGwsc3BhbixzdHJpa2Usc3Ryb25nLHN1YixzdXAsdGV4dGFyZWEsdHQsdSx2YXIiKSxqYT1CbygiY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9ucyxwLHRkLHRmb290LHRoLHRoZWFkLHRyIiksZGE9Qm8oImNoZWNrZWQsY29tcGFjdCxkZWNsYXJlLGRlZmVyLGRpc2FibGVkLGlzbWFwLG11bHRpcGxlLG5vaHJlZixub3Jlc2l6ZSxub3NoYWRlLG5vd3JhcCxyZWFkb25seSxzZWxlY3RlZCIpLElhPUJvKCJzY3JpcHQsc3R5bGUiKTtmdW5jdGlvbiBMbihtLFIpe3ZhciBVLCQsWCxKPVtdLHRlPW07Zm9yKEoubGFzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzW3RoaXMubGVuZ3RoLTFdfTttOyl7aWYoJD0hMCwhSi5sYXN0KCl8fCFJYVtKLmxhc3QoKV0pe2lmKG0uaW5kZXhPZigiPCEtLSIpPT0wPyhVPW0uaW5kZXhPZigiLS0+IiksVT49MCYmKFIuY29tbWVudCYmUi5jb21tZW50KG0uc3Vic3RyaW5nKDQsVSkpLG09bS5zdWJzdHJpbmcoVSszKSwkPSExKSk6bS5pbmRleE9mKCI8LyIpPT0wPyhYPW0ubWF0Y2goX3IpLFgmJihtPW0uc3Vic3RyaW5nKFhbMF0ubGVuZ3RoKSxYWzBdLnJlcGxhY2UoX3IsUGUpLCQ9ITEpKTptLmluZGV4T2YoIjwiKT09MCYmKFg9bS5tYXRjaChmYSksWCYmKG09bS5zdWJzdHJpbmcoWFswXS5sZW5ndGgpLFhbMF0ucmVwbGFjZShmYSxwZSksJD0hMSkpLCQpe1U9bS5pbmRleE9mKCI8Iik7dmFyIGNlPVU8MD9tOm0uc3Vic3RyaW5nKDAsVSk7bT1VPDA/IiI6bS5zdWJzdHJpbmcoVSksUi5jaGFycyYmUi5jaGFycyhjZSl9fWVsc2UgbT1tLnJlcGxhY2UobmV3IFJlZ0V4cCgiKFtcXHNcXFNdKj8pPC8iK0oubGFzdCgpKyJbXj5dKj4iKSxmdW5jdGlvbihmZSx3ZSl7cmV0dXJuIHdlPXdlLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+fDwhXFtDREFUQVxbKFtcc1xTXSo/KV1dPi9nLCIkMSQyIiksUi5jaGFycyYmUi5jaGFycyh3ZSksIiJ9KSxQZSgiIixKLmxhc3QoKSk7aWYobT09dGUpdGhyb3ciUGFyc2UgRXJyb3I6ICIrbTt0ZT1tfVBlKCk7ZnVuY3Rpb24gcGUoZmUsd2UsY3QsZ3Qpe2lmKHdlPXdlLnRvTG93ZXJDYXNlKCksVWFbd2VdKWZvcig7Si5sYXN0KCkmJkhhW0oubGFzdCgpXTspUGUoIiIsSi5sYXN0KCkpO2lmKGphW3dlXSYmSi5sYXN0KCk9PXdlJiZQZSgiIix3ZSksZ3Q9JGFbd2VdfHwhIWd0LGd0fHxKLnB1c2god2UpLFIuc3RhcnQpe3ZhciAkdD1bXTtjdC5yZXBsYWNlKFBhLGZ1bmN0aW9uKEV0LGplKXt2YXIgQnQ9YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTphcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOmFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06ZGFbamVdP2plOiIiOyR0LnB1c2goe25hbWU6amUsdmFsdWU6QnQsZXNjYXBlZDpCdC5yZXBsYWNlKC8oXnxbXlxcXSkiL2csJyQxXFwiJyl9KX0pLFIuc3RhcnQmJlIuc3RhcnQod2UsJHQsZ3QpfX1mdW5jdGlvbiBQZShmZSx3ZSl7aWYod2UpZm9yKHZhciBjdD1KLmxlbmd0aC0xO2N0Pj0wJiZKW2N0XSE9d2U7Y3QtLSk7ZWxzZSB2YXIgY3Q9MDtpZihjdD49MCl7Zm9yKHZhciBndD1KLmxlbmd0aC0xO2d0Pj1jdDtndC0tKVIuZW5kJiZSLmVuZChKW2d0XSk7Si5sZW5ndGg9Y3R9fX1mdW5jdGlvbiBCbyhtKXtmb3IodmFyIFI9e30sVT1tLnNwbGl0KCIsIiksJD0wOyQ8VS5sZW5ndGg7JCsrKVJbVVskXV09ITA7cmV0dXJuIFJ9ZnVuY3Rpb24gWm8obSl7cmV0dXJuIG0ucmVwbGFjZSgvPFw/eG1sLipcPz5cbi8sIiIpLnJlcGxhY2UoLzwhZG9jdHlwZS4qPlxuLywiIikucmVwbGFjZSgvPCFET0NUWVBFLio+XG4vLCIiKX1mdW5jdGlvbiBqaShtKXtyZXR1cm4gbS5yZWR1Y2UoZnVuY3Rpb24oUixVKXtsZXQgJD1VLnZhbHVlLFg9VS5uYW1lO3JldHVybiAkLm1hdGNoKC8gLykmJlsic3R5bGUiLCJzcmMiXS5pbmRleE9mKFgpPT09LTEmJigkPSQuc3BsaXQoIiAiKSksUltYXT9BcnJheS5pc0FycmF5KFJbWF0pP1JbWF0ucHVzaCgkKTpSW1hdPVtSW1hdLCRdOlJbWF09JCxSfSx7fSl9ZnVuY3Rpb24gb3MobSl7bT1abyhtKTtsZXQgUj1bXSxVPXtub2RlOiJyb290IixjaGlsZHJlbjpbXX07cmV0dXJuIExuKG0se3N0YXJ0OmZ1bmN0aW9uKCQsWCxKKXtsZXQgdGU9e25hbWU6JH07aWYoWC5sZW5ndGghPT0wJiYodGUuYXR0cnM9amkoWCkpLEope2xldCBjZT1SWzBdfHxVO2NlLmNoaWxkcmVufHwoY2UuY2hpbGRyZW49W10pLGNlLmNoaWxkcmVuLnB1c2godGUpfWVsc2UgUi51bnNoaWZ0KHRlKX0sZW5kOmZ1bmN0aW9uKCQpe2xldCBYPVIuc2hpZnQoKTtpZihYLm5hbWUhPT0kJiZjb25zb2xlLmVycm9yKCJpbnZhbGlkIHN0YXRlOiBtaXNtYXRjaCBlbmQgdGFnIiksUi5sZW5ndGg9PT0wKVUuY2hpbGRyZW4ucHVzaChYKTtlbHNle2xldCBKPVJbMF07Si5jaGlsZHJlbnx8KEouY2hpbGRyZW49W10pLEouY2hpbGRyZW4ucHVzaChYKX19LGNoYXJzOmZ1bmN0aW9uKCQpe2xldCBYPXt0eXBlOiJ0ZXh0Iix0ZXh0OiR9O2lmKFIubGVuZ3RoPT09MClVLmNoaWxkcmVuLnB1c2goWCk7ZWxzZXtsZXQgSj1SWzBdO0ouY2hpbGRyZW58fChKLmNoaWxkcmVuPVtdKSxKLmNoaWxkcmVuLnB1c2goWCl9fSxjb21tZW50OmZ1bmN0aW9uKCQpe2xldCBYPXtub2RlOiJjb21tZW50Iix0ZXh0OiR9LEo9UlswXTtKLmNoaWxkcmVufHwoSi5jaGlsZHJlbj1bXSksSi5jaGlsZHJlbi5wdXNoKFgpfX0pLFUuY2hpbGRyZW59bGV0IGFzPXtub2Rlczp7dHlwZTpbQXJyYXksU3RyaW5nXSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuW119fX0sTG89MTYsc3M9SS5kZWZpbmVDb21wb25lbnQoe25hbWU6IlJpY2hUZXh0Iixwcm9wczphcyxzZXR1cChtKXtsZXQgUj1JLmdldEN1cnJlbnRJbnN0YW5jZSgpO3JldHVybigpPT57bGV0IFU9bS5ub2RlcztyZXR1cm4gU3QuaXNTdHJpbmcoVSkmJihVPW9zKFUpKSxJLmNyZWF0ZVZOb2RlKCJ1LXJpY2gtdGV4dCIse3ZhbHVlOmlvKFV8fFtdLFIucm9vdCx7ZGVmYXVsdEZvbnRTaXplOkxvfSl9LG51bGwpfX19KTtmdW5jdGlvbiBpbyhtLFIsVSl7bGV0ICQ9WyJzcGFuIiwiYSIsImltYWdlIiwiaW1nIl0sWD17YmxvY2txdW90ZTp3ZSxicjpFdCxkaXY6d2UsZGw6d2UsaDE6Z3QoMiksaDI6Z3QoMS41KSxoMzpndCgxLjE3KSxoNDpndCgxKSxoNTpndCguODMpLGg2Omd0KC42NyksaHI6d2Usb2w6d2UscDp3ZSxzdHJvbmc6JHQsdGFibGU6d2UsdGJvZHk6d2UsdGZvb3Q6d2UsdGhlYWQ6d2UsdWw6d2V9LEo9LyYoYW1wfGd0fGx0fG5ic3B8cXVvdHxhcG9zKTsvZyx0ZT17YW1wOiImIixndDoiPiIsbHQ6IjwiLG5ic3A6IiAiLHF1b3Q6JyInLGFwb3M6IicifSxjZT17dHlwZToic3BhbiIsX190eXBlOiJicmVhayIsYXR0cjp7dmFsdWU6YApgfX0scGU9e19fYmxvY2s6ITAsX19icmVhazohMCxjaGlsZHJlbjpbXX0sUGU9bnVsbDtmdW5jdGlvbiBmZShodCl7bGV0IFp0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoaHQuYXR0cnMpe2xldCBSbj0oaHQuYXR0cnMuY2xhc3N8fCIiKS5zcGxpdCgiICIpO09iamVjdC5hc3NpZ24oWnQsSS5wYXJzZUNsYXNzTGlzdChSbixSKSx1byhodC5hdHRycy5zdHlsZXx8IiIpKX1pZihodC5uYW1lPT09ImltZyJ8fGh0Lm5hbWU9PT0iaW1hZ2UiKXtsZXQgUm49aHQuYXR0cnM7WnQud2lkdGg9WnQud2lkdGh8fFJuLndpZHRoLFp0LmhlaWdodD1adC5oZWlnaHR8fFJuLmhlaWdodH1yZXR1cm4gWnR9ZnVuY3Rpb24gd2UoaHQpe3JldHVybiBodC5fX2Jsb2NrPSEwLGh0fWZ1bmN0aW9uIGN0KGh0LFp0KXtyZXR1cm4gaHQuc3R5bGUmJiFodC5zdHlsZS5mb250U2l6ZSYmKGh0LnN0eWxlLmZvbnRTaXplPVUuZGVmYXVsdEZvbnRTaXplKlp0KSx3ZSgkdChodCkpfWZ1bmN0aW9uIGd0KGh0KXtyZXR1cm4gZnVuY3Rpb24oWnQpe3JldHVybiBjdChadCxodCl9fWZ1bmN0aW9uICR0KGh0KXtyZXR1cm4gaHQuc3R5bGUmJiFodC5zdHlsZS5mb250V2VpZ2h0JiYoaHQuc3R5bGUuZm9udFdlaWdodD0iYm9sZCIpLGh0fWZ1bmN0aW9uIEV0KGh0KXtyZXR1cm4gaHQuX192YWx1ZT0iICIsd2UoaHQpfWZ1bmN0aW9uIGplKGh0KXtyZXR1cm4gaHQucmVwbGFjZShKLGZ1bmN0aW9uKFp0LFJuKXtyZXR1cm4gdGVbUm5dfSl9ZnVuY3Rpb24gQnQoaHQpe2xldCBadD0oaHQubmFtZXx8IiIpLnRvTG93ZXJDYXNlKCksUm49WnQsR3Q9WFtadF07JC5pbmRleE9mKFp0KT09PS0xJiYoWnQ9InNwYW4iKSxadD09PSJpbWciJiYoWnQ9ImltYWdlIik7bGV0IFV0PXt0eXBlOlp0LF9fdHlwZTpSbixhdHRyOk9iamVjdC5jcmVhdGUobnVsbCl9O3JldHVybihodC50eXBlPT09InRleHQifHxodC50ZXh0KSYmKFV0Ll9fdmFsdWU9VXQuYXR0ci52YWx1ZT1qZSgoaHQudGV4dHx8IiIpLnRyaW0oKSkpLGh0LmF0dHJzJiZPYmplY3Qua2V5cyhodC5hdHRycykuZm9yRWFjaChGdD0+e0Z0IT09ImNsYXNzIiYmRnQhPT0ic3R5bGUiJiYoVXQuYXR0cltGdF09aHQuYXR0cnNbRnRdKX0pLFV0LnN0eWxlPWZlKGh0KSxHdCYmR3QoVXQpLChwZS5fX2Jsb2NrfHxVdC5fX2Jsb2NrKSYmKFBlfHwocGUuY2hpbGRyZW4ucHVzaChjZSksUGU9W3BlLGNlXSkpLHBlPVV0LChwZS5fX3ZhbHVlfHxwZS50eXBlPT09ImltYWdlIiYmcGUuYXR0ci5zcmMpJiYoUGU9bnVsbCksVXQuY2hpbGRyZW49Y24oaHQuY2hpbGRyZW4pLHBlPVV0LHBlLl9fYmxvY2smJnBlLnN0eWxlLmhlaWdodCYmIS9eMChweCk/JC8udGVzdChwZS5zdHlsZS5oZWlnaHQpJiYoUGU9bnVsbCksVXR9ZnVuY3Rpb24gY24oaHQpe3JldHVybiBTdC5pc0FycmF5KGh0KT9odC5tYXAoWnQ9PkJ0KFp0KSk6W119bGV0IFd0PWNuKG0pO2lmKFBlKXtsZXRbaHQsWnRdPVBlLFJuPWh0LmNoaWxkcmVuLEd0PVJuLmluZGV4T2YoWnQpO1JuLnNwbGljZShHdCwxKX1yZXR1cm4gV3R9bGV0IHNpPXt9O2Z1bmN0aW9uIHdpKG0sUixVKXtsZXR7YWRwaWQ6JCx3aWR0aDpYfT1tLEo9JCsiLSIrWCx0ZT1zaVtKXTtpZih0ZSYmdGUubGVuZ3RoPjApe1IodGUuc3BsaWNlKDAsMSlbMF0pO3JldHVybn1kLmFkLmdldEFkcyhtLGNlPT57bGV0IHBlPWNlLmFkcztSKHBlLnNwbGljZSgwLDEpWzBdKSxzaVtKXT10ZT90ZS5jb25jYXQocGUpOnBlfSxjZT0+e1Uoe2VyckNvZGU6Y2UuY29kZSxlcnJNc2c6Y2UubWVzc2FnZX0pfSl9bGV0IHppPXthZHBpZDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDoiIn0sZGF0YTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sd2lkdGg6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGNoYW5uZWw6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxsaT17bG9hZDoibG9hZCIsY2xvc2U6ImNsb3NlIixlcnJvcjoiZXJyb3IiLGRvd25sb2FkY2hhbmdlOiJkb3dubG9hZGNoYW5nZSJ9LGNyPUkuZGVmaW5lQ29tcG9uZW50KHtuYW1lOiJBZCIscHJvcHM6emksZW1pdHM6W2xpLmxvYWQsbGkuY2xvc2UsbGkuZXJyb3IsbGkuZG93bmxvYWRjaGFuZ2VdLHNldHVwKG0se2VtaXQ6Un0pe2xldCBVPUkucmVmKG51bGwpLCQ9R24oVSxSKSxYPW9yKCk7SS53YXRjaCgoKT0+bS5hZHBpZCx0ZT0+e3phKFgsbSwkKX0pLEkud2F0Y2goKCk9Pm0uZGF0YSx0ZT0+e1guZGF0YT10ZX0pLEkub25Nb3VudGVkKCgpPT57ZygoKT0+e05uKFUudmFsdWUpLnRoZW4oKHt3aWR0aDp0ZX0pPT57WC53aWR0aD10ZT09PTA/LTE6dGUsemEoWCxtLCQpfSl9LDUwKX0pO2xldCBKPXtvbkRvd25sb2FkY2hhbmdlKHRlKXskKGxpLmRvd25sb2FkY2hhbmdlLHRlKX0sb25EaXNsaWtlKHRlKXskKGxpLmNsb3NlLHRlKX19O3JldHVybigpPT5JLmNyZWF0ZVZOb2RlKCJ1LWFkIixJLm1lcmdlUHJvcHMoe3JlZjpVfSx7ZGF0YTpYLmRhdGEscmVuZGVyaW5nOiEwfSxKKSxudWxsKX19KTtmdW5jdGlvbiBvcihtKXtsZXQgUj1JLnJlZigiIik7cmV0dXJuIEkucmVhY3RpdmUoe3dpZHRoOjAsZGF0YTpSfSl9ZnVuY3Rpb24gemEobSxSLFUpe3dpKHthZHBpZDpSLmFkcGlkLHdpZHRoOm0ud2lkdGh9LCQ9PnttLmRhdGE9JCxVKGxpLmxvYWQse30pfSwkPT57VShsaS5lcnJvciwkKX0pfWxldCBXYT17fTtmdW5jdGlvbiBXaShtLFIsVSwkLFgpe2xldCBKPW0rIi0iK1IsdGU9V2FbSl07aWYodGUmJnRlLmxlbmd0aD4wKXskKHRlLnNwbGljZSgwLDEpWzBdKTtyZXR1cm59ZC5hZC5nZXREcmF3QWRzKHthZHBpZDpTdHJpbmcobSksY291bnQ6Myx3aWR0aDpSfSxjZT0+e2xldCBwZT1jZS5hZHM7JChwZS5zcGxpY2UoMCwxKVswXSksV2FbSl09dGU/dGUuY29uY2F0KHBlKTpwZX0sY2U9PntYKHtlcnJDb2RlOmNlLmNvZGUsZXJyTXNnOmNlLm1lc3NhZ2V9KX0pfWxldCBvbz17YWRwaWQ6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6IiJ9LGRhdGE6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHdpZHRoOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sYW89e2xvYWQ6ImxvYWQiLGNsb3NlOiJjbG9zZSIsZXJyb3I6ImVycm9yIn0sbHM9SS5kZWZpbmVDb21wb25lbnQoe25hbWU6IkFkRHJhdyIscHJvcHM6b28sZW1pdHM6W2FvLmxvYWQsYW8uY2xvc2UsYW8uZXJyb3JdLHNldHVwKG0se2VtaXQ6Un0pe2xldCBVPUkucmVmKG51bGwpLCQ9R24oVSxSKSxYPWhhKCk7SS53YXRjaCgoKT0+bS5hZHBpZCx0ZT0+e01vKFgsbSwkKX0pLEkud2F0Y2goKCk9Pm0uZGF0YSx0ZT0+e1guZGF0YT10ZX0pO2xldCBKPXtvbkRpc2xpa2UodGUpeyQoYW8uY2xvc2UsdGUpfX07cmV0dXJuIEkub25Nb3VudGVkKCgpPT57ZygoKT0+e05uKFUudmFsdWUpLnRoZW4oKHt3aWR0aDp0ZSxoZWlnaHQ6Y2V9KT0+e1gud2lkdGg9dGU9PT0wPy0xOnRlLFguaGVpZ2h0PWNlPT09MD8tMTpjZSxNbyhYLG0sJCl9KX0sNTApfSksKCk9PntsZXR7ZGF0YTp0ZX09WDtyZXR1cm4gSS5jcmVhdGVWTm9kZSgidS1hZC1kcmF3IixJLm1lcmdlUHJvcHMoe3JlZjpVfSx7ZGF0YTp0ZSxyZW5kZXJpbmc6ITB9LEopLG51bGwpfX19KTtmdW5jdGlvbiBoYShtKXtsZXQgUj1JLnJlZigiIik7cmV0dXJuIEkucmVhY3RpdmUoe3dpZHRoOjAsaGVpZ2h0OjAsZGF0YTpSfSl9ZnVuY3Rpb24gTW8obSxSLFUpe1dpKFIuYWRwaWQsbS53aWR0aCxtLmhlaWdodCwkPT57bS5kYXRhPSQsVShhby5sb2FkLHt9KX0sJD0+e1UoYW8uZXJyb3IsJCl9KX1yZXR1cm57TmF2aWdhdG9yOnZpLExhYmVsOmRuLEJ1dHRvbjpUbyxNb3ZhYmxlQXJlYTpocixNb3ZhYmxlVmlldzpncixQcm9ncmVzczpacixQaWNrZXJWaWV3OnByLFBpY2tlclZpZXdDb2x1bW46JGksUGlja2VyOlpuLFVTbGlkZXI6UW4sU3dpdGNoOmpyLENoZWNrYm94OlJvLENoZWNrYm94R3JvdXA6SGksUmFkaW86ZGUsUmFkaW9Hcm91cDpLLEZvcm06eGUsSWNvbjptcixTd2lwZXI6bW8sU3dpcGVySXRlbTppcyxSaWNoVGV4dDpzcyxBZDpjcixBZERyYXc6bHN9fShrLFdlLEx0KTtyZXR1cm4geHR9ZnVuY3Rpb24gdUkoZyxzKXtsZXR7VW5pU2hhcmVkOnAsVnVlOnd9PXM7ZnVuY3Rpb24gayhkLEUsQil7bGV0IFdlPWQuJFtFXTtyZXR1cm4gV2UmJnAuaW52b2tlQXJyYXlGbnMoV2UsQil9bGV0IFM9Zy5zZXR1cDtyZXR1cm4gZy5pbmhlcml0QXR0cnM9ITEsZy5zZXR1cD0oZCxFKT0+e2xldHthdHRyczp7X19wYWdlSWQ6QixfX3BhZ2VQYXRoOldlLF9fcGFnZVF1ZXJ5Okx0fX09RSxlbj1zLl9fdW5pUm91dGVzLmZpbmQoU3Q9PlN0Lm1ldGEucm91dGU9PT1XZSkseHQ9dy5nZXRDdXJyZW50SW5zdGFuY2UoKSxJPXh0LnByb3h5O2lmKGVuJiYoZW4ubWV0YS5pc1N1Yk5WdWV8fGZJKEkscyx7X19wYWdlSWQ6QixfX3BhZ2VQYXRoOldlfSkpLHcub25Nb3VudGVkKCgpPT57dy5uZXh0VGljaygoKT0+e2soSSxwLk9OX1JFQURZKX0pLHh0Lm9uUGFnZVNjcm9sbCYmSS4kZWwuYWRkRXZlbnQoInNjcm9sbCIsU3Q9PntTdC5zY3JvbGxUb3A9U3QuZGV0YWlsLnNjcm9sbFRvcCxrKEkscC5PTl9QQUdFX1NDUk9MTCxTdCl9KSx4dC5vblJlYWNoQm90dG9tJiZJLiRlbC5hZGRFdmVudCgic2Nyb2xsdG9sb3dlciIsU3Q9PntrKEkscC5PTl9SRUFDSF9CT1RUT00sU3QpfSl9KSx3Lm9uQmVmb3JlVW5tb3VudCgoKT0+e2soSSxwLk9OX1VOTE9BRCl9KSxTKXJldHVybiBTKEx0LEUpfSxnfWZ1bmN0aW9uIGZJKGcscyx7X19wYWdlSWQ6cCxfX3BhZ2VQYXRoOnd9KXtsZXQgaz1zLmdldEN1cnJlbnRQYWdlcygpLFM9a1trLmxlbmd0aC0xXTtpZihTJiZTLl9fc2V0dXApUy5fX3NldHVwKGcsUyk7ZWxzZXtsZXQgZD0iLyIrdztyZXR1cm4gcy5fX3JlZ2lzdGVyUGFnZSh7dXJsOmQscGF0aDpkLHF1ZXJ5Ont9LG9wZW5UeXBlOiJsYXVuY2giLHdlYnZpZXc6e2lkOnArIiJ9LG52dWVQYWdlVm06Z30pfX12YXIgQmw9e30sUHA7ZnVuY3Rpb24gSXAoZyl7UHA9Z312YXIgbnU7ZnVuY3Rpb24gZEkoZyl7aWYobnUpcmV0dXJuIG51O2xldCBzPW5ldyBnLkVtaXR0ZXI7cmV0dXJuIG51PXtvbihwLHcpe3JldHVybiBzLm9uKHAsdyl9LG9uY2UocCx3KXtyZXR1cm4gcy5vbmNlKHAsdyl9LG9mZihwLHcpe3JldHVybiBzLm9mZihwLHcpfSxlbWl0KHAsLi4udyl7cmV0dXJuIHMuZW1pdChwLC4uLncpfX0sbnV9ZnVuY3Rpb24gaEkoZyl7cmV0dXJuKHMscCx3KT0+e2xldHtudnVlOmt9PXAsUz10dShnLHApO3AuVnVlPVMsQmxbc109e2luc3RhbmNlSWQ6cyxjb25maWc6ay5jb25maWcsZG9jdW1lbnQ6ay5kb2N1bWVudCxkYXRhOnd9O2xldHtjcmVhdGVBcHA6ZH09UztTLmNyZWF0ZVZ1ZUFwcD1TLmNyZWF0ZUFwcD0oRSxCKT0+KHAuX191bmlDb25maWcuc3R5bGVzPUUuc3R5bGVzfHxbXSxkKEUsQikudXNlKGdJLHMscCkpLFMuY3JlYXRlUGFnZUFwcD0oRSxCKT0+e3VJKEUscCk7bGV0IFdlPUIuJHN0b3JlO2RlbGV0ZSBCLiRzdG9yZTtsZXQgTHQ9ZChFLEIpO3JldHVybiBXZSYmTHQudXNlKFdlKSxMdC51c2UodkksUyxzLHApfX19dmFyIGdJPXtpbnN0YWxsKGcscyxwKXtkYyhwKS5pbml0QXBwKGcpLHBJKGcscyxwKX19O2Z1bmN0aW9uIHBJKGcscyxwKXtsZXR7bW91bnQ6d309ZyxrPUJsW3NdO3JldHVybiBnLm1vdW50PVM9PntsZXQgZD1TPT09IiNhcHAiLEU9ay5hcHA9dyhOcChrLmRvY3VtZW50LHtpc1Jvb3Q6ZH0pKTtyZXR1cm4gZCYmcC5fX3JlZ2lzdGVyQXBwKEUpLEV9LGd9dmFyIHZJPXtpbnN0YWxsKGcscyxwLHcpe2xldHt3ZWV4OmsscGx1czpTLEJyb2FkY2FzdENoYW5uZWw6ZCxWdWVTaGFyZWQ6RSxVbmlTaGFyZWQ6QixnZXRDdXJyZW50UGFnZXM6V2Usc2V0VGltZW91dDpMdCxjbGVhclRpbWVvdXQ6ZW4sX191bmlDb25maWc6eHR9PXc7Zy5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kcmVxdWlyZU5hdGl2ZVBsdWdpbj1rLnJlcXVpcmVNb2R1bGU7bGV0IEk9Y0koe3VuaTpQcCxWdWU6cyx3ZWV4OmsscGx1czpTLEJyb2FkY2FzdENoYW5uZWw6ZCxVbmlWaWV3SlNCcmlkZ2U6ZEkoQiksVnVlU2hhcmVkOkUsVW5pU2hhcmVkOkIsZ2V0Q3VycmVudFBhZ2VzOldlLHNldFRpbWVvdXQ6THQsY2xlYXJUaW1lb3V0OmVuLF9fdW5pQ29uZmlnOnh0fSk7T2JqZWN0LmtleXMoSSkuZm9yRWFjaChTdD0+e2cuY29tcG9uZW50KHMuaHlwaGVuYXRlKFN0KSxJW1N0XSl9KSxkYyh3KS5pbml0QXBwKGcpLG1JKGcscCx3KX19O2Z1bmN0aW9uIG1JKGcscyx7bnZ1ZTpwfSl7bGV0e2NvbmZpZzp7Y29tcGlsZXJPcHRpb25zOnd9LG1vdW50Omt9PWc7dy5pc0N1c3RvbUVsZW1lbnQ9ZD0+ISFwLnN1cHBvcnRzKGBAY29tcG9uZW50LyR7ZH1gKTtsZXQgUz1CbFtzXTtyZXR1cm4gZy5tb3VudD1kPT57bGV0IEU9ZD09PSIjcm9vdCIsQj1TLmFwcD1rKE5wKFMuZG9jdW1lbnQse2lzUm9vdDpFfSkpO2lmKEUpdHJ5e3AuZG9jdW1lbnQudGFza0NlbnRlci5zZW5kKCJkb20iLHthY3Rpb246ImNyZWF0ZUZpbmlzaCJ9LFtdKX1jYXRjaChXZSl7fXJldHVybiBCfSxnfWZ1bmN0aW9uIE5wKGcse2lzUm9vdDpzfSl7aWYocylyZXR1cm4gZy5kb2N1bWVudEVsZW1lbnQ7bGV0IHA9Zy5jcmVhdGVDb21tZW50KCJyb290Iik7cmV0dXJuIGcuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHApLHB9ZnVuY3Rpb24ga3AoZyl7bGV0IHM9QmxbZ107aWYocyYmcy5hcHAmJnMuZG9jdW1lbnQpe3RyeXtzLmFwcC4kLmFwcENvbnRleHQuYXBwLnVubW91bnQoKSxzLmRvY3VtZW50LmRlc3Ryb3koKX1jYXRjaChwKXt9ZGVsZXRlIHMuZG9jdW1lbnQsZGVsZXRlIHMuYXBwfWRlbGV0ZSBCbFtnXX1mdW5jdGlvbiBScChnKXtsZXQgcz1CbFtnXTtpZighc3x8IXMuYXBwKXJldHVybiBuZXcgRXJyb3IoYHJlZnJlc2hJbnN0YW5jZTogaW5zdGFuY2UgJHtnfSBub3QgZm91bmQhYCk7cy5kb2N1bWVudC50YXNrQ2VudGVyLnNlbmQoImRvbSIse2FjdGlvbjoicmVmcmVzaEZpbmlzaCJ9LFtdKX1mdW5jdGlvbiBfSShnLHMpe2xldHtVbmlTaGFyZWQ6cCxWdWVTaGFyZWQ6dyxWdWVSZWFjdGl2aXR5Omt9PWc7dmFyIFM9ZnVuY3Rpb24oZCxFLEIsV2UpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBMdChhKXt9ZnVuY3Rpb24gZW4oYSx1KXt9ZnVuY3Rpb24geHQoYSx1LHYseSl7dmFyIFA7dHJ5e1A9eT9hKC4uLnkpOmEoKX1jYXRjaChPKXtTdChPLHUsdil9cmV0dXJuIFB9ZnVuY3Rpb24gSShhLHUsdix5KXtpZihFLmlzRnVuY3Rpb24oYSkpe3ZhciBQPXh0KGEsdSx2LHkpO3JldHVybiBQJiZFLmlzUHJvbWlzZShQKSYmUC5jYXRjaChHPT57U3QoRyx1LHYpfSksUH1mb3IodmFyIE89W10sRj0wO0Y8YS5sZW5ndGg7RisrKU8ucHVzaChJKGFbRl0sdSx2LHkpKTtyZXR1cm4gT31mdW5jdGlvbiBTdChhLHUsdil7aWYodSYmdS52bm9kZSx1KXtmb3IodmFyIHk9dS5wYXJlbnQsUD11LnByb3h5LE89djt5Oyl7dmFyIEY9eS5lYztpZihGKXtmb3IodmFyIEc9MDtHPEYubGVuZ3RoO0crKylpZihGW0ddKGEsUCxPKT09PSExKXJldHVybn15PXkucGFyZW50fXZhciBZPXUuYXBwQ29udGV4dC5jb25maWcuZXJyb3JIYW5kbGVyO2lmKFkpe3h0KFksbnVsbCwxMCxbYSxQLE9dKTtyZXR1cm59fVBuKGEpfWZ1bmN0aW9uIFBuKGEsdSx2KXtjb25zb2xlLmVycm9yKGEpfXZhciBzdD0hMSxXPSExLFo9W10sZm49MCxzbj1bXSxfbj1udWxsLFduPTAscGk9UHJvbWlzZS5yZXNvbHZlKCksdmk9bnVsbDtmdW5jdGlvbiBhcihhKXt2YXIgdT12aXx8cGk7cmV0dXJuIGE/dS50aGVuKHRoaXM/YS5iaW5kKHRoaXMpOmEpOnV9ZnVuY3Rpb24gU3IoYSl7Zm9yKHZhciB1PWZuKzEsdj1aLmxlbmd0aDt1PHY7KXt2YXIgeT11K3Y+Pj4xLFA9b3QoWlt5XSk7UDxhP3U9eSsxOnY9eX1yZXR1cm4gdX1mdW5jdGlvbiBDbihhKXsoIVoubGVuZ3RofHwhWi5pbmNsdWRlcyhhLHN0JiZhLmFsbG93UmVjdXJzZT9mbisxOmZuKSkmJihhLmlkPT1udWxsP1oucHVzaChhKTpaLnNwbGljZShTcihhLmlkKSwwLGEpLHdyKCkpfWZ1bmN0aW9uIHdyKCl7IXN0JiYhVyYmKFc9ITAsdmk9cGkudGhlbih0bikpfWZ1bmN0aW9uIENyKGEpe3ZhciB1PVouaW5kZXhPZihhKTt1PmZuJiZaLnNwbGljZSh1LDEpfWZ1bmN0aW9uIG1pKGEpe0UuaXNBcnJheShhKT9zbi5wdXNoKC4uLmEpOighX258fCFfbi5pbmNsdWRlcyhhLGEuYWxsb3dSZWN1cnNlP1duKzE6V24pKSYmc24ucHVzaChhKSx3cigpfWZ1bmN0aW9uIHJpKGEpe2Zvcih2YXIgdT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06c3Q/Zm4rMTowO3U8Wi5sZW5ndGg7dSsrKXt2YXIgdj1aW3VdO3YmJnYucHJlJiYoWi5zcGxpY2UodSwxKSx1LS0sdigpKX19ZnVuY3Rpb24gVmUoYSl7aWYoc24ubGVuZ3RoKXt2YXIgdT1bLi4ubmV3IFNldChzbildO2lmKHNuLmxlbmd0aD0wLF9uKXtfbi5wdXNoKC4uLnUpO3JldHVybn1mb3IoX249dSxfbi5zb3J0KCh2LHkpPT5vdCh2KS1vdCh5KSksV249MDtXbjxfbi5sZW5ndGg7V24rKylfbltXbl0oKTtfbj1udWxsLFduPTB9fXZhciBvdD1hPT5hLmlkPT1udWxsPzEvMDphLmlkLGJ0PShhLHUpPT57dmFyIHY9b3QoYSktb3QodSk7aWYodj09PTApe2lmKGEucHJlJiYhdS5wcmUpcmV0dXJuLTE7aWYodS5wcmUmJiFhLnByZSlyZXR1cm4gMX1yZXR1cm4gdn07ZnVuY3Rpb24gdG4oYSl7Vz0hMSxzdD0hMCxaLnNvcnQoYnQpO3ZhciB1PUUuTk9PUDt0cnl7Zm9yKGZuPTA7Zm48Wi5sZW5ndGg7Zm4rKyl7dmFyIHY9Wltmbl07diYmdi5hY3RpdmUhPT0hMSYmeHQodixudWxsLDE0KX19ZmluYWxseXtmbj0wLFoubGVuZ3RoPTAsVmUoKSxzdD0hMSx2aT1udWxsLChaLmxlbmd0aHx8c24ubGVuZ3RoKSYmdG4oKX19ZC5kZXZ0b29scz12b2lkIDA7dmFyIFNuPVtdO2Z1bmN0aW9uIEp0KGEsdSl7dmFyIHYseTtpZihkLmRldnRvb2xzPWEsZC5kZXZ0b29scylkLmRldnRvb2xzLmVuYWJsZWQ9ITAsU24uZm9yRWFjaChPPT57dmFye2V2ZW50OkYsYXJnczpHfT1PO3JldHVybiBkLmRldnRvb2xzLmVtaXQoRiwuLi5HKX0pLFNuPVtdO2Vsc2UgaWYodHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5IVE1MRWxlbWVudCYmISgoeT0odj13aW5kb3cubmF2aWdhdG9yKT09PW51bGx8fHY9PT12b2lkIDA/dm9pZCAwOnYudXNlckFnZW50KT09PW51bGx8fHk9PT12b2lkIDA/dm9pZCAwOnkuaW5jbHVkZXMoImpzZG9tIikpKXt2YXIgUD11Ll9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX189dS5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9ffHxbXTtQLnB1c2goTz0+e0p0KE8sdSl9KSxzZXRUaW1lb3V0KCgpPT57ZC5kZXZ0b29sc3x8KHUuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz1udWxsLFNuPVtdKX0sM2UzKX1lbHNlIFNuPVtdfWZ1bmN0aW9uIHJyKGEsdSl7aWYoIWEuaXNVbm1vdW50ZWQpe2Zvcih2YXIgdj1hLnZub2RlLnByb3BzfHxFLkVNUFRZX09CSix5PWFyZ3VtZW50cy5sZW5ndGgsUD1uZXcgQXJyYXkoeT4yP3ktMjowKSxPPTI7Tzx5O08rKylQW08tMl09YXJndW1lbnRzW09dO3ZhciBGPVAsRz11LnN0YXJ0c1dpdGgoInVwZGF0ZToiKSxZPUcmJnUuc2xpY2UoNyk7aWYoWSYmWSBpbiB2KXt2YXIgbGU9IiIuY29uY2F0KFk9PT0ibW9kZWxWYWx1ZSI/Im1vZGVsIjpZLCJNb2RpZmllcnMiKSx7bnVtYmVyOnplLHRyaW06YXR9PXZbbGVdfHxFLkVNUFRZX09CSjthdCYmKEY9UC5tYXAod3Q9PkUuaXNTdHJpbmcod3QpP3d0LnRyaW0oKTp3dCkpLHplJiYoRj1QLm1hcChFLmxvb3NlVG9OdW1iZXIpKX12YXIgZ2UsR2U9dltnZT1FLnRvSGFuZGxlcktleSh1KV18fHZbZ2U9RS50b0hhbmRsZXJLZXkoRS5jYW1lbGl6ZSh1KSldOyFHZSYmRyYmKEdlPXZbZ2U9RS50b0hhbmRsZXJLZXkoRS5oeXBoZW5hdGUodSkpXSksR2UmJkkoR2UsYSw2LEYpO3ZhciBYZT12W2dlKyJPbmNlIl07aWYoWGUpe2lmKCFhLmVtaXR0ZWQpYS5lbWl0dGVkPXt9O2Vsc2UgaWYoYS5lbWl0dGVkW2dlXSlyZXR1cm47YS5lbWl0dGVkW2dlXT0hMCxJKFhlLGEsNixGKX19fWZ1bmN0aW9uIEFyKGEsdSl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLHk9dS5lbWl0c0NhY2hlLFA9eS5nZXQoYSk7aWYoUCE9PXZvaWQgMClyZXR1cm4gUDt2YXIgTz1hLmVtaXRzLEY9e30sRz0hMTtpZighRS5pc0Z1bmN0aW9uKGEpKXt2YXIgWT1sZT0+e3ZhciB6ZT1BcihsZSx1LCEwKTt6ZSYmKEc9ITAsRS5leHRlbmQoRix6ZSkpfTshdiYmdS5taXhpbnMubGVuZ3RoJiZ1Lm1peGlucy5mb3JFYWNoKFkpLGEuZXh0ZW5kcyYmWShhLmV4dGVuZHMpLGEubWl4aW5zJiZhLm1peGlucy5mb3JFYWNoKFkpfXJldHVybiFPJiYhRz8oRS5pc09iamVjdChhKSYmeS5zZXQoYSxudWxsKSxudWxsKTooRS5pc0FycmF5KE8pP08uZm9yRWFjaChsZT0+RltsZV09bnVsbCk6RS5leHRlbmQoRixPKSxFLmlzT2JqZWN0KGEpJiZ5LnNldChhLEYpLEYpfWZ1bmN0aW9uIE9yKGEsdSl7cmV0dXJuIWF8fCFFLmlzT24odSk/ITE6KHU9dS5zbGljZSgyKS5yZXBsYWNlKC9PbmNlJC8sIiIpLEUuaGFzT3duKGEsdVswXS50b0xvd2VyQ2FzZSgpK3Uuc2xpY2UoMSkpfHxFLmhhc093bihhLEUuaHlwaGVuYXRlKHUpKXx8RS5oYXNPd24oYSx1KSl9dmFyIE9uPW51bGwsZG49bnVsbDtmdW5jdGlvbiBUcihhKXt2YXIgdT1PbjtyZXR1cm4gT249YSxkbj1hJiZhLnR5cGUuX19zY29wZUlkfHxudWxsLHV9ZnVuY3Rpb24gX2koYSl7ZG49YX1mdW5jdGlvbiBDbygpe2RuPW51bGx9dmFyIGNhPWE9PkZpO2Z1bmN0aW9uIEZpKGEpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpPbjtpZighdXx8YS5fbilyZXR1cm4gYTt2YXIgdj1mdW5jdGlvbigpe3YuX2QmJiR0KC0xKTt2YXIgeT1Ucih1KSxQO3RyeXtQPWEoLi4uYXJndW1lbnRzKX1maW5hbGx5e1RyKHkpLHYuX2QmJiR0KDEpfXJldHVybiBQfTtyZXR1cm4gdi5fbj0hMCx2Ll9jPSEwLHYuX2Q9ITAsdn1mdW5jdGlvbiBZbygpe31mdW5jdGlvbiBBbyhhKXt2YXJ7dHlwZTp1LHZub2RlOnYscHJveHk6eSx3aXRoUHJveHk6UCxwcm9wczpPLHByb3BzT3B0aW9uczpbRl0sc2xvdHM6RyxhdHRyczpZLGVtaXQ6bGUscmVuZGVyOnplLHJlbmRlckNhY2hlOmF0LGRhdGE6Z2Usc2V0dXBTdGF0ZTpHZSxjdHg6WGUsaW5oZXJpdEF0dHJzOnd0fT1hLGl0LENlLEVlPVRyKGEpO3RyeXtpZih2LnNoYXBlRmxhZyY0KXt2YXIgVGU9UHx8eTtpdD1Nbih6ZS5jYWxsKFRlLFRlLGF0LE8sR2UsZ2UsWGUpKSxDZT1ZfWVsc2V7dmFyIGx0PXU7aXQ9TW4obHQubGVuZ3RoPjE/bHQoTyx7YXR0cnM6WSxzbG90czpHLGVtaXQ6bGV9KTpsdChPLG51bGwpKSxDZT11LnByb3BzP1k6TXIoWSl9fWNhdGNoKGwpe1BlLmxlbmd0aD0wLFN0KGwsYSwxKSxpdD1GdChjZSl9dmFyIE5lPWl0O2lmKENlJiZ3dCE9PSExKXt2YXIgQ3Q9T2JqZWN0LmtleXMoQ2UpLHtzaGFwZUZsYWc6aX09TmU7Q3QubGVuZ3RoJiZpJigxfDYpJiYoRiYmQ3Quc29tZShFLmlzTW9kZWxMaXN0ZW5lcikmJihDZT11YShDZSxGKSksTmU9Y2koTmUsQ2UpKX1yZXR1cm4gdi5kaXJzJiYoTmU9Y2koTmUpLE5lLmRpcnM9TmUuZGlycz9OZS5kaXJzLmNvbmNhdCh2LmRpcnMpOnYuZGlycyksdi50cmFuc2l0aW9uJiYoTmUudHJhbnNpdGlvbj12LnRyYW5zaXRpb24pLGl0PU5lLFRyKEVlKSxpdH1mdW5jdGlvbiBKaShhKXtmb3IodmFyIHUsdj0wO3Y8YS5sZW5ndGg7disrKXt2YXIgeT1hW3ZdO2lmKGNuKHkpKXtpZih5LnR5cGUhPT1jZXx8eS5jaGlsZHJlbj09PSJ2LWlmIil7aWYodSlyZXR1cm47dT15fX1lbHNlIHJldHVybn1yZXR1cm4gdX12YXIgTXI9YT0+e3ZhciB1O2Zvcih2YXIgdiBpbiBhKSh2PT09ImNsYXNzInx8dj09PSJzdHlsZSJ8fEUuaXNPbih2KSkmJigodXx8KHU9e30pKVt2XT1hW3ZdKTtyZXR1cm4gdX0sdWE9KGEsdSk9Pnt2YXIgdj17fTtmb3IodmFyIHkgaW4gYSkoIUUuaXNNb2RlbExpc3RlbmVyKHkpfHwhKHkuc2xpY2UoOSlpbiB1KSkmJih2W3ldPWFbeV0pO3JldHVybiB2fTtmdW5jdGlvbiBPbyhhLHUsdil7dmFye3Byb3BzOnksY2hpbGRyZW46UCxjb21wb25lbnQ6T309YSx7cHJvcHM6RixjaGlsZHJlbjpHLHBhdGNoRmxhZzpZfT11LGxlPU8uZW1pdHNPcHRpb25zO2lmKHUuZGlyc3x8dS50cmFuc2l0aW9uKXJldHVybiEwO2lmKHYmJlk+PTApe2lmKFkmMTAyNClyZXR1cm4hMDtpZihZJjE2KXJldHVybiB5P1RvKHksRixsZSk6ISFGO2lmKFkmOClmb3IodmFyIHplPXUuZHluYW1pY1Byb3BzLGF0PTA7YXQ8emUubGVuZ3RoO2F0Kyspe3ZhciBnZT16ZVthdF07aWYoRltnZV0hPT15W2dlXSYmIU9yKGxlLGdlKSlyZXR1cm4hMH19ZWxzZSByZXR1cm4oUHx8RykmJighR3x8IUcuJHN0YWJsZSk/ITA6eT09PUY/ITE6eT9GP1RvKHksRixsZSk6ITA6ISFGO3JldHVybiExfWZ1bmN0aW9uIFRvKGEsdSx2KXt2YXIgeT1PYmplY3Qua2V5cyh1KTtpZih5Lmxlbmd0aCE9PU9iamVjdC5rZXlzKGEpLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIFA9MDtQPHkubGVuZ3RoO1ArKyl7dmFyIE89eVtQXTtpZih1W09dIT09YVtPXSYmIU9yKHYsTykpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gWmkoYSx1KXtmb3IodmFye3Zub2RlOnYscGFyZW50Onl9PWE7eSYmeS5zdWJUcmVlPT09djspKHY9eS52bm9kZSkuZWw9dSx5PXkucGFyZW50fXZhciBpaT1hPT5hLl9faXNTdXNwZW5zZSxxbz17bmFtZToiU3VzcGVuc2UiLF9faXNTdXNwZW5zZTohMCxwcm9jZXNzKGEsdSx2LHksUCxPLEYsRyxZLGxlKXthPT1udWxsP2hyKHUsdix5LFAsTyxGLEcsWSxsZSk6Zm8oYSx1LHYseSxQLEYsRyxZLGxlKX0saHlkcmF0ZTpYaSxjcmVhdGU6R24sbm9ybWFsaXplOlBvfSx1bz1xbztmdW5jdGlvbiBObihhLHUpe3ZhciB2PWEucHJvcHMmJmEucHJvcHNbdV07RS5pc0Z1bmN0aW9uKHYpJiZ2KCl9ZnVuY3Rpb24gaHIoYSx1LHYseSxQLE8sRixHLFkpe3ZhcntwOmxlLG86e2NyZWF0ZUVsZW1lbnQ6emV9fT1ZLGF0PXplKCJkaXYiKSxnZT1hLnN1c3BlbnNlPUduKGEsUCx5LHUsYXQsdixPLEYsRyxZKTtsZShudWxsLGdlLnBlbmRpbmdCcmFuY2g9YS5zc0NvbnRlbnQsYXQsbnVsbCx5LGdlLE8sRiksZ2UuZGVwcz4wPyhObihhLCJvblBlbmRpbmciKSxObihhLCJvbkZhbGxiYWNrIiksbGUobnVsbCxhLnNzRmFsbGJhY2ssdSx2LHksbnVsbCxPLEYpLEpuKGdlLGEuc3NGYWxsYmFjaykpOmdlLnJlc29sdmUoKX1mdW5jdGlvbiBmbyhhLHUsdix5LFAsTyxGLEcsWSl7dmFye3A6bGUsdW06emUsbzp7Y3JlYXRlRWxlbWVudDphdH19PVksZ2U9dS5zdXNwZW5zZT1hLnN1c3BlbnNlO2dlLnZub2RlPXUsdS5lbD1hLmVsO3ZhciBHZT11LnNzQ29udGVudCxYZT11LnNzRmFsbGJhY2sse2FjdGl2ZUJyYW5jaDp3dCxwZW5kaW5nQnJhbmNoOml0LGlzSW5GYWxsYmFjazpDZSxpc0h5ZHJhdGluZzpFZX09Z2U7aWYoaXQpZ2UucGVuZGluZ0JyYW5jaD1HZSxXdChHZSxpdCk/KGxlKGl0LEdlLGdlLmhpZGRlbkNvbnRhaW5lcixudWxsLFAsZ2UsTyxGLEcpLGdlLmRlcHM8PTA/Z2UucmVzb2x2ZSgpOkNlJiYobGUod3QsWGUsdix5LFAsbnVsbCxPLEYsRyksSm4oZ2UsWGUpKSk6KGdlLnBlbmRpbmdJZCsrLEVlPyhnZS5pc0h5ZHJhdGluZz0hMSxnZS5hY3RpdmVCcmFuY2g9aXQpOnplKGl0LFAsZ2UpLGdlLmRlcHM9MCxnZS5lZmZlY3RzLmxlbmd0aD0wLGdlLmhpZGRlbkNvbnRhaW5lcj1hdCgiZGl2IiksQ2U/KGxlKG51bGwsR2UsZ2UuaGlkZGVuQ29udGFpbmVyLG51bGwsUCxnZSxPLEYsRyksZ2UuZGVwczw9MD9nZS5yZXNvbHZlKCk6KGxlKHd0LFhlLHYseSxQLG51bGwsTyxGLEcpLEpuKGdlLFhlKSkpOnd0JiZXdChHZSx3dCk/KGxlKHd0LEdlLHYseSxQLGdlLE8sRixHKSxnZS5yZXNvbHZlKCEwKSk6KGxlKG51bGwsR2UsZ2UuaGlkZGVuQ29udGFpbmVyLG51bGwsUCxnZSxPLEYsRyksZ2UuZGVwczw9MCYmZ2UucmVzb2x2ZSgpKSk7ZWxzZSBpZih3dCYmV3QoR2Usd3QpKWxlKHd0LEdlLHYseSxQLGdlLE8sRixHKSxKbihnZSxHZSk7ZWxzZSBpZihObih1LCJvblBlbmRpbmciKSxnZS5wZW5kaW5nQnJhbmNoPUdlLGdlLnBlbmRpbmdJZCsrLGxlKG51bGwsR2UsZ2UuaGlkZGVuQ29udGFpbmVyLG51bGwsUCxnZSxPLEYsRyksZ2UuZGVwczw9MClnZS5yZXNvbHZlKCk7ZWxzZXt2YXJ7dGltZW91dDpUZSxwZW5kaW5nSWQ6bHR9PWdlO1RlPjA/c2V0VGltZW91dCgoKT0+e2dlLnBlbmRpbmdJZD09PWx0JiZnZS5mYWxsYmFjayhYZSl9LFRlKTpUZT09PTAmJmdlLmZhbGxiYWNrKFhlKX19ZnVuY3Rpb24gR24oYSx1LHYseSxQLE8sRixHLFksbGUpe3ZhciB6ZT1hcmd1bWVudHMubGVuZ3RoPjEwJiZhcmd1bWVudHNbMTBdIT09dm9pZCAwP2FyZ3VtZW50c1sxMF06ITEse3A6YXQsbTpnZSx1bTpHZSxuOlhlLG86e3BhcmVudE5vZGU6d3QscmVtb3ZlOml0fX09bGUsQ2U9YS5wcm9wcz9FLnRvTnVtYmVyKGEucHJvcHMudGltZW91dCk6dm9pZCAwLEVlPXt2bm9kZTphLHBhcmVudDp1LHBhcmVudENvbXBvbmVudDp2LGlzU1ZHOkYsY29udGFpbmVyOnksaGlkZGVuQ29udGFpbmVyOlAsYW5jaG9yOk8sZGVwczowLHBlbmRpbmdJZDowLHRpbWVvdXQ6dHlwZW9mIENlPT0ibnVtYmVyIj9DZTotMSxhY3RpdmVCcmFuY2g6bnVsbCxwZW5kaW5nQnJhbmNoOm51bGwsaXNJbkZhbGxiYWNrOiEwLGlzSHlkcmF0aW5nOnplLGlzVW5tb3VudGVkOiExLGVmZmVjdHM6W10scmVzb2x2ZSgpe3ZhciBUZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITEse3Zub2RlOmx0LGFjdGl2ZUJyYW5jaDpOZSxwZW5kaW5nQnJhbmNoOkN0LHBlbmRpbmdJZDppLGVmZmVjdHM6bCxwYXJlbnRDb21wb25lbnQ6Zixjb250YWluZXI6X309RWU7aWYoRWUuaXNIeWRyYXRpbmcpRWUuaXNIeWRyYXRpbmc9ITE7ZWxzZSBpZighVGUpe3ZhciBBPU5lJiZDdC50cmFuc2l0aW9uJiZDdC50cmFuc2l0aW9uLm1vZGU9PT0ib3V0LWluIjtBJiYoTmUudHJhbnNpdGlvbi5hZnRlckxlYXZlPSgpPT57aT09PUVlLnBlbmRpbmdJZCYmZ2UoQ3QsXyxDLDApfSk7dmFye2FuY2hvcjpDfT1FZTtOZSYmKEM9WGUoTmUpLEdlKE5lLGYsRWUsITApKSxBfHxnZShDdCxfLEMsMCl9Sm4oRWUsQ3QpLEVlLnBlbmRpbmdCcmFuY2g9bnVsbCxFZS5pc0luRmFsbGJhY2s9ITE7Zm9yKHZhciBOPUVlLnBhcmVudCxNPSExO047KXtpZihOLnBlbmRpbmdCcmFuY2gpe04uZWZmZWN0cy5wdXNoKC4uLmwpLE09ITA7YnJlYWt9Tj1OLnBhcmVudH1NfHxtaShsKSxFZS5lZmZlY3RzPVtdLE5uKGx0LCJvblJlc29sdmUiKX0sZmFsbGJhY2soVGUpe2lmKCEhRWUucGVuZGluZ0JyYW5jaCl7dmFye3Zub2RlOmx0LGFjdGl2ZUJyYW5jaDpOZSxwYXJlbnRDb21wb25lbnQ6Q3QsY29udGFpbmVyOmksaXNTVkc6bH09RWU7Tm4obHQsIm9uRmFsbGJhY2siKTt2YXIgZj1YZShOZSksXz0oKT0+eyFFZS5pc0luRmFsbGJhY2t8fChhdChudWxsLFRlLGksZixDdCxudWxsLGwsRyxZKSxKbihFZSxUZSkpfSxBPVRlLnRyYW5zaXRpb24mJlRlLnRyYW5zaXRpb24ubW9kZT09PSJvdXQtaW4iO0EmJihOZS50cmFuc2l0aW9uLmFmdGVyTGVhdmU9XyksRWUuaXNJbkZhbGxiYWNrPSEwLEdlKE5lLEN0LG51bGwsITApLEF8fF8oKX19LG1vdmUoVGUsbHQsTmUpe0VlLmFjdGl2ZUJyYW5jaCYmZ2UoRWUuYWN0aXZlQnJhbmNoLFRlLGx0LE5lKSxFZS5jb250YWluZXI9VGV9LG5leHQoKXtyZXR1cm4gRWUuYWN0aXZlQnJhbmNoJiZYZShFZS5hY3RpdmVCcmFuY2gpfSxyZWdpc3RlckRlcChUZSxsdCl7dmFyIE5lPSEhRWUucGVuZGluZ0JyYW5jaDtOZSYmRWUuZGVwcysrO3ZhciBDdD1UZS52bm9kZS5lbDtUZS5hc3luY0RlcC5jYXRjaChpPT57U3QoaSxUZSwwKX0pLnRoZW4oaT0+e2lmKCEoVGUuaXNVbm1vdW50ZWR8fEVlLmlzVW5tb3VudGVkfHxFZS5wZW5kaW5nSWQhPT1UZS5zdXNwZW5zZUlkKSl7VGUuYXN5bmNSZXNvbHZlZD0hMDt2YXJ7dm5vZGU6bH09VGU7TmEoVGUsaSwhMSksQ3QmJihsLmVsPUN0KTt2YXIgZj0hQ3QmJlRlLnN1YlRyZWUuZWw7bHQoVGUsbCx3dChDdHx8VGUuc3ViVHJlZS5lbCksQ3Q/bnVsbDpYZShUZS5zdWJUcmVlKSxFZSxGLFkpLGYmJml0KGYpLFppKFRlLGwuZWwpLE5lJiYtLUVlLmRlcHM9PT0wJiZFZS5yZXNvbHZlKCl9fSl9LHVubW91bnQoVGUsbHQpe0VlLmlzVW5tb3VudGVkPSEwLEVlLmFjdGl2ZUJyYW5jaCYmR2UoRWUuYWN0aXZlQnJhbmNoLHYsVGUsbHQpLEVlLnBlbmRpbmdCcmFuY2gmJkdlKEVlLnBlbmRpbmdCcmFuY2gsdixUZSxsdCl9fTtyZXR1cm4gRWV9ZnVuY3Rpb24gWGkoYSx1LHYseSxQLE8sRixHLFkpe3ZhciBsZT11LnN1c3BlbnNlPUduKHUseSx2LGEucGFyZW50Tm9kZSxzLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG51bGwsUCxPLEYsRywhMCksemU9WShhLGxlLnBlbmRpbmdCcmFuY2g9dS5zc0NvbnRlbnQsdixsZSxPLEYpO3JldHVybiBsZS5kZXBzPT09MCYmbGUucmVzb2x2ZSgpLHplfWZ1bmN0aW9uIFBvKGEpe3ZhcntzaGFwZUZsYWc6dSxjaGlsZHJlbjp2fT1hLHk9dSYzMjthLnNzQ29udGVudD1RaSh5P3YuZGVmYXVsdDp2KSxhLnNzRmFsbGJhY2s9eT9RaSh2LmZhbGxiYWNrKTpGdChjZSl9ZnVuY3Rpb24gUWkoYSl7dmFyIHU7aWYoRS5pc0Z1bmN0aW9uKGEpKXt2YXIgdj1ndCYmYS5fYzt2JiYoYS5fZD0hMSx3ZSgpKSxhPWEoKSx2JiYoYS5fZD0hMCx1PWZlLGN0KCkpfWlmKEUuaXNBcnJheShhKSl7dmFyIHk9SmkoYSk7YT15fXJldHVybiBhPU1uKGEpLHUmJiFhLmR5bmFtaWNDaGlsZHJlbiYmKGEuZHluYW1pY0NoaWxkcmVuPXUuZmlsdGVyKFA9PlAhPT1hKSksYX1mdW5jdGlvbiBiaShhLHUpe3UmJnUucGVuZGluZ0JyYW5jaD9FLmlzQXJyYXkoYSk/dS5lZmZlY3RzLnB1c2goLi4uYSk6dS5lZmZlY3RzLnB1c2goYSk6bWkoYSl9ZnVuY3Rpb24gSm4oYSx1KXthLmFjdGl2ZUJyYW5jaD11O3Zhcnt2bm9kZTp2LHBhcmVudENvbXBvbmVudDp5fT1hLFA9di5lbD11LmVsO3kmJnkuc3ViVHJlZT09PXYmJih5LnZub2RlLmVsPVAsWmkoeSxQKSl9ZnVuY3Rpb24gRHIoYSx1KXtpZihubil7dmFyIHY9bm4ucHJvdmlkZXMseT1ubi5wYXJlbnQmJm5uLnBhcmVudC5wcm92aWRlczt5PT09diYmKHY9bm4ucHJvdmlkZXM9T2JqZWN0LmNyZWF0ZSh5KSksdlthXT11LG5uLnR5cGUubXBUeXBlPT09ImFwcCImJm5uLmFwcENvbnRleHQuYXBwLnByb3ZpZGUoYSx1KX19ZnVuY3Rpb24gSW4oYSx1KXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEseT1ubnx8T247aWYoeSl7dmFyIFA9eS5wYXJlbnQ9PW51bGw/eS52bm9kZS5hcHBDb250ZXh0JiZ5LnZub2RlLmFwcENvbnRleHQucHJvdmlkZXM6eS5wYXJlbnQucHJvdmlkZXM7aWYoUCYmYSBpbiBQKXJldHVybiBQW2FdO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gdiYmRS5pc0Z1bmN0aW9uKHUpP3UuY2FsbCh5LnByb3h5KTp1fX1mdW5jdGlvbiBVbihhLHUpe3JldHVybiBzcihhLG51bGwsdSl9ZnVuY3Rpb24gcXIoYSx1KXtyZXR1cm4gc3IoYSxudWxsLHtmbHVzaDoicG9zdCJ9KX1mdW5jdGlvbiBJbyhhLHUpe3JldHVybiBzcihhLG51bGwse2ZsdXNoOiJzeW5jIn0pfXZhciBvaT17fTtmdW5jdGlvbiBLcihhLHUsdil7cmV0dXJuIHNyKGEsdSx2KX1mdW5jdGlvbiBzcihhLHUpe3ZhcntpbW1lZGlhdGU6dixkZWVwOnksZmx1c2g6UCxvblRyYWNrOk8sb25UcmlnZ2VyOkZ9PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpFLkVNUFRZX09CSixHPUIuZ2V0Q3VycmVudFNjb3BlKCk9PT0obm49PW51bGw/dm9pZCAwOm5uLnNjb3BlKT9ubjpudWxsLFksbGU9ITEsemU9ITE7aWYoQi5pc1JlZihhKT8oWT0oKT0+YS52YWx1ZSxsZT1CLmlzU2hhbGxvdyhhKSk6Qi5pc1JlYWN0aXZlKGEpPyhZPSgpPT5hLHk9ITApOkUuaXNBcnJheShhKT8oemU9ITAsbGU9YS5zb21lKE5lPT5CLmlzUmVhY3RpdmUoTmUpfHxCLmlzU2hhbGxvdyhOZSkpLFk9KCk9PmEubWFwKE5lPT57aWYoQi5pc1JlZihOZSkpcmV0dXJuIE5lLnZhbHVlO2lmKEIuaXNSZWFjdGl2ZShOZSkpcmV0dXJuIEZyKE5lKTtpZihFLmlzRnVuY3Rpb24oTmUpKXJldHVybiB4dChOZSxHLDIpfSkpOkUuaXNGdW5jdGlvbihhKT91P1k9KCk9Pnh0KGEsRywyKTpZPSgpPT57aWYoIShHJiZHLmlzVW5tb3VudGVkKSlyZXR1cm4gZ2UmJmdlKCksSShhLEcsMyxbR2VdKX06WT1FLk5PT1AsdSYmeSl7dmFyIGF0PVk7WT0oKT0+RnIoYXQoKSl9dmFyIGdlLEdlPU5lPT57Z2U9VGUub25TdG9wPSgpPT57eHQoTmUsRyw0KX19LFhlO2lmKGQuaXNJblNTUkNvbXBvbmVudFNldHVwKWlmKEdlPUUuTk9PUCx1P3YmJkkodSxHLDMsW1koKSx6ZT9bXTp2b2lkIDAsR2VdKTpZKCksUD09PSJzeW5jIil7dmFyIHd0PUVvKCk7WGU9d3QuX193YXRjaGVySGFuZGxlc3x8KHd0Ll9fd2F0Y2hlckhhbmRsZXM9W10pfWVsc2UgcmV0dXJuIEUuTk9PUDt2YXIgaXQ9emU/bmV3IEFycmF5KGEubGVuZ3RoKS5maWxsKG9pKTpvaSxDZT0oKT0+e2lmKCEhVGUuYWN0aXZlKWlmKHUpe3ZhciBOZT1UZS5ydW4oKTsoeXx8bGV8fCh6ZT9OZS5zb21lKChDdCxpKT0+RS5oYXNDaGFuZ2VkKEN0LGl0W2ldKSk6RS5oYXNDaGFuZ2VkKE5lLGl0KSkpJiYoZ2UmJmdlKCksSSh1LEcsMyxbTmUsaXQ9PT1vaT92b2lkIDA6emUmJml0WzBdPT09b2k/W106aXQsR2VdKSxpdD1OZSl9ZWxzZSBUZS5ydW4oKX07Q2UuYWxsb3dSZWN1cnNlPSEhdTt2YXIgRWU7UD09PSJzeW5jIj9FZT1DZTpQPT09InBvc3QiP0VlPSgpPT5jcihDZSxHJiZHLnN1c3BlbnNlKTooQ2UucHJlPSEwLEcmJihDZS5pZD1HLnVpZCksRWU9KCk9PkNuKENlKSk7dmFyIFRlPW5ldyBCLlJlYWN0aXZlRWZmZWN0KFksRWUpO3U/dj9DZSgpOml0PVRlLnJ1bigpOlA9PT0icG9zdCI/Y3IoVGUucnVuLmJpbmQoVGUpLEcmJkcuc3VzcGVuc2UpOlRlLnJ1bigpO3ZhciBsdD0oKT0+e1RlLnN0b3AoKSxHJiZHLnNjb3BlJiZFLnJlbW92ZShHLnNjb3BlLmVmZmVjdHMsVGUpfTtyZXR1cm4gWGUmJlhlLnB1c2gobHQpLGx0fWZ1bmN0aW9uIFZpKGEsdSx2KXt2YXIgeT10aGlzLnByb3h5LFA9RS5pc1N0cmluZyhhKT9hLmluY2x1ZGVzKCIuIik/ZW8oeSxhKTooKT0+eVthXTphLmJpbmQoeSx5KSxPO0UuaXNGdW5jdGlvbih1KT9PPXU6KE89dS5oYW5kbGVyLHY9dSk7dmFyIEY9bm47Vm4odGhpcyk7dmFyIEc9c3IoUCxPLmJpbmQoeSksdik7cmV0dXJuIEY/Vm4oRik6em4oKSxHfWZ1bmN0aW9uIGVvKGEsdSl7dmFyIHY9dS5zcGxpdCgiLiIpO3JldHVybigpPT57Zm9yKHZhciB5PWEsUD0wO1A8di5sZW5ndGgmJnk7UCsrKXk9eVt2W1BdXTtyZXR1cm4geX19ZnVuY3Rpb24gRnIoYSx1KXtpZighRS5pc09iamVjdChhKXx8YS5fX3Zfc2tpcHx8KHU9dXx8bmV3IFNldCx1LmhhcyhhKSkpcmV0dXJuIGE7aWYodS5hZGQoYSksQi5pc1JlZihhKSlGcihhLnZhbHVlLHUpO2Vsc2UgaWYoRS5pc0FycmF5KGEpKWZvcih2YXIgdj0wO3Y8YS5sZW5ndGg7disrKUZyKGFbdl0sdSk7ZWxzZSBpZihFLmlzU2V0KGEpfHxFLmlzTWFwKGEpKWEuZm9yRWFjaChQPT57RnIoUCx1KX0pO2Vsc2UgaWYoRS5pc1BsYWluT2JqZWN0KGEpKWZvcih2YXIgeSBpbiBhKUZyKGFbeV0sdSk7cmV0dXJuIGF9ZnVuY3Rpb24gRWkoKXt2YXIgYT17aXNNb3VudGVkOiExLGlzTGVhdmluZzohMSxpc1VubW91bnRpbmc6ITEsbGVhdmluZ1ZOb2RlczpuZXcgTWFwfTtyZXR1cm4gWm4oKCk9PnthLmlzTW91bnRlZD0hMH0pLFFuKCgpPT57YS5pc1VubW91bnRpbmc9ITB9KSxhfXZhciBncj1bRnVuY3Rpb24sQXJyYXldLGduPXttb2RlOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixwZXJzaXN0ZWQ6Qm9vbGVhbixvbkJlZm9yZUVudGVyOmdyLG9uRW50ZXI6Z3Isb25BZnRlckVudGVyOmdyLG9uRW50ZXJDYW5jZWxsZWQ6Z3Isb25CZWZvcmVMZWF2ZTpncixvbkxlYXZlOmdyLG9uQWZ0ZXJMZWF2ZTpncixvbkxlYXZlQ2FuY2VsbGVkOmdyLG9uQmVmb3JlQXBwZWFyOmdyLG9uQXBwZWFyOmdyLG9uQWZ0ZXJBcHBlYXI6Z3Isb25BcHBlYXJDYW5jZWxsZWQ6Z3J9LEpyPXtuYW1lOiJCYXNlVHJhbnNpdGlvbiIscHJvcHM6Z24sc2V0dXAoYSx1KXt2YXJ7c2xvdHM6dn09dSx5PXBuKCksUD1FaSgpLE87cmV0dXJuKCk9Pnt2YXIgRj12LmRlZmF1bHQmJlZyKHYuZGVmYXVsdCgpLCEwKTtpZighKCFGfHwhRi5sZW5ndGgpKXt2YXIgRz1GWzBdO2lmKEYubGVuZ3RoPjEpe2Zvcih2YXIgWSBvZiBGKWlmKFkudHlwZSE9PWNlKXtHPVk7YnJlYWt9fXZhciBsZT1CLnRvUmF3KGEpLHttb2RlOnplfT1sZTtpZihQLmlzTGVhdmluZylyZXR1cm4gWnIoRyk7dmFyIGF0PUlpKEcpO2lmKCFhdClyZXR1cm4gWnIoRyk7dmFyIGdlPU9lKGF0LGxlLFAseSk7YWkoYXQsZ2UpO3ZhciBHZT15LnN1YlRyZWUsWGU9R2UmJklpKEdlKSx3dD0hMSx7Z2V0VHJhbnNpdGlvbktleTppdH09YXQudHlwZTtpZihpdCl7dmFyIENlPWl0KCk7Tz09PXZvaWQgMD9PPUNlOkNlIT09TyYmKE89Q2Usd3Q9ITApfWlmKFhlJiZYZS50eXBlIT09Y2UmJighV3QoYXQsWGUpfHx3dCkpe3ZhciBFZT1PZShYZSxsZSxQLHkpO2lmKGFpKFhlLEVlKSx6ZT09PSJvdXQtaW4iKXJldHVybiBQLmlzTGVhdmluZz0hMCxFZS5hZnRlckxlYXZlPSgpPT57UC5pc0xlYXZpbmc9ITEseS51cGRhdGUuYWN0aXZlIT09ITEmJnkudXBkYXRlKCl9LFpyKEcpO3plPT09ImluLW91dCImJmF0LnR5cGUhPT1jZSYmKEVlLmRlbGF5TGVhdmU9KFRlLGx0LE5lKT0+e3ZhciBDdD1NdChQLFhlKTtDdFtTdHJpbmcoWGUua2V5KV09WGUsVGUuX2xlYXZlQ2I9KCk9PntsdCgpLFRlLl9sZWF2ZUNiPXZvaWQgMCxkZWxldGUgZ2UuZGVsYXllZExlYXZlfSxnZS5kZWxheWVkTGVhdmU9TmV9KX1yZXR1cm4gR319fX0sa3I9SnI7ZnVuY3Rpb24gTXQoYSx1KXt2YXJ7bGVhdmluZ1ZOb2Rlczp2fT1hLHk9di5nZXQodS50eXBlKTtyZXR1cm4geXx8KHk9T2JqZWN0LmNyZWF0ZShudWxsKSx2LnNldCh1LnR5cGUseSkpLHl9ZnVuY3Rpb24gT2UoYSx1LHYseSl7dmFye2FwcGVhcjpQLG1vZGU6TyxwZXJzaXN0ZWQ6Rj0hMSxvbkJlZm9yZUVudGVyOkcsb25FbnRlcjpZLG9uQWZ0ZXJFbnRlcjpsZSxvbkVudGVyQ2FuY2VsbGVkOnplLG9uQmVmb3JlTGVhdmU6YXQsb25MZWF2ZTpnZSxvbkFmdGVyTGVhdmU6R2Usb25MZWF2ZUNhbmNlbGxlZDpYZSxvbkJlZm9yZUFwcGVhcjp3dCxvbkFwcGVhcjppdCxvbkFmdGVyQXBwZWFyOkNlLG9uQXBwZWFyQ2FuY2VsbGVkOkVlfT11LFRlPVN0cmluZyhhLmtleSksbHQ9TXQodixhKSxOZT0obCxmKT0+e2wmJkkobCx5LDksZil9LEN0PShsLGYpPT57dmFyIF89ZlsxXTtOZShsLGYpLEUuaXNBcnJheShsKT9sLmV2ZXJ5KEE9PkEubGVuZ3RoPD0xKSYmXygpOmwubGVuZ3RoPD0xJiZfKCl9LGk9e21vZGU6TyxwZXJzaXN0ZWQ6RixiZWZvcmVFbnRlcihsKXt2YXIgZj1HO2lmKCF2LmlzTW91bnRlZClpZihQKWY9d3R8fEc7ZWxzZSByZXR1cm47bC5fbGVhdmVDYiYmbC5fbGVhdmVDYighMCk7dmFyIF89bHRbVGVdO18mJld0KGEsXykmJl8uZWwuX2xlYXZlQ2ImJl8uZWwuX2xlYXZlQ2IoKSxOZShmLFtsXSl9LGVudGVyKGwpe3ZhciBmPVksXz1sZSxBPXplO2lmKCF2LmlzTW91bnRlZClpZihQKWY9aXR8fFksXz1DZXx8bGUsQT1FZXx8emU7ZWxzZSByZXR1cm47dmFyIEM9ITEsTj1sLl9lbnRlckNiPU09PntDfHwoQz0hMCxNP05lKEEsW2xdKTpOZShfLFtsXSksaS5kZWxheWVkTGVhdmUmJmkuZGVsYXllZExlYXZlKCksbC5fZW50ZXJDYj12b2lkIDApfTtmP0N0KGYsW2wsTl0pOk4oKX0sbGVhdmUobCxmKXt2YXIgXz1TdHJpbmcoYS5rZXkpO2lmKGwuX2VudGVyQ2ImJmwuX2VudGVyQ2IoITApLHYuaXNVbm1vdW50aW5nKXJldHVybiBmKCk7TmUoYXQsW2xdKTt2YXIgQT0hMSxDPWwuX2xlYXZlQ2I9Tj0+e0F8fChBPSEwLGYoKSxOP05lKFhlLFtsXSk6TmUoR2UsW2xdKSxsLl9sZWF2ZUNiPXZvaWQgMCxsdFtfXT09PWEmJmRlbGV0ZSBsdFtfXSl9O2x0W19dPWEsZ2U/Q3QoZ2UsW2wsQ10pOkMoKX0sY2xvbmUobCl7cmV0dXJuIE9lKGwsdSx2LHkpfX07cmV0dXJuIGl9ZnVuY3Rpb24gWnIoYSl7aWYoUHIoYSkpcmV0dXJuIGE9Y2koYSksYS5jaGlsZHJlbj1udWxsLGF9ZnVuY3Rpb24gSWkoYSl7cmV0dXJuIFByKGEpP2EuY2hpbGRyZW4/YS5jaGlsZHJlblswXTp2b2lkIDA6YX1mdW5jdGlvbiBhaShhLHUpe2Euc2hhcGVGbGFnJjYmJmEuY29tcG9uZW50P2FpKGEuY29tcG9uZW50LnN1YlRyZWUsdSk6YS5zaGFwZUZsYWcmMTI4PyhhLnNzQ29udGVudC50cmFuc2l0aW9uPXUuY2xvbmUoYS5zc0NvbnRlbnQpLGEuc3NGYWxsYmFjay50cmFuc2l0aW9uPXUuY2xvbmUoYS5zc0ZhbGxiYWNrKSk6YS50cmFuc2l0aW9uPXV9ZnVuY3Rpb24gVnIoYSl7Zm9yKHZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMSx2PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLHk9W10sUD0wLE89MDtPPGEubGVuZ3RoO08rKyl7dmFyIEY9YVtPXSxHPXY9PW51bGw/Ri5rZXk6U3RyaW5nKHYpK1N0cmluZyhGLmtleSE9bnVsbD9GLmtleTpPKTtGLnR5cGU9PT1KPyhGLnBhdGNoRmxhZyYxMjgmJlArKyx5PXkuY29uY2F0KFZyKEYuY2hpbGRyZW4sdSxHKSkpOih1fHxGLnR5cGUhPT1jZSkmJnkucHVzaChHIT1udWxsP2NpKEYse2tleTpHfSk6Ril9aWYoUD4xKWZvcih2YXIgWT0wO1k8eS5sZW5ndGg7WSsrKXlbWV0ucGF0Y2hGbGFnPS0yO3JldHVybiB5fWZ1bmN0aW9uIE5pKGEpe3JldHVybiBFLmlzRnVuY3Rpb24oYSk/e3NldHVwOmEsbmFtZTphLm5hbWV9OmF9dmFyIHByPWE9PiEhYS50eXBlLl9fYXN5bmNMb2FkZXI7ZnVuY3Rpb24gJHIoYSl7RS5pc0Z1bmN0aW9uKGEpJiYoYT17bG9hZGVyOmF9KTt2YXJ7bG9hZGVyOnUsbG9hZGluZ0NvbXBvbmVudDp2LGVycm9yQ29tcG9uZW50OnksZGVsYXk6UD0yMDAsdGltZW91dDpPLHN1c3BlbnNpYmxlOkY9ITAsb25FcnJvcjpHfT1hLFk9bnVsbCxsZSx6ZT0wLGF0PSgpPT4oemUrKyxZPW51bGwsZ2UoKSksZ2U9KCk9Pnt2YXIgR2U7cmV0dXJuIFl8fChHZT1ZPXUoKS5jYXRjaChYZT0+e2lmKFhlPVhlIGluc3RhbmNlb2YgRXJyb3I/WGU6bmV3IEVycm9yKFN0cmluZyhYZSkpLEcpcmV0dXJuIG5ldyBQcm9taXNlKCh3dCxpdCk9Pnt2YXIgQ2U9KCk9Pnd0KGF0KCkpLEVlPSgpPT5pdChYZSk7RyhYZSxDZSxFZSx6ZSsxKX0pO3Rocm93IFhlfSkudGhlbihYZT0+R2UhPT1ZJiZZP1k6KFhlJiYoWGUuX19lc01vZHVsZXx8WGVbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJNb2R1bGUiKSYmKFhlPVhlLmRlZmF1bHQpLGxlPVhlLFhlKSkpfTtyZXR1cm4gTmkoe25hbWU6IkFzeW5jQ29tcG9uZW50V3JhcHBlciIsX19hc3luY0xvYWRlcjpnZSxnZXQgX19hc3luY1Jlc29sdmVkKCl7cmV0dXJuIGxlfSxzZXR1cCgpe3ZhciBHZT1ubjtpZihsZSlyZXR1cm4oKT0+WHIobGUsR2UpO3ZhciBYZT1FZT0+e1k9bnVsbCxTdChFZSxHZSwxMyl9O2lmKEYmJkdlLnN1c3BlbnNlfHxkLmlzSW5TU1JDb21wb25lbnRTZXR1cClyZXR1cm4gZ2UoKS50aGVuKEVlPT4oKT0+WHIoRWUsR2UpKS5jYXRjaChFZT0+KFhlKEVlKSwoKT0+eT9GdCh5LHtlcnJvcjpFZX0pOm51bGwpKTt2YXIgd3Q9Qi5yZWYoITEpLGl0PUIucmVmKCksQ2U9Qi5yZWYoISFQKTtyZXR1cm4gUCYmc2V0VGltZW91dCgoKT0+e0NlLnZhbHVlPSExfSxQKSxPIT1udWxsJiZzZXRUaW1lb3V0KCgpPT57aWYoIXd0LnZhbHVlJiYhaXQudmFsdWUpe3ZhciBFZT1uZXcgRXJyb3IoIkFzeW5jIGNvbXBvbmVudCB0aW1lZCBvdXQgYWZ0ZXIgIi5jb25jYXQoTywibXMuIikpO1hlKEVlKSxpdC52YWx1ZT1FZX19LE8pLGdlKCkudGhlbigoKT0+e3d0LnZhbHVlPSEwLEdlLnBhcmVudCYmUHIoR2UucGFyZW50LnZub2RlKSYmQ24oR2UucGFyZW50LnVwZGF0ZSl9KS5jYXRjaChFZT0+e1hlKEVlKSxpdC52YWx1ZT1FZX0pLCgpPT57aWYod3QudmFsdWUmJmxlKXJldHVybiBYcihsZSxHZSk7aWYoaXQudmFsdWUmJnkpcmV0dXJuIEZ0KHkse2Vycm9yOml0LnZhbHVlfSk7aWYodiYmIUNlLnZhbHVlKXJldHVybiBGdCh2KX19fSl9ZnVuY3Rpb24gWHIoYSx1KXt2YXJ7cmVmOnYscHJvcHM6eSxjaGlsZHJlbjpQLGNlOk99PXUudm5vZGUsRj1GdChhLHksUCk7cmV0dXJuIEYucmVmPXYsRi5jZT1PLGRlbGV0ZSB1LnZub2RlLmNlLEZ9dmFyIFByPWE9PmEudHlwZS5fX2lzS2VlcEFsaXZlLGtpPXtuYW1lOiJLZWVwQWxpdmUiLF9faXNLZWVwQWxpdmU6ITAscHJvcHM6e2luY2x1ZGU6W1N0cmluZyxSZWdFeHAsQXJyYXldLGV4Y2x1ZGU6W1N0cmluZyxSZWdFeHAsQXJyYXldLG1heDpbU3RyaW5nLE51bWJlcl19LHNldHVwKGEsdSl7dmFye3Nsb3RzOnZ9PXUseT1wbigpLFA9eS5jdHg7aWYoIVAucmVuZGVyZXIpcmV0dXJuKCk9Pnt2YXIgVGU9di5kZWZhdWx0JiZ2LmRlZmF1bHQoKTtyZXR1cm4gVGUmJlRlLmxlbmd0aD09PTE/VGVbMF06VGV9O3ZhciBPPW5ldyBNYXAsRj1uZXcgU2V0LEc9bnVsbCxZPXkuc3VzcGVuc2Use3JlbmRlcmVyOntwOmxlLG06emUsdW06YXQsbzp7Y3JlYXRlRWxlbWVudDpnZX19fT1QLEdlPWdlKCJkaXYiKTtQLmFjdGl2YXRlPShUZSxsdCxOZSxDdCxpKT0+e3ZhciBsPVRlLmNvbXBvbmVudDt6ZShUZSxsdCxOZSwwLFkpLGxlKGwudm5vZGUsVGUsbHQsTmUsbCxZLEN0LFRlLnNsb3RTY29wZUlkcyxpKSxjcigoKT0+e2wuaXNEZWFjdGl2YXRlZD0hMSxsLmEmJkUuaW52b2tlQXJyYXlGbnMobC5hKTt2YXIgZj1UZS5wcm9wcyYmVGUucHJvcHMub25Wbm9kZU1vdW50ZWQ7ZiYmYnIoZixsLnBhcmVudCxUZSl9LFkpfSxQLmRlYWN0aXZhdGU9VGU9Pnt2YXIgbHQ9VGUuY29tcG9uZW50O3plKFRlLEdlLG51bGwsMSxZKSxjcigoKT0+e2x0LmRhJiZFLmludm9rZUFycmF5Rm5zKGx0LmRhKTt2YXIgTmU9VGUucHJvcHMmJlRlLnByb3BzLm9uVm5vZGVVbm1vdW50ZWQ7TmUmJmJyKE5lLGx0LnBhcmVudCxUZSksbHQuaXNEZWFjdGl2YXRlZD0hMH0sWSl9O2Z1bmN0aW9uIFhlKFRlKXtpcihUZSksYXQoVGUseSxZLCEwKX1mdW5jdGlvbiB3dChUZSl7Ty5mb3JFYWNoKChsdCxOZSk9Pnt2YXIgQ3Q9TGkobHQudHlwZSk7Q3QmJighVGV8fCFUZShDdCkpJiZpdChOZSl9KX1mdW5jdGlvbiBpdChUZSl7dmFyIGx0PU8uZ2V0KFRlKTshR3x8IVd0KGx0LEcpP1hlKGx0KTpHJiZpcihHKSxPLmRlbGV0ZShUZSksRi5kZWxldGUoVGUpfUtyKCgpPT5bYS5pbmNsdWRlLGEuZXhjbHVkZV0sVGU9Pnt2YXJbbHQsTmVdPVRlO2x0JiZ3dChDdD0+JGkobHQsQ3QpKSxOZSYmd3QoQ3Q9PiEkaShOZSxDdCkpfSx7Zmx1c2g6InBvc3QiLGRlZXA6ITB9KTt2YXIgQ2U9bnVsbCxFZT0oKT0+e0NlIT1udWxsJiZPLnNldChDZSx5aSh5LnN1YlRyZWUpKX07cmV0dXJuIFpuKEVlKSxIbihFZSksUW4oKCk9PntPLmZvckVhY2goVGU9Pnt2YXJ7c3ViVHJlZTpsdCxzdXNwZW5zZTpOZX09eSxDdD15aShsdCk7aWYoVGUudHlwZT09PUN0LnR5cGUmJlRlLmtleT09PUN0LmtleSl7aXIoQ3QpO3ZhciBpPUN0LmNvbXBvbmVudC5kYTtpJiZjcihpLE5lKTtyZXR1cm59WGUoVGUpfSl9KSwoKT0+e2lmKENlPW51bGwsIXYuZGVmYXVsdClyZXR1cm4gbnVsbDt2YXIgVGU9di5kZWZhdWx0KCksbHQ9VGVbMF07aWYoVGUubGVuZ3RoPjEpcmV0dXJuIEc9bnVsbCxUZTtpZighY24obHQpfHwhKGx0LnNoYXBlRmxhZyY0KSYmIShsdC5zaGFwZUZsYWcmMTI4KSlyZXR1cm4gRz1udWxsLGx0O3ZhciBOZT15aShsdCksQ3Q9TmUudHlwZSxpPUxpKHByKE5lKT9OZS50eXBlLl9fYXN5bmNSZXNvbHZlZHx8e306Q3QpLHtpbmNsdWRlOmwsZXhjbHVkZTpmLG1heDpffT1hO2lmKGwmJighaXx8ISRpKGwsaSkpfHxmJiZpJiYkaShmLGkpKXJldHVybiBHPU5lLGx0O3ZhciBBPU5lLmtleT09bnVsbD9DdDpOZS5rZXksQz1PLmdldChBKTtyZXR1cm4gTmUuZWwmJihOZT1jaShOZSksbHQuc2hhcGVGbGFnJjEyOCYmKGx0LnNzQ29udGVudD1OZSkpLENlPUEsQz8oTmUuZWw9Qy5lbCxOZS5jb21wb25lbnQ9Qy5jb21wb25lbnQsTmUudHJhbnNpdGlvbiYmYWkoTmUsTmUudHJhbnNpdGlvbiksTmUuc2hhcGVGbGFnfD01MTIsRi5kZWxldGUoQSksRi5hZGQoQSkpOihGLmFkZChBKSxfJiZGLnNpemU+cGFyc2VJbnQoXywxMCkmJml0KEYudmFsdWVzKCkubmV4dCgpLnZhbHVlKSksTmUuc2hhcGVGbGFnfD0yNTYsRz1OZSxpaShsdC50eXBlKT9sdDpOZX19fSxsbj1raTtmdW5jdGlvbiAkaShhLHUpe3JldHVybiBFLmlzQXJyYXkoYSk/YS5zb21lKHY9PiRpKHYsdSkpOkUuaXNTdHJpbmcoYSk/YS5zcGxpdCgiLCIpLmluY2x1ZGVzKHUpOkUuaXNSZWdFeHAoYSk/YS50ZXN0KHUpOiExfWZ1bmN0aW9uIFVyKGEsdSl7Ym4oYSwiYSIsdSl9ZnVuY3Rpb24gdG8oYSx1KXtibihhLCJkYSIsdSl9ZnVuY3Rpb24gYm4oYSx1KXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bm4seT1hLl9fd2RjfHwoYS5fX3dkYz0oKT0+e2Zvcih2YXIgTz12O087KXtpZihPLmlzRGVhY3RpdmF0ZWQpcmV0dXJuO089Ty5wYXJlbnR9cmV0dXJuIGEoKX0pO2lmKFJpKHUseSx2KSx2KWZvcih2YXIgUD12LnBhcmVudDtQJiZQLnBhcmVudDspUHIoUC5wYXJlbnQudm5vZGUpJiZIcih5LHUsdixQKSxQPVAucGFyZW50fWZ1bmN0aW9uIEhyKGEsdSx2LHkpe3ZhciBQPVJpKHUsYSx5LCEwKTtscigoKT0+e0UucmVtb3ZlKHlbdV0sUCl9LHYpfWZ1bmN0aW9uIGlyKGEpe2Euc2hhcGVGbGFnJj1+MjU2LGEuc2hhcGVGbGFnJj1+NTEyfWZ1bmN0aW9uIHlpKGEpe3JldHVybiBhLnNoYXBlRmxhZyYxMjg/YS5zc0NvbnRlbnQ6YX1mdW5jdGlvbiBSaShhLHUpe3ZhciB2PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpubix5PWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMTtpZih2KXtpZihXZS5pc1Jvb3RIb29rKGEpJiZ2IT09di5yb290JiYodj12LnJvb3QsV2UuaXNSb290SW1tZWRpYXRlSG9vayhhKSkpe3ZhciBQPXYucHJveHk7SSh1LmJpbmQoUCksdixhLFdlLk9OX0xPQUQ9PT1hP1tQLiRwYWdlLm9wdGlvbnNdOltdKX12YXIgTz12W2FdfHwodlthXT1bXSksRj11Ll9fd2VofHwodS5fX3dlaD1mdW5jdGlvbigpe2lmKCF2LmlzVW5tb3VudGVkKXtCLnBhdXNlVHJhY2tpbmcoKSxWbih2KTtmb3IodmFyIEc9YXJndW1lbnRzLmxlbmd0aCxZPW5ldyBBcnJheShHKSxsZT0wO2xlPEc7bGUrKylZW2xlXT1hcmd1bWVudHNbbGVdO3ZhciB6ZT1JKHUsdixhLFkpO3JldHVybiB6bigpLEIucmVzZXRUcmFja2luZygpLHplfX0pO3JldHVybiB5P08udW5zaGlmdChGKTpPLnB1c2goRiksRn19dmFyIHZyPWE9PmZ1bmN0aW9uKHUpe3ZhciB2PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpubjtyZXR1cm4oIWQuaXNJblNTUkNvbXBvbmVudFNldHVwfHxhPT09InNwIikmJlJpKGEsZnVuY3Rpb24oKXtyZXR1cm4gdSguLi5hcmd1bWVudHMpfSx2KX0sUXI9dnIoImJtIiksWm49dnIoIm0iKSxYbj12cigiYnUiKSxIbj12cigidSIpLFFuPXZyKCJidW0iKSxscj12cigidW0iKSxobz12cigic3AiKSxnbz12cigicnRnIiksTm89dnIoInJ0YyIpO2Z1bmN0aW9uIG5vKGEpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpubjtSaSgiZWMiLGEsdSl9ZnVuY3Rpb24ga28oYSx1KXt2YXIgdj1PbjtpZih2PT09bnVsbClyZXR1cm4gYTtmb3IodmFyIHk9RG8odil8fHYucHJveHksUD1hLmRpcnN8fChhLmRpcnM9W10pLE89MDtPPHUubGVuZ3RoO08rKyl7dmFyW0YsRyxZLGxlPUUuRU1QVFlfT0JKXT11W09dO0YmJihFLmlzRnVuY3Rpb24oRikmJihGPXttb3VudGVkOkYsdXBkYXRlZDpGfSksRi5kZWVwJiZGcihHKSxQLnB1c2goe2RpcjpGLGluc3RhbmNlOnksdmFsdWU6RyxvbGRWYWx1ZTp2b2lkIDAsYXJnOlksbW9kaWZpZXJzOmxlfSkpfXJldHVybiBhfWZ1bmN0aW9uIGpyKGEsdSx2LHkpe2Zvcih2YXIgUD1hLmRpcnMsTz11JiZ1LmRpcnMsRj0wO0Y8UC5sZW5ndGg7RisrKXt2YXIgRz1QW0ZdO08mJihHLm9sZFZhbHVlPU9bRl0udmFsdWUpO3ZhciBZPUcuZGlyW3ldO1kmJihCLnBhdXNlVHJhY2tpbmcoKSxJKFksdiw4LFthLmVsLEcsYSx1XSksQi5yZXNldFRyYWNraW5nKCkpfX12YXIgUnI9ImNvbXBvbmVudHMiLHJvPSJkaXJlY3RpdmVzIjtmdW5jdGlvbiBLbyhhLHUpe3JldHVybiBCaShScixhLCEwLHUpfHxhfXZhciB4aT1TeW1ib2woKTtmdW5jdGlvbiBVaShhKXtyZXR1cm4gRS5pc1N0cmluZyhhKT9CaShScixhLCExKXx8YTphfHx4aX1mdW5jdGlvbiBSbyhhKXtyZXR1cm4gQmkocm8sYSl9ZnVuY3Rpb24gQmkoYSx1KXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEseT1Pbnx8bm47aWYoeSl7dmFyIFA9eS50eXBlO2lmKGE9PT1Scil7dmFyIE89TGkoUCwhMSk7aWYoTyYmKE89PT11fHxPPT09RS5jYW1lbGl6ZSh1KXx8Tz09PUUuY2FwaXRhbGl6ZShFLmNhbWVsaXplKHUpKSkpcmV0dXJuIFB9dmFyIEY9SGkoeVthXXx8UFthXSx1KXx8SGkoeS5hcHBDb250ZXh0W2FdLHUpO3JldHVybiFGJiZ2P1A6Rn19ZnVuY3Rpb24gSGkoYSx1KXtyZXR1cm4gYSYmKGFbdV18fGFbRS5jYW1lbGl6ZSh1KV18fGFbRS5jYXBpdGFsaXplKEUuY2FtZWxpemUodSkpXSl9ZnVuY3Rpb24geG8oYSx1LHYseSl7dmFyIFAsTz12JiZ2W3ldO2lmKEUuaXNBcnJheShhKXx8RS5pc1N0cmluZyhhKSl7UD1uZXcgQXJyYXkoYS5sZW5ndGgpO2Zvcih2YXIgRj0wLEc9YS5sZW5ndGg7RjxHO0YrKylQW0ZdPXUoYVtGXSxGLHZvaWQgMCxPJiZPW0ZdKX1lbHNlIGlmKHR5cGVvZiBhPT0ibnVtYmVyIil7UD1uZXcgQXJyYXkoYSk7Zm9yKHZhciBZPTA7WTxhO1krKylQW1ldPXUoWSsxLFksdm9pZCAwLE8mJk9bWV0pfWVsc2UgaWYoRS5pc09iamVjdChhKSlpZihhW1N5bWJvbC5pdGVyYXRvcl0pUD1BcnJheS5mcm9tKGEsKEdlLFhlKT0+dShHZSxYZSx2b2lkIDAsTyYmT1tYZV0pKTtlbHNle3ZhciBsZT1PYmplY3Qua2V5cyhhKTtQPW5ldyBBcnJheShsZS5sZW5ndGgpO2Zvcih2YXIgemU9MCxhdD1sZS5sZW5ndGg7emU8YXQ7emUrKyl7dmFyIGdlPWxlW3plXTtQW3plXT11KGFbZ2VdLGdlLHplLE8mJk9bemVdKX19ZWxzZSBQPVtdO3JldHVybiB2JiYodlt5XT1QKSxQfWZ1bmN0aW9uIHgoYSx1KXtmb3IodmFyIHY9ZnVuY3Rpb24oUCl7dmFyIE89dVtQXTtpZihFLmlzQXJyYXkoTykpZm9yKHZhciBGPTA7RjxPLmxlbmd0aDtGKyspYVtPW0ZdLm5hbWVdPU9bRl0uZm47ZWxzZSBPJiYoYVtPLm5hbWVdPU8ua2V5P2Z1bmN0aW9uKCl7dmFyIEc9Ty5mbiguLi5hcmd1bWVudHMpO3JldHVybiBHJiYoRy5rZXk9Ty5rZXkpLEd9Ok8uZm4pfSx5PTA7eTx1Lmxlbmd0aDt5Kyspdih5KTtyZXR1cm4gYX1mdW5jdGlvbiBRKGEsdSl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnt9LHk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAsUD1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtpZihPbi5pc0NFfHxPbi5wYXJlbnQmJnByKE9uLnBhcmVudCkmJk9uLnBhcmVudC5pc0NFKXJldHVybiB1IT09ImRlZmF1bHQiJiYodi5uYW1lPXUpLEZ0KCJzbG90Iix2LHkmJnkoKSk7dmFyIE89YVt1XTtPJiZPLl9jJiYoTy5fZD0hMSksd2UoKTt2YXIgRj1PJiZoZShPKHYpKSxHPUJ0KEose2tleTp2LmtleXx8RiYmRi5rZXl8fCJfIi5jb25jYXQodSl9LEZ8fCh5P3koKTpbXSksRiYmYS5fPT09MT82NDotMik7cmV0dXJuIVAmJkcuc2NvcGVJZCYmKEcuc2xvdFNjb3BlSWRzPVtHLnNjb3BlSWQrIi1zIl0pLE8mJk8uX2MmJihPLl9kPSEwKSxHfWZ1bmN0aW9uIGhlKGEpe3JldHVybiBhLnNvbWUodT0+Y24odSk/ISh1LnR5cGU9PT1jZXx8dS50eXBlPT09SiYmIWhlKHUuY2hpbGRyZW4pKTohMCk/YTpudWxsfWZ1bmN0aW9uIHNlKGEsdSl7dmFyIHY9e307Zm9yKHZhciB5IGluIGEpdlt1JiYvW0EtWl0vLnRlc3QoeSk/Im9uOiIuY29uY2F0KHkpOkUudG9IYW5kbGVyS2V5KHkpXT1hW3ldO3JldHVybiB2fXZhciBkZT1hPT5hP0NpKGEpP0RvKGEpfHxhLnByb3h5OmRlKGEucGFyZW50KTpudWxsLG10PUUuZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCkseyQ6YT0+YSwkZWw6YT0+YS52bm9kZS5lbCwkZGF0YTphPT5hLmRhdGEsJHByb3BzOmE9PmEucHJvcHMsJGF0dHJzOmE9PmEuYXR0cnMsJHNsb3RzOmE9PmEuc2xvdHMsJHJlZnM6YT0+YS5yZWZzLCRwYXJlbnQ6YT0+ZGUoYS5wYXJlbnQpLCRyb290OmE9PmRlKGEucm9vdCksJGVtaXQ6YT0+YS5lbWl0LCRvcHRpb25zOmE9PnhyKGEpLCRmb3JjZVVwZGF0ZTphPT5hLmZ8fChhLmY9KCk9PkNuKGEudXBkYXRlKSksJG5leHRUaWNrOmE9PmEubnx8KGEubj1hci5iaW5kKGEucHJveHkpKSwkd2F0Y2g6YT0+VmkuYmluZChhKX0pLEs9KGEsdSk9PmEhPT1FLkVNUFRZX09CSiYmIWEuX19pc1NjcmlwdFNldHVwJiZFLmhhc093bihhLHUpLHo9e2dldChhLHUpe3ZhcntfOnZ9PWEse2N0eDp5LHNldHVwU3RhdGU6UCxkYXRhOk8scHJvcHM6RixhY2Nlc3NDYWNoZTpHLHR5cGU6WSxhcHBDb250ZXh0OmxlfT12LHplO2lmKHVbMF0hPT0iJCIpe3ZhciBhdD1HW3VdO2lmKGF0IT09dm9pZCAwKXN3aXRjaChhdCl7Y2FzZSAxOnJldHVybiBQW3VdO2Nhc2UgMjpyZXR1cm4gT1t1XTtjYXNlIDQ6cmV0dXJuIHlbdV07Y2FzZSAzOnJldHVybiBGW3VdfWVsc2V7aWYoSyhQLHUpKXJldHVybiBHW3VdPTEsUFt1XTtpZihPIT09RS5FTVBUWV9PQkomJkUuaGFzT3duKE8sdSkpcmV0dXJuIEdbdV09MixPW3VdO2lmKCh6ZT12LnByb3BzT3B0aW9uc1swXSkmJkUuaGFzT3duKHplLHUpKXJldHVybiBHW3VdPTMsRlt1XTtpZih5IT09RS5FTVBUWV9PQkomJkUuaGFzT3duKHksdSkpcmV0dXJuIEdbdV09NCx5W3VdO3hlJiYoR1t1XT0wKX19dmFyIGdlPW10W3VdLEdlLFhlO2lmKGdlKXJldHVybiB1PT09IiRhdHRycyImJkIudHJhY2sodiwiZ2V0Iix1KSxnZSh2KTtpZigoR2U9WS5fX2Nzc01vZHVsZXMpJiYoR2U9R2VbdV0pKXJldHVybiBHZTtpZih5IT09RS5FTVBUWV9PQkomJkUuaGFzT3duKHksdSkpcmV0dXJuIEdbdV09NCx5W3VdO2lmKFhlPWxlLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLEUuaGFzT3duKFhlLHUpKXJldHVybiBYZVt1XX0sc2V0KGEsdSx2KXt2YXJ7Xzp5fT1hLHtkYXRhOlAsc2V0dXBTdGF0ZTpPLGN0eDpGfT15O3JldHVybiBLKE8sdSk/KE9bdV09diwhMCk6UCE9PUUuRU1QVFlfT0JKJiZFLmhhc093bihQLHUpPyhQW3VdPXYsITApOkUuaGFzT3duKHkucHJvcHMsdSl8fHVbMF09PT0iJCImJnUuc2xpY2UoMSlpbiB5PyExOihGW3VdPXYsITApfSxoYXMoYSx1KXt2YXJ7Xzp7ZGF0YTp2LHNldHVwU3RhdGU6eSxhY2Nlc3NDYWNoZTpQLGN0eDpPLGFwcENvbnRleHQ6Rixwcm9wc09wdGlvbnM6R319PWEsWTtyZXR1cm4hIVBbdV18fHYhPT1FLkVNUFRZX09CSiYmRS5oYXNPd24odix1KXx8Syh5LHUpfHwoWT1HWzBdKSYmRS5oYXNPd24oWSx1KXx8RS5oYXNPd24oTyx1KXx8RS5oYXNPd24obXQsdSl8fEUuaGFzT3duKEYuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsdSl9LGRlZmluZVByb3BlcnR5KGEsdSx2KXtyZXR1cm4gdi5nZXQhPW51bGw/YS5fLmFjY2Vzc0NhY2hlW3VdPTA6RS5oYXNPd24odiwidmFsdWUiKSYmdGhpcy5zZXQoYSx1LHYudmFsdWUsbnVsbCksUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShhLHUsdil9fSxpZT1FLmV4dGVuZCh7fSx6LHtnZXQoYSx1KXtpZih1IT09U3ltYm9sLnVuc2NvcGFibGVzKXJldHVybiB6LmdldChhLHUsYSl9LGhhcyhhLHUpe3ZhciB2PXVbMF0hPT0iXyImJiFFLmlzR2xvYmFsbHlXaGl0ZWxpc3RlZCh1KTtyZXR1cm4gdn19KSx4ZT0hMDtmdW5jdGlvbiBudChhKXt2YXIgdT14cihhKSx2PWEucHJveHkseT1hLmN0eDt4ZT0hMSx1LmJlZm9yZUNyZWF0ZSYmVG4odS5iZWZvcmVDcmVhdGUsYSwiYmMiKTt2YXJ7ZGF0YTpQLGNvbXB1dGVkOk8sbWV0aG9kczpGLHdhdGNoOkcscHJvdmlkZTpZLGluamVjdDpsZSxjcmVhdGVkOnplLGJlZm9yZU1vdW50OmF0LG1vdW50ZWQ6Z2UsYmVmb3JlVXBkYXRlOkdlLHVwZGF0ZWQ6WGUsYWN0aXZhdGVkOnd0LGRlYWN0aXZhdGVkOml0LGJlZm9yZURlc3Ryb3k6Q2UsYmVmb3JlVW5tb3VudDpFZSxkZXN0cm95ZWQ6VGUsdW5tb3VudGVkOmx0LHJlbmRlcjpOZSxyZW5kZXJUcmFja2VkOkN0LHJlbmRlclRyaWdnZXJlZDppLGVycm9yQ2FwdHVyZWQ6bCxzZXJ2ZXJQcmVmZXRjaDpmLGV4cG9zZTpfLGluaGVyaXRBdHRyczpBLGNvbXBvbmVudHM6QyxkaXJlY3RpdmVzOk4sZmlsdGVyczpNfT11LEg9bnVsbDtpZihsZSYmWXQobGUseSxILGEuYXBwQ29udGV4dC5jb25maWcudW53cmFwSW5qZWN0ZWRSZWYpLEYpZm9yKHZhciBuZSBpbiBGKXt2YXIgdmU9RltuZV07RS5pc0Z1bmN0aW9uKHZlKSYmKHlbbmVdPXZlLmJpbmQodikpfWlmKFApe3ZhciBMZT1QLmNhbGwodix2KTtFLmlzT2JqZWN0KExlKSYmKGEuZGF0YT1CLnJlYWN0aXZlKExlKSl9aWYoeGU9ITAsTyl7dmFyIHVlPWZ1bmN0aW9uKHllKXt2YXIgRmU9T1t5ZV0sQWU9RS5pc0Z1bmN0aW9uKEZlKT9GZS5iaW5kKHYsdik6RS5pc0Z1bmN0aW9uKEZlLmdldCk/RmUuZ2V0LmJpbmQodix2KTpFLk5PT1AsX3Q9IUUuaXNGdW5jdGlvbihGZSkmJkUuaXNGdW5jdGlvbihGZS5zZXQpP0ZlLnNldC5iaW5kKHYpOkUuTk9PUCxBdD1ibyh7Z2V0OkFlLHNldDpfdH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LHllLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PkF0LnZhbHVlLHNldDpLZT0+QXQudmFsdWU9S2V9KX07Zm9yKHZhciBrZSBpbiBPKXVlKGtlKX1pZihHKWZvcih2YXIgWWUgaW4gRylqbihHW1llXSx5LHYsWWUpO2lmKFkpe3ZhciBmdD1FLmlzRnVuY3Rpb24oWSk/WS5jYWxsKHYpOlk7UmVmbGVjdC5vd25LZXlzKGZ0KS5mb3JFYWNoKHllPT57RHIoeWUsZnRbeWVdKX0pfXplJiZUbih6ZSxhLCJjIik7ZnVuY3Rpb24gUWUoeWUsRmUpe0UuaXNBcnJheShGZSk/RmUuZm9yRWFjaChBZT0+eWUoQWUuYmluZCh2KSkpOkZlJiZ5ZShGZS5iaW5kKHYpKX1pZihRZShRcixhdCksUWUoWm4sZ2UpLFFlKFhuLEdlKSxRZShIbixYZSksUWUoVXIsd3QpLFFlKHRvLGl0KSxRZShubyxsKSxRZShObyxDdCksUWUoZ28saSksUWUoUW4sRWUpLFFlKGxyLGx0KSxRZShobyxmKSxFLmlzQXJyYXkoXykpaWYoXy5sZW5ndGgpe3ZhciBSZT1hLmV4cG9zZWR8fChhLmV4cG9zZWQ9e30pO18uZm9yRWFjaCh5ZT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShSZSx5ZSx7Z2V0OigpPT52W3llXSxzZXQ6RmU9PnZbeWVdPUZlfSl9KX1lbHNlIGEuZXhwb3NlZHx8KGEuZXhwb3NlZD17fSk7TmUmJmEucmVuZGVyPT09RS5OT09QJiYoYS5yZW5kZXI9TmUpLEEhPW51bGwmJihhLmluaGVyaXRBdHRycz1BKSxDJiYoYS5jb21wb25lbnRzPUMpLE4mJihhLmRpcmVjdGl2ZXM9Tik7dmFyIG1lPWEuYXBwQ29udGV4dC5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kYXBwbHlPcHRpb25zO21lJiZtZSh1LGEsdil9ZnVuY3Rpb24gWXQoYSx1KXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITE7RS5pc0FycmF5KGEpJiYoYT1tbyhhKSk7dmFyIHk9ZnVuY3Rpb24oTyl7dmFyIEY9YVtPXSxHPXZvaWQgMDtFLmlzT2JqZWN0KEYpPyJkZWZhdWx0ImluIEY/Rz1JbihGLmZyb218fE8sRi5kZWZhdWx0LCEwKTpHPUluKEYuZnJvbXx8Tyk6Rz1JbihGKSxCLmlzUmVmKEcpJiZ2P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LE8se2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+Ry52YWx1ZSxzZXQ6WT0+Ry52YWx1ZT1ZfSk6dVtPXT1HfTtmb3IodmFyIFAgaW4gYSl5KFApfWZ1bmN0aW9uIFRuKGEsdSx2KXtJKEUuaXNBcnJheShhKT9hLm1hcCh5PT55LmJpbmQodS5wcm94eSkpOmEuYmluZCh1LnByb3h5KSx1LHYpfWZ1bmN0aW9uIGpuKGEsdSx2LHkpe3ZhciBQPXkuaW5jbHVkZXMoIi4iKT9lbyh2LHkpOigpPT52W3ldO2lmKEUuaXNTdHJpbmcoYSkpe3ZhciBPPXVbYV07RS5pc0Z1bmN0aW9uKE8pJiZLcihQLE8pfWVsc2UgaWYoRS5pc0Z1bmN0aW9uKGEpKUtyKFAsYS5iaW5kKHYpKTtlbHNlIGlmKEUuaXNPYmplY3QoYSkpaWYoRS5pc0FycmF5KGEpKWEuZm9yRWFjaChHPT5qbihHLHUsdix5KSk7ZWxzZXt2YXIgRj1FLmlzRnVuY3Rpb24oYS5oYW5kbGVyKT9hLmhhbmRsZXIuYmluZCh2KTp1W2EuaGFuZGxlcl07RS5pc0Z1bmN0aW9uKEYpJiZLcihQLEYsYSl9fWZ1bmN0aW9uIHhyKGEpe3ZhciB1PWEudHlwZSx7bWl4aW5zOnYsZXh0ZW5kczp5fT11LHttaXhpbnM6UCxvcHRpb25zQ2FjaGU6Tyxjb25maWc6e29wdGlvbk1lcmdlU3RyYXRlZ2llczpGfX09YS5hcHBDb250ZXh0LEc9Ty5nZXQodSksWTtyZXR1cm4gRz9ZPUc6IVAubGVuZ3RoJiYhdiYmIXk/WT11OihZPXt9LFAubGVuZ3RoJiZQLmZvckVhY2gobGU9Pm1yKFksbGUsRiwhMCkpLG1yKFksdSxGKSksRS5pc09iamVjdCh1KSYmTy5zZXQodSxZKSxZfWZ1bmN0aW9uIG1yKGEsdSx2KXt2YXIgeT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEse21peGluczpQLGV4dGVuZHM6T309dTtPJiZtcihhLE8sdiwhMCksUCYmUC5mb3JFYWNoKFk9Pm1yKGEsWSx2LCEwKSk7Zm9yKHZhciBGIGluIHUpaWYoISh5JiZGPT09ImV4cG9zZSIpKXt2YXIgRz1wb1tGXXx8diYmdltGXTthW0ZdPUc/RyhhW0ZdLHVbRl0pOnVbRl19cmV0dXJuIGF9dmFyIHBvPXtkYXRhOnZvLHByb3BzOkJuLGVtaXRzOkJuLG1ldGhvZHM6Qm4sY29tcHV0ZWQ6Qm4sYmVmb3JlQ3JlYXRlOlluLGNyZWF0ZWQ6WW4sYmVmb3JlTW91bnQ6WW4sbW91bnRlZDpZbixiZWZvcmVVcGRhdGU6WW4sdXBkYXRlZDpZbixiZWZvcmVEZXN0cm95OlluLGJlZm9yZVVubW91bnQ6WW4sZGVzdHJveWVkOlluLHVubW91bnRlZDpZbixhY3RpdmF0ZWQ6WW4sZGVhY3RpdmF0ZWQ6WW4sZXJyb3JDYXB0dXJlZDpZbixzZXJ2ZXJQcmVmZXRjaDpZbixjb21wb25lbnRzOkJuLGRpcmVjdGl2ZXM6Qm4sd2F0Y2g6ZXIscHJvdmlkZTp2byxpbmplY3Q6Sm99O2Z1bmN0aW9uIHZvKGEsdSl7cmV0dXJuIHU/YT9mdW5jdGlvbigpe3JldHVybiBFLmV4dGVuZChFLmlzRnVuY3Rpb24oYSk/YS5jYWxsKHRoaXMsdGhpcyk6YSxFLmlzRnVuY3Rpb24odSk/dS5jYWxsKHRoaXMsdGhpcyk6dSl9OnU6YX1mdW5jdGlvbiBKbyhhLHUpe3JldHVybiBCbihtbyhhKSxtbyh1KSl9ZnVuY3Rpb24gbW8oYSl7aWYoRS5pc0FycmF5KGEpKXtmb3IodmFyIHU9e30sdj0wO3Y8YS5sZW5ndGg7disrKXVbYVt2XV09YVt2XTtyZXR1cm4gdX1yZXR1cm4gYX1mdW5jdGlvbiBZbihhLHUpe3JldHVybiBhP1suLi5uZXcgU2V0KFtdLmNvbmNhdChhLHUpKV06dX1mdW5jdGlvbiBCbihhLHUpe3JldHVybiBhP0UuZXh0ZW5kKEUuZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksYSksdSk6dX1mdW5jdGlvbiBlcihhLHUpe2lmKCFhKXJldHVybiB1O2lmKCF1KXJldHVybiBhO3ZhciB2PUUuZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksYSk7Zm9yKHZhciB5IGluIHUpdlt5XT1ZbihhW3ldLHVbeV0pO3JldHVybiB2fWZ1bmN0aW9uIFNpKGEsdSx2KXt2YXIgeT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsUD17fSxPPXt9O0UuZGVmKE8sWnQsMSksYS5wcm9wc0RlZmF1bHRzPU9iamVjdC5jcmVhdGUobnVsbCksZmEoYSx1LFAsTyk7Zm9yKHZhciBGIGluIGEucHJvcHNPcHRpb25zWzBdKUYgaW4gUHx8KFBbRl09dm9pZCAwKTt2P2EucHJvcHM9eT9QOkIuc2hhbGxvd1JlYWN0aXZlKFApOmEudHlwZS5wcm9wcz9hLnByb3BzPVA6YS5wcm9wcz1PLGEuYXR0cnM9T31mdW5jdGlvbiBpcyhhLHUsdix5KXt2YXJ7cHJvcHM6UCxhdHRyczpPLHZub2RlOntwYXRjaEZsYWc6Rn19PWEsRz1CLnRvUmF3KFApLFtZXT1hLnByb3BzT3B0aW9ucyxsZT0hMTtpZigoeXx8Rj4wKSYmIShGJjE2KSl7aWYoRiY4KWZvcih2YXIgemU9YS52bm9kZS5keW5hbWljUHJvcHMsYXQ9MDthdDx6ZS5sZW5ndGg7YXQrKyl7dmFyIGdlPXplW2F0XTtpZighT3IoYS5lbWl0c09wdGlvbnMsZ2UpKXt2YXIgR2U9dVtnZV07aWYoWSlpZihFLmhhc093bihPLGdlKSlHZSE9PU9bZ2VdJiYoT1tnZV09R2UsbGU9ITApO2Vsc2V7dmFyIFhlPUUuY2FtZWxpemUoZ2UpO1BbWGVdPV9yKFksRyxYZSxHZSxhLCExKX1lbHNlIEdlIT09T1tnZV0mJihPW2dlXT1HZSxsZT0hMCl9fX1lbHNle2ZhKGEsdSxQLE8pJiYobGU9ITApO3ZhciB3dDtmb3IodmFyIGl0IGluIEcpKCF1fHwhRS5oYXNPd24odSxpdCkmJigod3Q9RS5oeXBoZW5hdGUoaXQpKT09PWl0fHwhRS5oYXNPd24odSx3dCkpKSYmKFk/diYmKHZbaXRdIT09dm9pZCAwfHx2W3d0XSE9PXZvaWQgMCkmJihQW2l0XT1fcihZLEcsaXQsdm9pZCAwLGEsITApKTpkZWxldGUgUFtpdF0pO2lmKE8hPT1HKWZvcih2YXIgQ2UgaW4gTykoIXV8fCFFLmhhc093bih1LENlKSYmITApJiYoZGVsZXRlIE9bQ2VdLGxlPSEwKX1sZSYmQi50cmlnZ2VyKGEsInNldCIsIiRhdHRycyIpfWZ1bmN0aW9uIGZhKGEsdSx2LHkpe3ZhcltQLE9dPWEucHJvcHNPcHRpb25zLEY9ITEsRztpZih1KXtmb3IodmFyIFkgaW4gdSlpZighRS5pc1Jlc2VydmVkUHJvcChZKSl7dmFyIGxlPXVbWV0semU9dm9pZCAwO1AmJkUuaGFzT3duKFAsemU9RS5jYW1lbGl6ZShZKSk/IU98fCFPLmluY2x1ZGVzKHplKT92W3plXT1sZTooR3x8KEc9e30pKVt6ZV09bGU6T3IoYS5lbWl0c09wdGlvbnMsWSl8fCghKFkgaW4geSl8fGxlIT09eVtZXSkmJih5W1ldPWxlLEY9ITApfX1pZihPKWZvcih2YXIgYXQ9Qi50b1Jhdyh2KSxnZT1HfHxFLkVNUFRZX09CSixHZT0wO0dlPE8ubGVuZ3RoO0dlKyspe3ZhciBYZT1PW0dlXTt2W1hlXT1fcihQLGF0LFhlLGdlW1hlXSxhLCFFLmhhc093bihnZSxYZSkpfXJldHVybiBGfWZ1bmN0aW9uIF9yKGEsdSx2LHksUCxPKXt2YXIgRj1hW3ZdO2lmKEYhPW51bGwpe3ZhciBHPUUuaGFzT3duKEYsImRlZmF1bHQiKTtpZihHJiZ5PT09dm9pZCAwKXt2YXIgWT1GLmRlZmF1bHQ7aWYoRi50eXBlIT09RnVuY3Rpb24mJkUuaXNGdW5jdGlvbihZKSl7dmFye3Byb3BzRGVmYXVsdHM6bGV9PVA7diBpbiBsZT95PWxlW3ZdOihWbihQKSx5PWxlW3ZdPVkuY2FsbChudWxsLHUpLHpuKCkpfWVsc2UgeT1ZfUZbMF0mJihPJiYhRz95PSExOkZbMV0mJih5PT09IiJ8fHk9PT1FLmh5cGhlbmF0ZSh2KSkmJih5PSEwKSl9cmV0dXJuIHl9ZnVuY3Rpb24gUGEoYSx1KXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEseT11LnByb3BzQ2FjaGUsUD15LmdldChhKTtpZihQKXJldHVybiBQO3ZhciBPPWEucHJvcHMsRj17fSxHPVtdLFk9ITE7aWYoIUUuaXNGdW5jdGlvbihhKSl7dmFyIGxlPVRlPT57WT0hMDt2YXJbbHQsTmVdPVBhKFRlLHUsITApO0UuZXh0ZW5kKEYsbHQpLE5lJiZHLnB1c2goLi4uTmUpfTshdiYmdS5taXhpbnMubGVuZ3RoJiZ1Lm1peGlucy5mb3JFYWNoKGxlKSxhLmV4dGVuZHMmJmxlKGEuZXh0ZW5kcyksYS5taXhpbnMmJmEubWl4aW5zLmZvckVhY2gobGUpfWlmKCFPJiYhWSlyZXR1cm4gRS5pc09iamVjdChhKSYmeS5zZXQoYSxFLkVNUFRZX0FSUiksRS5FTVBUWV9BUlI7aWYoRS5pc0FycmF5KE8pKWZvcih2YXIgemU9MDt6ZTxPLmxlbmd0aDt6ZSsrKXt2YXIgYXQ9RS5jYW1lbGl6ZShPW3plXSk7JGEoYXQpJiYoRlthdF09RS5FTVBUWV9PQkopfWVsc2UgaWYoTylmb3IodmFyIGdlIGluIE8pe3ZhciBHZT1FLmNhbWVsaXplKGdlKTtpZigkYShHZSkpe3ZhciBYZT1PW2dlXSx3dD1GW0dlXT1FLmlzQXJyYXkoWGUpfHxFLmlzRnVuY3Rpb24oWGUpP3t0eXBlOlhlfTpPYmplY3QuYXNzaWduKHt9LFhlKTtpZih3dCl7dmFyIGl0PWphKEJvb2xlYW4sd3QudHlwZSksQ2U9amEoU3RyaW5nLHd0LnR5cGUpO3d0WzBdPWl0Pi0xLHd0WzFdPUNlPDB8fGl0PENlLChpdD4tMXx8RS5oYXNPd24od3QsImRlZmF1bHQiKSkmJkcucHVzaChHZSl9fX12YXIgRWU9W0YsR107cmV0dXJuIEUuaXNPYmplY3QoYSkmJnkuc2V0KGEsRWUpLEVlfWZ1bmN0aW9uICRhKGEpe3JldHVybiBhWzBdIT09IiQifWZ1bmN0aW9uIFVhKGEpe3ZhciB1PWEmJmEudG9TdHJpbmcoKS5tYXRjaCgvXlxzKihmdW5jdGlvbnxjbGFzcykgKFx3KykvKTtyZXR1cm4gdT91WzJdOmE9PT1udWxsPyJudWxsIjoiIn1mdW5jdGlvbiBIYShhLHUpe3JldHVybiBVYShhKT09PVVhKHUpfWZ1bmN0aW9uIGphKGEsdSl7cmV0dXJuIEUuaXNBcnJheSh1KT91LmZpbmRJbmRleCh2PT5IYSh2LGEpKTpFLmlzRnVuY3Rpb24odSkmJkhhKHUsYSk/MDotMX12YXIgZGE9YT0+YVswXT09PSJfInx8YT09PSIkc3RhYmxlIixJYT1hPT5FLmlzQXJyYXkoYSk/YS5tYXAoTW4pOltNbihhKV0sTG49KGEsdSx2KT0+e2lmKHUuX24pcmV0dXJuIHU7dmFyIHk9RmkoZnVuY3Rpb24oKXtyZXR1cm4gSWEodSguLi5hcmd1bWVudHMpKX0sdik7cmV0dXJuIHkuX2M9ITEseX0sQm89KGEsdSx2KT0+e3ZhciB5PWEuX2N0eDtmb3IodmFyIFAgaW4gYSlpZighZGEoUCkpe3ZhciBPPWFbUF07RS5pc0Z1bmN0aW9uKE8pP3VbUF09TG4oUCxPLHkpOk8hPW51bGwmJmZ1bmN0aW9uKCl7dmFyIEY9SWEoTyk7dVtQXT0oKT0+Rn0oKX19LFpvPShhLHUpPT57dmFyIHY9SWEodSk7YS5zbG90cy5kZWZhdWx0PSgpPT52fSxqaT0oYSx1KT0+e2lmKGEudm5vZGUuc2hhcGVGbGFnJjMyKXt2YXIgdj11Ll87dj8oYS5zbG90cz1CLnRvUmF3KHUpLEUuZGVmKHUsIl8iLHYpKTpCbyh1LGEuc2xvdHM9e30pfWVsc2UgYS5zbG90cz17fSx1JiZabyhhLHUpO0UuZGVmKGEuc2xvdHMsWnQsMSl9LG9zPShhLHUsdik9Pnt2YXJ7dm5vZGU6eSxzbG90czpQfT1hLE89ITAsRj1FLkVNUFRZX09CSjtpZih5LnNoYXBlRmxhZyYzMil7dmFyIEc9dS5fO0c/diYmRz09PTE/Tz0hMTooRS5leHRlbmQoUCx1KSwhdiYmRz09PTEmJmRlbGV0ZSBQLl8pOihPPSF1LiRzdGFibGUsQm8odSxQKSksRj11fWVsc2UgdSYmKFpvKGEsdSksRj17ZGVmYXVsdDoxfSk7aWYoTylmb3IodmFyIFkgaW4gUCkhZGEoWSkmJiEoWSBpbiBGKSYmZGVsZXRlIFBbWV19O2Z1bmN0aW9uIGFzKCl7cmV0dXJue2FwcDpudWxsLGNvbmZpZzp7aXNOYXRpdmVUYWc6RS5OTyxwZXJmb3JtYW5jZTohMSxnbG9iYWxQcm9wZXJ0aWVzOnt9LG9wdGlvbk1lcmdlU3RyYXRlZ2llczp7fSxlcnJvckhhbmRsZXI6dm9pZCAwLHdhcm5IYW5kbGVyOnZvaWQgMCxjb21waWxlck9wdGlvbnM6e319LG1peGluczpbXSxjb21wb25lbnRzOnt9LGRpcmVjdGl2ZXM6e30scHJvdmlkZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxvcHRpb25zQ2FjaGU6bmV3IFdlYWtNYXAscHJvcHNDYWNoZTpuZXcgV2Vha01hcCxlbWl0c0NhY2hlOm5ldyBXZWFrTWFwfX12YXIgTG89MDtmdW5jdGlvbiBzcyhhLHUpe3JldHVybiBmdW5jdGlvbih5KXt2YXIgUD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbDtFLmlzRnVuY3Rpb24oeSl8fCh5PU9iamVjdC5hc3NpZ24oe30seSkpLFAhPW51bGwmJiFFLmlzT2JqZWN0KFApJiYoUD1udWxsKTt2YXIgTz1hcygpLEY9bmV3IFNldCxHPSExLFk9Ty5hcHA9e191aWQ6TG8rKyxfY29tcG9uZW50OnksX3Byb3BzOlAsX2NvbnRhaW5lcjpudWxsLF9jb250ZXh0Ok8sX2luc3RhbmNlOm51bGwsdmVyc2lvbjpwcyxnZXQgY29uZmlnKCl7cmV0dXJuIE8uY29uZmlnfSxzZXQgY29uZmlnKGxlKXt9LHVzZShsZSl7Zm9yKHZhciB6ZT1hcmd1bWVudHMubGVuZ3RoLGF0PW5ldyBBcnJheSh6ZT4xP3plLTE6MCksZ2U9MTtnZTx6ZTtnZSsrKWF0W2dlLTFdPWFyZ3VtZW50c1tnZV07cmV0dXJuIEYuaGFzKGxlKXx8KGxlJiZFLmlzRnVuY3Rpb24obGUuaW5zdGFsbCk/KEYuYWRkKGxlKSxsZS5pbnN0YWxsKFksLi4uYXQpKTpFLmlzRnVuY3Rpb24obGUpJiYoRi5hZGQobGUpLGxlKFksLi4uYXQpKSksWX0sbWl4aW4obGUpe3JldHVybiBPLm1peGlucy5pbmNsdWRlcyhsZSl8fE8ubWl4aW5zLnB1c2gobGUpLFl9LGNvbXBvbmVudChsZSx6ZSl7cmV0dXJuIHplPyhPLmNvbXBvbmVudHNbbGVdPXplLFkpOk8uY29tcG9uZW50c1tsZV19LGRpcmVjdGl2ZShsZSx6ZSl7cmV0dXJuIHplPyhPLmRpcmVjdGl2ZXNbbGVdPXplLFkpOk8uZGlyZWN0aXZlc1tsZV19LG1vdW50KGxlLHplLGF0KXtpZighRyl7dmFyIGdlPUZ0KHksUCk7cmV0dXJuIGdlLmFwcENvbnRleHQ9Tyx6ZSYmdT91KGdlLGxlKTphKGdlLGxlLGF0KSxHPSEwLFkuX2NvbnRhaW5lcj1sZSxsZS5fX3Z1ZV9hcHBfXz1ZLFkuX2luc3RhbmNlPWdlLmNvbXBvbmVudCxEbyhnZS5jb21wb25lbnQpfHxnZS5jb21wb25lbnQucHJveHl9fSx1bm1vdW50KCl7RyYmKGEobnVsbCxZLl9jb250YWluZXIpLGRlbGV0ZSBZLl9jb250YWluZXIuX192dWVfYXBwX18pfSxwcm92aWRlKGxlLHplKXtyZXR1cm4gTy5wcm92aWRlc1tsZV09emUsWX19O3JldHVybiBZfX1mdW5jdGlvbiBpbyhhLHUsdix5KXt2YXIgUD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITE7aWYoRS5pc0FycmF5KGEpKXthLmZvckVhY2goKHd0LGl0KT0+aW8od3QsdSYmKEUuaXNBcnJheSh1KT91W2l0XTp1KSx2LHksUCkpO3JldHVybn1pZighKHByKHkpJiYhUCkpe3ZhciBPPXkuc2hhcGVGbGFnJjQ/RG8oeS5jb21wb25lbnQpfHx5LmNvbXBvbmVudC5wcm94eTp5LmVsLEY9UD9udWxsOk8se2k6RyxyOll9PWEsbGU9dSYmdS5yLHplPUcucmVmcz09PUUuRU1QVFlfT0JKP0cucmVmcz17fTpHLnJlZnMsYXQ9Ry5zZXR1cFN0YXRlO2lmKGxlIT1udWxsJiZsZSE9PVkmJihFLmlzU3RyaW5nKGxlKT8oemVbbGVdPW51bGwsRS5oYXNPd24oYXQsbGUpJiYoYXRbbGVdPW51bGwpKTpCLmlzUmVmKGxlKSYmKGxlLnZhbHVlPW51bGwpKSxFLmlzRnVuY3Rpb24oWSkpeHQoWSxHLDEyLFtGLHplXSk7ZWxzZXt2YXIgZ2U9RS5pc1N0cmluZyhZKSxHZT1CLmlzUmVmKFkpO2lmKGdlfHxHZSl7dmFyIFhlPSgpPT57aWYoYS5mKXt2YXIgd3Q9Z2U/RS5oYXNPd24oYXQsWSk/YXRbWV06emVbWV06WS52YWx1ZTtQP0UuaXNBcnJheSh3dCkmJkUucmVtb3ZlKHd0LE8pOkUuaXNBcnJheSh3dCk/d3QuaW5jbHVkZXMoTyl8fHd0LnB1c2goTyk6Z2U/KHplW1ldPVtPXSxFLmhhc093bihhdCxZKSYmKGF0W1ldPXplW1ldKSk6KFkudmFsdWU9W09dLGEuayYmKHplW2Eua109WS52YWx1ZSkpfWVsc2UgZ2U/KHplW1ldPUYsRS5oYXNPd24oYXQsWSkmJihhdFtZXT1GKSk6R2UmJihZLnZhbHVlPUYsYS5rJiYoemVbYS5rXT1GKSl9O0Y/KFhlLmlkPS0xLGNyKFhlLHYpKTpYZSgpfX19fXZhciBzaT0hMSx3aT1hPT4vc3ZnLy50ZXN0KGEubmFtZXNwYWNlVVJJKSYmYS50YWdOYW1lIT09ImZvcmVpZ25PYmplY3QiLHppPWE9PmEubm9kZVR5cGU9PT04O2Z1bmN0aW9uIGxpKGEpe3ZhcnttdDp1LHA6dixvOntwYXRjaFByb3A6eSxjcmVhdGVUZXh0OlAsbmV4dFNpYmxpbmc6TyxwYXJlbnROb2RlOkYscmVtb3ZlOkcsaW5zZXJ0OlksY3JlYXRlQ29tbWVudDpsZX19PWEsemU9KENlLEVlKT0+e2lmKCFFZS5oYXNDaGlsZE5vZGVzKCkpe3YobnVsbCxDZSxFZSksVmUoKSxFZS5fdm5vZGU9Q2U7cmV0dXJufXNpPSExLGF0KEVlLmZpcnN0Q2hpbGQsQ2UsbnVsbCxudWxsLG51bGwpLFZlKCksRWUuX3Zub2RlPUNlLHNpJiZjb25zb2xlLmVycm9yKCJIeWRyYXRpb24gY29tcGxldGVkIGJ1dCBjb250YWlucyBtaXNtYXRjaGVzLiIpfSxhdD1mdW5jdGlvbihDZSxFZSxUZSxsdCxOZSl7dmFyIEN0PWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMSxpPXppKENlKSYmQ2UuZGF0YT09PSJbIixsPSgpPT53dChDZSxFZSxUZSxsdCxOZSxpKSx7dHlwZTpmLHJlZjpfLHNoYXBlRmxhZzpBLHBhdGNoRmxhZzpDfT1FZSxOPUNlLm5vZGVUeXBlO0VlLmVsPUNlLEM9PT0tMiYmKEN0PSExLEVlLmR5bmFtaWNDaGlsZHJlbj1udWxsKTt2YXIgTT1udWxsO3N3aXRjaChmKXtjYXNlIHRlOk4hPT0zP0VlLmNoaWxkcmVuPT09IiI/KFkoRWUuZWw9UCgiIiksRihDZSksQ2UpLE09Q2UpOk09bCgpOihDZS5kYXRhIT09RWUuY2hpbGRyZW4mJihzaT0hMCxDZS5kYXRhPUVlLmNoaWxkcmVuKSxNPU8oQ2UpKTticmVhaztjYXNlIGNlOk4hPT04fHxpP009bCgpOk09TyhDZSk7YnJlYWs7Y2FzZSBwZTppZihpJiYoQ2U9TyhDZSksTj1DZS5ub2RlVHlwZSksTj09PTF8fE49PT0zKXtNPUNlO2Zvcih2YXIgSD0hRWUuY2hpbGRyZW4ubGVuZ3RoLG5lPTA7bmU8RWUuc3RhdGljQ291bnQ7bmUrKylIJiYoRWUuY2hpbGRyZW4rPU0ubm9kZVR5cGU9PT0xP00ub3V0ZXJIVE1MOk0uZGF0YSksbmU9PT1FZS5zdGF0aWNDb3VudC0xJiYoRWUuYW5jaG9yPU0pLE09TyhNKTtyZXR1cm4gaT9PKE0pOk19ZWxzZSBsKCk7YnJlYWs7Y2FzZSBKOmk/TT1YZShDZSxFZSxUZSxsdCxOZSxDdCk6TT1sKCk7YnJlYWs7ZGVmYXVsdDppZihBJjEpTiE9PTF8fEVlLnR5cGUudG9Mb3dlckNhc2UoKSE9PUNlLnRhZ05hbWUudG9Mb3dlckNhc2UoKT9NPWwoKTpNPWdlKENlLEVlLFRlLGx0LE5lLEN0KTtlbHNlIGlmKEEmNil7RWUuc2xvdFNjb3BlSWRzPU5lO3ZhciB2ZT1GKENlKTtpZih1KEVlLHZlLG51bGwsVGUsbHQsd2kodmUpLEN0KSxNPWk/aXQoQ2UpOk8oQ2UpLE0mJnppKE0pJiZNLmRhdGE9PT0idGVsZXBvcnQgZW5kIiYmKE09TyhNKSkscHIoRWUpKXt2YXIgTGU7aT8oTGU9RnQoSiksTGUuYW5jaG9yPU0/TS5wcmV2aW91c1NpYmxpbmc6dmUubGFzdENoaWxkKTpMZT1DZS5ub2RlVHlwZT09PTM/ZWkoIiIpOkZ0KCJkaXYiKSxMZS5lbD1DZSxFZS5jb21wb25lbnQuc3ViVHJlZT1MZX19ZWxzZSBBJjY0P04hPT04P009bCgpOk09RWUudHlwZS5oeWRyYXRlKENlLEVlLFRlLGx0LE5lLEN0LGEsR2UpOkEmMTI4JiYoTT1FZS50eXBlLmh5ZHJhdGUoQ2UsRWUsVGUsbHQsd2koRihDZSkpLE5lLEN0LGEsYXQpKX1yZXR1cm4gXyE9bnVsbCYmaW8oXyxudWxsLGx0LEVlKSxNfSxnZT0oQ2UsRWUsVGUsbHQsTmUsQ3QpPT57Q3Q9Q3R8fCEhRWUuZHluYW1pY0NoaWxkcmVuO3Zhcnt0eXBlOmkscHJvcHM6bCxwYXRjaEZsYWc6ZixzaGFwZUZsYWc6XyxkaXJzOkF9PUVlLEM9aT09PSJpbnB1dCImJkF8fGk9PT0ib3B0aW9uIjtpZihDfHxmIT09LTEpe2lmKEEmJmpyKEVlLG51bGwsVGUsImNyZWF0ZWQiKSxsKWlmKEN8fCFDdHx8ZiYoMTZ8MzIpKWZvcih2YXIgTiBpbiBsKShDJiZOLmVuZHNXaXRoKCJ2YWx1ZSIpfHxFLmlzT24oTikmJiFFLmlzUmVzZXJ2ZWRQcm9wKE4pKSYmeShDZSxOLG51bGwsbFtOXSwhMSx2b2lkIDAsVGUpO2Vsc2UgbC5vbkNsaWNrJiZ5KENlLCJvbkNsaWNrIixudWxsLGwub25DbGljaywhMSx2b2lkIDAsVGUpO3ZhciBNO2lmKChNPWwmJmwub25Wbm9kZUJlZm9yZU1vdW50KSYmYnIoTSxUZSxFZSksQSYmanIoRWUsbnVsbCxUZSwiYmVmb3JlTW91bnQiKSwoKE09bCYmbC5vblZub2RlTW91bnRlZCl8fEEpJiZiaSgoKT0+e00mJmJyKE0sVGUsRWUpLEEmJmpyKEVlLG51bGwsVGUsIm1vdW50ZWQiKX0sbHQpLF8mMTYmJiEobCYmKGwuaW5uZXJIVE1MfHxsLnRleHRDb250ZW50KSkpZm9yKHZhciBIPUdlKENlLmZpcnN0Q2hpbGQsRWUsQ2UsVGUsbHQsTmUsQ3QpO0g7KXtzaT0hMDt2YXIgbmU9SDtIPUgubmV4dFNpYmxpbmcsRyhuZSl9ZWxzZSBfJjgmJkNlLnRleHRDb250ZW50IT09RWUuY2hpbGRyZW4mJihzaT0hMCxDZS50ZXh0Q29udGVudD1FZS5jaGlsZHJlbil9cmV0dXJuIENlLm5leHRTaWJsaW5nfSxHZT0oQ2UsRWUsVGUsbHQsTmUsQ3QsaSk9PntpPWl8fCEhRWUuZHluYW1pY0NoaWxkcmVuO2Zvcih2YXIgbD1FZS5jaGlsZHJlbixmPWwubGVuZ3RoLF89MDtfPGY7XysrKXt2YXIgQT1pP2xbX106bFtfXT1NbihsW19dKTtpZihDZSlDZT1hdChDZSxBLGx0LE5lLEN0LGkpO2Vsc2V7aWYoQS50eXBlPT09dGUmJiFBLmNoaWxkcmVuKWNvbnRpbnVlO3NpPSEwLHYobnVsbCxBLFRlLG51bGwsbHQsTmUsd2koVGUpLEN0KX19cmV0dXJuIENlfSxYZT0oQ2UsRWUsVGUsbHQsTmUsQ3QpPT57dmFye3Nsb3RTY29wZUlkczppfT1FZTtpJiYoTmU9TmU/TmUuY29uY2F0KGkpOmkpO3ZhciBsPUYoQ2UpLGY9R2UoTyhDZSksRWUsbCxUZSxsdCxOZSxDdCk7cmV0dXJuIGYmJnppKGYpJiZmLmRhdGE9PT0iXSI/TyhFZS5hbmNob3I9Zik6KHNpPSEwLFkoRWUuYW5jaG9yPWxlKCJdIiksbCxmKSxmKX0sd3Q9KENlLEVlLFRlLGx0LE5lLEN0KT0+e2lmKHNpPSEwLEVlLmVsPW51bGwsQ3QpZm9yKHZhciBpPWl0KENlKTs7KXt2YXIgbD1PKENlKTtpZihsJiZsIT09aSlHKGwpO2Vsc2UgYnJlYWt9dmFyIGY9TyhDZSksXz1GKENlKTtyZXR1cm4gRyhDZSksdihudWxsLEVlLF8sZixUZSxsdCx3aShfKSxOZSksZn0saXQ9Q2U9Pntmb3IodmFyIEVlPTA7Q2U7KWlmKENlPU8oQ2UpLENlJiZ6aShDZSkmJihDZS5kYXRhPT09IlsiJiZFZSsrLENlLmRhdGE9PT0iXSIpKXtpZihFZT09PTApcmV0dXJuIE8oQ2UpO0VlLS19cmV0dXJuIENlfTtyZXR1cm5bemUsYXRdfXZhciBjcj1iaTtmdW5jdGlvbiBvcihhKXtyZXR1cm4gV2EoYSl9ZnVuY3Rpb24gemEoYSl7cmV0dXJuIFdhKGEsbGkpfWZ1bmN0aW9uIFdhKGEsdSl7dmFyIHY9RS5nZXRHbG9iYWxUaGlzKCk7di5fX1ZVRV9fPSEwO3ZhcntpbnNlcnQ6eSxyZW1vdmU6UCxwYXRjaFByb3A6Tyxmb3JjZVBhdGNoUHJvcDpGLGNyZWF0ZUVsZW1lbnQ6RyxjcmVhdGVUZXh0OlksY3JlYXRlQ29tbWVudDpsZSxzZXRUZXh0OnplLHNldEVsZW1lbnRUZXh0OmF0LHBhcmVudE5vZGU6Z2UsbmV4dFNpYmxpbmc6R2Usc2V0U2NvcGVJZDpYZT1FLk5PT1AsaW5zZXJ0U3RhdGljQ29udGVudDp3dH09YSxpdD1mdW5jdGlvbihMLGosYWUpe3ZhciByZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbCxvZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCwkZT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06bnVsbCxydD1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSE9PXZvaWQgMD9hcmd1bWVudHNbNl06ITEscWU9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOm51bGwsSmU9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOiEhai5keW5hbWljQ2hpbGRyZW47aWYoTCE9PWope0wmJiFXdChMLGopJiYocmU9QWUoTCksUWUoTCxvZSwkZSwhMCksTD1udWxsKSxqLnBhdGNoRmxhZz09PS0yJiYoSmU9ITEsai5keW5hbWljQ2hpbGRyZW49bnVsbCk7dmFye3R5cGU6VWUscmVmOlZ0LHNoYXBlRmxhZzpwdH09ajtzd2l0Y2goVWUpe2Nhc2UgdGU6Q2UoTCxqLGFlLHJlKTticmVhaztjYXNlIGNlOkVlKEwsaixhZSxyZSk7YnJlYWs7Y2FzZSBwZTpMPT1udWxsJiZUZShqLGFlLHJlLHJ0KTticmVhaztjYXNlIEo6TihMLGosYWUscmUsb2UsJGUscnQscWUsSmUpO2JyZWFrO2RlZmF1bHQ6cHQmMT9DdChMLGosYWUscmUsb2UsJGUscnQscWUsSmUpOnB0JjY/TShMLGosYWUscmUsb2UsJGUscnQscWUsSmUpOihwdCY2NHx8cHQmMTI4KSYmVWUucHJvY2VzcyhMLGosYWUscmUsb2UsJGUscnQscWUsSmUsQXQpfVZ0IT1udWxsJiZvZSYmaW8oVnQsTCYmTC5yZWYsJGUsanx8TCwhail9fSxDZT0oTCxqLGFlLHJlKT0+e2lmKEw9PW51bGwpeShqLmVsPVkoai5jaGlsZHJlbiksYWUscmUpO2Vsc2V7dmFyIG9lPWouZWw9TC5lbDtqLmNoaWxkcmVuIT09TC5jaGlsZHJlbiYmemUob2Usai5jaGlsZHJlbil9fSxFZT0oTCxqLGFlLHJlKT0+e0w9PW51bGw/eShqLmVsPWxlKGouY2hpbGRyZW58fCIiKSxhZSxyZSk6ai5lbD1MLmVsfSxUZT0oTCxqLGFlLHJlKT0+e1tMLmVsLEwuYW5jaG9yXT13dChMLmNoaWxkcmVuLGosYWUscmUsTC5lbCxMLmFuY2hvcil9LGx0PShMLGosYWUpPT57Zm9yKHZhcntlbDpyZSxhbmNob3I6b2V9PUwsJGU7cmUmJnJlIT09b2U7KSRlPUdlKHJlKSx5KHJlLGosYWUpLHJlPSRlO3kob2UsaixhZSl9LE5lPUw9Pntmb3IodmFye2VsOmosYW5jaG9yOmFlfT1MLHJlO2omJmohPT1hZTspcmU9R2UoaiksUChqKSxqPXJlO1AoYWUpfSxDdD0oTCxqLGFlLHJlLG9lLCRlLHJ0LHFlLEplKT0+e3J0PXJ0fHxqLnR5cGU9PT0ic3ZnIixMPT1udWxsP2koaixhZSxyZSxvZSwkZSxydCxxZSxKZSk6XyhMLGosb2UsJGUscnQscWUsSmUpfSxpPShMLGosYWUscmUsb2UsJGUscnQscWUpPT57dmFyIEplLFVlLHt0eXBlOlZ0LHByb3BzOnB0LHNoYXBlRmxhZzprdCx0cmFuc2l0aW9uOlJ0LGRpcnM6eG59PUw7aWYoSmU9TC5lbD1HKEwudHlwZSwkZSxwdCYmcHQuaXMscHQpLGt0Jjg/YXQoSmUsTC5jaGlsZHJlbik6a3QmMTYmJmYoTC5jaGlsZHJlbixKZSxudWxsLHJlLG9lLCRlJiZWdCE9PSJmb3JlaWduT2JqZWN0IixydCxxZSkseG4mJmpyKEwsbnVsbCxyZSwiY3JlYXRlZCIpLGwoSmUsTCxMLnNjb3BlSWQscnQscmUpLHB0KXtmb3IodmFyIGtuIGluIHB0KWtuIT09InZhbHVlIiYmIUUuaXNSZXNlcnZlZFByb3Aoa24pJiZPKEplLGtuLG51bGwscHRba25dLCRlLEwuY2hpbGRyZW4scmUsb2UsRmUsTC5ob3N0SW5zdGFuY2UpOyJ2YWx1ZSJpbiBwdCYmTyhKZSwidmFsdWUiLG51bGwscHQudmFsdWUsITEsW10scmUsbnVsbCx2b2lkIDAsTC5ob3N0SW5zdGFuY2UpLChVZT1wdC5vblZub2RlQmVmb3JlTW91bnQpJiZicihVZSxyZSxMKX14biYmanIoTCxudWxsLHJlLCJiZWZvcmVNb3VudCIpO3ZhciBobj0oIW9lfHxvZSYmIW9lLnBlbmRpbmdCcmFuY2gpJiZSdCYmIVJ0LnBlcnNpc3RlZDtobiYmUnQuYmVmb3JlRW50ZXIoSmUpLHkoSmUsaixhZSksKChVZT1wdCYmcHQub25Wbm9kZU1vdW50ZWQpfHxobnx8eG4pJiZjcigoKT0+e1VlJiZicihVZSxyZSxMKSxobiYmUnQuZW50ZXIoSmUpLHhuJiZqcihMLG51bGwscmUsIm1vdW50ZWQiKX0sb2UpfSxsPShMLGosYWUscmUsb2UpPT57aWYoYWUmJlhlKEwsYWUpLHJlKWZvcih2YXIgJGU9MDskZTxyZS5sZW5ndGg7JGUrKylYZShMLHJlWyRlXSk7aWYob2Upe3ZhciBydD1vZS5zdWJUcmVlO2lmKGo9PT1ydCl7dmFyIHFlPW9lLnZub2RlO2woTCxxZSxxZS5zY29wZUlkLHFlLnNsb3RTY29wZUlkcyxvZS5wYXJlbnQpfX19LGY9ZnVuY3Rpb24oTCxqLGFlLHJlLG9lLCRlLHJ0LHFlKXtmb3IodmFyIEplPWFyZ3VtZW50cy5sZW5ndGg+OCYmYXJndW1lbnRzWzhdIT09dm9pZCAwP2FyZ3VtZW50c1s4XTowLFVlPUplO1VlPEwubGVuZ3RoO1VlKyspe3ZhciBWdD1MW1VlXT1xZT9EbihMW1VlXSk6TW4oTFtVZV0pO2l0KG51bGwsVnQsaixhZSxyZSxvZSwkZSxydCxxZSl9fSxfPShMLGosYWUscmUsb2UsJGUscnQpPT57dmFyIHFlPWouZWw9TC5lbCx7cGF0Y2hGbGFnOkplLGR5bmFtaWNDaGlsZHJlbjpVZSxkaXJzOlZ0fT1qO0plfD1MLnBhdGNoRmxhZyYxNjt2YXIgcHQ9TC5wcm9wc3x8RS5FTVBUWV9PQkosa3Q9ai5wcm9wc3x8RS5FTVBUWV9PQkosUnQ7YWUmJldpKGFlLCExKSwoUnQ9a3Qub25Wbm9kZUJlZm9yZVVwZGF0ZSkmJmJyKFJ0LGFlLGosTCksVnQmJmpyKGosTCxhZSwiYmVmb3JlVXBkYXRlIiksYWUmJldpKGFlLCEwKTt2YXIgeG49b2UmJmoudHlwZSE9PSJmb3JlaWduT2JqZWN0IjtpZihVZT9BKEwuZHluYW1pY0NoaWxkcmVuLFVlLHFlLGFlLHJlLHhuLCRlKTpydHx8dWUoTCxqLHFlLG51bGwsYWUscmUseG4sJGUsITEpLEplPjApe2lmKEplJjE2KUMocWUsaixwdCxrdCxhZSxyZSxvZSk7ZWxzZSBpZihKZSYyJiZwdC5jbGFzcyE9PWt0LmNsYXNzJiZPKHFlLCJjbGFzcyIsbnVsbCxrdC5jbGFzcyxvZSxbXSxhZSxudWxsLHZvaWQgMCxqLmhvc3RJbnN0YW5jZSksSmUmNCYmTyhxZSwic3R5bGUiLHB0LnN0eWxlLGt0LnN0eWxlLG9lLFtdLGFlLG51bGwsdm9pZCAwLGouaG9zdEluc3RhbmNlKSxKZSY4KWZvcih2YXIga249ai5keW5hbWljUHJvcHMsaG49MDtobjxrbi5sZW5ndGg7aG4rKyl7dmFyIG1uPWtuW2huXSx1cj1wdFttbl0sbmk9a3RbbW5dOyhuaSE9PXVyfHxtbj09PSJ2YWx1ZSJ8fEYmJkYocWUsbW4pKSYmTyhxZSxtbix1cixuaSxvZSxMLmNoaWxkcmVuLGFlLHJlLEZlLGouaG9zdEluc3RhbmNlKX1KZSYxJiZMLmNoaWxkcmVuIT09ai5jaGlsZHJlbiYmYXQocWUsai5jaGlsZHJlbil9ZWxzZSFydCYmVWU9PW51bGwmJkMocWUsaixwdCxrdCxhZSxyZSxvZSk7KChSdD1rdC5vblZub2RlVXBkYXRlZCl8fFZ0KSYmY3IoKCk9PntSdCYmYnIoUnQsYWUsaixMKSxWdCYmanIoaixMLGFlLCJ1cGRhdGVkIil9LHJlKX0sQT0oTCxqLGFlLHJlLG9lLCRlLHJ0KT0+e2Zvcih2YXIgcWU9MDtxZTxqLmxlbmd0aDtxZSsrKXt2YXIgSmU9TFtxZV0sVWU9altxZV0sVnQ9SmUuZWwmJihKZS50eXBlPT09Snx8IVd0KEplLFVlKXx8SmUuc2hhcGVGbGFnJig2fDY0KSk/Z2UoSmUuZWwpOmFlO2l0KEplLFVlLFZ0LG51bGwscmUsb2UsJGUscnQsITApfX0sQz0oTCxqLGFlLHJlLG9lLCRlLHJ0KT0+e2lmKGFlIT09cmUpe2lmKGFlIT09RS5FTVBUWV9PQkopZm9yKHZhciBxZSBpbiBhZSkhRS5pc1Jlc2VydmVkUHJvcChxZSkmJiEocWUgaW4gcmUpJiZPKEwscWUsYWVbcWVdLG51bGwscnQsai5jaGlsZHJlbixvZSwkZSxGZSxqLmhvc3RJbnN0YW5jZSk7Zm9yKHZhciBKZSBpbiByZSlpZighRS5pc1Jlc2VydmVkUHJvcChKZSkpe3ZhciBVZT1yZVtKZV0sVnQ9YWVbSmVdOyhVZSE9PVZ0JiZKZSE9PSJ2YWx1ZSJ8fEYmJkYoTCxKZSkpJiZPKEwsSmUsVnQsVWUscnQsai5jaGlsZHJlbixvZSwkZSxGZSxqLmhvc3RJbnN0YW5jZSl9InZhbHVlImluIHJlJiZPKEwsInZhbHVlIixhZS52YWx1ZSxyZS52YWx1ZSwhMSxbXSxvZSxudWxsLHZvaWQgMCxqLmhvc3RJbnN0YW5jZSl9fSxOPShMLGosYWUscmUsb2UsJGUscnQscWUsSmUpPT57dmFyIFVlPWouZWw9TD9MLmVsOlkoIiIpLFZ0PWouYW5jaG9yPUw/TC5hbmNob3I6WSgiIikse3BhdGNoRmxhZzpwdCxkeW5hbWljQ2hpbGRyZW46a3Qsc2xvdFNjb3BlSWRzOlJ0fT1qO1J0JiYocWU9cWU/cWUuY29uY2F0KFJ0KTpSdCksTD09bnVsbD8oeShVZSxhZSxyZSkseShWdCxhZSxyZSksZihqLmNoaWxkcmVuLGFlLFZ0LG9lLCRlLHJ0LHFlLEplKSk6cHQ+MCYmcHQmNjQmJmt0JiZMLmR5bmFtaWNDaGlsZHJlbj8oQShMLmR5bmFtaWNDaGlsZHJlbixrdCxhZSxvZSwkZSxydCxxZSksKGoua2V5IT1udWxsfHxvZSYmaj09PW9lLnN1YlRyZWUpJiZvbyhMLGosITApKTp1ZShMLGosYWUsVnQsb2UsJGUscnQscWUsSmUpfSxNPShMLGosYWUscmUsb2UsJGUscnQscWUsSmUpPT57ai5zbG90U2NvcGVJZHM9cWUsTD09bnVsbD9qLnNoYXBlRmxhZyY1MTI/b2UuY3R4LmFjdGl2YXRlKGosYWUscmUscnQsSmUpOkgoaixhZSxyZSxvZSwkZSxydCxKZSk6bmUoTCxqLEplKX0sSD0oTCxqLGFlLHJlLG9lLCRlLHJ0KT0+e3ZhciBxZT1MLmNvbXBvbmVudD1jcyhMLHJlLG9lKTtpZihQcihMKSYmKHFlLmN0eC5yZW5kZXJlcj1BdCksdXMocWUpLHFlLmFzeW5jRGVwKXtpZihvZSYmb2UucmVnaXN0ZXJEZXAocWUsdmUpLCFMLmVsKXt2YXIgSmU9cWUuc3ViVHJlZT1GdChjZSk7RWUobnVsbCxKZSxqLGFlKX1yZXR1cm59dmUocWUsTCxqLGFlLG9lLCRlLHJ0KX0sbmU9KEwsaixhZSk9Pnt2YXIgcmU9ai5jb21wb25lbnQ9TC5jb21wb25lbnQ7aWYoT28oTCxqLGFlKSlpZihyZS5hc3luY0RlcCYmIXJlLmFzeW5jUmVzb2x2ZWQpe0xlKHJlLGosYWUpO3JldHVybn1lbHNlIHJlLm5leHQ9aixDcihyZS51cGRhdGUpLHJlLnVwZGF0ZSgpO2Vsc2Ugai5lbD1MLmVsLHJlLnZub2RlPWp9LHZlPShMLGosYWUscmUsb2UsJGUscnQpPT57dmFyIHFlPSgpPT57aWYoTC5pc01vdW50ZWQpe3ZhcntuZXh0Okt0LGJ1OnJuLHU6bG8scGFyZW50OnEsdm5vZGU6ZWV9PUwsYmU9S3QsTWU7V2koTCwhMSksS3Q/KEt0LmVsPWVlLmVsLExlKEwsS3QscnQpKTpLdD1lZSxybiYmRS5pbnZva2VBcnJheUZucyhybiksKE1lPUt0LnByb3BzJiZLdC5wcm9wcy5vblZub2RlQmVmb3JlVXBkYXRlKSYmYnIoTWUscSxLdCxlZSksV2koTCwhMCk7dmFyIERlPUFvKEwpLFplPUwuc3ViVHJlZTtMLnN1YlRyZWU9RGUsaXQoWmUsRGUsZ2UoWmUuZWwpLEFlKFplKSxMLG9lLCRlKSxLdC5lbD1EZS5lbCxiZT09PW51bGwmJlppKEwsRGUuZWwpLGxvJiZjcihsbyxvZSksKE1lPUt0LnByb3BzJiZLdC5wcm9wcy5vblZub2RlVXBkYXRlZCkmJmNyKCgpPT5icihNZSxxLEt0LGVlKSxvZSl9ZWxzZXt2YXIgVnQse2VsOnB0LHByb3BzOmt0fT1qLHtibTpSdCxtOnhuLHBhcmVudDprbn09TCxobj1wcihqKTtpZihXaShMLCExKSxSdCYmRS5pbnZva2VBcnJheUZucyhSdCksIWhuJiYoVnQ9a3QmJmt0Lm9uVm5vZGVCZWZvcmVNb3VudCkmJmJyKFZ0LGtuLGopLFdpKEwsITApLHB0JiZOdCl7dmFyIG1uPSgpPT57TC5zdWJUcmVlPUFvKEwpLE50KHB0LEwuc3ViVHJlZSxMLG9lLG51bGwpfTtobj9qLnR5cGUuX19hc3luY0xvYWRlcigpLnRoZW4oKCk9PiFMLmlzVW5tb3VudGVkJiZtbigpKTptbigpfWVsc2V7dmFyIHVyPUwuc3ViVHJlZT1BbyhMKTtpdChudWxsLHVyLGFlLHJlLEwsb2UsJGUpLGouZWw9dXIuZWx9aWYoeG4mJmNyKHhuLG9lKSwhaG4mJihWdD1rdCYma3Qub25Wbm9kZU1vdW50ZWQpKXt2YXIgbmk9ajtjcigoKT0+YnIoVnQsa24sbmkpLG9lKX0oai5zaGFwZUZsYWcmMjU2fHxrbiYmcHIoa24udm5vZGUpJiZrbi52bm9kZS5zaGFwZUZsYWcmMjU2KSYmTC5hJiZjcihMLmEsb2UpLEwuaXNNb3VudGVkPSEwLGo9YWU9cmU9bnVsbH19LEplPUwuZWZmZWN0PW5ldyBCLlJlYWN0aXZlRWZmZWN0KHFlLCgpPT5DbihVZSksTC5zY29wZSksVWU9TC51cGRhdGU9KCk9PkplLnJ1bigpO1VlLmlkPUwudWlkLFdpKEwsITApLFVlKCl9LExlPShMLGosYWUpPT57ai5jb21wb25lbnQ9TDt2YXIgcmU9TC52bm9kZS5wcm9wcztMLnZub2RlPWosTC5uZXh0PW51bGwsaXMoTCxqLnByb3BzLHJlLGFlKSxvcyhMLGouY2hpbGRyZW4sYWUpLEIucGF1c2VUcmFja2luZygpLHJpKCksQi5yZXNldFRyYWNraW5nKCl9LHVlPWZ1bmN0aW9uKEwsaixhZSxyZSxvZSwkZSxydCxxZSl7dmFyIEplPWFyZ3VtZW50cy5sZW5ndGg+OCYmYXJndW1lbnRzWzhdIT09dm9pZCAwP2FyZ3VtZW50c1s4XTohMSxVZT1MJiZMLmNoaWxkcmVuLFZ0PUw/TC5zaGFwZUZsYWc6MCxwdD1qLmNoaWxkcmVuLHtwYXRjaEZsYWc6a3Qsc2hhcGVGbGFnOlJ0fT1qO2lmKGt0PjApe2lmKGt0JjEyOCl7WWUoVWUscHQsYWUscmUsb2UsJGUscnQscWUsSmUpO3JldHVybn1lbHNlIGlmKGt0JjI1Nil7a2UoVWUscHQsYWUscmUsb2UsJGUscnQscWUsSmUpO3JldHVybn19UnQmOD8oVnQmMTYmJkZlKFVlLG9lLCRlKSxwdCE9PVVlJiZhdChhZSxwdCkpOlZ0JjE2P1J0JjE2P1llKFVlLHB0LGFlLHJlLG9lLCRlLHJ0LHFlLEplKTpGZShVZSxvZSwkZSwhMCk6KFZ0JjgmJmF0KGFlLCIiKSxSdCYxNiYmZihwdCxhZSxyZSxvZSwkZSxydCxxZSxKZSkpfSxrZT0oTCxqLGFlLHJlLG9lLCRlLHJ0LHFlLEplKT0+e0w9THx8RS5FTVBUWV9BUlIsaj1qfHxFLkVNUFRZX0FSUjt2YXIgVWU9TC5sZW5ndGgsVnQ9ai5sZW5ndGgscHQ9TWF0aC5taW4oVWUsVnQpLGt0O2ZvcihrdD0wO2t0PHB0O2t0Kyspe3ZhciBSdD1qW2t0XT1KZT9EbihqW2t0XSk6TW4oaltrdF0pO2l0KExba3RdLFJ0LGFlLG51bGwsb2UsJGUscnQscWUsSmUpfVVlPlZ0P0ZlKEwsb2UsJGUsITAsITEscHQpOmYoaixhZSxyZSxvZSwkZSxydCxxZSxKZSxwdCl9LFllPShMLGosYWUscmUsb2UsJGUscnQscWUsSmUpPT57Zm9yKHZhciBVZT0wLFZ0PWoubGVuZ3RoLHB0PUwubGVuZ3RoLTEsa3Q9VnQtMTtVZTw9cHQmJlVlPD1rdDspe3ZhciBSdD1MW1VlXSx4bj1qW1VlXT1KZT9EbihqW1VlXSk6TW4oaltVZV0pO2lmKFd0KFJ0LHhuKSlpdChSdCx4bixhZSxudWxsLG9lLCRlLHJ0LHFlLEplKTtlbHNlIGJyZWFrO1VlKyt9Zm9yKDtVZTw9cHQmJlVlPD1rdDspe3ZhciBrbj1MW3B0XSxobj1qW2t0XT1KZT9EbihqW2t0XSk6TW4oaltrdF0pO2lmKFd0KGtuLGhuKSlpdChrbixobixhZSxudWxsLG9lLCRlLHJ0LHFlLEplKTtlbHNlIGJyZWFrO3B0LS0sa3QtLX1pZihVZT5wdCl7aWYoVWU8PWt0KWZvcih2YXIgbW49a3QrMSx1cj1tbjxWdD9qW21uXS5lbDpyZTtVZTw9a3Q7KWl0KG51bGwsaltVZV09SmU/RG4oaltVZV0pOk1uKGpbVWVdKSxhZSx1cixvZSwkZSxydCxxZSxKZSksVWUrK31lbHNlIGlmKFVlPmt0KWZvcig7VWU8PXB0OylRZShMW1VlXSxvZSwkZSwhMCksVWUrKztlbHNle3ZhciBuaT1VZSxLdD1VZSxybj1uZXcgTWFwO2ZvcihVZT1LdDtVZTw9a3Q7VWUrKyl7dmFyIGxvPWpbVWVdPUplP0RuKGpbVWVdKTpNbihqW1VlXSk7bG8ua2V5IT1udWxsJiZybi5zZXQobG8ua2V5LFVlKX12YXIgcSxlZT0wLGJlPWt0LUt0KzEsTWU9ITEsRGU9MCxaZT1uZXcgQXJyYXkoYmUpO2ZvcihVZT0wO1VlPGJlO1VlKyspWmVbVWVdPTA7Zm9yKFVlPW5pO1VlPD1wdDtVZSsrKXt2YXIgdnQ9TFtVZV07aWYoZWU+PWJlKXtRZSh2dCxvZSwkZSwhMCk7Y29udGludWV9dmFyIGV0PXZvaWQgMDtpZih2dC5rZXkhPW51bGwpZXQ9cm4uZ2V0KHZ0LmtleSk7ZWxzZSBmb3IocT1LdDtxPD1rdDtxKyspaWYoWmVbcS1LdF09PT0wJiZXdCh2dCxqW3FdKSl7ZXQ9cTticmVha31ldD09PXZvaWQgMD9RZSh2dCxvZSwkZSwhMCk6KFplW2V0LUt0XT1VZSsxLGV0Pj1EZT9EZT1ldDpNZT0hMCxpdCh2dCxqW2V0XSxhZSxudWxsLG9lLCRlLHJ0LHFlLEplKSxlZSsrKX12YXIgdHQ9TWU/YW8oWmUpOkUuRU1QVFlfQVJSO2ZvcihxPXR0Lmxlbmd0aC0xLFVlPWJlLTE7VWU+PTA7VWUtLSl7dmFyIEhlPUt0K1VlLEh0PWpbSGVdLER0PUhlKzE8VnQ/altIZSsxXS5lbDpyZTtaZVtVZV09PT0wP2l0KG51bGwsSHQsYWUsRHQsb2UsJGUscnQscWUsSmUpOk1lJiYocTwwfHxVZSE9PXR0W3FdP2Z0KEh0LGFlLER0LDIpOnEtLSl9fX0sZnQ9ZnVuY3Rpb24oTCxqLGFlLHJlKXt2YXIgb2U9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOm51bGwse2VsOiRlLHR5cGU6cnQsdHJhbnNpdGlvbjpxZSxjaGlsZHJlbjpKZSxzaGFwZUZsYWc6VWV9PUw7aWYoVWUmNil7ZnQoTC5jb21wb25lbnQuc3ViVHJlZSxqLGFlLHJlKTtyZXR1cm59aWYoVWUmMTI4KXtMLnN1c3BlbnNlLm1vdmUoaixhZSxyZSk7cmV0dXJufWlmKFVlJjY0KXtydC5tb3ZlKEwsaixhZSxBdCk7cmV0dXJufWlmKHJ0PT09Sil7eSgkZSxqLGFlKTtmb3IodmFyIFZ0PTA7VnQ8SmUubGVuZ3RoO1Z0KyspZnQoSmVbVnRdLGosYWUscmUpO3koTC5hbmNob3IsaixhZSk7cmV0dXJufWlmKHJ0PT09cGUpe2x0KEwsaixhZSk7cmV0dXJufXZhciBwdD1yZSE9PTImJlVlJjEmJnFlO2lmKHB0KWlmKHJlPT09MClxZS5iZWZvcmVFbnRlcigkZSkseSgkZSxqLGFlKSxjcigoKT0+cWUuZW50ZXIoJGUpLG9lKTtlbHNle3ZhcntsZWF2ZTprdCxkZWxheUxlYXZlOlJ0LGFmdGVyTGVhdmU6eG59PXFlLGtuPSgpPT55KCRlLGosYWUpLGhuPSgpPT57a3QoJGUsKCk9PntrbigpLHhuJiZ4bigpfSl9O1J0P1J0KCRlLGtuLGhuKTpobigpfWVsc2UgeSgkZSxqLGFlKX0sUWU9ZnVuY3Rpb24oTCxqLGFlKXt2YXIgcmU9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLG9lPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMSx7dHlwZTokZSxwcm9wczpydCxyZWY6cWUsY2hpbGRyZW46SmUsZHluYW1pY0NoaWxkcmVuOlVlLHNoYXBlRmxhZzpWdCxwYXRjaEZsYWc6cHQsZGlyczprdH09TDtpZihxZSE9bnVsbCYmaW8ocWUsbnVsbCxhZSxMLCEwKSxWdCYyNTYpe2ouY3R4LmRlYWN0aXZhdGUoTCk7cmV0dXJufXZhciBSdD1WdCYxJiZrdCx4bj0hcHIoTCksa247aWYoeG4mJihrbj1ydCYmcnQub25Wbm9kZUJlZm9yZVVubW91bnQpJiZicihrbixqLEwpLFZ0JjYpeWUoTC5jb21wb25lbnQsYWUscmUpO2Vsc2V7aWYoVnQmMTI4KXtMLnN1c3BlbnNlLnVubW91bnQoYWUscmUpO3JldHVybn1SdCYmanIoTCxudWxsLGosImJlZm9yZVVubW91bnQiKSxWdCY2ND9MLnR5cGUucmVtb3ZlKEwsaixhZSxvZSxBdCxyZSk6VWUmJigkZSE9PUp8fHB0PjAmJnB0JjY0KT9GZShVZSxqLGFlLCExLCEwKTooJGU9PT1KJiZwdCYoMTI4fDI1Nil8fCFvZSYmVnQmMTYpJiZGZShKZSxqLGFlKSxyZSYmUmUoTCl9KHhuJiYoa249cnQmJnJ0Lm9uVm5vZGVVbm1vdW50ZWQpfHxSdCkmJmNyKCgpPT57a24mJmJyKGtuLGosTCksUnQmJmpyKEwsbnVsbCxqLCJ1bm1vdW50ZWQiKX0sYWUpfSxSZT1MPT57dmFye3R5cGU6aixlbDphZSxhbmNob3I6cmUsdHJhbnNpdGlvbjpvZX09TDtpZihqPT09Sil7bWUoYWUscmUpO3JldHVybn1pZihqPT09cGUpe05lKEwpO3JldHVybn12YXIgJGU9KCk9PntQKGFlKSxvZSYmIW9lLnBlcnNpc3RlZCYmb2UuYWZ0ZXJMZWF2ZSYmb2UuYWZ0ZXJMZWF2ZSgpfTtpZihMLnNoYXBlRmxhZyYxJiZvZSYmIW9lLnBlcnNpc3RlZCl7dmFye2xlYXZlOnJ0LGRlbGF5TGVhdmU6cWV9PW9lLEplPSgpPT5ydChhZSwkZSk7cWU/cWUoTC5lbCwkZSxKZSk6SmUoKX1lbHNlICRlKCl9LG1lPShMLGopPT57Zm9yKHZhciBhZTtMIT09ajspYWU9R2UoTCksUChMKSxMPWFlO1Aoail9LHllPShMLGosYWUpPT57dmFye2J1bTpyZSxzY29wZTpvZSx1cGRhdGU6JGUsc3ViVHJlZTpydCx1bTpxZX09TDtyZSYmRS5pbnZva2VBcnJheUZucyhyZSksb2Uuc3RvcCgpLCRlJiYoJGUuYWN0aXZlPSExLFFlKHJ0LEwsaixhZSkpLHFlJiZjcihxZSxqKSxjcigoKT0+e0wuaXNVbm1vdW50ZWQ9ITB9LGopLGomJmoucGVuZGluZ0JyYW5jaCYmIWouaXNVbm1vdW50ZWQmJkwuYXN5bmNEZXAmJiFMLmFzeW5jUmVzb2x2ZWQmJkwuc3VzcGVuc2VJZD09PWoucGVuZGluZ0lkJiYoai5kZXBzLS0sai5kZXBzPT09MCYmai5yZXNvbHZlKCkpfSxGZT1mdW5jdGlvbihMLGosYWUpe2Zvcih2YXIgcmU9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLG9lPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMSwkZT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06MCxydD0kZTtydDxMLmxlbmd0aDtydCsrKVFlKExbcnRdLGosYWUscmUsb2UpfSxBZT1MPT5MLnNoYXBlRmxhZyY2P0FlKEwuY29tcG9uZW50LnN1YlRyZWUpOkwuc2hhcGVGbGFnJjEyOD9MLnN1c3BlbnNlLm5leHQoKTpHZShMLmFuY2hvcnx8TC5lbCksX3Q9KEwsaixhZSk9PntMPT1udWxsP2ouX3Zub2RlJiZRZShqLl92bm9kZSxudWxsLG51bGwsITApOml0KGouX3Zub2RlfHxudWxsLEwsaixudWxsLG51bGwsbnVsbCxhZSkscmkoKSxWZSgpLGouX3Zub2RlPUx9LEF0PXtwOml0LHVtOlFlLG06ZnQscjpSZSxtdDpILG1jOmYscGM6dWUscGJjOkEsbjpBZSxvOmF9LEtlLE50O3JldHVybiB1JiYoW0tlLE50XT11KEF0KSkse3JlbmRlcjpfdCxoeWRyYXRlOktlLGNyZWF0ZUFwcDpzcyhfdCxLZSl9fWZ1bmN0aW9uIFdpKGEsdSl7dmFye2VmZmVjdDp2LHVwZGF0ZTp5fT1hO3YuYWxsb3dSZWN1cnNlPXkuYWxsb3dSZWN1cnNlPXV9ZnVuY3Rpb24gb28oYSx1KXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEseT1hLmNoaWxkcmVuLFA9dS5jaGlsZHJlbjtpZihFLmlzQXJyYXkoeSkmJkUuaXNBcnJheShQKSlmb3IodmFyIE89MDtPPHkubGVuZ3RoO08rKyl7dmFyIEY9eVtPXSxHPVBbT107Ry5zaGFwZUZsYWcmMSYmIUcuZHluYW1pY0NoaWxkcmVuJiYoKEcucGF0Y2hGbGFnPD0wfHxHLnBhdGNoRmxhZz09PTMyKSYmKEc9UFtPXT1EbihQW09dKSxHLmVsPUYuZWwpLHZ8fG9vKEYsRykpLEcudHlwZT09PXRlJiYoRy5lbD1GLmVsKX19ZnVuY3Rpb24gYW8oYSl7dmFyIHU9YS5zbGljZSgpLHY9WzBdLHksUCxPLEYsRyxZPWEubGVuZ3RoO2Zvcih5PTA7eTxZO3krKyl7dmFyIGxlPWFbeV07aWYobGUhPT0wKXtpZihQPXZbdi5sZW5ndGgtMV0sYVtQXTxsZSl7dVt5XT1QLHYucHVzaCh5KTtjb250aW51ZX1mb3IoTz0wLEY9di5sZW5ndGgtMTtPPEY7KUc9TytGPj4xLGFbdltHXV08bGU/Tz1HKzE6Rj1HO2xlPGFbdltPXV0mJihPPjAmJih1W3ldPXZbTy0xXSksdltPXT15KX19Zm9yKE89di5sZW5ndGgsRj12W08tMV07Ty0tID4wOyl2W09dPUYsRj11W0ZdO3JldHVybiB2fXZhciBscz1hPT5hLl9faXNUZWxlcG9ydCxoYT1hPT5hJiYoYS5kaXNhYmxlZHx8YS5kaXNhYmxlZD09PSIiKSxNbz1hPT50eXBlb2YgU1ZHRWxlbWVudCE9InVuZGVmaW5lZCImJmEgaW5zdGFuY2VvZiBTVkdFbGVtZW50LGdhPShhLHUpPT57dmFyIHY9YSYmYS50bztpZihFLmlzU3RyaW5nKHYpKWlmKHUpe3ZhciB5PXUodik7cmV0dXJuIHl9ZWxzZSByZXR1cm4gbnVsbDtlbHNlIHJldHVybiB2fSxtPXtfX2lzVGVsZXBvcnQ6ITAscHJvY2VzcyhhLHUsdix5LFAsTyxGLEcsWSxsZSl7dmFye21jOnplLHBjOmF0LHBiYzpnZSxvOntpbnNlcnQ6R2UscXVlcnlTZWxlY3RvcjpYZSxjcmVhdGVUZXh0Ond0LGNyZWF0ZUNvbW1lbnQ6aXR9fT1sZSxDZT1oYSh1LnByb3BzKSx7c2hhcGVGbGFnOkVlLGNoaWxkcmVuOlRlLGR5bmFtaWNDaGlsZHJlbjpsdH09dTtpZihhPT1udWxsKXt2YXIgTmU9dS5lbD13dCgiIiksQ3Q9dS5hbmNob3I9d3QoIiIpO0dlKE5lLHYseSksR2UoQ3Qsdix5KTt2YXIgaT11LnRhcmdldD1nYSh1LnByb3BzLFhlKSxsPXUudGFyZ2V0QW5jaG9yPXd0KCIiKTtpJiYoR2UobCxpKSxGPUZ8fE1vKGkpKTt2YXIgZj0odmUsTGUpPT57RWUmMTYmJnplKFRlLHZlLExlLFAsTyxGLEcsWSl9O0NlP2YodixDdCk6aSYmZihpLGwpfWVsc2V7dS5lbD1hLmVsO3ZhciBfPXUuYW5jaG9yPWEuYW5jaG9yLEE9dS50YXJnZXQ9YS50YXJnZXQsQz11LnRhcmdldEFuY2hvcj1hLnRhcmdldEFuY2hvcixOPWhhKGEucHJvcHMpLE09Tj92OkEsSD1OP186QztpZihGPUZ8fE1vKEEpLGx0PyhnZShhLmR5bmFtaWNDaGlsZHJlbixsdCxNLFAsTyxGLEcpLG9vKGEsdSwhMCkpOll8fGF0KGEsdSxNLEgsUCxPLEYsRywhMSksQ2UpTnx8Uih1LHYsXyxsZSwxKTtlbHNlIGlmKCh1LnByb3BzJiZ1LnByb3BzLnRvKSE9PShhLnByb3BzJiZhLnByb3BzLnRvKSl7dmFyIG5lPXUudGFyZ2V0PWdhKHUucHJvcHMsWGUpO25lJiZSKHUsbmUsbnVsbCxsZSwwKX1lbHNlIE4mJlIodSxBLEMsbGUsMSl9WCh1KX0scmVtb3ZlKGEsdSx2LHksUCxPKXt2YXJ7dW06RixvOntyZW1vdmU6R319PVAse3NoYXBlRmxhZzpZLGNoaWxkcmVuOmxlLGFuY2hvcjp6ZSx0YXJnZXRBbmNob3I6YXQsdGFyZ2V0OmdlLHByb3BzOkdlfT1hO2lmKGdlJiZHKGF0KSwoT3x8IWhhKEdlKSkmJihHKHplKSxZJjE2KSlmb3IodmFyIFhlPTA7WGU8bGUubGVuZ3RoO1hlKyspe3ZhciB3dD1sZVtYZV07Rih3dCx1LHYsITAsISF3dC5keW5hbWljQ2hpbGRyZW4pfX0sbW92ZTpSLGh5ZHJhdGU6VX07ZnVuY3Rpb24gUihhLHUsdix5KXt2YXJ7bzp7aW5zZXJ0OlB9LG06T309eSxGPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XToyO0Y9PT0wJiZQKGEudGFyZ2V0QW5jaG9yLHUsdik7dmFye2VsOkcsYW5jaG9yOlksc2hhcGVGbGFnOmxlLGNoaWxkcmVuOnplLHByb3BzOmF0fT1hLGdlPUY9PT0yO2lmKGdlJiZQKEcsdSx2KSwoIWdlfHxoYShhdCkpJiZsZSYxNilmb3IodmFyIEdlPTA7R2U8emUubGVuZ3RoO0dlKyspTyh6ZVtHZV0sdSx2LDIpO2dlJiZQKFksdSx2KX1mdW5jdGlvbiBVKGEsdSx2LHksUCxPLEYsRyl7dmFye286e25leHRTaWJsaW5nOlkscGFyZW50Tm9kZTpsZSxxdWVyeVNlbGVjdG9yOnplfX09RixhdD11LnRhcmdldD1nYSh1LnByb3BzLHplKTtpZihhdCl7dmFyIGdlPWF0Ll9scGF8fGF0LmZpcnN0Q2hpbGQ7aWYodS5zaGFwZUZsYWcmMTYpaWYoaGEodS5wcm9wcykpdS5hbmNob3I9RyhZKGEpLHUsbGUoYSksdix5LFAsTyksdS50YXJnZXRBbmNob3I9Z2U7ZWxzZXt1LmFuY2hvcj1ZKGEpO2Zvcih2YXIgR2U9Z2U7R2U7KWlmKEdlPVkoR2UpLEdlJiZHZS5ub2RlVHlwZT09PTgmJkdlLmRhdGE9PT0idGVsZXBvcnQgYW5jaG9yIil7dS50YXJnZXRBbmNob3I9R2UsYXQuX2xwYT11LnRhcmdldEFuY2hvciYmWSh1LnRhcmdldEFuY2hvcik7YnJlYWt9RyhnZSx1LGF0LHYseSxQLE8pfVgodSl9cmV0dXJuIHUuYW5jaG9yJiZZKHUuYW5jaG9yKX12YXIgJD1tO2Z1bmN0aW9uIFgoYSl7dmFyIHU9YS5jdHg7aWYodSYmdS51dCl7Zm9yKHZhciB2PWEuY2hpbGRyZW5bMF0uZWw7diE9PWEudGFyZ2V0QW5jaG9yOyl2Lm5vZGVUeXBlPT09MSYmdi5zZXRBdHRyaWJ1dGUoImRhdGEtdi1vd25lciIsdS51aWQpLHY9di5uZXh0U2libGluZzt1LnV0KCl9fXZhciBKPVN5bWJvbCh2b2lkIDApLHRlPVN5bWJvbCh2b2lkIDApLGNlPVN5bWJvbCh2b2lkIDApLHBlPVN5bWJvbCh2b2lkIDApLFBlPVtdLGZlPW51bGw7ZnVuY3Rpb24gd2UoKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITE7UGUucHVzaChmZT1hP251bGw6W10pfWZ1bmN0aW9uIGN0KCl7UGUucG9wKCksZmU9UGVbUGUubGVuZ3RoLTFdfHxudWxsfXZhciBndD0xO2Z1bmN0aW9uICR0KGEpe2d0Kz1hfWZ1bmN0aW9uIEV0KGEpe3JldHVybiBhLmR5bmFtaWNDaGlsZHJlbj1ndD4wP2ZlfHxFLkVNUFRZX0FSUjpudWxsLGN0KCksZ3Q+MCYmZmUmJmZlLnB1c2goYSksYX1mdW5jdGlvbiBqZShhLHUsdix5LFAsTyl7cmV0dXJuIEV0KFV0KGEsdSx2LHksUCxPLCEwKSl9ZnVuY3Rpb24gQnQoYSx1LHYseSxQKXtyZXR1cm4gRXQoRnQoYSx1LHYseSxQLCEwKSl9ZnVuY3Rpb24gY24oYSl7cmV0dXJuIGE/YS5fX3ZfaXNWTm9kZT09PSEwOiExfWZ1bmN0aW9uIFd0KGEsdSl7cmV0dXJuIGEudHlwZT09PXUudHlwZSYmYS5rZXk9PT11LmtleX1mdW5jdGlvbiBodChhKXt9dmFyIFp0PSJfX3ZJbnRlcm5hbCIsUm49YT0+e3ZhcntrZXk6dX09YTtyZXR1cm4gdSE9bnVsbD91Om51bGx9LEd0PWE9Pnt2YXJ7cmVmOnUscmVmX2tleTp2LHJlZl9mb3I6eX09YTtyZXR1cm4gdSE9bnVsbD9FLmlzU3RyaW5nKHUpfHxCLmlzUmVmKHUpfHxFLmlzRnVuY3Rpb24odSk/e2k6T24scjp1LGs6dixmOiEheX06dTpudWxsfTtmdW5jdGlvbiBVdChhKXt2YXIgdT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06bnVsbCx2PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsLHk9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOjAsUD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxPPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTphPT09Sj8wOjEsRj1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSE9PXZvaWQgMD9hcmd1bWVudHNbNl06ITEsRz1hcmd1bWVudHMubGVuZ3RoPjcmJmFyZ3VtZW50c1s3XSE9PXZvaWQgMD9hcmd1bWVudHNbN106ITEsWT17X192X2lzVk5vZGU6ITAsX192X3NraXA6ITAsdHlwZTphLHByb3BzOnUsa2V5OnUmJlJuKHUpLHJlZjp1JiZHdCh1KSxzY29wZUlkOmRuLHNsb3RTY29wZUlkczpudWxsLGNoaWxkcmVuOnYsY29tcG9uZW50Om51bGwsc3VzcGVuc2U6bnVsbCxzc0NvbnRlbnQ6bnVsbCxzc0ZhbGxiYWNrOm51bGwsZGlyczpudWxsLHRyYW5zaXRpb246bnVsbCxlbDpudWxsLGFuY2hvcjpudWxsLHRhcmdldDpudWxsLHRhcmdldEFuY2hvcjpudWxsLHN0YXRpY0NvdW50OjAsc2hhcGVGbGFnOk8scGF0Y2hGbGFnOnksZHluYW1pY1Byb3BzOlAsZHluYW1pY0NoaWxkcmVuOm51bGwsYXBwQ29udGV4dDpudWxsLGhvc3RJbnN0YW5jZTpPbixjdHg6T259O3JldHVybiBHPyhJcihZLHYpLE8mMTI4JiZhLm5vcm1hbGl6ZShZKSk6diYmKFkuc2hhcGVGbGFnfD1FLmlzU3RyaW5nKHYpPzg6MTYpLGd0PjAmJiFGJiZmZSYmKFkucGF0Y2hGbGFnPjB8fE8mNikmJlkucGF0Y2hGbGFnIT09MzImJmZlLnB1c2goWSksWX12YXIgRnQ9cXQ7ZnVuY3Rpb24gcXQoYSl7dmFyIHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGwsdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbCx5PWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTowLFA9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOm51bGwsTz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITE7aWYoKCFhfHxhPT09eGkpJiYoYT1jZSksY24oYSkpe3ZhciBGPWNpKGEsdSwhMCk7cmV0dXJuIHYmJklyKEYsdiksZ3Q+MCYmIU8mJmZlJiYoRi5zaGFwZUZsYWcmNj9mZVtmZS5pbmRleE9mKGEpXT1GOmZlLnB1c2goRikpLEYucGF0Y2hGbGFnfD0tMixGfWlmKF9vKGEpJiYoYT1hLl9fdmNjT3B0cyksdSl7dT1Ybyh1KTt2YXJ7Y2xhc3M6RyxzdHlsZTpZfT11O0cmJiFFLmlzU3RyaW5nKEcpJiYodS5jbGFzcz1FLm5vcm1hbGl6ZUNsYXNzKEcpKSxFLmlzT2JqZWN0KFkpJiYoQi5pc1Byb3h5KFkpJiYhRS5pc0FycmF5KFkpJiYoWT1FLmV4dGVuZCh7fSxZKSksdS5zdHlsZT1FLm5vcm1hbGl6ZVN0eWxlKFkpKX12YXIgbGU9RS5pc1N0cmluZyhhKT8xOmlpKGEpPzEyODpscyhhKT82NDpFLmlzT2JqZWN0KGEpPzQ6RS5pc0Z1bmN0aW9uKGEpPzI6MDtyZXR1cm4gVXQoYSx1LHYseSxQLGxlLE8sITApfWZ1bmN0aW9uIFhvKGEpe3JldHVybiBhP0IuaXNQcm94eShhKXx8WnQgaW4gYT9FLmV4dGVuZCh7fSxhKTphOm51bGx9ZnVuY3Rpb24gY2koYSx1KXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEse3Byb3BzOnkscmVmOlAscGF0Y2hGbGFnOk8sY2hpbGRyZW46Rn09YSxHPXU/Rm4oeXx8e30sdSk6eSxZPXtfX3ZfaXNWTm9kZTohMCxfX3Zfc2tpcDohMCx0eXBlOmEudHlwZSxwcm9wczpHLGtleTpHJiZSbihHKSxyZWY6dSYmdS5yZWY/diYmUD9FLmlzQXJyYXkoUCk/UC5jb25jYXQoR3QodSkpOltQLEd0KHUpXTpHdCh1KTpQLHNjb3BlSWQ6YS5zY29wZUlkLHNsb3RTY29wZUlkczphLnNsb3RTY29wZUlkcyxjaGlsZHJlbjpGLHRhcmdldDphLnRhcmdldCx0YXJnZXRBbmNob3I6YS50YXJnZXRBbmNob3Isc3RhdGljQ291bnQ6YS5zdGF0aWNDb3VudCxzaGFwZUZsYWc6YS5zaGFwZUZsYWcscGF0Y2hGbGFnOnUmJmEudHlwZSE9PUo/Tz09PS0xPzE2Ok98MTY6TyxkeW5hbWljUHJvcHM6YS5keW5hbWljUHJvcHMsZHluYW1pY0NoaWxkcmVuOmEuZHluYW1pY0NoaWxkcmVuLGFwcENvbnRleHQ6YS5hcHBDb250ZXh0LGhvc3RJbnN0YW5jZTphLmhvc3RJbnN0YW5jZSxkaXJzOmEuZGlycyx0cmFuc2l0aW9uOmEudHJhbnNpdGlvbixjb21wb25lbnQ6YS5jb21wb25lbnQsc3VzcGVuc2U6YS5zdXNwZW5zZSxzc0NvbnRlbnQ6YS5zc0NvbnRlbnQmJmNpKGEuc3NDb250ZW50KSxzc0ZhbGxiYWNrOmEuc3NGYWxsYmFjayYmY2koYS5zc0ZhbGxiYWNrKSxlbDphLmVsLGFuY2hvcjphLmFuY2hvcixjdHg6YS5jdHgsY2U6YS5jZX07cmV0dXJuIFl9ZnVuY3Rpb24gZWkoKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06IiAiLHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjA7cmV0dXJuIEZ0KHRlLG51bGwsYSx1KX1mdW5jdGlvbiBHaShhLHUpe3ZhciB2PUZ0KHBlLG51bGwsYSk7cmV0dXJuIHYuc3RhdGljQ291bnQ9dSx2fWZ1bmN0aW9uIEdhKCl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiIiLHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiB1Pyh3ZSgpLEJ0KGNlLG51bGwsYSkpOkZ0KGNlLG51bGwsYSl9ZnVuY3Rpb24gTW4oYSl7cmV0dXJuIGE9PW51bGx8fHR5cGVvZiBhPT0iYm9vbGVhbiI/RnQoY2UpOkUuaXNBcnJheShhKT9GdChKLG51bGwsYS5zbGljZSgpKTp0eXBlb2YgYT09Im9iamVjdCI/RG4oYSk6RnQodGUsbnVsbCxTdHJpbmcoYSkpfWZ1bmN0aW9uIERuKGEpe3JldHVybiBhLmVsPT09bnVsbCYmYS5wYXRjaEZsYWchPT0tMXx8YS5tZW1vP2E6Y2koYSl9ZnVuY3Rpb24gSXIoYSx1KXt2YXIgdj0wLHtzaGFwZUZsYWc6eX09YTtpZih1PT1udWxsKXU9bnVsbDtlbHNlIGlmKEUuaXNBcnJheSh1KSl2PTE2O2Vsc2UgaWYodHlwZW9mIHU9PSJvYmplY3QiKWlmKHkmKDF8NjQpKXt2YXIgUD11LmRlZmF1bHQ7UCYmKFAuX2MmJihQLl9kPSExKSxJcihhLFAoKSksUC5fYyYmKFAuX2Q9ITApKTtyZXR1cm59ZWxzZXt2PTMyO3ZhciBPPXUuXzshTyYmIShadCBpbiB1KT91Ll9jdHg9T246Tz09PTMmJk9uJiYoT24uc2xvdHMuXz09PTE/dS5fPTE6KHUuXz0yLGEucGF0Y2hGbGFnfD0xMDI0KSl9ZWxzZSBFLmlzRnVuY3Rpb24odSk/KHU9e2RlZmF1bHQ6dSxfY3R4Ok9ufSx2PTMyKToodT1TdHJpbmcodSkseSY2ND8odj0xNix1PVtlaSh1KV0pOnY9OCk7YS5jaGlsZHJlbj11LGEuc2hhcGVGbGFnfD12fWZ1bmN0aW9uIEZuKCl7Zm9yKHZhciBhPXt9LHU9MDt1PGFyZ3VtZW50cy5sZW5ndGg7dSsrKXt2YXIgdj11PDB8fGFyZ3VtZW50cy5sZW5ndGg8PXU/dm9pZCAwOmFyZ3VtZW50c1t1XTtmb3IodmFyIHkgaW4gdilpZih5PT09ImNsYXNzIilhLmNsYXNzIT09di5jbGFzcyYmKGEuY2xhc3M9RS5ub3JtYWxpemVDbGFzcyhbYS5jbGFzcyx2LmNsYXNzXSkpO2Vsc2UgaWYoeT09PSJzdHlsZSIpYS5zdHlsZT1FLm5vcm1hbGl6ZVN0eWxlKFthLnN0eWxlLHYuc3R5bGVdKTtlbHNlIGlmKEUuaXNPbih5KSl7dmFyIFA9YVt5XSxPPXZbeV07TyYmUCE9PU8mJiEoRS5pc0FycmF5KFApJiZQLmluY2x1ZGVzKE8pKSYmKGFbeV09UD9bXS5jb25jYXQoUCxPKTpPKX1lbHNlIHkhPT0iIiYmKGFbeV09dlt5XSl9cmV0dXJuIGF9ZnVuY3Rpb24gYnIoYSx1LHYpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO0koYSx1LDcsW3YseV0pfXZhciB6cj1hcygpLFFvPTA7ZnVuY3Rpb24gY3MoYSx1LHYpe3ZhciB5PWEudHlwZSxQPSh1P3UuYXBwQ29udGV4dDphLmFwcENvbnRleHQpfHx6cixPPXt1aWQ6UW8rKyx2bm9kZTphLHR5cGU6eSxwYXJlbnQ6dSxhcHBDb250ZXh0OlAscm9vdDpudWxsLG5leHQ6bnVsbCxzdWJUcmVlOm51bGwsZWZmZWN0Om51bGwsdXBkYXRlOm51bGwsc2NvcGU6bmV3IEIuRWZmZWN0U2NvcGUoITApLHJlbmRlcjpudWxsLHByb3h5Om51bGwsZXhwb3NlZDpudWxsLGV4cG9zZVByb3h5Om51bGwsd2l0aFByb3h5Om51bGwscHJvdmlkZXM6dT91LnByb3ZpZGVzOk9iamVjdC5jcmVhdGUoUC5wcm92aWRlcyksYWNjZXNzQ2FjaGU6bnVsbCxyZW5kZXJDYWNoZTpbXSxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlczpudWxsLHByb3BzT3B0aW9uczpQYSh5LFApLGVtaXRzT3B0aW9uczpBcih5LFApLGVtaXQ6bnVsbCxlbWl0dGVkOm51bGwscHJvcHNEZWZhdWx0czpFLkVNUFRZX09CSixpbmhlcml0QXR0cnM6eS5pbmhlcml0QXR0cnMsY3R4OkUuRU1QVFlfT0JKLGRhdGE6RS5FTVBUWV9PQkoscHJvcHM6RS5FTVBUWV9PQkosYXR0cnM6RS5FTVBUWV9PQkosc2xvdHM6RS5FTVBUWV9PQkoscmVmczpFLkVNUFRZX09CSixzZXR1cFN0YXRlOkUuRU1QVFlfT0JKLHNldHVwQ29udGV4dDpudWxsLHN1c3BlbnNlOnYsc3VzcGVuc2VJZDp2P3YucGVuZGluZ0lkOjAsYXN5bmNEZXA6bnVsbCxhc3luY1Jlc29sdmVkOiExLGlzTW91bnRlZDohMSxpc1VubW91bnRlZDohMSxpc0RlYWN0aXZhdGVkOiExLGJjOm51bGwsYzpudWxsLGJtOm51bGwsbTpudWxsLGJ1Om51bGwsdTpudWxsLHVtOm51bGwsYnVtOm51bGwsZGE6bnVsbCxhOm51bGwscnRnOm51bGwscnRjOm51bGwsZWM6bnVsbCxzcDpudWxsfTtyZXR1cm4gTy5jdHg9e186T30sTy5yb290PXU/dS5yb290Ok8sTy5lbWl0PXJyLmJpbmQobnVsbCxPKSxhLmNlJiZhLmNlKE8pLE99dmFyIG5uPW51bGwscG49KCk9Pm5ufHxPbixWbj1hPT57bm49YSxhLnNjb3BlLm9uKCl9LHpuPSgpPT57bm4mJm5uLnNjb3BlLm9mZigpLG5uPW51bGx9O2Z1bmN0aW9uIENpKGEpe3JldHVybiBhLnZub2RlLnNoYXBlRmxhZyY0fWQuaXNJblNTUkNvbXBvbmVudFNldHVwPSExO2Z1bmN0aW9uIHVzKGEpe3ZhciB1PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtkLmlzSW5TU1JDb21wb25lbnRTZXR1cD11O3Zhcntwcm9wczp2LGNoaWxkcmVuOnl9PWEudm5vZGUsUD1DaShhKTtTaShhLHYsUCx1KSxqaShhLHkpO3ZhciBPPVA/WWEoYSx1KTp2b2lkIDA7cmV0dXJuIGQuaXNJblNTUkNvbXBvbmVudFNldHVwPSExLE99ZnVuY3Rpb24gWWEoYSx1KXt2YXIgdj1hLnR5cGU7YS5hY2Nlc3NDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLGEucHJveHk9Qi5tYXJrUmF3KG5ldyBQcm94eShhLmN0eCx6KSk7dmFye3NldHVwOnl9PXY7aWYoeSl7dmFyIFA9YS5zZXR1cENvbnRleHQ9eS5sZW5ndGg+MT9KYShhKTpudWxsO1ZuKGEpLEIucGF1c2VUcmFja2luZygpO3ZhciBPPXh0KHksYSwwLFthLnByb3BzLFBdKTtpZihCLnJlc2V0VHJhY2tpbmcoKSx6bigpLEUuaXNQcm9taXNlKE8pKXtpZihPLnRoZW4oem4sem4pLHUpcmV0dXJuIE8udGhlbihGPT57TmEoYSxGLHUpfSkuY2F0Y2goRj0+e1N0KEYsYSwwKX0pO2EuYXN5bmNEZXA9T31lbHNlIE5hKGEsTyx1KX1lbHNlIFdyKGEsdSl9ZnVuY3Rpb24gTmEoYSx1LHYpe0UuaXNGdW5jdGlvbih1KT9hLnR5cGUuX19zc3JJbmxpbmVSZW5kZXI/YS5zc3JSZW5kZXI9dTphLnJlbmRlcj11OkUuaXNPYmplY3QodSkmJihhLnNldHVwU3RhdGU9Qi5wcm94eVJlZnModSkpLFdyKGEsdil9dmFyIGVhLHNvO2Z1bmN0aW9uIHFhKGEpe2VhPWEsc289dT0+e3UucmVuZGVyLl9yYyYmKHUud2l0aFByb3h5PW5ldyBQcm94eSh1LmN0eCxpZSkpfX12YXIgZnM9KCk9PiFlYTtmdW5jdGlvbiBXcihhLHUsdil7dmFyIHk9YS50eXBlO2lmKCFhLnJlbmRlcil7aWYoIXUmJmVhJiYheS5yZW5kZXIpe3ZhciBQPXkudGVtcGxhdGV8fHhyKGEpLnRlbXBsYXRlO2lmKFApe3Zhcntpc0N1c3RvbUVsZW1lbnQ6Tyxjb21waWxlck9wdGlvbnM6Rn09YS5hcHBDb250ZXh0LmNvbmZpZyx7ZGVsaW1pdGVyczpHLGNvbXBpbGVyT3B0aW9uczpZfT15LGxlPUUuZXh0ZW5kKEUuZXh0ZW5kKHtpc0N1c3RvbUVsZW1lbnQ6TyxkZWxpbWl0ZXJzOkd9LEYpLFkpO3kucmVuZGVyPWVhKFAsbGUpfX1hLnJlbmRlcj15LnJlbmRlcnx8RS5OT09QLHNvJiZzbyhhKX1WbihhKSxCLnBhdXNlVHJhY2tpbmcoKSxudChhKSxCLnJlc2V0VHJhY2tpbmcoKSx6bigpfWZ1bmN0aW9uIEthKGEpe3JldHVybiBuZXcgUHJveHkoYS5hdHRycyx7Z2V0KHUsdil7cmV0dXJuIEIudHJhY2soYSwiZ2V0IiwiJGF0dHJzIiksdVt2XX19KX1mdW5jdGlvbiBKYShhKXt2YXIgdT15PT57YS5leHBvc2VkPXl8fHt9fSx2O3JldHVybntnZXQgYXR0cnMoKXtyZXR1cm4gdnx8KHY9S2EoYSkpfSxzbG90czphLnNsb3RzLGVtaXQ6YS5lbWl0LGV4cG9zZTp1fX1mdW5jdGlvbiBEbyhhKXtpZihhLmV4cG9zZWQpcmV0dXJuIGEuZXhwb3NlUHJveHl8fChhLmV4cG9zZVByb3h5PW5ldyBQcm94eShCLnByb3h5UmVmcyhCLm1hcmtSYXcoYS5leHBvc2VkKSkse2dldCh1LHYpe2lmKHYgaW4gdSlyZXR1cm4gdVt2XTtpZih2IGluIG10KXJldHVybiBtdFt2XShhKX0saGFzKHUsdil7cmV0dXJuIHYgaW4gdXx8diBpbiBtdH19KSl9ZnVuY3Rpb24gTGkoYSl7dmFyIHU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBFLmlzRnVuY3Rpb24oYSk/YS5kaXNwbGF5TmFtZXx8YS5uYW1lOmEubmFtZXx8dSYmYS5fX25hbWV9ZnVuY3Rpb24gX28oYSl7cmV0dXJuIEUuaXNGdW5jdGlvbihhKSYmIl9fdmNjT3B0cyJpbiBhfXZhciBibz0oYSx1KT0+Qi5jb21wdXRlZChhLHUsZC5pc0luU1NSQ29tcG9uZW50U2V0dXApO2Z1bmN0aW9uIGRzKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gRm8oKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBCcyhhKXt9ZnVuY3Rpb24gaHMoYSx1KXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBMcygpe3JldHVybiBQdCgpLnNsb3RzfWZ1bmN0aW9uIEJlKCl7cmV0dXJuIFB0KCkuYXR0cnN9ZnVuY3Rpb24gUHQoKXt2YXIgYT1wbigpO3JldHVybiBhLnNldHVwQ29udGV4dHx8KGEuc2V0dXBDb250ZXh0PUphKGEpKX1mdW5jdGlvbiBPdChhLHUpe3ZhciB2PUUuaXNBcnJheShhKT9hLnJlZHVjZSgoTyxGKT0+KE9bRl09e30sTykse30pOmE7Zm9yKHZhciB5IGluIHUpe3ZhciBQPXZbeV07UD9FLmlzQXJyYXkoUCl8fEUuaXNGdW5jdGlvbihQKT92W3ldPXt0eXBlOlAsZGVmYXVsdDp1W3ldfTpQLmRlZmF1bHQ9dVt5XTpQPT09bnVsbCYmKHZbeV09e2RlZmF1bHQ6dVt5XX0pfXJldHVybiB2fWZ1bmN0aW9uIHluKGEsdSl7dmFyIHY9e30seT1mdW5jdGlvbihPKXt1LmluY2x1ZGVzKE8pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodixPLHtlbnVtZXJhYmxlOiEwLGdldDooKT0+YVtPXX0pfTtmb3IodmFyIFAgaW4gYSl5KFApO3JldHVybiB2fWZ1bmN0aW9uIEVyKGEpe3ZhciB1PXBuKCksdj1hKCk7cmV0dXJuIHpuKCksRS5pc1Byb21pc2UodikmJih2PXYuY2F0Y2goeT0+e3Rocm93IFZuKHUpLHl9KSksW3YsKCk9PlZuKHUpXX1mdW5jdGlvbiBBaShhLHUsdil7dmFyIHk9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4geT09PTI/RS5pc09iamVjdCh1KSYmIUUuaXNBcnJheSh1KT9jbih1KT9GdChhLG51bGwsW3VdKTpGdChhLHUpOkZ0KGEsbnVsbCx1KTooeT4zP3Y9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOnk9PT0zJiZjbih2KSYmKHY9W3ZdKSxGdChhLHUsdikpfXZhciBZaT1TeW1ib2woIiIpLEVvPSgpPT57e3ZhciBhPUluKFlpKTtyZXR1cm4gYX19O2Z1bmN0aW9uIGthKCl7fWZ1bmN0aW9uIHRhKGEsdSx2LHkpe3ZhciBQPXZbeV07aWYoUCYmZ3MoUCxhKSlyZXR1cm4gUDt2YXIgTz11KCk7cmV0dXJuIE8ubWVtbz1hLnNsaWNlKCksdlt5XT1PfWZ1bmN0aW9uIGdzKGEsdSl7dmFyIHY9YS5tZW1vO2lmKHYubGVuZ3RoIT11Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHk9MDt5PHYubGVuZ3RoO3krKylpZihFLmhhc0NoYW5nZWQodlt5XSx1W3ldKSlyZXR1cm4hMTtyZXR1cm4gZ3Q+MCYmZmUmJmZlLnB1c2goYSksITB9dmFyIHBzPSIzLjIuNDciLGRsPW51bGwsJGw9bnVsbCxVbD17aW5zZXJ0OihhLHUsdik9PnY/dS5pbnNlcnRCZWZvcmUoYSx2KTp1LmFwcGVuZENoaWxkKGEpLHJlbW92ZTphPT57dmFyIHU9YS5wYXJlbnROb2RlO3UmJnUucmVtb3ZlQ2hpbGQoYSl9LGNyZWF0ZUVsZW1lbnQ6YT0+cy5jcmVhdGVFbGVtZW50KGEpLGNyZWF0ZVRleHQ6YT0+cy5jcmVhdGVUZXh0KGEpLGNyZWF0ZUNvbW1lbnQ6YT0+cy5jcmVhdGVDb21tZW50KGEpLHNldFRleHQ6KGEsdSk9PnthLnNldEF0dHIoInZhbHVlIix1KX0sc2V0RWxlbWVudFRleHQ6KGEsdSk9PnthLnNldEF0dHIoInZhbHVlIix1KX0scGFyZW50Tm9kZTphPT5hLnBhcmVudE5vZGUsbmV4dFNpYmxpbmc6YT0+YS5uZXh0U2libGluZ307ZnVuY3Rpb24gcGEoYSl7cmV0dXJuIE9iamVjdC5rZXlzKGEpfWZ1bmN0aW9uIHZhKGEpe3ZhciB1PXt9O3JldHVybiBFLmlzQXJyYXkoYSkmJmEuZm9yRWFjaCh2PT57cGEodikuZm9yRWFjaCh5PT57dmFyIFA9dlt5XSxPPXVbeV18fCh1W3ldPXt9KTtwYShQKS5mb3JFYWNoKEY9Pnt2YXIgRz1QW0ZdLFk9T1tGXXx8KE9bRl09e30pO3BhKEcpLmZvckVhY2gobGU9PntsZVswXT09PSIhIj8oWVtsZV09R1tsZV0sZGVsZXRlIFlbbGUuc2xpY2UoMSldKTpFLmhhc093bihZLCIhIitsZSl8fChZW2xlXT1HW2xlXSl9KX0pfSl9KSx1fWZ1bmN0aW9uIG5hKGEsdSl7dmFyIHY9dSYmdS5jbGFzc0xpc3Q7cmV0dXJuIHYmJnYuaW5jbHVkZXMoYSl9dmFyIG1hPS9bK34+IF0kLyxSYT0icGFyZW50Tm9kZSIsdnM9InByZXZpb3VzU2libGluZyI7ZnVuY3Rpb24gcmEoYSx1KXtmb3IodmFyIHY9YS5zcGxpdCgiLiIpLHk9di5sZW5ndGgtMTt5PjA7eS0tKXt2YXIgUD12W3ldLE89UFtQLmxlbmd0aC0xXSxGPVAucmVwbGFjZShtYSwiIik7aWYoTz09PSJ+Inx8Tz09PSIgIil7Zm9yKHZhciBHPU89PT0ifiI/dnM6UmE7dSYmKHU9dVtHXSwhbmEoRix1KSk7KTtpZighdSlyZXR1cm4hMX1lbHNlIGlmKE89PT0iPiI/dT11JiZ1W1JhXTpPPT09IisiJiYodT11JiZ1W3ZzXSksIW5hKEYsdSkpcmV0dXJuITF9cmV0dXJuITB9dmFyIE1zPTFlMztmdW5jdGlvbiBIbChhLHUsdil7dmFye3N0eWxlczp5LHdlaWdodHM6UH09YTtwYSh1KS5mb3JFYWNoKE89PntpZighKE8mJnYmJiFyYShPLHYpKSl7dmFyIEY9Ty5zcGxpdCgiLiIpLmxlbmd0aCxHPXVbT107cGEoRykuZm9yRWFjaChZPT57dmFyIGxlPUdbWV0semU9WVswXT09PSIhIjt6ZSYmKFk9WS5zbGljZSgxKSk7dmFyIGF0PVBbWV18fDAsZ2U9RisoemU/TXM6MCk7Z2U+PWF0JiYoUFtZXT1nZSx5W1ldPWxlKX0pfX0pfWZ1bmN0aW9uIG1zKGEsdSl7dmFyIHY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGwseT17c3R5bGVzOnt9LHdlaWdodHM6e319O3JldHVybiBhLmZvckVhY2goUD0+e3ZhciBPPXVbUF07TyYmSGwoeSxPLHYpfSkseS5zdHlsZXN9ZnVuY3Rpb24gRHMoYSl7cmV0dXJuIG1zKGEuY2xhc3NMaXN0LGEuc3R5bGVTaGVldCxhKX1mdW5jdGlvbiBGcyhhLHUpe3ZhciB2PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpudWxsO3JldHVybiBtcyhhLFZzKHUpLHYpfWZ1bmN0aW9uIFZzKGEpe3Zhcnt0eXBlOnUsYXBwQ29udGV4dDp2fT1hLHk9dTtpZigheS5fX3N0eWxlcylpZih2JiZFLmlzQXJyYXkodi5wcm92aWRlcy5fX2dsb2JhbFN0eWxlcykmJih2LnByb3ZpZGVzLl9fZ2xvYmFsU3R5bGVzPXZhKHYucHJvdmlkZXMuX19nbG9iYWxTdHlsZXMpKSx5Lm1wVHlwZT09PSJwYWdlIiYmdil5Ll9fc3R5bGVzPXYucHJvdmlkZXMuX19nbG9iYWxTdHlsZXM7ZWxzZXt2YXIgUD1bXTt2JiZQLnB1c2godi5wcm92aWRlcy5fX2dsb2JhbFN0eWxlcyksRS5pc0FycmF5KHkuc3R5bGVzKSYmeS5zdHlsZXMuZm9yRWFjaChPPT5QLnB1c2goTykpLHkuX19zdHlsZXM9dmEoUCl9cmV0dXJuIHkuX19zdHlsZXN9ZnVuY3Rpb24gX3MoYSx1LHYpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO3kmJihbdSx2XT15byhhLHUsdix5KSksYS5zZXRBdHRyKHUsdil9dmFyIHhhPSJob3ZlckNsYXNzIixobD0icGxhY2Vob2xkZXJDbGFzcyIsJHM9InBsYWNlaG9sZGVyU3R5bGUiLGpsPSJpbmRpY2F0b3JDbGFzcyIsVm89ImluZGljYXRvclN0eWxlIixaYT0ibWFza0NsYXNzIixfYT0ibWFza1N0eWxlIixCYT17dmlldzp7Y2xhc3M6W3hhXSxzdHlsZTpbXX0sYnV0dG9uOntjbGFzczpbeGFdLHN0eWxlOltdfSxuYXZpZ2F0b3I6e2NsYXNzOlt4YV0sc3R5bGU6W119LCJ1LWlucHV0Ijp7Y2xhc3M6W2hsXSxzdHlsZTpbJHNdfSwidS10ZXh0YXJlYSI6e2NsYXNzOltobF0sc3R5bGU6WyRzXX0sInBpY2tlci12aWV3Ijp7Y2xhc3M6W2psLFphXSxzdHlsZTpbVm8sX2FdfX07ZnVuY3Rpb24geW8oYSx1LHYseSl7aWYoIXYpcmV0dXJuW3Usdl07dmFyIFA9QmFbYS50eXBlXTtpZihQKXt2YXIgTz1FLmNhbWVsaXplKHUpO2lmKFAuY2xhc3MuaW5kZXhPZihPKT4tMSlyZXR1cm5bTyxGcyhbdl0seSxhKV07aWYoUC5zdHlsZS5pbmRleE9mKHUpPi0xKXJldHVybiBFLmlzU3RyaW5nKHYpP1tPLEUucGFyc2VTdHJpbmdTdHlsZSh2KV06W08sRS5ub3JtYWxpemVTdHlsZSh2KV19cmV0dXJuW3Usdl19ZnVuY3Rpb24gaWEoYSx1LHYpe3ZhciB5PWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO2lmKCEheSl7dmFyIFA9dj92LnNwbGl0KCIgIik6W107YS5zZXRDbGFzc0xpc3QoUCksYS5zZXRTdHlsZVNoZWV0KFZzKHkpKX19ZnVuY3Rpb24gWGEoYSx1LHYseSl7YS5hZGRFdmVudCh1LHYpfWZ1bmN0aW9uIFVzKGEsdSl7YS5yZW1vdmVFdmVudCh1KX1mdW5jdGlvbiBnbChhLHUsdix5KXt2YXIgUD1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxPPWEuX3ZlaXx8KGEuX3ZlaT17fSksRj1PW3VdO2lmKHkmJkYpRi52YWx1ZT15O2Vsc2V7dmFyW0csWV09SHModSk7aWYoeSl7dmFyIGxlPU9bdV09UWEoeSxQKTtYYShhLEcsbGUpfWVsc2UgRiYmKFVzKGEsRyksT1t1XT12b2lkIDApfX12YXIgJG89Lyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO2Z1bmN0aW9uIGJzKGEpe3JldHVybiBhPT09Im9uLXBvc3QtbWVzc2FnZSI/Im9uUG9zdE1lc3NhZ2UiOmF9ZnVuY3Rpb24gSHMoYSl7dmFyIHU7aWYoJG8udGVzdChhKSl7dT17fTtmb3IodmFyIHY7dj1hLm1hdGNoKCRvKTspYT1hLnNsaWNlKDAsYS5sZW5ndGgtdlswXS5sZW5ndGgpLHVbdlswXS50b0xvd2VyQ2FzZSgpXT0hMH12YXIgeT1hWzJdPT09IjoiP2Euc2xpY2UoMyk6YS5zbGljZSgyKTtyZXR1cm5bYnMoRS5oeXBoZW5hdGUoeSkpLHVdfWZ1bmN0aW9uIFFhKGEsdSl7dmFyIHY9UD0+e0kodi52YWx1ZSx1LDUsW1BdKX07di52YWx1ZT1hO3ZhciB5PW5ldyBTZXQ7cmV0dXJuIEUuaXNBcnJheSh2LnZhbHVlKT92LnZhbHVlLmZvckVhY2goUD0+e1AubW9kaWZpZXJzJiZQLm1vZGlmaWVycy5mb3JFYWNoKE89Pnt5LmFkZChPKX0pfSk6KHYudmFsdWUubW9kaWZpZXJzJiZ2LnZhbHVlLm1vZGlmaWVycy5mb3JFYWNoKFA9Pnt5LmFkZChQKX0pLHRpKHYsdSkpLHYubW9kaWZpZXJzPVsuLi55XSx2fWZ1bmN0aW9uIHRpKGEsdSl7aWYoISF1KXt2YXJ7JHd4c01vZHVsZXM6dn09dTtpZighIXYpe3ZhciB5PWEudmFsdWUudG9TdHJpbmcoKTshdi5maW5kKFA9PnkuaW5kZXhPZigiLiIrUCsiLiIpPi0xKXx8KGEud3hzRXZlbnQ9YS52YWx1ZSgpKX19fWZ1bmN0aW9uIEJyKGEsdSx2KXtpZighIXYpe0UuaXNTdHJpbmcodikmJih2PUUucGFyc2VTdHJpbmdTdHlsZSh2KSk7dmFyIHk9e30sUD11JiYhRS5pc1N0cmluZyh1KTtpZihQKXtmb3IodmFyIE8gaW4gdSl2W09dPT1udWxsJiYoeVtFLmNhbWVsaXplKE8pXT0iIik7Zm9yKHZhciBGIGluIHYpe3ZhciBHPXZbRl07RyE9PXVbRl0mJih5W0UuY2FtZWxpemUoRildPUcpfX1lbHNlIGZvcih2YXIgWSBpbiB2KXlbRS5jYW1lbGl6ZShZKV09dltZXTthLnNldFN0eWxlcyh5KX19dmFyIG9hPVsidS1pbnB1dCIsInUtdGV4dGFyZWEiXSxwbD1mdW5jdGlvbihhLHUsdix5KXt2YXIgUD1hcmd1bWVudHMubGVuZ3RoPjY/YXJndW1lbnRzWzZdOnZvaWQgMCxPPWFyZ3VtZW50cy5sZW5ndGg+OT9hcmd1bWVudHNbOV06dm9pZCAwO3U9PT0iY2xhc3MiP2lhKGEsdix5LE98fFApOnU9PT0ic3R5bGUiP0JyKGEsdix5KTpFLmlzT24odSk/RS5pc01vZGVsTGlzdGVuZXIodSl8fGdsKGEsdSx2LHksUCk6dT09PSJtb2RlbFZhbHVlIiYmb2EuaW5jbHVkZXMoYS50eXBlKT9hLnNldEF0dHJzKHttb2RlbFZhbHVlOnksdmFsdWU6eX0pOl9zKGEsdSx5LFApfTtmdW5jdGlvbiB6bCgpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXToiJHN0eWxlIjt7dmFyIHU9cG4oKTtpZighdSlyZXR1cm4gRS5FTVBUWV9PQko7dmFyIHY9dS50eXBlLl9fY3NzTW9kdWxlcztpZighdilyZXR1cm4gRS5FTVBUWV9PQko7dmFyIHk9dlthXTtyZXR1cm4geXx8RS5FTVBUWV9PQkp9fWZ1bmN0aW9uIGpzKGEpe3ZhciB1PXBuKCk7aWYoISF1KXt2YXIgdj0oKT0+RXModS5zdWJUcmVlLGEodS5wcm94eSkpO1puKCgpPT5Vbih2LHtmbHVzaDoicG9zdCJ9KSksSG4odil9fWZ1bmN0aW9uIEVzKGEsdSl7aWYoYS5zaGFwZUZsYWcmMTI4KXt2YXIgdj1hLnN1c3BlbnNlO2E9di5hY3RpdmVCcmFuY2gsdi5wZW5kaW5nQnJhbmNoJiYhdi5pc0h5ZHJhdGluZyYmdi5lZmZlY3RzLnB1c2goKCk9PntFcyh2LmFjdGl2ZUJyYW5jaCx1KX0pfWZvcig7YS5jb21wb25lbnQ7KWE9YS5jb21wb25lbnQuc3ViVHJlZTtpZihhLnNoYXBlRmxhZyYxJiZhLmVsKXt2YXIgeT1hLmVsLnN0eWxlO2Zvcih2YXIgUCBpbiB1KXkuc2V0UHJvcGVydHkoIi0tIi5jb25jYXQoUCksdVtQXSl9ZWxzZSBhLnR5cGU9PT1KJiZhLmNoaWxkcmVuLmZvckVhY2goTz0+RXMoTyx1KSl9dmFyIHpzPVsiY3RybCIsInNoaWZ0IiwiYWx0IiwibWV0YSJdLFdzPXtzdG9wOmE9PmEuc3RvcFByb3BhZ2F0aW9uKCkscHJldmVudDphPT5hLnByZXZlbnREZWZhdWx0KCksc2VsZjphPT5hLnRhcmdldCE9PWEuY3VycmVudFRhcmdldCxjdHJsOmE9PiFhLmN0cmxLZXksc2hpZnQ6YT0+IWEuc2hpZnRLZXksYWx0OmE9PiFhLmFsdEtleSxtZXRhOmE9PiFhLm1ldGFLZXksbGVmdDphPT4iYnV0dG9uImluIGEmJmEuYnV0dG9uIT09MCxtaWRkbGU6YT0+ImJ1dHRvbiJpbiBhJiZhLmJ1dHRvbiE9PTEscmlnaHQ6YT0+ImJ1dHRvbiJpbiBhJiZhLmJ1dHRvbiE9PTIsZXhhY3Q6KGEsdSk9PnpzLnNvbWUodj0+YVsiIi5jb25jYXQodiwiS2V5IildJiYhdS5pbmNsdWRlcyh2KSl9LHZsPShhLHUpPT5mdW5jdGlvbih2KXtmb3IodmFyIHk9MDt5PHUubGVuZ3RoO3krKyl7dmFyIFA9V3NbdVt5XV07aWYoUCYmUCh2LHUpKXJldHVybn1mb3IodmFyIE89YXJndW1lbnRzLmxlbmd0aCxGPW5ldyBBcnJheShPPjE/Ty0xOjApLEc9MTtHPE87RysrKUZbRy0xXT1hcmd1bWVudHNbR107cmV0dXJuIGEodiwuLi5GKX0sR3M9KGEsdSk9PnY9PntpZigia2V5ImluIHYpe3ZhciB5PUUuaHlwaGVuYXRlKHYua2V5KTtpZih1LnNvbWUoUD0+UD09PXkpKXJldHVybiBhKHYpfX0seXM9RS5leHRlbmQoe3BhdGNoUHJvcDpwbH0sVWwpLFNzO2Z1bmN0aW9uIHdzKCl7cmV0dXJuIFNzfHwoU3M9b3IoeXMpKX12YXIgbWw9ZnVuY3Rpb24oKXt3cygpLnJlbmRlciguLi5hcmd1bWVudHMpfSxfbD1mdW5jdGlvbigpe3ZhciBhPXdzKCkuY3JlYXRlQXBwKC4uLmFyZ3VtZW50cykse21vdW50OnV9PWE7cmV0dXJuIGEubW91bnQ9dj0+dSh2KSxhfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsImNhbWVsaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5jYW1lbGl6ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiY2FwaXRhbGl6ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuY2FwaXRhbGl6ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiaHlwaGVuYXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5oeXBoZW5hdGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIm5vcm1hbGl6ZUNsYXNzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5ub3JtYWxpemVDbGFzc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibm9ybWFsaXplUHJvcHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLm5vcm1hbGl6ZVByb3BzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJub3JtYWxpemVTdHlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUubm9ybWFsaXplU3R5bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInRvRGlzcGxheVN0cmluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUudG9EaXNwbGF5U3RyaW5nfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJ0b0hhbmRsZXJLZXkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnRvSGFuZGxlcktleX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiRWZmZWN0U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLkVmZmVjdFNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJSZWFjdGl2ZUVmZmVjdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIuUmVhY3RpdmVFZmZlY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsImN1c3RvbVJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIuY3VzdG9tUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJlZmZlY3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLmVmZmVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiZWZmZWN0U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLmVmZmVjdFNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJnZXRDdXJyZW50U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLmdldEN1cnJlbnRTY29wZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiaXNQcm94eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIuaXNQcm94eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiaXNSZWFjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIuaXNSZWFjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiaXNSZWFkb25seSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIuaXNSZWFkb25seX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwiaXNSZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLmlzUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJpc1NoYWxsb3ciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLmlzU2hhbGxvd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwibWFya1JhdyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIubWFya1Jhd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwib25TY29wZURpc3Bvc2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLm9uU2NvcGVEaXNwb3NlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJwcm94eVJlZnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLnByb3h5UmVmc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwicmVhY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLnJlYWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJyZWFkb25seSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIucmVhZG9ubHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIucmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJzaGFsbG93UmVhY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLnNoYWxsb3dSZWFjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwic2hhbGxvd1JlYWRvbmx5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi5zaGFsbG93UmVhZG9ubHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInNoYWxsb3dSZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLnNoYWxsb3dSZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInN0b3AiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLnN0b3B9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInRvUmF3Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi50b1Jhd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwidG9SZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLnRvUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJ0b1JlZnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLnRvUmVmc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwidHJpZ2dlclJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIudHJpZ2dlclJlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwidW5yZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLnVucmVmfX0pLGQuQmFzZVRyYW5zaXRpb249a3IsZC5CYXNlVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycz1nbixkLkNvbW1lbnQ9Y2UsZC5GcmFnbWVudD1KLGQuS2VlcEFsaXZlPWxuLGQuU3RhdGljPXBlLGQuU3VzcGVuc2U9dW8sZC5UZWxlcG9ydD0kLGQuVGV4dD10ZSxkLmFzc2VydE51bWJlcj1lbixkLmNhbGxXaXRoQXN5bmNFcnJvckhhbmRsaW5nPUksZC5jYWxsV2l0aEVycm9ySGFuZGxpbmc9eHQsZC5jbG9uZVZOb2RlPWNpLGQuY29tcGF0VXRpbHM9JGwsZC5jb21wdXRlZD1ibyxkLmNyZWF0ZUFwcD1fbCxkLmNyZWF0ZUJsb2NrPUJ0LGQuY3JlYXRlQ29tbWVudFZOb2RlPUdhLGQuY3JlYXRlRWxlbWVudEJsb2NrPWplLGQuY3JlYXRlRWxlbWVudFZOb2RlPVV0LGQuY3JlYXRlSHlkcmF0aW9uUmVuZGVyZXI9emEsZC5jcmVhdGVQcm9wc1Jlc3RQcm94eT15bixkLmNyZWF0ZVJlbmRlcmVyPW9yLGQuY3JlYXRlU2xvdHM9eCxkLmNyZWF0ZVN0YXRpY1ZOb2RlPUdpLGQuY3JlYXRlVGV4dFZOb2RlPWVpLGQuY3JlYXRlVk5vZGU9RnQsZC5kZWZpbmVBc3luY0NvbXBvbmVudD0kcixkLmRlZmluZUNvbXBvbmVudD1OaSxkLmRlZmluZUVtaXRzPUZvLGQuZGVmaW5lRXhwb3NlPUJzLGQuZGVmaW5lUHJvcHM9ZHMsZC5nZXRDdXJyZW50SW5zdGFuY2U9cG4sZC5nZXRUcmFuc2l0aW9uUmF3Q2hpbGRyZW49VnIsZC5ndWFyZFJlYWN0aXZlUHJvcHM9WG8sZC5oPUFpLGQuaGFuZGxlRXJyb3I9U3QsZC5pbml0Q3VzdG9tRm9ybWF0dGVyPWthLGQuaW5qZWN0PUluLGQuaW5qZWN0SG9vaz1SaSxkLmlzTWVtb1NhbWU9Z3MsZC5pc1J1bnRpbWVPbmx5PWZzLGQuaXNWTm9kZT1jbixkLm1lcmdlRGVmYXVsdHM9T3QsZC5tZXJnZVByb3BzPUZuLGQubmV4dFRpY2s9YXIsZC5vbkFjdGl2YXRlZD1VcixkLm9uQmVmb3JlTW91bnQ9UXIsZC5vbkJlZm9yZVVubW91bnQ9UW4sZC5vbkJlZm9yZVVwZGF0ZT1YbixkLm9uRGVhY3RpdmF0ZWQ9dG8sZC5vbkVycm9yQ2FwdHVyZWQ9bm8sZC5vbk1vdW50ZWQ9Wm4sZC5vblJlbmRlclRyYWNrZWQ9Tm8sZC5vblJlbmRlclRyaWdnZXJlZD1nbyxkLm9uU2VydmVyUHJlZmV0Y2g9aG8sZC5vblVubW91bnRlZD1scixkLm9uVXBkYXRlZD1IbixkLm9wZW5CbG9jaz13ZSxkLnBhcnNlQ2xhc3NMaXN0PUZzLGQucGFyc2VDbGFzc1N0eWxlcz1EcyxkLnBvcFNjb3BlSWQ9Q28sZC5wcm92aWRlPURyLGQucHVzaFNjb3BlSWQ9X2ksZC5xdWV1ZVBvc3RGbHVzaENiPW1pLGQucmVnaXN0ZXJSdW50aW1lQ29tcGlsZXI9cWEsZC5yZW5kZXI9bWwsZC5yZW5kZXJMaXN0PXhvLGQucmVuZGVyU2xvdD1RLGQucmVzb2x2ZUNvbXBvbmVudD1LbyxkLnJlc29sdmVEaXJlY3RpdmU9Um8sZC5yZXNvbHZlRHluYW1pY0NvbXBvbmVudD1VaSxkLnJlc29sdmVGaWx0ZXI9ZGwsZC5yZXNvbHZlVHJhbnNpdGlvbkhvb2tzPU9lLGQuc2V0QmxvY2tUcmFja2luZz0kdCxkLnNldERldnRvb2xzSG9vaz1KdCxkLnNldFRyYW5zaXRpb25Ib29rcz1haSxkLnNzckNvbnRleHRLZXk9WWksZC50b0hhbmRsZXJzPXNlLGQudHJhbnNmb3JtVk5vZGVBcmdzPWh0LGQudXNlQXR0cnM9QmUsZC51c2VDc3NNb2R1bGU9emwsZC51c2VDc3NTdHlsZXM9dmEsZC51c2VDc3NWYXJzPWpzLGQudXNlU1NSQ29udGV4dD1FbyxkLnVzZVNsb3RzPUxzLGQudXNlVHJhbnNpdGlvblN0YXRlPUVpLGQudmVyc2lvbj1wcyxkLndhcm49THQsZC53YXRjaD1LcixkLndhdGNoRWZmZWN0PVVuLGQud2F0Y2hQb3N0RWZmZWN0PXFyLGQud2F0Y2hTeW5jRWZmZWN0PUlvLGQud2l0aEFzeW5jQ29udGV4dD1FcixkLndpdGhDdHg9RmksZC53aXRoRGVmYXVsdHM9aHMsZC53aXRoRGlyZWN0aXZlcz1rbyxkLndpdGhLZXlzPUdzLGQud2l0aE1lbW89dGEsZC53aXRoTW9kaWZpZXJzPXZsLGQud2l0aFNjb3BlSWQ9Y2EsT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGR9KHt9LHcsayxwKTtyZXR1cm4gUy5fX1RZUEVfXz0ibnZ1ZSIsU312YXIgeHA9aEkoX0kpO3ZhciBoYz17fTtsSShoYyx7RU1QVFlfQVJSOigpPT5SSSxFTVBUWV9PQko6KCk9PmtJLE5POigpPT5CSSxOT09QOigpPT54SSxjYW1lbGl6ZTooKT0+cUksY2FwaXRhbGl6ZTooKT0+aXUsZGVmOigpPT5RSSxleHRlbmQ6KCk9PmhpLGdldEdsb2JhbFRoaXM6KCk9Pm5OLGhhc0NoYW5nZWQ6KCk9PlpJLGhhc093bjooKT0+aWwsaHlwaGVuYXRlOigpPT5kZixpbnZva2VBcnJheUZuczooKT0+WEksaXNBcnJheTooKT0+UGksaXNCdWlsdEluRGlyZWN0aXZlOigpPT5HSSxpc0Z1bmN0aW9uOigpPT4kbixpc0dsb2JhbGx5V2hpdGVsaXN0ZWQ6KCk9PnlJLGlzSFRNTFRhZzooKT0+UEksaXNJbnRlZ2VyS2V5OigpPT56SSxpc01hcDooKT0+TXAsaXNNb2RlbExpc3RlbmVyOigpPT5ESSxpc09iamVjdDooKT0+TWwsaXNPbjooKT0+TUksaXNQbGFpbk9iamVjdDooKT0+RGwsaXNQcm9taXNlOigpPT5ISSxpc1JlZ0V4cDooKT0+JEksaXNSZXNlcnZlZFByb3A6KCk9PldJLGlzU1ZHVGFnOigpPT5JSSxpc1NldDooKT0+RHAsaXNTdHJpbmc6KCk9PmdpLGlzU3ltYm9sOigpPT5VSSxsb29zZVRvTnVtYmVyOigpPT5lTixtYWtlTWFwOigpPT5MbCxub3JtYWxpemVDbGFzczooKT0+ZmYsbm9ybWFsaXplUHJvcHM6KCk9PkFJLG5vcm1hbGl6ZVN0eWxlOigpPT51ZixwYXJzZVN0cmluZ1N0eWxlOigpPT5CcCxyZW1vdmU6KCk9PkZJLHRvRGlzcGxheVN0cmluZzooKT0+TkksdG9IYW5kbGVyS2V5OigpPT5KSSx0b051bWJlcjooKT0+dE4sdG9SYXdUeXBlOigpPT5qSSx0b1R5cGVTdHJpbmc6KCk9PkZhfSk7ZnVuY3Rpb24gTGwoZyxzKXtsZXQgcD1PYmplY3QuY3JlYXRlKG51bGwpLHc9Zy5zcGxpdCgiLCIpO2ZvcihsZXQgaz0wO2s8dy5sZW5ndGg7aysrKXBbd1trXV09ITA7cmV0dXJuIHM/az0+ISFwW2sudG9Mb3dlckNhc2UoKV06az0+ISFwW2tdfXZhciBFST0iSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTixwYXJzZUZsb2F0LHBhcnNlSW50LGRlY29kZVVSSSxkZWNvZGVVUklDb21wb25lbnQsZW5jb2RlVVJJLGVuY29kZVVSSUNvbXBvbmVudCxNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsQmlnSW50Iix5ST1MbChFSSk7ZnVuY3Rpb24gdWYoZyl7aWYoUGkoZykpe2xldCBzPXt9O2ZvcihsZXQgcD0wO3A8Zy5sZW5ndGg7cCsrKXtsZXQgdz1nW3BdLGs9Z2kodyk/QnAodyk6dWYodyk7aWYoaylmb3IobGV0IFMgaW4gaylzW1NdPWtbU119cmV0dXJuIHN9ZWxzZXtpZihnaShnKSlyZXR1cm4gZztpZihNbChnKSlyZXR1cm4gZ319dmFyIFNJPS87KD8hW14oXSpcKSkvZyx3ST0vOihbXl0rKS8sQ0k9L1wvXCouKj9cKlwvL2dzO2Z1bmN0aW9uIEJwKGcpe2xldCBzPXt9O3JldHVybiBnLnJlcGxhY2UoQ0ksIiIpLnNwbGl0KFNJKS5mb3JFYWNoKHA9PntpZihwKXtsZXQgdz1wLnNwbGl0KHdJKTt3Lmxlbmd0aD4xJiYoc1t3WzBdLnRyaW0oKV09d1sxXS50cmltKCkpfX0pLHN9ZnVuY3Rpb24gZmYoZyl7bGV0IHM9IiI7aWYoZ2koZykpcz1nO2Vsc2UgaWYoUGkoZykpZm9yKGxldCBwPTA7cDxnLmxlbmd0aDtwKyspe2xldCB3PWZmKGdbcF0pO3cmJihzKz13KyIgIil9ZWxzZSBpZihNbChnKSlmb3IobGV0IHAgaW4gZylnW3BdJiYocys9cCsiICIpO3JldHVybiBzLnRyaW0oKX1mdW5jdGlvbiBBSShnKXtpZighZylyZXR1cm4gbnVsbDtsZXR7Y2xhc3M6cyxzdHlsZTpwfT1nO3JldHVybiBzJiYhZ2kocykmJihnLmNsYXNzPWZmKHMpKSxwJiYoZy5zdHlsZT11ZihwKSksZ312YXIgT0k9Imh0bWwsYm9keSxiYXNlLGhlYWQsbGluayxtZXRhLHN0eWxlLHRpdGxlLGFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLGhncm91cCxoMSxoMixoMyxoNCxoNSxoNixuYXYsc2VjdGlvbixkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCxhLGIsYWJicixiZGksYmRvLGJyLGNpdGUsY29kZSxkYXRhLGRmbixlbSxpLGtiZCxtYXJrLHEscnAscnQscnVieSxzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbyxlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucyxjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0cixidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLG91dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsZGV0YWlscyxkaWFsb2csbWVudSxzdW1tYXJ5LHRlbXBsYXRlLGJsb2NrcXVvdGUsaWZyYW1lLHRmb290IixUST0ic3ZnLGFuaW1hdGUsYW5pbWF0ZU1vdGlvbixhbmltYXRlVHJhbnNmb3JtLGNpcmNsZSxjbGlwUGF0aCxjb2xvci1wcm9maWxlLGRlZnMsZGVzYyxkaXNjYXJkLGVsbGlwc2UsZmVCbGVuZCxmZUNvbG9yTWF0cml4LGZlQ29tcG9uZW50VHJhbnNmZXIsZmVDb21wb3NpdGUsZmVDb252b2x2ZU1hdHJpeCxmZURpZmZ1c2VMaWdodGluZyxmZURpc3BsYWNlbWVudE1hcCxmZURpc3RhbnRMaWdodCxmZURyb3BTaGFkb3csZmVGbG9vZCxmZUZ1bmNBLGZlRnVuY0IsZmVGdW5jRyxmZUZ1bmNSLGZlR2F1c3NpYW5CbHVyLGZlSW1hZ2UsZmVNZXJnZSxmZU1lcmdlTm9kZSxmZU1vcnBob2xvZ3ksZmVPZmZzZXQsZmVQb2ludExpZ2h0LGZlU3BlY3VsYXJMaWdodGluZyxmZVNwb3RMaWdodCxmZVRpbGUsZmVUdXJidWxlbmNlLGZpbHRlcixmb3JlaWduT2JqZWN0LGcsaGF0Y2gsaGF0Y2hwYXRoLGltYWdlLGxpbmUsbGluZWFyR3JhZGllbnQsbWFya2VyLG1hc2ssbWVzaCxtZXNoZ3JhZGllbnQsbWVzaHBhdGNoLG1lc2hyb3csbWV0YWRhdGEsbXBhdGgscGF0aCxwYXR0ZXJuLHBvbHlnb24scG9seWxpbmUscmFkaWFsR3JhZGllbnQscmVjdCxzZXQsc29saWRjb2xvcixzdG9wLHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0UGF0aCx0aXRsZSx0c3Bhbix1bmtub3duLHVzZSx2aWV3IixQST1MbChPSSksSUk9TGwoVEkpLE5JPWc9PmdpKGcpP2c6Zz09bnVsbD8iIjpQaShnKXx8TWwoZykmJihnLnRvU3RyaW5nPT09RnB8fCEkbihnLnRvU3RyaW5nKSk/SlNPTi5zdHJpbmdpZnkoZyxMcCwyKTpTdHJpbmcoZyksTHA9KGcscyk9PnMmJnMuX192X2lzUmVmP0xwKGcscy52YWx1ZSk6TXAocyk/e1tgTWFwKCR7cy5zaXplfSlgXTpbLi4ucy5lbnRyaWVzKCldLnJlZHVjZSgocCxbdyxrXSk9PihwW2Ake3d9ID0+YF09ayxwKSx7fSl9OkRwKHMpP3tbYFNldCgke3Muc2l6ZX0pYF06Wy4uLnMudmFsdWVzKCldfTpNbChzKSYmIVBpKHMpJiYhRGwocyk/U3RyaW5nKHMpOnMsa0k9e30sUkk9W10seEk9KCk9Pnt9LEJJPSgpPT4hMSxMST0vXm9uW15hLXpdLyxNST1nPT5MSS50ZXN0KGcpLERJPWc9Pmcuc3RhcnRzV2l0aCgib25VcGRhdGU6IiksaGk9T2JqZWN0LmFzc2lnbixGST0oZyxzKT0+e2xldCBwPWcuaW5kZXhPZihzKTtwPi0xJiZnLnNwbGljZShwLDEpfSxWST1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGlsPShnLHMpPT5WSS5jYWxsKGcscyksUGk9QXJyYXkuaXNBcnJheSxNcD1nPT5GYShnKT09PSJbb2JqZWN0IE1hcF0iLERwPWc9PkZhKGcpPT09IltvYmplY3QgU2V0XSIsJEk9Zz0+RmEoZyk9PT0iW29iamVjdCBSZWdFeHBdIiwkbj1nPT50eXBlb2YgZz09ImZ1bmN0aW9uIixnaT1nPT50eXBlb2YgZz09InN0cmluZyIsVUk9Zz0+dHlwZW9mIGc9PSJzeW1ib2wiLE1sPWc9PmchPT1udWxsJiZ0eXBlb2YgZz09Im9iamVjdCIsSEk9Zz0+TWwoZykmJiRuKGcudGhlbikmJiRuKGcuY2F0Y2gpLEZwPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRmE9Zz0+RnAuY2FsbChnKSxqST1nPT5GYShnKS5zbGljZSg4LC0xKSxEbD1nPT5GYShnKT09PSJbb2JqZWN0IE9iamVjdF0iLHpJPWc9PmdpKGcpJiZnIT09Ik5hTiImJmdbMF0hPT0iLSImJiIiK3BhcnNlSW50KGcsMTApPT09ZyxXST1MbCgiLGtleSxyZWYscmVmX2ZvcixyZWZfa2V5LG9uVm5vZGVCZWZvcmVNb3VudCxvblZub2RlTW91bnRlZCxvblZub2RlQmVmb3JlVXBkYXRlLG9uVm5vZGVVcGRhdGVkLG9uVm5vZGVCZWZvcmVVbm1vdW50LG9uVm5vZGVVbm1vdW50ZWQiKSxHST1MbCgiYmluZCxjbG9hayxlbHNlLWlmLGVsc2UsZm9yLGh0bWwsaWYsbW9kZWwsb24sb25jZSxwcmUsc2hvdyxzbG90LHRleHQsbWVtbyIpLHJ1PWc9PntsZXQgcz1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBwPT5zW3BdfHwoc1twXT1nKHApKX0sWUk9Ly0oXHcpL2cscUk9cnUoZz0+Zy5yZXBsYWNlKFlJLChzLHApPT5wP3AudG9VcHBlckNhc2UoKToiIikpLEtJPS9cQihbQS1aXSkvZyxkZj1ydShnPT5nLnJlcGxhY2UoS0ksIi0kMSIpLnRvTG93ZXJDYXNlKCkpLGl1PXJ1KGc9PmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZy5zbGljZSgxKSksSkk9cnUoZz0+Zz9gb24ke2l1KGcpfWA6IiIpLFpJPShnLHMpPT4hT2JqZWN0LmlzKGcscyksWEk9KGcscyk9Pntmb3IobGV0IHA9MDtwPGcubGVuZ3RoO3ArKylnW3BdKHMpfSxRST0oZyxzLHApPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGcscyx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6cH0pfSxlTj1nPT57bGV0IHM9cGFyc2VGbG9hdChnKTtyZXR1cm4gaXNOYU4ocyk/ZzpzfSx0Tj1nPT57bGV0IHM9Z2koZyk/TnVtYmVyKGcpOk5hTjtyZXR1cm4gaXNOYU4ocyk/ZzpzfSxWcCxuTj0oKT0+VnB8fChWcD10eXBlb2YgZ2xvYmFsVGhpcyE9InVuZGVmaW5lZCI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZiE9InVuZGVmaW5lZCI/c2VsZjp0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIj93aW5kb3c6dHlwZW9mIGdsb2JhbCE9InVuZGVmaW5lZCI/Z2xvYmFsOnt9KTtmdW5jdGlvbiAkcChnKXt2YXIgcz1mdW5jdGlvbihwLHcpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBrKHgsLi4uUSl7Y29uc29sZS53YXJuKGBbVnVlIHdhcm5dICR7eH1gLC4uLlEpfWxldCBTO2NsYXNzIGR7Y29uc3RydWN0b3IoUT0hMSl7dGhpcy5kZXRhY2hlZD1RLHRoaXMuX2FjdGl2ZT0hMCx0aGlzLmVmZmVjdHM9W10sdGhpcy5jbGVhbnVwcz1bXSx0aGlzLnBhcmVudD1TLCFRJiZTJiYodGhpcy5pbmRleD0oUy5zY29wZXN8fChTLnNjb3Blcz1bXSkpLnB1c2godGhpcyktMSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLl9hY3RpdmV9cnVuKFEpe2lmKHRoaXMuX2FjdGl2ZSl7bGV0IGhlPVM7dHJ5e3JldHVybiBTPXRoaXMsUSgpfWZpbmFsbHl7Uz1oZX19fW9uKCl7Uz10aGlzfW9mZigpe1M9dGhpcy5wYXJlbnR9c3RvcChRKXtpZih0aGlzLl9hY3RpdmUpe2xldCBoZSxzZTtmb3IoaGU9MCxzZT10aGlzLmVmZmVjdHMubGVuZ3RoO2hlPHNlO2hlKyspdGhpcy5lZmZlY3RzW2hlXS5zdG9wKCk7Zm9yKGhlPTAsc2U9dGhpcy5jbGVhbnVwcy5sZW5ndGg7aGU8c2U7aGUrKyl0aGlzLmNsZWFudXBzW2hlXSgpO2lmKHRoaXMuc2NvcGVzKWZvcihoZT0wLHNlPXRoaXMuc2NvcGVzLmxlbmd0aDtoZTxzZTtoZSsrKXRoaXMuc2NvcGVzW2hlXS5zdG9wKCEwKTtpZighdGhpcy5kZXRhY2hlZCYmdGhpcy5wYXJlbnQmJiFRKXtsZXQgZGU9dGhpcy5wYXJlbnQuc2NvcGVzLnBvcCgpO2RlJiZkZSE9PXRoaXMmJih0aGlzLnBhcmVudC5zY29wZXNbdGhpcy5pbmRleF09ZGUsZGUuaW5kZXg9dGhpcy5pbmRleCl9dGhpcy5wYXJlbnQ9dm9pZCAwLHRoaXMuX2FjdGl2ZT0hMX19fWZ1bmN0aW9uIEUoeCl7cmV0dXJuIG5ldyBkKHgpfWZ1bmN0aW9uIEIoeCxRPVMpe1EmJlEuYWN0aXZlJiZRLmVmZmVjdHMucHVzaCh4KX1mdW5jdGlvbiBXZSgpe3JldHVybiBTfWZ1bmN0aW9uIEx0KHgpe1MmJlMuY2xlYW51cHMucHVzaCh4KX1sZXQgZW49eD0+e2xldCBRPW5ldyBTZXQoeCk7cmV0dXJuIFEudz0wLFEubj0wLFF9LHh0PXg9Pih4LncmWik+MCxJPXg9Pih4Lm4mWik+MCxTdD0oe2RlcHM6eH0pPT57aWYoeC5sZW5ndGgpZm9yKGxldCBRPTA7UTx4Lmxlbmd0aDtRKyspeFtRXS53fD1afSxQbj14PT57bGV0e2RlcHM6UX09eDtpZihRLmxlbmd0aCl7bGV0IGhlPTA7Zm9yKGxldCBzZT0wO3NlPFEubGVuZ3RoO3NlKyspe2xldCBkZT1RW3NlXTt4dChkZSkmJiFJKGRlKT9kZS5kZWxldGUoeCk6UVtoZSsrXT1kZSxkZS53Jj1+WixkZS5uJj1+Wn1RLmxlbmd0aD1oZX19LHN0PW5ldyBXZWFrTWFwLFc9MCxaPTEsZm49MzAsc24sX249U3ltYm9sKCIiKSxXbj1TeW1ib2woIiIpO2NsYXNzIHBpe2NvbnN0cnVjdG9yKFEsaGU9bnVsbCxzZSl7dGhpcy5mbj1RLHRoaXMuc2NoZWR1bGVyPWhlLHRoaXMuYWN0aXZlPSEwLHRoaXMuZGVwcz1bXSx0aGlzLnBhcmVudD12b2lkIDAsQih0aGlzLHNlKX1ydW4oKXtpZighdGhpcy5hY3RpdmUpcmV0dXJuIHRoaXMuZm4oKTtsZXQgUT1zbixoZT1Dbjtmb3IoO1E7KXtpZihRPT09dGhpcylyZXR1cm47UT1RLnBhcmVudH10cnl7cmV0dXJuIHRoaXMucGFyZW50PXNuLHNuPXRoaXMsQ249ITAsWj0xPDwrK1csVzw9Zm4/U3QodGhpcyk6dmkodGhpcyksdGhpcy5mbigpfWZpbmFsbHl7Vzw9Zm4mJlBuKHRoaXMpLFo9MTw8LS1XLHNuPXRoaXMucGFyZW50LENuPWhlLHRoaXMucGFyZW50PXZvaWQgMCx0aGlzLmRlZmVyU3RvcCYmdGhpcy5zdG9wKCl9fXN0b3AoKXtzbj09PXRoaXM/dGhpcy5kZWZlclN0b3A9ITA6dGhpcy5hY3RpdmUmJih2aSh0aGlzKSx0aGlzLm9uU3RvcCYmdGhpcy5vblN0b3AoKSx0aGlzLmFjdGl2ZT0hMSl9fWZ1bmN0aW9uIHZpKHgpe2xldHtkZXBzOlF9PXg7aWYoUS5sZW5ndGgpe2ZvcihsZXQgaGU9MDtoZTxRLmxlbmd0aDtoZSsrKVFbaGVdLmRlbGV0ZSh4KTtRLmxlbmd0aD0wfX1mdW5jdGlvbiBhcih4LFEpe3guZWZmZWN0JiYoeD14LmVmZmVjdC5mbik7bGV0IGhlPW5ldyBwaSh4KTtRJiYody5leHRlbmQoaGUsUSksUS5zY29wZSYmQihoZSxRLnNjb3BlKSksKCFRfHwhUS5sYXp5KSYmaGUucnVuKCk7bGV0IHNlPWhlLnJ1bi5iaW5kKGhlKTtyZXR1cm4gc2UuZWZmZWN0PWhlLHNlfWZ1bmN0aW9uIFNyKHgpe3guZWZmZWN0LnN0b3AoKX1sZXQgQ249ITAsd3I9W107ZnVuY3Rpb24gQ3IoKXt3ci5wdXNoKENuKSxDbj0hMX1mdW5jdGlvbiBtaSgpe3dyLnB1c2goQ24pLENuPSEwfWZ1bmN0aW9uIHJpKCl7bGV0IHg9d3IucG9wKCk7Q249eD09PXZvaWQgMD8hMDp4fWZ1bmN0aW9uIFZlKHgsUSxoZSl7aWYoQ24mJnNuKXtsZXQgc2U9c3QuZ2V0KHgpO3NlfHxzdC5zZXQoeCxzZT1uZXcgTWFwKTtsZXQgZGU9c2UuZ2V0KGhlKTtkZXx8c2Uuc2V0KGhlLGRlPWVuKCkpLG90KGRlLHZvaWQgMCl9fWZ1bmN0aW9uIG90KHgsUSl7bGV0IGhlPSExO1c8PWZuP0koeCl8fCh4Lm58PVosaGU9IXh0KHgpKTpoZT0heC5oYXMoc24pLGhlJiYoeC5hZGQoc24pLHNuLmRlcHMucHVzaCh4KSl9ZnVuY3Rpb24gYnQoeCxRLGhlLHNlLGRlLG10KXtsZXQgSz1zdC5nZXQoeCk7aWYoIUspcmV0dXJuO2xldCB6PVtdO2lmKFE9PT0iY2xlYXIiKXo9Wy4uLksudmFsdWVzKCldO2Vsc2UgaWYoaGU9PT0ibGVuZ3RoIiYmdy5pc0FycmF5KHgpKXtsZXQgeGU9TnVtYmVyKHNlKTtLLmZvckVhY2goKG50LFl0KT0+eyhZdD09PSJsZW5ndGgifHxZdD49eGUpJiZ6LnB1c2gobnQpfSl9ZWxzZSBzd2l0Y2goaGUhPT12b2lkIDAmJnoucHVzaChLLmdldChoZSkpLFEpe2Nhc2UiYWRkIjp3LmlzQXJyYXkoeCk/dy5pc0ludGVnZXJLZXkoaGUpJiZ6LnB1c2goSy5nZXQoImxlbmd0aCIpKTooei5wdXNoKEsuZ2V0KF9uKSksdy5pc01hcCh4KSYmei5wdXNoKEsuZ2V0KFduKSkpO2JyZWFrO2Nhc2UiZGVsZXRlIjp3LmlzQXJyYXkoeCl8fCh6LnB1c2goSy5nZXQoX24pKSx3LmlzTWFwKHgpJiZ6LnB1c2goSy5nZXQoV24pKSk7YnJlYWs7Y2FzZSJzZXQiOncuaXNNYXAoeCkmJnoucHVzaChLLmdldChfbikpO2JyZWFrfWxldCBpZT12b2lkIDA7aWYoei5sZW5ndGg9PT0xKXpbMF0mJnRuKHpbMF0pO2Vsc2V7bGV0IHhlPVtdO2ZvcihsZXQgbnQgb2YgeiludCYmeGUucHVzaCguLi5udCk7dG4oZW4oeGUpKX19ZnVuY3Rpb24gdG4oeCxRKXtsZXQgaGU9dy5pc0FycmF5KHgpP3g6Wy4uLnhdO2ZvcihsZXQgc2Ugb2YgaGUpc2UuY29tcHV0ZWQmJlNuKHNlLFEpO2ZvcihsZXQgc2Ugb2YgaGUpc2UuY29tcHV0ZWR8fFNuKHNlLFEpfWZ1bmN0aW9uIFNuKHgsUSl7KHghPT1zbnx8eC5hbGxvd1JlY3Vyc2UpJiYoeC5zY2hlZHVsZXI/eC5zY2hlZHVsZXIoKTp4LnJ1bigpKX1mdW5jdGlvbiBKdCh4LFEpe3ZhciBoZTtyZXR1cm4oaGU9c3QuZ2V0KHgpKT09PW51bGx8fGhlPT09dm9pZCAwP3ZvaWQgMDpoZS5nZXQoUSl9bGV0IHJyPXcubWFrZU1hcCgiX19wcm90b19fLF9fdl9pc1JlZixfX2lzVnVlIiksQXI9bmV3IFNldChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTeW1ib2wpLmZpbHRlcih4PT54IT09ImFyZ3VtZW50cyImJnghPT0iY2FsbGVyIikubWFwKHg9PlN5bWJvbFt4XSkuZmlsdGVyKHcuaXNTeW1ib2wpKSxPcj1GaSgpLE9uPUZpKCExLCEwKSxkbj1GaSghMCksVHI9RmkoITAsITApLF9pPUNvKCk7ZnVuY3Rpb24gQ28oKXtsZXQgeD17fTtyZXR1cm5bImluY2x1ZGVzIiwiaW5kZXhPZiIsImxhc3RJbmRleE9mIl0uZm9yRWFjaChRPT57eFtRXT1mdW5jdGlvbiguLi5oZSl7bGV0IHNlPWxuKHRoaXMpO2ZvcihsZXQgbXQ9MCxLPXRoaXMubGVuZ3RoO210PEs7bXQrKylWZShzZSwiZ2V0IixtdCsiIik7bGV0IGRlPXNlW1FdKC4uLmhlKTtyZXR1cm4gZGU9PT0tMXx8ZGU9PT0hMT9zZVtRXSguLi5oZS5tYXAobG4pKTpkZX19KSxbInB1c2giLCJwb3AiLCJzaGlmdCIsInVuc2hpZnQiLCJzcGxpY2UiXS5mb3JFYWNoKFE9Pnt4W1FdPWZ1bmN0aW9uKC4uLmhlKXtDcigpO2xldCBzZT1sbih0aGlzKVtRXS5hcHBseSh0aGlzLGhlKTtyZXR1cm4gcmkoKSxzZX19KSx4fWZ1bmN0aW9uIGNhKHgpe2xldCBRPWxuKHRoaXMpO3JldHVybiBWZShRLCJoYXMiLHgpLFEuaGFzT3duUHJvcGVydHkoeCl9ZnVuY3Rpb24gRmkoeD0hMSxRPSExKXtyZXR1cm4gZnVuY3Rpb24oc2UsZGUsbXQpe2lmKGRlPT09Il9fdl9pc1JlYWN0aXZlIilyZXR1cm4heDtpZihkZT09PSJfX3ZfaXNSZWFkb25seSIpcmV0dXJuIHg7aWYoZGU9PT0iX192X2lzU2hhbGxvdyIpcmV0dXJuIFE7aWYoZGU9PT0iX192X3JhdyImJm10PT09KHg/UT9NdDprcjpRP0pyOmduKS5nZXQoc2UpKXJldHVybiBzZTtsZXQgSz13LmlzQXJyYXkoc2UpO2lmKCF4KXtpZihLJiZ3Lmhhc093bihfaSxkZSkpcmV0dXJuIFJlZmxlY3QuZ2V0KF9pLGRlLG10KTtpZihkZT09PSJoYXNPd25Qcm9wZXJ0eSIpcmV0dXJuIGNhfWxldCB6PVJlZmxlY3QuZ2V0KHNlLGRlLG10KTtyZXR1cm4ody5pc1N5bWJvbChkZSk/QXIuaGFzKGRlKTpycihkZSkpfHwoeHx8VmUoc2UsImdldCIsZGUpLFEpP3o6aXIoeik/SyYmdy5pc0ludGVnZXJLZXkoZGUpP3o6ei52YWx1ZTp3LmlzT2JqZWN0KHopP3g/VnIoeik6SWkoeik6en19bGV0IFlvPUppKCksQW89SmkoITApO2Z1bmN0aW9uIEppKHg9ITEpe3JldHVybiBmdW5jdGlvbihoZSxzZSxkZSxtdCl7bGV0IEs9aGVbc2VdO2lmKFhyKEspJiZpcihLKSYmIWlyKGRlKSlyZXR1cm4hMTtpZigheCYmKCFQcihkZSkmJiFYcihkZSkmJihLPWxuKEspLGRlPWxuKGRlKSksIXcuaXNBcnJheShoZSkmJmlyKEspJiYhaXIoZGUpKSlyZXR1cm4gSy52YWx1ZT1kZSwhMDtsZXQgej13LmlzQXJyYXkoaGUpJiZ3LmlzSW50ZWdlcktleShzZSk/TnVtYmVyKHNlKTxoZS5sZW5ndGg6dy5oYXNPd24oaGUsc2UpLGllPVJlZmxlY3Quc2V0KGhlLHNlLGRlLG10KTtyZXR1cm4gaGU9PT1sbihtdCkmJih6P3cuaGFzQ2hhbmdlZChkZSxLKSYmYnQoaGUsInNldCIsc2UsZGUsSyk6YnQoaGUsImFkZCIsc2UsZGUpKSxpZX19ZnVuY3Rpb24gTXIoeCxRKXtsZXQgaGU9dy5oYXNPd24oeCxRKSxzZT14W1FdLGRlPVJlZmxlY3QuZGVsZXRlUHJvcGVydHkoeCxRKTtyZXR1cm4gZGUmJmhlJiZidCh4LCJkZWxldGUiLFEsdm9pZCAwLHNlKSxkZX1mdW5jdGlvbiB1YSh4LFEpe2xldCBoZT1SZWZsZWN0Lmhhcyh4LFEpO3JldHVybighdy5pc1N5bWJvbChRKXx8IUFyLmhhcyhRKSkmJlZlKHgsImhhcyIsUSksaGV9ZnVuY3Rpb24gT28oeCl7cmV0dXJuIFZlKHgsIml0ZXJhdGUiLHcuaXNBcnJheSh4KT8ibGVuZ3RoIjpfbiksUmVmbGVjdC5vd25LZXlzKHgpfWxldCBUbz17Z2V0Ok9yLHNldDpZbyxkZWxldGVQcm9wZXJ0eTpNcixoYXM6dWEsb3duS2V5czpPb30sWmk9e2dldDpkbixzZXQoeCxRKXtyZXR1cm4hMH0sZGVsZXRlUHJvcGVydHkoeCxRKXtyZXR1cm4hMH19LGlpPXcuZXh0ZW5kKHt9LFRvLHtnZXQ6T24sc2V0OkFvfSkscW89dy5leHRlbmQoe30sWmkse2dldDpUcn0pLHVvPXg9PngsTm49eD0+UmVmbGVjdC5nZXRQcm90b3R5cGVPZih4KTtmdW5jdGlvbiBocih4LFEsaGU9ITEsc2U9ITEpe3g9eC5fX3ZfcmF3O2xldCBkZT1sbih4KSxtdD1sbihRKTtoZXx8KFEhPT1tdCYmVmUoZGUsImdldCIsUSksVmUoZGUsImdldCIsbXQpKTtsZXR7aGFzOkt9PU5uKGRlKSx6PXNlP3VvOmhlP3RvOlVyO2lmKEsuY2FsbChkZSxRKSlyZXR1cm4geih4LmdldChRKSk7aWYoSy5jYWxsKGRlLG10KSlyZXR1cm4geih4LmdldChtdCkpO3ghPT1kZSYmeC5nZXQoUSl9ZnVuY3Rpb24gZm8oeCxRPSExKXtsZXQgaGU9dGhpcy5fX3ZfcmF3LHNlPWxuKGhlKSxkZT1sbih4KTtyZXR1cm4gUXx8KHghPT1kZSYmVmUoc2UsImhhcyIseCksVmUoc2UsImhhcyIsZGUpKSx4PT09ZGU/aGUuaGFzKHgpOmhlLmhhcyh4KXx8aGUuaGFzKGRlKX1mdW5jdGlvbiBHbih4LFE9ITEpe3JldHVybiB4PXguX192X3JhdywhUSYmVmUobG4oeCksIml0ZXJhdGUiLF9uKSxSZWZsZWN0LmdldCh4LCJzaXplIix4KX1mdW5jdGlvbiBYaSh4KXt4PWxuKHgpO2xldCBRPWxuKHRoaXMpO3JldHVybiBObihRKS5oYXMuY2FsbChRLHgpfHwoUS5hZGQoeCksYnQoUSwiYWRkIix4LHgpKSx0aGlzfWZ1bmN0aW9uIFBvKHgsUSl7UT1sbihRKTtsZXQgaGU9bG4odGhpcykse2hhczpzZSxnZXQ6ZGV9PU5uKGhlKSxtdD1zZS5jYWxsKGhlLHgpO210fHwoeD1sbih4KSxtdD1zZS5jYWxsKGhlLHgpKTtsZXQgSz1kZS5jYWxsKGhlLHgpO3JldHVybiBoZS5zZXQoeCxRKSxtdD93Lmhhc0NoYW5nZWQoUSxLKSYmYnQoaGUsInNldCIseCxRLEspOmJ0KGhlLCJhZGQiLHgsUSksdGhpc31mdW5jdGlvbiBRaSh4KXtsZXQgUT1sbih0aGlzKSx7aGFzOmhlLGdldDpzZX09Tm4oUSksZGU9aGUuY2FsbChRLHgpO2RlfHwoeD1sbih4KSxkZT1oZS5jYWxsKFEseCkpO2xldCBtdD1zZT9zZS5jYWxsKFEseCk6dm9pZCAwLEs9US5kZWxldGUoeCk7cmV0dXJuIGRlJiZidChRLCJkZWxldGUiLHgsdm9pZCAwLG10KSxLfWZ1bmN0aW9uIGJpKCl7bGV0IHg9bG4odGhpcyksUT14LnNpemUhPT0wLGhlPXZvaWQgMCxzZT14LmNsZWFyKCk7cmV0dXJuIFEmJmJ0KHgsImNsZWFyIix2b2lkIDAsdm9pZCAwLGhlKSxzZX1mdW5jdGlvbiBKbih4LFEpe3JldHVybiBmdW5jdGlvbihzZSxkZSl7bGV0IG10PXRoaXMsSz1tdC5fX3ZfcmF3LHo9bG4oSyksaWU9UT91bzp4P3RvOlVyO3JldHVybiF4JiZWZSh6LCJpdGVyYXRlIixfbiksSy5mb3JFYWNoKCh4ZSxudCk9PnNlLmNhbGwoZGUsaWUoeGUpLGllKG50KSxtdCkpfX1mdW5jdGlvbiBEcih4LFEsaGUpe3JldHVybiBmdW5jdGlvbiguLi5zZSl7bGV0IGRlPXRoaXMuX192X3JhdyxtdD1sbihkZSksSz13LmlzTWFwKG10KSx6PXg9PT0iZW50cmllcyJ8fHg9PT1TeW1ib2wuaXRlcmF0b3ImJkssaWU9eD09PSJrZXlzIiYmSyx4ZT1kZVt4XSguLi5zZSksbnQ9aGU/dW86UT90bzpVcjtyZXR1cm4hUSYmVmUobXQsIml0ZXJhdGUiLGllP1duOl9uKSx7bmV4dCgpe2xldHt2YWx1ZTpZdCxkb25lOlRufT14ZS5uZXh0KCk7cmV0dXJuIFRuP3t2YWx1ZTpZdCxkb25lOlRufTp7dmFsdWU6ej9bbnQoWXRbMF0pLG50KFl0WzFdKV06bnQoWXQpLGRvbmU6VG59fSxbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzfX19fWZ1bmN0aW9uIEluKHgpe3JldHVybiBmdW5jdGlvbiguLi5RKXtyZXR1cm4geD09PSJkZWxldGUiPyExOnRoaXN9fWZ1bmN0aW9uIFVuKCl7bGV0IHg9e2dldChtdCl7cmV0dXJuIGhyKHRoaXMsbXQpfSxnZXQgc2l6ZSgpe3JldHVybiBHbih0aGlzKX0saGFzOmZvLGFkZDpYaSxzZXQ6UG8sZGVsZXRlOlFpLGNsZWFyOmJpLGZvckVhY2g6Sm4oITEsITEpfSxRPXtnZXQobXQpe3JldHVybiBocih0aGlzLG10LCExLCEwKX0sZ2V0IHNpemUoKXtyZXR1cm4gR24odGhpcyl9LGhhczpmbyxhZGQ6WGksc2V0OlBvLGRlbGV0ZTpRaSxjbGVhcjpiaSxmb3JFYWNoOkpuKCExLCEwKX0saGU9e2dldChtdCl7cmV0dXJuIGhyKHRoaXMsbXQsITApfSxnZXQgc2l6ZSgpe3JldHVybiBHbih0aGlzLCEwKX0saGFzKG10KXtyZXR1cm4gZm8uY2FsbCh0aGlzLG10LCEwKX0sYWRkOkluKCJhZGQiKSxzZXQ6SW4oInNldCIpLGRlbGV0ZTpJbigiZGVsZXRlIiksY2xlYXI6SW4oImNsZWFyIiksZm9yRWFjaDpKbighMCwhMSl9LHNlPXtnZXQobXQpe3JldHVybiBocih0aGlzLG10LCEwLCEwKX0sZ2V0IHNpemUoKXtyZXR1cm4gR24odGhpcywhMCl9LGhhcyhtdCl7cmV0dXJuIGZvLmNhbGwodGhpcyxtdCwhMCl9LGFkZDpJbigiYWRkIiksc2V0OkluKCJzZXQiKSxkZWxldGU6SW4oImRlbGV0ZSIpLGNsZWFyOkluKCJjbGVhciIpLGZvckVhY2g6Sm4oITAsITApfTtyZXR1cm5bImtleXMiLCJ2YWx1ZXMiLCJlbnRyaWVzIixTeW1ib2wuaXRlcmF0b3JdLmZvckVhY2gobXQ9Pnt4W210XT1EcihtdCwhMSwhMSksaGVbbXRdPURyKG10LCEwLCExKSxRW210XT1EcihtdCwhMSwhMCksc2VbbXRdPURyKG10LCEwLCEwKX0pLFt4LGhlLFEsc2VdfWxldFtxcixJbyxvaSxLcl09VW4oKTtmdW5jdGlvbiBzcih4LFEpe2xldCBoZT1RP3g/S3I6b2k6eD9JbzpxcjtyZXR1cm4oc2UsZGUsbXQpPT5kZT09PSJfX3ZfaXNSZWFjdGl2ZSI/IXg6ZGU9PT0iX192X2lzUmVhZG9ubHkiP3g6ZGU9PT0iX192X3JhdyI/c2U6UmVmbGVjdC5nZXQody5oYXNPd24oaGUsZGUpJiZkZSBpbiBzZT9oZTpzZSxkZSxtdCl9bGV0IFZpPXtnZXQ6c3IoITEsITEpfSxlbz17Z2V0OnNyKCExLCEwKX0sRnI9e2dldDpzcighMCwhMSl9LEVpPXtnZXQ6c3IoITAsITApfTtmdW5jdGlvbiBncih4LFEsaGUpe2xldCBzZT1sbihoZSk7aWYoc2UhPT1oZSYmUS5jYWxsKHgsc2UpKXtsZXQgZGU9dy50b1Jhd1R5cGUoeCk7Y29uc29sZS53YXJuKGBSZWFjdGl2ZSAke2RlfSBjb250YWlucyBib3RoIHRoZSByYXcgYW5kIHJlYWN0aXZlIHZlcnNpb25zIG9mIHRoZSBzYW1lIG9iamVjdCR7ZGU9PT0iTWFwIj8iIGFzIGtleXMiOiIifSwgd2hpY2ggY2FuIGxlYWQgdG8gaW5jb25zaXN0ZW5jaWVzLiBBdm9pZCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiB0aGUgcmF3IGFuZCByZWFjdGl2ZSB2ZXJzaW9ucyBvZiBhbiBvYmplY3QgYW5kIG9ubHkgdXNlIHRoZSByZWFjdGl2ZSB2ZXJzaW9uIGlmIHBvc3NpYmxlLmApfX1sZXQgZ249bmV3IFdlYWtNYXAsSnI9bmV3IFdlYWtNYXAsa3I9bmV3IFdlYWtNYXAsTXQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gT2UoeCl7c3dpdGNoKHgpe2Nhc2UiT2JqZWN0IjpjYXNlIkFycmF5IjpyZXR1cm4gMTtjYXNlIk1hcCI6Y2FzZSJTZXQiOmNhc2UiV2Vha01hcCI6Y2FzZSJXZWFrU2V0IjpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBacih4KXtyZXR1cm4geC5fX3Zfc2tpcHx8IU9iamVjdC5pc0V4dGVuc2libGUoeCk/MDpPZSh3LnRvUmF3VHlwZSh4KSl9ZnVuY3Rpb24gSWkoeCl7cmV0dXJuIFhyKHgpP3g6cHIoeCwhMSxUbyxWaSxnbil9ZnVuY3Rpb24gYWkoeCl7cmV0dXJuIHByKHgsITEsaWksZW8sSnIpfWZ1bmN0aW9uIFZyKHgpe3JldHVybiBwcih4LCEwLFppLEZyLGtyKX1mdW5jdGlvbiBOaSh4KXtyZXR1cm4gcHIoeCwhMCxxbyxFaSxNdCl9ZnVuY3Rpb24gcHIoeCxRLGhlLHNlLGRlKXtpZighdy5pc09iamVjdCh4KXx8eC5fX3ZfcmF3JiYhKFEmJnguX192X2lzUmVhY3RpdmUpKXJldHVybiB4O2xldCBtdD1kZS5nZXQoeCk7aWYobXQpcmV0dXJuIG10O2xldCBLPVpyKHgpO2lmKEs9PT0wKXJldHVybiB4O2xldCB6PW5ldyBQcm94eSh4LEs9PT0yP3NlOmhlKTtyZXR1cm4gZGUuc2V0KHgseiksen1mdW5jdGlvbiAkcih4KXtyZXR1cm4gWHIoeCk/JHIoeC5fX3ZfcmF3KTohISh4JiZ4Ll9fdl9pc1JlYWN0aXZlKX1mdW5jdGlvbiBYcih4KXtyZXR1cm4hISh4JiZ4Ll9fdl9pc1JlYWRvbmx5KX1mdW5jdGlvbiBQcih4KXtyZXR1cm4hISh4JiZ4Ll9fdl9pc1NoYWxsb3cpfWZ1bmN0aW9uIGtpKHgpe3JldHVybiAkcih4KXx8WHIoeCl9ZnVuY3Rpb24gbG4oeCl7bGV0IFE9eCYmeC5fX3ZfcmF3O3JldHVybiBRP2xuKFEpOnh9ZnVuY3Rpb24gJGkoeCl7cmV0dXJuIHcuZGVmKHgsIl9fdl9za2lwIiwhMCkseH1sZXQgVXI9eD0+dy5pc09iamVjdCh4KT9JaSh4KTp4LHRvPXg9PncuaXNPYmplY3QoeCk/VnIoeCk6eDtmdW5jdGlvbiBibih4KXtDbiYmc24mJih4PWxuKHgpLG90KHguZGVwfHwoeC5kZXA9ZW4oKSkpKX1mdW5jdGlvbiBIcih4LFEpe3g9bG4oeCk7bGV0IGhlPXguZGVwO2hlJiZ0bihoZSl9ZnVuY3Rpb24gaXIoeCl7cmV0dXJuISEoeCYmeC5fX3ZfaXNSZWY9PT0hMCl9ZnVuY3Rpb24geWkoeCl7cmV0dXJuIHZyKHgsITEpfWZ1bmN0aW9uIFJpKHgpe3JldHVybiB2cih4LCEwKX1mdW5jdGlvbiB2cih4LFEpe3JldHVybiBpcih4KT94Om5ldyBRcih4LFEpfWNsYXNzIFFye2NvbnN0cnVjdG9yKFEsaGUpe3RoaXMuX192X2lzU2hhbGxvdz1oZSx0aGlzLmRlcD12b2lkIDAsdGhpcy5fX3ZfaXNSZWY9ITAsdGhpcy5fcmF3VmFsdWU9aGU/UTpsbihRKSx0aGlzLl92YWx1ZT1oZT9ROlVyKFEpfWdldCB2YWx1ZSgpe3JldHVybiBibih0aGlzKSx0aGlzLl92YWx1ZX1zZXQgdmFsdWUoUSl7bGV0IGhlPXRoaXMuX192X2lzU2hhbGxvd3x8UHIoUSl8fFhyKFEpO1E9aGU/UTpsbihRKSx3Lmhhc0NoYW5nZWQoUSx0aGlzLl9yYXdWYWx1ZSkmJih0aGlzLl9yYXdWYWx1ZT1RLHRoaXMuX3ZhbHVlPWhlP1E6VXIoUSksSHIodGhpcyxRKSl9fWZ1bmN0aW9uIFpuKHgpe0hyKHgsdm9pZCAwKX1mdW5jdGlvbiBYbih4KXtyZXR1cm4gaXIoeCk/eC52YWx1ZTp4fWxldCBIbj17Z2V0Oih4LFEsaGUpPT5YbihSZWZsZWN0LmdldCh4LFEsaGUpKSxzZXQ6KHgsUSxoZSxzZSk9PntsZXQgZGU9eFtRXTtyZXR1cm4gaXIoZGUpJiYhaXIoaGUpPyhkZS52YWx1ZT1oZSwhMCk6UmVmbGVjdC5zZXQoeCxRLGhlLHNlKX19O2Z1bmN0aW9uIFFuKHgpe3JldHVybiAkcih4KT94Om5ldyBQcm94eSh4LEhuKX1jbGFzcyBscntjb25zdHJ1Y3RvcihRKXt0aGlzLmRlcD12b2lkIDAsdGhpcy5fX3ZfaXNSZWY9ITA7bGV0e2dldDpoZSxzZXQ6c2V9PVEoKCk9PmJuKHRoaXMpLCgpPT5Icih0aGlzKSk7dGhpcy5fZ2V0PWhlLHRoaXMuX3NldD1zZX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fZ2V0KCl9c2V0IHZhbHVlKFEpe3RoaXMuX3NldChRKX19ZnVuY3Rpb24gaG8oeCl7cmV0dXJuIG5ldyBscih4KX1mdW5jdGlvbiBnbyh4KXtsZXQgUT13LmlzQXJyYXkoeCk/bmV3IEFycmF5KHgubGVuZ3RoKTp7fTtmb3IobGV0IGhlIGluIHgpUVtoZV09bm8oeCxoZSk7cmV0dXJuIFF9Y2xhc3MgTm97Y29uc3RydWN0b3IoUSxoZSxzZSl7dGhpcy5fb2JqZWN0PVEsdGhpcy5fa2V5PWhlLHRoaXMuX2RlZmF1bHRWYWx1ZT1zZSx0aGlzLl9fdl9pc1JlZj0hMH1nZXQgdmFsdWUoKXtsZXQgUT10aGlzLl9vYmplY3RbdGhpcy5fa2V5XTtyZXR1cm4gUT09PXZvaWQgMD90aGlzLl9kZWZhdWx0VmFsdWU6UX1zZXQgdmFsdWUoUSl7dGhpcy5fb2JqZWN0W3RoaXMuX2tleV09UX1nZXQgZGVwKCl7cmV0dXJuIEp0KGxuKHRoaXMuX29iamVjdCksdGhpcy5fa2V5KX19ZnVuY3Rpb24gbm8oeCxRLGhlKXtsZXQgc2U9eFtRXTtyZXR1cm4gaXIoc2UpP3NlOm5ldyBObyh4LFEsaGUpfXZhciBrbztjbGFzcyBqcntjb25zdHJ1Y3RvcihRLGhlLHNlLGRlKXt0aGlzLl9zZXR0ZXI9aGUsdGhpcy5kZXA9dm9pZCAwLHRoaXMuX192X2lzUmVmPSEwLHRoaXNba29dPSExLHRoaXMuX2RpcnR5PSEwLHRoaXMuZWZmZWN0PW5ldyBwaShRLCgpPT57dGhpcy5fZGlydHl8fCh0aGlzLl9kaXJ0eT0hMCxIcih0aGlzKSl9KSx0aGlzLmVmZmVjdC5jb21wdXRlZD10aGlzLHRoaXMuZWZmZWN0LmFjdGl2ZT10aGlzLl9jYWNoZWFibGU9IWRlLHRoaXMuX192X2lzUmVhZG9ubHk9c2V9Z2V0IHZhbHVlKCl7bGV0IFE9bG4odGhpcyk7cmV0dXJuIGJuKFEpLChRLl9kaXJ0eXx8IVEuX2NhY2hlYWJsZSkmJihRLl9kaXJ0eT0hMSxRLl92YWx1ZT1RLmVmZmVjdC5ydW4oKSksUS5fdmFsdWV9c2V0IHZhbHVlKFEpe3RoaXMuX3NldHRlcihRKX19a289Il9fdl9pc1JlYWRvbmx5IjtmdW5jdGlvbiBScih4LFEsaGU9ITEpe2xldCBzZSxkZSxtdD13LmlzRnVuY3Rpb24oeCk7cmV0dXJuIG10PyhzZT14LGRlPXcuTk9PUCk6KHNlPXguZ2V0LGRlPXguc2V0KSxuZXcganIoc2UsZGUsbXR8fCFkZSxoZSl9dmFyIHJvO2xldCBLbz1Qcm9taXNlLnJlc29sdmUoKSx4aT1bXSxVaT0hMSxSbz14PT57eGkucHVzaCh4KSxVaXx8KFVpPSEwLEtvLnRoZW4oQmkpKX0sQmk9KCk9Pntmb3IobGV0IHg9MDt4PHhpLmxlbmd0aDt4KyspeGlbeF0oKTt4aS5sZW5ndGg9MCxVaT0hMX07Y2xhc3MgSGl7Y29uc3RydWN0b3IoUSl7dGhpcy5kZXA9dm9pZCAwLHRoaXMuX2RpcnR5PSEwLHRoaXMuX192X2lzUmVmPSEwLHRoaXNbcm9dPSEwO2xldCBoZSxzZT0hMSxkZT0hMTt0aGlzLmVmZmVjdD1uZXcgcGkoUSxtdD0+e2lmKHRoaXMuZGVwKXtpZihtdCloZT10aGlzLl92YWx1ZSxzZT0hMDtlbHNlIGlmKCFkZSl7bGV0IEs9c2U/aGU6dGhpcy5fdmFsdWU7ZGU9ITAsc2U9ITEsUm8oKCk9Pnt0aGlzLmVmZmVjdC5hY3RpdmUmJnRoaXMuX2dldCgpIT09SyYmSHIodGhpcyksZGU9ITF9KX1mb3IobGV0IEsgb2YgdGhpcy5kZXApSy5jb21wdXRlZCBpbnN0YW5jZW9mIEhpJiZLLnNjaGVkdWxlcighMCl9dGhpcy5fZGlydHk9ITB9KSx0aGlzLmVmZmVjdC5jb21wdXRlZD10aGlzfV9nZXQoKXtyZXR1cm4gdGhpcy5fZGlydHk/KHRoaXMuX2RpcnR5PSExLHRoaXMuX3ZhbHVlPXRoaXMuZWZmZWN0LnJ1bigpKTp0aGlzLl92YWx1ZX1nZXQgdmFsdWUoKXtyZXR1cm4gYm4odGhpcyksbG4odGhpcykuX2dldCgpfX1ybz0iX192X2lzUmVhZG9ubHkiO2Z1bmN0aW9uIHhvKHgpe3JldHVybiBuZXcgSGkoeCl9cmV0dXJuIHAuRWZmZWN0U2NvcGU9ZCxwLklURVJBVEVfS0VZPV9uLHAuUmVhY3RpdmVFZmZlY3Q9cGkscC5jb21wdXRlZD1ScixwLmN1c3RvbVJlZj1obyxwLmRlZmVycmVkQ29tcHV0ZWQ9eG8scC5lZmZlY3Q9YXIscC5lZmZlY3RTY29wZT1FLHAuZW5hYmxlVHJhY2tpbmc9bWkscC5nZXRDdXJyZW50U2NvcGU9V2UscC5pc1Byb3h5PWtpLHAuaXNSZWFjdGl2ZT0kcixwLmlzUmVhZG9ubHk9WHIscC5pc1JlZj1pcixwLmlzU2hhbGxvdz1QcixwLm1hcmtSYXc9JGkscC5vblNjb3BlRGlzcG9zZT1MdCxwLnBhdXNlVHJhY2tpbmc9Q3IscC5wcm94eVJlZnM9UW4scC5yZWFjdGl2ZT1JaSxwLnJlYWRvbmx5PVZyLHAucmVmPXlpLHAucmVzZXRUcmFja2luZz1yaSxwLnNoYWxsb3dSZWFjdGl2ZT1haSxwLnNoYWxsb3dSZWFkb25seT1OaSxwLnNoYWxsb3dSZWY9UmkscC5zdG9wPVNyLHAudG9SYXc9bG4scC50b1JlZj1ubyxwLnRvUmVmcz1nbyxwLnRyYWNrPVZlLHAudHJpZ2dlcj1idCxwLnRyaWdnZXJSZWY9Wm4scC51bnJlZj1YbixPYmplY3QuZGVmaW5lUHJvcGVydHkocCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscH0oe30sZyk7cmV0dXJuIHN9ZnVuY3Rpb24gVXAoZyl7dmFyIHM9ZnVuY3Rpb24ocCl7InVzZSBzdHJpY3QiO2xldCB3PWAKYCxrPTQ0LFM9NTAsZD01MCxFPVsiJSIsIiUiXSxCPSIjMDA3YWZmIixXZT0vXihbYS16LV0rOik/XC9cLy9pLEx0PS9eZGF0YTouKiwuKi8sZW49IldFQl9JTlZPS0VfQVBQU0VSVklDRSIseHQ9Ind4czovLyIsST0ianNvbjovLyIsU3Q9Ind4c01vZHVsZXMiLFBuPSJyZW5kZXJqc01vZHVsZXMiLHN0PSJvblNob3ciLFc9Im9uSGlkZSIsWj0ib25MYXVuY2giLGZuPSJvbkVycm9yIixzbj0ib25UaGVtZUNoYW5nZSIsX249Im9mZlRoZW1lQ2hhbmdlIixXbj0ib25LZXlib2FyZEhlaWdodENoYW5nZSIscGk9Im9uUGFnZU5vdEZvdW5kIix2aT0ib25VbmhhbmRsZWRSZWplY3Rpb24iLGFyPSJvbkxvYWQiLFNyPSJvblJlYWR5IixDbj0ib25VbmxvYWQiLHdyPSJvbkluaXQiLENyPSJvblNhdmVFeGl0U3RhdGUiLG1pPSJvblJlc2l6ZSIscmk9Im9uQmFja1ByZXNzIixWZT0ib25QYWdlU2Nyb2xsIixvdD0ib25UYWJJdGVtVGFwIixidD0ib25SZWFjaEJvdHRvbSIsdG49Im9uUHVsbERvd25SZWZyZXNoIixTbj0ib25TaGFyZVRpbWVsaW5lIixKdD0ib25BZGRUb0Zhdm9yaXRlcyIscnI9Im9uU2hhcmVBcHBNZXNzYWdlIixBcj0ib25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwIixPcj0ib25OYXZpZ2F0aW9uQmFyU2VhcmNoSW5wdXRDbGlja2VkIixPbj0ib25OYXZpZ2F0aW9uQmFyU2VhcmNoSW5wdXRDaGFuZ2VkIixkbj0ib25OYXZpZ2F0aW9uQmFyU2VhcmNoSW5wdXRDb25maXJtZWQiLFRyPSJvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dEZvY3VzQ2hhbmdlZCIsX2k9Im9uQXBwRW50ZXJGb3JlZ3JvdW5kIixDbz0ib25BcHBFbnRlckJhY2tncm91bmQiLGNhPSJvbld4c0ludm9rZUNhbGxNZXRob2QiO2Z1bmN0aW9uIEZpKEspe3JldHVybiEhSy5hcHBDb250ZXh0fWZ1bmN0aW9uIFlvKEspe3JldHVybiBLJiYoRmkoSyk/Sy5wcm94eTpLKX1mdW5jdGlvbiBBbyhLKXtyZXR1cm4gSy5ub2RlVHlwZT09PTF9ZnVuY3Rpb24gSmkoSyx6PSExKXtsZXR7dm5vZGU6aWV9PUs7aWYoQW8oaWUuZWwpKXJldHVybiB6P2llLmVsP1tpZS5lbF06W106aWUuZWw7bGV0e3N1YlRyZWU6eGV9PUs7aWYoeGUuc2hhcGVGbGFnJjE2KXtsZXQgbnQ9eGUuY2hpbGRyZW4uZmlsdGVyKFl0PT5ZdC5lbCYmQW8oWXQuZWwpKTtpZihudC5sZW5ndGg+MClyZXR1cm4gej9udC5tYXAoWXQ9Pll0LmVsKTpudFswXS5lbH1yZXR1cm4gej9pZS5lbD9baWUuZWxdOltdOmllLmVsfWxldCBNcj0wO2Z1bmN0aW9uIHVhKEssLi4ueil7bGV0IGllPURhdGUubm93KCkseGU9TXI/aWUtTXI6MDtyZXR1cm4gTXI9aWUsYFske2llfV1bJHt4ZX1tc11bJHtLfV1cdUZGMUEke3oubWFwKG50PT5KU09OLnN0cmluZ2lmeShudCkpLmpvaW4oIiAiKX1gfWZ1bmN0aW9uIE9vKEspe2xldCB6PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGllPT56W2llXXx8KHpbaWVdPUsoaWUpKX1mdW5jdGlvbiBUbyhLKXtyZXR1cm4gT28oSyl9ZnVuY3Rpb24gWmkoSz0iIil7cmV0dXJuKCIiK0spLnJlcGxhY2UoL1teXHgwMC1ceGZmXS9nLCIqKiIpLmxlbmd0aH1mdW5jdGlvbiBpaShLKXtyZXR1cm4gSy5pbmRleE9mKCIvIik9PT0wfWZ1bmN0aW9uIHFvKEspe3JldHVybiBpaShLKT9LOiIvIitLfWZ1bmN0aW9uIHVvKEspe3JldHVybiBpaShLKT9LLnNsaWNlKDEpOkt9bGV0IE5uPShLLHopPT57bGV0IGllO2ZvcihsZXQgeGU9MDt4ZTxLLmxlbmd0aDt4ZSsrKWllPUtbeGVdKHopO3JldHVybiBpZX07ZnVuY3Rpb24gaHIoSyx6PW51bGwpe2xldCBpZTtyZXR1cm4oLi4ueGUpPT4oSyYmKGllPUsuYXBwbHkoeix4ZSksSz1udWxsKSxpZSl9ZnVuY3Rpb24gZm8oSyx6KXtLPUt8fHt9LHAuaXNTdHJpbmcoeikmJih6PXtlcnJNc2c6en0pLC86b2skLy50ZXN0KHouZXJyTXNnKT9wLmlzRnVuY3Rpb24oSy5zdWNjZXNzKSYmSy5zdWNjZXNzKHopOnAuaXNGdW5jdGlvbihLLmZhaWwpJiZLLmZhaWwoeikscC5pc0Z1bmN0aW9uKEsuY29tcGxldGUpJiZLLmNvbXBsZXRlKHopfWZ1bmN0aW9uIEduKEspe2xldCB6PXt9O3JldHVybiBwLmlzUGxhaW5PYmplY3QoSykmJk9iamVjdC5rZXlzKEspLnNvcnQoKS5mb3JFYWNoKGllPT57bGV0IHhlPWllO3pbeGVdPUtbeGVdfSksT2JqZWN0LmtleXMoeik/ejpLfWxldCBYaT1lbmNvZGVVUklDb21wb25lbnQ7ZnVuY3Rpb24gUG8oSyx6PVhpKXtsZXQgaWU9Sz9PYmplY3Qua2V5cyhLKS5tYXAoeGU9PntsZXQgbnQ9S1t4ZV07cmV0dXJuIHR5cGVvZiBudD09PXZvaWQgMHx8bnQ9PT1udWxsP250PSIiOnAuaXNQbGFpbk9iamVjdChudCkmJihudD1KU09OLnN0cmluZ2lmeShudCkpLHooeGUpKyI9Iit6KG50KX0pLmZpbHRlcih4ZT0+eGUubGVuZ3RoPjApLmpvaW4oIiYiKTpudWxsO3JldHVybiBpZT9gPyR7aWV9YDoiIn1mdW5jdGlvbiBRaShLKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCgiIitLKX1jYXRjaCh6KXt9cmV0dXJuIiIrS31sZXQgYmk9L1wrL2c7ZnVuY3Rpb24gSm4oSyl7bGV0IHo9e307aWYoSz09PSIifHxLPT09Ij8iKXJldHVybiB6O2xldCB4ZT0oS1swXT09PSI/Ij9LLnNsaWNlKDEpOkspLnNwbGl0KCImIik7Zm9yKGxldCBudD0wO250PHhlLmxlbmd0aDsrK250KXtsZXQgWXQ9eGVbbnRdLnJlcGxhY2UoYmksIiAiKSxUbj1ZdC5pbmRleE9mKCI9Iiksam49UWkoVG48MD9ZdDpZdC5zbGljZSgwLFRuKSkseHI9VG48MD9udWxsOlFpKFl0LnNsaWNlKFRuKzEpKTtpZihqbiBpbiB6KXtsZXQgbXI9eltqbl07cC5pc0FycmF5KG1yKXx8KG1yPXpbam5dPVttcl0pLG1yLnB1c2goeHIpfWVsc2Ugeltqbl09eHJ9cmV0dXJuIHp9ZnVuY3Rpb24gRHIoSyl7bGV0W3osaWVdPUsuc3BsaXQoIj8iLDIpO3JldHVybntwYXRoOnoscXVlcnk6Sm4oaWV8fCIiKX19ZnVuY3Rpb24gSW4oSyl7bGV0IHo9e307cmV0dXJuIEsmJk9iamVjdC5rZXlzKEspLmZvckVhY2goaWU9PntpZS5pbmRleE9mKCJkYXRhLSIpPT09MCYmKHpbaWUucmVwbGFjZSgiZGF0YS0iLCIiKV09S1tpZV0pfSksen1jbGFzcyBVbiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHope3N1cGVyKHopO3RoaXMubmFtZT0iRE9NRXhjZXB0aW9uIn19ZnVuY3Rpb24gcXIoSyx6KXtyZXR1cm4geiYmKHouY2FwdHVyZSYmKEsrPSJDYXB0dXJlIiksei5vbmNlJiYoSys9Ik9uY2UiKSx6LnBhc3NpdmUmJihLKz0iUGFzc2l2ZSIpKSxgb24ke3AuY2FwaXRhbGl6ZShwLmNhbWVsaXplKEspKX1gfWNsYXNzIElve2NvbnN0cnVjdG9yKHosaWUpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpLHRoaXMuX3N0b3A9ITEsdGhpcy5fZW5kPSExLHRoaXMudHlwZT16LHRoaXMuYnViYmxlcz0hIWllLmJ1YmJsZXMsdGhpcy5jYW5jZWxhYmxlPSEhaWUuY2FuY2VsYWJsZX1wcmV2ZW50RGVmYXVsdCgpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMH1zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKXt0aGlzLl9lbmQ9dGhpcy5fc3RvcD0hMH1zdG9wUHJvcGFnYXRpb24oKXt0aGlzLl9zdG9wPSEwfX1mdW5jdGlvbiBvaShLKXtpZihLIGluc3RhbmNlb2YgSW8pcmV0dXJuIEs7bGV0W3pdPVZpKEsudHlwZSksaWU9bmV3IElvKHose2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMX0pO3JldHVybiBwLmV4dGVuZChpZSxLKSxpZX1jbGFzcyBLcntjb25zdHJ1Y3Rvcigpe3RoaXMubGlzdGVuZXJzPU9iamVjdC5jcmVhdGUobnVsbCl9ZGlzcGF0Y2hFdmVudCh6KXtsZXQgaWU9dGhpcy5saXN0ZW5lcnNbei50eXBlXTtpZighaWUpcmV0dXJuITE7bGV0IHhlPW9pKHopLG50PWllLmxlbmd0aDtmb3IobGV0IFl0PTA7WXQ8bnQmJihpZVtZdF0uY2FsbCh0aGlzLHhlKSwheGUuX2VuZCk7WXQrKyk7cmV0dXJuIHhlLmNhbmNlbGFibGUmJnhlLmRlZmF1bHRQcmV2ZW50ZWR9YWRkRXZlbnRMaXN0ZW5lcih6LGllLHhlKXt6PXFyKHoseGUpLCh0aGlzLmxpc3RlbmVyc1t6XXx8KHRoaXMubGlzdGVuZXJzW3pdPVtdKSkucHVzaChpZSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcih6LGllLHhlKXt6PXFyKHoseGUpO2xldCBudD10aGlzLmxpc3RlbmVyc1t6XTtpZighbnQpcmV0dXJuO2xldCBZdD1udC5pbmRleE9mKGllKTtZdD4tMSYmbnQuc3BsaWNlKFl0LDEpfX1sZXQgc3I9Lyg/Ok9uY2V8UGFzc2l2ZXxDYXB0dXJlKSQvO2Z1bmN0aW9uIFZpKEspe2xldCB6O2lmKHNyLnRlc3QoSykpe3o9e307bGV0IGllO2Zvcig7aWU9Sy5tYXRjaChzcik7KUs9Sy5zbGljZSgwLEsubGVuZ3RoLWllWzBdLmxlbmd0aCkseltpZVswXS50b0xvd2VyQ2FzZSgpXT0hMH1yZXR1cm5bcC5oeXBoZW5hdGUoSy5zbGljZSgyKSksel19bGV0IGVvPSgoKT0+KHtzdG9wOjEscHJldmVudDoxPDwxLHNlbGY6MTw8Mn0pKSgpO2Z1bmN0aW9uIEZyKEspe2xldCB6PTA7cmV0dXJuIEsuaW5jbHVkZXMoInN0b3AiKSYmKHp8PWVvLnN0b3ApLEsuaW5jbHVkZXMoInByZXZlbnQiKSYmKHp8PWVvLnByZXZlbnQpLEsuaW5jbHVkZXMoInNlbGYiKSYmKHp8PWVvLnNlbGYpLHp9bGV0IEVpPTAsZ3I9MSxnbj0zLEpyPTg7ZnVuY3Rpb24ga3IoSyx6KXtsZXR7cGFyZW50Tm9kZTppZX09SztpZighaWUpcmV0dXJuIG51bGw7bGV0e2NoaWxkTm9kZXM6eGV9PWllO3JldHVybiB4ZVt4ZS5pbmRleE9mKEspKyh6PT09Im4iPzE6LTEpXXx8bnVsbH1mdW5jdGlvbiBNdChLKXtsZXR7cGFyZW50Tm9kZTp6fT1LO2lmKHope2xldHtjaGlsZE5vZGVzOmllfT16LHhlPWllLmluZGV4T2YoSyk7eGU+LTEmJihLLnBhcmVudE5vZGU9bnVsbCxpZS5zcGxpY2UoeGUsMSkpfX1mdW5jdGlvbiBPZShLKXshSy5ub2RlSWQmJksucGFnZU5vZGUmJihLLm5vZGVJZD1LLnBhZ2VOb2RlLmdlbklkKCkpfWNsYXNzIFpyIGV4dGVuZHMgS3J7Y29uc3RydWN0b3IoeixpZSx4ZSl7c3VwZXIoKTtpZih0aGlzLnBhZ2VOb2RlPW51bGwsdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5fdGV4dD1udWxsLHhlKXtsZXR7cGFnZU5vZGU6bnR9PXhlO250JiYodGhpcy5wYWdlTm9kZT1udCx0aGlzLm5vZGVJZD1udC5nZW5JZCgpLCFudC5pc1VubW91bnRlZCYmbnQub25DcmVhdGUodGhpcyxpZSkpfXRoaXMubm9kZVR5cGU9eix0aGlzLm5vZGVOYW1lPWllLHRoaXMuY2hpbGROb2Rlcz1bXX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkTm9kZXNbMF18fG51bGx9Z2V0IGxhc3RDaGlsZCgpe2xldHtjaGlsZE5vZGVzOnp9PXRoaXMsaWU9ei5sZW5ndGg7cmV0dXJuIGllP3pbaWUtMV06bnVsbH1nZXQgbmV4dFNpYmxpbmcoKXtyZXR1cm4ga3IodGhpcywibiIpfWdldCBub2RlVmFsdWUoKXtyZXR1cm4gbnVsbH1zZXQgbm9kZVZhbHVlKHope31nZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy5fdGV4dHx8IiJ9c2V0IHRleHRDb250ZW50KHope3RoaXMuX3RleHQ9eix0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmdGhpcy5wYWdlTm9kZS5vblRleHRDb250ZW50KHRoaXMseil9Z2V0IHBhcmVudEVsZW1lbnQoKXtsZXR7cGFyZW50Tm9kZTp6fT10aGlzO3JldHVybiB6JiZ6Lm5vZGVUeXBlPT09Z3I/ejpudWxsfWdldCBwcmV2aW91c1NpYmxpbmcoKXtyZXR1cm4ga3IodGhpcywicCIpfWFwcGVuZENoaWxkKHope3JldHVybiB0aGlzLmluc2VydEJlZm9yZSh6LG51bGwpfWNsb25lTm9kZSh6KXtsZXQgaWU9cC5leHRlbmQoT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykpLHRoaXMpLHthdHRyaWJ1dGVzOnhlfT1pZTtyZXR1cm4geGUmJihpZS5hdHRyaWJ1dGVzPXAuZXh0ZW5kKHt9LHhlKSkseiYmKGllLmNoaWxkTm9kZXM9aWUuY2hpbGROb2Rlcy5tYXAobnQ9Pm50LmNsb25lTm9kZSghMCkpKSxpZX1pbnNlcnRCZWZvcmUoeixpZSl7TXQoeiksei5wYWdlTm9kZT10aGlzLnBhZ2VOb2RlLHoucGFyZW50Tm9kZT10aGlzLE9lKHopO2xldHtjaGlsZE5vZGVzOnhlfT10aGlzO2lmKGllKXtsZXQgbnQ9eGUuaW5kZXhPZihpZSk7aWYobnQ9PT0tMSl0aHJvdyBuZXcgVW4oIkZhaWxlZCB0byBleGVjdXRlICdpbnNlcnRCZWZvcmUnIG9uICdOb2RlJzogVGhlIG5vZGUgYmVmb3JlIHdoaWNoIHRoZSBuZXcgbm9kZSBpcyB0byBiZSBpbnNlcnRlZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIG5vZGUuIik7eGUuc3BsaWNlKG50LDAseil9ZWxzZSB4ZS5wdXNoKHopO3JldHVybiB0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZD90aGlzLnBhZ2VOb2RlLm9uSW5zZXJ0QmVmb3JlKHRoaXMseixpZSk6en1yZW1vdmVDaGlsZCh6KXtsZXR7Y2hpbGROb2RlczppZX09dGhpcyx4ZT1pZS5pbmRleE9mKHopO2lmKHhlPT09LTEpdGhyb3cgbmV3IFVuKCJGYWlsZWQgdG8gZXhlY3V0ZSAncmVtb3ZlQ2hpbGQnIG9uICdOb2RlJzogVGhlIG5vZGUgdG8gYmUgcmVtb3ZlZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIG5vZGUuIik7cmV0dXJuIHoucGFyZW50Tm9kZT1udWxsLGllLnNwbGljZSh4ZSwxKSx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZD90aGlzLnBhZ2VOb2RlLm9uUmVtb3ZlQ2hpbGQoeik6en19bGV0IElpPSJjbGFzcyIsYWk9InN0eWxlIixWcj0iLnZPd25lcklkIixOaT0iLnZSZW5kZXJqcyI7Y2xhc3MgcHIgZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcih6LGllLHhlKXtzdXBlcih6LGllLHhlKTt0aGlzLmF0dHJpYnV0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnN0eWxlPW51bGwsdGhpcy52U2hvdz1udWxsLHRoaXMuX2h0bWw9bnVsbH1nZXQgY2xhc3NOYW1lKCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1tJaV18fCIifXNldCBjbGFzc05hbWUoeil7dGhpcy5zZXRBdHRyaWJ1dGUoSWkseil9Z2V0IGlubmVySFRNTCgpe3JldHVybiIifXNldCBpbm5lckhUTUwoeil7dGhpcy5faHRtbD16fWFkZEV2ZW50TGlzdGVuZXIoeixpZSx4ZSl7c3VwZXIuYWRkRXZlbnRMaXN0ZW5lcih6LGllLHhlKSx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmKGllLnd4c0V2ZW50P3RoaXMucGFnZU5vZGUub25BZGRXeHNFdmVudCh0aGlzLHFyKHoseGUpLGllLnd4c0V2ZW50LEZyKGllLm1vZGlmaWVyc3x8W10pKTp0aGlzLnBhZ2VOb2RlLm9uQWRkRXZlbnQodGhpcyxxcih6LHhlKSxGcihpZS5tb2RpZmllcnN8fFtdKSkpfXJlbW92ZUV2ZW50TGlzdGVuZXIoeixpZSx4ZSl7c3VwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcih6LGllLHhlKSx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmdGhpcy5wYWdlTm9kZS5vblJlbW92ZUV2ZW50KHRoaXMscXIoeix4ZSkpfWdldEF0dHJpYnV0ZSh6KXtyZXR1cm4gej09PWFpP3RoaXMuc3R5bGU6dGhpcy5hdHRyaWJ1dGVzW3pdfXJlbW92ZUF0dHJpYnV0ZSh6KXt6PT1haT90aGlzLnN0eWxlPW51bGw6ZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t6XSx0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmdGhpcy5wYWdlTm9kZS5vblJlbW92ZUF0dHJpYnV0ZSh0aGlzLHopfXNldEF0dHJpYnV0ZSh6LGllKXt6PT09YWk/dGhpcy5zdHlsZT1pZTp0aGlzLmF0dHJpYnV0ZXNbel09aWUsdGhpcy5wYWdlTm9kZSYmIXRoaXMucGFnZU5vZGUuaXNVbm1vdW50ZWQmJnRoaXMucGFnZU5vZGUub25TZXRBdHRyaWJ1dGUodGhpcyx6LGllKX10b0pTT04oe2F0dHI6eixub3JtYWxpemU6aWV9PXt9KXtsZXR7YXR0cmlidXRlczp4ZSxzdHlsZTpudCxsaXN0ZW5lcnM6WXQsX3RleHQ6VG59PXRoaXMsam49e307T2JqZWN0LmtleXMoeGUpLmxlbmd0aCYmKGpuLmE9aWU/aWUoeGUpOnhlKTtsZXQgeHI9T2JqZWN0LmtleXMoWXQpO2lmKHhyLmxlbmd0aCl7bGV0IG1yLHBvPXt9O3hyLmZvckVhY2godm89PntsZXQgSm89WXRbdm9dO2lmKEpvLmxlbmd0aCl7bGV0e3d4c0V2ZW50Om1vLG1vZGlmaWVyczpZbn09Sm9bMF0sQm49RnIoWW58fFtdKTttbz8obXJ8fChtcj17fSksbXJbdm9dPVtpZT9pZShtbyk6bW8sQm5dKTpwb1t2b109Qm59fSksam4uZT1pZT9pZShwbywhMSk6cG8sbXImJihqbi53PWllP2llKG1yLCExKTptcil9cmV0dXJuIG50IT09bnVsbCYmKGpuLnM9aWU/aWUobnQpOm50KSx6fHwoam4uaT10aGlzLm5vZGVJZCxqbi5uPXRoaXMubm9kZU5hbWUpLFRuIT09bnVsbCYmKGpuLnQ9aWU/aWUoVG4pOlRuKSxqbn19Y2xhc3MgJHIgZXh0ZW5kcyBacntjb25zdHJ1Y3Rvcih6LGllKXtzdXBlcihKciwiI2NvbW1lbnQiLGllKTt0aGlzLl90ZXh0PSIifXRvSlNPTih6PXt9KXtyZXR1cm4gei5hdHRyP3t9OntpOnRoaXMubm9kZUlkfX19Y2xhc3MgWHIgZXh0ZW5kcyBwcntjb25zdHJ1Y3Rvcih6LGllKXtzdXBlcihncix6LnRvVXBwZXJDYXNlKCksaWUpO3RoaXMudGFnTmFtZT10aGlzLm5vZGVOYW1lfX1jbGFzcyBQciBleHRlbmRzIFhye2dldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgidmFsdWUiKX1zZXQgdmFsdWUoeil7dGhpcy5zZXRBdHRyaWJ1dGUoInZhbHVlIix6KX19Y2xhc3Mga2kgZXh0ZW5kcyBQcnt9Y2xhc3MgbG4gZXh0ZW5kcyBwcntjb25zdHJ1Y3Rvcih6LGllKXtzdXBlcihnbiwiI3RleHQiLGllKTt0aGlzLl90ZXh0PXp9Z2V0IG5vZGVWYWx1ZSgpe3JldHVybiB0aGlzLl90ZXh0fHwiIn1zZXQgbm9kZVZhbHVlKHope3RoaXMuX3RleHQ9eix0aGlzLnBhZ2VOb2RlJiYhdGhpcy5wYWdlTm9kZS5pc1VubW91bnRlZCYmdGhpcy5wYWdlTm9kZS5vbk5vZGVWYWx1ZSh0aGlzLHopfX1sZXQgJGk9e0FEOlsiZGF0YSJdLCJBRC1EUkFXIjpbImRhdGEiXSwiTElWRS1QTEFZRVIiOlsicGljdHVyZS1pbi1waWN0dXJlLW1vZGUiXSxNQVA6WyJtYXJrZXJzIiwicG9seWxpbmUiLCJjaXJjbGVzIiwiY29udHJvbHMiLCJpbmNsdWRlLXBvaW50cyIsInBvbHlnb25zIl0sUElDS0VSOlsicmFuZ2UiLCJ2YWx1ZSJdLCJQSUNLRVItVklFVyI6WyJ2YWx1ZSJdLCJSSUNILVRFWFQiOlsibm9kZXMiXSxWSURFTzpbImRhbm11LWxpc3QiLCJoZWFkZXIiXSwiV0VCLVZJRVciOlsid2Vidmlldy1zdHlsZXMiXX0sVXI9WyJhbmltYXRpb24iXSx0bz0oSyx6KT0+e2lmKFVyLmluZGV4T2Yoeik+LTEpcmV0dXJuITA7bGV0IGllPSRpW0subm9kZU5hbWVdO3JldHVybiEhKGllJiZpZS5pbmRleE9mKHopPi0xKX0sYm49MSxIcj0yLGlyPTMseWk9NCxSaT01LHZyPTYsUXI9Nyxabj04LFhuPTksSG49MTAsUW49MTIsbHI9MTUsaG89MjA7ZnVuY3Rpb24gZ28oSyx6LHtjbGVhclRpbWVvdXQ6aWUsc2V0VGltZW91dDp4ZX0pe2xldCBudCxZdD1mdW5jdGlvbigpe2llKG50KSxudD14ZSgoKT0+Sy5hcHBseSh0aGlzLGFyZ3VtZW50cykseil9O3JldHVybiBZdC5jYW5jZWw9ZnVuY3Rpb24oKXtpZShudCl9LFl0fWNsYXNzIE5ve2NvbnN0cnVjdG9yKHosaWUpe3RoaXMuaWQ9eix0aGlzLmxpc3RlbmVyPXt9LHRoaXMuZW1pdENhY2hlPVtdLGllJiZPYmplY3Qua2V5cyhpZSkuZm9yRWFjaCh4ZT0+e3RoaXMub24oeGUsaWVbeGVdKX0pfWVtaXQoeiwuLi5pZSl7bGV0IHhlPXRoaXMubGlzdGVuZXJbel07aWYoIXhlKXJldHVybiB0aGlzLmVtaXRDYWNoZS5wdXNoKHtldmVudE5hbWU6eixhcmdzOmllfSk7eGUuZm9yRWFjaChudD0+e250LmZuLmFwcGx5KG50LmZuLGllKX0pLHRoaXMubGlzdGVuZXJbel09eGUuZmlsdGVyKG50PT5udC50eXBlIT09Im9uY2UiKX1vbih6LGllKXt0aGlzLl9hZGRMaXN0ZW5lcih6LCJvbiIsaWUpLHRoaXMuX2NsZWFyQ2FjaGUoeil9b25jZSh6LGllKXt0aGlzLl9hZGRMaXN0ZW5lcih6LCJvbmNlIixpZSksdGhpcy5fY2xlYXJDYWNoZSh6KX1vZmYoeixpZSl7bGV0IHhlPXRoaXMubGlzdGVuZXJbel07aWYoISF4ZSlpZihpZSlmb3IobGV0IG50PTA7bnQ8eGUubGVuZ3RoOyl4ZVtudF0uZm49PT1pZSYmKHhlLnNwbGljZShudCwxKSxudC0tKSxudCsrO2Vsc2UgZGVsZXRlIHRoaXMubGlzdGVuZXJbel19X2NsZWFyQ2FjaGUoeil7Zm9yKGxldCBpZT0wO2llPHRoaXMuZW1pdENhY2hlLmxlbmd0aDtpZSsrKXtsZXQgeGU9dGhpcy5lbWl0Q2FjaGVbaWVdLG50PXo/eGUuZXZlbnROYW1lPT09ej96Om51bGw6eGUuZXZlbnROYW1lO2lmKCFudCljb250aW51ZTtpZih0eXBlb2YgdGhpcy5lbWl0LmFwcGx5KHRoaXMsW250LC4uLnhlLmFyZ3NdKT09Im51bWJlciIpe3RoaXMuZW1pdENhY2hlLnBvcCgpO2NvbnRpbnVlfXRoaXMuZW1pdENhY2hlLnNwbGljZShpZSwxKSxpZS0tfX1fYWRkTGlzdGVuZXIoeixpZSx4ZSl7KHRoaXMubGlzdGVuZXJbel18fCh0aGlzLmxpc3RlbmVyW3pdPVtdKSkucHVzaCh7Zm46eGUsdHlwZTppZX0pfX1sZXQgbm89W3dyLGFyLHN0LFcsQ24scmksVmUsb3QsYnQsdG4sU24scnIsSnQsQ3IsQXIsT3IsT24sZG4sVHJdLGtvPVthcixzdF07ZnVuY3Rpb24ganIoSyl7cmV0dXJuIGtvLmluZGV4T2YoSyk+LTF9ZnVuY3Rpb24gUnIoSyl7cmV0dXJuIG5vLmluZGV4T2YoSyk+LTF9bGV0IHJvPVtzdCxXLFosZm4sc24scGksdmksd3IsYXIsU3IsQ24sbWkscmksVmUsb3QsYnQsdG4sU24sSnQscnIsQ3IsQXIsT3IsT24sZG4sVHJdO2Z1bmN0aW9uIEtvKEsseixpZT0hMCl7cmV0dXJuIGllJiYhcC5pc0Z1bmN0aW9uKHopPyExOnJvLmluZGV4T2YoSyk+LTE/ITA6Sy5pbmRleE9mKCJvbiIpPT09MH1sZXQgeGksVWk9W107ZnVuY3Rpb24gUm8oSyl7aWYoeGkpcmV0dXJuIEsoeGkpO1VpLnB1c2goSyl9ZnVuY3Rpb24gQmkoSyl7eGk9SyxVaS5mb3JFYWNoKHo9PnooSykpfWxldCBIaT1ocigoSyx6KT0+e2lmKHAuaXNGdW5jdGlvbihLLl9jb21wb25lbnQub25FcnJvcikpcmV0dXJuIHooSyl9KSx4bz1mdW5jdGlvbigpe307eG8ucHJvdG90eXBlPXtvbjpmdW5jdGlvbihLLHosaWUpe3ZhciB4ZT10aGlzLmV8fCh0aGlzLmU9e30pO3JldHVybih4ZVtLXXx8KHhlW0tdPVtdKSkucHVzaCh7Zm46eixjdHg6aWV9KSx0aGlzfSxvbmNlOmZ1bmN0aW9uKEsseixpZSl7dmFyIHhlPXRoaXM7ZnVuY3Rpb24gbnQoKXt4ZS5vZmYoSyxudCksei5hcHBseShpZSxhcmd1bWVudHMpfXJldHVybiBudC5fPXosdGhpcy5vbihLLG50LGllKX0sZW1pdDpmdW5jdGlvbihLKXt2YXIgej1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxpZT0oKHRoaXMuZXx8KHRoaXMuZT17fSkpW0tdfHxbXSkuc2xpY2UoKSx4ZT0wLG50PWllLmxlbmd0aDtmb3IoeGU7eGU8bnQ7eGUrKylpZVt4ZV0uZm4uYXBwbHkoaWVbeGVdLmN0eCx6KTtyZXR1cm4gdGhpc30sb2ZmOmZ1bmN0aW9uKEsseil7dmFyIGllPXRoaXMuZXx8KHRoaXMuZT17fSkseGU9aWVbS10sbnQ9W107aWYoeGUmJnopZm9yKHZhciBZdD0wLFRuPXhlLmxlbmd0aDtZdDxUbjtZdCsrKXhlW1l0XS5mbiE9PXomJnhlW1l0XS5mbi5fIT09eiYmbnQucHVzaCh4ZVtZdF0pO3JldHVybiBudC5sZW5ndGg/aWVbS109bnQ6ZGVsZXRlIGllW0tdLHRoaXN9fTt2YXIgeD14bztsZXQgUT17YmxhY2s6InJnYmEoMCwwLDAsMC40KSIsd2hpdGU6InJnYmEoMjU1LDI1NSwyNTUsMC40KSJ9O2Z1bmN0aW9uIGhlKEspe3JldHVybiBLJiZLIGluIFE/UVtLXTpLfWZ1bmN0aW9uIHNlKEspe3JldHVybiBLPT09ImJsYWNrIj8iIzAwMDAwMCI6IiNmZmZmZmYifWZ1bmN0aW9uIGRlKEssej17fSxpZT0ibGlnaHQiKXtsZXQgeGU9eltpZV0sbnQ9e307cmV0dXJuIHhlPyhPYmplY3Qua2V5cyhLKS5mb3JFYWNoKFl0PT57bGV0IFRuPUtbWXRdO250W1l0XT0oKCk9PntpZihwLmlzUGxhaW5PYmplY3QoVG4pKXJldHVybiBkZShUbix6LGllKTtpZihwLmlzQXJyYXkoVG4pKXJldHVybiBUbi5tYXAoam49PnAuaXNQbGFpbk9iamVjdChqbik/ZGUoam4seixpZSk6am4pO2lmKHAuaXNTdHJpbmcoVG4pJiZUbi5zdGFydHNXaXRoKCJAIikpe2xldCBqbj1Ubi5yZXBsYWNlKCJAIiwiIikseHI9eGVbam5dfHxUbjtzd2l0Y2goWXQpe2Nhc2UidGl0bGVDb2xvciI6eHI9c2UoeHIpO2JyZWFrO2Nhc2UiYm9yZGVyU3R5bGUiOnhyPWhlKHhyKTticmVha31yZXR1cm4geHJ9cmV0dXJuIFRufSkoKX0pLG50KTpLfXZhciBtdD17aW52b2tlQXJyYXlGbnM6Tm4saXNVbmlMaWZlY3ljbGVIb29rOktvLE9OX0xPQUQ6YXIsT05fU0hPVzpzdCxMSU5FRkVFRDp3LFJFTkRFUkpTX01PRFVMRVM6UG4sZm9ybWF0TG9nOnVhLFdYU19QUk9UT0NPTDp4dCxXWFNfTU9EVUxFUzpTdCxVbmlMaWZlY3ljbGVIb29rczpybyxPTl9FUlJPUjpmbixpbnZva2VDcmVhdGVFcnJvckhhbmRsZXI6SGksaW52b2tlQ3JlYXRlVnVlQXBwSG9vazpCaSxwYXJzZU5WdWVEYXRhc2V0OkluLG9uY2U6aHIsSTE4Tl9KU09OX0RFTElNSVRFUlM6RSxFbWl0dGVyOngsbm9ybWFsaXplU3R5bGVzOmRlLGFkZExlYWRpbmdTbGFzaDpxbyxyZXNvbHZlQ29tcG9uZW50SW5zdGFuY2U6WW8scmVtb3ZlTGVhZGluZ1NsYXNoOnVvLE9OX1JFU0laRTptaSxPTl9BUFBfRU5URVJfRk9SRUdST1VORDpfaSxPTl9BUFBfRU5URVJfQkFDS0dST1VORDpDbyxPTl9ISURFOlcsT05fUEFHRV9TQ1JPTEw6VmUsT05fUkVBQ0hfQk9UVE9NOmJ0LFNDSEVNRV9SRTpXZSxEQVRBX1JFOkx0LGNhY2hlU3RyaW5nRnVuY3Rpb246VG8scGFyc2VRdWVyeTpKbixjYWxsT3B0aW9uczpmbyxPTl9VTkhBTkRMRV9SRUpFQ1RJT046dmksT05fUEFHRV9OT1RfRk9VTkQ6cGksUFJJTUFSWV9DT0xPUjpCLGdldExlbjpaaSxPTl9USEVNRV9DSEFOR0U6c24sVEFCQkFSX0hFSUdIVDpTLE5BVkJBUl9IRUlHSFQ6ayxzb3J0T2JqZWN0OkduLE9GRl9USEVNRV9DSEFOR0U6X24sT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRTpXbixub3JtYWxpemVUYWJCYXJTdHlsZXM6aGUsT05fTkFWSUdBVElPTl9CQVJfQlVUVE9OX1RBUDpBcixzdHJpbmdpZnlRdWVyeTpQbyxkZWJvdW5jZTpnbyxPTl9QVUxMX0RPV05fUkVGUkVTSDp0bixPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ0hBTkdFRDpPbixPTl9OQVZJR0FUSU9OX0JBUl9TRUFSQ0hfSU5QVVRfQ09ORklSTUVEOmRuLE9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DTElDS0VEOk9yLE9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9GT0NVU19DSEFOR0VEOlRyLE9OX0JBQ0tfUFJFU1M6cmksVW5pTm9kZTpacixOT0RFX1RZUEVfUEFHRTpFaSxBQ1RJT05fVFlQRV9QQUdFX0NSRUFURTpibixBQ1RJT05fVFlQRV9QQUdFX0NSRUFURUQ6SHIsQUNUSU9OX1RZUEVfUEFHRV9TQ1JPTEw6bHIsQUNUSU9OX1RZUEVfSU5TRVJUOnlpLEFDVElPTl9UWVBFX0NSRUFURTppcixBQ1RJT05fVFlQRV9SRU1PVkU6UmksQUNUSU9OX1RZUEVfQUREX0VWRU5UOlpuLEFDVElPTl9UWVBFX0FERF9XWFNfRVZFTlQ6UW4sQUNUSU9OX1RZUEVfUkVNT1ZFX0VWRU5UOlhuLEFDVElPTl9UWVBFX1NFVF9BVFRSSUJVVEU6dnIsQUNUSU9OX1RZUEVfUkVNT1ZFX0FUVFJJQlVURTpRcixBQ1RJT05fVFlQRV9TRVRfVEVYVDpIbixPTl9SRUFEWTpTcixPTl9VTkxPQUQ6Q24sRXZlbnRDaGFubmVsOk5vLE9OX1JFQUNIX0JPVFRPTV9ESVNUQU5DRTpkLHBhcnNlVXJsOkRyLG9uQ3JlYXRlVnVlQXBwOlJvLE9OX1RBQl9JVEVNX1RBUDpvdCxPTl9MQVVOQ0g6WixBQ1RJT05fVFlQRV9FVkVOVDpobyxjcmVhdGVVbmlFdmVudDpvaSxPTl9XWFNfSU5WT0tFX0NBTExfTUVUSE9EOmNhLFdFQl9JTlZPS0VfQVBQU0VSVklDRTplbixpc1Jvb3RIb29rOlJyLGlzUm9vdEltbWVkaWF0ZUhvb2s6anIsVW5pSW5wdXRFbGVtZW50OlByLFVuaVRleHRBcmVhRWxlbWVudDpraSxVbmlFbGVtZW50OlhyLFVuaVRleHROb2RlOmxuLFVuaUNvbW1lbnROb2RlOiRyLGZvcmNlUGF0Y2hQcm9wOnRvLEpTT05fUFJPVE9DT0w6SSxyZXNvbHZlT3duZXJFbDpKaSxBVFRSX1ZfT1dORVJfSUQ6VnIsQVRUUl9WX1JFTkRFUkpTOk5pfTtyZXR1cm4gbXR9KGcpO3JldHVybiBzfXZhciByTj0xO2Z1bmN0aW9uIEhwKCl7cmV0dXJuKHJOKyspLnRvU3RyaW5nKCl9dmFyIGhmPWc9PmcmJkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZykpfHxnO2Z1bmN0aW9uIGdjKGcpe2xldCBzPUZhKGcpO3JldHVybiBzLnN1YnN0cmluZyg4LHMubGVuZ3RoLTEpfWZ1bmN0aW9uIGdmKGcpe2lmKCEkbihidG9hKSlyZXR1cm4iIjtsZXQgcz1BcnJheS5wcm90b3R5cGUubWFwLmNhbGwobmV3IFVpbnQ4QXJyYXkoZykscD0+U3RyaW5nLmZyb21DaGFyQ29kZShwKSkuam9pbigiIik7cmV0dXJuIGJ0b2Eocyl9ZnVuY3Rpb24gcGMoZyl7aWYoIWd8fHR5cGVvZiBnIT0ib2JqZWN0IilyZXR1cm4hMDtmb3IobGV0IHMgaW4gZylpZihpbChnLHMpKXJldHVybiExO3JldHVybiEwfXZhciBvdT1bIm9mZiIsImVycm9yIiwid2FybiIsImluZm8iLCJsb2ciLCJkZWJ1ZyJdLGF1PXt9O2Z1bmN0aW9uIGpwKCl7b3UuZm9yRWFjaChnPT57bGV0IHM9b3UuaW5kZXhPZihnKTthdVtnXT17fSxvdS5mb3JFYWNoKHA9PntvdS5pbmRleE9mKHApPD1zJiYoYXVbZ11bcF09ITApfSl9KX1mdW5jdGlvbiBLbihnKXtsZXQgcz1nbG9iYWwuV1hFbnZpcm9ubWVudCYmZ2xvYmFsLldYRW52aXJvbm1lbnQubG9nTGV2ZWx8fCJsb2ciO3JldHVybiBhdVtzXSYmYXVbc11bZ119ZnVuY3Rpb24gRGkoZyl7Z2xvYmFsLm5hdGl2ZUxvZygid3hJbnRlcmFjdGlvbkFuYWx5emVyOiBbanNmbV0iK2csIl9fREVCVUciKX1mdW5jdGlvbiB6cChnLHMscCl7cmV0dXJuYCR7c31AJHtwfSMke2d9YH12YXIgc3U9Y2xhc3N7Y29uc3RydWN0b3Iocyl7dGhpcy5pbnN0YW5jZUlkPVN0cmluZyhzKSx0aGlzLmxhc3RDYWxsYmFja0lkPTAsdGhpcy5jYWxsYmFja3M9e30sdGhpcy5ob29rcz17fX1hZGQocyl7cmV0dXJuIHRoaXMubGFzdENhbGxiYWNrSWQrKyx0aGlzLmNhbGxiYWNrc1t0aGlzLmxhc3RDYWxsYmFja0lkXT1zLHRoaXMubGFzdENhbGxiYWNrSWR9cmVtb3ZlKHMpe2xldCBwPXRoaXMuY2FsbGJhY2tzW3NdO3JldHVybiBkZWxldGUgdGhpcy5jYWxsYmFja3Nbc10scH1yZWdpc3Rlckhvb2socyxwLHcsayl7bGV0IFM9enAocyxwLHcpO3RoaXMuaG9va3NbU10mJmNvbnNvbGUud2FybihgW0pTIEZyYW1ld29ya10gT3ZlcnJpZGUgYW4gZXhpc3RpbmcgY29tcG9uZW50IGhvb2sgIiR7U30iLmApLHRoaXMuaG9va3NbU109a310cmlnZ2VySG9vayhzLHAsdyxrKXtsZXQgUz16cChzLHAsdyksZD10aGlzLmhvb2tzW1NdO2lmKCEkbihkKSlyZXR1cm4gY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gSW52YWxpZCBob29rIGZ1bmN0aW9uIHR5cGUgKCR7dHlwZW9mIGR9KSBvbiAiJHtTfSIuYCksbnVsbDtsZXQgRT1udWxsO3RyeXtFPWQuYXBwbHkobnVsbCxrfHxbXSl9Y2F0Y2goQil7dGhyb3cgY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gRmFpbGVkIHRvIGV4ZWN1dGUgdGhlIGhvb2sgZnVuY3Rpb24gb24gIiR7U30iLmApLEJ9cmV0dXJuIEV9Y29uc3VtZShzLHAsdyl7bGV0IGs9dGhpcy5jYWxsYmFja3Nbc107aWYoKHR5cGVvZiB3PT0idW5kZWZpbmVkInx8dz09PSExKSYmZGVsZXRlIHRoaXMuY2FsbGJhY2tzW3NdLCRuKGspKXRyeXtyZXR1cm4gay5jYWxsKG51bGwscCx3KX1jYXRjaChTKXt0aHJvdyBjb25zb2xlLmVycm9yKGBbSlMgRnJhbWV3b3JrXSBGYWlsZWQgdG8gZXhlY3V0ZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb246CiAke1MudG9TdHJpbmcoKX1gKSxTfXJldHVybiBuZXcgRXJyb3IoYGludmFsaWQgY2FsbGJhY2sgaWQgIiR7c30iYCl9Y2xvc2UoKXt0aGlzLmNhbGxiYWNrcz17fSx0aGlzLmhvb2tzPXt9fX07dmFyIGx1PXt9O2Z1bmN0aW9uIFdwKGcscyl7ZyYmKGx1W2ddPXMpfWZ1bmN0aW9uIHJzKGcpe3JldHVybiBsdVtnXX1mdW5jdGlvbiBHcChnKXtkZWxldGUgbHVbZ119ZnVuY3Rpb24gTHIoZyl7aWYoZyl7bGV0IHM9bHVbZ107aWYocyYmcy50YXNrQ2VudGVyKXJldHVybiBzLnRhc2tDZW50ZXJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaU4oZyl7Zy5jYWxjQ2xhc3NMaXN0JiZnLmNhbGNDbGFzc0xpc3QoKX1mdW5jdGlvbiBwZihnLHMscCl7bGV0e2RvY3VtZW50RWxlbWVudDp3fT1nO2lmKHcucHVyZUNoaWxkcmVuLmxlbmd0aD4wfHxzLnBhcmVudE5vZGUpcmV0dXJuO2xldCBrPXcuY2hpbGRyZW4sUz1wP2suaW5kZXhPZihwKTotMTtTPDA/ay5wdXNoKHMpOmsuc3BsaWNlKFMsMCxzKSxzLm5vZGVUeXBlPT09MT8ocy5yb2xlPT09ImJvZHkiPyhzLmRvY0lkPWcuaWQscy5vd25lckRvY3VtZW50PWcscy5wYXJlbnROb2RlPXcsb2wocyx3KSk6KHMuY2hpbGRyZW4uZm9yRWFjaChkPT57ZC5wYXJlbnROb2RlPXN9KSx2ZihnLHMpLG9sKHMsdyksZGVsZXRlIGcubm9kZU1hcFtzLm5vZGVJZF0pLHcucHVyZUNoaWxkcmVuLnB1c2gocyksb04oZyxzKSk6KHMucGFyZW50Tm9kZT13LGcubm9kZU1hcFtzLnJlZl09cyl9ZnVuY3Rpb24gb04oZyxzKXtsZXQgcD1zLnRvSlNPTigpO2cmJmcudGFza0NlbnRlciYmJG4oZy50YXNrQ2VudGVyLnNlbmQpJiZnLnRhc2tDZW50ZXIuc2VuZCgiZG9tIix7YWN0aW9uOiJjcmVhdGVCb2R5In0sW3BdKX1mdW5jdGlvbiB2ZihnLHMpe3Mucm9sZT0iYm9keSIscy5kZXB0aD0xLGRlbGV0ZSBnLm5vZGVNYXBbcy5ub2RlSWRdLHMucmVmPSJfcm9vdCIsZy5ub2RlTWFwLl9yb290PXMsZy5ib2R5PXN9ZnVuY3Rpb24gb2woZyxzKXtnLnBhcmVudE5vZGU9cyxpTihnKSxzLmRvY0lkJiYoZy5kb2NJZD1zLmRvY0lkLGcub3duZXJEb2N1bWVudD1zLm93bmVyRG9jdW1lbnQsZy5vd25lckRvY3VtZW50Lm5vZGVNYXBbZy5ub2RlSWRdPWcsZy5kZXB0aD1zLmRlcHRoKzEpLGcuY2hpbGRyZW4uZm9yRWFjaChwPT57b2wocCxnKX0pfWZ1bmN0aW9uIG1mKGcpe2Zvcig7Zzspe2lmKGcubm9kZVR5cGU9PT0xKXJldHVybiBnO2c9Zy5uZXh0U2libGluZ319ZnVuY3Rpb24gX2YoZyl7Zm9yKDtnOyl7aWYoZy5ub2RlVHlwZT09PTEpcmV0dXJuIGc7Zz1nLnByZXZpb3VzU2libGluZ319ZnVuY3Rpb24gYWwoZyxzLHAsdz0hMSl7cDwwJiYocD0wKTtsZXQgaz1zW3AtMV0sUz1zW3BdO3JldHVybiBzLnNwbGljZShwLDAsZyksdyYmKGsmJihrLm5leHRTaWJsaW5nPWcpLGcucHJldmlvdXNTaWJsaW5nPWssZy5uZXh0U2libGluZz1TLFMmJihTLnByZXZpb3VzU2libGluZz1nKSkscH1mdW5jdGlvbiBzbChnLHMscCx3PSExKXtsZXQgaz1zLmluZGV4T2YoZyk7aWYoazwwKXJldHVybi0xO2lmKHcpe2xldCBCPXNbay0xXSxXZT1zW2srMV07QiYmKEIubmV4dFNpYmxpbmc9V2UpLFdlJiYoV2UucHJldmlvdXNTaWJsaW5nPUIpfXMuc3BsaWNlKGssMSk7bGV0IFM9cDtrPD1wJiYoUz1wLTEpO2xldCBkPXNbUy0xXSxFPXNbU107cmV0dXJuIHMuc3BsaWNlKFMsMCxnKSx3JiYoZCYmKGQubmV4dFNpYmxpbmc9ZyksZy5wcmV2aW91c1NpYmxpbmc9ZCxnLm5leHRTaWJsaW5nPUUsRSYmKEUucHJldmlvdXNTaWJsaW5nPWcpKSxrPT09Uz8tMTpwfWZ1bmN0aW9uIGJmKGcscyxwPSExKXtsZXQgdz1zLmluZGV4T2YoZyk7aWYoISh3PDApKXtpZihwKXtsZXQgaz1zW3ctMV0sUz1zW3crMV07ayYmKGsubmV4dFNpYmxpbmc9UyksUyYmKFMucHJldmlvdXNTaWJsaW5nPWspfXMuc3BsaWNlKHcsMSl9fXZhciBsbD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVwdGg9MDt0aGlzLm5vZGVJZD1IcCgpLHRoaXMucmVmPXRoaXMubm9kZUlkLHRoaXMuY2hpbGRyZW49W10sdGhpcy5wdXJlQ2hpbGRyZW49W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5uZXh0U2libGluZz1udWxsLHRoaXMucHJldmlvdXNTaWJsaW5nPW51bGx9ZGVzdHJveSgpe2xldCBzPXJzKHRoaXMuZG9jSWQpO3MmJihkZWxldGUgdGhpcy5kb2NJZCxkZWxldGUgcy5ub2RlTWFwW3RoaXMubm9kZUlkXSksdGhpcy5jaGlsZHJlbi5mb3JFYWNoKHA9PntwLmRlc3Ryb3koKX0pfX07dmFyIFlwPXt9O2Z1bmN0aW9uIEVmKGcscyl7aWYoIVBpKHMpfHwhcy5sZW5ndGgpcmV0dXJuO2NsYXNzIHAgZXh0ZW5kcyBLaXt9cy5mb3JFYWNoKHc9PntwLnByb3RvdHlwZVt3XT1mdW5jdGlvbiguLi5rKXtsZXQgUz1Mcih0aGlzLmRvY0lkKTtpZihTKXJldHVybiBTLnNlbmQoImNvbXBvbmVudCIse3JlZjp0aGlzLnJlZixjb21wb25lbnQ6ZyxtZXRob2Q6d30sayl9fSksWXBbZ109cH1mdW5jdGlvbiBxcChnKXtyZXR1cm4gWXBbZ119ZnVuY3Rpb24gTnIoZyxzLHAsdyxrKXtsZXQgUz17dHlwZToiZGVjbCIscHJvcDpnLHZhbHVlOnMudG9TdHJpbmcoKSxyYXdzOncsc291cmNlOmt9O3JldHVybiBwJiYoUy5pbXBvcnRhbnQ9ITApLFN9dmFyIGFOPSJiYWNrZ3JvdW5kQ29sb3IiLHNOPSJiYWNrZ3JvdW5kSW1hZ2UiLGxOPWc9PntsZXR7dmFsdWU6cyxpbXBvcnRhbnQ6cCxyYXdzOncsc291cmNlOmt9PWc7cmV0dXJuL14jP1xTKyQvLnRlc3Qocyl8fC9ecmdiYT8oLispJC8udGVzdChzKT9bTnIoYU4scyxwLHcsayldOi9ebGluZWFyLWdyYWRpZW50KC4rKSQvLnRlc3Qocyk/W05yKHNOLHMscCx3LGspXTpbZ119LGNOPSJXaWR0aCIsdU49IlN0eWxlIixmTj0iQ29sb3IiLHZjPWc9PntsZXR7cHJvcDpzLHZhbHVlOnAsaW1wb3J0YW50OncscmF3czprLHNvdXJjZTpTfT1nLGQ9cC5yZXBsYWNlKC9ccyosXHMqL2csIiwiKS5zcGxpdCgvXHMrLyksRT1bL15bXGRcLl0rXFMqJC8sL14oc29saWR8ZGFzaGVkfGRvdHRlZCkkLywvXFMrL10ubWFwKEI9PntsZXQgV2U9ZC5maW5kSW5kZXgoTHQ9PkIudGVzdChMdCkpO3JldHVybiBXZTwwP251bGw6ZC5zcGxpY2UoV2UsMSlbMF19KTtyZXR1cm4gZC5sZW5ndGg/W2ddOltOcihzK2NOLChFWzBdfHwiMCIpLnRyaW0oKSx3LGssUyksTnIocyt1TiwoRVsxXXx8InNvbGlkIikudHJpbSgpLHcsayxTKSxOcihzK2ZOLChFWzJdfHwiIzAwMDAwMCIpLnRyaW0oKSx3LGssUyldfSxkTj0iYm9yZGVyVG9wIixoTj0iYm9yZGVyUmlnaHQiLGdOPSJib3JkZXJCb3R0b20iLHBOPSJib3JkZXJMZWZ0Iix5Zj1nPT57bGV0e3Byb3A6cyx2YWx1ZTpwLGltcG9ydGFudDp3LHJhd3M6ayxzb3VyY2U6U309ZyxkPWRmKHMpLnNwbGl0KCItIilbMV07ZD1pdShkKTtsZXQgRT1wLnJlcGxhY2UoL1xzKixccyovZywiLCIpLnNwbGl0KC9ccysvKTtzd2l0Y2goRS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bZ107Y2FzZSAyOkUucHVzaChFWzBdLEVbMV0pO2JyZWFrO2Nhc2UgMzpFLnB1c2goRVsxXSk7YnJlYWt9cmV0dXJuW05yKGROK2QsRVswXSx3LGssUyksTnIoaE4rZCxFWzFdLHcsayxTKSxOcihnTitkLEVbMl0sdyxrLFMpLE5yKHBOK2QsRVszXSx3LGssUyldfSx2Tj0iYm9yZGVyVG9wTGVmdFJhZGl1cyIsbU49ImJvcmRlclRvcFJpZ2h0UmFkaXVzIixfTj0iYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLGJOPSJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIixFTj1nPT57bGV0e3ZhbHVlOnMsaW1wb3J0YW50OnAscmF3czp3LHNvdXJjZTprfT1nLFM9cy5zcGxpdCgvXHMrLyk7aWYocy5pbmNsdWRlcygiLyIpKXJldHVybltnXTtzd2l0Y2goUy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bZ107Y2FzZSAyOlMucHVzaChTWzBdLFNbMV0pO2JyZWFrO2Nhc2UgMzpTLnB1c2goU1sxXSk7YnJlYWt9cmV0dXJuW05yKHZOLFNbMF0scCx3LGspLE5yKG1OLFNbMV0scCx3LGspLE5yKF9OLFNbMl0scCx3LGspLE5yKGJOLFNbM10scCx3LGspXX0seU49eWYsU049eWYsd049ImZsZXhEaXJlY3Rpb24iLENOPSJmbGV4V3JhcCIsQU49Zz0+e2xldHt2YWx1ZTpzLGltcG9ydGFudDpwLHJhd3M6dyxzb3VyY2U6a309ZyxTPXMuc3BsaXQoL1xzKy8pLGQ9Wy9eKGNvbHVtbnxjb2x1bW4tcmV2ZXJzZXxyb3d8cm93LXJldmVyc2UpJC8sL14obm93cmFwfHdyYXB8d3JhcC1yZXZlcnNlKSQvXS5tYXAoRT0+e2xldCBCPVMuZmluZEluZGV4KFdlPT5FLnRlc3QoV2UpKTtyZXR1cm4gQjwwP251bGw6Uy5zcGxpY2UoQiwxKVswXX0pO3JldHVybiBTLmxlbmd0aD9bZ106W05yKHdOLGRbMF18fCJjb2x1bW4iLHAsdyxrKSxOcihDTixkWzFdfHwibm93cmFwIixwLHcsayldfSxPTj0iVG9wIixUTj0iUmlnaHQiLFBOPSJCb3R0b20iLElOPSJMZWZ0IixLcD1nPT5zPT57bGV0e3ZhbHVlOnAsaW1wb3J0YW50OncscmF3czprLHNvdXJjZTpTfT1zLGQ9cC5zcGxpdCgvXHMrLyk7c3dpdGNoKGQubGVuZ3RoKXtjYXNlIDE6ZC5wdXNoKGRbMF0sZFswXSxkWzBdKTticmVhaztjYXNlIDI6ZC5wdXNoKGRbMF0sZFsxXSk7YnJlYWs7Y2FzZSAzOmQucHVzaChkWzFdKTticmVha31yZXR1cm5bTnIoZytPTixkWzBdLHcsayxTKSxOcihnK1ROLGRbMV0sdyxrLFMpLE5yKGcrUE4sZFsyXSx3LGssUyksTnIoZytJTixkWzNdLHcsayxTKV19LE5OPUtwKCJtYXJnaW4iKSxrTj1LcCgicGFkZGluZyIpLFJOPSJ0cmFuc2l0aW9uUHJvcGVydHkiLHhOPSJ0cmFuc2l0aW9uRHVyYXRpb24iLEJOPSJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLExOPSJ0cmFuc2l0aW9uRGVsYXkiLE1OPWc9PntsZXQgcz0vXihcUyopP1xzKihcZCpcLj9cZCsoPzptc3xzKT8pP1xzKihcUyopP1xzKihcZCpcLj9cZCsoPzptc3xzKT8pPyQvLHt2YWx1ZTpwLGltcG9ydGFudDp3LHJhd3M6ayxzb3VyY2U6U309ZyxkPVtdLEU9cC5tYXRjaChzKTtyZXR1cm4gRSYmKEVbMV0mJmQucHVzaChOcihSTixFWzFdLHcsayxTKSksRVsyXSYmZC5wdXNoKE5yKHhOLEVbMl0sdyxrLFMpKSxFWzNdJiZkLnB1c2goTnIoQk4sRVszXSx3LGssUykpLEVbNF0mJmQucHVzaChOcihMTixFWzRdLHcsayxTKSkpLGR9LEpwPXt0cmFuc2l0aW9uOk1OLG1hcmdpbjpOTixwYWRkaW5nOmtOLGJvcmRlcjp2YyxiYWNrZ3JvdW5kOmxOfTtoaShKcCx7Ym9yZGVyVG9wOnZjLGJvcmRlclJpZ2h0OnZjLGJvcmRlckJvdHRvbTp2Yyxib3JkZXJMZWZ0OnZjLGJvcmRlclN0eWxlOnlOLGJvcmRlcldpZHRoOlNOLGJvcmRlckNvbG9yOnlmLGJvcmRlclJhZGl1czpFTixmbGV4RmxvdzpBTn0pO3ZhciBacD1TeW1ib2woImV4cGFuZGVkIiksWHA9e3Bvc3Rjc3NQbHVnaW46Im52dWU6ZXhwYW5kIixEZWNsYXJhdGlvbihnKXtpZihnW1pwXSlyZXR1cm47bGV0IHM9SnBbZy5wcm9wXTtpZihzKXtsZXQgcD1zKGcpO3AubGVuZ3RoPT09MSYmcFswXT09PWd8fGcucmVwbGFjZVdpdGgocCl9Z1tacF09ITB9fTt2YXIgRE49WHAuRGVjbGFyYXRpb247ZnVuY3Rpb24gU2YoZyxzKXtsZXQgcD1oaSh7cmVwbGFjZVdpdGgoayl7dz1rfX0sRk4oZyxzKSksdz1bcF07cmV0dXJuIEROKHApLHd9ZnVuY3Rpb24gRk4oZyxzKXtsZXQgcD1zKyIiO3JldHVybiBwLmluY2x1ZGVzKCIhaW1wb3J0YW50Iik/e3Byb3A6Zyx2YWx1ZTpwLnJlcGxhY2UoL1xzKiFpbXBvcnRhbnQvLCIiKSxpbXBvcnRhbnQ6ITB9Ontwcm9wOmcsdmFsdWU6cCxpbXBvcnRhbnQ6ITF9fXZhciBWTj0idmlldyIsJE49WyJjbGljayIsImxvbmdwcmVzcyIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsInBhbnN0YXJ0IiwicGFubW92ZSIsInBhbmVuZCIsImhvcml6b250YWxwYW4iLCJ2ZXJ0aWNhbHBhbiIsInN3aXBlIl07ZnVuY3Rpb24gd2YoZyxzKXtsZXQgcD1ycyhnKTtwLm5vZGVNYXBbcy5ub2RlSWRdPXN9dmFyIENmO2Z1bmN0aW9uIFFwKGcpe0NmfHwoQ2Y9Zyl9dmFyIEtpPWNsYXNzIGV4dGVuZHMgbGx7Y29uc3RydWN0b3Iocz1WTixwPXt9LHcpe3N1cGVyKCk7bGV0IGs9cXAocyk7aWYoayYmIXcpcmV0dXJuIG5ldyBrKHMscCwhMCk7dGhpcy5ub2RlVHlwZT0xLHRoaXMudHlwZT1zLHRoaXMuYXR0cj1wLmF0dHJ8fHt9LHRoaXMuc3R5bGU9cC5zdHlsZXx8e30sdGhpcy5jbGFzc1N0eWxlPXAuY2xhc3NTdHlsZXx8e30sdGhpcy5jbGFzc0xpc3Q9cC5jbGFzc0xpc3R8fFtdLHRoaXMuc3R5bGVTaGVldD1wLnN0eWxlU2hlZXR8fHt9LHRoaXMuZXZlbnQ9e319YXBwZW5kQ2hpbGQocyl7aWYoIShzLnBhcmVudE5vZGUmJnMucGFyZW50Tm9kZSE9PXRoaXMpKXtpZihzLnBhcmVudE5vZGUpe2lmKEtuKCJkZWJ1ZyIpJiZEaShgW2FwcGVuZENoaWxkXSgke3RoaXMuZG9jSWR9LCR7cy50eXBlfSwke3MucmVmfSkgTW92ZSA8JHtzLnR5cGV9PiB0byAke3RoaXMuY2hpbGRyZW4ubGVuZ3RofSBvZiA8JHt0aGlzLnR5cGV9PiAoJHt0aGlzLnJlZn0pLmApLHNsKHMsdGhpcy5jaGlsZHJlbix0aGlzLmNoaWxkcmVuLmxlbmd0aCwhMCkscy5ub2RlVHlwZT09PTEpe2xldCBwPXNsKHMsdGhpcy5wdXJlQ2hpbGRyZW4sdGhpcy5wdXJlQ2hpbGRyZW4ubGVuZ3RoKSx3PUxyKHRoaXMuZG9jSWQpO2lmKHcmJnA+PTApcmV0dXJuIHcuc2VuZCgiZG9tIix7YWN0aW9uOiJtb3ZlRWxlbWVudCJ9LFtzLnJlZix0aGlzLnJlZixwXSl9fWVsc2UgaWYoS24oImRlYnVnIikmJkRpKGBbYXBwZW5kQ2hpbGRdKCR7dGhpcy5kb2NJZH0sJHtzLnR5cGV9LCR7cy5yZWZ9KSBBcHBlbmQgPCR7cy50eXBlfT4gdG8gPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KS5gKSxvbChzLHRoaXMpLGFsKHMsdGhpcy5jaGlsZHJlbix0aGlzLmNoaWxkcmVuLmxlbmd0aCwhMCksdGhpcy5kb2NJZCYmd2YodGhpcy5kb2NJZCxzKSxzLm5vZGVUeXBlPT09MSl7YWwocyx0aGlzLnB1cmVDaGlsZHJlbix0aGlzLnB1cmVDaGlsZHJlbi5sZW5ndGgpO2xldCBwPUxyKHRoaXMuZG9jSWQpO2lmKHApcmV0dXJuIHAuc2VuZCgiZG9tIix7YWN0aW9uOiJhZGRFbGVtZW50In0sW3RoaXMucmVmLHMudG9KU09OKCksLTFdKX19fWluc2VydEJlZm9yZShzLHApe2lmKCEocy5wYXJlbnROb2RlJiZzLnBhcmVudE5vZGUhPT10aGlzKSYmIShzPT09cHx8cy5uZXh0U2libGluZyYmcy5uZXh0U2libGluZz09PXApKXtpZihzLnBhcmVudE5vZGUpe2lmKHNsKHMsdGhpcy5jaGlsZHJlbix0aGlzLmNoaWxkcmVuLmluZGV4T2YocCksITApLHMubm9kZVR5cGU9PT0xKXtsZXQgdz1tZihwKSxrPXNsKHMsdGhpcy5wdXJlQ2hpbGRyZW4sdz90aGlzLnB1cmVDaGlsZHJlbi5pbmRleE9mKHcpOnRoaXMucHVyZUNoaWxkcmVuLmxlbmd0aCksUz1Mcih0aGlzLmRvY0lkKTtpZihTJiZrPj0wKXJldHVybiBTLnNlbmQoImRvbSIse2FjdGlvbjoibW92ZUVsZW1lbnQifSxbcy5yZWYsdGhpcy5yZWYsa10pfX1lbHNlIGlmKEtuKCJkZWJ1ZyIpJiZEaShgW2luc2VydEJlZm9yZV0oJHt0aGlzLmRvY0lkfSwke3MudHlwZX0sJHtzLnJlZn0pIEluc2VydCA8JHtzLnR5cGV9PiB0byA8JHt0aGlzLnR5cGV9PiAoJHt0aGlzLnJlZn0pLCBiZWZvcmUgKCR7cC5yZWZ9KS5gKSxvbChzLHRoaXMpLGFsKHMsdGhpcy5jaGlsZHJlbix0aGlzLmNoaWxkcmVuLmluZGV4T2YocCksITApLHRoaXMuZG9jSWQmJndmKHRoaXMuZG9jSWQscykscy5ub2RlVHlwZT09PTEpe2xldCB3PW1mKHApLGs9YWwocyx0aGlzLnB1cmVDaGlsZHJlbix3P3RoaXMucHVyZUNoaWxkcmVuLmluZGV4T2Yodyk6dGhpcy5wdXJlQ2hpbGRyZW4ubGVuZ3RoKSxTPUxyKHRoaXMuZG9jSWQpO2lmKFMpcmV0dXJuIFMuc2VuZCgiZG9tIix7YWN0aW9uOiJhZGRFbGVtZW50In0sW3RoaXMucmVmLHMudG9KU09OKCksa10pfX19aW5zZXJ0QWZ0ZXIocyxwKXtpZighKHMucGFyZW50Tm9kZSYmcy5wYXJlbnROb2RlIT09dGhpcykmJiEocz09PXB8fHMucHJldmlvdXNTaWJsaW5nJiZzLnByZXZpb3VzU2libGluZz09PXApKXtpZihzLnBhcmVudE5vZGUpe2lmKHNsKHMsdGhpcy5jaGlsZHJlbix0aGlzLmNoaWxkcmVuLmluZGV4T2YocCkrMSwhMCkscy5ub2RlVHlwZT09PTEpe2xldCB3PXNsKHMsdGhpcy5wdXJlQ2hpbGRyZW4sdGhpcy5wdXJlQ2hpbGRyZW4uaW5kZXhPZihfZihwKSkrMSksaz1Mcih0aGlzLmRvY0lkKTtpZihrJiZ3Pj0wKXJldHVybiBrLnNlbmQoImRvbSIse2FjdGlvbjoibW92ZUVsZW1lbnQifSxbcy5yZWYsdGhpcy5yZWYsd10pfX1lbHNlIGlmKEtuKCJkZWJ1ZyIpJiZEaShgW2luc2VydEFmdGVyXSgke3RoaXMuZG9jSWR9LCR7cy50eXBlfSwke3MucmVmfSkgSW5zZXJ0IDwke3MudHlwZX0+IHRvIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSksIGFmdGVyICgke3AucmVmfSkuYCksb2wocyx0aGlzKSxhbChzLHRoaXMuY2hpbGRyZW4sdGhpcy5jaGlsZHJlbi5pbmRleE9mKHApKzEsITApLHRoaXMuZG9jSWQmJndmKHRoaXMuZG9jSWQscykscy5ub2RlVHlwZT09PTEpe2xldCB3PWFsKHMsdGhpcy5wdXJlQ2hpbGRyZW4sdGhpcy5wdXJlQ2hpbGRyZW4uaW5kZXhPZihfZihwKSkrMSksaz1Mcih0aGlzLmRvY0lkKTtpZihrKXJldHVybiBrLnNlbmQoImRvbSIse2FjdGlvbjoiYWRkRWxlbWVudCJ9LFt0aGlzLnJlZixzLnRvSlNPTigpLHddKX19fXJlbW92ZUNoaWxkKHMscCl7aWYocy5wYXJlbnROb2RlJiYoYmYocyx0aGlzLmNoaWxkcmVuLCEwKSxzLm5vZGVUeXBlPT09MSkpe0tuKCJkZWJ1ZyIpJiZEaShgW3JlbW92ZUNoaWxkXSgke3RoaXMuZG9jSWR9LCR7cy50eXBlfSwke3MucmVmfSkgUmVtb3ZlIDwke3MudHlwZX0+IGZyb20gPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KS5gKSxiZihzLHRoaXMucHVyZUNoaWxkcmVuKTtsZXQgdz1Mcih0aGlzLmRvY0lkKTt3JiZ3LnNlbmQoImRvbSIse2FjdGlvbjoicmVtb3ZlRWxlbWVudCJ9LFtzLnJlZl0pfXB8fHMuZGVzdHJveSgpfWNsZWFyKCl7bGV0IHM9THIodGhpcy5kb2NJZCk7cyYmdGhpcy5wdXJlQ2hpbGRyZW4uZm9yRWFjaChwPT57cy5zZW5kKCJkb20iLHthY3Rpb246InJlbW92ZUVsZW1lbnQifSxbcC5yZWZdKX0pLHRoaXMuY2hpbGRyZW4uZm9yRWFjaChwPT57cC5kZXN0cm95KCl9KSx0aGlzLmNoaWxkcmVuLmxlbmd0aD0wLHRoaXMucHVyZUNoaWxkcmVuLmxlbmd0aD0wfXNldEF0dHIocyxwLHcpe2lmKHRoaXMuYXR0cltzXT09PXAmJnchPT0hMSlyZXR1cm47dGhpcy5hdHRyW3NdPXA7bGV0IGs9THIodGhpcy5kb2NJZCk7IXcmJmsmJmsuc2VuZCgiZG9tIix7YWN0aW9uOiJ1cGRhdGVBdHRycyJ9LFt0aGlzLnJlZix7W3NdOnB9XSl9c2V0QXR0cnMocyxwKXtpZihwYyhzKSlyZXR1cm47bGV0IHc9e307Zm9yKGxldCBrIGluIHMpdGhpcy5hdHRyW2tdIT09c1trXSYmKHRoaXMuYXR0cltrXT1zW2tdLHdba109c1trXSk7aWYoIXBjKHcpKXtsZXQgaz1Mcih0aGlzLmRvY0lkKTshcCYmayYmay5zZW5kKCJkb20iLHthY3Rpb246InVwZGF0ZUF0dHJzIn0sW3RoaXMucmVmLHddKX19c2V0U3R5bGUocyxwLHcpe1NmKHMscCkuZm9yRWFjaCgoe3Byb3A6ayx2YWx1ZTpTfSk9PntpZih0aGlzLnN0eWxlW2tdPT09UyYmdyE9PSExKXJldHVybjt0aGlzLnN0eWxlW2tdPVM7bGV0IGQ9THIodGhpcy5kb2NJZCk7IXcmJmQmJmQuc2VuZCgiZG9tIix7YWN0aW9uOiJ1cGRhdGVTdHlsZSJ9LFt0aGlzLnJlZix7W2tdOlM9PT0iIiYmayBpbiB0aGlzLmNsYXNzU3R5bGU/dGhpcy5jbGFzc1N0eWxlW2tdOlN9XSl9KX1zZXRTdHlsZXMocyxwKXtpZihwYyhzKSlyZXR1cm47bGV0IHc9e307Zm9yKGxldCBrIGluIHMpU2YoayxzW2tdKS5mb3JFYWNoKCh7cHJvcDpTLHZhbHVlOmR9KT0+e3RoaXMuc3R5bGVbU10hPT1kJiYodGhpcy5zdHlsZVtTXT1kLHdbU109ZD09PSIiJiZTIGluIHRoaXMuY2xhc3NTdHlsZT90aGlzLmNsYXNzU3R5bGVbU106ZCl9KTtpZighcGModykpe2xldCBrPUxyKHRoaXMuZG9jSWQpOyFwJiZrJiZrLnNlbmQoImRvbSIse2FjdGlvbjoidXBkYXRlU3R5bGUifSxbdGhpcy5yZWYsd10pfX1zZXRDbGFzc1N0eWxlKHMpe2ZvcihsZXQgdyBpbiB0aGlzLmNsYXNzU3R5bGUpdGhpcy5jbGFzc1N0eWxlW3ddPSIiO2hpKHRoaXMuY2xhc3NTdHlsZSxzKTtsZXQgcD1Mcih0aGlzLmRvY0lkKTtwJiZwLnNlbmQoImRvbSIse2FjdGlvbjoidXBkYXRlU3R5bGUifSxbdGhpcy5yZWYsdGhpcy50b1N0eWxlKCldKX1zZXRDbGFzc0xpc3Qocyl7cy5sZW5ndGg9PT10aGlzLmNsYXNzTGlzdC5sZW5ndGgmJnMuZmlsdGVyKHA9PiF0aGlzLmNsYXNzTGlzdC5pbmNsdWRlcyhwKSkubGVuZ3RoPT09MHx8KHRoaXMuY2xhc3NMaXN0PXMsdGhpcy5wYXJlbnROb2RlJiZ0aGlzLmNhbGNDbGFzc0xpc3QoKSl9Y2FsY0NsYXNzTGlzdCgpe3RoaXMuc2V0Q2xhc3NTdHlsZShDZih0aGlzKSl9c2V0U3R5bGVTaGVldChzKXt0aGlzLnN0eWxlU2hlZXQ9c31hZGRFdmVudChzLHAsdyl7aWYodGhpcy5ldmVudHx8KHRoaXMuZXZlbnQ9e30pLCF0aGlzLmV2ZW50W3NdKXtLbigiZGVidWciKSYmRGkoYFthZGRFdmVudF0oJHt0aGlzLmRvY0lkfSwke3RoaXMudHlwZX0sJHt0aGlzLnJlZn0pIEFkZCAiJHtzfSIgZXZlbnQgb24gPCR7dGhpcy50eXBlfT4gKCR7dGhpcy5yZWZ9KS5gKSx0aGlzLmV2ZW50W3NdPXtoYW5kbGVyOnAscGFyYW1zOnd9O2xldCBrPUxyKHRoaXMuZG9jSWQpO2smJmsuc2VuZCgiZG9tIix7YWN0aW9uOiJhZGRFdmVudCJ9LFt0aGlzLnJlZixzXSl9fXJlbW92ZUV2ZW50KHMpe2lmKHRoaXMuZXZlbnQmJnRoaXMuZXZlbnRbc10pe0tuKCJkZWJ1ZyIpJiZEaShgW3JlbW92ZUV2ZW50XSgke3RoaXMuZG9jSWR9LCR7dGhpcy50eXBlfSwke3RoaXMucmVmfSkgUmVtb3ZlICIke3N9IiBldmVudCBvbiA8JHt0aGlzLnR5cGV9PiAoJHt0aGlzLnJlZn0pLmApLGRlbGV0ZSB0aGlzLmV2ZW50W3NdO2xldCBwPUxyKHRoaXMuZG9jSWQpO3AmJnAuc2VuZCgiZG9tIix7YWN0aW9uOiJyZW1vdmVFdmVudCJ9LFt0aGlzLnJlZixzXSl9fWZpcmVFdmVudChzLHAsdyxrKXtsZXQgUz1udWxsLGQ9ITEsRT10aGlzLmV2ZW50W3NdO2lmKEUmJnApe0tuKCJkZWJ1ZyIpJiZEaShgW2ZpcmVFdmVudF0oJHt0aGlzLmRvY0lkfSwke3RoaXMudHlwZX0sJHt0aGlzLnJlZn0pIEZpcmUgIiR7c30iIGV2ZW50IG9uIDwke3RoaXMudHlwZX0+ICgke3RoaXMucmVmfSkuYCk7bGV0IEI9RS5oYW5kbGVyO3Auc3RvcFByb3BhZ2F0aW9uPSgpPT57ZD0hMH0scC5wcmV2ZW50RGVmYXVsdD0oKT0+e307dHJ5e2smJmsucGFyYW1zP1M9Qi5jYWxsKHRoaXMsLi4uay5wYXJhbXMscCk6Uz1CLmNhbGwodGhpcyxwKX1jYXRjaChXZSl7dGhyb3cgY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gRmFpbGVkIHRvIGludm9rZSB0aGUgZXZlbnQgaGFuZGxlciBvZiAiJHtzfSIgb24gJHt0aGlzLnR5cGV9ICgke3RoaXMucmVmfSk6CiAke1dlLnRvU3RyaW5nKCl9YCksV2V9fXJldHVybiFkJiZ3JiYkTi5pbmRleE9mKHMpIT09LTEmJnRoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmZpcmVFdmVudCYmKHAuY3VycmVudFRhcmdldD10aGlzLnBhcmVudE5vZGUsdGhpcy5wYXJlbnROb2RlLmZpcmVFdmVudChzLHAsdykpLFN9dG9TdHlsZSgpe2xldCBzPU9iamVjdC5hc3NpZ24oe30sdGhpcy5jbGFzc1N0eWxlKSxwPXRoaXMuc3R5bGU7Zm9yKGxldCB3IGluIHApe2xldCBrPXBbd107c1t3XT1rPT09IiImJncgaW4gdGhpcy5jbGFzc1N0eWxlP3RoaXMuY2xhc3NTdHlsZVt3XTprfXJldHVybiBzfXRvSlNPTihzPSExKXtsZXQgcD17cmVmOnRoaXMucmVmLnRvU3RyaW5nKCksdHlwZTp0aGlzLnR5cGUsYXR0cjp0aGlzLmF0dHIsc3R5bGU6dGhpcy50b1N0eWxlKCl9LHc9W107Zm9yKGxldCBrIGluIHRoaXMuZXZlbnQpe2xldHtwYXJhbXM6U309dGhpcy5ldmVudFtrXTtTP3cucHVzaCh7dHlwZTprLHBhcmFtczpTfSk6dy5wdXNoKGspfXJldHVybiB3Lmxlbmd0aCYmKHAuZXZlbnQ9dyksIXMmJnRoaXMucHVyZUNoaWxkcmVuLmxlbmd0aCYmKHAuY2hpbGRyZW49dGhpcy5wdXJlQ2hpbGRyZW4ubWFwKGs9PmsudG9KU09OKCkpKSxwfXRvU3RyaW5nKCl7cmV0dXJuIjwiK3RoaXMudHlwZSsiIGF0dHI9IitKU09OLnN0cmluZ2lmeSh0aGlzLmF0dHIpKyIgc3R5bGU9IitKU09OLnN0cmluZ2lmeSh0aGlzLnRvU3R5bGUoKSkrIj4iK3RoaXMucHVyZUNoaWxkcmVuLm1hcChzPT5zLnRvU3RyaW5nKCkpLmpvaW4oIiIpKyI8LyIrdGhpcy50eXBlKyI+In19O2Z1bmN0aW9uIGV2KGcpe2xldCBzPWcmJmcuX192X3JhdztyZXR1cm4gcz9ldihzKTpnfWZ1bmN0aW9uIHR2KGcpe2xldCBzPWdjKGcpO3N3aXRjaChzKXtjYXNlIlVuZGVmaW5lZCI6Y2FzZSJOdWxsIjpyZXR1cm4iIjtjYXNlIlJlZ0V4cCI6cmV0dXJuIGcudG9TdHJpbmcoKTtjYXNlIkRhdGUiOnJldHVybiBnLnRvSVNPU3RyaW5nKCk7Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjpjYXNlIkJvb2xlYW4iOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjpyZXR1cm4gZXYoZyk7Y2FzZSJBcnJheUJ1ZmZlciI6cmV0dXJueyJAdHlwZSI6ImJpbmFyeSIsZGF0YVR5cGU6cyxiYXNlNjQ6Z2YoZyl9O2Nhc2UiSW50OEFycmF5IjpjYXNlIlVpbnQ4QXJyYXkiOmNhc2UiVWludDhDbGFtcGVkQXJyYXkiOmNhc2UiSW50MTZBcnJheSI6Y2FzZSJVaW50MTZBcnJheSI6Y2FzZSJJbnQzMkFycmF5IjpjYXNlIlVpbnQzMkFycmF5IjpjYXNlIkZsb2F0MzJBcnJheSI6Y2FzZSJGbG9hdDY0QXJyYXkiOnJldHVybnsiQHR5cGUiOiJiaW5hcnkiLGRhdGFUeXBlOnMsYmFzZTY0OmdmKGcuYnVmZmVyKX07ZGVmYXVsdDpyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZyl9fXZhciBjdT1mdW5jdGlvbigpe30sRmw9Y2xhc3N7Y29uc3RydWN0b3IocyxwKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaW5zdGFuY2VJZCIse2VudW1lcmFibGU6ITAsdmFsdWU6U3RyaW5nKHMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImNhbGxiYWNrTWFuYWdlciIse2VudW1lcmFibGU6ITAsdmFsdWU6bmV3IHN1KHMpfSksY3U9cHx8ZnVuY3Rpb24oKXt9fWNhbGxiYWNrKHMscCx3KXtyZXR1cm4gdGhpcy5jYWxsYmFja01hbmFnZXIuY29uc3VtZShzLHAsdyl9cmVnaXN0ZXJIb29rKHMscCx3LGspe3JldHVybiB0aGlzLmNhbGxiYWNrTWFuYWdlci5yZWdpc3Rlckhvb2socyxwLHcsayl9dHJpZ2dlckhvb2socyxwLHcsayl7cmV0dXJuIHRoaXMuY2FsbGJhY2tNYW5hZ2VyLnRyaWdnZXJIb29rKHMscCx3LGspfXVwZGF0ZURhdGEocyxwLHcpe3RoaXMuc2VuZCgibW9kdWxlIix7bW9kdWxlOiJkb20iLG1ldGhvZDoidXBkYXRlQ29tcG9uZW50RGF0YSJ9LFtzLHAsd10pfWRlc3Ryb3lDYWxsYmFjaygpe3JldHVybiB0aGlzLmNhbGxiYWNrTWFuYWdlci5jbG9zZSgpfW5vcm1hbGl6ZShzLHA9ITEpe2xldCB3PWdjKHMpO2lmKHMmJnMgaW5zdGFuY2VvZiBLaSlyZXR1cm4gcy5yZWY7aWYocyYmcy4kZWwgaW5zdGFuY2VvZiBLaSlyZXR1cm4gcy4kZWwucmVmO2lmKHc9PT0iRnVuY3Rpb24iKXJldHVybiB0aGlzLmNhbGxiYWNrTWFuYWdlci5hZGQocykudG9TdHJpbmcoKTtpZihwKXtpZih3PT09Ik9iamVjdCIpe2xldCBrPXt9O2ZvcihsZXQgUyBpbiBzKWtbU109dGhpcy5ub3JtYWxpemUoc1tTXSwhMCk7cmV0dXJuIGt9aWYodz09PSJBcnJheSIpcmV0dXJuIHMubWFwKGs9PnRoaXMubm9ybWFsaXplKGssITApKX1yZXR1cm4gcyYmcy5yZWYmJnNbIltbVmlydHVhbEVsZW1lbnRdXSJdP3MucmVmOnR2KHMpfXNlbmQocyxwLHcsayl7bGV0e2FjdGlvbjpTLGNvbXBvbmVudDpkLHJlZjpFLG1vZHVsZTpCLG1ldGhvZDpXZX09cDtzd2l0Y2godz13Lm1hcChMdD0+dGhpcy5ub3JtYWxpemUoTHQscyE9PSJtb2R1bGUiKSksZ2Moayk9PT0iT2JqZWN0IiYmKGs9dGhpcy5ub3JtYWxpemUoaywhMCkpLHMpe2Nhc2UiZG9tIjpyZXR1cm4gS24oImRlYnVnIikmJkRpKGBbdGFza10oJHt0aGlzLmluc3RhbmNlSWR9LCR7c30sJHtTfSkgJHtKU09OLnN0cmluZ2lmeSh3KX1gKSx0aGlzW1NdKHRoaXMuaW5zdGFuY2VJZCx3KTtjYXNlImNvbXBvbmVudCI6cmV0dXJuIHRoaXMuY29tcG9uZW50SGFuZGxlcih0aGlzLmluc3RhbmNlSWQsRSxXZSx3LGhpKHtjb21wb25lbnQ6ZH0saykpO2RlZmF1bHQ6cmV0dXJuIEtuKCJkZWJ1ZyIpJiZEaShgW3Rhc2tdKCR7dGhpcy5pbnN0YW5jZUlkfSwke0J9LCR7V2V9KSAke0pTT04uc3RyaW5naWZ5KHcpfWApLHRoaXMubW9kdWxlSGFuZGxlcih0aGlzLmluc3RhbmNlSWQsQixXZSx3LGspfX1jYWxsRE9NKHMscCl7cmV0dXJuIHRoaXNbc10odGhpcy5pbnN0YW5jZUlkLHApfWNhbGxDb21wb25lbnQocyxwLHcsayl7cmV0dXJuIHRoaXMuY29tcG9uZW50SGFuZGxlcih0aGlzLmluc3RhbmNlSWQscyxwLHcsayl9Y2FsbE1vZHVsZShzLHAsdyxrKXtyZXR1cm4gdGhpcy5tb2R1bGVIYW5kbGVyKHRoaXMuaW5zdGFuY2VJZCxzLHAsdyxrKX19O2Z1bmN0aW9uIG52KCl7bGV0IGc9e2NyZWF0ZUZpbmlzaDpnbG9iYWwuY2FsbENyZWF0ZUZpbmlzaCx1cGRhdGVGaW5pc2g6Z2xvYmFsLmNhbGxVcGRhdGVGaW5pc2gscmVmcmVzaEZpbmlzaDpnbG9iYWwuY2FsbFJlZnJlc2hGaW5pc2gsY3JlYXRlQm9keTpnbG9iYWwuY2FsbENyZWF0ZUJvZHksYWRkRWxlbWVudDpnbG9iYWwuY2FsbEFkZEVsZW1lbnQscmVtb3ZlRWxlbWVudDpnbG9iYWwuY2FsbFJlbW92ZUVsZW1lbnQsbW92ZUVsZW1lbnQ6Z2xvYmFsLmNhbGxNb3ZlRWxlbWVudCx1cGRhdGVBdHRyczpnbG9iYWwuY2FsbFVwZGF0ZUF0dHJzLHVwZGF0ZVN0eWxlOmdsb2JhbC5jYWxsVXBkYXRlU3R5bGUsYWRkRXZlbnQ6Z2xvYmFsLmNhbGxBZGRFdmVudCxyZW1vdmVFdmVudDpnbG9iYWwuY2FsbFJlbW92ZUV2ZW50LF9fdXBkYXRlQ29tcG9uZW50RGF0YTpnbG9iYWwuX191cGRhdGVDb21wb25lbnREYXRhfSxzPUZsLnByb3RvdHlwZTtmb3IobGV0IHAgaW4gZyl7bGV0IHc9Z1twXTtzW3BdPXc/KGssUyk9PncoaywuLi5TKTooayxTKT0+Y3Uoayxbe21vZHVsZToiZG9tIixtZXRob2Q6cCxhcmdzOlN9XSwiLTEiKX1zLmNvbXBvbmVudEhhbmRsZXI9Z2xvYmFsLmNhbGxOYXRpdmVDb21wb25lbnR8fCgocCx3LGssUyxkKT0+Y3UocCxbe2NvbXBvbmVudDpkLmNvbXBvbmVudCxyZWY6dyxtZXRob2Q6ayxhcmdzOlN9XSkpLHMubW9kdWxlSGFuZGxlcj1nbG9iYWwuY2FsbE5hdGl2ZU1vZHVsZXx8KChwLHcsayxTKT0+Y3UocCxbe21vZHVsZTp3LG1ldGhvZDprLGFyZ3M6U31dKSl9ZnVuY3Rpb24gVU4oZyxzLHAsdyxrLFMpe2xldCBkPWcuZ2V0UmVmKHMpO2lmKGQpcmV0dXJuIGcuZmlyZUV2ZW50KGQscCx3LGssUyk7aWYodylyZXR1cm4gdy5fbm9kZUlkPXMsZy5maXJlRXZlbnQoZy5nZXRSZWYoIl9kb2N1bWVudEVsZW1lbnQiKSxwLHcsayxTKX1mdW5jdGlvbiBITihnLHMscCx3KXtyZXR1cm4gZy50YXNrQ2VudGVyLmNhbGxiYWNrKHMscCx3KX1mdW5jdGlvbiBqTihnLHMscCx3LGspe2lmKCFnfHwhZy50YXNrQ2VudGVyKXJldHVybiBjb25zb2xlLmVycm9yKGBbSlMgRnJhbWV3b3JrXSBDYW4ndCBmaW5kICJkb2N1bWVudCIgb3IgInRhc2tDZW50ZXIiLmApLG51bGw7bGV0IFM9bnVsbDt0cnl7Uz1nLnRhc2tDZW50ZXIudHJpZ2dlckhvb2socyxwLHcsayl9Y2F0Y2goZCl7dGhyb3cgY29uc29sZS5lcnJvcihgW0pTIEZyYW1ld29ya10gRmFpbGVkIHRvIHRyaWdnZXIgdGhlICIke3B9QCR7d30iIGhvb2sgb24gJHtzfS5gKSxkfXJldHVybiBTfWZ1bmN0aW9uIEFmKGcscyl7bGV0IHA9cnMoZyk7aWYoIXApcmV0dXJuIG5ldyBFcnJvcihgW0pTIEZyYW1ld29ya10gRmFpbGVkIHRvIHJlY2VpdmVUYXNrcywgaW5zdGFuY2UgKCR7Z30pIGlzIG5vdCBhdmFpbGFibGUuYCk7aWYoUGkocykpcmV0dXJuIHMubWFwKHc9Pntzd2l0Y2gody5tZXRob2Qpe2Nhc2UiY2FsbGJhY2siOnJldHVybiBITihwLC4uLncuYXJncyk7Y2FzZSJmaXJlRXZlbnRTeW5jIjpjYXNlImZpcmVFdmVudCI6cmV0dXJuIFVOKHAsLi4udy5hcmdzKTtjYXNlImNvbXBvbmVudEhvb2siOnJldHVybiBqTihwLC4uLncuYXJncyl9fSl9dmFyIGtzPXt9O2Z1bmN0aW9uIHJ2KGc9e30pe2ZvcihsZXQgcyBpbiBnKWlsKGtzLHMpfHwoa3Nbc109e30pLCEhUGkoZ1tzXSkmJmdbc10uZm9yRWFjaChwPT57Z2kocCk/a3Nbc11bcF09ITA6RGwocCkmJmdpKHAubmFtZSkmJihrc1tzXVtwLm5hbWVdPXAuYXJnc3x8W10pfSl9ZnVuY3Rpb24gdXUoZyxzKXtyZXR1cm4gZ2kocyk/ISEoa3NbZ10mJmtzW2ddW3NdKTohIWtzW2ddfWZ1bmN0aW9uIGl2KGcpe3JldHVybiBrc1tnXX12YXIgT2Y9e307ZnVuY3Rpb24gb3YoZyl7IVBpKGcpfHxnLmZvckVhY2gocz0+eyFzfHwoZ2kocyk/T2Zbc109ITA6RGwocykmJmdpKHMudHlwZSkmJihPZltzLnR5cGVdPXMsRWYocy50eXBlLHMubWV0aG9kcykpKX0pfWZ1bmN0aW9uIFRmKGcpe3JldHVybiEhT2ZbZ119dmFyIFJzPVtdO2Z1bmN0aW9uIGZ1KGcscyl7UGYoZyk/Y29uc29sZS53YXJuKGBTZXJ2aWNlICIke2d9IiBoYXMgYmVlbiByZWdpc3RlcmVkIGFscmVhZHkhYCk6KHM9aGkoe30scyksUnMucHVzaCh7bmFtZTpnLG9wdGlvbnM6c30pKX1mdW5jdGlvbiBkdShnKXtScy5zb21lKChzLHApPT57aWYocy5uYW1lPT09ZylyZXR1cm4gUnMuc3BsaWNlKHAsMSksITB9KX1mdW5jdGlvbiBQZihnKXtyZXR1cm4gek4oZyk+PTB9ZnVuY3Rpb24gek4oZyl7cmV0dXJuIFJzLm1hcChzPT5zLm5hbWUpLmluZGV4T2YoZyl9ZnVuY3Rpb24gV04oZyl7cmV0dXJuIHM9PntsZXQgcD10dShnLHMpLHtjcmVhdGVBcHA6d309cDtwLmNyZWF0ZVZ1ZUFwcD1wLmNyZWF0ZUFwcD0oayxTKT0+dyhrLFMpLnVzZShHTixzKSxzLlZ1ZT1wfX12YXIgR049e2luc3RhbGwoZyxzKXtZTihnLHMpLGRjKHMpLmluaXRBcHAoZyl9fTtmdW5jdGlvbiBZTihnLHMpe2xldHttb3VudDpwfT1nO2cubW91bnQ9dz0+e2xldCBrPXAodyk7cmV0dXJuIHc9PT0iI2FwcCImJnMuX19yZWdpc3RlckFwcChrKSxrfX1mdW5jdGlvbiBxTihnKXtsZXR7VW5pU2hhcmVkOnMsVnVlU2hhcmVkOnAsVnVlUmVhY3Rpdml0eTp3fT1nO3ZhciBrPWZ1bmN0aW9uKFMsZCxFLEIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBXZShpKXt9ZnVuY3Rpb24gTHQoaSxsKXt9ZnVuY3Rpb24gZW4oaSxsLGYsXyl7dmFyIEE7dHJ5e0E9Xz9pKC4uLl8pOmkoKX1jYXRjaChDKXtJKEMsbCxmKX1yZXR1cm4gQX1mdW5jdGlvbiB4dChpLGwsZixfKXtpZihkLmlzRnVuY3Rpb24oaSkpe3ZhciBBPWVuKGksbCxmLF8pO3JldHVybiBBJiZkLmlzUHJvbWlzZShBKSYmQS5jYXRjaChNPT57SShNLGwsZil9KSxBfWZvcih2YXIgQz1bXSxOPTA7TjxpLmxlbmd0aDtOKyspQy5wdXNoKHh0KGlbTl0sbCxmLF8pKTtyZXR1cm4gQ31mdW5jdGlvbiBJKGksbCxmKXtpZihsJiZsLnZub2RlLGwpe2Zvcih2YXIgXz1sLnBhcmVudCxBPWwucHJveHksQz1mO187KXt2YXIgTj1fLmVjO2lmKE4pe2Zvcih2YXIgTT0wO008Ti5sZW5ndGg7TSsrKWlmKE5bTV0oaSxBLEMpPT09ITEpcmV0dXJufV89Xy5wYXJlbnR9dmFyIEg9bC5hcHBDb250ZXh0LmNvbmZpZy5lcnJvckhhbmRsZXI7aWYoSCl7ZW4oSCxudWxsLDEwLFtpLEEsQ10pO3JldHVybn19U3QoaSl9ZnVuY3Rpb24gU3QoaSxsLGYpe2NvbnNvbGUuZXJyb3IoaSl9dmFyIFBuPSExLHN0PSExLFc9W10sWj0wLGZuPVtdLHNuPW51bGwsX249MCxXbj17dGhlbihpKXtzZXRUaW1lb3V0KCgpPT5pKCksMCl9fSxwaT1TLnBsYXRmb3JtPT09ImlPUyIsdmk9cGk/V246UHJvbWlzZS5yZXNvbHZlKCksYXI9bnVsbDtmdW5jdGlvbiBTcihpKXt2YXIgbD1hcnx8dmk7cmV0dXJuIGk/bC50aGVuKHRoaXM/aS5iaW5kKHRoaXMpOmkpOmx9ZnVuY3Rpb24gQ24oaSl7Zm9yKHZhciBsPVorMSxmPVcubGVuZ3RoO2w8Zjspe3ZhciBfPWwrZj4+PjEsQT1idChXW19dKTtBPGk/bD1fKzE6Zj1ffXJldHVybiBsfWZ1bmN0aW9uIHdyKGkpeyghVy5sZW5ndGh8fCFXLmluY2x1ZGVzKGksUG4mJmkuYWxsb3dSZWN1cnNlP1orMTpaKSkmJihpLmlkPT1udWxsP1cucHVzaChpKTpXLnNwbGljZShDbihpLmlkKSwwLGkpLENyKCkpfWZ1bmN0aW9uIENyKCl7IVBuJiYhc3QmJihzdD0hMCxhcj12aS50aGVuKFNuKSl9ZnVuY3Rpb24gbWkoaSl7dmFyIGw9Vy5pbmRleE9mKGkpO2w+WiYmVy5zcGxpY2UobCwxKX1mdW5jdGlvbiByaShpKXtkLmlzQXJyYXkoaSk/Zm4ucHVzaCguLi5pKTooIXNufHwhc24uaW5jbHVkZXMoaSxpLmFsbG93UmVjdXJzZT9fbisxOl9uKSkmJmZuLnB1c2goaSksQ3IoKX1mdW5jdGlvbiBWZShpKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOlBuP1orMTowO2w8Vy5sZW5ndGg7bCsrKXt2YXIgZj1XW2xdO2YmJmYucHJlJiYoVy5zcGxpY2UobCwxKSxsLS0sZigpKX19ZnVuY3Rpb24gb3QoaSl7aWYoZm4ubGVuZ3RoKXt2YXIgbD1bLi4ubmV3IFNldChmbildO2lmKGZuLmxlbmd0aD0wLHNuKXtzbi5wdXNoKC4uLmwpO3JldHVybn1mb3Ioc249bCxzbi5zb3J0KChmLF8pPT5idChmKS1idChfKSksX249MDtfbjxzbi5sZW5ndGg7X24rKylzbltfbl0oKTtzbj1udWxsLF9uPTB9fXZhciBidD1pPT5pLmlkPT1udWxsPzEvMDppLmlkLHRuPShpLGwpPT57dmFyIGY9YnQoaSktYnQobCk7aWYoZj09PTApe2lmKGkucHJlJiYhbC5wcmUpcmV0dXJuLTE7aWYobC5wcmUmJiFpLnByZSlyZXR1cm4gMX1yZXR1cm4gZn07ZnVuY3Rpb24gU24oaSl7c3Q9ITEsUG49ITAsVy5zb3J0KHRuKTt2YXIgbD1kLk5PT1A7dHJ5e2ZvcihaPTA7WjxXLmxlbmd0aDtaKyspe3ZhciBmPVdbWl07ZiYmZi5hY3RpdmUhPT0hMSYmZW4oZixudWxsLDE0KX19ZmluYWxseXtaPTAsVy5sZW5ndGg9MCxvdCgpLFBuPSExLGFyPW51bGwsKFcubGVuZ3RofHxmbi5sZW5ndGgpJiZTbigpfX1TLmRldnRvb2xzPXZvaWQgMDt2YXIgSnQ9W107ZnVuY3Rpb24gcnIoaSxsKXt2YXIgZixfO2lmKFMuZGV2dG9vbHM9aSxTLmRldnRvb2xzKVMuZGV2dG9vbHMuZW5hYmxlZD0hMCxKdC5mb3JFYWNoKEM9Pnt2YXJ7ZXZlbnQ6TixhcmdzOk19PUM7cmV0dXJuIFMuZGV2dG9vbHMuZW1pdChOLC4uLk0pfSksSnQ9W107ZWxzZSBpZih0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmd2luZG93LkhUTUxFbGVtZW50JiYhKChfPShmPXdpbmRvdy5uYXZpZ2F0b3IpPT09bnVsbHx8Zj09PXZvaWQgMD92b2lkIDA6Zi51c2VyQWdlbnQpPT09bnVsbHx8Xz09PXZvaWQgMD92b2lkIDA6Xy5pbmNsdWRlcygianNkb20iKSkpe3ZhciBBPWwuX19WVUVfREVWVE9PTFNfSE9PS19SRVBMQVlfXz1sLl9fVlVFX0RFVlRPT0xTX0hPT0tfUkVQTEFZX198fFtdO0EucHVzaChDPT57cnIoQyxsKX0pLHNldFRpbWVvdXQoKCk9PntTLmRldnRvb2xzfHwobC5fX1ZVRV9ERVZUT09MU19IT09LX1JFUExBWV9fPW51bGwsSnQ9W10pfSwzZTMpfWVsc2UgSnQ9W119ZnVuY3Rpb24gQXIoaSxsKXtpZighaS5pc1VubW91bnRlZCl7Zm9yKHZhciBmPWkudm5vZGUucHJvcHN8fGQuRU1QVFlfT0JKLF89YXJndW1lbnRzLmxlbmd0aCxBPW5ldyBBcnJheShfPjI/Xy0yOjApLEM9MjtDPF87QysrKUFbQy0yXT1hcmd1bWVudHNbQ107dmFyIE49QSxNPWwuc3RhcnRzV2l0aCgidXBkYXRlOiIpLEg9TSYmbC5zbGljZSg3KTtpZihIJiZIIGluIGYpe3ZhciBuZT0iIi5jb25jYXQoSD09PSJtb2RlbFZhbHVlIj8ibW9kZWwiOkgsIk1vZGlmaWVycyIpLHtudW1iZXI6dmUsdHJpbTpMZX09ZltuZV18fGQuRU1QVFlfT0JKO0xlJiYoTj1BLm1hcChmdD0+ZC5pc1N0cmluZyhmdCk/ZnQudHJpbSgpOmZ0KSksdmUmJihOPUEubWFwKGQubG9vc2VUb051bWJlcikpfXZhciB1ZSxrZT1mW3VlPWQudG9IYW5kbGVyS2V5KGwpXXx8Zlt1ZT1kLnRvSGFuZGxlcktleShkLmNhbWVsaXplKGwpKV07IWtlJiZNJiYoa2U9Zlt1ZT1kLnRvSGFuZGxlcktleShkLmh5cGhlbmF0ZShsKSldKSxrZSYmeHQoa2UsaSw2LE4pO3ZhciBZZT1mW3VlKyJPbmNlIl07aWYoWWUpe2lmKCFpLmVtaXR0ZWQpaS5lbWl0dGVkPXt9O2Vsc2UgaWYoaS5lbWl0dGVkW3VlXSlyZXR1cm47aS5lbWl0dGVkW3VlXT0hMCx4dChZZSxpLDYsTil9fX1mdW5jdGlvbiBPcihpLGwpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMSxfPWwuZW1pdHNDYWNoZSxBPV8uZ2V0KGkpO2lmKEEhPT12b2lkIDApcmV0dXJuIEE7dmFyIEM9aS5lbWl0cyxOPXt9LE09ITE7aWYoIWQuaXNGdW5jdGlvbihpKSl7dmFyIEg9bmU9Pnt2YXIgdmU9T3IobmUsbCwhMCk7dmUmJihNPSEwLGQuZXh0ZW5kKE4sdmUpKX07IWYmJmwubWl4aW5zLmxlbmd0aCYmbC5taXhpbnMuZm9yRWFjaChIKSxpLmV4dGVuZHMmJkgoaS5leHRlbmRzKSxpLm1peGlucyYmaS5taXhpbnMuZm9yRWFjaChIKX1yZXR1cm4hQyYmIU0/KGQuaXNPYmplY3QoaSkmJl8uc2V0KGksbnVsbCksbnVsbCk6KGQuaXNBcnJheShDKT9DLmZvckVhY2gobmU9Pk5bbmVdPW51bGwpOmQuZXh0ZW5kKE4sQyksZC5pc09iamVjdChpKSYmXy5zZXQoaSxOKSxOKX1mdW5jdGlvbiBPbihpLGwpe3JldHVybiFpfHwhZC5pc09uKGwpPyExOihsPWwuc2xpY2UoMikucmVwbGFjZSgvT25jZSQvLCIiKSxkLmhhc093bihpLGxbMF0udG9Mb3dlckNhc2UoKStsLnNsaWNlKDEpKXx8ZC5oYXNPd24oaSxkLmh5cGhlbmF0ZShsKSl8fGQuaGFzT3duKGksbCkpfXZhciBkbj1udWxsLFRyPW51bGw7ZnVuY3Rpb24gX2koaSl7dmFyIGw9ZG47cmV0dXJuIGRuPWksVHI9aSYmaS50eXBlLl9fc2NvcGVJZHx8bnVsbCxsfWZ1bmN0aW9uIENvKGkpe1RyPWl9ZnVuY3Rpb24gY2EoKXtUcj1udWxsfXZhciBGaT1pPT5ZbztmdW5jdGlvbiBZbyhpKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ZG47aWYoIWx8fGkuX24pcmV0dXJuIGk7dmFyIGY9ZnVuY3Rpb24oKXtmLl9kJiZFdCgtMSk7dmFyIF89X2kobCksQTt0cnl7QT1pKC4uLmFyZ3VtZW50cyl9ZmluYWxseXtfaShfKSxmLl9kJiZFdCgxKX1yZXR1cm4gQX07cmV0dXJuIGYuX249ITAsZi5fYz0hMCxmLl9kPSEwLGZ9ZnVuY3Rpb24gQW8oKXt9ZnVuY3Rpb24gSmkoaSl7dmFye3R5cGU6bCx2bm9kZTpmLHByb3h5Ol8sd2l0aFByb3h5OkEscHJvcHM6Qyxwcm9wc09wdGlvbnM6W05dLHNsb3RzOk0sYXR0cnM6SCxlbWl0Om5lLHJlbmRlcjp2ZSxyZW5kZXJDYWNoZTpMZSxkYXRhOnVlLHNldHVwU3RhdGU6a2UsY3R4OlllLGluaGVyaXRBdHRyczpmdH09aSxRZSxSZSxtZT1faShpKTt0cnl7aWYoZi5zaGFwZUZsYWcmNCl7dmFyIHllPUF8fF87UWU9RG4odmUuY2FsbCh5ZSx5ZSxMZSxDLGtlLHVlLFllKSksUmU9SH1lbHNle3ZhciBGZT1sO1FlPURuKEZlLmxlbmd0aD4xP0ZlKEMse2F0dHJzOkgsc2xvdHM6TSxlbWl0Om5lfSk6RmUoQyxudWxsKSksUmU9bC5wcm9wcz9IOnVhKEgpfX1jYXRjaChLZSl7ZmUubGVuZ3RoPTAsSShLZSxpLDEpLFFlPXF0KHBlKX12YXIgQWU9UWU7aWYoUmUmJmZ0IT09ITEpe3ZhciBfdD1PYmplY3Qua2V5cyhSZSkse3NoYXBlRmxhZzpBdH09QWU7X3QubGVuZ3RoJiZBdCYoMXw2KSYmKE4mJl90LnNvbWUoZC5pc01vZGVsTGlzdGVuZXIpJiYoUmU9T28oUmUsTikpLEFlPWVpKEFlLFJlKSl9cmV0dXJuIGYuZGlycyYmKEFlPWVpKEFlKSxBZS5kaXJzPUFlLmRpcnM/QWUuZGlycy5jb25jYXQoZi5kaXJzKTpmLmRpcnMpLGYudHJhbnNpdGlvbiYmKEFlLnRyYW5zaXRpb249Zi50cmFuc2l0aW9uKSxRZT1BZSxfaShtZSksUWV9ZnVuY3Rpb24gTXIoaSl7Zm9yKHZhciBsLGY9MDtmPGkubGVuZ3RoO2YrKyl7dmFyIF89aVtmXTtpZihXdChfKSl7aWYoXy50eXBlIT09cGV8fF8uY2hpbGRyZW49PT0idi1pZiIpe2lmKGwpcmV0dXJuO2w9X319ZWxzZSByZXR1cm59cmV0dXJuIGx9dmFyIHVhPWk9Pnt2YXIgbDtmb3IodmFyIGYgaW4gaSkoZj09PSJjbGFzcyJ8fGY9PT0ic3R5bGUifHxkLmlzT24oZikpJiYoKGx8fChsPXt9KSlbZl09aVtmXSk7cmV0dXJuIGx9LE9vPShpLGwpPT57dmFyIGY9e307Zm9yKHZhciBfIGluIGkpKCFkLmlzTW9kZWxMaXN0ZW5lcihfKXx8IShfLnNsaWNlKDkpaW4gbCkpJiYoZltfXT1pW19dKTtyZXR1cm4gZn07ZnVuY3Rpb24gVG8oaSxsLGYpe3Zhcntwcm9wczpfLGNoaWxkcmVuOkEsY29tcG9uZW50OkN9PWkse3Byb3BzOk4sY2hpbGRyZW46TSxwYXRjaEZsYWc6SH09bCxuZT1DLmVtaXRzT3B0aW9ucztpZihsLmRpcnN8fGwudHJhbnNpdGlvbilyZXR1cm4hMDtpZihmJiZIPj0wKXtpZihIJjEwMjQpcmV0dXJuITA7aWYoSCYxNilyZXR1cm4gXz9aaShfLE4sbmUpOiEhTjtpZihIJjgpZm9yKHZhciB2ZT1sLmR5bmFtaWNQcm9wcyxMZT0wO0xlPHZlLmxlbmd0aDtMZSsrKXt2YXIgdWU9dmVbTGVdO2lmKE5bdWVdIT09X1t1ZV0mJiFPbihuZSx1ZSkpcmV0dXJuITB9fWVsc2UgcmV0dXJuKEF8fE0pJiYoIU18fCFNLiRzdGFibGUpPyEwOl89PT1OPyExOl8/Tj9aaShfLE4sbmUpOiEwOiEhTjtyZXR1cm4hMX1mdW5jdGlvbiBaaShpLGwsZil7dmFyIF89T2JqZWN0LmtleXMobCk7aWYoXy5sZW5ndGghPT1PYmplY3Qua2V5cyhpKS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBBPTA7QTxfLmxlbmd0aDtBKyspe3ZhciBDPV9bQV07aWYobFtDXSE9PWlbQ10mJiFPbihmLEMpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGlpKGksbCl7Zm9yKHZhcnt2bm9kZTpmLHBhcmVudDpffT1pO18mJl8uc3ViVHJlZT09PWY7KShmPV8udm5vZGUpLmVsPWwsXz1fLnBhcmVudH12YXIgcW89aT0+aS5fX2lzU3VzcGVuc2UsdW89e25hbWU6IlN1c3BlbnNlIixfX2lzU3VzcGVuc2U6ITAscHJvY2VzcyhpLGwsZixfLEEsQyxOLE0sSCxuZSl7aT09bnVsbD9mbyhsLGYsXyxBLEMsTixNLEgsbmUpOkduKGksbCxmLF8sQSxOLE0sSCxuZSl9LGh5ZHJhdGU6UG8sY3JlYXRlOlhpLG5vcm1hbGl6ZTpRaX0sTm49dW87ZnVuY3Rpb24gaHIoaSxsKXt2YXIgZj1pLnByb3BzJiZpLnByb3BzW2xdO2QuaXNGdW5jdGlvbihmKSYmZigpfWZ1bmN0aW9uIGZvKGksbCxmLF8sQSxDLE4sTSxIKXt2YXJ7cDpuZSxvOntjcmVhdGVFbGVtZW50OnZlfX09SCxMZT12ZSgiZGl2IixsKSx1ZT1pLnN1c3BlbnNlPVhpKGksQSxfLGwsTGUsZixDLE4sTSxIKTtuZShudWxsLHVlLnBlbmRpbmdCcmFuY2g9aS5zc0NvbnRlbnQsTGUsbnVsbCxfLHVlLEMsTiksdWUuZGVwcz4wPyhocihpLCJvblBlbmRpbmciKSxocihpLCJvbkZhbGxiYWNrIiksbmUobnVsbCxpLnNzRmFsbGJhY2ssbCxmLF8sbnVsbCxDLE4pLERyKHVlLGkuc3NGYWxsYmFjaykpOnVlLnJlc29sdmUoKX1mdW5jdGlvbiBHbihpLGwsZixfLEEsQyxOLE0sSCl7dmFye3A6bmUsdW06dmUsbzp7Y3JlYXRlRWxlbWVudDpMZX19PUgsdWU9bC5zdXNwZW5zZT1pLnN1c3BlbnNlO3VlLnZub2RlPWwsbC5lbD1pLmVsO3ZhciBrZT1sLnNzQ29udGVudCxZZT1sLnNzRmFsbGJhY2sse2FjdGl2ZUJyYW5jaDpmdCxwZW5kaW5nQnJhbmNoOlFlLGlzSW5GYWxsYmFjazpSZSxpc0h5ZHJhdGluZzptZX09dWU7aWYoUWUpdWUucGVuZGluZ0JyYW5jaD1rZSxodChrZSxRZSk/KG5lKFFlLGtlLHVlLmhpZGRlbkNvbnRhaW5lcixudWxsLEEsdWUsQyxOLE0pLHVlLmRlcHM8PTA/dWUucmVzb2x2ZSgpOlJlJiYobmUoZnQsWWUsZixfLEEsbnVsbCxDLE4sTSksRHIodWUsWWUpKSk6KHVlLnBlbmRpbmdJZCsrLG1lPyh1ZS5pc0h5ZHJhdGluZz0hMSx1ZS5hY3RpdmVCcmFuY2g9UWUpOnZlKFFlLEEsdWUpLHVlLmRlcHM9MCx1ZS5lZmZlY3RzLmxlbmd0aD0wLHVlLmhpZGRlbkNvbnRhaW5lcj1MZSgiZGl2IixmKSxSZT8obmUobnVsbCxrZSx1ZS5oaWRkZW5Db250YWluZXIsbnVsbCxBLHVlLEMsTixNKSx1ZS5kZXBzPD0wP3VlLnJlc29sdmUoKToobmUoZnQsWWUsZixfLEEsbnVsbCxDLE4sTSksRHIodWUsWWUpKSk6ZnQmJmh0KGtlLGZ0KT8obmUoZnQsa2UsZixfLEEsdWUsQyxOLE0pLHVlLnJlc29sdmUoITApKToobmUobnVsbCxrZSx1ZS5oaWRkZW5Db250YWluZXIsbnVsbCxBLHVlLEMsTixNKSx1ZS5kZXBzPD0wJiZ1ZS5yZXNvbHZlKCkpKTtlbHNlIGlmKGZ0JiZodChrZSxmdCkpbmUoZnQsa2UsZixfLEEsdWUsQyxOLE0pLERyKHVlLGtlKTtlbHNlIGlmKGhyKGwsIm9uUGVuZGluZyIpLHVlLnBlbmRpbmdCcmFuY2g9a2UsdWUucGVuZGluZ0lkKyssbmUobnVsbCxrZSx1ZS5oaWRkZW5Db250YWluZXIsbnVsbCxBLHVlLEMsTixNKSx1ZS5kZXBzPD0wKXVlLnJlc29sdmUoKTtlbHNle3Zhcnt0aW1lb3V0OnllLHBlbmRpbmdJZDpGZX09dWU7eWU+MD9zZXRUaW1lb3V0KCgpPT57dWUucGVuZGluZ0lkPT09RmUmJnVlLmZhbGxiYWNrKFllKX0seWUpOnllPT09MCYmdWUuZmFsbGJhY2soWWUpfX1mdW5jdGlvbiBYaShpLGwsZixfLEEsQyxOLE0sSCxuZSl7dmFyIHZlPWFyZ3VtZW50cy5sZW5ndGg+MTAmJmFyZ3VtZW50c1sxMF0hPT12b2lkIDA/YXJndW1lbnRzWzEwXTohMSx7cDpMZSxtOnVlLHVtOmtlLG46WWUsbzp7cGFyZW50Tm9kZTpmdCxyZW1vdmU6UWV9fT1uZSxSZT1pLnByb3BzP2QudG9OdW1iZXIoaS5wcm9wcy50aW1lb3V0KTp2b2lkIDAsbWU9e3Zub2RlOmkscGFyZW50OmwscGFyZW50Q29tcG9uZW50OmYsaXNTVkc6Tixjb250YWluZXI6XyxoaWRkZW5Db250YWluZXI6QSxhbmNob3I6QyxkZXBzOjAscGVuZGluZ0lkOjAsdGltZW91dDp0eXBlb2YgUmU9PSJudW1iZXIiP1JlOi0xLGFjdGl2ZUJyYW5jaDpudWxsLHBlbmRpbmdCcmFuY2g6bnVsbCxpc0luRmFsbGJhY2s6ITAsaXNIeWRyYXRpbmc6dmUsaXNVbm1vdW50ZWQ6ITEsZWZmZWN0czpbXSxyZXNvbHZlKCl7dmFyIHllPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMSx7dm5vZGU6RmUsYWN0aXZlQnJhbmNoOkFlLHBlbmRpbmdCcmFuY2g6X3QscGVuZGluZ0lkOkF0LGVmZmVjdHM6S2UscGFyZW50Q29tcG9uZW50Ok50LGNvbnRhaW5lcjpMfT1tZTtpZihtZS5pc0h5ZHJhdGluZyltZS5pc0h5ZHJhdGluZz0hMTtlbHNlIGlmKCF5ZSl7dmFyIGo9QWUmJl90LnRyYW5zaXRpb24mJl90LnRyYW5zaXRpb24ubW9kZT09PSJvdXQtaW4iO2omJihBZS50cmFuc2l0aW9uLmFmdGVyTGVhdmU9KCk9PntBdD09PW1lLnBlbmRpbmdJZCYmdWUoX3QsTCxhZSwwKX0pO3ZhcnthbmNob3I6YWV9PW1lO0FlJiYoYWU9WWUoQWUpLGtlKEFlLE50LG1lLCEwKSksanx8dWUoX3QsTCxhZSwwKX1EcihtZSxfdCksbWUucGVuZGluZ0JyYW5jaD1udWxsLG1lLmlzSW5GYWxsYmFjaz0hMTtmb3IodmFyIHJlPW1lLnBhcmVudCxvZT0hMTtyZTspe2lmKHJlLnBlbmRpbmdCcmFuY2gpe3JlLmVmZmVjdHMucHVzaCguLi5LZSksb2U9ITA7YnJlYWt9cmU9cmUucGFyZW50fW9lfHxyaShLZSksbWUuZWZmZWN0cz1bXSxocihGZSwib25SZXNvbHZlIil9LGZhbGxiYWNrKHllKXtpZighIW1lLnBlbmRpbmdCcmFuY2gpe3Zhcnt2bm9kZTpGZSxhY3RpdmVCcmFuY2g6QWUscGFyZW50Q29tcG9uZW50Ol90LGNvbnRhaW5lcjpBdCxpc1NWRzpLZX09bWU7aHIoRmUsIm9uRmFsbGJhY2siKTt2YXIgTnQ9WWUoQWUpLEw9KCk9PnshbWUuaXNJbkZhbGxiYWNrfHwoTGUobnVsbCx5ZSxBdCxOdCxfdCxudWxsLEtlLE0sSCksRHIobWUseWUpKX0saj15ZS50cmFuc2l0aW9uJiZ5ZS50cmFuc2l0aW9uLm1vZGU9PT0ib3V0LWluIjtqJiYoQWUudHJhbnNpdGlvbi5hZnRlckxlYXZlPUwpLG1lLmlzSW5GYWxsYmFjaz0hMCxrZShBZSxfdCxudWxsLCEwKSxqfHxMKCl9fSxtb3ZlKHllLEZlLEFlKXttZS5hY3RpdmVCcmFuY2gmJnVlKG1lLmFjdGl2ZUJyYW5jaCx5ZSxGZSxBZSksbWUuY29udGFpbmVyPXllfSxuZXh0KCl7cmV0dXJuIG1lLmFjdGl2ZUJyYW5jaCYmWWUobWUuYWN0aXZlQnJhbmNoKX0scmVnaXN0ZXJEZXAoeWUsRmUpe3ZhciBBZT0hIW1lLnBlbmRpbmdCcmFuY2g7QWUmJm1lLmRlcHMrKzt2YXIgX3Q9eWUudm5vZGUuZWw7eWUuYXN5bmNEZXAuY2F0Y2goQXQ9PntJKEF0LHllLDApfSkudGhlbihBdD0+e2lmKCEoeWUuaXNVbm1vdW50ZWR8fG1lLmlzVW5tb3VudGVkfHxtZS5wZW5kaW5nSWQhPT15ZS5zdXNwZW5zZUlkKSl7eWUuYXN5bmNSZXNvbHZlZD0hMDt2YXJ7dm5vZGU6S2V9PXllO2VhKHllLEF0LCExKSxfdCYmKEtlLmVsPV90KTt2YXIgTnQ9IV90JiZ5ZS5zdWJUcmVlLmVsO0ZlKHllLEtlLGZ0KF90fHx5ZS5zdWJUcmVlLmVsKSxfdD9udWxsOlllKHllLnN1YlRyZWUpLG1lLE4sSCksTnQmJlFlKE50KSxpaSh5ZSxLZS5lbCksQWUmJi0tbWUuZGVwcz09PTAmJm1lLnJlc29sdmUoKX19KX0sdW5tb3VudCh5ZSxGZSl7bWUuaXNVbm1vdW50ZWQ9ITAsbWUuYWN0aXZlQnJhbmNoJiZrZShtZS5hY3RpdmVCcmFuY2gsZix5ZSxGZSksbWUucGVuZGluZ0JyYW5jaCYma2UobWUucGVuZGluZ0JyYW5jaCxmLHllLEZlKX19O3JldHVybiBtZX1mdW5jdGlvbiBQbyhpLGwsZixfLEEsQyxOLE0sSCl7dmFyIG5lPWwuc3VzcGVuc2U9WGkobCxfLGYsaS5wYXJlbnROb2RlLGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG51bGwsQSxDLE4sTSwhMCksdmU9SChpLG5lLnBlbmRpbmdCcmFuY2g9bC5zc0NvbnRlbnQsZixuZSxDLE4pO3JldHVybiBuZS5kZXBzPT09MCYmbmUucmVzb2x2ZSgpLHZlfWZ1bmN0aW9uIFFpKGkpe3ZhcntzaGFwZUZsYWc6bCxjaGlsZHJlbjpmfT1pLF89bCYzMjtpLnNzQ29udGVudD1iaShfP2YuZGVmYXVsdDpmKSxpLnNzRmFsbGJhY2s9Xz9iaShmLmZhbGxiYWNrKTpxdChwZSl9ZnVuY3Rpb24gYmkoaSl7dmFyIGw7aWYoZC5pc0Z1bmN0aW9uKGkpKXt2YXIgZj0kdCYmaS5fYztmJiYoaS5fZD0hMSxjdCgpKSxpPWkoKSxmJiYoaS5fZD0hMCxsPXdlLGd0KCkpfWlmKGQuaXNBcnJheShpKSl7dmFyIF89TXIoaSk7aT1ffXJldHVybiBpPURuKGkpLGwmJiFpLmR5bmFtaWNDaGlsZHJlbiYmKGkuZHluYW1pY0NoaWxkcmVuPWwuZmlsdGVyKEE9PkEhPT1pKSksaX1mdW5jdGlvbiBKbihpLGwpe2wmJmwucGVuZGluZ0JyYW5jaD9kLmlzQXJyYXkoaSk/bC5lZmZlY3RzLnB1c2goLi4uaSk6bC5lZmZlY3RzLnB1c2goaSk6cmkoaSl9ZnVuY3Rpb24gRHIoaSxsKXtpLmFjdGl2ZUJyYW5jaD1sO3Zhcnt2bm9kZTpmLHBhcmVudENvbXBvbmVudDpffT1pLEE9Zi5lbD1sLmVsO18mJl8uc3ViVHJlZT09PWYmJihfLnZub2RlLmVsPUEsaWkoXyxBKSl9ZnVuY3Rpb24gSW4oaSxsKXtpZihwbil7dmFyIGY9cG4ucHJvdmlkZXMsXz1wbi5wYXJlbnQmJnBuLnBhcmVudC5wcm92aWRlcztfPT09ZiYmKGY9cG4ucHJvdmlkZXM9T2JqZWN0LmNyZWF0ZShfKSksZltpXT1sLHBuLnR5cGUubXBUeXBlPT09ImFwcCImJnBuLmFwcENvbnRleHQuYXBwLnByb3ZpZGUoaSxsKX19ZnVuY3Rpb24gVW4oaSxsKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsXz1wbnx8ZG47aWYoXyl7dmFyIEE9Xy5wYXJlbnQ9PW51bGw/Xy52bm9kZS5hcHBDb250ZXh0JiZfLnZub2RlLmFwcENvbnRleHQucHJvdmlkZXM6Xy5wYXJlbnQucHJvdmlkZXM7aWYoQSYmaSBpbiBBKXJldHVybiBBW2ldO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gZiYmZC5pc0Z1bmN0aW9uKGwpP2wuY2FsbChfLnByb3h5KTpsfX1mdW5jdGlvbiBxcihpLGwpe3JldHVybiBWaShpLG51bGwsbCl9ZnVuY3Rpb24gSW8oaSxsKXtyZXR1cm4gVmkoaSxudWxsLHtmbHVzaDoicG9zdCJ9KX1mdW5jdGlvbiBvaShpLGwpe3JldHVybiBWaShpLG51bGwse2ZsdXNoOiJzeW5jIn0pfXZhciBLcj17fTtmdW5jdGlvbiBzcihpLGwsZil7cmV0dXJuIFZpKGksbCxmKX1mdW5jdGlvbiBWaShpLGwpe3ZhcntpbW1lZGlhdGU6ZixkZWVwOl8sZmx1c2g6QSxvblRyYWNrOkMsb25UcmlnZ2VyOk59PWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpkLkVNUFRZX09CSixNPUUuZ2V0Q3VycmVudFNjb3BlKCk9PT0ocG49PW51bGw/dm9pZCAwOnBuLnNjb3BlKT9wbjpudWxsLEgsbmU9ITEsdmU9ITE7aWYoRS5pc1JlZihpKT8oSD0oKT0+aS52YWx1ZSxuZT1FLmlzU2hhbGxvdyhpKSk6RS5pc1JlYWN0aXZlKGkpPyhIPSgpPT5pLF89ITApOmQuaXNBcnJheShpKT8odmU9ITAsbmU9aS5zb21lKEFlPT5FLmlzUmVhY3RpdmUoQWUpfHxFLmlzU2hhbGxvdyhBZSkpLEg9KCk9PmkubWFwKEFlPT57aWYoRS5pc1JlZihBZSkpcmV0dXJuIEFlLnZhbHVlO2lmKEUuaXNSZWFjdGl2ZShBZSkpcmV0dXJuIEVpKEFlKTtpZihkLmlzRnVuY3Rpb24oQWUpKXJldHVybiBlbihBZSxNLDIpfSkpOmQuaXNGdW5jdGlvbihpKT9sP0g9KCk9PmVuKGksTSwyKTpIPSgpPT57aWYoIShNJiZNLmlzVW5tb3VudGVkKSlyZXR1cm4gdWUmJnVlKCkseHQoaSxNLDMsW2tlXSl9Okg9ZC5OT09QLGwmJl8pe3ZhciBMZT1IO0g9KCk9PkVpKExlKCkpfXZhciB1ZSxrZT1BZT0+e3VlPXllLm9uU3RvcD0oKT0+e2VuKEFlLE0sNCl9fSxZZTtpZihTLmlzSW5TU1JDb21wb25lbnRTZXR1cClpZihrZT1kLk5PT1AsbD9mJiZ4dChsLE0sMyxbSCgpLHZlP1tdOnZvaWQgMCxrZV0pOkgoKSxBPT09InN5bmMiKXt2YXIgZnQ9a2EoKTtZZT1mdC5fX3dhdGNoZXJIYW5kbGVzfHwoZnQuX193YXRjaGVySGFuZGxlcz1bXSl9ZWxzZSByZXR1cm4gZC5OT09QO3ZhciBRZT12ZT9uZXcgQXJyYXkoaS5sZW5ndGgpLmZpbGwoS3IpOktyLFJlPSgpPT57aWYoISF5ZS5hY3RpdmUpaWYobCl7dmFyIEFlPXllLnJ1bigpOyhffHxuZXx8KHZlP0FlLnNvbWUoKF90LEF0KT0+ZC5oYXNDaGFuZ2VkKF90LFFlW0F0XSkpOmQuaGFzQ2hhbmdlZChBZSxRZSkpKSYmKHVlJiZ1ZSgpLHh0KGwsTSwzLFtBZSxRZT09PUtyP3ZvaWQgMDp2ZSYmUWVbMF09PT1Lcj9bXTpRZSxrZV0pLFFlPUFlKX1lbHNlIHllLnJ1bigpfTtSZS5hbGxvd1JlY3Vyc2U9ISFsO3ZhciBtZTtBPT09InN5bmMiP21lPVJlOkE9PT0icG9zdCI/bWU9KCk9Pm9yKFJlLE0mJk0uc3VzcGVuc2UpOihSZS5wcmU9ITAsTSYmKFJlLmlkPU0udWlkKSxtZT0oKT0+d3IoUmUpKTt2YXIgeWU9bmV3IEUuUmVhY3RpdmVFZmZlY3QoSCxtZSk7bD9mP1JlKCk6UWU9eWUucnVuKCk6QT09PSJwb3N0Ij9vcih5ZS5ydW4uYmluZCh5ZSksTSYmTS5zdXNwZW5zZSk6eWUucnVuKCk7dmFyIEZlPSgpPT57eWUuc3RvcCgpLE0mJk0uc2NvcGUmJmQucmVtb3ZlKE0uc2NvcGUuZWZmZWN0cyx5ZSl9O3JldHVybiBZZSYmWWUucHVzaChGZSksRmV9ZnVuY3Rpb24gZW8oaSxsLGYpe3ZhciBfPXRoaXMucHJveHksQT1kLmlzU3RyaW5nKGkpP2kuaW5jbHVkZXMoIi4iKT9GcihfLGkpOigpPT5fW2ldOmkuYmluZChfLF8pLEM7ZC5pc0Z1bmN0aW9uKGwpP0M9bDooQz1sLmhhbmRsZXIsZj1sKTt2YXIgTj1wbjt6bih0aGlzKTt2YXIgTT1WaShBLEMuYmluZChfKSxmKTtyZXR1cm4gTj96bihOKTpDaSgpLE19ZnVuY3Rpb24gRnIoaSxsKXt2YXIgZj1sLnNwbGl0KCIuIik7cmV0dXJuKCk9Pntmb3IodmFyIF89aSxBPTA7QTxmLmxlbmd0aCYmXztBKyspXz1fW2ZbQV1dO3JldHVybiBffX1mdW5jdGlvbiBFaShpLGwpe2lmKCFkLmlzT2JqZWN0KGkpfHxpLl9fdl9za2lwfHwobD1sfHxuZXcgU2V0LGwuaGFzKGkpKSlyZXR1cm4gaTtpZihsLmFkZChpKSxFLmlzUmVmKGkpKUVpKGkudmFsdWUsbCk7ZWxzZSBpZihkLmlzQXJyYXkoaSkpZm9yKHZhciBmPTA7ZjxpLmxlbmd0aDtmKyspRWkoaVtmXSxsKTtlbHNlIGlmKGQuaXNTZXQoaSl8fGQuaXNNYXAoaSkpaS5mb3JFYWNoKEE9PntFaShBLGwpfSk7ZWxzZSBpZihkLmlzUGxhaW5PYmplY3QoaSkpZm9yKHZhciBfIGluIGkpRWkoaVtfXSxsKTtyZXR1cm4gaX1mdW5jdGlvbiBncigpe3ZhciBpPXtpc01vdW50ZWQ6ITEsaXNMZWF2aW5nOiExLGlzVW5tb3VudGluZzohMSxsZWF2aW5nVk5vZGVzOm5ldyBNYXB9O3JldHVybiBYbigoKT0+e2kuaXNNb3VudGVkPSEwfSksbHIoKCk9PntpLmlzVW5tb3VudGluZz0hMH0pLGl9dmFyIGduPVtGdW5jdGlvbixBcnJheV0sSnI9e21vZGU6U3RyaW5nLGFwcGVhcjpCb29sZWFuLHBlcnNpc3RlZDpCb29sZWFuLG9uQmVmb3JlRW50ZXI6Z24sb25FbnRlcjpnbixvbkFmdGVyRW50ZXI6Z24sb25FbnRlckNhbmNlbGxlZDpnbixvbkJlZm9yZUxlYXZlOmduLG9uTGVhdmU6Z24sb25BZnRlckxlYXZlOmduLG9uTGVhdmVDYW5jZWxsZWQ6Z24sb25CZWZvcmVBcHBlYXI6Z24sb25BcHBlYXI6Z24sb25BZnRlckFwcGVhcjpnbixvbkFwcGVhckNhbmNlbGxlZDpnbn0sa3I9e25hbWU6IkJhc2VUcmFuc2l0aW9uIixwcm9wczpKcixzZXR1cChpLGwpe3ZhcntzbG90czpmfT1sLF89Vm4oKSxBPWdyKCksQztyZXR1cm4oKT0+e3ZhciBOPWYuZGVmYXVsdCYmTmkoZi5kZWZhdWx0KCksITApO2lmKCEoIU58fCFOLmxlbmd0aCkpe3ZhciBNPU5bMF07aWYoTi5sZW5ndGg+MSl7Zm9yKHZhciBIIG9mIE4paWYoSC50eXBlIT09cGUpe009SDticmVha319dmFyIG5lPUUudG9SYXcoaSkse21vZGU6dmV9PW5lO2lmKEEuaXNMZWF2aW5nKXJldHVybiBJaShNKTt2YXIgTGU9YWkoTSk7aWYoIUxlKXJldHVybiBJaShNKTt2YXIgdWU9WnIoTGUsbmUsQSxfKTtWcihMZSx1ZSk7dmFyIGtlPV8uc3ViVHJlZSxZZT1rZSYmYWkoa2UpLGZ0PSExLHtnZXRUcmFuc2l0aW9uS2V5OlFlfT1MZS50eXBlO2lmKFFlKXt2YXIgUmU9UWUoKTtDPT09dm9pZCAwP0M9UmU6UmUhPT1DJiYoQz1SZSxmdD0hMCl9aWYoWWUmJlllLnR5cGUhPT1wZSYmKCFodChMZSxZZSl8fGZ0KSl7dmFyIG1lPVpyKFllLG5lLEEsXyk7aWYoVnIoWWUsbWUpLHZlPT09Im91dC1pbiIpcmV0dXJuIEEuaXNMZWF2aW5nPSEwLG1lLmFmdGVyTGVhdmU9KCk9PntBLmlzTGVhdmluZz0hMSxfLnVwZGF0ZS5hY3RpdmUhPT0hMSYmXy51cGRhdGUoKX0sSWkoTSk7dmU9PT0iaW4tb3V0IiYmTGUudHlwZSE9PXBlJiYobWUuZGVsYXlMZWF2ZT0oeWUsRmUsQWUpPT57dmFyIF90PU9lKEEsWWUpO190W1N0cmluZyhZZS5rZXkpXT1ZZSx5ZS5fbGVhdmVDYj0oKT0+e0ZlKCkseWUuX2xlYXZlQ2I9dm9pZCAwLGRlbGV0ZSB1ZS5kZWxheWVkTGVhdmV9LHVlLmRlbGF5ZWRMZWF2ZT1BZX0pfXJldHVybiBNfX19fSxNdD1rcjtmdW5jdGlvbiBPZShpLGwpe3ZhcntsZWF2aW5nVk5vZGVzOmZ9PWksXz1mLmdldChsLnR5cGUpO3JldHVybiBffHwoXz1PYmplY3QuY3JlYXRlKG51bGwpLGYuc2V0KGwudHlwZSxfKSksX31mdW5jdGlvbiBacihpLGwsZixfKXt2YXJ7YXBwZWFyOkEsbW9kZTpDLHBlcnNpc3RlZDpOPSExLG9uQmVmb3JlRW50ZXI6TSxvbkVudGVyOkgsb25BZnRlckVudGVyOm5lLG9uRW50ZXJDYW5jZWxsZWQ6dmUsb25CZWZvcmVMZWF2ZTpMZSxvbkxlYXZlOnVlLG9uQWZ0ZXJMZWF2ZTprZSxvbkxlYXZlQ2FuY2VsbGVkOlllLG9uQmVmb3JlQXBwZWFyOmZ0LG9uQXBwZWFyOlFlLG9uQWZ0ZXJBcHBlYXI6UmUsb25BcHBlYXJDYW5jZWxsZWQ6bWV9PWwseWU9U3RyaW5nKGkua2V5KSxGZT1PZShmLGkpLEFlPShLZSxOdCk9PntLZSYmeHQoS2UsXyw5LE50KX0sX3Q9KEtlLE50KT0+e3ZhciBMPU50WzFdO0FlKEtlLE50KSxkLmlzQXJyYXkoS2UpP0tlLmV2ZXJ5KGo9PmoubGVuZ3RoPD0xKSYmTCgpOktlLmxlbmd0aDw9MSYmTCgpfSxBdD17bW9kZTpDLHBlcnNpc3RlZDpOLGJlZm9yZUVudGVyKEtlKXt2YXIgTnQ9TTtpZighZi5pc01vdW50ZWQpaWYoQSlOdD1mdHx8TTtlbHNlIHJldHVybjtLZS5fbGVhdmVDYiYmS2UuX2xlYXZlQ2IoITApO3ZhciBMPUZlW3llXTtMJiZodChpLEwpJiZMLmVsLl9sZWF2ZUNiJiZMLmVsLl9sZWF2ZUNiKCksQWUoTnQsW0tlXSl9LGVudGVyKEtlKXt2YXIgTnQ9SCxMPW5lLGo9dmU7aWYoIWYuaXNNb3VudGVkKWlmKEEpTnQ9UWV8fEgsTD1SZXx8bmUsaj1tZXx8dmU7ZWxzZSByZXR1cm47dmFyIGFlPSExLHJlPUtlLl9lbnRlckNiPW9lPT57YWV8fChhZT0hMCxvZT9BZShqLFtLZV0pOkFlKEwsW0tlXSksQXQuZGVsYXllZExlYXZlJiZBdC5kZWxheWVkTGVhdmUoKSxLZS5fZW50ZXJDYj12b2lkIDApfTtOdD9fdChOdCxbS2UscmVdKTpyZSgpfSxsZWF2ZShLZSxOdCl7dmFyIEw9U3RyaW5nKGkua2V5KTtpZihLZS5fZW50ZXJDYiYmS2UuX2VudGVyQ2IoITApLGYuaXNVbm1vdW50aW5nKXJldHVybiBOdCgpO0FlKExlLFtLZV0pO3ZhciBqPSExLGFlPUtlLl9sZWF2ZUNiPXJlPT57anx8KGo9ITAsTnQoKSxyZT9BZShZZSxbS2VdKTpBZShrZSxbS2VdKSxLZS5fbGVhdmVDYj12b2lkIDAsRmVbTF09PT1pJiZkZWxldGUgRmVbTF0pfTtGZVtMXT1pLHVlP190KHVlLFtLZSxhZV0pOmFlKCl9LGNsb25lKEtlKXtyZXR1cm4gWnIoS2UsbCxmLF8pfX07cmV0dXJuIEF0fWZ1bmN0aW9uIElpKGkpe2lmKGtpKGkpKXJldHVybiBpPWVpKGkpLGkuY2hpbGRyZW49bnVsbCxpfWZ1bmN0aW9uIGFpKGkpe3JldHVybiBraShpKT9pLmNoaWxkcmVuP2kuY2hpbGRyZW5bMF06dm9pZCAwOml9ZnVuY3Rpb24gVnIoaSxsKXtpLnNoYXBlRmxhZyY2JiZpLmNvbXBvbmVudD9WcihpLmNvbXBvbmVudC5zdWJUcmVlLGwpOmkuc2hhcGVGbGFnJjEyOD8oaS5zc0NvbnRlbnQudHJhbnNpdGlvbj1sLmNsb25lKGkuc3NDb250ZW50KSxpLnNzRmFsbGJhY2sudHJhbnNpdGlvbj1sLmNsb25lKGkuc3NGYWxsYmFjaykpOmkudHJhbnNpdGlvbj1sfWZ1bmN0aW9uIE5pKGkpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsZj1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxfPVtdLEE9MCxDPTA7QzxpLmxlbmd0aDtDKyspe3ZhciBOPWlbQ10sTT1mPT1udWxsP04ua2V5OlN0cmluZyhmKStTdHJpbmcoTi5rZXkhPW51bGw/Ti5rZXk6Qyk7Ti50eXBlPT09dGU/KE4ucGF0Y2hGbGFnJjEyOCYmQSsrLF89Xy5jb25jYXQoTmkoTi5jaGlsZHJlbixsLE0pKSk6KGx8fE4udHlwZSE9PXBlKSYmXy5wdXNoKE0hPW51bGw/ZWkoTix7a2V5Ok19KTpOKX1pZihBPjEpZm9yKHZhciBIPTA7SDxfLmxlbmd0aDtIKyspX1tIXS5wYXRjaEZsYWc9LTI7cmV0dXJuIF99ZnVuY3Rpb24gcHIoaSl7cmV0dXJuIGQuaXNGdW5jdGlvbihpKT97c2V0dXA6aSxuYW1lOmkubmFtZX06aX12YXIgJHI9aT0+ISFpLnR5cGUuX19hc3luY0xvYWRlcjtmdW5jdGlvbiBYcihpKXtkLmlzRnVuY3Rpb24oaSkmJihpPXtsb2FkZXI6aX0pO3Zhcntsb2FkZXI6bCxsb2FkaW5nQ29tcG9uZW50OmYsZXJyb3JDb21wb25lbnQ6XyxkZWxheTpBPTIwMCx0aW1lb3V0OkMsc3VzcGVuc2libGU6Tj0hMCxvbkVycm9yOk19PWksSD1udWxsLG5lLHZlPTAsTGU9KCk9Pih2ZSsrLEg9bnVsbCx1ZSgpKSx1ZT0oKT0+e3ZhciBrZTtyZXR1cm4gSHx8KGtlPUg9bCgpLmNhdGNoKFllPT57aWYoWWU9WWUgaW5zdGFuY2VvZiBFcnJvcj9ZZTpuZXcgRXJyb3IoU3RyaW5nKFllKSksTSlyZXR1cm4gbmV3IFByb21pc2UoKGZ0LFFlKT0+e3ZhciBSZT0oKT0+ZnQoTGUoKSksbWU9KCk9PlFlKFllKTtNKFllLFJlLG1lLHZlKzEpfSk7dGhyb3cgWWV9KS50aGVuKFllPT5rZSE9PUgmJkg/SDooWWUmJihZZS5fX2VzTW9kdWxlfHxZZVtTeW1ib2wudG9TdHJpbmdUYWddPT09Ik1vZHVsZSIpJiYoWWU9WWUuZGVmYXVsdCksbmU9WWUsWWUpKSl9O3JldHVybiBwcih7bmFtZToiQXN5bmNDb21wb25lbnRXcmFwcGVyIixfX2FzeW5jTG9hZGVyOnVlLGdldCBfX2FzeW5jUmVzb2x2ZWQoKXtyZXR1cm4gbmV9LHNldHVwKCl7dmFyIGtlPXBuO2lmKG5lKXJldHVybigpPT5QcihuZSxrZSk7dmFyIFllPW1lPT57SD1udWxsLEkobWUsa2UsMTMpfTtpZihOJiZrZS5zdXNwZW5zZXx8Uy5pc0luU1NSQ29tcG9uZW50U2V0dXApcmV0dXJuIHVlKCkudGhlbihtZT0+KCk9PlByKG1lLGtlKSkuY2F0Y2gobWU9PihZZShtZSksKCk9Pl8/cXQoXyx7ZXJyb3I6bWV9KTpudWxsKSk7dmFyIGZ0PUUucmVmKCExKSxRZT1FLnJlZigpLFJlPUUucmVmKCEhQSk7cmV0dXJuIEEmJnNldFRpbWVvdXQoKCk9PntSZS52YWx1ZT0hMX0sQSksQyE9bnVsbCYmc2V0VGltZW91dCgoKT0+e2lmKCFmdC52YWx1ZSYmIVFlLnZhbHVlKXt2YXIgbWU9bmV3IEVycm9yKCJBc3luYyBjb21wb25lbnQgdGltZWQgb3V0IGFmdGVyICIuY29uY2F0KEMsIm1zLiIpKTtZZShtZSksUWUudmFsdWU9bWV9fSxDKSx1ZSgpLnRoZW4oKCk9PntmdC52YWx1ZT0hMCxrZS5wYXJlbnQmJmtpKGtlLnBhcmVudC52bm9kZSkmJndyKGtlLnBhcmVudC51cGRhdGUpfSkuY2F0Y2gobWU9PntZZShtZSksUWUudmFsdWU9bWV9KSwoKT0+e2lmKGZ0LnZhbHVlJiZuZSlyZXR1cm4gUHIobmUsa2UpO2lmKFFlLnZhbHVlJiZfKXJldHVybiBxdChfLHtlcnJvcjpRZS52YWx1ZX0pO2lmKGYmJiFSZS52YWx1ZSlyZXR1cm4gcXQoZil9fX0pfWZ1bmN0aW9uIFByKGksbCl7dmFye3JlZjpmLHByb3BzOl8sY2hpbGRyZW46QSxjZTpDfT1sLnZub2RlLE49cXQoaSxfLEEpO3JldHVybiBOLnJlZj1mLE4uY2U9QyxkZWxldGUgbC52bm9kZS5jZSxOfXZhciBraT1pPT5pLnR5cGUuX19pc0tlZXBBbGl2ZSxsbj17bmFtZToiS2VlcEFsaXZlIixfX2lzS2VlcEFsaXZlOiEwLHByb3BzOntpbmNsdWRlOltTdHJpbmcsUmVnRXhwLEFycmF5XSxleGNsdWRlOltTdHJpbmcsUmVnRXhwLEFycmF5XSxtYXg6W1N0cmluZyxOdW1iZXJdfSxzZXR1cChpLGwpe3ZhcntzbG90czpmfT1sLF89Vm4oKSxBPV8uY3R4O2lmKCFBLnJlbmRlcmVyKXJldHVybigpPT57dmFyIHllPWYuZGVmYXVsdCYmZi5kZWZhdWx0KCk7cmV0dXJuIHllJiZ5ZS5sZW5ndGg9PT0xP3llWzBdOnllfTt2YXIgQz1uZXcgTWFwLE49bmV3IFNldCxNPW51bGwsSD1fLnN1c3BlbnNlLHtyZW5kZXJlcjp7cDpuZSxtOnZlLHVtOkxlLG86e2NyZWF0ZUVsZW1lbnQ6dWV9fX09QSxrZT11ZSgiZGl2IixudWxsKTtBLmFjdGl2YXRlPSh5ZSxGZSxBZSxfdCxBdCk9Pnt2YXIgS2U9eWUuY29tcG9uZW50O3ZlKHllLEZlLEFlLDAsSCksbmUoS2Uudm5vZGUseWUsRmUsQWUsS2UsSCxfdCx5ZS5zbG90U2NvcGVJZHMsQXQpLG9yKCgpPT57S2UuaXNEZWFjdGl2YXRlZD0hMSxLZS5hJiZkLmludm9rZUFycmF5Rm5zKEtlLmEpO3ZhciBOdD15ZS5wcm9wcyYmeWUucHJvcHMub25Wbm9kZU1vdW50ZWQ7TnQmJnpyKE50LEtlLnBhcmVudCx5ZSl9LEgpfSxBLmRlYWN0aXZhdGU9eWU9Pnt2YXIgRmU9eWUuY29tcG9uZW50O3ZlKHllLGtlLG51bGwsMSxIKSxvcigoKT0+e0ZlLmRhJiZkLmludm9rZUFycmF5Rm5zKEZlLmRhKTt2YXIgQWU9eWUucHJvcHMmJnllLnByb3BzLm9uVm5vZGVVbm1vdW50ZWQ7QWUmJnpyKEFlLEZlLnBhcmVudCx5ZSksRmUuaXNEZWFjdGl2YXRlZD0hMH0sSCl9O2Z1bmN0aW9uIFllKHllKXt5aSh5ZSksTGUoeWUsXyxILCEwKX1mdW5jdGlvbiBmdCh5ZSl7Qy5mb3JFYWNoKChGZSxBZSk9Pnt2YXIgX3Q9X28oRmUudHlwZSk7X3QmJigheWV8fCF5ZShfdCkpJiZRZShBZSl9KX1mdW5jdGlvbiBRZSh5ZSl7dmFyIEZlPUMuZ2V0KHllKTshTXx8IWh0KEZlLE0pP1llKEZlKTpNJiZ5aShNKSxDLmRlbGV0ZSh5ZSksTi5kZWxldGUoeWUpfXNyKCgpPT5baS5pbmNsdWRlLGkuZXhjbHVkZV0seWU9Pnt2YXJbRmUsQWVdPXllO0ZlJiZmdChfdD0+VXIoRmUsX3QpKSxBZSYmZnQoX3Q9PiFVcihBZSxfdCkpfSx7Zmx1c2g6InBvc3QiLGRlZXA6ITB9KTt2YXIgUmU9bnVsbCxtZT0oKT0+e1JlIT1udWxsJiZDLnNldChSZSxSaShfLnN1YlRyZWUpKX07cmV0dXJuIFhuKG1lKSxRbihtZSksbHIoKCk9PntDLmZvckVhY2goeWU9Pnt2YXJ7c3ViVHJlZTpGZSxzdXNwZW5zZTpBZX09XyxfdD1SaShGZSk7aWYoeWUudHlwZT09PV90LnR5cGUmJnllLmtleT09PV90LmtleSl7eWkoX3QpO3ZhciBBdD1fdC5jb21wb25lbnQuZGE7QXQmJm9yKEF0LEFlKTtyZXR1cm59WWUoeWUpfSl9KSwoKT0+e2lmKFJlPW51bGwsIWYuZGVmYXVsdClyZXR1cm4gbnVsbDt2YXIgeWU9Zi5kZWZhdWx0KCksRmU9eWVbMF07aWYoeWUubGVuZ3RoPjEpcmV0dXJuIE09bnVsbCx5ZTtpZighV3QoRmUpfHwhKEZlLnNoYXBlRmxhZyY0KSYmIShGZS5zaGFwZUZsYWcmMTI4KSlyZXR1cm4gTT1udWxsLEZlO3ZhciBBZT1SaShGZSksX3Q9QWUudHlwZSxBdD1fbygkcihBZSk/QWUudHlwZS5fX2FzeW5jUmVzb2x2ZWR8fHt9Ol90KSx7aW5jbHVkZTpLZSxleGNsdWRlOk50LG1heDpMfT1pO2lmKEtlJiYoIUF0fHwhVXIoS2UsQXQpKXx8TnQmJkF0JiZVcihOdCxBdCkpcmV0dXJuIE09QWUsRmU7dmFyIGo9QWUua2V5PT1udWxsP190OkFlLmtleSxhZT1DLmdldChqKTtyZXR1cm4gQWUuZWwmJihBZT1laShBZSksRmUuc2hhcGVGbGFnJjEyOCYmKEZlLnNzQ29udGVudD1BZSkpLFJlPWosYWU/KEFlLmVsPWFlLmVsLEFlLmNvbXBvbmVudD1hZS5jb21wb25lbnQsQWUudHJhbnNpdGlvbiYmVnIoQWUsQWUudHJhbnNpdGlvbiksQWUuc2hhcGVGbGFnfD01MTIsTi5kZWxldGUoaiksTi5hZGQoaikpOihOLmFkZChqKSxMJiZOLnNpemU+cGFyc2VJbnQoTCwxMCkmJlFlKE4udmFsdWVzKCkubmV4dCgpLnZhbHVlKSksQWUuc2hhcGVGbGFnfD0yNTYsTT1BZSxxbyhGZS50eXBlKT9GZTpBZX19fSwkaT1sbjtmdW5jdGlvbiBVcihpLGwpe3JldHVybiBkLmlzQXJyYXkoaSk/aS5zb21lKGY9PlVyKGYsbCkpOmQuaXNTdHJpbmcoaSk/aS5zcGxpdCgiLCIpLmluY2x1ZGVzKGwpOmQuaXNSZWdFeHAoaSk/aS50ZXN0KGwpOiExfWZ1bmN0aW9uIHRvKGksbCl7SHIoaSwiYSIsbCl9ZnVuY3Rpb24gYm4oaSxsKXtIcihpLCJkYSIsbCl9ZnVuY3Rpb24gSHIoaSxsKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06cG4sXz1pLl9fd2RjfHwoaS5fX3dkYz0oKT0+e2Zvcih2YXIgQz1mO0M7KXtpZihDLmlzRGVhY3RpdmF0ZWQpcmV0dXJuO0M9Qy5wYXJlbnR9cmV0dXJuIGkoKX0pO2lmKHZyKGwsXyxmKSxmKWZvcih2YXIgQT1mLnBhcmVudDtBJiZBLnBhcmVudDspa2koQS5wYXJlbnQudm5vZGUpJiZpcihfLGwsZixBKSxBPUEucGFyZW50fWZ1bmN0aW9uIGlyKGksbCxmLF8pe3ZhciBBPXZyKGwsaSxfLCEwKTtobygoKT0+e2QucmVtb3ZlKF9bbF0sQSl9LGYpfWZ1bmN0aW9uIHlpKGkpe2kuc2hhcGVGbGFnJj1+MjU2LGkuc2hhcGVGbGFnJj1+NTEyfWZ1bmN0aW9uIFJpKGkpe3JldHVybiBpLnNoYXBlRmxhZyYxMjg/aS5zc0NvbnRlbnQ6aX1mdW5jdGlvbiB2cihpLGwpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTpwbixfPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMTtpZihmKXtpZihCLmlzUm9vdEhvb2soaSkmJmYhPT1mLnJvb3QmJihmPWYucm9vdCxCLmlzUm9vdEltbWVkaWF0ZUhvb2soaSkpKXt2YXIgQT1mLnByb3h5O3h0KGwuYmluZChBKSxmLGksQi5PTl9MT0FEPT09aT9bQS4kcGFnZS5vcHRpb25zXTpbXSl9dmFye19fcGFnZV9jb250YWluZXJfXzpDfT1mLnJvb3Qudm5vZGU7QyYmQy5vbkluamVjdEhvb2soaSk7dmFyIE49ZltpXXx8KGZbaV09W10pLE09bC5fX3dlaHx8KGwuX193ZWg9ZnVuY3Rpb24oKXtpZighZi5pc1VubW91bnRlZCl7RS5wYXVzZVRyYWNraW5nKCksem4oZik7Zm9yKHZhciBIPWFyZ3VtZW50cy5sZW5ndGgsbmU9bmV3IEFycmF5KEgpLHZlPTA7dmU8SDt2ZSsrKW5lW3ZlXT1hcmd1bWVudHNbdmVdO3ZhciBMZT14dChsLGYsaSxuZSk7cmV0dXJuIENpKCksRS5yZXNldFRyYWNraW5nKCksTGV9fSk7cmV0dXJuIF8/Ti51bnNoaWZ0KE0pOk4ucHVzaChNKSxNfX12YXIgUXI9aT0+ZnVuY3Rpb24obCl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnBuO3JldHVybighUy5pc0luU1NSQ29tcG9uZW50U2V0dXB8fGk9PT0ic3AiKSYmdnIoaSxmdW5jdGlvbigpe3JldHVybiBsKC4uLmFyZ3VtZW50cyl9LGYpfSxabj1RcigiYm0iKSxYbj1RcigibSIpLEhuPVFyKCJidSIpLFFuPVFyKCJ1IiksbHI9UXIoImJ1bSIpLGhvPVFyKCJ1bSIpLGdvPVFyKCJzcCIpLE5vPVFyKCJydGciKSxubz1RcigicnRjIik7ZnVuY3Rpb24ga28oaSl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOnBuO3ZyKCJlYyIsaSxsKX1mdW5jdGlvbiBqcihpLGwpe3ZhciBmPWRuO2lmKGY9PT1udWxsKXJldHVybiBpO2Zvcih2YXIgXz1MaShmKXx8Zi5wcm94eSxBPWkuZGlyc3x8KGkuZGlycz1bXSksQz0wO0M8bC5sZW5ndGg7QysrKXt2YXJbTixNLEgsbmU9ZC5FTVBUWV9PQkpdPWxbQ107TiYmKGQuaXNGdW5jdGlvbihOKSYmKE49e21vdW50ZWQ6Tix1cGRhdGVkOk59KSxOLmRlZXAmJkVpKE0pLEEucHVzaCh7ZGlyOk4saW5zdGFuY2U6Xyx2YWx1ZTpNLG9sZFZhbHVlOnZvaWQgMCxhcmc6SCxtb2RpZmllcnM6bmV9KSl9cmV0dXJuIGl9ZnVuY3Rpb24gUnIoaSxsLGYsXyl7Zm9yKHZhciBBPWkuZGlycyxDPWwmJmwuZGlycyxOPTA7TjxBLmxlbmd0aDtOKyspe3ZhciBNPUFbTl07QyYmKE0ub2xkVmFsdWU9Q1tOXS52YWx1ZSk7dmFyIEg9TS5kaXJbX107SCYmKEUucGF1c2VUcmFja2luZygpLHh0KEgsZiw4LFtpLmVsLE0saSxsXSksRS5yZXNldFRyYWNraW5nKCkpfX12YXIgcm89ImNvbXBvbmVudHMiLEtvPSJkaXJlY3RpdmVzIjtmdW5jdGlvbiB4aShpLGwpe3JldHVybiBIaShybyxpLCEwLGwpfHxpfXZhciBVaT1TeW1ib2woKTtmdW5jdGlvbiBSbyhpKXtyZXR1cm4gZC5pc1N0cmluZyhpKT9IaShybyxpLCExKXx8aTppfHxVaX1mdW5jdGlvbiBCaShpKXtyZXR1cm4gSGkoS28saSl9ZnVuY3Rpb24gSGkoaSxsKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsXz1kbnx8cG47aWYoXyl7dmFyIEE9Xy50eXBlO2lmKGk9PT1ybyl7dmFyIEM9X28oQSwhMSk7aWYoQyYmKEM9PT1sfHxDPT09ZC5jYW1lbGl6ZShsKXx8Qz09PWQuY2FwaXRhbGl6ZShkLmNhbWVsaXplKGwpKSkpcmV0dXJuIEF9dmFyIE49eG8oX1tpXXx8QVtpXSxsKXx8eG8oXy5hcHBDb250ZXh0W2ldLGwpO3JldHVybiFOJiZmP0E6Tn19ZnVuY3Rpb24geG8oaSxsKXtyZXR1cm4gaSYmKGlbbF18fGlbZC5jYW1lbGl6ZShsKV18fGlbZC5jYXBpdGFsaXplKGQuY2FtZWxpemUobCkpXSl9ZnVuY3Rpb24geChpLGwsZixfKXt2YXIgQSxDPWYmJmZbX107aWYoZC5pc0FycmF5KGkpfHxkLmlzU3RyaW5nKGkpKXtBPW5ldyBBcnJheShpLmxlbmd0aCk7Zm9yKHZhciBOPTAsTT1pLmxlbmd0aDtOPE07TisrKUFbTl09bChpW05dLE4sdm9pZCAwLEMmJkNbTl0pfWVsc2UgaWYodHlwZW9mIGk9PSJudW1iZXIiKXtBPW5ldyBBcnJheShpKTtmb3IodmFyIEg9MDtIPGk7SCsrKUFbSF09bChIKzEsSCx2b2lkIDAsQyYmQ1tIXSl9ZWxzZSBpZihkLmlzT2JqZWN0KGkpKWlmKGlbU3ltYm9sLml0ZXJhdG9yXSlBPUFycmF5LmZyb20oaSwoa2UsWWUpPT5sKGtlLFllLHZvaWQgMCxDJiZDW1llXSkpO2Vsc2V7dmFyIG5lPU9iamVjdC5rZXlzKGkpO0E9bmV3IEFycmF5KG5lLmxlbmd0aCk7Zm9yKHZhciB2ZT0wLExlPW5lLmxlbmd0aDt2ZTxMZTt2ZSsrKXt2YXIgdWU9bmVbdmVdO0FbdmVdPWwoaVt1ZV0sdWUsdmUsQyYmQ1t2ZV0pfX1lbHNlIEE9W107cmV0dXJuIGYmJihmW19dPUEpLEF9ZnVuY3Rpb24gUShpLGwpe2Zvcih2YXIgZj1mdW5jdGlvbihBKXt2YXIgQz1sW0FdO2lmKGQuaXNBcnJheShDKSlmb3IodmFyIE49MDtOPEMubGVuZ3RoO04rKylpW0NbTl0ubmFtZV09Q1tOXS5mbjtlbHNlIEMmJihpW0MubmFtZV09Qy5rZXk/ZnVuY3Rpb24oKXt2YXIgTT1DLmZuKC4uLmFyZ3VtZW50cyk7cmV0dXJuIE0mJihNLmtleT1DLmtleSksTX06Qy5mbil9LF89MDtfPGwubGVuZ3RoO18rKylmKF8pO3JldHVybiBpfWZ1bmN0aW9uIGhlKGksbCl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOnt9LF89YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAsQT1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtpZihkbi5pc0NFfHxkbi5wYXJlbnQmJiRyKGRuLnBhcmVudCkmJmRuLnBhcmVudC5pc0NFKXJldHVybiBsIT09ImRlZmF1bHQiJiYoZi5uYW1lPWwpLHF0KCJzbG90IixmLF8mJl8oKSk7dmFyIEM9aVtsXTtDJiZDLl9jJiYoQy5fZD0hMSksY3QoKTt2YXIgTj1DJiZzZShDKGYpKSxNPWNuKHRlLHtrZXk6Zi5rZXl8fE4mJk4ua2V5fHwiXyIuY29uY2F0KGwpfSxOfHwoXz9fKCk6W10pLE4mJmkuXz09PTE/NjQ6LTIpO3JldHVybiFBJiZNLnNjb3BlSWQmJihNLnNsb3RTY29wZUlkcz1bTS5zY29wZUlkKyItcyJdKSxDJiZDLl9jJiYoQy5fZD0hMCksTX1mdW5jdGlvbiBzZShpKXtyZXR1cm4gaS5zb21lKGw9Pld0KGwpPyEobC50eXBlPT09cGV8fGwudHlwZT09PXRlJiYhc2UobC5jaGlsZHJlbikpOiEwKT9pOm51bGx9ZnVuY3Rpb24gZGUoaSxsKXt2YXIgZj17fTtmb3IodmFyIF8gaW4gaSlmW2wmJi9bQS1aXS8udGVzdChfKT8ib246Ii5jb25jYXQoXyk6ZC50b0hhbmRsZXJLZXkoXyldPWlbX107cmV0dXJuIGZ9dmFyIG10PWk9Pmk/dXMoaSk/TGkoaSl8fGkucHJveHk6bXQoaS5wYXJlbnQpOm51bGwsSz1kLmV4dGVuZChPYmplY3QuY3JlYXRlKG51bGwpLHskOmk9PmksJGVsOmk9Pmkudm5vZGUuZWwsJGRhdGE6aT0+aS5kYXRhLCRwcm9wczppPT5pLnByb3BzLCRhdHRyczppPT5pLmF0dHJzLCRzbG90czppPT5pLnNsb3RzLCRyZWZzOmk9PmkucmVmcywkcGFyZW50Omk9Pm10KGkucGFyZW50KSwkcm9vdDppPT5tdChpLnJvb3QpLCRlbWl0Omk9PmkuZW1pdCwkb3B0aW9uczppPT5tcihpKSwkZm9yY2VVcGRhdGU6aT0+aS5mfHwoaS5mPSgpPT53cihpLnVwZGF0ZSkpLCRuZXh0VGljazppPT5pLm58fChpLm49U3IuYmluZChpLnByb3h5KSksJHdhdGNoOmk9PmVvLmJpbmQoaSl9KSx6PShpLGwpPT5pIT09ZC5FTVBUWV9PQkomJiFpLl9faXNTY3JpcHRTZXR1cCYmZC5oYXNPd24oaSxsKSxpZT17Z2V0KGksbCl7dmFye186Zn09aSx7Y3R4Ol8sc2V0dXBTdGF0ZTpBLGRhdGE6Qyxwcm9wczpOLGFjY2Vzc0NhY2hlOk0sdHlwZTpILGFwcENvbnRleHQ6bmV9PWYsdmU7aWYobFswXSE9PSIkIil7dmFyIExlPU1bbF07aWYoTGUhPT12b2lkIDApc3dpdGNoKExlKXtjYXNlIDE6cmV0dXJuIEFbbF07Y2FzZSAyOnJldHVybiBDW2xdO2Nhc2UgNDpyZXR1cm4gX1tsXTtjYXNlIDM6cmV0dXJuIE5bbF19ZWxzZXtpZih6KEEsbCkpcmV0dXJuIE1bbF09MSxBW2xdO2lmKEMhPT1kLkVNUFRZX09CSiYmZC5oYXNPd24oQyxsKSlyZXR1cm4gTVtsXT0yLENbbF07aWYoKHZlPWYucHJvcHNPcHRpb25zWzBdKSYmZC5oYXNPd24odmUsbCkpcmV0dXJuIE1bbF09MyxOW2xdO2lmKF8hPT1kLkVNUFRZX09CSiYmZC5oYXNPd24oXyxsKSlyZXR1cm4gTVtsXT00LF9bbF07bnQmJihNW2xdPTApfX12YXIgdWU9S1tsXSxrZSxZZTtpZih1ZSlyZXR1cm4gbD09PSIkYXR0cnMiJiZFLnRyYWNrKGYsImdldCIsbCksdWUoZik7aWYoKGtlPUguX19jc3NNb2R1bGVzKSYmKGtlPWtlW2xdKSlyZXR1cm4ga2U7aWYoXyE9PWQuRU1QVFlfT0JKJiZkLmhhc093bihfLGwpKXJldHVybiBNW2xdPTQsX1tsXTtpZihZZT1uZS5jb25maWcuZ2xvYmFsUHJvcGVydGllcyxkLmhhc093bihZZSxsKSlyZXR1cm4gWWVbbF19LHNldChpLGwsZil7dmFye199PWkse2RhdGE6QSxzZXR1cFN0YXRlOkMsY3R4Ok59PV87cmV0dXJuIHooQyxsKT8oQ1tsXT1mLCEwKTpBIT09ZC5FTVBUWV9PQkomJmQuaGFzT3duKEEsbCk/KEFbbF09ZiwhMCk6ZC5oYXNPd24oXy5wcm9wcyxsKXx8bFswXT09PSIkIiYmbC5zbGljZSgxKWluIF8/ITE6KE5bbF09ZiwhMCl9LGhhcyhpLGwpe3ZhcntfOntkYXRhOmYsc2V0dXBTdGF0ZTpfLGFjY2Vzc0NhY2hlOkEsY3R4OkMsYXBwQ29udGV4dDpOLHByb3BzT3B0aW9uczpNfX09aSxIO3JldHVybiEhQVtsXXx8ZiE9PWQuRU1QVFlfT0JKJiZkLmhhc093bihmLGwpfHx6KF8sbCl8fChIPU1bMF0pJiZkLmhhc093bihILGwpfHxkLmhhc093bihDLGwpfHxkLmhhc093bihLLGwpfHxkLmhhc093bihOLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLGwpfSxkZWZpbmVQcm9wZXJ0eShpLGwsZil7cmV0dXJuIGYuZ2V0IT1udWxsP2kuXy5hY2Nlc3NDYWNoZVtsXT0wOmQuaGFzT3duKGYsInZhbHVlIikmJnRoaXMuc2V0KGksbCxmLnZhbHVlLG51bGwpLFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoaSxsLGYpfX0seGU9ZC5leHRlbmQoe30saWUse2dldChpLGwpe2lmKGwhPT1TeW1ib2wudW5zY29wYWJsZXMpcmV0dXJuIGllLmdldChpLGwsaSl9LGhhcyhpLGwpe3ZhciBmPWxbMF0hPT0iXyImJiFkLmlzR2xvYmFsbHlXaGl0ZWxpc3RlZChsKTtyZXR1cm4gZn19KSxudD0hMDtmdW5jdGlvbiBZdChpKXt2YXIgbD1tcihpKSxmPWkucHJveHksXz1pLmN0eDtudD0hMSxsLmJlZm9yZUNyZWF0ZSYmam4obC5iZWZvcmVDcmVhdGUsaSwiYmMiKTt2YXJ7ZGF0YTpBLGNvbXB1dGVkOkMsbWV0aG9kczpOLHdhdGNoOk0scHJvdmlkZTpILGluamVjdDpuZSxjcmVhdGVkOnZlLGJlZm9yZU1vdW50OkxlLG1vdW50ZWQ6dWUsYmVmb3JlVXBkYXRlOmtlLHVwZGF0ZWQ6WWUsYWN0aXZhdGVkOmZ0LGRlYWN0aXZhdGVkOlFlLGJlZm9yZURlc3Ryb3k6UmUsYmVmb3JlVW5tb3VudDptZSxkZXN0cm95ZWQ6eWUsdW5tb3VudGVkOkZlLHJlbmRlcjpBZSxyZW5kZXJUcmFja2VkOl90LHJlbmRlclRyaWdnZXJlZDpBdCxlcnJvckNhcHR1cmVkOktlLHNlcnZlclByZWZldGNoOk50LGV4cG9zZTpMLGluaGVyaXRBdHRyczpqLGNvbXBvbmVudHM6YWUsZGlyZWN0aXZlczpyZSxmaWx0ZXJzOm9lfT1sLCRlPW51bGw7aWYobmUmJlRuKG5lLF8sJGUsaS5hcHBDb250ZXh0LmNvbmZpZy51bndyYXBJbmplY3RlZFJlZiksTilmb3IodmFyIHJ0IGluIE4pe3ZhciBxZT1OW3J0XTtkLmlzRnVuY3Rpb24ocWUpJiYoX1tydF09cWUuYmluZChmKSl9aWYoQSl7dmFyIEplPUEuY2FsbChmLGYpO2QuaXNPYmplY3QoSmUpJiYoaS5kYXRhPUUucmVhY3RpdmUoSmUpKX1pZihudD0hMCxDKXt2YXIgVWU9ZnVuY3Rpb24oaG4pe3ZhciBtbj1DW2huXSx1cj1kLmlzRnVuY3Rpb24obW4pP21uLmJpbmQoZixmKTpkLmlzRnVuY3Rpb24obW4uZ2V0KT9tbi5nZXQuYmluZChmLGYpOmQuTk9PUCxuaT0hZC5pc0Z1bmN0aW9uKG1uKSYmZC5pc0Z1bmN0aW9uKG1uLnNldCk/bW4uc2V0LmJpbmQoZik6ZC5OT09QLEt0PWRzKHtnZXQ6dXIsc2V0Om5pfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8saG4se2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+S3QudmFsdWUsc2V0OnJuPT5LdC52YWx1ZT1ybn0pfTtmb3IodmFyIFZ0IGluIEMpVWUoVnQpfWlmKE0pZm9yKHZhciBwdCBpbiBNKXhyKE1bcHRdLF8sZixwdCk7aWYoSCl7dmFyIGt0PWQuaXNGdW5jdGlvbihIKT9ILmNhbGwoZik6SDtSZWZsZWN0Lm93bktleXMoa3QpLmZvckVhY2goaG49PntJbihobixrdFtobl0pfSl9dmUmJmpuKHZlLGksImMiKTtmdW5jdGlvbiBSdChobixtbil7ZC5pc0FycmF5KG1uKT9tbi5mb3JFYWNoKHVyPT5obih1ci5iaW5kKGYpKSk6bW4mJmhuKG1uLmJpbmQoZikpfWlmKFJ0KFpuLExlKSxSdChYbix1ZSksUnQoSG4sa2UpLFJ0KFFuLFllKSxSdCh0byxmdCksUnQoYm4sUWUpLFJ0KGtvLEtlKSxSdChubyxfdCksUnQoTm8sQXQpLFJ0KGxyLG1lKSxSdChobyxGZSksUnQoZ28sTnQpLGQuaXNBcnJheShMKSlpZihMLmxlbmd0aCl7dmFyIHhuPWkuZXhwb3NlZHx8KGkuZXhwb3NlZD17fSk7TC5mb3JFYWNoKGhuPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHhuLGhuLHtnZXQ6KCk9PmZbaG5dLHNldDptbj0+Zltobl09bW59KX0pfWVsc2UgaS5leHBvc2VkfHwoaS5leHBvc2VkPXt9KTtBZSYmaS5yZW5kZXI9PT1kLk5PT1AmJihpLnJlbmRlcj1BZSksaiE9bnVsbCYmKGkuaW5oZXJpdEF0dHJzPWopLGFlJiYoaS5jb21wb25lbnRzPWFlKSxyZSYmKGkuZGlyZWN0aXZlcz1yZSk7dmFyIGtuPWkuYXBwQ29udGV4dC5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kYXBwbHlPcHRpb25zO2tuJiZrbihsLGksZil9ZnVuY3Rpb24gVG4oaSxsKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITE7ZC5pc0FycmF5KGkpJiYoaT1ZbihpKSk7dmFyIF89ZnVuY3Rpb24oQyl7dmFyIE49aVtDXSxNPXZvaWQgMDtkLmlzT2JqZWN0KE4pPyJkZWZhdWx0ImluIE4/TT1VbihOLmZyb218fEMsTi5kZWZhdWx0LCEwKTpNPVVuKE4uZnJvbXx8Qyk6TT1VbihOKSxFLmlzUmVmKE0pJiZmP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLEMse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+TS52YWx1ZSxzZXQ6SD0+TS52YWx1ZT1IfSk6bFtDXT1NfTtmb3IodmFyIEEgaW4gaSlfKEEpfWZ1bmN0aW9uIGpuKGksbCxmKXt4dChkLmlzQXJyYXkoaSk/aS5tYXAoXz0+Xy5iaW5kKGwucHJveHkpKTppLmJpbmQobC5wcm94eSksbCxmKX1mdW5jdGlvbiB4cihpLGwsZixfKXt2YXIgQT1fLmluY2x1ZGVzKCIuIik/RnIoZixfKTooKT0+ZltfXTtpZihkLmlzU3RyaW5nKGkpKXt2YXIgQz1sW2ldO2QuaXNGdW5jdGlvbihDKSYmc3IoQSxDKX1lbHNlIGlmKGQuaXNGdW5jdGlvbihpKSlzcihBLGkuYmluZChmKSk7ZWxzZSBpZihkLmlzT2JqZWN0KGkpKWlmKGQuaXNBcnJheShpKSlpLmZvckVhY2goTT0+eHIoTSxsLGYsXykpO2Vsc2V7dmFyIE49ZC5pc0Z1bmN0aW9uKGkuaGFuZGxlcik/aS5oYW5kbGVyLmJpbmQoZik6bFtpLmhhbmRsZXJdO2QuaXNGdW5jdGlvbihOKSYmc3IoQSxOLGkpfX1mdW5jdGlvbiBtcihpKXt2YXIgbD1pLnR5cGUse21peGluczpmLGV4dGVuZHM6X309bCx7bWl4aW5zOkEsb3B0aW9uc0NhY2hlOkMsY29uZmlnOntvcHRpb25NZXJnZVN0cmF0ZWdpZXM6Tn19PWkuYXBwQ29udGV4dCxNPUMuZ2V0KGwpLEg7cmV0dXJuIE0/SD1NOiFBLmxlbmd0aCYmIWYmJiFfP0g9bDooSD17fSxBLmxlbmd0aCYmQS5mb3JFYWNoKG5lPT5wbyhILG5lLE4sITApKSxwbyhILGwsTikpLGQuaXNPYmplY3QobCkmJkMuc2V0KGwsSCksSH1mdW5jdGlvbiBwbyhpLGwsZil7dmFyIF89YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLHttaXhpbnM6QSxleHRlbmRzOkN9PWw7QyYmcG8oaSxDLGYsITApLEEmJkEuZm9yRWFjaChIPT5wbyhpLEgsZiwhMCkpO2Zvcih2YXIgTiBpbiBsKWlmKCEoXyYmTj09PSJleHBvc2UiKSl7dmFyIE09dm9bTl18fGYmJmZbTl07aVtOXT1NP00oaVtOXSxsW05dKTpsW05dfXJldHVybiBpfXZhciB2bz17ZGF0YTpKbyxwcm9wczplcixlbWl0czplcixtZXRob2RzOmVyLGNvbXB1dGVkOmVyLGJlZm9yZUNyZWF0ZTpCbixjcmVhdGVkOkJuLGJlZm9yZU1vdW50OkJuLG1vdW50ZWQ6Qm4sYmVmb3JlVXBkYXRlOkJuLHVwZGF0ZWQ6Qm4sYmVmb3JlRGVzdHJveTpCbixiZWZvcmVVbm1vdW50OkJuLGRlc3Ryb3llZDpCbix1bm1vdW50ZWQ6Qm4sYWN0aXZhdGVkOkJuLGRlYWN0aXZhdGVkOkJuLGVycm9yQ2FwdHVyZWQ6Qm4sc2VydmVyUHJlZmV0Y2g6Qm4sY29tcG9uZW50czplcixkaXJlY3RpdmVzOmVyLHdhdGNoOlNpLHByb3ZpZGU6Sm8saW5qZWN0Om1vfTtmdW5jdGlvbiBKbyhpLGwpe3JldHVybiBsP2k/ZnVuY3Rpb24oKXtyZXR1cm4gZC5leHRlbmQoZC5pc0Z1bmN0aW9uKGkpP2kuY2FsbCh0aGlzLHRoaXMpOmksZC5pc0Z1bmN0aW9uKGwpP2wuY2FsbCh0aGlzLHRoaXMpOmwpfTpsOml9ZnVuY3Rpb24gbW8oaSxsKXtyZXR1cm4gZXIoWW4oaSksWW4obCkpfWZ1bmN0aW9uIFluKGkpe2lmKGQuaXNBcnJheShpKSl7Zm9yKHZhciBsPXt9LGY9MDtmPGkubGVuZ3RoO2YrKylsW2lbZl1dPWlbZl07cmV0dXJuIGx9cmV0dXJuIGl9ZnVuY3Rpb24gQm4oaSxsKXtyZXR1cm4gaT9bLi4ubmV3IFNldChbXS5jb25jYXQoaSxsKSldOmx9ZnVuY3Rpb24gZXIoaSxsKXtyZXR1cm4gaT9kLmV4dGVuZChkLmV4dGVuZChPYmplY3QuY3JlYXRlKG51bGwpLGkpLGwpOmx9ZnVuY3Rpb24gU2koaSxsKXtpZighaSlyZXR1cm4gbDtpZighbClyZXR1cm4gaTt2YXIgZj1kLmV4dGVuZChPYmplY3QuY3JlYXRlKG51bGwpLGkpO2Zvcih2YXIgXyBpbiBsKWZbX109Qm4oaVtfXSxsW19dKTtyZXR1cm4gZn1mdW5jdGlvbiBpcyhpLGwsZil7dmFyIF89YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLEE9e30sQz17fTtkLmRlZihDLFJuLDEpLGkucHJvcHNEZWZhdWx0cz1PYmplY3QuY3JlYXRlKG51bGwpLF9yKGksbCxBLEMpO2Zvcih2YXIgTiBpbiBpLnByb3BzT3B0aW9uc1swXSlOIGluIEF8fChBW05dPXZvaWQgMCk7Zj9pLnByb3BzPV8/QTpFLnNoYWxsb3dSZWFjdGl2ZShBKTppLnR5cGUucHJvcHM/aS5wcm9wcz1BOmkucHJvcHM9QyxpLmF0dHJzPUN9ZnVuY3Rpb24gZmEoaSxsLGYsXyl7dmFye3Byb3BzOkEsYXR0cnM6Qyx2bm9kZTp7cGF0Y2hGbGFnOk59fT1pLE09RS50b1JhdyhBKSxbSF09aS5wcm9wc09wdGlvbnMsbmU9ITE7aWYoKF98fE4+MCkmJiEoTiYxNikpe2lmKE4mOClmb3IodmFyIHZlPWkudm5vZGUuZHluYW1pY1Byb3BzLExlPTA7TGU8dmUubGVuZ3RoO0xlKyspe3ZhciB1ZT12ZVtMZV07aWYoIU9uKGkuZW1pdHNPcHRpb25zLHVlKSl7dmFyIGtlPWxbdWVdO2lmKEgpaWYoZC5oYXNPd24oQyx1ZSkpa2UhPT1DW3VlXSYmKENbdWVdPWtlLG5lPSEwKTtlbHNle3ZhciBZZT1kLmNhbWVsaXplKHVlKTtBW1llXT1QYShILE0sWWUsa2UsaSwhMSl9ZWxzZSBrZSE9PUNbdWVdJiYoQ1t1ZV09a2UsbmU9ITApfX19ZWxzZXtfcihpLGwsQSxDKSYmKG5lPSEwKTt2YXIgZnQ7Zm9yKHZhciBRZSBpbiBNKSghbHx8IWQuaGFzT3duKGwsUWUpJiYoKGZ0PWQuaHlwaGVuYXRlKFFlKSk9PT1RZXx8IWQuaGFzT3duKGwsZnQpKSkmJihIP2YmJihmW1FlXSE9PXZvaWQgMHx8ZltmdF0hPT12b2lkIDApJiYoQVtRZV09UGEoSCxNLFFlLHZvaWQgMCxpLCEwKSk6ZGVsZXRlIEFbUWVdKTtpZihDIT09TSlmb3IodmFyIFJlIGluIEMpKCFsfHwhZC5oYXNPd24obCxSZSkmJiEwKSYmKGRlbGV0ZSBDW1JlXSxuZT0hMCl9bmUmJkUudHJpZ2dlcihpLCJzZXQiLCIkYXR0cnMiKX1mdW5jdGlvbiBfcihpLGwsZixfKXt2YXJbQSxDXT1pLnByb3BzT3B0aW9ucyxOPSExLE07aWYobCl7Zm9yKHZhciBIIGluIGwpaWYoIWQuaXNSZXNlcnZlZFByb3AoSCkpe3ZhciBuZT1sW0hdLHZlPXZvaWQgMDtBJiZkLmhhc093bihBLHZlPWQuY2FtZWxpemUoSCkpPyFDfHwhQy5pbmNsdWRlcyh2ZSk/Zlt2ZV09bmU6KE18fChNPXt9KSlbdmVdPW5lOk9uKGkuZW1pdHNPcHRpb25zLEgpfHwoIShIIGluIF8pfHxuZSE9PV9bSF0pJiYoX1tIXT1uZSxOPSEwKX19aWYoQylmb3IodmFyIExlPUUudG9SYXcoZiksdWU9TXx8ZC5FTVBUWV9PQkosa2U9MDtrZTxDLmxlbmd0aDtrZSsrKXt2YXIgWWU9Q1trZV07ZltZZV09UGEoQSxMZSxZZSx1ZVtZZV0saSwhZC5oYXNPd24odWUsWWUpKX1yZXR1cm4gTn1mdW5jdGlvbiBQYShpLGwsZixfLEEsQyl7dmFyIE49aVtmXTtpZihOIT1udWxsKXt2YXIgTT1kLmhhc093bihOLCJkZWZhdWx0Iik7aWYoTSYmXz09PXZvaWQgMCl7dmFyIEg9Ti5kZWZhdWx0O2lmKE4udHlwZSE9PUZ1bmN0aW9uJiZkLmlzRnVuY3Rpb24oSCkpe3Zhcntwcm9wc0RlZmF1bHRzOm5lfT1BO2YgaW4gbmU/Xz1uZVtmXTooem4oQSksXz1uZVtmXT1ILmNhbGwobnVsbCxsKSxDaSgpKX1lbHNlIF89SH1OWzBdJiYoQyYmIU0/Xz0hMTpOWzFdJiYoXz09PSIifHxfPT09ZC5oeXBoZW5hdGUoZikpJiYoXz0hMCkpfXJldHVybiBffWZ1bmN0aW9uICRhKGksbCl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLF89bC5wcm9wc0NhY2hlLEE9Xy5nZXQoaSk7aWYoQSlyZXR1cm4gQTt2YXIgQz1pLnByb3BzLE49e30sTT1bXSxIPSExO2lmKCFkLmlzRnVuY3Rpb24oaSkpe3ZhciBuZT15ZT0+e0g9ITA7dmFyW0ZlLEFlXT0kYSh5ZSxsLCEwKTtkLmV4dGVuZChOLEZlKSxBZSYmTS5wdXNoKC4uLkFlKX07IWYmJmwubWl4aW5zLmxlbmd0aCYmbC5taXhpbnMuZm9yRWFjaChuZSksaS5leHRlbmRzJiZuZShpLmV4dGVuZHMpLGkubWl4aW5zJiZpLm1peGlucy5mb3JFYWNoKG5lKX1pZighQyYmIUgpcmV0dXJuIGQuaXNPYmplY3QoaSkmJl8uc2V0KGksZC5FTVBUWV9BUlIpLGQuRU1QVFlfQVJSO2lmKGQuaXNBcnJheShDKSlmb3IodmFyIHZlPTA7dmU8Qy5sZW5ndGg7dmUrKyl7dmFyIExlPWQuY2FtZWxpemUoQ1t2ZV0pO1VhKExlKSYmKE5bTGVdPWQuRU1QVFlfT0JKKX1lbHNlIGlmKEMpZm9yKHZhciB1ZSBpbiBDKXt2YXIga2U9ZC5jYW1lbGl6ZSh1ZSk7aWYoVWEoa2UpKXt2YXIgWWU9Q1t1ZV0sZnQ9TltrZV09ZC5pc0FycmF5KFllKXx8ZC5pc0Z1bmN0aW9uKFllKT97dHlwZTpZZX06T2JqZWN0LmFzc2lnbih7fSxZZSk7aWYoZnQpe3ZhciBRZT1kYShCb29sZWFuLGZ0LnR5cGUpLFJlPWRhKFN0cmluZyxmdC50eXBlKTtmdFswXT1RZT4tMSxmdFsxXT1SZTwwfHxRZTxSZSwoUWU+LTF8fGQuaGFzT3duKGZ0LCJkZWZhdWx0IikpJiZNLnB1c2goa2UpfX19dmFyIG1lPVtOLE1dO3JldHVybiBkLmlzT2JqZWN0KGkpJiZfLnNldChpLG1lKSxtZX1mdW5jdGlvbiBVYShpKXtyZXR1cm4gaVswXSE9PSIkIn1mdW5jdGlvbiBIYShpKXt2YXIgbD1pJiZpLnRvU3RyaW5nKCkubWF0Y2goL15ccyooZnVuY3Rpb258Y2xhc3MpIChcdyspLyk7cmV0dXJuIGw/bFsyXTppPT09bnVsbD8ibnVsbCI6IiJ9ZnVuY3Rpb24gamEoaSxsKXtyZXR1cm4gSGEoaSk9PT1IYShsKX1mdW5jdGlvbiBkYShpLGwpe3JldHVybiBkLmlzQXJyYXkobCk/bC5maW5kSW5kZXgoZj0+amEoZixpKSk6ZC5pc0Z1bmN0aW9uKGwpJiZqYShsLGkpPzA6LTF9dmFyIElhPWk9PmlbMF09PT0iXyJ8fGk9PT0iJHN0YWJsZSIsTG49aT0+ZC5pc0FycmF5KGkpP2kubWFwKERuKTpbRG4oaSldLEJvPShpLGwsZik9PntpZihsLl9uKXJldHVybiBsO3ZhciBfPVlvKGZ1bmN0aW9uKCl7cmV0dXJuIExuKGwoLi4uYXJndW1lbnRzKSl9LGYpO3JldHVybiBfLl9jPSExLF99LFpvPShpLGwsZik9Pnt2YXIgXz1pLl9jdHg7Zm9yKHZhciBBIGluIGkpaWYoIUlhKEEpKXt2YXIgQz1pW0FdO2QuaXNGdW5jdGlvbihDKT9sW0FdPUJvKEEsQyxfKTpDIT1udWxsJiZmdW5jdGlvbigpe3ZhciBOPUxuKEMpO2xbQV09KCk9Pk59KCl9fSxqaT0oaSxsKT0+e3ZhciBmPUxuKGwpO2kuc2xvdHMuZGVmYXVsdD0oKT0+Zn0sb3M9KGksbCk9PntpZihpLnZub2RlLnNoYXBlRmxhZyYzMil7dmFyIGY9bC5fO2Y/KGkuc2xvdHM9RS50b1JhdyhsKSxkLmRlZihsLCJfIixmKSk6Wm8obCxpLnNsb3RzPXt9KX1lbHNlIGkuc2xvdHM9e30sbCYmamkoaSxsKTtkLmRlZihpLnNsb3RzLFJuLDEpfSxhcz0oaSxsLGYpPT57dmFye3Zub2RlOl8sc2xvdHM6QX09aSxDPSEwLE49ZC5FTVBUWV9PQko7aWYoXy5zaGFwZUZsYWcmMzIpe3ZhciBNPWwuXztNP2YmJk09PT0xP0M9ITE6KGQuZXh0ZW5kKEEsbCksIWYmJk09PT0xJiZkZWxldGUgQS5fKTooQz0hbC4kc3RhYmxlLFpvKGwsQSkpLE49bH1lbHNlIGwmJihqaShpLGwpLE49e2RlZmF1bHQ6MX0pO2lmKEMpZm9yKHZhciBIIGluIEEpIUlhKEgpJiYhKEggaW4gTikmJmRlbGV0ZSBBW0hdfTtmdW5jdGlvbiBMbygpe3JldHVybnthcHA6bnVsbCxjb25maWc6e2lzTmF0aXZlVGFnOmQuTk8scGVyZm9ybWFuY2U6ITEsZ2xvYmFsUHJvcGVydGllczp7fSxvcHRpb25NZXJnZVN0cmF0ZWdpZXM6e30sZXJyb3JIYW5kbGVyOnZvaWQgMCx3YXJuSGFuZGxlcjp2b2lkIDAsY29tcGlsZXJPcHRpb25zOnt9fSxtaXhpbnM6W10sY29tcG9uZW50czp7fSxkaXJlY3RpdmVzOnt9LHByb3ZpZGVzOk9iamVjdC5jcmVhdGUobnVsbCksb3B0aW9uc0NhY2hlOm5ldyBXZWFrTWFwLHByb3BzQ2FjaGU6bmV3IFdlYWtNYXAsZW1pdHNDYWNoZTpuZXcgV2Vha01hcH19dmFyIHNzPTA7ZnVuY3Rpb24gaW8oaSxsKXtyZXR1cm4gZnVuY3Rpb24oXyl7dmFyIEE9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGw7ZC5pc0Z1bmN0aW9uKF8pfHwoXz1PYmplY3QuYXNzaWduKHt9LF8pKSxBIT1udWxsJiYhZC5pc09iamVjdChBKSYmKEE9bnVsbCk7dmFyIEM9TG8oKSxOPW5ldyBTZXQsTT0hMSxIPUMuYXBwPXtfdWlkOnNzKyssX2NvbXBvbmVudDpfLF9wcm9wczpBLF9jb250YWluZXI6bnVsbCxfY29udGV4dDpDLF9pbnN0YW5jZTpudWxsLHZlcnNpb246ZGwsZ2V0IGNvbmZpZygpe3JldHVybiBDLmNvbmZpZ30sc2V0IGNvbmZpZyhuZSl7fSx1c2UobmUpe2Zvcih2YXIgdmU9YXJndW1lbnRzLmxlbmd0aCxMZT1uZXcgQXJyYXkodmU+MT92ZS0xOjApLHVlPTE7dWU8dmU7dWUrKylMZVt1ZS0xXT1hcmd1bWVudHNbdWVdO3JldHVybiBOLmhhcyhuZSl8fChuZSYmZC5pc0Z1bmN0aW9uKG5lLmluc3RhbGwpPyhOLmFkZChuZSksbmUuaW5zdGFsbChILC4uLkxlKSk6ZC5pc0Z1bmN0aW9uKG5lKSYmKE4uYWRkKG5lKSxuZShILC4uLkxlKSkpLEh9LG1peGluKG5lKXtyZXR1cm4gQy5taXhpbnMuaW5jbHVkZXMobmUpfHxDLm1peGlucy5wdXNoKG5lKSxIfSxjb21wb25lbnQobmUsdmUpe3JldHVybiB2ZT8oQy5jb21wb25lbnRzW25lXT12ZSxIKTpDLmNvbXBvbmVudHNbbmVdfSxkaXJlY3RpdmUobmUsdmUpe3JldHVybiB2ZT8oQy5kaXJlY3RpdmVzW25lXT12ZSxIKTpDLmRpcmVjdGl2ZXNbbmVdfSxtb3VudChuZSx2ZSxMZSl7aWYoIU0pe3ZhciB1ZT1xdChfLEEpO3JldHVybiB1ZS5hcHBDb250ZXh0PUMsdmUmJmw/bCh1ZSxuZSk6aSh1ZSxuZSxMZSksTT0hMCxILl9jb250YWluZXI9bmUsbmUuX192dWVfYXBwX189SCxILl9pbnN0YW5jZT11ZS5jb21wb25lbnQsTGkodWUuY29tcG9uZW50KXx8dWUuY29tcG9uZW50LnByb3h5fX0sdW5tb3VudCgpe00mJihpKG51bGwsSC5fY29udGFpbmVyKSxkZWxldGUgSC5fY29udGFpbmVyLl9fdnVlX2FwcF9fKX0scHJvdmlkZShuZSx2ZSl7cmV0dXJuIEMucHJvdmlkZXNbbmVdPXZlLEh9fTtyZXR1cm4gSH19ZnVuY3Rpb24gc2koaSxsLGYsXyl7dmFyIEE9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiExO2lmKGQuaXNBcnJheShpKSl7aS5mb3JFYWNoKChmdCxRZSk9PnNpKGZ0LGwmJihkLmlzQXJyYXkobCk/bFtRZV06bCksZixfLEEpKTtyZXR1cm59aWYoISgkcihfKSYmIUEpKXt2YXIgQz1fLnNoYXBlRmxhZyY0P0xpKF8uY29tcG9uZW50KXx8Xy5jb21wb25lbnQucHJveHk6Xy5lbCxOPUE/bnVsbDpDLHtpOk0scjpIfT1pLG5lPWwmJmwucix2ZT1NLnJlZnM9PT1kLkVNUFRZX09CSj9NLnJlZnM9e306TS5yZWZzLExlPU0uc2V0dXBTdGF0ZTtpZihuZSE9bnVsbCYmbmUhPT1IJiYoZC5pc1N0cmluZyhuZSk/KHZlW25lXT1udWxsLGQuaGFzT3duKExlLG5lKSYmKExlW25lXT1udWxsKSk6RS5pc1JlZihuZSkmJihuZS52YWx1ZT1udWxsKSksZC5pc0Z1bmN0aW9uKEgpKWVuKEgsTSwxMixbTix2ZV0pO2Vsc2V7dmFyIHVlPWQuaXNTdHJpbmcoSCksa2U9RS5pc1JlZihIKTtpZih1ZXx8a2Upe3ZhciBZZT0oKT0+e2lmKGkuZil7dmFyIGZ0PXVlP2QuaGFzT3duKExlLEgpP0xlW0hdOnZlW0hdOkgudmFsdWU7QT9kLmlzQXJyYXkoZnQpJiZkLnJlbW92ZShmdCxDKTpkLmlzQXJyYXkoZnQpP2Z0LmluY2x1ZGVzKEMpfHxmdC5wdXNoKEMpOnVlPyh2ZVtIXT1bQ10sZC5oYXNPd24oTGUsSCkmJihMZVtIXT12ZVtIXSkpOihILnZhbHVlPVtDXSxpLmsmJih2ZVtpLmtdPUgudmFsdWUpKX1lbHNlIHVlPyh2ZVtIXT1OLGQuaGFzT3duKExlLEgpJiYoTGVbSF09TikpOmtlJiYoSC52YWx1ZT1OLGkuayYmKHZlW2kua109TikpfTtOPyhZZS5pZD0tMSxvcihZZSxmKSk6WWUoKX19fX12YXIgd2k9ITEsemk9aT0+L3N2Zy8udGVzdChpLm5hbWVzcGFjZVVSSSkmJmkudGFnTmFtZSE9PSJmb3JlaWduT2JqZWN0IixsaT1pPT5pLm5vZGVUeXBlPT09ODtmdW5jdGlvbiBjcihpKXt2YXJ7bXQ6bCxwOmYsbzp7cGF0Y2hQcm9wOl8sY3JlYXRlVGV4dDpBLG5leHRTaWJsaW5nOkMscGFyZW50Tm9kZTpOLHJlbW92ZTpNLGluc2VydDpILGNyZWF0ZUNvbW1lbnQ6bmV9fT1pLHZlPShSZSxtZSk9PntpZighbWUuaGFzQ2hpbGROb2RlcygpKXtmKG51bGwsUmUsbWUpLG90KCksbWUuX3Zub2RlPVJlO3JldHVybn13aT0hMSxMZShtZS5maXJzdENoaWxkLFJlLG51bGwsbnVsbCxudWxsKSxvdCgpLG1lLl92bm9kZT1SZSx3aSYmY29uc29sZS5lcnJvcigiSHlkcmF0aW9uIGNvbXBsZXRlZCBidXQgY29udGFpbnMgbWlzbWF0Y2hlcy4iKX0sTGU9ZnVuY3Rpb24oUmUsbWUseWUsRmUsQWUpe3ZhciBfdD1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITEsQXQ9bGkoUmUpJiZSZS5kYXRhPT09IlsiLEtlPSgpPT5mdChSZSxtZSx5ZSxGZSxBZSxBdCkse3R5cGU6TnQscmVmOkwsc2hhcGVGbGFnOmoscGF0Y2hGbGFnOmFlfT1tZSxyZT1SZS5ub2RlVHlwZTttZS5lbD1SZSxhZT09PS0yJiYoX3Q9ITEsbWUuZHluYW1pY0NoaWxkcmVuPW51bGwpO3ZhciBvZT1udWxsO3N3aXRjaChOdCl7Y2FzZSBjZTpyZSE9PTM/bWUuY2hpbGRyZW49PT0iIj8oSChtZS5lbD1BKCIiLFJlLnBhcmVudE5vZGUpLE4oUmUpLFJlKSxvZT1SZSk6b2U9S2UoKTooUmUuZGF0YSE9PW1lLmNoaWxkcmVuJiYod2k9ITAsUmUuZGF0YT1tZS5jaGlsZHJlbiksb2U9QyhSZSkpO2JyZWFrO2Nhc2UgcGU6cmUhPT04fHxBdD9vZT1LZSgpOm9lPUMoUmUpO2JyZWFrO2Nhc2UgUGU6aWYoQXQmJihSZT1DKFJlKSxyZT1SZS5ub2RlVHlwZSkscmU9PT0xfHxyZT09PTMpe29lPVJlO2Zvcih2YXIgJGU9IW1lLmNoaWxkcmVuLmxlbmd0aCxydD0wO3J0PG1lLnN0YXRpY0NvdW50O3J0KyspJGUmJihtZS5jaGlsZHJlbis9b2Uubm9kZVR5cGU9PT0xP29lLm91dGVySFRNTDpvZS5kYXRhKSxydD09PW1lLnN0YXRpY0NvdW50LTEmJihtZS5hbmNob3I9b2UpLG9lPUMob2UpO3JldHVybiBBdD9DKG9lKTpvZX1lbHNlIEtlKCk7YnJlYWs7Y2FzZSB0ZTpBdD9vZT1ZZShSZSxtZSx5ZSxGZSxBZSxfdCk6b2U9S2UoKTticmVhaztkZWZhdWx0OmlmKGomMSlyZSE9PTF8fG1lLnR5cGUudG9Mb3dlckNhc2UoKSE9PVJlLnRhZ05hbWUudG9Mb3dlckNhc2UoKT9vZT1LZSgpOm9lPXVlKFJlLG1lLHllLEZlLEFlLF90KTtlbHNlIGlmKGomNil7bWUuc2xvdFNjb3BlSWRzPUFlO3ZhciBxZT1OKFJlKTtpZihsKG1lLHFlLG51bGwseWUsRmUsemkocWUpLF90KSxvZT1BdD9RZShSZSk6QyhSZSksb2UmJmxpKG9lKSYmb2UuZGF0YT09PSJ0ZWxlcG9ydCBlbmQiJiYob2U9QyhvZSkpLCRyKG1lKSl7dmFyIEplO0F0PyhKZT1xdCh0ZSksSmUuYW5jaG9yPW9lP29lLnByZXZpb3VzU2libGluZzpxZS5sYXN0Q2hpbGQpOkplPVJlLm5vZGVUeXBlPT09Mz9HaSgiIik6cXQoImRpdiIpLEplLmVsPVJlLG1lLmNvbXBvbmVudC5zdWJUcmVlPUplfX1lbHNlIGomNjQ/cmUhPT04P29lPUtlKCk6b2U9bWUudHlwZS5oeWRyYXRlKFJlLG1lLHllLEZlLEFlLF90LGksa2UpOmomMTI4JiYob2U9bWUudHlwZS5oeWRyYXRlKFJlLG1lLHllLEZlLHppKE4oUmUpKSxBZSxfdCxpLExlKSl9cmV0dXJuIEwhPW51bGwmJnNpKEwsbnVsbCxGZSxtZSksb2V9LHVlPShSZSxtZSx5ZSxGZSxBZSxfdCk9PntfdD1fdHx8ISFtZS5keW5hbWljQ2hpbGRyZW47dmFye3R5cGU6QXQscHJvcHM6S2UscGF0Y2hGbGFnOk50LHNoYXBlRmxhZzpMLGRpcnM6an09bWUsYWU9QXQ9PT0iaW5wdXQiJiZqfHxBdD09PSJvcHRpb24iO2lmKGFlfHxOdCE9PS0xKXtpZihqJiZScihtZSxudWxsLHllLCJjcmVhdGVkIiksS2UpaWYoYWV8fCFfdHx8TnQmKDE2fDMyKSlmb3IodmFyIHJlIGluIEtlKShhZSYmcmUuZW5kc1dpdGgoInZhbHVlIil8fGQuaXNPbihyZSkmJiFkLmlzUmVzZXJ2ZWRQcm9wKHJlKSkmJl8oUmUscmUsbnVsbCxLZVtyZV0sITEsdm9pZCAwLHllKTtlbHNlIEtlLm9uQ2xpY2smJl8oUmUsIm9uQ2xpY2siLG51bGwsS2Uub25DbGljaywhMSx2b2lkIDAseWUpO3ZhciBvZTtpZigob2U9S2UmJktlLm9uVm5vZGVCZWZvcmVNb3VudCkmJnpyKG9lLHllLG1lKSxqJiZScihtZSxudWxsLHllLCJiZWZvcmVNb3VudCIpLCgob2U9S2UmJktlLm9uVm5vZGVNb3VudGVkKXx8aikmJkpuKCgpPT57b2UmJnpyKG9lLHllLG1lKSxqJiZScihtZSxudWxsLHllLCJtb3VudGVkIil9LEZlKSxMJjE2JiYhKEtlJiYoS2UuaW5uZXJIVE1MfHxLZS50ZXh0Q29udGVudCkpKWZvcih2YXIgJGU9a2UoUmUuZmlyc3RDaGlsZCxtZSxSZSx5ZSxGZSxBZSxfdCk7JGU7KXt3aT0hMDt2YXIgcnQ9JGU7JGU9JGUubmV4dFNpYmxpbmcsTShydCl9ZWxzZSBMJjgmJlJlLnRleHRDb250ZW50IT09bWUuY2hpbGRyZW4mJih3aT0hMCxSZS50ZXh0Q29udGVudD1tZS5jaGlsZHJlbil9cmV0dXJuIFJlLm5leHRTaWJsaW5nfSxrZT0oUmUsbWUseWUsRmUsQWUsX3QsQXQpPT57QXQ9QXR8fCEhbWUuZHluYW1pY0NoaWxkcmVuO2Zvcih2YXIgS2U9bWUuY2hpbGRyZW4sTnQ9S2UubGVuZ3RoLEw9MDtMPE50O0wrKyl7dmFyIGo9QXQ/S2VbTF06S2VbTF09RG4oS2VbTF0pO2lmKFJlKVJlPUxlKFJlLGosRmUsQWUsX3QsQXQpO2Vsc2V7aWYoai50eXBlPT09Y2UmJiFqLmNoaWxkcmVuKWNvbnRpbnVlO3dpPSEwLGYobnVsbCxqLHllLG51bGwsRmUsQWUsemkoeWUpLF90KX19cmV0dXJuIFJlfSxZZT0oUmUsbWUseWUsRmUsQWUsX3QpPT57dmFye3Nsb3RTY29wZUlkczpBdH09bWU7QXQmJihBZT1BZT9BZS5jb25jYXQoQXQpOkF0KTt2YXIgS2U9TihSZSksTnQ9a2UoQyhSZSksbWUsS2UseWUsRmUsQWUsX3QpO3JldHVybiBOdCYmbGkoTnQpJiZOdC5kYXRhPT09Il0iP0MobWUuYW5jaG9yPU50KTood2k9ITAsSChtZS5hbmNob3I9bmUoIl0iLEtlKSxLZSxOdCksTnQpfSxmdD0oUmUsbWUseWUsRmUsQWUsX3QpPT57aWYod2k9ITAsbWUuZWw9bnVsbCxfdClmb3IodmFyIEF0PVFlKFJlKTs7KXt2YXIgS2U9QyhSZSk7aWYoS2UmJktlIT09QXQpTShLZSk7ZWxzZSBicmVha312YXIgTnQ9QyhSZSksTD1OKFJlKTtyZXR1cm4gTShSZSksZihudWxsLG1lLEwsTnQseWUsRmUsemkoTCksQWUpLE50fSxRZT1SZT0+e2Zvcih2YXIgbWU9MDtSZTspaWYoUmU9QyhSZSksUmUmJmxpKFJlKSYmKFJlLmRhdGE9PT0iWyImJm1lKyssUmUuZGF0YT09PSJdIikpe2lmKG1lPT09MClyZXR1cm4gQyhSZSk7bWUtLX1yZXR1cm4gUmV9O3JldHVyblt2ZSxMZV19dmFyIG9yPUpuO2Z1bmN0aW9uIHphKGkpe3JldHVybiBXaShpKX1mdW5jdGlvbiBXYShpKXtyZXR1cm4gV2koaSxjcil9ZnVuY3Rpb24gV2koaSxsKXt2YXIgZj1kLmdldEdsb2JhbFRoaXMoKTtmLl9fVlVFX189ITA7dmFye2luc2VydDpfLHJlbW92ZTpBLHBhdGNoUHJvcDpDLGZvcmNlUGF0Y2hQcm9wOk4sY3JlYXRlRWxlbWVudDpNLGNyZWF0ZVRleHQ6SCxjcmVhdGVDb21tZW50Om5lLHNldFRleHQ6dmUsc2V0RWxlbWVudFRleHQ6TGUscGFyZW50Tm9kZTp1ZSxuZXh0U2libGluZzprZSxzZXRTY29wZUlkOlllPWQuTk9PUCxpbnNlcnRTdGF0aWNDb250ZW50OmZ0fT1pLFFlPWZ1bmN0aW9uKHEsZWUsYmUpe3ZhciBNZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbCxEZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06bnVsbCxaZT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06bnVsbCx2dD1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSE9PXZvaWQgMD9hcmd1bWVudHNbNl06ITEsZXQ9YXJndW1lbnRzLmxlbmd0aD43JiZhcmd1bWVudHNbN10hPT12b2lkIDA/YXJndW1lbnRzWzddOm51bGwsdHQ9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOiEhZWUuZHluYW1pY0NoaWxkcmVuO2lmKHEhPT1lZSl7cSYmIWh0KHEsZWUpJiYoTWU9dXIocSksUnQocSxEZSxaZSwhMCkscT1udWxsKSxlZS5wYXRjaEZsYWc9PT0tMiYmKHR0PSExLGVlLmR5bmFtaWNDaGlsZHJlbj1udWxsKTt2YXJ7dHlwZTpIZSxyZWY6SHQsc2hhcGVGbGFnOkR0fT1lZTtzd2l0Y2goSGUpe2Nhc2UgY2U6UmUocSxlZSxiZSxNZSk7YnJlYWs7Y2FzZSBwZTptZShxLGVlLGJlLE1lKTticmVhaztjYXNlIFBlOnE9PW51bGwmJnllKGVlLGJlLE1lLHZ0KTticmVhaztjYXNlIHRlOnJlKHEsZWUsYmUsTWUsRGUsWmUsdnQsZXQsdHQpO2JyZWFrO2RlZmF1bHQ6RHQmMT9fdChxLGVlLGJlLE1lLERlLFplLHZ0LGV0LHR0KTpEdCY2P29lKHEsZWUsYmUsTWUsRGUsWmUsdnQsZXQsdHQpOihEdCY2NHx8RHQmMTI4KSYmSGUucHJvY2VzcyhxLGVlLGJlLE1lLERlLFplLHZ0LGV0LHR0LEt0KX1IdCE9bnVsbCYmRGUmJnNpKEh0LHEmJnEucmVmLFplLGVlfHxxLCFlZSl9fSxSZT0ocSxlZSxiZSxNZSk9PntpZihxPT1udWxsKV8oZWUuZWw9SChlZS5jaGlsZHJlbixiZSksYmUsTWUpO2Vsc2V7dmFyIERlPWVlLmVsPXEuZWw7ZWUuY2hpbGRyZW4hPT1xLmNoaWxkcmVuJiZ2ZShEZSxlZS5jaGlsZHJlbil9fSxtZT0ocSxlZSxiZSxNZSk9PntxPT1udWxsP18oZWUuZWw9bmUoZWUuY2hpbGRyZW58fCIiLGJlKSxiZSxNZSk6ZWUuZWw9cS5lbH0seWU9KHEsZWUsYmUsTWUpPT57W3EuZWwscS5hbmNob3JdPWZ0KHEuY2hpbGRyZW4sZWUsYmUsTWUscS5lbCxxLmFuY2hvcil9LEZlPShxLGVlLGJlKT0+e2Zvcih2YXJ7ZWw6TWUsYW5jaG9yOkRlfT1xLFplO01lJiZNZSE9PURlOylaZT1rZShNZSksXyhNZSxlZSxiZSksTWU9WmU7XyhEZSxlZSxiZSl9LEFlPXE9Pntmb3IodmFye2VsOmVlLGFuY2hvcjpiZX09cSxNZTtlZSYmZWUhPT1iZTspTWU9a2UoZWUpLEEoZWUpLGVlPU1lO0EoYmUpfSxfdD0ocSxlZSxiZSxNZSxEZSxaZSx2dCxldCx0dCk9Pnt2dD12dHx8ZWUudHlwZT09PSJzdmciLHE9PW51bGw/QXQoZWUsYmUsTWUsRGUsWmUsdnQsZXQsdHQpOkwocSxlZSxEZSxaZSx2dCxldCx0dCl9LEF0PShxLGVlLGJlLE1lLERlLFplLHZ0LGV0KT0+e3ZhciB0dCxIZSx7dHlwZTpIdCxwcm9wczpEdCxzaGFwZUZsYWc6enQsdHJhbnNpdGlvbjp3bixkaXJzOkdyfT1xO2lmKHR0PXEuZWw9TShxLnR5cGUsZWUpLHp0Jjg/TGUodHQscS5jaGlsZHJlbik6enQmMTYmJk50KHEuY2hpbGRyZW4sdHQsbnVsbCxNZSxEZSxaZSYmSHQhPT0iZm9yZWlnbk9iamVjdCIsdnQsZXQpLEdyJiZScihxLG51bGwsTWUsImNyZWF0ZWQiKSxLZSh0dCxxLHEuc2NvcGVJZCx2dCxNZSksRHQpe2Zvcih2YXIgcW4gaW4gRHQpcW4hPT0idmFsdWUiJiYhZC5pc1Jlc2VydmVkUHJvcChxbikmJkModHQscW4sbnVsbCxEdFtxbl0sWmUscS5jaGlsZHJlbixNZSxEZSxtbik7InZhbHVlImluIER0JiZDKHR0LCJ2YWx1ZSIsbnVsbCxEdC52YWx1ZSksKEhlPUR0Lm9uVm5vZGVCZWZvcmVNb3VudCkmJnpyKEhlLE1lLHEpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0dCwiX192dWVQYXJlbnRDb21wb25lbnQiLHt2YWx1ZTpNZSxlbnVtZXJhYmxlOiExfSksR3ImJlJyKHEsbnVsbCxNZSwiYmVmb3JlTW91bnQiKTt2YXIgdWk9KCFEZXx8RGUmJiFEZS5wZW5kaW5nQnJhbmNoKSYmd24mJiF3bi5wZXJzaXN0ZWQ7dWkmJnduLmJlZm9yZUVudGVyKHR0KSxfKHR0LGVlLGJlKSwoKEhlPUR0JiZEdC5vblZub2RlTW91bnRlZCl8fHVpfHxHcikmJm9yKCgpPT57SGUmJnpyKEhlLE1lLHEpLHVpJiZ3bi5lbnRlcih0dCksR3ImJlJyKHEsbnVsbCxNZSwibW91bnRlZCIpfSxEZSl9LEtlPShxLGVlLGJlLE1lLERlKT0+e2lmKGJlJiZZZShxLGJlKSxNZSlmb3IodmFyIFplPTA7WmU8TWUubGVuZ3RoO1plKyspWWUocSxNZVtaZV0pO2lmKERlKXt2YXIgdnQ9RGUuc3ViVHJlZTtpZihlZT09PXZ0KXt2YXIgZXQ9RGUudm5vZGU7S2UocSxldCxldC5zY29wZUlkLGV0LnNsb3RTY29wZUlkcyxEZS5wYXJlbnQpfX19LE50PWZ1bmN0aW9uKHEsZWUsYmUsTWUsRGUsWmUsdnQsZXQpe2Zvcih2YXIgdHQ9YXJndW1lbnRzLmxlbmd0aD44JiZhcmd1bWVudHNbOF0hPT12b2lkIDA/YXJndW1lbnRzWzhdOjAsSGU9dHQ7SGU8cS5sZW5ndGg7SGUrKyl7dmFyIEh0PXFbSGVdPWV0P0lyKHFbSGVdKTpEbihxW0hlXSk7UWUobnVsbCxIdCxlZSxiZSxNZSxEZSxaZSx2dCxldCl9fSxMPShxLGVlLGJlLE1lLERlLFplLHZ0KT0+e3ZhciBldD1lZS5lbD1xLmVsLHtwYXRjaEZsYWc6dHQsZHluYW1pY0NoaWxkcmVuOkhlLGRpcnM6SHR9PWVlO3R0fD1xLnBhdGNoRmxhZyYxNjt2YXIgRHQ9cS5wcm9wc3x8ZC5FTVBUWV9PQkosenQ9ZWUucHJvcHN8fGQuRU1QVFlfT0JKLHduO2JlJiZvbyhiZSwhMSksKHduPXp0Lm9uVm5vZGVCZWZvcmVVcGRhdGUpJiZ6cih3bixiZSxlZSxxKSxIdCYmUnIoZWUscSxiZSwiYmVmb3JlVXBkYXRlIiksYmUmJm9vKGJlLCEwKTt2YXIgR3I9RGUmJmVlLnR5cGUhPT0iZm9yZWlnbk9iamVjdCI7aWYoSGU/aihxLmR5bmFtaWNDaGlsZHJlbixIZSxldCxiZSxNZSxHcixaZSk6dnR8fFVlKHEsZWUsZXQsbnVsbCxiZSxNZSxHcixaZSwhMSksdHQ+MCl7aWYodHQmMTYpYWUoZXQsZWUsRHQsenQsYmUsTWUsRGUpO2Vsc2UgaWYodHQmMiYmRHQuY2xhc3MhPT16dC5jbGFzcyYmQyhldCwiY2xhc3MiLG51bGwsenQuY2xhc3MsRGUpLHR0JjQmJkMoZXQsInN0eWxlIixEdC5zdHlsZSx6dC5zdHlsZSxEZSksdHQmOClmb3IodmFyIHFuPWVlLmR5bmFtaWNQcm9wcyx1aT0wO3VpPHFuLmxlbmd0aDt1aSsrKXt2YXIgVW89cW5bdWldLGVzPUR0W1VvXSxDcz16dFtVb107KENzIT09ZXN8fFVvPT09InZhbHVlInx8TiYmTihldCxVbykpJiZDKGV0LFVvLGVzLENzLERlLHEuY2hpbGRyZW4sYmUsTWUsbW4pfXR0JjEmJnEuY2hpbGRyZW4hPT1lZS5jaGlsZHJlbiYmTGUoZXQsZWUuY2hpbGRyZW4pfWVsc2UhdnQmJkhlPT1udWxsJiZhZShldCxlZSxEdCx6dCxiZSxNZSxEZSk7KCh3bj16dC5vblZub2RlVXBkYXRlZCl8fEh0KSYmb3IoKCk9Pnt3biYmenIod24sYmUsZWUscSksSHQmJlJyKGVlLHEsYmUsInVwZGF0ZWQiKX0sTWUpfSxqPShxLGVlLGJlLE1lLERlLFplLHZ0KT0+e2Zvcih2YXIgZXQ9MDtldDxlZS5sZW5ndGg7ZXQrKyl7dmFyIHR0PXFbZXRdLEhlPWVlW2V0XSxIdD10dC5lbCYmKHR0LnR5cGU9PT10ZXx8IWh0KHR0LEhlKXx8dHQuc2hhcGVGbGFnJig2fDY0KSk/dWUodHQuZWwpOmJlO1FlKHR0LEhlLEh0LG51bGwsTWUsRGUsWmUsdnQsITApfX0sYWU9KHEsZWUsYmUsTWUsRGUsWmUsdnQpPT57aWYoYmUhPT1NZSl7aWYoYmUhPT1kLkVNUFRZX09CSilmb3IodmFyIGV0IGluIGJlKSFkLmlzUmVzZXJ2ZWRQcm9wKGV0KSYmIShldCBpbiBNZSkmJkMocSxldCxiZVtldF0sbnVsbCx2dCxlZS5jaGlsZHJlbixEZSxaZSxtbik7Zm9yKHZhciB0dCBpbiBNZSlpZighZC5pc1Jlc2VydmVkUHJvcCh0dCkpe3ZhciBIZT1NZVt0dF0sSHQ9YmVbdHRdOyhIZSE9PUh0JiZ0dCE9PSJ2YWx1ZSJ8fE4mJk4ocSx0dCkpJiZDKHEsdHQsSHQsSGUsdnQsZWUuY2hpbGRyZW4sRGUsWmUsbW4pfSJ2YWx1ZSJpbiBNZSYmQyhxLCJ2YWx1ZSIsYmUudmFsdWUsTWUudmFsdWUpfX0scmU9KHEsZWUsYmUsTWUsRGUsWmUsdnQsZXQsdHQpPT57dmFyIEhlPWVlLmVsPXE/cS5lbDpIKCIiLGJlKSxIdD1lZS5hbmNob3I9cT9xLmFuY2hvcjpIKCIiLGJlKSx7cGF0Y2hGbGFnOkR0LGR5bmFtaWNDaGlsZHJlbjp6dCxzbG90U2NvcGVJZHM6d259PWVlO3duJiYoZXQ9ZXQ/ZXQuY29uY2F0KHduKTp3bikscT09bnVsbD8oXyhIZSxiZSxNZSksXyhIdCxiZSxNZSksTnQoZWUuY2hpbGRyZW4sYmUsSHQsRGUsWmUsdnQsZXQsdHQpKTpEdD4wJiZEdCY2NCYmenQmJnEuZHluYW1pY0NoaWxkcmVuPyhqKHEuZHluYW1pY0NoaWxkcmVuLHp0LGJlLERlLFplLHZ0LGV0KSwoZWUua2V5IT1udWxsfHxEZSYmZWU9PT1EZS5zdWJUcmVlKSYmYW8ocSxlZSwhMCkpOlVlKHEsZWUsYmUsSHQsRGUsWmUsdnQsZXQsdHQpfSxvZT0ocSxlZSxiZSxNZSxEZSxaZSx2dCxldCx0dCk9PntlZS5zbG90U2NvcGVJZHM9ZXQscT09bnVsbD9lZS5zaGFwZUZsYWcmNTEyP0RlLmN0eC5hY3RpdmF0ZShlZSxiZSxNZSx2dCx0dCk6JGUoZWUsYmUsTWUsRGUsWmUsdnQsdHQpOnJ0KHEsZWUsdHQpfSwkZT0ocSxlZSxiZSxNZSxEZSxaZSx2dCk9Pnt2YXIgZXQ9cS5jb21wb25lbnQ9bm4ocSxNZSxEZSk7aWYoa2kocSkmJihldC5jdHgucmVuZGVyZXI9S3QpLFlhKGV0KSxldC5hc3luY0RlcCl7aWYoRGUmJkRlLnJlZ2lzdGVyRGVwKGV0LHFlKSwhcS5lbCl7dmFyIHR0PWV0LnN1YlRyZWU9cXQocGUpO21lKG51bGwsdHQsZWUsYmUpfXJldHVybn1pZihxZShldCxxLGVlLGJlLERlLFplLHZ0KSxldC4kd3hzTW9kdWxlcyl7dmFyIEhlPUIucmVzb2x2ZU93bmVyRWwoZXQsITApO0hlLmxlbmd0aCYmSGUuZm9yRWFjaChIdD0+e0h0LnNldEF0dHJpYnV0ZShCLkFUVFJfVl9PV05FUl9JRCxldC51aWQpO3ZhcnskcmVuZGVyanNNb2R1bGVzOkR0fT1ldC50eXBlO0R0JiZIdC5zZXRBdHRyaWJ1dGUoQi5BVFRSX1ZfUkVOREVSSlMsRHQpfSl9fSxydD0ocSxlZSxiZSk9Pnt2YXIgTWU9ZWUuY29tcG9uZW50PXEuY29tcG9uZW50O2lmKFRvKHEsZWUsYmUpKWlmKE1lLmFzeW5jRGVwJiYhTWUuYXN5bmNSZXNvbHZlZCl7SmUoTWUsZWUsYmUpO3JldHVybn1lbHNlIE1lLm5leHQ9ZWUsbWkoTWUudXBkYXRlKSxNZS51cGRhdGUoKTtlbHNlIGVlLmVsPXEuZWwsTWUudm5vZGU9ZWV9LHFlPShxLGVlLGJlLE1lLERlLFplLHZ0KT0+e3ZhciBldD0oKT0+e2lmKHEuaXNNb3VudGVkKXt2YXJ7bmV4dDp0cixidTpMYSx1OkFzLHBhcmVudDpxaSx2bm9kZTpIb309cSxjbz10cixiYTtvbyhxLCExKSx0cj8odHIuZWw9SG8uZWwsSmUocSx0cix2dCkpOnRyPUhvLExhJiZkLmludm9rZUFycmF5Rm5zKExhKSwoYmE9dHIucHJvcHMmJnRyLnByb3BzLm9uVm5vZGVCZWZvcmVVcGRhdGUpJiZ6cihiYSxxaSx0cixIbyksb28ocSwhMCk7dmFyIHRzPUppKHEpLGFhPXEuc3ViVHJlZTtxLnN1YlRyZWU9dHMsUWUoYWEsdHMsdWUoYWEuZWwpLHVyKGFhKSxxLERlLFplKSx0ci5lbD10cy5lbCxjbz09PW51bGwmJmlpKHEsdHMuZWwpLEFzJiZvcihBcyxEZSksKGJhPXRyLnByb3BzJiZ0ci5wcm9wcy5vblZub2RlVXBkYXRlZCkmJm9yKCgpPT56cihiYSxxaSx0cixIbyksRGUpfWVsc2V7dmFyIEh0LHtlbDpEdCxwcm9wczp6dH09ZWUse2JtOnduLG06R3IscGFyZW50OnFufT1xLHVpPSRyKGVlKTtpZihvbyhxLCExKSx3biYmZC5pbnZva2VBcnJheUZucyh3biksIXVpJiYoSHQ9enQmJnp0Lm9uVm5vZGVCZWZvcmVNb3VudCkmJnpyKEh0LHFuLGVlKSxvbyhxLCEwKSxEdCYmbG8pe3ZhciBVbz0oKT0+e3Euc3ViVHJlZT1KaShxKSxsbyhEdCxxLnN1YlRyZWUscSxEZSxudWxsKX07dWk/ZWUudHlwZS5fX2FzeW5jTG9hZGVyKCkudGhlbigoKT0+IXEuaXNVbm1vdW50ZWQmJlVvKCkpOlVvKCl9ZWxzZXt2YXIgZXM9cS5zdWJUcmVlPUppKHEpO1FlKG51bGwsZXMsYmUsTWUscSxEZSxaZSksZWUuZWw9ZXMuZWx9aWYoR3ImJm9yKEdyLERlKSwhdWkmJihIdD16dCYmenQub25Wbm9kZU1vdW50ZWQpKXt2YXIgQ3M9ZWU7b3IoKCk9PnpyKEh0LHFuLENzKSxEZSl9KGVlLnNoYXBlRmxhZyYyNTZ8fHFuJiYkcihxbi52bm9kZSkmJnFuLnZub2RlLnNoYXBlRmxhZyYyNTYpJiZxLmEmJm9yKHEuYSxEZSkscS5pc01vdW50ZWQ9ITAsZWU9YmU9TWU9bnVsbH19LHR0PXEuZWZmZWN0PW5ldyBFLlJlYWN0aXZlRWZmZWN0KGV0LCgpPT53cihIZSkscS5zY29wZSksSGU9cS51cGRhdGU9KCk9PnR0LnJ1bigpO0hlLmlkPXEudWlkLG9vKHEsITApLEhlKCl9LEplPShxLGVlLGJlKT0+e2VlLmNvbXBvbmVudD1xO3ZhciBNZT1xLnZub2RlLnByb3BzO3Eudm5vZGU9ZWUscS5uZXh0PW51bGwsZmEocSxlZS5wcm9wcyxNZSxiZSksYXMocSxlZS5jaGlsZHJlbixiZSksRS5wYXVzZVRyYWNraW5nKCksVmUoKSxFLnJlc2V0VHJhY2tpbmcoKX0sVWU9ZnVuY3Rpb24ocSxlZSxiZSxNZSxEZSxaZSx2dCxldCl7dmFyIHR0PWFyZ3VtZW50cy5sZW5ndGg+OCYmYXJndW1lbnRzWzhdIT09dm9pZCAwP2FyZ3VtZW50c1s4XTohMSxIZT1xJiZxLmNoaWxkcmVuLEh0PXE/cS5zaGFwZUZsYWc6MCxEdD1lZS5jaGlsZHJlbix7cGF0Y2hGbGFnOnp0LHNoYXBlRmxhZzp3bn09ZWU7aWYoenQ+MCl7aWYoenQmMTI4KXtwdChIZSxEdCxiZSxNZSxEZSxaZSx2dCxldCx0dCk7cmV0dXJufWVsc2UgaWYoenQmMjU2KXtWdChIZSxEdCxiZSxNZSxEZSxaZSx2dCxldCx0dCk7cmV0dXJufX13biY4PyhIdCYxNiYmbW4oSGUsRGUsWmUpLER0IT09SGUmJkxlKGJlLER0KSk6SHQmMTY/d24mMTY/cHQoSGUsRHQsYmUsTWUsRGUsWmUsdnQsZXQsdHQpOm1uKEhlLERlLFplLCEwKTooSHQmOCYmTGUoYmUsIiIpLHduJjE2JiZOdChEdCxiZSxNZSxEZSxaZSx2dCxldCx0dCkpfSxWdD0ocSxlZSxiZSxNZSxEZSxaZSx2dCxldCx0dCk9PntxPXF8fGQuRU1QVFlfQVJSLGVlPWVlfHxkLkVNUFRZX0FSUjt2YXIgSGU9cS5sZW5ndGgsSHQ9ZWUubGVuZ3RoLER0PU1hdGgubWluKEhlLEh0KSx6dDtmb3IoenQ9MDt6dDxEdDt6dCsrKXt2YXIgd249ZWVbenRdPXR0P0lyKGVlW3p0XSk6RG4oZWVbenRdKTtRZShxW3p0XSx3bixiZSxudWxsLERlLFplLHZ0LGV0LHR0KX1IZT5IdD9tbihxLERlLFplLCEwLCExLER0KTpOdChlZSxiZSxNZSxEZSxaZSx2dCxldCx0dCxEdCl9LHB0PShxLGVlLGJlLE1lLERlLFplLHZ0LGV0LHR0KT0+e2Zvcih2YXIgSGU9MCxIdD1lZS5sZW5ndGgsRHQ9cS5sZW5ndGgtMSx6dD1IdC0xO0hlPD1EdCYmSGU8PXp0Oyl7dmFyIHduPXFbSGVdLEdyPWVlW0hlXT10dD9JcihlZVtIZV0pOkRuKGVlW0hlXSk7aWYoaHQod24sR3IpKVFlKHduLEdyLGJlLG51bGwsRGUsWmUsdnQsZXQsdHQpO2Vsc2UgYnJlYWs7SGUrK31mb3IoO0hlPD1EdCYmSGU8PXp0Oyl7dmFyIHFuPXFbRHRdLHVpPWVlW3p0XT10dD9JcihlZVt6dF0pOkRuKGVlW3p0XSk7aWYoaHQocW4sdWkpKVFlKHFuLHVpLGJlLG51bGwsRGUsWmUsdnQsZXQsdHQpO2Vsc2UgYnJlYWs7RHQtLSx6dC0tfWlmKEhlPkR0KXtpZihIZTw9enQpZm9yKHZhciBVbz16dCsxLGVzPVVvPEh0P2VlW1VvXS5lbDpNZTtIZTw9enQ7KVFlKG51bGwsZWVbSGVdPXR0P0lyKGVlW0hlXSk6RG4oZWVbSGVdKSxiZSxlcyxEZSxaZSx2dCxldCx0dCksSGUrK31lbHNlIGlmKEhlPnp0KWZvcig7SGU8PUR0OylSdChxW0hlXSxEZSxaZSwhMCksSGUrKztlbHNle3ZhciBDcz1IZSx0cj1IZSxMYT1uZXcgTWFwO2ZvcihIZT10cjtIZTw9enQ7SGUrKyl7dmFyIEFzPWVlW0hlXT10dD9JcihlZVtIZV0pOkRuKGVlW0hlXSk7QXMua2V5IT1udWxsJiZMYS5zZXQoQXMua2V5LEhlKX12YXIgcWksSG89MCxjbz16dC10cisxLGJhPSExLHRzPTAsYWE9bmV3IEFycmF5KGNvKTtmb3IoSGU9MDtIZTxjbztIZSsrKWFhW0hlXT0wO2ZvcihIZT1DcztIZTw9RHQ7SGUrKyl7dmFyIHNhPXFbSGVdO2lmKEhvPj1jbyl7UnQoc2EsRGUsWmUsITApO2NvbnRpbnVlfXZhciBqbz12b2lkIDA7aWYoc2Eua2V5IT1udWxsKWpvPUxhLmdldChzYS5rZXkpO2Vsc2UgZm9yKHFpPXRyO3FpPD16dDtxaSsrKWlmKGFhW3FpLXRyXT09PTAmJmh0KHNhLGVlW3FpXSkpe2pvPXFpO2JyZWFrfWpvPT09dm9pZCAwP1J0KHNhLERlLFplLCEwKTooYWFbam8tdHJdPUhlKzEsam8+PXRzP3RzPWpvOmJhPSEwLFFlKHNhLGVlW2pvXSxiZSxudWxsLERlLFplLHZ0LGV0LHR0KSxIbysrKX12YXIgYmw9YmE/bHMoYWEpOmQuRU1QVFlfQVJSO2ZvcihxaT1ibC5sZW5ndGgtMSxIZT1jby0xO0hlPj0wO0hlLS0pe3ZhciBZcz10citIZSxFYz1lZVtZc10sV2w9WXMrMTxIdD9lZVtZcysxXS5lbDpNZTthYVtIZV09PT0wP1FlKG51bGwsRWMsYmUsV2wsRGUsWmUsdnQsZXQsdHQpOmJhJiYocWk8MHx8SGUhPT1ibFtxaV0/a3QoRWMsYmUsV2wsMik6cWktLSl9fX0sa3Q9ZnVuY3Rpb24ocSxlZSxiZSxNZSl7dmFyIERlPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLHtlbDpaZSx0eXBlOnZ0LHRyYW5zaXRpb246ZXQsY2hpbGRyZW46dHQsc2hhcGVGbGFnOkhlfT1xO2lmKEhlJjYpe2t0KHEuY29tcG9uZW50LnN1YlRyZWUsZWUsYmUsTWUpO3JldHVybn1pZihIZSYxMjgpe3Euc3VzcGVuc2UubW92ZShlZSxiZSxNZSk7cmV0dXJufWlmKEhlJjY0KXt2dC5tb3ZlKHEsZWUsYmUsS3QpO3JldHVybn1pZih2dD09PXRlKXtfKFplLGVlLGJlKTtmb3IodmFyIEh0PTA7SHQ8dHQubGVuZ3RoO0h0Kyspa3QodHRbSHRdLGVlLGJlLE1lKTtfKHEuYW5jaG9yLGVlLGJlKTtyZXR1cm59aWYodnQ9PT1QZSl7RmUocSxlZSxiZSk7cmV0dXJufXZhciBEdD1NZSE9PTImJkhlJjEmJmV0O2lmKER0KWlmKE1lPT09MClldC5iZWZvcmVFbnRlcihaZSksXyhaZSxlZSxiZSksb3IoKCk9PmV0LmVudGVyKFplKSxEZSk7ZWxzZXt2YXJ7bGVhdmU6enQsZGVsYXlMZWF2ZTp3bixhZnRlckxlYXZlOkdyfT1ldCxxbj0oKT0+XyhaZSxlZSxiZSksdWk9KCk9Pnt6dChaZSwoKT0+e3FuKCksR3ImJkdyKCl9KX07d24/d24oWmUscW4sdWkpOnVpKCl9ZWxzZSBfKFplLGVlLGJlKX0sUnQ9ZnVuY3Rpb24ocSxlZSxiZSl7dmFyIE1lPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxEZT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITEse3R5cGU6WmUscHJvcHM6dnQscmVmOmV0LGNoaWxkcmVuOnR0LGR5bmFtaWNDaGlsZHJlbjpIZSxzaGFwZUZsYWc6SHQscGF0Y2hGbGFnOkR0LGRpcnM6enR9PXE7aWYoZXQhPW51bGwmJnNpKGV0LG51bGwsYmUscSwhMCksSHQmMjU2KXtlZS5jdHguZGVhY3RpdmF0ZShxKTtyZXR1cm59dmFyIHduPUh0JjEmJnp0LEdyPSEkcihxKSxxbjtpZihHciYmKHFuPXZ0JiZ2dC5vblZub2RlQmVmb3JlVW5tb3VudCkmJnpyKHFuLGVlLHEpLEh0JjYpaG4ocS5jb21wb25lbnQsYmUsTWUpO2Vsc2V7aWYoSHQmMTI4KXtxLnN1c3BlbnNlLnVubW91bnQoYmUsTWUpO3JldHVybn13biYmUnIocSxudWxsLGVlLCJiZWZvcmVVbm1vdW50IiksSHQmNjQ/cS50eXBlLnJlbW92ZShxLGVlLGJlLERlLEt0LE1lKTpIZSYmKFplIT09dGV8fER0PjAmJkR0JjY0KT9tbihIZSxlZSxiZSwhMSwhMCk6KFplPT09dGUmJkR0JigxMjh8MjU2KXx8IURlJiZIdCYxNikmJm1uKHR0LGVlLGJlKSxNZSYmeG4ocSl9KEdyJiYocW49dnQmJnZ0Lm9uVm5vZGVVbm1vdW50ZWQpfHx3bikmJm9yKCgpPT57cW4mJnpyKHFuLGVlLHEpLHduJiZScihxLG51bGwsZWUsInVubW91bnRlZCIpfSxiZSl9LHhuPXE9Pnt2YXJ7dHlwZTplZSxlbDpiZSxhbmNob3I6TWUsdHJhbnNpdGlvbjpEZX09cTtpZihlZT09PXRlKXtrbihiZSxNZSk7cmV0dXJufWlmKGVlPT09UGUpe0FlKHEpO3JldHVybn12YXIgWmU9KCk9PntBKGJlKSxEZSYmIURlLnBlcnNpc3RlZCYmRGUuYWZ0ZXJMZWF2ZSYmRGUuYWZ0ZXJMZWF2ZSgpfTtpZihxLnNoYXBlRmxhZyYxJiZEZSYmIURlLnBlcnNpc3RlZCl7dmFye2xlYXZlOnZ0LGRlbGF5TGVhdmU6ZXR9PURlLHR0PSgpPT52dChiZSxaZSk7ZXQ/ZXQocS5lbCxaZSx0dCk6dHQoKX1lbHNlIFplKCl9LGtuPShxLGVlKT0+e2Zvcih2YXIgYmU7cSE9PWVlOyliZT1rZShxKSxBKHEpLHE9YmU7QShlZSl9LGhuPShxLGVlLGJlKT0+e3ZhcntidW06TWUsc2NvcGU6RGUsdXBkYXRlOlplLHN1YlRyZWU6dnQsdW06ZXR9PXE7TWUmJmQuaW52b2tlQXJyYXlGbnMoTWUpLERlLnN0b3AoKSxaZSYmKFplLmFjdGl2ZT0hMSxSdCh2dCxxLGVlLGJlKSksZXQmJm9yKGV0LGVlKSxvcigoKT0+e3EuaXNVbm1vdW50ZWQ9ITB9LGVlKSxlZSYmZWUucGVuZGluZ0JyYW5jaCYmIWVlLmlzVW5tb3VudGVkJiZxLmFzeW5jRGVwJiYhcS5hc3luY1Jlc29sdmVkJiZxLnN1c3BlbnNlSWQ9PT1lZS5wZW5kaW5nSWQmJihlZS5kZXBzLS0sZWUuZGVwcz09PTAmJmVlLnJlc29sdmUoKSl9LG1uPWZ1bmN0aW9uKHEsZWUsYmUpe2Zvcih2YXIgTWU9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLERlPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMSxaZT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06MCx2dD1aZTt2dDxxLmxlbmd0aDt2dCsrKVJ0KHFbdnRdLGVlLGJlLE1lLERlKX0sdXI9cT0+cS5zaGFwZUZsYWcmNj91cihxLmNvbXBvbmVudC5zdWJUcmVlKTpxLnNoYXBlRmxhZyYxMjg/cS5zdXNwZW5zZS5uZXh0KCk6a2UocS5hbmNob3J8fHEuZWwpLG5pPShxLGVlLGJlKT0+e3E9PW51bGw/ZWUuX3Zub2RlJiZSdChlZS5fdm5vZGUsbnVsbCxudWxsLCEwKTpRZShlZS5fdm5vZGV8fG51bGwscSxlZSxudWxsLG51bGwsbnVsbCxiZSksVmUoKSxvdCgpLGVlLl92bm9kZT1xfSxLdD17cDpRZSx1bTpSdCxtOmt0LHI6eG4sbXQ6JGUsbWM6TnQscGM6VWUscGJjOmosbjp1cixvOml9LHJuLGxvO3JldHVybiBsJiYoW3JuLGxvXT1sKEt0KSkse3JlbmRlcjpuaSxoeWRyYXRlOnJuLGNyZWF0ZUFwcDppbyhuaSxybil9fWZ1bmN0aW9uIG9vKGksbCl7dmFye2VmZmVjdDpmLHVwZGF0ZTpffT1pO2YuYWxsb3dSZWN1cnNlPV8uYWxsb3dSZWN1cnNlPWx9ZnVuY3Rpb24gYW8oaSxsKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITEsXz1pLmNoaWxkcmVuLEE9bC5jaGlsZHJlbjtpZihkLmlzQXJyYXkoXykmJmQuaXNBcnJheShBKSlmb3IodmFyIEM9MDtDPF8ubGVuZ3RoO0MrKyl7dmFyIE49X1tDXSxNPUFbQ107TS5zaGFwZUZsYWcmMSYmIU0uZHluYW1pY0NoaWxkcmVuJiYoKE0ucGF0Y2hGbGFnPD0wfHxNLnBhdGNoRmxhZz09PTMyKSYmKE09QVtDXT1JcihBW0NdKSxNLmVsPU4uZWwpLGZ8fGFvKE4sTSkpLE0udHlwZT09PWNlJiYoTS5lbD1OLmVsKX19ZnVuY3Rpb24gbHMoaSl7dmFyIGw9aS5zbGljZSgpLGY9WzBdLF8sQSxDLE4sTSxIPWkubGVuZ3RoO2ZvcihfPTA7XzxIO18rKyl7dmFyIG5lPWlbX107aWYobmUhPT0wKXtpZihBPWZbZi5sZW5ndGgtMV0saVtBXTxuZSl7bFtfXT1BLGYucHVzaChfKTtjb250aW51ZX1mb3IoQz0wLE49Zi5sZW5ndGgtMTtDPE47KU09QytOPj4xLGlbZltNXV08bmU/Qz1NKzE6Tj1NO25lPGlbZltDXV0mJihDPjAmJihsW19dPWZbQy0xXSksZltDXT1fKX19Zm9yKEM9Zi5sZW5ndGgsTj1mW0MtMV07Qy0tID4wOylmW0NdPU4sTj1sW05dO3JldHVybiBmfXZhciBoYT1pPT5pLl9faXNUZWxlcG9ydCxNbz1pPT5pJiYoaS5kaXNhYmxlZHx8aS5kaXNhYmxlZD09PSIiKSxnYT1pPT50eXBlb2YgU1ZHRWxlbWVudCE9InVuZGVmaW5lZCImJmkgaW5zdGFuY2VvZiBTVkdFbGVtZW50LG09KGksbCk9Pnt2YXIgZj1pJiZpLnRvO2lmKGQuaXNTdHJpbmcoZikpaWYobCl7dmFyIF89bChmKTtyZXR1cm4gX31lbHNlIHJldHVybiBudWxsO2Vsc2UgcmV0dXJuIGZ9LFI9e19faXNUZWxlcG9ydDohMCxwcm9jZXNzKGksbCxmLF8sQSxDLE4sTSxILG5lKXt2YXJ7bWM6dmUscGM6TGUscGJjOnVlLG86e2luc2VydDprZSxxdWVyeVNlbGVjdG9yOlllLGNyZWF0ZVRleHQ6ZnQsY3JlYXRlQ29tbWVudDpRZX19PW5lLFJlPU1vKGwucHJvcHMpLHtzaGFwZUZsYWc6bWUsY2hpbGRyZW46eWUsZHluYW1pY0NoaWxkcmVuOkZlfT1sO2lmKGk9PW51bGwpe3ZhciBBZT1sLmVsPWZ0KCIiLGYpLF90PWwuYW5jaG9yPWZ0KCIiLGYpO2tlKEFlLGYsXyksa2UoX3QsZixfKTt2YXIgQXQ9bC50YXJnZXQ9bShsLnByb3BzLFllKSxLZT1sLnRhcmdldEFuY2hvcj1mdCgiIixmKTtBdCYmKGtlKEtlLEF0KSxOPU58fGdhKEF0KSk7dmFyIE50PShxZSxKZSk9PnttZSYxNiYmdmUoeWUscWUsSmUsQSxDLE4sTSxIKX07UmU/TnQoZixfdCk6QXQmJk50KEF0LEtlKX1lbHNle2wuZWw9aS5lbDt2YXIgTD1sLmFuY2hvcj1pLmFuY2hvcixqPWwudGFyZ2V0PWkudGFyZ2V0LGFlPWwudGFyZ2V0QW5jaG9yPWkudGFyZ2V0QW5jaG9yLHJlPU1vKGkucHJvcHMpLG9lPXJlP2Y6aiwkZT1yZT9MOmFlO2lmKE49Tnx8Z2EoaiksRmU/KHVlKGkuZHluYW1pY0NoaWxkcmVuLEZlLG9lLEEsQyxOLE0pLGFvKGksbCwhMCkpOkh8fExlKGksbCxvZSwkZSxBLEMsTixNLCExKSxSZSlyZXx8VShsLGYsTCxuZSwxKTtlbHNlIGlmKChsLnByb3BzJiZsLnByb3BzLnRvKSE9PShpLnByb3BzJiZpLnByb3BzLnRvKSl7dmFyIHJ0PWwudGFyZ2V0PW0obC5wcm9wcyxZZSk7cnQmJlUobCxydCxudWxsLG5lLDApfWVsc2UgcmUmJlUobCxqLGFlLG5lLDEpfUoobCl9LHJlbW92ZShpLGwsZixfLEEsQyl7dmFye3VtOk4sbzp7cmVtb3ZlOk19fT1BLHtzaGFwZUZsYWc6SCxjaGlsZHJlbjpuZSxhbmNob3I6dmUsdGFyZ2V0QW5jaG9yOkxlLHRhcmdldDp1ZSxwcm9wczprZX09aTtpZih1ZSYmTShMZSksKEN8fCFNbyhrZSkpJiYoTSh2ZSksSCYxNikpZm9yKHZhciBZZT0wO1llPG5lLmxlbmd0aDtZZSsrKXt2YXIgZnQ9bmVbWWVdO04oZnQsbCxmLCEwLCEhZnQuZHluYW1pY0NoaWxkcmVuKX19LG1vdmU6VSxoeWRyYXRlOiR9O2Z1bmN0aW9uIFUoaSxsLGYsXyl7dmFye286e2luc2VydDpBfSxtOkN9PV8sTj1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06MjtOPT09MCYmQShpLnRhcmdldEFuY2hvcixsLGYpO3ZhcntlbDpNLGFuY2hvcjpILHNoYXBlRmxhZzpuZSxjaGlsZHJlbjp2ZSxwcm9wczpMZX09aSx1ZT1OPT09MjtpZih1ZSYmQShNLGwsZiksKCF1ZXx8TW8oTGUpKSYmbmUmMTYpZm9yKHZhciBrZT0wO2tlPHZlLmxlbmd0aDtrZSsrKUModmVba2VdLGwsZiwyKTt1ZSYmQShILGwsZil9ZnVuY3Rpb24gJChpLGwsZixfLEEsQyxOLE0pe3ZhcntvOntuZXh0U2libGluZzpILHBhcmVudE5vZGU6bmUscXVlcnlTZWxlY3Rvcjp2ZX19PU4sTGU9bC50YXJnZXQ9bShsLnByb3BzLHZlKTtpZihMZSl7dmFyIHVlPUxlLl9scGF8fExlLmZpcnN0Q2hpbGQ7aWYobC5zaGFwZUZsYWcmMTYpaWYoTW8obC5wcm9wcykpbC5hbmNob3I9TShIKGkpLGwsbmUoaSksZixfLEEsQyksbC50YXJnZXRBbmNob3I9dWU7ZWxzZXtsLmFuY2hvcj1IKGkpO2Zvcih2YXIga2U9dWU7a2U7KWlmKGtlPUgoa2UpLGtlJiZrZS5ub2RlVHlwZT09PTgmJmtlLmRhdGE9PT0idGVsZXBvcnQgYW5jaG9yIil7bC50YXJnZXRBbmNob3I9a2UsTGUuX2xwYT1sLnRhcmdldEFuY2hvciYmSChsLnRhcmdldEFuY2hvcik7YnJlYWt9TSh1ZSxsLExlLGYsXyxBLEMpfUoobCl9cmV0dXJuIGwuYW5jaG9yJiZIKGwuYW5jaG9yKX12YXIgWD1SO2Z1bmN0aW9uIEooaSl7dmFyIGw9aS5jdHg7aWYobCYmbC51dCl7Zm9yKHZhciBmPWkuY2hpbGRyZW5bMF0uZWw7ZiE9PWkudGFyZ2V0QW5jaG9yOylmLm5vZGVUeXBlPT09MSYmZi5zZXRBdHRyaWJ1dGUoImRhdGEtdi1vd25lciIsbC51aWQpLGY9Zi5uZXh0U2libGluZztsLnV0KCl9fXZhciB0ZT1TeW1ib2wodm9pZCAwKSxjZT1TeW1ib2wodm9pZCAwKSxwZT1TeW1ib2wodm9pZCAwKSxQZT1TeW1ib2wodm9pZCAwKSxmZT1bXSx3ZT1udWxsO2Z1bmN0aW9uIGN0KCl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiExO2ZlLnB1c2god2U9aT9udWxsOltdKX1mdW5jdGlvbiBndCgpe2ZlLnBvcCgpLHdlPWZlW2ZlLmxlbmd0aC0xXXx8bnVsbH12YXIgJHQ9MTtmdW5jdGlvbiBFdChpKXskdCs9aX1mdW5jdGlvbiBqZShpKXtyZXR1cm4gaS5keW5hbWljQ2hpbGRyZW49JHQ+MD93ZXx8ZC5FTVBUWV9BUlI6bnVsbCxndCgpLCR0PjAmJndlJiZ3ZS5wdXNoKGkpLGl9ZnVuY3Rpb24gQnQoaSxsLGYsXyxBLEMpe3JldHVybiBqZShGdChpLGwsZixfLEEsQywhMCkpfWZ1bmN0aW9uIGNuKGksbCxmLF8sQSl7cmV0dXJuIGplKHF0KGksbCxmLF8sQSwhMCkpfWZ1bmN0aW9uIFd0KGkpe3JldHVybiBpP2kuX192X2lzVk5vZGU9PT0hMDohMX1mdW5jdGlvbiBodChpLGwpe3JldHVybiBpLnR5cGU9PT1sLnR5cGUmJmkua2V5PT09bC5rZXl9ZnVuY3Rpb24gWnQoaSl7fXZhciBSbj0iX192SW50ZXJuYWwiLEd0PWk9Pnt2YXJ7a2V5Omx9PWk7cmV0dXJuIGwhPW51bGw/bDpudWxsfSxVdD1pPT57dmFye3JlZjpsLHJlZl9rZXk6ZixyZWZfZm9yOl99PWk7cmV0dXJuIGwhPW51bGw/ZC5pc1N0cmluZyhsKXx8RS5pc1JlZihsKXx8ZC5pc0Z1bmN0aW9uKGwpP3tpOmRuLHI6bCxrOmYsZjohIV99Omw6bnVsbH07ZnVuY3Rpb24gRnQoaSl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOm51bGwsZj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06bnVsbCxfPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTowLEE9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOm51bGwsQz1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06aT09PXRlPzA6MSxOPWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdIT09dm9pZCAwP2FyZ3VtZW50c1s2XTohMSxNPWFyZ3VtZW50cy5sZW5ndGg+NyYmYXJndW1lbnRzWzddIT09dm9pZCAwP2FyZ3VtZW50c1s3XTohMSxIPXtfX3ZfaXNWTm9kZTohMCxfX3Zfc2tpcDohMCx0eXBlOmkscHJvcHM6bCxrZXk6bCYmR3QobCkscmVmOmwmJlV0KGwpLHNjb3BlSWQ6VHIsc2xvdFNjb3BlSWRzOm51bGwsY2hpbGRyZW46Zixjb21wb25lbnQ6bnVsbCxzdXNwZW5zZTpudWxsLHNzQ29udGVudDpudWxsLHNzRmFsbGJhY2s6bnVsbCxkaXJzOm51bGwsdHJhbnNpdGlvbjpudWxsLGVsOm51bGwsYW5jaG9yOm51bGwsdGFyZ2V0Om51bGwsdGFyZ2V0QW5jaG9yOm51bGwsc3RhdGljQ291bnQ6MCxzaGFwZUZsYWc6QyxwYXRjaEZsYWc6XyxkeW5hbWljUHJvcHM6QSxkeW5hbWljQ2hpbGRyZW46bnVsbCxhcHBDb250ZXh0Om51bGwsY3R4OmRufTtyZXR1cm4gTT8oRm4oSCxmKSxDJjEyOCYmaS5ub3JtYWxpemUoSCkpOmYmJihILnNoYXBlRmxhZ3w9ZC5pc1N0cmluZyhmKT84OjE2KSwkdD4wJiYhTiYmd2UmJihILnBhdGNoRmxhZz4wfHxDJjYpJiZILnBhdGNoRmxhZyE9PTMyJiZ3ZS5wdXNoKEgpLEh9dmFyIHF0PVhvO2Z1bmN0aW9uIFhvKGkpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpudWxsLGY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGwsXz1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106MCxBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLEM9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiExO2lmKCghaXx8aT09PVVpKSYmKGk9cGUpLFd0KGkpKXt2YXIgTj1laShpLGwsITApO3JldHVybiBmJiZGbihOLGYpLCR0PjAmJiFDJiZ3ZSYmKE4uc2hhcGVGbGFnJjY/d2Vbd2UuaW5kZXhPZihpKV09Tjp3ZS5wdXNoKE4pKSxOLnBhdGNoRmxhZ3w9LTIsTn1pZihibyhpKSYmKGk9aS5fX3ZjY09wdHMpLGwpe2w9Y2kobCk7dmFye2NsYXNzOk0sc3R5bGU6SH09bDtNJiYhZC5pc1N0cmluZyhNKSYmKGwuY2xhc3M9ZC5ub3JtYWxpemVDbGFzcyhNKSksZC5pc09iamVjdChIKSYmKEUuaXNQcm94eShIKSYmIWQuaXNBcnJheShIKSYmKEg9ZC5leHRlbmQoe30sSCkpLGwuc3R5bGU9ZC5ub3JtYWxpemVTdHlsZShIKSl9dmFyIG5lPWQuaXNTdHJpbmcoaSk/MTpxbyhpKT8xMjg6aGEoaSk/NjQ6ZC5pc09iamVjdChpKT80OmQuaXNGdW5jdGlvbihpKT8yOjA7cmV0dXJuIEZ0KGksbCxmLF8sQSxuZSxDLCEwKX1mdW5jdGlvbiBjaShpKXtyZXR1cm4gaT9FLmlzUHJveHkoaSl8fFJuIGluIGk/ZC5leHRlbmQoe30saSk6aTpudWxsfWZ1bmN0aW9uIGVpKGksbCl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExLHtwcm9wczpfLHJlZjpBLHBhdGNoRmxhZzpDLGNoaWxkcmVuOk59PWksTT1sP2JyKF98fHt9LGwpOl8sSD17X192X2lzVk5vZGU6ITAsX192X3NraXA6ITAsdHlwZTppLnR5cGUscHJvcHM6TSxrZXk6TSYmR3QoTSkscmVmOmwmJmwucmVmP2YmJkE/ZC5pc0FycmF5KEEpP0EuY29uY2F0KFV0KGwpKTpbQSxVdChsKV06VXQobCk6QSxzY29wZUlkOmkuc2NvcGVJZCxzbG90U2NvcGVJZHM6aS5zbG90U2NvcGVJZHMsY2hpbGRyZW46Tix0YXJnZXQ6aS50YXJnZXQsdGFyZ2V0QW5jaG9yOmkudGFyZ2V0QW5jaG9yLHN0YXRpY0NvdW50Omkuc3RhdGljQ291bnQsc2hhcGVGbGFnOmkuc2hhcGVGbGFnLHBhdGNoRmxhZzpsJiZpLnR5cGUhPT10ZT9DPT09LTE/MTY6Q3wxNjpDLGR5bmFtaWNQcm9wczppLmR5bmFtaWNQcm9wcyxkeW5hbWljQ2hpbGRyZW46aS5keW5hbWljQ2hpbGRyZW4sYXBwQ29udGV4dDppLmFwcENvbnRleHQsZGlyczppLmRpcnMsdHJhbnNpdGlvbjppLnRyYW5zaXRpb24sY29tcG9uZW50OmkuY29tcG9uZW50LHN1c3BlbnNlOmkuc3VzcGVuc2Usc3NDb250ZW50Omkuc3NDb250ZW50JiZlaShpLnNzQ29udGVudCksc3NGYWxsYmFjazppLnNzRmFsbGJhY2smJmVpKGkuc3NGYWxsYmFjayksZWw6aS5lbCxhbmNob3I6aS5hbmNob3IsY3R4OmkuY3R4LGNlOmkuY2V9O3JldHVybiBIfWZ1bmN0aW9uIEdpKCl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiIgIixsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO3JldHVybiBxdChjZSxudWxsLGksbCl9ZnVuY3Rpb24gR2EoaSxsKXt2YXIgZj1xdChQZSxudWxsLGkpO3JldHVybiBmLnN0YXRpY0NvdW50PWwsZn1mdW5jdGlvbiBNbigpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXToiIixsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gbD8oY3QoKSxjbihwZSxudWxsLGkpKTpxdChwZSxudWxsLGkpfWZ1bmN0aW9uIERuKGkpe3JldHVybiBpPT1udWxsfHx0eXBlb2YgaT09ImJvb2xlYW4iP3F0KHBlKTpkLmlzQXJyYXkoaSk/cXQodGUsbnVsbCxpLnNsaWNlKCkpOnR5cGVvZiBpPT0ib2JqZWN0Ij9JcihpKTpxdChjZSxudWxsLFN0cmluZyhpKSl9ZnVuY3Rpb24gSXIoaSl7cmV0dXJuIGkuZWw9PT1udWxsJiZpLnBhdGNoRmxhZyE9PS0xfHxpLm1lbW8/aTplaShpKX1mdW5jdGlvbiBGbihpLGwpe3ZhciBmPTAse3NoYXBlRmxhZzpffT1pO2lmKGw9PW51bGwpbD1udWxsO2Vsc2UgaWYoZC5pc0FycmF5KGwpKWY9MTY7ZWxzZSBpZih0eXBlb2YgbD09Im9iamVjdCIpaWYoXyYoMXw2NCkpe3ZhciBBPWwuZGVmYXVsdDtBJiYoQS5fYyYmKEEuX2Q9ITEpLEZuKGksQSgpKSxBLl9jJiYoQS5fZD0hMCkpO3JldHVybn1lbHNle2Y9MzI7dmFyIEM9bC5fOyFDJiYhKFJuIGluIGwpP2wuX2N0eD1kbjpDPT09MyYmZG4mJihkbi5zbG90cy5fPT09MT9sLl89MToobC5fPTIsaS5wYXRjaEZsYWd8PTEwMjQpKX1lbHNlIGQuaXNGdW5jdGlvbihsKT8obD17ZGVmYXVsdDpsLF9jdHg6ZG59LGY9MzIpOihsPVN0cmluZyhsKSxfJjY0PyhmPTE2LGw9W0dpKGwpXSk6Zj04KTtpLmNoaWxkcmVuPWwsaS5zaGFwZUZsYWd8PWZ9ZnVuY3Rpb24gYnIoKXtmb3IodmFyIGk9e30sbD0wO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspe3ZhciBmPWw8MHx8YXJndW1lbnRzLmxlbmd0aDw9bD92b2lkIDA6YXJndW1lbnRzW2xdO2Zvcih2YXIgXyBpbiBmKWlmKF89PT0iY2xhc3MiKWkuY2xhc3MhPT1mLmNsYXNzJiYoaS5jbGFzcz1kLm5vcm1hbGl6ZUNsYXNzKFtpLmNsYXNzLGYuY2xhc3NdKSk7ZWxzZSBpZihfPT09InN0eWxlIilpLnN0eWxlPWQubm9ybWFsaXplU3R5bGUoW2kuc3R5bGUsZi5zdHlsZV0pO2Vsc2UgaWYoZC5pc09uKF8pKXt2YXIgQT1pW19dLEM9ZltfXTtDJiZBIT09QyYmIShkLmlzQXJyYXkoQSkmJkEuaW5jbHVkZXMoQykpJiYoaVtfXT1BP1tdLmNvbmNhdChBLEMpOkMpfWVsc2UgXyE9PSIiJiYoaVtfXT1mW19dKX1yZXR1cm4gaX1mdW5jdGlvbiB6cihpLGwsZil7dmFyIF89YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOm51bGw7eHQoaSxsLDcsW2YsX10pfXZhciBRbz1MbygpLGNzPTA7ZnVuY3Rpb24gbm4oaSxsLGYpe3ZhciBfPWkudHlwZSxBPShsP2wuYXBwQ29udGV4dDppLmFwcENvbnRleHQpfHxRbyxDPXt1aWQ6Y3MrKyx2bm9kZTppLHR5cGU6XyxwYXJlbnQ6bCxhcHBDb250ZXh0OkEscm9vdDpudWxsLG5leHQ6bnVsbCxzdWJUcmVlOm51bGwsZWZmZWN0Om51bGwsdXBkYXRlOm51bGwsc2NvcGU6bmV3IEUuRWZmZWN0U2NvcGUoITApLHJlbmRlcjpudWxsLHByb3h5Om51bGwsZXhwb3NlZDpudWxsLGV4cG9zZVByb3h5Om51bGwsd2l0aFByb3h5Om51bGwscHJvdmlkZXM6bD9sLnByb3ZpZGVzOk9iamVjdC5jcmVhdGUoQS5wcm92aWRlcyksYWNjZXNzQ2FjaGU6bnVsbCxyZW5kZXJDYWNoZTpbXSxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlczpudWxsLHByb3BzT3B0aW9uczokYShfLEEpLGVtaXRzT3B0aW9uczpPcihfLEEpLGVtaXQ6bnVsbCxlbWl0dGVkOm51bGwscHJvcHNEZWZhdWx0czpkLkVNUFRZX09CSixpbmhlcml0QXR0cnM6Xy5pbmhlcml0QXR0cnMsY3R4OmQuRU1QVFlfT0JKLGRhdGE6ZC5FTVBUWV9PQkoscHJvcHM6ZC5FTVBUWV9PQkosYXR0cnM6ZC5FTVBUWV9PQkosc2xvdHM6ZC5FTVBUWV9PQkoscmVmczpkLkVNUFRZX09CSixzZXR1cFN0YXRlOmQuRU1QVFlfT0JKLHNldHVwQ29udGV4dDpudWxsLHN1c3BlbnNlOmYsc3VzcGVuc2VJZDpmP2YucGVuZGluZ0lkOjAsYXN5bmNEZXA6bnVsbCxhc3luY1Jlc29sdmVkOiExLGlzTW91bnRlZDohMSxpc1VubW91bnRlZDohMSxpc0RlYWN0aXZhdGVkOiExLGJjOm51bGwsYzpudWxsLGJtOm51bGwsbTpudWxsLGJ1Om51bGwsdTpudWxsLHVtOm51bGwsYnVtOm51bGwsZGE6bnVsbCxhOm51bGwscnRnOm51bGwscnRjOm51bGwsZWM6bnVsbCxzcDpudWxsfTtyZXR1cm4gQy5jdHg9e186Q30sQy5yb290PWw/bC5yb290OkMsQy5lbWl0PUFyLmJpbmQobnVsbCxDKSxpLmNlJiZpLmNlKEMpLEN9dmFyIHBuPW51bGwsVm49KCk9PnBufHxkbix6bj1pPT57cG49aSxpLnNjb3BlLm9uKCl9LENpPSgpPT57cG4mJnBuLnNjb3BlLm9mZigpLHBuPW51bGx9O2Z1bmN0aW9uIHVzKGkpe3JldHVybiBpLnZub2RlLnNoYXBlRmxhZyY0fVMuaXNJblNTUkNvbXBvbmVudFNldHVwPSExO2Z1bmN0aW9uIFlhKGkpe3ZhciBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtTLmlzSW5TU1JDb21wb25lbnRTZXR1cD1sO3Zhcntwcm9wczpmLGNoaWxkcmVuOl99PWkudm5vZGUsQT11cyhpKTtpcyhpLGYsQSxsKSxvcyhpLF8pO3ZhciBDPUE/TmEoaSxsKTp2b2lkIDA7cmV0dXJuIFMuaXNJblNTUkNvbXBvbmVudFNldHVwPSExLEN9ZnVuY3Rpb24gTmEoaSxsKXt2YXIgZj1pLnR5cGU7aS5hY2Nlc3NDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLGkucHJveHk9RS5tYXJrUmF3KG5ldyBQcm94eShpLmN0eCxpZSkpO3ZhcntzZXR1cDpffT1mO2lmKF8pe3ZhciBBPWkuc2V0dXBDb250ZXh0PV8ubGVuZ3RoPjE/RG8oaSk6bnVsbDt6bihpKSxFLnBhdXNlVHJhY2tpbmcoKTt2YXIgQz1lbihfLGksMCxbaS5wcm9wcyxBXSk7aWYoRS5yZXNldFRyYWNraW5nKCksQ2koKSxkLmlzUHJvbWlzZShDKSl7aWYoQy50aGVuKENpLENpKSxsKXJldHVybiBDLnRoZW4oTj0+e2VhKGksTixsKX0pLmNhdGNoKE49PntJKE4saSwwKX0pO2kuYXN5bmNEZXA9Q31lbHNlIGVhKGksQyxsKX1lbHNlIEthKGksbCl9ZnVuY3Rpb24gZWEoaSxsLGYpe2QuaXNGdW5jdGlvbihsKT9pLnR5cGUuX19zc3JJbmxpbmVSZW5kZXI/aS5zc3JSZW5kZXI9bDppLnJlbmRlcj1sOmQuaXNPYmplY3QobCkmJihpLnNldHVwU3RhdGU9RS5wcm94eVJlZnMobCkpLEthKGksZil9dmFyIHNvLHFhO2Z1bmN0aW9uIGZzKGkpe3NvPWkscWE9bD0+e2wucmVuZGVyLl9yYyYmKGwud2l0aFByb3h5PW5ldyBQcm94eShsLmN0eCx4ZSkpfX12YXIgV3I9KCk9PiFzbztmdW5jdGlvbiBLYShpLGwsZil7dmFyIF89aS50eXBlO2lmKCFpLnJlbmRlcil7aWYoIWwmJnNvJiYhXy5yZW5kZXIpe3ZhciBBPV8udGVtcGxhdGV8fG1yKGkpLnRlbXBsYXRlO2lmKEEpe3Zhcntpc0N1c3RvbUVsZW1lbnQ6Qyxjb21waWxlck9wdGlvbnM6Tn09aS5hcHBDb250ZXh0LmNvbmZpZyx7ZGVsaW1pdGVyczpNLGNvbXBpbGVyT3B0aW9uczpIfT1fLG5lPWQuZXh0ZW5kKGQuZXh0ZW5kKHtpc0N1c3RvbUVsZW1lbnQ6QyxkZWxpbWl0ZXJzOk19LE4pLEgpO18ucmVuZGVyPXNvKEEsbmUpfX1pLnJlbmRlcj1fLnJlbmRlcnx8ZC5OT09QLHFhJiZxYShpKX16bihpKSxFLnBhdXNlVHJhY2tpbmcoKSxZdChpKSxFLnJlc2V0VHJhY2tpbmcoKSxDaSgpfWZ1bmN0aW9uIEphKGkpe3JldHVybiBuZXcgUHJveHkoaS5hdHRycyx7Z2V0KGwsZil7cmV0dXJuIEUudHJhY2soaSwiZ2V0IiwiJGF0dHJzIiksbFtmXX19KX1mdW5jdGlvbiBEbyhpKXt2YXIgbD1fPT57aS5leHBvc2VkPV98fHt9fSxmO3JldHVybntnZXQgYXR0cnMoKXtyZXR1cm4gZnx8KGY9SmEoaSkpfSxzbG90czppLnNsb3RzLGVtaXQ6aS5lbWl0LGV4cG9zZTpsfX1mdW5jdGlvbiBMaShpKXtpZihpLmV4cG9zZWQpcmV0dXJuIGkuZXhwb3NlUHJveHl8fChpLmV4cG9zZVByb3h5PW5ldyBQcm94eShFLnByb3h5UmVmcyhFLm1hcmtSYXcoaS5leHBvc2VkKSkse2dldChsLGYpe2lmKGYgaW4gbClyZXR1cm4gbFtmXTtpZihmIGluIEspcmV0dXJuIEtbZl0oaSl9LGhhcyhsLGYpe3JldHVybiBmIGluIGx8fGYgaW4gS319KSl9ZnVuY3Rpb24gX28oaSl7dmFyIGw9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiBkLmlzRnVuY3Rpb24oaSk/aS5kaXNwbGF5TmFtZXx8aS5uYW1lOmkubmFtZXx8bCYmaS5fX25hbWV9ZnVuY3Rpb24gYm8oaSl7cmV0dXJuIGQuaXNGdW5jdGlvbihpKSYmIl9fdmNjT3B0cyJpbiBpfXZhciBkcz0oaSxsKT0+RS5jb21wdXRlZChpLGwsUy5pc0luU1NSQ29tcG9uZW50U2V0dXApO2Z1bmN0aW9uIEZvKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gQnMoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBocyhpKXt9ZnVuY3Rpb24gTHMoaSxsKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBCZSgpe3JldHVybiBPdCgpLnNsb3RzfWZ1bmN0aW9uIFB0KCl7cmV0dXJuIE90KCkuYXR0cnN9ZnVuY3Rpb24gT3QoKXt2YXIgaT1WbigpO3JldHVybiBpLnNldHVwQ29udGV4dHx8KGkuc2V0dXBDb250ZXh0PURvKGkpKX1mdW5jdGlvbiB5bihpLGwpe3ZhciBmPWQuaXNBcnJheShpKT9pLnJlZHVjZSgoQyxOKT0+KENbTl09e30sQykse30pOmk7Zm9yKHZhciBfIGluIGwpe3ZhciBBPWZbX107QT9kLmlzQXJyYXkoQSl8fGQuaXNGdW5jdGlvbihBKT9mW19dPXt0eXBlOkEsZGVmYXVsdDpsW19dfTpBLmRlZmF1bHQ9bFtfXTpBPT09bnVsbCYmKGZbX109e2RlZmF1bHQ6bFtfXX0pfXJldHVybiBmfWZ1bmN0aW9uIEVyKGksbCl7dmFyIGY9e30sXz1mdW5jdGlvbihDKXtsLmluY2x1ZGVzKEMpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixDLHtlbnVtZXJhYmxlOiEwLGdldDooKT0+aVtDXX0pfTtmb3IodmFyIEEgaW4gaSlfKEEpO3JldHVybiBmfWZ1bmN0aW9uIEFpKGkpe3ZhciBsPVZuKCksZj1pKCk7cmV0dXJuIENpKCksZC5pc1Byb21pc2UoZikmJihmPWYuY2F0Y2goXz0+e3Rocm93IHpuKGwpLF99KSksW2YsKCk9PnpuKGwpXX1mdW5jdGlvbiBZaShpLGwsZil7dmFyIF89YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gXz09PTI/ZC5pc09iamVjdChsKSYmIWQuaXNBcnJheShsKT9XdChsKT9xdChpLG51bGwsW2xdKTpxdChpLGwpOnF0KGksbnVsbCxsKTooXz4zP2Y9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOl89PT0zJiZXdChmKSYmKGY9W2ZdKSxxdChpLGwsZikpfXZhciBFbz1TeW1ib2woIiIpLGthPSgpPT57e3ZhciBpPVVuKEVvKTtyZXR1cm4gaX19O2Z1bmN0aW9uIHRhKCl7fWZ1bmN0aW9uIGdzKGksbCxmLF8pe3ZhciBBPWZbX107aWYoQSYmcHMoQSxpKSlyZXR1cm4gQTt2YXIgQz1sKCk7cmV0dXJuIEMubWVtbz1pLnNsaWNlKCksZltfXT1DfWZ1bmN0aW9uIHBzKGksbCl7dmFyIGY9aS5tZW1vO2lmKGYubGVuZ3RoIT1sLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIF89MDtfPGYubGVuZ3RoO18rKylpZihkLmhhc0NoYW5nZWQoZltfXSxsW19dKSlyZXR1cm4hMTtyZXR1cm4gJHQ+MCYmd2UmJndlLnB1c2goaSksITB9dmFyIGRsPSIzLjIuNDciLCRsPXtjcmVhdGVDb21wb25lbnRJbnN0YW5jZTpubixzZXR1cENvbXBvbmVudDpZYSxyZW5kZXJDb21wb25lbnRSb290OkppLHNldEN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTpfaSxpc1ZOb2RlOld0LG5vcm1hbGl6ZVZOb2RlOkRufSxVbD0kbCxwYT1udWxsLHZhPW51bGw7ZnVuY3Rpb24gbmEoaSxsKXtyZXR1cm4gaT09PSJpbnB1dCI/bmV3IEIuVW5pSW5wdXRFbGVtZW50KGksbCk6aT09PSJ0ZXh0YXJlYSI/bmV3IEIuVW5pVGV4dEFyZWFFbGVtZW50KGksbCk6bmV3IEIuVW5pRWxlbWVudChpLGwpfWZ1bmN0aW9uIG1hKGksbCl7cmV0dXJuIG5ldyBCLlVuaVRleHROb2RlKGksbCl9ZnVuY3Rpb24gUmEoaSxsKXtyZXR1cm4gbmV3IEIuVW5pQ29tbWVudE5vZGUoaSxsKX12YXIgdnMscmE9e2luc2VydDooaSxsLGYpPT57bC5pbnNlcnRCZWZvcmUoaSxmfHxudWxsKX0scmVtb3ZlOmk9Pnt2YXIgbD1pLnBhcmVudE5vZGU7bCYmbC5yZW1vdmVDaGlsZChpKX0sY3JlYXRlRWxlbWVudDooaSxsKT0+bmEoaSxsKSxjcmVhdGVUZXh0OihpLGwpPT5tYShpLGwpLGNyZWF0ZUNvbW1lbnQ6KGksbCk9PlJhKGksbCksc2V0VGV4dDooaSxsKT0+e2kubm9kZVZhbHVlPWx9LHNldEVsZW1lbnRUZXh0OihpLGwpPT57aS50ZXh0Q29udGVudD1sfSxwYXJlbnROb2RlOmk9PmkucGFyZW50Tm9kZSxuZXh0U2libGluZzppPT5pLm5leHRTaWJsaW5nLHNldFNjb3BlSWQoaSxsKXtpLnNldEF0dHJpYnV0ZShsLCIiKX0sY2xvbmVOb2RlKGkpe3ZhciBsPWkuY2xvbmVOb2RlKCEwKTtyZXR1cm4iX3ZhbHVlImluIGkmJihsLl92YWx1ZT1pLl92YWx1ZSksbH0saW5zZXJ0U3RhdGljQ29udGVudChpLGwsZil7dmFyIF89dnN8fCh2cz1uYSgiZGl2IikpO18uaW5uZXJIVE1MPWk7Zm9yKHZhciBBPV8uZmlyc3RDaGlsZCxDPUEsTj1DO0M7KU49QyxyYS5pbnNlcnQoQyxsLGYpLEM9Xy5maXJzdENoaWxkO3JldHVybltBLE5dfX07ZnVuY3Rpb24gTXMoaSxsKXtsPT1udWxsJiYobD0iIiksaS5zZXRBdHRyaWJ1dGUoImNsYXNzIixsKX1mdW5jdGlvbiBIbChpLGwsZil7aWYoIWYpaS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7ZWxzZSBpZihkLmlzU3RyaW5nKGYpKWwhPT1mJiZpLnNldEF0dHJpYnV0ZSgic3R5bGUiLGYpO2Vsc2V7dmFyIF89e30sQT1sJiYhZC5pc1N0cmluZyhsKTtpZihBKXtmb3IodmFyIEMgaW4gbClmW0NdPT1udWxsJiYoX1tDXT0iIik7Zm9yKHZhciBOIGluIGYpe3ZhciBNPWZbTl07TSE9PWxbTl0mJihfW05dPU0pfX1lbHNlIGZvcih2YXIgSCBpbiBmKV9bSF09ZltIXTtPYmplY3Qua2V5cyhfKS5sZW5ndGgmJmkuc2V0QXR0cmlidXRlKCJzdHlsZSIsXyl9fWZ1bmN0aW9uIG1zKGksbCxmKXtmPT1udWxsP2kucmVtb3ZlQXR0cmlidXRlKGwpOmkuc2V0QXR0cmlidXRlKGwsZil9ZnVuY3Rpb24gRHMoaSxsLGYsXyl7aS5hZGRFdmVudExpc3RlbmVyKGwsZixfKX1mdW5jdGlvbiBGcyhpLGwsZixfKXtpLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxmLF8pfWZ1bmN0aW9uIFZzKGksbCxmLF8pe3ZhciBBPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTpudWxsLEM9aS5fdmVpfHwoaS5fdmVpPXt9KSxOPUNbbF07aWYoXyYmTilOLnZhbHVlPV87ZWxzZXt2YXJbTSxIXT14YShsKTtpZihfKXt2YXIgbmU9Q1tsXT1obChfLEEpO0RzKGksTSxuZSxIKX1lbHNlIE4mJihGcyhpLE0sTixIKSxDW2xdPXZvaWQgMCl9fXZhciBfcz0vKD86T25jZXxQYXNzaXZlfENhcHR1cmUpJC87ZnVuY3Rpb24geGEoaSl7dmFyIGw7aWYoX3MudGVzdChpKSl7bD17fTtmb3IodmFyIGY7Zj1pLm1hdGNoKF9zKTspaT1pLnNsaWNlKDAsaS5sZW5ndGgtZlswXS5sZW5ndGgpLGxbZlswXS50b0xvd2VyQ2FzZSgpXT0hMH1yZXR1cm5bZC5oeXBoZW5hdGUoaS5zbGljZSgyKSksbF19ZnVuY3Rpb24gaGwoaSxsKXt2YXIgZj1BPT57eHQoZi52YWx1ZSxsLDUsW0FdKX07Zi52YWx1ZT1pO3ZhciBfPW5ldyBTZXQ7cmV0dXJuIGQuaXNBcnJheShmLnZhbHVlKT9mLnZhbHVlLmZvckVhY2goQT0+e0EubW9kaWZpZXJzJiZBLm1vZGlmaWVycy5mb3JFYWNoKEM9PntfLmFkZChDKX0pfSk6KGYudmFsdWUubW9kaWZpZXJzJiZmLnZhbHVlLm1vZGlmaWVycy5mb3JFYWNoKEE9PntfLmFkZChBKX0pLCRzKGYsbCkpLGYubW9kaWZpZXJzPVsuLi5fXSxmfWZ1bmN0aW9uICRzKGksbCl7aWYoISFsKXt2YXJ7JHd4c01vZHVsZXM6Zn09bDtpZighIWYpe3ZhciBfPWkudmFsdWUudG9TdHJpbmcoKTshZi5maW5kKEE9Pl8uaW5kZXhPZigiLiIrQSsiLiIpPi0xKXx8KGkud3hzRXZlbnQ9aS52YWx1ZSgpKX19fXZhciBqbD1mdW5jdGlvbihpLGwsZixfKXt2YXIgQT1hcmd1bWVudHMubGVuZ3RoPjY/YXJndW1lbnRzWzZdOnZvaWQgMDtzd2l0Y2gobCl7Y2FzZSJjbGFzcyI6TXMoaSxfKTticmVhaztjYXNlInN0eWxlIjpIbChpLGYsXyk7YnJlYWs7ZGVmYXVsdDppZihkLmlzT24obCkpZC5pc01vZGVsTGlzdGVuZXIobCl8fFZzKGksbCxmLF8sQSk7ZWxzZXtpZihkLmlzT2JqZWN0KF8pKXt2YXIgQz1mPT09XztpZihfPUIuSlNPTl9QUk9UT0NPTCtKU09OLnN0cmluZ2lmeShfKSxDJiZpLmdldEF0dHJpYnV0ZShsKT09PV8pcmV0dXJufWVsc2UgaWYoZj09PV8pcmV0dXJuO21zKGksbCxfKX1icmVha319O2Z1bmN0aW9uIFZvKCl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOiIkc3R5bGUiO3t2YXIgbD1WbigpO2lmKCFsKXJldHVybiBkLkVNUFRZX09CSjt2YXIgZj1sLnR5cGUuX19jc3NNb2R1bGVzO2lmKCFmKXJldHVybiBkLkVNUFRZX09CSjt2YXIgXz1mW2ldO3JldHVybiBffHxkLkVNUFRZX09CSn19ZnVuY3Rpb24gWmEoaSl7dmFyIGw9Vm4oKTtpZighIWwpe3ZhciBmPSgpPT5fYShsLnN1YlRyZWUsaShsLnByb3h5KSk7WG4oKCk9PnFyKGYse2ZsdXNoOiJwb3N0In0pKSxRbihmKX19ZnVuY3Rpb24gX2EoaSxsKXtpZihpLnNoYXBlRmxhZyYxMjgpe3ZhciBmPWkuc3VzcGVuc2U7aT1mLmFjdGl2ZUJyYW5jaCxmLnBlbmRpbmdCcmFuY2gmJiFmLmlzSHlkcmF0aW5nJiZmLmVmZmVjdHMucHVzaCgoKT0+e19hKGYuYWN0aXZlQnJhbmNoLGwpfSl9Zm9yKDtpLmNvbXBvbmVudDspaT1pLmNvbXBvbmVudC5zdWJUcmVlO2lmKGkuc2hhcGVGbGFnJjEmJmkuZWwpQmEoaS5lbCxsKTtlbHNlIGlmKGkudHlwZT09PXRlKWkuY2hpbGRyZW4uZm9yRWFjaChDPT5fYShDLGwpKTtlbHNlIGlmKGkudHlwZT09PVBlKWZvcih2YXJ7ZWw6XyxhbmNob3I6QX09aTtfJiYoQmEoXyxsKSxfIT09QSk7KV89Xy5uZXh0U2libGluZ31mdW5jdGlvbiBCYShpLGwpe2lmKGkubm9kZVR5cGU9PT0xKWZvcih2YXIgZiBpbiBsKWkuc2V0QXR0cmlidXRlKCItLSIuY29uY2F0KGYpLGxbZl0pfXZhciB5bz0idHJhbnNpdGlvbiIsaWE9ImFuaW1hdGlvbiIsWGE9KGksbCk9Pnt2YXJ7c2xvdHM6Zn09bDtyZXR1cm4gWWkoTXQsSHMoaSksZil9O1hhLmRpc3BsYXlOYW1lPSJUcmFuc2l0aW9uIjt2YXIgVXM9e25hbWU6U3RyaW5nLHR5cGU6U3RyaW5nLGNzczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGR1cmF0aW9uOltTdHJpbmcsTnVtYmVyLE9iamVjdF0sZW50ZXJGcm9tQ2xhc3M6U3RyaW5nLGVudGVyQWN0aXZlQ2xhc3M6U3RyaW5nLGVudGVyVG9DbGFzczpTdHJpbmcsYXBwZWFyRnJvbUNsYXNzOlN0cmluZyxhcHBlYXJBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyVG9DbGFzczpTdHJpbmcsbGVhdmVGcm9tQ2xhc3M6U3RyaW5nLGxlYXZlQWN0aXZlQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmd9LGdsPVhhLnByb3BzPWQuZXh0ZW5kKHt9LE10LnByb3BzLFVzKSwkbz1mdW5jdGlvbihpKXt2YXIgbD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06W107ZC5pc0FycmF5KGkpP2kuZm9yRWFjaChmPT5mKC4uLmwpKTppJiZpKC4uLmwpfSxicz1pPT5pP2QuaXNBcnJheShpKT9pLnNvbWUobD0+bC5sZW5ndGg+MSk6aS5sZW5ndGg+MTohMTtmdW5jdGlvbiBIcyhpKXt2YXIgbD17fTtmb3IodmFyIGYgaW4gaSlmIGluIFVzfHwobFtmXT1pW2ZdKTtpZihpLmNzcz09PSExKXJldHVybiBsO3ZhcntuYW1lOl89InYiLHR5cGU6QSxkdXJhdGlvbjpDLGVudGVyRnJvbUNsYXNzOk49IiIuY29uY2F0KF8sIi1lbnRlci1mcm9tIiksZW50ZXJBY3RpdmVDbGFzczpNPSIiLmNvbmNhdChfLCItZW50ZXItYWN0aXZlIiksZW50ZXJUb0NsYXNzOkg9IiIuY29uY2F0KF8sIi1lbnRlci10byIpLGFwcGVhckZyb21DbGFzczpuZT1OLGFwcGVhckFjdGl2ZUNsYXNzOnZlPU0sYXBwZWFyVG9DbGFzczpMZT1ILGxlYXZlRnJvbUNsYXNzOnVlPSIiLmNvbmNhdChfLCItbGVhdmUtZnJvbSIpLGxlYXZlQWN0aXZlQ2xhc3M6a2U9IiIuY29uY2F0KF8sIi1sZWF2ZS1hY3RpdmUiKSxsZWF2ZVRvQ2xhc3M6WWU9IiIuY29uY2F0KF8sIi1sZWF2ZS10byIpfT1pLGZ0PVFhKEMpLFFlPWZ0JiZmdFswXSxSZT1mdCYmZnRbMV0se29uQmVmb3JlRW50ZXI6bWUsb25FbnRlcjp5ZSxvbkVudGVyQ2FuY2VsbGVkOkZlLG9uTGVhdmU6QWUsb25MZWF2ZUNhbmNlbGxlZDpfdCxvbkJlZm9yZUFwcGVhcjpBdD1tZSxvbkFwcGVhcjpLZT15ZSxvbkFwcGVhckNhbmNlbGxlZDpOdD1GZX09bCxMPShyZSxvZSwkZSk9PntvYShyZSxvZT9MZTpIKSxvYShyZSxvZT92ZTpNKSwkZSYmJGUoKX0saj0ocmUsb2UpPT57b2EocmUsWWUpLG9hKHJlLGtlKSxvZSYmb2UoKX0sYWU9cmU9PihvZSwkZSk9Pnt2YXIgcnQ9cmU/S2U6eWUscWU9KCk9Pkwob2UscmUsJGUpOyRvKHJ0LFtvZSxxZV0pLHBsKCgpPT57b2Eob2UscmU/bmU6TiksQnIob2UscmU/TGU6SCksYnMocnQpfHxqcyhvZSxBLFFlLHFlKX0pfTtyZXR1cm4gZC5leHRlbmQobCx7b25CZWZvcmVFbnRlcihyZSl7JG8obWUsW3JlXSksQnIocmUsTiksQnIocmUsTSl9LG9uQmVmb3JlQXBwZWFyKHJlKXskbyhBdCxbcmVdKSxCcihyZSxuZSksQnIocmUsdmUpfSxvbkVudGVyOmFlKCExKSxvbkFwcGVhcjphZSghMCksb25MZWF2ZShyZSxvZSl7dmFyICRlPSgpPT5qKHJlLG9lKTtCcihyZSx1ZSksdmwoKSxCcihyZSxrZSkscGwoKCk9PntvYShyZSx1ZSksQnIocmUsWWUpLGJzKEFlKXx8anMocmUsQSxSZSwkZSl9KSwkbyhBZSxbcmUsJGVdKX0sb25FbnRlckNhbmNlbGxlZChyZSl7TChyZSwhMSksJG8oRmUsW3JlXSl9LG9uQXBwZWFyQ2FuY2VsbGVkKHJlKXtMKHJlLCEwKSwkbyhOdCxbcmVdKX0sb25MZWF2ZUNhbmNlbGxlZChyZSl7aihyZSksJG8oX3QsW3JlXSl9fSl9ZnVuY3Rpb24gUWEoaSl7aWYoaT09bnVsbClyZXR1cm4gbnVsbDtpZihkLmlzT2JqZWN0KGkpKXJldHVyblt0aShpLmVudGVyKSx0aShpLmxlYXZlKV07dmFyIGw9dGkoaSk7cmV0dXJuW2wsbF19ZnVuY3Rpb24gdGkoaSl7dmFyIGw9ZC50b051bWJlcihpKTtyZXR1cm4gbH1mdW5jdGlvbiBCcihpLGwpe2wuc3BsaXQoL1xzKy8pLmZvckVhY2goZj0+ZiYmaS5jbGFzc0xpc3QuYWRkKGYpKSwoaS5fdnRjfHwoaS5fdnRjPW5ldyBTZXQpKS5hZGQobCl9ZnVuY3Rpb24gb2EoaSxsKXtsLnNwbGl0KC9ccysvKS5mb3JFYWNoKF89Pl8mJmkuY2xhc3NMaXN0LnJlbW92ZShfKSk7dmFye192dGM6Zn09aTtmJiYoZi5kZWxldGUobCksZi5zaXplfHwoaS5fdnRjPXZvaWQgMCkpfWZ1bmN0aW9uIHBsKGkpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZShpKX0pfXZhciB6bD0wO2Z1bmN0aW9uIGpzKGksbCxmLF8pe3ZhciBBPWkuX2VuZElkPSsremwsQz0oKT0+e0E9PT1pLl9lbmRJZCYmXygpfTtpZihmKXJldHVybiBzZXRUaW1lb3V0KEMsZik7dmFye3R5cGU6Tix0aW1lb3V0Ok0scHJvcENvdW50Okh9PUVzKGksbCk7aWYoIU4pcmV0dXJuIF8oKTt2YXIgbmU9TisiZW5kIix2ZT0wLExlPSgpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKG5lLHVlKSxDKCl9LHVlPWtlPT57a2UudGFyZ2V0PT09aSYmKyt2ZT49SCYmTGUoKX07c2V0VGltZW91dCgoKT0+e3ZlPEgmJkxlKCl9LE0rMSksaS5hZGRFdmVudExpc3RlbmVyKG5lLHVlKX1mdW5jdGlvbiBFcyhpLGwpe3ZhciBmPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpLF89WWU9PihmW1llXXx8IiIpLnNwbGl0KCIsICIpLEE9Xyh5bysiRGVsYXkiKSxDPV8oeW8rIkR1cmF0aW9uIiksTj16cyhBLEMpLE09XyhpYSsiRGVsYXkiKSxIPV8oaWErIkR1cmF0aW9uIiksbmU9enMoTSxIKSx2ZT1udWxsLExlPTAsdWU9MDtsPT09eW8/Tj4wJiYodmU9eW8sTGU9Tix1ZT1DLmxlbmd0aCk6bD09PWlhP25lPjAmJih2ZT1pYSxMZT1uZSx1ZT1ILmxlbmd0aCk6KExlPU1hdGgubWF4KE4sbmUpLHZlPUxlPjA/Tj5uZT95bzppYTpudWxsLHVlPXZlP3ZlPT09eW8/Qy5sZW5ndGg6SC5sZW5ndGg6MCk7dmFyIGtlPXZlPT09eW8mJi9cYih0cmFuc2Zvcm18YWxsKSgsfCQpLy50ZXN0KGZbeW8rIlByb3BlcnR5Il0pO3JldHVybnt0eXBlOnZlLHRpbWVvdXQ6TGUscHJvcENvdW50OnVlLGhhc1RyYW5zZm9ybTprZX19ZnVuY3Rpb24genMoaSxsKXtmb3IoO2kubGVuZ3RoPGwubGVuZ3RoOylpPWkuY29uY2F0KGkpO3JldHVybiBNYXRoLm1heCguLi5sLm1hcCgoZixfKT0+V3MoZikrV3MoaVtfXSkpKX1mdW5jdGlvbiBXcyhpKXtyZXR1cm4gTnVtYmVyKGkuc2xpY2UoMCwtMSkucmVwbGFjZSgiLCIsIi4iKSkqMWUzfWZ1bmN0aW9uIHZsKCl7cmV0dXJuIGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0fXZhciBHcz1uZXcgV2Vha01hcCx5cz1uZXcgV2Vha01hcCxTcz17bmFtZToiVHJhbnNpdGlvbkdyb3VwIixwcm9wczpkLmV4dGVuZCh7fSxnbCx7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3RyaW5nfSksc2V0dXAoaSxsKXt2YXJ7c2xvdHM6Zn09bCxfPVZuKCksQT1ncigpLEMsTjtyZXR1cm4gUW4oKCk9PntpZighIUMubGVuZ3RoKXt2YXIgTT1pLm1vdmVDbGFzc3x8IiIuY29uY2F0KGkubmFtZXx8InYiLCItbW92ZSIpO2lmKCEhdihDWzBdLmVsLF8udm5vZGUuZWwsTSkpe0MuZm9yRWFjaChfbCksQy5mb3JFYWNoKGEpO3ZhciBIPUMuZmlsdGVyKHUpO3ZsKCksSC5mb3JFYWNoKG5lPT57dmFyIHZlPW5lLmVsLExlPXZlLnN0eWxlO0JyKHZlLE0pLExlLnRyYW5zZm9ybT1MZS53ZWJraXRUcmFuc2Zvcm09TGUudHJhbnNpdGlvbkR1cmF0aW9uPSIiO3ZhciB1ZT12ZS5fbW92ZUNiPWtlPT57a2UmJmtlLnRhcmdldCE9PXZlfHwoIWtlfHwvdHJhbnNmb3JtJC8udGVzdChrZS5wcm9wZXJ0eU5hbWUpKSYmKHZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHVlKSx2ZS5fbW92ZUNiPW51bGwsb2EodmUsTSkpfTt2ZS5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix1ZSl9KX19fSksKCk9Pnt2YXIgTT1FLnRvUmF3KGkpLEg9SHMoTSksbmU9TS50YWd8fHRlO0M9TixOPWYuZGVmYXVsdD9OaShmLmRlZmF1bHQoKSk6W107Zm9yKHZhciB2ZT0wO3ZlPE4ubGVuZ3RoO3ZlKyspe3ZhciBMZT1OW3ZlXTtMZS5rZXkhPW51bGwmJlZyKExlLFpyKExlLEgsQSxfKSl9aWYoQylmb3IodmFyIHVlPTA7dWU8Qy5sZW5ndGg7dWUrKyl7dmFyIGtlPUNbdWVdO1ZyKGtlLFpyKGtlLEgsQSxfKSksR3Muc2V0KGtlLGtlLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKX1yZXR1cm4gcXQobmUsbnVsbCxOKX19fSx3cz1pPT5kZWxldGUgaS5tb2RlO1NzLnByb3BzO3ZhciBtbD1TcztmdW5jdGlvbiBfbChpKXt2YXIgbD1pLmVsO2wuX21vdmVDYiYmbC5fbW92ZUNiKCksbC5fZW50ZXJDYiYmbC5fZW50ZXJDYigpfWZ1bmN0aW9uIGEoaSl7eXMuc2V0KGksaS5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSl9ZnVuY3Rpb24gdShpKXt2YXIgbD1Hcy5nZXQoaSksZj15cy5nZXQoaSksXz1sLmxlZnQtZi5sZWZ0LEE9bC50b3AtZi50b3A7aWYoX3x8QSl7dmFyIEM9aS5lbC5zdHlsZTtyZXR1cm4gQy50cmFuc2Zvcm09Qy53ZWJraXRUcmFuc2Zvcm09InRyYW5zbGF0ZSgiLmNvbmNhdChfLCJweCwiKS5jb25jYXQoQSwicHgpIiksQy50cmFuc2l0aW9uRHVyYXRpb249IjBzIixpfX1mdW5jdGlvbiB2KGksbCxmKXt2YXIgXz1pLmNsb25lTm9kZSgpO2kuX3Z0YyYmaS5fdnRjLmZvckVhY2goTj0+e04uc3BsaXQoL1xzKy8pLmZvckVhY2goTT0+TSYmXy5jbGFzc0xpc3QucmVtb3ZlKE0pKX0pLGYuc3BsaXQoL1xzKy8pLmZvckVhY2goTj0+TiYmXy5jbGFzc0xpc3QuYWRkKE4pKSxfLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3ZhciBBPWwubm9kZVR5cGU9PT0xP2w6bC5wYXJlbnROb2RlO0EuYXBwZW5kQ2hpbGQoXyk7dmFye2hhc1RyYW5zZm9ybTpDfT1FcyhfKTtyZXR1cm4gQS5yZW1vdmVDaGlsZChfKSxDfXZhciB5PWk9Pnt2YXIgbD1pLnByb3BzWyJvblVwZGF0ZTptb2RlbFZhbHVlIl07cmV0dXJuIGQuaXNBcnJheShsKT9mPT5kLmludm9rZUFycmF5Rm5zKGwsZik6bH0sUD17Y3JlYXRlZChpLGwsZil7dmFye3ZhbHVlOl8sbW9kaWZpZXJzOnt0cmltOkEsbnVtYmVyOkN9fT1sO2kudmFsdWU9Xz09bnVsbD8iIjpfLGkuX2Fzc2lnbj15KGYpLERzKGksImlucHV0IixOPT57dmFyIE09Ti5kZXRhaWwudmFsdWUsSD1pLnBhZ2VOb2RlO2kucGFnZU5vZGU9bnVsbCxpLnZhbHVlPU0saS5wYWdlTm9kZT1ILEE/TT1NLnRyaW0oKTpDJiYoTT1kLnRvTnVtYmVyKE0pKSxpLl9hc3NpZ24oTSl9KX0sYmVmb3JlVXBkYXRlKGksbCxmKXt2YXJ7dmFsdWU6X309bDtpLl9hc3NpZ249eShmKTt2YXIgQT1fPT1udWxsPyIiOl87aS52YWx1ZSE9PUEmJihpLnZhbHVlPUEpfX0sTz1QLEY9WyJjdHJsIiwic2hpZnQiLCJhbHQiLCJtZXRhIl0sRz17c3RvcDppPT5pLnN0b3BQcm9wYWdhdGlvbigpLHByZXZlbnQ6aT0+aS5wcmV2ZW50RGVmYXVsdCgpLHNlbGY6aT0+aS50YXJnZXQhPT1pLmN1cnJlbnRUYXJnZXQsY3RybDppPT4haS5jdHJsS2V5LHNoaWZ0Omk9PiFpLnNoaWZ0S2V5LGFsdDppPT4haS5hbHRLZXksbWV0YTppPT4haS5tZXRhS2V5LGxlZnQ6aT0+ImJ1dHRvbiJpbiBpJiZpLmJ1dHRvbiE9PTAsbWlkZGxlOmk9PiJidXR0b24iaW4gaSYmaS5idXR0b24hPT0xLHJpZ2h0Omk9PiJidXR0b24iaW4gaSYmaS5idXR0b24hPT0yLGV4YWN0OihpLGwpPT5GLnNvbWUoZj0+aVsiIi5jb25jYXQoZiwiS2V5IildJiYhbC5pbmNsdWRlcyhmKSl9LFk9KGksbCk9Pnt2YXIgZj1mdW5jdGlvbihfKXtmb3IodmFyIEE9MDtBPGwubGVuZ3RoO0ErKyl7dmFyIEM9R1tsW0FdXTtpZihDJiZDKF8sbCkpcmV0dXJufWZvcih2YXIgTj1hcmd1bWVudHMubGVuZ3RoLE09bmV3IEFycmF5KE4+MT9OLTE6MCksSD0xO0g8TjtIKyspTVtILTFdPWFyZ3VtZW50c1tIXTtyZXR1cm4gaShfLC4uLk0pfTtyZXR1cm4gZi5tb2RpZmllcnM9bCxmfSxsZT17ZXNjOiJlc2NhcGUiLHNwYWNlOiIgIix1cDoiYXJyb3ctdXAiLGxlZnQ6ImFycm93LWxlZnQiLHJpZ2h0OiJhcnJvdy1yaWdodCIsZG93bjoiYXJyb3ctZG93biIsZGVsZXRlOiJiYWNrc3BhY2UifSx6ZT0oaSxsKT0+Zj0+e2lmKCJrZXkiaW4gZil7dmFyIF89ZC5oeXBoZW5hdGUoZi5rZXkpO2lmKGwuc29tZShBPT5BPT09X3x8bGVbQV09PT1fKSlyZXR1cm4gaShmKX19LGF0PXtiZWZvcmVNb3VudChpLGwpe3Zhcnt2YWx1ZTpmfT1sO2dlKGksZil9LHVwZGF0ZWQoaSxsKXt2YXJ7dmFsdWU6ZixvbGRWYWx1ZTpffT1sOyFmIT0hXyYmZ2UoaSxmKX0sYmVmb3JlVW5tb3VudChpLGwpe3Zhcnt2YWx1ZTpmfT1sO2dlKGksZil9fTtmdW5jdGlvbiBnZShpLGwpe2kuc2V0QXR0cmlidXRlKCIudlNob3ciLCEhbCl9dmFyIEdlPWQuZXh0ZW5kKHtwYXRjaFByb3A6amwsZm9yY2VQYXRjaFByb3A6Qi5mb3JjZVBhdGNoUHJvcH0scmEpLFhlO2Z1bmN0aW9uIHd0KCl7cmV0dXJuIFhlfHwoWGU9emEoR2UpKX12YXIgaXQ9ZnVuY3Rpb24oKXt3dCgpLnJlbmRlciguLi5hcmd1bWVudHMpfSxDZT1mdW5jdGlvbigpe3ZhciBpPXd0KCkuY3JlYXRlQXBwKC4uLmFyZ3VtZW50cykse21vdW50Omx9PWk7cmV0dXJuIGkubW91bnQ9Zj0+KGQuaXNTdHJpbmcoZikmJihmPVJhKGYpKSxmJiZsKGYsITEsITEpKSxpfSxFZT1DZTtmdW5jdGlvbiBUZSgpe31mdW5jdGlvbiBsdCgpe31mdW5jdGlvbiBOZShpKXtyZXR1cm4gZC5pc09iamVjdChpKT9CLkpTT05fUFJPVE9DT0wrSlNPTi5zdHJpbmdpZnkoaSk6aX12YXIgQ3Q9aT0+TmUoaSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJjYW1lbGl6ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FtZWxpemV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsImNhcGl0YWxpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLmNhcGl0YWxpemV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIm5vcm1hbGl6ZUNsYXNzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5ub3JtYWxpemVDbGFzc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywibm9ybWFsaXplUHJvcHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLm5vcm1hbGl6ZVByb3BzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJub3JtYWxpemVTdHlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQubm9ybWFsaXplU3R5bGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsInRvRGlzcGxheVN0cmluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQudG9EaXNwbGF5U3RyaW5nfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJ0b0hhbmRsZXJLZXkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLnRvSGFuZGxlcktleX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiRWZmZWN0U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLkVmZmVjdFNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJSZWFjdGl2ZUVmZmVjdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuUmVhY3RpdmVFZmZlY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsImN1c3RvbVJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuY3VzdG9tUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJlZmZlY3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmVmZmVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiZWZmZWN0U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmVmZmVjdFNjb3BlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJnZXRDdXJyZW50U2NvcGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmdldEN1cnJlbnRTY29wZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiaXNQcm94eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuaXNQcm94eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiaXNSZWFjdGl2ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuaXNSZWFjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiaXNSZWFkb25seSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUuaXNSZWFkb25seX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywiaXNSZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmlzUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJpc1NoYWxsb3ciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmlzU2hhbGxvd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywibWFya1JhdyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUubWFya1Jhd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywib25TY29wZURpc3Bvc2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLm9uU2NvcGVEaXNwb3NlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJwcm94eVJlZnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnByb3h5UmVmc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywicmVhY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnJlYWN0aXZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJyZWFkb25seSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUucmVhZG9ubHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsInJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUucmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJzaGFsbG93UmVhY3RpdmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnNoYWxsb3dSZWFjdGl2ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywic2hhbGxvd1JlYWRvbmx5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5zaGFsbG93UmVhZG9ubHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsInNoYWxsb3dSZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnNoYWxsb3dSZWZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsInN0b3AiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnN0b3B9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsInRvUmF3Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS50b1Jhd319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywidG9SZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnRvUmVmfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLCJ0b1JlZnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnRvUmVmc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywidHJpZ2dlclJlZiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUudHJpZ2dlclJlZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUywidW5yZWYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLnVucmVmfX0pLFMuQmFzZVRyYW5zaXRpb249TXQsUy5CYXNlVHJhbnNpdGlvblByb3BzVmFsaWRhdG9ycz1KcixTLkNvbW1lbnQ9cGUsUy5GcmFnbWVudD10ZSxTLktlZXBBbGl2ZT0kaSxTLlN0YXRpYz1QZSxTLlN1c3BlbnNlPU5uLFMuVGVsZXBvcnQ9WCxTLlRleHQ9Y2UsUy5UcmFuc2l0aW9uPVhhLFMuVHJhbnNpdGlvbkdyb3VwPW1sLFMuYXNzZXJ0TnVtYmVyPUx0LFMuY2FsbFdpdGhBc3luY0Vycm9ySGFuZGxpbmc9eHQsUy5jYWxsV2l0aEVycm9ySGFuZGxpbmc9ZW4sUy5jbG9uZVZOb2RlPWVpLFMuY29tcGF0VXRpbHM9dmEsUy5jb21wdXRlZD1kcyxTLmNyZWF0ZUFwcD1DZSxTLmNyZWF0ZUJsb2NrPWNuLFMuY3JlYXRlQ29tbWVudD1SYSxTLmNyZWF0ZUNvbW1lbnRWTm9kZT1NbixTLmNyZWF0ZUVsZW1lbnQ9bmEsUy5jcmVhdGVFbGVtZW50QmxvY2s9QnQsUy5jcmVhdGVFbGVtZW50Vk5vZGU9RnQsUy5jcmVhdGVIeWRyYXRpb25SZW5kZXJlcj1XYSxTLmNyZWF0ZVByb3BzUmVzdFByb3h5PUVyLFMuY3JlYXRlUmVuZGVyZXI9emEsUy5jcmVhdGVTU1JBcHA9RWUsUy5jcmVhdGVTbG90cz1RLFMuY3JlYXRlU3RhdGljVk5vZGU9R2EsUy5jcmVhdGVUZXh0Tm9kZT1tYSxTLmNyZWF0ZVRleHRWTm9kZT1HaSxTLmNyZWF0ZVZOb2RlPXF0LFMuY3JlYXRlVnVlQXBwPUNlLFMuZGVmaW5lQXN5bmNDb21wb25lbnQ9WHIsUy5kZWZpbmVDb21wb25lbnQ9cHIsUy5kZWZpbmVFbWl0cz1CcyxTLmRlZmluZUV4cG9zZT1ocyxTLmRlZmluZVByb3BzPUZvLFMuZ2V0Q3VycmVudEluc3RhbmNlPVZuLFMuZ2V0VHJhbnNpdGlvblJhd0NoaWxkcmVuPU5pLFMuZ3VhcmRSZWFjdGl2ZVByb3BzPWNpLFMuaD1ZaSxTLmhhbmRsZUVycm9yPUksUy5pbml0Q3VzdG9tRm9ybWF0dGVyPXRhLFMuaW5qZWN0PVVuLFMuaW5qZWN0SG9vaz12cixTLmlzTWVtb1NhbWU9cHMsUy5pc1J1bnRpbWVPbmx5PVdyLFMuaXNWTm9kZT1XdCxTLm1lcmdlRGVmYXVsdHM9eW4sUy5tZXJnZVByb3BzPWJyLFMubmV4dFRpY2s9U3IsUy5vbkFjdGl2YXRlZD10byxTLm9uQmVmb3JlQWN0aXZhdGU9VGUsUy5vbkJlZm9yZURlYWN0aXZhdGU9bHQsUy5vbkJlZm9yZU1vdW50PVpuLFMub25CZWZvcmVVbm1vdW50PWxyLFMub25CZWZvcmVVcGRhdGU9SG4sUy5vbkRlYWN0aXZhdGVkPWJuLFMub25FcnJvckNhcHR1cmVkPWtvLFMub25Nb3VudGVkPVhuLFMub25SZW5kZXJUcmFja2VkPW5vLFMub25SZW5kZXJUcmlnZ2VyZWQ9Tm8sUy5vblNlcnZlclByZWZldGNoPWdvLFMub25Vbm1vdW50ZWQ9aG8sUy5vblVwZGF0ZWQ9UW4sUy5vcGVuQmxvY2s9Y3QsUy5wb3BTY29wZUlkPWNhLFMucHJvdmlkZT1JbixTLnB1c2hTY29wZUlkPUNvLFMucXVldWVQb3N0Rmx1c2hDYj1yaSxTLnJlZ2lzdGVyUnVudGltZUNvbXBpbGVyPWZzLFMucmVuZGVyPWl0LFMucmVuZGVyTGlzdD14LFMucmVuZGVyU2xvdD1oZSxTLnJlc29sdmVDb21wb25lbnQ9eGksUy5yZXNvbHZlRGlyZWN0aXZlPUJpLFMucmVzb2x2ZUR5bmFtaWNDb21wb25lbnQ9Um8sUy5yZXNvbHZlRmlsdGVyPXBhLFMucmVzb2x2ZVRyYW5zaXRpb25Ib29rcz1acixTLnNldEJsb2NrVHJhY2tpbmc9RXQsUy5zZXREZXZ0b29sc0hvb2s9cnIsUy5zZXRUcmFuc2l0aW9uSG9va3M9VnIsUy5zc3JDb250ZXh0S2V5PUVvLFMuc3NyVXRpbHM9VWwsUy50b0hhbmRsZXJzPWRlLFMudHJhbnNmb3JtVk5vZGVBcmdzPVp0LFMudXNlQXR0cnM9UHQsUy51c2VDc3NNb2R1bGU9Vm8sUy51c2VDc3NWYXJzPVphLFMudXNlU1NSQ29udGV4dD1rYSxTLnVzZVNsb3RzPUJlLFMudXNlVHJhbnNpdGlvblN0YXRlPWdyLFMudk1vZGVsRHluYW1pYz1PLFMudk1vZGVsVGV4dD1QLFMudlNob3c9YXQsUy52ZXJzaW9uPWRsLFMud2Fybj1XZSxTLndhdGNoPXNyLFMud2F0Y2hFZmZlY3Q9cXIsUy53YXRjaFBvc3RFZmZlY3Q9SW8sUy53YXRjaFN5bmNFZmZlY3Q9b2ksUy53aXRoQXN5bmNDb250ZXh0PUFpLFMud2l0aEN0eD1ZbyxTLndpdGhEZWZhdWx0cz1McyxTLndpdGhEaXJlY3RpdmVzPWpyLFMud2l0aEtleXM9emUsUy53aXRoTWVtbz1ncyxTLndpdGhNb2RpZmllcnM9WSxTLndpdGhTY29wZUlkPUZpLFMud3A9Q3QsT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFN9KHt9LHAsdyxzKTtyZXR1cm4gay5fX1RZUEVfXz0idnVlIixrfWZ1bmN0aW9uIGF2KGcscyxwKXtsZXQgdz1wLlZ1ZSxrPXAuc2V0VGltZW91dCxTPXAuY2xlYXJUaW1lb3V0LGQ9cC5zZXRJbnRlcnZhbCxFPXAuY2xlYXJJbnRlcnZhbCxCPXAuX191bmlDb25maWcsV2U9cC5fX3VuaVJvdXRlcyxMdD1wLlZ1ZVNoYXJlZCxlbj1wLlVuaVNoYXJlZDt2YXIgeHQ9ZnVuY3Rpb24oVyxaLGZuKXsidXNlIHN0cmljdCI7dmFyIHNuPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixfbj1mdW5jdGlvbigpe2xldCBlPW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKHZhciB0PTA7dDxzbi5sZW5ndGg7dCsrKWVbc24uY2hhckNvZGVBdCh0KV09dDtyZXR1cm4gZX0oKTtmdW5jdGlvbiBXbihlKXt2YXIgdD1uZXcgVWludDhBcnJheShlKSxuLHI9dC5sZW5ndGgsbz0iIjtmb3Iobj0wO248cjtuKz0zKW8rPXNuW3Rbbl0+PjJdLG8rPXNuWyh0W25dJjMpPDw0fHRbbisxXT4+NF0sbys9c25bKHRbbisxXSYxNSk8PDJ8dFtuKzJdPj42XSxvKz1zblt0W24rMl0mNjNdO3JldHVybiByJTM9PT0yP289by5zdWJzdHJpbmcoMCxvLmxlbmd0aC0xKSsiPSI6ciUzPT09MSYmKG89by5zdWJzdHJpbmcoMCxvLmxlbmd0aC0yKSsiPT0iKSxvfWZ1bmN0aW9uIHBpKGUpe3ZhciB0PWUubGVuZ3RoKi43NSxuPWUubGVuZ3RoLHIsbz0wLGMsaCxiLFY7ZVtlLmxlbmd0aC0xXT09PSI9IiYmKHQtLSxlW2UubGVuZ3RoLTJdPT09Ij0iJiZ0LS0pO3ZhciBUPW5ldyBBcnJheUJ1ZmZlcih0KSxEPW5ldyBVaW50OEFycmF5KFQpO2ZvcihyPTA7cjxuO3IrPTQpYz1fbltlLmNoYXJDb2RlQXQocildLGg9X25bZS5jaGFyQ29kZUF0KHIrMSldLGI9X25bZS5jaGFyQ29kZUF0KHIrMildLFY9X25bZS5jaGFyQ29kZUF0KHIrMyldLERbbysrXT1jPDwyfGg+PjQsRFtvKytdPShoJjE1KTw8NHxiPj4yLERbbysrXT0oYiYzKTw8NnxWJjYzO3JldHVybiBUfWxldCB2aT1bIm9yaWdpbmFsIiwiY29tcHJlc3NlZCJdLGFyPVsiYWxidW0iLCJjYW1lcmEiXSxTcj1bIkdFVCIsIk9QVElPTlMiLCJIRUFEIiwiUE9TVCIsIlBVVCIsIkRFTEVURSIsIlRSQUNFIiwiQ09OTkVDVCIsIlBBVENIIl07ZnVuY3Rpb24gQ24oZSx0KXtyZXR1cm4hZXx8dC5pbmRleE9mKGUpPT09LTE/dFswXTplfWZ1bmN0aW9uIHdyKGUsdCl7cmV0dXJuIVcuaXNBcnJheShlKXx8ZS5sZW5ndGg9PT0wfHxlLmZpbmQobj0+dC5pbmRleE9mKG4pPT09LTEpP3Q6ZX1mdW5jdGlvbiBDcihlLHQpe2NvbnNvbGUud2FybihgJHtlfTogJHt0fWApfWZ1bmN0aW9uIG1pKGUsdCxuLHIpe3J8fChyPUNyKTtmb3IobGV0IG8gaW4gbil7bGV0IGM9VmUobyx0W29dLG5bb10sIVcuaGFzT3duKHQsbykpO1cuaXNTdHJpbmcoYykmJnIoZSxjKX19ZnVuY3Rpb24gcmkoZSx0LG4scil7aWYoIW4pcmV0dXJuO2lmKCFXLmlzQXJyYXkobikpcmV0dXJuIG1pKGUsdFswXXx8T2JqZWN0LmNyZWF0ZShudWxsKSxuLHIpO2xldCBvPW4ubGVuZ3RoLGM9dC5sZW5ndGg7Zm9yKGxldCBoPTA7aDxvO2grKyl7bGV0IGI9bltoXSxWPU9iamVjdC5jcmVhdGUobnVsbCk7Yz5oJiYoVltiLm5hbWVdPXRbaF0pLG1pKGUsVix7W2IubmFtZV06Yn0scil9fWZ1bmN0aW9uIFZlKGUsdCxuLHIpe1cuaXNQbGFpbk9iamVjdChuKXx8KG49e3R5cGU6bn0pO2xldHt0eXBlOm8scmVxdWlyZWQ6Yyx2YWxpZGF0b3I6aH09bjtpZihjJiZyKXJldHVybidNaXNzaW5nIHJlcXVpcmVkIGFyZ3M6ICInK2UrJyInO2lmKCEodD09bnVsbCYmIWMpKXtpZihvIT1udWxsKXtsZXQgYj0hMSxWPVcuaXNBcnJheShvKT9vOltvXSxUPVtdO2ZvcihsZXQgRD0wO0Q8Vi5sZW5ndGgmJiFiO0QrKyl7bGV0e3ZhbGlkOl9lLGV4cGVjdGVkVHlwZTpTZX09YnQodCxWW0RdKTtULnB1c2goU2V8fCIiKSxiPV9lfWlmKCFiKXJldHVybiB0bihlLHQsVCl9aWYoaClyZXR1cm4gaCh0KX19bGV0IG90PVcubWFrZU1hcCgiU3RyaW5nLE51bWJlcixCb29sZWFuLEZ1bmN0aW9uLFN5bWJvbCIpO2Z1bmN0aW9uIGJ0KGUsdCl7bGV0IG4scj1Tbih0KTtpZihvdChyKSl7bGV0IG89dHlwZW9mIGU7bj1vPT09ci50b0xvd2VyQ2FzZSgpLCFuJiZvPT09Im9iamVjdCImJihuPWUgaW5zdGFuY2VvZiB0KX1lbHNlIHI9PT0iT2JqZWN0Ij9uPVcuaXNPYmplY3QoZSk6cj09PSJBcnJheSI/bj1XLmlzQXJyYXkoZSk6bj1lIGluc3RhbmNlb2YgdHx8Vy50b1Jhd1R5cGUoZSk9PT1Tbih0KTtyZXR1cm57dmFsaWQ6bixleHBlY3RlZFR5cGU6cn19ZnVuY3Rpb24gdG4oZSx0LG4pe2xldCByPWBJbnZhbGlkIGFyZ3M6IHR5cGUgY2hlY2sgZmFpbGVkIGZvciBhcmdzICIke2V9Ii4gRXhwZWN0ZWQgJHtuLm1hcChXLmNhcGl0YWxpemUpLmpvaW4oIiwgIil9YCxvPW5bMF0sYz1XLnRvUmF3VHlwZSh0KSxoPUp0KHQsbyksYj1KdCh0LGMpO3JldHVybiBuLmxlbmd0aD09PTEmJnJyKG8pJiYhQXIobyxjKSYmKHIrPWAgd2l0aCB2YWx1ZSAke2h9YCkscis9YCwgZ290ICR7Y30gYCxycihjKSYmKHIrPWB3aXRoIHZhbHVlICR7Yn0uYCkscn1mdW5jdGlvbiBTbihlKXtsZXQgdD1lJiZlLnRvU3RyaW5nKCkubWF0Y2goL15ccypmdW5jdGlvbiAoXHcrKS8pO3JldHVybiB0P3RbMV06IiJ9ZnVuY3Rpb24gSnQoZSx0KXtyZXR1cm4gdD09PSJTdHJpbmciP2AiJHtlfSJgOnQ9PT0iTnVtYmVyIj9gJHtOdW1iZXIoZSl9YDpgJHtlfWB9ZnVuY3Rpb24gcnIoZSl7cmV0dXJuWyJzdHJpbmciLCJudW1iZXIiLCJib29sZWFuIl0uc29tZShuPT5lLnRvTG93ZXJDYXNlKCk9PT1uKX1mdW5jdGlvbiBBciguLi5lKXtyZXR1cm4gZS5zb21lKHQ9PnQudG9Mb3dlckNhc2UoKT09PSJib29sZWFuIil9ZnVuY3Rpb24gT3IoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBlLmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX19bGV0IE9uPTEsZG49e307ZnVuY3Rpb24gVHIoZSx0LG4scj0hMSl7cmV0dXJuIGRuW2VdPXtuYW1lOnQsa2VlcEFsaXZlOnIsY2FsbGJhY2s6bn0sZX1mdW5jdGlvbiBfaShlLHQsbil7aWYodHlwZW9mIGU9PSJudW1iZXIiKXtsZXQgcj1kbltlXTtpZihyKXJldHVybiByLmtlZXBBbGl2ZXx8ZGVsZXRlIGRuW2VdLHIuY2FsbGJhY2sodCxuKX1yZXR1cm4gdH1mdW5jdGlvbiBDbyhlKXtmb3IobGV0IHQgaW4gZG4paWYoZG5bdF0ubmFtZT09PWUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gY2EoZSx0KXtmb3IobGV0IG4gaW4gZG4pe2xldCByPWRuW25dO3IuY2FsbGJhY2s9PT10JiZyLm5hbWU9PT1lJiZkZWxldGUgZG5bbl19fWZ1bmN0aW9uIEZpKGUpe3N0Lm9mZigiYXBpLiIrZSl9ZnVuY3Rpb24gWW8oZSl7c3Qub24oImFwaS4iK2UsdD0+e2ZvcihsZXQgbiBpbiBkbil7bGV0IHI9ZG5bbl07ci5uYW1lPT09ZSYmci5jYWxsYmFjayh0KX19KX1mdW5jdGlvbiBBbyhlLHQpe3JldHVybiBUcihPbisrLGUsdCwhMCl9bGV0IEppPSJzdWNjZXNzIixNcj0iZmFpbCIsdWE9ImNvbXBsZXRlIjtmdW5jdGlvbiBPbyhlKXtsZXQgdD17fTtmb3IobGV0IG4gaW4gZSl7bGV0IHI9ZVtuXTtXLmlzRnVuY3Rpb24ocikmJih0W25dPU9yKHIpLGRlbGV0ZSBlW25dKX1yZXR1cm4gdH1mdW5jdGlvbiBUbyhlLHQpe3JldHVybiFlfHxlLmluZGV4T2YoIjpmYWlsIik9PT0tMT90KyI6b2siOnQrZS5zdWJzdHJpbmcoZS5pbmRleE9mKCI6ZmFpbCIpKX1mdW5jdGlvbiBaaShlLHQ9e30se2JlZm9yZUFsbDpuLGJlZm9yZVN1Y2Nlc3M6cn09e30pe1cuaXNQbGFpbk9iamVjdCh0KXx8KHQ9e30pO2xldHtzdWNjZXNzOm8sZmFpbDpjLGNvbXBsZXRlOmh9PU9vKHQpLGI9Vy5pc0Z1bmN0aW9uKG8pLFY9Vy5pc0Z1bmN0aW9uKGMpLFQ9Vy5pc0Z1bmN0aW9uKGgpLEQ9T24rKztyZXR1cm4gVHIoRCxlLF9lPT57X2U9X2V8fHt9LF9lLmVyck1zZz1UbyhfZS5lcnJNc2csZSksVy5pc0Z1bmN0aW9uKG4pJiZuKF9lKSxfZS5lcnJNc2c9PT1lKyI6b2siPyhXLmlzRnVuY3Rpb24ocikmJnIoX2UsdCksYiYmbyhfZSkpOlYmJmMoX2UpLFQmJmgoX2UpfSksRH1sZXQgaWk9InN1Y2Nlc3MiLHFvPSJmYWlsIix1bz0iY29tcGxldGUiLE5uPXt9LGhyPXt9O2Z1bmN0aW9uIGZvKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlKG4sdCl8fG59fWZ1bmN0aW9uIEduKGUsdCxuKXtsZXQgcj0hMTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IGM9ZVtvXTtpZihyKXI9UHJvbWlzZS5yZXNvbHZlKGZvKGMsbikpO2Vsc2V7bGV0IGg9Yyh0LG4pO2lmKFcuaXNQcm9taXNlKGgpJiYocj1Qcm9taXNlLnJlc29sdmUoaCkpLGg9PT0hMSlyZXR1cm57dGhlbigpe30sY2F0Y2goKXt9fX19cmV0dXJuIHJ8fHt0aGVuKG8pe3JldHVybiBvKHQpfSxjYXRjaCgpe319fWZ1bmN0aW9uIFhpKGUsdD17fSl7cmV0dXJuW2lpLHFvLHVvXS5mb3JFYWNoKG49PntsZXQgcj1lW25dO2lmKCFXLmlzQXJyYXkocikpcmV0dXJuO2xldCBvPXRbbl07dFtuXT1mdW5jdGlvbihoKXtHbihyLGgsdCkudGhlbihiPT5XLmlzRnVuY3Rpb24obykmJm8oYil8fGIpfX0pLHR9ZnVuY3Rpb24gUG8oZSx0KXtsZXQgbj1bXTtXLmlzQXJyYXkoTm4ucmV0dXJuVmFsdWUpJiZuLnB1c2goLi4uTm4ucmV0dXJuVmFsdWUpO2xldCByPWhyW2VdO3JldHVybiByJiZXLmlzQXJyYXkoci5yZXR1cm5WYWx1ZSkmJm4ucHVzaCguLi5yLnJldHVyblZhbHVlKSxuLmZvckVhY2gobz0+e3Q9byh0KXx8dH0pLHR9ZnVuY3Rpb24gUWkoZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtPYmplY3Qua2V5cyhObikuZm9yRWFjaChyPT57ciE9PSJyZXR1cm5WYWx1ZSImJih0W3JdPU5uW3JdLnNsaWNlKCkpfSk7bGV0IG49aHJbZV07cmV0dXJuIG4mJk9iamVjdC5rZXlzKG4pLmZvckVhY2gocj0+e3IhPT0icmV0dXJuVmFsdWUiJiYodFtyXT0odFtyXXx8W10pLmNvbmNhdChuW3JdKSl9KSx0fWZ1bmN0aW9uIGJpKGUsdCxuLHIpe2xldCBvPVFpKGUpO3JldHVybiBvJiZPYmplY3Qua2V5cyhvKS5sZW5ndGg/Vy5pc0FycmF5KG8uaW52b2tlKT9HbihvLmludm9rZSxuKS50aGVuKGg9PnQoWGkoUWkoZSksaCksLi4ucikpOnQoWGkobyxuKSwuLi5yKTp0KG4sLi4ucil9ZnVuY3Rpb24gSm4oZSl7cmV0dXJuISEoVy5pc1BsYWluT2JqZWN0KGUpJiZbSmksTXIsdWFdLmZpbmQodD0+Vy5pc0Z1bmN0aW9uKGVbdF0pKSl9ZnVuY3Rpb24gRHIoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gSW4oZSx0KXtyZXR1cm4obj17fSwuLi5yKT0+Sm4obik/UG8oZSxiaShlLHQsbixyKSk6UG8oZSxuZXcgUHJvbWlzZSgobyxjKT0+e2JpKGUsdCxXLmV4dGVuZChuLHtzdWNjZXNzOm8sZmFpbDpjfSkscil9KSl9ZnVuY3Rpb24gVW4oZSx0KXtsZXQgbj1lWzBdO2lmKCF0fHwhVy5pc1BsYWluT2JqZWN0KHQuZm9ybWF0QXJncykmJlcuaXNQbGFpbk9iamVjdChuKSlyZXR1cm47bGV0IHI9dC5mb3JtYXRBcmdzLG89T2JqZWN0LmtleXMocik7Zm9yKGxldCBjPTA7YzxvLmxlbmd0aDtjKyspe2xldCBoPW9bY10sYj1yW2hdO2lmKFcuaXNGdW5jdGlvbihiKSl7bGV0IFY9YihlWzBdW2hdLG4pO2lmKFcuaXNTdHJpbmcoVikpcmV0dXJuIFZ9ZWxzZSBXLmhhc093bihuLGgpfHwobltoXT1iKX19ZnVuY3Rpb24gcXIoZSx0LG4pe3JldHVybiBfaShlLFcuZXh0ZW5kKG58fHt9LHtlcnJNc2c6dCsiOm9rIn0pKX1mdW5jdGlvbiBJbyhlLHQsbixyKXtyZXR1cm4gX2koZSxXLmV4dGVuZCh7ZXJyTXNnOnQrIjpmYWlsIisobj8iICIrbjoiIil9LHIpKX1mdW5jdGlvbiBvaShlLHQsbixyKXtpZihyJiZyLmJlZm9yZUludm9rZSl7bGV0IGM9ci5iZWZvcmVJbnZva2UodCk7aWYoVy5pc1N0cmluZyhjKSlyZXR1cm4gY31sZXQgbz1Vbih0LHIpO2lmKG8pcmV0dXJuIG99ZnVuY3Rpb24gS3IoZSl7aWYoIVcuaXNGdW5jdGlvbihlKSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJnczogdHlwZSBjaGVjayBmYWlsZWQgZm9yIGFyZ3MgImNhbGxiYWNrIi4gRXhwZWN0ZWQgRnVuY3Rpb24nKX1mdW5jdGlvbiBzcihlLHQsbil7cmV0dXJuIHI9PntLcihyKTtsZXQgbz1vaShlLFtyXSx2b2lkIDAsbik7aWYobyl0aHJvdyBuZXcgRXJyb3Iobyk7bGV0IGM9IUNvKGUpO0FvKGUsciksYyYmKFlvKGUpLHQoKSl9fWZ1bmN0aW9uIFZpKGUsdCxuKXtyZXR1cm4gcj0+e0tyKHIpO2xldCBvPW9pKGUsW3JdLHZvaWQgMCxuKTtpZihvKXRocm93IG5ldyBFcnJvcihvKTtlPWUucmVwbGFjZSgib2ZmIiwib24iKSxjYShlLHIpLENvKGUpfHwoRmkoZSksdCgpKX19ZnVuY3Rpb24gZW8oZSl7cmV0dXJuIWV8fFcuaXNTdHJpbmcoZSk/ZTplLnN0YWNrPyhjb25zb2xlLmVycm9yKGUubWVzc2FnZStaLkxJTkVGRUVEK2Uuc3RhY2spLGUubWVzc2FnZSk6ZX1mdW5jdGlvbiBGcihlLHQsbixyKXtyZXR1cm4gbz0+e2xldCBjPVppKGUsbyxyKSxoPW9pKGUsW29dLG4scik7cmV0dXJuIGg/SW8oYyxlLGgpOnQobyx7cmVzb2x2ZTpiPT5xcihjLGUsYikscmVqZWN0OihiLFYpPT5JbyhjLGUsZW8oYiksVil9KX19ZnVuY3Rpb24gRWkoZSx0LG4scil7cmV0dXJuKC4uLm8pPT57bGV0IGM9b2koZSxvLG4scik7aWYoYyl0aHJvdyBuZXcgRXJyb3IoYyk7cmV0dXJuIHQuYXBwbHkobnVsbCxvKX19ZnVuY3Rpb24gZ3IoZSx0LG4scil7cmV0dXJuIEZyKGUsdCxuLHIpfWZ1bmN0aW9uIGduKGUsdCxuKXtyZXR1cm4gc3IoZSx0LG4pfWZ1bmN0aW9uIEpyKGUsdCxuKXtyZXR1cm4gVmkoZSx0LG4pfWZ1bmN0aW9uIGtyKGUsdCxuLHIpe3JldHVybiBJbihlLEZyKGUsdCx2b2lkIDAscikpfWZ1bmN0aW9uIE10KGUsdCxuLHIpe3JldHVybiBFaShlLHQsdm9pZCAwLHIpfWZ1bmN0aW9uIE9lKGUsdCxuLHIpe3JldHVybiBJbihlLGdyKGUsdCx2b2lkIDAscikpfWxldCBacj0iYmFzZTY0VG9BcnJheUJ1ZmZlciIsSWk9W3tuYW1lOiJiYXNlNjQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfV0sYWk9ImFycmF5QnVmZmVyVG9CYXNlNjQiLFZyPVt7bmFtZToiYXJyYXlCdWZmZXIiLHR5cGU6W0FycmF5QnVmZmVyLFVpbnQ4QXJyYXldLHJlcXVpcmVkOiEwfV0sTmk9TXQoWnIsZT0+cGkoZSksSWkpLHByPU10KGFpLGU9PlduKGUpLFZyKTtmdW5jdGlvbiAkcigpe2lmKHR5cGVvZiBfX1NZU1RFTV9JTkZPX18hPSJ1bmRlZmluZWQiKXJldHVybiB3aW5kb3cuX19TWVNURU1fSU5GT19fO2xldHtyZXNvbHV0aW9uV2lkdGg6ZX09cy5zY3JlZW4uZ2V0Q3VycmVudFNpemUoKXx8e3Jlc29sdXRpb25XaWR0aDowfTtyZXR1cm57cGxhdGZvcm06KHMub3MubmFtZXx8IiIpLnRvTG93ZXJDYXNlKCkscGl4ZWxSYXRpbzpzLnNjcmVlbi5zY2FsZSx3aW5kb3dXaWR0aDpNYXRoLnJvdW5kKGUpfX1mdW5jdGlvbiBYcihlLHQsbil7ZS4kcGFnZS5tZXRhLmlzTlZ1ZT9raShlLHQsbik6UHIoZSx0LG4pfWZ1bmN0aW9uIFByKGUsdCxuKXtzdC5pbnZva2VWaWV3TWV0aG9kKCJyZXF1ZXN0Q29tcG9uZW50SW5mbyIse3JlcXM6dC5tYXAocj0+KHIuY29tcG9uZW50JiYoci5jb21wb25lbnQ9ci5jb21wb25lbnQuJGVsLm5vZGVJZCkscikpfSxlLiRwYWdlLmlkLG4pfWZ1bmN0aW9uIGtpKGUsdCxuKXtsZXQgcj1sbih0KSxvPW5ldyBBcnJheShyLmxlbmd0aCk7JGkocixlLiRlbCxvKSxVcihlLiRyZXF1aXJlTmF0aXZlUGx1Z2luKCJkb20iKSxvLDAsW10sYz0+e24oYyl9KX1mdW5jdGlvbiBsbihlKXtsZXQgdD1bXTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXS5zZWxlY3RvcjtyLmluZGV4T2YoIiMiKT09PTAmJnQucHVzaChyLnN1YnN0cmluZygxKSl9cmV0dXJuIHR9ZnVuY3Rpb24gJGkoZSx0LG4pe2xldCByPXQuY2hpbGRyZW47aWYoIVcuaXNBcnJheShyKSlyZXR1cm4hMTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IGM9cltvXTtpZihjLmF0dHIpe2xldCBoPWUuaW5kZXhPZihjLmF0dHIuaWQpO2lmKGg+PTAmJihuW2hdPXtpZDplW2hdLHJlZjpjLnJlZixkYXRhc2V0OloucGFyc2VOVnVlRGF0YXNldChjLmF0dHIpfSxlLmxlbmd0aD09PTEpKWJyZWFrfWMuY2hpbGRyZW4mJiRpKGUsYyxuKX19ZnVuY3Rpb24gVXIoZSx0LG4scixvKXtsZXQgYz10W25dO2UuZ2V0Q29tcG9uZW50UmVjdChjLnJlZixoPT57aC5zaXplLmlkPWMuaWQsaC5zaXplLmRhdGFzZXQ9Yy5kYXRhc2V0LHIucHVzaChoLnNpemUpLG4rPTEsbjx0Lmxlbmd0aD9VcihlLHQsbixyLG8pOm8ocil9KX1mdW5jdGlvbiB0byhlLHQpe3N0Lmludm9rZVZpZXdNZXRob2QoInNldFBhZ2VNZXRhIix0LGUuJHBhZ2UuaWQpfWxldCBibj1lPT5lIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiLEhyPVsieyIsIn0iXTtjbGFzcyBpcntjb25zdHJ1Y3Rvcigpe3RoaXMuX2NhY2hlcz1PYmplY3QuY3JlYXRlKG51bGwpfWludGVycG9sYXRlKHQsbixyPUhyKXtpZighbilyZXR1cm5bdF07bGV0IG89dGhpcy5fY2FjaGVzW3RdO3JldHVybiBvfHwobz12cih0LHIpLHRoaXMuX2NhY2hlc1t0XT1vKSxRcihvLG4pfX1sZXQgeWk9L14oPzpcZCkrLyxSaT0vXig/Olx3KSsvO2Z1bmN0aW9uIHZyKGUsW3Qsbl0pe2xldCByPVtdLG89MCxjPSIiO2Zvcig7bzxlLmxlbmd0aDspe2xldCBoPWVbbysrXTtpZihoPT09dCl7YyYmci5wdXNoKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpjfSksYz0iIjtsZXQgYj0iIjtmb3IoaD1lW28rK107aCE9PXZvaWQgMCYmaCE9PW47KWIrPWgsaD1lW28rK107bGV0IFY9aD09PW4sVD15aS50ZXN0KGIpPyJsaXN0IjpWJiZSaS50ZXN0KGIpPyJuYW1lZCI6InVua25vd24iO3IucHVzaCh7dmFsdWU6Yix0eXBlOlR9KX1lbHNlIGMrPWh9cmV0dXJuIGMmJnIucHVzaCh7dHlwZToidGV4dCIsdmFsdWU6Y30pLHJ9ZnVuY3Rpb24gUXIoZSx0KXtsZXQgbj1bXSxyPTAsbz1BcnJheS5pc0FycmF5KHQpPyJsaXN0Ijpibih0KT8ibmFtZWQiOiJ1bmtub3duIjtpZihvPT09InVua25vd24iKXJldHVybiBuO2Zvcig7cjxlLmxlbmd0aDspe2xldCBjPWVbcl07c3dpdGNoKGMudHlwZSl7Y2FzZSJ0ZXh0IjpuLnB1c2goYy52YWx1ZSk7YnJlYWs7Y2FzZSJsaXN0IjpuLnB1c2godFtwYXJzZUludChjLnZhbHVlLDEwKV0pO2JyZWFrO2Nhc2UibmFtZWQiOm89PT0ibmFtZWQiJiZuLnB1c2godFtjLnZhbHVlXSk7YnJlYWs7Y2FzZSJ1bmtub3duIjpicmVha31yKyt9cmV0dXJuIG59bGV0IFpuPSJ6aC1IYW5zIixYbj0iemgtSGFudCIsSG49ImVuIixRbj0iZnIiLGxyPSJlcyIsaG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxnbz0oZSx0KT0+aG8uY2FsbChlLHQpLE5vPW5ldyBpcjtmdW5jdGlvbiBubyhlLHQpe3JldHVybiEhdC5maW5kKG49PmUuaW5kZXhPZihuKSE9PS0xKX1mdW5jdGlvbiBrbyhlLHQpe3JldHVybiB0LmZpbmQobj0+ZS5pbmRleE9mKG4pPT09MCl9ZnVuY3Rpb24ganIoZSx0KXtpZighZSlyZXR1cm47aWYoZT1lLnRyaW0oKS5yZXBsYWNlKC9fL2csIi0iKSx0JiZ0W2VdKXJldHVybiBlO2lmKGU9ZS50b0xvd2VyQ2FzZSgpLGU9PT0iY2hpbmVzZSIpcmV0dXJuIFpuO2lmKGUuaW5kZXhPZigiemgiKT09PTApcmV0dXJuIGUuaW5kZXhPZigiLWhhbnMiKT4tMT9abjplLmluZGV4T2YoIi1oYW50Iik+LTF8fG5vKGUsWyItdHciLCItaGsiLCItbW8iLCItY2h0Il0pP1huOlpuO2xldCBuPVtIbixRbixscl07dCYmT2JqZWN0LmtleXModCkubGVuZ3RoPjAmJihuPU9iamVjdC5rZXlzKHQpKTtsZXQgcj1rbyhlLG4pO2lmKHIpcmV0dXJuIHJ9Y2xhc3MgUnJ7Y29uc3RydWN0b3Ioe2xvY2FsZTp0LGZhbGxiYWNrTG9jYWxlOm4sbWVzc2FnZXM6cix3YXRjaGVyOm8sZm9ybWF0ZXI6Y30pe3RoaXMubG9jYWxlPUhuLHRoaXMuZmFsbGJhY2tMb2NhbGU9SG4sdGhpcy5tZXNzYWdlPXt9LHRoaXMubWVzc2FnZXM9e30sdGhpcy53YXRjaGVycz1bXSxuJiYodGhpcy5mYWxsYmFja0xvY2FsZT1uKSx0aGlzLmZvcm1hdGVyPWN8fE5vLHRoaXMubWVzc2FnZXM9cnx8e30sdGhpcy5zZXRMb2NhbGUodHx8SG4pLG8mJnRoaXMud2F0Y2hMb2NhbGUobyl9c2V0TG9jYWxlKHQpe2xldCBuPXRoaXMubG9jYWxlO3RoaXMubG9jYWxlPWpyKHQsdGhpcy5tZXNzYWdlcyl8fHRoaXMuZmFsbGJhY2tMb2NhbGUsdGhpcy5tZXNzYWdlc1t0aGlzLmxvY2FsZV18fCh0aGlzLm1lc3NhZ2VzW3RoaXMubG9jYWxlXT17fSksdGhpcy5tZXNzYWdlPXRoaXMubWVzc2FnZXNbdGhpcy5sb2NhbGVdLG4hPT10aGlzLmxvY2FsZSYmdGhpcy53YXRjaGVycy5mb3JFYWNoKHI9PntyKHRoaXMubG9jYWxlLG4pfSl9Z2V0TG9jYWxlKCl7cmV0dXJuIHRoaXMubG9jYWxlfXdhdGNoTG9jYWxlKHQpe2xldCBuPXRoaXMud2F0Y2hlcnMucHVzaCh0KS0xO3JldHVybigpPT57dGhpcy53YXRjaGVycy5zcGxpY2UobiwxKX19YWRkKHQsbixyPSEwKXtsZXQgbz10aGlzLm1lc3NhZ2VzW3RdO28/cj9PYmplY3QuYXNzaWduKG8sbik6T2JqZWN0LmtleXMobikuZm9yRWFjaChjPT57Z28obyxjKXx8KG9bY109bltjXSl9KTp0aGlzLm1lc3NhZ2VzW3RdPW59Zih0LG4scil7cmV0dXJuIHRoaXMuZm9ybWF0ZXIuaW50ZXJwb2xhdGUodCxuLHIpLmpvaW4oIiIpfXQodCxuLHIpe2xldCBvPXRoaXMubWVzc2FnZTtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmciPyhuPWpyKG4sdGhpcy5tZXNzYWdlcyksbiYmKG89dGhpcy5tZXNzYWdlc1tuXSkpOnI9bixnbyhvLHQpP3RoaXMuZm9ybWF0ZXIuaW50ZXJwb2xhdGUob1t0XSxyKS5qb2luKCIiKTooY29uc29sZS53YXJuKGBDYW5ub3QgdHJhbnNsYXRlIHRoZSB2YWx1ZSBvZiBrZXlwYXRoICR7dH0uIFVzZSB0aGUgdmFsdWUgb2Yga2V5cGF0aCBhcyBkZWZhdWx0LmApLHQpfX1mdW5jdGlvbiBybyhlLHQpe2UuJHdhdGNoTG9jYWxlP2UuJHdhdGNoTG9jYWxlKG49Pnt0LnNldExvY2FsZShuKX0pOmUuJHdhdGNoKCgpPT5lLiRsb2NhbGUsbj0+e3Quc2V0TG9jYWxlKG4pfSl9ZnVuY3Rpb24gS28oKXtyZXR1cm4gdHlwZW9mIEkhPSJ1bmRlZmluZWQiJiZJLmdldExvY2FsZT9JLmdldExvY2FsZSgpOnR5cGVvZiBnbG9iYWwhPSJ1bmRlZmluZWQiJiZnbG9iYWwuZ2V0TG9jYWxlP2dsb2JhbC5nZXRMb2NhbGUoKTpIbn1mdW5jdGlvbiB4aShlLHQ9e30sbixyKXt0eXBlb2YgZSE9InN0cmluZyImJihbZSx0XT1bdCxlXSksdHlwZW9mIGUhPSJzdHJpbmciJiYoZT1LbygpKSx0eXBlb2YgbiE9InN0cmluZyImJihuPXR5cGVvZiBCIT0idW5kZWZpbmVkIiYmQi5mYWxsYmFja0xvY2FsZXx8SG4pO2xldCBvPW5ldyBScih7bG9jYWxlOmUsZmFsbGJhY2tMb2NhbGU6bixtZXNzYWdlczp0LHdhdGNoZXI6cn0pLGM9KGgsYik9PntpZih0eXBlb2YgU3QhPSJmdW5jdGlvbiIpYz1mdW5jdGlvbihWLFQpe3JldHVybiBvLnQoVixUKX07ZWxzZXtsZXQgVj0hMTtjPWZ1bmN0aW9uKFQsRCl7bGV0IF9lPVN0KCkuJHZtO3JldHVybiBfZSYmKF9lLiRsb2NhbGUsVnx8KFY9ITAscm8oX2UsbykpKSxvLnQoVCxEKX19cmV0dXJuIGMoaCxiKX07cmV0dXJue2kxOG46byxmKGgsYixWKXtyZXR1cm4gby5mKGgsYixWKX0sdChoLGIpe3JldHVybiBjKGgsYil9LGFkZChoLGIsVj0hMCl7cmV0dXJuIG8uYWRkKGgsYixWKX0sd2F0Y2goaCl7cmV0dXJuIG8ud2F0Y2hMb2NhbGUoaCl9LGdldExvY2FsZSgpe3JldHVybiBvLmdldExvY2FsZSgpfSxzZXRMb2NhbGUoaCl7cmV0dXJuIG8uc2V0TG9jYWxlKGgpfX19ZnVuY3Rpb24gVWkoZSx0KXtyZXR1cm4gZS5pbmRleE9mKHRbMF0pPi0xfWxldCBSbz1aLm9uY2UoKCk9PnR5cGVvZiBCIT0idW5kZWZpbmVkIiYmQi5sb2NhbGVzJiYhIU9iamVjdC5rZXlzKEIubG9jYWxlcykubGVuZ3RoKSxCaTtmdW5jdGlvbiBIaSgpe2xldCBlPUkuZ2V0TG9jYWxlKCksdD1CLmxvY2FsZXM7cmV0dXJuIHRbZV18fHRbQi5mYWxsYmFja0xvY2FsZV18fHQuZW58fHt9fWZ1bmN0aW9uIHhvKGUpe3JldHVybiBVaShlLFouSTE4Tl9KU09OX0RFTElNSVRFUlMpP3NlKCkuZihlLEhpKCksWi5JMThOX0pTT05fREVMSU1JVEVSUyk6ZX1mdW5jdGlvbiB4KGUsdCl7aWYodC5sZW5ndGg9PT0xKXtpZihlKXtsZXQgcj1iPT5XLmlzU3RyaW5nKGIpJiZVaShiLFouSTE4Tl9KU09OX0RFTElNSVRFUlMpLG89dFswXSxjPVtdO2lmKFcuaXNBcnJheShlKSYmKGM9ZS5maWx0ZXIoYj0+cihiW29dKSkpLmxlbmd0aClyZXR1cm4gYztsZXQgaD1lW3RbMF1dO2lmKHIoaCkpcmV0dXJuIGV9cmV0dXJufWxldCBuPXQuc2hpZnQoKTtyZXR1cm4geChlJiZlW25dLHQpfWZ1bmN0aW9uIFEoZSx0KXtyZXR1cm4gdC5tYXAobj0+aGUoZSxuKSl9ZnVuY3Rpb24gaGUoZSx0KXtsZXQgbj14KGUsdCk7aWYoIW4pcmV0dXJuITE7bGV0IHI9dFt0Lmxlbmd0aC0xXTtpZihXLmlzQXJyYXkobikpbi5mb3JFYWNoKG89PmhlKG8sW3JdKSk7ZWxzZXtsZXQgbz1uW3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHIse2dldCgpe3JldHVybiB4byhvKX0sc2V0KGMpe289Y319KX1yZXR1cm4hMH1mdW5jdGlvbiBzZSgpe2lmKCFCaSl7bGV0IGU7aWYodHlwZW9mIFN0PT0iZnVuY3Rpb24iP2U9Zy5yZXF1aXJlTW9kdWxlKCJwbHVzIikuZ2V0TGFuZ3VhZ2UoKTplPXMud2Vidmlldy5jdXJyZW50V2VidmlldygpLmdldFN0eWxlKCkubG9jYWxlLEJpPXhpKGUpLFJvKCkpe2xldCB0PU9iamVjdC5rZXlzKEIubG9jYWxlc3x8e30pO3QubGVuZ3RoJiZ0LmZvckVhY2gobj0+QmkuYWRkKG4sQi5sb2NhbGVzW25dKSksQmkuc2V0TG9jYWxlKGUpfX1yZXR1cm4gQml9ZnVuY3Rpb24gZGUoZSx0LG4pe3JldHVybiB0LnJlZHVjZSgocixvLGMpPT4ocltlK29dPW5bY10scikse30pfWxldCBtdD1aLm9uY2UoKCk9PntsZXQgZT0idW5pLmFwcC4iLHQ9WyJxdWl0Il07c2UoKS5hZGQoSG4sZGUoZSx0LFsiUHJlc3MgYmFjayBidXR0b24gYWdhaW4gdG8gZXhpdCJdKSwhMSksc2UoKS5hZGQobHIsZGUoZSx0LFsiUHVsc2Ugb3RyYSB2ZXogcGFyYSBzYWxpciJdKSwhMSksc2UoKS5hZGQoUW4sZGUoZSx0LFsiQXBwdXlleiBceEUwIG5vdXZlYXUgcG91ciBxdWl0dGVyIGwnYXBwbGljYXRpb24iXSksITEpLHNlKCkuYWRkKFpuLGRlKGUsdCxbIlx1NTE4RFx1NjMwOVx1NEUwMFx1NkIyMVx1OTAwMFx1NTFGQVx1NUU5NFx1NzUyOCJdKSwhMSksc2UoKS5hZGQoWG4sZGUoZSx0LFsiXHU1MThEXHU2MzA5XHU0RTAwXHU2QjIxXHU5MDAwXHU1MUZBXHU2MUM5XHU3NTI4Il0pLCExKX0pLEs9Wi5vbmNlKCgpPT57bGV0IGU9InVuaS5zaG93QWN0aW9uU2hlZXQuIix0PVsiY2FuY2VsIl07c2UoKS5hZGQoSG4sZGUoZSx0LFsiQ2FuY2VsIl0pLCExKSxzZSgpLmFkZChscixkZShlLHQsWyJDYW5jZWxhciJdKSwhMSksc2UoKS5hZGQoUW4sZGUoZSx0LFsiQW5udWxlciJdKSwhMSksc2UoKS5hZGQoWm4sZGUoZSx0LFsiXHU1M0Q2XHU2RDg4Il0pLCExKSxzZSgpLmFkZChYbixkZShlLHQsWyJcdTUzRDZcdTZEODgiXSksITEpfSksej1aLm9uY2UoKCk9PntsZXQgZT0idW5pLnNob3dNb2RhbC4iLHQ9WyJjYW5jZWwiLCJjb25maXJtIl07c2UoKS5hZGQoSG4sZGUoZSx0LFsiQ2FuY2VsIiwiT0siXSksITEpLHNlKCkuYWRkKGxyLGRlKGUsdCxbIkNhbmNlbGFyIiwiT0siXSksITEpLHNlKCkuYWRkKFFuLGRlKGUsdCxbIkFubnVsZXIiLCJPSyJdKSwhMSksc2UoKS5hZGQoWm4sZGUoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU3ODZFXHU1QjlBIl0pLCExKSxzZSgpLmFkZChYbixkZShlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTc4QkFcdTVCOUEiXSksITEpfSksaWU9Wi5vbmNlKCgpPT57bGV0IGU9InVuaS5jaG9vc2VJbWFnZS4iLHQ9WyJjYW5jZWwiLCJzb3VyY2VUeXBlLmFsYnVtIiwic291cmNlVHlwZS5jYW1lcmEiXTtzZSgpLmFkZChIbixkZShlLHQsWyJDYW5jZWwiLCJBbGJ1bSIsIkNhbWVyYSJdKSwhMSksc2UoKS5hZGQobHIsZGUoZSx0LFsiQ2FuY2VsYXIiLCJceEMxbGJ1bSIsIkNceEUxbWFyYSJdKSwhMSksc2UoKS5hZGQoUW4sZGUoZSx0LFsiQW5udWxlciIsIkFsYnVtIiwiQ2FtXHhFOXJhIl0pLCExKSxzZSgpLmFkZChabixkZShlLHQsWyJcdTUzRDZcdTZEODgiLCJcdTRFQ0VcdTc2RjhcdTUxOENcdTkwMDlcdTYyRTkiLCJcdTYyQ0RcdTY0NDQiXSksITEpLHNlKCkuYWRkKFhuLGRlKGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1NUY5RVx1NzZGOFx1NTE4QVx1OTA3OFx1NjRDNyIsIlx1NjJDRFx1NjUxRCJdKSwhMSl9KSx4ZT1aLm9uY2UoKCk9PntsZXQgZT0idW5pLmNob29zZVZpZGVvLiIsdD1bImNhbmNlbCIsInNvdXJjZVR5cGUuYWxidW0iLCJzb3VyY2VUeXBlLmNhbWVyYSJdO3NlKCkuYWRkKEhuLGRlKGUsdCxbIkNhbmNlbCIsIkFsYnVtIiwiQ2FtZXJhIl0pLCExKSxzZSgpLmFkZChscixkZShlLHQsWyJDYW5jZWxhciIsIlx4QzFsYnVtIiwiQ1x4RTFtYXJhIl0pLCExKSxzZSgpLmFkZChRbixkZShlLHQsWyJBbm51bGVyIiwiQWxidW0iLCJDYW1ceEU5cmEiXSksITEpLHNlKCkuYWRkKFpuLGRlKGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1NEVDRVx1NzZGOFx1NTE4Q1x1OTAwOVx1NjJFOSIsIlx1NjJDRFx1NjQ0NCJdKSwhMSksc2UoKS5hZGQoWG4sZGUoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU1RjlFXHU3NkY4XHU1MThBXHU5MDc4XHU2NEM3IiwiXHU2MkNEXHU2NTFEIl0pLCExKX0pLG50PVoub25jZSgoKT0+e2xldCBlPSJ1bmkucHJldmlld0ltYWdlLiIsdD1bImNhbmNlbCIsImJ1dHRvbi5zYXZlIiwic2F2ZS5zdWNjZXNzIiwic2F2ZS5mYWlsIl07c2UoKS5hZGQoSG4sZGUoZSx0LFsiQ2FuY2VsIiwiU2F2ZSBJbWFnZSIsIlNhdmVkIHN1Y2Nlc3NmdWxseSIsIlNhdmUgZmFpbGVkIl0pLCExKSxzZSgpLmFkZChscixkZShlLHQsWyJDYW5jZWxhciIsIkd1YXJkYXIgaW1hZ2VuIiwiR3VhcmRhZG8gZXhpdG9zYW1lbnRlIiwiRXJyb3IgYWwgZ3VhcmRhciJdKSwhMSksc2UoKS5hZGQoUW4sZGUoZSx0LFsiQW5udWxlciIsIkd1YXJkYXIgaW1hZ2VuIiwiRW5yZWdpc3RyXHhFOSBhdmVjIHN1Y2NceEU4cyIsIlx4QzljaGVjIGRlIGxhIHNhdXZlZ2FyZGUiXSksITEpLHNlKCkuYWRkKFpuLGRlKGUsdCxbIlx1NTNENlx1NkQ4OCIsIlx1NEZERFx1NUI1OFx1NTZGRVx1NTBDRiIsIlx1NEZERFx1NUI1OFx1NTZGRVx1NTBDRlx1NTIzMFx1NzZGOFx1NTE4Q1x1NjIxMFx1NTI5RiIsIlx1NEZERFx1NUI1OFx1NTZGRVx1NTBDRlx1NTIzMFx1NzZGOFx1NTE4Q1x1NTkzMVx1OEQyNSJdKSwhMSksc2UoKS5hZGQoWG4sZGUoZSx0LFsiXHU1M0Q2XHU2RDg4IiwiXHU0RkREXHU1QjU4XHU1NzE2XHU1MENGIiwiXHU0RkREXHU1QjU4XHU1NzE2XHU1MENGXHU1MjMwXHU3NkY4XHU1MThBXHU2MjEwXHU1MjlGIiwiXHU0RkREXHU1QjU4XHU1NzE2XHU1MENGXHU1MjMwXHU3NkY4XHU1MThBXHU1OTMxXHU2NTU3Il0pLCExKX0pLFl0PVoub25jZSgoKT0+e2xldCBlPSJ1bmkuc2V0Q2xpcGJvYXJkRGF0YS4iLHQ9WyJzdWNjZXNzIiwiZmFpbCJdO3NlKCkuYWRkKEhuLGRlKGUsdCxbIkNvbnRlbnQgY29waWVkIiwiQ29weSBmYWlsZWQsIHBsZWFzZSBjb3B5IG1hbnVhbGx5Il0pLCExKSxzZSgpLmFkZChscixkZShlLHQsWyJDb250ZW5pZG8gY29waWFkbyIsIkVycm9yIGFsIGNvcGlhciwgY29waWUgbWFudWFsbWVudGUiXSksITEpLHNlKCkuYWRkKFFuLGRlKGUsdCxbIkNvbnRlbnUgY29waVx4RTkiLCJceEM5Y2hlYyBkZSBsYSBjb3BpZSwgY29waWV6IG1hbnVlbGxlbWVudCJdKSwhMSksc2UoKS5hZGQoWm4sZGUoZSx0LFsiXHU1MTg1XHU1QkI5XHU1REYyXHU1OTBEXHU1MjM2IiwiXHU1OTBEXHU1MjM2XHU1OTMxXHU4RDI1XHVGRjBDXHU4QkY3XHU2MjRCXHU1MkE4XHU1OTBEXHU1MjM2Il0pLCExKSxzZSgpLmFkZChYbixkZShlLHQsWyJcdTUxNjdcdTVCQjlcdTVERjJcdTVGQTlcdTUyMzYiLCJcdTVGQTlcdTUyMzZcdTU5MzFcdTY1NTdcdUZGMENcdThBQ0JcdTYyNEJcdTUyRDVcdTVGQTlcdTg4RkQiXSksITEpfSksVG49Wi5vbmNlKCgpPT57bGV0IGU9InVuaS5zY2FuQ29kZS4iLHQ9WyJ0aXRsZSIsImFsYnVtIiwiZmFpbCIsImZsYXNoLm9uIiwiZmxhc2gub2ZmIl07c2UoKS5hZGQoSG4sZGUoZSx0LFsiU2NhbiBjb2RlIiwiQWxidW0iLCJSZWNvZ25pdGlvbiBmYWlsdXJlIiwiVGFwIHRvIHR1cm4gbGlnaHQgb24iLCJUYXAgdG8gdHVybiBsaWdodCBvZmYiXSksITEpLHNlKCkuYWRkKGxyLGRlKGUsdCxbIkNceEYzZGlnbyBkZSBlc2NhbmVvIiwiXHhDMWxidW0iLCJceEM5Y2hlYyBkZSBsYSByZWNvbm5haXNzYW5jZSIsIlRvcXVlIHBhcmEgZW5jZW5kZXIgbGEgbHV6IiwiVG9xdWUgcGFyYSBhcGFnYXIgbGEgbHV6Il0pLCExKSxzZSgpLmFkZChRbixkZShlLHQsWyJDb2RlIGRcdTIwMTlhbmFseXNlIiwiQWxidW0iLCJGYWxsbyBkZSByZWNvbm9jaW1pZW50byIsIkFwcHV5ZXogcG91ciBhY3RpdmVyIGwnXHhFOWNsYWlyYWdlIiwiQXBwdXlleiBwb3VyIGRceEU5c2FjdGl2ZXIgbCdceEU5Y2xhaXJhZ2UiXSksITEpLHNlKCkuYWRkKFpuLGRlKGUsdCxbIlx1NjI2Qlx1NzgwMSIsIlx1NzZGOFx1NTE4QyIsIlx1OEJDNlx1NTIyQlx1NTkzMVx1OEQyNSIsIlx1OEY3Qlx1ODlFNlx1NzE2N1x1NEVBRSIsIlx1OEY3Qlx1ODlFNlx1NTE3M1x1OTVFRCJdKSwhMSksc2UoKS5hZGQoWG4sZGUoZSx0LFsiXHU2MzgzXHU3OEJDIiwiXHU3NkY4XHU1MThBIiwiXHU4QjU4XHU1MjI1XHU1OTMxXHU2NTU3IiwiXHU4RjE1XHU4OUY4XHU3MTY3XHU0RUFFIiwiXHU4RjE1XHU4OUY4XHU5NURDXHU5NTg5Il0pLCExKX0pLGpuPVoub25jZSgoKT0+e2xldCBlPSJ1bmkuc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uLiIsdD1bImF1dGhDb250ZW50Iiwid2FpdGluZ0NvbnRlbnQiXTtzZSgpLmFkZChIbixkZShlLHQsWyJGaW5nZXJwcmludCByZWNvZ25pdGlvbiIsIlVucmVjb2duaXphYmxlIl0pLCExKSxzZSgpLmFkZChscixkZShlLHQsWyJSZWNvbm9jaW1pZW50byBkZSBodWVsbGFzIGRhY3RpbGFyZXMiLCJJcnJlY29ub2NpYmxlIl0pLCExKSxzZSgpLmFkZChRbixkZShlLHQsWyJSZWNvbm5haXNzYW5jZSBkZSBsJ2VtcHJlaW50ZSBkaWdpdGFsZSIsIk1ceEU5Y29ubmFpc3NhYmxlIl0pLCExKSxzZSgpLmFkZChabixkZShlLHQsWyJcdTYzMDdcdTdFQjlcdThCQzZcdTUyMkJcdTRFMkQuLi4iLCJcdTY1RTBcdTZDRDVcdThCQzZcdTUyMkIiXSksITEpLHNlKCkuYWRkKFhuLGRlKGUsdCxbIlx1NjMwN1x1N0QwQlx1OEI1OFx1NTIyNVx1NEUyRC4uLiIsIlx1NzEyMVx1NkNENVx1OEI1OFx1NTIyNSJdKSwhMSl9KTtmdW5jdGlvbiB4cihlKXtpZihSbygpKXJldHVybiBRKGUsW1sidGl0bGVUZXh0Il0sWyJzZWFyY2hJbnB1dCIsInBsYWNlaG9sZGVyIl0sWyJidXR0b25zIiwidGV4dCJdXSl9ZnVuY3Rpb24gbXIoZSl7aWYoUm8oKSl7bGV0IHQ9ImNhcHRpb24iO3JldHVybiBRKGUsW1siY29udGVudGRvd24iLHRdLFsiY29udGVudG92ZXIiLHRdLFsiY29udGVudHJlZnJlc2giLHRdXSl9fWZ1bmN0aW9uIHBvKGUpe2xldCB0PW5ldyBaLkVtaXR0ZXI7cmV0dXJue29uKG4scil7cmV0dXJuIHQub24obixyKX0sb25jZShuLHIpe3JldHVybiB0Lm9uY2UobixyKX0sb2ZmKG4scil7cmV0dXJuIHQub2ZmKG4scil9LGVtaXQobiwuLi5yKXtyZXR1cm4gdC5lbWl0KG4sLi4ucil9LHN1YnNjcmliZShuLHIsbz0hMSl7dFtvPyJvbmNlIjoib24iXShgJHtlfS4ke259YCxyKX0sdW5zdWJzY3JpYmUobixyKXt0Lm9mZihgJHtlfS4ke259YCxyKX0sc3Vic2NyaWJlSGFuZGxlcihuLHIsbyl7dC5lbWl0KGAke2V9LiR7bn1gLHIsbyl9fX1sZXQgdm89Imludm9rZVZpZXdBcGkiLEpvPSJpbnZva2VTZXJ2aWNlQXBpIjtmdW5jdGlvbiBtbyhlKXtyZXR1cm4gZT1lKyIiLGUuaW5kZXhPZigicnB4IikhPT0tMXx8ZS5pbmRleE9mKCJ1cHgiKSE9PS0xfWZ1bmN0aW9uIFluKGUsdD0hMSl7aWYodClyZXR1cm4gQm4oZSk7aWYoVy5pc1N0cmluZyhlKSl7bGV0IG49cGFyc2VJbnQoZSl8fDA7cmV0dXJuIG1vKGUpP0kudXB4MnB4KG4pOm59cmV0dXJuIGV9ZnVuY3Rpb24gQm4oZSl7cmV0dXJuIG1vKGUpP2UucmVwbGFjZSgvKFxkKyhcLlxkKyk/KVtydV1weC9nLCh0LG4pPT5JLnVweDJweChwYXJzZUZsb2F0KG4pKSsicHgiKTplfWZ1bmN0aW9uIGVyKGUpe2xldCB0PVoucmVzb2x2ZUNvbXBvbmVudEluc3RhbmNlKGUpO2lmKHQuJHBhZ2UpcmV0dXJuIHQuJHBhZ2UuaWQ7aWYoIXQuJClyZXR1cm47bGV0IG49dC4kLnJvb3QucHJveHk7aWYobiYmbi4kcGFnZSlyZXR1cm4gbi4kcGFnZS5pZH1mdW5jdGlvbiBTaSgpe2xldCBlPVBuKCksdD1lLmxlbmd0aDtpZih0KXJldHVybiBlW3QtMV19ZnVuY3Rpb24gaXMoKXtsZXQgZT1TaSgpO2lmKGUpcmV0dXJuIGUuJHBhZ2UubWV0YX1mdW5jdGlvbiBmYSgpe2xldCBlPWlzKCk7cmV0dXJuIGU/ZS5pZDotMX1mdW5jdGlvbiBfcigpe2xldCBlPVNpKCk7aWYoZSlyZXR1cm4gZS4kdm19bGV0IFBhPVsibmF2aWdhdGlvbkJhciIsInB1bGxUb1JlZnJlc2giXTtmdW5jdGlvbiAkYSgpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEIuZ2xvYmFsU3R5bGV8fHt9KSl9ZnVuY3Rpb24gVWEoZSx0KXtsZXQgbj0kYSgpLHI9Vy5leHRlbmQoe2lkOnR9LG4sZSk7UGEuZm9yRWFjaChjPT57cltjXT1XLmV4dGVuZCh7fSxuW2NdLGVbY10pfSk7bGV0e25hdmlnYXRpb25CYXI6b309cjtyZXR1cm4gby50aXRsZVRleHQmJm8udGl0bGVJbWFnZSYmKG8udGl0bGVUZXh0PSIiKSxyfWZ1bmN0aW9uIEhhKGUpe3JldHVybiBKU09OLnBhcnNlKFluKEpTT04uc3RyaW5naWZ5KGUpLCEwKSl9ZnVuY3Rpb24gamEoZSl7cmV0dXJuIGUub2Zmc2V0JiYoZS5vZmZzZXQ9WW4oZS5vZmZzZXQpKSxlLmhlaWdodCYmKGUuaGVpZ2h0PVluKGUuaGVpZ2h0KSksZS5yYW5nZSYmKGUucmFuZ2U9WW4oZS5yYW5nZSkpLGV9ZnVuY3Rpb24gZGEoZSx0LG4scixvLGMpe2xldHtpZDpoLHJvdXRlOmJ9PXIsVj1aLm5vcm1hbGl6ZVN0eWxlcyhyLm5hdmlnYXRpb25CYXIsQi50aGVtZUNvbmZpZyxjKS50aXRsZUNvbG9yO3JldHVybntpZDpoLHBhdGg6Wi5hZGRMZWFkaW5nU2xhc2goYikscm91dGU6YixmdWxsUGF0aDp0LG9wdGlvbnM6bixtZXRhOnIsb3BlblR5cGU6ZSxldmVudENoYW5uZWw6byxzdGF0dXNCYXJTdHlsZTpWPT09IiNmZmZmZmYiPyJsaWdodCI6ImRhcmsifX1mdW5jdGlvbiBJYShlLHQsbil7bGV0IHI9ZS4kW3RdOyFXLmlzQXJyYXkocil8fG4uX193ZWgmJlcucmVtb3ZlKHIsbi5fX3dlaCl9ZnVuY3Rpb24gTG4oZSx0LG4pe2lmKFcuaXNTdHJpbmcoZSkpbj10LHQ9ZSxlPV9yKCk7ZWxzZSBpZih0eXBlb2YgZT09Im51bWJlciIpe2xldCBvPVBuKCkuZmluZChjPT5jLiRwYWdlLmlkPT09ZSk7bz9lPW8uJHZtOmU9X3IoKX1pZighZSlyZXR1cm47aWYoZS5fX2NhbGxfaG9vaylyZXR1cm4gZS5fX2NhbGxfaG9vayh0LG4pO2xldCByPWUuJFt0XTtyZXR1cm4gciYmWi5pbnZva2VBcnJheUZucyhyLG4pfWZ1bmN0aW9uIEJvKGUpe2lmKGUuaW5kZXhPZigiLyIpPT09MClyZXR1cm4gZTtsZXQgdD0iIixuPVBuKCk7cmV0dXJuIG4ubGVuZ3RoJiYodD1uW24ubGVuZ3RoLTFdLiRwYWdlLnJvdXRlKSxabyh0LGUpfWZ1bmN0aW9uIFpvKGUsdCl7aWYodC5pbmRleE9mKCIvIik9PT0wKXJldHVybiB0O2lmKHQuaW5kZXhPZigiLi8iKT09PTApcmV0dXJuIFpvKGUsdC5zbGljZSgyKSk7bGV0IG49dC5zcGxpdCgiLyIpLHI9bi5sZW5ndGgsbz0wO2Zvcig7bzxyJiZuW29dPT09Ii4uIjtvKyspO24uc3BsaWNlKDAsbyksdD1uLmpvaW4oIi8iKTtsZXQgYz1lLmxlbmd0aD4wP2Uuc3BsaXQoIi8iKTpbXTtyZXR1cm4gYy5zcGxpY2UoYy5sZW5ndGgtby0xLG8rMSksWi5hZGRMZWFkaW5nU2xhc2goYy5jb25jYXQobikuam9pbigiLyIpKX1mdW5jdGlvbiBqaShlLHQ9ITEpe3JldHVybiB0P1dlLmZpbmQobj0+bi5wYXRoPT09ZXx8bi5hbGlhcz09PWUpOldlLmZpbmQobj0+bi5wYXRoPT09ZSl9ZnVuY3Rpb24gb3MoZSl7bGV0IHQ9amkoZSk7aWYodClyZXR1cm4gdC5tZXRhfWZ1bmN0aW9uIGFzKGUsdCxuKXtsZXQgcj1qaShaLmFkZExlYWRpbmdTbGFzaCh0KSk7aWYocil7bGV0e21ldGE6Y309cjtkZWxldGUgYy50YWJCYXJJbmRleCxjLmlzUXVpdD1jLmlzVGFiQmFyPSExfWxldCBvPWppKFouYWRkTGVhZGluZ1NsYXNoKG4pKTtpZihvKXtsZXR7bWV0YTpjfT1vO2MudGFiQmFySW5kZXg9ZSxjLmlzUXVpdD1jLmlzVGFiQmFyPSEwO2xldCBoPUIudGFiQmFyO2gmJmgubGlzdCYmaC5saXN0W2VdJiYoaC5saXN0W2VdLnBhZ2VQYXRoPVoucmVtb3ZlTGVhZGluZ1NsYXNoKG4pKX19bGV0IExvLHNzLGlvO2Z1bmN0aW9uIHNpKCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ0eXBlb2YgbmF2aWdhdG9yPT0ib2JqZWN0IiYmdHlwZW9mIGRvY3VtZW50PT0ib2JqZWN0Ij8id2VidmlldyI6InY4In1mdW5jdGlvbiB3aSgpe3JldHVybiBMby53ZWJ2aWV3LmN1cnJlbnRXZWJ2aWV3KCkuaWR9bGV0IHppLGxpLGNyPXt9O2Z1bmN0aW9uIG9yKGUpe2xldCB0PWUuZGF0YSYmZS5kYXRhLl9fbWVzc2FnZTtpZighdHx8IXQuX19wYWdlKXJldHVybjtsZXQgbj10Ll9fcGFnZSxyPWNyW25dO3ImJnIodCksdC5rZWVwfHxkZWxldGUgY3Jbbl19ZnVuY3Rpb24gemEoZSx0KXtzaSgpPT09InY4Ij9pbz8oemkmJnppLmNsb3NlKCksemk9bmV3IGlvKHdpKCkpLHppLm9ubWVzc2FnZT1vcik6bGl8fChsaT1zcy5yZXF1aXJlTW9kdWxlKCJnbG9iYWxFdmVudCIpLGxpLmFkZEV2ZW50TGlzdGVuZXIoInBsdXNNZXNzYWdlIixvcikpOndpbmRvdy5fX3BsdXNNZXNzYWdlPW9yLGNyW2VdPXR9Y2xhc3MgV2F7Y29uc3RydWN0b3IodCl7dGhpcy53ZWJ2aWV3PXR9c2VuZE1lc3NhZ2UodCl7bGV0IG49SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh7X19tZXNzYWdlOntkYXRhOnR9fSkpLHI9dGhpcy53ZWJ2aWV3LmlkO2lvP25ldyBpbyhyKS5wb3N0TWVzc2FnZShuKTpMby53ZWJ2aWV3LnBvc3RNZXNzYWdlVG9VbmlOVmlldyYmTG8ud2Vidmlldy5wb3N0TWVzc2FnZVRvVW5pTlZpZXcobixyKX1jbG9zZSgpe3RoaXMud2Vidmlldy5jbG9zZSgpfX1mdW5jdGlvbiBXaSh7Y29udGV4dDplPXt9LHVybDp0LGRhdGE6bj17fSxzdHlsZTpyPXt9LG9uTWVzc2FnZTpvLG9uQ2xvc2U6Y30pe2xldCBoPUIuZGFya21vZGU7TG89ZS5wbHVzfHxzLHNzPWUud2VleHx8KHR5cGVvZiBnPT0ib2JqZWN0Ij9nOm51bGwpLGlvPWUuQnJvYWRjYXN0Q2hhbm5lbHx8KHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsPT0ib2JqZWN0Ij9Ccm9hZGNhc3RDaGFubmVsOm51bGwpO2xldCBiPXthdXRvQmFja0J1dHRvbjohMCx0aXRsZVNpemU6IjE3cHgifSxWPWBwYWdlJHtEYXRlLm5vdygpfWA7cj1XLmV4dGVuZCh7fSxyKSxyLnRpdGxlTlZpZXchPT0hMSYmci50aXRsZU5WaWV3IT09Im5vbmUiJiYoci50aXRsZU5WaWV3PVcuZXh0ZW5kKGIsci50aXRsZU5WaWV3KSk7bGV0IFQ9e3RvcDowLGJvdHRvbTowLHVzaW5nQ29tcG9uZW50czp7fSxwb3BHZXN0dXJlOiJjbG9zZSIsc2Nyb2xsSW5kaWNhdG9yOiJub25lIixhbmltYXRpb25UeXBlOiJwb3AtaW4iLGFuaW1hdGlvbkR1cmF0aW9uOjIwMCx1bmlOVmlldzp7cGF0aDpgLyR7dH0uanNgLGRlZmF1bHRGb250U2l6ZToxNix2aWV3cG9ydDpMby5zY3JlZW4ucmVzb2x1dGlvbldpZHRofX07cj1XLmV4dGVuZChULHIpO2xldCBEPUxvLndlYnZpZXcuY3JlYXRlKCIiLFYscix7ZXh0cmFzOntmcm9tOndpKCkscnVudGltZTpzaSgpLGRhdGE6Vy5leHRlbmQoe30sbix7ZGFya21vZGU6aH0pLHVzZUdsb2JhbEV2ZW50OiFpb319KTtyZXR1cm4gRC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsYyksemEoVixfZT0+e1cuaXNGdW5jdGlvbihvKSYmbyhfZS5kYXRhKSxfZS5rZWVwfHxELmNsb3NlKCJhdXRvIil9KSxELnNob3coci5hbmltYXRpb25UeXBlLHIuYW5pbWF0aW9uRHVyYXRpb24pLG5ldyBXYShEKX1sZXQgb289KGUsdCk9PnN0LmVtaXQoImFwaS4iK2UsdCksYW89MTtmdW5jdGlvbiBscyhlKXtyZXR1cm4oZXx8ZmEoKSkrIi4iK3ZvfWxldCBoYT0oZSx0LG4scik9PntsZXR7c3Vic2NyaWJlOm8scHVibGlzaEhhbmRsZXI6Y309c3QsaD1yP2FvKys6MDtyJiZvKHZvKyIuIitoLHIsITApLGMobHMobikse2lkOmgsbmFtZTplLGFyZ3M6dH0sbil9LE1vPShlLHQsbixyKT0+e2xldHtzdWJzY3JpYmU6byx1bnN1YnNjcmliZTpjLHB1Ymxpc2hIYW5kbGVyOmh9PXN0LGI9YW8rKyxWPXZvKyIuIitiO3JldHVybiBvKFYsbiksaChscyhyKSx7aWQ6YixuYW1lOmUsYXJnczp0fSxyKSwoKT0+e2MoVil9fSxnYT1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIG0oKXtzdC5zdWJzY3JpYmUoSm8sVSl9ZnVuY3Rpb24gUihlLHQpe2dhW2VdfHwoZ2FbZV09dCl9ZnVuY3Rpb24gVSh7aWQ6ZSxuYW1lOnQsYXJnczpufSxyKXtsZXQgbz1oPT57ZSYmc3QucHVibGlzaEhhbmRsZXIoSm8rIi4iK2UsaCxyKX0sYz1nYVt0XTtjP2MobixvKTpvKHt9KX1sZXQgJD1XLmV4dGVuZChwbygidmlldyIpLHtpbnZva2VPbkNhbGxiYWNrOm9vLGludm9rZVZpZXdNZXRob2Q6aGEsaW52b2tlVmlld01ldGhvZEtlZXBBbGl2ZTpNb30pO2Z1bmN0aW9uIFgoKXtsZXR7b246ZX09c3Q7ZShaLk9OX1JFU0laRSxKKSxlKFouT05fQVBQX0VOVEVSX0ZPUkVHUk9VTkQsdGUpLGUoWi5PTl9BUFBfRU5URVJfQkFDS0dST1VORCxjZSl9ZnVuY3Rpb24gSihlKXtMbihTaSgpLFouT05fUkVTSVpFLGUpLHN0Lmludm9rZU9uQ2FsbGJhY2soIm9uV2luZG93UmVzaXplIixlKX1mdW5jdGlvbiB0ZShlKXtsZXQgdD1TaSgpO0xuKFN0KCksWi5PTl9TSE9XLGUpLExuKHQsWi5PTl9TSE9XKX1mdW5jdGlvbiBjZSgpe0xuKFN0KCksWi5PTl9ISURFKSxMbihTaSgpLFouT05fSElERSl9bGV0IHBlPVtaLk9OX1BBR0VfU0NST0xMLFouT05fUkVBQ0hfQk9UVE9NXTtmdW5jdGlvbiBQZSgpe3BlLmZvckVhY2goZT0+c3Quc3Vic2NyaWJlKGUsZmUoZSkpKX1mdW5jdGlvbiBmZShlKXtyZXR1cm4odCxuKT0+e0xuKHBhcnNlSW50KG4pLGUsdCl9fWZ1bmN0aW9uIHdlKCl7WCgpLFBlKCl9ZnVuY3Rpb24gY3QoZSl7ZS4kdm09ZSxlLiRtcFR5cGU9ImFwcCI7bGV0IHQ9Zm4ucmVmKHNlKCkuZ2V0TG9jYWxlKCkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCIkbG9jYWxlIix7Z2V0KCl7cmV0dXJuIHQudmFsdWV9LHNldChuKXt0LnZhbHVlPW59fSl9ZnVuY3Rpb24gZ3QoZSx0KXtlLnJvdXRlPXQucm91dGUsZS4kdm09ZSxlLiRwYWdlPXQsZS4kbXBUeXBlPSJwYWdlIix0Lm1ldGEuaXNUYWJCYXImJihlLiQuX19pc1RhYkJhcj0hMCxlLiQuX19pc0FjdGl2ZT0hMCl9ZnVuY3Rpb24gJHQoKXtyZXR1cm57cGF0aDoiIixxdWVyeTp7fSxzY2VuZToxMDAxLHJlZmVycmVySW5mbzp7YXBwSWQ6IiIsZXh0cmFEYXRhOnt9fX19ZnVuY3Rpb24gRXQoZSx0KXtsZXQgbj1lLiRvcHRpb25zfHx7fTtuLmdsb2JhbERhdGE9Vy5leHRlbmQobi5nbG9iYWxEYXRhfHx7fSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2xvYmFsRGF0YSIse2dldCgpe3JldHVybiBuLmdsb2JhbERhdGF9LHNldChyKXtuLmdsb2JhbERhdGE9cn19KX1mdW5jdGlvbiBqZShlKXtpZihlLmluZGV4T2YoIi8vIik9PT0wKXJldHVybiJodHRwczoiK2U7aWYoWi5TQ0hFTUVfUkUudGVzdChlKXx8Wi5EQVRBX1JFLnRlc3QoZSkpcmV0dXJuIGU7aWYoY24oZSkpcmV0dXJuImZpbGU6Ly8iK0J0KGUpO2xldCB0PSJmaWxlOi8vIitCdCgiX3d3dyIpO2lmKGUuaW5kZXhPZigiLyIpPT09MClyZXR1cm4gZS5zdGFydHNXaXRoKCIvc3RvcmFnZS8iKXx8ZS5zdGFydHNXaXRoKCIvc2RjYXJkLyIpfHxlLmluY2x1ZGVzKCIvQ29udGFpbmVycy9EYXRhL0FwcGxpY2F0aW9uLyIpPyJmaWxlOi8vIitlOnQrZTtpZihlLmluZGV4T2YoIi4uLyIpPT09MHx8ZS5pbmRleE9mKCIuLyIpPT09MCl7aWYodHlwZW9mIF9faWRfXz09InN0cmluZyIpcmV0dXJuIHQrWm8oWi5hZGRMZWFkaW5nU2xhc2goX19pZF9fKSxlKTt7bGV0IG49U2koKTtpZihuKXJldHVybiB0K1pvKFouYWRkTGVhZGluZ1NsYXNoKG4ucm91dGUpLGUpfX1yZXR1cm4gZX1sZXQgQnQ9Wi5jYWNoZVN0cmluZ0Z1bmN0aW9uKGU9PnMuaW8uY29udmVydExvY2FsRmlsZVN5c3RlbVVSTChlKS5yZXBsYWNlKC9eXC8/YXBwc1wvLywiL2FuZHJvaWRfYXNzZXQvYXBwcy8iKS5yZXBsYWNlKC9cLyQvLCIiKSk7ZnVuY3Rpb24gY24oZSl7cmV0dXJuIGUuaW5kZXhPZigiX3d3dyIpPT09MHx8ZS5pbmRleE9mKCJfZG9jIik9PT0wfHxlLmluZGV4T2YoIl9kb2N1bWVudHMiKT09PTB8fGUuaW5kZXhPZigiX2Rvd25sb2FkcyIpPT09MH1sZXQgV3Q9InN1Y2Nlc3MiLGh0PSJmYWlsIixSbj1bV3QsaHQsImNvbXBsZXRlIl07ZnVuY3Rpb24gR3QoZSx0LG4scil7aWYoIWUpcmV0dXJuO2lmKHR5cGVvZiBuPT0idW5kZWZpbmVkIilyZXR1cm4gZVt0XSgpO2xldFssb109WG8obixyKTtyZXR1cm4gT2JqZWN0LmtleXMobykubGVuZ3RoP2VbdF0oY2kodCxvKSk6ZVt0XSgpfWZ1bmN0aW9uIFV0KGUsdCxuLHIpe2lmKCFlKXJldHVybjtsZXRbbyxjXT1YbyhuLHIpO3JldHVybiBPYmplY3Qua2V5cyhjKS5sZW5ndGg/ZVt0XShvLGNpKHQsYykpOmVbdF0obyl9ZnVuY3Rpb24gRnQoZSx0KXtsZXQgbj1xdChlLHQuJGVsKTtyZXR1cm4gbnx8Y29uc29sZS5lcnJvcigiQ2FuIG5vdCBmaW5kIGAiK2UrImAiKX1mdW5jdGlvbiBxdChlLHQpe2lmKCFlfHwhdClyZXR1cm47aWYodC5hdHRyJiZ0LmF0dHIuaWQ9PT1lKXJldHVybiB0O2xldCBuPXQuY2hpbGRyZW47aWYoISFuKWZvcihsZXQgcj0wLG89bi5sZW5ndGg7cjxvO3IrKyl7bGV0IGM9cXQoZSxuW3JdKTtpZihjKXJldHVybiBjfX1mdW5jdGlvbiBYbyhlPXt9LHQpe2xldCBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1mdW5jdGlvbihjKXtsZXQgaD1lW2NdO1cuaXNGdW5jdGlvbihoKSYmKG5bY109aCxkZWxldGUgZVtjXSl9O3JldHVybiBSbi5mb3JFYWNoKHIpLHQmJnQuZm9yRWFjaChyKSxbZSxuXX1mdW5jdGlvbiBjaShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtsZXQgbz1yLnR5cGU7ZGVsZXRlIHIudHlwZTtsZXQgYz10W29dO2lmKG89PT1XdD9yLmVyck1zZz1gJHtlfTpva2A6bz09PWh0JiYoci5lcnJNc2c9ZSsiOmZhaWwgIisoci5tc2c/IiAiK3IubXNnOiIiKSksZGVsZXRlIHIuY29kZSxkZWxldGUgci5tc2csVy5pc0Z1bmN0aW9uKGMpJiZjKHIpLG89PT1XdHx8bz09PWh0KXtsZXQgaD10LmNvbXBsZXRlO1cuaXNGdW5jdGlvbihoKSYmaChyKX19fWxldCBlaTtmdW5jdGlvbiBHaSgpe3JldHVybiBlaX1mdW5jdGlvbiBHYShlKXtsZXQgdD1lLiQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQuY3R4LCIkY2hpbGRyZW4iLHtnZXQoKXtyZXR1cm4gRm4oKS5tYXAocj0+ci4kdm0pfX0pO2xldCBuPXQuYXBwQ29udGV4dDtlaT1XLmV4dGVuZChuLmFwcCx7bW91bnRQYWdlKHIsbyxjKXtsZXQgaD1mbi5jcmVhdGVWTm9kZShyLG8pO2guYXBwQ29udGV4dD1uLGguX19wYWdlX2NvbnRhaW5lcl9fPWMsZm4ucmVuZGVyKGgsYyk7bGV0IGI9aC5jb21wb25lbnQucHJveHk7cmV0dXJuIGIuX19wYWdlX2NvbnRhaW5lcl9fPWMsYn0sdW5tb3VudFBhZ2U6cj0+e2xldHtfX3BhZ2VfY29udGFpbmVyX186b309cjtvJiYoby5pc1VubW91bnRlZD0hMCxmbi5yZW5kZXIobnVsbCxvKSl9fSl9bGV0IE1uPVtdO2Z1bmN0aW9uIERuKGUpe2lmKCFlLiRwYWdlLm1ldGEuaXNOVnVlKXJldHVybiBNbi5wdXNoKGUpO2xldCBuPU1uLmZpbmRJbmRleChyPT5yLiRwYWdlLmlkPT09ZS4kcGFnZS5pZCk7bj4tMT9Nbi5zcGxpY2UobiwxLGUpOk1uLnB1c2goZSl9ZnVuY3Rpb24gSXIoZSl7cmV0dXJuIE1uLmZpbmQodD0+dC4kcGFnZS5pZD09PWUpfWZ1bmN0aW9uIEZuKCl7cmV0dXJuIE1ufWZ1bmN0aW9uIGJyKCl7bGV0IGU9W107cmV0dXJuIE1uLmZvckVhY2godD0+e3QuJC5fX2lzVGFiQmFyP3QuJC5fX2lzQWN0aXZlJiZlLnB1c2godCk6ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiB6cigpe2xldCBlPVNpKCk7IWV8fFFvKGUpfWZ1bmN0aW9uIFFvKGUpe2xldCB0PU1uLmZpbmRJbmRleChuPT5uPT09ZSk7dCE9PS0xJiYoZS4kcGFnZS5tZXRhLmlzTlZ1ZXx8R2koKS51bm1vdW50UGFnZShlKSxNbi5zcGxpY2UodCwxKSl9bGV0IGNzPXtwbGF5KGUpe3JldHVybiBHdChlLCJwbGF5Iil9LHBhdXNlKGUpe3JldHVybiBHdChlLCJwYXVzZSIpfSxzZWVrKGUsdCl7cmV0dXJuIFV0KGUsInNlZWsiLHQucG9zaXRpb24pfSxzdG9wKGUpe3JldHVybiBHdChlLCJzdG9wIil9LHNlbmREYW5tdShlLHQpe3JldHVybiBVdChlLCJzZW5kRGFubXUiLHQpfSxwbGF5YmFja1JhdGUoZSx0KXtyZXR1cm4gVXQoZSwicGxheWJhY2tSYXRlIix0LnJhdGUpfSxyZXF1ZXN0RnVsbFNjcmVlbihlLHQ9e30pe3JldHVybiBVdChlLCJyZXF1ZXN0RnVsbFNjcmVlbiIsdCl9LGV4aXRGdWxsU2NyZWVuKGUpe3JldHVybiBHdChlLCJleGl0RnVsbFNjcmVlbiIpfSxzaG93U3RhdHVzQmFyKGUpe3JldHVybiBHdChlLCJzaG93U3RhdHVzQmFyIil9LGhpZGVTdGF0dXNCYXIoZSl7cmV0dXJuIEd0KGUsImhpZGVTdGF0dXNCYXIiKX19O2Z1bmN0aW9uIG5uKGUsdCxuLHIpe2xldCBvPUlyKHQpO2lmKG89PW51bGw/dm9pZCAwOm8uJHBhZ2UubWV0YS5pc05WdWUpe2xldCBjPW8uJHZtO3JldHVybiBjc1tuXShGdChlLGMpLHIpfXN0Lmludm9rZVZpZXdNZXRob2QoInZpZGVvLiIrZSx7dmlkZW9JZDplLHR5cGU6bixkYXRhOnJ9LHQpfWxldCBwbj17Z2V0Q2VudGVyTG9jYXRpb24oZSx0KXtyZXR1cm4gR3QoZSwiZ2V0Q2VudGVyTG9jYXRpb24iLHQpfSxtb3ZlVG9Mb2NhdGlvbihlLHQpe3JldHVybiBVdChlLCJtb3ZlVG9Mb2NhdGlvbiIsdCl9LHRyYW5zbGF0ZU1hcmtlcihlLHQpe3JldHVybiBVdChlLCJ0cmFuc2xhdGVNYXJrZXIiLHQsWyJhbmltYXRpb25FbmQiXSl9LGluY2x1ZGVQb2ludHMoZSx0KXtyZXR1cm4gVXQoZSwiaW5jbHVkZVBvaW50cyIsdCl9LGdldFJlZ2lvbihlLHQpe3JldHVybiBHdChlLCJnZXRSZWdpb24iLHQpfSxnZXRTY2FsZShlLHQpe3JldHVybiBHdChlLCJnZXRTY2FsZSIsdCl9LGFkZEN1c3RvbUxheWVyKGUsdCl7cmV0dXJuIFV0KGUsImFkZEN1c3RvbUxheWVyIix0KX0scmVtb3ZlQ3VzdG9tTGF5ZXIoZSx0KXtyZXR1cm4gVXQoZSwicmVtb3ZlQ3VzdG9tTGF5ZXIiLHQpfSxhZGRHcm91bmRPdmVybGF5KGUsdCl7cmV0dXJuIFV0KGUsImFkZEdyb3VuZE92ZXJsYXkiLHQpfSxyZW1vdmVHcm91bmRPdmVybGF5KGUsdCl7cmV0dXJuIFV0KGUsInJlbW92ZUdyb3VuZE92ZXJsYXkiLHQpfSx1cGRhdGVHcm91bmRPdmVybGF5KGUsdCl7cmV0dXJuIFV0KGUsInVwZGF0ZUdyb3VuZE92ZXJsYXkiLHQpfSxpbml0TWFya2VyQ2x1c3RlcihlLHQpe3JldHVybiBVdChlLCJpbml0TWFya2VyQ2x1c3RlciIsdCl9LGFkZE1hcmtlcnMoZSx0KXtyZXR1cm4gVXQoZSwiYWRkTWFya2VycyIsdCl9LHJlbW92ZU1hcmtlcnMoZSx0KXtyZXR1cm4gVXQoZSwicmVtb3ZlTWFya2VycyIsdCl9LG1vdmVBbG9uZyhlLHQpe3JldHVybiBVdChlLCJtb3ZlQWxvbmciLHQpfSxzZXRMb2NNYXJrZXJJY29uKGUsdCl7cmV0dXJuIFV0KGUsInNldExvY01hcmtlckljb24iLHQpfSxvcGVuTWFwQXBwKGUsdCl7cmV0dXJuIFV0KGUsIm9wZW5NYXBBcHAiLHQpfSxvbihlLHQpe3JldHVybiBlLm9uKHQubmFtZSx0LmNhbGxiYWNrKX19O2Z1bmN0aW9uIFZuKGUsdCxuLHIsbyl7bGV0IGM9SXIodCk7aWYoYz09bnVsbD92b2lkIDA6Yy4kcGFnZS5tZXRhLmlzTlZ1ZSl7bGV0IGg9Yy4kdm07cmV0dXJuIHBuW25dKEZ0KGUsaCkscil9c3QuaW52b2tlVmlld01ldGhvZCgibWFwLiIrZSx7dHlwZTpuLGRhdGE6cn0sdCxvKX1mdW5jdGlvbiB6bihlKXtyZXR1cm5gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuJHtlfWB9ZnVuY3Rpb24gQ2koe3JlcUlkOmUsY29tcG9uZW50OnQsb3B0aW9uczpuLGNhbGxiYWNrOnJ9LG8pe2xldCBjPXpuKGUpO3N0Lmludm9rZVZpZXdNZXRob2QoImFkZEludGVyc2VjdGlvbk9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkLG9wdGlvbnM6bixldmVudE5hbWU6Y30sbyksc3Quc3Vic2NyaWJlKGMscil9ZnVuY3Rpb24gdXMoe3JlcUlkOmUsY29tcG9uZW50OnR9LG4pe3N0Lmludm9rZVZpZXdNZXRob2QoInJlbW92ZUludGVyc2VjdGlvbk9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkfSxuKSxzdC51bnN1YnNjcmliZSh6bihlKSl9ZnVuY3Rpb24gWWEoZSl7cmV0dXJuYE1lZGlhUXVlcnlPYnNlcnZlci4ke2V9YH1mdW5jdGlvbiBOYSh7cmVxSWQ6ZSxjb21wb25lbnQ6dCxvcHRpb25zOm4sY2FsbGJhY2s6cn0sbyl7bGV0IGM9WWEoZSk7c3QuaW52b2tlVmlld01ldGhvZCgiYWRkTWVkaWFRdWVyeU9ic2VydmVyIix7cmVxSWQ6ZSxjb21wb25lbnQ6dC4kZWwubm9kZUlkLG9wdGlvbnM6bixldmVudE5hbWU6Y30sbyksc3Quc3Vic2NyaWJlKGMscil9ZnVuY3Rpb24gZWEoe3JlcUlkOmUsY29tcG9uZW50OnR9LG4pe3N0Lmludm9rZVZpZXdNZXRob2QoInJlbW92ZU1lZGlhUXVlcnlPYnNlcnZlciIse3JlcUlkOmUsY29tcG9uZW50OnQuJGVsLm5vZGVJZH0sbiksc3QudW5zdWJzY3JpYmUoWWEoZSkpfWxldCBzbz0yMDAscWE9WyJ1bmtub3duIiwibm9uZSIsImV0aGVybmV0Iiwid2lmaSIsIjJnIiwiM2ciLCI0ZyIsIjVnIl0sZnM9Il9kb2MvdW5pYXBwX3RlbXAiLFdyPWAke2ZzfV8ke0RhdGUubm93KCl9YDtmdW5jdGlvbiBLYShlKXtsZXQgdD1lLnNwbGl0KCIvIik7cmV0dXJuIHRbdC5sZW5ndGgtMV19ZnVuY3Rpb24gSmEoZSl7bGV0IHQ9ZS5zcGxpdCgiLiIpO3JldHVybiB0Lmxlbmd0aD4xPyIuIit0W3QubGVuZ3RoLTFdOiIifWxldCBEbz0iYmFja2J1dHRvbiI7ZnVuY3Rpb24gTGkoKXtJLm5hdmlnYXRlQmFjayh7ZnJvbToiYmFja2J1dHRvbiIsc3VjY2Vzcygpe319KX1sZXQgX289JHQoKSxibz0kdCgpO2Z1bmN0aW9uIGRzKCl7cmV0dXJuIFcuZXh0ZW5kKHt9LGJvKX1mdW5jdGlvbiBGbygpe3JldHVybiBXLmV4dGVuZCh7fSxfbyl9ZnVuY3Rpb24gQnMoe3BhdGg6ZSxxdWVyeTp0LHJlZmVycmVySW5mbzpufSl7Vy5leHRlbmQoX28se3BhdGg6ZSxxdWVyeTp0P1oucGFyc2VRdWVyeSh0KTp7fSxyZWZlcnJlckluZm86bnx8e319KX1mdW5jdGlvbiBocyh7cGF0aDplLHF1ZXJ5OnQscmVmZXJyZXJJbmZvOm59KXtyZXR1cm4gVy5leHRlbmQoYm8se3BhdGg6ZSxxdWVyeTp0P1oucGFyc2VRdWVyeSh0KTp7fSxyZWZlcnJlckluZm86bnx8e30sY2hhbm5lbDpzLnJ1bnRpbWUuY2hhbm5lbCxsYXVuY2hlcjpzLnJ1bnRpbWUubGF1bmNoZXJ9KSxXLmV4dGVuZChfbyxibyksVy5leHRlbmQoe30sYm8pfWZ1bmN0aW9uIExzKCl7bGV0IGU9Zy5yZXF1aXJlTW9kdWxlKCJwbHVzIik7aWYoZS5nZXRSZWRpcmVjdEluZm8pe2xldHtwYXRoOnQscXVlcnk6bixleHRyYURhdGE6cix1c2VyQWN0aW9uOm8sZnJvbUFwcGlkOmN9PWUuZ2V0UmVkaXJlY3RJbmZvKCl8fHt9LGg9e2FwcElkOmMsZXh0cmFEYXRhOnt9fTtyZXR1cm4gciYmKGguZXh0cmFEYXRhPXIpLHtwYXRoOnR8fCIiLHF1ZXJ5Om4/Ij8iK246IiIscmVmZXJyZXJJbmZvOmgsdXNlckFjdGlvbjpvfX19dmFyIEJlPXt9OyhmdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgVWludDhBcnJheSE9InVuZGVmaW5lZCImJnR5cGVvZiBVaW50MTZBcnJheSE9InVuZGVmaW5lZCImJnR5cGVvZiBJbnQzMkFycmF5IT0idW5kZWZpbmVkIjtmdW5jdGlvbiBuKGMsaCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGgpfWUuYXNzaWduPWZ1bmN0aW9uKGMpe2Zvcih2YXIgaD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7aC5sZW5ndGg7KXt2YXIgYj1oLnNoaWZ0KCk7aWYoISFiKXtpZih0eXBlb2YgYiE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcihiKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIFYgaW4gYiluKGIsVikmJihjW1ZdPWJbVl0pfX1yZXR1cm4gY30sZS5zaHJpbmtCdWY9ZnVuY3Rpb24oYyxoKXtyZXR1cm4gYy5sZW5ndGg9PT1oP2M6Yy5zdWJhcnJheT9jLnN1YmFycmF5KDAsaCk6KGMubGVuZ3RoPWgsYyl9O3ZhciByPXthcnJheVNldDpmdW5jdGlvbihjLGgsYixWLFQpe2lmKGguc3ViYXJyYXkmJmMuc3ViYXJyYXkpe2Muc2V0KGguc3ViYXJyYXkoYixiK1YpLFQpO3JldHVybn1mb3IodmFyIEQ9MDtEPFY7RCsrKWNbVCtEXT1oW2IrRF19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oYyl7dmFyIGgsYixWLFQsRCxfZTtmb3IoVj0wLGg9MCxiPWMubGVuZ3RoO2g8YjtoKyspVis9Y1toXS5sZW5ndGg7Zm9yKF9lPW5ldyBVaW50OEFycmF5KFYpLFQ9MCxoPTAsYj1jLmxlbmd0aDtoPGI7aCsrKUQ9Y1toXSxfZS5zZXQoRCxUKSxUKz1ELmxlbmd0aDtyZXR1cm4gX2V9fSxvPXthcnJheVNldDpmdW5jdGlvbihjLGgsYixWLFQpe2Zvcih2YXIgRD0wO0Q8VjtEKyspY1tUK0RdPWhbYitEXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihjKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sYyl9fTtlLnNldFR5cGVkPWZ1bmN0aW9uKGMpe2M/KGUuQnVmOD1VaW50OEFycmF5LGUuQnVmMTY9VWludDE2QXJyYXksZS5CdWYzMj1JbnQzMkFycmF5LGUuYXNzaWduKGUscikpOihlLkJ1Zjg9QXJyYXksZS5CdWYxNj1BcnJheSxlLkJ1ZjMyPUFycmF5LGUuYXNzaWduKGUsbykpfSxlLnNldFR5cGVkKHQpfSkoQmUpO3ZhciBQdD17fSxPdD17fSx5bj17fSxFcj1CZSxBaT00LFlpPTAsRW89MSxrYT0yO2Z1bmN0aW9uIHRhKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDstLXQ+PTA7KWVbdF09MH12YXIgZ3M9MCxwcz0xLGRsPTIsJGw9MyxVbD0yNTgscGE9MjksdmE9MjU2LG5hPXZhKzErcGEsbWE9MzAsUmE9MTksdnM9MipuYSsxLHJhPTE1LE1zPTE2LEhsPTcsbXM9MjU2LERzPTE2LEZzPTE3LFZzPTE4LF9zPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLHhhPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxobD1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN10sJHM9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLGpsPTUxMixWbz1uZXcgQXJyYXkoKG5hKzIpKjIpO3RhKFZvKTt2YXIgWmE9bmV3IEFycmF5KG1hKjIpO3RhKFphKTt2YXIgX2E9bmV3IEFycmF5KGpsKTt0YShfYSk7dmFyIEJhPW5ldyBBcnJheShVbC0kbCsxKTt0YShCYSk7dmFyIHlvPW5ldyBBcnJheShwYSk7dGEoeW8pO3ZhciBpYT1uZXcgQXJyYXkobWEpO3RhKGlhKTtmdW5jdGlvbiBYYShlLHQsbixyLG8pe3RoaXMuc3RhdGljX3RyZWU9ZSx0aGlzLmV4dHJhX2JpdHM9dCx0aGlzLmV4dHJhX2Jhc2U9bix0aGlzLmVsZW1zPXIsdGhpcy5tYXhfbGVuZ3RoPW8sdGhpcy5oYXNfc3RyZWU9ZSYmZS5sZW5ndGh9dmFyIFVzLGdsLCRvO2Z1bmN0aW9uIGJzKGUsdCl7dGhpcy5keW5fdHJlZT1lLHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz10fWZ1bmN0aW9uIEhzKGUpe3JldHVybiBlPDI1Nj9fYVtlXTpfYVsyNTYrKGU+Pj43KV19ZnVuY3Rpb24gUWEoZSx0KXtlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10JjI1NSxlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10Pj4+OCYyNTV9ZnVuY3Rpb24gdGkoZSx0LG4pe2UuYmlfdmFsaWQ+TXMtbj8oZS5iaV9idWZ8PXQ8PGUuYmlfdmFsaWQmNjU1MzUsUWEoZSxlLmJpX2J1ZiksZS5iaV9idWY9dD4+TXMtZS5iaV92YWxpZCxlLmJpX3ZhbGlkKz1uLU1zKTooZS5iaV9idWZ8PXQ8PGUuYmlfdmFsaWQmNjU1MzUsZS5iaV92YWxpZCs9bil9ZnVuY3Rpb24gQnIoZSx0LG4pe3RpKGUsblt0KjJdLG5bdCoyKzFdKX1mdW5jdGlvbiBvYShlLHQpe3ZhciBuPTA7ZG8gbnw9ZSYxLGU+Pj49MSxuPDw9MTt3aGlsZSgtLXQ+MCk7cmV0dXJuIG4+Pj4xfWZ1bmN0aW9uIHBsKGUpe2UuYmlfdmFsaWQ9PT0xNj8oUWEoZSxlLmJpX2J1ZiksZS5iaV9idWY9MCxlLmJpX3ZhbGlkPTApOmUuYmlfdmFsaWQ+PTgmJihlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT1lLmJpX2J1ZiYyNTUsZS5iaV9idWY+Pj04LGUuYmlfdmFsaWQtPTgpfWZ1bmN0aW9uIHpsKGUsdCl7dmFyIG49dC5keW5fdHJlZSxyPXQubWF4X2NvZGUsbz10LnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxjPXQuc3RhdF9kZXNjLmhhc19zdHJlZSxoPXQuc3RhdF9kZXNjLmV4dHJhX2JpdHMsYj10LnN0YXRfZGVzYy5leHRyYV9iYXNlLFY9dC5zdGF0X2Rlc2MubWF4X2xlbmd0aCxULEQsX2UsU2UsSWUsdXQsZHQ9MDtmb3IoU2U9MDtTZTw9cmE7U2UrKyllLmJsX2NvdW50W1NlXT0wO2ZvcihuW2UuaGVhcFtlLmhlYXBfbWF4XSoyKzFdPTAsVD1lLmhlYXBfbWF4KzE7VDx2cztUKyspRD1lLmhlYXBbVF0sU2U9bltuW0QqMisxXSoyKzFdKzEsU2U+ViYmKFNlPVYsZHQrKyksbltEKjIrMV09U2UsIShEPnIpJiYoZS5ibF9jb3VudFtTZV0rKyxJZT0wLEQ+PWImJihJZT1oW0QtYl0pLHV0PW5bRCoyXSxlLm9wdF9sZW4rPXV0KihTZStJZSksYyYmKGUuc3RhdGljX2xlbis9dXQqKG9bRCoyKzFdK0llKSkpO2lmKGR0IT09MCl7ZG97Zm9yKFNlPVYtMTtlLmJsX2NvdW50W1NlXT09PTA7KVNlLS07ZS5ibF9jb3VudFtTZV0tLSxlLmJsX2NvdW50W1NlKzFdKz0yLGUuYmxfY291bnRbVl0tLSxkdC09Mn13aGlsZShkdD4wKTtmb3IoU2U9VjtTZSE9PTA7U2UtLSlmb3IoRD1lLmJsX2NvdW50W1NlXTtEIT09MDspX2U9ZS5oZWFwWy0tVF0sIShfZT5yKSYmKG5bX2UqMisxXSE9PVNlJiYoZS5vcHRfbGVuKz0oU2UtbltfZSoyKzFdKSpuW19lKjJdLG5bX2UqMisxXT1TZSksRC0tKX19ZnVuY3Rpb24ganMoZSx0LG4pe3ZhciByPW5ldyBBcnJheShyYSsxKSxvPTAsYyxoO2ZvcihjPTE7Yzw9cmE7YysrKXJbY109bz1vK25bYy0xXTw8MTtmb3IoaD0wO2g8PXQ7aCsrKXt2YXIgYj1lW2gqMisxXTtiIT09MCYmKGVbaCoyXT1vYShyW2JdKyssYikpfX1mdW5jdGlvbiBFcygpe3ZhciBlLHQsbixyLG8sYz1uZXcgQXJyYXkocmErMSk7Zm9yKG49MCxyPTA7cjxwYS0xO3IrKylmb3IoeW9bcl09bixlPTA7ZTwxPDxfc1tyXTtlKyspQmFbbisrXT1yO2ZvcihCYVtuLTFdPXIsbz0wLHI9MDtyPDE2O3IrKylmb3IoaWFbcl09byxlPTA7ZTwxPDx4YVtyXTtlKyspX2FbbysrXT1yO2ZvcihvPj49NztyPG1hO3IrKylmb3IoaWFbcl09bzw8NyxlPTA7ZTwxPDx4YVtyXS03O2UrKylfYVsyNTYrbysrXT1yO2Zvcih0PTA7dDw9cmE7dCsrKWNbdF09MDtmb3IoZT0wO2U8PTE0MzspVm9bZSoyKzFdPTgsZSsrLGNbOF0rKztmb3IoO2U8PTI1NTspVm9bZSoyKzFdPTksZSsrLGNbOV0rKztmb3IoO2U8PTI3OTspVm9bZSoyKzFdPTcsZSsrLGNbN10rKztmb3IoO2U8PTI4NzspVm9bZSoyKzFdPTgsZSsrLGNbOF0rKztmb3IoanMoVm8sbmErMSxjKSxlPTA7ZTxtYTtlKyspWmFbZSoyKzFdPTUsWmFbZSoyXT1vYShlLDUpO1VzPW5ldyBYYShWbyxfcyx2YSsxLG5hLHJhKSxnbD1uZXcgWGEoWmEseGEsMCxtYSxyYSksJG89bmV3IFhhKG5ldyBBcnJheSgwKSxobCwwLFJhLEhsKX1mdW5jdGlvbiB6cyhlKXt2YXIgdDtmb3IodD0wO3Q8bmE7dCsrKWUuZHluX2x0cmVlW3QqMl09MDtmb3IodD0wO3Q8bWE7dCsrKWUuZHluX2R0cmVlW3QqMl09MDtmb3IodD0wO3Q8UmE7dCsrKWUuYmxfdHJlZVt0KjJdPTA7ZS5keW5fbHRyZWVbbXMqMl09MSxlLm9wdF9sZW49ZS5zdGF0aWNfbGVuPTAsZS5sYXN0X2xpdD1lLm1hdGNoZXM9MH1mdW5jdGlvbiBXcyhlKXtlLmJpX3ZhbGlkPjg/UWEoZSxlLmJpX2J1Zik6ZS5iaV92YWxpZD4wJiYoZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109ZS5iaV9idWYpLGUuYmlfYnVmPTAsZS5iaV92YWxpZD0wfWZ1bmN0aW9uIHZsKGUsdCxuLHIpe1dzKGUpLHImJihRYShlLG4pLFFhKGUsfm4pKSxFci5hcnJheVNldChlLnBlbmRpbmdfYnVmLGUud2luZG93LHQsbixlLnBlbmRpbmcpLGUucGVuZGluZys9bn1mdW5jdGlvbiBHcyhlLHQsbixyKXt2YXIgbz10KjIsYz1uKjI7cmV0dXJuIGVbb108ZVtjXXx8ZVtvXT09PWVbY10mJnJbdF08PXJbbl19ZnVuY3Rpb24geXMoZSx0LG4pe2Zvcih2YXIgcj1lLmhlYXBbbl0sbz1uPDwxO288PWUuaGVhcF9sZW4mJihvPGUuaGVhcF9sZW4mJkdzKHQsZS5oZWFwW28rMV0sZS5oZWFwW29dLGUuZGVwdGgpJiZvKyssIUdzKHQscixlLmhlYXBbb10sZS5kZXB0aCkpOyllLmhlYXBbbl09ZS5oZWFwW29dLG49byxvPDw9MTtlLmhlYXBbbl09cn1mdW5jdGlvbiBTcyhlLHQsbil7dmFyIHIsbyxjPTAsaCxiO2lmKGUubGFzdF9saXQhPT0wKWRvIHI9ZS5wZW5kaW5nX2J1ZltlLmRfYnVmK2MqMl08PDh8ZS5wZW5kaW5nX2J1ZltlLmRfYnVmK2MqMisxXSxvPWUucGVuZGluZ19idWZbZS5sX2J1ZitjXSxjKysscj09PTA/QnIoZSxvLHQpOihoPUJhW29dLEJyKGUsaCt2YSsxLHQpLGI9X3NbaF0sYiE9PTAmJihvLT15b1toXSx0aShlLG8sYikpLHItLSxoPUhzKHIpLEJyKGUsaCxuKSxiPXhhW2hdLGIhPT0wJiYoci09aWFbaF0sdGkoZSxyLGIpKSk7d2hpbGUoYzxlLmxhc3RfbGl0KTtCcihlLG1zLHQpfWZ1bmN0aW9uIHdzKGUsdCl7dmFyIG49dC5keW5fdHJlZSxyPXQuc3RhdF9kZXNjLnN0YXRpY190cmVlLG89dC5zdGF0X2Rlc2MuaGFzX3N0cmVlLGM9dC5zdGF0X2Rlc2MuZWxlbXMsaCxiLFY9LTEsVDtmb3IoZS5oZWFwX2xlbj0wLGUuaGVhcF9tYXg9dnMsaD0wO2g8YztoKyspbltoKjJdIT09MD8oZS5oZWFwWysrZS5oZWFwX2xlbl09Vj1oLGUuZGVwdGhbaF09MCk6bltoKjIrMV09MDtmb3IoO2UuaGVhcF9sZW48MjspVD1lLmhlYXBbKytlLmhlYXBfbGVuXT1WPDI/KytWOjAsbltUKjJdPTEsZS5kZXB0aFtUXT0wLGUub3B0X2xlbi0tLG8mJihlLnN0YXRpY19sZW4tPXJbVCoyKzFdKTtmb3IodC5tYXhfY29kZT1WLGg9ZS5oZWFwX2xlbj4+MTtoPj0xO2gtLSl5cyhlLG4saCk7VD1jO2RvIGg9ZS5oZWFwWzFdLGUuaGVhcFsxXT1lLmhlYXBbZS5oZWFwX2xlbi0tXSx5cyhlLG4sMSksYj1lLmhlYXBbMV0sZS5oZWFwWy0tZS5oZWFwX21heF09aCxlLmhlYXBbLS1lLmhlYXBfbWF4XT1iLG5bVCoyXT1uW2gqMl0rbltiKjJdLGUuZGVwdGhbVF09KGUuZGVwdGhbaF0+PWUuZGVwdGhbYl0/ZS5kZXB0aFtoXTplLmRlcHRoW2JdKSsxLG5baCoyKzFdPW5bYioyKzFdPVQsZS5oZWFwWzFdPVQrKyx5cyhlLG4sMSk7d2hpbGUoZS5oZWFwX2xlbj49Mik7ZS5oZWFwWy0tZS5oZWFwX21heF09ZS5oZWFwWzFdLHpsKGUsdCksanMobixWLGUuYmxfY291bnQpfWZ1bmN0aW9uIG1sKGUsdCxuKXt2YXIgcixvPS0xLGMsaD10WzAqMisxXSxiPTAsVj03LFQ9NDtmb3IoaD09PTAmJihWPTEzOCxUPTMpLHRbKG4rMSkqMisxXT02NTUzNSxyPTA7cjw9bjtyKyspYz1oLGg9dFsocisxKSoyKzFdLCEoKytiPFYmJmM9PT1oKSYmKGI8VD9lLmJsX3RyZWVbYyoyXSs9YjpjIT09MD8oYyE9PW8mJmUuYmxfdHJlZVtjKjJdKyssZS5ibF90cmVlW0RzKjJdKyspOmI8PTEwP2UuYmxfdHJlZVtGcyoyXSsrOmUuYmxfdHJlZVtWcyoyXSsrLGI9MCxvPWMsaD09PTA/KFY9MTM4LFQ9Myk6Yz09PWg/KFY9NixUPTMpOihWPTcsVD00KSl9ZnVuY3Rpb24gX2woZSx0LG4pe3ZhciByLG89LTEsYyxoPXRbMCoyKzFdLGI9MCxWPTcsVD00O2ZvcihoPT09MCYmKFY9MTM4LFQ9Mykscj0wO3I8PW47cisrKWlmKGM9aCxoPXRbKHIrMSkqMisxXSwhKCsrYjxWJiZjPT09aCkpe2lmKGI8VClkbyBCcihlLGMsZS5ibF90cmVlKTt3aGlsZSgtLWIhPT0wKTtlbHNlIGMhPT0wPyhjIT09byYmKEJyKGUsYyxlLmJsX3RyZWUpLGItLSksQnIoZSxEcyxlLmJsX3RyZWUpLHRpKGUsYi0zLDIpKTpiPD0xMD8oQnIoZSxGcyxlLmJsX3RyZWUpLHRpKGUsYi0zLDMpKTooQnIoZSxWcyxlLmJsX3RyZWUpLHRpKGUsYi0xMSw3KSk7Yj0wLG89YyxoPT09MD8oVj0xMzgsVD0zKTpjPT09aD8oVj02LFQ9Myk6KFY9NyxUPTQpfX1mdW5jdGlvbiBhKGUpe3ZhciB0O2ZvcihtbChlLGUuZHluX2x0cmVlLGUubF9kZXNjLm1heF9jb2RlKSxtbChlLGUuZHluX2R0cmVlLGUuZF9kZXNjLm1heF9jb2RlKSx3cyhlLGUuYmxfZGVzYyksdD1SYS0xO3Q+PTMmJmUuYmxfdHJlZVskc1t0XSoyKzFdPT09MDt0LS0pO3JldHVybiBlLm9wdF9sZW4rPTMqKHQrMSkrNSs1KzQsdH1mdW5jdGlvbiB1KGUsdCxuLHIpe3ZhciBvO2Zvcih0aShlLHQtMjU3LDUpLHRpKGUsbi0xLDUpLHRpKGUsci00LDQpLG89MDtvPHI7bysrKXRpKGUsZS5ibF90cmVlWyRzW29dKjIrMV0sMyk7X2woZSxlLmR5bl9sdHJlZSx0LTEpLF9sKGUsZS5keW5fZHRyZWUsbi0xKX1mdW5jdGlvbiB2KGUpe3ZhciB0PTQwOTM2MjQ0NDcsbjtmb3Iobj0wO248PTMxO24rKyx0Pj4+PTEpaWYodCYxJiZlLmR5bl9sdHJlZVtuKjJdIT09MClyZXR1cm4gWWk7aWYoZS5keW5fbHRyZWVbOSoyXSE9PTB8fGUuZHluX2x0cmVlWzEwKjJdIT09MHx8ZS5keW5fbHRyZWVbMTMqMl0hPT0wKXJldHVybiBFbztmb3Iobj0zMjtuPHZhO24rKylpZihlLmR5bl9sdHJlZVtuKjJdIT09MClyZXR1cm4gRW87cmV0dXJuIFlpfXZhciB5PSExO2Z1bmN0aW9uIFAoZSl7eXx8KEVzKCkseT0hMCksZS5sX2Rlc2M9bmV3IGJzKGUuZHluX2x0cmVlLFVzKSxlLmRfZGVzYz1uZXcgYnMoZS5keW5fZHRyZWUsZ2wpLGUuYmxfZGVzYz1uZXcgYnMoZS5ibF90cmVlLCRvKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MCx6cyhlKX1mdW5jdGlvbiBPKGUsdCxuLHIpe3RpKGUsKGdzPDwxKSsocj8xOjApLDMpLHZsKGUsdCxuLCEwKX1mdW5jdGlvbiBGKGUpe3RpKGUscHM8PDEsMyksQnIoZSxtcyxWbykscGwoZSl9ZnVuY3Rpb24gRyhlLHQsbixyKXt2YXIgbyxjLGg9MDtlLmxldmVsPjA/KGUuc3RybS5kYXRhX3R5cGU9PT1rYSYmKGUuc3RybS5kYXRhX3R5cGU9dihlKSksd3MoZSxlLmxfZGVzYyksd3MoZSxlLmRfZGVzYyksaD1hKGUpLG89ZS5vcHRfbGVuKzMrNz4+PjMsYz1lLnN0YXRpY19sZW4rMys3Pj4+MyxjPD1vJiYobz1jKSk6bz1jPW4rNSxuKzQ8PW8mJnQhPT0tMT9PKGUsdCxuLHIpOmUuc3RyYXRlZ3k9PT1BaXx8Yz09PW8/KHRpKGUsKHBzPDwxKSsocj8xOjApLDMpLFNzKGUsVm8sWmEpKToodGkoZSwoZGw8PDEpKyhyPzE6MCksMyksdShlLGUubF9kZXNjLm1heF9jb2RlKzEsZS5kX2Rlc2MubWF4X2NvZGUrMSxoKzEpLFNzKGUsZS5keW5fbHRyZWUsZS5keW5fZHRyZWUpKSx6cyhlKSxyJiZXcyhlKX1mdW5jdGlvbiBZKGUsdCxuKXtyZXR1cm4gZS5wZW5kaW5nX2J1ZltlLmRfYnVmK2UubGFzdF9saXQqMl09dD4+PjgmMjU1LGUucGVuZGluZ19idWZbZS5kX2J1ZitlLmxhc3RfbGl0KjIrMV09dCYyNTUsZS5wZW5kaW5nX2J1ZltlLmxfYnVmK2UubGFzdF9saXRdPW4mMjU1LGUubGFzdF9saXQrKyx0PT09MD9lLmR5bl9sdHJlZVtuKjJdKys6KGUubWF0Y2hlcysrLHQtLSxlLmR5bl9sdHJlZVsoQmFbbl0rdmErMSkqMl0rKyxlLmR5bl9kdHJlZVtIcyh0KSoyXSsrKSxlLmxhc3RfbGl0PT09ZS5saXRfYnVmc2l6ZS0xfXluLl90cl9pbml0PVAseW4uX3RyX3N0b3JlZF9ibG9jaz1PLHluLl90cl9mbHVzaF9ibG9jaz1HLHluLl90cl90YWxseT1ZLHluLl90cl9hbGlnbj1GO2Z1bmN0aW9uIGxlKGUsdCxuLHIpe2Zvcih2YXIgbz1lJjY1NTM1fDAsYz1lPj4+MTYmNjU1MzV8MCxoPTA7biE9PTA7KXtoPW4+MmUzPzJlMzpuLG4tPWg7ZG8gbz1vK3RbcisrXXwwLGM9YytvfDA7d2hpbGUoLS1oKTtvJT02NTUyMSxjJT02NTUyMX1yZXR1cm4gb3xjPDwxNnwwfXZhciB6ZT1sZTtmdW5jdGlvbiBhdCgpe2Zvcih2YXIgZSx0PVtdLG49MDtuPDI1NjtuKyspe2U9bjtmb3IodmFyIHI9MDtyPDg7cisrKWU9ZSYxPzM5ODgyOTIzODReZT4+PjE6ZT4+PjE7dFtuXT1lfXJldHVybiB0fXZhciBnZT1hdCgpO2Z1bmN0aW9uIEdlKGUsdCxuLHIpe3ZhciBvPWdlLGM9cituO2VePS0xO2Zvcih2YXIgaD1yO2g8YztoKyspZT1lPj4+OF5vWyhlXnRbaF0pJjI1NV07cmV0dXJuIGVeLTF9dmFyIFhlPUdlLHd0PXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn0saXQ9QmUsQ2U9eW4sRWU9emUsVGU9WGUsbHQ9d3QsTmU9MCxDdD0xLGk9MyxsPTQsZj01LF89MCxBPTEsQz0tMixOPS0zLE09LTUsSD0tMSxuZT0xLHZlPTIsTGU9Myx1ZT00LGtlPTAsWWU9MixmdD04LFFlPTksUmU9MTUsbWU9OCx5ZT0yOSxGZT0yNTYsQWU9RmUrMSt5ZSxfdD0zMCxBdD0xOSxLZT0yKkFlKzEsTnQ9MTUsTD0zLGo9MjU4LGFlPWorTCsxLHJlPTMyLG9lPTQyLCRlPTY5LHJ0PTczLHFlPTkxLEplPTEwMyxVZT0xMTMsVnQ9NjY2LHB0PTEsa3Q9MixSdD0zLHhuPTQsa249MztmdW5jdGlvbiBobihlLHQpe3JldHVybiBlLm1zZz1sdFt0XSx0fWZ1bmN0aW9uIG1uKGUpe3JldHVybihlPDwxKS0oZT40Pzk6MCl9ZnVuY3Rpb24gdXIoZSl7Zm9yKHZhciB0PWUubGVuZ3RoOy0tdD49MDspZVt0XT0wfWZ1bmN0aW9uIG5pKGUpe3ZhciB0PWUuc3RhdGUsbj10LnBlbmRpbmc7bj5lLmF2YWlsX291dCYmKG49ZS5hdmFpbF9vdXQpLG4hPT0wJiYoaXQuYXJyYXlTZXQoZS5vdXRwdXQsdC5wZW5kaW5nX2J1Zix0LnBlbmRpbmdfb3V0LG4sZS5uZXh0X291dCksZS5uZXh0X291dCs9bix0LnBlbmRpbmdfb3V0Kz1uLGUudG90YWxfb3V0Kz1uLGUuYXZhaWxfb3V0LT1uLHQucGVuZGluZy09bix0LnBlbmRpbmc9PT0wJiYodC5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gS3QoZSx0KXtDZS5fdHJfZmx1c2hfYmxvY2soZSxlLmJsb2NrX3N0YXJ0Pj0wP2UuYmxvY2tfc3RhcnQ6LTEsZS5zdHJzdGFydC1lLmJsb2NrX3N0YXJ0LHQpLGUuYmxvY2tfc3RhcnQ9ZS5zdHJzdGFydCxuaShlLnN0cm0pfWZ1bmN0aW9uIHJuKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dH1mdW5jdGlvbiBsbyhlLHQpe2UucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXQ+Pj44JjI1NSxlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10JjI1NX1mdW5jdGlvbiBxKGUsdCxuLHIpe3ZhciBvPWUuYXZhaWxfaW47cmV0dXJuIG8+ciYmKG89ciksbz09PTA/MDooZS5hdmFpbF9pbi09byxpdC5hcnJheVNldCh0LGUuaW5wdXQsZS5uZXh0X2luLG8sbiksZS5zdGF0ZS53cmFwPT09MT9lLmFkbGVyPUVlKGUuYWRsZXIsdCxvLG4pOmUuc3RhdGUud3JhcD09PTImJihlLmFkbGVyPVRlKGUuYWRsZXIsdCxvLG4pKSxlLm5leHRfaW4rPW8sZS50b3RhbF9pbis9byxvKX1mdW5jdGlvbiBlZShlLHQpe3ZhciBuPWUubWF4X2NoYWluX2xlbmd0aCxyPWUuc3Ryc3RhcnQsbyxjLGg9ZS5wcmV2X2xlbmd0aCxiPWUubmljZV9tYXRjaCxWPWUuc3Ryc3RhcnQ+ZS53X3NpemUtYWU/ZS5zdHJzdGFydC0oZS53X3NpemUtYWUpOjAsVD1lLndpbmRvdyxEPWUud19tYXNrLF9lPWUucHJldixTZT1lLnN0cnN0YXJ0K2osSWU9VFtyK2gtMV0sdXQ9VFtyK2hdO2UucHJldl9sZW5ndGg+PWUuZ29vZF9tYXRjaCYmKG4+Pj0yKSxiPmUubG9va2FoZWFkJiYoYj1lLmxvb2thaGVhZCk7ZG8gaWYobz10LCEoVFtvK2hdIT09dXR8fFRbbytoLTFdIT09SWV8fFRbb10hPT1UW3JdfHxUWysrb10hPT1UW3IrMV0pKXtyKz0yLG8rKztkbzt3aGlsZShUWysrcl09PT1UWysrb10mJlRbKytyXT09PVRbKytvXSYmVFsrK3JdPT09VFsrK29dJiZUWysrcl09PT1UWysrb10mJlRbKytyXT09PVRbKytvXSYmVFsrK3JdPT09VFsrK29dJiZUWysrcl09PT1UWysrb10mJlRbKytyXT09PVRbKytvXSYmcjxTZSk7aWYoYz1qLShTZS1yKSxyPVNlLWosYz5oKXtpZihlLm1hdGNoX3N0YXJ0PXQsaD1jLGM+PWIpYnJlYWs7SWU9VFtyK2gtMV0sdXQ9VFtyK2hdfX13aGlsZSgodD1fZVt0JkRdKT5WJiYtLW4hPT0wKTtyZXR1cm4gaDw9ZS5sb29rYWhlYWQ/aDplLmxvb2thaGVhZH1mdW5jdGlvbiBiZShlKXt2YXIgdD1lLndfc2l6ZSxuLHIsbyxjLGg7ZG97aWYoYz1lLndpbmRvd19zaXplLWUubG9va2FoZWFkLWUuc3Ryc3RhcnQsZS5zdHJzdGFydD49dCsodC1hZSkpe2l0LmFycmF5U2V0KGUud2luZG93LGUud2luZG93LHQsdCwwKSxlLm1hdGNoX3N0YXJ0LT10LGUuc3Ryc3RhcnQtPXQsZS5ibG9ja19zdGFydC09dCxyPWUuaGFzaF9zaXplLG49cjtkbyBvPWUuaGVhZFstLW5dLGUuaGVhZFtuXT1vPj10P28tdDowO3doaWxlKC0tcik7cj10LG49cjtkbyBvPWUucHJldlstLW5dLGUucHJldltuXT1vPj10P28tdDowO3doaWxlKC0tcik7Yys9dH1pZihlLnN0cm0uYXZhaWxfaW49PT0wKWJyZWFrO2lmKHI9cShlLnN0cm0sZS53aW5kb3csZS5zdHJzdGFydCtlLmxvb2thaGVhZCxjKSxlLmxvb2thaGVhZCs9cixlLmxvb2thaGVhZCtlLmluc2VydD49TClmb3IoaD1lLnN0cnN0YXJ0LWUuaW5zZXJ0LGUuaW5zX2g9ZS53aW5kb3dbaF0sZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2grMV0pJmUuaGFzaF9tYXNrO2UuaW5zZXJ0JiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2grTC0xXSkmZS5oYXNoX21hc2ssZS5wcmV2W2gmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09aCxoKyssZS5pbnNlcnQtLSwhKGUubG9va2FoZWFkK2UuaW5zZXJ0PEwpKTspO313aGlsZShlLmxvb2thaGVhZDxhZSYmZS5zdHJtLmF2YWlsX2luIT09MCl9ZnVuY3Rpb24gTWUoZSx0KXt2YXIgbj02NTUzNTtmb3Iobj5lLnBlbmRpbmdfYnVmX3NpemUtNSYmKG49ZS5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKGUubG9va2FoZWFkPD0xKXtpZihiZShlKSxlLmxvb2thaGVhZD09PTAmJnQ9PT1OZSlyZXR1cm4gcHQ7aWYoZS5sb29rYWhlYWQ9PT0wKWJyZWFrfWUuc3Ryc3RhcnQrPWUubG9va2FoZWFkLGUubG9va2FoZWFkPTA7dmFyIHI9ZS5ibG9ja19zdGFydCtuO2lmKChlLnN0cnN0YXJ0PT09MHx8ZS5zdHJzdGFydD49cikmJihlLmxvb2thaGVhZD1lLnN0cnN0YXJ0LXIsZS5zdHJzdGFydD1yLEt0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKXx8ZS5zdHJzdGFydC1lLmJsb2NrX3N0YXJ0Pj1lLndfc2l6ZS1hZSYmKEt0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gcHR9cmV0dXJuIGUuaW5zZXJ0PTAsdD09PWw/KEt0KGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP1J0OnhuKTooZS5zdHJzdGFydD5lLmJsb2NrX3N0YXJ0JiYoS3QoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApLHB0KX1mdW5jdGlvbiBEZShlLHQpe2Zvcih2YXIgbixyOzspe2lmKGUubG9va2FoZWFkPGFlKXtpZihiZShlKSxlLmxvb2thaGVhZDxhZSYmdD09PU5lKXJldHVybiBwdDtpZihlLmxvb2thaGVhZD09PTApYnJlYWt9aWYobj0wLGUubG9va2FoZWFkPj1MJiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQrTC0xXSkmZS5oYXNoX21hc2ssbj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0KSxuIT09MCYmZS5zdHJzdGFydC1uPD1lLndfc2l6ZS1hZSYmKGUubWF0Y2hfbGVuZ3RoPWVlKGUsbikpLGUubWF0Y2hfbGVuZ3RoPj1MKWlmKHI9Q2UuX3RyX3RhbGx5KGUsZS5zdHJzdGFydC1lLm1hdGNoX3N0YXJ0LGUubWF0Y2hfbGVuZ3RoLUwpLGUubG9va2FoZWFkLT1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aDw9ZS5tYXhfbGF6eV9tYXRjaCYmZS5sb29rYWhlYWQ+PUwpe2UubWF0Y2hfbGVuZ3RoLS07ZG8gZS5zdHJzdGFydCsrLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0K0wtMV0pJmUuaGFzaF9tYXNrLG49ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydDt3aGlsZSgtLWUubWF0Y2hfbGVuZ3RoIT09MCk7ZS5zdHJzdGFydCsrfWVsc2UgZS5zdHJzdGFydCs9ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg9MCxlLmluc19oPWUud2luZG93W2Uuc3Ryc3RhcnRdLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0KzFdKSZlLmhhc2hfbWFzaztlbHNlIHI9Q2UuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0Kys7aWYociYmKEt0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gcHR9cmV0dXJuIGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8TC0xP2Uuc3Ryc3RhcnQ6TC0xLHQ9PT1sPyhLdChlLCEwKSxlLnN0cm0uYXZhaWxfb3V0PT09MD9SdDp4bik6ZS5sYXN0X2xpdCYmKEt0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKT9wdDprdH1mdW5jdGlvbiBaZShlLHQpe2Zvcih2YXIgbixyLG87Oyl7aWYoZS5sb29rYWhlYWQ8YWUpe2lmKGJlKGUpLGUubG9va2FoZWFkPGFlJiZ0PT09TmUpcmV0dXJuIHB0O2lmKGUubG9va2FoZWFkPT09MClicmVha31pZihuPTAsZS5sb29rYWhlYWQ+PUwmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCtMLTFdKSZlLmhhc2hfbWFzayxuPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLGUucHJldl9sZW5ndGg9ZS5tYXRjaF9sZW5ndGgsZS5wcmV2X21hdGNoPWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGg9TC0xLG4hPT0wJiZlLnByZXZfbGVuZ3RoPGUubWF4X2xhenlfbWF0Y2gmJmUuc3Ryc3RhcnQtbjw9ZS53X3NpemUtYWUmJihlLm1hdGNoX2xlbmd0aD1lZShlLG4pLGUubWF0Y2hfbGVuZ3RoPD01JiYoZS5zdHJhdGVneT09PW5lfHxlLm1hdGNoX2xlbmd0aD09PUwmJmUuc3Ryc3RhcnQtZS5tYXRjaF9zdGFydD40MDk2KSYmKGUubWF0Y2hfbGVuZ3RoPUwtMSkpLGUucHJldl9sZW5ndGg+PUwmJmUubWF0Y2hfbGVuZ3RoPD1lLnByZXZfbGVuZ3RoKXtvPWUuc3Ryc3RhcnQrZS5sb29rYWhlYWQtTCxyPUNlLl90cl90YWxseShlLGUuc3Ryc3RhcnQtMS1lLnByZXZfbWF0Y2gsZS5wcmV2X2xlbmd0aC1MKSxlLmxvb2thaGVhZC09ZS5wcmV2X2xlbmd0aC0xLGUucHJldl9sZW5ndGgtPTI7ZG8rK2Uuc3Ryc3RhcnQ8PW8mJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCtMLTFdKSZlLmhhc2hfbWFzayxuPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpO3doaWxlKC0tZS5wcmV2X2xlbmd0aCE9PTApO2lmKGUubWF0Y2hfYXZhaWxhYmxlPTAsZS5tYXRjaF9sZW5ndGg9TC0xLGUuc3Ryc3RhcnQrKyxyJiYoS3QoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiBwdH1lbHNlIGlmKGUubWF0Y2hfYXZhaWxhYmxlKXtpZihyPUNlLl90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydC0xXSksciYmS3QoZSwhMSksZS5zdHJzdGFydCsrLGUubG9va2FoZWFkLS0sZS5zdHJtLmF2YWlsX291dD09PTApcmV0dXJuIHB0fWVsc2UgZS5tYXRjaF9hdmFpbGFibGU9MSxlLnN0cnN0YXJ0KyssZS5sb29rYWhlYWQtLX1yZXR1cm4gZS5tYXRjaF9hdmFpbGFibGUmJihyPUNlLl90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydC0xXSksZS5tYXRjaF9hdmFpbGFibGU9MCksZS5pbnNlcnQ9ZS5zdHJzdGFydDxMLTE/ZS5zdHJzdGFydDpMLTEsdD09PWw/KEt0KGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP1J0OnhuKTplLmxhc3RfbGl0JiYoS3QoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApP3B0Omt0fWZ1bmN0aW9uIHZ0KGUsdCl7Zm9yKHZhciBuLHIsbyxjLGg9ZS53aW5kb3c7Oyl7aWYoZS5sb29rYWhlYWQ8PWope2lmKGJlKGUpLGUubG9va2FoZWFkPD1qJiZ0PT09TmUpcmV0dXJuIHB0O2lmKGUubG9va2FoZWFkPT09MClicmVha31pZihlLm1hdGNoX2xlbmd0aD0wLGUubG9va2FoZWFkPj1MJiZlLnN0cnN0YXJ0PjAmJihvPWUuc3Ryc3RhcnQtMSxyPWhbb10scj09PWhbKytvXSYmcj09PWhbKytvXSYmcj09PWhbKytvXSkpe2M9ZS5zdHJzdGFydCtqO2RvO3doaWxlKHI9PT1oWysrb10mJnI9PT1oWysrb10mJnI9PT1oWysrb10mJnI9PT1oWysrb10mJnI9PT1oWysrb10mJnI9PT1oWysrb10mJnI9PT1oWysrb10mJnI9PT1oWysrb10mJm88Yyk7ZS5tYXRjaF9sZW5ndGg9ai0oYy1vKSxlLm1hdGNoX2xlbmd0aD5lLmxvb2thaGVhZCYmKGUubWF0Y2hfbGVuZ3RoPWUubG9va2FoZWFkKX1pZihlLm1hdGNoX2xlbmd0aD49TD8obj1DZS5fdHJfdGFsbHkoZSwxLGUubWF0Y2hfbGVuZ3RoLUwpLGUubG9va2FoZWFkLT1lLm1hdGNoX2xlbmd0aCxlLnN0cnN0YXJ0Kz1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aD0wKToobj1DZS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKyksbiYmKEt0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gcHR9cmV0dXJuIGUuaW5zZXJ0PTAsdD09PWw/KEt0KGUsITApLGUuc3RybS5hdmFpbF9vdXQ9PT0wP1J0OnhuKTplLmxhc3RfbGl0JiYoS3QoZSwhMSksZS5zdHJtLmF2YWlsX291dD09PTApP3B0Omt0fWZ1bmN0aW9uIGV0KGUsdCl7Zm9yKHZhciBuOzspe2lmKGUubG9va2FoZWFkPT09MCYmKGJlKGUpLGUubG9va2FoZWFkPT09MCkpe2lmKHQ9PT1OZSlyZXR1cm4gcHQ7YnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxuPUNlLl90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydF0pLGUubG9va2FoZWFkLS0sZS5zdHJzdGFydCsrLG4mJihLdChlLCExKSxlLnN0cm0uYXZhaWxfb3V0PT09MCkpcmV0dXJuIHB0fXJldHVybiBlLmluc2VydD0wLHQ9PT1sPyhLdChlLCEwKSxlLnN0cm0uYXZhaWxfb3V0PT09MD9SdDp4bik6ZS5sYXN0X2xpdCYmKEt0KGUsITEpLGUuc3RybS5hdmFpbF9vdXQ9PT0wKT9wdDprdH1mdW5jdGlvbiB0dChlLHQsbixyLG8pe3RoaXMuZ29vZF9sZW5ndGg9ZSx0aGlzLm1heF9sYXp5PXQsdGhpcy5uaWNlX2xlbmd0aD1uLHRoaXMubWF4X2NoYWluPXIsdGhpcy5mdW5jPW99dmFyIEhlO0hlPVtuZXcgdHQoMCwwLDAsMCxNZSksbmV3IHR0KDQsNCw4LDQsRGUpLG5ldyB0dCg0LDUsMTYsOCxEZSksbmV3IHR0KDQsNiwzMiwzMixEZSksbmV3IHR0KDQsNCwxNiwxNixaZSksbmV3IHR0KDgsMTYsMzIsMzIsWmUpLG5ldyB0dCg4LDE2LDEyOCwxMjgsWmUpLG5ldyB0dCg4LDMyLDEyOCwyNTYsWmUpLG5ldyB0dCgzMiwxMjgsMjU4LDEwMjQsWmUpLG5ldyB0dCgzMiwyNTgsMjU4LDQwOTYsWmUpXTtmdW5jdGlvbiBIdChlKXtlLndpbmRvd19zaXplPTIqZS53X3NpemUsdXIoZS5oZWFkKSxlLm1heF9sYXp5X21hdGNoPUhlW2UubGV2ZWxdLm1heF9sYXp5LGUuZ29vZF9tYXRjaD1IZVtlLmxldmVsXS5nb29kX2xlbmd0aCxlLm5pY2VfbWF0Y2g9SGVbZS5sZXZlbF0ubmljZV9sZW5ndGgsZS5tYXhfY2hhaW5fbGVuZ3RoPUhlW2UubGV2ZWxdLm1heF9jaGFpbixlLnN0cnN0YXJ0PTAsZS5ibG9ja19zdGFydD0wLGUubG9va2FoZWFkPTAsZS5pbnNlcnQ9MCxlLm1hdGNoX2xlbmd0aD1lLnByZXZfbGVuZ3RoPUwtMSxlLm1hdGNoX2F2YWlsYWJsZT0wLGUuaW5zX2g9MH1mdW5jdGlvbiBEdCgpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRleD0wLHRoaXMubWV0aG9kPWZ0LHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyBpdC5CdWYxNihLZSoyKSx0aGlzLmR5bl9kdHJlZT1uZXcgaXQuQnVmMTYoKDIqX3QrMSkqMiksdGhpcy5ibF90cmVlPW5ldyBpdC5CdWYxNigoMipBdCsxKSoyKSx1cih0aGlzLmR5bl9sdHJlZSksdXIodGhpcy5keW5fZHRyZWUpLHVyKHRoaXMuYmxfdHJlZSksdGhpcy5sX2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMuYmxfZGVzYz1udWxsLHRoaXMuYmxfY291bnQ9bmV3IGl0LkJ1ZjE2KE50KzEpLHRoaXMuaGVhcD1uZXcgaXQuQnVmMTYoMipBZSsxKSx1cih0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgaXQuQnVmMTYoMipBZSsxKSx1cih0aGlzLmRlcHRoKSx0aGlzLmxfYnVmPTAsdGhpcy5saXRfYnVmc2l6ZT0wLHRoaXMubGFzdF9saXQ9MCx0aGlzLmRfYnVmPTAsdGhpcy5vcHRfbGVuPTAsdGhpcy5zdGF0aWNfbGVuPTAsdGhpcy5tYXRjaGVzPTAsdGhpcy5pbnNlcnQ9MCx0aGlzLmJpX2J1Zj0wLHRoaXMuYmlfdmFsaWQ9MH1mdW5jdGlvbiB6dChlKXt2YXIgdDtyZXR1cm4hZXx8IWUuc3RhdGU/aG4oZSxDKTooZS50b3RhbF9pbj1lLnRvdGFsX291dD0wLGUuZGF0YV90eXBlPVllLHQ9ZS5zdGF0ZSx0LnBlbmRpbmc9MCx0LnBlbmRpbmdfb3V0PTAsdC53cmFwPDAmJih0LndyYXA9LXQud3JhcCksdC5zdGF0dXM9dC53cmFwP29lOlVlLGUuYWRsZXI9dC53cmFwPT09Mj8wOjEsdC5sYXN0X2ZsdXNoPU5lLENlLl90cl9pbml0KHQpLF8pfWZ1bmN0aW9uIHduKGUpe3ZhciB0PXp0KGUpO3JldHVybiB0PT09XyYmSHQoZS5zdGF0ZSksdH1mdW5jdGlvbiBHcihlLHQpe3JldHVybiFlfHwhZS5zdGF0ZXx8ZS5zdGF0ZS53cmFwIT09Mj9DOihlLnN0YXRlLmd6aGVhZD10LF8pfWZ1bmN0aW9uIHFuKGUsdCxuLHIsbyxjKXtpZighZSlyZXR1cm4gQzt2YXIgaD0xO2lmKHQ9PT1IJiYodD02KSxyPDA/KGg9MCxyPS1yKTpyPjE1JiYoaD0yLHItPTE2KSxvPDF8fG8+UWV8fG4hPT1mdHx8cjw4fHxyPjE1fHx0PDB8fHQ+OXx8YzwwfHxjPnVlKXJldHVybiBobihlLEMpO3I9PT04JiYocj05KTt2YXIgYj1uZXcgRHQ7cmV0dXJuIGUuc3RhdGU9YixiLnN0cm09ZSxiLndyYXA9aCxiLmd6aGVhZD1udWxsLGIud19iaXRzPXIsYi53X3NpemU9MTw8Yi53X2JpdHMsYi53X21hc2s9Yi53X3NpemUtMSxiLmhhc2hfYml0cz1vKzcsYi5oYXNoX3NpemU9MTw8Yi5oYXNoX2JpdHMsYi5oYXNoX21hc2s9Yi5oYXNoX3NpemUtMSxiLmhhc2hfc2hpZnQ9fn4oKGIuaGFzaF9iaXRzK0wtMSkvTCksYi53aW5kb3c9bmV3IGl0LkJ1ZjgoYi53X3NpemUqMiksYi5oZWFkPW5ldyBpdC5CdWYxNihiLmhhc2hfc2l6ZSksYi5wcmV2PW5ldyBpdC5CdWYxNihiLndfc2l6ZSksYi5saXRfYnVmc2l6ZT0xPDxvKzYsYi5wZW5kaW5nX2J1Zl9zaXplPWIubGl0X2J1ZnNpemUqNCxiLnBlbmRpbmdfYnVmPW5ldyBpdC5CdWY4KGIucGVuZGluZ19idWZfc2l6ZSksYi5kX2J1Zj0xKmIubGl0X2J1ZnNpemUsYi5sX2J1Zj0oMSsyKSpiLmxpdF9idWZzaXplLGIubGV2ZWw9dCxiLnN0cmF0ZWd5PWMsYi5tZXRob2Q9bix3bihlKX1mdW5jdGlvbiB1aShlLHQpe3JldHVybiBxbihlLHQsZnQsUmUsbWUsa2UpfWZ1bmN0aW9uIFVvKGUsdCl7dmFyIG4scixvLGM7aWYoIWV8fCFlLnN0YXRlfHx0PmZ8fHQ8MClyZXR1cm4gZT9obihlLEMpOkM7aWYocj1lLnN0YXRlLCFlLm91dHB1dHx8IWUuaW5wdXQmJmUuYXZhaWxfaW4hPT0wfHxyLnN0YXR1cz09PVZ0JiZ0IT09bClyZXR1cm4gaG4oZSxlLmF2YWlsX291dD09PTA/TTpDKTtpZihyLnN0cm09ZSxuPXIubGFzdF9mbHVzaCxyLmxhc3RfZmx1c2g9dCxyLnN0YXR1cz09PW9lKWlmKHIud3JhcD09PTIpZS5hZGxlcj0wLHJuKHIsMzEpLHJuKHIsMTM5KSxybihyLDgpLHIuZ3poZWFkPyhybihyLChyLmd6aGVhZC50ZXh0PzE6MCkrKHIuZ3poZWFkLmhjcmM/MjowKSsoci5nemhlYWQuZXh0cmE/NDowKSsoci5nemhlYWQubmFtZT84OjApKyhyLmd6aGVhZC5jb21tZW50PzE2OjApKSxybihyLHIuZ3poZWFkLnRpbWUmMjU1KSxybihyLHIuZ3poZWFkLnRpbWU+PjgmMjU1KSxybihyLHIuZ3poZWFkLnRpbWU+PjE2JjI1NSkscm4ocixyLmd6aGVhZC50aW1lPj4yNCYyNTUpLHJuKHIsci5sZXZlbD09PTk/MjpyLnN0cmF0ZWd5Pj12ZXx8ci5sZXZlbDwyPzQ6MCkscm4ocixyLmd6aGVhZC5vcyYyNTUpLHIuZ3poZWFkLmV4dHJhJiZyLmd6aGVhZC5leHRyYS5sZW5ndGgmJihybihyLHIuZ3poZWFkLmV4dHJhLmxlbmd0aCYyNTUpLHJuKHIsci5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLHIuZ3poZWFkLmhjcmMmJihlLmFkbGVyPVRlKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmcsMCkpLHIuZ3ppbmRleD0wLHIuc3RhdHVzPSRlKToocm4ociwwKSxybihyLDApLHJuKHIsMCkscm4ociwwKSxybihyLDApLHJuKHIsci5sZXZlbD09PTk/MjpyLnN0cmF0ZWd5Pj12ZXx8ci5sZXZlbDwyPzQ6MCkscm4ocixrbiksci5zdGF0dXM9VWUpO2Vsc2V7dmFyIGg9ZnQrKHIud19iaXRzLTg8PDQpPDw4LGI9LTE7ci5zdHJhdGVneT49dmV8fHIubGV2ZWw8Mj9iPTA6ci5sZXZlbDw2P2I9MTpyLmxldmVsPT09Nj9iPTI6Yj0zLGh8PWI8PDYsci5zdHJzdGFydCE9PTAmJihofD1yZSksaCs9MzEtaCUzMSxyLnN0YXR1cz1VZSxsbyhyLGgpLHIuc3Ryc3RhcnQhPT0wJiYobG8ocixlLmFkbGVyPj4+MTYpLGxvKHIsZS5hZGxlciY2NTUzNSkpLGUuYWRsZXI9MX1pZihyLnN0YXR1cz09PSRlKWlmKHIuZ3poZWFkLmV4dHJhKXtmb3Iobz1yLnBlbmRpbmc7ci5nemluZGV4PChyLmd6aGVhZC5leHRyYS5sZW5ndGgmNjU1MzUpJiYhKHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSYmKHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5vJiYoZS5hZGxlcj1UZShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLW8sbykpLG5pKGUpLG89ci5wZW5kaW5nLHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSkpOylybihyLHIuZ3poZWFkLmV4dHJhW3IuZ3ppbmRleF0mMjU1KSxyLmd6aW5kZXgrKztyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+byYmKGUuYWRsZXI9VGUoZS5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1vLG8pKSxyLmd6aW5kZXg9PT1yLmd6aGVhZC5leHRyYS5sZW5ndGgmJihyLmd6aW5kZXg9MCxyLnN0YXR1cz1ydCl9ZWxzZSByLnN0YXR1cz1ydDtpZihyLnN0YXR1cz09PXJ0KWlmKHIuZ3poZWFkLm5hbWUpe289ci5wZW5kaW5nO2Rve2lmKHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSYmKHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5vJiYoZS5hZGxlcj1UZShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLW8sbykpLG5pKGUpLG89ci5wZW5kaW5nLHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSkpe2M9MTticmVha31yLmd6aW5kZXg8ci5nemhlYWQubmFtZS5sZW5ndGg/Yz1yLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQoci5nemluZGV4KyspJjI1NTpjPTAscm4ocixjKX13aGlsZShjIT09MCk7ci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPm8mJihlLmFkbGVyPVRlKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctbyxvKSksYz09PTAmJihyLmd6aW5kZXg9MCxyLnN0YXR1cz1xZSl9ZWxzZSByLnN0YXR1cz1xZTtpZihyLnN0YXR1cz09PXFlKWlmKHIuZ3poZWFkLmNvbW1lbnQpe289ci5wZW5kaW5nO2Rve2lmKHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSYmKHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5vJiYoZS5hZGxlcj1UZShlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLW8sbykpLG5pKGUpLG89ci5wZW5kaW5nLHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSkpe2M9MTticmVha31yLmd6aW5kZXg8ci5nemhlYWQuY29tbWVudC5sZW5ndGg/Yz1yLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoci5nemluZGV4KyspJjI1NTpjPTAscm4ocixjKX13aGlsZShjIT09MCk7ci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPm8mJihlLmFkbGVyPVRlKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctbyxvKSksYz09PTAmJihyLnN0YXR1cz1KZSl9ZWxzZSByLnN0YXR1cz1KZTtpZihyLnN0YXR1cz09PUplJiYoci5nemhlYWQuaGNyYz8oci5wZW5kaW5nKzI+ci5wZW5kaW5nX2J1Zl9zaXplJiZuaShlKSxyLnBlbmRpbmcrMjw9ci5wZW5kaW5nX2J1Zl9zaXplJiYocm4ocixlLmFkbGVyJjI1NSkscm4ocixlLmFkbGVyPj44JjI1NSksZS5hZGxlcj0wLHIuc3RhdHVzPVVlKSk6ci5zdGF0dXM9VWUpLHIucGVuZGluZyE9PTApe2lmKG5pKGUpLGUuYXZhaWxfb3V0PT09MClyZXR1cm4gci5sYXN0X2ZsdXNoPS0xLF99ZWxzZSBpZihlLmF2YWlsX2luPT09MCYmbW4odCk8PW1uKG4pJiZ0IT09bClyZXR1cm4gaG4oZSxNKTtpZihyLnN0YXR1cz09PVZ0JiZlLmF2YWlsX2luIT09MClyZXR1cm4gaG4oZSxNKTtpZihlLmF2YWlsX2luIT09MHx8ci5sb29rYWhlYWQhPT0wfHx0IT09TmUmJnIuc3RhdHVzIT09VnQpe3ZhciBWPXIuc3RyYXRlZ3k9PT12ZT9ldChyLHQpOnIuc3RyYXRlZ3k9PT1MZT92dChyLHQpOkhlW3IubGV2ZWxdLmZ1bmMocix0KTtpZigoVj09PVJ0fHxWPT09eG4pJiYoci5zdGF0dXM9VnQpLFY9PT1wdHx8Vj09PVJ0KXJldHVybiBlLmF2YWlsX291dD09PTAmJihyLmxhc3RfZmx1c2g9LTEpLF87aWYoVj09PWt0JiYodD09PUN0P0NlLl90cl9hbGlnbihyKTp0IT09ZiYmKENlLl90cl9zdG9yZWRfYmxvY2sociwwLDAsITEpLHQ9PT1pJiYodXIoci5oZWFkKSxyLmxvb2thaGVhZD09PTAmJihyLnN0cnN0YXJ0PTAsci5ibG9ja19zdGFydD0wLHIuaW5zZXJ0PTApKSksbmkoZSksZS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gci5sYXN0X2ZsdXNoPS0xLF99cmV0dXJuIHQhPT1sP186ci53cmFwPD0wP0E6KHIud3JhcD09PTI/KHJuKHIsZS5hZGxlciYyNTUpLHJuKHIsZS5hZGxlcj4+OCYyNTUpLHJuKHIsZS5hZGxlcj4+MTYmMjU1KSxybihyLGUuYWRsZXI+PjI0JjI1NSkscm4ocixlLnRvdGFsX2luJjI1NSkscm4ocixlLnRvdGFsX2luPj44JjI1NSkscm4ocixlLnRvdGFsX2luPj4xNiYyNTUpLHJuKHIsZS50b3RhbF9pbj4+MjQmMjU1KSk6KGxvKHIsZS5hZGxlcj4+PjE2KSxsbyhyLGUuYWRsZXImNjU1MzUpKSxuaShlKSxyLndyYXA+MCYmKHIud3JhcD0tci53cmFwKSxyLnBlbmRpbmchPT0wP186QSl9ZnVuY3Rpb24gZXMoZSl7dmFyIHQ7cmV0dXJuIWV8fCFlLnN0YXRlP0M6KHQ9ZS5zdGF0ZS5zdGF0dXMsdCE9PW9lJiZ0IT09JGUmJnQhPT1ydCYmdCE9PXFlJiZ0IT09SmUmJnQhPT1VZSYmdCE9PVZ0P2huKGUsQyk6KGUuc3RhdGU9bnVsbCx0PT09VWU/aG4oZSxOKTpfKSl9ZnVuY3Rpb24gQ3MoZSx0KXt2YXIgbj10Lmxlbmd0aCxyLG8sYyxoLGIsVixULEQ7aWYoIWV8fCFlLnN0YXRlfHwocj1lLnN0YXRlLGg9ci53cmFwLGg9PT0yfHxoPT09MSYmci5zdGF0dXMhPT1vZXx8ci5sb29rYWhlYWQpKXJldHVybiBDO2ZvcihoPT09MSYmKGUuYWRsZXI9RWUoZS5hZGxlcix0LG4sMCkpLHIud3JhcD0wLG4+PXIud19zaXplJiYoaD09PTAmJih1cihyLmhlYWQpLHIuc3Ryc3RhcnQ9MCxyLmJsb2NrX3N0YXJ0PTAsci5pbnNlcnQ9MCksRD1uZXcgaXQuQnVmOChyLndfc2l6ZSksaXQuYXJyYXlTZXQoRCx0LG4tci53X3NpemUsci53X3NpemUsMCksdD1ELG49ci53X3NpemUpLGI9ZS5hdmFpbF9pbixWPWUubmV4dF9pbixUPWUuaW5wdXQsZS5hdmFpbF9pbj1uLGUubmV4dF9pbj0wLGUuaW5wdXQ9dCxiZShyKTtyLmxvb2thaGVhZD49TDspe289ci5zdHJzdGFydCxjPXIubG9va2FoZWFkLShMLTEpO2RvIHIuaW5zX2g9KHIuaW5zX2g8PHIuaGFzaF9zaGlmdF5yLndpbmRvd1tvK0wtMV0pJnIuaGFzaF9tYXNrLHIucHJldltvJnIud19tYXNrXT1yLmhlYWRbci5pbnNfaF0sci5oZWFkW3IuaW5zX2hdPW8sbysrO3doaWxlKC0tYyk7ci5zdHJzdGFydD1vLHIubG9va2FoZWFkPUwtMSxiZShyKX1yZXR1cm4gci5zdHJzdGFydCs9ci5sb29rYWhlYWQsci5ibG9ja19zdGFydD1yLnN0cnN0YXJ0LHIuaW5zZXJ0PXIubG9va2FoZWFkLHIubG9va2FoZWFkPTAsci5tYXRjaF9sZW5ndGg9ci5wcmV2X2xlbmd0aD1MLTEsci5tYXRjaF9hdmFpbGFibGU9MCxlLm5leHRfaW49VixlLmlucHV0PVQsZS5hdmFpbF9pbj1iLHIud3JhcD1oLF99T3QuZGVmbGF0ZUluaXQ9dWksT3QuZGVmbGF0ZUluaXQyPXFuLE90LmRlZmxhdGVSZXNldD13bixPdC5kZWZsYXRlUmVzZXRLZWVwPXp0LE90LmRlZmxhdGVTZXRIZWFkZXI9R3IsT3QuZGVmbGF0ZT1VbyxPdC5kZWZsYXRlRW5kPWVzLE90LmRlZmxhdGVTZXREaWN0aW9uYXJ5PUNzLE90LmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIjt2YXIgdHI9e30sTGE9QmUsQXM9ITAscWk9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoKGUpe0FzPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKGUpe3FpPSExfWZvcih2YXIgSG89bmV3IExhLkJ1ZjgoMjU2KSxjbz0wO2NvPDI1NjtjbysrKUhvW2NvXT1jbz49MjUyPzY6Y28+PTI0OD81OmNvPj0yNDA/NDpjbz49MjI0PzM6Y28+PTE5Mj8yOjE7SG9bMjU0XT1Ib1syNTRdPTEsdHIuc3RyaW5nMmJ1Zj1mdW5jdGlvbihlKXt2YXIgdCxuLHIsbyxjLGg9ZS5sZW5ndGgsYj0wO2ZvcihvPTA7bzxoO28rKyluPWUuY2hhckNvZGVBdChvKSwobiY2NDUxMik9PT01NTI5NiYmbysxPGgmJihyPWUuY2hhckNvZGVBdChvKzEpLChyJjY0NTEyKT09PTU2MzIwJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSxvKyspKSxiKz1uPDEyOD8xOm48MjA0OD8yOm48NjU1MzY/Mzo0O2Zvcih0PW5ldyBMYS5CdWY4KGIpLGM9MCxvPTA7YzxiO28rKyluPWUuY2hhckNvZGVBdChvKSwobiY2NDUxMik9PT01NTI5NiYmbysxPGgmJihyPWUuY2hhckNvZGVBdChvKzEpLChyJjY0NTEyKT09PTU2MzIwJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSxvKyspKSxuPDEyOD90W2MrK109bjpuPDIwNDg/KHRbYysrXT0xOTJ8bj4+PjYsdFtjKytdPTEyOHxuJjYzKTpuPDY1NTM2Pyh0W2MrK109MjI0fG4+Pj4xMix0W2MrK109MTI4fG4+Pj42JjYzLHRbYysrXT0xMjh8biY2Myk6KHRbYysrXT0yNDB8bj4+PjE4LHRbYysrXT0xMjh8bj4+PjEyJjYzLHRbYysrXT0xMjh8bj4+PjYmNjMsdFtjKytdPTEyOHxuJjYzKTtyZXR1cm4gdH07ZnVuY3Rpb24gYmEoZSx0KXtpZih0PDY1NTM0JiYoZS5zdWJhcnJheSYmcWl8fCFlLnN1YmFycmF5JiZBcykpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxMYS5zaHJpbmtCdWYoZSx0KSk7Zm9yKHZhciBuPSIiLHI9MDtyPHQ7cisrKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIG59dHIuYnVmMmJpbnN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gYmEoZSxlLmxlbmd0aCl9LHRyLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBMYS5CdWY4KGUubGVuZ3RoKSxuPTAscj10Lmxlbmd0aDtuPHI7bisrKXRbbl09ZS5jaGFyQ29kZUF0KG4pO3JldHVybiB0fSx0ci5idWYyc3RyaW5nPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGMsaD10fHxlLmxlbmd0aCxiPW5ldyBBcnJheShoKjIpO2ZvcihyPTAsbj0wO248aDspe2lmKG89ZVtuKytdLG88MTI4KXtiW3IrK109bztjb250aW51ZX1pZihjPUhvW29dLGM+NCl7YltyKytdPTY1NTMzLG4rPWMtMTtjb250aW51ZX1mb3IobyY9Yz09PTI/MzE6Yz09PTM/MTU6NztjPjEmJm48aDspbz1vPDw2fGVbbisrXSY2MyxjLS07aWYoYz4xKXtiW3IrK109NjU1MzM7Y29udGludWV9bzw2NTUzNj9iW3IrK109bzooby09NjU1MzYsYltyKytdPTU1Mjk2fG8+PjEwJjEwMjMsYltyKytdPTU2MzIwfG8mMTAyMyl9cmV0dXJuIGJhKGIscil9LHRyLnV0Zjhib3JkZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbjtmb3IodD10fHxlLmxlbmd0aCx0PmUubGVuZ3RoJiYodD1lLmxlbmd0aCksbj10LTE7bj49MCYmKGVbbl0mMTkyKT09PTEyODspbi0tO3JldHVybiBuPDB8fG49PT0wP3Q6bitIb1tlW25dXT50P246dH07ZnVuY3Rpb24gdHMoKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfXZhciBhYT10cyxzYT1PdCxqbz1CZSxibD10cixZcz13dCxFYz1hYSxXbD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLER2PTAsdnU9NCxFbD0wLCRmPTEsVWY9MixGdj0tMSxWdj0wLCR2PTg7ZnVuY3Rpb24gcXMoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcXMpKXJldHVybiBuZXcgcXMoZSk7dGhpcy5vcHRpb25zPWpvLmFzc2lnbih7bGV2ZWw6RnYsbWV0aG9kOiR2LGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6VnYsdG86IiJ9LGV8fHt9KTt2YXIgdD10aGlzLm9wdGlvbnM7dC5yYXcmJnQud2luZG93Qml0cz4wP3Qud2luZG93Qml0cz0tdC53aW5kb3dCaXRzOnQuZ3ppcCYmdC53aW5kb3dCaXRzPjAmJnQud2luZG93Qml0czwxNiYmKHQud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IEVjLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbj1zYS5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLHQubGV2ZWwsdC5tZXRob2QsdC53aW5kb3dCaXRzLHQubWVtTGV2ZWwsdC5zdHJhdGVneSk7aWYobiE9PUVsKXRocm93IG5ldyBFcnJvcihZc1tuXSk7aWYodC5oZWFkZXImJnNhLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLHQuaGVhZGVyKSx0LmRpY3Rpb25hcnkpe3ZhciByO2lmKHR5cGVvZiB0LmRpY3Rpb25hcnk9PSJzdHJpbmciP3I9Ymwuc3RyaW5nMmJ1Zih0LmRpY3Rpb25hcnkpOldsLmNhbGwodC5kaWN0aW9uYXJ5KT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/cj1uZXcgVWludDhBcnJheSh0LmRpY3Rpb25hcnkpOnI9dC5kaWN0aW9uYXJ5LG49c2EuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLHIpLG4hPT1FbCl0aHJvdyBuZXcgRXJyb3IoWXNbbl0pO3RoaXMuX2RpY3Rfc2V0PSEwfX1xcy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuc3RybSxyPXRoaXMub3B0aW9ucy5jaHVua1NpemUsbyxjO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7Yz10PT09fn50P3Q6dD09PSEwP3Z1OkR2LHR5cGVvZiBlPT0ic3RyaW5nIj9uLmlucHV0PWJsLnN0cmluZzJidWYoZSk6V2wuY2FsbChlKT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/bi5pbnB1dD1uZXcgVWludDhBcnJheShlKTpuLmlucHV0PWUsbi5uZXh0X2luPTAsbi5hdmFpbF9pbj1uLmlucHV0Lmxlbmd0aDtkb3tpZihuLmF2YWlsX291dD09PTAmJihuLm91dHB1dD1uZXcgam8uQnVmOChyKSxuLm5leHRfb3V0PTAsbi5hdmFpbF9vdXQ9ciksbz1zYS5kZWZsYXRlKG4sYyksbyE9PSRmJiZvIT09RWwpcmV0dXJuIHRoaXMub25FbmQobyksdGhpcy5lbmRlZD0hMCwhMTsobi5hdmFpbF9vdXQ9PT0wfHxuLmF2YWlsX2luPT09MCYmKGM9PT12dXx8Yz09PVVmKSkmJih0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj90aGlzLm9uRGF0YShibC5idWYyYmluc3RyaW5nKGpvLnNocmlua0J1ZihuLm91dHB1dCxuLm5leHRfb3V0KSkpOnRoaXMub25EYXRhKGpvLnNocmlua0J1ZihuLm91dHB1dCxuLm5leHRfb3V0KSkpfXdoaWxlKChuLmF2YWlsX2luPjB8fG4uYXZhaWxfb3V0PT09MCkmJm8hPT0kZik7cmV0dXJuIGM9PT12dT8obz1zYS5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChvKSx0aGlzLmVuZGVkPSEwLG89PT1FbCk6KGM9PT1VZiYmKHRoaXMub25FbmQoRWwpLG4uYXZhaWxfb3V0PTApLCEwKX0scXMucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNodW5rcy5wdXNoKGUpfSxxcy5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oZSl7ZT09PUVsJiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbigiIik6dGhpcy5yZXN1bHQ9am8uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ307ZnVuY3Rpb24gbXUoZSx0KXt2YXIgbj1uZXcgcXModCk7aWYobi5wdXNoKGUsITApLG4uZXJyKXRocm93IG4ubXNnfHxZc1tuLmVycl07cmV0dXJuIG4ucmVzdWx0fWZ1bmN0aW9uIFV2KGUsdCl7cmV0dXJuIHQ9dHx8e30sdC5yYXc9ITAsbXUoZSx0KX1mdW5jdGlvbiBIdihlLHQpe3JldHVybiB0PXR8fHt9LHQuZ3ppcD0hMCxtdShlLHQpfVB0LkRlZmxhdGU9cXMsUHQuZGVmbGF0ZT1tdSxQdC5kZWZsYXRlUmF3PVV2LFB0Lmd6aXA9SHY7dmFyIEdsPXt9LEVhPXt9LHljPTMwLGp2PTEyLHp2PWZ1bmN0aW9uKHQsbil7dmFyIHIsbyxjLGgsYixWLFQsRCxfZSxTZSxJZSx1dCxkdCxUdCxJdCx2bix1bixqdCx5dCxFbixhbixYdCxBbixkcixRdDtyPXQuc3RhdGUsbz10Lm5leHRfaW4sZHI9dC5pbnB1dCxjPW8rKHQuYXZhaWxfaW4tNSksaD10Lm5leHRfb3V0LFF0PXQub3V0cHV0LGI9aC0obi10LmF2YWlsX291dCksVj1oKyh0LmF2YWlsX291dC0yNTcpLFQ9ci5kbWF4LEQ9ci53c2l6ZSxfZT1yLndoYXZlLFNlPXIud25leHQsSWU9ci53aW5kb3csdXQ9ci5ob2xkLGR0PXIuYml0cyxUdD1yLmxlbmNvZGUsSXQ9ci5kaXN0Y29kZSx2bj0oMTw8ci5sZW5iaXRzKS0xLHVuPSgxPDxyLmRpc3RiaXRzKS0xO2U6ZG97ZHQ8MTUmJih1dCs9ZHJbbysrXTw8ZHQsZHQrPTgsdXQrPWRyW28rK108PGR0LGR0Kz04KSxqdD1UdFt1dCZ2bl07dDpmb3IoOzspe2lmKHl0PWp0Pj4+MjQsdXQ+Pj49eXQsZHQtPXl0LHl0PWp0Pj4+MTYmMjU1LHl0PT09MClRdFtoKytdPWp0JjY1NTM1O2Vsc2UgaWYoeXQmMTYpe0VuPWp0JjY1NTM1LHl0Jj0xNSx5dCYmKGR0PHl0JiYodXQrPWRyW28rK108PGR0LGR0Kz04KSxFbis9dXQmKDE8PHl0KS0xLHV0Pj4+PXl0LGR0LT15dCksZHQ8MTUmJih1dCs9ZHJbbysrXTw8ZHQsZHQrPTgsdXQrPWRyW28rK108PGR0LGR0Kz04KSxqdD1JdFt1dCZ1bl07bjpmb3IoOzspe2lmKHl0PWp0Pj4+MjQsdXQ+Pj49eXQsZHQtPXl0LHl0PWp0Pj4+MTYmMjU1LHl0JjE2KXtpZihhbj1qdCY2NTUzNSx5dCY9MTUsZHQ8eXQmJih1dCs9ZHJbbysrXTw8ZHQsZHQrPTgsZHQ8eXQmJih1dCs9ZHJbbysrXTw8ZHQsZHQrPTgpKSxhbis9dXQmKDE8PHl0KS0xLGFuPlQpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsci5tb2RlPXljO2JyZWFrIGV9aWYodXQ+Pj49eXQsZHQtPXl0LHl0PWgtYixhbj55dCl7aWYoeXQ9YW4teXQseXQ+X2UmJnIuc2FuZSl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixyLm1vZGU9eWM7YnJlYWsgZX1pZihYdD0wLEFuPUllLFNlPT09MCl7aWYoWHQrPUQteXQseXQ8RW4pe0VuLT15dDtkbyBRdFtoKytdPUllW1h0KytdO3doaWxlKC0teXQpO1h0PWgtYW4sQW49UXR9fWVsc2UgaWYoU2U8eXQpe2lmKFh0Kz1EK1NlLXl0LHl0LT1TZSx5dDxFbil7RW4tPXl0O2RvIFF0W2grK109SWVbWHQrK107d2hpbGUoLS15dCk7aWYoWHQ9MCxTZTxFbil7eXQ9U2UsRW4tPXl0O2RvIFF0W2grK109SWVbWHQrK107d2hpbGUoLS15dCk7WHQ9aC1hbixBbj1RdH19fWVsc2UgaWYoWHQrPVNlLXl0LHl0PEVuKXtFbi09eXQ7ZG8gUXRbaCsrXT1JZVtYdCsrXTt3aGlsZSgtLXl0KTtYdD1oLWFuLEFuPVF0fWZvcig7RW4+MjspUXRbaCsrXT1BbltYdCsrXSxRdFtoKytdPUFuW1h0KytdLFF0W2grK109QW5bWHQrK10sRW4tPTM7RW4mJihRdFtoKytdPUFuW1h0KytdLEVuPjEmJihRdFtoKytdPUFuW1h0KytdKSl9ZWxzZXtYdD1oLWFuO2RvIFF0W2grK109UXRbWHQrK10sUXRbaCsrXT1RdFtYdCsrXSxRdFtoKytdPVF0W1h0KytdLEVuLT0zO3doaWxlKEVuPjIpO0VuJiYoUXRbaCsrXT1RdFtYdCsrXSxFbj4xJiYoUXRbaCsrXT1RdFtYdCsrXSkpfX1lbHNlIGlmKCh5dCY2NCk9PT0wKXtqdD1JdFsoanQmNjU1MzUpKyh1dCYoMTw8eXQpLTEpXTtjb250aW51ZSBufWVsc2V7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsci5tb2RlPXljO2JyZWFrIGV9YnJlYWt9fWVsc2UgaWYoKHl0JjY0KT09PTApe2p0PVR0WyhqdCY2NTUzNSkrKHV0JigxPDx5dCktMSldO2NvbnRpbnVlIHR9ZWxzZSBpZih5dCYzMil7ci5tb2RlPWp2O2JyZWFrIGV9ZWxzZXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixyLm1vZGU9eWM7YnJlYWsgZX1icmVha319d2hpbGUobzxjJiZoPFYpO0VuPWR0Pj4zLG8tPUVuLGR0LT1Fbjw8Myx1dCY9KDE8PGR0KS0xLHQubmV4dF9pbj1vLHQubmV4dF9vdXQ9aCx0LmF2YWlsX2luPW88Yz81KyhjLW8pOjUtKG8tYyksdC5hdmFpbF9vdXQ9aDxWPzI1NysoVi1oKToyNTctKGgtViksci5ob2xkPXV0LHIuYml0cz1kdH0sSGY9QmUseWw9MTUsamY9ODUyLHpmPTU5MixXZj0wLF91PTEsR2Y9MixXdj1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLEd2PVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sWXY9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLHF2PVsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF0sS3Y9ZnVuY3Rpb24odCxuLHIsbyxjLGgsYixWKXt2YXIgVD1WLmJpdHMsRD0wLF9lPTAsU2U9MCxJZT0wLHV0PTAsZHQ9MCxUdD0wLEl0PTAsdm49MCx1bj0wLGp0LHl0LEVuLGFuLFh0LEFuPW51bGwsZHI9MCxRdCxPYT1uZXcgSGYuQnVmMTYoeWwrMSksWmM9bmV3IEhmLkJ1ZjE2KHlsKzEpLFhjPW51bGwsT3A9MCxUcCxRYyxldTtmb3IoRD0wO0Q8PXlsO0QrKylPYVtEXT0wO2ZvcihfZT0wO19lPG87X2UrKylPYVtuW3IrX2VdXSsrO2Zvcih1dD1ULEllPXlsO0llPj0xJiZPYVtJZV09PT0wO0llLS0pO2lmKHV0PkllJiYodXQ9SWUpLEllPT09MClyZXR1cm4gY1toKytdPTE8PDI0fDY0PDwxNnwwLGNbaCsrXT0xPDwyNHw2NDw8MTZ8MCxWLmJpdHM9MSwwO2ZvcihTZT0xO1NlPEllJiZPYVtTZV09PT0wO1NlKyspO2Zvcih1dDxTZSYmKHV0PVNlKSxJdD0xLEQ9MTtEPD15bDtEKyspaWYoSXQ8PD0xLEl0LT1PYVtEXSxJdDwwKXJldHVybi0xO2lmKEl0PjAmJih0PT09V2Z8fEllIT09MSkpcmV0dXJuLTE7Zm9yKFpjWzFdPTAsRD0xO0Q8eWw7RCsrKVpjW0QrMV09WmNbRF0rT2FbRF07Zm9yKF9lPTA7X2U8bztfZSsrKW5bcitfZV0hPT0wJiYoYltaY1tuW3IrX2VdXSsrXT1fZSk7aWYodD09PVdmPyhBbj1YYz1iLFF0PTE5KTp0PT09X3U/KEFuPVd2LGRyLT0yNTcsWGM9R3YsT3AtPTI1NyxRdD0yNTYpOihBbj1ZdixYYz1xdixRdD0tMSksdW49MCxfZT0wLEQ9U2UsWHQ9aCxkdD11dCxUdD0wLEVuPS0xLHZuPTE8PHV0LGFuPXZuLTEsdD09PV91JiZ2bj5qZnx8dD09PUdmJiZ2bj56ZilyZXR1cm4gMTtmb3IoOzspe1RwPUQtVHQsYltfZV08UXQ/KFFjPTAsZXU9YltfZV0pOmJbX2VdPlF0PyhRYz1YY1tPcCtiW19lXV0sZXU9QW5bZHIrYltfZV1dKTooUWM9MzIrNjQsZXU9MCksanQ9MTw8RC1UdCx5dD0xPDxkdCxTZT15dDtkbyB5dC09anQsY1tYdCsodW4+PlR0KSt5dF09VHA8PDI0fFFjPDwxNnxldXwwO3doaWxlKHl0IT09MCk7Zm9yKGp0PTE8PEQtMTt1biZqdDspanQ+Pj0xO2lmKGp0IT09MD8odW4mPWp0LTEsdW4rPWp0KTp1bj0wLF9lKyssLS1PYVtEXT09PTApe2lmKEQ9PT1JZSlicmVhaztEPW5bcitiW19lXV19aWYoRD51dCYmKHVuJmFuKSE9PUVuKXtmb3IoVHQ9PT0wJiYoVHQ9dXQpLFh0Kz1TZSxkdD1ELVR0LEl0PTE8PGR0O2R0K1R0PEllJiYoSXQtPU9hW2R0K1R0XSwhKEl0PD0wKSk7KWR0KyssSXQ8PD0xO2lmKHZuKz0xPDxkdCx0PT09X3UmJnZuPmpmfHx0PT09R2YmJnZuPnpmKXJldHVybiAxO0VuPXVuJmFuLGNbRW5dPXV0PDwyNHxkdDw8MTZ8WHQtaHwwfX1yZXR1cm4gdW4hPT0wJiYoY1tYdCt1bl09RC1UdDw8MjR8NjQ8PDE2fDApLFYuYml0cz11dCwwfSx6bz1CZSxidT16ZSxNYT1YZSxKdj16dixZbD1Ldixadj0wLFlmPTEscWY9MixLZj00LFh2PTUsU2M9NixLcz0wLFF2PTEsZW09MixsYT0tMixKZj0tMyxaZj0tNCx0bT0tNSxYZj04LFFmPTEsZWQ9Mix0ZD0zLG5kPTQscmQ9NSxpZD02LG9kPTcsYWQ9OCxzZD05LGxkPTEwLHdjPTExLG5zPTEyLEV1PTEzLGNkPTE0LHl1PTE1LHVkPTE2LGZkPTE3LGRkPTE4LGhkPTE5LENjPTIwLEFjPTIxLGdkPTIyLHBkPTIzLHZkPTI0LG1kPTI1LF9kPTI2LFN1PTI3LGJkPTI4LEVkPTI5LHlyPTMwLHlkPTMxLG5tPTMyLHJtPTg1MixpbT01OTIsb209MTUsYW09b207ZnVuY3Rpb24gU2QoZSl7cmV0dXJuKGU+Pj4yNCYyNTUpKyhlPj4+OCY2NTI4MCkrKChlJjY1MjgwKTw8OCkrKChlJjI1NSk8PDI0KX1mdW5jdGlvbiBzbSgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgem8uQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IHpvLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIHdkKGUpe3ZhciB0O3JldHVybiFlfHwhZS5zdGF0ZT9sYToodD1lLnN0YXRlLGUudG90YWxfaW49ZS50b3RhbF9vdXQ9dC50b3RhbD0wLGUubXNnPSIiLHQud3JhcCYmKGUuYWRsZXI9dC53cmFwJjEpLHQubW9kZT1RZix0Lmxhc3Q9MCx0LmhhdmVkaWN0PTAsdC5kbWF4PTMyNzY4LHQuaGVhZD1udWxsLHQuaG9sZD0wLHQuYml0cz0wLHQubGVuY29kZT10LmxlbmR5bj1uZXcgem8uQnVmMzIocm0pLHQuZGlzdGNvZGU9dC5kaXN0ZHluPW5ldyB6by5CdWYzMihpbSksdC5zYW5lPTEsdC5iYWNrPS0xLEtzKX1mdW5jdGlvbiBDZChlKXt2YXIgdDtyZXR1cm4hZXx8IWUuc3RhdGU/bGE6KHQ9ZS5zdGF0ZSx0LndzaXplPTAsdC53aGF2ZT0wLHQud25leHQ9MCx3ZChlKSl9ZnVuY3Rpb24gQWQoZSx0KXt2YXIgbixyO3JldHVybiFlfHwhZS5zdGF0ZXx8KHI9ZS5zdGF0ZSx0PDA/KG49MCx0PS10KToobj0odD4+NCkrMSx0PDQ4JiYodCY9MTUpKSx0JiYodDw4fHx0PjE1KSk/bGE6KHIud2luZG93IT09bnVsbCYmci53Yml0cyE9PXQmJihyLndpbmRvdz1udWxsKSxyLndyYXA9bixyLndiaXRzPXQsQ2QoZSkpfWZ1bmN0aW9uIE9kKGUsdCl7dmFyIG4scjtyZXR1cm4gZT8ocj1uZXcgc20sZS5zdGF0ZT1yLHIud2luZG93PW51bGwsbj1BZChlLHQpLG4hPT1LcyYmKGUuc3RhdGU9bnVsbCksbik6bGF9ZnVuY3Rpb24gbG0oZSl7cmV0dXJuIE9kKGUsYW0pfXZhciBUZD0hMCx3dSxDdTtmdW5jdGlvbiBjbShlKXtpZihUZCl7dmFyIHQ7Zm9yKHd1PW5ldyB6by5CdWYzMig1MTIpLEN1PW5ldyB6by5CdWYzMigzMiksdD0wO3Q8MTQ0OyllLmxlbnNbdCsrXT04O2Zvcig7dDwyNTY7KWUubGVuc1t0KytdPTk7Zm9yKDt0PDI4MDspZS5sZW5zW3QrK109Nztmb3IoO3Q8Mjg4OyllLmxlbnNbdCsrXT04O2ZvcihZbChZZixlLmxlbnMsMCwyODgsd3UsMCxlLndvcmsse2JpdHM6OX0pLHQ9MDt0PDMyOyllLmxlbnNbdCsrXT01O1lsKHFmLGUubGVucywwLDMyLEN1LDAsZS53b3JrLHtiaXRzOjV9KSxUZD0hMX1lLmxlbmNvZGU9d3UsZS5sZW5iaXRzPTksZS5kaXN0Y29kZT1DdSxlLmRpc3RiaXRzPTV9ZnVuY3Rpb24gUGQoZSx0LG4scil7dmFyIG8sYz1lLnN0YXRlO3JldHVybiBjLndpbmRvdz09PW51bGwmJihjLndzaXplPTE8PGMud2JpdHMsYy53bmV4dD0wLGMud2hhdmU9MCxjLndpbmRvdz1uZXcgem8uQnVmOChjLndzaXplKSkscj49Yy53c2l6ZT8oem8uYXJyYXlTZXQoYy53aW5kb3csdCxuLWMud3NpemUsYy53c2l6ZSwwKSxjLnduZXh0PTAsYy53aGF2ZT1jLndzaXplKToobz1jLndzaXplLWMud25leHQsbz5yJiYobz1yKSx6by5hcnJheVNldChjLndpbmRvdyx0LG4tcixvLGMud25leHQpLHItPW8scj8oem8uYXJyYXlTZXQoYy53aW5kb3csdCxuLXIsciwwKSxjLnduZXh0PXIsYy53aGF2ZT1jLndzaXplKTooYy53bmV4dCs9byxjLnduZXh0PT09Yy53c2l6ZSYmKGMud25leHQ9MCksYy53aGF2ZTxjLndzaXplJiYoYy53aGF2ZSs9bykpKSwwfWZ1bmN0aW9uIHVtKGUsdCl7dmFyIG4scixvLGMsaCxiLFYsVCxELF9lLFNlLEllLHV0LGR0LFR0PTAsSXQsdm4sdW4sanQseXQsRW4sYW4sWHQsQW49bmV3IHpvLkJ1ZjgoNCksZHIsUXQsT2E9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCFlfHwhZS5zdGF0ZXx8IWUub3V0cHV0fHwhZS5pbnB1dCYmZS5hdmFpbF9pbiE9PTApcmV0dXJuIGxhO249ZS5zdGF0ZSxuLm1vZGU9PT1ucyYmKG4ubW9kZT1FdSksaD1lLm5leHRfb3V0LG89ZS5vdXRwdXQsVj1lLmF2YWlsX291dCxjPWUubmV4dF9pbixyPWUuaW5wdXQsYj1lLmF2YWlsX2luLFQ9bi5ob2xkLEQ9bi5iaXRzLF9lPWIsU2U9VixYdD1LcztlOmZvcig7Oylzd2l0Y2gobi5tb2RlKXtjYXNlIFFmOmlmKG4ud3JhcD09PTApe24ubW9kZT1FdTticmVha31mb3IoO0Q8MTY7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1pZihuLndyYXAmMiYmVD09PTM1NjE1KXtuLmNoZWNrPTAsQW5bMF09VCYyNTUsQW5bMV09VD4+PjgmMjU1LG4uY2hlY2s9TWEobi5jaGVjayxBbiwyLDApLFQ9MCxEPTAsbi5tb2RlPWVkO2JyZWFrfWlmKG4uZmxhZ3M9MCxuLmhlYWQmJihuLmhlYWQuZG9uZT0hMSksIShuLndyYXAmMSl8fCgoKFQmMjU1KTw8OCkrKFQ+PjgpKSUzMSl7ZS5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLG4ubW9kZT15cjticmVha31pZigoVCYxNSkhPT1YZil7ZS5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9eXI7YnJlYWt9aWYoVD4+Pj00LEQtPTQsYW49KFQmMTUpKzgsbi53Yml0cz09PTApbi53Yml0cz1hbjtlbHNlIGlmKGFuPm4ud2JpdHMpe2UubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixuLm1vZGU9eXI7YnJlYWt9bi5kbWF4PTE8PGFuLGUuYWRsZXI9bi5jaGVjaz0xLG4ubW9kZT1UJjUxMj9sZDpucyxUPTAsRD0wO2JyZWFrO2Nhc2UgZWQ6Zm9yKDtEPDE2Oyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9aWYobi5mbGFncz1ULChuLmZsYWdzJjI1NSkhPT1YZil7ZS5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9eXI7YnJlYWt9aWYobi5mbGFncyY1NzM0NCl7ZS5tc2c9InVua25vd24gaGVhZGVyIGZsYWdzIHNldCIsbi5tb2RlPXlyO2JyZWFrfW4uaGVhZCYmKG4uaGVhZC50ZXh0PVQ+PjgmMSksbi5mbGFncyY1MTImJihBblswXT1UJjI1NSxBblsxXT1UPj4+OCYyNTUsbi5jaGVjaz1NYShuLmNoZWNrLEFuLDIsMCkpLFQ9MCxEPTAsbi5tb2RlPXRkO2Nhc2UgdGQ6Zm9yKDtEPDMyOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9bi5oZWFkJiYobi5oZWFkLnRpbWU9VCksbi5mbGFncyY1MTImJihBblswXT1UJjI1NSxBblsxXT1UPj4+OCYyNTUsQW5bMl09VD4+PjE2JjI1NSxBblszXT1UPj4+MjQmMjU1LG4uY2hlY2s9TWEobi5jaGVjayxBbiw0LDApKSxUPTAsRD0wLG4ubW9kZT1uZDtjYXNlIG5kOmZvcig7RDwxNjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fW4uaGVhZCYmKG4uaGVhZC54ZmxhZ3M9VCYyNTUsbi5oZWFkLm9zPVQ+PjgpLG4uZmxhZ3MmNTEyJiYoQW5bMF09VCYyNTUsQW5bMV09VD4+PjgmMjU1LG4uY2hlY2s9TWEobi5jaGVjayxBbiwyLDApKSxUPTAsRD0wLG4ubW9kZT1yZDtjYXNlIHJkOmlmKG4uZmxhZ3MmMTAyNCl7Zm9yKDtEPDE2Oyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9bi5sZW5ndGg9VCxuLmhlYWQmJihuLmhlYWQuZXh0cmFfbGVuPVQpLG4uZmxhZ3MmNTEyJiYoQW5bMF09VCYyNTUsQW5bMV09VD4+PjgmMjU1LG4uY2hlY2s9TWEobi5jaGVjayxBbiwyLDApKSxUPTAsRD0wfWVsc2Ugbi5oZWFkJiYobi5oZWFkLmV4dHJhPW51bGwpO24ubW9kZT1pZDtjYXNlIGlkOmlmKG4uZmxhZ3MmMTAyNCYmKEllPW4ubGVuZ3RoLEllPmImJihJZT1iKSxJZSYmKG4uaGVhZCYmKGFuPW4uaGVhZC5leHRyYV9sZW4tbi5sZW5ndGgsbi5oZWFkLmV4dHJhfHwobi5oZWFkLmV4dHJhPW5ldyBBcnJheShuLmhlYWQuZXh0cmFfbGVuKSksem8uYXJyYXlTZXQobi5oZWFkLmV4dHJhLHIsYyxJZSxhbikpLG4uZmxhZ3MmNTEyJiYobi5jaGVjaz1NYShuLmNoZWNrLHIsSWUsYykpLGItPUllLGMrPUllLG4ubGVuZ3RoLT1JZSksbi5sZW5ndGgpKWJyZWFrIGU7bi5sZW5ndGg9MCxuLm1vZGU9b2Q7Y2FzZSBvZDppZihuLmZsYWdzJjIwNDgpe2lmKGI9PT0wKWJyZWFrIGU7SWU9MDtkbyBhbj1yW2MrSWUrK10sbi5oZWFkJiZhbiYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShhbikpO3doaWxlKGFuJiZJZTxiKTtpZihuLmZsYWdzJjUxMiYmKG4uY2hlY2s9TWEobi5jaGVjayxyLEllLGMpKSxiLT1JZSxjKz1JZSxhbilicmVhayBlfWVsc2Ugbi5oZWFkJiYobi5oZWFkLm5hbWU9bnVsbCk7bi5sZW5ndGg9MCxuLm1vZGU9YWQ7Y2FzZSBhZDppZihuLmZsYWdzJjQwOTYpe2lmKGI9PT0wKWJyZWFrIGU7SWU9MDtkbyBhbj1yW2MrSWUrK10sbi5oZWFkJiZhbiYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShhbikpO3doaWxlKGFuJiZJZTxiKTtpZihuLmZsYWdzJjUxMiYmKG4uY2hlY2s9TWEobi5jaGVjayxyLEllLGMpKSxiLT1JZSxjKz1JZSxhbilicmVhayBlfWVsc2Ugbi5oZWFkJiYobi5oZWFkLmNvbW1lbnQ9bnVsbCk7bi5tb2RlPXNkO2Nhc2Ugc2Q6aWYobi5mbGFncyY1MTIpe2Zvcig7RDwxNjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fWlmKFQhPT0obi5jaGVjayY2NTUzNSkpe2UubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixuLm1vZGU9eXI7YnJlYWt9VD0wLEQ9MH1uLmhlYWQmJihuLmhlYWQuaGNyYz1uLmZsYWdzPj45JjEsbi5oZWFkLmRvbmU9ITApLGUuYWRsZXI9bi5jaGVjaz0wLG4ubW9kZT1uczticmVhaztjYXNlIGxkOmZvcig7RDwzMjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fWUuYWRsZXI9bi5jaGVjaz1TZChUKSxUPTAsRD0wLG4ubW9kZT13YztjYXNlIHdjOmlmKG4uaGF2ZWRpY3Q9PT0wKXJldHVybiBlLm5leHRfb3V0PWgsZS5hdmFpbF9vdXQ9VixlLm5leHRfaW49YyxlLmF2YWlsX2luPWIsbi5ob2xkPVQsbi5iaXRzPUQsZW07ZS5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPW5zO2Nhc2UgbnM6aWYodD09PVh2fHx0PT09U2MpYnJlYWsgZTtjYXNlIEV1OmlmKG4ubGFzdCl7VD4+Pj1EJjcsRC09RCY3LG4ubW9kZT1TdTticmVha31mb3IoO0Q8Mzspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fXN3aXRjaChuLmxhc3Q9VCYxLFQ+Pj49MSxELT0xLFQmMyl7Y2FzZSAwOm4ubW9kZT1jZDticmVhaztjYXNlIDE6aWYoY20obiksbi5tb2RlPUNjLHQ9PT1TYyl7VD4+Pj0yLEQtPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6bi5tb2RlPWZkO2JyZWFrO2Nhc2UgMzplLm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixuLm1vZGU9eXJ9VD4+Pj0yLEQtPTI7YnJlYWs7Y2FzZSBjZDpmb3IoVD4+Pj1EJjcsRC09RCY3O0Q8MzI7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1pZigoVCY2NTUzNSkhPT0oVD4+PjE2XjY1NTM1KSl7ZS5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLG4ubW9kZT15cjticmVha31pZihuLmxlbmd0aD1UJjY1NTM1LFQ9MCxEPTAsbi5tb2RlPXl1LHQ9PT1TYylicmVhayBlO2Nhc2UgeXU6bi5tb2RlPXVkO2Nhc2UgdWQ6aWYoSWU9bi5sZW5ndGgsSWUpe2lmKEllPmImJihJZT1iKSxJZT5WJiYoSWU9ViksSWU9PT0wKWJyZWFrIGU7em8uYXJyYXlTZXQobyxyLGMsSWUsaCksYi09SWUsYys9SWUsVi09SWUsaCs9SWUsbi5sZW5ndGgtPUllO2JyZWFrfW4ubW9kZT1uczticmVhaztjYXNlIGZkOmZvcig7RDwxNDspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fWlmKG4ubmxlbj0oVCYzMSkrMjU3LFQ+Pj49NSxELT01LG4ubmRpc3Q9KFQmMzEpKzEsVD4+Pj01LEQtPTUsbi5uY29kZT0oVCYxNSkrNCxUPj4+PTQsRC09NCxuLm5sZW4+Mjg2fHxuLm5kaXN0PjMwKXtlLm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLG4ubW9kZT15cjticmVha31uLmhhdmU9MCxuLm1vZGU9ZGQ7Y2FzZSBkZDpmb3IoO24uaGF2ZTxuLm5jb2RlOyl7Zm9yKDtEPDM7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1uLmxlbnNbT2Fbbi5oYXZlKytdXT1UJjcsVD4+Pj0zLEQtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tPYVtuLmhhdmUrK11dPTA7aWYobi5sZW5jb2RlPW4ubGVuZHluLG4ubGVuYml0cz03LGRyPXtiaXRzOm4ubGVuYml0c30sWHQ9WWwoWnYsbi5sZW5zLDAsMTksbi5sZW5jb2RlLDAsbi53b3JrLGRyKSxuLmxlbmJpdHM9ZHIuYml0cyxYdCl7ZS5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsbi5tb2RlPXlyO2JyZWFrfW4uaGF2ZT0wLG4ubW9kZT1oZDtjYXNlIGhkOmZvcig7bi5oYXZlPG4ubmxlbituLm5kaXN0Oyl7Zm9yKDtUdD1uLmxlbmNvZGVbVCYoMTw8bi5sZW5iaXRzKS0xXSxJdD1UdD4+PjI0LHZuPVR0Pj4+MTYmMjU1LHVuPVR0JjY1NTM1LCEoSXQ8PUQpOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9aWYodW48MTYpVD4+Pj1JdCxELT1JdCxuLmxlbnNbbi5oYXZlKytdPXVuO2Vsc2V7aWYodW49PT0xNil7Zm9yKFF0PUl0KzI7RDxRdDspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fWlmKFQ+Pj49SXQsRC09SXQsbi5oYXZlPT09MCl7ZS5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG4ubW9kZT15cjticmVha31hbj1uLmxlbnNbbi5oYXZlLTFdLEllPTMrKFQmMyksVD4+Pj0yLEQtPTJ9ZWxzZSBpZih1bj09PTE3KXtmb3IoUXQ9SXQrMztEPFF0Oyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9VD4+Pj1JdCxELT1JdCxhbj0wLEllPTMrKFQmNyksVD4+Pj0zLEQtPTN9ZWxzZXtmb3IoUXQ9SXQrNztEPFF0Oyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9VD4+Pj1JdCxELT1JdCxhbj0wLEllPTExKyhUJjEyNyksVD4+Pj03LEQtPTd9aWYobi5oYXZlK0llPm4ubmxlbituLm5kaXN0KXtlLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPXlyO2JyZWFrfWZvcig7SWUtLTspbi5sZW5zW24uaGF2ZSsrXT1hbn19aWYobi5tb2RlPT09eXIpYnJlYWs7aWYobi5sZW5zWzI1Nl09PT0wKXtlLm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixuLm1vZGU9eXI7YnJlYWt9aWYobi5sZW5iaXRzPTksZHI9e2JpdHM6bi5sZW5iaXRzfSxYdD1ZbChZZixuLmxlbnMsMCxuLm5sZW4sbi5sZW5jb2RlLDAsbi53b3JrLGRyKSxuLmxlbmJpdHM9ZHIuYml0cyxYdCl7ZS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsbi5tb2RlPXlyO2JyZWFrfWlmKG4uZGlzdGJpdHM9NixuLmRpc3Rjb2RlPW4uZGlzdGR5bixkcj17Yml0czpuLmRpc3RiaXRzfSxYdD1ZbChxZixuLmxlbnMsbi5ubGVuLG4ubmRpc3Qsbi5kaXN0Y29kZSwwLG4ud29yayxkciksbi5kaXN0Yml0cz1kci5iaXRzLFh0KXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixuLm1vZGU9eXI7YnJlYWt9aWYobi5tb2RlPUNjLHQ9PT1TYylicmVhayBlO2Nhc2UgQ2M6bi5tb2RlPUFjO2Nhc2UgQWM6aWYoYj49NiYmVj49MjU4KXtlLm5leHRfb3V0PWgsZS5hdmFpbF9vdXQ9VixlLm5leHRfaW49YyxlLmF2YWlsX2luPWIsbi5ob2xkPVQsbi5iaXRzPUQsSnYoZSxTZSksaD1lLm5leHRfb3V0LG89ZS5vdXRwdXQsVj1lLmF2YWlsX291dCxjPWUubmV4dF9pbixyPWUuaW5wdXQsYj1lLmF2YWlsX2luLFQ9bi5ob2xkLEQ9bi5iaXRzLG4ubW9kZT09PW5zJiYobi5iYWNrPS0xKTticmVha31mb3Iobi5iYWNrPTA7VHQ9bi5sZW5jb2RlW1QmKDE8PG4ubGVuYml0cyktMV0sSXQ9VHQ+Pj4yNCx2bj1UdD4+PjE2JjI1NSx1bj1UdCY2NTUzNSwhKEl0PD1EKTspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fWlmKHZuJiYodm4mMjQwKT09PTApe2ZvcihqdD1JdCx5dD12bixFbj11bjtUdD1uLmxlbmNvZGVbRW4rKChUJigxPDxqdCt5dCktMSk+Pmp0KV0sSXQ9VHQ+Pj4yNCx2bj1UdD4+PjE2JjI1NSx1bj1UdCY2NTUzNSwhKGp0K0l0PD1EKTspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFQrPXJbYysrXTw8RCxEKz04fVQ+Pj49anQsRC09anQsbi5iYWNrKz1qdH1pZihUPj4+PUl0LEQtPUl0LG4uYmFjays9SXQsbi5sZW5ndGg9dW4sdm49PT0wKXtuLm1vZGU9X2Q7YnJlYWt9aWYodm4mMzIpe24uYmFjaz0tMSxuLm1vZGU9bnM7YnJlYWt9aWYodm4mNjQpe2UubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLG4ubW9kZT15cjticmVha31uLmV4dHJhPXZuJjE1LG4ubW9kZT1nZDtjYXNlIGdkOmlmKG4uZXh0cmEpe2ZvcihRdD1uLmV4dHJhO0Q8UXQ7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1uLmxlbmd0aCs9VCYoMTw8bi5leHRyYSktMSxUPj4+PW4uZXh0cmEsRC09bi5leHRyYSxuLmJhY2srPW4uZXh0cmF9bi53YXM9bi5sZW5ndGgsbi5tb2RlPXBkO2Nhc2UgcGQ6Zm9yKDtUdD1uLmRpc3Rjb2RlW1QmKDE8PG4uZGlzdGJpdHMpLTFdLEl0PVR0Pj4+MjQsdm49VHQ+Pj4xNiYyNTUsdW49VHQmNjU1MzUsIShJdDw9RCk7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1pZigodm4mMjQwKT09PTApe2ZvcihqdD1JdCx5dD12bixFbj11bjtUdD1uLmRpc3Rjb2RlW0VuKygoVCYoMTw8anQreXQpLTEpPj5qdCldLEl0PVR0Pj4+MjQsdm49VHQ+Pj4xNiYyNTUsdW49VHQmNjU1MzUsIShqdCtJdDw9RCk7KXtpZihiPT09MClicmVhayBlO2ItLSxUKz1yW2MrK108PEQsRCs9OH1UPj4+PWp0LEQtPWp0LG4uYmFjays9anR9aWYoVD4+Pj1JdCxELT1JdCxuLmJhY2srPUl0LHZuJjY0KXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixuLm1vZGU9eXI7YnJlYWt9bi5vZmZzZXQ9dW4sbi5leHRyYT12biYxNSxuLm1vZGU9dmQ7Y2FzZSB2ZDppZihuLmV4dHJhKXtmb3IoUXQ9bi5leHRyYTtEPFF0Oyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9bi5vZmZzZXQrPVQmKDE8PG4uZXh0cmEpLTEsVD4+Pj1uLmV4dHJhLEQtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfWlmKG4ub2Zmc2V0Pm4uZG1heCl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixuLm1vZGU9eXI7YnJlYWt9bi5tb2RlPW1kO2Nhc2UgbWQ6aWYoVj09PTApYnJlYWsgZTtpZihJZT1TZS1WLG4ub2Zmc2V0PkllKXtpZihJZT1uLm9mZnNldC1JZSxJZT5uLndoYXZlJiZuLnNhbmUpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPXlyO2JyZWFrfUllPm4ud25leHQ/KEllLT1uLnduZXh0LHV0PW4ud3NpemUtSWUpOnV0PW4ud25leHQtSWUsSWU+bi5sZW5ndGgmJihJZT1uLmxlbmd0aCksZHQ9bi53aW5kb3d9ZWxzZSBkdD1vLHV0PWgtbi5vZmZzZXQsSWU9bi5sZW5ndGg7SWU+ViYmKEllPVYpLFYtPUllLG4ubGVuZ3RoLT1JZTtkbyBvW2grK109ZHRbdXQrK107d2hpbGUoLS1JZSk7bi5sZW5ndGg9PT0wJiYobi5tb2RlPUFjKTticmVhaztjYXNlIF9kOmlmKFY9PT0wKWJyZWFrIGU7b1toKytdPW4ubGVuZ3RoLFYtLSxuLm1vZGU9QWM7YnJlYWs7Y2FzZSBTdTppZihuLndyYXApe2Zvcig7RDwzMjspe2lmKGI9PT0wKWJyZWFrIGU7Yi0tLFR8PXJbYysrXTw8RCxEKz04fWlmKFNlLT1WLGUudG90YWxfb3V0Kz1TZSxuLnRvdGFsKz1TZSxTZSYmKGUuYWRsZXI9bi5jaGVjaz1uLmZsYWdzP01hKG4uY2hlY2ssbyxTZSxoLVNlKTpidShuLmNoZWNrLG8sU2UsaC1TZSkpLFNlPVYsKG4uZmxhZ3M/VDpTZChUKSkhPT1uLmNoZWNrKXtlLm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLG4ubW9kZT15cjticmVha31UPTAsRD0wfW4ubW9kZT1iZDtjYXNlIGJkOmlmKG4ud3JhcCYmbi5mbGFncyl7Zm9yKDtEPDMyOyl7aWYoYj09PTApYnJlYWsgZTtiLS0sVCs9cltjKytdPDxELEQrPTh9aWYoVCE9PShuLnRvdGFsJjQyOTQ5NjcyOTUpKXtlLm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsbi5tb2RlPXlyO2JyZWFrfVQ9MCxEPTB9bi5tb2RlPUVkO2Nhc2UgRWQ6WHQ9UXY7YnJlYWsgZTtjYXNlIHlyOlh0PUpmO2JyZWFrIGU7Y2FzZSB5ZDpyZXR1cm4gWmY7Y2FzZSBubTpkZWZhdWx0OnJldHVybiBsYX1yZXR1cm4gZS5uZXh0X291dD1oLGUuYXZhaWxfb3V0PVYsZS5uZXh0X2luPWMsZS5hdmFpbF9pbj1iLG4uaG9sZD1ULG4uYml0cz1ELChuLndzaXplfHxTZSE9PWUuYXZhaWxfb3V0JiZuLm1vZGU8eXImJihuLm1vZGU8U3V8fHQhPT1LZikpJiZQZChlLGUub3V0cHV0LGUubmV4dF9vdXQsU2UtZS5hdmFpbF9vdXQpLF9lLT1lLmF2YWlsX2luLFNlLT1lLmF2YWlsX291dCxlLnRvdGFsX2luKz1fZSxlLnRvdGFsX291dCs9U2Usbi50b3RhbCs9U2Usbi53cmFwJiZTZSYmKGUuYWRsZXI9bi5jaGVjaz1uLmZsYWdzP01hKG4uY2hlY2ssbyxTZSxlLm5leHRfb3V0LVNlKTpidShuLmNoZWNrLG8sU2UsZS5uZXh0X291dC1TZSkpLGUuZGF0YV90eXBlPW4uYml0cysobi5sYXN0PzY0OjApKyhuLm1vZGU9PT1ucz8xMjg6MCkrKG4ubW9kZT09PUNjfHxuLm1vZGU9PT15dT8yNTY6MCksKF9lPT09MCYmU2U9PT0wfHx0PT09S2YpJiZYdD09PUtzJiYoWHQ9dG0pLFh0fWZ1bmN0aW9uIGZtKGUpe2lmKCFlfHwhZS5zdGF0ZSlyZXR1cm4gbGE7dmFyIHQ9ZS5zdGF0ZTtyZXR1cm4gdC53aW5kb3cmJih0LndpbmRvdz1udWxsKSxlLnN0YXRlPW51bGwsS3N9ZnVuY3Rpb24gZG0oZSx0KXt2YXIgbjtyZXR1cm4hZXx8IWUuc3RhdGV8fChuPWUuc3RhdGUsKG4ud3JhcCYyKT09PTApP2xhOihuLmhlYWQ9dCx0LmRvbmU9ITEsS3MpfWZ1bmN0aW9uIGhtKGUsdCl7dmFyIG49dC5sZW5ndGgscixvLGM7cmV0dXJuIWV8fCFlLnN0YXRlfHwocj1lLnN0YXRlLHIud3JhcCE9PTAmJnIubW9kZSE9PXdjKT9sYTpyLm1vZGU9PT13YyYmKG89MSxvPWJ1KG8sdCxuLDApLG8hPT1yLmNoZWNrKT9KZjooYz1QZChlLHQsbixuKSxjPyhyLm1vZGU9eWQsWmYpOihyLmhhdmVkaWN0PTEsS3MpKX1FYS5pbmZsYXRlUmVzZXQ9Q2QsRWEuaW5mbGF0ZVJlc2V0Mj1BZCxFYS5pbmZsYXRlUmVzZXRLZWVwPXdkLEVhLmluZmxhdGVJbml0PWxtLEVhLmluZmxhdGVJbml0Mj1PZCxFYS5pbmZsYXRlPXVtLEVhLmluZmxhdGVFbmQ9Zm0sRWEuaW5mbGF0ZUdldEhlYWRlcj1kbSxFYS5pbmZsYXRlU2V0RGljdGlvbmFyeT1obSxFYS5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSI7dmFyIElkPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9O2Z1bmN0aW9uIGdtKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9dmFyIHBtPWdtLFNsPUVhLHFsPUJlLE9jPXRyLFlyPUlkLEF1PXd0LHZtPWFhLG1tPXBtLE5kPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gSnMoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgSnMpKXJldHVybiBuZXcgSnMoZSk7dGhpcy5vcHRpb25zPXFsLmFzc2lnbih7Y2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MCx0bzoiIn0sZXx8e30pO3ZhciB0PXRoaXMub3B0aW9uczt0LnJhdyYmdC53aW5kb3dCaXRzPj0wJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHM9LXQud2luZG93Qml0cyx0LndpbmRvd0JpdHM9PT0wJiYodC53aW5kb3dCaXRzPS0xNSkpLHQud2luZG93Qml0cz49MCYmdC53aW5kb3dCaXRzPDE2JiYhKGUmJmUud2luZG93Qml0cykmJih0LndpbmRvd0JpdHMrPTMyKSx0LndpbmRvd0JpdHM+MTUmJnQud2luZG93Qml0czw0OCYmKHQud2luZG93Qml0cyYxNSk9PT0wJiYodC53aW5kb3dCaXRzfD0xNSksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgdm0sdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBuPVNsLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sdC53aW5kb3dCaXRzKTtpZihuIT09WXIuWl9PSyl0aHJvdyBuZXcgRXJyb3IoQXVbbl0pO2lmKHRoaXMuaGVhZGVyPW5ldyBtbSxTbC5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSx0aGlzLmhlYWRlciksdC5kaWN0aW9uYXJ5JiYodHlwZW9mIHQuZGljdGlvbmFyeT09InN0cmluZyI/dC5kaWN0aW9uYXJ5PU9jLnN0cmluZzJidWYodC5kaWN0aW9uYXJ5KTpOZC5jYWxsKHQuZGljdGlvbmFyeSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iJiYodC5kaWN0aW9uYXJ5PW5ldyBVaW50OEFycmF5KHQuZGljdGlvbmFyeSkpLHQucmF3JiYobj1TbC5pbmZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sdC5kaWN0aW9uYXJ5KSxuIT09WXIuWl9PSykpKXRocm93IG5ldyBFcnJvcihBdVtuXSl9SnMucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnN0cm0scj10aGlzLm9wdGlvbnMuY2h1bmtTaXplLG89dGhpcy5vcHRpb25zLmRpY3Rpb25hcnksYyxoLGIsVixULEQ9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtoPXQ9PT1+fnQ/dDp0PT09ITA/WXIuWl9GSU5JU0g6WXIuWl9OT19GTFVTSCx0eXBlb2YgZT09InN0cmluZyI/bi5pbnB1dD1PYy5iaW5zdHJpbmcyYnVmKGUpOk5kLmNhbGwoZSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP24uaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoZSk6bi5pbnB1dD1lLG4ubmV4dF9pbj0wLG4uYXZhaWxfaW49bi5pbnB1dC5sZW5ndGg7ZG97aWYobi5hdmFpbF9vdXQ9PT0wJiYobi5vdXRwdXQ9bmV3IHFsLkJ1Zjgociksbi5uZXh0X291dD0wLG4uYXZhaWxfb3V0PXIpLGM9U2wuaW5mbGF0ZShuLFlyLlpfTk9fRkxVU0gpLGM9PT1Zci5aX05FRURfRElDVCYmbyYmKGM9U2wuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLG8pKSxjPT09WXIuWl9CVUZfRVJST1ImJkQ9PT0hMCYmKGM9WXIuWl9PSyxEPSExKSxjIT09WXIuWl9TVFJFQU1fRU5EJiZjIT09WXIuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChjKSx0aGlzLmVuZGVkPSEwLCExO24ubmV4dF9vdXQmJihuLmF2YWlsX291dD09PTB8fGM9PT1Zci5aX1NUUkVBTV9FTkR8fG4uYXZhaWxfaW49PT0wJiYoaD09PVlyLlpfRklOSVNIfHxoPT09WXIuWl9TWU5DX0ZMVVNIKSkmJih0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj8oYj1PYy51dGY4Ym9yZGVyKG4ub3V0cHV0LG4ubmV4dF9vdXQpLFY9bi5uZXh0X291dC1iLFQ9T2MuYnVmMnN0cmluZyhuLm91dHB1dCxiKSxuLm5leHRfb3V0PVYsbi5hdmFpbF9vdXQ9ci1WLFYmJnFsLmFycmF5U2V0KG4ub3V0cHV0LG4ub3V0cHV0LGIsViwwKSx0aGlzLm9uRGF0YShUKSk6dGhpcy5vbkRhdGEocWwuc2hyaW5rQnVmKG4ub3V0cHV0LG4ubmV4dF9vdXQpKSksbi5hdmFpbF9pbj09PTAmJm4uYXZhaWxfb3V0PT09MCYmKEQ9ITApfXdoaWxlKChuLmF2YWlsX2luPjB8fG4uYXZhaWxfb3V0PT09MCkmJmMhPT1Zci5aX1NUUkVBTV9FTkQpO3JldHVybiBjPT09WXIuWl9TVFJFQU1fRU5EJiYoaD1Zci5aX0ZJTklTSCksaD09PVlyLlpfRklOSVNIPyhjPVNsLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKGMpLHRoaXMuZW5kZWQ9ITAsYz09PVlyLlpfT0spOihoPT09WXIuWl9TWU5DX0ZMVVNIJiYodGhpcy5vbkVuZChZci5aX09LKSxuLmF2YWlsX291dD0wKSwhMCl9LEpzLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oZSl7dGhpcy5jaHVua3MucHVzaChlKX0sSnMucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGUpe2U9PT1Zci5aX09LJiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbigiIik6dGhpcy5yZXN1bHQ9cWwuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ307ZnVuY3Rpb24gT3UoZSx0KXt2YXIgbj1uZXcgSnModCk7aWYobi5wdXNoKGUsITApLG4uZXJyKXRocm93IG4ubXNnfHxBdVtuLmVycl07cmV0dXJuIG4ucmVzdWx0fWZ1bmN0aW9uIF9tKGUsdCl7cmV0dXJuIHQ9dHx8e30sdC5yYXc9ITAsT3UoZSx0KX1HbC5JbmZsYXRlPUpzLEdsLmluZmxhdGU9T3UsR2wuaW5mbGF0ZVJhdz1fbSxHbC51bmd6aXA9T3U7dmFyIGJtPUJlLmFzc2lnbixFbT1QdCx5bT1HbCxTbT1JZCxrZD17fTtibShrZCxFbSx5bSxTbSk7dmFyIFJkPWtkO2xldCB3bT0idXB4MnB4IixDbT1be25hbWU6InVweCIsdHlwZTpbTnVtYmVyLFN0cmluZ10scmVxdWlyZWQ6ITB9XSxBbT0xZS00LE9tPTc1MCx4ZD0hMSxUdT0wLEJkPTAsTGQ9OTYwLE1kPTM3NSxEZD03NTA7ZnVuY3Rpb24gVG0oKXtsZXR7cGxhdGZvcm06ZSxwaXhlbFJhdGlvOnQsd2luZG93V2lkdGg6bn09JHIoKTtUdT1uLEJkPXQseGQ9ZT09PSJpb3MifWZ1bmN0aW9uIFB1KGUsdCl7bGV0IG49TnVtYmVyKGUpO3JldHVybiBpc05hTihuKT90Om59ZnVuY3Rpb24gUG0oKXtsZXQgZT1CLmdsb2JhbFN0eWxlfHx7fTtMZD1QdShlLnJweENhbGNNYXhEZXZpY2VXaWR0aCw5NjApLE1kPVB1KGUucnB4Q2FsY0Jhc2VEZXZpY2VXaWR0aCwzNzUpLERkPVB1KGUucnB4Q2FsY0Jhc2VEZXZpY2VXaWR0aCw3NTApfWxldCBJbT1NdCh3bSwoZSx0KT0+e2lmKFR1PT09MCYmKFRtKCksUG0oKSksZT1OdW1iZXIoZSksZT09PTApcmV0dXJuIDA7bGV0IG49dHx8VHU7bj1lPT09RGR8fG48PUxkP246TWQ7bGV0IHI9ZS9PbSpuO3JldHVybiByPDAmJihyPS1yKSxyPU1hdGguZmxvb3IocitBbSkscj09PTAmJihCZD09PTF8fCF4ZD9yPTE6cj0uNSksZTwwPy1yOnJ9LENtKSxObT0iYWRkSW50ZXJjZXB0b3IiLGttPSJyZW1vdmVJbnRlcmNlcHRvciIsRmQ9W3tuYW1lOiJtZXRob2QiLHR5cGU6W1N0cmluZyxPYmplY3RdLHJlcXVpcmVkOiEwfV0sUm09RmQ7ZnVuY3Rpb24gVmQoZSx0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49PntXLmlzRnVuY3Rpb24odFtuXSkmJihlW25dPXhtKGVbbl0sdFtuXSkpfSl9ZnVuY3Rpb24gJGQoZSx0KXshZXx8IXR8fE9iamVjdC5rZXlzKHQpLmZvckVhY2gobj0+e2xldCByPWVbbl0sbz10W25dO1cuaXNBcnJheShyKSYmVy5pc0Z1bmN0aW9uKG8pJiZXLnJlbW92ZShyLG8pfSl9ZnVuY3Rpb24geG0oZSx0KXtsZXQgbj10P2U/ZS5jb25jYXQodCk6Vy5pc0FycmF5KHQpP3Q6W3RdOmU7cmV0dXJuIG4mJkJtKG4pfWZ1bmN0aW9uIEJtKGUpe2xldCB0PVtdO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQuaW5kZXhPZihlW25dKT09PS0xJiZ0LnB1c2goZVtuXSk7cmV0dXJuIHR9bGV0IExtPU10KE5tLChlLHQpPT57Vy5pc1N0cmluZyhlKSYmVy5pc1BsYWluT2JqZWN0KHQpP1ZkKGhyW2VdfHwoaHJbZV09e30pLHQpOlcuaXNQbGFpbk9iamVjdChlKSYmVmQoTm4sZSl9LEZkKSxNbT1NdChrbSwoZSx0KT0+e1cuaXNTdHJpbmcoZSk/Vy5pc1BsYWluT2JqZWN0KHQpPyRkKGhyW2VdLHQpOmRlbGV0ZSBocltlXTpXLmlzUGxhaW5PYmplY3QoZSkmJiRkKE5uLGUpfSxSbSksRG09e30sRm09IiRvbiIsVWQ9W3tuYW1lOiJldmVudCIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHtuYW1lOiJjYWxsYmFjayIsdHlwZTpGdW5jdGlvbixyZXF1aXJlZDohMH1dLFZtPSIkb25jZSIsJG09VWQsVW09IiRvZmYiLEhtPVt7bmFtZToiZXZlbnQiLHR5cGU6W1N0cmluZyxBcnJheV19LHtuYW1lOiJjYWxsYmFjayIsdHlwZTpGdW5jdGlvbn1dLGptPSIkZW1pdCIsem09W3tuYW1lOiJldmVudCIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSxacz1uZXcgWi5FbWl0dGVyLFdtPU10KEZtLChlLHQpPT4oWnMub24oZSx0KSwoKT0+WnMub2ZmKGUsdCkpLFVkKSxHbT1NdChWbSwoZSx0KT0+KFpzLm9uY2UoZSx0KSwoKT0+WnMub2ZmKGUsdCkpLCRtKSxZbT1NdChVbSwoZSx0KT0+e2lmKCFlKXtacy5lPXt9O3JldHVybn1XLmlzQXJyYXkoZSl8fChlPVtlXSksZS5mb3JFYWNoKG49PlpzLm9mZihuLHQpKX0sSG0pLHFtPU10KGptLChlLC4uLnQpPT57WnMuZW1pdChlLC4uLnQpfSx6bSksSGQ9W3tuYW1lOiJpZCIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSxLbT0iY3JlYXRlVmlkZW9Db250ZXh0IixKbT0iY3JlYXRlTWFwQ29udGV4dCIsWm09SGQsWG09ImNyZWF0ZUNhbnZhc0NvbnRleHQiLFFtPVt7bmFtZToiY2FudmFzSWQiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx7bmFtZToiY29tcG9uZW50SW5zdGFuY2UiLHR5cGU6T2JqZWN0fV0sZV89ImNyZWF0ZUlubmVyQXVkaW9Db250ZXh0Iix0Xz0iY3JlYXRlTGl2ZVB1c2hlckNvbnRleHQiLG5fPUhkLmNvbmNhdCh7bmFtZToiY29tcG9uZW50SW5zdGFuY2UiLHR5cGU6T2JqZWN0fSkscl89Wy41LC44LDEsMS4yNSwxLjUsMl07Y2xhc3MgSXV7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bn1wbGF5KCl7bm4odGhpcy5pZCx0aGlzLnBhZ2VJZCwicGxheSIpfXBhdXNlKCl7bm4odGhpcy5pZCx0aGlzLnBhZ2VJZCwicGF1c2UiKX1zdG9wKCl7bm4odGhpcy5pZCx0aGlzLnBhZ2VJZCwic3RvcCIpfXNlZWsodCl7bm4odGhpcy5pZCx0aGlzLnBhZ2VJZCwic2VlayIse3Bvc2l0aW9uOnR9KX1zZW5kRGFubXUodCl7bm4odGhpcy5pZCx0aGlzLnBhZ2VJZCwic2VuZERhbm11Iix0KX1wbGF5YmFja1JhdGUodCl7fnJfLmluZGV4T2YodCl8fCh0PTEpLG5uKHRoaXMuaWQsdGhpcy5wYWdlSWQsInBsYXliYWNrUmF0ZSIse3JhdGU6dH0pfXJlcXVlc3RGdWxsU2NyZWVuKHQ9e30pe25uKHRoaXMuaWQsdGhpcy5wYWdlSWQsInJlcXVlc3RGdWxsU2NyZWVuIix0KX1leGl0RnVsbFNjcmVlbigpe25uKHRoaXMuaWQsdGhpcy5wYWdlSWQsImV4aXRGdWxsU2NyZWVuIil9c2hvd1N0YXR1c0Jhcigpe25uKHRoaXMuaWQsdGhpcy5wYWdlSWQsInNob3dTdGF0dXNCYXIiKX1oaWRlU3RhdHVzQmFyKCl7bm4odGhpcy5pZCx0aGlzLnBhZ2VJZCwiaGlkZVN0YXR1c0JhciIpfX1sZXQgaV89TXQoS20sKGUsdCk9PnQ/bmV3IEl1KGUsZXIodCkpOm5ldyBJdShlLGVyKF9yKCkpKSksb189KGUsdCk9PntsZXQgbj10LmVyck1zZ3x8IiI7bmV3IFJlZ0V4cCgiXFw6XFxzKmZhaWwiKS50ZXN0KG4pP2UuZmFpbCYmZS5mYWlsKHQpOmUuc3VjY2VzcyYmZS5zdWNjZXNzKHQpLGUuY29tcGxldGUmJmUuY29tcGxldGUodCl9LE9pPShlLHQsbixyKT0+e1ZuKGUsdCxuLHIsbz0+e3ImJm9fKHIsbyl9KX07Y2xhc3MgTnV7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bn1nZXRDZW50ZXJMb2NhdGlvbih0KXtPaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJnZXRDZW50ZXJMb2NhdGlvbiIsdCl9bW92ZVRvTG9jYXRpb24odCl7T2kodGhpcy5pZCx0aGlzLnBhZ2VJZCwibW92ZVRvTG9jYXRpb24iLHQpfWdldFNjYWxlKHQpe09pKHRoaXMuaWQsdGhpcy5wYWdlSWQsImdldFNjYWxlIix0KX1nZXRSZWdpb24odCl7T2kodGhpcy5pZCx0aGlzLnBhZ2VJZCwiZ2V0UmVnaW9uIix0KX1pbmNsdWRlUG9pbnRzKHQpe09pKHRoaXMuaWQsdGhpcy5wYWdlSWQsImluY2x1ZGVQb2ludHMiLHQpfXRyYW5zbGF0ZU1hcmtlcih0KXtPaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJ0cmFuc2xhdGVNYXJrZXIiLHQpfSRnZXRBcHBNYXAoKXtyZXR1cm4gcy5tYXBzLmdldE1hcEJ5SWQodGhpcy5wYWdlSWQrIi1tYXAtIit0aGlzLmlkKX1hZGRDdXN0b21MYXllcih0KXtPaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJhZGRDdXN0b21MYXllciIsdCl9cmVtb3ZlQ3VzdG9tTGF5ZXIodCl7T2kodGhpcy5pZCx0aGlzLnBhZ2VJZCwicmVtb3ZlQ3VzdG9tTGF5ZXIiLHQpfWFkZEdyb3VuZE92ZXJsYXkodCl7T2kodGhpcy5pZCx0aGlzLnBhZ2VJZCwiYWRkR3JvdW5kT3ZlcmxheSIsdCl9cmVtb3ZlR3JvdW5kT3ZlcmxheSh0KXtPaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJyZW1vdmVHcm91bmRPdmVybGF5Iix0KX11cGRhdGVHcm91bmRPdmVybGF5KHQpe09pKHRoaXMuaWQsdGhpcy5wYWdlSWQsInVwZGF0ZUdyb3VuZE92ZXJsYXkiLHQpfWluaXRNYXJrZXJDbHVzdGVyKHQpe09pKHRoaXMuaWQsdGhpcy5wYWdlSWQsImluaXRNYXJrZXJDbHVzdGVyIix0KX1hZGRNYXJrZXJzKHQpe09pKHRoaXMuaWQsdGhpcy5wYWdlSWQsImFkZE1hcmtlcnMiLHQpfXJlbW92ZU1hcmtlcnModCl7T2kodGhpcy5pZCx0aGlzLnBhZ2VJZCwicmVtb3ZlTWFya2VycyIsdCl9bW92ZUFsb25nKHQpe09pKHRoaXMuaWQsdGhpcy5wYWdlSWQsIm1vdmVBbG9uZyIsdCl9c2V0TG9jTWFya2VySWNvbih0KXtPaSh0aGlzLmlkLHRoaXMucGFnZUlkLCJzZXRMb2NNYXJrZXJJY29uIix0KX1vcGVuTWFwQXBwKHQpe09pKHRoaXMuaWQsdGhpcy5wYWdlSWQsIm9wZW5NYXBBcHAiLHQpfW9uKHQpe09pKHRoaXMuaWQsdGhpcy5wYWdlSWQsIm9uIix0KX19bGV0IGFfPU10KEptLChlLHQpPT50P25ldyBOdShlLGVyKHQpKTpuZXcgTnUoZSxlcihfcigpKSksWm0pO2Z1bmN0aW9uIE9zKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7bj9yW2VdPU1hdGgucm91bmQobik6dHlwZW9mIHQhPSJ1bmRlZmluZWQiJiYocltlXT10KX19bGV0IGpkPU9zKCJ3aWR0aCIpLHpkPU9zKCJoZWlnaHQiKSxzXz0iY2FudmFzR2V0SW1hZ2VEYXRhIixXZD17Zm9ybWF0QXJnczp7eDpPcygieCIpLHk6T3MoInkiKSx3aWR0aDpqZCxoZWlnaHQ6emR9fSxHZD17Y2FudmFzSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx4Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH0seTp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITB9LHdpZHRoOnt0eXBlOk51bWJlcixyZXF1aXJlZDohMH0saGVpZ2h0Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH19LGxfPSJjYW52YXNQdXRJbWFnZURhdGEiLGNfPVdkLHVfPVcuZXh0ZW5kKHtkYXRhOnt0eXBlOlVpbnQ4Q2xhbXBlZEFycmF5LHJlcXVpcmVkOiEwfX0sR2Qse2hlaWdodDp7dHlwZTpOdW1iZXJ9fSksWWQ9e1BORzoicG5nIixKUEc6ImpwZyIsSlBFRzoianBnIn0sZl89ImNhbnZhc1RvVGVtcEZpbGVQYXRoIixkXz17Zm9ybWF0QXJnczp7eDpPcygieCIsMCkseTpPcygieSIsMCksd2lkdGg6amQsaGVpZ2h0OnpkLGRlc3RXaWR0aDpPcygiZGVzdFdpZHRoIiksZGVzdEhlaWdodDpPcygiZGVzdEhlaWdodCIpLGZpbGVUeXBlKGUsdCl7ZT0oZXx8IiIpLnRvVXBwZXJDYXNlKCk7bGV0IG49WWRbZV07bnx8KG49WWQuUE5HKSx0LmZpbGVUeXBlPW59LHF1YWxpdHkoZSx0KXt0LnF1YWxpdHk9ZSYmZT4wJiZlPDE/ZToxfX19LGhfPXt4Ok51bWJlcix5Ok51bWJlcix3aWR0aDpOdW1iZXIsaGVpZ2h0Ok51bWJlcixkZXN0V2lkdGg6TnVtYmVyLGRlc3RIZWlnaHQ6TnVtYmVyLGNhbnZhc0lkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sZmlsZVR5cGU6U3RyaW5nLHF1YWxpdHk6TnVtYmVyfTtmdW5jdGlvbiBUYyhlLHQsbixyLG8pe3N0Lmludm9rZVZpZXdNZXRob2QoYGNhbnZhcy4ke2V9YCx7dHlwZTpuLGRhdGE6cn0sdCxjPT57byYmbyhjKX0pfXZhciBnXz1bInNjYWxlIiwicm90YXRlIiwidHJhbnNsYXRlIiwic2V0VHJhbnNmb3JtIiwidHJhbnNmb3JtIl0scF89WyJkcmF3SW1hZ2UiLCJmaWxsVGV4dCIsImZpbGwiLCJzdHJva2UiLCJmaWxsUmVjdCIsInN0cm9rZVJlY3QiLCJjbGVhclJlY3QiLCJzdHJva2VUZXh0Il0sdl89WyJzZXRGaWxsU3R5bGUiLCJzZXRUZXh0QWxpZ24iLCJzZXRTdHJva2VTdHlsZSIsInNldEdsb2JhbEFscGhhIiwic2V0U2hhZG93Iiwic2V0Rm9udFNpemUiLCJzZXRMaW5lQ2FwIiwic2V0TGluZUpvaW4iLCJzZXRMaW5lV2lkdGgiLCJzZXRNaXRlckxpbWl0Iiwic2V0VGV4dEJhc2VsaW5lIiwic2V0TGluZURhc2giXTtmdW5jdGlvbiBtXyhlLHQpe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7cmV0dXJuIHIuZm9udD10LHIubWVhc3VyZVRleHQoZSkud2lkdGh8fDB9bGV0IHFkPXthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzAwZmZmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwMDBmZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW46IiMwMGZmZmYiLGRhcmtibHVlOiIjMDAwMDhiIixkYXJrY3lhbjoiIzAwOGI4YiIsZGFya2dvbGRlbnJvZDoiI2I4ODYwYiIsZGFya2dyYXk6IiNhOWE5YTkiLGRhcmtncmV5OiIjYTlhOWE5IixkYXJrZ3JlZW46IiMwMDY0MDAiLGRhcmtraGFraToiI2JkYjc2YiIsZGFya21hZ2VudGE6IiM4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiIjNTU2YjJmIixkYXJrb3JhbmdlOiIjZmY4YzAwIixkYXJrb3JjaGlkOiIjOTkzMmNjIixkYXJrcmVkOiIjOGIwMDAwIixkYXJrc2FsbW9uOiIjZTk5NjdhIixkYXJrc2VhZ3JlZW46IiM4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IiM0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IiMyZjRmNGYiLGRhcmtzbGF0ZWdyZXk6IiMyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IiMwMGNlZDEiLGRhcmt2aW9sZXQ6IiM5NDAwZDMiLGRlZXBwaW5rOiIjZmYxNDkzIixkZWVwc2t5Ymx1ZToiIzAwYmZmZiIsZGltZ3JheToiIzY5Njk2OSIsZGltZ3JleToiIzY5Njk2OSIsZG9kZ2VyYmx1ZToiIzFlOTBmZiIsZmlyZWJyaWNrOiIjYjIyMjIyIixmbG9yYWx3aGl0ZToiI2ZmZmFmMCIsZm9yZXN0Z3JlZW46IiMyMjhiMjIiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdhaW5zYm9ybzoiI2RjZGNkYyIsZ2hvc3R3aGl0ZToiI2Y4ZjhmZiIsZ29sZDoiI2ZmZDcwMCIsZ29sZGVucm9kOiIjZGFhNTIwIixncmF5OiIjODA4MDgwIixncmV5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsZ3JlZW55ZWxsb3c6IiNhZGZmMmYiLGhvbmV5ZGV3OiIjZjBmZmYwIixob3RwaW5rOiIjZmY2OWI0IixpbmRpYW5yZWQ6IiNjZDVjNWMiLGluZGlnbzoiIzRiMDA4MiIsaXZvcnk6IiNmZmZmZjAiLGtoYWtpOiIjZjBlNjhjIixsYXZlbmRlcjoiI2U2ZTZmYSIsbGF2ZW5kZXJibHVzaDoiI2ZmZjBmNSIsbGF3bmdyZWVuOiIjN2NmYzAwIixsZW1vbmNoaWZmb246IiNmZmZhY2QiLGxpZ2h0Ymx1ZToiI2FkZDhlNiIsbGlnaHRjb3JhbDoiI2YwODA4MCIsbGlnaHRjeWFuOiIjZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiI2ZhZmFkMiIsbGlnaHRncmF5OiIjZDNkM2QzIixsaWdodGdyZXk6IiNkM2QzZDMiLGxpZ2h0Z3JlZW46IiM5MGVlOTAiLGxpZ2h0cGluazoiI2ZmYjZjMSIsbGlnaHRzYWxtb246IiNmZmEwN2EiLGxpZ2h0c2VhZ3JlZW46IiMyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiIzg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6IiM3Nzg4OTkiLGxpZ2h0c2xhdGVncmV5OiIjNzc4ODk5IixsaWdodHN0ZWVsYmx1ZToiI2IwYzRkZSIsbGlnaHR5ZWxsb3c6IiNmZmZmZTAiLGxpbWU6IiMwMGZmMDAiLGxpbWVncmVlbjoiIzMyY2QzMiIsbGluZW46IiNmYWYwZTYiLG1hZ2VudGE6IiNmZjAwZmYiLG1hcm9vbjoiIzgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiIzY2Y2RhYSIsbWVkaXVtYmx1ZToiIzAwMDBjZCIsbWVkaXVtb3JjaGlkOiIjYmE1NWQzIixtZWRpdW1wdXJwbGU6IiM5MzcwZGIiLG1lZGl1bXNlYWdyZWVuOiIjM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IiM3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIjMDBmYTlhIixtZWRpdW10dXJxdW9pc2U6IiM0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiI2M3MTU4NSIsbWlkbmlnaHRibHVlOiIjMTkxOTcwIixtaW50Y3JlYW06IiNmNWZmZmEiLG1pc3R5cm9zZToiI2ZmZTRlMSIsbW9jY2FzaW46IiNmZmU0YjUiLG5hdmFqb3doaXRlOiIjZmZkZWFkIixuYXZ5OiIjMDAwMDgwIixvbGRsYWNlOiIjZmRmNWU2IixvbGl2ZToiIzgwODAwMCIsb2xpdmVkcmFiOiIjNmI4ZTIzIixvcmFuZ2U6IiNmZmE1MDAiLG9yYW5nZXJlZDoiI2ZmNDUwMCIsb3JjaGlkOiIjZGE3MGQ2IixwYWxlZ29sZGVucm9kOiIjZWVlOGFhIixwYWxlZ3JlZW46IiM5OGZiOTgiLHBhbGV0dXJxdW9pc2U6IiNhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6IiNkYjcwOTMiLHBhcGF5YXdoaXA6IiNmZmVmZDUiLHBlYWNocHVmZjoiI2ZmZGFiOSIscGVydToiI2NkODUzZiIscGluazoiI2ZmYzBjYiIscGx1bToiI2RkYTBkZCIscG93ZGVyYmx1ZToiI2IwZTBlNiIscHVycGxlOiIjODAwMDgwIixyZWJlY2NhcHVycGxlOiIjNjYzMzk5IixyZWQ6IiNmZjAwMDAiLHJvc3licm93bjoiI2JjOGY4ZiIscm95YWxibHVlOiIjNDE2OWUxIixzYWRkbGVicm93bjoiIzhiNDUxMyIsc2FsbW9uOiIjZmE4MDcyIixzYW5keWJyb3duOiIjZjRhNDYwIixzZWFncmVlbjoiIzJlOGI1NyIsc2Vhc2hlbGw6IiNmZmY1ZWUiLHNpZW5uYToiI2EwNTIyZCIsc2lsdmVyOiIjYzBjMGMwIixza3libHVlOiIjODdjZWViIixzbGF0ZWJsdWU6IiM2YTVhY2QiLHNsYXRlZ3JheToiIzcwODA5MCIsc2xhdGVncmV5OiIjNzA4MDkwIixzbm93OiIjZmZmYWZhIixzcHJpbmdncmVlbjoiIzAwZmY3ZiIsc3RlZWxibHVlOiIjNDY4MmI0Iix0YW46IiNkMmI0OGMiLHRlYWw6IiMwMDgwODAiLHRoaXN0bGU6IiNkOGJmZDgiLHRvbWF0bzoiI2ZmNjM0NyIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZmZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmZmZjAwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiIsdHJhbnNwYXJlbnQ6IiMwMDAwMDAwMCJ9O2Z1bmN0aW9uIGt1KGUpe2U9ZXx8IiMwMDAwMDAiO3ZhciB0PW51bGw7aWYoKHQ9L14jKFswLTl8QS1GfGEtZl17Nn0pJC8uZXhlYyhlKSkhPW51bGwpe2xldCByPXBhcnNlSW50KHRbMV0uc2xpY2UoMCwyKSwxNiksbz1wYXJzZUludCh0WzFdLnNsaWNlKDIsNCksMTYpLGM9cGFyc2VJbnQodFsxXS5zbGljZSg0KSwxNik7cmV0dXJuW3IsbyxjLDI1NV19aWYoKHQ9L14jKFswLTl8QS1GfGEtZl17M30pJC8uZXhlYyhlKSkhPW51bGwpe2xldCByPXRbMV0uc2xpY2UoMCwxKSxvPXRbMV0uc2xpY2UoMSwyKSxjPXRbMV0uc2xpY2UoMiwzKTtyZXR1cm4gcj1wYXJzZUludChyK3IsMTYpLG89cGFyc2VJbnQobytvLDE2KSxjPXBhcnNlSW50KGMrYywxNiksW3IsbyxjLDI1NV19aWYoKHQ9L15yZ2JcKCguKylcKSQvLmV4ZWMoZSkpIT1udWxsKXJldHVybiB0WzFdLnNwbGl0KCIsIikubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1pbigyNTUscGFyc2VJbnQoci50cmltKCkpKX0pLmNvbmNhdCgyNTUpO2lmKCh0PS9ecmdiYVwoKC4rKVwpJC8uZXhlYyhlKSkhPW51bGwpcmV0dXJuIHRbMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24ocixvKXtyZXR1cm4gbz09PTM/TWF0aC5mbG9vcigyNTUqcGFyc2VGbG9hdChyLnRyaW0oKSkpOk1hdGgubWluKDI1NSxwYXJzZUludChyLnRyaW0oKSkpfSk7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO2lmKFcuaGFzT3duKHFkLG4pKXt0PS9eIyhbMC05fEEtRnxhLWZdezYsOH0pJC8uZXhlYyhxZFtuXSk7bGV0IHI9cGFyc2VJbnQodFsxXS5zbGljZSgwLDIpLDE2KSxvPXBhcnNlSW50KHRbMV0uc2xpY2UoMiw0KSwxNiksYz1wYXJzZUludCh0WzFdLnNsaWNlKDQsNiksMTYpLGg9cGFyc2VJbnQodFsxXS5zbGljZSg2LDgpLDE2KTtyZXR1cm4gaD1oPj0wP2g6MjU1LFtyLG8sYyxoXX1yZXR1cm4gY29uc29sZS5lcnJvcigidW5zdXBwb3J0ZWQgY29sb3I6IitlKSxbMCwwLDAsMjU1XX1jbGFzcyBLZHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudHlwZT10LHRoaXMuZGF0YT1uLHRoaXMuY29sb3JTdG9wPVtdfWFkZENvbG9yU3RvcCh0LG4pe3RoaXMuY29sb3JTdG9wLnB1c2goW3Qsa3UobildKX19Y2xhc3MgX197Y29uc3RydWN0b3IodCxuKXt0aGlzLnR5cGU9InBhdHRlcm4iLHRoaXMuZGF0YT10LHRoaXMuY29sb3JTdG9wPW59fWNsYXNzIGJfe2NvbnN0cnVjdG9yKHQpe3RoaXMud2lkdGg9dH19Y2xhc3MgS2x7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bix0aGlzLmFjdGlvbnM9W10sdGhpcy5wYXRoPVtdLHRoaXMuc3VicGF0aD1bXSx0aGlzLmRyYXdpbmdTdGF0ZT1bXSx0aGlzLnN0YXRlPXtsaW5lRGFzaDpbMCwwXSxzaGFkb3dPZmZzZXRYOjAsc2hhZG93T2Zmc2V0WTowLHNoYWRvd0JsdXI6MCxzaGFkb3dDb2xvcjpbMCwwLDAsMF0sZm9udDoiMTBweCBzYW5zLXNlcmlmIixmb250U2l6ZToxMCxmb250V2VpZ2h0OiJub3JtYWwiLGZvbnRTdHlsZToibm9ybWFsIixmb250RmFtaWx5OiJzYW5zLXNlcmlmIn19ZHJhdyh0PSExLG4pe3ZhciByPVsuLi50aGlzLmFjdGlvbnNdO3RoaXMuYWN0aW9ucz1bXSx0aGlzLnBhdGg9W10sVGModGhpcy5pZCx0aGlzLnBhZ2VJZCwiYWN0aW9uc0NoYW5nZWQiLHthY3Rpb25zOnIscmVzZXJ2ZTp0fSxuKX1jcmVhdGVMaW5lYXJHcmFkaWVudCh0LG4scixvKXtyZXR1cm4gbmV3IEtkKCJsaW5lYXIiLFt0LG4scixvXSl9Y3JlYXRlQ2lyY3VsYXJHcmFkaWVudCh0LG4scil7cmV0dXJuIG5ldyBLZCgicmFkaWFsIixbdCxuLHJdKX1jcmVhdGVQYXR0ZXJuKHQsbil7aWYobj09PXZvaWQgMCljb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlUGF0dGVybicgb24gJ0NhbnZhc0NvbnRleHQnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgMSBwcmVzZW50LiIpO2Vsc2UgaWYoWyJyZXBlYXQiLCJyZXBlYXQteCIsInJlcGVhdC15Iiwibm8tcmVwZWF0Il0uaW5kZXhPZihuKTwwKWNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVQYXR0ZXJuJyBvbiAnQ2FudmFzQ29udGV4dCc6IFRoZSBwcm92aWRlZCB0eXBlICgnIituKyInKSBpcyBub3Qgb25lIG9mICdyZXBlYXQnLCAnbm8tcmVwZWF0JywgJ3JlcGVhdC14Jywgb3IgJ3JlcGVhdC15Jy4iKTtlbHNlIHJldHVybiBuZXcgX18odCxuKX1tZWFzdXJlVGV4dCh0KXtsZXQgbj10aGlzLnN0YXRlLmZvbnQscj0wO3tsZXQgbz1zLndlYnZpZXcuYWxsKCkuZmluZChjPT5jLmdldFVSTCgpLmVuZHNXaXRoKCJ3d3cvX191bmlhcHB2aWV3Lmh0bWwiKSk7byYmKHI9TnVtYmVyKG8uZXZhbEpTU3luYyhgKCR7bV8udG9TdHJpbmcoKX0pKCR7SlNPTi5zdHJpbmdpZnkodCl9LCR7SlNPTi5zdHJpbmdpZnkobil9KWApKSl9cmV0dXJuIG5ldyBiXyhyKX1zYXZlKCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2F2ZSIsZGF0YTpbXX0pLHRoaXMuZHJhd2luZ1N0YXRlLnB1c2godGhpcy5zdGF0ZSl9cmVzdG9yZSgpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InJlc3RvcmUiLGRhdGE6W119KSx0aGlzLnN0YXRlPXRoaXMuZHJhd2luZ1N0YXRlLnBvcCgpfHx7bGluZURhc2g6WzAsMF0sc2hhZG93T2Zmc2V0WDowLHNoYWRvd09mZnNldFk6MCxzaGFkb3dCbHVyOjAsc2hhZG93Q29sb3I6WzAsMCwwLDBdLGZvbnQ6IjEwcHggc2Fucy1zZXJpZiIsZm9udFNpemU6MTAsZm9udFdlaWdodDoibm9ybWFsIixmb250U3R5bGU6Im5vcm1hbCIsZm9udEZhbWlseToic2Fucy1zZXJpZiJ9fWJlZ2luUGF0aCgpe3RoaXMucGF0aD1bXSx0aGlzLnN1YnBhdGg9W10sdGhpcy5wYXRoLnB1c2goe21ldGhvZDoiYmVnaW5QYXRoIixkYXRhOltdfSl9bW92ZVRvKHQsbil7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoibW92ZVRvIixkYXRhOlt0LG5dfSksdGhpcy5zdWJwYXRoPVtbdCxuXV19bGluZVRvKHQsbil7dGhpcy5wYXRoLmxlbmd0aD09PTAmJnRoaXMuc3VicGF0aC5sZW5ndGg9PT0wP3RoaXMucGF0aC5wdXNoKHttZXRob2Q6Im1vdmVUbyIsZGF0YTpbdCxuXX0pOnRoaXMucGF0aC5wdXNoKHttZXRob2Q6ImxpbmVUbyIsZGF0YTpbdCxuXX0pLHRoaXMuc3VicGF0aC5wdXNoKFt0LG5dKX1xdWFkcmF0aWNDdXJ2ZVRvKHQsbixyLG8pe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6InF1YWRyYXRpY0N1cnZlVG8iLGRhdGE6W3QsbixyLG9dfSksdGhpcy5zdWJwYXRoLnB1c2goW3Isb10pfWJlemllckN1cnZlVG8odCxuLHIsbyxjLGgpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImJlemllckN1cnZlVG8iLGRhdGE6W3QsbixyLG8sYyxoXX0pLHRoaXMuc3VicGF0aC5wdXNoKFtjLGhdKX1hcmModCxuLHIsbyxjLGg9ITEpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImFyYyIsZGF0YTpbdCxuLHIsbyxjLGhdfSksdGhpcy5zdWJwYXRoLnB1c2goW3Qsbl0pfXJlY3QodCxuLHIsbyl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoicmVjdCIsZGF0YTpbdCxuLHIsb119KSx0aGlzLnN1YnBhdGg9W1t0LG5dXX1hcmNUbyh0LG4scixvLGMpe3RoaXMucGF0aC5wdXNoKHttZXRob2Q6ImFyY1RvIixkYXRhOlt0LG4scixvLGNdfSksdGhpcy5zdWJwYXRoLnB1c2goW3Isb10pfWNsaXAoKXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJjbGlwIixkYXRhOlsuLi50aGlzLnBhdGhdfSl9Y2xvc2VQYXRoKCl7dGhpcy5wYXRoLnB1c2goe21ldGhvZDoiY2xvc2VQYXRoIixkYXRhOltdfSksdGhpcy5zdWJwYXRoLmxlbmd0aCYmKHRoaXMuc3VicGF0aD1bdGhpcy5zdWJwYXRoLnNoaWZ0KCldKX1jbGVhckFjdGlvbnMoKXt0aGlzLmFjdGlvbnM9W10sdGhpcy5wYXRoPVtdLHRoaXMuc3VicGF0aD1bXX1nZXRBY3Rpb25zKCl7dmFyIHQ9Wy4uLnRoaXMuYWN0aW9uc107cmV0dXJuIHRoaXMuY2xlYXJBY3Rpb25zKCksdH1zZXQgbGluZURhc2hPZmZzZXQodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0TGluZURhc2hPZmZzZXQiLGRhdGE6W3RdfSl9c2V0IGdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbih0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLGRhdGE6W3RdfSl9c2V0IHNoYWRvd0JsdXIodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93Qmx1ciIsZGF0YTpbdF19KX1zZXQgc2hhZG93Q29sb3IodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93Q29sb3IiLGRhdGE6W3RdfSl9c2V0IHNoYWRvd09mZnNldFgodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0U2hhZG93T2Zmc2V0WCIsZGF0YTpbdF19KX1zZXQgc2hhZG93T2Zmc2V0WSh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRTaGFkb3dPZmZzZXRZIixkYXRhOlt0XX0pfXNldCBmb250KHQpe3ZhciBuPXRoaXM7dGhpcy5zdGF0ZS5mb250PXQ7dmFyIHI9dC5tYXRjaCgvXigoW1x3XC1dK1xzKSopKFxkK3I/cHgpKFwvKFxkK1wuP1xkKihyP3B4KT8pKT9ccysoLiopLyk7aWYocil7dmFyIG89clsxXS50cmltKCkuc3BsaXQoL1xzLyksYz1wYXJzZUZsb2F0KHJbM10pLGg9cls3XSxiPVtdO28uZm9yRWFjaChmdW5jdGlvbihULEQpe1siaXRhbGljIiwib2JsaXF1ZSIsIm5vcm1hbCJdLmluZGV4T2YoVCk+LTE/KGIucHVzaCh7bWV0aG9kOiJzZXRGb250U3R5bGUiLGRhdGE6W1RdfSksbi5zdGF0ZS5mb250U3R5bGU9VCk6WyJib2xkIiwibm9ybWFsIl0uaW5kZXhPZihUKT4tMT8oYi5wdXNoKHttZXRob2Q6InNldEZvbnRXZWlnaHQiLGRhdGE6W1RdfSksbi5zdGF0ZS5mb250V2VpZ2h0PVQpOkQ9PT0wPyhiLnB1c2goe21ldGhvZDoic2V0Rm9udFN0eWxlIixkYXRhOlsibm9ybWFsIl19KSxuLnN0YXRlLmZvbnRTdHlsZT0ibm9ybWFsIik6RD09PTEmJlYoKX0pLG8ubGVuZ3RoPT09MSYmVigpLG89Yi5tYXAoZnVuY3Rpb24oVCl7cmV0dXJuIFQuZGF0YVswXX0pLmpvaW4oIiAiKSx0aGlzLnN0YXRlLmZvbnRTaXplPWMsdGhpcy5zdGF0ZS5mb250RmFtaWx5PWgsdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0Rm9udCIsZGF0YTpbYCR7b30gJHtjfXB4ICR7aH1gXX0pfWVsc2UgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gc2V0ICdmb250JyBvbiAnQ2FudmFzQ29udGV4dCc6IGludmFsaWQgZm9ybWF0LiIpO2Z1bmN0aW9uIFYoKXtiLnB1c2goe21ldGhvZDoic2V0Rm9udFdlaWdodCIsZGF0YTpbIm5vcm1hbCJdfSksbi5zdGF0ZS5mb250V2VpZ2h0PSJub3JtYWwifX1nZXQgZm9udCgpe3JldHVybiB0aGlzLnN0YXRlLmZvbnR9c2V0IGZpbGxTdHlsZSh0KXt0aGlzLnNldEZpbGxTdHlsZSh0KX1zZXQgc3Ryb2tlU3R5bGUodCl7dGhpcy5zZXRTdHJva2VTdHlsZSh0KX1zZXQgZ2xvYmFsQWxwaGEodCl7dD1NYXRoLmZsb29yKDI1NSpwYXJzZUZsb2F0KHQpKSx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRHbG9iYWxBbHBoYSIsZGF0YTpbdF19KX1zZXQgdGV4dEFsaWduKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldFRleHRBbGlnbiIsZGF0YTpbdF19KX1zZXQgbGluZUNhcCh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRMaW5lQ2FwIixkYXRhOlt0XX0pfXNldCBsaW5lSm9pbih0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRMaW5lSm9pbiIsZGF0YTpbdF19KX1zZXQgbGluZVdpZHRoKHQpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6InNldExpbmVXaWR0aCIsZGF0YTpbdF19KX1zZXQgbWl0ZXJMaW1pdCh0KXt0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOiJzZXRNaXRlckxpbWl0IixkYXRhOlt0XX0pfXNldCB0ZXh0QmFzZWxpbmUodCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic2V0VGV4dEJhc2VsaW5lIixkYXRhOlt0XX0pfX1sZXQgRV89Wi5vbmNlKCgpPT57Wy4uLmdfLC4uLnBfXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7c3dpdGNoKG4pe2Nhc2UiZmlsbCI6Y2FzZSJzdHJva2UiOnJldHVybiBmdW5jdGlvbigpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bisiUGF0aCIsZGF0YTpbLi4udGhpcy5wYXRoXX0pfTtjYXNlImZpbGxSZWN0IjpyZXR1cm4gZnVuY3Rpb24ocixvLGMsaCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoiZmlsbFBhdGgiLGRhdGE6W3ttZXRob2Q6InJlY3QiLGRhdGE6W3IsbyxjLGhdfV19KX07Y2FzZSJzdHJva2VSZWN0IjpyZXR1cm4gZnVuY3Rpb24ocixvLGMsaCl7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDoic3Ryb2tlUGF0aCIsZGF0YTpbe21ldGhvZDoicmVjdCIsZGF0YTpbcixvLGMsaF19XX0pfTtjYXNlImZpbGxUZXh0IjpjYXNlInN0cm9rZVRleHQiOnJldHVybiBmdW5jdGlvbihyLG8sYyxoKXt2YXIgYj1bci50b1N0cmluZygpLG8sY107dHlwZW9mIGg9PSJudW1iZXIiJiZiLnB1c2goaCksdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6Yn0pfTtjYXNlImRyYXdJbWFnZSI6cmV0dXJuIGZ1bmN0aW9uKHIsbyxjLGgsYixWLFQsRCxfZSl7X2U9PT12b2lkIDAmJihWPW8sVD1jLEQ9aCxfZT1iLG89dm9pZCAwLGM9dm9pZCAwLGg9dm9pZCAwLGI9dm9pZCAwKTt2YXIgU2U7ZnVuY3Rpb24gSWUodXQpe3JldHVybiB0eXBlb2YgdXQ9PSJudW1iZXIifVNlPUllKG8pJiZJZShjKSYmSWUoaCkmJkllKGIpP1tyLFYsVCxELF9lLG8sYyxoLGJdOkllKEQpJiZJZShfZSk/W3IsVixULEQsX2VdOltyLFYsVF0sdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6U2V9KX07ZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24oLi4ucil7dGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6cn0pfX19S2wucHJvdG90eXBlW2VdPXQoZSl9KSx2Xy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7c3dpdGNoKG4pe2Nhc2Uic2V0RmlsbFN0eWxlIjpjYXNlInNldFN0cm9rZVN0eWxlIjpyZXR1cm4gZnVuY3Rpb24ocil7dHlwZW9mIHIhPSJvYmplY3QiP3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOlsibm9ybWFsIixrdShyKV19KTp0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpbci50eXBlLHIuZGF0YSxyLmNvbG9yU3RvcF19KX07Y2FzZSJzZXRHbG9iYWxBbHBoYSI6cmV0dXJuIGZ1bmN0aW9uKHIpe3I9TWF0aC5mbG9vcigyNTUqcGFyc2VGbG9hdChyKSksdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6W3JdfSl9O2Nhc2Uic2V0U2hhZG93IjpyZXR1cm4gZnVuY3Rpb24ocixvLGMsaCl7aD1rdShoKSx0aGlzLmFjdGlvbnMucHVzaCh7bWV0aG9kOm4sZGF0YTpbcixvLGMsaF19KSx0aGlzLnN0YXRlLnNoYWRvd0JsdXI9Yyx0aGlzLnN0YXRlLnNoYWRvd0NvbG9yPWgsdGhpcy5zdGF0ZS5zaGFkb3dPZmZzZXRYPXIsdGhpcy5zdGF0ZS5zaGFkb3dPZmZzZXRZPW99O2Nhc2Uic2V0TGluZURhc2giOnJldHVybiBmdW5jdGlvbihyLG8pe3I9cnx8WzAsMF0sbz1vfHwwLHRoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOltyLG9dfSksdGhpcy5zdGF0ZS5saW5lRGFzaD1yfTtjYXNlInNldEZvbnRTaXplIjpyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zdGF0ZS5mb250PXRoaXMuc3RhdGUuZm9udC5yZXBsYWNlKC9cZCtcLj9cZCpweC8scisicHgiKSx0aGlzLnN0YXRlLmZvbnRTaXplPXIsdGhpcy5hY3Rpb25zLnB1c2goe21ldGhvZDpuLGRhdGE6W3JdfSl9O2RlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKC4uLnIpe3RoaXMuYWN0aW9ucy5wdXNoKHttZXRob2Q6bixkYXRhOnJ9KX19fUtsLnByb3RvdHlwZVtlXT10KGUpfSl9KSx5Xz1NdChYbSwoZSx0KT0+e2lmKEVfKCksdClyZXR1cm4gbmV3IEtsKGUsZXIodCkpO2xldCBuPWVyKF9yKCkpO2lmKG4pcmV0dXJuIG5ldyBLbChlLG4pO3N0LmVtaXQoWi5PTl9FUlJPUiwiY3JlYXRlQ2FudmFzQ29udGV4dDpmYWlsIil9LFFtKSxTXz1PZShzXywoe2NhbnZhc0lkOmUseDp0LHk6bix3aWR0aDpyLGhlaWdodDpvfSx7cmVzb2x2ZTpjLHJlamVjdDpofSk9PntsZXQgYj1lcihfcigpKTtpZighYil7aCgpO3JldHVybn1mdW5jdGlvbiBWKFQpe2lmKFQuZXJyTXNnJiZULmVyck1zZy5pbmRleE9mKCJmYWlsIikhPT0tMSl7aCgiIixUKTtyZXR1cm59bGV0IEQ9VC5kYXRhO0QmJkQubGVuZ3RoJiYoVC5jb21wcmVzc2VkJiYoRD1SZC5pbmZsYXRlUmF3KEQpKSxULmRhdGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KEQpKSxkZWxldGUgVC5jb21wcmVzc2VkLGMoVCl9VGMoZSxiLCJnZXRJbWFnZURhdGEiLHt4OnQseTpuLHdpZHRoOnIsaGVpZ2h0Om99LFYpfSxHZCxXZCksd189T2UobF8sKHtjYW52YXNJZDplLGRhdGE6dCx4Om4seTpyLHdpZHRoOm8saGVpZ2h0OmN9LHtyZXNvbHZlOmgscmVqZWN0OmJ9KT0+e3ZhciBWPWVyKF9yKCkpO2lmKCFWKXtiKCk7cmV0dXJufWxldCBULEQ9KCk9PntUYyhlLFYsInB1dEltYWdlRGF0YSIse2RhdGE6dCx4Om4seTpyLHdpZHRoOm8saGVpZ2h0OmMsY29tcHJlc3NlZDpUfSxfZT0+e2lmKF9lLmVyck1zZyYmX2UuZXJyTXNnLmluZGV4T2YoImZhaWwiKSE9PS0xKXtiKCk7cmV0dXJufWgoX2UpfSl9O3Mub3MubmFtZSE9PSJpT1MifHx0eXBlb2YgX19XRUVYX0RFVlRPT0xfXz09ImJvb2xlYW4iPyh0PVJkLmRlZmxhdGVSYXcodCx7dG86InN0cmluZyJ9KSxUPSEwKTp0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpLEQoKX0sdV8sY18pLENfPU9lKGZfLCh7eDplPTAseTp0PTAsd2lkdGg6bixoZWlnaHQ6cixkZXN0V2lkdGg6byxkZXN0SGVpZ2h0OmMsY2FudmFzSWQ6aCxmaWxlVHlwZTpiLHF1YWxpdHk6Vn0se3Jlc29sdmU6VCxyZWplY3Q6RH0pPT57dmFyIF9lPWVyKF9yKCkpO2lmKCFfZSl7RCgpO3JldHVybn1sZXQgU2U9YCR7V3J9L2NhbnZhc2A7VGMoaCxfZSwidG9UZW1wRmlsZVBhdGgiLHt4OmUseTp0LHdpZHRoOm4saGVpZ2h0OnIsZGVzdFdpZHRoOm8sZGVzdEhlaWdodDpjLGZpbGVUeXBlOmIscXVhbGl0eTpWLGRpcm5hbWU6U2V9LEllPT57aWYoSWUuZXJyTXNnJiZJZS5lcnJNc2cuaW5kZXhPZigiZmFpbCIpIT09LTEpe0QoIiIsSWUpO3JldHVybn1UKEllKX0pfSxoXyxkXyksSmQ9WyJvbkNhbnBsYXkiLCJvblBsYXkiLCJvblBhdXNlIiwib25TdG9wIiwib25FbmRlZCIsIm9uVGltZVVwZGF0ZSIsIm9uRXJyb3IiLCJvbldhaXRpbmciLCJvblNlZWtpbmciLCJvblNlZWtlZCJdLEFfPVsib2ZmQ2FucGxheSIsIm9mZlBsYXkiLCJvZmZQYXVzZSIsIm9mZlN0b3AiLCJvZmZFbmRlZCIsIm9mZlRpbWVVcGRhdGUiLCJvZmZFcnJvciIsIm9mZldhaXRpbmciLCJvZmZTZWVraW5nIiwib2ZmU2Vla2VkIl0sT189e3RocmVzaG9sZHM6WzBdLGluaXRpYWxSYXRpbzowLG9ic2VydmVBbGw6ITF9LFRfPVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0sUF89MTtmdW5jdGlvbiBaZChlPXt9KXtyZXR1cm4gVF8ubWFwKHQ9PmAke051bWJlcihlW3RdKXx8MH1weGApLmpvaW4oIiAiKX1jbGFzcyBYZHtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuX3BhZ2VJZD1lcih0KSx0aGlzLl9jb21wb25lbnQ9dCx0aGlzLl9vcHRpb25zPVcuZXh0ZW5kKHt9LE9fLG4pfXJlbGF0aXZlVG8odCxuKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5yZWxhdGl2ZVRvU2VsZWN0b3I9dCx0aGlzLl9vcHRpb25zLnJvb3RNYXJnaW49WmQobiksdGhpc31yZWxhdGl2ZVRvVmlld3BvcnQodCl7cmV0dXJuIHRoaXMuX29wdGlvbnMucmVsYXRpdmVUb1NlbGVjdG9yPXZvaWQgMCx0aGlzLl9vcHRpb25zLnJvb3RNYXJnaW49WmQodCksdGhpc31vYnNlcnZlKHQsbil7IVcuaXNGdW5jdGlvbihuKXx8KHRoaXMuX29wdGlvbnMuc2VsZWN0b3I9dCx0aGlzLl9yZXFJZD1QXysrLENpKHtyZXFJZDp0aGlzLl9yZXFJZCxjb21wb25lbnQ6dGhpcy5fY29tcG9uZW50LG9wdGlvbnM6dGhpcy5fb3B0aW9ucyxjYWxsYmFjazpufSx0aGlzLl9wYWdlSWQpKX1kaXNjb25uZWN0KCl7dGhpcy5fcmVxSWQmJnVzKHtyZXFJZDp0aGlzLl9yZXFJZCxjb21wb25lbnQ6dGhpcy5fY29tcG9uZW50fSx0aGlzLl9wYWdlSWQpfX1sZXQgSV89TXQoImNyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVyIiwoZSx0KT0+KGU9Wi5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoZSksZSYmIWVyKGUpJiYodD1lLGU9bnVsbCksZT9uZXcgWGQoZSx0KTpuZXcgWGQoX3IoKSx0KSkpLE5fPTE7Y2xhc3MgUWR7Y29uc3RydWN0b3IodCl7dGhpcy5fcGFnZUlkPXQuJHBhZ2UmJnQuJHBhZ2UuaWQsdGhpcy5fY29tcG9uZW50PXR9b2JzZXJ2ZSh0LG4peyFXLmlzRnVuY3Rpb24obil8fCh0aGlzLl9yZXFJZD1OXysrLE5hKHtyZXFJZDp0aGlzLl9yZXFJZCxjb21wb25lbnQ6dGhpcy5fY29tcG9uZW50LG9wdGlvbnM6dCxjYWxsYmFjazpufSx0aGlzLl9wYWdlSWQpKX1kaXNjb25uZWN0KCl7dGhpcy5fcmVxSWQmJmVhKHtyZXFJZDp0aGlzLl9yZXFJZCxjb21wb25lbnQ6dGhpcy5fY29tcG9uZW50fSx0aGlzLl9wYWdlSWQpfX1sZXQga189TXQoImNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZlciIsZT0+KGU9Wi5yZXNvbHZlQ29tcG9uZW50SW5zdGFuY2UoZSksZSYmIWVyKGUpJiYoZT1udWxsKSxlP25ldyBRZChlKTpuZXcgUWQoX3IoKSkpKSxSXz0wLFJ1PXt9O2Z1bmN0aW9uIHhfKGUsdCxuLHIpe2xldCBvPXtvcHRpb25zOnJ9LGM9ciYmKCJzdWNjZXNzImluIHJ8fCJmYWlsImluIHJ8fCJjb21wbGV0ZSJpbiByKTtpZihjKXtsZXQgaD1TdHJpbmcoUl8rKyk7by5jYWxsYmFja0lkPWgsUnVbaF09cn1zdC5pbnZva2VWaWV3TWV0aG9kKGBlZGl0b3IuJHtlfWAse3R5cGU6bixkYXRhOm99LHQsKHtjYWxsYmFja0lkOmgsZGF0YTpifSk9PntjJiYoWi5jYWxsT3B0aW9ucyhSdVtoXSxiKSxkZWxldGUgUnVbaF0pfSl9Y2xhc3MgQl97Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5wYWdlSWQ9bn1mb3JtYXQodCxuKXt0aGlzLl9leGVjKCJmb3JtYXQiLHtuYW1lOnQsdmFsdWU6bn0pfWluc2VydERpdmlkZXIoKXt0aGlzLl9leGVjKCJpbnNlcnREaXZpZGVyIil9aW5zZXJ0SW1hZ2UodCl7dGhpcy5fZXhlYygiaW5zZXJ0SW1hZ2UiLHQpfWluc2VydFRleHQodCl7dGhpcy5fZXhlYygiaW5zZXJ0VGV4dCIsdCl9c2V0Q29udGVudHModCl7dGhpcy5fZXhlYygic2V0Q29udGVudHMiLHQpfWdldENvbnRlbnRzKHQpe3RoaXMuX2V4ZWMoImdldENvbnRlbnRzIix0KX1jbGVhcih0KXt0aGlzLl9leGVjKCJjbGVhciIsdCl9cmVtb3ZlRm9ybWF0KHQpe3RoaXMuX2V4ZWMoInJlbW92ZUZvcm1hdCIsdCl9dW5kbyh0KXt0aGlzLl9leGVjKCJ1bmRvIix0KX1yZWRvKHQpe3RoaXMuX2V4ZWMoInJlZG8iLHQpfWJsdXIodCl7dGhpcy5fZXhlYygiYmx1ciIsdCl9Z2V0U2VsZWN0aW9uVGV4dCh0KXt0aGlzLl9leGVjKCJnZXRTZWxlY3Rpb25UZXh0Iix0KX1zY3JvbGxJbnRvVmlldyh0KXt0aGlzLl9leGVjKCJzY3JvbGxJbnRvVmlldyIsdCl9X2V4ZWModCxuKXt4Xyh0aGlzLmlkLHRoaXMucGFnZUlkLHQsbil9fWxldCBMXz17Y2FudmFzOktsLG1hcDpOdSx2aWRlbzpJdSxlZGl0b3I6Ql99O2Z1bmN0aW9uIGVoKGUpe2lmKGUmJmUuY29udGV4dEluZm8pe2xldHtpZDp0LHR5cGU6bixwYWdlOnJ9PWUuY29udGV4dEluZm8sbz1MX1tuXTtlLmNvbnRleHQ9bmV3IG8odCxyKSxkZWxldGUgZS5jb250ZXh0SW5mb319Y2xhc3MgeHV7Y29uc3RydWN0b3IodCxuLHIsbyl7dGhpcy5fc2VsZWN0b3JRdWVyeT10LHRoaXMuX2NvbXBvbmVudD1uLHRoaXMuX3NlbGVjdG9yPXIsdGhpcy5fc2luZ2xlPW99Ym91bmRpbmdDbGllbnRSZWN0KHQpe3JldHVybiB0aGlzLl9zZWxlY3RvclF1ZXJ5Ll9wdXNoKHRoaXMuX3NlbGVjdG9yLHRoaXMuX2NvbXBvbmVudCx0aGlzLl9zaW5nbGUse2lkOiEwLGRhdGFzZXQ6ITAscmVjdDohMCxzaXplOiEwfSx0KSx0aGlzLl9zZWxlY3RvclF1ZXJ5fWZpZWxkcyh0LG4pe3JldHVybiB0aGlzLl9zZWxlY3RvclF1ZXJ5Ll9wdXNoKHRoaXMuX3NlbGVjdG9yLHRoaXMuX2NvbXBvbmVudCx0aGlzLl9zaW5nbGUsdCxuKSx0aGlzLl9zZWxlY3RvclF1ZXJ5fXNjcm9sbE9mZnNldCh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0b3JRdWVyeS5fcHVzaCh0aGlzLl9zZWxlY3Rvcix0aGlzLl9jb21wb25lbnQsdGhpcy5fc2luZ2xlLHtpZDohMCxkYXRhc2V0OiEwLHNjcm9sbE9mZnNldDohMH0sdCksdGhpcy5fc2VsZWN0b3JRdWVyeX1jb250ZXh0KHQpe3JldHVybiB0aGlzLl9zZWxlY3RvclF1ZXJ5Ll9wdXNoKHRoaXMuX3NlbGVjdG9yLHRoaXMuX2NvbXBvbmVudCx0aGlzLl9zaW5nbGUse2NvbnRleHQ6ITB9LHQpLHRoaXMuX3NlbGVjdG9yUXVlcnl9bm9kZSh0KXtyZXR1cm4gdGhpcy5fc2VsZWN0b3JRdWVyeX19Y2xhc3MgTV97Y29uc3RydWN0b3IodCl7dGhpcy5fY29tcG9uZW50PXZvaWQgMCx0aGlzLl9wYWdlPXQsdGhpcy5fcXVldWU9W10sdGhpcy5fcXVldWVDYj1bXX1leGVjKHQpe3JldHVybiBYcih0aGlzLl9wYWdlLHRoaXMuX3F1ZXVlLG49PntsZXQgcj10aGlzLl9xdWV1ZUNiO24uZm9yRWFjaCgobyxjKT0+e1cuaXNBcnJheShvKT9vLmZvckVhY2goZWgpOmVoKG8pO2xldCBoPXJbY107Vy5pc0Z1bmN0aW9uKGgpJiZoLmNhbGwodGhpcyxvKX0pLFcuaXNGdW5jdGlvbih0KSYmdC5jYWxsKHRoaXMsbil9KSx0aGlzLl9ub2Rlc1JlZn1pbih0KXtyZXR1cm4gdGhpcy5fY29tcG9uZW50PVoucmVzb2x2ZUNvbXBvbmVudEluc3RhbmNlKHQpLHRoaXN9c2VsZWN0KHQpe3JldHVybiB0aGlzLl9ub2Rlc1JlZj1uZXcgeHUodGhpcyx0aGlzLl9jb21wb25lbnQsdCwhMCl9c2VsZWN0QWxsKHQpe3JldHVybiB0aGlzLl9ub2Rlc1JlZj1uZXcgeHUodGhpcyx0aGlzLl9jb21wb25lbnQsdCwhMSl9c2VsZWN0Vmlld3BvcnQoKXtyZXR1cm4gdGhpcy5fbm9kZXNSZWY9bmV3IHh1KHRoaXMsbnVsbCwiIiwhMCl9X3B1c2godCxuLHIsbyxjKXt0aGlzLl9xdWV1ZS5wdXNoKHtjb21wb25lbnQ6bixzZWxlY3Rvcjp0LHNpbmdsZTpyLGZpZWxkczpvfSksdGhpcy5fcXVldWVDYi5wdXNoKGMpfX1sZXQgRF89TXQoImNyZWF0ZVNlbGVjdG9yUXVlcnkiLGU9PihlPVoucmVzb2x2ZUNvbXBvbmVudEluc3RhbmNlKGUpLGUmJiFlcihlKSYmKGU9bnVsbCksbmV3IE1fKGV8fF9yKCkpKSksRl89ImNyZWF0ZUFuaW1hdGlvbiIsVl89e2Zvcm1hdEFyZ3M6e319LCRfPXtkdXJhdGlvbjpOdW1iZXIsdGltaW5nRnVuY3Rpb246U3RyaW5nLGRlbGF5Ok51bWJlcix0cmFuc2Zvcm1PcmlnaW46U3RyaW5nfSxVXz17ZHVyYXRpb246NDAwLHRpbWluZ0Z1bmN0aW9uOiJsaW5lYXIiLGRlbGF5OjAsdHJhbnNmb3JtT3JpZ2luOiI1MCUgNTAlIDAifTtjbGFzcyB0aHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmFjdGlvbnM9W10sdGhpcy5jdXJyZW50VHJhbnNmb3JtPXt9LHRoaXMuY3VycmVudFN0ZXBBbmltYXRlcz1bXSx0aGlzLm9wdGlvbj1XLmV4dGVuZCh7fSxVXyx0KX1fZ2V0T3B0aW9uKHQpe2xldCBuPXt0cmFuc2l0aW9uOlcuZXh0ZW5kKHt9LHRoaXMub3B0aW9uLHQpLHRyYW5zZm9ybU9yaWdpbjoiIn07cmV0dXJuIG4udHJhbnNmb3JtT3JpZ2luPW4udHJhbnNpdGlvbi50cmFuc2Zvcm1PcmlnaW4sZGVsZXRlIG4udHJhbnNpdGlvbi50cmFuc2Zvcm1PcmlnaW4sbn1fcHVzaEFuaW1hdGVzKHQsbil7dGhpcy5jdXJyZW50U3RlcEFuaW1hdGVzLnB1c2goe3R5cGU6dCxhcmdzOm59KX1fY29udmVyVHlwZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bQS1aXS9nLG49PmAtJHtuLnRvTG93ZXJDYXNlKCl9YCl9X2dldFZhbHVlKHQpe3JldHVybiB0eXBlb2YgdD09Im51bWJlciI/YCR7dH1weGA6dH1leHBvcnQoKXtsZXQgdD10aGlzLmFjdGlvbnM7cmV0dXJuIHRoaXMuYWN0aW9ucz1bXSx7YWN0aW9uczp0fX1zdGVwKHQpe3JldHVybiB0aGlzLmN1cnJlbnRTdGVwQW5pbWF0ZXMuZm9yRWFjaChuPT57bi50eXBlIT09InN0eWxlIj90aGlzLmN1cnJlbnRUcmFuc2Zvcm1bbi50eXBlXT1uOnRoaXMuY3VycmVudFRyYW5zZm9ybVtgJHtuLnR5cGV9LiR7bi5hcmdzWzBdfWBdPW59KSx0aGlzLmFjdGlvbnMucHVzaCh7YW5pbWF0ZXM6T2JqZWN0LnZhbHVlcyh0aGlzLmN1cnJlbnRUcmFuc2Zvcm0pLG9wdGlvbjp0aGlzLl9nZXRPcHRpb24odCl9KSx0aGlzLmN1cnJlbnRTdGVwQW5pbWF0ZXM9W10sdGhpc319bGV0IEhfPVoub25jZSgoKT0+e2xldCBlPVsibWF0cml4IiwibWF0cml4M2QiLCJyb3RhdGUiLCJyb3RhdGUzZCIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsInNjYWxlIiwic2NhbGUzZCIsInNjYWxlWCIsInNjYWxlWSIsInNjYWxlWiIsInNrZXciLCJza2V3WCIsInNrZXdZIiwidHJhbnNsYXRlIiwidHJhbnNsYXRlM2QiLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInRyYW5zbGF0ZVoiXSx0PVsib3BhY2l0eSIsImJhY2tncm91bmRDb2xvciJdLG49WyJ3aWR0aCIsImhlaWdodCIsImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdO2UuY29uY2F0KHQsbikuZm9yRWFjaChyPT57dGgucHJvdG90eXBlW3JdPWZ1bmN0aW9uKC4uLm8pe3JldHVybiB0LmNvbmNhdChuKS5pbmNsdWRlcyhyKT90aGlzLl9wdXNoQW5pbWF0ZXMoInN0eWxlIixbdGhpcy5fY29udmVyVHlwZShyKSxuLmluY2x1ZGVzKHIpP3RoaXMuX2dldFZhbHVlKG9bMF0pOm9bMF1dKTp0aGlzLl9wdXNoQW5pbWF0ZXMocixvKSx0aGlzfX0pfSksal89TXQoRl8sZT0+KEhfKCksbmV3IHRoKGUpKSwkXyxWXyksbmg9Im9uVGFiQmFyTWlkQnV0dG9uVGFwIix6Xz1nbihuaCwoKT0+e30pLFdfPSJvbldpbmRvd1Jlc2l6ZSIsR189Im9mZldpbmRvd1Jlc2l6ZSIsWV89Z24oV18sKCk9Pnt9KSxxXz1KcihHXywoKT0+e30pLHJoPSJzZXRMb2NhbGUiLEtfPSJnZXRMb2NhbGUiLGloPSJvbkxvY2FsZUNoYW5nZSIsSmw9TXQoS18sKCk9PntsZXQgZT1TdCh7YWxsb3dEZWZhdWx0OiEwfSk7cmV0dXJuIGUmJmUuJHZtP2UuJHZtLiRsb2NhbGU6c2UoKS5nZXRMb2NhbGUoKX0pLEpfPWduKGloLCgpPT57fSksWl89TXQocmgsZT0+e2xldCB0PVN0KCk7cmV0dXJuIHQmJnQuJHZtLiRsb2NhbGUhPT1lPyh0LiR2bS4kbG9jYWxlPWUsUG4oKS5mb3JFYWNoKG89PntzdC5wdWJsaXNoSGFuZGxlcihyaCxlLG8uJHBhZ2UuaWQpfSksZy5yZXF1aXJlTW9kdWxlKCJwbHVzIikuc2V0TGFuZ3VhZ2UoZSksc3QuaW52b2tlT25DYWxsYmFjayhpaCx7bG9jYWxlOmV9KSwhMCk6ITF9KSxYXz1PZSgic2V0UGFnZU1ldGEiLChlLHtyZXNvbHZlOnR9KT0+e3QodG8oX3IoKSxlKSl9KSxvaD0iZ2V0U2VsZWN0ZWRUZXh0UmFuZ2UiLFFfPU9lKG9oLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3N0Lmludm9rZVZpZXdNZXRob2Qob2gse30sZmEoKSxyPT57dHlwZW9mIHIuZW5kPT0idW5kZWZpbmVkIiYmdHlwZW9mIHIuc3RhcnQ9PSJ1bmRlZmluZWQiP24oIm5vIGZvY3VzZWQiKTp0KHIpfSl9KSxQYz17W1ouT05fVU5IQU5ETEVfUkVKRUNUSU9OXTpbXSxbWi5PTl9QQUdFX05PVF9GT1VORF06W10sW1ouT05fRVJST1JdOltdLFtaLk9OX1NIT1ddOltdLFtaLk9OX0hJREVdOltdfTtmdW5jdGlvbiBabChlLHQpe2xldCBuPVN0KHthbGxvd0RlZmF1bHQ6ITB9KTtpZihuJiZuLiR2bSlyZXR1cm4gZm4uaW5qZWN0SG9vayhlLHQsbi4kdm0uJCk7UGNbZV0ucHVzaCh0KX1mdW5jdGlvbiBlYihlKXtPYmplY3Qua2V5cyhQYykuZm9yRWFjaCh0PT57UGNbdF0uZm9yRWFjaChuPT57Zm4uaW5qZWN0SG9vayh0LG4sZSl9KX0pfWZ1bmN0aW9uIFhsKGUsdCl7bGV0IG49U3Qoe2FsbG93RGVmYXVsdDohMH0pO2lmKG4mJm4uJHZtKXJldHVybiBJYShuLiR2bSxlLHQpO1cucmVtb3ZlKFBjW2VdLHQpfWZ1bmN0aW9uIHRiKGUpe1psKFouT05fVU5IQU5ETEVfUkVKRUNUSU9OLGUpfWZ1bmN0aW9uIG5iKGUpe1hsKFouT05fVU5IQU5ETEVfUkVKRUNUSU9OLGUpfWZ1bmN0aW9uIHJiKGUpe1psKFouT05fUEFHRV9OT1RfRk9VTkQsZSl9ZnVuY3Rpb24gaWIoZSl7WGwoWi5PTl9QQUdFX05PVF9GT1VORCxlKX1mdW5jdGlvbiBvYihlKXtabChaLk9OX0VSUk9SLGUpfWZ1bmN0aW9uIGFiKGUpe1hsKFouT05fRVJST1IsZSl9ZnVuY3Rpb24gc2IoZSl7WmwoWi5PTl9TSE9XLGUpfWZ1bmN0aW9uIGxiKGUpe1hsKFouT05fU0hPVyxlKX1mdW5jdGlvbiBjYihlKXtabChaLk9OX0hJREUsZSl9ZnVuY3Rpb24gdWIoZSl7WGwoWi5PTl9ISURFLGUpfWxldCBmYj1NdCgiZ2V0RW50ZXJPcHRpb25zU3luYyIsKCk9PkZvKCkpLGRiPU10KCJnZXRMYXVuY2hPcHRpb25zU3luYyIsKCk9PmRzKCkpLFFsLEJ1LEx1LGFoO2Z1bmN0aW9uIHNoKGUpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaCh0KXt9cmV0dXJuIGV9ZnVuY3Rpb24gTXUoZSl7aWYoZS50eXBlPT09ImVuYWJsZWQiKUx1PSEwLGFoPWUub2ZmbGluZTtlbHNlIGlmKGUudHlwZT09PSJjbGllbnRJZCIpUWw9ZS5jaWQsQnU9ZS5lcnJNc2csbGgoUWwsZS5lcnJNc2cpO2Vsc2UgaWYoZS50eXBlPT09InB1c2hNc2ciKXtsZXQgdD17dHlwZToicmVjZWl2ZSIsZGF0YTpzaChlLm1lc3NhZ2UpfTtmb3IobGV0IG49MDtuPFRzLmxlbmd0aCYmKFRzW25dKHQpLCF0LnN0b3BwZWQpO24rKyk7fWVsc2UgZS50eXBlPT09ImNsaWNrIiYmVHMuZm9yRWFjaCh0PT57dCh7dHlwZToiY2xpY2siLGRhdGE6c2goZS5tZXNzYWdlKX0pfSl9bGV0IER1PVtdO2Z1bmN0aW9uIGxoKGUsdCl7RHUuZm9yRWFjaChuPT57bihlLHQpfSksRHUubGVuZ3RoPTB9bGV0IGhiPU9lKCJnZXRQdXNoQ2xpZW50SWQiLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2lmKGFoKXtzLnB1c2guZ2V0Q2xpZW50SW5mb0FzeW5jKHI9Pnt0KHtjaWQ6ci5jbGllbnRpZH0pfSxyPT57bihyLmNvZGUrIjogIityLm1lc3NhZ2UpfSk7cmV0dXJufVByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0eXBlb2YgTHU9PSJ1bmRlZmluZWQiJiYoTHU9ITEsUWw9IiIsQnU9InVuaVB1c2ggaXMgbm90IGVuYWJsZWQiKSxEdS5wdXNoKChyLG8pPT57cj90KHtjaWQ6cn0pOm4obyl9KSx0eXBlb2YgUWwhPSJ1bmRlZmluZWQiJiZsaChRbCxCdSl9KX0pLFRzPVtdLGNoPSExLGdiPWU9PntUcy5pbmRleE9mKGUpPT09LTEmJlRzLnB1c2goZSksY2h8fChjaD0hMCxzLnB1c2guYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHQ9PntNdSh7dHlwZToiY2xpY2siLG1lc3NhZ2U6dH0pfSkscy5wdXNoLmFkZEV2ZW50TGlzdGVuZXIoInJlY2VpdmUiLHQ9PntNdSh7dHlwZToicHVzaE1zZyIsbWVzc2FnZTp0fSl9KSl9LHBiPWU9PntpZighZSlUcy5sZW5ndGg9MDtlbHNle2xldCB0PVRzLmluZGV4T2YoZSk7dD4tMSYmVHMuc3BsaWNlKHQsMSl9fSx2Yj0iY2FuSVVzZSIsbWI9W3tuYW1lOiJzY2hlbWEiLHR5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfV0sX2I9ImdldEJhY2tncm91bmRBdWRpb01hbmFnZXIiLGJiPSJtYWtlUGhvbmVDYWxsIixFYj17cGhvbmVOdW1iZXI6U3RyaW5nfSx5Yj0iYWRkUGhvbmVDb250YWN0IixTYj17Zm9ybWF0QXJnczp7Zmlyc3ROYW1lKGUpe2lmKCFlKXJldHVybiJhZGRQaG9uZUNvbnRhY3Q6ZmFpbCBwYXJhbWV0ZXIgZXJyb3I6IHBhcmFtZXRlci5maXJzdE5hbWUgc2hvdWxkIG5vdCBiZSBlbXB0eTsifX19LHdiPXtmaXJzdE5hbWU6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxwaG90b0ZpbGVQYXRoOlN0cmluZyxuaWNrTmFtZTpTdHJpbmcsbGFzdE5hbWU6U3RyaW5nLG1pZGRsZU5hbWU6U3RyaW5nLHJlbWFyazpTdHJpbmcsbW9iaWxlUGhvbmVOdW1iZXI6U3RyaW5nLHdlQ2hhdE51bWJlcjpTdHJpbmcsYWRkcmVzc0NvdW50cnk6U3RyaW5nLGFkZHJlc3NTdGF0ZTpTdHJpbmcsYWRkcmVzc0NpdHk6U3RyaW5nLGFkZHJlc3NTdHJlZXQ6U3RyaW5nLGFkZHJlc3NQb3N0YWxDb2RlOlN0cmluZyxvcmdhbml6YXRpb246U3RyaW5nLHRpdGxlOlN0cmluZyx3b3JrRmF4TnVtYmVyOlN0cmluZyx3b3JrUGhvbmVOdW1iZXI6U3RyaW5nLGhvc3ROdW1iZXI6U3RyaW5nLGVtYWlsOlN0cmluZyx1cmw6U3RyaW5nLHdvcmtBZGRyZXNzQ291bnRyeTpTdHJpbmcsd29ya0FkZHJlc3NTdGF0ZTpTdHJpbmcsd29ya0FkZHJlc3NDaXR5OlN0cmluZyx3b3JrQWRkcmVzc1N0cmVldDpTdHJpbmcsd29ya0FkZHJlc3NQb3N0YWxDb2RlOlN0cmluZyxob21lRmF4TnVtYmVyOlN0cmluZyxob21lUGhvbmVOdW1iZXI6U3RyaW5nLGhvbWVBZGRyZXNzQ291bnRyeTpTdHJpbmcsaG9tZUFkZHJlc3NTdGF0ZTpTdHJpbmcsaG9tZUFkZHJlc3NDaXR5OlN0cmluZyxob21lQWRkcmVzc1N0cmVldDpTdHJpbmcsaG9tZUFkZHJlc3NQb3N0YWxDb2RlOlN0cmluZ30sQ2I9ImdldENsaXBib2FyZERhdGEiLEFiPSJzZXRDbGlwYm9hcmREYXRhIixPYj17Zm9ybWF0QXJnczp7c2hvd1RvYXN0OiEwfSxiZWZvcmVJbnZva2UoKXtZdCgpfSxiZWZvcmVTdWNjZXNzKGUsdCl7aWYoIXQuc2hvd1RvYXN0KXJldHVybjtsZXR7dDpufT1zZSgpLHI9bigidW5pLnNldENsaXBib2FyZERhdGEuc3VjY2VzcyIpO3ImJkkuc2hvd1RvYXN0KHt0aXRsZTpyLGljb246InN1Y2Nlc3MiLG1hc2s6ITF9KX19LFRiPXtkYXRhOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2hvd1RvYXN0Ont0eXBlOkJvb2xlYW59fSx1aD0ib25BY2NlbGVyb21ldGVyIixQYj0ib2ZmQWNjZWxlcm9tZXRlciIsSWI9InN0YXJ0QWNjZWxlcm9tZXRlciIsTmI9InN0b3BBY2NlbGVyb21ldGVyIixmaD0ib25Db21wYXNzIixrYj0ib2ZmQ29tcGFzcyIsUmI9InN0YXJ0Q29tcGFzcyIseGI9InN0b3BDb21wYXNzIixCYj0idmlicmF0ZVNob3J0IixMYj0idmlicmF0ZUxvbmciLGRoPSJvbkJsdWV0b290aERldmljZUZvdW5kIixoaD0ib25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2UiLGdoPSJvbkJMRUNvbm5lY3Rpb25TdGF0ZUNoYW5nZSIscGg9Im9uQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZSIsTWI9InN0YXJ0Qmx1ZXRvb3RoRGV2aWNlc0Rpc2NvdmVyeSIsRGI9e3NlcnZpY2VzOkFycmF5LGFsbG93RHVwbGljYXRlc0tleTpCb29sZWFuLGludGVydmFsOk51bWJlcn0sRmI9ImdldENvbm5lY3RlZEJsdWV0b290aERldmljZXMiLFZiPXtzZXJ2aWNlczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH19LCRiPSJjcmVhdGVCTEVDb25uZWN0aW9uIixVYj17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sSGI9ImNsb3NlQkxFQ29ubmVjdGlvbiIsamI9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LHpiPSJnZXRCTEVEZXZpY2VTZXJ2aWNlcyIsV2I9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LEdiPSJnZXRCTEVEZXZpY2VDaGFyYWN0ZXJpc3RpY3MiLFliPXtkZXZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHNlcnZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxxYj0ibm90aWZ5QkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZSIsS2I9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2VydmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sY2hhcmFjdGVyaXN0aWNJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHN0YXRlOnt0eXBlOkJvb2xlYW4scmVxdWlyZWQ6ITB9fSxKYj0icmVhZEJMRUNoYXJhY3RlcmlzdGljVmFsdWUiLFpiPXtkZXZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHNlcnZpY2VJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGNoYXJhY3RlcmlzdGljSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sWGI9IndyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZSIsUWI9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc2VydmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sY2hhcmFjdGVyaXN0aWNJZDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHZhbHVlOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfX0sZTA9InNldEJMRU1UVSIsdDA9e2RldmljZUlkOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sbXR1Ont0eXBlOk51bWJlcixyZXF1aXJlZDohMH19LG4wPSJnZXRCTEVEZXZpY2VSU1NJIixyMD17ZGV2aWNlSWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sdmg9Im9uQmVhY29uVXBkYXRlIixtaD0ib25CZWFjb25TZXJ2aWNlQ2hhbmdlIixpMD0iZ2V0QmVhY29ucyIsbzA9InN0YXJ0QmVhY29uRGlzY292ZXJ5IixhMD17dXVpZHM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9fSxzMD0ic3RvcEJlYWNvbkRpc2NvdmVyeSIsbDA9ImdldFNjcmVlbkJyaWdodG5lc3MiLGMwPSJzZXRTY3JlZW5CcmlnaHRuZXNzIix1MD0ic2V0S2VlcFNjcmVlbk9uIixmMD0iY2hlY2tJc1N1cHBvcnRTb3RlckF1dGhlbnRpY2F0aW9uIixkMD0iY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZSIsaDA9WyJmaW5nZXJQcmludCIsImZhY2lhbCIsInNwZWVjaCJdLGcwPXtmb3JtYXRBcmdzOntjaGVja0F1dGhNb2RlKGUsdCl7aWYoIWV8fCFoMC5pbmNsdWRlcyhlKSlyZXR1cm4iY2hlY2tBdXRoTW9kZSBcdTU4NkJcdTUxOTlcdTk1MTlcdThCRUYifX19LHAwPXtjaGVja0F1dGhNb2RlOlN0cmluZ30sdjA9InN0YXJ0U290ZXJBdXRoZW50aWNhdGlvbiIsbTA9e2Zvcm1hdEFyZ3M6e3JlcXVlc3RBdXRoTW9kZXMoZSx0KXtpZighZS5pbmNsdWRlcygiZmluZ2VyUHJpbnQiKSYmIWUuaW5jbHVkZXMoImZhY2lhbCIpKXJldHVybiJyZXF1ZXN0QXV0aE1vZGVzIFx1NTg2Qlx1NTE5OVx1OTUxOVx1OEJFRiJ9fX0sXzA9e3JlcXVlc3RBdXRoTW9kZXM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LGNoYWxsZW5nZTpTdHJpbmcsYXV0aENvbnRlbnQ6U3RyaW5nfSxiMD0ic2NhbkNvZGUiLEUwPXtvbmx5RnJvbUNhbWVyYTpCb29sZWFuLHNjYW5UeXBlOkFycmF5LGF1dG9EZWNvZGVDaGFyU2V0OkJvb2xlYW4sc291bmQ6U3RyaW5nLGF1dG9ab29tOkJvb2xlYW59LHkwPVsiZGVmYXVsdCIsIm5vbmUiXSxTMD17Zm9ybWF0QXJnczp7c291bmQoZSx0KXt5MC5pbmNsdWRlcyhlKXx8KHQuc291bmQ9Im5vbmUiKX0sYXV0b1pvb20oZSx0KXt0eXBlb2YgZT09InVuZGVmaW5lZCImJih0LmF1dG9ab29tPSEwKX19fSx3MD0iZ2V0U3lzdGVtU2V0dGluZyIsQzA9ImdldEFwcEF1dGhvcml6ZVNldHRpbmciLEEwPSJvcGVuQXBwQXV0aG9yaXplU2V0dGluZyIsTzA9ImdldFN0b3JhZ2UiLF9oPXtrZXk6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sVDA9ImdldFN0b3JhZ2VTeW5jIixiaD1be25hbWU6ImtleSIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9XSxQMD0ic2V0U3RvcmFnZSIsSTA9e2tleTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGRhdGE6e3JlcXVpcmVkOiEwfX0sTjA9InNldFN0b3JhZ2VTeW5jIixrMD1be25hbWU6ImtleSIsdHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHtuYW1lOiJkYXRhIixyZXF1aXJlZDohMH1dLEVoPSJyZW1vdmVTdG9yYWdlIixSMD1faCx4MD1iaCxCMD0ic2F2ZUZpbGUiLEwwPXtmb3JtYXRBcmdzOnt0ZW1wRmlsZVBhdGgoZSx0KXt0LnRlbXBGaWxlUGF0aD1qZShlKX19fSxNMD17dGVtcEZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LEQwPSJnZXRTYXZlZEZpbGVMaXN0IixGMD0icmVtb3ZlU2F2ZWRGaWxlIixWMD17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXt0LmZpbGVQYXRoPWplKGUpfX19LCQwPXtmaWxlUGF0aDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxVMD0iZ2V0RmlsZUluZm8iLEgwPXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9amUoZSl9fX0sajA9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LHowPSJnZXRTYXZlZEZpbGVJbmZvIixXMD17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXt0LmZpbGVQYXRoPWplKGUpfX19LEcwPXtmaWxlUGF0aDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxZMD0ib3BlbkRvY3VtZW50IixxMD17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXt0LmZpbGVQYXRoPWplKGUpfX19LEswPXtmaWxlUGF0aDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGZpbGVUeXBlOlN0cmluZ30sSjA9ImhpZGVLZXlib2FyZCIsWjA9InNob3dLZXlib2FyZCIsWDA9ImNob29zZUxvY2F0aW9uIixRMD17a2V5d29yZDpTdHJpbmcsbGF0aXR1ZGU6TnVtYmVyLGxvbmdpdHVkZTpOdW1iZXJ9LGVFPSJnZXRMb2NhdGlvbiIseWg9WyJ3Z3M4NCIsImdjajAyIl0sdEU9e2Zvcm1hdEFyZ3M6e3R5cGUoZSx0KXtlPShlfHwiIikudG9Mb3dlckNhc2UoKSx5aC5pbmRleE9mKGUpPT09LTE/dC50eXBlPXloWzBdOnQudHlwZT1lfSxhbHRpdHVkZShlLHQpe3QuYWx0aXR1ZGU9ZXx8ITF9fX0sbkU9e3R5cGU6U3RyaW5nLGFsdGl0dWRlOkJvb2xlYW59LHJFPSJvcGVuTG9jYXRpb24iLFNoPShlLHQpPT57aWYodD09PXZvaWQgMClyZXR1cm5gJHtlfSBzaG91bGQgbm90IGJlIGVtcHR5LmA7aWYodHlwZW9mIHQhPSJudW1iZXIiKXtsZXQgbj10eXBlb2YgdDtyZXR1cm4gbj1uWzBdLnRvVXBwZXJDYXNlKCkrbi5zdWJzdHJpbmcoMSksYEV4cGVjdGVkIE51bWJlciwgZ290ICR7bn0gd2l0aCB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KHQpfS5gfX0saUU9e2Zvcm1hdEFyZ3M6e2xhdGl0dWRlKGUsdCl7bGV0IG49U2goImxhdGl0dWRlIixlKTtpZihuKXJldHVybiBuO3QubGF0aXR1ZGU9ZX0sbG9uZ2l0dWRlKGUsdCl7bGV0IG49U2goImxvbmdpdHVkZSIsZSk7aWYobilyZXR1cm4gbjt0LmxvbmdpdHVkZT1lfSxzY2FsZShlLHQpe2U9TWF0aC5mbG9vcihlKSx0LnNjYWxlPWU+PTUmJmU8PTE4P2U6MTh9fX0sb0U9e2xhdGl0dWRlOk51bWJlcixsb25naXR1ZGU6TnVtYmVyLHNjYWxlOk51bWJlcixuYW1lOlN0cmluZyxhZGRyZXNzOlN0cmluZ30sYUU9ImNob29zZUltYWdlIixzRT17Zm9ybWF0QXJnczp7Y291bnQoZSx0KXsoIWV8fGU8PTApJiYodC5jb3VudD05KX0sc2l6ZVR5cGUoZSx0KXt0LnNpemVUeXBlPXdyKGUsdmkpfSxzb3VyY2VUeXBlKGUsdCl7dC5zb3VyY2VUeXBlPXdyKGUsYXIpfSxleHRlbnNpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgQXJyYXkmJmUubGVuZ3RoPT09MClyZXR1cm4icGFyYW0gZXh0ZW5zaW9uIHNob3VsZCBub3QgYmUgZW1wdHkuIjtlfHwodC5leHRlbnNpb249WyIqIl0pfX19LGxFPXtjb3VudDpOdW1iZXIsc2l6ZVR5cGU6W0FycmF5LFN0cmluZ10sc291cmNlVHlwZTpBcnJheSxleHRlbnNpb246QXJyYXl9LGNFPSJjaG9vc2VWaWRlbyIsdUU9e2Zvcm1hdEFyZ3M6e3NvdXJjZVR5cGUoZSx0KXt0LnNvdXJjZVR5cGU9d3IoZSxhcil9LGNvbXByZXNzZWQ6ITAsbWF4RHVyYXRpb246NjAsY2FtZXJhOiJiYWNrIixleHRlbnNpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgQXJyYXkmJmUubGVuZ3RoPT09MClyZXR1cm4icGFyYW0gZXh0ZW5zaW9uIHNob3VsZCBub3QgYmUgZW1wdHkuIjtlfHwodC5leHRlbnNpb249WyIqIl0pfX19LGZFPXtzb3VyY2VUeXBlOkFycmF5LGNvbXByZXNzZWQ6Qm9vbGVhbixtYXhEdXJhdGlvbjpOdW1iZXIsY2FtZXJhOlN0cmluZyxleHRlbnNpb246QXJyYXl9LGRFPSJnZXRJbWFnZUluZm8iLGhFPXtmb3JtYXRBcmdzOntzcmMoZSx0KXt0LnNyYz1qZShlKX19fSxnRT17c3JjOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LHBFPSJwcmV2aWV3SW1hZ2UiLHZFPXtmb3JtYXRBcmdzOnt1cmxzKGUsdCl7dC51cmxzPWUubWFwKG49PlcuaXNTdHJpbmcobikmJm4/amUobik6IiIpfSxjdXJyZW50KGUsdCl7dHlwZW9mIGU9PSJudW1iZXIiP3QuY3VycmVudD1lPjAmJmU8dC51cmxzLmxlbmd0aD9lOjA6Vy5pc1N0cmluZyhlKSYmZSYmKHQuY3VycmVudD1qZShlKSl9fX0sbUU9e3VybHM6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LGN1cnJlbnQ6e3R5cGU6W051bWJlcixTdHJpbmddfX0sX0U9ImNsb3NlUHJldmlld0ltYWdlIixiRT0iZ2V0VmlkZW9JbmZvIixFRT17Zm9ybWF0QXJnczp7c3JjKGUsdCl7dC5zcmM9amUoZSl9fX0seUU9e3NyYzp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxTRT0ic2F2ZUltYWdlVG9QaG90b3NBbGJ1bSIsd0U9e2Zvcm1hdEFyZ3M6e2ZpbGVQYXRoKGUsdCl7dC5maWxlUGF0aD1qZShlKX19fSxDRT17ZmlsZVBhdGg6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sQUU9InNhdmVWaWRlb1RvUGhvdG9zQWxidW0iLE9FPXtmb3JtYXRBcmdzOntmaWxlUGF0aChlLHQpe3QuZmlsZVBhdGg9amUoZSl9fX0sVEU9e2ZpbGVQYXRoOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LFBFPSJnZXRSZWNvcmRlck1hbmFnZXIiLElFPSJjb21wcmVzc0ltYWdlIixORT17Zm9ybWF0QXJnczp7c3JjKGUsdCl7dC5zcmM9amUoZSl9fX0sa0U9e3NyYzp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxSRT0iY29tcHJlc3NWaWRlbyIseEU9e2Zvcm1hdEFyZ3M6e3NyYyhlLHQpe3Quc3JjPWplKGUpfX19LEJFPXtzcmM6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxxdWFsaXR5OlN0cmluZyxiaXRyYXRlOk51bWJlcixmcHM6TnVtYmVyLHJlc29sdXRpb246TnVtYmVyfSxMRT0icmVxdWVzdCIsTUU9e0pTT046Impzb24ifSxERT1bInRleHQiLCJhcnJheWJ1ZmZlciJdLEZFPSJ0ZXh0Iix3aD1lbmNvZGVVUklDb21wb25lbnQ7ZnVuY3Rpb24gVkUoZSx0KXtsZXQgbj1lLnNwbGl0KCIjIikscj1uWzFdfHwiIjtuPW5bMF0uc3BsaXQoIj8iKTtsZXQgbz1uWzFdfHwiIjtlPW5bMF07bGV0IGM9by5zcGxpdCgiJiIpLmZpbHRlcihiPT5iKSxoPXt9O2MuZm9yRWFjaChiPT57bGV0IFY9Yi5zcGxpdCgiPSIpO2hbVlswXV09VlsxXX0pO2ZvcihsZXQgYiBpbiB0KWlmKFcuaGFzT3duKHQsYikpe2xldCBWPXRbYl07dHlwZW9mIFY9PSJ1bmRlZmluZWQifHxWPT09bnVsbD9WPSIiOlcuaXNQbGFpbk9iamVjdChWKSYmKFY9SlNPTi5zdHJpbmdpZnkoVikpLGhbd2goYildPXdoKFYpfXJldHVybiBvPU9iamVjdC5rZXlzKGgpLm1hcChiPT5gJHtifT0ke2hbYl19YCkuam9pbigiJiIpLGUrKG8/Ij8iK286IiIpKyhyPyIjIityOiIiKX1sZXQgJEU9e21ldGhvZDpTdHJpbmcsZGF0YTpbT2JqZWN0LFN0cmluZyxBcnJheSxBcnJheUJ1ZmZlcl0sdXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0saGVhZGVyOk9iamVjdCxkYXRhVHlwZTpTdHJpbmcscmVzcG9uc2VUeXBlOlN0cmluZyx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbn0sVUU9e2Zvcm1hdEFyZ3M6e21ldGhvZChlLHQpe3QubWV0aG9kPUNuKChlfHwiIikudG9VcHBlckNhc2UoKSxTcil9LGRhdGEoZSx0KXt0LmRhdGE9ZXx8IiJ9LHVybChlLHQpe3QubWV0aG9kPT09U3JbMF0mJlcuaXNQbGFpbk9iamVjdCh0LmRhdGEpJiZPYmplY3Qua2V5cyh0LmRhdGEpLmxlbmd0aCYmKHQudXJsPVZFKGUsdC5kYXRhKSl9LGhlYWRlcihlLHQpe2xldCBuPXQuaGVhZGVyPWV8fHt9O3QubWV0aG9kIT09U3JbMF0mJihPYmplY3Qua2V5cyhuKS5maW5kKHI9PnIudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiKXx8KG5bIkNvbnRlbnQtVHlwZSJdPSJhcHBsaWNhdGlvbi9qc29uIikpfSxkYXRhVHlwZShlLHQpe3QuZGF0YVR5cGU9KGV8fE1FLkpTT04pLnRvTG93ZXJDYXNlKCl9LHJlc3BvbnNlVHlwZShlLHQpe3QucmVzcG9uc2VUeXBlPShlfHwiIikudG9Mb3dlckNhc2UoKSxERS5pbmRleE9mKHQucmVzcG9uc2VUeXBlKT09PS0xJiYodC5yZXNwb25zZVR5cGU9RkUpfX19LEhFPSJjb25maWdNVExTIixqRT17Y2VydGlmaWNhdGVzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfX0sekU9e2Zvcm1hdEFyZ3M6e2NlcnRpZmljYXRlcyhlKXtpZihlLnNvbWUodD0+Vy50b1Jhd1R5cGUodC5ob3N0KSE9PSJTdHJpbmciKSlyZXR1cm4iXHU1M0MyXHU2NTcwXHU5MTREXHU3RjZFXHU5NTE5XHU4QkVGXHVGRjBDXHU4QkY3XHU3ODZFXHU4QkE0XHU1NDBFXHU5MUNEXHU4QkQ1In19fSxXRT0iZG93bmxvYWRGaWxlIixHRT17Zm9ybWF0QXJnczp7aGVhZGVyKGUsdCl7dC5oZWFkZXI9ZXx8e319fX0sWUU9e3VybDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGhlYWRlcjpPYmplY3QsdGltZW91dDpOdW1iZXJ9LHFFPSJ1cGxvYWRGaWxlIixLRT17Zm9ybWF0QXJnczp7ZmlsZVBhdGgoZSx0KXtlJiYodC5maWxlUGF0aD1qZShlKSl9LGhlYWRlcihlLHQpe3QuaGVhZGVyPWV8fHt9fSxmb3JtRGF0YShlLHQpe3QuZm9ybURhdGE9ZXx8e319fX0sSkU9e3VybDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGZpbGVzOkFycmF5LGZpbGVQYXRoOlN0cmluZyxuYW1lOlN0cmluZyxoZWFkZXI6T2JqZWN0LGZvcm1EYXRhOk9iamVjdCx0aW1lb3V0Ok51bWJlcn0sWkU9ImNvbm5lY3RTb2NrZXQiLFhFPXtmb3JtYXRBcmdzOntoZWFkZXIoZSx0KXt0LmhlYWRlcj1lfHx7fX0sbWV0aG9kKGUsdCl7dC5tZXRob2Q9Q24oKGV8fCIiKS50b1VwcGVyQ2FzZSgpLFNyKX0scHJvdG9jb2xzKGUsdCl7Vy5pc1N0cmluZyhlKSYmKHQucHJvdG9jb2xzPVtlXSl9fX0sUUU9e3VybDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGhlYWRlcjp7dHlwZTpPYmplY3R9LG1ldGhvZDpTdHJpbmcscHJvdG9jb2xzOltBcnJheSxTdHJpbmddfSxleT0ic2VuZFNvY2tldE1lc3NhZ2UiLHR5PXtkYXRhOltTdHJpbmcsQXJyYXlCdWZmZXJdfSxueT0iY2xvc2VTb2NrZXQiLHJ5PXtjb2RlOk51bWJlcixyZWFzb246U3RyaW5nfSxpeT0ic3RhcnRMb2NhdGlvblVwZGF0ZSIsQ2g9Im9uTG9jYXRpb25DaGFuZ2UiLG95PSJzdG9wTG9jYXRpb25VcGRhdGUiLGF5PSJvZmZMb2NhdGlvbkNoYW5nZSIsc3k9Im9mZkxvY2F0aW9uQ2hhbmdlRXJyb3IiLEFoPSJvbkxvY2F0aW9uQ2hhbmdlRXJyb3IiLE9oPVsid2dzODQiLCJnY2owMiJdLGx5PXt0eXBlOlN0cmluZ30sY3k9e2Zvcm1hdEFyZ3M6e3R5cGUoZSx0KXtlPShlfHwiIikudG9Mb3dlckNhc2UoKSxPaC5pbmRleE9mKGUpPT09LTE/dC50eXBlPU9oWzFdOnQudHlwZT1lfX19O2Z1bmN0aW9uIHV5KGUpe2lmKCFXLmlzU3RyaW5nKGUpKXJldHVybiBlO2xldCB0PWUuaW5kZXhPZigiPyIpO2lmKHQ9PT0tMSlyZXR1cm4gZTtsZXQgbj1lLnNsaWNlKHQrMSkudHJpbSgpLnJlcGxhY2UoL14oXD98I3wmKS8sIiIpO2lmKCFuKXJldHVybiBlO2U9ZS5zbGljZSgwLHQpO2xldCByPVtdO3JldHVybiBuLnNwbGl0KCImIikuZm9yRWFjaChvPT57bGV0IGM9by5yZXBsYWNlKC9cKy9nLCIgIikuc3BsaXQoIj0iKSxoPWMuc2hpZnQoKSxiPWMubGVuZ3RoPjA/Yy5qb2luKCI9Iik6IiI7ci5wdXNoKGgrIj0iK2VuY29kZVVSSUNvbXBvbmVudChiKSl9KSxyLmxlbmd0aD9lKyI/IityLmpvaW4oIiYiKTplfWxldCBmeT1bInNsaWRlLWluLXJpZ2h0Iiwic2xpZGUtaW4tbGVmdCIsInNsaWRlLWluLXRvcCIsInNsaWRlLWluLWJvdHRvbSIsImZhZGUtaW4iLCJ6b29tLW91dCIsInpvb20tZmFkZS1vdXQiLCJwb3AtaW4iLCJub25lIl0sZHk9WyJzbGlkZS1vdXQtcmlnaHQiLCJzbGlkZS1vdXQtbGVmdCIsInNsaWRlLW91dC10b3AiLCJzbGlkZS1vdXQtYm90dG9tIiwiZmFkZS1vdXQiLCJ6b29tLWluIiwiem9vbS1mYWRlLWluIiwicG9wLW91dCIsIm5vbmUiXSx3bD17dXJsOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LEZ1PSJuYXZpZ2F0ZVRvIixWdT0icmVkaXJlY3RUbyIsVGg9InJlTGF1bmNoIixJYz0ic3dpdGNoVGFiIixoeT0ibmF2aWdhdGVCYWNrIiwkdT0icHJlbG9hZFBhZ2UiLFBoPSJ1blByZWxvYWRQYWdlIixneT1XLmV4dGVuZCh7fSx3bCxJaChmeSkpLHB5PVcuZXh0ZW5kKHtkZWx0YTp7dHlwZTpOdW1iZXJ9fSxJaChkeSkpLHZ5PXdsLG15PXdsLF95PXdsLGJ5PXdsLEV5PXdsLHl5PWtjKEZ1KSxTeT1rYyhWdSksd3k9a2MoVGgpLEN5PWtjKEljKSxBeT17Zm9ybWF0QXJnczp7ZGVsdGEoZSx0KXtlPXBhcnNlSW50KGUrIiIpfHwxLHQuZGVsdGE9TWF0aC5taW4oUG4oKS5sZW5ndGgtMSxlKX19fTtmdW5jdGlvbiBJaChlKXtyZXR1cm57YW5pbWF0aW9uVHlwZTp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yKHQpe2lmKHQmJmUuaW5kZXhPZih0KT09PS0xKXJldHVybiJgIit0KyJgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGBhbmltYXRpb25UeXBlYCAoc3VwcG9ydGVkIHZhbHVlcyBhcmU6IGAiK2Uuam9pbigiYHxgIikrImApIn19LGFuaW1hdGlvbkR1cmF0aW9uOnt0eXBlOk51bWJlcn19fWxldCBOYztmdW5jdGlvbiBPeSgpe05jPSIifWZ1bmN0aW9uIGtjKGUpe3JldHVybntmb3JtYXRBcmdzOnt1cmw6VHkoZSl9LGJlZm9yZUFsbDpPeX19ZnVuY3Rpb24gVHkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4scil7aWYoIW4pcmV0dXJuJ01pc3NpbmcgcmVxdWlyZWQgYXJnczogInVybCInO249Qm8obik7bGV0IG89bi5zcGxpdCgiPyIpWzBdLGM9amkobywhMCk7aWYoIWMpcmV0dXJuInBhZ2UgYCIrbisiYCBpcyBub3QgZm91bmQiO2lmKGU9PT1GdXx8ZT09PVZ1KXtpZihjLm1ldGEuaXNUYWJCYXIpcmV0dXJuYGNhbiBub3QgJHtlfSBhIHRhYmJhciBwYWdlYH1lbHNlIGlmKGU9PT1JYyYmIWMubWV0YS5pc1RhYkJhcilyZXR1cm4iY2FuIG5vdCBzd2l0Y2ggdG8gbm8tdGFiQmFyIHBhZ2UiO2lmKChlPT09SWN8fGU9PT0kdSkmJmMubWV0YS5pc1RhYkJhciYmci5vcGVuVHlwZSE9PSJhcHBMYXVuY2giJiYobj1vKSxjLm1ldGEuaXNFbnRyeSYmKG49bi5yZXBsYWNlKGMuYWxpYXMsIi8iKSksci51cmw9dXkobiksZSE9PVBoKXtpZihlPT09JHUpe2lmKCFjLm1ldGEuaXNOVnVlKXJldHVybiJjYW4gbm90IHByZWxvYWQgdnVlIHBhZ2UiO2lmKGMubWV0YS5pc1RhYkJhcil7bGV0IGg9UG4oKSxiPWMucGF0aC5zbGljZSgxKTtpZihoLmZpbmQoVj0+Vi5yb3V0ZT09PWIpKXJldHVybiJ0YWJCYXIgcGFnZSBgIitiKyJgIGFscmVhZHkgZXhpc3RzIn1yZXR1cm59aWYoTmM9PT1uJiZyLm9wZW5UeXBlIT09ImFwcExhdW5jaCIpcmV0dXJuYCR7TmN9IGxvY2tlZGA7Qi5yZWFkeSYmKE5jPW4pfX19bGV0IFB5PSJoaWRlTG9hZGluZyIsSXk9ImhpZGVUb2FzdCIsTmg9ImxvYWRGb250RmFjZSIsTnk9e2ZhbWlseTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHNvdXJjZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGRlc2M6T2JqZWN0fSxreT1bIiNmZmZmZmYiLCIjMDAwMDAwIl0sUnk9InNldE5hdmlnYXRpb25CYXJDb2xvciIseHk9e2Zvcm1hdEFyZ3M6e2FuaW1hdGlvbihlLHQpe2V8fChlPXtkdXJhdGlvbjowLHRpbWluZ0Z1bmM6ImxpbmVhciJ9KSx0LmFuaW1hdGlvbj17ZHVyYXRpb246ZS5kdXJhdGlvbnx8MCx0aW1pbmdGdW5jOmUudGltaW5nRnVuY3x8ImxpbmVhciJ9fX19LEJ5PXtmcm9udENvbG9yOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMCx2YWxpZGF0b3IoZSl7aWYoa3kuaW5kZXhPZihlKT09PS0xKXJldHVybmBpbnZhbGlkIGZyb250Q29sb3IgIiR7ZX0iYH19LGJhY2tncm91bmRDb2xvcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGFuaW1hdGlvbjpPYmplY3R9LEx5PSJzZXROYXZpZ2F0aW9uQmFyVGl0bGUiLE15PXt0aXRsZTp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxEeT0ic2hvd05hdmlnYXRpb25CYXJMb2FkaW5nIixGeT0iaGlkZU5hdmlnYXRpb25CYXJMb2FkaW5nIixraD0icGFnZVNjcm9sbFRvIixWeT17c2Nyb2xsVG9wOk51bWJlcixzZWxlY3RvcjpTdHJpbmcsZHVyYXRpb246TnVtYmVyfSwkeT17Zm9ybWF0QXJnczp7ZHVyYXRpb246MzAwfX0sVXk9InNob3dBY3Rpb25TaGVldCIsSHk9e2l0ZW1MaXN0Ont0eXBlOkFycmF5LHJlcXVpcmVkOiEwfSx0aXRsZTpTdHJpbmcsaXRlbUNvbG9yOlN0cmluZyxwb3BvdmVyOk9iamVjdH0sank9e2Zvcm1hdEFyZ3M6e2l0ZW1Db2xvcjoiIzAwMCJ9fSx6eT0ic2hvd0xvYWRpbmciLFd5PXt0aXRsZTpTdHJpbmcsbWFzazpCb29sZWFufSxHeT17Zm9ybWF0QXJnczp7dGl0bGU6IiIsbWFzazohMX19LFl5PSJzaG93TW9kYWwiLHF5PXt0aXRsZTpTdHJpbmcsY29udGVudDpTdHJpbmcsc2hvd0NhbmNlbDpCb29sZWFuLGNhbmNlbFRleHQ6U3RyaW5nLGNhbmNlbENvbG9yOlN0cmluZyxjb25maXJtVGV4dDpTdHJpbmcsY29uZmlybUNvbG9yOlN0cmluZ30sS3k9e2JlZm9yZUludm9rZSgpe3ooKX0sZm9ybWF0QXJnczp7dGl0bGU6IiIsY29udGVudDoiIixwbGFjZWhvbGRlclRleHQ6IiIsc2hvd0NhbmNlbDohMCxlZGl0YWJsZTohMSxjYW5jZWxUZXh0KGUsdCl7aWYoIVcuaGFzT3duKHQsImNhbmNlbFRleHQiKSl7bGV0e3Q6bn09c2UoKTt0LmNhbmNlbFRleHQ9bigidW5pLnNob3dNb2RhbC5jYW5jZWwiKX19LGNhbmNlbENvbG9yOiIjMDAwIixjb25maXJtVGV4dChlLHQpe2lmKCFXLmhhc093bih0LCJjb25maXJtVGV4dCIpKXtsZXR7dDpufT1zZSgpO3QuY29uZmlybVRleHQ9bigidW5pLnNob3dNb2RhbC5jb25maXJtIil9fSxjb25maXJtQ29sb3I6Wi5QUklNQVJZX0NPTE9SfX0sSnk9InNob3dUb2FzdCIsWnk9WyJzdWNjZXNzIiwibG9hZGluZyIsIm5vbmUiLCJlcnJvciJdLFh5PXt0aXRsZTpTdHJpbmcsaWNvbjpTdHJpbmcsaW1hZ2U6U3RyaW5nLGR1cmF0aW9uOk51bWJlcixtYXNrOkJvb2xlYW59LFF5PXtmb3JtYXRBcmdzOnt0aXRsZToiIixpY29uKGUsdCl7dC5pY29uPUNuKGUsWnkpfSxpbWFnZShlLHQpe2U/dC5pbWFnZT1qZShlKTp0LmltYWdlPSIifSxkdXJhdGlvbjoxNTAwLG1hc2s6ITF9fSxlUz0ic3RhcnRQdWxsRG93blJlZnJlc2giLHRTPSJzdG9wUHVsbERvd25SZWZyZXNoIixlYz17aW5kZXg6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfX0sUHM9e2JlZm9yZUludm9rZSgpe2xldCBlPWlzKCk7aWYoZSYmIWUuaXNUYWJCYXIpcmV0dXJuIm5vdCBUYWJCYXIgcGFnZSJ9LGZvcm1hdEFyZ3M6e2luZGV4KGUpe2lmKCFCLnRhYkJhci5saXN0W2VdKXJldHVybiJ0YWJiYXIgaXRlbSBub3QgZm91bmQifX19LG5TPSJzZXRUYWJCYXJJdGVtIixyUz1XLmV4dGVuZCh7dGV4dDpTdHJpbmcsaWNvblBhdGg6U3RyaW5nLHNlbGVjdGVkSWNvblBhdGg6U3RyaW5nLHBhZ2VQYXRoOlN0cmluZ30sZWMpLGlTPXtiZWZvcmVJbnZva2U6UHMuYmVmb3JlSW52b2tlLGZvcm1hdEFyZ3M6Vy5leHRlbmQoe3BhZ2VQYXRoKGUsdCl7ZSYmKHQucGFnZVBhdGg9Wi5yZW1vdmVMZWFkaW5nU2xhc2goZSkpfX0sUHMuZm9ybWF0QXJncyl9LG9TPSJzZXRUYWJCYXJTdHlsZSIsYVM9e2NvbG9yOlN0cmluZyxzZWxlY3RlZENvbG9yOlN0cmluZyxiYWNrZ3JvdW5kQ29sb3I6U3RyaW5nLGJhY2tncm91bmRJbWFnZTpTdHJpbmcsYmFja2dyb3VuZFJlcGVhdDpTdHJpbmcsYm9yZGVyU3R5bGU6U3RyaW5nfSxzUz0vXihsaW5lYXJ8cmFkaWFsKS1ncmFkaWVudFwoLis/XCk7PyQvLGxTPXtiZWZvcmVJbnZva2U6UHMuYmVmb3JlSW52b2tlLGZvcm1hdEFyZ3M6e2JhY2tncm91bmRJbWFnZShlLHQpe2UmJiFzUy50ZXN0KGUpJiYodC5iYWNrZ3JvdW5kSW1hZ2U9amUoZSkpfSxib3JkZXJTdHlsZShlLHQpe2UmJih0LmJvcmRlclN0eWxlPWU9PT0id2hpdGUiPyJ3aGl0ZSI6ImJsYWNrIil9fX0sY1M9ImhpZGVUYWJCYXIiLFJoPXthbmltYXRpb246Qm9vbGVhbn0sdVM9InNob3dUYWJCYXIiLGZTPVJoLGRTPSJoaWRlVGFiQmFyUmVkRG90IixoUz1lYyxnUz1QcyxwUz0ic2hvd1RhYkJhclJlZERvdCIsdlM9ZWMsbVM9UHMsX1M9InJlbW92ZVRhYkJhckJhZGdlIixiUz1lYyxFUz1Qcyx5Uz0ic2V0VGFiQmFyQmFkZ2UiLFNTPVcuZXh0ZW5kKHt0ZXh0Ont0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGVjKSx3Uz17YmVmb3JlSW52b2tlOlBzLmJlZm9yZUludm9rZSxmb3JtYXRBcmdzOlcuZXh0ZW5kKHt0ZXh0KGUsdCl7Wi5nZXRMZW4oZSk+PTQmJih0LnRleHQ9Ii4uLiIpfX0sUHMuZm9ybWF0QXJncyl9LENTPSJnZXRQcm92aWRlciIsQVM9e3NlcnZpY2U6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfX0sT1M9ImxvZ2luIixUUz17cHJvdmlkZXI6U3RyaW5nLHNjb3BlczpbU3RyaW5nLEFycmF5XSx0aW1lb3V0Ok51bWJlcix1bml2ZXJpZnlTdHlsZTpPYmplY3Qsb25seUF1dGhvcml6ZTpCb29sZWFufSxQUz0iZ2V0VXNlckluZm8iLElTPXtwcm92aWRlcjpTdHJpbmcsd2l0aENyZWRlbnRpYWxzOkJvb2xlYW4sdGltZW91dDpOdW1iZXIsbGFuZzpTdHJpbmd9LE5TPSJnZ2V0VXNlclByb2ZpbGVnZXRVc2VyUHJvZmlsZSIsa1M9e3Byb3ZpZGVyOlN0cmluZyx3aXRoQ3JlZGVudGlhbHM6Qm9vbGVhbix0aW1lb3V0Ok51bWJlcixsYW5nOlN0cmluZ30sUlM9InByZUxvZ2luIix4Uz17VU5JVkVSSUZZOiJ1bml2ZXJpZnkifSxCUz17Zm9ybWF0QXJnczp7cHJvdmlkZXIoZSx0KXtpZihPYmplY3QudmFsdWVzKHhTKS5pbmRleE9mKFN0cmluZyhlKSk8MClyZXR1cm4icHJvdmlkZXIgZXJyb3IifX19LExTPXtwcm92aWRlcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxNUz0iY2xvc2VBdXRoVmlldyIsRFM9ImdldENoZWNrQm94U3RhdGUiLEZTPSJnZXRVbml2ZXJpZnlNYW5hZ2VyIixWUz0ic2hhcmUiLHhoPVsiV1hTY2VuZVNlc3Npb24iLCJXWFNjZW5lVGltZWxpbmUiLCJXWFNjZW5lRmF2b3JpdGUiXSwkUz17Zm9ybWF0QXJnczp7c2NlbmUoZSx0KXtsZXR7cHJvdmlkZXI6bixvcGVuQ3VzdG9tZXJTZXJ2aWNlQ2hhdDpyfT10O2lmKG49PT0id2VpeGluIiYmIXImJighZXx8IXhoLmluY2x1ZGVzKGUpKSlyZXR1cm5gXHU1MjA2XHU0RUFCXHU1MjMwXHU1RkFFXHU0RkUxXHU2NUY2XHVGRjBDc2NlbmVcdTVGQzVcdTk4N0JcdTRFM0FcdTRFRTVcdTRFMEJcdTUxNzZcdTRFMkRcdTRFMDBcdTRFMkFcdUZGMUEke3hoLmpvaW4oIlx1MzAwMSIpfWB9LHN1bW1hcnkoZSx0KXtpZih0LnR5cGU9PT0xJiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU3RUFGXHU2NTg3XHU2NzJDXHU2NUY2XHVGRjBDc3VtbWFyeVx1NUZDNVx1NTg2QiJ9LGhyZWYoZSx0KXtpZih0LnR5cGU9PT0wJiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU1NkZFXHU2NTg3XHU2NUY2XHVGRjBDaHJlZlx1NUZDNVx1NTg2QiJ9LGltYWdlVXJsKGUsdCl7aWYoWzAsMiw1XS5pbmNsdWRlcyhOdW1iZXIodC50eXBlKSkmJiFlKXJldHVybiJcdTUyMDZcdTRFQUJcdTU2RkVcdTY1ODdcdTMwMDFcdTdFQUZcdTU2RkVcdTcyNDdcdTMwMDFcdTVDMEZcdTdBMEJcdTVFOEZcdTY1RjZcdUZGMENpbWFnZVVybFx1NUZDNVx1NTg2Qlx1RkYwQ1x1NjNBOFx1ODM1MFx1NEY3Rlx1NzUyOFx1NUMwRlx1NEU4RTIwS2JcdTc2ODRcdTU2RkVcdTcyNDcifSxtZWRpYVVybChlLHQpe2lmKFszLDRdLmluY2x1ZGVzKE51bWJlcih0LnR5cGUpKSYmIWUpcmV0dXJuIlx1NTIwNlx1NEVBQlx1OTdGM1x1NEU1MFx1MzAwMVx1ODlDNlx1OTg5MVx1NjVGNlx1RkYwQ21lZGlhVXJsXHU1RkM1XHU1ODZCIn0sbWluaVByb2dyYW0oZSx0KXtpZih0LnR5cGU9PT01JiYhZSlyZXR1cm4iXHU1MjA2XHU0RUFCXHU1QzBGXHU3QTBCXHU1RThGXHU2NUY2XHVGRjBDbWluaVByb2dyYW1cdTVGQzVcdTU4NkIifSxjb3JwaWQoZSx0KXtpZih0Lm9wZW5DdXN0b21lclNlcnZpY2VDaGF0JiYhZSlyZXR1cm4iXHU0RjdGXHU3NTI4XHU2MjUzXHU1RjAwXHU1QkEyXHU2NzBEXHU1MjlGXHU4MEZEXHU2NUY2IGNvcnBpZCBcdTVGQzVcdTU4NkIifSxjdXN0b21lclVybChlLHQpe2lmKHQub3BlbkN1c3RvbWVyU2VydmljZUNoYXQmJiFlKXJldHVybiJcdTRGN0ZcdTc1MjhcdTYyNTNcdTVGMDBcdTVCQTJcdTY3MERcdTUyOUZcdTgwRkRcdTY1RjYgY3VzdG9tZXJVcmwgXHU1RkM1XHU1ODZCIn19fSxVUz17cHJvdmlkZXI6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx0eXBlOk51bWJlcix0aXRsZTpTdHJpbmcsc2NlbmU6U3RyaW5nLHN1bW1hcnk6U3RyaW5nLGhyZWY6U3RyaW5nLGltYWdlVXJsOlN0cmluZyxtZWRpYVVybDpTdHJpbmcsbWluaVByb2dyYW06T2JqZWN0fSxIUz0ic2hhcmVXaXRoU3lzdGVtIixCaD1bInRleHQiLCJpbWFnZSJdLGpTPXtmb3JtYXRBcmdzOnt0eXBlKGUsdCl7aWYoZSYmIUJoLmluY2x1ZGVzKGUpKXJldHVybiJcdTUyMDZcdTRFQUJcdTUzQzJcdTY1NzAgdHlwZSBcdTRFMERcdTZCNjNcdTc4NkVcdTMwMDJcdTUzRUFcdTY1MkZcdTYzMDF0ZXh0XHUzMDAxaW1hZ2UiO3QudHlwZT1DbihlLEJoKX19fSx6Uz17dHlwZTpTdHJpbmcsc3VtbWFyeTpTdHJpbmcsaHJlZjpTdHJpbmcsaW1hZ2VVcmw6U3RyaW5nfSxXUz0icmVxdWVzdFBheW1lbnQiLEdTPXtwcm92aWRlcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LG9yZGVySW5mbzp7dHlwZTpbU3RyaW5nLE9iamVjdF0scmVxdWlyZWQ6ITB9LHRpbWVTdGFtcDpTdHJpbmcsbm9uY2VTdHI6U3RyaW5nLHBhY2thZ2U6U3RyaW5nLHNpZ25UeXBlOlN0cmluZyxwYXlTaWduOlN0cmluZ30sWVM9ImNyZWF0ZVB1c2hNZXNzYWdlIixxUz17Zm9ybWF0QXJnczp7Y29udGVudChlKXtpZighZSlyZXR1cm4iY29udGVudCBpcyByZXF1aXJlZCJ9fX0sS1M9ImNyZWF0ZVJld2FyZGVkVmlkZW9BZCIsSlM9e2Zvcm1hdEFyZ3M6e2FkcGlkOiIiLGFkVW5pdElkOiIifX0sWlM9e2FkcGlkOlN0cmluZyxhZFVuaXRJZDpTdHJpbmd9LFhTPSJjcmVhdGVGdWxsU2NyZWVuVmlkZW9BZCIsUVM9e2Zvcm1hdEFyZ3M6e2FkcGlkOiIifX0sZXc9e2FkcGlkOlN0cmluZ30sdHc9ImNyZWF0ZUludGVyc3RpdGlhbEFkIixudz17Zm9ybWF0QXJnczp7YWRwaWQ6IiIsYWRVbml0SWQ6IiJ9fSxydz17YWRwaWQ6U3RyaW5nLGFkVW5pdElkOlN0cmluZ30saXc9ImNyZWF0ZUludGVyYWN0aXZlQWQiLG93PXtmb3JtYXRBcmdzOnthZHBpZChlLHQpe2lmKCFlKXJldHVybiJhZHBpZCBzaG91bGQgbm90IGJlIGVtcHR5LiI7ZSYmKHQuYWRwaWQ9ZSl9LHByb3ZpZGVyKGUsdCl7aWYoIWUpcmV0dXJuInByb3ZpZGVyIHNob3VsZCBub3QgYmUgZW1wdHkuIjtlJiYodC5wcm92aWRlcj1lKX19fSxhdz17YWRwaWQ6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxwcm92aWRlcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fTtmdW5jdGlvbiBYcyhlLHQpe3JldHVybiBmdW5jdGlvbihyKXtkZWxldGUgci5jb2RlLGRlbGV0ZSByLm1lc3NhZ2UsVy5pc0Z1bmN0aW9uKHQpJiYocj10KHIpKSxlKHIpfX1mdW5jdGlvbiBmcihlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyPXJ8fHt9LHQ9ci5tZXNzYWdlfHx0fHwiIixkZWxldGUgci5tZXNzYWdlLGUodCxXLmV4dGVuZCh7Y29kZTowfSxyKSl9fWZ1bmN0aW9uIENsKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZSgpKGZ1bmN0aW9uKHIpe3ImJihkZWxldGUgci5jb2RlLGRlbGV0ZSByLm1lc3NhZ2UpLHN0Lmludm9rZU9uQ2FsbGJhY2sodCxyKX0pfX1mdW5jdGlvbiBmaShlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIse3Jlc29sdmU6byxyZWplY3Q6Y30pe2UoKShXLmV4dGVuZCh7fSxXLmlzRnVuY3Rpb24odCk/dChyKTpyLHtzdWNjZXNzOlhzKG8sbiksZmFpbDpmcihjKX0pKX19ZnVuY3Rpb24gdGMoZT0iIil7aWYoIShCLnRhYkJhciYmVy5pc0FycmF5KEIudGFiQmFyLmxpc3QpKSlyZXR1cm4hMTt0cnl7aWYoIWUpe2xldCBuPVBuKCk7aWYoIW4ubGVuZ3RoKXJldHVybiExO2xldCByPW5bbi5sZW5ndGgtMV07cmV0dXJuIHI/ci4kcGFnZS5tZXRhLmlzVGFiQmFyOiExfS9eXC8vLnRlc3QoZSl8fChlPVouYWRkTGVhZGluZ1NsYXNoKGUpKTtsZXQgdD1qaShlKTtyZXR1cm4gdCYmdC5tZXRhLmlzVGFiQmFyfWNhdGNoKHQpe31yZXR1cm4hMX1sZXQgeWE9Il9fVFlQRSIsc3c9InVuaS1zdG9yYWdlLWtleXMiO2Z1bmN0aW9uIFV1KGUpe2xldCB0PVsib2JqZWN0Iiwic3RyaW5nIiwibnVtYmVyIiwiYm9vbGVhbiIsInVuZGVmaW5lZCJdO3RyeXtsZXQgbj1XLmlzU3RyaW5nKGUpP0pTT04ucGFyc2UoZSk6ZSxyPW4udHlwZTtpZih0LmluZGV4T2Yocik+PTApe2xldCBvPU9iamVjdC5rZXlzKG4pO2lmKG8ubGVuZ3RoPT09MiYmImRhdGEiaW4gbil7aWYodHlwZW9mIG4uZGF0YT09PXIpcmV0dXJuIG4uZGF0YTtpZihyPT09Im9iamVjdCImJi9eXGR7NH0tXGR7Mn0tXGR7Mn1UXGR7Mn1cOlxkezJ9XDpcZHsyfVwuXGR7M31aJC8udGVzdChuLmRhdGEpKXJldHVybiBuZXcgRGF0ZShuLmRhdGEpfWVsc2UgaWYoby5sZW5ndGg9PT0xKXJldHVybiIifX1jYXRjaChuKXt9fWxldCBsdz1NdChOMCwoZSx0KT0+e2xldCBuPXR5cGVvZiB0LHI9bj09PSJzdHJpbmciP3Q6SlNPTi5zdHJpbmdpZnkoe3R5cGU6bixkYXRhOnR9KTt0cnl7bj09PSJzdHJpbmciJiZVdShyKSE9PXZvaWQgMD9zLnN0b3JhZ2Uuc2V0SXRlbShlK3lhLG4pOnMuc3RvcmFnZS5yZW1vdmVJdGVtKGUreWEpLHMuc3RvcmFnZS5zZXRJdGVtKGUscil9Y2F0Y2gobyl7fX0sazApLGN3PU9lKFAwLCh7a2V5OmUsZGF0YTp0fSx7cmVzb2x2ZTpuLHJlamVjdDpyfSk9PntsZXQgbz10eXBlb2YgdCxjPW89PT0ic3RyaW5nIj90OkpTT04uc3RyaW5naWZ5KHt0eXBlOm8sZGF0YTp0fSk7dHJ5e2xldCBoPXMuc3RvcmFnZTtvPT09InN0cmluZyImJlV1KGMpIT09dm9pZCAwP2guc2V0SXRlbUFzeW5jKGUreWEsbywoKT0+e30pOmgucmVtb3ZlSXRlbUFzeW5jKGUreWEsKCk9Pnt9KSxoLnNldEl0ZW1Bc3luYyhlLGMsbixmcihyKSl9Y2F0Y2goaCl7cihoLm1lc3NhZ2UpfX0sSTApO2Z1bmN0aW9uIEh1KGUsdCl7bGV0IG49dDtpZihlIT09InN0cmluZyJ8fGU9PT0ic3RyaW5nIiYmdD09PSd7InR5cGUiOiJ1bmRlZmluZWQifScpdHJ5e2xldCByPUpTT04ucGFyc2UodCksbz1VdShyKTtpZihvIT09dm9pZCAwKW49bztlbHNlIGlmKGUmJihuPXIsVy5pc1N0cmluZyhyKSkpe3I9SlNPTi5wYXJzZShyKTtsZXQgYz10eXBlb2YgcjtjPT09Im51bWJlciImJmU9PT0iZGF0ZSI/bj1uZXcgRGF0ZShyKTpjPT09KFsibnVsbCIsImFycmF5Il0uaW5kZXhPZihlKTwwP2U6Im9iamVjdCIpJiYobj1yKX19Y2F0Y2gocil7fXJldHVybiBufWxldCB1dz1NdChUMCxlPT57bGV0IHQ9cy5zdG9yYWdlLmdldEl0ZW0oZSkscj0ocy5zdG9yYWdlLmdldEl0ZW0oZSt5YSl8fCIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBXLmlzU3RyaW5nKHQpP0h1KHIsdCk6IiJ9LGJoKSxmdz1PZShPMCwoe2tleTplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1zLnN0b3JhZ2U7ci5nZXRJdGVtQXN5bmMoZSxmdW5jdGlvbihvKXtyLmdldEl0ZW1Bc3luYyhlK3lhLGZ1bmN0aW9uKGMpe2xldCBiPShjLmRhdGF8fCIiKS50b0xvd2VyQ2FzZSgpO3Qoe2RhdGE6SHUoYixvLmRhdGEpfSl9LGZ1bmN0aW9uKCl7dCh7ZGF0YTpIdSgiIixvLmRhdGEpfSl9KX0sZnIobikpfSxfaCksZHc9TXQoRWgsZT0+e3Muc3RvcmFnZS5yZW1vdmVJdGVtKGUreWEpLHMuc3RvcmFnZS5yZW1vdmVJdGVtKGUpfSx4MCksaHc9T2UoRWgsKHtrZXk6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57cy5zdG9yYWdlLnJlbW92ZUl0ZW1Bc3luYyhlK3lhLCgpPT57fSkscy5zdG9yYWdlLnJlbW92ZUl0ZW1Bc3luYyhlLHQsZnIobikpfSxSMCksZ3c9TXQoImNsZWFyU3RvcmFnZVN5bmMiLCgpPT57cy5zdG9yYWdlLmNsZWFyKCl9KSxwdz1PZSgiY2xlYXJTdG9yYWdlIiwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLnN0b3JhZ2UuY2xlYXJBc3luYyh0LGZyKG4pKX0pLExoPU10KCJnZXRTdG9yYWdlSW5mb1N5bmMiLCgpPT57bGV0IGU9cy5zdG9yYWdlLmdldExlbmd0aCgpfHwwLHQ9W10sbj0wO2ZvcihsZXQgcj0wO3I8ZTtyKyspe2xldCBvPXMuc3RvcmFnZS5rZXkocik7aWYobyE9PXN3JiYoby5pbmRleE9mKHlhKTwwfHxvLmluZGV4T2YoeWEpK3lhLmxlbmd0aCE9PW8ubGVuZ3RoKSl7bGV0IGM9cy5zdG9yYWdlLmdldEl0ZW0obyk7bis9by5sZW5ndGgrYy5sZW5ndGgsdC5wdXNoKG8pfX1yZXR1cm57a2V5czp0LGN1cnJlbnRTaXplOk1hdGguY2VpbChuKjIvMTAyNCksbGltaXRTaXplOk51bWJlci5NQVhfVkFMVUV9fSksdnc9T2UoImdldFN0b3JhZ2VJbmZvIiwoZSx7cmVzb2x2ZTp0fSk9Pnt0KExoKCkpfSksbXc9T2UoVTAsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57cy5pby5nZXRGaWxlSW5mbyhXLmV4dGVuZChlLHtzdWNjZXNzOlhzKHQpLGZhaWw6ZnIobil9KSl9LGowLEgwKSxfdz0wLE1oPSJ1bmlhcHBfc2F2ZSIsYnc9YF9kb2MvJHtNaH1gO2Z1bmN0aW9uIEV3KGUsdCl7dD10fHxmdW5jdGlvbigpe30scy5pby5yZXF1ZXN0RmlsZVN5c3RlbShzLmlvLlBSSVZBVEVfRE9DLG49PntuLnJvb3QuZ2V0RGlyZWN0b3J5KE1oLHtjcmVhdGU6ITB9LGUsdCl9LHQpfWxldCB5dz1PZShCMCwoe3RlbXBGaWxlUGF0aDplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1mcihuKSxvPWAke0RhdGUubm93KCl9JHtfdysrfSR7SmEoZSl9YDtzLmlvLnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoZSxjPT57RXcoaD0+e2MuY29weVRvKGgsbywoKT0+e2xldCBiPWJ3KyIvIitvO3Qoe3NhdmVkRmlsZVBhdGg6Yn0pfSxyKX0scil9LHIpfSxNMCxMMCksU3c9InVuaWFwcF9zYXZlIjtmdW5jdGlvbiB3dyhlLHQpe3Q9dHx8ZnVuY3Rpb24oKXt9LHMuaW8ucmVxdWVzdEZpbGVTeXN0ZW0ocy5pby5QUklWQVRFX0RPQyxuPT57bi5yb290LmdldERpcmVjdG9yeShTdyx7Y3JlYXRlOiEwfSxlLHQpfSx0KX1sZXQgQ3c9T2UoRDAsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9ZnIobik7d3cobz0+e3ZhciBjPW8uY3JlYXRlUmVhZGVyKCksaD1bXTtjLnJlYWRFbnRyaWVzKGI9PntiJiZiLmxlbmd0aD9iLmZvckVhY2goVj0+e1YuZ2V0TWV0YWRhdGEoVD0+e2gucHVzaCh7ZmlsZVBhdGg6cy5pby5jb252ZXJ0QWJzb2x1dGVGaWxlU3lzdGVtKFYuZnVsbFBhdGgpLGNyZWF0ZVRpbWU6VC5tb2RpZmljYXRpb25UaW1lLmdldFRpbWUoKSxzaXplOlQuc2l6ZX0pLGgubGVuZ3RoPT09Yi5sZW5ndGgmJnQoe2ZpbGVMaXN0Omh9KX0sciwhMSl9KTp0KHtmaWxlTGlzdDpofSl9LHIpfSxyKX0pLEF3PU9lKHowLCh7ZmlsZVBhdGg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9ZnIobik7cy5pby5yZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMKGUsbz0+e28uZ2V0TWV0YWRhdGEoYz0+e3Qoe2NyZWF0ZVRpbWU6Yy5tb2RpZmljYXRpb25UaW1lLmdldFRpbWUoKSxzaXplOmMuc2l6ZX0pfSxyLCExKX0scil9LEcwLFcwKSxPdz1PZShGMCwoe2ZpbGVQYXRoOmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWZyKG4pO3MuaW8ucmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChlLG89PntvLnJlbW92ZSgoKT0+e3QoKX0scil9LHIpfSwkMCxWMCksVHc9T2UoWTAsKHtmaWxlUGF0aDplLGZpbGVUeXBlOnR9LHtyZXNvbHZlOm4scmVqZWN0OnJ9KT0+e2xldCBvPWZyKHIpO3MucnVudGltZS5vcGVuRG9jdW1lbnQoamUoZSksdm9pZCAwLG4sbyl9LEswLHEwKSxQdz1NdCh2YixlPT4hIVcuaGFzT3duKEksZSksbWIpLG5jLERoPXMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlO2Z1bmN0aW9uIEl3KGUpe0RoPWV9ZnVuY3Rpb24gRmgoZSl7bmM9ZSxEaChlKX1zLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZT1GaDtmdW5jdGlvbiBEYShlKXtpZighZSl7bGV0IHQ9U2koKTtpZighdHx8KGU9dC4kcGFnZS5zdGF0dXNCYXJTdHlsZSwhZXx8ZT09PW5jKSlyZXR1cm59ZSE9PW5jJiYobmM9ZSxzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZShlKSl9ZnVuY3Rpb24gVmgoZSl7c3Qub24oWi5PTl9USEVNRV9DSEFOR0UsZSl9ZnVuY3Rpb24gTncoZSl7c3Qub2ZmKFouT05fVEhFTUVfQ0hBTkdFLGUpfWZ1bmN0aW9uIGt3KCl7cmV0dXJuICRoKCk9PT0iZGFyayI/ImxpZ2h0IjoiZGFyayJ9ZnVuY3Rpb24gJGgoKXtyZXR1cm4gcy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpfWZ1bmN0aW9uIFJ3KCl7aWYoQi5kYXJrbW9kZSl7bGV0IGU9a3coKTtEYShlKSxGbigpLmZvckVhY2gobj0+e24uJHBhZ2Uuc3RhdHVzQmFyU3R5bGU9ZX0pfX1mdW5jdGlvbiBqdShlKXtpZihCLmRhcmttb2RlKXtsZXQgdD17fSxuPXMubmF2aWdhdG9yLmdldFVJU3R5bGUoKSxyPWljKCk7cmV0dXJuIHImJnIuaG9zdFRoZW1lJiYobj1yLmhvc3RUaGVtZSksdD1aLm5vcm1hbGl6ZVN0eWxlcyhlLEIudGhlbWVDb25maWcsbiksdH1yZXR1cm4gZX1mdW5jdGlvbiB4dyhlLHQpe2lmKEIuZGFya21vZGUpe2xldCBuPSgpPT57bGV0e2xpc3Q6cj1bXSxjb2xvcjpvLHNlbGVjdGVkQ29sb3I6YyxiYWNrZ3JvdW5kQ29sb3I6aCxib3JkZXJTdHlsZTpifT1qdSh0KTtlJiZlLnNldFRhYkJhclN0eWxlKHtjb2xvcjpvLHNlbGVjdGVkQ29sb3I6YyxiYWNrZ3JvdW5kQ29sb3I6aCxib3JkZXJTdHlsZTpifSksZSYmZS5zZXRUYWJCYXJJdGVtcyh7bGlzdDpyLm1hcChWPT4oe2ljb25QYXRoOlYuaWNvblBhdGgsc2VsZWN0ZWRJY29uUGF0aDpWLnNlbGVjdGVkSWNvblBhdGgsdmlzaWJsZTpWLnZpc2libGV9KSl9KX07bigpLFZoKG4pfX1mdW5jdGlvbiBVaChlLHQpe2lmKEIuZGFya21vZGUpe2xldCBuPSgpPT57bGV0IHI9dCgpO3IuYW5pbWF0aW9uQWxwaGFCR0NvbG9yLHIuYmFja2dyb3VuZCxyLmJhY2tncm91bmRDb2xvckJvdHRvbSxyLmJhY2tncm91bmRDb2xvclRvcDt2YXIgbz1yLnRpdGxlTlZpZXc7dHlwZW9mIG8hPSJ1bmRlZmluZWQiJiZ0eXBlb2Ygbz09Im9iamVjdCImJihvLmJhY2tncm91bmRDb2xvcixvLnRpdGxlQ29sb3IpLGUmJmUuc2V0U3R5bGUocil9O1ZoKG4pLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCgpPT5OdyhuKSl9fWxldCByYyx6dT0hMCxucjtmdW5jdGlvbiBCdyhlLHQsbil7IW5yfHwoZT09PSJub25lIj8obnIuaGlkZVRhYkJhclJlZERvdCh7aW5kZXg6dH0pLG5yLnJlbW92ZVRhYkJhckJhZGdlKHtpbmRleDp0fSkpOmU9PT0idGV4dCI/bnIuc2V0VGFiQmFyQmFkZ2Uoe2luZGV4OnQsdGV4dDpufSk6ZT09PSJyZWREb3QiJiZuci5zaG93VGFiQmFyUmVkRG90KHtpbmRleDp0fSkpfWZ1bmN0aW9uIEx3KGUpe25yJiZuci5zZXRUYWJCYXJJdGVtcyhlKX1mdW5jdGlvbiBNdyhlLHQsbixyLG8sYyl7bGV0IGg9e2luZGV4OmV9O2lmKHQhPT12b2lkIDAmJihoLnRleHQ9dCksbiYmKGguaWNvblBhdGg9amUobikpLHImJihoLnNlbGVjdGVkSWNvblBhdGg9amUocikpLGMhPT12b2lkIDAmJihoLmljb25mb250PWMpLG8hPT12b2lkIDApe2gudmlzaWJsZT1yYy5saXN0W2VdLnZpc2libGU9byxkZWxldGUgaC5pbmRleDtsZXQgYj1yYy5saXN0Lm1hcChWPT4oe3Zpc2libGU6Vi52aXNpYmxlfSkpO2JbZV09aCxMdyh7bGlzdDpifSl9ZWxzZSBuciYmbnIuc2V0VGFiQmFySXRlbShoKX1mdW5jdGlvbiBEdyhlKXtuciYmbnIuc2V0VGFiQmFyU3R5bGUoZSl9ZnVuY3Rpb24gRncoZSl7enU9ITEsbnImJm5yLmhpZGVUYWJCYXIoe2FuaW1hdGlvbjplfSl9ZnVuY3Rpb24gVncoZSl7enU9ITAsbnImJm5yLnNob3dUYWJCYXIoe2FuaW1hdGlvbjplfSl9bGV0IFJjPVtdO3ZhciBkaT17aWQ6IjAiLGluaXQoZSx0KXtlJiZlLmxpc3QubGVuZ3RoJiYocmM9ZSk7dHJ5e25yPWcucmVxdWlyZU1vZHVsZSgidW5pLXRhYnZpZXciKX1jYXRjaChuKXtjb25zb2xlLmxvZyhgdW5pLnJlcXVpcmVOYXRpdmVQbHVnaW4oInVuaS10YWJ2aWV3IikgZXJyb3IgJHtufWApfW5yLm9uTWFza0NsaWNrKCgpPT57UmMuZm9yRWFjaChuPT57bigpfSl9KSxuciYmbnIub25DbGljaygoe2luZGV4Om59KT0+e3QocmMubGlzdFtuXSxuKX0pLG5yJiZuci5vbk1pZEJ1dHRvbkNsaWNrKCgpPT5zdC5pbnZva2VPbkNhbGxiYWNrKG5oKSkseHcobnIsZSl9LGluZGV4T2YoZSl7bGV0IHQ9dGhpcy5jb25maWcsbj10JiZ0Lmxpc3QmJnQubGlzdC5sZW5ndGg7aWYobil7Zm9yKGxldCByPTA7cjxuO3IrKylpZih0Lmxpc3Rbcl0ucGFnZVBhdGg9PT1lfHx0Lmxpc3Rbcl0ucGFnZVBhdGg9PT1gJHtlfS5odG1sYClyZXR1cm4gcn1yZXR1cm4tMX0sc3dpdGNoVGFiKGUpe2xldCB0PXRoaXMuaW5kZXhPZihlKTtyZXR1cm4gdD49MD8obnImJm5yLnN3aXRjaFNlbGVjdCh7aW5kZXg6dH0pLCEwKTohMX0sc2V0VGFiQmFyQmFkZ2U6Qncsc2V0VGFiQmFySXRlbTpNdyxzZXRUYWJCYXJTdHlsZTpEdyxoaWRlVGFiQmFyOkZ3LHNob3dUYWJCYXI6VncsYXBwZW5kKGUpe25yJiZuci5hcHBlbmQoe2lkOmUuaWR9LCh7Y29kZTp0fSk9Pnt0IT09MCYmaygoKT0+e3RoaXMuYXBwZW5kKGUpfSwyMCl9KX0sZ2V0IGNvbmZpZygpe3JldHVybiByY3x8Qi50YWJCYXJ9LGdldCB2aXNpYmxlKCl7cmV0dXJuIHp1fSxnZXQgaGVpZ2h0KCl7bGV0IGU9dGhpcy5jb25maWc7cmV0dXJuKGUmJmUuaGVpZ2h0P3BhcnNlRmxvYXQoZS5oZWlnaHQpOlouVEFCQkFSX0hFSUdIVCkrcy5uYXZpZ2F0b3IuZ2V0U2FmZUFyZWFJbnNldHMoKS5kZXZpY2VCb3R0b219LGdldCBjb3Zlcigpe2xldCBlPXRoaXMuY29uZmlnO3JldHVybiBlJiZbImV4dHJhbGlnaHQiLCJsaWdodCIsImRhcmsiXS5pbmRleE9mKGUuYmx1ckVmZmVjdCk+PTB9LHNldFN0eWxlKHttYXNrOmV9KXtuci5zZXRNYXNrKHtjb2xvcjplfSl9LGFkZEV2ZW50TGlzdGVuZXIoZSx0KXtSYy5wdXNoKHQpfSxyZW1vdmVFdmVudExpc3RlbmVyKGUsdCl7bGV0IG49UmMuaW5kZXhPZih0KTtSYy5zcGxpY2UobiwxKX19O2Z1bmN0aW9uIHhjKCl7bGV0IGU9U2koKTtyZXR1cm4gZT9lLiRnZXRBcHBXZWJ2aWV3KCk6bnVsbH1mdW5jdGlvbiBIaChlKXtyZXR1cm4gZT9lLiRnZXRBcHBXZWJ2aWV3KCk6eGMoKX1sZXQgamg9bnVsbDtmdW5jdGlvbiB6aCgpe3JldHVybiBqaH1mdW5jdGlvbiBXdShlKXtqaD1lfWZ1bmN0aW9uIEd1KCl7cmV0dXJuIHMubmF2aWdhdG9yLmlzSW1tZXJzZWRTdGF0dXNiYXIoKT9NYXRoLnJvdW5kKHMub3MubmFtZT09PSJpT1MiP3MubmF2aWdhdG9yLmdldFNhZmVBcmVhSW5zZXRzKCkudG9wOnMubmF2aWdhdG9yLmdldFN0YXR1c2JhckhlaWdodCgpKTowfWZ1bmN0aW9uIFdoKCl7bGV0IGU9cy5uYXZpZ2F0b3IuZ2V0U3RhdHVzQmFyU3R5bGUoKTtyZXR1cm4gZT09PSJVSVN0YXR1c0JhclN0eWxlQmxhY2tUcmFuc2x1Y2VudCJ8fGU9PT0iVUlTdGF0dXNCYXJTdHlsZUJsYWNrT3BhcXVlInx8ZT09PSJudWxsIj9lPSJsaWdodCI6ZT09PSJVSVN0YXR1c0JhclN0eWxlRGVmYXVsdCImJihlPSJkYXJrIiksZX1mdW5jdGlvbiAkdygpe2xldHtyZXNvbHV0aW9uV2lkdGg6ZSxyZXNvbHV0aW9uSGVpZ2h0OnR9PXMuc2NyZWVuLmdldEN1cnJlbnRTaXplKCl8fHtyZXNvbHV0aW9uV2lkdGg6MCxyZXNvbHV0aW9uSGVpZ2h0OjB9O3JldHVybntzY3JlZW5XaWR0aDpNYXRoLnJvdW5kKGUpLHNjcmVlbkhlaWdodDpNYXRoLnJvdW5kKHQpfX1sZXQgR2g9TXQoImdldFdpbmRvd0luZm8iLCgpPT57bGV0IGU9cy5vcy5uYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW9zIix7c2NyZWVuV2lkdGg6dCxzY3JlZW5IZWlnaHQ6bn09JHcoKSxyPUd1KCksbyxjPXtoZWlnaHQ6MCxjb3ZlcjohMX0saD14YygpO2lmKGgpe2xldCB1dD1oLmdldFN0eWxlKCksZHQ9dXQmJnV0LnRpdGxlTlZpZXc7ZHQmJmR0LnR5cGUmJmR0LnR5cGUhPT0ibm9uZSImJihjLmhlaWdodD1kdC50eXBlPT09InRyYW5zcGFyZW50Ij8wOnIrWi5OQVZCQVJfSEVJR0hULGMuY292ZXI9ZHQudHlwZT09PSJ0cmFuc3BhcmVudCJ8fGR0LnR5cGU9PT0iZmxvYXQiKSxvPWguZ2V0U2FmZUFyZWFJbnNldHMoKX1lbHNlIG89cy5uYXZpZ2F0b3IuZ2V0U2FmZUFyZWFJbnNldHMoKTtsZXQgYj17aGVpZ2h0OjAsY292ZXI6ITF9O3RjKCkmJihiLmhlaWdodD1kaS52aXNpYmxlP2RpLmhlaWdodDowLGIuY292ZXI9ZGkuY292ZXIpO2xldCBWPWMuY292ZXI/Yy5oZWlnaHQ6MCxUPWIuY292ZXI/Yi5oZWlnaHQ6MCxEPW4tYy5oZWlnaHQtYi5oZWlnaHQsX2U9bi0oYy5jb3Zlcj8wOmMuaGVpZ2h0KS0oYi5jb3Zlcj8wOmIuaGVpZ2h0KSxTZT10OyghYi5oZWlnaHR8fGIuY292ZXIpJiYhby5ib3R0b20mJm8uZGV2aWNlQm90dG9tJiYoRC09by5kZXZpY2VCb3R0b20sX2UtPW8uZGV2aWNlQm90dG9tKSxvPWU/bzp7bGVmdDowLHJpZ2h0OjAsdG9wOmMuaGVpZ2h0JiYhYy5jb3Zlcj8wOnIsYm90dG9tOjB9O2xldCBJZT17bGVmdDpvLmxlZnQscmlnaHQ6U2Utby5yaWdodCx0b3A6by50b3AsYm90dG9tOl9lLW8uYm90dG9tLHdpZHRoOlNlLW8ubGVmdC1vLnJpZ2h0LGhlaWdodDpfZS1vLnRvcC1vLmJvdHRvbX07cmV0dXJue3BpeGVsUmF0aW86cy5zY3JlZW4uc2NhbGUsc2NyZWVuV2lkdGg6dCxzY3JlZW5IZWlnaHQ6bix3aW5kb3dXaWR0aDpTZSx3aW5kb3dIZWlnaHQ6RCxzdGF0dXNCYXJIZWlnaHQ6cixzYWZlQXJlYTpJZSxzYWZlQXJlYUluc2V0czp7dG9wOm8udG9wLHJpZ2h0Om8ucmlnaHQsYm90dG9tOm8uYm90dG9tLGxlZnQ6by5sZWZ0fSx3aW5kb3dUb3A6Vix3aW5kb3dCb3R0b206VCxzY3JlZW5Ub3A6bi1EfX0pLFNhLEJjPSEwO2Z1bmN0aW9uIGljKCl7aWYoIUJjKXJldHVybjtsZXR7Z2V0U3lzdGVtSW5mb1N5bmM6ZX09Zy5yZXF1aXJlTW9kdWxlKCJwbHVzIik7aWYoU2E9ZSgpLFcuaXNTdHJpbmcoU2EpKXRyeXtTYT1KU09OLnBhcnNlKFNhKX1jYXRjaCh0KXt9cmV0dXJuIFNhfWxldCBZaD1NdCgiZ2V0RGV2aWNlSW5mbyIsKCk9PntpYygpO2xldHtkZXZpY2VCcmFuZDplPSIiLGRldmljZU1vZGVsOnQsb3NOYW1lOm4sb3NWZXJzaW9uOnIsZGV2aWNlT3JpZW50YXRpb246byxkZXZpY2VUeXBlOmMsZGV2aWNlSWQ6aH09U2EsYj1lLnRvTG93ZXJDYXNlKCksVj1uLnRvTG93ZXJDYXNlKCk7cmV0dXJue2JyYW5kOmIsZGV2aWNlQnJhbmQ6YixkZXZpY2VNb2RlbDp0LGRldmljZVBpeGVsUmF0aW86cy5zY3JlZW4uc2NhbGUsZGV2aWNlSWQ6aCxkZXZpY2VPcmllbnRhdGlvbjpvLGRldmljZVR5cGU6Yyxtb2RlbDp0LHBsYXRmb3JtOlYsc3lzdGVtOmAke1Y9PT0iaW9zIj8iaU9TIjoiQW5kcm9pZCJ9ICR7cn1gfX0pLHFoPU10KCJnZXRBcHBCYXNlSW5mbyIsKCk9PntpYygpO2xldHtob3N0UGFja2FnZU5hbWU6ZSxob3N0TmFtZTp0LGhvc3RWZXJzaW9uOm4saG9zdExhbmd1YWdlOnIsb3NMYW5ndWFnZTpvLGhvc3RUaGVtZTpjLGFwcElkOmgsYXBwTmFtZTpiLGFwcFZlcnNpb246VixhcHBWZXJzaW9uQ29kZTpULGFwcFdndFZlcnNpb246RH09U2E7cmV0dXJue2FwcElkOmgsYXBwTmFtZTpiLGFwcFZlcnNpb246VixhcHBWZXJzaW9uQ29kZTpULGFwcFdndFZlcnNpb246RCxhcHBMYW5ndWFnZTpKbD9KbCgpOm8sZW5hYmxlRGVidWc6ITEsaG9zdFBhY2thZ2VOYW1lOmUsaG9zdE5hbWU6dCxob3N0VmVyc2lvbjpuLGhvc3RMYW5ndWFnZTpyLGhvc3RUaGVtZTpjLGhvc3RGb250U2l6ZVNldHRpbmc6dm9pZCAwLGhvc3RTREtWZXJzaW9uOnZvaWQgMCxsYW5ndWFnZTpvLFNES1ZlcnNpb246IiIsdGhlbWU6JGgoKSx2ZXJzaW9uOnMucnVudGltZS5pbm5lclZlcnNpb259fSksS2g9TXQoImdldFN5c3RlbUluZm9TeW5jIiwoKT0+e0JjPSEwLGljKCksQmM9ITE7bGV0IGU9R2goKSx0PVloKCksbj1xaCgpO0JjPSEwO2xldCByPXtmb250U2l6ZVNldHRpbmc6bi5ob3N0Rm9udFNpemVTZXR0aW5nLG9zTmFtZTpTYS5vc05hbWUudG9Mb3dlckNhc2UoKX07U2EuaG9zdE5hbWUmJihyLmhvc3RTREtWZXJzaW9uPVNhLnVuaVJ1bnRpbWVWZXJzaW9uKTtsZXQgbz1XLmV4dGVuZChTYSxlLHQsbixyKTtyZXR1cm4gZGVsZXRlIG8uc2NyZWVuVG9wLGRlbGV0ZSBvLmVuYWJsZURlYnVnLEIuZGFya21vZGV8fGRlbGV0ZSBvLnRoZW1lLFouc29ydE9iamVjdChvKX0pLFV3PU9lKCJnZXRTeXN0ZW1JbmZvIiwoZSx7cmVzb2x2ZTp0fSk9PnQoS2goKSkpLEFsPW51bGwsSHc9Z24oZmgsKCk9PntKaCgpfSksanc9SnIoa2IsKCk9PntaaCgpfSksSmg9T2UoUmIsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57QWx8fChBbD1zLm9yaWVudGF0aW9uLndhdGNoT3JpZW50YXRpb24ocj0+e3N0Lmludm9rZU9uQ2FsbGJhY2soZmgse2RpcmVjdGlvbjpyLm1hZ25ldGljSGVhZGluZ30pfSxyPT57bihyLm1lc3NhZ2UpLEFsPW51bGx9LHtmcmVxdWVuY3k6c299KSksayh0LHNvKX0pLFpoPU9lKHhiLChlLHtyZXNvbHZlOnR9KT0+e0FsJiYocy5vcmllbnRhdGlvbi5jbGVhcldhdGNoKEFsKSxBbD1udWxsKSx0KCl9KSx6dz1PZShCYiwoZSx7cmVzb2x2ZTp0fSk9PntzLmRldmljZS52aWJyYXRlKDE1KSx0KCl9KSxXdz1PZShMYiwoZSx7cmVzb2x2ZTp0fSk9PntzLmRldmljZS52aWJyYXRlKDQwMCksdCgpfSksT2w9bnVsbCxHdz1nbih1aCwoKT0+e1hoKCl9KSxZdz1KcihQYiwoKT0+e1FoKCl9KSxYaD1PZShJYiwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntPbHx8KE9sPXMuYWNjZWxlcm9tZXRlci53YXRjaEFjY2VsZXJhdGlvbihyPT57c3QuaW52b2tlT25DYWxsYmFjayh1aCx7eDpyJiZyLnhBeGlzfHwwLHk6ciYmci55QXhpc3x8MCx6OnImJnIuekF4aXN8fDB9KX0scj0+e09sPW51bGwsbihgc3RhcnRBY2NlbGVyb21ldGVyOmZhaWwgJHtyLm1lc3NhZ2V9YCl9LHtmcmVxdWVuY3k6c299KSksayh0LHNvKX0pLFFoPU9lKE5iLChlLHtyZXNvbHZlOnR9KT0+e09sJiYocy5hY2NlbGVyb21ldGVyLmNsZWFyV2F0Y2goT2wpLE9sPW51bGwpLHQoKX0pLHF3PWduKGRoLENsKCgpPT5zLmJsdWV0b290aC5vbkJsdWV0b290aERldmljZUZvdW5kLmJpbmQocy5ibHVldG9vdGgpLGRoKSksS3c9Z24oaGgsQ2woKCk9PnMuYmx1ZXRvb3RoLm9uQmx1ZXRvb3RoQWRhcHRlclN0YXRlQ2hhbmdlLmJpbmQocy5ibHVldG9vdGgpLGhoKSksSnc9Z24oZ2gsQ2woKCk9PnMuYmx1ZXRvb3RoLm9uQkxFQ29ubmVjdGlvblN0YXRlQ2hhbmdlLmJpbmQocy5ibHVldG9vdGgpLGdoKSksWnc9Z24ocGgsQ2woKCk9PnMuYmx1ZXRvb3RoLm9uQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZS5iaW5kKHMuYmx1ZXRvb3RoKSxwaCkpLFh3PU9lKCJvcGVuQmx1ZXRvb3RoQWRhcHRlciIsZmkoKCk9PnMuYmx1ZXRvb3RoLm9wZW5CbHVldG9vdGhBZGFwdGVyLmJpbmQocy5ibHVldG9vdGgpKSksUXc9T2UoImNsb3NlQmx1ZXRvb3RoQWRhcHRlciIsZmkoKCk9PnMuYmx1ZXRvb3RoLmNsb3NlQmx1ZXRvb3RoQWRhcHRlci5iaW5kKHMuYmx1ZXRvb3RoKSkpLGVDPU9lKCJnZXRCbHVldG9vdGhBZGFwdGVyU3RhdGUiLGZpKCgpPT5zLmJsdWV0b290aC5nZXRCbHVldG9vdGhBZGFwdGVyU3RhdGUuYmluZChzLmJsdWV0b290aCkpKSx0Qz1PZShNYixmaSgoKT0+cy5ibHVldG9vdGguc3RhcnRCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5LmJpbmQocy5ibHVldG9vdGgpKSxEYiksbkM9T2UoInN0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5IixmaSgoKT0+cy5ibHVldG9vdGguc3RvcEJsdWV0b290aERldmljZXNEaXNjb3ZlcnkuYmluZChzLmJsdWV0b290aCkpKSxyQz1PZSgiZ2V0Qmx1ZXRvb3RoRGV2aWNlcyIsZmkoKCk9PnMuYmx1ZXRvb3RoLmdldEJsdWV0b290aERldmljZXMuYmluZChzLmJsdWV0b290aCkpKSxpQz1PZShGYixmaSgoKT0+cy5ibHVldG9vdGguZ2V0Q29ubmVjdGVkQmx1ZXRvb3RoRGV2aWNlcy5iaW5kKHMuYmx1ZXRvb3RoKSksVmIpLG9DPU9lKCRiLGZpKCgpPT5zLmJsdWV0b290aC5jcmVhdGVCTEVDb25uZWN0aW9uLmJpbmQocy5ibHVldG9vdGgpKSxVYiksYUM9T2UoSGIsZmkoKCk9PnMuYmx1ZXRvb3RoLmNsb3NlQkxFQ29ubmVjdGlvbi5iaW5kKHMuYmx1ZXRvb3RoKSksamIpLHNDPU9lKHpiLGZpKCgpPT5zLmJsdWV0b290aC5nZXRCTEVEZXZpY2VTZXJ2aWNlcy5iaW5kKHMuYmx1ZXRvb3RoKSksV2IpLGxDPU9lKEdiLGZpKCgpPT5zLmJsdWV0b290aC5nZXRCTEVEZXZpY2VDaGFyYWN0ZXJpc3RpY3MuYmluZChzLmJsdWV0b290aCkpLFliKSxjQz1PZShxYixmaSgoKT0+cy5ibHVldG9vdGgubm90aWZ5QkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZUNoYW5nZS5iaW5kKHMuYmx1ZXRvb3RoKSksS2IpLHVDPU9lKEpiLGZpKCgpPT5zLmJsdWV0b290aC5yZWFkQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZS5iaW5kKHMuYmx1ZXRvb3RoKSksWmIpLGZDPU9lKFhiLGZpKCgpPT5zLmJsdWV0b290aC53cml0ZUJMRUNoYXJhY3RlcmlzdGljVmFsdWUuYmluZChzLmJsdWV0b290aCkpLFFiKSxkQz1PZShlMCxmaSgoKT0+cy5ibHVldG9vdGguc2V0QkxFTVRVLmJpbmQocy5ibHVldG9vdGgpKSx0MCksaEM9T2UobjAsZmkoKCk9PnMuYmx1ZXRvb3RoLmdldEJMRURldmljZVJTU0kuYmluZChzLmJsdWV0b290aCkpLHIwKSxnQz1nbih2aCxDbCgoKT0+cy5pYmVhY29uLm9uQmVhY29uVXBkYXRlLmJpbmQocy5pYmVhY29uKSx2aCkpLHBDPWduKG1oLENsKCgpPT5zLmliZWFjb24ub25CZWFjb25TZXJ2aWNlQ2hhbmdlLmJpbmQocy5pYmVhY29uKSxtaCkpLHZDPU9lKGkwLGZpKCgpPT5zLmliZWFjb24uZ2V0QmVhY29ucy5iaW5kKHMuaWJlYWNvbikpKSxtQz1PZShvMCxmaSgoKT0+cy5pYmVhY29uLnN0YXJ0QmVhY29uRGlzY292ZXJ5LmJpbmQocy5pYmVhY29uKSksYTApLF9DPU9lKHMwLGZpKCgpPT5zLmliZWFjb24uc3RvcEJlYWNvbkRpc2NvdmVyeS5iaW5kKHMuaWJlYWNvbikpKSxiQz1PZShiYiwoe3Bob25lTnVtYmVyOmV9LHtyZXNvbHZlOnR9KT0+KHMuZGV2aWNlLmRpYWwoZSksdCgpKSxFYiksRUM9e25hbWU6e2dpdmVuTmFtZToiZmlyc3ROYW1lIixtaWRkbGVOYW1lOiJtaWRkbGVOYW1lIixmYW1pbHlOYW1lOiJsYXN0TmFtZSJ9LG5pY2tuYW1lOiJuaWNrTmFtZSIscGhvdG9zOnt0eXBlOiJ1cmwiLHZhbHVlOiJwaG90b0ZpbGVQYXRoIn0sbm90ZToicmVtYXJrIixwaG9uZU51bWJlcnM6W3t0eXBlOiJtb2JpbGUiLHZhbHVlOiJtb2JpbGVQaG9uZU51bWJlciJ9LHt0eXBlOiJ3b3JrIix2YWx1ZToid29ya1Bob25lTnVtYmVyIn0se3R5cGU6ImNvbXBhbnkiLHZhbHVlOiJob3N0TnVtYmVyIn0se3R5cGU6ImhvbWUgZmF4Iix2YWx1ZToiaG9tZUZheE51bWJlciJ9LHt0eXBlOiJ3b3JrIGZheCIsdmFsdWU6IndvcmtGYXhOdW1iZXIifV0sZW1haWxzOlt7dHlwZToiaG9tZSIsdmFsdWU6ImVtYWlsIn1dLHVybHM6W3t0eXBlOiJvdGhlciIsdmFsdWU6InVybCJ9XSxvcmdhbml6YXRpb25zOlt7dHlwZToiY29tcGFueSIsbmFtZToib3JnYW5pemF0aW9uIix0aXRsZToidGl0bGUifV0saW1zOlt7dHlwZToib3RoZXIiLHZhbHVlOiJ3ZUNoYXROdW1iZXIifV0sYWRkcmVzc2VzOlt7dHlwZToib3RoZXIiLHByZWZlcnJlZDohMCxjb3VudHJ5OiJhZGRyZXNzQ291bnRyeSIscmVnaW9uOiJhZGRyZXNzU3RhdGUiLGxvY2FsaXR5OiJhZGRyZXNzQ2l0eSIsc3RyZWV0QWRkcmVzczoiYWRkcmVzc1N0cmVldCIscG9zdGFsQ29kZToiYWRkcmVzc1Bvc3RhbENvZGUifSx7dHlwZToiaG9tZSIsY291bnRyeToiaG9tZUFkZHJlc3NDb3VudHJ5IixyZWdpb246ImhvbWVBZGRyZXNzU3RhdGUiLGxvY2FsaXR5OiJob21lQWRkcmVzc0NpdHkiLHN0cmVldEFkZHJlc3M6ImhvbWVBZGRyZXNzU3RyZWV0Iixwb3N0YWxDb2RlOiJob21lQWRkcmVzc1Bvc3RhbENvZGUifSx7dHlwZToiY29tcGFueSIsY291bnRyeToid29ya0FkZHJlc3NDb3VudHJ5IixyZWdpb246IndvcmtBZGRyZXNzU3RhdGUiLGxvY2FsaXR5OiJ3b3JrQWRkcmVzc0NpdHkiLHN0cmVldEFkZHJlc3M6IndvcmtBZGRyZXNzU3RyZWV0Iixwb3N0YWxDb2RlOiJ3b3JrQWRkcmVzc1Bvc3RhbENvZGUifV19LHlDPVsidHlwZSIsInByZWZlcnJlZCJdO2Z1bmN0aW9uIFl1KGUsdCxuKXtsZXQgcj0wO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKG89PntsZXQgYz1uW29dO3R5cGVvZiBjIT09Im9iamVjdCI/eUMuaW5kZXhPZihvKSE9PS0xP2Vbb109bltvXTp0eXBlb2YgdFtjXSE9InVuZGVmaW5lZCI/KHIrKyxlW29dPXRbY10pOmRlbGV0ZSBlW29dOmMgaW5zdGFuY2VvZiBBcnJheT8oZVtvXT1bXSxjLmZvckVhY2goYj0+e2xldCBWPXt9O1l1KFYsdCxiKSYmZVtvXS5wdXNoKFYpfSksZVtvXS5sZW5ndGg/cisrOmRlbGV0ZSBlW29dKTooZVtvXT17fSxZdShlW29dLHQsYyk/cisrOmRlbGV0ZSBlW29dKX0pLHJ9bGV0IFNDPU9lKHliLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+eyFlLnBob3RvRmlsZVBhdGgmJihlLnBob3RvRmlsZVBhdGg9IiIpLHMuY29udGFjdHMuZ2V0QWRkcmVzc0Jvb2socy5jb250YWN0cy5BRERSRVNTQk9PS19QSE9ORSxyPT57bGV0IG89ci5jcmVhdGUoKTtZdShvLGUsRUMpLG8uc2F2ZSgoKT0+dCgpLGM9Pm4oKSl9LHI9Pm4oKSl9LHdiLFNiKTtmdW5jdGlvbiBXbyhlKXtyZXR1cm4gdHlwZW9mIGchPSJ1bmRlZmluZWQiP2cucmVxdWlyZU1vZHVsZShlKTpfX3JlcXVpcmVOYXRpdmVQbHVnaW5fXyhlKX1mdW5jdGlvbiBlZyhlLHQsbil7cmV0dXJuIFdvKCJwbHVzIikuc2VuZE5hdGl2ZUV2ZW50KGUsdCxuKX1sZXQgd0M9T2UoQ2IsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57V28oImNsaXBib2FyZCIpLmdldFN0cmluZyhvPT57by5yZXN1bHQ9PT0ic3VjY2VzcyI/dCh7ZGF0YTpvLmRhdGF9KTpuKCJnZXRDbGlwYm9hcmREYXRhOmZhaWwiKX0pfSksQ0M9T2UoQWIsKGUse3Jlc29sdmU6dH0pPT57V28oImNsaXBib2FyZCIpLnNldFN0cmluZyhlLmRhdGEpLHQoKX0sVGIsT2IpLHRnPSJvbk5ldHdvcmtTdGF0dXNDaGFuZ2UiO2Z1bmN0aW9uIG5nKCl7cmcoKS50aGVuKCh7bmV0d29ya1R5cGU6ZX0pPT57c3QuaW52b2tlT25DYWxsYmFjayh0Zyx7aXNDb25uZWN0ZWQ6ZSE9PSJub25lIixuZXR3b3JrVHlwZTplfSl9KX1sZXQgQUM9Z24odGcsKCk9PntzLmdsb2JhbEV2ZW50LmFkZEV2ZW50TGlzdGVuZXIoIm5ldGNoYW5nZSIsbmcpfSksT0M9SnIoIm9mZk5ldHdvcmtTdGF0dXNDaGFuZ2UiLCgpPT57cy5nbG9iYWxFdmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJuZXRjaGFuZ2UiLG5nKX0pLHJnPU9lKCJnZXROZXR3b3JrVHlwZSIsKGUse3Jlc29sdmU6dH0pPT57bGV0IG49cWFbcy5uZXR3b3JraW5mby5nZXRDdXJyZW50VHlwZSgpXXx8InVua25vd24iO3JldHVybiB0KHtuZXR3b3JrVHlwZTpufSl9KTtmdW5jdGlvbiBpZygpe2lmKHMub3MubmFtZS50b0xvd2VyQ2FzZSgpIT09ImlvcyIpcmV0dXJuITE7bGV0IHQ9V28oImZhY2VJRCIpO3JldHVybiEhKHQmJnQuaXNTdXBwb3J0KCkpfWZ1bmN0aW9uIG9nKCl7cmV0dXJuISEocy5maW5nZXJwcmludCYmcy5maW5nZXJwcmludC5pc1N1cHBvcnQoKSl9bGV0IGFnPWU9PntsZXQgdD1bXTtyZXR1cm4gb2coKSYmdC5wdXNoKCJmaW5nZXJQcmludCIpLGlnKCkmJnQucHVzaCgiZmFjaWFsIiksZSYmZSh7c3VwcG9ydE1vZGU6dH0pLHtzdXBwb3J0TW9kZTp0LGVyck1zZzoiY2hlY2tJc1N1cHBvcnRTb3RlckF1dGhlbnRpY2F0aW9uOm9rIn19LFRDPU9lKGYwLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2FnKHQpfSksc2c9KHtjaGVja0F1dGhNb2RlOmUscmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj0oYyxoKT0+biYmbihjLGgpLG89Yz0+dCYmdChjKTtpZihlPT09ImZpbmdlclByaW50Iil7aWYob2coKSl7bGV0IGM9cy5maW5nZXJwcmludC5pc0tleWd1YXJkU2VjdXJlKCkmJnMuZmluZ2VycHJpbnQuaXNFbnJvbGxlZEZpbmdlcnByaW50cygpO3JldHVybiBvKHtpc0Vucm9sbGVkOmN9KSx7aXNFbnJvbGxlZDpjLGVyck1zZzoiY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpvayJ9fXJldHVybiByKCJub3Qgc3VwcG9ydCIse2lzRW5yb2xsZWQ6ITF9KSx7aXNFbnJvbGxlZDohMSxlcnJNc2c6ImNoZWNrSXNTb3RlckVucm9sbGVkSW5EZXZpY2U6ZmFpbCBub3Qgc3VwcG9ydCJ9fWVsc2UgaWYoZT09PSJmYWNpYWwiKXtpZihpZygpKXtsZXQgYz1XbygiZmFjZUlEIiksaD1jJiZjLmlzS2V5Z3VhcmRTZWN1cmUoKSYmYy5pc0Vucm9sbGVkRmFjZUlEKCk7cmV0dXJuIG8oe2lzRW5yb2xsZWQ6aH0pLHtpc0Vucm9sbGVkOmgsZXJyTXNnOiJjaGVja0lzU290ZXJFbnJvbGxlZEluRGV2aWNlOm9rIn19cmV0dXJuIHIoIm5vdCBzdXBwb3J0Iix7aXNFbnJvbGxlZDohMX0pLHtpc0Vucm9sbGVkOiExLGVyck1zZzoiY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpmYWlsIG5vdCBzdXBwb3J0In19cmV0dXJuIHIoIm5vdCBzdXBwb3J0Iix7aXNFbnJvbGxlZDohMX0pLHtpc0Vucm9sbGVkOiExLGVyck1zZzoiY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpmYWlsIG5vdCBzdXBwb3J0In19LFBDPU9lKGQwLCh7Y2hlY2tBdXRoTW9kZTplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzZyh7Y2hlY2tBdXRoTW9kZTplLHJlc29sdmU6dCxyZWplY3Q6bn0pfSxwMCxnMCksSUM9T2UodjAsKHtyZXF1ZXN0QXV0aE1vZGVzOmUsY2hhbGxlbmdlOnQ9ITEsYXV0aENvbnRlbnQ6bn0se3Jlc29sdmU6cixyZWplY3Q6b30pPT57am4oKTtsZXR7dDpjfT1zZSgpLHtzdXBwb3J0TW9kZTpofT1hZygpO2lmKCFoLmxlbmd0aClyZXR1cm4gbygibm90IHN1cHBvcnQiLHthdXRoTW9kZToiZmluZ2VyUHJpbnQiLGVyckNvZGU6OTAwMDF9KTtsZXQgYj1bXTtpZihlLmZvckVhY2godXQ9PntoLmluZGV4T2YodXQpPi0xJiZiLnB1c2godXQpfSksIWIubGVuZ3RoKXJldHVybiBvKCJzdGFydFNvdGVyQXV0aGVudGljYXRpb246ZmFpbCBubyBjb3JyZXNwb25kaW5nIG1vZGUiLHthdXRoTW9kZToiZmluZ2VyUHJpbnQiLGVyckNvZGU6OTAwMDN9KTtsZXQgVj1bXTtpZihiLmZvckVhY2godXQ9PntzZyh7Y2hlY2tBdXRoTW9kZTp1dH0pLmlzRW5yb2xsZWQmJlYucHVzaCh1dCl9KSwhVi5sZW5ndGgpcmV0dXJuIG8oYHN0YXJ0U290ZXJBdXRoZW50aWNhdGlvbjpmYWlsIG5vICR7YlswXX0gZW5yb2xsZWRgLHthdXRoTW9kZTpiWzBdLGVyckNvZGU6OTAwMTF9KTtsZXQgVD1WWzBdLEQ9bnVsbCxfZSxTZT1ufHxjKCJ1bmkuc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uLmF1dGhDb250ZW50IiksSWU9dXQ9PntsZXR7Y29kZTpkdH09dXQsVHQ9e2F1dGhNb2RlOlR9LEl0PXs0OigpPT57RD8oUyhfZSksRC5zZXRUaXRsZShjKCJ1bmkuc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uLndhaXRpbmdDb250ZW50IikpLF9lPWsoKCk9PntEJiZELnNldFRpdGxlKFNlKX0sMWUzKSk6bygiIixXLmV4dGVuZChUdCx7ZXJyQ29kZTo5MDAwOX0pKX0sNTooKT0+e3MubmF0aXZlVUkuY2xvc2VXYWl0aW5nKCksbygiYXV0aGVudGljYXRlIGZyZWV6ZS4gcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciIsVy5leHRlbmQoVHQse2VyckNvZGU6OTAwMTB9KSl9LDY6KCk9PntzLm5hdGl2ZVVJLmNsb3NlV2FpdGluZygpLG8oImNhbmNlbCIsVy5leHRlbmQoVHQse2VyckNvZGU6OTAwMDh9KSl9fTtkdCYmSXRbZHRdP0l0W2R0XSgpOihzLm5hdGl2ZVVJLmNsb3NlV2FpdGluZygpLG8oIiIsVy5leHRlbmQoVHQse2VyckNvZGU6OTAwMDd9KSkpfTtUPT09ImZpbmdlclByaW50Ij8ocy5vcy5uYW1lLnRvTG93ZXJDYXNlKCk9PT0iYW5kcm9pZCImJihEPXMubmF0aXZlVUkuc2hvd1dhaXRpbmcoU2UpLEQub25jbG9zZT1mdW5jdGlvbigpe3MuZmluZ2VycHJpbnQuY2FuY2VsKCl9KSxzLmZpbmdlcnByaW50LmF1dGhlbnRpY2F0ZSgoKT0+e3MubmF0aXZlVUkuY2xvc2VXYWl0aW5nKCkscih7YXV0aE1vZGU6VCxlcnJDb2RlOjB9KX0sSWUse21lc3NhZ2U6U2V9KSk6VD09PSJmYWNpYWwiJiZXbygiZmFjZUlEIikuYXV0aGVudGljYXRlKHttZXNzYWdlOlNlfSxkdD0+e2R0LnR5cGU9PT0ic3VjY2VzcyImJmR0LmNvZGU9PT0wP3Ioe2F1dGhNb2RlOlQsZXJyQ29kZTowfSk6SWUoZHQpfSl9LF8wLG0wKSxOQz1PZShiMCwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntUbigpO2xldHt0OnJ9PXNlKCksYz1XaCgpIT09ImxpZ2h0IixoLGI9ITEsVj1XaSh7dXJsOiJfX3VuaWFwcHNjYW4iLGRhdGE6T2JqZWN0LmFzc2lnbih7fSxlLHttZXNzYWdlczp7ZmFpbDpyKCJ1bmkuc2NhbkNvZGUuZmFpbCIpLCJmbGFzaC5vbiI6cigidW5pLnNjYW5Db2RlLmZsYXNoLm9uIiksImZsYXNoLm9mZiI6cigidW5pLnNjYW5Db2RlLmZsYXNoLm9mZiIpfX0pLHN0eWxlOnthbmltYXRpb25UeXBlOmUuYW5pbWF0aW9uVHlwZXx8InBvcC1pbiIsdGl0bGVOVmlldzp7YXV0b0JhY2tCdXR0b246ITAsdHlwZToiZmxvYXQiLHRpdGxlVGV4dDplLnRpdGxlVGV4dHx8cigidW5pLnNjYW5Db2RlLnRpdGxlIiksdGl0bGVDb2xvcjoiI2ZmZmZmZiIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDAsMCwwLDApIixidXR0b25zOmUub25seUZyb21DYW1lcmE/W106W3t0ZXh0OmUuYWxidW1UZXh0fHxyKCJ1bmkuc2NhbkNvZGUuYWxidW0iKSxmb250U2l6ZToiMTdweCIsd2lkdGg6IjYwcHgiLG9uY2xpY2s6KCk9PntWLnNlbmRNZXNzYWdlKHt0eXBlOiJnYWxsZXJ5In0pfX1dfSxwb3BHZXN0dXJlOiJjbG9zZSIsYmFja2dyb3VuZDoiIzAwMDAwMCIsYmFja0J1dHRvbkF1dG9Db250cm9sOiJjbG9zZSJ9LG9uTWVzc2FnZSh7ZXZlbnQ6VCxkZXRhaWw6RH0pe2g9RCxiPVQ9PT0ibWFya2VkIn0sb25DbG9zZSgpe2MmJnMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJkYXJrIiksaD9iPyhkZWxldGUgaC5tZXNzYWdlLHQoaCkpOm4oaC5tZXNzYWdlKTpuKCJjYW5jZWwiKX19KTtjJiYocy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImxpZ2h0IiksVi53ZWJ2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInBvcEdlc3R1cmUiLCh7dHlwZTpULHJlc3VsdDpEfSk9PntUPT09InN0YXJ0Ij9zLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSgiZGFyayIpOlQ9PT0iZW5kIiYmIUQmJnMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJsaWdodCIpfSkpfSxFMCxTMCksbGc9ZT0+e3N0Lmludm9rZU9uQ2FsbGJhY2soWi5PTl9USEVNRV9DSEFOR0UsZSl9LGtDPWduKFouT05fVEhFTUVfQ0hBTkdFLCgpPT57c3Qub24oWi5PTl9USEVNRV9DSEFOR0UsbGcpfSksUkM9SnIoWi5PRkZfVEhFTUVfQ0hBTkdFLCgpPT57c3Qub2ZmKFouT05fVEhFTUVfQ0hBTkdFLGxnKX0pLHhDPU9lKGwwLChlLHtyZXNvbHZlOnR9KT0+e2xldCBuPXMuc2NyZWVuLmdldEJyaWdodG5lc3MoITEpO3Qoe3ZhbHVlOm59KX0pLEJDPU9lKGMwLChlLHtyZXNvbHZlOnR9KT0+e3Muc2NyZWVuLnNldEJyaWdodG5lc3MoZS52YWx1ZSwhMSksdCgpfSksTEM9T2UodTAsKGUse3Jlc29sdmU6dH0pPT57cy5kZXZpY2Uuc2V0V2FrZWxvY2soISFlLmtlZXBTY3JlZW5PbiksdCgpfSksTUM9TXQodzAsKCk9PntsZXR7Z2V0U3lzdGVtU2V0dGluZzplfT1nLnJlcXVpcmVNb2R1bGUoInBsdXMiKSx0PWUoKTt0cnl7dHlwZW9mIHQ9PSJzdHJpbmciJiYodD1KU09OLnBhcnNlKHQpKX1jYXRjaChuKXt9cmV0dXJuIHR9KSxjZz1NdChDMCwoKT0+e2xldHtnZXRBcHBBdXRob3JpemVTZXR0aW5nOmV9PWcucmVxdWlyZU1vZHVsZSgicGx1cyIpLHQ9ZSgpO3RyeXt0eXBlb2YgdD09InN0cmluZyImJih0PUpTT04ucGFyc2UodCkpfWNhdGNoKG4pe31mb3IobGV0IG4gaW4gdClXLmhhc093bih0LG4pJiZ0W25dPT09InVuZGVmaW5lZCImJih0W25dPXZvaWQgMCk7cmV0dXJuIHR9KSxEQz1PZShBMCwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXR7b3BlbkFwcEF1dGhvcml6ZVNldHRpbmc6cn09Zy5yZXF1aXJlTW9kdWxlKCJwbHVzIik7cihjPT57Yy50eXBlPT09InN1Y2Nlc3MiP3QoKTpuKCl9KX0pLEZDPU9lKGRFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPVdyKyIvZG93bmxvYWQvIjtzLmlvLmdldEltYWdlSW5mbyhXLmV4dGVuZChlLHtzYXZlUGF0aDpyLGZpbGVuYW1lOnIsc3VjY2VzczpYcyh0KSxmYWlsOmZyKG4pfSkpfSxnRSxoRSksVkM9T2UoYkUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57cy5pby5nZXRWaWRlb0luZm8oe2ZpbGVQYXRoOmUuc3JjLHN1Y2Nlc3M6cj0+e3Qoe29yaWVudGF0aW9uOnIub3JpZW50YXRpb24sdHlwZTpyLnR5cGUsZHVyYXRpb246ci5kdXJhdGlvbixzaXplOnIuc2l6ZSxoZWlnaHQ6ci5oZWlnaHQsd2lkdGg6ci53aWR0aCxmcHM6ci5mcHN8fDMwLGJpdHJhdGU6ci5iaXRyYXRlfSl9LGZhaWw6ZnIobil9KX0seUUsRUUpLCRDPU9lKHBFLCh7Y3VycmVudDplPTAsaW5kaWNhdG9yOnQ9Im51bWJlciIsbG9vcDpuPSExLHVybHM6cixsb25nUHJlc3NBY3Rpb25zOm99LHtyZXNvbHZlOmMscmVqZWN0Omh9KT0+e250KCk7bGV0e3Q6Yn09c2UoKTtyPXIubWFwKFQ9PmplKFQpKTtsZXQgVj1OdW1iZXIoZSk7aXNOYU4oVik/KGU9ci5pbmRleE9mKGplKGUpKSxlPWU8MD8wOmUpOmU9VixzLm5hdGl2ZVVJLnByZXZpZXdJbWFnZShyLHtjdXJyZW50OmUsaW5kaWNhdG9yOnQsbG9vcDpuLG9uTG9uZ1ByZXNzOmZ1bmN0aW9uKFQpe2xldCBEPVtdLF9lPSIiLFNlPW8mJlcuaXNQbGFpbk9iamVjdChvKTtTZT8oRD1vLml0ZW1MaXN0P28uaXRlbUxpc3Q6W10sX2U9by5pdGVtQ29sb3I/by5pdGVtQ29sb3I6IiMwMDAwMDAiKTooRD1bYigidW5pLnByZXZpZXdJbWFnZS5idXR0b24uc2F2ZSIpXSxfZT0iIzAwMDAwMCIpO2xldCBJZT17YnV0dG9uczpELm1hcCh1dD0+KHt0aXRsZTp1dCxjb2xvcjpfZX0pKSxjYW5jZWw6YigidW5pLnByZXZpZXdJbWFnZS5jYW5jZWwiKX07cy5uYXRpdmVVSS5hY3Rpb25TaGVldChJZSx1dD0+e2lmKHV0LmluZGV4PjApe2lmKFNlKXtXLmlzRnVuY3Rpb24oby5zdWNjZXNzKSYmby5zdWNjZXNzKHt0YXBJbmRleDp1dC5pbmRleC0xLGluZGV4OlQuaW5kZXh9KTtyZXR1cm59cy5nYWxsZXJ5LnNhdmUoVC51cmwsKCk9PntzLm5hdGl2ZVVJLnRvYXN0KGIoInVuaS5wcmV2aWV3SW1hZ2Uuc2F2ZS5zdWNjZXNzIikpfSxmdW5jdGlvbigpe3MubmF0aXZlVUkudG9hc3QoYigidW5pLnByZXZpZXdJbWFnZS5zYXZlLmZhaWwiKSl9KX1lbHNlIFNlJiZXLmlzRnVuY3Rpb24oby5mYWlsKSYmby5mYWlsKHtlcnJNc2c6InNob3dBY3Rpb25TaGVldDpmYWlsIGNhbmNlbCJ9KX0pfX0pLGMoKX0sbUUsdkUpLFVDPU9lKF9FLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3RyeXtzLm5hdGl2ZVVJLmNsb3NlUHJldmlld0ltYWdlKCksdCgpfWNhdGNoKHIpe24oKX19KSxxdSxUbD0hMSxLdSxQbD0oZSx0PXt9KT0+e0hDKFcuZXh0ZW5kKHtzdGF0ZTplfSx0KSl9LG9jPXtzdGFydCh7ZHVyYXRpb246ZT02ZTQsc2FtcGxlUmF0ZTp0LG51bWJlck9mQ2hhbm5lbHM6bixlbmNvZGVCaXRSYXRlOnIsZm9ybWF0Om89Im1wMyIsZnJhbWVTaXplOmN9PXt9KXtpZihUbClyZXR1cm4gUGwoInN0YXJ0Iik7cXU9cy5hdWRpby5nZXRSZWNvcmRlcigpLHF1LnJlY29yZCh7Zm9ybWF0Om8sc2FtcGxlcmF0ZTp0P1N0cmluZyh0KTp2b2lkIDAsZmlsZW5hbWU6V3IrIi9yZWNvcmRlci8ifSxoPT5QbCgic3RvcCIse3RlbXBGaWxlUGF0aDpofSksaD0+UGwoImVycm9yIix7ZXJyTXNnOmgubWVzc2FnZX0pKSxLdT1rKCgpPT57b2Muc3RvcCgpfSxlKSxQbCgic3RhcnQiKSxUbD0hMH0sc3RvcCgpe1RsJiYocXUuc3RvcCgpLFRsPSExLEt1JiZTKEt1KSl9LHBhdXNlKCl7VGwmJlBsKCJlcnJvciIse2Vyck1zZzoiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiBwYXVzZSJ9KX0scmVzdW1lKCl7VGwmJlBsKCJlcnJvciIse2Vyck1zZzoiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiByZXN1bWUifSl9fSxRcz17cGF1c2U6bnVsbCxyZXN1bWU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbCxlcnJvcjpudWxsfTtmdW5jdGlvbiBIQyhlKXtsZXQgdD1lLnN0YXRlO2RlbGV0ZSBlLnN0YXRlLGRlbGV0ZSBlLmVyck1zZyx0JiZXLmlzRnVuY3Rpb24oUXNbdF0pJiZRc1t0XShlKX1jbGFzcyBqQ3tjb25zdHJ1Y3Rvcigpe31vbkVycm9yKHQpe1FzLmVycm9yPXR9b25GcmFtZVJlY29yZGVkKHQpe31vbkludGVycnVwdGlvbkJlZ2luKHQpe31vbkludGVycnVwdGlvbkVuZCh0KXt9b25QYXVzZSh0KXtRcy5wYXVzZT10fW9uUmVzdW1lKHQpe1FzLnJlc3VtZT10fW9uU3RhcnQodCl7UXMuc3RhcnQ9dH1vblN0b3AodCl7UXMuc3RvcD10fXBhdXNlKCl7b2MucGF1c2UoKX1yZXN1bWUoKXtvYy5yZXN1bWUoKX1zdGFydCh0PXt9KXtvYy5zdGFydCh0KX1zdG9wKCl7b2Muc3RvcCgpfX1sZXQgdWcsekM9TXQoUEUsKCk9PnVnfHwodWc9bmV3IGpDKSksV0M9T2UoQUUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57cy5nYWxsZXJ5LnNhdmUoZS5maWxlUGF0aCxYcyh0KSxmcihuKSl9LFRFLE9FKSxHQz1PZShTRSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzLmdhbGxlcnkuc2F2ZShlLmZpbGVQYXRoLFhzKHQpLGZyKG4pKX0sQ0Usd0UpLFlDPU9lKElFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPWAke1dyfS9jb21wcmVzc2VkLyR7RGF0ZS5ub3coKX1fJHtLYShlLnNyYyl9YCx7Y29tcHJlc3NlZFdpZHRoOm8sY29tcHJlc3NlZEhlaWdodDpjfT1lO3R5cGVvZiBvPT0ibnVtYmVyIiYmKGUud2lkdGg9bysicHgiKSx0eXBlb2YgYz09Im51bWJlciImJihlLmhlaWdodD1jKyJweCIpLHMuemlwLmNvbXByZXNzSW1hZ2UoVy5leHRlbmQoe30sZSx7ZHN0OnJ9KSwoKT0+e3Qoe3RlbXBGaWxlUGF0aDpyfSl9LG4pfSxrRSxORSkscUM9T2UoUkUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9YCR7V3J9L2NvbXByZXNzZWQvJHtEYXRlLm5vdygpfV8ke0thKGUuc3JjKX1gO3MuemlwLmNvbXByZXNzVmlkZW8oVy5leHRlbmQoe30sZSx7ZmlsZW5hbWU6cn0pLG89Pnt0KHt0ZW1wRmlsZVBhdGg6cixzaXplOm8uc2l6ZX0pfSxuKX0sQkUseEUpO2Z1bmN0aW9uIEtDKGUpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e3MuaW8ucmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChlLGZ1bmN0aW9uKHIpe3IuZ2V0TWV0YWRhdGEodCxuLCExKX0sbil9KX1sZXQgSkM9T2UoYUUsKHtjb3VudDplLHNpemVUeXBlOnQsc291cmNlVHlwZTpuLGNyb3A6cn09e30se3Jlc29sdmU6byxyZWplY3Q6Y30pPT57aWUoKTtsZXR7dDpofT1zZSgpLGI9ZnIoYyk7ZnVuY3Rpb24gVihfZSl7bGV0IFNlPVtdLEllPVtdO1Byb21pc2UuYWxsKF9lLm1hcCh1dD0+S0ModXQpKSkudGhlbih1dD0+e3V0LmZvckVhY2goKGR0LFR0KT0+e2xldCBJdD1fZVtUdF07SWUucHVzaChJdCksU2UucHVzaCh7cGF0aDpJdCxzaXplOmR0LnNpemV9KX0pLG8oe3RlbXBGaWxlUGF0aHM6SWUsdGVtcEZpbGVzOlNlfSl9KS5jYXRjaChiKX1mdW5jdGlvbiBUKCl7cy5jYW1lcmEuZ2V0Q2FtZXJhKCkuY2FwdHVyZUltYWdlKFNlPT5WKFtTZV0pLGIse2ZpbGVuYW1lOldyKyIvY2FtZXJhLyIscmVzb2x1dGlvbjoiaGlnaCIsY3JvcDpyLHNpemVUeXBlOnR9KX1mdW5jdGlvbiBEKCl7cy5nYWxsZXJ5LnBpY2soKHtmaWxlczpfZX0pPT5WKF9lKSxiLHttYXhpbXVtOmUsbXVsdGlwbGU6ITAsc3lzdGVtOiExLGZpbGVuYW1lOldyKyIvZ2FsbGVyeS8iLHBlcm1pc3Npb25BbGVydDohMCxjcm9wOnIsc2l6ZVR5cGU6dH0pfWlmKG4ubGVuZ3RoPT09MSl7aWYobi5pbmNsdWRlcygiYWxidW0iKSl7RCgpO3JldHVybn1lbHNlIGlmKG4uaW5jbHVkZXMoImNhbWVyYSIpKXtUKCk7cmV0dXJufX1zLm5hdGl2ZVVJLmFjdGlvblNoZWV0KHtjYW5jZWw6aCgidW5pLmNob29zZUltYWdlLmNhbmNlbCIpLGJ1dHRvbnM6W3t0aXRsZTpoKCJ1bmkuY2hvb3NlSW1hZ2Uuc291cmNlVHlwZS5jYW1lcmEiKX0se3RpdGxlOmgoInVuaS5jaG9vc2VJbWFnZS5zb3VyY2VUeXBlLmFsYnVtIil9XX0sX2U9Pntzd2l0Y2goX2UuaW5kZXgpe2Nhc2UgMTpUKCk7YnJlYWs7Y2FzZSAyOkQoKTticmVhaztkZWZhdWx0OmIoKTticmVha319KX0sbEUsc0UpLFpDPU9lKGNFLCh7c291cmNlVHlwZTplLGNvbXByZXNzZWQ6dCxtYXhEdXJhdGlvbjpuLGNhbWVyYTpyfSx7cmVzb2x2ZTpvLHJlamVjdDpjfSk9Pnt4ZSgpO2xldHt0Omh9PXNlKCksYj1mcihjKTtmdW5jdGlvbiBWKF9lKXtzLmlvLmdldFZpZGVvSW5mbyh7ZmlsZVBhdGg6X2Usc3VjY2VzcyhTZSl7bGV0IEllPXtlcnJNc2c6ImNob29zZVZpZGVvOm9rIix0ZW1wRmlsZVBhdGg6X2Usc2l6ZTpTZS5zaXplLGR1cmF0aW9uOlNlLmR1cmF0aW9uLHdpZHRoOlNlLndpZHRoLGhlaWdodDpTZS5oZWlnaHR9O28oSWUpfSxmYWlsOmJ9KX1mdW5jdGlvbiBUKCl7cy5nYWxsZXJ5LnBpY2soKHtmaWxlczpfZX0pPT5WKF9lWzBdKSxiLHtmaWx0ZXI6InZpZGVvIixzeXN0ZW06ITEsbXVsdGlwbGU6ITAsbWF4aW11bToxLGZpbGVuYW1lOldyKyIvZ2FsbGVyeS8iLHBlcm1pc3Npb25BbGVydDohMCx2aWRlb0NvbXByZXNzOnR9KX1mdW5jdGlvbiBEKCl7cy5jYW1lcmEuZ2V0Q2FtZXJhKCkuc3RhcnRWaWRlb0NhcHR1cmUoVixiLHtpbmRleDpyPT09ImZyb250Ij8iMiI6IjEiLHZpZGVvTWF4aW11bUR1cmF0aW9uOm4sZmlsZW5hbWU6V3IrIi9jYW1lcmEvIix2aWRlb0NvbXByZXNzOnR9KX1pZihlLmxlbmd0aD09PTEpe2lmKGUuaW5jbHVkZXMoImFsYnVtIikpe1QoKTtyZXR1cm59ZWxzZSBpZihlLmluY2x1ZGVzKCJjYW1lcmEiKSl7RCgpO3JldHVybn19cy5uYXRpdmVVSS5hY3Rpb25TaGVldCh7Y2FuY2VsOmgoInVuaS5jaG9vc2VWaWRlby5jYW5jZWwiKSxidXR0b25zOlt7dGl0bGU6aCgidW5pLmNob29zZVZpZGVvLnNvdXJjZVR5cGUuY2FtZXJhIil9LHt0aXRsZTpoKCJ1bmkuY2hvb3NlVmlkZW8uc291cmNlVHlwZS5hbGJ1bSIpfV19LF9lPT57c3dpdGNoKF9lLmluZGV4KXtjYXNlIDE6RCgpO2JyZWFrO2Nhc2UgMjpUKCk7YnJlYWs7ZGVmYXVsdDpiKCk7YnJlYWt9fSl9LGZFLHVFKSxYQz1PZShaMCwoZSx7cmVzb2x2ZTp0fSk9PntzLmtleS5zaG93U29mdEtleWJvcmQoKSx0KCl9KSxRQz1PZShKMCwoZSx7cmVzb2x2ZTp0fSk9PntzLmtleS5oaWRlU29mdEtleWJvcmQoKSx0KCl9KTtmdW5jdGlvbiBmZyhlKXtzdC5pbnZva2VPbkNhbGxiYWNrKFouT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSxlKX1sZXQgZUE9Z24oWi5PTl9LRVlCT0FSRF9IRUlHSFRfQ0hBTkdFLCgpPT57c3Qub24oWi5PTl9LRVlCT0FSRF9IRUlHSFRfQ0hBTkdFLGZnKX0pLHRBPUpyKFouT05fS0VZQk9BUkRfSEVJR0hUX0NIQU5HRSwoKT0+e3N0Lm9mZihaLk9OX0tFWUJPQVJEX0hFSUdIVF9DSEFOR0UsZmcpfSk7Y2xhc3MgbkF7Y29uc3RydWN0b3IodCl7dGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMuX2Rvd25sb2FkZXI9dCx0LmFkZEV2ZW50TGlzdGVuZXIoInN0YXRlY2hhbmdlZCIsKG4scik9PntuLmRvd25sb2FkZWRTaXplJiZuLnRvdGFsU2l6ZSYmdGhpcy5fY2FsbGJhY2tzLmZvckVhY2gobz0+e28oe3Byb2dyZXNzOk1hdGgucm91bmQobi5kb3dubG9hZGVkU2l6ZS9uLnRvdGFsU2l6ZSoxMDApLHRvdGFsQnl0ZXNXcml0dGVuOm4uZG93bmxvYWRlZFNpemUsdG90YWxCeXRlc0V4cGVjdGVkVG9Xcml0ZTpuLnRvdGFsU2l6ZX0pfSl9KX1hYm9ydCgpe3RoaXMuX2Rvd25sb2FkZXIuYWJvcnQoKX1vblByb2dyZXNzVXBkYXRlKHQpeyFXLmlzRnVuY3Rpb24odCl8fHRoaXMuX2NhbGxiYWNrcy5wdXNoKHQpfW9mZlByb2dyZXNzVXBkYXRlKHQpe2xldCBuPXRoaXMuX2NhbGxiYWNrcy5pbmRleE9mKHQpO24+PTAmJnRoaXMuX2NhbGxiYWNrcy5zcGxpY2UobiwxKX1vbkhlYWRlcnNSZWNlaXZlZCh0KXt0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuIil9b2ZmSGVhZGVyc1JlY2VpdmVkKHQpe3Rocm93IG5ldyBFcnJvcigiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4iKX19bGV0IHJBPWtyKFdFLCh7dXJsOmUsaGVhZGVyOnQsdGltZW91dDpufSx7cmVzb2x2ZTpyLHJlamVjdDpvfSk9PntuPShufHxCLm5ldHdvcmtUaW1lb3V0JiZCLm5ldHdvcmtUaW1lb3V0LnJlcXVlc3R8fDYwKjFlMykvMWUzO2xldCBjPXMuZG93bmxvYWRlci5jcmVhdGVEb3dubG9hZChlLHt0aW1lb3V0Om4sZmlsZW5hbWU6V3IrIi9kb3dubG9hZC8iLHJldHJ5OjAscmV0cnlJbnRlcnZhbDowfSwoYixWKT0+e1Y/cih7dGVtcEZpbGVQYXRoOmIuZmlsZW5hbWUsc3RhdHVzQ29kZTpWfSk6byhgc3RhdHVzQ29kZTogJHtWfWApfSksaD1uZXcgbkEoYyk7Zm9yKGxldCBiIGluIHQpVy5oYXNPd24odCxiKSYmYy5zZXRSZXF1ZXN0SGVhZGVyKGIsdFtiXSk7cmV0dXJuIGMuc3RhcnQoKSxofSxZRSxHRSksaUE9ZT0+e2xldCB0PWVbIlNldC1Db29raWUiXXx8ZVsic2V0LWNvb2tpZSJdLG49W107aWYoIXQpcmV0dXJuW107dFswXT09PSJbIiYmdFt0Lmxlbmd0aC0xXT09PSJdIiYmKHQ9dC5zbGljZSgxLC0xKSk7bGV0IHI9dC5zcGxpdCgiOyIpO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXJbb10uaW5kZXhPZigiRXhwaXJlcz0iKSE9PS0xfHxyW29dLmluZGV4T2YoImV4cGlyZXM9IikhPT0tMT9uLnB1c2gocltvXS5yZXBsYWNlKCIsIiwiIikpOm4ucHVzaChyW29dKTtyZXR1cm4gbj1uLmpvaW4oIjsiKS5zcGxpdCgiLCIpLG59O2Z1bmN0aW9uIG9BKGUsdCl7aWYoVy5pc1N0cmluZyhlLmRhdGEpJiZlLmRhdGEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoZS5kYXRhPWUuZGF0YS5zbGljZSgxKSksZS5zdGF0dXNDb2RlPXBhcnNlSW50KFN0cmluZyhlLnN0YXR1c0NvZGUpLDEwKSxXLmlzUGxhaW5PYmplY3QoZS5oZWFkZXIpJiYoZS5oZWFkZXI9T2JqZWN0LmtleXMoZS5oZWFkZXIpLnJlZHVjZShmdW5jdGlvbihuLHIpe2xldCBvPWUuaGVhZGVyW3JdO3JldHVybiBXLmlzQXJyYXkobyk/bltyXT1vLmpvaW4oIiwiKTpXLmlzU3RyaW5nKG8pJiYobltyXT1vKSxufSx7fSkpLHQuZGF0YVR5cGUmJnQuZGF0YVR5cGUudG9Mb3dlckNhc2UoKT09PSJqc29uIil0cnl7ZS5kYXRhPUpTT04ucGFyc2UoZS5kYXRhKX1jYXRjaChuKXt9cmV0dXJuIGV9Y2xhc3MgYUF7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVxdWVzdFRhc2s9dH1hYm9ydCgpe3RoaXMuX3JlcXVlc3RUYXNrLmFib3J0KCl9b2ZmSGVhZGVyc1JlY2VpdmVkKCl7fW9uSGVhZGVyc1JlY2VpdmVkKCl7fX1sZXQgc0E9a3IoTEUsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0e2hlYWRlcjpyLG1ldGhvZDpvLGRhdGE6Yyx0aW1lb3V0OmgsdXJsOmIscmVzcG9uc2VUeXBlOlYsc3NsVmVyaWZ5OlQsZmlyc3RJcHY0OkQsdGxzOl9lfT1lLFNlO2ZvcihsZXQgeXQgaW4gcilpZih5dC50b0xvd2VyQ2FzZSgpPT09ImNvbnRlbnQtdHlwZSIpe1NlPXJbeXRdO2JyZWFrfW8hPT0iR0VUIiYmU2UuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPT09MCYmVy5pc1BsYWluT2JqZWN0KGMpJiYoYz1KU09OLnN0cmluZ2lmeShjKSk7bGV0IEllPVdvKCJzdHJlYW0iKSx1dD17fSxkdCxUdCxJdD0hMTtmb3IobGV0IHl0IGluIHIpaWYoIUl0JiZ5dC50b0xvd2VyQ2FzZSgpPT09ImNvbnRlbnQtdHlwZSIpe2lmKEl0PSEwLHV0WyJDb250ZW50LVR5cGUiXT1yW3l0XSxvIT09IkdFVCImJnJbeXRdLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPT09MCYmIVcuaXNTdHJpbmcoYykmJiEoYyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSl7bGV0IEVuPVtdO2ZvcihsZXQgYW4gaW4gYylXLmhhc093bihjLGFuKSYmRW4ucHVzaChlbmNvZGVVUklDb21wb25lbnQoYW4pKyI9IitlbmNvZGVVUklDb21wb25lbnQoY1thbl0pKTtjPUVuLmpvaW4oIiYiKX19ZWxzZSB1dFt5dF09clt5dF07IUl0JiZvPT09IlBPU1QiJiYodXRbIkNvbnRlbnQtVHlwZSJdPSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiKSxoJiYoZHQ9aygoKT0+e1R0PSEwLG4oInRpbWVvdXQiKX0saCsyMDApKTtsZXQgdm49e21ldGhvZDpvLHVybDpiLnRyaW0oKSxoZWFkZXJzOnV0LHR5cGU6Vj09PSJhcnJheWJ1ZmZlciI/ImJhc2U2NCI6InRleHQiLHRpbWVvdXQ6aHx8NmU1LHNzbFZlcmlmeTohVCxmaXJzdElwdjQ6RCx0bHM6X2V9LHVuPSExO28hPT0iR0VUIiYmKHRvU3RyaW5nLmNhbGwoYyk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP3VuPSEwOnZuLmJvZHk9Vy5pc1N0cmluZyhjKT9jOkpTT04uc3RyaW5naWZ5KGMpKTtsZXQganQ9KHtvazp5dCxzdGF0dXM6RW4sZGF0YTphbixoZWFkZXJzOlh0LGVycm9yTXNnOkFufSk9PntpZihUdClyZXR1cm47ZHQmJlMoZHQpO2xldCBkcj1FbjtpZihkcj4wKXQob0Eoe2RhdGE6eXQmJlY9PT0iYXJyYXlidWZmZXIiP05pKGFuKTphbixzdGF0dXNDb2RlOmRyLGhlYWRlcjpYdCxjb29raWVzOmlBKFh0KX0sZSkpO2Vsc2V7bGV0IFF0PSJhYm9ydCBzdGF0dXNDb2RlOiIrZHI7QW4mJihRdD1RdCsiICIrQW4pLG4oUXQpfX07cmV0dXJuIHVuP0llLmZldGNoV2l0aEFycmF5QnVmZmVyKHsiQHR5cGUiOiJiaW5hcnkiLGJhc2U2NDpwcihjKX0sdm4sanQpOkllLmZldGNoKHZuLGp0KSxuZXcgYUEoe2Fib3J0KCl7VHQ9ITAsZHQmJlMoZHQpLG4oImFib3J0Iil9fSl9LCRFLFVFKSxsQT1PZShIRSwoe2NlcnRpZmljYXRlczplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntXbygic3RyZWFtIikuY29uZmlnTVRMUyhlLCh7dHlwZTpvLGNvZGU6YyxtZXNzYWdlOmh9KT0+e3N3aXRjaChvKXtjYXNlInN1Y2Nlc3MiOnQoe2NvZGU6Y30pO2JyZWFrO2Nhc2UiZmFpbCI6bihoLHtjb2RlOmN9KTticmVha319KX0sakUsekUpLElsPVtdLE5sPXt9LEp1PXtvcGVuOiIiLGNsb3NlOiIiLGVycm9yOiIiLG1lc3NhZ2U6IiJ9LGFjO2Z1bmN0aW9uIGNBKGUpe2xldCB0PVN0cmluZyhEYXRlLm5vdygpKSxuO3RyeXthY3x8KGFjPVdvKCJ1bmktd2ViU29ja2V0IiksdUEoYWMpKSxhYy5XZWJTb2NrZXQoe2lkOnQsdXJsOmUudXJsLHByb3RvY29sOlcuaXNBcnJheShlLnByb3RvY29scyk/ZS5wcm90b2NvbHMuam9pbigiLCIpOmUucHJvdG9jb2xzLGhlYWRlcjplLmhlYWRlcn0pfWNhdGNoKHIpe249cn1yZXR1cm57c29ja2V0OmFjLHNvY2tldElkOnQsZXJyTXNnOm59fWZ1bmN0aW9uIHVBKGUpe2Uub25vcGVuKHQ9PntsZXQgbj1ObFt0LmlkXTshbnx8bi5fc29ja2V0T25PcGVuKCl9KSxlLm9ubWVzc2FnZSh0PT57bGV0IG49TmxbdC5pZF07IW58fG4uX3NvY2tldE9uTWVzc2FnZSh0KX0pLGUub25lcnJvcih0PT57bGV0IG49TmxbdC5pZF07IW58fG4uX3NvY2tldE9uRXJyb3IoKX0pLGUub25jbG9zZSh0PT57bGV0e2lkOm4sY29kZTpyLHJlYXNvbjpvfT10LGM9Tmxbbl07IWN8fGMuX3NvY2tldE9uQ2xvc2Uoe2NvZGU6cixyZWFzb246b30pfSl9Y2xhc3MgZkF7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPW4sdGhpcy5fc29ja2V0PXQsdGhpcy5fY2FsbGJhY2tzPXtvcGVuOltdLGNsb3NlOltdLGVycm9yOltdLG1lc3NhZ2U6W119LHRoaXMuQ0xPU0VEPTMsdGhpcy5DTE9TSU5HPTIsdGhpcy5DT05ORUNUSU5HPTAsdGhpcy5PUEVOPTEsdGhpcy5yZWFkeVN0YXRlPXRoaXMuQ0xPU0VELCEhdGhpcy5fc29ja2V0fV9zb2NrZXRPbk9wZW4oKXt0aGlzLnJlYWR5U3RhdGU9dGhpcy5PUEVOLHRoaXMuc29ja2V0U3RhdGVDaGFuZ2UoIm9wZW4iKX1fc29ja2V0T25NZXNzYWdlKHQpe3RoaXMuc29ja2V0U3RhdGVDaGFuZ2UoIm1lc3NhZ2UiLHtkYXRhOnR5cGVvZiB0LmRhdGE9PSJvYmplY3QiP05pKHQuZGF0YS5iYXNlNjQpOnQuZGF0YX0pfV9zb2NrZXRPbkVycm9yKCl7dGhpcy5zb2NrZXRTdGF0ZUNoYW5nZSgiZXJyb3IiKSx0aGlzLm9uRXJyb3JPckNsb3NlKCl9X3NvY2tldE9uQ2xvc2UodCl7dGhpcy5zb2NrZXRTdGF0ZUNoYW5nZSgiY2xvc2UiLHQpLHRoaXMub25FcnJvck9yQ2xvc2UoKX1vbkVycm9yT3JDbG9zZSgpe3RoaXMucmVhZHlTdGF0ZT10aGlzLkNMT1NFRCxkZWxldGUgTmxbdGhpcy5pZF07bGV0IHQ9SWwuaW5kZXhPZih0aGlzKTt0Pj0wJiZJbC5zcGxpY2UodCwxKX1zb2NrZXRTdGF0ZUNoYW5nZSh0LG49e30pe2xldHtjb2RlOnIscmVhc29uOm99PW4sYz10PT09Im1lc3NhZ2UiP3tkYXRhOm4uZGF0YX06dD09PSJjbG9zZSI/e2NvZGU6cixyZWFzb246b306e307dGhpcz09PUlsWzBdJiZKdVt0XSYmc3QuaW52b2tlT25DYWxsYmFjayhKdVt0XSxjKSx0aGlzLl9jYWxsYmFja3NbdF0uZm9yRWFjaChoPT57Vy5pc0Z1bmN0aW9uKGgpJiZoKGMpfSl9c2VuZCh0LG49ITApe3RoaXMucmVhZHlTdGF0ZSE9PXRoaXMuT1BFTiYmWi5jYWxsT3B0aW9ucyh0LCJzZW5kU29ja2V0TWVzc2FnZTpmYWlsIFdlYlNvY2tldCBpcyBub3QgY29ubmVjdGVkIik7dHJ5e3RoaXMuX3NvY2tldC5zZW5kKHtpZDp0aGlzLmlkLGRhdGE6dHlwZW9mIHQuZGF0YT09Im9iamVjdCI/eyJAdHlwZSI6ImJpbmFyeSIsYmFzZTY0OnByKHQuZGF0YSl9OnQuZGF0YX0pLG4mJlouY2FsbE9wdGlvbnModCwic2VuZFNvY2tldE1lc3NhZ2U6b2siKX1jYXRjaChyKXtuJiZaLmNhbGxPcHRpb25zKHQsYHNlbmRTb2NrZXRNZXNzYWdlOmZhaWwgJHtyfWApfX1jbG9zZSh0LG49ITApe3RoaXMucmVhZHlTdGF0ZT10aGlzLkNMT1NJTkc7dHJ5e3RoaXMuX3NvY2tldC5jbG9zZShXLmV4dGVuZCh7aWQ6dGhpcy5pZCxhcmdzOnR9KSksbiYmWi5jYWxsT3B0aW9ucyh0LCJjbG9zZVNvY2tldDpvayIpfWNhdGNoKHIpe24mJlouY2FsbE9wdGlvbnModCxgY2xvc2VTb2NrZXQ6ZmFpbCAke3J9YCl9fW9uT3Blbih0KXt0aGlzLl9jYWxsYmFja3Mub3Blbi5wdXNoKHQpfW9uQ2xvc2UodCl7dGhpcy5fY2FsbGJhY2tzLmNsb3NlLnB1c2godCl9b25FcnJvcih0KXt0aGlzLl9jYWxsYmFja3MuZXJyb3IucHVzaCh0KX1vbk1lc3NhZ2UodCl7dGhpcy5fY2FsbGJhY2tzLm1lc3NhZ2UucHVzaCh0KX19bGV0IGRBPWtyKFpFLCh7dXJsOmUscHJvdG9jb2xzOnQsaGVhZGVyOm4sbWV0aG9kOnJ9LHtyZXNvbHZlOm8scmVqZWN0OmN9KT0+e2xldHtzb2NrZXQ6aCxzb2NrZXRJZDpiLGVyck1zZzpWfT1jQSh7dXJsOmUscHJvdG9jb2xzOnQsaGVhZGVyOm4sbWV0aG9kOnJ9KSxUPW5ldyBmQShoLGIpO3JldHVybiBWP2soKCk9PntjKFYpfSwwKTooSWwucHVzaChUKSxObFtiXT1UKSxrKCgpPT57bygpfSwwKSxUfSxRRSxYRSksaEE9T2UoZXksKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9SWxbMF07aWYoIXJ8fHIucmVhZHlTdGF0ZSE9PXIuT1BFTil7bigiV2ViU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQiKTtyZXR1cm59ci5zZW5kKHtkYXRhOmUuZGF0YX0sITEpLHQoKX0sdHkpLGdBPU9lKG55LChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPUlsWzBdO2lmKCFyKXtuKCJXZWJTb2NrZXQgaXMgbm90IGNvbm5lY3RlZCIpO3JldHVybn1yLnJlYWR5U3RhdGU9ci5DTE9TSU5HLHIuY2xvc2UoZSwhMSksdCgpfSxyeSk7ZnVuY3Rpb24gTGMoZSl7bGV0IHQ9YG9uU29ja2V0JHtXLmNhcGl0YWxpemUoZSl9YDtyZXR1cm4gZ24odCwoKT0+e0p1W2VdPXR9KX1sZXQgcEE9TGMoIm9wZW4iKSx2QT1MYygiZXJyb3IiKSxtQT1MYygibWVzc2FnZSIpLF9BPUxjKCJjbG9zZSIpO2NsYXNzIGJBe2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLl91cGxvYWRlcj10LHQuYWRkRXZlbnRMaXN0ZW5lcigic3RhdGVjaGFuZ2VkIiwobixyKT0+e24udXBsb2FkZWRTaXplJiZuLnRvdGFsU2l6ZSYmdGhpcy5fY2FsbGJhY2tzLmZvckVhY2gobz0+e28oe3Byb2dyZXNzOnBhcnNlSW50KFN0cmluZyhuLnVwbG9hZGVkU2l6ZS9uLnRvdGFsU2l6ZSoxMDApKSx0b3RhbEJ5dGVzU2VudDpuLnVwbG9hZGVkU2l6ZSx0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQ6bi50b3RhbFNpemV9KX0pfSl9YWJvcnQoKXt0aGlzLl91cGxvYWRlci5hYm9ydCgpfW9uUHJvZ3Jlc3NVcGRhdGUodCl7IVcuaXNGdW5jdGlvbih0KXx8dGhpcy5fY2FsbGJhY2tzLnB1c2godCl9b25IZWFkZXJzUmVjZWl2ZWQoKXt9b2ZmUHJvZ3Jlc3NVcGRhdGUodCl7bGV0IG49dGhpcy5fY2FsbGJhY2tzLmluZGV4T2YodCk7bj49MCYmdGhpcy5fY2FsbGJhY2tzLnNwbGljZShuLDEpfW9mZkhlYWRlcnNSZWNlaXZlZCgpe319bGV0IEVBPWtyKHFFLCh7dXJsOmUsdGltZW91dDp0LGhlYWRlcjpuLGZvcm1EYXRhOnIsZmlsZXM6byxmaWxlUGF0aDpjLG5hbWU6aH0se3Jlc29sdmU6YixyZWplY3Q6Vn0pPT57dD0odHx8Qi5uZXR3b3JrVGltZW91dCYmQi5uZXR3b3JrVGltZW91dC51cGxvYWRGaWxlfHw2MCoxZTMpLzFlMztsZXQgVD1zLnVwbG9hZGVyLmNyZWF0ZVVwbG9hZChlLHt0aW1lb3V0OnQscmV0cnk6MCxyZXRyeUludGVydmFsOjB9LChfZSxTZSk9PntTZT9iKHtkYXRhOl9lLnJlc3BvbnNlVGV4dCxzdGF0dXNDb2RlOlNlfSk6Vihgc3RhdHVzQ29kZTogJHtTZX1gKX0pO2ZvcihsZXQgX2UgaW4gbilXLmhhc093bihuLF9lKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKF9lLFN0cmluZyhuW19lXSkpO2ZvcihsZXQgX2UgaW4gcilXLmhhc093bihyLF9lKSYmVC5hZGREYXRhKF9lLFN0cmluZyhyW19lXSkpO28mJm8ubGVuZ3RoP28uZm9yRWFjaChfZT0+e1QuYWRkRmlsZShqZShfZS51cmkpLHtrZXk6X2UubmFtZXx8ImZpbGUifSl9KTpULmFkZEZpbGUoamUoYykse2tleTpofSk7bGV0IEQ9bmV3IGJBKFQpO3JldHVybiBULnN0YXJ0KCksRH0sSkUsS0UpLElzPXt9LHlBPVsicGxheSIsImNhbnBsYXkiLCJlbmRlZCIsInN0b3AiLCJ3YWl0aW5nIiwic2Vla2luZyIsInNlZWtlZCIsInBhdXNlIl0sZGc9InBsYXliYWNrIixTQT0yMDAsd0E9ZT0+e2xldCB0PUlzW2VdOyF0fHx0LmluaXRTdGF0ZUNoYWdlfHwodC5pbml0U3RhdGVDaGFnZT0hMCx0LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixuPT57aGcoe3N0YXRlOiJlcnJvciIsYXVkaW9JZDplLGVyck1zZzoiTWVkaWFFcnJvciIsZXJyQ29kZTpuLmNvZGV9KX0pLHlBLmZvckVhY2gobj0+e3QuYWRkRXZlbnRMaXN0ZW5lcihuLCgpPT57bj09PSJwbGF5Ij90LmlzU3RvcHBlZD0hMTpuPT09InN0b3AiJiYodC5pc1N0b3BwZWQ9ITApLGhnKHtzdGF0ZTpuLGF1ZGlvSWQ6ZX0pfSl9KSl9O2Z1bmN0aW9uIENBKCl7bGV0IGU9YCR7RGF0ZS5ub3coKX0ke01hdGgucmFuZG9tKCl9YCx0PUlzW2VdPXMuYXVkaW8uY3JlYXRlUGxheWVyKCIiKTtyZXR1cm4gdC5zcmM9IiIsdC52b2x1bWU9MSx0LnN0YXJ0VGltZT0wLHQuc2V0U2Vzc2lvbkNhdGVnb3J5KGRnKSx7ZXJyTXNnOiJjcmVhdGVBdWRpb0luc3RhbmNlOm9rIixhdWRpb0lkOmV9fWZ1bmN0aW9uIEFBKHthdWRpb0lkOmUsc3JjOnQsc3RhcnRUaW1lOm4sYXV0b3BsYXk6cj0hMSxsb29wOm89ITEsb2JleU11dGVTd2l0Y2g6Yyx2b2x1bWU6aCxzZXNzaW9uQ2F0ZWdvcnk6Yj1kZyxwbGF5YmFja1JhdGU6Vn0pe2xldCBUPUlzW2VdO2lmKFQpe2xldCBEPXtsb29wOm8sYXV0b3BsYXk6cn07aWYodCl7bGV0IF9lPWplKHQpO1Quc3JjIT09X2UmJihULnNyYz1ELnNyYz1fZSl9biYmKFQuc3RhcnRUaW1lPUQuc3RhcnRUaW1lPW4pLHR5cGVvZiBoPT0ibnVtYmVyIiYmKFQudm9sdW1lPUQudm9sdW1lPWgpLFQuc2V0U3R5bGVzKEQpLGImJlQuc2V0U2Vzc2lvbkNhdGVnb3J5KGIpLFYmJlQucGxheWJhY2tSYXRlJiZULnBsYXliYWNrUmF0ZShWKSx3QShlKX1yZXR1cm57ZXJyTXNnOiJzZXRBdWRpb1N0YXRlOm9rIn19ZnVuY3Rpb24gT0Eoe2F1ZGlvSWQ6ZX0pe2xldCB0PUlzW2VdO2lmKCF0KXJldHVybntlcnJNc2c6ImdldEF1ZGlvU3RhdGU6ZmFpbCJ9O2xldHtzcmM6bixzdGFydFRpbWU6cix2b2x1bWU6b309dDtyZXR1cm57ZXJyTXNnOiJnZXRBdWRpb1N0YXRlOm9rIixkdXJhdGlvbjoxZTMqKHQuZ2V0RHVyYXRpb24oKXx8MCksY3VycmVudFRpbWU6dC5pc1N0b3BwZWQ/MDoxZTMqdC5nZXRQb3NpdGlvbigpLHBhdXNlZDp0LmlzUGF1c2VkKCksc3JjOm4sdm9sdW1lOm8sc3RhcnRUaW1lOjFlMypyLGJ1ZmZlcmVkOjFlMyp0LmdldEJ1ZmZlcmVkKCl9fWZ1bmN0aW9uIFRBKHtvcGVyYXRpb25UeXBlOmUsYXVkaW9JZDp0LGN1cnJlbnRUaW1lOm59KXtsZXQgcj1Jc1t0XTtzd2l0Y2goZSl7Y2FzZSJwbGF5IjpjYXNlInBhdXNlIjpjYXNlInN0b3AiOnJbZT09PSJwbGF5IiYmci5pc1BhdXNlZCgpPyJyZXN1bWUiOmVdKCk7YnJlYWs7Y2FzZSJzZWVrIjp0eXBlb2YgbiE9InVuZGVmaW5lZCImJnIuc2Vla1RvKG4vMWUzKTticmVha31yZXR1cm57ZXJyTXNnOiJvcGVyYXRlQXVkaW86b2sifX1sZXQgWnU9T2JqZWN0LmNyZWF0ZShudWxsKSxoZz0oe3N0YXRlOmUsYXVkaW9JZDp0LGVyck1zZzpuLGVyckNvZGU6cn0pPT57bGV0IG89WnVbdF07aWYobylpZihRdShvLGUsbixyKSxlPT09InBsYXkiKXtsZXQgYz1vLmN1cnJlbnRUaW1lO1F1KG8sInRpbWVVcGRhdGUiKSxvLl9fdGltaW5nPWQoKCk9PntvLmN1cnJlbnRUaW1lIT09YyYmUXUobywidGltZVVwZGF0ZSIpfSxTQSl9ZWxzZShlPT09InBhdXNlInx8ZT09PSJzdG9wInx8ZT09PSJlcnJvciIpJiZFKG8uX190aW1pbmcpfSxQQT1be25hbWU6InNyYyIsY2FjaGU6ITB9LHtuYW1lOiJzdGFydFRpbWUiLGRlZmF1bHQ6MCxjYWNoZTohMH0se25hbWU6ImF1dG9wbGF5IixkZWZhdWx0OiExLGNhY2hlOiEwfSx7bmFtZToibG9vcCIsZGVmYXVsdDohMSxjYWNoZTohMH0se25hbWU6Im9iZXlNdXRlU3dpdGNoIixkZWZhdWx0OiEwLHJlYWRvbmx5OiEwLGNhY2hlOiEwfSx7bmFtZToiZHVyYXRpb24iLHJlYWRvbmx5OiEwfSx7bmFtZToiY3VycmVudFRpbWUiLHJlYWRvbmx5OiEwfSx7bmFtZToicGF1c2VkIixyZWFkb25seTohMH0se25hbWU6ImJ1ZmZlcmVkIixyZWFkb25seTohMH0se25hbWU6InZvbHVtZSJ9LHtuYW1lOiJwbGF5YmFja1JhdGUiLGNhY2hlOiEwfV07Y2xhc3MgWHV7Y29uc3RydWN0b3IodCl7dGhpcy5pZD10LHRoaXMuX2NhbGxiYWNrcz17fSx0aGlzLl9vcHRpb25zPXt9LEpkLmZvckVhY2gobj0+e3RoaXMuX2NhbGxiYWNrc1tuXT1bXX0pLFBBLmZvckVhY2gobj0+e2xldCByPW4ubmFtZTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxyLHtnZXQ6KCk9PntsZXQgbz1uLmNhY2hlP3RoaXMuX29wdGlvbnM6T0Eoe2F1ZGlvSWQ6dGhpcy5pZH0pLGM9ciBpbiBvP29bcl06bi5kZWZhdWx0O3JldHVybiB0eXBlb2YgYz09Im51bWJlciImJnIhPT0idm9sdW1lIj9jLzFlMzpjfSxzZXQ6bi5yZWFkb25seT92b2lkIDA6bz0+e3RoaXMuX29wdGlvbnNbcl09byxBQShXLmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zLHthdWRpb0lkOnRoaXMuaWR9KSl9fSl9KSxJQSgpfXBsYXkoKXt0aGlzLl9vcGVyYXRlKCJwbGF5Iil9cGF1c2UoKXt0aGlzLl9vcGVyYXRlKCJwYXVzZSIpfXN0b3AoKXt0aGlzLl9vcGVyYXRlKCJzdG9wIil9c2Vlayh0KXt0aGlzLl9vcGVyYXRlKCJzZWVrIix7Y3VycmVudFRpbWU6dCoxZTN9KX1kZXN0cm95KCl7RSh0aGlzLl9fdGltaW5nKSxJc1t0aGlzLmlkXSYmKElzW3RoaXMuaWRdLmNsb3NlKCksZGVsZXRlIElzW3RoaXMuaWRdKSxkZWxldGUgWnVbdGhpcy5pZF19X29wZXJhdGUodCxuKXtUQShXLmV4dGVuZCh7fSxuLHthdWRpb0lkOnRoaXMuaWQsb3BlcmF0aW9uVHlwZTp0fSkpfX1sZXQgSUE9Wi5vbmNlKCgpPT57SmQuZm9yRWFjaChlPT57WHUucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQpe1cuaXNGdW5jdGlvbih0KSYmdGhpcy5fY2FsbGJhY2tzW2VdLnB1c2godCl9fSksQV8uZm9yRWFjaChlPT57WHUucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQpe2xldCBuPXRoaXMuX2NhbGxiYWNrc1tlXSxyPW4uaW5kZXhPZih0KTtyPj0wJiZuLnNwbGljZShyLDEpfX0pfSk7ZnVuY3Rpb24gUXUoZSx0LG4scil7bGV0IG89YG9uJHtXLmNhcGl0YWxpemUodCl9YDtlLl9jYWxsYmFja3Nbb10uZm9yRWFjaChjPT57Vy5pc0Z1bmN0aW9uKGMpJiZjKHQ9PT0iZXJyb3IiP3tlcnJNc2c6bixlcnJDb2RlOnJ9Ont9KX0pfWxldCBOQT1NdChlXywoKT0+e2xldHthdWRpb0lkOmV9PUNBKCksdD1uZXcgWHUoZSk7cmV0dXJuIFp1W2VdPXQsdH0pLGtBPVsiY2FucGxheSIsInBsYXkiLCJwYXVzZSIsInN0b3AiLCJlbmRlZCIsInRpbWVVcGRhdGUiLCJwcmV2IiwibmV4dCIsImVycm9yIiwid2FpdGluZyJdLGdnPXtjYW5wbGF5OltdLHBsYXk6W10scGF1c2U6W10sc3RvcDpbXSxlbmRlZDpbXSx0aW1lVXBkYXRlOltdLHByZXY6W10sbmV4dDpbXSxlcnJvcjpbXSx3YWl0aW5nOltdfSxvbixlZj1udWxsLFJBPTI1MCx4QT1bInBsYXkiLCJwYXVzZSIsImVuZGVkIiwic3RvcCIsImNhbnBsYXkiXTtmdW5jdGlvbiBCQSgpe01jKCksZWwoe3N0YXRlOiJ0aW1lVXBkYXRlIn0pLGVmPWQoKCk9PntlbCh7c3RhdGU6InRpbWVVcGRhdGUifSl9LFJBKX1mdW5jdGlvbiBNYygpe2VmIT09bnVsbCYmRShlZil9ZnVuY3Rpb24gTEEoKXtpZihvbilyZXR1cm47bGV0IGU9c3QuaW52b2tlT25DYWxsYmFjaztvbj1zLmF1ZGlvLmNyZWF0ZVBsYXllcih7YXV0b3BsYXk6ITAsYmFja2dyb3VuZENvbnRyb2w6ITB9KSxvbi5zcmM9b24udGl0bGU9b24uZXBuYW1lPW9uLnNpbmdlcj1vbi5jb3ZlckltZ1VybD1vbi53ZWJVcmw9IiIsb24uc3RhcnRUaW1lPTAseEEuZm9yRWFjaCh0PT57b24uYWRkRXZlbnRMaXN0ZW5lcih0LCgpPT57dD09PSJwbGF5Ij8ob24uaXNTdG9wcGVkPSExLEJBKCkpOnQ9PT0ic3RvcCImJihvbi5pc1N0b3BwZWQ9ITApLCh0PT09InBhdXNlInx8dD09PSJlbmRlZCJ8fHQ9PT0ic3RvcCIpJiZNYygpO2xldCBuPWBvbk11c2ljJHt0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKX1gO2Uobix7ZGF0YVVybDpvbi5zcmMsZXJyTXNnOmAke259Om9rYH0pLGVsKHtzdGF0ZTp0LGRhdGFVcmw6b24uc3JjfSl9KX0pLG9uLmFkZEV2ZW50TGlzdGVuZXIoIndhaXRpbmciLCgpPT57TWMoKSxlbCh7c3RhdGU6IndhaXRpbmciLGRhdGFVcmw6b24uc3JjfSl9KSxvbi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsdD0+e01jKCksZSgib25NdXNpY0Vycm9yIix7ZGF0YVVybDpvbi5zcmMsZXJyTXNnOiJFcnJvcjoiK3QubWVzc2FnZX0pLGVsKHtzdGF0ZToiZXJyb3IiLGRhdGFVcmw6b24uc3JjLGVyck1zZzp0Lm1lc3NhZ2UsZXJyQ29kZTp0LmNvZGV9KX0pLG9uLmFkZEV2ZW50TGlzdGVuZXIoInByZXYiLCgpPT57ZWwoe3N0YXRlOiJwcmV2In0pfSksb24uYWRkRXZlbnRMaXN0ZW5lcigibmV4dCIsKCk9PntlbCh7c3RhdGU6Im5leHQifSl9KX1mdW5jdGlvbiBNQSgpe2xldCBlPXtkdXJhdGlvbjowLGN1cnJlbnRUaW1lOjAscGF1c2VkOiExLHNyYzoiIixidWZmZXJlZDowLHRpdGxlOiIiLGVwbmFtZToiIixzaW5nZXI6IiIsY292ZXJJbWdVcmw6IiIsd2ViVXJsOiIiLHN0YXJ0VGltZTowLGVyck1zZzoiZ2V0QmFja2dyb3VuZEF1ZGlvU3RhdGU6b2sifTtpZihvbil7bGV0IHQ9e2R1cmF0aW9uOm9uLmdldER1cmF0aW9uKCl8fDAsY3VycmVudFRpbWU6b24uaXNTdG9wcGVkPzA6b24uZ2V0UG9zaXRpb24oKSxwYXVzZWQ6b24uaXNQYXVzZWQoKSxzcmM6b24uc3JjLGJ1ZmZlcmVkOm9uLmdldEJ1ZmZlcmVkKCksdGl0bGU6b24udGl0bGUsZXBuYW1lOm9uLmVwbmFtZSxzaW5nZXI6b24uc2luZ2VyLGNvdmVySW1nVXJsOm9uLmNvdmVySW1nVXJsLHdlYlVybDpvbi53ZWJVcmwsc3RhcnRUaW1lOm9uLnN0YXJ0VGltZX07ZT1XLmV4dGVuZChlLHQpfXJldHVybiBlfWZ1bmN0aW9uIHBnKGUsdCl7TEEoKTtsZXQgbj1bInNyYyIsInN0YXJ0VGltZSIsImNvdmVySW1nVXJsIiwid2ViVXJsIiwic2luZ2VyIiwiZXBuYW1lIiwidGl0bGUiXTtpZih0PT09InBsYXliYWNrUmF0ZSIpe2xldCBvPWVbdF07b24ucGxheWJhY2tSYXRlJiZvbi5wbGF5YmFja1JhdGUocGFyc2VGbG9hdChvKSk7cmV0dXJufWxldCByPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2gobz0+e2lmKG4uaW5kZXhPZihvKT49MCl7bGV0IGM9ZVtvXTtvPT09blswXSYmYyYmKGM9amUoYykpLG9uW29dPXJbb109Y319KSxvbi5zZXRTdHlsZXMocil9ZnVuY3Rpb24gREEoe29wZXJhdGlvblR5cGU6ZSxzcmM6dCxwb3NpdGlvbjpuLGFwaTpyPSJvcGVyYXRlTXVzaWNQbGF5ZXIiLHRpdGxlOm8sY292ZXJJbWdVcmw6Y30pe3ZhciBoPVsicmVzdW1lIiwicGF1c2UiLCJzdG9wIl07cmV0dXJuIGguaW5kZXhPZihlKT4wP29uJiZvbltlXSgpOmU9PT0icGxheSI/KHBnKHtzcmM6dCxzdGFydFRpbWU6bix0aXRsZTpvLGNvdmVySW1nVXJsOmN9KSxvbi5wbGF5KCkpOmU9PT0ic2VlayImJm9uJiZvbi5zZWVrVG8obikse2Vyck1zZzpgJHtyfTpva2B9fWZ1bmN0aW9uIEZBKHtvcGVyYXRpb25UeXBlOmUsc3JjOnQsc3RhcnRUaW1lOm4sY3VycmVudFRpbWU6cn0pe3JldHVybiBEQSh7b3BlcmF0aW9uVHlwZTplLHNyYzp0LHBvc2l0aW9uOm58fHJ8fDAsYXBpOiJvcGVyYXRlQmFja2dyb3VuZEF1ZGlvIn0pfWZ1bmN0aW9uIGVsKHtzdGF0ZTplLGVyck1zZzp0LGVyckNvZGU6bixkYXRhVXJsOnJ9KXtnZ1tlXS5mb3JFYWNoKG89PntXLmlzRnVuY3Rpb24obykmJm8oZT09PSJlcnJvciI/e2Vyck1zZzp0LGVyckNvZGU6bn06e30pfSl9bGV0IFZBPVoub25jZSgoKT0+e2tBLmZvckVhY2goZT0+e3ZnLnByb3RvdHlwZVtgb24ke1cuY2FwaXRhbGl6ZShlKX1gXT1mdW5jdGlvbih0KXtnZ1tlXS5wdXNoKHQpfX0pfSksJEE9W3tuYW1lOiJkdXJhdGlvbiIscmVhZG9ubHk6ITB9LHtuYW1lOiJjdXJyZW50VGltZSIscmVhZG9ubHk6ITB9LHtuYW1lOiJwYXVzZWQiLHJlYWRvbmx5OiEwfSx7bmFtZToic3JjIixjYWNoZTohMH0se25hbWU6InN0YXJ0VGltZSIsZGVmYXVsdDowLGNhY2hlOiEwfSx7bmFtZToiYnVmZmVyZWQiLHJlYWRvbmx5OiEwfSx7bmFtZToidGl0bGUiLGNhY2hlOiEwfSx7bmFtZToiZXBuYW1lIixjYWNoZTohMH0se25hbWU6InNpbmdlciIsY2FjaGU6ITB9LHtuYW1lOiJjb3ZlckltZ1VybCIsY2FjaGU6ITB9LHtuYW1lOiJ3ZWJVcmwiLGNhY2hlOiEwfSx7bmFtZToicHJvdG9jb2wiLHJlYWRvbmx5OiEwLGRlZmF1bHQ6Imh0dHAifSx7bmFtZToicGxheWJhY2tSYXRlIixkZWZhdWx0OjEsY2FjaGU6ITB9XTtjbGFzcyB2Z3tjb25zdHJ1Y3Rvcigpe3RoaXMuX29wdGlvbnM9e30sJEEuZm9yRWFjaCh0PT57bGV0IG49dC5uYW1lO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLG4se2dldDooKT0+e2xldCByPXQuY2FjaGU/dGhpcy5fb3B0aW9uczpNQSgpO3JldHVybiBuIGluIHI/cltuXTp0LmRlZmF1bHR9LHNldDp0LnJlYWRvbmx5P3ZvaWQgMDpyPT57dGhpcy5fb3B0aW9uc1tuXT1yLHBnKHRoaXMuX29wdGlvbnMsbil9fSl9KSxWQSgpfXBsYXkoKXt0aGlzLl9vcGVyYXRlKCJwbGF5Iil9cGF1c2UoKXt0aGlzLl9vcGVyYXRlKCJwYXVzZSIpfXN0b3AoKXt0aGlzLl9vcGVyYXRlKCJzdG9wIil9c2Vlayh0KXt0aGlzLl9vcGVyYXRlKCJzZWVrIix7Y3VycmVudFRpbWU6dH0pfV9vcGVyYXRlKHQsbil7RkEoVy5leHRlbmQoe30sbix7b3BlcmF0aW9uVHlwZTp0fSkpfX1sZXQgbWcsVUE9TXQoX2IsKCk9Pm1nfHwobWc9bmV3IHZnKSk7Y2xhc3MgSEF7Y29uc3RydWN0b3IodCxuKXt0aGlzLmlkPXQsdGhpcy5jdHg9bn1zdGFydCh0KXtyZXR1cm4gR3QodGhpcy5jdHgsInN0YXJ0Iix0KX1zdG9wKHQpe3JldHVybiBHdCh0aGlzLmN0eCwic3RvcCIsdCl9cGF1c2UodCl7cmV0dXJuIEd0KHRoaXMuY3R4LCJwYXVzZSIsdCl9cmVzdW1lKHQpe3JldHVybiBHdCh0aGlzLmN0eCwicmVzdW1lIix0KX1zd2l0Y2hDYW1lcmEodCl7cmV0dXJuIEd0KHRoaXMuY3R4LCJzd2l0Y2hDYW1lcmEiLHQpfXNuYXBzaG90KHQpe3JldHVybiBHdCh0aGlzLmN0eCwic25hcHNob3QiLHQpfXRvZ2dsZVRvcmNoKHQpe3JldHVybiBHdCh0aGlzLmN0eCwidG9nZ2xlVG9yY2giLHQpfXBsYXlCR00odCl7cmV0dXJuIFV0KHRoaXMuY3R4LCJwbGF5QkdNIix0KX1zdG9wQkdNKHQpe3JldHVybiBHdCh0aGlzLmN0eCwic3RvcEJHTSIsdCl9cGF1c2VCR00odCl7cmV0dXJuIEd0KHRoaXMuY3R4LCJwYXVzZUJHTSIsdCl9cmVzdW1lQkdNKHQpe3JldHVybiBHdCh0aGlzLmN0eCwicmVzdW1lQkdNIix0KX1zZXRCR01Wb2x1bWUodCl7cmV0dXJuIFV0KHRoaXMuY3R4LCJzZXRCR01Wb2x1bWUiLHQpfXN0YXJ0UHJldmlldyh0KXtyZXR1cm4gR3QodGhpcy5jdHgsInN0YXJ0UHJldmlldyIsdCl9c3RvcFByZXZpZXcodCl7cmV0dXJuIEd0KHRoaXMuY3R4LCJzdG9wUHJldmlldyIsdCl9fWZ1bmN0aW9uIE5zKGUsdCxuLHIpe3N0Lmludm9rZVZpZXdNZXRob2QoImxpdmVwdXNoZXIuIitlLHtsaXZlUHVzaGVySWQ6ZSx0eXBlOm4sZGF0YTpyfSx0KX1jbGFzcyBqQXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMuaWQ9dCx0aGlzLnBhZ2VJZD1ufXN0YXJ0KCl7TnModGhpcy5pZCx0aGlzLnBhZ2VJZCwic3RhcnQiKX1zdG9wKCl7TnModGhpcy5pZCx0aGlzLnBhZ2VJZCwic3RvcCIpfXBhdXNlKCl7TnModGhpcy5pZCx0aGlzLnBhZ2VJZCwicGF1c2UiKX1yZXN1bWUoKXtOcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJyZXN1bWUiKX1zd2l0Y2hDYW1lcmEoKXtOcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJzd2l0Y2hDYW1lcmEiKX1zdGFydFByZXZpZXcoKXtOcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJwcmV2aWV3Iil9c3RvcFByZXZpZXcoKXtOcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJzdG9wIil9c25hcHNob3QoKXtOcyh0aGlzLmlkLHRoaXMucGFnZUlkLCJzbmFwc2hvdCIpfX1sZXQgekE9TXQodF8sKGUsdCk9PntpZih0LiRwYWdlLm1ldGEuaXNOVnVlKXtpZighdClyZXR1cm4gY29uc29sZS53YXJuKCJ1bmkuY3JlYXRlTGl2ZVB1c2hlckNvbnRleHQ6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSAxIHByZXNlbnQiKTtsZXQgbj1GdChlLHQpO3JldHVybiBuP25ldyBIQShlLG4pOmNvbnNvbGUud2FybigiQ2FuIG5vdCBmaW5kIGAiK2UrImAiKX1yZXR1cm4gbmV3IGpBKGUsdC4kcGFnZS5pZCl9LG5fKSxUaT0zLjE0MTU5MjY1MzU4OTc5MyxEYz02Mzc4MjQ1LEZjPS4wMDY2OTM0MjE2MjI5NjU5NDM7ZnVuY3Rpb24gV0EoZSx0KXtpZih0PSt0LGU9K2UsX2coZSx0KSlyZXR1cm5bZSx0XTtsZXQgbj1iZyhlLTEwNSx0LTM1KSxyPUVnKGUtMTA1LHQtMzUpLG89dC8xODAqVGksYz1NYXRoLnNpbihvKTtjPTEtRmMqYypjO2xldCBoPU1hdGguc3FydChjKTtuPW4qMTgwLyhEYyooMS1GYykvKGMqaCkqVGkpLHI9cioxODAvKERjL2gqTWF0aC5jb3MobykqVGkpO2xldCBiPXQrbixWPWUrcjtyZXR1cm5bZSoyLVYsdCoyLWJdfWZ1bmN0aW9uIEdBKGUsdCl7aWYodD0rdCxlPStlLF9nKGUsdCkpcmV0dXJuW2UsdF07bGV0IG49YmcoZS0xMDUsdC0zNSkscj1FZyhlLTEwNSx0LTM1KSxvPXQvMTgwKlRpLGM9TWF0aC5zaW4obyk7Yz0xLUZjKmMqYztsZXQgaD1NYXRoLnNxcnQoYyk7bj1uKjE4MC8oRGMqKDEtRmMpLyhjKmgpKlRpKSxyPXIqMTgwLyhEYy9oKk1hdGguY29zKG8pKlRpKTtsZXQgYj10K247cmV0dXJuW2UrcixiXX1sZXQgX2c9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTw3Mi4wMDR8fGU+MTM3LjgzNDd8fHQ8LjgyOTN8fHQ+NTUuODI3MXx8ITF9LGJnPWZ1bmN0aW9uKGUsdCl7bGV0IG49LTEwMCsyKmUrMyp0Ky4yKnQqdCsuMSplKnQrLjIqTWF0aC5zcXJ0KE1hdGguYWJzKGUpKTtyZXR1cm4gbis9KDIwKk1hdGguc2luKDYqZSpUaSkrMjAqTWF0aC5zaW4oMiplKlRpKSkqMi8zLG4rPSgyMCpNYXRoLnNpbih0KlRpKSs0MCpNYXRoLnNpbih0LzMqVGkpKSoyLzMsbis9KDE2MCpNYXRoLnNpbih0LzEyKlRpKSszMjAqTWF0aC5zaW4odCpUaS8zMCkpKjIvMyxufSxFZz1mdW5jdGlvbihlLHQpe2xldCBuPTMwMCtlKzIqdCsuMSplKmUrLjEqZSp0Ky4xKk1hdGguc3FydChNYXRoLmFicyhlKSk7cmV0dXJuIG4rPSgyMCpNYXRoLnNpbig2KmUqVGkpKzIwKk1hdGguc2luKDIqZSpUaSkpKjIvMyxuKz0oMjAqTWF0aC5zaW4oZSpUaSkrNDAqTWF0aC5zaW4oZS8zKlRpKSkqMi8zLG4rPSgxNTAqTWF0aC5zaW4oZS8xMipUaSkrMzAwKk1hdGguc2luKGUvMzAqVGkpKSoyLzMsbn07ZnVuY3Rpb24geWcoZSx0LG4pe2xldCByPXQuY29vcmRzO2lmKGUhPT10LmNvb3Jkc1R5cGUpe2xldCBvO2U9PT0id2dzODQiP289V0Eoci5sb25naXR1ZGUsci5sYXRpdHVkZSk6ZT09PSJnY2owMiImJihvPUdBKHIubG9uZ2l0dWRlLHIubGF0aXR1ZGUpKSxvJiYoci5sb25naXR1ZGU9b1swXSxyLmxhdGl0dWRlPW9bMV0pfW4oe3R5cGU6ZSxhbHRpdHVkZTpyLmFsdGl0dWRlfHwwLGxhdGl0dWRlOnIubGF0aXR1ZGUsbG9uZ2l0dWRlOnIubG9uZ2l0dWRlLHNwZWVkOnIuc3BlZWQsYWNjdXJhY3k6ci5hY2N1cmFjeSxhZGRyZXNzOnQuYWRkcmVzcyxlcnJNc2c6ImdldExvY2F0aW9uOm9rIn0pfWxldCBZQT1PZShlRSwoe3R5cGU6ZT0id2dzODQiLGdlb2NvZGU6dD0hMSxhbHRpdHVkZTpuPSExLGhpZ2hBY2N1cmFjeUV4cGlyZVRpbWU6cixpc0hpZ2hBY2N1cmFjeTpvPSExfSx7cmVzb2x2ZTpjLHJlamVjdDpofSk9PntzLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihiPT57eWcoZSxiLGMpfSxiPT57aWYoYi5jb2RlPT09MTUwMSl7eWcoZSxiLGMpO3JldHVybn1oKCJnZXRMb2NhdGlvbjpmYWlsICIrYi5tZXNzYWdlKX0se2dlb2NvZGU6dCxlbmFibGVIaWdoQWNjdXJhY3k6b3x8bix0aW1lb3V0OnIsY29vcmRzVHlwZTplfSl9LG5FLHRFKSxxQT1PZShYMCwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgbz1XaCgpIT09ImxpZ2h0IixjLGg9V2koe3VybDoiX191bmlhcHBjaG9vc2Vsb2NhdGlvbiIsZGF0YTpXLmV4dGVuZCh7fSxlLHtsb2NhbGU6SmwoKX0pLHN0eWxlOnthbmltYXRpb25UeXBlOmUuYW5pbWF0aW9uVHlwZXx8InNsaWRlLWluLWJvdHRvbSIsdGl0bGVOVmlldzohMSxwb3BHZXN0dXJlOiJjbG9zZSIsc2Nyb2xsSW5kaWNhdG9yOiJub25lIn0sb25NZXNzYWdlKHtldmVudDpiLGRldGFpbDpWfSl7Yj09PSJzZWxlY3RlZCImJihjPVYpfSxvbkNsb3NlKCl7byYmcy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImRhcmsiKSxjP3QoYyk6bigiY2FuY2VsIil9fSk7byYmKHMubmF2aWdhdG9yLnNldFN0YXR1c0JhclN0eWxlKCJsaWdodCIpLGgud2Vidmlldy5hZGRFdmVudExpc3RlbmVyKCJwb3BHZXN0dXJlIiwoe3R5cGU6YixyZXN1bHQ6Vn0pPT57Yj09PSJzdGFydCI/cy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoImRhcmsiKTpiPT09ImVuZCImJiFWJiZzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSgibGlnaHQiKX0pKX0sUTApLEtBPU9lKHJFLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+KFdpKHt1cmw6Il9fdW5pYXBwb3BlbmxvY2F0aW9uIixkYXRhOlcuZXh0ZW5kKHt9LGUse2xvY2FsZTpKbCgpfSksc3R5bGU6e3RpdGxlTlZpZXc6e3R5cGU6InRyYW5zcGFyZW50In0scG9wR2VzdHVyZToiY2xvc2UiLGJhY2tCdXR0b25BdXRvQ29udHJvbDoiY2xvc2UifSxvbkNsb3NlKCl7bigiY2FuY2VsIil9fSksdCgpKSxvRSxpRSksVmM9ITEsc2M9MCxKQT1PZShpeSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntzYz1zY3x8cy5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHI9PntWYz0hMCxzdC5pbnZva2VPbkNhbGxiYWNrKENoLHIuY29vcmRzKX0scj0+e1ZjfHwobihyLm1lc3NhZ2UpLFZjPSEwKSxzdC5pbnZva2VPbkNhbGxiYWNrKEFoLHtlcnJNc2c6YG9uTG9jYXRpb25DaGFuZ2U6ZmFpbCAke3IubWVzc2FnZX1gfSl9LHtjb29yZHNUeXBlOmU9PW51bGw/dm9pZCAwOmUudHlwZX0pLGsodCwxMDApfSxseSxjeSksWkE9T2Uob3ksKGUse3Jlc29sdmU6dH0pPT57c2MmJihzLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2goc2MpLFZjPSExLHNjPTApLHQoKX0pLFhBPWduKENoLCgpPT57fSksUUE9SnIoYXksKCk9Pnt9KSxlTz1nbihBaCwoKT0+e30pLHRPPUpyKHN5LCgpPT57fSksbk89T2UoWXksKHt0aXRsZTplPSIiLGNvbnRlbnQ6dD0iIixzaG93Q2FuY2VsOm49ITAsY2FuY2VsVGV4dDpyLGNhbmNlbENvbG9yOm8sY29uZmlybVRleHQ6Yyxjb25maXJtQ29sb3I6aCxlZGl0YWJsZTpiPSExLHBsYWNlaG9sZGVyVGV4dDpWPSIifT17fSx7cmVzb2x2ZTpUfSk9PntsZXQgRD1uP1tyLGNdOltjXSxfZT1iP1Y6RDt0PXR8fCIgIixzLm5hdGl2ZVVJW2I/InByb21wdCI6ImNvbmZpcm0iXSh0LFNlPT57aWYobil7bGV0IEllPVNlLmluZGV4PT09MSx1dD17Y29uZmlybTpJZSxjYW5jZWw6U2UuaW5kZXg9PT0wfHxTZS5pbmRleD09PS0xfTtJZSYmYiYmKHV0LmNvbnRlbnQ9U2UudmFsdWUpLFQodXQpfWVsc2V7bGV0IEllPXtjb25maXJtOlNlLmluZGV4PT09MCxjYW5jZWw6ITF9O2ImJihJZS5jb250ZW50PVNlLnZhbHVlKSxUKEllKX19LGUsX2UsRCl9LHF5LEt5KSxyTz17bGlnaHQ6e2l0ZW1Db2xvcjoiIzAwMDAwMCJ9LGRhcms6e2l0ZW1Db2xvcjoicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpIn19LGlPPU9lKFV5LCh7aXRlbUxpc3Q6ZT1bXSxpdGVtQ29sb3I6dCx0aXRsZTpuPSIiLHBvcG92ZXI6cn0se3Jlc29sdmU6byxyZWplY3Q6Y30pPT57dD09PSIjMDAwIiYmQi5kYXJrbW9kZSYmKHQ9ck9bcy5uYXZpZ2F0b3IuZ2V0VUlTdHlsZSgpXS5pdGVtQ29sb3IpLEsoKTtsZXR7dDpofT1zZSgpLGI9e3RpdGxlOm4sY2FuY2VsOmgoInVuaS5zaG93QWN0aW9uU2hlZXQuY2FuY2VsIiksYnV0dG9uczplLm1hcChWPT4oe3RpdGxlOlYsY29sb3I6dH0pKX07cy5uYXRpdmVVSS5hY3Rpb25TaGVldChXLmV4dGVuZChiLHtwb3BvdmVyOnJ9KSxWPT57Vi5pbmRleD4wP28oe3RhcEluZGV4OlYuaW5kZXgtMX0pOmMoInNob3dBY3Rpb25TaGVldDpmYWlsIGNhbmNlbCIpfSl9LEh5LGp5KSxsYyx0Zj0hMSwkYz0iIixVYyxvTz1PZSh6eSwoZSx0KT0+U2coVy5leHRlbmQoe30sZSx7dHlwZToibG9hZGluZyIsaWNvbjoibG9hZGluZyJ9KSx0KSxXeSxHeSksU2c9KHt0aXRsZTplPSIiLGljb246dD0ic3VjY2VzcyIsaW1hZ2U6bj0iIixkdXJhdGlvbjpyPTE1MDAsbWFzazpvPSExLHBvc2l0aW9uOmMsdHlwZTpoPSJ0b2FzdCIsc3R5bGU6Yn0se3Jlc29sdmU6VixyZWplY3Q6VH0pPT57aWYoSGMoIiIpLCRjPWgsWyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iXS5pbmNsdWRlcyhTdHJpbmcoYykpKXMubmF0aXZlVUkudG9hc3QoZSx7dmVydGljYWxBbGlnbjpjfSksdGY9ITA7ZWxzZXt0JiYhflsic3VjY2VzcyIsImxvYWRpbmciLCJlcnJvciIsIm5vbmUiXS5pbmRleE9mKHQpJiYodD0ic3VjY2VzcyIpO2xldCBEPXttb2RhbDpvLGJhY2s6InRyYW5zbWl0IixwYWRkaW5nOiIxMHB4IixzaXplOiIxNnB4In07IW4mJighdHx8dD09PSJub25lIik/RC5sb2FkaW5nPXtkaXNwbGF5OiJub25lIn06KEQud2lkdGg9IjE0MHB4IixELmhlaWdodD0iMTEycHgiKSxuP0QubG9hZGluZz17ZGlzcGxheToiYmxvY2siLGhlaWdodDoiNTVweCIsaWNvbjpuLGludGVydmFsOnJ9Olsic3VjY2VzcyIsImVycm9yIl0uaW5kZXhPZih0KSE9PS0xJiYoRC5sb2FkaW5nPXtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OiI1NXB4IixpY29uOnQ9PT0ic3VjY2VzcyI/Il9fdW5pYXBwc3VjY2Vzcy5wbmciOiJfX3VuaWFwcGVycm9yLnBuZyIsaW50ZXJ2YWw6cn0pO3RyeXtsYz1zLm5hdGl2ZVVJLnNob3dXYWl0aW5nKGUsVy5leHRlbmQoRCxiKSl9Y2F0Y2goX2Upe1QoYCR7X2V9YCl9fXJldHVybiAkYz09PSJ0b2FzdCImJihVYz1rKCgpPT57SGMoIiIpfSxyKSksVigpfSxhTz1PZShKeSxTZyxYeSxReSksc089T2UoSXksKGUsdCk9PkhjKCJ0b2FzdCIsdCkpLGxPPU9lKFB5LChlLHQpPT5IYygibG9hZGluZyIsdCkpO2Z1bmN0aW9uIEhjKGU9InRvYXN0Iix0KXtyZXR1cm4gZSYmZSE9PSRjfHwoVWMmJihTKFVjKSxVYz1udWxsKSx0Zj9zLm5hdGl2ZVVJLmNsb3NlVG9hc3QoKTpsYyYmbGMuY2xvc2UmJmxjLmNsb3NlKCksbGM9bnVsbCx0Zj0hMSwkYz0iIiksdCYmdC5yZXNvbHZlKCl9bGV0IGNPPU9lKGVTLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2xldCByPXpoKCk7aWYociYmci5lbmRQdWxsVG9SZWZyZXNoKCkscj14YygpLCFyKXJldHVybiBuKCk7ci5iZWdpblB1bGxUb1JlZnJlc2goKSxXdShyKSx0KCl9KSx1Tz1PZSh0UywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj16aCgpfHx4YygpO2lmKCFyKXJldHVybiBuKCk7ci5lbmRQdWxsVG9SZWZyZXNoKCksV3UobnVsbCksdCgpfSksZk89T2UoTmgsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9ZXIoX3IoKSk7c3QuaW52b2tlVmlld01ldGhvZChOaCxlLHIsbz0+e28/bihvKTp0KCl9KX0sTnkpLGRPPU9lKGtoLChlLHtyZXNvbHZlOnR9KT0+e2xldCBuPWVyKF9yKCkpO3N0Lmludm9rZVZpZXdNZXRob2Qoa2gsZSxuLHQpfSxWeSwkeSksaE89T2UoTHksKHtfX3BhZ2VfXzplLHRpdGxlOnR9LHtyZXNvbHZlOm4scmVqZWN0OnJ9KT0+e2xldCBvPUhoKGUpO2lmKG8pe2xldCBjPW8uZ2V0U3R5bGUoKTtjJiZjLnRpdGxlTlZpZXcmJm8uc2V0U3R5bGUoe3RpdGxlTlZpZXc6e3RpdGxlVGV4dDp0fX0pLG4oKX1lbHNlIHIoKX0sTXkpLGdPPU9lKER5LChlLHtyZXNvbHZlOnR9KT0+e3MubmF0aXZlVUkuc2hvd1dhaXRpbmcoIiIse21vZGFsOiExfSksdCgpfSkscE89T2UoRnksKGUse3Jlc29sdmU6dH0pPT57cy5uYXRpdmVVSS5jbG9zZVdhaXRpbmcoKSx0KCl9KTtmdW5jdGlvbiB2TyhlKXtsZXQgdD1QbigpOyF0Lmxlbmd0aHx8KHRbdC5sZW5ndGgtMV0uJHBhZ2Uuc3RhdHVzQmFyU3R5bGU9ZSl9bGV0IG1PPU9lKFJ5LCh7X19wYWdlX186ZSxmcm9udENvbG9yOnQsYmFja2dyb3VuZENvbG9yOm59LHtyZXNvbHZlOnIscmVqZWN0Om99KT0+e2xldCBjPUhoKGUpO2lmKGMpe2xldCBoPXt9O3QmJihoLnRpdGxlQ29sb3I9dCksbiYmKGguYmFja2dyb3VuZENvbG9yPW4pO2xldCBiPXQ9PT0iIzAwMDAwMCI/ImRhcmsiOiJsaWdodCI7cy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGUoYiksdk8oYik7bGV0IFY9Yy5nZXRTdHlsZSgpO1YmJlYudGl0bGVOVmlldyYmKFYudGl0bGVOVmlldy5hdXRvQmFja0J1dHRvbiYmKGguYmFja0J1dHRvbj1oLmJhY2tCdXR0b258fHt9LGguYmFja0J1dHRvbi5jb2xvcj10KSxjLnNldFN0eWxlKHt0aXRsZU5WaWV3Omh9KSkscigpfWVsc2UgbygpfSxCeSx4eSksX089T2UoeVMsKHtpbmRleDplLHRleHQ6dH0se3Jlc29sdmU6bixyZWplY3Q6cn0pPT57ZGkuc2V0VGFiQmFyQmFkZ2UoInRleHQiLGUsdCksbigpfSxTUyx3UyksYk89T2UoblMsKHtpbmRleDplLHRleHQ6dCxpY29uUGF0aDpuLHNlbGVjdGVkSWNvblBhdGg6cixwYWdlUGF0aDpvLHZpc2libGU6YyxpY29uZm9udDpofSx7cmVzb2x2ZTpifSk9PntpZihkaS5zZXRUYWJCYXJJdGVtKGUsdCxuLHIsYyxoKSxvKXtsZXQgVj1CLnRhYkJhci5saXN0W2VdO2lmKFYpe2xldCBUPVYucGFnZVBhdGgsRD1aLnJlbW92ZUxlYWRpbmdTbGFzaChvKTtEIT09VCYmYXMoZSxULEQpfX1iKCl9LHJTLGlTKSxFTz1PZShvUywoZT17fSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntpZighdGMoKSlyZXR1cm4gbigibm90IFRhYkJhciBwYWdlIik7ZS5ib3JkZXJTdHlsZT1aLm5vcm1hbGl6ZVRhYkJhclN0eWxlcyhlLmJvcmRlclN0eWxlKSxkaS5zZXRUYWJCYXJTdHlsZShlKSx0KCl9LGFTLGxTKSx5Tz1PZShjUywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lJiZlLmFuaW1hdGlvbjtpZighdGMoKSlyZXR1cm4gbigibm90IFRhYkJhciBwYWdlIik7ZGkuaGlkZVRhYkJhcihCb29sZWFuKHIpKSx0KCl9LFJoKSxTTz1PZSh1UywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lJiZlLmFuaW1hdGlvbjtpZighdGMoKSlyZXR1cm4gbigibm90IFRhYkJhciBwYWdlIik7ZGkuc2hvd1RhYkJhcihCb29sZWFuKHIpKSx0KCl9LGZTKSx3Tz1PZShwUywoe2luZGV4OmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e2RpLnNldFRhYkJhckJhZGdlKCJyZWREb3QiLGUpLHQoKX0sdlMsbVMpLHdnPWU9PmRpLnNldFRhYkJhckJhZGdlKCJub25lIixlKSxDTz1PZShfUywoe2luZGV4OmV9LHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e3dnKGUpLHQoKX0sYlMsRVMpLEFPPU9lKGRTLCh7aW5kZXg6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57d2coZSksdCgpfSxoUyxnUyksQ2c9InZkU3luYyIsT089Il9fdW5pYXBwX19zZXJ2aWNlIixrbD0ib25XZWJ2aWV3UmVhZHkiLFRPPTAsUE89IndlYnZpZXdJbnNlcnRlZCIsSU89IndlYnZpZXdSZW1vdmVkIixBZz0iVW5pQXBwU3ViTlZ1ZSI7Y2xhc3MgTk97Y29uc3RydWN0b3IodCxuKXt0aGlzLmNhbGxiYWNrcz1bXTtsZXQgcj10aGlzLndlYnZpZXc9cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKHQpO2lmKHRoaXMuaXNTdWI9bnx8ITEsci5fX3VuaWFwcF9tYXNrX2lkKXtsZXQgbz10aGlzLm1hc2tXZWJ2aWV3PXIuX191bmlhcHBfbWFza19pZD09PSIwIj97c2V0U3R5bGUoe21hc2s6aH0pe1dvKCJ1bmktdGFidmlldyIpLnNldE1hc2soe2NvbG9yOmh9KX19OnMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChyLl9fdW5pYXBwX21hc2tfaWQpLGM9ZnVuY3Rpb24oKXtvLnNldFN0eWxlKHttYXNrOiJub25lIn0pfTtyLmFkZEV2ZW50TGlzdGVuZXIoImhpZGUiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLGMpfX1zaG93KC4uLnQpe2lmKHRoaXMubWFza1dlYnZpZXcpe2xldCBuPXRoaXMud2Vidmlldy5fX3VuaWFwcF9tYXNrO3RoaXMubWFza1dlYnZpZXcuc2V0U3R5bGUoe21hc2s6bn0pfXRoaXMud2Vidmlldy5zaG93KC4uLnQpfWhpZGUoLi4udCl7dGhpcy53ZWJ2aWV3LmhpZGUoLi4udCl9c2V0U3R5bGUodCl7dGhpcy53ZWJ2aWV3LnNldFN0eWxlKHQpfWluaXRNZXNzYWdlKCl7aWYodGhpcy5tZXNzYWdlUmVhZHkpcmV0dXJuO3RoaXMubWVzc2FnZVJlYWR5PSEwO2xldCB0PXI9PntpZihyLmRhdGEmJnIuZGF0YS50eXBlPT09QWcpe2xldCBvPXIuZGF0YS50YXJnZXQ7by5pZD09PXRoaXMud2Vidmlldy5pZCYmby5pc1N1Yj09PXRoaXMuaXNTdWImJnRoaXMuY2FsbGJhY2tzLmZvckVhY2goYz0+e2Moe29yaWdpbjp0aGlzLndlYnZpZXcuX191bmlhcHBfaG9zdCxkYXRhOnIuZGF0YS5kYXRhfSl9KX19O1dvKCJnbG9iYWxFdmVudCIpLmFkZEV2ZW50TGlzdGVuZXIoInBsdXNNZXNzYWdlIix0KSx0aGlzLndlYnZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiY2xvc2UiLCgpPT57dGhpcy5jYWxsYmFja3MubGVuZ3RoPTB9KX1wb3N0TWVzc2FnZSh0KXtzLndlYnZpZXcucG9zdE1lc3NhZ2VUb1VuaU5WaWV3KHt0eXBlOkFnLGRhdGE6dCx0YXJnZXQ6e2lkOnRoaXMud2Vidmlldy5pZCxpc1N1YjohdGhpcy5pc1N1Yn19LE9PKX1vbk1lc3NhZ2UodCl7dGhpcy5pbml0TWVzc2FnZSgpLHRoaXMuY2FsbGJhY2tzLnB1c2godCl9fWxldCBrTz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgTk8oZSx0KX07ZnVuY3Rpb24gUk8oZSx0LG4scixvLGMsaCl7cyE9PW4mJih3PWZuPWUsZz10LHM9bixJdyhzLm5hdmlnYXRvci5zZXRTdGF0dXNCYXJTdHlsZSkscy5uYXZpZ2F0b3Iuc2V0U3RhdHVzQmFyU3R5bGU9Rmgsaz1yLFM9byxkPWMsRT1oKSxCLnNlcnZpY2VSZWFkeT0hMH1mdW5jdGlvbiB4Tygpe2xldCBlPVsiQXJyYXlCdWZmZXIiLCJJbnQ4QXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJJbnQxNkFycmF5IiwiVWludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiXSx0PXt9O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1lW25dO3Rbcl09Z2xvYmFsW3JdfXJldHVybiB0fWZ1bmN0aW9uIEJPKGUpe1cuZXh0ZW5kKGdsb2JhbCxlKX1sZXQgT2c9e29hdXRoKGUpe3Mub2F1dGguZ2V0U2VydmljZXModD0+e3Q9dDtsZXQgbj1bXTt0LmZvckVhY2goKHtpZDpyfSk9PntuLnB1c2gocil9KSxlKG51bGwsbix0KX0sdD0+e3Q9dCxlKHQpfSl9LHNoYXJlKGUpe3Muc2hhcmUuZ2V0U2VydmljZXModD0+e3Q9dDtsZXQgbj1bXTt0LmZvckVhY2goKHtpZDpyfSk9PntuLnB1c2gocil9KSxlKG51bGwsbix0KX0sdD0+e2UodCl9KX0scGF5bWVudChlKXtzLnBheW1lbnQuZ2V0Q2hhbm5lbHModD0+e2xldCBuPVtdO3QuZm9yRWFjaCgoe2lkOnJ9KT0+e24ucHVzaChyKX0pLGUobnVsbCxuLHQpfSx0PT57ZSh0KX0pfSxwdXNoKGUpe2lmKHR5cGVvZiBnIT0idW5kZWZpbmVkInx8dHlwZW9mIHMhPSJ1bmRlZmluZWQiKXtsZXQgdD1zLnB1c2guZ2V0Q2xpZW50SW5mbygpO2UobnVsbCxbdC5pZF0sW3RdKX1lbHNlIGUobnVsbCxbXSl9fSxMTz1PZShDUywoe3NlcnZpY2U6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57T2dbZV0/T2dbZV0oKHIsbz1bXSxjPVtdKT0+e3I/bihyLm1lc3NhZ2UpOnQoe3NlcnZpY2U6ZSxwcm92aWRlcjpvLHByb3ZpZGVyczpjLm1hcChoPT4odHlwZW9mIGguc2VydmljZVJlYWR5PT0iYm9vbGVhbiImJihoLmlzQXBwRXhpc3Q9aC5zZXJ2aWNlUmVhZHkpLHR5cGVvZiBoLm5hdGl2ZUNsaWVudD09ImJvb2xlYW4iJiYoaC5pc0FwcEV4aXN0PWgubmF0aXZlQ2xpZW50KSxoKSl9KX0pOm4oInNlcnZpY2Ugbm90IGZvdW5kIil9LEFTKSxqYztmdW5jdGlvbiBjYyhlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9PntzLm9hdXRoLmdldFNlcnZpY2VzKHI9PntsZXQgbz1yLmZpbmQoKHtpZDpjfSk9PmM9PT1lKTtvP3Qobyk6bihuZXcgRXJyb3IoInByb3ZpZGVyIG5vdCBmaW5kIikpfSxuKX0pfWxldCBUZz1PZShPUywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1lLnByb3ZpZGVyfHwid2VpeGluIixvPWZyKG4pLGM9cj09PSJhcHBsZSIsaD1jP3tzY29wZToiZW1haWwifTplLnVuaXZlcmlmeVN0eWxlP3t1bml2ZXJpZnlTdHlsZTpGTyhlLnVuaXZlcmlmeVN0eWxlLG8pfTp7fTtjYyhyKS50aGVuKGI9PntmdW5jdGlvbiBWKCl7aWYoZS5vbmx5QXV0aG9yaXplJiZyPT09IndlaXhpbiIpe2IuYXV0aG9yaXplKCh7Y29kZTpUfSk9Pnt0KHtjb2RlOlQsYXV0aFJlc3VsdDoiIn0pfSxvKTtyZXR1cm59Yi5sb2dpbihUPT57bGV0IEQ9VC50YXJnZXQuYXV0aFJlc3VsdCxfZT1ULnRhcmdldC5hcHBsZUluZm87dCh7Y29kZTpELmNvZGUsYXV0aFJlc3VsdDpELGFwcGxlSW5mbzpfZX0pfSxvLGgpfWN8fHI9PT0idW5pdmVyaWZ5Ij9WKCk6Yi5sb2dvdXQoVixWKX0pLmNhdGNoKG8pfSxUUyksUGc9KGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9ZS5wcm92aWRlcnx8IndlaXhpbiIsbz1mcihuKTtjYyhyKS50aGVuKGM9PntjLmdldFVzZXJJbmZvKGg9PntsZXQgYj17bmlja05hbWU6IiJ9O2lmKHI9PT0id2VpeGluIil7bGV0IFQ9Yy51c2VySW5mbztUJiYoYj17b3BlbklkOlQub3BlbmlkLG5pY2tOYW1lOlQubmlja25hbWUsZ2VuZGVyOlQuc2V4LGNpdHk6VC5jaXR5LHByb3ZpbmNlOlQucHJvdmluY2UsY291bnRyeTpULmNvdW50cnksYXZhdGFyVXJsOlQuaGVhZGltZ3VybCx1bmlvbklkOlQudW5pb25pZH0pfWVsc2UgaWYocj09PSJhcHBsZSIpe2xldCBUPWMuYXBwbGVJbmZvO1QmJihiPXtvcGVuSWQ6VC51c2VyLGZ1bGxOYW1lOlQuZnVsbE5hbWUsZW1haWw6VC5lbWFpbCxhdXRob3JpemF0aW9uQ29kZTpULmF1dGhvcml6YXRpb25Db2RlLGlkZW50aXR5VG9rZW46VC5pZGVudGl0eVRva2VuLHJlYWxVc2VyU3RhdHVzOlQucmVhbFVzZXJTdGF0dXN9KX1lbHNlIGI9Yy51c2VySW5mbyxiJiYoYi5vcGVuSWQ9Yi5vcGVuSWR8fGIub3BlbmlkfHxjLmF1dGhSZXN1bHQub3BlbmlkLGIubmlja05hbWU9Yi5uaWNrTmFtZXx8Yi5uaWNrbmFtZSxiLmF2YXRhclVybD1iLmF2YXRhclVybHx8Yi5oZWFkaW1ndXJsKTtsZXQgVj17fTtlLmRhdGEmJmUuZGF0YS5hcGlfbmFtZT09PSJ3ZWJhcGlfZ2V0dXNlcmluZm8iP1YuZGF0YT17ZGF0YTpKU09OLnN0cmluZ2lmeShiKSxyYXdEYXRhOiIiLHNpZ25hdHVyZToiIixlbmNyeXB0ZWREYXRhOiIiLGl2OiIifTpWLnVzZXJJbmZvPWIsdChWKX0sbyl9KS5jYXRjaCgoKT0+e24oIlx1OEJGN1x1NTE0OFx1OEMwM1x1NzUyOCB1bmkubG9naW4iKX0pfSxNTz1PZShQUyxQZyxJUyksRE89T2UoTlMsUGcsa1MpLElnPU9lKFJTLCh7cHJvdmlkZXI6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9WHModCksbz1mcihuKTtjYyhlKS50aGVuKGM9PmMucHJlTG9naW4ocixvKSkuY2F0Y2gobyl9LExTLEJTKSxOZz0oKT0+Y2MoInVuaXZlcmlmeSIpLnRoZW4oZT0+ZS5jbG9zZUF1dGhWaWV3KCkpLGtnPU10KE1TLE5nKSxSZz1PZShEUywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1Ycyh0KSxvPWZyKG4pO3RyeXtjYygidW5pdmVyaWZ5IikudGhlbihjPT57bGV0IGg9Yy5nZXRDaGVja0JveFN0YXRlKCk7cih7c3RhdGU6aH0pfSl9Y2F0Y2goYyl7byhjKX19KTtmdW5jdGlvbiBGTyhlLHQpe3JldHVybiBXLmlzUGxhaW5PYmplY3QoZSkmJlcuaXNQbGFpbk9iamVjdChlLmJ1dHRvbnMpJiZXLnRvVHlwZVN0cmluZyhlLmJ1dHRvbnMubGlzdCk9PT0iW29iamVjdCBBcnJheV0iJiZlLmJ1dHRvbnMubGlzdC5mb3JFYWNoKChuLHIpPT57ZS5idXR0b25zLmxpc3Rbcl0ub25jbGljaz1mdW5jdGlvbigpe2xldCBvPXtjb2RlOiIzMDAwOCIsbWVzc2FnZToiXHU3NTI4XHU2MjM3XHU3MEI5XHU1MUZCXHU0RTg2XHU4MUVBXHU1QjlBXHU0RTQ5XHU2MzA5XHU5NEFFIixpbmRleDpyLHByb3ZpZGVyOm4ucHJvdmlkZXJ9O1cuaXNQbGFpbk9iamVjdChqYyk/amMuX3RyaWdnZXJVbml2ZXJpZnlCdXR0b25zQ2xpY2sobyk6TmcoKS50aGVuKCgpPT57dChvKX0pfX0pLGV9Y2xhc3MgVk97Y29uc3RydWN0b3IoKXt0aGlzLnByb3ZpZGVyPSJ1bml2ZXJpZnkiLHRoaXMuZXZlbnROYW1lPSJhcGkudW5pdmVyaWZ5QnV0dG9uc0NsaWNrIn1jbG9zZSgpe3JldHVybiBrZygpfWxvZ2luKHQpe3JldHVybiBUZyh0aGlzLl9nZXRPcHRpb25zKHQpKX1nZXRDaGVja0JveFN0YXRlKHQpe3JldHVybiBSZyh0KX1wcmVMb2dpbih0KXtyZXR1cm4gSWcodGhpcy5fZ2V0T3B0aW9ucyh0KSl9b25CdXR0b25zQ2xpY2sodCl7c3Qub24odGhpcy5ldmVudE5hbWUsdCl9b2ZmQnV0dG9uc0NsaWNrKHQpe3N0Lm9mZih0aGlzLmV2ZW50TmFtZSx0KX1fdHJpZ2dlclVuaXZlcmlmeUJ1dHRvbnNDbGljayh0KXtzdC5lbWl0KHRoaXMuZXZlbnROYW1lLHQpfV9nZXRPcHRpb25zKHQ9e30pe3JldHVybiBXLmV4dGVuZCh7fSx0LHtwcm92aWRlcjp0aGlzLnByb3ZpZGVyfSl9fWxldCAkTz1NdChGUywoKT0+amN8fChqYz1uZXcgVk8pKSxVTz1PZShZUywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1jZygpO2lmKHIubm90aWZpY2F0aW9uQXV0aG9yaXplZCE9PSJhdXRob3JpemVkIilyZXR1cm4gbigibm90aWZpY2F0aW9uQXV0aG9yaXplZDogIityLm5vdGlmaWNhdGlvbkF1dGhvcml6ZWQpO2xldCBvPVcuZXh0ZW5kKHt9LGUpO2RlbGV0ZSBvLmNvbnRlbnQsZGVsZXRlIG8ucGF5bG9hZCxzLnB1c2guY3JlYXRlTWVzc2FnZShlLmNvbnRlbnQsZS5wYXlsb2FkLG8pLHQoKX0sdm9pZCAwLHFTKSxITz1NdCgicmVnaXN0ZXJSdW50aW1lIixlPT57Vy5leHRlbmQoanNSdW50aW1lLGUpfSksak89ezA6e25hbWU6IndlYiIsdGl0bGU6Ilx1NTZGRVx1NjU4NyJ9LDE6e25hbWU6InRleHQiLHRpdGxlOiJcdTdFQUZcdTY1ODdcdTVCNTcifSwyOntuYW1lOiJpbWFnZSIsdGl0bGU6Ilx1N0VBRlx1NTZGRVx1NzI0NyJ9LDM6e25hbWU6Im11c2ljIix0aXRsZToiXHU5N0YzXHU0RTUwIn0sNDp7bmFtZToidmlkZW8iLHRpdGxlOiJcdTg5QzZcdTk4OTEifSw1OntuYW1lOiJtaW5pUHJvZ3JhbSIsdGl0bGU6Ilx1NUMwRlx1N0EwQlx1NUU4RiJ9fSx6Tz1lPT57ZS50eXBlPWUudHlwZXx8MDtsZXR7cHJvdmlkZXI6dCx0eXBlOm4sdGl0bGU6cixzdW1tYXJ5Om8saHJlZjpjLGltYWdlVXJsOmgsbWVkaWFVcmw6YixzY2VuZTpWLG1pbmlQcm9ncmFtOlQsb3BlbkN1c3RvbWVyU2VydmljZUNoYXQ6RCxjb3JwaWQ6X2UsY3VzdG9tZXJVcmw6U2V9PWU7Vy5pc1N0cmluZyhoKSYmaCYmKGg9amUoaCkpO2xldCBJZT1qT1tuXTtpZihJZSl7bGV0IHV0PXtwcm92aWRlcjp0LHR5cGU6SWUubmFtZSx0aXRsZTpyLGNvbnRlbnQ6byxocmVmOmMscGljdHVyZXM6W2hdLHRodW1iczpoP1toXTp2b2lkIDAsbWVkaWE6YixtaW5pUHJvZ3JhbTpULGV4dHJhOntzY2VuZTpWfSxvcGVuQ3VzdG9tZXJTZXJ2aWNlQ2hhdDpELGNvcnBpZDpfZSx1cmw6U2V9O3JldHVybiB0PT09IndlaXhpbiImJihuPT09MXx8bj09PTIpJiZkZWxldGUgdXQudGh1bWJzLHV0fXJldHVybiJcdTUyMDZcdTRFQUJcdTUzQzJcdTY1NzAgdHlwZSBcdTRFMERcdTZCNjNcdTc4NkUifSx4Zz1mdW5jdGlvbihlLHQsbixyLG89InNoYXJlIil7bGV0IGM9ZnIociksaD10Lm9wZW5DdXN0b21lclNlcnZpY2VDaGF0PyJvcGVuQ3VzdG9tZXJTZXJ2aWNlQ2hhdCI6InNlbmQiO3RyeXtlW2hdKHQsKCk9PntuKCl9LGMpfWNhdGNoKGIpe2Moe21lc3NhZ2U6YCR7dC5wcm92aWRlcn0gJHtofSBcdTY1QjlcdTZDRDVcdThDMDNcdTc1MjhcdTU5MzFcdThEMjVgfSl9fSxXTz1PZShWUywoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj16TyhlKSxvPWZyKG4pO2lmKFcuaXNTdHJpbmcocikpcmV0dXJuIG4ocik7cy5zaGFyZS5nZXRTZXJ2aWNlcyhjPT57bGV0IGg9Yy5maW5kKCh7aWQ6Yn0pPT5iPT09ci5wcm92aWRlcik7aD9oLmF1dGhlbnRpY2F0ZWQ/eGcoaCxyLHQsbik6aC5hdXRob3JpemUoKCk9PnhnKGgscix0LG4pLG8pOm4oInNlcnZpY2Ugbm90IGZvdW5kIil9LG8pfSxVUywkUyksR089T2UoSFMsKHt0eXBlOmUsaW1hZ2VVcmw6dCxzdW1tYXJ5Om4saHJlZjpyfSx7cmVzb2x2ZTpvLHJlamVjdDpjfSk9PntsZXQgaD1mcihjKTtXLmlzU3RyaW5nKHQpJiZ0JiYodD1qZSh0KSkscy5zaGFyZS5zZW5kV2l0aFN5c3RlbSh7dHlwZTplLHBpY3R1cmVzOnQ/W3RdOnZvaWQgMCxjb250ZW50Om4saHJlZjpyfSwoKT0+bygpLGgpfSx6UyxqUyksWU89T2UoV1MsKGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0IHI9ZS5wcm92aWRlcixvPWZyKG4pO3MucGF5bWVudC5nZXRDaGFubmVscyhjPT57bGV0IGg9Yy5maW5kKCh7aWQ6Yn0pPT5iPT09cik7aD9zLnBheW1lbnQucmVxdWVzdChoLGUub3JkZXJJbmZvLGI9Pnt0KGIpfSxvKTpuKCJzZXJ2aWNlIG5vdCBmb3VuZCIpfSxvKX0sR1MpLEJnPWVnLHFPPU9lKCJuYXZpZ2F0ZVRvTWluaVByb2dyYW0iLChlLHtyZXNvbHZlOnQscmVqZWN0Om59KT0+e0JnKCJuYXZpZ2F0ZVRvVW5pTVAiLGUscj0+e2lmKHIuZXJyTXNnJiZyLmVyck1zZy5pbmRleE9mKCI6b2siKT09PS0xKXJldHVybiBuKHIuZXJyTXNnLnNwbGl0KCIgIilbMV0pO3QoKX0pfSksTGc9W107ZnVuY3Rpb24gTWcoZSl7TGcucHVzaChlKX1sZXQgS089TWc7ZnVuY3Rpb24gSk8oZSx0KXtMZy5mb3JFYWNoKG49Pm4oZSx0KSl9ZnVuY3Rpb24gWk8oZSx0LC4uLm4pe2xldCByPWVUKGUsdCxuKTtyJiZjb25zb2xlW2VdKHIpfWZ1bmN0aW9uIFhPKCl7cmV0dXJuIHR5cGVvZiBfX2NoYW5uZWxJZF9fPT0ic3RyaW5nIiYmX19jaGFubmVsSWRfX31mdW5jdGlvbiBRTyhlLHQpe3N3aXRjaChXLnRvUmF3VHlwZSh0KSl7Y2FzZSJGdW5jdGlvbiI6cmV0dXJuImZ1bmN0aW9uKCkgeyBbbmF0aXZlIGNvZGVdIH0iO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIGVUKGUsdCxuKXtyZXR1cm4gWE8oKT8obi5wdXNoKHQucmVwbGFjZSgiYXQgIiwidW5pLWFwcDovLy8iKSksY29uc29sZVtlXS5hcHBseShjb25zb2xlLG4pKTpuLm1hcChmdW5jdGlvbihvKXtsZXQgYz1XLnRvVHlwZVN0cmluZyhvKS50b0xvd2VyQ2FzZSgpO2lmKFsiW29iamVjdCBvYmplY3RdIiwiW29iamVjdCBhcnJheV0iLCJbb2JqZWN0IG1vZHVsZV0iXS5pbmRleE9mKGMpIT09LTEpdHJ5e289Ii0tLUJFR0lOOkpTT04tLS0iK0pTT04uc3RyaW5naWZ5KG8sUU8pKyItLS1FTkQ6SlNPTi0tLSJ9Y2F0Y2goaCl7bz1jfWVsc2UgaWYobz09PW51bGwpbz0iLS0tTlVMTC0tLSI7ZWxzZSBpZihvPT09dm9pZCAwKW89Ii0tLVVOREVGSU5FRC0tLSI7ZWxzZXtsZXQgaD1XLnRvUmF3VHlwZShvKS50b1VwcGVyQ2FzZSgpO2g9PT0iTlVNQkVSInx8aD09PSJCT09MRUFOIj9vPSItLS1CRUdJTjoiK2grIi0tLSIrbysiLS0tRU5EOiIraCsiLS0tIjpvPVN0cmluZyhvKX1yZXR1cm4gb30pLmpvaW4oIi0tLUNPTU1BLS0tIikrIiAiK3R9bGV0IHRUPTEsbmYsdWM9e307ZnVuY3Rpb24gRGcoZSl7aWYodHlwZW9mIGU9PSJmdW5jdGlvbiIpe2xldCB0PU9iamVjdC5rZXlzKHVjKS5maW5kKHI9PnVjW3JdPT09ZSksbj10P3BhcnNlSW50KHQpOnRUKys7cmV0dXJuIHVjW25dPWUsbn1lbHNlIFcuaXNQbGFpbk9iamVjdChlKSYmT2JqZWN0LmtleXMoZSkuZm9yRWFjaCh0PT57ZVt0XT1EZyhlW3RdKX0pO3JldHVybiBlfWZ1bmN0aW9uIG5UKGUsdCxuLHIpe3JldHVybiBvZihlLHQsbixyKX1mdW5jdGlvbiByZigpe3JldHVybiBuZnx8KG5mPUkucmVxdWlyZU5hdGl2ZVBsdWdpbigiVVRTLVByb3h5IikpLG5mfWZ1bmN0aW9uIEZnKGUsdCxuLHIsbyl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KGUpKTtpZihXLmlzU3RyaW5nKHQpKXRyeXt0PUpTT04ucGFyc2UodCl9Y2F0Y2goYyl7dGhyb3cgbmV3IEVycm9yKGBKU09OLnBhcnNlKCR7dH0pOiBgK2MpfWlmKHQuZXJyTXNnKXRocm93IG5ldyBFcnJvcih0LmVyck1zZyk7aWYobiYmbi50eXBlPT09ImludGVyZmFjZSImJnR5cGVvZiB0LnBhcmFtcz09Im51bWJlciIpe2lmKCF0LnBhcmFtcylyZXR1cm4gbnVsbDtpZih0LnBhcmFtcz09PXImJm8pcmV0dXJuIG87aWYoYWZbbi5vcHRpb25zXSl7bGV0IGM9amcoVy5leHRlbmQoe2luc3RhbmNlSWQ6dC5wYXJhbXN9LGFmW24ub3B0aW9uc10pKTtyZXR1cm4gbmV3IGN9fXJldHVybiB0LnBhcmFtc31mdW5jdGlvbiBWZyhlKXtpZihlLmVyck1zZyl0aHJvdyBuZXcgRXJyb3IoZS5lcnJNc2cpO3JldHVybiBkZWxldGUgZS5lcnJNc2csRmcoZSxyZigpLmludm9rZVN5bmMoZSwoKT0+e30pKX1mdW5jdGlvbiBvZihlLHttb2R1bGVOYW1lOnQsbW9kdWxlVHlwZTpuLHBhY2thZ2U6cixjbGFzczpvLG5hbWU6YyxtZXRob2Q6aCxjb21wYW5pb246YixwYXJhbXM6VixyZXR1cm46VCxlcnJNc2c6RH0sX2UsU2Upe2xldCBJZT0oe2lkOmR0LG5hbWU6VHQscGFyYW1zOkl0LGtlZXBBbGl2ZTp2bn0pPT57bGV0IHVuPXVjW2R0XTt1bj8odW4oLi4uSXQpLHZufHxkZWxldGUgdWNbZHRdKTpjb25zb2xlLmVycm9yKGAke3J9JHtvfS4ke2N9ICR7VHR9IGlzIG5vdCBmb3VuZGApfSx1dD1fZT97bW9kdWxlTmFtZTp0LG1vZHVsZVR5cGU6bixpZDpfZSxuYW1lOmMsbWV0aG9kOlZ9Onttb2R1bGVOYW1lOnQsbW9kdWxlVHlwZTpuLHBhY2thZ2U6cixjbGFzczpvLG5hbWU6aHx8Yyxjb21wYW5pb246YixtZXRob2Q6Vn07cmV0dXJuKC4uLmR0KT0+e2lmKEQpdGhyb3cgbmV3IEVycm9yKEQpO2xldCBUdD1XLmV4dGVuZCh7fSx1dCx7cGFyYW1zOmR0Lm1hcChJdD0+RGcoSXQpKX0pO3JldHVybiBlP25ldyBQcm9taXNlKChJdCx2bik9PntyZigpLmludm9rZUFzeW5jKFR0LHVuPT57dW4udHlwZSE9PSJyZXR1cm4iP0llKHVuKTp1bi5lcnJNc2c/dm4odW4uZXJyTXNnKTpJdCh1bi5wYXJhbXMpfSl9KTpGZyhUdCxyZigpLmludm9rZVN5bmMoVHQsSWUpLFQsX2UsU2UpfX1mdW5jdGlvbiAkZyhlLHQpe3JldHVybiB0Lm1haW4mJiF0Lm1ldGhvZCYmdHlwZW9mIHMhPSJ1bmRlZmluZWQiJiZzLm9zLm5hbWU9PT0iaU9TIiYmKHQubWV0aG9kPSJzXyIrdC5uYW1lKSxvZihlLHQsMCl9bGV0IHJUPSRnO2Z1bmN0aW9uIFVnKGUsdCl7cmV0dXJuIFcuaGFzT3duKHQsZSsiQnlKcyIpP2UrIkJ5SnMiOmV9ZnVuY3Rpb24gSGcoZSl7cmV0dXJuIHR5cGVvZiBlPT0idW5kZWZpbmVkIn1mdW5jdGlvbiBpVChlKXtyZXR1cm4hSGcoZS5pbnN0YW5jZUlkKX1mdW5jdGlvbiBqZyhlKXtsZXR7bW9kdWxlTmFtZTp0LG1vZHVsZVR5cGU6bixwYWNrYWdlOnIsY2xhc3M6byxtZXRob2RzOmMscHJvcHM6aCxlcnJNc2c6Yn09ZSxWPXttb2R1bGVOYW1lOnQsbW9kdWxlVHlwZTpuLHBhY2thZ2U6cixjbGFzczpvLGVyck1zZzpifSxULEQ9W10sX2U9e30sU2U9W107aVQoZSk/VD1lLmluc3RhbmNlSWQ6KEQ9ZS5jb25zdHJ1Y3Rvci5wYXJhbXMsX2U9ZS5zdGF0aWNNZXRob2RzLFNlPWUuc3RhdGljUHJvcHMpLHR5cGVvZiBzIT0idW5kZWZpbmVkIiYmcy5vcy5uYW1lPT09ImlPUyImJkQuZmluZChkdD0+ZHQudHlwZT09PSJVVFNDYWxsYmFjayJ8fGR0LnR5cGUuaW5kZXhPZigiSlNPTk9iamVjdCIpPjApJiZELnB1c2goe25hbWU6Il9ieUpzIix0eXBlOiJib29sZWFuIn0pO2xldCBJZT1jbGFzc3tjb25zdHJ1Y3RvciguLi5UdCl7aWYoYil0aHJvdyBuZXcgRXJyb3IoYik7bGV0IEl0PXt9O2lmKEhnKFQpJiYoVD1vZighMSxXLmV4dGVuZCh7bmFtZToiY29uc3RydWN0b3IiLHBhcmFtczpEfSxWKSwwKS5hcHBseShudWxsLFR0KSksIVQpdGhyb3cgbmV3IEVycm9yKGBuZXcgJHtvfSBpcyBmYWlsZWRgKTtsZXQgdm49bmV3IFByb3h5KHRoaXMse2dldCh1bixqdCl7aWYoIUl0W2p0XSl7aWYoanQ9VWcoanQsYyksVy5oYXNPd24oYyxqdCkpe2xldHthc3luYzp5dCxwYXJhbXM6RW4scmV0dXJuOmFufT1jW2p0XTtJdFtqdF09blQoISF5dCxXLmV4dGVuZCh7bmFtZTpqdCxwYXJhbXM6RW4scmV0dXJuOmFufSxWKSxULHZuKX1lbHNlIGlmKGguaW5jbHVkZXMoanQpKXJldHVybiBWZyh7bW9kdWxlTmFtZTp0LG1vZHVsZVR5cGU6bixpZDpULG5hbWU6anQsZXJyTXNnOmJ9KX1yZXR1cm4gSXRbanRdfX0pO3JldHVybiB2bn19LHV0PXt9O3JldHVybiBuZXcgUHJveHkoSWUse2dldChkdCxUdCxJdCl7aWYoVHQ9VWcoVHQsX2UpLFcuaGFzT3duKF9lLFR0KSl7aWYoIXV0W1R0XSl7bGV0e2FzeW5jOnZuLHBhcmFtczp1bixyZXR1cm46anR9PV9lW1R0XTt1dFtUdF09JGcoISF2bixXLmV4dGVuZCh7bmFtZTpUdCxjb21wYW5pb246ITAscGFyYW1zOnVuLHJldHVybjpqdH0sVikpfXJldHVybiB1dFtUdF19cmV0dXJuIFNlLmluY2x1ZGVzKFR0KT9WZyhXLmV4dGVuZCh7bmFtZTpUdCxjb21wYW5pb246ITB9LFYpKTpSZWZsZWN0LmdldChkdCxUdCxJdCl9fSl9ZnVuY3Rpb24gb1QoZSx0KXtyZXR1cm4gdHlwZW9mIHMhPSJ1bmRlZmluZWQiJiZzLm9zLm5hbWU9PT0iQW5kcm9pZCI/InV0cy5zZGsuIisodD8ibW9kdWxlcy4iOiIiKStlOiIifWZ1bmN0aW9uIGFUKGUsdCl7cmV0dXJuIHR5cGVvZiBzPT0idW5kZWZpbmVkIj8iIjp6ZyhlLHMub3MubmFtZT09PSJpT1MiPyJJbmRleFN3aWZ0IjoiSW5kZXhLdCIsdCl9ZnVuY3Rpb24gemcoZSx0LG4pe3JldHVybiB0eXBlb2Ygcz09InVuZGVmaW5lZCI/IiI6cy5vcy5uYW1lPT09IkFuZHJvaWQiP3Q6cy5vcy5uYW1lPT09ImlPUyI/IlVUU1NESyIrKG4/Ik1vZHVsZXMiOiIiKStXLmNhcGl0YWxpemUoZSkrVy5jYXBpdGFsaXplKHQpOiIifWxldCBhZj17fTtmdW5jdGlvbiBzVChlLHQpe2FmW2VdPXR9bGV0IFdnPXt9O2Z1bmN0aW9uIGxUKGUsdCl7V2dbZV09dH1mdW5jdGlvbiBjVChlKXtsZXQgdD1XZ1tlXTtyZXR1cm4gdHx8Y29uc29sZS5lcnJvcihgJHtlfSBpcyBub3QgZm91bmRgKSx0fWxldCBTbz17bG9hZDoibG9hZCIsY2xvc2U6ImNsb3NlIixlcnJvcjoiZXJyb3IiLGFkQ2xpY2tlZDoiYWRDbGlja2VkIn07Y2xhc3MgR2d7Y29uc3RydWN0b3IoKXt0aGlzLl9jYWxsYmFja3M9e319b25Mb2FkKHQpe3RoaXMuX2FkZEV2ZW50TGlzdGVuZXIoU28ubG9hZCx0KX1vbkNsb3NlKHQpe3RoaXMuX2FkZEV2ZW50TGlzdGVuZXIoU28uY2xvc2UsdCl9b25FcnJvcih0KXt0aGlzLl9hZGRFdmVudExpc3RlbmVyKFNvLmVycm9yLHQpfW9mZkxvYWQodCl7dGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcihTby5sb2FkLHQpfW9mZkNsb3NlKHQpe3RoaXMuX3JlbW92ZUV2ZW50TGlzdGVuZXIoU28uY2xvc2UsdCl9b2ZmRXJyb3IodCl7dGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcihTby5lcnJvcix0KX1fYWRkRXZlbnRMaXN0ZW5lcih0LG4peyFXLmlzRnVuY3Rpb24obil8fCh0aGlzLl9jYWxsYmFja3NbdF18fCh0aGlzLl9jYWxsYmFja3NbdF09W10pLHRoaXMuX2NhbGxiYWNrc1t0XS5wdXNoKG4pKX1fcmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pe2xldCByPXRoaXMuX2NhbGxiYWNrc1t0XSxvPXIuaW5kZXhPZihuKTtvPi0xJiZyLnNwbGljZShvLDEpfV9kaXNwYXRjaEV2ZW50KHQsbil7dGhpcy5fY2FsbGJhY2tzW3RdLmZvckVhY2gocj0+e3Iobnx8e30pfSl9fWNsYXNzIHNmIGV4dGVuZHMgR2d7Y29uc3RydWN0b3IodCxuKXtzdXBlcigpO3RoaXMucHJlbG9hZD0hMCx0aGlzLl9pc0xvYWRlZD0hMSx0aGlzLl9pc0xvYWRpbmc9ITEsdGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9bnVsbCx0aGlzLl9zaG93UHJvbWlzZVJlc29sdmU9bnVsbCx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1udWxsLHRoaXMucHJlbG9hZD1uLnByZWxvYWQhPT12b2lkIDA/bi5wcmVsb2FkOiExO2xldCByPXRoaXMuX2FkSW5zdGFuY2U9dDtyLm9uTG9hZCgoKT0+e3RoaXMuX2lzTG9hZGVkPSEwLHRoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmUhPW51bGwmJih0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmUoKSx0aGlzLl9sb2FkUHJvbWlzZVJlc29sdmU9bnVsbCksdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlIT1udWxsJiYodGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlKCksdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fc2hvd0FkKCkpLHRoaXMuX2Rpc3BhdGNoRXZlbnQoU28ubG9hZCx7fSl9KSxyLm9uQ2xvc2Uobz0+e3RoaXMuX2lzTG9hZGVkPSExLHRoaXMuX2lzTG9hZGluZz0hMSx0aGlzLl9kaXNwYXRjaEV2ZW50KFNvLmNsb3NlLG8pLHRoaXMucHJlbG9hZD09PSEwJiZ0aGlzLl9sb2FkQWQoKX0pLHIub25FcnJvcihvPT57dGhpcy5faXNMb2FkaW5nPSExO2xldCBjPXtjb2RlOm8uY29kZSxlcnJNc2c6by5tZXNzYWdlfTt0aGlzLl9kaXNwYXRjaEV2ZW50KFNvLmVycm9yLGMpO2xldCBoPW5ldyBFcnJvcihKU09OLnN0cmluZ2lmeShjKSk7dGhpcy5fbG9hZFByb21pc2VSZWplY3QhPW51bGwmJih0aGlzLl9sb2FkUHJvbWlzZVJlamVjdChoKSx0aGlzLl9sb2FkUHJvbWlzZVJlamVjdD1udWxsKSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdCE9bnVsbCYmKHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0KGgpLHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0PW51bGwpfSksci5vbkFkQ2xpY2tlZCYmci5vbkFkQ2xpY2tlZCgoKT0+e3RoaXMuX2Rpc3BhdGNoRXZlbnQoU28uYWRDbGlja2VkLHt9KX0pfWdldFByb3ZpZGVyKCl7cmV0dXJuIHRoaXMuX2FkSW5zdGFuY2UuZ2V0UHJvdmlkZXIoKX1sb2FkKCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57dGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPXQsdGhpcy5fbG9hZFByb21pc2VSZWplY3Q9biwhdGhpcy5faXNMb2FkaW5nJiYodGhpcy5faXNMb2FkZWQ/dCgiIik6dGhpcy5fbG9hZEFkKCkpfSl9c2hvdygpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e3RoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZT10LHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0PW4sIXRoaXMuX2lzTG9hZGluZyYmKHRoaXMuX2lzTG9hZGVkPyh0aGlzLl9zaG93QWQoKSx0KCIiKSk6dGhpcy5fbG9hZEFkKCkpfSl9ZGVzdHJveSgpe3RoaXMuX2FkSW5zdGFuY2UuZGVzdHJveSgpfV9sb2FkQWQoKXt0aGlzLl9pc0xvYWRlZD0hMSx0aGlzLl9pc0xvYWRpbmc9ITAsdGhpcy5fYWRJbnN0YW5jZS5sb2FkKCl9X3Nob3dBZCgpe3RoaXMuX2FkSW5zdGFuY2Uuc2hvdygpfX1jbGFzcyB1VCBleHRlbmRzIHNme2NvbnN0cnVjdG9yKHQpe3N1cGVyKHMuYWQuY3JlYXRlUmV3YXJkZWRWaWRlb0FkKHQpLHQpO3RoaXMuX2xvYWRBZCgpfX1sZXQgZlQ9TXQoS1MsZT0+bmV3IHVUKGUpLFpTLEpTKTtjbGFzcyBkVCBleHRlbmRzIHNme2NvbnN0cnVjdG9yKHQpe3N1cGVyKHMuYWQuY3JlYXRlRnVsbFNjcmVlblZpZGVvQWQodCksdCk7dGhpcy5wcmVsb2FkPSExfX1sZXQgaFQ9TXQoWFMsZT0+bmV3IGRUKGUpLGV3LFFTKTtjbGFzcyBnVCBleHRlbmRzIHNme2NvbnN0cnVjdG9yKHQpe3N1cGVyKHMuYWQuY3JlYXRlSW50ZXJzdGl0aWFsQWQodCksdCk7dGhpcy5wcmVsb2FkPSExLHRoaXMuX2xvYWRBZCgpfX1sZXQgcFQ9TXQodHcsZT0+bmV3IGdUKGUpLHJ3LG53KSx3YT17fSx0bD17fTtmdW5jdGlvbiB2VChlKXtsZXQgdD1lLnByb3ZpZGVyO2lmKHdhW3RdfHwod2FbdF09e30pLHR5cGVvZiB3YVt0XS5wbHVnaW49PSJvYmplY3QiKXtlLnN1Y2Nlc3Mod2FbdF0ucGx1Z2luKTtyZXR1cm59aWYodGxbdF18fCh0bFt0XT1bXSksdGxbdF0ucHVzaChlKSx3YVt0XS5zdGF0dXM9PT0hMCl7ZS5fX3BsdWdpbj13YVt0XS5wbHVnaW47cmV0dXJufXdhW3RdLnN0YXR1cz0hMDtsZXQgbj1Xbyh0KTtpZighbnx8IW4uaW5pdFNESyl7dGxbdF0uZm9yRWFjaChyPT57ci5mYWlsKHtjb2RlOi0xLG1lc3NhZ2U6InByb3ZpZGVyIFsiK3QrIl0gaW52YWxpZCJ9KX0pLHRsW3RdLmxlbmd0aD0wLHdhW3RdLnN0YXR1cz0hMTtyZXR1cm59d2FbdF0ucGx1Z2luPW4sZS5fX3BsdWdpbj1uLG4uaW5pdFNESyhyPT57bGV0IG89ci5jb2RlPT09MXx8ci5jb2RlPT09IjEiO28/d2FbdF0ucGx1Z2luPW46d2FbdF0uc3RhdHVzPSExLHRsW3RdLmZvckVhY2goYz0+e28/Yy5zdWNjZXNzKGMuX19wbHVnaW4pOmMuZmFpbChyKX0pLHRsW3RdLmxlbmd0aD0wfSl9Y2xhc3MgbVQgZXh0ZW5kcyBHZ3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpO3RoaXMuX2FkcGlkPSIiLHRoaXMuX3Byb3ZpZGVyPSIiLHRoaXMuX3VzZXJEYXRhPW51bGwsdGhpcy5faXNMb2FkZWQ9ITEsdGhpcy5faXNMb2FkaW5nPSExLHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZT1udWxsLHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0PW51bGwsdGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPW51bGwsdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9bnVsbCx0aGlzLl9hZEluc3RhbmNlPW51bGwsdGhpcy5fYWRFcnJvcj0iIix0aGlzLl9hZHBpZD10LmFkcGlkLHRoaXMuX3Byb3ZpZGVyPXQucHJvdmlkZXIsdGhpcy5fdXNlckRhdGE9dC51c2VyRGF0YSxrKCgpPT57dGhpcy5faW5pdCgpfSl9X2luaXQoKXt0aGlzLl9hZEVycm9yPSIiLHZUKHtwcm92aWRlcjp0aGlzLl9wcm92aWRlcixzdWNjZXNzOnQ9Pnt0aGlzLl9hZEluc3RhbmNlPXQsdGhpcy5fdXNlckRhdGEmJnRoaXMuYmluZFVzZXJEYXRhKHRoaXMuX3VzZXJEYXRhKSx0aGlzLl9sb2FkQWQoKX0sZmFpbDp0PT57dGhpcy5fYWRFcnJvcj10LHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0IT1udWxsJiYodGhpcy5fbG9hZFByb21pc2VSZWplY3QodGhpcy5fY3JlYXRlRXJyb3IodCkpLHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0PW51bGwpLHRoaXMuX2Rpc3BhdGNoRXZlbnQoU28uZXJyb3IsdCl9fSl9Z2V0UHJvdmlkZXIoKXtyZXR1cm4gdGhpcy5fcHJvdmlkZXJ9bG9hZCgpe3JldHVybiBuZXcgUHJvbWlzZSgodCxuKT0+e2lmKHRoaXMuX2xvYWRQcm9taXNlUmVzb2x2ZT10LHRoaXMuX2xvYWRQcm9taXNlUmVqZWN0PW4sIXRoaXMuX2lzTG9hZGluZyl7aWYodGhpcy5fYWRFcnJvcil7dGhpcy5faW5pdCgpO3JldHVybn10aGlzLl9pc0xvYWRlZD90KCIiKTp0aGlzLl9sb2FkQWQoKX19KX1zaG93KCl7cmV0dXJuIG5ldyBQcm9taXNlKCh0LG4pPT57aWYodGhpcy5fc2hvd1Byb21pc2VSZXNvbHZlPXQsdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9biwhdGhpcy5faXNMb2FkaW5nKXtpZih0aGlzLl9hZEVycm9yKXt0aGlzLl9pbml0KCk7cmV0dXJufXRoaXMuX2lzTG9hZGVkPyh0aGlzLl9zaG93QWQoKSx0KCIiKSk6dGhpcy5fbG9hZEFkKCl9fSl9cmVwb3J0RXhwb3N1cmUoKXt0aGlzLl9hZEluc3RhbmNlIT09bnVsbCYmdGhpcy5fYWRJbnN0YW5jZS5yZXBvcnRFeHBvc3VyZSgpfWJpbmRVc2VyRGF0YSh0KXt0aGlzLl9hZEluc3RhbmNlIT09bnVsbCYmdGhpcy5fYWRJbnN0YW5jZS5iaW5kVXNlckRhdGEodCl9ZGVzdHJveSgpe3RoaXMuX2FkSW5zdGFuY2UhPT1udWxsJiZ0aGlzLl9hZEluc3RhbmNlLmRlc3Ryb3kmJnRoaXMuX2FkSW5zdGFuY2UuZGVzdHJveSh7YWRwaWQ6dGhpcy5fYWRwaWR9KX1fbG9hZEFkKCl7aWYodGhpcy5fYWRJbnN0YW5jZSE9PW51bGwpe2lmKHRoaXMuX2lzTG9hZGluZz09PSEwKXJldHVybjt0aGlzLl9pc0xvYWRpbmc9ITAsdGhpcy5fYWRJbnN0YW5jZS5sb2FkRGF0YSh7YWRwaWQ6dGhpcy5fYWRwaWR9LHQ9Pnt0aGlzLl9pc0xvYWRlZD0hMCx0aGlzLl9pc0xvYWRpbmc9ITEsdGhpcy5fbG9hZFByb21pc2VSZXNvbHZlIT1udWxsJiYodGhpcy5fbG9hZFByb21pc2VSZXNvbHZlKCksdGhpcy5fbG9hZFByb21pc2VSZXNvbHZlPW51bGwpLHRoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZSE9bnVsbCYmKHRoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZSgpLHRoaXMuX3Nob3dQcm9taXNlUmVzb2x2ZT1udWxsLHRoaXMuX3Nob3dBZCgpKSx0aGlzLl9kaXNwYXRjaEV2ZW50KFNvLmxvYWQsdCl9LHQ9Pnt0aGlzLl9pc0xvYWRpbmc9ITEsdGhpcy5fc2hvd1Byb21pc2VSZWplY3QhPW51bGwmJih0aGlzLl9zaG93UHJvbWlzZVJlamVjdCh0aGlzLl9jcmVhdGVFcnJvcih0KSksdGhpcy5fc2hvd1Byb21pc2VSZWplY3Q9bnVsbCksdGhpcy5fZGlzcGF0Y2hFdmVudChTby5lcnJvcix0KX0pfX1fc2hvd0FkKCl7dGhpcy5fYWRJbnN0YW5jZSE9PW51bGwmJnRoaXMuX2lzTG9hZGVkPT09ITAmJnRoaXMuX2FkSW5zdGFuY2Uuc2hvdyh7YWRwaWQ6dGhpcy5fYWRwaWR9LCgpPT57dGhpcy5faXNMb2FkZWQ9ITF9LHQ9Pnt0aGlzLl9pc0xvYWRlZD0hMSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdCE9bnVsbCYmKHRoaXMuX3Nob3dQcm9taXNlUmVqZWN0KHRoaXMuX2NyZWF0ZUVycm9yKHQpKSx0aGlzLl9zaG93UHJvbWlzZVJlamVjdD1udWxsKSx0aGlzLl9kaXNwYXRjaEV2ZW50KFNvLmVycm9yLHQpfSl9X2NyZWF0ZUVycm9yKHQpe3JldHVybiBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkodCkpfX1sZXQgX1Q9TXQoaXcsZT0+bmV3IG1UKGUpLGF3LG93KSxZZz1zLm9zLm5hbWU9PT0iQW5kcm9pZCImJnBhcnNlSW50KHMub3MudmVyc2lvbik8NixiVD1ZZz8ic2xpZGUtaW4tcmlnaHQiOiJwb3AtaW4iLHpjPTMwMCxxZz1ZZz8ic2xpZGUtb3V0LXJpZ2h0IjoicG9wLW91dCIsRVQ9Il93d3cvX191bmlhcHB2aWV3Lmh0bWwiLHlUPSJ3ZWJ2aWV3SWQiLFNUPSJ1bmlNUE5hdGl2ZUV2ZW50IjtmdW5jdGlvbiB3VChlLHQsbil7biYmdC5pc05WdWUmJihlLnVuaU5WaWV3PXtwYXRoOm4sZGVmYXVsdEZvbnRTaXplOkIuZGVmYXVsdEZvbnRTaXplLHZpZXdwb3J0OkIudmlld3BvcnR9KX1sZXQgQ1Q9L14jW2EtejAtOV17Nn0kL2k7ZnVuY3Rpb24gQVQoZSl7cmV0dXJuIGUmJihDVC50ZXN0KGUpfHxlPT09InRyYW5zcGFyZW50Iil9ZnVuY3Rpb24gT1QoZSx0KXtsZXR7YmFja2dyb3VuZENvbG9yOm59PXQ7IW58fCFBVChuKXx8KGUuYmFja2dyb3VuZD9uPWUuYmFja2dyb3VuZDplLmJhY2tncm91bmQ9bixlLmJhY2tncm91bmRDb2xvclRvcHx8KGUuYmFja2dyb3VuZENvbG9yVG9wPW4pLGUuYmFja2dyb3VuZENvbG9yQm90dG9tfHwoZS5iYWNrZ3JvdW5kQ29sb3JCb3R0b209biksZS5hbmltYXRpb25BbHBoYUJHQ29sb3J8fChlLmFuaW1hdGlvbkFscGhhQkdDb2xvcj1uKSx0eXBlb2YgZS53ZWJ2aWV3QkdUcmFuc3BhcmVudD09InVuZGVmaW5lZCImJihlLndlYnZpZXdCR1RyYW5zcGFyZW50PSEwKSl9ZnVuY3Rpb24gVFQoZSx0KXtlLnBvcEdlc3R1cmU9PT0iaGlkZSImJmRlbGV0ZSBlLnBvcEdlc3R1cmUsdC5pc1F1aXQmJihlLnBvcEdlc3R1cmU9cy5vcy5uYW1lPT09ImlPUyI/ImFwcGJhY2siOiJub25lIil9ZnVuY3Rpb24gUFQoZSx0KXtpZighdC5lbmFibGVQdWxsRG93blJlZnJlc2gpcmV0dXJuO2xldCBuPWphKFcuZXh0ZW5kKHt9LHMub3MubmFtZT09PSJBbmRyb2lkIj9OVDprVCx0LnB1bGxUb1JlZnJlc2gpKTtlLnB1bGxUb1JlZnJlc2g9SVQobix0KX1mdW5jdGlvbiBJVChlLHQpe2xldCBuPW1yKGUpO2lmKCFuKXJldHVybiBlO2xldFtyLG8sY109bjtyZXR1cm4ocnx8b3x8YykmJkkub25Mb2NhbGVDaGFuZ2UoKCk9PntsZXQgaD1zLndlYnZpZXcuZ2V0V2Vidmlld0J5SWQodC5pZCsiIik7aWYoIWgpcmV0dXJuO2xldCBiPXtzdXBwb3J0OiEwfTtyJiYoYi5jb250ZW50ZG93bj17Y2FwdGlvbjplLmNvbnRlbnRkb3duLmNhcHRpb259KSxvJiYoYi5jb250ZW50b3Zlcj17Y2FwdGlvbjplLmNvbnRlbnRvdmVyLmNhcHRpb259KSxjJiYoYi5jb250ZW50cmVmcmVzaD17Y2FwdGlvbjplLmNvbnRlbnRyZWZyZXNoLmNhcHRpb259KSxoLnNldFN0eWxlKHtwdWxsVG9SZWZyZXNoOmJ9KX0pLGV9bGV0IE5UPXtzdXBwb3J0OiEwLHN0eWxlOiJjaXJjbGUifSxrVD17c3VwcG9ydDohMCxzdHlsZToiZGVmYXVsdCIsaGVpZ2h0OiI1MHB4IixyYW5nZToiMjAwcHgiLGNvbnRlbnRkb3duOntjYXB0aW9uOiIifSxjb250ZW50b3Zlcjp7Y2FwdGlvbjoiIn0sY29udGVudHJlZnJlc2g6e2NhcHRpb246IiJ9fTtmdW5jdGlvbiBSVChlLHQpe2xldHtuYXZpZ2F0aW9uQmFyOm59PXQ7aWYobi5zdHlsZT09PSJjdXN0b20iKXJldHVybiExO2xldCByPSEwO3QuaXNRdWl0JiYocj0hMSk7bGV0IG89e2F1dG9CYWNrQnV0dG9uOnJ9O09iamVjdC5rZXlzKG4pLmZvckVhY2goYz0+e2xldCBoPW5bY107Yz09PSJ0aXRsZUltYWdlIiYmaD9vLnRhZ3M9QlQoaCk6Yz09PSJidXR0b25zIiYmVy5pc0FycmF5KGgpP28uYnV0dG9ucz1oLm1hcCgoYixWKT0+KGIub25jbGljaz1MVChWKSxiKSk6b1tjXT1ofSksZS50aXRsZU5WaWV3PXhUKG8sdCl9ZnVuY3Rpb24geFQoZSx0KXtsZXQgbj14cihlKTtpZighbilyZXR1cm4gZTtsZXRbcixvXT1uO3JldHVybihyfHxvKSYmSS5vbkxvY2FsZUNoYW5nZSgoKT0+e2xldCBjPXMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZCh0LmlkKyIiKTtpZighYylyZXR1cm47bGV0IGg9e307ciYmKGgudGl0bGVUZXh0PWUudGl0bGVUZXh0KSxvJiYoaC5zZWFyY2hJbnB1dD17cGxhY2Vob2xkZXI6ZS5zZWFyY2hJbnB1dC5wbGFjZWhvbGRlcn0pLGMuc2V0U3R5bGUoe3RpdGxlTlZpZXc6aH0pfSksZX1mdW5jdGlvbiBCVChlKXtyZXR1cm5be3RhZzoiaW1nIixzcmM6ZSxwb3NpdGlvbjp7bGVmdDoiYXV0byIsdG9wOiJhdXRvIix3aWR0aDoiYXV0byIsaGVpZ2h0OiIyNnB4In19XX1mdW5jdGlvbiBMVChlKXtyZXR1cm4gZnVuY3Rpb24obil7bi5pbmRleD1lLExuKFouT05fTkFWSUdBVElPTl9CQVJfQlVUVE9OX1RBUCxuKX19ZnVuY3Rpb24gS2coZSx0LG4pe2xldCByPXtib3VuY2U6InZlcnRpY2FsIn07cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2gobz0+e01ULmluZGV4T2Yobyk9PT0tMSYmKHJbb109dFtvXSl9KSxuLmlkIT09IjEiJiZ3VChyLHQsZSksVFQocix0KSxPVChyLHQpLFJUKHIsdCksUFQocix0KSxyfWxldCBNVD1bImlkIiwicm91dGUiLCJpc05WdWUiLCJpc1F1aXQiLCJpc0VudHJ5IiwiaXNUYWJCYXIiLCJ0YWJCYXJJbmRleCIsIndpbmRvd1RvcCIsInRvcFdpbmRvdyIsImxlZnRXaW5kb3ciLCJyaWdodFdpbmRvdyIsIm1heFdpZHRoIiwidXNpbmdDb21wb25lbnRzIiwiZGlzYWJsZVNjcm9sbCIsImVuYWJsZVB1bGxEb3duUmVmcmVzaCIsIm5hdmlnYXRpb25CYXIiLCJwdWxsVG9SZWZyZXNoIiwib25SZWFjaEJvdHRvbURpc3RhbmNlIiwicGFnZU9yaWVudGF0aW9uIiwiYmFja2dyb3VuZENvbG9yIl0sSmc9MjtmdW5jdGlvbiBaZygpe3JldHVybiBKZ31mdW5jdGlvbiBYZygpe3JldHVybiBKZysrfWZ1bmN0aW9uIFFnKGUpe3JldHVybiBlfWZ1bmN0aW9uIGVwKGUsdCl7bGV0IG49dD9aLnN0cmluZ2lmeVF1ZXJ5KHQsUWcpOiIiO3JldHVybntwYXRoOmUuc2xpY2UoMSkscXVlcnk6biYmbi5zbGljZSgxKX19ZnVuY3Rpb24gRFQoZSx0LG4pe2xldCByPW4/Wi5zdHJpbmdpZnlRdWVyeShuLFFnKToiIjtyZXR1cm57aXNUYWI6ZSxhcmd1bWVudHM6SlNPTi5zdHJpbmdpZnkoe3BhdGg6dC5zbGljZSgxKSxxdWVyeTpyJiZyLnNsaWNlKDEpfSl9fWZ1bmN0aW9uIEZUKHtwYXRoOmUscXVlcnk6dCxyb3V0ZU9wdGlvbnM6bix3ZWJ2aWV3RXh0cmFzOnJ9KXtsZXQgbz0oKT0+S2coZSxqdShuLm1ldGEpLHtpZDpjKyIifSksYz1YZygpLGg9bygpO2gudW5pUGFnZVVybD1lcChlLHQpLGguaXNUYWI9ISFuLm1ldGEuaXNUYWJCYXI7bGV0IGI9cy53ZWJ2aWV3LmNyZWF0ZSgiIixTdHJpbmcoYyksaCxXLmV4dGVuZCh7bnZ1ZTohMCxfX3BhdGhfXzplLF9fcXVlcnlfXzpKU09OLnN0cmluZ2lmeSh0KX0scikpO3JldHVybiBVaChiLG8pLGJ9bGV0IE1pO2Z1bmN0aW9uIHRwKGUpe01pPWV9ZnVuY3Rpb24gVlQoKXtyZXR1cm4gTWl9ZnVuY3Rpb24gJFQoKXtyZXR1cm4oIU1pfHxNaS5fX3VuaWFwcF9yb3V0ZSkmJihNaT1zLndlYnZpZXcuY3JlYXRlKEVULFN0cmluZyhYZygpKSx7Y29udGVudEFkanVzdDohMX0pKSxNaX1mdW5jdGlvbiBVVChlKXtsZXR7cG9wdXBTdWJOVnVlV2Vidmlld3M6dH09ZTshdHx8ZS5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PntPYmplY3Qua2V5cyh0KS5mb3JFYWNoKG49Pnt0W25dLmNsb3NlKCJub25lIil9KX0pfWZ1bmN0aW9uIG5wKGUpe3JldHVybiBCLnJlYWxFbnRyeVBhZ2VQYXRoJiZlLiRwYWdlLnJvdXRlPT09Qi5lbnRyeVBhZ2VQYXRofWZ1bmN0aW9uIHJwKCl7Qi5lbnRyeVBhZ2VQYXRoPUIucmVhbEVudHJ5UGFnZVBhdGgsZGVsZXRlIEIucmVhbEVudHJ5UGFnZVBhdGgsSS5yZUxhdW5jaCh7dXJsOlouYWRkTGVhZGluZ1NsYXNoKEIuZW50cnlQYWdlUGF0aCl9KX1mdW5jdGlvbiBIVChlKXtsZXQgdDtlLmFkZEV2ZW50TGlzdGVuZXIoInBvcEdlc3R1cmUiLG49PntpZihuLnR5cGU9PT0ic3RhcnQiKXtsZXQgcj1QbigpLG89cltyLmxlbmd0aC0yXTt0PW5jO2xldCBjPW8mJm8uJHBhZ2Uuc3RhdHVzQmFyU3R5bGU7YyYmRGEoYyl9ZWxzZSBpZihuLnR5cGU9PT0iZW5kIiYmIW4ucmVzdWx0KURhKHQpO2Vsc2UgaWYobi50eXBlPT09ImVuZCImJm4ucmVzdWx0KXtsZXQgcj1QbigpLmxlbmd0aCxvPVNpKCk7enIoKSxEYSgpLG8mJnI9PT0xJiZucChvKT9ycCgpOkxuKFouT05fU0hPVyl9fSl9ZnVuY3Rpb24galQoZSl7aWYoZS5udnVlKXJldHVybjtsZXQgdD1lLmlkLHtzdWJzY3JpYmU6bix1bnN1YnNjcmliZTpyfT1zdCxvPShjLGgpPT57aWYodCE9PWgpcmV0dXJuO3Ioa2wsbyk7bGV0IGI9SXIocGFyc2VJbnQoaCkpO2ImJmIuX19wYWdlX2NvbnRhaW5lcl9fLnJlc3RvcmUoKX07ZS5hZGRFdmVudExpc3RlbmVyKCJyZWNvdmVyeSIsKCk9PntuKGtsLG8pfSl9ZnVuY3Rpb24gelQoZSl7bGV0e2VtaXQ6dH09c3Qsbj1mdW5jdGlvbih7d2lkdGg6cixoZWlnaHQ6b30pe2xldCBoPXtkZXZpY2VPcmllbnRhdGlvbjpNYXRoLmFicyhzLm5hdmlnYXRvci5nZXRPcmllbnRhdGlvbigpKT09PTkwPyJsYW5kc2NhcGUiOiJwb3J0cmFpdCIsc2l6ZTp7d2luZG93V2lkdGg6TWF0aC5jZWlsKHIpLHdpbmRvd0hlaWdodDpNYXRoLmNlaWwobyl9fTt0KFouT05fUkVTSVpFLGgscGFyc2VJbnQoZS5pZCkpfTtlLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsWi5kZWJvdW5jZShuLDUwLHtzZXRUaW1lb3V0OmssY2xlYXJUaW1lb3V0OlN9KSl9bGV0IGlwPXtwdWxsVG9SZWZyZXNoOlouT05fUFVMTF9ET1dOX1JFRlJFU0gsdGl0bGVOVmlld1NlYXJjaElucHV0Q2hhbmdlZDpaLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DSEFOR0VELHRpdGxlTlZpZXdTZWFyY2hJbnB1dENvbmZpcm1lZDpaLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DT05GSVJNRUQsdGl0bGVOVmlld1NlYXJjaElucHV0Q2xpY2tlZDpaLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9DTElDS0VELHRpdGxlTlZpZXdTZWFyY2hJbnB1dEZvY3VzQ2hhbmdlZDpaLk9OX05BVklHQVRJT05fQkFSX1NFQVJDSF9JTlBVVF9GT0NVU19DSEFOR0VEfTtmdW5jdGlvbiBXVChlKXtsZXQgdD1wYXJzZUludChlLmlkKTtPYmplY3Qua2V5cyhpcCkuZm9yRWFjaChuPT57bGV0IHI9aXBbbl07ZS5hZGRFdmVudExpc3RlbmVyKG4sbz0+e3I9PT1aLk9OX1BVTExfRE9XTl9SRUZSRVNIJiZXdShlKSxMbih0LHIsbyl9KX0pLFVUKGUpLHpUKGUpLHMub3MubmFtZT09PSJpT1MiJiYoalQoZSksSFQoZSkpfWZ1bmN0aW9uIEdUKGUsdCxuLHIpe2xldCBvPSgpPT5LZyh0LGp1KHIpLGUpLGM9bygpO2MudW5pUGFnZVVybD1lcCh0LG4pO2xldCBoPSEhci5pc1RhYkJhcjtyLmlzTlZ1ZT9jLmlzVGFiPWg6Yy5kZWJ1Z1JlZnJlc2g9RFQoaCx0LG4pLGMubG9jYWxlPWcucmVxdWlyZU1vZHVsZSgicGx1cyIpLmdldExhbmd1YWdlKCksVWgoZSxvKSxlLnNldFN0eWxlKGMpfWZ1bmN0aW9uIFlUKGUsdCxuKXsobi5zdWJOVnVlc3x8W10pLmZvckVhY2gobz0+e2lmKCFvLnBhdGgpcmV0dXJuO2xldCBjPUhhKG8uc3R5bGV8fHt9KSxoPW8udHlwZT09PSJuYXZpZ2F0aW9uQmFyIixiPW8udHlwZT09PSJwb3B1cCI7Yy51bmlOVmlldz17cGF0aDpvLnBhdGgucmVwbGFjZSgiLm52dWUiLCIuanMiKSxkZWZhdWx0Rm9udFNpemU6Qi5kZWZhdWx0Rm9udFNpemUsdmlld3BvcnQ6Qi52aWV3cG9ydH07bGV0IFY9e19fdW5pYXBwX2hvc3Q6dCxfX3VuaWFwcF9vcmlnaW46Yy51bmlOVmlldy5wYXRoLnNwbGl0KCI/IilbMF0ucmVwbGFjZSgiLmpzIiwiIiksX191bmlhcHBfb3JpZ2luX2lkOmUuaWQsX191bmlhcHBfb3JpZ2luX3R5cGU6ZS5fX3VuaWFwcF90eXBlfSxUO2g/KGMucG9zaXRpb249ImRvY2siLGMuZG9jaz0idG9wIixjLnRvcD0iMCIsYy53aWR0aD0iMTAwJSIsYy5oZWlnaHQ9U3RyaW5nKFouTkFWQkFSX0hFSUdIVCtHdSgpKSxkZWxldGUgYy5sZWZ0LGRlbGV0ZSBjLnJpZ2h0LGRlbGV0ZSBjLmJvdHRvbSxkZWxldGUgYy5tYXJnaW4pOmImJihjLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGModCk/VD1kaTpUPWUsVi5fX3VuaWFwcF9tYXNrPWMubWFza3x8InJnYmEoMCwwLDAsMC41KSIsVi5fX3VuaWFwcF9tYXNrX2lkPVQuaWQpLGRlbGV0ZSBjLm1hc2s7bGV0IEQ9cy53ZWJ2aWV3LmNyZWF0ZSgiIixvLmlkLGMsVik7aWYoYil7VC5wb3B1cFN1Yk5WdWVXZWJ2aWV3c3x8KFQucG9wdXBTdWJOVnVlV2Vidmlld3M9e30pLFQucG9wdXBTdWJOVnVlV2Vidmlld3NbRC5pZF09RDtsZXQgX2U9ZnVuY3Rpb24oKXtULnNldFN0eWxlKHttYXNrOiJub25lIn0pLEQuaGlkZSgiYXV0byIpfTtULmFkZEV2ZW50TGlzdGVuZXIoIm1hc2tDbGljayIsX2UpO2xldCBTZT0hMTtELmFkZEV2ZW50TGlzdGVuZXIoInNob3ciLCgpPT57U2V8fChzLmtleS5yZW1vdmVFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixMaSkscy5rZXkuYWRkRXZlbnRMaXN0ZW5lcigiYmFja2J1dHRvbiIsX2UpLFNlPSEwKX0pLEQuYWRkRXZlbnRMaXN0ZW5lcigiaGlkZSIsKCk9PntTZSYmKHMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJhY2tidXR0b24iLF9lKSxzLmtleS5hZGRFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixMaSksU2U9ITEpfSksRC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsKCk9PntkZWxldGUgVC5wb3B1cFN1Yk5WdWVXZWJ2aWV3c1tELmlkXSxTZSYmKHMua2V5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJhY2tidXR0b24iLF9lKSxzLmtleS5hZGRFdmVudExpc3RlbmVyKCJiYWNrYnV0dG9uIixMaSksU2U9ITEpfSl9ZWxzZSBlLmFwcGVuZChEKX0pfWZ1bmN0aW9uIHFUKGUsdCxuLHIpeyhlLmlkPT09IjEifHwhci5pc05WdWUpJiZHVChlLHQsbixyKSxZVChlLHQsciksV1QoZSl9ZnVuY3Rpb24gb3AoZSl7cmV0dXJuIGUucm91dGVPcHRpb25zLm1ldGEuaXNOVnVlP0ZUKGUpOlpnKCk9PT0yP3Mud2Vidmlldy5nZXRMYXVuY2hXZWJ2aWV3KCk6VlQoKX1mdW5jdGlvbiBhcChlLHQpe3N0Lm9uY2Uoa2wrIi4iK2UsdCl9bGV0IENhPSExO2Z1bmN0aW9uIHNwKGUsdCxuKXtDYT17cGF0aDplLG52dWU6b3MoZSkuaXNOVnVlLGNhbGxiYWNrOnR9fWZ1bmN0aW9uIGxwKGUsdCxuKXtRbyhlKSxubChlLiRnZXRBcHBXZWJ2aWV3KCksdCxuKX1mdW5jdGlvbiBXYyhlLHQsbj0hMSl7aWYoIW4mJkNhKXJldHVybiBjb25zb2xlLmVycm9yKGBXYWl0aW5nIHRvIG5hdmlnYXRlIHRvOiAke0NhLnBhdGh9LCBkbyBub3Qgb3BlcmF0ZSBjb250aW51b3VzbHk6ICR7ZX0uYCk7aWYoQi5yZW5kZXJlcj09PSJuYXRpdmUiKXJldHVybiBQbigpLmxlbmd0aD09PTA/c3AoZSx0LCJ3YWl0Rm9yUmVhZHkiKTp0KCk7bGV0IHI9IU1pfHxNaSYmTWkuX191bmlhcHBfcm91dGUsbz1NaSYmIU1pLmxvYWRlZDtyfHxvP3NwKGUsdCxyPyJ3YWl0Rm9yQ3JlYXRlIjoid2FpdEZvclJlYWR5Iik6dCgpLG8mJmFwKE1pLmlkLEdjKX1mdW5jdGlvbiBHYygpe2lmKCFDYSlyZXR1cm47bGV0e2NhbGxiYWNrOmV9PUNhO3JldHVybiBDYT0hMSxlKCl9ZnVuY3Rpb24gY3AoKXtpZihCLnJlbmRlcmVyPT09Im5hdGl2ZSIpcmV0dXJuIENhJiZDYS5udnVlP0djKCk6dm9pZCAwO2xldCBlPSRUKCk7aWYoISFDYSl7aWYoQ2EubnZ1ZSlyZXR1cm4gR2MoKTtlLmxvYWRlZD9DYS5jYWxsYmFjaygpOmFwKGUuaWQsR2MpfX1mdW5jdGlvbiBubChlLHQsbil7ZVtlLl9fcHJlbG9hZF9fPyJoaWRlIjoiY2xvc2UiXSh0LG4pfWZ1bmN0aW9uIFljKGUsdCxuLHIsbyl7dHlwZW9mIG89PSJ1bmRlZmluZWQiJiYobz1lLm52dWU/MDoxMDApO2xldCBjPWZ1bmN0aW9uKCl7Yy5fY2FsbGVkfHwoYy5fY2FsbGVkPSEwLHImJnIoKSxjcCgpKX07Yy5fY2FsbGVkPSExLGsoKCk9PntsZXQgaD1rKCgpPT57YygpfSxuKzE1MCk7ZS5zaG93KHQsbiwoKT0+e2MuX2NhbGxlZHx8UyhoKSxjKCl9KX0sbyl9ZnVuY3Rpb24gS1QoZSx0KXtsZXQgbj1lLmNoaWxkcmVuKCk7aWYoIW58fCFuLmxlbmd0aClyZXR1cm4gdCgpO2xldCByPW4uZmluZChvPT5vLmlkLmluZGV4T2YoeVQpPT09MCl8fG5bMF07ci5jYW5CYWNrKCh7Y2FuQmFjazpvfSk9PntvP3IuYmFjaygpOnQoKX0pfWxldCBKVD1PZShoeSwoZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXQgcj1TaSgpO2lmKCFyKXJldHVybiBuKCJnZXRDdXJyZW50UGFnZXMgaXMgZW1wdHkiKTtpZihMbihyLFouT05fQkFDS19QUkVTUyx7ZnJvbTplLmZyb218fCJuYXZpZ2F0ZUJhY2sifSkpcmV0dXJuIHQoKTtpZihJLmhpZGVUb2FzdCgpLEkuaGlkZUxvYWRpbmcoKSxyLiRwYWdlLm1ldGEuaXNRdWl0KVpUKCk7ZWxzZSBpZihucChyKSlycCgpO2Vsc2V7bGV0e2RlbHRhOm8sYW5pbWF0aW9uVHlwZTpjLGFuaW1hdGlvbkR1cmF0aW9uOmh9PWU7WFQobyxjLGgpfXJldHVybiB0KCl9LHB5LEF5KSxxYz0wO2Z1bmN0aW9uIFpUKCl7bXQoKSxxYz9EYXRlLm5vdygpLXFjPDJlMyYmcy5ydW50aW1lLnF1aXQoKToocWM9RGF0ZS5ub3coKSxzLm5hdGl2ZVVJLnRvYXN0KHNlKCkudCgidW5pLmFwcC5xdWl0IikpLGsoKCk9PntxYz0wfSwyZTMpKX1mdW5jdGlvbiBYVChlLHQsbil7bGV0IHI9UG4oKSxvPXIubGVuZ3RoLGM9cltvLTFdO2U+MSYmci5zbGljZShvLWUsby0xKS5yZXZlcnNlKCkuZm9yRWFjaChWPT57bmwocy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKFYuJHBhZ2UuaWQrIiIpLCJub25lIiwwKX0pO2xldCBoPWZ1bmN0aW9uKFYpe3Q/bmwoVix0LG58fHpjKTpjLiRwYWdlLm9wZW5UeXBlPT09InJlZGlyZWN0VG8iP25sKFYscWcsemMpOm5sKFYsImF1dG8iKSxyLnNsaWNlKG8tZSxvKS5mb3JFYWNoKFQ9PlFvKFQpKSxEYSgpLExuKFouT05fU0hPVyl9LGI9cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKGMuJHBhZ2UuaWQrIiIpO2lmKCFjLl9fdW5pYXBwX3dlYnZpZXcpcmV0dXJuIGgoYik7S1QoYiwoKT0+e2goYil9KX1jbGFzcyBRVCBleHRlbmRzIFouVW5pTm9kZXtjb25zdHJ1Y3Rvcih0LG4scj0hMSl7c3VwZXIoWi5OT0RFX1RZUEVfUEFHRSwiI3BhZ2UiLG51bGwpO3RoaXMuX2lkPTEsdGhpcy5fY3JlYXRlZD0hMSx0aGlzLl91cGRhdGluZz0hMSx0aGlzLl9jcmVhdGVBY3Rpb25NYXA9bmV3IE1hcCx0aGlzLnVwZGF0ZUFjdGlvbnM9W10sdGhpcy5kaWN0cz1bXSx0aGlzLm5vZGVJZD0wLHRoaXMucGFnZUlkPXQsdGhpcy5wYWdlTm9kZT10aGlzLHRoaXMub3B0aW9ucz1uLHRoaXMuaXNVbm1vdW50ZWQ9ITEsdGhpcy5jcmVhdGVBY3Rpb249W1ouQUNUSU9OX1RZUEVfUEFHRV9DUkVBVEUsbl0sdGhpcy5jcmVhdGVkQWN0aW9uPVtaLkFDVElPTl9UWVBFX1BBR0VfQ1JFQVRFRF0sdGhpcy5ub3JtYWxpemVEaWN0PXRoaXMuX25vcm1hbGl6ZURpY3QuYmluZCh0aGlzKSx0aGlzLl91cGRhdGU9dGhpcy51cGRhdGUuYmluZCh0aGlzKSxyJiZ0aGlzLnNldHVwKCl9X25vcm1hbGl6ZURpY3QodCxuPSEwKXtpZighVy5pc1BsYWluT2JqZWN0KHQpKXJldHVybiB0aGlzLmFkZERpY3QodCk7bGV0IHI9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2gobz0+e2xldCBjPVt0aGlzLmFkZERpY3QobyldLGg9dFtvXTtuP2MucHVzaCh0aGlzLmFkZERpY3QoaCkpOmMucHVzaChoKSxyLnB1c2goYyl9KSxyfWFkZERpY3QodCl7bGV0e2RpY3RzOm59PXRoaXMscj1uLmluZGV4T2YodCk7cmV0dXJuIHI+LTE/cjpuLnB1c2godCktMX1vbkluamVjdEhvb2sodCl7KHQ9PT1aLk9OX1BBR0VfU0NST0xMfHx0PT09Wi5PTl9SRUFDSF9CT1RUT00pJiYhdGhpcy5zY3JvbGxBY3Rpb24mJih0aGlzLnNjcm9sbEFjdGlvbj1bWi5BQ1RJT05fVFlQRV9QQUdFX1NDUk9MTCx0aGlzLm9wdGlvbnMub25SZWFjaEJvdHRvbURpc3RhbmNlXSx0aGlzLnB1c2godGhpcy5zY3JvbGxBY3Rpb24pKX1vbkNyZWF0ZSh0LG4pe3JldHVybiBuUCh0aGlzLHQubm9kZUlkLG4pLHR9b25JbnNlcnRCZWZvcmUodCxuLHIpe3JldHVybiByUCh0aGlzLG4sdC5ub2RlSWQsciYmci5ub2RlSWR8fC0xKSxufW9uUmVtb3ZlQ2hpbGQodCl7cmV0dXJuIGlQKHRoaXMsdC5ub2RlSWQpLHR9b25BZGRFdmVudCh0LG4scil7dC5wYXJlbnROb2RlJiZvUCh0aGlzLHQubm9kZUlkLG4scil9b25BZGRXeHNFdmVudCh0LG4scixvKXt0LnBhcmVudE5vZGUmJmFQKHRoaXMsdC5ub2RlSWQsbixyLG8pfW9uUmVtb3ZlRXZlbnQodCxuKXt0LnBhcmVudE5vZGUmJnNQKHRoaXMsdC5ub2RlSWQsbil9b25TZXRBdHRyaWJ1dGUodCxuLHIpe3QucGFyZW50Tm9kZSYmY1AodGhpcyx0Lm5vZGVJZCxuLHIpfW9uUmVtb3ZlQXR0cmlidXRlKHQsbil7dC5wYXJlbnROb2RlJiZ1UCh0aGlzLHQubm9kZUlkLG4pfW9uVGV4dENvbnRlbnQodCxuKXt0LnBhcmVudE5vZGUmJmZwKHRoaXMsdC5ub2RlSWQsbil9b25Ob2RlVmFsdWUodCxuKXt0LnBhcmVudE5vZGUmJmZwKHRoaXMsdC5ub2RlSWQsbil9Z2VuSWQoKXtyZXR1cm4gdGhpcy5faWQrK31wdXNoKHQsbil7aWYoIXRoaXMuaXNVbm1vdW50ZWQpe3N3aXRjaCh0WzBdKXtjYXNlIFouQUNUSU9OX1RZUEVfQ1JFQVRFOnRoaXMuX2NyZWF0ZUFjdGlvbk1hcC5zZXQodFsxXSx0KTticmVhaztjYXNlIFouQUNUSU9OX1RZUEVfSU5TRVJUOmxldCByPXRoaXMuX2NyZWF0ZUFjdGlvbk1hcC5nZXQodFsxXSk7cj8oclszXT10WzJdLHJbNF09dFszXSxuJiYocls1XT1uKSk6KG4mJih0WzRdPW4pLHRoaXMudXBkYXRlQWN0aW9ucy5wdXNoKHQpKTticmVha310WzBdIT09Wi5BQ1RJT05fVFlQRV9JTlNFUlQmJnRoaXMudXBkYXRlQWN0aW9ucy5wdXNoKHQpLHRoaXMuX3VwZGF0aW5nfHwodGhpcy5fdXBkYXRpbmc9ITAsZm4ucXVldWVQb3N0Rmx1c2hDYih0aGlzLl91cGRhdGUpKX19cmVzdG9yZSgpe3RoaXMuY2xlYXIoKSx0aGlzLnNldHVwKCksdGhpcy5zY3JvbGxBY3Rpb24mJnRoaXMucHVzaCh0aGlzLnNjcm9sbEFjdGlvbik7bGV0IHQ9bj0+e3RoaXMub25DcmVhdGUobixuLm5vZGVOYW1lKSx0aGlzLm9uSW5zZXJ0QmVmb3JlKG4ucGFyZW50Tm9kZSxuLG51bGwpLG4uY2hpbGROb2Rlcy5mb3JFYWNoKHI9Pnt0KHIpfSl9O3RoaXMuY2hpbGROb2Rlcy5mb3JFYWNoKG49PnQobikpLHRoaXMucHVzaCh0aGlzLmNyZWF0ZWRBY3Rpb24pfXNldHVwKCl7dGhpcy5zZW5kKFt0aGlzLmNyZWF0ZUFjdGlvbl0pfXVwZGF0ZSgpe2xldHtkaWN0czp0LHVwZGF0ZUFjdGlvbnM6bixfY3JlYXRlQWN0aW9uTWFwOnJ9PXRoaXM7dGhpcy5fY3JlYXRlZHx8KHRoaXMuX2NyZWF0ZWQ9ITAsbi5wdXNoKHRoaXMuY3JlYXRlZEFjdGlvbikpLG4ubGVuZ3RoJiYodC5sZW5ndGgmJm4udW5zaGlmdChbVE8sdF0pLHRoaXMuc2VuZChuKSksdGhpcy5jbGVhcigpfWNsZWFyKCl7dGhpcy5kaWN0cy5sZW5ndGg9MCx0aGlzLnVwZGF0ZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy5fdXBkYXRpbmc9ITEsdGhpcy5fY3JlYXRlQWN0aW9uTWFwLmNsZWFyKCl9c2VuZCh0KXtzdC5wdWJsaXNoSGFuZGxlcihDZyx0LHRoaXMucGFnZUlkKX1maXJlRXZlbnQodCxuKXtsZXQgcj11cCh0LHRoaXMpO3ImJnIuZGlzcGF0Y2hFdmVudChuKX19ZnVuY3Rpb24gZVAoZSl7bGV0IHQ9SXIoZSk7cmV0dXJuIHQ/dC5fX3BhZ2VfY29udGFpbmVyX186bnVsbH1mdW5jdGlvbiBsZihlLHQsbil7aWYodHlwZW9mIG49PSJudW1iZXIiJiYobj1lUChuKSksbltlXT09PXQpcmV0dXJuIG47bGV0e2NoaWxkTm9kZXM6cn09bjtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IGM9bGYoZSx0LHJbb10pO2lmKGMpcmV0dXJuIGN9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdXAoZSx0KXtyZXR1cm4gbGYoIm5vZGVJZCIsZSx0KX1mdW5jdGlvbiB0UChlLHQpe3JldHVybiBsZigibm9kZU5hbWUiLGUudG9VcHBlckNhc2UoKSx0KX1mdW5jdGlvbiBuUChlLHQsbil7ZS5wdXNoKFtaLkFDVElPTl9UWVBFX0NSRUFURSx0LGUuYWRkRGljdChuKSwtMSwtMV0pfWZ1bmN0aW9uIHJQKGUsdCxuLHIpe2xldCBvPXQudG9KU09OKHthdHRyOiEwLG5vcm1hbGl6ZTplLm5vcm1hbGl6ZURpY3R9KTtlLnB1c2goW1ouQUNUSU9OX1RZUEVfSU5TRVJULHQubm9kZUlkLG4scl0sT2JqZWN0LmtleXMobykubGVuZ3RoP286dm9pZCAwKX1mdW5jdGlvbiBpUChlLHQpe2UucHVzaChbWi5BQ1RJT05fVFlQRV9SRU1PVkUsdF0pfWZ1bmN0aW9uIG9QKGUsdCxuLHIpe2UucHVzaChbWi5BQ1RJT05fVFlQRV9BRERfRVZFTlQsdCxlLmFkZERpY3Qobikscl0pfWZ1bmN0aW9uIGFQKGUsdCxuLHIsbyl7ZS5wdXNoKFtaLkFDVElPTl9UWVBFX0FERF9XWFNfRVZFTlQsdCxlLmFkZERpY3QobiksZS5hZGREaWN0KHIpLG9dKX1mdW5jdGlvbiBzUChlLHQsbil7ZS5wdXNoKFtaLkFDVElPTl9UWVBFX1JFTU9WRV9FVkVOVCx0LGUuYWRkRGljdChuKV0pfWZ1bmN0aW9uIGxQKGUsdCxuKXtyZXR1cm4gdD09PSJzdHlsZSImJlcuaXNQbGFpbk9iamVjdChuKT9lLm5vcm1hbGl6ZURpY3Qobik6ZS5hZGREaWN0KG4pfWZ1bmN0aW9uIGNQKGUsdCxuLHIpe2UucHVzaChbWi5BQ1RJT05fVFlQRV9TRVRfQVRUUklCVVRFLHQsZS5hZGREaWN0KG4pLGxQKGUsbixyKV0pfWZ1bmN0aW9uIHVQKGUsdCxuKXtlLnB1c2goW1ouQUNUSU9OX1RZUEVfUkVNT1ZFX0FUVFJJQlVURSx0LGUuYWRkRGljdChuKV0pfWZ1bmN0aW9uIGZwKGUsdCxuKXtlLnB1c2goW1ouQUNUSU9OX1RZUEVfU0VUX1RFWFQsdCxlLmFkZERpY3QobildKX1mdW5jdGlvbiBmUChlLHQsbil7cmV0dXJuIG5ldyBRVChlLHQsbil9ZnVuY3Rpb24gZHAoZSl7bGV0IHQ9ZS5zZXR1cDtyZXR1cm4gZS5pbmhlcml0QXR0cnM9ITEsZS5zZXR1cD0obixyKT0+e2xldHthdHRyczp7X19wYWdlSWQ6byxfX3BhZ2VQYXRoOmMsX19wYWdlUXVlcnk6aCxfX3BhZ2VJbnN0YW5jZTpifX09cixUPWZuLmdldEN1cnJlbnRJbnN0YW5jZSgpLnByb3h5O2lmKGd0KFQsYiksRG4oaHAobyxULGIpKSxmbi5vbk1vdW50ZWQoKCk9Pntmbi5uZXh0VGljaygoKT0+e0xuKFQsWi5PTl9SRUFEWSl9KX0pLGZuLm9uQmVmb3JlVW5tb3VudCgoKT0+e0xuKFQsWi5PTl9VTkxPQUQpfSksdClyZXR1cm4gdChoLHIpfSxlfWZ1bmN0aW9uIGhwKGUsdCxuKXtsZXQgcj0oKT0+cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKGUrIiIpO3JldHVybiB0LiRnZXRBcHBXZWJ2aWV3PXIsdC4kLmN0eC4kc2NvcGU9eyRnZXRBcHBXZWJ2aWV3OnJ9LHQuZ2V0T3BlbmVyRXZlbnRDaGFubmVsPSgpPT4obi5ldmVudENoYW5uZWx8fChuLmV2ZW50Q2hhbm5lbD1uZXcgWi5FdmVudENoYW5uZWwoZSkpLG4uZXZlbnRDaGFubmVsKSx0fWZ1bmN0aW9uIGRQKGUpe3JldHVybiBXLmlzRnVuY3Rpb24oZSl9bGV0IGdwPW5ldyBNYXA7ZnVuY3Rpb24gaFAoZSx0KXtncC5zZXQoZSxaLm9uY2UocFAodCkpKX1mdW5jdGlvbiBnUChlLHQsbixyLG8pe2xldCBjPWZQKGUsbywhMCksaD1HaSgpLGI9Z3AuZ2V0KHQpKCksVj1UPT5oLm1vdW50UGFnZShULHtfX3BhZ2VJZDplLF9fcGFnZVBhdGg6dCxfX3BhZ2VRdWVyeTpuLF9fcGFnZUluc3RhbmNlOnJ9LGMpO3JldHVybiBXLmlzUHJvbWlzZShiKT9iLnRoZW4oVD0+VihUKSk6VihiKX1mdW5jdGlvbiBwUChlKXtyZXR1cm4oKT0+ZFAoZSk/ZSgpLnRoZW4odD0+ZHAodCkpOmRwKGUpfWxldCBwcD0hMTtmdW5jdGlvbiB2cCgpe2lmKHBwKXJldHVybjtwcD0hMDtsZXQgZSx0O2lmKGcucmVxdWlyZU1vZHVsZSgicGx1cyIpLmdldFJlZGlyZWN0SW5mbyl7bGV0e3BhdGg6YyxxdWVyeTpoLHJlZmVycmVySW5mbzpifT1McygpO2MmJihlPWMsdD1oKSxCLnJlZmVycmVySW5mbz1ifWVsc2V7bGV0IGM9cy5ydW50aW1lLmFyZ3VtZW50cztpZighYylyZXR1cm47dHJ5e2xldCBoPUpTT04ucGFyc2UoYyk7ZT1oLnBhdGh8fGgucGF0aE5hbWUsdD1oLnF1ZXJ5PyI/IitoLnF1ZXJ5OiIifWNhdGNoKGgpe319aWYoIWV8fGU9PT1CLmVudHJ5UGFnZVBhdGgpe3QmJihCLmVudHJ5UGFnZVF1ZXJ5PXQpO3JldHVybn1sZXQgcj1aLmFkZExlYWRpbmdTbGFzaChlKSxvPWppKHIpOyFvfHwoby5tZXRhLmlzVGFiQmFyfHwoQi5yZWFsRW50cnlQYWdlUGF0aD1CLnJlYWxFbnRyeVBhZ2VQYXRofHxCLmVudHJ5UGFnZVBhdGgpLEIuZW50cnlQYWdlUGF0aD1lLEIuZW50cnlQYWdlUXVlcnk9dCl9ZnVuY3Rpb24gS2MoZSx0KXtsZXQgbj1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGppKGUpKSk7cmV0dXJuIG4ubWV0YT1VYShuLm1ldGEpLHQhPT0icHJlbG9hZFBhZ2UiJiYhQi5yZWFsRW50cnlQYWdlUGF0aCYmKHQ9PT0icmVMYXVuY2gifHxQbigpLmxlbmd0aD09PTApP24ubWV0YS5pc1F1aXQ9ITA6bi5tZXRhLmlzVGFiQmFyfHwobi5tZXRhLmlzUXVpdD0hMSksbn1sZXQgQWE9e307ZnVuY3Rpb24gdlAoZSl7bGV0IHQ9T2JqZWN0LmtleXMoQWEpLmZpbmQobj0+QWFbbl0uaWQ9PT1lLmlkKTt0JiZkZWxldGUgQWFbdF19ZnVuY3Rpb24gbVAoe3VybDplfSl7bGV0IHQ9QWFbZV07cmV0dXJuIHQmJih0Ll9fcGFnZV9fJiZQbigpLmZpbmQobj0+bj09PXQuX19wYWdlX18pP3QuX19wcmVsb2FkX189ITE6dC5jbG9zZSgibm9uZSIpLGRlbGV0ZSBBYVtlXSksdH1mdW5jdGlvbiBfUCh7dXJsOmUscGF0aDp0LHF1ZXJ5Om59KXtpZighQWFbZV0pe2xldCByPUtjKHQsInByZWxvYWRQYWdlIik7QWFbZV09b3Aoe3BhdGg6dCxyb3V0ZU9wdGlvbnM6cixxdWVyeTpuLHdlYnZpZXdFeHRyYXM6e19fcHJlbG9hZF9fOiEwfX0pfXJldHVybiBBYVtlXX1mdW5jdGlvbiBmYyh7dXJsOmUscGF0aDp0LHF1ZXJ5Om4sb3BlblR5cGU6cix3ZWJ2aWV3Om8sbnZ1ZVBhZ2VWbTpjLGV2ZW50Q2hhbm5lbDpofSl7aWYobyYmdnAoKSxBYVtlXSl7bz1BYVtlXTtsZXQgU2U9bztpZihTZS5fX3BhZ2VfXylpZihQbigpLmZpbmQoSWU9PkllPT09U2UuX19wYWdlX18pKW89dm9pZCAwO2Vsc2UgcmV0dXJuIGgmJihTZS5fX3BhZ2VfXy4kcGFnZS5ldmVudENoYW5uZWw9aCkscj09PSJsYXVuY2giP2JQKGUsdCxuLFNlLGMsaCk6RG4oU2UuX19wYWdlX18pLFNlfWxldCBiPUtjKHQscik7bz8obz1zLndlYnZpZXcuZ2V0V2Vidmlld0J5SWQoby5pZCksby5udnVlPWIubWV0YS5pc05WdWUpOm89b3Aoe3BhdGg6dCxyb3V0ZU9wdGlvbnM6YixxdWVyeTpufSksYi5tZXRhLmlkPXBhcnNlSW50KG8uaWQpLCEhYi5tZXRhLmlzVGFiQmFyJiZkaS5hcHBlbmQobykscVQobyx0LG4sYi5tZXRhKTtsZXQgVD10LnNsaWNlKDEpO28uX191bmlhcHBfcm91dGU9VDtsZXQgRD1kYShyLGUsbixiLm1ldGEsaCxCLmRhcmttb2RlP3MubmF2aWdhdG9yLmdldFVJU3R5bGUoKToibGlnaHQiKSxfZT1wYXJzZUludChvLmlkKTtyZXR1cm4gby5udnVlP2M/eVAoX2UsYyxEKTptcChfZSxvLEQpOmdQKF9lLFQsbixELEVQKGIpKSxvfWZ1bmN0aW9uIGJQKGUsdCxuLHIsbyxjKXtsZXQgaD1LYyh0LCJwcmVsb2FkUGFnZSIpO2gubWV0YS5pZD1wYXJzZUludChyLmlkKTtsZXQgYj1kYSgicHJlbG9hZFBhZ2UiLGUsbixoLm1ldGEsYyxCLmRhcmttb2RlP3MubmF2aWdhdG9yLmdldFVJU3R5bGUoKToibGlnaHQiKTtndChvLGIpLHIuX19wYWdlX189b31mdW5jdGlvbiBFUCh7bWV0YTplfSl7bGV0IHQ9R3UoKSx7cGxhdGZvcm06bixwaXhlbFJhdGlvOnIsd2luZG93V2lkdGg6b309JHIoKTtyZXR1cm57Y3NzOiEwLHJvdXRlOmUucm91dGUsdmVyc2lvbjoxLGxvY2FsZToiIixwbGF0Zm9ybTpuLHBpeGVsUmF0aW86cix3aW5kb3dXaWR0aDpvLGRpc2FibGVTY3JvbGw6ZS5kaXNhYmxlU2Nyb2xsPT09ITAsb25QYWdlU2Nyb2xsOiExLG9uUGFnZVJlYWNoQm90dG9tOiExLG9uUmVhY2hCb3R0b21EaXN0YW5jZTpXLmhhc093bihlLCJvblJlYWNoQm90dG9tRGlzdGFuY2UiKT9lLm9uUmVhY2hCb3R0b21EaXN0YW5jZTpaLk9OX1JFQUNIX0JPVFRPTV9ESVNUQU5DRSxzdGF0dXNiYXJIZWlnaHQ6dCx3aW5kb3dUb3A6ZS5uYXZpZ2F0aW9uQmFyLnR5cGU9PT0iZmxvYXQiP3QrWi5OQVZCQVJfSEVJR0hUOjAsd2luZG93Qm90dG9tOmRpLmluZGV4T2YoZS5yb3V0ZSk+PTAmJmRpLmNvdmVyP2RpLmhlaWdodDowfX1mdW5jdGlvbiB5UChlLHQsbil7Z3QodCxuKSxEbihocChlLHQsbikpLGU9PT0xJiYoQi5zcGxhc2hzY3JlZW4mJkIuc3BsYXNoc2NyZWVuLmF1dG9jbG9zZSYmIUIuc3BsYXNoc2NyZWVuLmFsd2F5c1Nob3dCZWZvcmVSZW5kZXImJnMubmF2aWdhdG9yLmNsb3NlU3BsYXNoc2NyZWVuKCksQi5vblJlYWR5KGZ1bmN0aW9uKCl7Y3AoKX0pKX1mdW5jdGlvbiBtcChlLHQsbil7bGV0IHI9eyQ6e30sJGdldEFwcFdlYnZpZXcoKXtyZXR1cm4gdH0sZ2V0T3BlbmVyRXZlbnRDaGFubmVsKCl7cmV0dXJuIG4uZXZlbnRDaGFubmVsfHwobi5ldmVudENoYW5uZWw9bmV3IFouRXZlbnRDaGFubmVsKGUpKSxuLmV2ZW50Q2hhbm5lbH0sX19zZXR1cChvLGMpe28uJGdldEFwcFdlYnZpZXc9KCk9PnQsby5nZXRPcGVuZXJFdmVudENoYW5uZWw9Yy5nZXRPcGVuZXJFdmVudENoYW5uZWwsZ3QobyxuKSx0Ll9fcHJlbG9hZF9fJiYodC5fX3BhZ2VfXz1vKTtsZXQgaD1GbigpLGI9aC5maW5kSW5kZXgoVj0+Vj09PWMpO2I+LTEmJmguc3BsaWNlKGIsMSxvKX19O2d0KHIsbiksdC5fX3ByZWxvYWRfXz8odC5fX3BhZ2VfXz1yLHQuYWRkRXZlbnRMaXN0ZW5lcigic2hvdyIsKCk9PntMbih0Ll9fcGFnZV9fLFouT05fU0hPVyl9KSx0LmFkZEV2ZW50TGlzdGVuZXIoImhpZGUiLCgpPT57TG4odC5fX3BhZ2VfXyxaLk9OX0hJREUpfSkpOkRuKHIpfWxldCBfcD0oZSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXR7dXJsOnIsZXZlbnRzOm8sYW5pbWF0aW9uVHlwZTpjLGFuaW1hdGlvbkR1cmF0aW9uOmh9PWUse3BhdGg6YixxdWVyeTpWfT1aLnBhcnNlVXJsKHIpLFtULERdPUNQKGIsYyxoKTtXYyhiLCgpPT57d1Aoe3VybDpyLHBhdGg6YixxdWVyeTpWLGV2ZW50czpvLGFuaVR5cGU6VCxhbmlEdXJhdGlvbjpEfSkudGhlbih0KS5jYXRjaChuKX0sZS5vcGVuVHlwZT09PSJhcHBMYXVuY2giKX0sU1A9T2UoRnUsX3AsZ3kseXkpO2Z1bmN0aW9uIHdQKHt1cmw6ZSxwYXRoOnQscXVlcnk6bixldmVudHM6cixhbmlUeXBlOm8sYW5pRHVyYXRpb246Y30pe0xuKFouT05fSElERSk7bGV0IGg9bmV3IFouRXZlbnRDaGFubmVsKFpnKCkrMSxyKTtyZXR1cm4gbmV3IFByb21pc2UoYj0+e1ljKGZjKHt1cmw6ZSxwYXRoOnQscXVlcnk6bixvcGVuVHlwZToibmF2aWdhdGVUbyIsZXZlbnRDaGFubmVsOmh9KSxvLGMsKCk9PntiKHtldmVudENoYW5uZWw6aH0pfSksRGEoKX0pfWZ1bmN0aW9uIENQKGUsdCxuKXtsZXR7Z2xvYmFsU3R5bGU6cn09QixvPW9zKGUpO3JldHVyblt0fHxvLmFuaW1hdGlvblR5cGV8fHIuYW5pbWF0aW9uVHlwZXx8YlQsbnx8by5hbmltYXRpb25EdXJhdGlvbnx8ci5hbmltYXRpb25EdXJhdGlvbnx8emNdfWxldCBBUD1PZShWdSwoe3VybDplfSx7cmVzb2x2ZTp0LHJlamVjdDpufSk9PntsZXR7cGF0aDpyLHF1ZXJ5Om99PVoucGFyc2VVcmwoZSk7V2MociwoKT0+e09QKHt1cmw6ZSxwYXRoOnIscXVlcnk6b30pLnRoZW4odCkuY2F0Y2gobil9KX0sdnksU3kpO2Z1bmN0aW9uIE9QKHt1cmw6ZSxwYXRoOnQscXVlcnk6bn0pe2xldCByPVNpKCk7cmV0dXJuIHImJlFvKHIpLG5ldyBQcm9taXNlKG89PntZYyhmYyh7dXJsOmUscGF0aDp0LHF1ZXJ5Om4sb3BlblR5cGU6InJlZGlyZWN0VG8ifSksIm5vbmUiLDAsKCk9PntpZihyKXtsZXQgYz1yLiRnZXRBcHBXZWJ2aWV3KCk7Yy5fX3ByZWxvYWRfXyYmdlAoYyksYy5jbG9zZSgibm9uZSIpfW8odm9pZCAwKX0pLERhKCl9KX1sZXQgVFA9KHt1cmw6ZX0se3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0e3BhdGg6cixxdWVyeTpvfT1aLnBhcnNlVXJsKGUpO1djKHIsKCk9PntQUCh7dXJsOmUscGF0aDpyLHF1ZXJ5Om99KS50aGVuKHQpLmNhdGNoKG4pfSl9O2Z1bmN0aW9uIFBQKHt1cmw6ZSxwYXRoOnQscXVlcnk6bn0pe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IG89Rm4oKS5zbGljZSgwKTtXZS5maW5kKGg9PmgucGF0aD09PXQpLm1ldGEuaXNUYWJCYXImJmRpLnN3aXRjaFRhYih0LnNsaWNlKDEpKSxZYyhmYyh7dXJsOmUscGF0aDp0LHF1ZXJ5Om4sb3BlblR5cGU6InJlTGF1bmNoIn0pLCJub25lIiwwLCgpPT57by5mb3JFYWNoKGg9PmxwKGgsIm5vbmUiKSkscih2b2lkIDApfSksRGEoKX0pfWxldCBJUD1PZShUaCxUUCxteSx3eSksYnA9KGUse3Jlc29sdmU6dCxyZWplY3Q6bn0pPT57bGV0e3VybDpyfT1lLHtwYXRoOm8scXVlcnk6Y309Wi5wYXJzZVVybChyKTtXYyhvLCgpPT57a1Aoe3VybDpyLHBhdGg6byxxdWVyeTpjfSkudGhlbih0KS5jYXRjaChuKX0sZS5vcGVuVHlwZT09PSJhcHBMYXVuY2giKX0sTlA9T2UoSWMsYnAsX3ksQ3kpO2Z1bmN0aW9uIGtQKHt1cmw6ZSxwYXRoOnQscXVlcnk6bn0pe2RpLnN3aXRjaFRhYih0LnNsaWNlKDEpKTtsZXQgcj1QbigpLG89ci5sZW5ndGgsYz0hMSxoPSExLGI7bz49MSYmKGI9cltvLTFdLGImJiFiLiQuX19pc1RhYkJhcj8oaD0hMCxyLnJldmVyc2UoKS5mb3JFYWNoKFQ9PnshVC4kLl9faXNUYWJCYXImJlQhPT1iJiZscChULCJub25lIil9KSxRbyhiKSxrKCgpPT57Yi4kcGFnZS5vcGVuVHlwZT09PSJyZWRpcmVjdFRvIj9ubChiLiRnZXRBcHBXZWJ2aWV3KCkscWcsemMpOm5sKGIuJGdldEFwcFdlYnZpZXcoKSwiYXV0byIpfSwxMDApKTpjPSEwKTtsZXQgVjtyZXR1cm4gRm4oKS5mb3JFYWNoKFQ9PntaLmFkZExlYWRpbmdTbGFzaChULnJvdXRlKT09PXQ/KFQuJC5fX2lzQWN0aXZlfHwoaD0hMCksVC4kLl9faXNBY3RpdmU9ITAsVj1UKTpULiQuX19pc1RhYkJhciYmKFQuJC5fX2lzQWN0aXZlPSExKX0pLGI9PT1WJiYoYz0hMSksYiYmYyYmTG4oYixaLk9OX0hJREUpLG5ldyBQcm9taXNlKFQ9PntpZihWKXtsZXQgRD1WLiRnZXRBcHBXZWJ2aWV3KCk7RC5zaG93KCJub25lIiksaCYmIUQuX19wcmVsb2FkX18mJkxuKFYsWi5PTl9TSE9XKSxEYSgpLFQodm9pZCAwKX1lbHNlIFljKGZjKHt1cmw6ZSxwYXRoOnQscXVlcnk6bixvcGVuVHlwZToic3dpdGNoVGFiIn0pLCJub25lIiwwLCgpPT57RGEoKSxUKHZvaWQgMCl9LDcwKX0pfWxldCBSUD1NdChQaCwoe3VybDplfSk9PntsZXQgdD1tUCh7dXJsOmV9KTtyZXR1cm4gdD97aWQ6dC5pZCx1cmw6ZSxlcnJNc2c6InVuUHJlbG9hZFBhZ2U6b2sifTp7dXJsOmUsZXJyTXNnOiJ1blByZWxvYWRQYWdlOmZhaWwgbm90IGZvdW5kIn19LEV5KSx4UD1PZSgkdSwoe3VybDplfSx7cmVzb2x2ZTp0fSk9PntpZihBYVtlXSlyZXR1cm47bGV0IG49ZS5zcGxpdCgiPyIpLHI9blswXSxvPVoucGFyc2VRdWVyeShuWzFdfHwiIiksYz1fUCh7dXJsOmUscGF0aDpyLHF1ZXJ5Om99KSxoPUtjKHIsInByZWxvYWRQYWdlIik7aC5tZXRhLmlkPXBhcnNlSW50KGMuaWQpO2xldCBiPWRhKCJwcmVsb2FkUGFnZSIsZSxvLGgubWV0YSx2b2lkIDAsQi5kYXJrbW9kZT9zLm5hdmlnYXRvci5nZXRVSVN0eWxlKCk6ImxpZ2h0Iik7bXAocGFyc2VJbnQoYy5pZCksYyxiKSx0KHtpZDpjLmlkLHVybDplLGVyck1zZzoicHJlbG9hZFBhZ2U6b2sifSl9LGJ5KTt2YXIgQlA9e19fcHJvdG9fXzpudWxsLCRlbWl0OnFtLCRvZmY6WW0sJG9uOldtLCRvbmNlOkdtLF9fbG9nX186Wk8sYWRkSW50ZXJjZXB0b3I6TG0sYWRkUGhvbmVDb250YWN0OlNDLGFycmF5QnVmZmVyVG9CYXNlNjQ6cHIsYmFzZTY0VG9BcnJheUJ1ZmZlcjpOaSxjYW5JVXNlOlB3LGNhbnZhc0dldEltYWdlRGF0YTpTXyxjYW52YXNQdXRJbWFnZURhdGE6d18sY2FudmFzVG9UZW1wRmlsZVBhdGg6Q18sY2hlY2tJc1NvdGVyRW5yb2xsZWRJbkRldmljZTpQQyxjaGVja0lzU3VwcG9ydFNvdGVyQXV0aGVudGljYXRpb246VEMsY2hvb3NlSW1hZ2U6SkMsY2hvb3NlTG9jYXRpb246cUEsY2hvb3NlVmlkZW86WkMsY2xlYXJTdG9yYWdlOnB3LGNsZWFyU3RvcmFnZVN5bmM6Z3csY2xvc2VBdXRoVmlldzprZyxjbG9zZUJMRUNvbm5lY3Rpb246YUMsY2xvc2VCbHVldG9vdGhBZGFwdGVyOlF3LGNsb3NlUHJldmlld0ltYWdlOlVDLGNsb3NlU29ja2V0OmdBLGNvbXByZXNzSW1hZ2U6WUMsY29tcHJlc3NWaWRlbzpxQyxjb25maWdNVExTOmxBLGNvbm5lY3RTb2NrZXQ6ZEEsY3JlYXRlQW5pbWF0aW9uOmpfLGNyZWF0ZUJMRUNvbm5lY3Rpb246b0MsY3JlYXRlQ2FudmFzQ29udGV4dDp5XyxjcmVhdGVGdWxsU2NyZWVuVmlkZW9BZDpoVCxjcmVhdGVJbm5lckF1ZGlvQ29udGV4dDpOQSxjcmVhdGVJbnRlcmFjdGl2ZUFkOl9ULGNyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVyOklfLGNyZWF0ZUludGVyc3RpdGlhbEFkOnBULGNyZWF0ZUxpdmVQdXNoZXJDb250ZXh0OnpBLGNyZWF0ZU1hcENvbnRleHQ6YV8sY3JlYXRlTWVkaWFRdWVyeU9ic2VydmVyOmtfLGNyZWF0ZVB1c2hNZXNzYWdlOlVPLGNyZWF0ZVJld2FyZGVkVmlkZW9BZDpmVCxjcmVhdGVTZWxlY3RvclF1ZXJ5OkRfLGNyZWF0ZVZpZGVvQ29udGV4dDppXyxkb3dubG9hZEZpbGU6ckEsZ2V0QXBwQXV0aG9yaXplU2V0dGluZzpjZyxnZXRBcHBCYXNlSW5mbzpxaCxnZXRCTEVEZXZpY2VDaGFyYWN0ZXJpc3RpY3M6bEMsZ2V0QkxFRGV2aWNlUlNTSTpoQyxnZXRCTEVEZXZpY2VTZXJ2aWNlczpzQyxnZXRCYWNrZ3JvdW5kQXVkaW9NYW5hZ2VyOlVBLGdldEJlYWNvbnM6dkMsZ2V0Qmx1ZXRvb3RoQWRhcHRlclN0YXRlOmVDLGdldEJsdWV0b290aERldmljZXM6ckMsZ2V0Q2hlY2tCb3hTdGF0ZTpSZyxnZXRDbGlwYm9hcmREYXRhOndDLGdldENvbm5lY3RlZEJsdWV0b290aERldmljZXM6aUMsZ2V0RGV2aWNlSW5mbzpZaCxnZXRFbnRlck9wdGlvbnNTeW5jOmZiLGdldEZpbGVJbmZvOm13LGdldEltYWdlSW5mbzpGQyxnZXRMYXVuY2hPcHRpb25zU3luYzpkYixnZXRMb2NhbGU6SmwsZ2V0TG9jYXRpb246WUEsZ2V0TmV0d29ya1R5cGU6cmcsZ2V0UHJvdmlkZXI6TE8sZ2V0UHVzaENsaWVudElkOmhiLGdldFJlY29yZGVyTWFuYWdlcjp6QyxnZXRTYXZlZEZpbGVJbmZvOkF3LGdldFNhdmVkRmlsZUxpc3Q6Q3csZ2V0U2NyZWVuQnJpZ2h0bmVzczp4QyxnZXRTZWxlY3RlZFRleHRSYW5nZTpRXyxnZXRTdG9yYWdlOmZ3LGdldFN0b3JhZ2VJbmZvOnZ3LGdldFN0b3JhZ2VJbmZvU3luYzpMaCxnZXRTdG9yYWdlU3luYzp1dyxnZXRTdWJOVnVlQnlJZDprTyxnZXRTeXN0ZW1JbmZvOlV3LGdldFN5c3RlbUluZm9TeW5jOktoLGdldFN5c3RlbVNldHRpbmc6TUMsZ2V0VW5pdmVyaWZ5TWFuYWdlcjokTyxnZXRVc2VySW5mbzpNTyxnZXRVc2VyUHJvZmlsZTpETyxnZXRWaWRlb0luZm86VkMsZ2V0V2luZG93SW5mbzpHaCxoaWRlS2V5Ym9hcmQ6UUMsaGlkZUxvYWRpbmc6bE8saGlkZU5hdmlnYXRpb25CYXJMb2FkaW5nOnBPLGhpZGVUYWJCYXI6eU8saGlkZVRhYkJhclJlZERvdDpBTyxoaWRlVG9hc3Q6c08saW5pdFVUU0NsYXNzTmFtZTp6Zyxpbml0VVRTSW5kZXhDbGFzc05hbWU6YVQsaW5pdFVUU1BhY2thZ2VOYW1lOm9ULGluaXRVVFNQcm94eUNsYXNzOmpnLGluaXRVVFNQcm94eUZ1bmN0aW9uOnJULGludGVyY2VwdG9yczpEbSxpbnZva2VQdXNoQ2FsbGJhY2s6TXUsbG9hZEZvbnRGYWNlOmZPLGxvZ2luOlRnLG1ha2VQaG9uZUNhbGw6YkMsbmF2aWdhdGVCYWNrOkpULG5hdmlnYXRlVG86U1AsbmF2aWdhdGVUb01pbmlQcm9ncmFtOnFPLG5vdGlmeUJMRUNoYXJhY3RlcmlzdGljVmFsdWVDaGFuZ2U6Y0Msb2ZmQWNjZWxlcm9tZXRlckNoYW5nZTpZdyxvZmZBcHBIaWRlOnViLG9mZkFwcFNob3c6bGIsb2ZmQ29tcGFzc0NoYW5nZTpqdyxvZmZFcnJvcjphYixvZmZLZXlib2FyZEhlaWdodENoYW5nZTp0QSxvZmZMb2NhdGlvbkNoYW5nZTpRQSxvZmZMb2NhdGlvbkNoYW5nZUVycm9yOnRPLG9mZk5ldHdvcmtTdGF0dXNDaGFuZ2U6T0Msb2ZmUGFnZU5vdEZvdW5kOmliLG9mZlB1c2hNZXNzYWdlOnBiLG9mZlRoZW1lQ2hhbmdlOlJDLG9mZlVuaGFuZGxlZFJlamVjdGlvbjpuYixvZmZXaW5kb3dSZXNpemU6cV8sb25BY2NlbGVyb21ldGVyQ2hhbmdlOkd3LG9uQXBwSGlkZTpjYixvbkFwcFNob3c6c2Isb25CTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlOlp3LG9uQkxFQ29ubmVjdGlvblN0YXRlQ2hhbmdlOkp3LG9uQmVhY29uU2VydmljZUNoYW5nZTpwQyxvbkJlYWNvblVwZGF0ZTpnQyxvbkJsdWV0b290aEFkYXB0ZXJTdGF0ZUNoYW5nZTpLdyxvbkJsdWV0b290aERldmljZUZvdW5kOnF3LG9uQ29tcGFzc0NoYW5nZTpIdyxvbkNyZWF0ZVZ1ZUFwcDpaLm9uQ3JlYXRlVnVlQXBwLG9uRXJyb3I6b2Isb25Ib3N0RXZlbnRSZWNlaXZlOk1nLG9uS2V5Ym9hcmRIZWlnaHRDaGFuZ2U6ZUEsb25Mb2NhbGVDaGFuZ2U6Sl8sb25Mb2NhdGlvbkNoYW5nZTpYQSxvbkxvY2F0aW9uQ2hhbmdlRXJyb3I6ZU8sb25OYXRpdmVFdmVudFJlY2VpdmU6S08sb25OZXR3b3JrU3RhdHVzQ2hhbmdlOkFDLG9uUGFnZU5vdEZvdW5kOnJiLG9uUHVzaE1lc3NhZ2U6Z2Isb25Tb2NrZXRDbG9zZTpfQSxvblNvY2tldEVycm9yOnZBLG9uU29ja2V0TWVzc2FnZTptQSxvblNvY2tldE9wZW46cEEsb25UYWJCYXJNaWRCdXR0b25UYXA6el8sb25UaGVtZUNoYW5nZTprQyxvblVuaGFuZGxlZFJlamVjdGlvbjp0YixvbldpbmRvd1Jlc2l6ZTpZXyxvcGVuQXBwQXV0aG9yaXplU2V0dGluZzpEQyxvcGVuQmx1ZXRvb3RoQWRhcHRlcjpYdyxvcGVuRG9jdW1lbnQ6VHcsb3BlbkxvY2F0aW9uOktBLHBhZ2VTY3JvbGxUbzpkTyxwcmVMb2dpbjpJZyxwcmVsb2FkUGFnZTp4UCxwcmV2aWV3SW1hZ2U6JEMscmVMYXVuY2g6SVAscmVhZEJMRUNoYXJhY3RlcmlzdGljVmFsdWU6dUMscmVkaXJlY3RUbzpBUCxyZWdpc3RlclJ1bnRpbWU6SE8scmVnaXN0ZXJVVFNJbnRlcmZhY2U6c1QscmVnaXN0ZXJVVFNQbHVnaW46bFQscmVtb3ZlSW50ZXJjZXB0b3I6TW0scmVtb3ZlU2F2ZWRGaWxlOk93LHJlbW92ZVN0b3JhZ2U6aHcscmVtb3ZlU3RvcmFnZVN5bmM6ZHcscmVtb3ZlVGFiQmFyQmFkZ2U6Q08scmVxdWVzdDpzQSxyZXF1ZXN0UGF5bWVudDpZTyxyZXF1aXJlR2xvYmFsOnhPLHJlcXVpcmVOYXRpdmVQbHVnaW46V28scmVxdWlyZVVUU1BsdWdpbjpjVCxyZXN0b3JlR2xvYmFsOlJPLHNhdmVGaWxlOnl3LHNhdmVJbWFnZVRvUGhvdG9zQWxidW06R0Msc2F2ZVZpZGVvVG9QaG90b3NBbGJ1bTpXQyxzY2FuQ29kZTpOQyxzZW5kSG9zdEV2ZW50OkJnLHNlbmROYXRpdmVFdmVudDplZyxzZW5kU29ja2V0TWVzc2FnZTpoQSxzZXRCTEVNVFU6ZEMsc2V0Q2xpcGJvYXJkRGF0YTpDQyxzZXRLZWVwU2NyZWVuT246TEMsc2V0TG9jYWxlOlpfLHNldE5hdmlnYXRpb25CYXJDb2xvcjptTyxzZXROYXZpZ2F0aW9uQmFyVGl0bGU6aE8sc2V0UGFnZU1ldGE6WF8sc2V0U2NyZWVuQnJpZ2h0bmVzczpCQyxzZXRTdG9yYWdlOmN3LHNldFN0b3JhZ2VTeW5jOmx3LHNldFRhYkJhckJhZGdlOl9PLHNldFRhYkJhckl0ZW06Yk8sc2V0VGFiQmFyU3R5bGU6RU8sc2hhcmU6V08sc2hhcmVXaXRoU3lzdGVtOkdPLHNob3dBY3Rpb25TaGVldDppTyxzaG93S2V5Ym9hcmQ6WEMsc2hvd0xvYWRpbmc6b08sc2hvd01vZGFsOm5PLHNob3dOYXZpZ2F0aW9uQmFyTG9hZGluZzpnTyxzaG93VGFiQmFyOlNPLHNob3dUYWJCYXJSZWREb3Q6d08sc2hvd1RvYXN0OmFPLHN0YXJ0QWNjZWxlcm9tZXRlcjpYaCxzdGFydEJlYWNvbkRpc2NvdmVyeTptQyxzdGFydEJsdWV0b290aERldmljZXNEaXNjb3Zlcnk6dEMsc3RhcnRDb21wYXNzOkpoLHN0YXJ0TG9jYXRpb25VcGRhdGU6SkEsc3RhcnRQdWxsRG93blJlZnJlc2g6Y08sc3RhcnRTb3RlckF1dGhlbnRpY2F0aW9uOklDLHN0b3BBY2NlbGVyb21ldGVyOlFoLHN0b3BCZWFjb25EaXNjb3Zlcnk6X0Msc3RvcEJsdWV0b290aERldmljZXNEaXNjb3Zlcnk6bkMsc3RvcENvbXBhc3M6Wmgsc3RvcExvY2F0aW9uVXBkYXRlOlpBLHN0b3BQdWxsRG93blJlZnJlc2g6dU8sc3dpdGNoVGFiOk5QLHN5bmNEYXRhVG9HbG9iYWw6Qk8sdW5QcmVsb2FkUGFnZTpSUCx1cGxvYWRGaWxlOkVBLHVweDJweDpJbSx2aWJyYXRlTG9uZzpXdyx2aWJyYXRlU2hvcnQ6encsd2VleEdldFN5c3RlbUluZm9TeW5jOmljLHdyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZTpmQ307bGV0IExQPVcuZXh0ZW5kKCQse3B1Ymxpc2hIYW5kbGVyOk1QfSk7ZnVuY3Rpb24gTVAoZSx0LG4pe3Q9SlNPTi5zdHJpbmdpZnkodCksVy5pc0FycmF5KG4pfHwobj1bbl0pO2xldCByPWB0eXBlb2YgVW5pVmlld0pTQnJpZGdlICE9PSAndW5kZWZpbmVkJyAmJiBVbmlWaWV3SlNCcmlkZ2Uuc3Vic2NyaWJlSGFuZGxlcigiJHtlfSIsJHt0fSxfX1BBR0VfSURfXylgO24uZm9yRWFjaChvPT57bGV0IGM9U3RyaW5nKG8pLGg9cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKGMpO2gmJmguZXZhbEpTKHIucmVwbGFjZSgiX19QQUdFX0lEX18iLGMpKX0pfWZ1bmN0aW9uIERQKCl7bGV0e3RhYkJhcjplfT1CO2lmKCEoZSYmZS5saXN0JiZlLmxpc3QubGVuZ3RoKSlyZXR1cm47bGV0e2VudHJ5UGFnZVBhdGg6bn09QjtlLnNlbGVjdGVkSW5kZXg9MDtsZXQgcj1lLmxpc3QuZmluZEluZGV4KG89Pm8ucGFnZVBhdGg9PT1uKTtkaS5pbml0KGUsKG8sYyk9PntJLnN3aXRjaFRhYih7dXJsOlouYWRkTGVhZGluZ1NsYXNoKG8ucGFnZVBhdGgpLG9wZW5UeXBlOiJzd2l0Y2hUYWIiLGZyb206InRhYkJhciIsc3VjY2Vzcygpe0xuKFouT05fVEFCX0lURU1fVEFQLHtpbmRleDpjLHRleHQ6by50ZXh0LHBhZ2VQYXRoOm8ucGFnZVBhdGh9KX19KX0pLHIhPT0tMSYmKGUuc2VsZWN0ZWRJbmRleD1yLHIhPT0wJiZkaS5zd2l0Y2hUYWIobikpfWZ1bmN0aW9uIEZQKCl7bGV0IGU9cy5nbG9iYWxFdmVudCx0PWcucmVxdWlyZU1vZHVsZSgiZ2xvYmFsRXZlbnQiKSx7ZW1pdDpuLHB1Ymxpc2hIYW5kbGVyOnJ9PXN0O2cuY29uZmlnLnByZWxvYWQ/cy5rZXkuYWRkRXZlbnRMaXN0ZW5lcihEbyxMaSk6ZS5hZGRFdmVudExpc3RlbmVyKCJzcGxhc2hjbG9zZWQiLCgpPT57cy5rZXkuYWRkRXZlbnRMaXN0ZW5lcihEbyxMaSl9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInBhdXNlIiwoKT0+e24oWi5PTl9BUFBfRU5URVJfQkFDS0dST1VORCl9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInJlc3VtZSIsKCk9PntsZXQgYz1McygpO2MmJmMudXNlckFjdGlvbiYmQnMoYyksbihaLk9OX0FQUF9FTlRFUl9GT1JFR1JPVU5ELEZvKCkpfSksdC5hZGRFdmVudExpc3RlbmVyKCJ1aXN0eWxlY2hhbmdlIixmdW5jdGlvbihjKXtsZXQgaD17dGhlbWU6Yy51aXN0eWxlfTtuKFouT05fVEhFTUVfQ0hBTkdFLGgpLHIoWi5PTl9USEVNRV9DSEFOR0UsaCxmYSgpKSxSdygpfSk7bGV0IG89MDtlLmFkZEV2ZW50TGlzdGVuZXIoIktleWJvYXJkSGVpZ2h0Q2hhbmdlIixmdW5jdGlvbihjKXtvIT09Yy5oZWlnaHQmJihvPWMuaGVpZ2h0LG4oWi5PTl9LRVlCT0FSRF9IRUlHSFRfQ0hBTkdFLHtoZWlnaHQ6b30pKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcihTVCxmdW5jdGlvbihjKXtjJiZjLmV2ZW50JiZKTyhjLmV2ZW50LGMuZGF0YSl9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInBsdXNNZXNzYWdlIixFcCksZS5hZGRFdmVudExpc3RlbmVyKCJXZWJ2aWV3UG9zdE1lc3NhZ2UiLEVwKX1mdW5jdGlvbiBFcCh7ZGF0YTplfSl7ZSYmZS50eXBlJiZzdC5zdWJzY3JpYmVIYW5kbGVyKCJwbHVzTWVzc2FnZS4iK2UudHlwZSxlLmFyZ3MpfWZ1bmN0aW9uIHlwKGUsdCxuPSExKXtzdC5zdWJzY3JpYmUoInBsdXNNZXNzYWdlLiIrZSx0LG4pfWZ1bmN0aW9uIFZQKGUpe2ViKGUuJCk7bGV0e2VudHJ5UGFnZVBhdGg6dCxlbnRyeVBhZ2VRdWVyeTpuLHJlZmVycmVySW5mbzpyfT1CLG89aHMoe3BhdGg6dCxxdWVyeTpuLHJlZmVycmVySW5mbzpyfSk7TG4oZSxaLk9OX0xBVU5DSCxvKSxMbihlLFouT05fU0hPVyxvKTtsZXQgYz1nLnJlcXVpcmVNb2R1bGUoInBsdXMiKS5nZXRBcHBTdGF0ZTsoYyYmTnVtYmVyKGMoKSkpPT09MiYmTG4oZSxaLk9OX0hJREUsbyl9ZnVuY3Rpb24gU3AoZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKC9cLyQvLCIiKSxlLmluZGV4T2YoIl8iKT09PTA/cy5pby5jb252ZXJ0TG9jYWxGaWxlU3lzdGVtVVJMKGUpOmV9ZnVuY3Rpb24gJFAoKXtsZXQgZT1TcChmcyksdD1TcChXciksbj10LnNwbGl0KCIvIik7bi5wb3AoKTtsZXQgcj1uLmpvaW4oIi8iKTtzLmlvLnJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwocy5pby5jb252ZXJ0QWJzb2x1dGVGaWxlU3lzdGVtKHIpLG89PntvLmNyZWF0ZVJlYWRlcigpLnJlYWRFbnRyaWVzKGZ1bmN0aW9uKGgpe2xldCBiPWg7YiYmYi5sZW5ndGgmJmIuZm9yRWFjaChmdW5jdGlvbihWKXtWLmlzRGlyZWN0b3J5JiZWLmZ1bGxQYXRoLmluZGV4T2YoZSk9PT0wJiZWLmZ1bGxQYXRoLmluZGV4T2YodCkhPT0wJiZWLnJlbW92ZVJlY3Vyc2l2ZWx5KCl9KX0pfSl9bGV0IHdwPTAsUmw9MCxKYz1udWxsLHJsPW51bGw7ZnVuY3Rpb24gVVAoZSx0KXtpZihKYz1udWxsLHJsJiYoUyhybCkscmw9bnVsbCksZS50eXBlPT09Im9uRm9jdXMiKWlmKFJsPjApZS5kZXRhaWwuaGVpZ2h0PVJsO2Vsc2V7cmw9ayhmdW5jdGlvbigpe2UuZGV0YWlsLmhlaWdodD1SbCx0KGUpfSx3cCksSmM9ZnVuY3Rpb24oKXtybCYmKFMocmwpLHJsPW51bGwpLGUuZGV0YWlsLmhlaWdodD1SbCx0KGUpfTtyZXR1cm59dChlKX1mdW5jdGlvbiBIUCgpe3dwPXMub3MubmFtZS50b0xvd2VyQ2FzZSgpPT09ImFuZHJvaWQiPzMwMDo3MDAsc3Qub24oWi5PTl9LRVlCT0FSRF9IRUlHSFRfQ0hBTkdFLHQ9PntpZihSbD10LmhlaWdodCxSbD4wKXtsZXQgbj1KYztKYz1udWxsLG4mJm4oKX19KX1mdW5jdGlvbiBqUChlLHQsbil7bGV0IHI9dC50eXBlO3I9PT0ib25Gb2N1cyJ8fHI9PT0ib25CbHVyIj9VUCh0LG89PntuLmZpcmVFdmVudChlLG8pfSk6bi5maXJlRXZlbnQoZSx0KX1mdW5jdGlvbiB6UChlLHQpe2xldCBuPUlyKHBhcnNlSW50KHQpKTtpZighbilyZXR1cm47bGV0IHI9bi5fX3BhZ2VfY29udGFpbmVyX187ZS5mb3JFYWNoKG89Pntzd2l0Y2gob1swXSl7Y2FzZSBaLkFDVElPTl9UWVBFX0VWRU5UOmpQKG9bMV0sb1syXSxyKTticmVha319KX1sZXQgQ3A9e307ZnVuY3Rpb24gV1AoZSx0LG4pe2xldHthZHBpZDpyLHdpZHRoOm99PWUsYz1yKyItIitvLGg9Q3BbY107aWYoaCYmaC5sZW5ndGg+MCl7dChoLnNwbGljZSgwLDEpWzBdKTtyZXR1cm59cy5hZC5nZXRBZHMoZSxiPT57bGV0IFY9Yi5hZHM7dChWLnNwbGljZSgwLDEpWzBdKSxDcFtjXT1oP2guY29uY2F0KFYpOlZ9LGI9PntuKHtlcnJDb2RlOmIuY29kZSxlcnJNc2c6Yi5tZXNzYWdlfSl9KX1mdW5jdGlvbiBHUCgpe1IoImdldEFkRGF0YSIsKGUsdCk9PntXUChlLG49Pnt0KHtjb2RlOjAsZGF0YTpufSl9LG49Pnt0KHtjb2RlOjEsbWVzc2FnZTpufSl9KX0pfWxldCBZUD1bInN3aXRjaFRhYiIsInJlTGF1bmNoIiwicmVkaXJlY3RUbyIsIm5hdmlnYXRlVG8iLCJuYXZpZ2F0ZUJhY2siXTtmdW5jdGlvbiBxUCgpe1lQLmZvckVhY2goZT0+e1IoZSx0PT57SVtlXShXLmV4dGVuZCh0LHtmYWlsKG4pe2NvbnNvbGUuZXJyb3Iobi5lcnJNc2cpfX0pKX0pfSl9bGV0IEFwPSExO2Z1bmN0aW9uIEtQKGUsdCl7bGV0IG49dD09PSIxIjtpZighKG4mJkFwKSl7aWYobj8oQXA9ITAsdHAocy53ZWJ2aWV3LmdldExhdW5jaFdlYnZpZXcoKSkpOk1pfHx0cChzLndlYnZpZXcuZ2V0V2Vidmlld0J5SWQodCkpLCFNaS5sb2FkZWQpe2lmKE1pLmlkIT09dClyZXR1cm4gY29uc29sZS5lcnJvcihgd2Vidmlld1JlYWR5WyR7TWkuaWR9XVske3R9XSBub3QgbWF0Y2hgKTtNaS5sb2FkZWQ9ITB9c3QuZW1pdChrbCsiLiIrdCksbiYmSlAoKX19ZnVuY3Rpb24gSlAoKXtsZXR7YXV0b2Nsb3NlOmUsYWx3YXlzU2hvd0JlZm9yZVJlbmRlcjp0fT1CLnNwbGFzaHNjcmVlbjtlJiYhdCYmcy5uYXZpZ2F0b3IuY2xvc2VTcGxhc2hzY3JlZW4oKTtsZXQgbj1aLmFkZExlYWRpbmdTbGFzaChCLmVudHJ5UGFnZVBhdGgpLHI9amkobik7aWYoIXIubWV0YS5pc05WdWUpe2xldCBvPXt1cmw6bisoQi5lbnRyeVBhZ2VRdWVyeXx8IiIpLG9wZW5UeXBlOiJhcHBMYXVuY2gifSxjPXtyZXNvbHZlKCl7fSxyZWplY3QoKXt9fTtyZXR1cm4gci5tZXRhLmlzVGFiQmFyP2JwKG8sYyk6X3AobyxjKX19ZnVuY3Rpb24gWlAoZSx0KXtsZXQgbj1JcihwYXJzZUludCh0KSk7biYmKG4uX191bmlhcHBfd2Vidmlldz0hMCl9ZnVuY3Rpb24gWFAoZSx0KXtsZXQgbj1JcihwYXJzZUludCh0KSk7biYmZGVsZXRlIG4uX191bmlhcHBfd2Vidmlld31sZXQgUVA9KHtuYW1lOmUsYXJnOnR9LG4pPT57ZT09PSJwb3N0TWVzc2FnZSI/ZUkoblswXSx0KTpJW2VdKFcuZXh0ZW5kKHQse2ZhaWwocil7Y29uc29sZS5lcnJvcihyLmVyck1zZyl9fSkpfTtmdW5jdGlvbiBlSShlLHQpe2xldCBuPXRQKCJ3ZWItdmlldyIscGFyc2VJbnQoZSkpO24mJm4uZGlzcGF0Y2hFdmVudChaLmNyZWF0ZVVuaUV2ZW50KHt0eXBlOiJvbk1lc3NhZ2UiLHRhcmdldDpPYmplY3QuY3JlYXRlKG51bGwpLGN1cnJlbnRUYXJnZXQ6T2JqZWN0LmNyZWF0ZShudWxsKSxkZXRhaWw6e2RhdGE6W3RdfX0pKX1mdW5jdGlvbiB0SSh7bm9kZUlkOmUsb3duZXJJZDp0LG1ldGhvZDpuLGFyZ3M6cn0sbyl7bGV0IGM9dXAoZSxwYXJzZUludChvKSk7aWYoIWMpcmV0dXJuO2xldCBoPW5JKHQsYy5fX3Z1ZVBhcmVudENvbXBvbmVudCk7IWh8fCFoW25dfHxoW25dKHIpfWZ1bmN0aW9uIG5JKGUsdCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC51aWQ9PT1lKXJldHVybiB0LnByb3h5O2xldCBuPXQucGFyZW50O2Zvcig7bjspe2lmKG4udWlkPT09ZSlyZXR1cm4gbi5wcm94eTtuPW4ucGFyZW50fXJldHVybiB0LnByb3h5fWZ1bmN0aW9uIHJJKCl7bGV0e3N1YnNjcmliZTplLHN1YnNjcmliZUhhbmRsZXI6dCxwdWJsaXNoSGFuZGxlcjpufT1zdDtpZih5cCgic3Vic2NyaWJlSGFuZGxlciIsKHt0eXBlOnIsZGF0YTpvLHBhZ2VJZDpjfSk9Pnt0KHIsbyxjKX0pLHlwKFouV0VCX0lOVk9LRV9BUFBTRVJWSUNFLCh7ZGF0YTpyLHdlYnZpZXdJZHM6b30pPT57UVAocixvKX0pLEIucmVuZGVyZXIhPT0ibmF0aXZlIil7ZShrbCxLUCksZShDZyx6UCksbSgpLEdQKCkscVAoKSxlKFBPLFpQKSxlKElPLFhQKSxlKFouT05fV1hTX0lOVk9LRV9DQUxMX01FVEhPRCx0SSk7bGV0IHI9amkoWi5hZGRMZWFkaW5nU2xhc2goQi5lbnRyeVBhZ2VQYXRoKSk7ciYmIXIubWV0YS5pc05WdWUmJm4oa2wse30sMSl9fWxldCB4bCxjZj17Z2xvYmFsRGF0YTp7fX07ZnVuY3Rpb24gaUkoe2FsbG93RGVmYXVsdDplPSExfT17fSl7aWYoeGwpcmV0dXJuIHhsO2lmKGUpcmV0dXJuIGNmO2NvbnNvbGUuZXJyb3IoIlt3YXJuXTogZ2V0QXBwKCkgZmFpbGVkLiBMZWFybiBtb3JlOiBodHRwczovL3VuaWFwcC5kY2xvdWQuaW8vY29sbG9jYXRpb24vZnJhbWUvd2luZG93P2lkPWdldGFwcC4iKX1mdW5jdGlvbiBvSShlKXtpZihJLlZ1ZXgmJmUuJHN0b3JlKXtsZXR7dXNlU3RvcmU6dH09SS5WdWV4O0kuVnVleC51c2VTdG9yZT1uPT5uP3Qobik6ZS4kc3RvcmV9R2EoZSkseGw9ZSxjdCh4bCksVy5leHRlbmQoeGwsY2YpLEV0KHhsLGNmLmdsb2JhbERhdGEpLHdlKCksdnAoKSxEUCgpLEZQKCksSFAoKSxySSgpLFZQKGUpLGsoJFAsMWU0KSxCLnJlYWR5PSEwfXZhciBhST17dW5pOkJQLGdldEFwcDppSSxnZXRDdXJyZW50UGFnZXM6YnIsX19kZWZpbmVQYWdlOmhQLF9fcmVnaXN0ZXJBcHA6b0ksX19yZWdpc3RlclBhZ2U6ZmMsVW5pU2VydmljZUpTQnJpZGdlOkxQfTtyZXR1cm4gYUl9KEx0LGVuLHcpO3h0PXh0LmRlZmF1bHR8fHh0O2xldCBJPXh0LnVuaSxTdD14dC5nZXRBcHAsUG49eHQuZ2V0Q3VycmVudFBhZ2VzLHN0PXh0LlVuaVNlcnZpY2VKU0JyaWRnZTtyZXR1cm4geHR9dmFyIHN2PVdOKHFOKTt2YXIgbHY9Zz0+e2xldHtyZWdpc3RlclVUU0ludGVyZmFjZTpzLGluaXRVVFNQcm94eUNsYXNzOnAsaW5pdFVUU1Byb3h5RnVuY3Rpb246dyxpbml0VVRTUGFja2FnZU5hbWU6ayxpbml0VVRTSW5kZXhDbGFzc05hbWU6Uyxpbml0VVRTQ2xhc3NOYW1lOmR9PWcsRT0iRENsb3VkVW5pRmFjaWFsUmVjb2duaXRpb25WZXJpZnkiLEI9IkZhY2lhbFJlY29nbml0aW9uVmVyaWZ5KFx1NUI5RVx1NEVCQVx1OEJBNFx1OEJDMSkiLFdlPSJidWlsdC1pbiIsTHQ9IiIsZW49ITAseHQ9ayhFLGVuKSxJPVMoRSxlbik7Zy5zdGFydEZhY2lhbFJlY29nbml0aW9uVmVyaWZ5PXcoITEse21vZHVsZU5hbWU6Qixtb2R1bGVUeXBlOldlLGVyck1zZzpMdCxtYWluOiEwLHBhY2thZ2U6eHQsY2xhc3M6SSxuYW1lOiJzdGFydEZhY2lhbFJlY29nbml0aW9uVmVyaWZ5QnlKcyIscGFyYW1zOlt7bmFtZToiZmFjZVN0eWxlIix0eXBlOiJVVFNTREtNb2R1bGVzRENsb3VkVW5pRmFjaWFsUmVjb2duaXRpb25WZXJpZnlTdGFydEZhY2lhbFJlY29nbml0aW9uVmVyaWZ5T3B0aW9uc0pTT05PYmplY3QifV0scmV0dXJuOiIifSksZy5nZXRGYWNpYWxSZWNvZ25pdGlvbk1ldGFJbmZvPXcoITEse21vZHVsZU5hbWU6Qixtb2R1bGVUeXBlOldlLGVyck1zZzpMdCxtYWluOiEwLHBhY2thZ2U6eHQsY2xhc3M6SSxuYW1lOiJnZXRGYWNpYWxSZWNvZ25pdGlvbk1ldGFJbmZvQnlKcyIscGFyYW1zOltdLHJldHVybjoiIn0pfTt2YXIgY3Y9Zz0+e307dmFyIHV2PWc9Pnt9O3ZhciBmdj1nPT57fTt2YXIgZHY9Zz0+e307dmFyIGh2PWc9Pnt9O3ZhciBndj1nPT57fTt2YXIgcHY9Zz0+e307dmFyIHZ2PWc9Pnt9O2Z1bmN0aW9uIG12KGcpe2x2KGcpLGN2KGcpLHV2KGcpLGZ2KGcpLGR2KGcpLGh2KGcpLGd2KGcpLHB2KGcpLHZ2KGcpfXZhciBJZixOZixrZixWYSxSZix4ZixCZjtmdW5jdGlvbiBfdigpe3JldHVybiBWYT97X19kZWZpbmVQYWdlOklmLF9fcmVnaXN0ZXJBcHA6TmYsX19yZWdpc3RlclBhZ2U6a2YsdW5pOlZhLHd4OlZhLGdldEFwcDpSZixnZXRDdXJyZW50UGFnZXM6eGYsVW5pU2VydmljZUpTQnJpZGdlOkJmfTp7fX1mdW5jdGlvbiBidihnKXtsZXR7d2VleDpzLHBsdXM6cCxWdWVTaGFyZWQ6d309ZztyZXR1cm4gVmF8fCh7X19kZWZpbmVQYWdlOklmLF9fcmVnaXN0ZXJBcHA6TmYsX19yZWdpc3RlclBhZ2U6a2YsdW5pOlZhLGdldEFwcDpSZixnZXRDdXJyZW50UGFnZXM6eGYsVW5pU2VydmljZUpTQnJpZGdlOkJmfT1hdihzLHAsZyksVmEuVnVlU2hhcmVkPXcsbXYoVmEpLElwKFZhKSkse19fZGVmaW5lUGFnZTpJZixfX3JlZ2lzdGVyQXBwOk5mLF9fcmVnaXN0ZXJQYWdlOmtmLHBsdXM6cCx1bmk6VmEsd3g6VmEsZ2V0QXBwOlJmLGdldEN1cnJlbnRQYWdlczp4ZixVbmlTZXJ2aWNlSlNCcmlkZ2U6QmZ9fWZ1bmN0aW9uIEV2KGcscyl7bGV0e19fdW5pQ29uZmlnOnB9PXM7aWYoIXApcmV0dXJuO2xldCB3PXMud2VleDt3LmRvY3VtZW50Ll9fJGF1dG9tYXRvcl9fPSEhcC5hdXRvbWF0b3I7bGV0IGs9cC5yZW5kZXJlciE9PSJuYXRpdmUiJiZ3LmNvbmZpZy5idW5kbGVVcmwuaW5kZXhPZigiYXBwLXNlcnZpY2UuanMiKSE9PS0xO2lmKGhpKHMsX3YoKSksaz9zdihzKTooeHAoZyxzKSxRcChzLlZ1ZS5wYXJzZUNsYXNzU3R5bGVzKSksaGkocyxidihzKSksdy5jb25maWcucGx1c193ZWJfaWQ9PT0iMSIpe2xldCBCPXcucmVxdWlyZU1vZHVsZSgicGx1cyIpO0Iuc2V0RGVmYXVsdEZvbnRTaXplJiZCLnNldERlZmF1bHRGb250U2l6ZShNYXRoLnJvdW5kKHMucGx1cy5zY3JlZW4ucmVzb2x1dGlvbldpZHRoLzIwKSl9bGV0e3NjYWxlOlMsZGV2aWNlV2lkdGg6ZCxwbGF0Zm9ybTpFfT1nbG9iYWwuV1hFbnZpcm9ubWVudDtpZihFLnRvTG93ZXJDYXNlKCk9PT0iaW9zIil7bGV0IEI9TWF0aC5jZWlsKGQvUyk7dy5yZXF1aXJlTW9kdWxlKCJtZXRhIikuc2V0Vmlld3BvcnQoe3dpZHRoOkIscm91bmRPZmZEZXZpYXRpb246ITF9KX19dmFyIGNsPWNsYXNzIGV4dGVuZHMgbGx7Y29uc3RydWN0b3Iocyl7c3VwZXIoKTt0aGlzLm5vZGVUeXBlPTg7dGhpcy50eXBlPSJjb21tZW50Ijt0aGlzLnZhbHVlPSIiO3RoaXMudmFsdWU9c310b1N0cmluZygpe3JldHVybiI8IS0tICIrdGhpcy52YWx1ZSsiIC0tPiJ9fTtmdW5jdGlvbiB3byhnLHM9W10pe3JldHVybnttb2R1bGU6ImRvbSIsbWV0aG9kOmcsYXJnczpzfX12YXIgVmw9Y2xhc3N7Y29uc3RydWN0b3IocyxwKXt0aGlzLmlkPXMsdGhpcy5iYXRjaGVkPSExLHRoaXMudXBkYXRlcz1bXSwkbihwKT9PYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaGFuZGxlciIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnB9KTpjb25zb2xlLmVycm9yKCJbSlMgUnVudGltZV0gaW52YWxpZCBwYXJhbWV0ZXIsIGhhbmRsZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIil9Y3JlYXRlRmluaXNoKHMpe3JldHVybiB0aGlzLmhhbmRsZXIoW3dvKCJjcmVhdGVGaW5pc2giKV0scyl9dXBkYXRlRmluaXNoKHMpe3JldHVybiB0aGlzLmhhbmRsZXIoW3dvKCJ1cGRhdGVGaW5pc2giKV0scyl9cmVmcmVzaEZpbmlzaChzKXtyZXR1cm4gdGhpcy5oYW5kbGVyKFt3bygicmVmcmVzaEZpbmlzaCIpXSxzKX1jcmVhdGVCb2R5KHMpe2xldCBwPXMudG9KU09OKCksdz1wLmNoaWxkcmVuO2RlbGV0ZSBwLmNoaWxkcmVuO2xldCBrPVt3bygiY3JlYXRlQm9keSIsW3BdKV07cmV0dXJuIHcmJmsucHVzaC5hcHBseShrLHcubWFwKFM9PndvKCJhZGRFbGVtZW50IixbcC5yZWYsUywtMV0pKSksdGhpcy5hZGRBY3Rpb25zKGspfWFkZEVsZW1lbnQocyxwLHcpe3JldHVybiB3Pj0wfHwodz0tMSksdGhpcy5hZGRBY3Rpb25zKHdvKCJhZGRFbGVtZW50IixbcCxzLnRvSlNPTigpLHddKSl9cmVtb3ZlRWxlbWVudChzKXtpZihQaShzKSl7bGV0IHA9cy5tYXAodz0+d28oInJlbW92ZUVsZW1lbnQiLFt3XSkpO3JldHVybiB0aGlzLmFkZEFjdGlvbnMocCl9cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyh3bygicmVtb3ZlRWxlbWVudCIsW3NdKSl9bW92ZUVsZW1lbnQocyxwLHcpe3JldHVybiB0aGlzLmFkZEFjdGlvbnMod28oIm1vdmVFbGVtZW50IixbcyxwLHddKSl9c2V0QXR0cihzLHAsdyl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyh3bygidXBkYXRlQXR0cnMiLFtzLHtbcF06d31dKSl9c2V0U3R5bGUocyxwLHcpe3JldHVybiB0aGlzLmFkZEFjdGlvbnMod28oInVwZGF0ZVN0eWxlIixbcyx7W3BdOnd9XSkpfXNldFN0eWxlcyhzLHApe3JldHVybiB0aGlzLmFkZEFjdGlvbnMod28oInVwZGF0ZVN0eWxlIixbcyxwXSkpfWFkZEV2ZW50KHMscCl7cmV0dXJuIHRoaXMuYWRkQWN0aW9ucyh3bygiYWRkRXZlbnQiLFtzLHBdKSl9cmVtb3ZlRXZlbnQocyxwKXtyZXR1cm4gdGhpcy5hZGRBY3Rpb25zKHdvKCJyZW1vdmVFdmVudCIsW3MscF0pKX1oYW5kbGVyKHMscCl7cmV0dXJuIHAmJnAoKX1hZGRBY3Rpb25zKHMpe2xldCBwPXRoaXMudXBkYXRlcyx3PXRoaXMuaGFuZGxlcjtpZihQaShzKXx8KHM9W3NdKSx0aGlzLmJhdGNoZWQpcC5wdXNoLmFwcGx5KHAscyk7ZWxzZSByZXR1cm4gdyhzKX19O3ZhciBMZj17Y3JlYXRlQm9keToiY2FsbENyZWF0ZUJvZHkiLGFkZEVsZW1lbnQ6ImNhbGxBZGRFbGVtZW50IixyZW1vdmVFbGVtZW50OiJjYWxsUmVtb3ZlRWxlbWVudCIsbW92ZUVsZW1lbnQ6ImNhbGxNb3ZlRWxlbWVudCIsdXBkYXRlQXR0cnM6ImNhbGxVcGRhdGVBdHRycyIsdXBkYXRlU3R5bGU6ImNhbGxVcGRhdGVTdHlsZSIsYWRkRXZlbnQ6ImNhbGxBZGRFdmVudCIscmVtb3ZlRXZlbnQ6ImNhbGxSZW1vdmVFdmVudCJ9O2Z1bmN0aW9uIHl2KGcscyl7bGV0IHA9c3x8Z2xvYmFsLmNhbGxOYXRpdmU7cmV0dXJuICRuKHApfHxjb25zb2xlLmVycm9yKCJbSlMgUnVudGltZV0gbm8gZGVmYXVsdCBoYW5kbGVyIiksZnVuY3Rpb24oayl7UGkoayl8fChrPVtrXSk7Zm9yKGxldCBTPTA7UzxrLmxlbmd0aDtTKyspe2xldCBkPUpOKGcsa1tTXSxwKTtpZihkPT09LTEpcmV0dXJuIGR9fX1mdW5jdGlvbiBLTihnLHMpe3JldHVybiBnPT09ImRvbSImJkxmW3NdJiYkbihnbG9iYWxbTGZbc11dKX1mdW5jdGlvbiBKTihnLHMscCl7bGV0e21vZHVsZTp3LG1ldGhvZDprLGFyZ3M6U309cztyZXR1cm4gS04odyxrKT9nbG9iYWxbTGZba11dKGcsLi4uUywiLTEiKTpwKGcsW3NdLCItMSIpfXZhciBodT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHMpe3N1cGVyKCk7dGhpcy52YWx1ZT1zLHRoaXMubm9kZVR5cGU9Myx0aGlzLnR5cGU9InRleHQiLHRoaXMudmFsdWU9IiJ9dG9TdHJpbmcoKXtyZXR1cm4iIit0aGlzLnZhbHVlfX07dmFyIFN2PXtzbGlkZXI6e2NoYW5nZTpmdW5jdGlvbihnKXtyZXR1cm57aW5kZXg6Zy5pbmRleCxzb3VyY2U6Zy5zb3VyY2V9fSxzY3JvbGw6ZnVuY3Rpb24oZyl7cmV0dXJue29mZnNldFhSYXRpbzpnLm9mZnNldFhSYXRpbyxvZmZzZXRZUmF0aW86Zy5vZmZzZXRZUmF0aW8sZHJhZzpnLmRyYWd9fX0sInNjcm9sbC12aWV3Ijp7c2Nyb2xsZW5kOmZ1bmN0aW9uKGcpe3JldHVybntjb250ZW50T2Zmc2V0OmcuY29udGVudE9mZnNldH19fX07ZnVuY3Rpb24gd3YoZyl7bGV0e2F0dHI6cyxvZmZzZXRMZWZ0OnAsb2Zmc2V0VG9wOnd9PWcsaz17fTtyZXR1cm4gcyYmT2JqZWN0LmtleXMocykuZm9yRWFjaChTPT57Uy5pbmRleE9mKCJkYXRhLSIpPT09MCYmKGtbUy5yZXBsYWNlKCJkYXRhLSIsIiIpXT1zW1NdKX0pLHtpZDpzJiZzLmlkfHwiIixkYXRhc2V0Omssb2Zmc2V0TGVmdDpwfHwwLG9mZnNldFRvcDp3fHwwfX12YXIgWk49WyJhIiwiZGl2IiwibGlzdCIsImNlbGwiLCJsb2FkaW5nIiwicmVmcmVzaCIsInJlY3ljbGUtbGlzdCIsInNjcm9sbGVyIiwiaW5kaWNhdG9yIiwid2F0ZXJmYWxsIiwid2ViIiwicmljaHRleHQiXSxYTj1bInZpZXdhcHBlYXIiLCJ2aWV3ZGlzYXBwZWFyIl0sUU49e21hcmtlcnRhcDpbIm1hcmtlcklkIl0sY29udHJvbHRhcDpbImNvbnRyb2xJZCJdLHJlZ2lvbmNoYW5nZTpbImNhdXNlZEJ5Il0sZW5kOlsiY2F1c2VkQnkiXSxhcHBlYXI6WyJkaXJlY3Rpb24iXSxkaXNhcHBlYXI6WyJkaXJlY3Rpb24iXX07ZnVuY3Rpb24gQ3YoZyxzKXtsZXQgcD1nLnR5cGU7aWYoWE4uaW5kZXhPZihwKSE9PS0xKXJldHVybiBnO2xldCB3PWcuY3VycmVudFRhcmdldCxrPXcudHlwZS5yZXBsYWNlKCJ1LSIsIiIpO2lmKFpOLmluZGV4T2YoaykhPT0tMSlyZXR1cm4gZztsZXR7dGltZXN0YW1wOlMsdGFyZ2V0OmR9PWc7aWYoIXMpe2xldCBXZT1TdltrXTtXZT8kbihXZVtwXSk/cz1XZVtwXShnKTpzPWcuZGV0YWlsfHx7fTpzPWcuZGV0YWlsfHx7fX1sZXQgRT17dHlwZTpwLHRpbWVTdGFtcDpTLHRhcmdldDp3dihkKSxjdXJyZW50VGFyZ2V0Ond2KHcpLGRldGFpbDpzLHRvdWNoZXM6cD09PSJ0b3VjaGVuZCJ8fHA9PT0icGFuZW5kIj9bXTpnLmNoYW5nZWRUb3VjaGVzLGNoYW5nZWRUb3VjaGVzOmcuY2hhbmdlZFRvdWNoZXN9O2cuY29tcG9uZW50SWQmJihFLmNvbXBvbmVudElkPWcuY29tcG9uZW50SWQpO2xldCBCPVFOW3BdO3JldHVybiBCJiZCLmZvckVhY2goV2U9PntpbChnLFdlKSYmKEVbV2VdPWdbV2VdKX0pLEV9ZnVuY3Rpb24gZTEoZyxzKXtsZXQgcD1zLmF0dHJzfHx7fTtmb3IobGV0IGsgaW4gcClnLnNldEF0dHIoayxwW2tdLCEwKTtsZXQgdz1zLnN0eWxlfHx7fTtmb3IobGV0IGsgaW4gdylnLnNldFN0eWxlKGssd1trXSwhMCl9dmFyIEdvPWNsYXNze2NvbnN0cnVjdG9yKHMscD0iIix3KXtzPXM/cy50b1N0cmluZygpOiIiLHRoaXMuaWQ9cyx0aGlzLlVSTD1wLFdwKHMsdGhpcyksdGhpcy5ub2RlTWFwPXt9O2xldCBrPUdvLkxpc3RlbmVyfHxWbDt0aGlzLmxpc3RlbmVyPW5ldyBrKHMsd3x8eXYocyxHby5oYW5kbGVyKSksdGhpcy50YXNrQ2VudGVyPW5ldyBGbChzLHc/KFMsZCk9PncoZCk6R28uaGFuZGxlciksdGhpcy5jcmVhdGVEb2N1bWVudEVsZW1lbnQoKX1nZXRSZWYocyl7cmV0dXJuIHRoaXMubm9kZU1hcFtzXX1vcGVuKCl7dGhpcy5saXN0ZW5lci5iYXRjaGVkPSExfWNsb3NlKCl7dGhpcy5saXN0ZW5lci5iYXRjaGVkPSEwfWNyZWF0ZURvY3VtZW50RWxlbWVudCgpe2lmKCF0aGlzLmRvY3VtZW50RWxlbWVudCl7bGV0IHM9bmV3IEtpKCJkb2N1bWVudCIpO3MuZG9jSWQ9dGhpcy5pZCxzLm93bmVyRG9jdW1lbnQ9dGhpcyxzLnJvbGU9ImRvY3VtZW50RWxlbWVudCIscy5yZWY9Il9kb2N1bWVudEVsZW1lbnQiLHRoaXMubm9kZU1hcC5fZG9jdW1lbnRFbGVtZW50PXMsdGhpcy5kb2N1bWVudEVsZW1lbnQ9cyxPYmplY3QuZGVmaW5lUHJvcGVydHkocywiYXBwZW5kQ2hpbGQiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpwPT57cGYodGhpcyxwKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocywiaW5zZXJ0QmVmb3JlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6KHAsdyk9PntwZih0aGlzLHAsdyl9fSksS24oImRlYnVnIikmJkRpKGBDcmVhdGUgZG9jdW1lbnQgZWxlbWVudCAoaWQ6ICIke3MuZG9jSWR9IiwgcmVmOiAiJHtzLnJlZn0iKWApfXJldHVybiB0aGlzLmRvY3VtZW50RWxlbWVudH1jcmVhdGVCb2R5KHMscCl7aWYoIXRoaXMuYm9keSl7bGV0IHc9bmV3IEtpKHMscCk7dmYodGhpcyx3KSxLbigiZGVidWciKSYmRGkoYFtjcmVhdGVCb2R5XSgke3RoaXMuaWR9LCR7dy50eXBlfSwke3cucmVmfSkgKCR7SlNPTi5zdHJpbmdpZnkody50b0pTT04oITApKX0pLmApfXJldHVybiB0aGlzLmJvZHl9Y3JlYXRlRWxlbWVudChzLHApe2xldCB3PW5ldyBLaShzLHApO3JldHVybiBLbigiZGVidWciKSYmRGkoYFtjcmVhdGVFbGVtZW50XSgke3RoaXMuaWR9LCR7dy50eXBlfSwke3cucmVmfSkgKCR7SlNPTi5zdHJpbmdpZnkody50b0pTT04oITApKX0pLmApLHd9Y3JlYXRlQ29tbWVudChzKXtyZXR1cm4gbmV3IGNsKHMpfWNyZWF0ZVRleHQocyl7cmV0dXJuIG5ldyBodShzKX1maXJlRXZlbnQocyxwLHcsayxTKXtpZighcylyZXR1cm47dz13fHx7fSx3LnR5cGU9dy50eXBlfHxwLHcudGFyZ2V0PXMsdy5jdXJyZW50VGFyZ2V0PXMsdy50aW1lc3RhbXA9RGF0ZS5ub3coKSxrJiZlMShzLGspO2xldCBkPSEwLEU9dGhpcy5nZXRSZWYoIl9yb290Iik7aWYoRSYmRS5hdHRyKXtsZXQgQj1FLmF0dHIuYnViYmxlO2Q9Qj09PSJ0cnVlInx8Qj09PSEwfHxkJiZCPT09dm9pZCAwfXJldHVybiB3PUN2KHcpLHMuZmlyZUV2ZW50KHAsdyxkLFMpfWRlc3Ryb3koKXtLbigiZGVidWciKSYmRGkoYFtkZXN0cm95XSgke3RoaXMuaWR9LGRvY3VtZW50KSBEZXN0cm95IGRvY3VtZW50IChpZDogIiR7dGhpcy5pZH0iLCBVUkw6ICIke3RoaXMuVVJMfSIpYCksdGhpcy50YXNrQ2VudGVyLmRlc3Ryb3lDYWxsYmFjaygpLGRlbGV0ZSB0aGlzLmxpc3RlbmVyLGRlbGV0ZSB0aGlzLm5vZGVNYXAsZGVsZXRlIHRoaXMudGFza0NlbnRlcixHcCh0aGlzLmlkKX19O0dvLmhhbmRsZXI9bnVsbDt2YXIgQXY9e0lucHV0RWxlbWVudERpdjoiPFdoaXRlU3BhY2U+fDxMaW5lVGVybWluYXRvcj58PFJlc2VydmVkV29yZD58PElkZW50aWZpZXI+fDxOdW1lcmljTGl0ZXJhbD58PFB1bmN0dWF0b3I+fDxTdHJpbmdMaXRlcmFsPiIsSW5wdXRFbGVtZW50UmVnRXhwOiI8V2hpdGVTcGFjZT58PExpbmVUZXJtaW5hdG9yPnw8UmVzZXJ2ZWRXb3JkPnw8SWRlbnRpZmllcj58PE51bWVyaWNMaXRlcmFsPnw8UHVuY3R1YXRvcj58PFN0cmluZ0xpdGVyYWw+IixSZXNlcnZlZFdvcmQ6IjxLZXl3b3JkPnw8TnVsbExpdGVyYWw+fDxCb29sZWFuTGl0ZXJhbD4iLFdoaXRlU3BhY2U6L1tcdFx2XGZcdTAwMjBcdTAwQTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDBBXHUyMDJGXHUyMDVmXHUzMDAwXHVGRUZGXS8sTGluZVRlcm1pbmF0b3I6L1tcblxyXHUyMDI4XHUyMDI5XS8sS2V5d29yZDovbmV3KD8hW18kYS16QS1aMC05XSl8dm9pZCg/IVtfJGEtekEtWjAtOV0pfGRlbGV0ZSg/IVtfJGEtekEtWjAtOV0pfGluKD8hW18kYS16QS1aMC05XSl8aW5zdGFuY2VvZig/IVtfJGEtekEtWjAtOV0pfHR5cGVvZig/IVtfJGEtekEtWjAtOV0pLyxOdWxsTGl0ZXJhbDovbnVsbCg/IVtfJGEtekEtWjAtOV0pLyxCb29sZWFuTGl0ZXJhbDovKD86dHJ1ZXxmYWxzZSkoPyFbXyRhLXpBLVowLTldKS8sSWRlbnRpZmllcjovW18kYS16QS1aXVtfJGEtekEtWjAtOV0qLyxQdW5jdHVhdG9yOi9cL3w9PnxcKlwqfD4+Pj18Pj49fDw8PXw9PT18IT09fD4+Pnw8PHwlPXxcKj18LT18XCs9fDw9fD49fD09fCE9fFxePXxcfD18XHxcfHwmJnwmPXw+PnxcK1wrfC0tfFw6fH18XCp8JnxcfHxcXnwhfH58LXxcK3xcP3wlfD18Pnw8fCx8O3xcLig/IVswLTldKXxcXXxcW3xcKXxcKHx7LyxEaXZQdW5jdHVhdG9yOi9cLz18XC8vLE51bWVyaWNMaXRlcmFsOi8oPzowW3hYXVswLTlhLWZBLUZdKnxcLlswLTldK3woPzpbMS05XStbMC05XSp8MCkoPzpcLlswLTldKnxcLik/KSg/OltlRV1bKy1dezAsMX1bMC05XSspPyg/IVtfJGEtekEtWjAtOV0pLyxTdHJpbmdMaXRlcmFsOi8iKD86W14iXG5cXFxyXHUyMDI4XHUyMDI5XXxcXCg/OlsnIlxcYmZucnR2XG5cclx1MjAyOFx1MjAyOV18XHJcbil8XFx4WzAtOWEtZkEtRl17Mn18XFx1WzAtOWEtZkEtRl17NH18XFxbXjAtOXV4JyJcXGJmbnJ0dlxuXFxcclx1MjAyOFx1MjAyOV0pKiJ8Jyg/OlteJ1xuXFxcclx1MjAyOFx1MjAyOV18XFwoPzpbJyJcXGJmbnJ0dlxuXHJcdTIwMjhcdTIwMjldfFxyXG4pfFxceFswLTlhLWZBLUZdezJ9fFxcdVswLTlhLWZBLUZdezR9fFxcW14wLTl1eCciXFxiZm5ydHZcblxcXHJcdTIwMjhcdTIwMjldKSonLyxSZWd1bGFyRXhwcmVzc2lvbkxpdGVyYWw6L1wvKD86XFsoPzpcXFtcc1xTXXxbXlxdXSkqXF18W14qXC9cXFxuXHJcdTIwMjhcdTIwMjldfFxcW15cblxyXHUyMDI4XHUyMDI5XSkoPzpcWyg/OlxcW1xzXFNdfFteXF1dKSpcXXxbXlwvXFxcblxyXHUyMDI4XHUyMDI5XXxcXFteXG5cclx1MjAyOFx1MjAyOV0pKlwvWzAtOWEtekEtWl0qL307ZnVuY3Rpb24gT3YoZyxzLHApe3ZhciB3PVtzXTtmdW5jdGlvbiBrKGQpe3ZhciBFPW5ldyBSZWdFeHA7cmV0dXJuIEUuY29tcGlsZShkLnJlcGxhY2UoLzwoW14+XSspPi9nLGZ1bmN0aW9uKEIsV2Upe3JldHVybiBnW1dlXT8ody5wdXNoKFdlKSxnW1dlXWluc3RhbmNlb2YgUmVnRXhwPyIoIitnW1dlXS5zb3VyY2UrIikiOiIoIitrKGdbV2VdKS5zb3VyY2UrIikiKToiIn0pLHApLEV9dmFyIFM9ayhnW3NdKTt0aGlzLmV4ZWM9ZnVuY3Rpb24oZCl7dmFyIEU9Uy5leGVjKGQpO2lmKEU9PW51bGwpcmV0dXJuIG51bGw7Zm9yKHZhciBCPW5ldyBTdHJpbmcoRVswXSksV2U9MDtXZTx3Lmxlbmd0aDtXZSsrKUVbV2VdJiYoQlt3W1dlXV09RVtXZV0pO3JldHVybiBCfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGFzdEluZGV4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMubGFzdEluZGV4fSxzZXQ6ZnVuY3Rpb24oZCl7Uy5sYXN0SW5kZXg9ZH19KX1mdW5jdGlvbiB0MSgpe3ZhciBnPW5ldyBPdihBdiwiSW5wdXRFbGVtZW50RGl2IiwiZyIpLHM9bmV3IE92KEF2LCJJbnB1dEVsZW1lbnRSZWdFeHAiLCJnIikscDtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywic291cmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHB9LHNldDpmdW5jdGlvbih3KXtwPXcsZy5sYXN0SW5kZXg9MCxzLmxhc3RJbmRleD0wfX0pLHRoaXMucmVzZXQ9ZnVuY3Rpb24oKXtnLmxhc3RJbmRleD0wLHMubGFzdEluZGV4PTB9LHRoaXMuZ2V0TmV4dFRva2VuPWZ1bmN0aW9uKHcpe3ZhciBrPWcubGFzdEluZGV4LFM7dz9TPWc6Uz1zO3ZhciBkPVMuZXhlYyhwKTtpZihkJiZTLmxhc3RJbmRleC1rPmQubGVuZ3RoKXRocm93IG5ldyBTeW50YXhFcnJvcigiVW5leHBlY3RlZCB0b2tlbiBJTExFR0FMIik7cmV0dXJuIGcubGFzdEluZGV4PVMubGFzdEluZGV4LHMubGFzdEluZGV4PVMubGFzdEluZGV4LGR9fXZhciBUdj17SWRlbnRpZmllck5hbWU6W1siSWRlbnRpZmllciJdXSxMaXRlcmFsOltbIk51bGxMaXRlcmFsIl0sWyJCb29sZWFuTGl0ZXJhbCJdLFsiTnVtZXJpY0xpdGVyYWwiXSxbIlN0cmluZ0xpdGVyYWwiXSxbIlJlZ3VsYXJFeHByZXNzaW9uTGl0ZXJhbCJdXSxQcmltYXJ5RXhwcmVzc2lvbjpbWyJJZGVudGlmaWVyIl0sWyJMaXRlcmFsIl0sWyIoIiwiRXhwcmVzc2lvbiIsIikiXV0sQ2FsbEV4cHJlc3Npb246W1siUHJpbWFyeUV4cHJlc3Npb24iLCJBcmd1bWVudHMiXSxbIkNhbGxFeHByZXNzaW9uIiwiQXJndW1lbnRzIl1dLEFyZ3VtZW50czpbWyIoIiwiKSJdLFsiKCIsIkFyZ3VtZW50TGlzdCIsIikiXV0sQXJndW1lbnRMaXN0OltbIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiJdLFsiQXJndW1lbnRMaXN0IiwiLCIsIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiJdXSxMZWZ0SGFuZFNpZGVFeHByZXNzaW9uOltbIlByaW1hcnlFeHByZXNzaW9uIl0sWyJDYWxsRXhwcmVzc2lvbiJdXSxVbmFyeUV4cHJlc3Npb246W1siTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiJdLFsidm9pZCIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsiKyIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsiLSIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsifiIsIlVuYXJ5RXhwcmVzc2lvbiJdLFsiISIsIlVuYXJ5RXhwcmVzc2lvbiJdXSxFeHBvbmVudGlhdGlvbkV4cHJlc3Npb246W1siVW5hcnlFeHByZXNzaW9uIl0sWyJFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24iLCIqKiIsIlVuYXJ5RXhwcmVzc2lvbiJdXSxNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb246W1siTXVsdGlwbGljYXRpdmVFeHByZXNzaW9uIiwiLyIsIkV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbiJdLFsiRXhwb25lbnRpYXRpb25FeHByZXNzaW9uIl0sWyJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iLCIqIiwiRXhwb25lbnRpYXRpb25FeHByZXNzaW9uIl0sWyJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iLCIlIiwiRXhwb25lbnRpYXRpb25FeHByZXNzaW9uIl1dLEFkZGl0aXZlRXhwcmVzc2lvbjpbWyJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iXSxbIkFkZGl0aXZlRXhwcmVzc2lvbiIsIisiLCJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iXSxbIkFkZGl0aXZlRXhwcmVzc2lvbiIsIi0iLCJNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24iXV0sU2hpZnRFeHByZXNzaW9uOltbIkFkZGl0aXZlRXhwcmVzc2lvbiJdLFsiU2hpZnRFeHByZXNzaW9uIiwiPDwiLCJBZGRpdGl2ZUV4cHJlc3Npb24iXSxbIlNoaWZ0RXhwcmVzc2lvbiIsIj4+IiwiQWRkaXRpdmVFeHByZXNzaW9uIl0sWyJTaGlmdEV4cHJlc3Npb24iLCI+Pj4iLCJBZGRpdGl2ZUV4cHJlc3Npb24iXV0sUmVsYXRpb25hbEV4cHJlc3Npb246W1siU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsIjwiLCJTaGlmdEV4cHJlc3Npb24iXSxbIlJlbGF0aW9uYWxFeHByZXNzaW9uIiwiPiIsIlNoaWZ0RXhwcmVzc2lvbiJdLFsiUmVsYXRpb25hbEV4cHJlc3Npb24iLCI8PSIsIlNoaWZ0RXhwcmVzc2lvbiJdLFsiUmVsYXRpb25hbEV4cHJlc3Npb24iLCI+PSIsIlNoaWZ0RXhwcmVzc2lvbiJdLFsiUmVsYXRpb25hbEV4cHJlc3Npb24iLCJpbnN0YW5jZW9mIiwiU2hpZnRFeHByZXNzaW9uIl0sWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiIsImluIiwiU2hpZnRFeHByZXNzaW9uIl1dLEVxdWFsaXR5RXhwcmVzc2lvbjpbWyJSZWxhdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXF1YWxpdHlFeHByZXNzaW9uIiwiPT0iLCJSZWxhdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXF1YWxpdHlFeHByZXNzaW9uIiwiIT0iLCJSZWxhdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXF1YWxpdHlFeHByZXNzaW9uIiwiPT09IiwiUmVsYXRpb25hbEV4cHJlc3Npb24iXSxbIkVxdWFsaXR5RXhwcmVzc2lvbiIsIiE9PSIsIlJlbGF0aW9uYWxFeHByZXNzaW9uIl1dLEJpdHdpc2VBTkRFeHByZXNzaW9uOltbIkVxdWFsaXR5RXhwcmVzc2lvbiJdLFsiQml0d2lzZUFOREV4cHJlc3Npb24iLCImIiwiRXF1YWxpdHlFeHByZXNzaW9uIl1dLEJpdHdpc2VYT1JFeHByZXNzaW9uOltbIkJpdHdpc2VBTkRFeHByZXNzaW9uIl0sWyJCaXR3aXNlWE9SRXhwcmVzc2lvbiIsIl4iLCJCaXR3aXNlQU5ERXhwcmVzc2lvbiJdXSxCaXR3aXNlT1JFeHByZXNzaW9uOltbIkJpdHdpc2VYT1JFeHByZXNzaW9uIl0sWyJCaXR3aXNlT1JFeHByZXNzaW9uIiwifCIsIkJpdHdpc2VYT1JFeHByZXNzaW9uIl1dLExvZ2ljYWxBTkRFeHByZXNzaW9uOltbIkJpdHdpc2VPUkV4cHJlc3Npb24iXSxbIkxvZ2ljYWxBTkRFeHByZXNzaW9uIiwiJiYiLCJCaXR3aXNlT1JFeHByZXNzaW9uIl1dLExvZ2ljYWxPUkV4cHJlc3Npb246W1siTG9naWNhbEFOREV4cHJlc3Npb24iXSxbIkxvZ2ljYWxPUkV4cHJlc3Npb24iLCJ8fCIsIkxvZ2ljYWxBTkRFeHByZXNzaW9uIl1dLENvbmRpdGlvbmFsRXhwcmVzc2lvbjpbWyJMb2dpY2FsT1JFeHByZXNzaW9uIl0sWyJMb2dpY2FsT1JFeHByZXNzaW9uIiwiPyIsIkxvZ2ljYWxPUkV4cHJlc3Npb24iLCI6IiwiTG9naWNhbE9SRXhwcmVzc2lvbiJdXSxFeHByZXNzaW9uOltbIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiJdLFsiRXhwcmVzc2lvbiIsIiwiLCJDb25kaXRpb25hbEV4cHJlc3Npb24iXV0sUHJvZ3JhbTpbWyJFeHByZXNzaW9uIl1dfTtmdW5jdGlvbiBtYyhnLHMpe3RoaXMubmFtZT1nLHRoaXMudG9rZW49cyx0aGlzLmNoaWxkTm9kZXM9W10sdGhpcy50b1N0cmluZz1mdW5jdGlvbihwKXtpZihwfHwocD0iIiksdGhpcy5jaGlsZE5vZGVzLmxlbmd0aD09MSlyZXR1cm4gdGhpcy5jaGlsZE5vZGVzWzBdLnRvU3RyaW5nKHApO2Zvcih2YXIgdz1wK3RoaXMubmFtZSsodGhpcy50b2tlbiE9bnVsbCYmdGhpcy5uYW1lIT10aGlzLnRva2VuPyI6Iit0aGlzLnRva2VuOiIiKStgCmAsaz0wO2s8dGhpcy5jaGlsZE5vZGVzLmxlbmd0aDtrKyspdys9dGhpcy5jaGlsZE5vZGVzW2tdLnRvU3RyaW5nKHArIiAgICAiKTtyZXR1cm4gd319ZnVuY3Rpb24gbjEoKXt2YXIgZyxzPXtQcm9ncmFtOiIkIn0scD17fTtmdW5jdGlvbiB3KEUpe3BbSlNPTi5zdHJpbmdpZnkoRSldPUU7Zm9yKHZhciBCPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEUpO0IubGVuZ3RoOyl7dmFyIFdlPUIuc2hpZnQoKTshVHZbV2VdfHxUdltXZV0uZm9yRWFjaChmdW5jdGlvbihlbil7RVtlblswXV18fEIucHVzaChlblswXSk7dmFyIHh0PUUsST1udWxsO2VuLmZvckVhY2goZnVuY3Rpb24oU3Qpe3h0W1N0XXx8KHh0W1N0XT17fSksST14dCx4dD14dFtTdF19KSxFW1dlXS4kZGl2JiYoeHQuJGRpdj0hMCkseHQuJHJlZHVjZT1XZSx4dC4kY291bnQ9ZW4ubGVuZ3RofSl9Zm9yKHZhciBMdCBpbiBFKXR5cGVvZiBFW0x0XSE9Im9iamVjdCJ8fEx0LmNoYXJBdCgwKT09IiQifHxFW0x0XS4kY2xvc3VyZXx8KHBbSlNPTi5zdHJpbmdpZnkoRVtMdF0pXT9FW0x0XT1wW0pTT04uc3RyaW5naWZ5KEVbTHRdKV06dyhFW0x0XSkpO0UuJGNsb3N1cmU9ITB9dyhzKTt2YXIgaz1bXSxTPVtzXSxkPXM7dGhpcy5pbnNlcnRTeW1ib2w9ZnVuY3Rpb24oQixXZSl7Zm9yKDshZFtCLm5hbWVdJiZkLiRyZWR1Y2U7KXtmb3IodmFyIEx0PWQuJGNvdW50LGVuPW5ldyBtYyhkLiRyZWR1Y2UpO0x0LS07KWVuLmNoaWxkTm9kZXMucHVzaChrLnBvcCgpKSxTLnBvcCgpO2Q9U1tTLmxlbmd0aC0xXSx0aGlzLmluc2VydFN5bWJvbChlbil9aWYoZD1kW0IubmFtZV0say5wdXNoKEIpLFMucHVzaChkKSwhZCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGQuJGRpdn0sdGhpcy5yZXNldD1mdW5jdGlvbigpe2Q9cyxrPVtdLFM9W3NdfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiZ3JhbW1hclRyZWUiLHtnZXQ6ZnVuY3Rpb24oKXt0cnl7Zm9yKDtkLiRyZWR1Y2U7KXtmb3IodmFyIEU9ZC4kY291bnQsQj1uZXcgbWMoZC4kcmVkdWNlKTtFLS07KUIuY2hpbGROb2Rlcy5wdXNoKGsucG9wKCkpLFMucG9wKCk7ZD1TW1MubGVuZ3RoLTFdLHRoaXMuaW5zZXJ0U3ltYm9sKEIpfWlmKGsubGVuZ3RoPjAmJmRbIjsiXSlyZXR1cm4gdGhpcy5pbnNlcnRTeW1ib2wobmV3IG1jKCI7IiwiOyIpKSx0aGlzLmdyYW1tYXJUcmVlO2lmKGsubGVuZ3RoIT0xfHxrWzBdLm5hbWUhPSJQcm9ncmFtIil0aHJvdyBuZXcgRXJyb3J9Y2F0Y2goV2Upe3Rocm93IG5ldyBTeW50YXhFcnJvcigiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiKX1yZXR1cm4ga1swXX19KX1mdW5jdGlvbiByMSgpe3RoaXMubGV4aWNhbFBhcnNlcj1uZXcgdDEsdGhpcy5zeW50YWN0aWNhbFBhcnNlcj1uZXcgbjE7dmFyIGc9WyJOdWxsTGl0ZXJhbCIsIkJvb2xlYW5MaXRlcmFsIiwiTnVtZXJpY0xpdGVyYWwiLCJTdHJpbmdMaXRlcmFsIiwiUmVndWxhckV4cHJlc3Npb25MaXRlcmFsIiwiSWRlbnRpZmllciIsIioqIiwiPT4iLCJ7IiwifSIsIigiLCIpIiwiWyIsIl0iLCIuIiwiOyIsIiwiLCI8IiwiPiIsIjw9IiwiPj0iLCI9PSIsIiE9IiwiPT09IiwiIT09IiwiKyIsIi0iLCIqIiwiJSIsIisrIiwiLS0iLCI8PCIsIj4+IiwiPj4+IiwiJiIsInwiLCJeIiwiISIsIn4iLCImJiIsInx8IiwiPyIsIjoiLCI9IiwiKz0iLCItPSIsIio9IiwiJT0iLCI8PD0iLCI+Pj0iLCI+Pj49IiwiJj0iLCJ8PSIsIl49IiwiLyIsIi89IiwiaW5zdGFuY2VvZiIsInR5cGVvZiIsIm5ldyIsInZvaWQiLCJkZWJ1Z2dlciIsInRoaXMiLCJkZWxldGUiLCJpbiJdLHM9e307Zy5mb3JFYWNoKGZ1bmN0aW9uKHApe09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLHAse30pfSksdGhpcy5yZXNldD1mdW5jdGlvbigpe3RoaXMubGV4aWNhbFBhcnNlci5yZXNldCgpLHRoaXMuc3ludGFjdGljYWxQYXJzZXIucmVzZXQoKX0sdGhpcy5wYXJzZT1mdW5jdGlvbihwLHcpe3ZhciBrLFM9ITE7dGhpcy5sZXhpY2FsUGFyc2VyLnNvdXJjZT1wO2Zvcih2YXIgZD0hMTtrPXRoaXMubGV4aWNhbFBhcnNlci5nZXROZXh0VG9rZW4oZCk7KXt3JiZ3KGspO3RyeXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhrKS5zb21lKEU9PnMuaGFzT3duUHJvcGVydHkoRSk/KGQ9dGhpcy5zeW50YWN0aWNhbFBhcnNlci5pbnNlcnRTeW1ib2wobmV3IG1jKEUsayksUyksUz0hMSwhMCk6ITEpKWNvbnRpbnVlOyhrLktleXdvcmR8fGsuUHVuY3R1YXRvcnx8ay5EaXZQdW5jdHVhdG9yKSYmcy5oYXNPd25Qcm9wZXJ0eShrLnRvU3RyaW5nKCkpJiYoZD10aGlzLnN5bnRhY3RpY2FsUGFyc2VyLmluc2VydFN5bWJvbChuZXcgbWMoay50b1N0cmluZygpLGspLFMpKX1jYXRjaChFKXt0aHJvdyBuZXcgU3ludGF4RXJyb3IoIlVuZXhwZWN0ZWQgdG9rZW4gIitrKX19cmV0dXJuIHRoaXMuc3ludGFjdGljYWxQYXJzZXIuZ3JhbW1hclRyZWV9fXZhciBQdj1uZXcgcjE7ZnVuY3Rpb24gaTEoZyl7UHYucmVzZXQoKSx0aGlzLnRyZWU9UHYucGFyc2UoZyksdGhpcy5wYXRocz1bXTt2YXIgcz1PYmplY3QuY3JlYXRlKG51bGwpLHA9dGhpcyx3PU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5pc1NpbXBsZSx0aGlzLmlzQ29uc3QsUyh0aGlzLnRyZWUpLGsodGhpcy50cmVlKSx0aGlzLnBhdGhzLmxlbmd0aD09PTAmJih0aGlzLmlzQ29uc3Q9ITApLHRoaXMuc2V0dGVyPWZ1bmN0aW9uKEIpe2Zvcih2YXIgV2U9cyxMdD0wO0x0PEIubGVuZ3RoLTE7THQrKylXZVtCW0x0XV18fChXZVtCW0x0XV09T2JqZWN0LmNyZWF0ZShudWxsKSksV2U9V2VbQltMdF1dO3JldHVybntpc0NvbXBsZXRlZDpmdW5jdGlvbigpe2Zvcih2YXIgZW4gaW4gdylpZighd1tlbl0pcmV0dXJuITE7cmV0dXJuITB9LHNldDpmdW5jdGlvbihlbil7aWYod1tCLmpvaW4oIi4iKV18fCh3W0Iuam9pbigiLiIpXT0hMCksV2VbQltMdF1dPWVuLHRoaXMuaXNDb21wbGV0ZWQoKSlyZXR1cm4gcC5leGVjKCl9fX0sdGhpcy52YWx1ZU9mPXRoaXMuZXhlYz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4oMCxldmFsKShnKX0uY2FsbChzKX1jYXRjaChCKXt9fTtmdW5jdGlvbiBrKEIpe2Zvcih2YXIgV2U9QjtXZS5jaGlsZE5vZGVzLmxlbmd0aDw9MSYmV2UubmFtZSE9PSJNZW1iZXJFeHByZXNzaW9uIjspV2U9V2UuY2hpbGROb2Rlc1swXTtXZS5uYW1lPT09Ik1lbWJlckV4cHJlc3Npb24iP3AuaXNTaW1wbGU9ITA6cC5pc1NpbXBsZT0hMX1mdW5jdGlvbiBTKEIpe2lmKEIubmFtZT09PSJDYWxsRXhwcmVzc2lvbiImJkIuY2hpbGROb2Rlc1tCLmNoaWxkTm9kZXMubGVuZ3RoLTFdLm5hbWUhPT0iQ2FsbEV4cHJlc3Npb24iKXt2YXIgV2U9ZChCLmNoaWxkTm9kZXNbMV0pO1MoQi5jaGlsZE5vZGVzWzBdKX1lbHNlIGlmKEIubmFtZT09PSJOZXdFeHByZXNzaW9uIiYmQi5jaGlsZE5vZGVzLmxlbmd0aD09PTEpdmFyIFdlPWQoQi5jaGlsZE5vZGVzWzBdKTtlbHNlIGlmKEIubmFtZT09PSJNZW1iZXJFeHByZXNzaW9uIiYmQi5jaGlsZE5vZGVzLmxlbmd0aD09PTEpdmFyIFdlPWQoQik7ZWxzZSBmb3IodmFyIEx0PTA7THQ8Qi5jaGlsZE5vZGVzLmxlbmd0aDtMdCsrKVMoQi5jaGlsZE5vZGVzW0x0XSl9ZnVuY3Rpb24gZChCKXtpZihCLmNoaWxkTm9kZXNbMF0ubmFtZT09PSJJZGVudGlmaWVyTmFtZSIpe3ZhciBXZT1kKEIuY2hpbGROb2Rlc1syXSk7cmV0dXJuIFdlJiYoV2U9V2UuY29uY2F0KEIuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLnRva2VuLnRvU3RyaW5nKCkpKSxFKFdlKSxXZX1lbHNlIGlmKEIuY2hpbGROb2Rlc1swXS5uYW1lPT09IlByaW1hcnlFeHByZXNzaW9uIilpZihCLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5uYW1lPT09IklkZW50aWZpZXIiKXt2YXIgV2U9W0IuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLnRva2VuLnRvU3RyaW5nKCldO3JldHVybiBFKFdlKSxXZX1lbHNlIHJldHVybiBudWxsO2Vsc2V7aWYoQi5jaGlsZE5vZGVzWzBdLm5hbWU9PT0iXSIpcmV0dXJuIGQoQi5jaGlsZE5vZGVzWzNdKSxTKEIuY2hpbGROb2Rlc1sxXSksbnVsbDtpZihCLmNoaWxkTm9kZXNbMF0ubmFtZT09PSJBcmd1bWVudHMiKXJldHVybiBTKEIuY2hpbGROb2Rlc1swXSksUyhCLmNoaWxkTm9kZXNbMV0pLG51bGw7Zm9yKHZhciBMdD0wO0x0PEIuY2hpbGROb2Rlcy5sZW5ndGg7THQrKylTKEIuY2hpbGROb2Rlc1tMdF0pfX1mdW5jdGlvbiBFKEIpe2Zvcih2YXIgV2U9cyxMdD0wO0x0PEIubGVuZ3RoLTE7THQrKylXZVtCW0x0XV18fChXZVtCW0x0XV09T2JqZWN0LmNyZWF0ZShudWxsKSksV2U9V2VbQltMdF1dO3AucGF0aHMucHVzaChCKSx3W0Iuam9pbigiLiIpXT0hMX19ZnVuY3Rpb24gdWwoZyl7dmFyIHM9Zy5jaGlsZE5vZGVzLnNsaWNlKCkucmV2ZXJzZSgpLHA9cy5maWx0ZXIoQj0+IUIudG9rZW58fCFCLnRva2VuLlB1bmN0dWF0b3IpO2lmKGcubmFtZT09PSJVbmFyeUV4cHJlc3Npb24iJiZzLmxlbmd0aD09PTImJnNbMF0ubmFtZT09PSItIiYmcC5sZW5ndGg9PT0xKXt2YXIgdz11bChwWzBdKTtyZXR1cm4gdy52YWx1ZT0tdy52YWx1ZSx3fWlmKGcubmFtZT09PSJBcmd1bWVudHMiKXtmb3IodmFyIGs9W10sUz1wWzBdO1M7KVMuY2hpbGROb2Rlcy5sZW5ndGg9PT0zJiYoay51bnNoaWZ0KFMuY2hpbGROb2Rlc1swXSksUz1TLmNoaWxkTm9kZXNbMl0pLFMuY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiYoay51bnNoaWZ0KFMuY2hpbGROb2Rlc1swXSksUz1udWxsKTtyZXR1cm57dHlwZToiQXJndW1lbnRzIixjaGlsZHJlbjprLm1hcChCPT51bChCKSl9fWlmKHAmJnAubGVuZ3RoPT09MSl7dmFyIHc9dWwocFswXSk7cmV0dXJuIHd9aWYoZy50b2tlbiYmWyJOdWxsTGl0ZXJhbCIsIkJvb2xlYW5MaXRlcmFsIiwiTnVtZXJpY0xpdGVyYWwiLCJTdHJpbmdMaXRlcmFsIiwiSWRlbnRpZmllciJdLnNvbWUoQj0+Zy50b2tlbltCXSkpe3ZhciBkPU9iamVjdC5rZXlzKGcudG9rZW4pLmZpbHRlcihCPT5CLm1hdGNoKC9MaXRlcmFsLyl8fEIubWF0Y2goL0lkZW50aWZpZXIvKSlbMF0sRT17TnVsbExpdGVyYWw6bnVsbCxCb29sZWFuTGl0ZXJhbDpCb29sZWFuKGcudG9rZW4pLE51bWVyaWNMaXRlcmFsOk51bWJlcihnLnRva2VuKSxTdHJpbmdMaXRlcmFsOmcudG9rZW4sSWRlbnRpZmllcjpnLnRva2VufVtkXTtyZXR1cm57dHlwZTpkLHZhbHVlOkV9fXJldHVybiBnLm5hbWU9PT0iQ2FsbEV4cHJlc3Npb24iP3t0eXBlOiJDYWxsRXhwcmVzc2lvbiIsY2hpbGRyZW46W3VsKHNbMF0pLHVsKHNbMV0pXX06e3R5cGU6cy5maWx0ZXIoQj0+Qi50b2tlbiYmQi50b2tlbi5QdW5jdHVhdG9yKVswXS5uYW1lLGNoaWxkcmVuOnMuZmlsdGVyKEI9PiFCLnRva2VufHwhQi50b2tlbi5QdW5jdHVhdG9yKS5tYXAoQj0+dWwoQikpfX1mdW5jdGlvbiBJdihnKXt2YXIgcz1uZXcgaTEoZyk7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHVsKHMudHJlZSksbnVsbCl9ZnVuY3Rpb24gbzEoZyxzKXtyZXR1cm4gcz09PSJiaW5kIiYmKGc9PT0iYmluZGluZ3gifHxnPT09ImJpbmRpbmciKX1mdW5jdGlvbiBOdihnKXtpZighZylyZXR1cm47dHJ5e2c9SlNPTi5wYXJzZShnKX1jYXRjaChwKXt9bGV0IHM9e307aWYoZ2koZyk/cy5vcmlnaW49ZzpnJiYocy5vcmlnaW49Zy5vcmlnaW4scy50cmFuc2Zvcm1lZD1nLnRyYW5zZm9ybWVkKSwhKCFzLnRyYW5zZm9ybWVkJiYhcy5vcmlnaW4pKXJldHVybiBzLnRyYW5zZm9ybWVkPXMudHJhbnNmb3JtZWR8fEl2KHMub3JpZ2luKSxzfWZ1bmN0aW9uIGExKGcpe3JldHVybiBnJiYoZy5leGl0RXhwcmVzc2lvbj1OdihnLmV4aXRFeHByZXNzaW9uKSxnLnByb3BzJiZnLnByb3BzLmZvckVhY2gocz0+e3MuZXhwcmVzc2lvbj1OdihzLmV4cHJlc3Npb24pfSksZyl9ZnVuY3Rpb24gczEoZyl7cmV0dXJuIGZ1bmN0aW9uKHM9e30pe2lmKCRuKGcpKXJldHVybiBnKHtzdGF0ZTpzLnN0YXRlPT09ImVuZCI/ImV4aXQiOnMuc3RhdGUsdDpzLnQhPT12b2lkIDA/cy50OnMuZGVsdGFUfSl9fWZ1bmN0aW9uIGt2KGcscyxwKXtyZXR1cm4gcCYmKG8xKGcscyk/ZnVuY3Rpb24odyxrPWZ1bmN0aW9uKCl7fSl7aWYoIXcpdGhyb3cgbmV3IEVycm9yKCJzaG91bGQgcGFzcyBvcHRpb25zIGZvciBiaW5kaW5nIik7cmV0dXJuIGExKHcpLHAodyx3JiZ3LmV2ZW50VHlwZT09PSJ0aW1pbmciP3MxKGspOmspfTpwKX1mdW5jdGlvbiBsMShnLHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShnLCJbW0N1cnJlbnRJbnN0YW5jZUlkXV0iLHt2YWx1ZTpzfSl9ZnVuY3Rpb24gUnYoZyl7cmV0dXJuIGdbIltbQ3VycmVudEluc3RhbmNlSWRdXSJdfWZ1bmN0aW9uIGMxKGcscyxwKXtsZXQgdz1McihnKTtyZXR1cm4hd3x8ISRuKHcuc2VuZCk/KGNvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byBmaW5kIHRhc2tDZW50ZXIgKCR7Z30pLmApLG51bGwpOiguLi5rKT0+dy5zZW5kKCJtb2R1bGUiLHttb2R1bGU6cyxtZXRob2Q6cH0sayl9ZnVuY3Rpb24gdTEoZyxzLHAsdyl7bGV0IGs9THIoZyk7cmV0dXJuIWt8fCEkbihrLnNlbmQpPyhjb25zb2xlLmVycm9yKGBbSlMgRnJhbWV3b3JrXSBGYWlsZWQgdG8gZmluZCB0YXNrQ2VudGVyICgke2d9KS5gKSxudWxsKTokbih3KT9TPT5rLnNlbmQoIm1vZHVsZSIse21vZHVsZTpzLG1ldGhvZDpwfSxbU10pOihjb25zb2xlLmVycm9yKGBbSlMgRnJhbWV3b3JrXSAke3N9LiR7cH0gbXVzdCBiZSBhc3NpZ25lZCBhcyBhIGZ1bmN0aW9uLmApLG51bGwpfXZhciBndT1jbGFzc3tjb25zdHJ1Y3RvcihzLHApe2wxKHRoaXMsU3RyaW5nKHMpKSx0aGlzLmNvbmZpZz1wfHx7fSx0aGlzLmRvY3VtZW50PW5ldyBHbyhzLHRoaXMuY29uZmlnLmJ1bmRsZVVybCksdGhpcy5yZXF1aXJlTW9kdWxlPXRoaXMucmVxdWlyZU1vZHVsZS5iaW5kKHRoaXMpLHRoaXMuaW1wb3J0U2NyaXB0PXRoaXMuaW1wb3J0U2NyaXB0LmJpbmQodGhpcyksdGhpcy5pc1JlZ2lzdGVyZWRNb2R1bGU9dXUsdGhpcy5pc1JlZ2lzdGVyZWRDb21wb25lbnQ9VGZ9cmVxdWlyZU1vZHVsZShzKXtsZXQgcD1Sdih0aGlzKTtpZighKHAmJnRoaXMuZG9jdW1lbnQmJnRoaXMuZG9jdW1lbnQudGFza0NlbnRlcikpe2NvbnNvbGUuZXJyb3IoYFtKUyBGcmFtZXdvcmtdIEZhaWxlZCB0byByZXF1aXJlTW9kdWxlKCIke3N9IiksIGluc3RhbmNlICgke3B9KSBkb2Vzbid0IGV4aXN0IGFueW1vcmUuYCk7cmV0dXJufWlmKCF1dShzKSl7Y29uc29sZS53YXJuKGBbSlMgRnJhbWV3b3JrXSBcdTVGNTNcdTUyNERcdThGRDBcdTg4NENcdTc2ODRcdTU3RkFcdTVFQTdcdTRFMERcdTUzMDVcdTU0MkJcdTUzOUZcdTc1MUZcdTYzRDJcdTRFRjZbJHtzfV1cdUZGMENcdThCRjdcdTU3MjhtYW5pZmVzdFx1NEUyRFx1OTE0RFx1N0Y2RVx1OEJFNVx1NjNEMlx1NEVGNlx1RkYwQ1x1OTFDRFx1NjVCMFx1NTIzNlx1NEY1Q1x1NTMwNVx1NjJFQ1x1OEJFNVx1NTM5Rlx1NzUxRlx1NjNEMlx1NEVGNlx1NzY4NFx1ODFFQVx1NUI5QVx1NEU0OVx1OEZEMFx1ODg0Q1x1NTdGQVx1NUVBN2ApO3JldHVybn1sZXQgdz17fSxrPWl2KHMpO2ZvcihsZXQgUyBpbiBrKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LFMse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDooKT0+a3YocyxTLGMxKHAscyxTKSksc2V0OmQ9PnUxKHAscyxTLGQpfSk7cmV0dXJuIHd9c3VwcG9ydHMocyl7aWYoIWdpKHMpKXJldHVybiBudWxsO2xldCBwPXMubWF0Y2goL15AKFx3KylcLyhbXHctXSspKFwuKFx3KykpPyQvaSk7aWYocCl7bGV0IHc9cFsxXSxrPXBbMl0sUz1wWzRdO3N3aXRjaCh3KXtjYXNlIm1vZHVsZSI6cmV0dXJuIHV1KGssUyk7Y2FzZSJjb21wb25lbnQiOnJldHVybiBUZihrKX19cmV0dXJuIG51bGx9aW1wb3J0U2NyaXB0KHMscD17fSl7bGV0IHc9UnYodGhpcyksaz1Mcih3KTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oUyxkKXtpZigha3x8ISRuKGsuc2VuZCkpcmV0dXJuIGQobmV3IEVycm9yKGBbSlMgRnJhbWV3b3JrXSBGYWlsZWQgdG8gaW1wb3J0IHNjcmlwdCAiJHtzfSIsIG5vIHRhc2tDZW50ZXIgKCR7d30pIG1hdGNoZWQuYCkpO3RyeXtrLnNlbmQoIm1vZHVsZSIse21vZHVsZToic2NyaXB0IixtZXRob2Q6ImltcG9ydFNjcmlwdCJ9LFtzLHBdLHtjYWxsYmFjazpbRT0+UyhFKSxFPT5kKEUpXX0pfWNhdGNoKEUpe2QoRSl9fSl9fTtmdW5jdGlvbiBmMShnLHMpe2xldCBwPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHAuc2VydmljZT1PYmplY3QuY3JlYXRlKG51bGwpLFJzLmZvckVhY2goKHtuYW1lOncsb3B0aW9uczprfSk9PntsZXQgUz1rLmNyZWF0ZTtpZihTKXRyeXtsZXQgZD1TKGcscyk7aGkocC5zZXJ2aWNlLGQpLGhpKHAsZC5pbnN0YW5jZSl9Y2F0Y2goZCl7Y29uc29sZS5lcnJvcihgW0pTIFJ1bnRpbWVdIEZhaWxlZCB0byBjcmVhdGUgc2VydmljZSAke3d9LmApfX0pLGRlbGV0ZSBwLnNlcnZpY2UuaW5zdGFuY2UsVGEocC5zZXJ2aWNlKSxwfXZhciBkMT17dWlkOjB9LGgxPVVwKGhjKSxnMT0kcChoYyk7ZnVuY3Rpb24geHYoZyxzLHApe2xldCB3PW5ldyBndShnLHMpLGs9IlZ1ZSIsUz1mMShnLHt3ZWV4OncsbnZ1ZTp3LGNvbmZpZzpzLGNyZWF0ZWQ6RGF0ZS5ub3coKSxmcmFtZXdvcms6a30pO1RhKFMpO2xldCBkPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGhpKGQseTEodykpLGhpKGQsUyx7U2hhcmVkT2JqZWN0OmQxLHdlZXg6dyxudnVlOncscmVxdWlyZU1vZHVsZTpFPT53LnJlcXVpcmVNb2R1bGUoRSksX19XRUVYX0NBTExfSkFWQVNDUklQVF9fOkFmLHNlcnZpY2VzOlN9KSxkLnBsdXM9bmV3IGQuV2VleFBsdXModyksZC5WdWVTaGFyZWQ9aGMsZC5VbmlTaGFyZWQ9aDEsZC5WdWVSZWFjdGl2aXR5PWcxLEV2KGcsZCksVGEoZCksZH1mdW5jdGlvbiBwMShnLHMscD17fSl7bGV0IHc9IlZ1ZSI7cD1oZihwKSxwLmVudj1oZihnbG9iYWwuV1hFbnZpcm9ubWVudHx8e30pLHAuYnVuZGxlVHlwZT13O2xldCBrPXh2KGcscCk7djEocyxrKX1mdW5jdGlvbiB2MShnLHMpe2xldCBwPVtdLHc9W107Zm9yKGxldCBkIGluIHMpcC5wdXNoKGQpLHcucHVzaChzW2RdKTtsZXQgUz0iKGZ1bmN0aW9uIChnbG9iYWwpIHsgIitgCmdsb2JhbCA9IChmdW5jdGlvbiAoKSB7CiAgdmFyIGcKICAvLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZQogIGcgPSAoZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMKICB9KSgpCiAgdHJ5IHsKICAgIC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKQogICAgZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkKICB9IGNhdGNoIChlKSB7CiAgICAvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZQogICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJvYmplY3QiKSBnID0gd2luZG93CiAgfQogIHJldHVybiBnCn0pKCkgfHwgZ2xvYmFsOwpgK2crIiB9KShPYmplY3QuY3JlYXRlKHRoaXMpKSI7cmV0dXJuIG5ldyBGdW5jdGlvbiguLi5wLFMpKC4uLncpfWZ1bmN0aW9uIG0xKGcpe2xldCBzPXJzKGcpO3RyeXtpZihzJiZzLmJvZHkpcmV0dXJuIHMuYm9keS50b0pTT04oKX1jYXRjaChwKXtjb25zb2xlLmVycm9yKCJbSlMgRnJhbWV3b3JrXSBGYWlsZWQgdG8gZ2V0IHRoZSB2aXJ0dWFsIGRvbSB0cmVlLiIpO3JldHVybn19ZnVuY3Rpb24gXzEoZyl7a3AoZyksUnMuZm9yRWFjaChzPT57bGV0IHA9cy5vcHRpb25zLmRlc3Ryb3k7cCYmcChnKX0pfWZ1bmN0aW9uIGIxKGcpe1JwKGcpLFJzLmZvckVhY2gocz0+e2xldCBwPXMub3B0aW9ucy5yZWZyZXNoO3AmJnAoZyl9KX12YXIgRTE9e2NyZWF0ZUluc3RhbmNlOnAxLGNyZWF0ZUluc3RhbmNlQ29udGV4dDp4dixnZXRSb290Om0xLGdldERvY3VtZW50OnJzLHJlZ2lzdGVyU2VydmljZTpmdSx1bnJlZ2lzdGVyU2VydmljZTpkdSxjYWxsSlMoZyxzKXtyZXR1cm4gQWYoZyxzKX0scmVnaXN0ZXJDb21wb25lbnRzOm92LHJlZ2lzdGVyTW9kdWxlczpydixkZXN0cm95SW5zdGFuY2U6XzEscmVmcmVzaEluc3RhbmNlOmIxfTtmdW5jdGlvbiBNZigpe3JldHVybiBudigpLEUxfWZ1bmN0aW9uIHkxKGcpe2lmKGdsb2JhbC5zZXRUaW1lb3V0JiZnbG9iYWwuc2V0SW50ZXJ2YWwpcmV0dXJue3NldFRpbWVvdXQ6Z2xvYmFsLnNldFRpbWVvdXQsc2V0SW50ZXJ2YWw6Z2xvYmFsLnNldEludGVydmFsLGNsZWFyVGltZW91dDpnbG9iYWwuY2xlYXJUaW1lb3V0LGNsZWFySW50ZXJ2YWw6Z2xvYmFsLmNsZWFySW50ZXJ2YWx9O2xldCBzPWcucmVxdWlyZU1vZHVsZSgidGltZXIiKTtyZXR1cm57c2V0VGltZW91dDooLi4udyk9PntsZXQgaz1mdW5jdGlvbigpe3dbMF0oLi4udy5zbGljZSgyKSl9O3JldHVybiBzLnNldFRpbWVvdXQoayx3WzFdKSxnLmRvY3VtZW50LnRhc2tDZW50ZXIuY2FsbGJhY2tNYW5hZ2VyLmxhc3RDYWxsYmFja0lkLnRvU3RyaW5nKCl9LHNldEludGVydmFsOiguLi53KT0+e2xldCBrPWZ1bmN0aW9uKCl7d1swXSguLi53LnNsaWNlKDIpKX07cmV0dXJuIHMuc2V0SW50ZXJ2YWwoayx3WzFdKSxnLmRvY3VtZW50LnRhc2tDZW50ZXIuY2FsbGJhY2tNYW5hZ2VyLmxhc3RDYWxsYmFja0lkLnRvU3RyaW5nKCl9LGNsZWFyVGltZW91dDp3PT57cy5jbGVhclRpbWVvdXQodyl9LGNsZWFySW50ZXJ2YWw6dz0+e3MuY2xlYXJJbnRlcnZhbCh3KX19fXZhciBCdj17RG9jdW1lbnQ6R28sRWxlbWVudDpLaSxDb21tZW50OmNsLExpc3RlbmVyOlZsLFRhc2tDZW50ZXI6Rmwsc2VuZFRhc2tzKC4uLmcpe3JldHVybiAkbihjYWxsTmF0aXZlKT9jYWxsTmF0aXZlKC4uLmcpOihnbG9iYWwuY2FsbE5hdGl2ZXx8KCgpPT57fSkpKC4uLmcpfX07R28uaGFuZGxlcj1Cdi5zZW5kVGFza3M7dmFyIGZsPUJ2O2Z1bmN0aW9uIFMxKCl7VGEoZmwuQ29tbWVudCksVGEoZmwuTGlzdGVuZXIpLFRhKGZsLkRvY3VtZW50LnByb3RvdHlwZSksVGEoZmwuQ29tbWVudC5wcm90b3R5cGUpLFRhKGZsLkxpc3RlbmVyLnByb3RvdHlwZSl9dmFyIHB1PXtzZXJ2aWNlOntyZWdpc3RlcjpmdSx1bnJlZ2lzdGVyOmR1LGhhczpQZn0sZnJlZXplUHJvdG90eXBlOlMxLGluaXQ6TWYsY29uZmlnOmZsfTt2YXIgRGY9Y2xhc3N7Y29uc3RydWN0b3IocyxwPXt9KXt0aGlzLnR5cGU9c3x8Im1lc3NhZ2UiLHRoaXMuZGF0YT1wLmRhdGF8fG51bGwsdGhpcy5vcmlnaW49cC5vcmlnaW58fCIiLHRoaXMuc291cmNlPXAuc291cmNlfHxudWxsLHRoaXMucG9ydHM9cC5wb3J0c3x8W10sdGhpcy50YXJnZXQ9bnVsbCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfX07dmFyIHhzPXt9LF9jPXt9O2Z1bmN0aW9uIEZmKCl7fUZmLnByb3RvdHlwZS5wb3N0TWVzc2FnZT1mdW5jdGlvbihnKXtpZih0aGlzLl9jbG9zZWQpdGhyb3cgbmV3IEVycm9yKGBCcm9hZGNhc3RDaGFubmVsICIke3RoaXMubmFtZX0iIGlzIGNsb3NlZC5gKTtsZXQgcz14c1t0aGlzLm5hbWVdO2lmKHMmJnMubGVuZ3RoKWZvcihsZXQgcD0wO3A8cy5sZW5ndGg7KytwKXtsZXQgdz1zW3BdO3cuX2Nsb3NlZHx8dz09PXRoaXN8fCRuKHcub25tZXNzYWdlKSYmdy5vbm1lc3NhZ2UobmV3IERmKCJtZXNzYWdlIix7ZGF0YTpnfSkpfX07RmYucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Nsb3NlZCYmKHRoaXMuX2Nsb3NlZD0hMCx4c1t0aGlzLm5hbWVdKSl7bGV0IGc9eHNbdGhpcy5uYW1lXS5maWx0ZXIocz0+cyE9PXRoaXMpO2cubGVuZ3RoP3hzW3RoaXMubmFtZV09ZzpkZWxldGUgeHNbdGhpcy5uYW1lXX19O3ZhciBMdj17Y3JlYXRlOmc9PntpZihfY1tnXT1bXSwkbihnbG9iYWwuQnJvYWRjYXN0Q2hhbm5lbCkpcmV0dXJue307bGV0IHM9e0Jyb2FkY2FzdENoYW5uZWw6ZnVuY3Rpb24ocCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMSx2YWx1ZTpTdHJpbmcocCl9KSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5vbm1lc3NhZ2U9bnVsbCx4c1t0aGlzLm5hbWVdfHwoeHNbdGhpcy5uYW1lXT1bXSkseHNbdGhpcy5uYW1lXS5wdXNoKHRoaXMpLF9jW2ddLnB1c2godGhpcyl9fTtyZXR1cm4gcy5Ccm9hZGNhc3RDaGFubmVsLnByb3RvdHlwZT1GZi5wcm90b3R5cGUse2luc3RhbmNlOnN9fSxkZXN0cm95Omc9PntfY1tnXSYmKF9jW2ddLmZvckVhY2gocz0+cy5jbG9zZSgpKSxkZWxldGUgX2NbZ10pfX07ZnVuY3Rpb24gVmYoKXtsZXR7aW5pdDpnfT1wdTtwdS5zZXJ2aWNlLnJlZ2lzdGVyKCJCcm9hZGNhc3RDaGFubmVsIixMdikscHUuZnJlZXplUHJvdG90eXBlKCk7bGV0IHM9ZygpO2ZvcihsZXQgcCBpbiBzKWdsb2JhbFtwXT0oLi4udyk9PntsZXQgaz1zW3BdKC4uLncpO3JldHVybiBrIGluc3RhbmNlb2YgRXJyb3ImJmNvbnNvbGUuZXJyb3Ioay50b1N0cmluZygpKSxrfX12YXIgeHg9Z2xvYmFsLmNvbnNvbGU7ZnVuY3Rpb24gTXYoKXtpZihqcCgpLGdsb2JhbC5XWEVudmlyb25tZW50JiZnbG9iYWwuV1hFbnZpcm9ubWVudC5wbGF0Zm9ybSE9PSJXZWIiKWdsb2JhbC5jb25zb2xlPXtkZWJ1ZzooLi4uZyk9PntLbigiZGVidWciKSYmZ2xvYmFsLm5hdGl2ZUxvZyguLi5iYyhnKSwiX19ERUJVRyIpfSxsb2c6KC4uLmcpPT57S24oImxvZyIpJiZnbG9iYWwubmF0aXZlTG9nKC4uLmJjKGcpLCJfX0xPRyIpfSxpbmZvOiguLi5nKT0+e0tuKCJpbmZvIikmJmdsb2JhbC5uYXRpdmVMb2coLi4uYmMoZyksIl9fSU5GTyIpfSx3YXJuOiguLi5nKT0+e0tuKCJ3YXJuIikmJmdsb2JhbC5uYXRpdmVMb2coLi4uYmMoZyksIl9fV0FSTiIpfSxlcnJvcjooLi4uZyk9PntLbigiZXJyb3IiKSYmZ2xvYmFsLm5hdGl2ZUxvZyguLi5iYyhnKSwiX19FUlJPUiIpfX07ZWxzZXtsZXR7ZGVidWc6Zyxsb2c6cyxpbmZvOnAsd2Fybjp3LGVycm9yOmt9PWNvbnNvbGU7Y29uc29sZS5fX29yaV9fPXtkZWJ1ZzpnLGxvZzpzLGluZm86cCx3YXJuOncsZXJyb3I6a30sY29uc29sZS5kZWJ1Zz0oLi4uUyk9PntLbigiZGVidWciKSYmY29uc29sZS5fX29yaV9fLmRlYnVnLmFwcGx5KGNvbnNvbGUsUyl9LGNvbnNvbGUubG9nPSguLi5TKT0+e0tuKCJsb2ciKSYmY29uc29sZS5fX29yaV9fLmxvZy5hcHBseShjb25zb2xlLFMpfSxjb25zb2xlLmluZm89KC4uLlMpPT57S24oImluZm8iKSYmY29uc29sZS5fX29yaV9fLmluZm8uYXBwbHkoY29uc29sZSxTKX0sY29uc29sZS53YXJuPSguLi5TKT0+e0tuKCJ3YXJuIikmJmNvbnNvbGUuX19vcmlfXy53YXJuLmFwcGx5KGNvbnNvbGUsUyl9LGNvbnNvbGUuZXJyb3I9KC4uLlMpPT57S24oImVycm9yIikmJmNvbnNvbGUuX19vcmlfXy5lcnJvci5hcHBseShjb25zb2xlLFMpfX19ZnVuY3Rpb24gYmMoZyl7cmV0dXJuIGcubWFwKHM9PntpZihGYShzKS50b0xvd2VyQ2FzZSgpPT09IltvYmplY3Qgb2JqZWN0XSIpdHJ5e3M9SlNPTi5zdHJpbmdpZnkocyl9Y2F0Y2godyl7cz0iW29iamVjdCBvYmplY3RdIn1lbHNlIHM9U3RyaW5nKHMpO3JldHVybiBzfSl9TXYoKTtWZigpO30pKCk7Cg==
|