3N2rk3yzChsJp4wCS5VLo5Q3ifLmDChfbzQ · data · qwer?main.e3350ff4d88d534234ef.js?4?0?0
{
"qwer?main.e3350ff4d88d534234ef.js?4?0?0": "base64:KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1sxXSx7MDpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oInpVbmIiKX0sbXJTRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24ucihlKSxuLmQoZSwiX19leHRlbmRzIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQoZSwiX19hc3NpZ24iLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZChlLCJfX3Jlc3QiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZChlLCJfX2RlY29yYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdX0pKSxuLmQoZSwiX19wYXJhbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSksbi5kKGUsIl9fbWV0YWRhdGEiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZChlLCJfX2F3YWl0ZXIiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZChlLCJfX2dlbmVyYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKGUsIl9fZXhwb3J0U3RhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKGUsIl9fdmFsdWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQoZSwiX19yZWFkIiwoZnVuY3Rpb24oKXtyZXR1cm4gZH0pKSxuLmQoZSwiX19zcHJlYWQiLChmdW5jdGlvbigpe3JldHVybiBnfSkpLG4uZChlLCJfX3NwcmVhZEFycmF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSksbi5kKGUsIl9fYXdhaXQiLChmdW5jdGlvbigpe3JldHVybiB5fSkpLG4uZChlLCJfX2FzeW5jR2VuZXJhdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gbX0pKSxuLmQoZSwiX19hc3luY0RlbGVnYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIF99KSksbi5kKGUsIl9fYXN5bmNWYWx1ZXMiLChmdW5jdGlvbigpe3JldHVybiB3fSkpLG4uZChlLCJfX21ha2VUZW1wbGF0ZU9iamVjdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSksbi5kKGUsIl9faW1wb3J0U3RhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSksbi5kKGUsIl9faW1wb3J0RGVmYXVsdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSk7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4ocj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX0pKHQsZSl9O2Z1bmN0aW9uIG8odCxlKXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXIodCxlKSx0LnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUpOihuLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgbil9dmFyIGk9ZnVuY3Rpb24oKXtyZXR1cm4oaT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgbyBpbiBlPWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxvKSYmKHRbb109ZVtvXSk7cmV0dXJuIHR9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGEodCxlKXt2YXIgbj17fTtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmZS5pbmRleE9mKHIpPDAmJihuW3JdPXRbcl0pO2lmKG51bGwhPXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7bzxyLmxlbmd0aDtvKyspZS5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0LHJbb10pJiYobltyW29dXT10W3Jbb11dKX1yZXR1cm4gbn1mdW5jdGlvbiB1KHQsZSxuLHIpe3ZhciBvLGk9YXJndW1lbnRzLmxlbmd0aCxhPWk8Mz9lOm51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG4pOnI7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlhPVJlZmxlY3QuZGVjb3JhdGUodCxlLG4scik7ZWxzZSBmb3IodmFyIHU9dC5sZW5ndGgtMTt1Pj0wO3UtLSkobz10W3VdKSYmKGE9KGk8Mz9vKGEpOmk+Mz9vKGUsbixhKTpvKGUsbikpfHxhKTtyZXR1cm4gaT4zJiZhJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLGEpLGF9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe2UobixyLHQpfX1mdW5jdGlvbiBzKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YSh0LGUpfWZ1bmN0aW9uIGModCxlLG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKG8saSl7ZnVuY3Rpb24gYSh0KXt0cnl7bChyLm5leHQodCkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHUodCl7dHJ5e2woci50aHJvdyh0KSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gbCh0KXt0LmRvbmU/byh0LnZhbHVlKTpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0LnZhbHVlKX0pKS50aGVuKGEsdSl9bCgocj1yLmFwcGx5KHQsZXx8W10pKS5uZXh0KCkpfSkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgbixyLG8saSxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBpPXtuZXh0OnUoMCksdGhyb3c6dSgxKSxyZXR1cm46dSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiB1KGkpe3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gZnVuY3Rpb24oaSl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDthOyl0cnl7aWYobj0xLHImJihvPTImaVswXT9yLnJldHVybjppWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsaVsxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYoaT1bMiZpWzBdLG8udmFsdWVdKSxpWzBdKXtjYXNlIDA6Y2FzZSAxOm89aTticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6aVsxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9aVsxXSxpPVswXTtjb250aW51ZTtjYXNlIDc6aT1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKG89KG89YS50cnlzKS5sZW5ndGg+MCYmb1tvLmxlbmd0aC0xXSkmJig2PT09aVswXXx8Mj09PWlbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWlbMF0mJighb3x8aVsxXT5vWzBdJiZpWzFdPG9bM10pKXthLmxhYmVsPWlbMV07YnJlYWt9aWYoNj09PWlbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89aTticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGkpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1pPWUuY2FsbCh0LGEpfWNhdGNoKHUpe2k9WzYsdV0scj0wfWZpbmFsbHl7bj1vPTB9aWYoNSZpWzBdKXRocm93IGlbMV07cmV0dXJue3ZhbHVlOmlbMF0/aVsxXTp2b2lkIDAsZG9uZTohMH19KFtpLHVdKX19fWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX1mdW5jdGlvbiBwKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXSxuPTA7cmV0dXJuIGU/ZS5jYWxsKHQpOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHQmJm4+PXQubGVuZ3RoJiYodD12b2lkIDApLHt2YWx1ZTp0JiZ0W24rK10sZG9uZTohdH19fX1mdW5jdGlvbiBkKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiB0O3ZhciByLG8saT1uLmNhbGwodCksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09ZXx8ZS0tID4wKSYmIShyPWkubmV4dCgpKS5kb25lOylhLnB1c2goci52YWx1ZSl9Y2F0Y2godSl7bz17ZXJyb3I6dX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBhfWZ1bmN0aW9uIGcoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdD10LmNvbmNhdChkKGFyZ3VtZW50c1tlXSkpO3JldHVybiB0fWZ1bmN0aW9uIHYoKXtmb3IodmFyIHQ9MCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoO2U8bjtlKyspdCs9YXJndW1lbnRzW2VdLmxlbmd0aDt2YXIgcj1BcnJheSh0KSxvPTA7Zm9yKGU9MDtlPG47ZSsrKWZvcih2YXIgaT1hcmd1bWVudHNbZV0sYT0wLHU9aS5sZW5ndGg7YTx1O2ErKyxvKyspcltvXT1pW2FdO3JldHVybiByfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB5Pyh0aGlzLnY9dCx0aGlzKTpuZXcgeSh0KX1mdW5jdGlvbiBtKHQsZSxuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIHIsbz1uLmFwcGx5KHQsZXx8W10pLGk9W107cmV0dXJuIHI9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIikscltTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scjtmdW5jdGlvbiBhKHQpe29bdF0mJihyW3RdPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXtpLnB1c2goW3QsZSxuLHJdKT4xfHx1KHQsZSl9KSl9KX1mdW5jdGlvbiB1KHQsZSl7dHJ5eyhuPW9bdF0oZSkpLnZhbHVlIGluc3RhbmNlb2YgeT9Qcm9taXNlLnJlc29sdmUobi52YWx1ZS52KS50aGVuKGwscyk6YyhpWzBdWzJdLG4pfWNhdGNoKHIpe2MoaVswXVszXSxyKX12YXIgbn1mdW5jdGlvbiBsKHQpe3UoIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7dSgidGhyb3ciLHQpfWZ1bmN0aW9uIGModCxlKXt0KGUpLGkuc2hpZnQoKSxpLmxlbmd0aCYmdShpWzBdWzBdLGlbMF1bMV0pfX1mdW5jdGlvbiBfKHQpe3ZhciBlLG47cmV0dXJuIGU9e30scigibmV4dCIpLHIoInRocm93IiwoZnVuY3Rpb24odCl7dGhyb3cgdH0pKSxyKCJyZXR1cm4iKSxlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZTtmdW5jdGlvbiByKHIsbyl7ZVtyXT10W3JdP2Z1bmN0aW9uKGUpe3JldHVybihuPSFuKT97dmFsdWU6eSh0W3JdKGUpKSxkb25lOiJyZXR1cm4iPT09cn06bz9vKGUpOmV9Om99fWZ1bmN0aW9uIHcodCl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBlLG49dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIG4/bi5jYWxsKHQpOih0PXAodCksZT17fSxyKCJuZXh0IikscigidGhyb3ciKSxyKCJyZXR1cm4iKSxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlKTtmdW5jdGlvbiByKG4pe2Vbbl09dFtuXSYmZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8peyFmdW5jdGlvbih0LGUsbixyKXtQcm9taXNlLnJlc29sdmUocikudGhlbigoZnVuY3Rpb24oZSl7dCh7dmFsdWU6ZSxkb25lOm59KX0pLGUpfShyLG8sKGU9dFtuXShlKSkuZG9uZSxlLnZhbHVlKX0pKX19fWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyYXciLHt2YWx1ZTplfSk6dC5yYXc9ZSx0fWZ1bmN0aW9uIHgodCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKG51bGwhPXQpZm9yKHZhciBuIGluIHQpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGUuZGVmYXVsdD10LGV9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19fSx6VW5iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5yKGUpO3ZhciByPW4oIm1yU0ciKSxvPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RofTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGEodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gRXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9dD90Lmxlbmd0aCsiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4iK3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBlKzErIikgIit0LnRvU3RyaW5nKCl9KSkuam9pbigiXG4gICIpOiIiLHRoaXMubmFtZT0iVW5zdWJzY3JpcHRpb25FcnJvciIsdGhpcy5lcnJvcnM9dCx0aGlzfXUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTt2YXIgbD11LHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2xvc2VkPSExLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGwsdCYmKHRoaXMuX3Vuc3Vic2NyaWJlPXQpfXJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0LGU9ITE7aWYoIXRoaXMuY2xvc2VkKXt2YXIgbj10aGlzLl9wYXJlbnQscj10aGlzLl9wYXJlbnRzLHU9dGhpcy5fdW5zdWJzY3JpYmUscz10aGlzLl9zdWJzY3JpcHRpb25zO3RoaXMuY2xvc2VkPSEwLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGw7Zm9yKHZhciBmPS0xLGg9cj9yLmxlbmd0aDowO247KW4ucmVtb3ZlKHRoaXMpLG49KytmPGgmJnJbZl18fG51bGw7aWYoYSh1KSl0cnl7dS5jYWxsKHRoaXMpfWNhdGNoKGQpe2U9ITAsdD1kIGluc3RhbmNlb2YgbD9jKGQuZXJyb3JzKTpbZF19aWYobyhzKSlmb3IoZj0tMSxoPXMubGVuZ3RoOysrZjxoOyl7dmFyIHA9c1tmXTtpZihpKHApKXRyeXtwLnVuc3Vic2NyaWJlKCl9Y2F0Y2goZCl7ZT0hMCx0PXR8fFtdLGQgaW5zdGFuY2VvZiBsP3Q9dC5jb25jYXQoYyhkLmVycm9ycykpOnQucHVzaChkKX19aWYoZSl0aHJvdyBuZXcgbCh0KX19LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt2YXIgbj1lO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJmdW5jdGlvbiI6bj1uZXcgdChlKTtjYXNlIm9iamVjdCI6aWYobj09PXRoaXN8fG4uY2xvc2VkfHwiZnVuY3Rpb24iIT10eXBlb2Ygbi51bnN1YnNjcmliZSlyZXR1cm4gbjtpZih0aGlzLmNsb3NlZClyZXR1cm4gbi51bnN1YnNjcmliZSgpLG47aWYoIShuIGluc3RhbmNlb2YgdCkpe3ZhciByPW47KG49bmV3IHQpLl9zdWJzY3JpcHRpb25zPVtyXX1icmVhaztkZWZhdWx0OmlmKCFlKXJldHVybiB0LkVNUFRZO3Rocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHRlYXJkb3duICIrZSsiIGFkZGVkIHRvIFN1YnNjcmlwdGlvbi4iKX1pZihuLl9hZGRQYXJlbnQodGhpcykpe3ZhciBvPXRoaXMuX3N1YnNjcmlwdGlvbnM7bz9vLnB1c2gobik6dGhpcy5fc3Vic2NyaXB0aW9ucz1bbl19cmV0dXJuIG59LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdWJzY3JpcHRpb25zO2lmKGUpe3ZhciBuPWUuaW5kZXhPZih0KTstMSE9PW4mJmUuc3BsaWNlKG4sMSl9fSx0LnByb3RvdHlwZS5fYWRkUGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BhcmVudCxuPXRoaXMuX3BhcmVudHM7cmV0dXJuIGUhPT10JiYoZT9uPy0xPT09bi5pbmRleE9mKHQpJiYobi5wdXNoKHQpLCEwKToodGhpcy5fcGFyZW50cz1bdF0sITApOih0aGlzLl9wYXJlbnQ9dCwhMCkpfSx0LkVNUFRZPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlZD0hMCx0fShuZXcgdCksdH0oKTtmdW5jdGlvbiBjKHQpe3JldHVybiB0LnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoZSBpbnN0YW5jZW9mIGw/ZS5lcnJvcnM6ZSl9KSxbXSl9dmFyIGY9ITEsaD17UHJvbWlzZTp2b2lkIDAsc2V0IHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcodCl7Zj10fSxnZXQgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZygpe3JldHVybiBmfX07ZnVuY3Rpb24gcCh0KXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IHR9KSl9dmFyIGQ9e2Nsb3NlZDohMCxuZXh0OmZ1bmN0aW9uKHQpe30sZXJyb3I6ZnVuY3Rpb24odCl7aWYoaC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IHQ7cCh0KX0sY29tcGxldGU6ZnVuY3Rpb24oKXt9fSxnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sKCJyeFN1YnNjcmliZXIiKToiQEByeFN1YnNjcmliZXJfIitNYXRoLnJhbmRvbSgpLHY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLHIsbyl7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3N3aXRjaChpLnN5bmNFcnJvclZhbHVlPW51bGwsaS5zeW5jRXJyb3JUaHJvd249ITEsaS5zeW5jRXJyb3JUaHJvd2FibGU9ITEsaS5pc1N0b3BwZWQ9ITEsYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmkuZGVzdGluYXRpb249ZDticmVhaztjYXNlIDE6aWYoIW4pe2kuZGVzdGluYXRpb249ZDticmVha31pZigib2JqZWN0Ij09dHlwZW9mIG4pe24gaW5zdGFuY2VvZiBlPyhpLnN5bmNFcnJvclRocm93YWJsZT1uLnN5bmNFcnJvclRocm93YWJsZSxpLmRlc3RpbmF0aW9uPW4sbi5hZGQoaSkpOihpLnN5bmNFcnJvclRocm93YWJsZT0hMCxpLmRlc3RpbmF0aW9uPW5ldyB5KGksbikpO2JyZWFrfWRlZmF1bHQ6aS5zeW5jRXJyb3JUaHJvd2FibGU9ITAsaS5kZXN0aW5hdGlvbj1uZXcgeShpLG4scixvKX1yZXR1cm4gaX1yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZVtnXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmNyZWF0ZT1mdW5jdGlvbih0LG4scil7dmFyIG89bmV3IGUodCxuLHIpO3JldHVybiBvLnN5bmNFcnJvclRocm93YWJsZT0hMSxvfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHx0aGlzLl9uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Vycm9yKHQpKX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFyZW50LGU9dGhpcy5fcGFyZW50cztyZXR1cm4gdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMudW5zdWJzY3JpYmUoKSx0aGlzLmNsb3NlZD0hMSx0aGlzLmlzU3RvcHBlZD0hMSx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9wYXJlbnRzPWUsdGhpc30sZX0ocykseT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLG8pe3ZhciBpLHU9dC5jYWxsKHRoaXMpfHx0aGlzO3UuX3BhcmVudFN1YnNjcmliZXI9ZTt2YXIgbD11O3JldHVybiBhKG4pP2k9bjpuJiYoaT1uLm5leHQscj1uLmVycm9yLG89bi5jb21wbGV0ZSxuIT09ZCYmKGEoKGw9T2JqZWN0LmNyZWF0ZShuKSkudW5zdWJzY3JpYmUpJiZ1LmFkZChsLnVuc3Vic2NyaWJlLmJpbmQobCkpLGwudW5zdWJzY3JpYmU9dS51bnN1YnNjcmliZS5iaW5kKHUpKSksdS5fY29udGV4dD1sLHUuX25leHQ9aSx1Ll9lcnJvcj1yLHUuX2NvbXBsZXRlPW8sdX1yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCYmdGhpcy5fbmV4dCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjtoLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJmUuc3luY0Vycm9yVGhyb3dhYmxlP3RoaXMuX190cnlPclNldEVycm9yKGUsdGhpcy5fbmV4dCx0KSYmdGhpcy51bnN1YnNjcmliZSgpOnRoaXMuX190cnlPclVuc3ViKHRoaXMuX25leHQsdCl9fSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtpZighdGhpcy5pc1N0b3BwZWQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXIsbj1oLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc7aWYodGhpcy5fZXJyb3IpbiYmZS5zeW5jRXJyb3JUaHJvd2FibGU/KHRoaXMuX190cnlPclNldEVycm9yKGUsdGhpcy5fZXJyb3IsdCksdGhpcy51bnN1YnNjcmliZSgpKToodGhpcy5fX3RyeU9yVW5zdWIodGhpcy5fZXJyb3IsdCksdGhpcy51bnN1YnNjcmliZSgpKTtlbHNlIGlmKGUuc3luY0Vycm9yVGhyb3dhYmxlKW4/KGUuc3luY0Vycm9yVmFsdWU9dCxlLnN5bmNFcnJvclRocm93bj0hMCk6cCh0KSx0aGlzLnVuc3Vic2NyaWJlKCk7ZWxzZXtpZih0aGlzLnVuc3Vic2NyaWJlKCksbil0aHJvdyB0O3AodCl9fX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjtpZih0aGlzLl9jb21wbGV0ZSl7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gdC5fY29tcGxldGUuY2FsbCh0Ll9jb250ZXh0KX07aC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZlLnN5bmNFcnJvclRocm93YWJsZT8odGhpcy5fX3RyeU9yU2V0RXJyb3IoZSxuKSx0aGlzLnVuc3Vic2NyaWJlKCkpOih0aGlzLl9fdHJ5T3JVbnN1YihuKSx0aGlzLnVuc3Vic2NyaWJlKCkpfWVsc2UgdGhpcy51bnN1YnNjcmliZSgpfX0sZS5wcm90b3R5cGUuX190cnlPclVuc3ViPWZ1bmN0aW9uKHQsZSl7dHJ5e3QuY2FsbCh0aGlzLl9jb250ZXh0LGUpfWNhdGNoKG4pe2lmKHRoaXMudW5zdWJzY3JpYmUoKSxoLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgbjtwKG4pfX0sZS5wcm90b3R5cGUuX190cnlPclNldEVycm9yPWZ1bmN0aW9uKHQsZSxuKXtpZighaC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IG5ldyBFcnJvcigiYmFkIGNhbGwiKTt0cnl7ZS5jYWxsKHRoaXMuX2NvbnRleHQsbil9Y2F0Y2gocil7cmV0dXJuIGgudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZz8odC5zeW5jRXJyb3JWYWx1ZT1yLHQuc3luY0Vycm9yVGhyb3duPSEwLCEwKToocChyKSwhMCl9cmV0dXJuITF9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhcmVudFN1YnNjcmliZXI7dGhpcy5fY29udGV4dD1udWxsLHRoaXMuX3BhcmVudFN1YnNjcmliZXI9bnVsbCx0LnVuc3Vic2NyaWJlKCl9LGV9KHYpLG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLm9ic2VydmFibGV8fCJAQG9ic2VydmFibGUiO2Z1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gdygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gYih0KX1mdW5jdGlvbiBiKHQpe3JldHVybiB0PzE9PT10Lmxlbmd0aD90WzBdOmZ1bmN0aW9uKGUpe3JldHVybiB0LnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSh0KX0pLGUpfTpffXZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9pc1NjYWxhcj0hMSx0JiYodGhpcy5fc3Vic2NyaWJlPXQpfXJldHVybiB0LnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0O3JldHVybiBuLnNvdXJjZT10aGlzLG4ub3BlcmF0b3I9ZSxufSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMub3BlcmF0b3Isbz1mdW5jdGlvbih0LGUsbil7aWYodCl7aWYodCBpbnN0YW5jZW9mIHYpcmV0dXJuIHQ7aWYodFtnXSlyZXR1cm4gdFtnXSgpfXJldHVybiB0fHxlfHxuP25ldyB2KHQsZSxuKTpuZXcgdihkKX0odCxlLG4pO2lmKG8uYWRkKHI/ci5jYWxsKG8sdGhpcy5zb3VyY2UpOnRoaXMuc291cmNlfHxoLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJiFvLnN5bmNFcnJvclRocm93YWJsZT90aGlzLl9zdWJzY3JpYmUobyk6dGhpcy5fdHJ5U3Vic2NyaWJlKG8pKSxoLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJm8uc3luY0Vycm9yVGhyb3dhYmxlJiYoby5zeW5jRXJyb3JUaHJvd2FibGU9ITEsby5zeW5jRXJyb3JUaHJvd24pKXRocm93IG8uc3luY0Vycm9yVmFsdWU7cmV0dXJuIG99LHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUodCl9Y2F0Y2goZSl7aC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiYodC5zeW5jRXJyb3JUaHJvd249ITAsdC5zeW5jRXJyb3JWYWx1ZT1lKSxmdW5jdGlvbih0KXtmb3IoO3Q7KXt2YXIgZT10LmRlc3RpbmF0aW9uO2lmKHQuY2xvc2VkfHx0LmlzU3RvcHBlZClyZXR1cm4hMTt0PWUmJmUgaW5zdGFuY2VvZiB2P2U6bnVsbH1yZXR1cm4hMH0odCk/dC5lcnJvcihlKTpjb25zb2xlLndhcm4oZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3KGU9QyhlKSkoKGZ1bmN0aW9uKGUscil7dmFyIG87bz1uLnN1YnNjcmliZSgoZnVuY3Rpb24oZSl7dHJ5e3QoZSl9Y2F0Y2gobil7cihuKSxvJiZvLnVuc3Vic2NyaWJlKCl9fSkscixlKX0pKX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNvdXJjZTtyZXR1cm4gZSYmZS5zdWJzY3JpYmUodCl9LHQucHJvdG90eXBlW21dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIDA9PT10Lmxlbmd0aD90aGlzOmIodCkodGhpcyl9LHQucHJvdG90eXBlLnRvUHJvbWlzZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBuZXcodD1DKHQpKSgoZnVuY3Rpb24odCxuKXt2YXIgcjtlLnN1YnNjcmliZSgoZnVuY3Rpb24odCl7cmV0dXJuIHI9dH0pLChmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0pLChmdW5jdGlvbigpe3JldHVybiB0KHIpfSkpfSkpfSx0LmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHR9KCk7ZnVuY3Rpb24gQyh0KXtpZih0fHwodD1oLlByb21pc2V8fFByb21pc2UpLCF0KXRocm93IG5ldyBFcnJvcigibm8gUHJvbWlzZSBpbXBsIGZvdW5kIik7cmV0dXJuIHR9ZnVuY3Rpb24gUygpe3JldHVybiBFcnJvci5jYWxsKHRoaXMpLHRoaXMubWVzc2FnZT0ib2JqZWN0IHVuc3Vic2NyaWJlZCIsdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpc31TLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7dmFyIEU9UyxPPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuc3ViamVjdD1lLHIuc3Vic2NyaWJlcj1uLHIuY2xvc2VkPSExLHJ9cmV0dXJuIHIuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXtpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO3ZhciB0PXRoaXMuc3ViamVjdCxlPXQub2JzZXJ2ZXJzO2lmKHRoaXMuc3ViamVjdD1udWxsLGUmJjAhPT1lLmxlbmd0aCYmIXQuaXNTdG9wcGVkJiYhdC5jbG9zZWQpe3ZhciBuPWUuaW5kZXhPZih0aGlzLnN1YnNjcmliZXIpOy0xIT09biYmZS5zcGxpY2UobiwxKX19fSxlfShzKSxUPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4uZGVzdGluYXRpb249ZSxufXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGV9KHYpLFA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5vYnNlcnZlcnM9W10sZS5jbG9zZWQ9ITEsZS5pc1N0b3BwZWQ9ITEsZS5oYXNFcnJvcj0hMSxlLnRocm93bkVycm9yPW51bGwsZX1yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZVtnXT1mdW5jdGlvbigpe3JldHVybiBuZXcgVCh0aGlzKX0sZS5wcm90b3R5cGUubGlmdD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgayh0aGlzLHRoaXMpO3JldHVybiBlLm9wZXJhdG9yPXQsZX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRTtpZighdGhpcy5pc1N0b3BwZWQpZm9yKHZhciBlPXRoaXMub2JzZXJ2ZXJzLG49ZS5sZW5ndGgscj1lLnNsaWNlKCksbz0wO288bjtvKyspcltvXS5uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRTt0aGlzLmhhc0Vycm9yPSEwLHRoaXMudGhyb3duRXJyb3I9dCx0aGlzLmlzU3RvcHBlZD0hMDtmb3IodmFyIGU9dGhpcy5vYnNlcnZlcnMsbj1lLmxlbmd0aCxyPWUuc2xpY2UoKSxvPTA7bzxuO28rKylyW29dLmVycm9yKHQpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFO3RoaXMuaXNTdG9wcGVkPSEwO2Zvcih2YXIgdD10aGlzLm9ic2VydmVycyxlPXQubGVuZ3RoLG49dC5zbGljZSgpLHI9MDtyPGU7cisrKW5bcl0uY29tcGxldGUoKTt0aGlzLm9ic2VydmVycy5sZW5ndGg9MH0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz1udWxsfSxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFO3JldHVybiB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRTtyZXR1cm4gdGhpcy5oYXNFcnJvcj8odC5lcnJvcih0aGlzLnRocm93bkVycm9yKSxzLkVNUFRZKTp0aGlzLmlzU3RvcHBlZD8odC5jb21wbGV0ZSgpLHMuRU1QVFkpOih0aGlzLm9ic2VydmVycy5wdXNoKHQpLG5ldyBPKHRoaXMsdCkpfSxlLnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgeDtyZXR1cm4gdC5zb3VyY2U9dGhpcyx0fSxlLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgayh0LGUpfSxlfSh4KSxrPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuZGVzdGluYXRpb249ZSxyLnNvdXJjZT1uLHJ9cmV0dXJuIHIuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlc3RpbmF0aW9uO2UmJmUubmV4dCYmZS5uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlc3RpbmF0aW9uO2UmJmUuZXJyb3ImJnRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kZXN0aW5hdGlvbjt0JiZ0LmNvbXBsZXRlJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlP3RoaXMuc291cmNlLnN1YnNjcmliZSh0KTpzLkVNUFRZfSxlfShQKTtmdW5jdGlvbiBBKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zY2hlZHVsZX12YXIgST1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG8ucGFyZW50PWUsby5vdXRlclZhbHVlPW4sby5vdXRlckluZGV4PXIsby5pbmRleD0wLG99cmV0dXJuIHIuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5TmV4dCh0aGlzLm91dGVyVmFsdWUsdCx0aGlzLm91dGVySW5kZXgsdGhpcy5pbmRleCsrLHRoaXMpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5RXJyb3IodCx0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMucGFyZW50Lm5vdGlmeUNvbXBsZXRlKHRoaXMpLHRoaXMudW5zdWJzY3JpYmUoKX0sZX0odiksUj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHImJiFlLmNsb3NlZDtuKyspZS5uZXh0KHRbbl0pO2UuY2xvc2VkfHxlLmNvbXBsZXRlKCl9fSxNPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC50aGVuKChmdW5jdGlvbih0KXtlLmNsb3NlZHx8KGUubmV4dCh0KSxlLmNvbXBsZXRlKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBlLmVycm9yKHQpfSkpLnRoZW4obnVsbCxwKSxlfX07ZnVuY3Rpb24gaigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcj9TeW1ib2wuaXRlcmF0b3I6IkBAaXRlcmF0b3IifXZhciBOPWooKSxEPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49dFtOXSgpOzspe3ZhciByPW4ubmV4dCgpO2lmKHIuZG9uZSl7ZS5jb21wbGV0ZSgpO2JyZWFrfWlmKGUubmV4dChyLnZhbHVlKSxlLmNsb3NlZClicmVha31yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbi5yZXR1cm4mJmUuYWRkKChmdW5jdGlvbigpe24ucmV0dXJuJiZuLnJldHVybigpfSkpLGV9fSxVPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10W21dKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4uc3Vic2NyaWJlKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIik7cmV0dXJuIG4uc3Vic2NyaWJlKGUpfX0sTD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR9O2Z1bmN0aW9uIFYodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iIT10eXBlb2YgdC5zdWJzY3JpYmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59dmFyIEg9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIHgpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9pc1NjYWxhcj8oZS5uZXh0KHQudmFsdWUpLHZvaWQgZS5jb21wbGV0ZSgpKTp0LnN1YnNjcmliZShlKX07aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbbV0pcmV0dXJuIFUodCk7aWYoTCh0KSlyZXR1cm4gUih0KTtpZihWKHQpKXJldHVybiBNKHQpO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W05dKXJldHVybiBEKHQpO3ZhciBlPWkodCk/ImFuIGludmFsaWQgb2JqZWN0IjoiJyIrdCsiJyI7dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIrZSsiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIEFycmF5LCBvciBJdGVyYWJsZS4iKX07ZnVuY3Rpb24geih0LGUsbixyLG8pe2lmKHZvaWQgMD09PW8mJihvPW5ldyBJKHQsbixyKSksIW8uY2xvc2VkKXJldHVybiBIKGUpKG8pfXZhciBGPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixvKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGUucHJvdG90eXBlLm5vdGlmeUVycm9yPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfSh2KTtmdW5jdGlvbiBCKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IGlzIG5vdCBhIGZ1bmN0aW9uLiBBcmUgeW91IGxvb2tpbmcgZm9yIGBtYXBUbygpYD8iKTtyZXR1cm4gbi5saWZ0KG5ldyBaKHQsZSkpfX12YXIgWj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnByb2plY3Q9dCx0aGlzLnRoaXNBcmc9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgRyh0LHRoaXMucHJvamVjdCx0aGlzLnRoaXNBcmcpKX0sdH0oKSxHPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLnByb2plY3Q9bixvLmNvdW50PTAsby50aGlzQXJnPXJ8fG8sb31yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnByb2plY3QuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKG4pe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iobil9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlfSh2KTtmdW5jdGlvbiBxKHQsZSl7cmV0dXJuIG5ldyB4KGU/ZnVuY3Rpb24obil7dmFyIHI9bmV3IHMsbz0wO3JldHVybiByLmFkZChlLnNjaGVkdWxlKChmdW5jdGlvbigpe28hPT10Lmxlbmd0aD8obi5uZXh0KHRbbysrXSksbi5jbG9zZWR8fHIuYWRkKHRoaXMuc2NoZWR1bGUoKSkpOm4uY29tcGxldGUoKX0pKSkscn06Uih0KSl9ZnVuY3Rpb24gVyh0LGUpe2lmKCFlKXJldHVybiB0IGluc3RhbmNlb2YgeD90Om5ldyB4KEgodCkpO2lmKG51bGwhPXQpe2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFttXX0odCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB4KGU/ZnVuY3Rpb24obil7dmFyIHI9bmV3IHM7cmV0dXJuIHIuYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7dmFyIG89dFttXSgpO3IuYWRkKG8uc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4ubmV4dCh0KX0pKSl9LGVycm9yOmZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZXJyb3IodCl9KSkpfSxjb21wbGV0ZTpmdW5jdGlvbigpe3IuYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY29tcGxldGUoKX0pKSl9fSkpfSkpKSxyfTpVKHQpKX0odCxlKTtpZihWKHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgeChlP2Z1bmN0aW9uKA=="
}
Changelog:
{
"2019.12.04 14:30": "base64:KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1sxXSx7MDpmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPW4oInpVbmIiKX0sbXJTRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24ucihlKSxuLmQoZSwiX19leHRlbmRzIiwoZnVuY3Rpb24oKXtyZXR1cm4gb30pKSxuLmQoZSwiX19hc3NpZ24iLChmdW5jdGlvbigpe3JldHVybiBpfSkpLG4uZChlLCJfX3Jlc3QiLChmdW5jdGlvbigpe3JldHVybiBhfSkpLG4uZChlLCJfX2RlY29yYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdX0pKSxuLmQoZSwiX19wYXJhbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSksbi5kKGUsIl9fbWV0YWRhdGEiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZChlLCJfX2F3YWl0ZXIiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZChlLCJfX2dlbmVyYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKGUsIl9fZXhwb3J0U3RhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSksbi5kKGUsIl9fdmFsdWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQoZSwiX19yZWFkIiwoZnVuY3Rpb24oKXtyZXR1cm4gZH0pKSxuLmQoZSwiX19zcHJlYWQiLChmdW5jdGlvbigpe3JldHVybiBnfSkpLG4uZChlLCJfX3NwcmVhZEFycmF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSksbi5kKGUsIl9fYXdhaXQiLChmdW5jdGlvbigpe3JldHVybiB5fSkpLG4uZChlLCJfX2FzeW5jR2VuZXJhdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gbX0pKSxuLmQoZSwiX19hc3luY0RlbGVnYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIF99KSksbi5kKGUsIl9fYXN5bmNWYWx1ZXMiLChmdW5jdGlvbigpe3JldHVybiB3fSkpLG4uZChlLCJfX21ha2VUZW1wbGF0ZU9iamVjdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSksbi5kKGUsIl9faW1wb3J0U3RhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSksbi5kKGUsIl9faW1wb3J0RGVmYXVsdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSk7dmFyIHI9ZnVuY3Rpb24odCxlKXtyZXR1cm4ocj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX0pKHQsZSl9O2Z1bmN0aW9uIG8odCxlKXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXIodCxlKSx0LnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUpOihuLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgbil9dmFyIGk9ZnVuY3Rpb24oKXtyZXR1cm4oaT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgbyBpbiBlPWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxvKSYmKHRbb109ZVtvXSk7cmV0dXJuIHR9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIGEodCxlKXt2YXIgbj17fTtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmZS5pbmRleE9mKHIpPDAmJihuW3JdPXRbcl0pO2lmKG51bGwhPXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz0wO2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7bzxyLmxlbmd0aDtvKyspZS5pbmRleE9mKHJbb10pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0LHJbb10pJiYobltyW29dXT10W3Jbb11dKX1yZXR1cm4gbn1mdW5jdGlvbiB1KHQsZSxuLHIpe3ZhciBvLGk9YXJndW1lbnRzLmxlbmd0aCxhPWk8Mz9lOm51bGw9PT1yP3I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLG4pOnI7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlhPVJlZmxlY3QuZGVjb3JhdGUodCxlLG4scik7ZWxzZSBmb3IodmFyIHU9dC5sZW5ndGgtMTt1Pj0wO3UtLSkobz10W3VdKSYmKGE9KGk8Mz9vKGEpOmk+Mz9vKGUsbixhKTpvKGUsbikpfHxhKTtyZXR1cm4gaT4zJiZhJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLGEpLGF9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe2UobixyLHQpfX1mdW5jdGlvbiBzKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YSh0LGUpfWZ1bmN0aW9uIGModCxlLG4scil7cmV0dXJuIG5ldyhufHwobj1Qcm9taXNlKSkoKGZ1bmN0aW9uKG8saSl7ZnVuY3Rpb24gYSh0KXt0cnl7bChyLm5leHQodCkpfWNhdGNoKGUpe2koZSl9fWZ1bmN0aW9uIHUodCl7dHJ5e2woci50aHJvdyh0KSl9Y2F0Y2goZSl7aShlKX19ZnVuY3Rpb24gbCh0KXt0LmRvbmU/byh0LnZhbHVlKTpuZXcgbigoZnVuY3Rpb24oZSl7ZSh0LnZhbHVlKX0pKS50aGVuKGEsdSl9bCgocj1yLmFwcGx5KHQsZXx8W10pKS5uZXh0KCkpfSkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgbixyLG8saSxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBpPXtuZXh0OnUoMCksdGhyb3c6dSgxKSxyZXR1cm46dSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiB1KGkpe3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gZnVuY3Rpb24oaSl7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDthOyl0cnl7aWYobj0xLHImJihvPTImaVswXT9yLnJldHVybjppWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsaVsxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYoaT1bMiZpWzBdLG8udmFsdWVdKSxpWzBdKXtjYXNlIDA6Y2FzZSAxOm89aTticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6aVsxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9aVsxXSxpPVswXTtjb250aW51ZTtjYXNlIDc6aT1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKG89KG89YS50cnlzKS5sZW5ndGg+MCYmb1tvLmxlbmd0aC0xXSkmJig2PT09aVswXXx8Mj09PWlbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWlbMF0mJighb3x8aVsxXT5vWzBdJiZpWzFdPG9bM10pKXthLmxhYmVsPWlbMV07YnJlYWt9aWYoNj09PWlbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89aTticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGkpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1pPWUuY2FsbCh0LGEpfWNhdGNoKHUpe2k9WzYsdV0scj0wfWZpbmFsbHl7bj1vPTB9aWYoNSZpWzBdKXRocm93IGlbMV07cmV0dXJue3ZhbHVlOmlbMF0/aVsxXTp2b2lkIDAsZG9uZTohMH19KFtpLHVdKX19fWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX1mdW5jdGlvbiBwKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnRbU3ltYm9sLml0ZXJhdG9yXSxuPTA7cmV0dXJuIGU/ZS5jYWxsKHQpOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHQmJm4+PXQubGVuZ3RoJiYodD12b2lkIDApLHt2YWx1ZTp0JiZ0W24rK10sZG9uZTohdH19fX1mdW5jdGlvbiBkKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdO2lmKCFuKXJldHVybiB0O3ZhciByLG8saT1uLmNhbGwodCksYT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09ZXx8ZS0tID4wKSYmIShyPWkubmV4dCgpKS5kb25lOylhLnB1c2goci52YWx1ZSl9Y2F0Y2godSl7bz17ZXJyb3I6dX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKG49aS5yZXR1cm4pJiZuLmNhbGwoaSl9ZmluYWxseXtpZihvKXRocm93IG8uZXJyb3J9fXJldHVybiBhfWZ1bmN0aW9uIGcoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdD10LmNvbmNhdChkKGFyZ3VtZW50c1tlXSkpO3JldHVybiB0fWZ1bmN0aW9uIHYoKXtmb3IodmFyIHQ9MCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoO2U8bjtlKyspdCs9YXJndW1lbnRzW2VdLmxlbmd0aDt2YXIgcj1BcnJheSh0KSxvPTA7Zm9yKGU9MDtlPG47ZSsrKWZvcih2YXIgaT1hcmd1bWVudHNbZV0sYT0wLHU9aS5sZW5ndGg7YTx1O2ErKyxvKyspcltvXT1pW2FdO3JldHVybiByfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB5Pyh0aGlzLnY9dCx0aGlzKTpuZXcgeSh0KX1mdW5jdGlvbiBtKHQsZSxuKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIHIsbz1uLmFwcGx5KHQsZXx8W10pLGk9W107cmV0dXJuIHI9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIikscltTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scjtmdW5jdGlvbiBhKHQpe29bdF0mJihyW3RdPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXtpLnB1c2goW3QsZSxuLHJdKT4xfHx1KHQsZSl9KSl9KX1mdW5jdGlvbiB1KHQsZSl7dHJ5eyhuPW9bdF0oZSkpLnZhbHVlIGluc3RhbmNlb2YgeT9Qcm9taXNlLnJlc29sdmUobi52YWx1ZS52KS50aGVuKGwscyk6YyhpWzBdWzJdLG4pfWNhdGNoKHIpe2MoaVswXVszXSxyKX12YXIgbn1mdW5jdGlvbiBsKHQpe3UoIm5leHQiLHQpfWZ1bmN0aW9uIHModCl7dSgidGhyb3ciLHQpfWZ1bmN0aW9uIGModCxlKXt0KGUpLGkuc2hpZnQoKSxpLmxlbmd0aCYmdShpWzBdWzBdLGlbMF1bMV0pfX1mdW5jdGlvbiBfKHQpe3ZhciBlLG47cmV0dXJuIGU9e30scigibmV4dCIpLHIoInRocm93IiwoZnVuY3Rpb24odCl7dGhyb3cgdH0pKSxyKCJyZXR1cm4iKSxlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZTtmdW5jdGlvbiByKHIsbyl7ZVtyXT10W3JdP2Z1bmN0aW9uKGUpe3JldHVybihuPSFuKT97dmFsdWU6eSh0W3JdKGUpKSxkb25lOiJyZXR1cm4iPT09cn06bz9vKGUpOmV9Om99fWZ1bmN0aW9uIHcodCl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBlLG49dFtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIG4/bi5jYWxsKHQpOih0PXAodCksZT17fSxyKCJuZXh0IikscigidGhyb3ciKSxyKCJyZXR1cm4iKSxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlKTtmdW5jdGlvbiByKG4pe2Vbbl09dFtuXSYmZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG8peyFmdW5jdGlvbih0LGUsbixyKXtQcm9taXNlLnJlc29sdmUocikudGhlbigoZnVuY3Rpb24oZSl7dCh7dmFsdWU6ZSxkb25lOm59KX0pLGUpfShyLG8sKGU9dFtuXShlKSkuZG9uZSxlLnZhbHVlKX0pKX19fWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJyYXciLHt2YWx1ZTplfSk6dC5yYXc9ZSx0fWZ1bmN0aW9uIHgodCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBlPXt9O2lmKG51bGwhPXQpZm9yKHZhciBuIGluIHQpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmKGVbbl09dFtuXSk7cmV0dXJuIGUuZGVmYXVsdD10LGV9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19fSx6VW5iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5yKGUpO3ZhciByPW4oIm1yU0ciKSxvPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RofTtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGEodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gRXJyb3IuY2FsbCh0aGlzKSx0aGlzLm1lc3NhZ2U9dD90Lmxlbmd0aCsiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4iK3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBlKzErIikgIit0LnRvU3RyaW5nKCl9KSkuam9pbigiXG4gICIpOiIiLHRoaXMubmFtZT0iVW5zdWJzY3JpcHRpb25FcnJvciIsdGhpcy5lcnJvcnM9dCx0aGlzfXUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTt2YXIgbD11LHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2xvc2VkPSExLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGwsdCYmKHRoaXMuX3Vuc3Vic2NyaWJlPXQpfXJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0LGU9ITE7aWYoIXRoaXMuY2xvc2VkKXt2YXIgbj10aGlzLl9wYXJlbnQscj10aGlzLl9wYXJlbnRzLHU9dGhpcy5fdW5zdWJzY3JpYmUscz10aGlzLl9zdWJzY3JpcHRpb25zO3RoaXMuY2xvc2VkPSEwLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGw7Zm9yKHZhciBmPS0xLGg9cj9yLmxlbmd0aDowO247KW4ucmVtb3ZlKHRoaXMpLG49KytmPGgmJnJbZl18fG51bGw7aWYoYSh1KSl0cnl7dS5jYWxsKHRoaXMpfWNhdGNoKGQpe2U9ITAsdD1kIGluc3RhbmNlb2YgbD9jKGQuZXJyb3JzKTpbZF19aWYobyhzKSlmb3IoZj0tMSxoPXMubGVuZ3RoOysrZjxoOyl7dmFyIHA9c1tmXTtpZihpKHApKXRyeXtwLnVuc3Vic2NyaWJlKCl9Y2F0Y2goZCl7ZT0hMCx0PXR8fFtdLGQgaW5zdGFuY2VvZiBsP3Q9dC5jb25jYXQoYyhkLmVycm9ycykpOnQucHVzaChkKX19aWYoZSl0aHJvdyBuZXcgbCh0KX19LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt2YXIgbj1lO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJmdW5jdGlvbiI6bj1uZXcgdChlKTtjYXNlIm9iamVjdCI6aWYobj09PXRoaXN8fG4uY2xvc2VkfHwiZnVuY3Rpb24iIT10eXBlb2Ygbi51bnN1YnNjcmliZSlyZXR1cm4gbjtpZih0aGlzLmNsb3NlZClyZXR1cm4gbi51bnN1YnNjcmliZSgpLG47aWYoIShuIGluc3RhbmNlb2YgdCkpe3ZhciByPW47KG49bmV3IHQpLl9zdWJzY3JpcHRpb25zPVtyXX1icmVhaztkZWZhdWx0OmlmKCFlKXJldHVybiB0LkVNUFRZO3Rocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHRlYXJkb3duICIrZSsiIGFkZGVkIHRvIFN1YnNjcmlwdGlvbi4iKX1pZihuLl9hZGRQYXJlbnQodGhpcykpe3ZhciBvPXRoaXMuX3N1YnNjcmlwdGlvbnM7bz9vLnB1c2gobik6dGhpcy5fc3Vic2NyaXB0aW9ucz1bbl19cmV0dXJuIG59LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdWJzY3JpcHRpb25zO2lmKGUpe3ZhciBuPWUuaW5kZXhPZih0KTstMSE9PW4mJmUuc3BsaWNlKG4sMSl9fSx0LnByb3RvdHlwZS5fYWRkUGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BhcmVudCxuPXRoaXMuX3BhcmVudHM7cmV0dXJuIGUhPT10JiYoZT9uPy0xPT09bi5pbmRleE9mKHQpJiYobi5wdXNoKHQpLCEwKToodGhpcy5fcGFyZW50cz1bdF0sITApOih0aGlzLl9wYXJlbnQ9dCwhMCkpfSx0LkVNUFRZPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlZD0hMCx0fShuZXcgdCksdH0oKTtmdW5jdGlvbiBjKHQpe3JldHVybiB0LnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoZSBpbnN0YW5jZW9mIGw/ZS5lcnJvcnM6ZSl9KSxbXSl9dmFyIGY9ITEsaD17UHJvbWlzZTp2b2lkIDAsc2V0IHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcodCl7Zj10fSxnZXQgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZygpe3JldHVybiBmfX07ZnVuY3Rpb24gcCh0KXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IHR9KSl9dmFyIGQ9e2Nsb3NlZDohMCxuZXh0OmZ1bmN0aW9uKHQpe30sZXJyb3I6ZnVuY3Rpb24odCl7aWYoaC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IHQ7cCh0KX0sY29tcGxldGU6ZnVuY3Rpb24oKXt9fSxnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sKCJyeFN1YnNjcmliZXIiKToiQEByeFN1YnNjcmliZXJfIitNYXRoLnJhbmRvbSgpLHY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuLHIsbyl7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3N3aXRjaChpLnN5bmNFcnJvclZhbHVlPW51bGwsaS5zeW5jRXJyb3JUaHJvd249ITEsaS5zeW5jRXJyb3JUaHJvd2FibGU9ITEsaS5pc1N0b3BwZWQ9ITEsYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmkuZGVzdGluYXRpb249ZDticmVhaztjYXNlIDE6aWYoIW4pe2kuZGVzdGluYXRpb249ZDticmVha31pZigib2JqZWN0Ij09dHlwZW9mIG4pe24gaW5zdGFuY2VvZiBlPyhpLnN5bmNFcnJvclRocm93YWJsZT1uLnN5bmNFcnJvclRocm93YWJsZSxpLmRlc3RpbmF0aW9uPW4sbi5hZGQoaSkpOihpLnN5bmNFcnJvclRocm93YWJsZT0hMCxpLmRlc3RpbmF0aW9uPW5ldyB5KGksbikpO2JyZWFrfWRlZmF1bHQ6aS5zeW5jRXJyb3JUaHJvd2FibGU9ITAsaS5kZXN0aW5hdGlvbj1uZXcgeShpLG4scixvKX1yZXR1cm4gaX1yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZVtnXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmNyZWF0ZT1mdW5jdGlvbih0LG4scil7dmFyIG89bmV3IGUodCxuLHIpO3JldHVybiBvLnN5bmNFcnJvclRocm93YWJsZT0hMSxvfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHx0aGlzLl9uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Vycm9yKHQpKX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFyZW50LGU9dGhpcy5fcGFyZW50cztyZXR1cm4gdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMudW5zdWJzY3JpYmUoKSx0aGlzLmNsb3NlZD0hMSx0aGlzLmlzU3RvcHBlZD0hMSx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9wYXJlbnRzPWUsdGhpc30sZX0ocykseT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLG8pe3ZhciBpLHU9dC5jYWxsKHRoaXMpfHx0aGlzO3UuX3BhcmVudFN1YnNjcmliZXI9ZTt2YXIgbD11O3JldHVybiBhKG4pP2k9bjpuJiYoaT1uLm5leHQscj1uLmVycm9yLG89bi5jb21wbGV0ZSxuIT09ZCYmKGEoKGw9T2JqZWN0LmNyZWF0ZShuKSkudW5zdWJzY3JpYmUpJiZ1LmFkZChsLnVuc3Vic2NyaWJlLmJpbmQobCkpLGwudW5zdWJzY3JpYmU9dS51bnN1YnNjcmliZS5iaW5kKHUpKSksdS5fY29udGV4dD1sLHUuX25leHQ9aSx1Ll9lcnJvcj1yLHUuX2NvbXBsZXRlPW8sdX1yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCYmdGhpcy5fbmV4dCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjtoLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJmUuc3luY0Vycm9yVGhyb3dhYmxlP3RoaXMuX190cnlPclNldEVycm9yKGUsdGhpcy5fbmV4dCx0KSYmdGhpcy51bnN1YnNjcmliZSgpOnRoaXMuX190cnlPclVuc3ViKHRoaXMuX25leHQsdCl9fSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtpZighdGhpcy5pc1N0b3BwZWQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXIsbj1oLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc7aWYodGhpcy5fZXJyb3IpbiYmZS5zeW5jRXJyb3JUaHJvd2FibGU/KHRoaXMuX190cnlPclNldEVycm9yKGUsdGhpcy5fZXJyb3IsdCksdGhpcy51bnN1YnNjcmliZSgpKToodGhpcy5fX3RyeU9yVW5zdWIodGhpcy5fZXJyb3IsdCksdGhpcy51bnN1YnNjcmliZSgpKTtlbHNlIGlmKGUuc3luY0Vycm9yVGhyb3dhYmxlKW4/KGUuc3luY0Vycm9yVmFsdWU9dCxlLnN5bmNFcnJvclRocm93bj0hMCk6cCh0KSx0aGlzLnVuc3Vic2NyaWJlKCk7ZWxzZXtpZih0aGlzLnVuc3Vic2NyaWJlKCksbil0aHJvdyB0O3AodCl9fX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjtpZih0aGlzLl9jb21wbGV0ZSl7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gdC5fY29tcGxldGUuY2FsbCh0Ll9jb250ZXh0KX07aC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZlLnN5bmNFcnJvclRocm93YWJsZT8odGhpcy5fX3RyeU9yU2V0RXJyb3IoZSxuKSx0aGlzLnVuc3Vic2NyaWJlKCkpOih0aGlzLl9fdHJ5T3JVbnN1YihuKSx0aGlzLnVuc3Vic2NyaWJlKCkpfWVsc2UgdGhpcy51bnN1YnNjcmliZSgpfX0sZS5wcm90b3R5cGUuX190cnlPclVuc3ViPWZ1bmN0aW9uKHQsZSl7dHJ5e3QuY2FsbCh0aGlzLl9jb250ZXh0LGUpfWNhdGNoKG4pe2lmKHRoaXMudW5zdWJzY3JpYmUoKSxoLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgbjtwKG4pfX0sZS5wcm90b3R5cGUuX190cnlPclNldEVycm9yPWZ1bmN0aW9uKHQsZSxuKXtpZighaC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IG5ldyBFcnJvcigiYmFkIGNhbGwiKTt0cnl7ZS5jYWxsKHRoaXMuX2NvbnRleHQsbil9Y2F0Y2gocil7cmV0dXJuIGgudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZz8odC5zeW5jRXJyb3JWYWx1ZT1yLHQuc3luY0Vycm9yVGhyb3duPSEwLCEwKToocChyKSwhMCl9cmV0dXJuITF9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhcmVudFN1YnNjcmliZXI7dGhpcy5fY29udGV4dD1udWxsLHRoaXMuX3BhcmVudFN1YnNjcmliZXI9bnVsbCx0LnVuc3Vic2NyaWJlKCl9LGV9KHYpLG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLm9ic2VydmFibGV8fCJAQG9ic2VydmFibGUiO2Z1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gdygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gYih0KX1mdW5jdGlvbiBiKHQpe3JldHVybiB0PzE9PT10Lmxlbmd0aD90WzBdOmZ1bmN0aW9uKGUpe3JldHVybiB0LnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZSh0KX0pLGUpfTpffXZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9pc1NjYWxhcj0hMSx0JiYodGhpcy5fc3Vic2NyaWJlPXQpfXJldHVybiB0LnByb3RvdHlwZS5saWZ0PWZ1bmN0aW9uKGUpe3ZhciBuPW5ldyB0O3JldHVybiBuLnNvdXJjZT10aGlzLG4ub3BlcmF0b3I9ZSxufSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMub3BlcmF0b3Isbz1mdW5jdGlvbih0LGUsbil7aWYodCl7aWYodCBpbnN0YW5jZW9mIHYpcmV0dXJuIHQ7aWYodFtnXSlyZXR1cm4gdFtnXSgpfXJldHVybiB0fHxlfHxuP25ldyB2KHQsZSxuKTpuZXcgdihkKX0odCxlLG4pO2lmKG8uYWRkKHI/ci5jYWxsKG8sdGhpcy5zb3VyY2UpOnRoaXMuc291cmNlfHxoLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJiFvLnN5bmNFcnJvclRocm93YWJsZT90aGlzLl9zdWJzY3JpYmUobyk6dGhpcy5fdHJ5U3Vic2NyaWJlKG8pKSxoLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJm8uc3luY0Vycm9yVGhyb3dhYmxlJiYoby5zeW5jRXJyb3JUaHJvd2FibGU9ITEsby5zeW5jRXJyb3JUaHJvd24pKXRocm93IG8uc3luY0Vycm9yVmFsdWU7cmV0dXJuIG99LHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUodCl9Y2F0Y2goZSl7aC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiYodC5zeW5jRXJyb3JUaHJvd249ITAsdC5zeW5jRXJyb3JWYWx1ZT1lKSxmdW5jdGlvbih0KXtmb3IoO3Q7KXt2YXIgZT10LmRlc3RpbmF0aW9uO2lmKHQuY2xvc2VkfHx0LmlzU3RvcHBlZClyZXR1cm4hMTt0PWUmJmUgaW5zdGFuY2VvZiB2P2U6bnVsbH1yZXR1cm4hMH0odCk/dC5lcnJvcihlKTpjb25zb2xlLndhcm4oZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3KGU9QyhlKSkoKGZ1bmN0aW9uKGUscil7dmFyIG87bz1uLnN1YnNjcmliZSgoZnVuY3Rpb24oZSl7dHJ5e3QoZSl9Y2F0Y2gobil7cihuKSxvJiZvLnVuc3Vic2NyaWJlKCl9fSkscixlKX0pKX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNvdXJjZTtyZXR1cm4gZSYmZS5zdWJzY3JpYmUodCl9LHQucHJvdG90eXBlW21dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIDA9PT10Lmxlbmd0aD90aGlzOmIodCkodGhpcyl9LHQucHJvdG90eXBlLnRvUHJvbWlzZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBuZXcodD1DKHQpKSgoZnVuY3Rpb24odCxuKXt2YXIgcjtlLnN1YnNjcmliZSgoZnVuY3Rpb24odCl7cmV0dXJuIHI9dH0pLChmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0pLChmdW5jdGlvbigpe3JldHVybiB0KHIpfSkpfSkpfSx0LmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHR9KCk7ZnVuY3Rpb24gQyh0KXtpZih0fHwodD1oLlByb21pc2V8fFByb21pc2UpLCF0KXRocm93IG5ldyBFcnJvcigibm8gUHJvbWlzZSBpbXBsIGZvdW5kIik7cmV0dXJuIHR9ZnVuY3Rpb24gUygpe3JldHVybiBFcnJvci5jYWxsKHRoaXMpLHRoaXMubWVzc2FnZT0ib2JqZWN0IHVuc3Vic2NyaWJlZCIsdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpc31TLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7dmFyIEU9UyxPPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuc3ViamVjdD1lLHIuc3Vic2NyaWJlcj1uLHIuY2xvc2VkPSExLHJ9cmV0dXJuIHIuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXtpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO3ZhciB0PXRoaXMuc3ViamVjdCxlPXQub2JzZXJ2ZXJzO2lmKHRoaXMuc3ViamVjdD1udWxsLGUmJjAhPT1lLmxlbmd0aCYmIXQuaXNTdG9wcGVkJiYhdC5jbG9zZWQpe3ZhciBuPWUuaW5kZXhPZih0aGlzLnN1YnNjcmliZXIpOy0xIT09biYmZS5zcGxpY2UobiwxKX19fSxlfShzKSxUPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4uZGVzdGluYXRpb249ZSxufXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGV9KHYpLFA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5vYnNlcnZlcnM9W10sZS5jbG9zZWQ9ITEsZS5pc1N0b3BwZWQ9ITEsZS5oYXNFcnJvcj0hMSxlLnRocm93bkVycm9yPW51bGwsZX1yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZVtnXT1mdW5jdGlvbigpe3JldHVybiBuZXcgVCh0aGlzKX0sZS5wcm90b3R5cGUubGlmdD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgayh0aGlzLHRoaXMpO3JldHVybiBlLm9wZXJhdG9yPXQsZX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRTtpZighdGhpcy5pc1N0b3BwZWQpZm9yKHZhciBlPXRoaXMub2JzZXJ2ZXJzLG49ZS5sZW5ndGgscj1lLnNsaWNlKCksbz0wO288bjtvKyspcltvXS5uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRTt0aGlzLmhhc0Vycm9yPSEwLHRoaXMudGhyb3duRXJyb3I9dCx0aGlzLmlzU3RvcHBlZD0hMDtmb3IodmFyIGU9dGhpcy5vYnNlcnZlcnMsbj1lLmxlbmd0aCxyPWUuc2xpY2UoKSxvPTA7bzxuO28rKylyW29dLmVycm9yKHQpO3RoaXMub2JzZXJ2ZXJzLmxlbmd0aD0wfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFO3RoaXMuaXNTdG9wcGVkPSEwO2Zvcih2YXIgdD10aGlzLm9ic2VydmVycyxlPXQubGVuZ3RoLG49dC5zbGljZSgpLHI9MDtyPGU7cisrKW5bcl0uY29tcGxldGUoKTt0aGlzLm9ic2VydmVycy5sZW5ndGg9MH0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz1udWxsfSxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBFO3JldHVybiB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgRTtyZXR1cm4gdGhpcy5oYXNFcnJvcj8odC5lcnJvcih0aGlzLnRocm93bkVycm9yKSxzLkVNUFRZKTp0aGlzLmlzU3RvcHBlZD8odC5jb21wbGV0ZSgpLHMuRU1QVFkpOih0aGlzLm9ic2VydmVycy5wdXNoKHQpLG5ldyBPKHRoaXMsdCkpfSxlLnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgeDtyZXR1cm4gdC5zb3VyY2U9dGhpcyx0fSxlLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgayh0LGUpfSxlfSh4KSxrPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuZGVzdGluYXRpb249ZSxyLnNvdXJjZT1uLHJ9cmV0dXJuIHIuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlc3RpbmF0aW9uO2UmJmUubmV4dCYmZS5uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlc3RpbmF0aW9uO2UmJmUuZXJyb3ImJnRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kZXN0aW5hdGlvbjt0JiZ0LmNvbXBsZXRlJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlP3RoaXMuc291cmNlLnN1YnNjcmliZSh0KTpzLkVNUFRZfSxlfShQKTtmdW5jdGlvbiBBKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zY2hlZHVsZX12YXIgST1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgbz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG8ucGFyZW50PWUsby5vdXRlclZhbHVlPW4sby5vdXRlckluZGV4PXIsby5pbmRleD0wLG99cmV0dXJuIHIuX19leHRlbmRzKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5TmV4dCh0aGlzLm91dGVyVmFsdWUsdCx0aGlzLm91dGVySW5kZXgsdGhpcy5pbmRleCsrLHRoaXMpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5RXJyb3IodCx0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMucGFyZW50Lm5vdGlmeUNvbXBsZXRlKHRoaXMpLHRoaXMudW5zdWJzY3JpYmUoKX0sZX0odiksUj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTAscj10Lmxlbmd0aDtuPHImJiFlLmNsb3NlZDtuKyspZS5uZXh0KHRbbl0pO2UuY2xvc2VkfHxlLmNvbXBsZXRlKCl9fSxNPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC50aGVuKChmdW5jdGlvbih0KXtlLmNsb3NlZHx8KGUubmV4dCh0KSxlLmNvbXBsZXRlKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBlLmVycm9yKHQpfSkpLnRoZW4obnVsbCxwKSxlfX07ZnVuY3Rpb24gaigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcj9TeW1ib2wuaXRlcmF0b3I6IkBAaXRlcmF0b3IifXZhciBOPWooKSxEPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49dFtOXSgpOzspe3ZhciByPW4ubmV4dCgpO2lmKHIuZG9uZSl7ZS5jb21wbGV0ZSgpO2JyZWFrfWlmKGUubmV4dChyLnZhbHVlKSxlLmNsb3NlZClicmVha31yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbi5yZXR1cm4mJmUuYWRkKChmdW5jdGlvbigpe24ucmV0dXJuJiZuLnJldHVybigpfSkpLGV9fSxVPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10W21dKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4uc3Vic2NyaWJlKXRocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIik7cmV0dXJuIG4uc3Vic2NyaWJlKGUpfX0sTD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR9O2Z1bmN0aW9uIFYodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iIT10eXBlb2YgdC5zdWJzY3JpYmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59dmFyIEg9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIHgpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9pc1NjYWxhcj8oZS5uZXh0KHQudmFsdWUpLHZvaWQgZS5jb21wbGV0ZSgpKTp0LnN1YnNjcmliZShlKX07aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbbV0pcmV0dXJuIFUodCk7aWYoTCh0KSlyZXR1cm4gUih0KTtpZihWKHQpKXJldHVybiBNKHQpO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W05dKXJldHVybiBEKHQpO3ZhciBlPWkodCk/ImFuIGludmFsaWQgb2JqZWN0IjoiJyIrdCsiJyI7dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIrZSsiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIEFycmF5LCBvciBJdGVyYWJsZS4iKX07ZnVuY3Rpb24geih0LGUsbixyLG8pe2lmKHZvaWQgMD09PW8mJihvPW5ldyBJKHQsbixyKSksIW8uY2xvc2VkKXJldHVybiBIKGUpKG8pfXZhciBGPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiByLl9fZXh0ZW5kcyhlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4scixvKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGUucHJvdG90eXBlLm5vdGlmeUVycm9yPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfSh2KTtmdW5jdGlvbiBCKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IGlzIG5vdCBhIGZ1bmN0aW9uLiBBcmUgeW91IGxvb2tpbmcgZm9yIGBtYXBUbygpYD8iKTtyZXR1cm4gbi5saWZ0KG5ldyBaKHQsZSkpfX12YXIgWj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnByb2plY3Q9dCx0aGlzLnRoaXNBcmc9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgRyh0LHRoaXMucHJvamVjdCx0aGlzLnRoaXNBcmcpKX0sdH0oKSxHPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLnByb2plY3Q9bixvLmNvdW50PTAsby50aGlzQXJnPXJ8fG8sb31yZXR1cm4gci5fX2V4dGVuZHMoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnByb2plY3QuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKG4pe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iobil9dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlfSh2KTtmdW5jdGlvbiBxKHQsZSl7cmV0dXJuIG5ldyB4KGU/ZnVuY3Rpb24obil7dmFyIHI9bmV3IHMsbz0wO3JldHVybiByLmFkZChlLnNjaGVkdWxlKChmdW5jdGlvbigpe28hPT10Lmxlbmd0aD8obi5uZXh0KHRbbysrXSksbi5jbG9zZWR8fHIuYWRkKHRoaXMuc2NoZWR1bGUoKSkpOm4uY29tcGxldGUoKX0pKSkscn06Uih0KSl9ZnVuY3Rpb24gVyh0LGUpe2lmKCFlKXJldHVybiB0IGluc3RhbmNlb2YgeD90Om5ldyB4KEgodCkpO2lmKG51bGwhPXQpe2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFttXX0odCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyB4KGU/ZnVuY3Rpb24obil7dmFyIHI9bmV3IHM7cmV0dXJuIHIuYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7dmFyIG89dFttXSgpO3IuYWRkKG8uc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4ubmV4dCh0KX0pKSl9LGVycm9yOmZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZXJyb3IodCl9KSkpfSxjb21wbGV0ZTpmdW5jdGlvbigpe3IuYWRkKGUuc2NoZWR1bGUoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY29tcGxldGUoKX0pKSl9fSkpfSkpKSxyfTpVKHQpKX0odCxlKTtpZihWKHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgeChlP2Z1bmN0aW9uKA=="
}