DIR : /home/kozerus/public_html/index_h5g.html

/home/kozerus/public_html

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <meta name=viewport content="width=device-width">  
    <title>Full screen photo and image gallery</title>
<!--    
	<script type="text/javascript" src="./h5gallery_jquery.js"></script>
	<script type="text/javascript" src="./h5gallery.js"></script>
	-->


<script id="script_h5gallery_js" src="data:/text/plain;base64,LyoqIEhUTUw1IEdhbGxlcnkgLSBqUXVlcnkgSW1hZ2UgYW5kIFZpZGVvIEdhbGxlcnkgUGx1Z2luCiAqIENvcHlyaWdodCAyMDE0IE1hZ2ljIEhpbGxzIFB0eSBMdGQgQWxsIFJpZ2h0cyBSZXNlcnZlZAogKiBXZWJzaXRlOiBodHRwOi8vaHRtbDVib3guY29tCiAqIFZlcnNpb24gOC45IAogKi8KKGZ1bmN0aW9uKCl7Zm9yKHZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxzPSIiLG09MDttPHUubGVuZ3RoO20rKyl1W21dLnNyYyYmdVttXS5zcmMubWF0Y2goL2h0bWw1Z2FsbGVyeVwuanMvaSkmJihzPXVbbV0uc3JjLnN1YnN0cigwLHVbbV0uc3JjLmxhc3RJbmRleE9mKCIvIikrMSkpO3U9ITE7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBqUXVlcnkpdT0hMDtlbHNlIGlmKG09alF1ZXJ5LmZuLmpxdWVyeS5zcGxpdCgiLiIpLDE+bVswXXx8MT09bVswXSYmNj5tWzFdKXU9ITA7aWYodSl7dmFyIHU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9qYXZhc2NyaXB0Iik7dC5yZWFkeVN0YXRlP3Qub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYoImxvYWRlZCI9PXQucmVhZHlTdGF0ZXx8ImNvbXBsZXRlIj09CnQucmVhZHlTdGF0ZSl0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGxvYWRIdG1sNUdhbGxlcnkocyl9OnQub25sb2FkPWZ1bmN0aW9uKCl7bG9hZEh0bWw1R2FsbGVyeShzKX07dC5zZXRBdHRyaWJ1dGUoInNyYyIscysianF1ZXJ5LmpzIik7dS5hcHBlbmRDaGlsZCh0KX1lbHNlIGxvYWRIdG1sNUdhbGxlcnkocyl9KSgpOwpmdW5jdGlvbiBsb2FkSHRtbDVHYWxsZXJ5KHUpe2pRdWVyeS5lYXNpbmcuanN3aW5nPWpRdWVyeS5lYXNpbmcuc3dpbmc7alF1ZXJ5LmV4dGVuZChqUXVlcnkuZWFzaW5nLHtkZWY6ImVhc2VPdXRRdWFkIixzd2luZzpmdW5jdGlvbihiLGUsYSxjLGQpe3JldHVybiBqUXVlcnkuZWFzaW5nW2pRdWVyeS5lYXNpbmcuZGVmXShiLGUsYSxjLGQpfSxlYXNlSW5RdWFkOmZ1bmN0aW9uKGIsZSxhLGMsZCl7cmV0dXJuIGMqKGUvPWQpKmUrYX0sZWFzZU91dFF1YWQ6ZnVuY3Rpb24oYixlLGEsYyxkKXtyZXR1cm4tYyooZS89ZCkqKGUtMikrYX0sZWFzZUluT3V0UXVhZDpmdW5jdGlvbihiLGUsYSxjLGQpe3JldHVybiAxPihlLz1kLzIpP2MvMiplKmUrYTotYy8yKigtLWUqKGUtMiktMSkrYX0sZWFzZUluQ3ViaWM6ZnVuY3Rpb24oYixlLGEsYyxkKXtyZXR1cm4gYyooZS89ZCkqZSplK2F9LGVhc2VPdXRDdWJpYzpmdW5jdGlvbihiLGUsYSxjLGQpe3JldHVybiBjKigoZT1lL2QtMSkqZSplKzEpKwphfSxlYXNlSW5PdXRDdWJpYzpmdW5jdGlvbihiLGUsYSxjLGQpe3JldHVybiAxPihlLz1kLzIpP2MvMiplKmUqZSthOmMvMiooKGUtPTIpKmUqZSsyKSthfSxlYXNlSW5RdWFydDpmdW5jdGlvbihiLGUsYSxjLGQpe3JldHVybiBjKihlLz1kKSplKmUqZSthfSxlYXNlT3V0UXVhcnQ6ZnVuY3Rpb24oYixlLGEsYyxkKXtyZXR1cm4tYyooKGU9ZS9kLTEpKmUqZSplLTEpK2F9LGVhc2VJbk91dFF1YXJ0OmZ1bmN0aW9uKGIsZSxhLGMsZCl7cmV0dXJuIDE+KGUvPWQvMik/Yy8yKmUqZSplKmUrYTotYy8yKigoZS09MikqZSplKmUtMikrYX0sZWFzZUluUXVpbnQ6ZnVuY3Rpb24oYixlLGEsYyxkKXtyZXR1cm4gYyooZS89ZCkqZSplKmUqZSthfSxlYXNlT3V0UXVpbnQ6ZnVuY3Rpb24oYixlLGEsYyxkKXtyZXR1cm4gYyooKGU9ZS9kLTEpKmUqZSplKmUrMSkrYX0sZWFzZUluT3V0UXVpbnQ6ZnVuY3Rpb24oYixlLGEsYyxkKXtyZXR1cm4gMT4oZS89ZC8yKT9jLzIqZSplKmUqZSplK2E6Yy8KMiooKGUtPTIpKmUqZSplKmUrMikrYX0sZWFzZUluU2luZTpmdW5jdGlvbihiLGUsYSxjLGQpe3JldHVybi1jKk1hdGguY29zKGUvZCooTWF0aC5QSS8yKSkrYythfSxlYXNlT3V0U2luZTpmdW5jdGlvbihiLGUsYSxjLGQpe3JldHVybiBjKk1hdGguc2luKGUvZCooTWF0aC5QSS8yKSkrYX0sZWFzZUluT3V0U2luZTpmdW5jdGlvbihiLGUsYSxjLGQpe3JldHVybi1jLzIqKE1hdGguY29zKE1hdGguUEkqZS9kKS0xKSthfSxlYXNlSW5FeHBvOmZ1bmN0aW9uKGIsZSxhLGMsZCl7cmV0dXJuIDA9PWU/YTpjKk1hdGgucG93KDIsMTAqKGUvZC0xKSkrYX0sZWFzZU91dEV4cG86ZnVuY3Rpb24oYixlLGEsYyxkKXtyZXR1cm4gZT09ZD9hK2M6YyooLU1hdGgucG93KDIsLTEwKmUvZCkrMSkrYX0sZWFzZUluT3V0RXhwbzpmdW5jdGlvbihiLGUsYSxjLGQpe3JldHVybiAwPT1lP2E6ZT09ZD9hK2M6MT4oZS89ZC8yKT9jLzIqTWF0aC5wb3coMiwxMCooZS0xKSkrYTpjLzIqKC1NYXRoLnBvdygyLAotMTAqLS1lKSsyKSthfSxlYXNlSW5DaXJjOmZ1bmN0aW9uKGIsZSxhLGMsZCl7cmV0dXJuLWMqKE1hdGguc3FydCgxLShlLz1kKSplKS0xKSthfSxlYXNlT3V0Q2lyYzpmdW5jdGlvbihiLGUsYSxjLGQpe3JldHVybiBjKk1hdGguc3FydCgxLShlPWUvZC0xKSplKSthfSxlYXNlSW5PdXRDaXJjOmZ1bmN0aW9uKGIsZSxhLGMsZCl7cmV0dXJuIDE+KGUvPWQvMik/LWMvMiooTWF0aC5zcXJ0KDEtZSplKS0xKSthOmMvMiooTWF0aC5zcXJ0KDEtKGUtPTIpKmUpKzEpK2F9LGVhc2VJbkVsYXN0aWM6ZnVuY3Rpb24oYixlLGEsYyxkKXtiPTEuNzAxNTg7dmFyIGg9MCxmPWM7aWYoMD09ZSlyZXR1cm4gYTtpZigxPT0oZS89ZCkpcmV0dXJuIGErYztofHwoaD0wLjMqZCk7ZjxNYXRoLmFicyhjKT8oZj1jLGI9aC80KTpiPWgvKDIqTWF0aC5QSSkqTWF0aC5hc2luKGMvZik7cmV0dXJuLShmKk1hdGgucG93KDIsMTAqKGUtPTEpKSpNYXRoLnNpbigoZSpkLWIpKjIqTWF0aC5QSS9oKSkrYX0sZWFzZU91dEVsYXN0aWM6ZnVuY3Rpb24oYiwKZSxhLGMsZCl7Yj0xLjcwMTU4O3ZhciBoPTAsZj1jO2lmKDA9PWUpcmV0dXJuIGE7aWYoMT09KGUvPWQpKXJldHVybiBhK2M7aHx8KGg9MC4zKmQpO2Y8TWF0aC5hYnMoYyk/KGY9YyxiPWgvNCk6Yj1oLygyKk1hdGguUEkpKk1hdGguYXNpbihjL2YpO3JldHVybiBmKk1hdGgucG93KDIsLTEwKmUpKk1hdGguc2luKChlKmQtYikqMipNYXRoLlBJL2gpK2MrYX0sZWFzZUluT3V0RWxhc3RpYzpmdW5jdGlvbihiLGUsYSxjLGQpe2I9MS43MDE1ODt2YXIgaD0wLGY9YztpZigwPT1lKXJldHVybiBhO2lmKDI9PShlLz1kLzIpKXJldHVybiBhK2M7aHx8KGg9ZCowLjMqMS41KTtmPE1hdGguYWJzKGMpPyhmPWMsYj1oLzQpOmI9aC8oMipNYXRoLlBJKSpNYXRoLmFzaW4oYy9mKTtyZXR1cm4gMT5lPy0wLjUqZipNYXRoLnBvdygyLDEwKihlLT0xKSkqTWF0aC5zaW4oKGUqZC1iKSoyKk1hdGguUEkvaCkrYTowLjUqZipNYXRoLnBvdygyLC0xMCooZS09MSkpKk1hdGguc2luKChlKmQtYikqMipNYXRoLlBJLwpoKStjK2F9LGVhc2VJbkJhY2s6ZnVuY3Rpb24oYixlLGEsYyxkLGgpe3ZvaWQgMD09aCYmKGg9MS43MDE1OCk7cmV0dXJuIGMqKGUvPWQpKmUqKChoKzEpKmUtaCkrYX0sZWFzZU91dEJhY2s6ZnVuY3Rpb24oYixlLGEsYyxkLGgpe3ZvaWQgMD09aCYmKGg9MS43MDE1OCk7cmV0dXJuIGMqKChlPWUvZC0xKSplKigoaCsxKSplK2gpKzEpK2F9LGVhc2VJbk91dEJhY2s6ZnVuY3Rpb24oYixlLGEsYyxkLGgpe3ZvaWQgMD09aCYmKGg9MS43MDE1OCk7cmV0dXJuIDE+KGUvPWQvMik/Yy8yKmUqZSooKChoKj0xLjUyNSkrMSkqZS1oKSthOmMvMiooKGUtPTIpKmUqKCgoaCo9MS41MjUpKzEpKmUraCkrMikrYX0sZWFzZUluQm91bmNlOmZ1bmN0aW9uKGIsZSxhLGMsZCl7cmV0dXJuIGMtalF1ZXJ5LmVhc2luZy5lYXNlT3V0Qm91bmNlKGIsZC1lLDAsYyxkKSthfSxlYXNlT3V0Qm91bmNlOmZ1bmN0aW9uKGIsZSxhLGMsZCl7cmV0dXJuKGUvPWQpPDEvMi43NT9jKjcuNTYyNSplKmUrYTplPDIvCjIuNzU/YyooNy41NjI1KihlLT0xLjUvMi43NSkqZSswLjc1KSthOmU8Mi41LzIuNzU/YyooNy41NjI1KihlLT0yLjI1LzIuNzUpKmUrMC45Mzc1KSthOmMqKDcuNTYyNSooZS09Mi42MjUvMi43NSkqZSswLjk4NDM3NSkrYX0sZWFzZUluT3V0Qm91bmNlOmZ1bmN0aW9uKGIsZSxhLGMsZCl7cmV0dXJuIGU8ZC8yPzAuNSpqUXVlcnkuZWFzaW5nLmVhc2VJbkJvdW5jZShiLDIqZSwwLGMsZCkrYTowLjUqalF1ZXJ5LmVhc2luZy5lYXNlT3V0Qm91bmNlKGIsMiplLWQsMCxjLGQpKzAuNSpjK2F9fSk7dmFyIHM9alF1ZXJ5O3MuZm4udG91Y2hTd2lwZT1mdW5jdGlvbihiKXt2YXIgZT17cHJldmVudFdlYkJyb3dzZXI6ITEsaW5zdGFuY2U6bnVsbCxwcmV2ZW50V2ViQnJvd3NlckNhbGxiYWNrOm51bGwsc3dpcGVMZWZ0Om51bGwsc3dpcGVSaWdodDpudWxsLHN3aXBlVG9wOm51bGwsc3dpcGVCb3R0b206bnVsbH07YiYmcy5leHRlbmQoZSxiKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXt2YXIgYj0KYS5vcmlnaW5hbEV2ZW50OzE8PWIudGFyZ2V0VG91Y2hlcy5sZW5ndGg/KGY9Yi50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYLGo9Yi50YXJnZXRUb3VjaGVzWzBdLnBhZ2VZKTpoKGEpfWZ1bmN0aW9uIGIoYSl7dmFyIGM9ZS5wcmV2ZW50V2ViQnJvd3NlcixkPWEub3JpZ2luYWxFdmVudDsxPD1kLnRhcmdldFRvdWNoZXMubGVuZ3RoPyhsPWQudGFyZ2V0VG91Y2hlc1swXS5wYWdlWCxnPWQudGFyZ2V0VG91Y2hlc1swXS5wYWdlWSxlLmluc3RhbmNlJiZlLnByZXZlbnRXZWJCcm93c2VyQ2FsbGJhY2smJihjPWUuaW5zdGFuY2VbZS5wcmV2ZW50V2ViQnJvd3NlckNhbGxiYWNrXShnPGopKSk6aChhKTtjJiZhLnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gZChhKXtpZigwPGx8fDA8ZykxMDA8TWF0aC5hYnMobC1mKSYmKGw+Zj9lLnN3aXBlUmlnaHQmJmUuc3dpcGVSaWdodC5jYWxsKCk6ZS5zd2lwZUxlZnQmJmUuc3dpcGVMZWZ0LmNhbGwoKSksMTAwPE1hdGguYWJzKGctaikmJihnPmo/CmUuc3dpcGVCb3R0b20mJmUuc3dpcGVCb3R0b20uY2FsbCgpOmUuc3dpcGVUb3AmJmUuc3dpcGVUb3AuY2FsbCgpKTtoKGEpfWZ1bmN0aW9uIGgoKXtnPWw9aj1mPS0xfXZhciBmPS0xLGo9LTEsbD0tMSxnPS0xO3RyeXtzKHRoaXMpLm9uKCJ0b3VjaHN0YXJ0IixhKSxzKHRoaXMpLm9uKCJ0b3VjaG1vdmUiLGIpLHModGhpcykub24oInRvdWNoZW5kIixkKSxzKHRoaXMpLm9uKCJ0b3VjaGNhbmNlbCIsaCl9Y2F0Y2godil7fX0pfTt2YXIgbT1qUXVlcnk7bS5mbi5kcmFnPWZ1bmN0aW9uKGIsZSxhKXt2YXIgYz0ic3RyaW5nIj09dHlwZW9mIGI/YjoiIixkPW0uaXNGdW5jdGlvbihiKT9iOm0uaXNGdW5jdGlvbihlKT9lOm51bGw7MCE9PWMuaW5kZXhPZigiZHJhZyIpJiYoYz0iZHJhZyIrYyk7YT0oYj09ZD9lOmEpfHx7fTtyZXR1cm4gZD90aGlzLm9uKGMsYSxkKTp0aGlzLnRyaWdnZXIoYyl9O3ZhciB0PW0uZXZlbnQseD10LnNwZWNpYWwsaz1udWxsLGs9eC5kcmFnPXtkZWZhdWx0czp7d2hpY2g6MSwKZGlzdGFuY2U6MCxub3Q6IjppbnB1dCIsaGFuZGxlOm51bGwscmVsYXRpdmU6ITEsZHJvcDohMCxjbGljazohMX0sZGF0YWtleToiZHJhZ2RhdGEiLGxpdmVrZXk6ImxpdmVkcmFnIixhZGQ6ZnVuY3Rpb24oYil7dmFyIGU9bS5kYXRhKHRoaXMsay5kYXRha2V5KSxhPWIuZGF0YXx8e307ZS5yZWxhdGVkKz0xOyFlLmxpdmUmJmIuc2VsZWN0b3ImJihlLmxpdmU9ITAsdC5hZGQodGhpcywiZHJhZ2luaXQuIitrLmxpdmVrZXksay5kZWxlZ2F0ZSkpO20uZWFjaChrLmRlZmF1bHRzLGZ1bmN0aW9uKGIpe3ZvaWQgMCE9PWFbYl0mJihlW2JdPWFbYl0pfSl9LHJlbW92ZTpmdW5jdGlvbigpe20uZGF0YSh0aGlzLGsuZGF0YWtleSkucmVsYXRlZC09MX0sc2V0dXA6ZnVuY3Rpb24oKXtpZighbS5kYXRhKHRoaXMsay5kYXRha2V5KSl7dmFyIGI9bS5leHRlbmQoe3JlbGF0ZWQ6MH0say5kZWZhdWx0cyk7bS5kYXRhKHRoaXMsay5kYXRha2V5LGIpO3QuYWRkKHRoaXMsIm1vdXNlZG93biIsay5pbml0LApiKTt0aGlzLmF0dGFjaEV2ZW50JiZ0aGlzLmF0dGFjaEV2ZW50KCJvbmRyYWdzdGFydCIsay5kb250c3RhcnQpfX0sdGVhcmRvd246ZnVuY3Rpb24oKXttLmRhdGEodGhpcyxrLmRhdGFrZXkpLnJlbGF0ZWR8fChtLnJlbW92ZURhdGEodGhpcyxrLmRhdGFrZXkpLHQucmVtb3ZlKHRoaXMsIm1vdXNlZG93biIsay5pbml0KSx0LnJlbW92ZSh0aGlzLCJkcmFnaW5pdCIsay5kZWxlZ2F0ZSksay50ZXh0c2VsZWN0KCEwKSx0aGlzLmRldGFjaEV2ZW50JiZ0aGlzLmRldGFjaEV2ZW50KCJvbmRyYWdzdGFydCIsay5kb250c3RhcnQpKX0saW5pdDpmdW5jdGlvbihiKXt2YXIgZT1iLmRhdGEsYTtpZighKDA8ZS53aGljaCYmYi53aGljaCE9ZS53aGljaCkmJiFtKGIudGFyZ2V0KS5pcyhlLm5vdCkmJighZS5oYW5kbGV8fG0oYi50YXJnZXQpLmNsb3Nlc3QoZS5oYW5kbGUsYi5jdXJyZW50VGFyZ2V0KS5sZW5ndGgpKWlmKGUucHJvcGFnYXRlcz0xLGUuaW50ZXJhY3Rpb25zPVtrLmludGVyYWN0aW9uKHRoaXMsCmUpXSxlLnRhcmdldD1iLnRhcmdldCxlLnBhZ2VYPWIucGFnZVgsZS5wYWdlWT1iLnBhZ2VZLGUuZHJhZ2dpbmc9bnVsbCxhPWsuaGlqYWNrKGIsImRyYWdpbml0IixlKSxlLnByb3BhZ2F0ZXMpe2lmKChhPWsuZmxhdHRlbihhKSkmJmEubGVuZ3RoKWUuaW50ZXJhY3Rpb25zPVtdLG0uZWFjaChhLGZ1bmN0aW9uKCl7ZS5pbnRlcmFjdGlvbnMucHVzaChrLmludGVyYWN0aW9uKHRoaXMsZSkpfSk7ZS5wcm9wYWdhdGVzPWUuaW50ZXJhY3Rpb25zLmxlbmd0aDshMSE9PWUuZHJvcCYmeC5kcm9wJiZ4LmRyb3AuaGFuZGxlcihiLGUpO2sudGV4dHNlbGVjdCghMSk7dC5hZGQoZG9jdW1lbnQsIm1vdXNlbW92ZSBtb3VzZXVwIixrLmhhbmRsZXIsZSk7cmV0dXJuITF9fSxpbnRlcmFjdGlvbjpmdW5jdGlvbihiLGUpe3JldHVybntkcmFnOmIsY2FsbGJhY2s6bmV3IGsuY2FsbGJhY2ssZHJvcHBhYmxlOltdLG9mZnNldDptKGIpW2UucmVsYXRpdmU/InBvc2l0aW9uIjoib2Zmc2V0Il0oKXx8e3RvcDowLApsZWZ0OjB9fX0saGFuZGxlcjpmdW5jdGlvbihiKXt2YXIgZT1iLmRhdGE7c3dpdGNoKGIudHlwZSl7Y2FzZSAhZS5kcmFnZ2luZyYmIm1vdXNlbW92ZSI6aWYoTWF0aC5wb3coYi5wYWdlWC1lLnBhZ2VYLDIpK01hdGgucG93KGIucGFnZVktZS5wYWdlWSwyKTxNYXRoLnBvdyhlLmRpc3RhbmNlLDIpKWJyZWFrO2IudGFyZ2V0PWUudGFyZ2V0O2suaGlqYWNrKGIsImRyYWdzdGFydCIsZSk7ZS5wcm9wYWdhdGVzJiYoZS5kcmFnZ2luZz0hMCk7Y2FzZSAibW91c2Vtb3ZlIjppZihlLmRyYWdnaW5nKXtrLmhpamFjayhiLCJkcmFnIixlKTtpZihlLnByb3BhZ2F0ZXMpeyExIT09ZS5kcm9wJiZ4LmRyb3AmJnguZHJvcC5oYW5kbGVyKGIsZSk7YnJlYWt9Yi50eXBlPSJtb3VzZXVwIn1jYXNlICJtb3VzZXVwIjp0LnJlbW92ZShkb2N1bWVudCwibW91c2Vtb3ZlIG1vdXNldXAiLGsuaGFuZGxlciksZS5kcmFnZ2luZyYmKCExIT09ZS5kcm9wJiZ4LmRyb3AmJnguZHJvcC5oYW5kbGVyKGIsZSksCmsuaGlqYWNrKGIsImRyYWdlbmQiLGUpKSxrLnRleHRzZWxlY3QoITApLCExPT09ZS5jbGljayYmZS5kcmFnZ2luZyYmKGpRdWVyeS5ldmVudC50cmlnZ2VyZWQ9ITAsc2V0VGltZW91dChmdW5jdGlvbigpe2pRdWVyeS5ldmVudC50cmlnZ2VyZWQ9ITF9LDIwKSxlLmRyYWdnaW5nPSExKX19LGRlbGVnYXRlOmZ1bmN0aW9uKGIpe3ZhciBlPVtdLGEsYz1tLmRhdGEodGhpcywiZXZlbnRzIil8fHt9O20uZWFjaChjLmxpdmV8fFtdLGZ1bmN0aW9uKGMsaCl7aWYoMD09PWgucHJlVHlwZS5pbmRleE9mKCJkcmFnIikmJihhPW0oYi50YXJnZXQpLmNsb3Nlc3QoaC5zZWxlY3RvcixiLmN1cnJlbnRUYXJnZXQpWzBdKSl0LmFkZChhLGgub3JpZ1R5cGUrIi4iK2subGl2ZWtleSxoLm9yaWdIYW5kbGVyLGguZGF0YSksMD5tLmluQXJyYXkoYSxlKSYmZS5wdXNoKGEpfSk7cmV0dXJuIWUubGVuZ3RoPyExOm0oZSkub24oImRyYWdlbmQuIitrLmxpdmVrZXksZnVuY3Rpb24oKXt0LnJlbW92ZSh0aGlzLAoiLiIray5saXZla2V5KX0pfSxoaWphY2s6ZnVuY3Rpb24oYixlLGEsYyxkKXtpZihhKXt2YXIgaD1iLm9yaWdpbmFsRXZlbnQsZj1iLnR5cGUsaj1lLmluZGV4T2YoImRyb3AiKT8iZHJhZyI6ImRyb3AiLGwsZz1jfHwwLHYscjtjPSFpc05hTihjKT9jOmEuaW50ZXJhY3Rpb25zLmxlbmd0aDtiLnR5cGU9ZTtiLm9yaWdpbmFsRXZlbnQ9bnVsbDthLnJlc3VsdHM9W107ZG8gaWYoKHY9YS5pbnRlcmFjdGlvbnNbZ10pJiYhKCJkcmFnZW5kIiE9PWUmJnYuY2FuY2VsbGVkKSlyPWsucHJvcGVydGllcyhiLGEsdiksdi5yZXN1bHRzPVtdLG0oZHx8dltqXXx8YS5kcm9wcGFibGUpLmVhY2goZnVuY3Rpb24oYyxkKXtyLnRhcmdldD1kO2w9dC5oYW5kbGU/ZD90LmhhbmRsZS5jYWxsKGQsYixyKTpudWxsOmQ/dC5kaXNwYXRjaC5jYWxsKGQsYixyKTpudWxsOyExPT09bD8oImRyYWciPT1qJiYodi5jYW5jZWxsZWQ9ITAsYS5wcm9wYWdhdGVzLT0xKSwiZHJvcCI9PWUmJih2W2pdW2NdPW51bGwpKToKImRyb3Bpbml0Ij09ZSYmdi5kcm9wcGFibGUucHVzaChrLmVsZW1lbnQobCl8fGQpOyJkcmFnc3RhcnQiPT1lJiYodi5wcm94eT1tKGsuZWxlbWVudChsKXx8di5kcmFnKVswXSk7di5yZXN1bHRzLnB1c2gobCk7ZGVsZXRlIGIucmVzdWx0O2lmKCJkcm9waW5pdCIhPT1lKXJldHVybiBsfSksYS5yZXN1bHRzW2ddPWsuZmxhdHRlbih2LnJlc3VsdHMpLCJkcm9waW5pdCI9PWUmJih2LmRyb3BwYWJsZT1rLmZsYXR0ZW4odi5kcm9wcGFibGUpKSwiZHJhZ3N0YXJ0Ij09ZSYmIXYuY2FuY2VsbGVkJiZyLnVwZGF0ZSgpO3doaWxlKCsrZzxjKTtiLnR5cGU9ZjtiLm9yaWdpbmFsRXZlbnQ9aDtyZXR1cm4gay5mbGF0dGVuKGEucmVzdWx0cyl9fSxwcm9wZXJ0aWVzOmZ1bmN0aW9uKGIsZSxhKXt2YXIgYz1hLmNhbGxiYWNrO2MuZHJhZz1hLmRyYWc7Yy5wcm94eT1hLnByb3h5fHxhLmRyYWc7Yy5zdGFydFg9ZS5wYWdlWDtjLnN0YXJ0WT1lLnBhZ2VZO2MuZGVsdGFYPWIucGFnZVgtZS5wYWdlWDsKYy5kZWx0YVk9Yi5wYWdlWS1lLnBhZ2VZO2Mub3JpZ2luYWxYPWEub2Zmc2V0LmxlZnQ7Yy5vcmlnaW5hbFk9YS5vZmZzZXQudG9wO2Mub2Zmc2V0WD1iLnBhZ2VYLShlLnBhZ2VYLWMub3JpZ2luYWxYKTtjLm9mZnNldFk9Yi5wYWdlWS0oZS5wYWdlWS1jLm9yaWdpbmFsWSk7Yy5kcm9wPWsuZmxhdHRlbigoYS5kcm9wfHxbXSkuc2xpY2UoKSk7Yy5hdmFpbGFibGU9ay5mbGF0dGVuKChhLmRyb3BwYWJsZXx8W10pLnNsaWNlKCkpO3JldHVybiBjfSxlbGVtZW50OmZ1bmN0aW9uKGIpe2lmKGImJihiLmpxdWVyeXx8MT09Yi5ub2RlVHlwZSkpcmV0dXJuIGJ9LGZsYXR0ZW46ZnVuY3Rpb24oYil7cmV0dXJuIG0ubWFwKGIsZnVuY3Rpb24oYil7cmV0dXJuIGImJmIuanF1ZXJ5P20ubWFrZUFycmF5KGIpOmImJmIubGVuZ3RoP2suZmxhdHRlbihiKTpifSl9LHRleHRzZWxlY3Q6ZnVuY3Rpb24oYil7bShkb2N1bWVudClbYj8idW5iaW5kIjoiYmluZCJdKCJzZWxlY3RzdGFydCIsay5kb250c3RhcnQpLmF0dHIoInVuc2VsZWN0YWJsZSIsCmI/Im9mZiI6Im9uIikuY3NzKCJNb3pVc2VyU2VsZWN0IixiPyIiOiJub25lIil9LGRvbnRzdGFydDpmdW5jdGlvbigpe3JldHVybiExfSxjYWxsYmFjazpmdW5jdGlvbigpe319O2suY2FsbGJhY2sucHJvdG90eXBlPXt1cGRhdGU6ZnVuY3Rpb24oKXt4LmRyb3AmJnRoaXMuYXZhaWxhYmxlLmxlbmd0aCYmbS5lYWNoKHRoaXMuYXZhaWxhYmxlLGZ1bmN0aW9uKGIpe3guZHJvcC5sb2NhdGUodGhpcyxiKX0pfX07eC5kcmFnaW5pdD14LmRyYWdzdGFydD14LmRyYWdlbmQ9azt2YXIgQT1qUXVlcnk7QS5mbi5odG1sNWJveFRyYW5zaXRpb249ZnVuY3Rpb24oYixlLGEsYyxkKXskcGFyZW50PXRoaXM7Yj1jLmVmZmVjdDt2YXIgaD1jLmVhc2luZyxmPWMuZHVyYXRpb24saj1jLmRpcmVjdGlvbixsPW51bGw7YiYmKGI9Yi5zcGxpdCgiLCIpLGw9YltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqYi5sZW5ndGgpXSxsPUEudHJpbShsLnRvTG93ZXJDYXNlKCkpKTtsJiZjW2xdJiYoImR1cmF0aW9uImluCmNbbF0mJihmPWNbbF0uZHVyYXRpb24pLGNbbF0uZWFzaW5nJiYoaD1jW2xdLmVhc2luZykpOyJmYWRlIj09bHx8ImZhZGVpbiI9PWw/KGEuaGlkZSgpLGUuaW5zZXJ0QmVmb3JlKGEpLGEuZmFkZUluKGYsaCxmdW5jdGlvbigpe2UucmVtb3ZlKCk7ZCgpfSkpOiJmYWRlb3V0Ij09bD8oYS5zaG93KCksZS5mYWRlT3V0KGYsaCxmdW5jdGlvbigpe2UucmVtb3ZlKCk7ZCgpfSkpOiJmYWRlaW5vdXQiPT1sPyhhLmhpZGUoKSxlLmluc2VydEJlZm9yZShhKSxlLmZhZGVPdXQoZixoKSxhLmZhZGVJbihmLGgsZnVuY3Rpb24oKXtlLnJlbW92ZSgpO2QoKX0pKToiY3Jvc3NmYWRlIj09bD8oYS5oaWRlKCksZS5mYWRlT3V0KGYvMixoLGZ1bmN0aW9uKCl7YS5mYWRlSW4oZi8yLGgsZnVuY3Rpb24oKXtlLnJlbW92ZSgpO2QoKX0pfSkpOiJzbGlkZSI9PWw/KCRwYXJlbnQuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pLGo/KGEuY3NzKHtsZWZ0OiIxMDAlIn0pLGEuYW5pbWF0ZSh7bGVmdDoiMCUifSwKZixoKSxlLmFuaW1hdGUoe2xlZnQ6Ii0xMDAlIn0sZixoLGZ1bmN0aW9uKCl7ZS5yZW1vdmUoKTtkKCl9KSk6KGEuY3NzKHtsZWZ0OiItMTAwJSJ9KSxhLmFuaW1hdGUoe2xlZnQ6IjAlIn0sZixoKSxlLmFuaW1hdGUoe2xlZnQ6IjEwMCUifSxmLGgsZnVuY3Rpb24oKXtlLnJlbW92ZSgpO2QoKX0pKSk6KGEuc2hvdygpLGUucmVtb3ZlKCksZCgpKX07dmFyIG49alF1ZXJ5O24uZm4uYWRkSFRNTDVWaWRlb0NvbnRyb2xzPWZ1bmN0aW9uKGIsZSxhLGMsZCxoLGYsaixsKXt2YXIgZz0ib250b3VjaHN0YXJ0ImluIHdpbmRvdyx2PWc/InRvdWNoc3RhcnQiOiJtb3VzZWRvd24iLHI9Zz8idG91Y2htb3ZlIjoibW91c2Vtb3ZlIixrPWc/InRvdWNoY2FuY2VsIjoibW91c2V1cCIsbT1nPzQ4OjM2LHQ9bnVsbCx1PW51bGwscz0hMSx4PSEwLEQ9bih0aGlzKS5kYXRhKCJpc2hkIiksQT1uKHRoaXMpLmRhdGEoImhkIiksRj1uKHRoaXMpLmRhdGEoInNyYyIpLHE9bih0aGlzKTtxLmdldCgwKS5yZW1vdmVBdHRyaWJ1dGUoImNvbnRyb2xzIik7CnZhciBCPW4oIjxkaXYgY2xhc3M9J2h0bWw1Ym94VmlkZW9QbGF5Jz48L2Rpdj4iKTtxLmFmdGVyKEIpO0IuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNTAlIixsZWZ0OiI1MCUiLGRpc3BsYXk6ImJsb2NrIixjdXJzb3I6InBvaW50ZXIiLHdpZHRoOjY0LGhlaWdodDo2NCwibWFyZ2luLWxlZnQiOi0zMiwibWFyZ2luLXRvcCI6LTMyLCJiYWNrZ3JvdW5kLWltYWdlIjoidXJsKCciKyhsJiYicGxheWJ1dHRvbiJpbiBsJiYwPGwucGxheWJ1dHRvbi5sZW5ndGg/bC5wbGF5YnV0dG9uOmIrImh0bWw1Ym94cGxheWVyX3BsYXl2aWRlby5wbmciKSsiJykiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoiY2VudGVyIGNlbnRlciIsImJhY2tncm91bmQtcmVwZWF0Ijoibm8tcmVwZWF0In0pLm9uKCJjbGljayIsZnVuY3Rpb24oKXtxLmdldCgwKS5wbGF5KCl9KTt2YXIgRT1uKCI8ZGl2IGNsYXNzPSdodG1sNWJveFZpZGVvRnVsbHNjcmVlbkJnJz48L2Rpdj4iKSx3PW4oIjxkaXYgY2xhc3M9J2h0bWw1Ym94VmlkZW9Db250cm9scyc+PGRpdiBjbGFzcz0naHRtbDVib3hWaWRlb0NvbnRyb2xzQmcnPjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Ym94UGxheVBhdXNlJz48ZGl2IGNsYXNzPSdodG1sNWJveFBsYXknPjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Ym94UGF1c2UnPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Ym94VGltZUN1cnJlbnQnPi0tOi0tPC9kaXY+PGRpdiBjbGFzcz0naHRtbDVib3hGdWxsc2NyZWVuJz48L2Rpdj48ZGl2IGNsYXNzPSdodG1sNWJveEhEJz48L2Rpdj48ZGl2IGNsYXNzPSdodG1sNWJveFZvbHVtZSc+PGRpdiBjbGFzcz0naHRtbDVib3hWb2x1bWVCdXR0b24nPjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Ym94Vm9sdW1lQmFyJz48ZGl2IGNsYXNzPSdodG1sNWJveFZvbHVtZUJhckJnJz48ZGl2IGNsYXNzPSdodG1sNWJveFZvbHVtZUJhckFjdGl2ZSc+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVib3hUaW1lVG90YWwnPi0tOi0tPC9kaXY+PGRpdiBjbGFzcz0naHRtbDVib3hTZWVrZXInPjxkaXYgY2xhc3M9J2h0bWw1Ym94U2Vla2VyQnVmZmVyJz48L2Rpdj48ZGl2IGNsYXNzPSdodG1sNWJveFNlZWtlclBsYXknPjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Ym94U2Vla2VySGFuZGxlcic+PC9kaXY+PC9kaXY+PGRpdiBzdHlsZT0nY2xlYXI6Ym90aDsnPjwvZGl2PjwvZGl2PiIpOwpxLmFmdGVyKHcpO3EuYWZ0ZXIoRSk7RS5jc3Moe2Rpc3BsYXk6Im5vbmUiLHBvc2l0aW9uOiJmaXhlZCIsbGVmdDowLHRvcDowLGJvdHRvbTowLHJpZ2h0OjB9KTt3LmNzcyh7ZGlzcGxheToiYmxvY2siLHBvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6IjEwMCUiLGhlaWdodDptLGxlZnQ6MCxib3R0b206MCxyaWdodDowLG1hcmdpbjoiMCBhdXRvIn0pO3ZhciBOPWZ1bmN0aW9uKCl7eD0hMH07cS5vbigidG91Y2ggY2xpY2sgbW91c2Vtb3ZlIG1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7eD0hMH0pO2N8fHNldEludGVydmFsKGZ1bmN0aW9uKCl7eCYmKHcuc2hvdygpLHg9ITEsY2xlYXJUaW1lb3V0KHQpLHQ9c2V0VGltZW91dChmdW5jdGlvbigpe3EuZ2V0KDApLnBhdXNlZHx8dy5mYWRlT3V0KCl9LDVFMykpfSwyNTApO24oIi5odG1sNWJveFZpZGVvQ29udHJvbHNCZyIsdykuY3NzKHtkaXNwbGF5OiJibG9jayIscG9zaXRpb246ImFic29sdXRlIix3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIiwKbGVmdDowLHRvcDowLCJiYWNrZ3JvdW5kLWNvbG9yIjoiIzAwMDAwMCIsb3BhY2l0eTowLjcsZmlsdGVyOiJhbHBoYShvcGFjaXR5PTcwKSJ9KTtuKCIuaHRtbDVib3hQbGF5UGF1c2UiLHcpLmNzcyh7ZGlzcGxheToiYmxvY2siLHBvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6IjMycHgiLGhlaWdodDoiMzJweCIsbWFyZ2luOk1hdGguZmxvb3IoKG0tMzIpLzIpLCJmbG9hdCI6ImxlZnQifSk7dmFyIEs9bigiLmh0bWw1Ym94UGxheSIsdykscD1uKCIuaHRtbDVib3hQYXVzZSIsdyk7Sy5jc3Moe2Rpc3BsYXk6ImJsb2NrIixwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCx3aWR0aDoiMzJweCIsaGVpZ2h0OiIzMnB4IixjdXJzb3I6InBvaW50ZXIiLCJiYWNrZ3JvdW5kLWltYWdlIjoidXJsKCciK2IrImh0bWw1Ym94cGxheWVyX3BsYXlwYXVzZS5wbmcnKSIsImJhY2tncm91bmQtcG9zaXRpb24iOiJ0b3AgbGVmdCJ9KS5ob3ZlcihmdW5jdGlvbigpe24odGhpcykuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6ImJvdHRvbSBsZWZ0In0pfSwKZnVuY3Rpb24oKXtuKHRoaXMpLmNzcyh7ImJhY2tncm91bmQtcG9zaXRpb24iOiJ0b3AgbGVmdCJ9KX0pLm9uKCJjbGljayIsZnVuY3Rpb24oKXtxLmdldCgwKS5wbGF5KCl9KTtwLmNzcyh7ZGlzcGxheToibm9uZSIscG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsd2lkdGg6IjMycHgiLGhlaWdodDoiMzJweCIsY3Vyc29yOiJwb2ludGVyIiwiYmFja2dyb3VuZC1pbWFnZSI6InVybCgnIitiKyJodG1sNWJveHBsYXllcl9wbGF5cGF1c2UucG5nJykiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoidG9wIHJpZ2h0In0pLmhvdmVyKGZ1bmN0aW9uKCl7bih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoiYm90dG9tIHJpZ2h0In0pfSxmdW5jdGlvbigpe24odGhpcykuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6InRvcCByaWdodCJ9KX0pLm9uKCJjbGljayIsZnVuY3Rpb24oKXtxLmdldCgwKS5wYXVzZSgpfSk7dmFyIFU9bigiLmh0bWw1Ym94VGltZUN1cnJlbnQiLAp3KSxHPW4oIi5odG1sNWJveFRpbWVUb3RhbCIsdyksQz1uKCIuaHRtbDVib3hTZWVrZXIiLHcpLE89bigiLmh0bWw1Ym94U2Vla2VyUGxheSIsdyksUD1uKCIuaHRtbDVib3hTZWVrZXJCdWZmZXIiLHcpLEw9bigiLmh0bWw1Ym94U2Vla2VySGFuZGxlciIsdyk7VS5jc3Moe2Rpc3BsYXk6ImJsb2NrIixwb3NpdGlvbjoicmVsYXRpdmUiLCJmbG9hdCI6ImxlZnQiLCJsaW5lLWhlaWdodCI6bSsicHgiLCJmb250LXdlaWdodCI6Im5vcm1hbCIsImZvbnQtc2l6ZSI6IjEycHgiLG1hcmdpbjoiMCA4cHgiLCJmb250LWZhbWlseSI6IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiLGNvbG9yOiIjZmZmIn0pO0cuY3NzKHtkaXNwbGF5OiJibG9jayIscG9zaXRpb246InJlbGF0aXZlIiwiZmxvYXQiOiJyaWdodCIsImxpbmUtaGVpZ2h0IjptKyJweCIsImZvbnQtd2VpZ2h0Ijoibm9ybWFsIiwiZm9udC1zaXplIjoiMTJweCIsbWFyZ2luOiIwIDhweCIsImZvbnQtZmFtaWx5IjoiQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZiIsCmNvbG9yOiIjZmZmIn0pO0MuY3NzKHtkaXNwbGF5OiJibG9jayIsY3Vyc29yOiJwb2ludGVyIixvdmVyZmxvdzoiaGlkZGVuIixwb3NpdGlvbjoicmVsYXRpdmUiLGhlaWdodDoiMTBweCIsImJhY2tncm91bmQtY29sb3IiOiIjMjIyIixtYXJnaW46TWF0aC5mbG9vcigobS0xMCkvMikrInB4IDRweCJ9KS5vbih2LGZ1bmN0aW9uKGEpe2E9KGc/YS5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF06YSkucGFnZVgtQy5vZmZzZXQoKS5sZWZ0O08uY3NzKHt3aWR0aDphfSk7cS5nZXQoMCkuY3VycmVudFRpbWU9YSpxLmdldCgwKS5kdXJhdGlvbi9DLndpZHRoKCk7Qy5vbihyLGZ1bmN0aW9uKGEpe2E9KGc/YS5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF06YSkucGFnZVgtQy5vZmZzZXQoKS5sZWZ0O08uY3NzKHt3aWR0aDphfSk7cS5nZXQoMCkuY3VycmVudFRpbWU9YSpxLmdldCgwKS5kdXJhdGlvbi9DLndpZHRoKCl9KX0pLm9uKGssZnVuY3Rpb24oKXtDLm9mZihyKX0pO1AuY3NzKHtkaXNwbGF5OiJibG9jayIsCnBvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDowLHRvcDowLGhlaWdodDoiMTAwJSIsImJhY2tncm91bmQtY29sb3IiOiIjNDQ0In0pO08uY3NzKHtkaXNwbGF5OiJibG9jayIscG9zaXRpb246ImFic29sdXRlIixsZWZ0OjAsdG9wOjAsaGVpZ2h0OiIxMDAlIiwiYmFja2dyb3VuZC1jb2xvciI6IiNmY2M1MDAifSk7dmFyIHk9Zj9xOnEucGFyZW50KCk7aWYoeS5nZXQoMCkucmVxdWVzdEZ1bGxzY3JlZW58fHkuZ2V0KDApLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVufHx5LmdldCgwKS5tb3pSZXF1ZXN0RnVsbFNjcmVlbnx8eS5nZXQoMCkud2Via2l0RW50ZXJGdWxsU2NyZWVufHx5LmdldCgwKS5tc1JlcXVlc3RGdWxsc2NyZWVuKXt2YXIgSD1mdW5jdGlvbihhKXtmP2E/KHEuZ2V0KDApLnNldEF0dHJpYnV0ZSgiY29udHJvbHMiLCJjb250cm9scyIpLGomJnEuZ2V0KDApLnNldEF0dHJpYnV0ZSgiY29udHJvbHNMaXN0Iiwibm9kb3dubG9hZCIpKTpxLmdldCgwKS5yZW1vdmVBdHRyaWJ1dGUoImNvbnRyb2xzIik6CmE/KG4oZG9jdW1lbnQpLm9uKCJtb3VzZW1vdmUiLE4pLHcuY3NzKHsiei1pbmRleCI6MjE0NzQ4MzY0Nyxwb3NpdGlvbjoiZml4ZWQifSksRS5jc3MoeyJ6LWluZGV4IjoyMTQ3NDgzNjQ3LGRpc3BsYXk6ImJsb2NrIn0pLEIuY3NzKHsiei1pbmRleCI6MjE0NzQ4MzY0N30pKToobihkb2N1bWVudCkub2ZmKCJtb3VzZW1vdmUiLE4pLHcuY3NzKHsiei1pbmRleCI6IiIscG9zaXRpb246ImFic29sdXRlIn0pLEUuY3NzKHsiei1pbmRleCI6IiIsZGlzcGxheToibm9uZSJ9KSxCLmNzcyh7InotaW5kZXgiOiIifSkpfTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJNU0Z1bGxzY3JlZW5DaGFuZ2UiLGZ1bmN0aW9uKCl7cz1udWxsIT1kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50O0gocyl9LCExKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJmdWxsc2NyZWVuY2hhbmdlIixmdW5jdGlvbigpe3M9ZG9jdW1lbnQuZnVsbHNjcmVlbjtIKHMpfSwhMSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW96ZnVsbHNjcmVlbmNoYW5nZSIsCmZ1bmN0aW9uKCl7cz1kb2N1bWVudC5tb3pGdWxsU2NyZWVuO0gocyl9LCExKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIixmdW5jdGlvbigpe3M9ZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuO0gocyl9LCExKTt5LmdldCgwKS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRiZWdpbmZ1bGxzY3JlZW4iLGZ1bmN0aW9uKCl7cz0hMDtIKHMpfSwhMSk7eS5nZXQoMCkuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0ZW5kZnVsbHNjcmVlbiIsZnVuY3Rpb24oKXtzPSExO0gocyl9LCExKTtmfHxuKCJoZWFkIikuYXBwZW5kKCI8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPnZpZGVvIithKyI6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMgeyBkaXNwbGF5Om5vbmUgIWltcG9ydGFudDsgfTwvc3R5bGU+Iik7bigiLmh0bWw1Ym94RnVsbHNjcmVlbiIsdykuY3NzKHtkaXNwbGF5OiJibG9jayIscG9zaXRpb246InJlbGF0aXZlIiwiZmxvYXQiOiJyaWdodCIsd2lkdGg6IjMycHgiLApoZWlnaHQ6IjMycHgiLG1hcmdpbjpNYXRoLmZsb29yKChtLTMyKS8yKSxjdXJzb3I6InBvaW50ZXIiLCJiYWNrZ3JvdW5kLWltYWdlIjoidXJsKCciK2IrImh0bWw1Ym94cGxheWVyX2Z1bGxzY3JlZW4ucG5nJykiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoibGVmdCB0b3AifSkuaG92ZXIoZnVuY3Rpb24oKXt2YXIgYT1uKHRoaXMpLmNzcygiYmFja2dyb3VuZC1wb3NpdGlvbiIpP24odGhpcykuY3NzKCJiYWNrZ3JvdW5kLXBvc2l0aW9uIikuc3BsaXQoIiAiKVswXTpuKHRoaXMpLmNzcygiYmFja2dyb3VuZC1wb3NpdGlvbi14Iik7bih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjphKyIgYm90dG9tIn0pfSxmdW5jdGlvbigpe3ZhciBhPW4odGhpcykuY3NzKCJiYWNrZ3JvdW5kLXBvc2l0aW9uIik/bih0aGlzKS5jc3MoImJhY2tncm91bmQtcG9zaXRpb24iKS5zcGxpdCgiICIpWzBdOm4odGhpcykuY3NzKCJiYWNrZ3JvdW5kLXBvc2l0aW9uLXgiKTtuKHRoaXMpLmNzcyh7ImJhY2tncm91bmQtcG9zaXRpb24iOmErCiIgdG9wIn0pfSkub24oImNsaWNrIixmdW5jdGlvbigpeyhzPSFzKT8oZiYmKHEuZ2V0KDApLnNldEF0dHJpYnV0ZSgiY29udHJvbHMiLCJjb250cm9scyIpLGomJnEuZ2V0KDApLnNldEF0dHJpYnV0ZSgiY29udHJvbHNMaXN0Iiwibm9kb3dubG9hZCIpKSx5LmdldCgwKS5yZXF1ZXN0RnVsbHNjcmVlbj95LmdldCgwKS5yZXF1ZXN0RnVsbHNjcmVlbigpOnkuZ2V0KDApLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuP3kuZ2V0KDApLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKCk6eS5nZXQoMCkubW96UmVxdWVzdEZ1bGxTY3JlZW4/eS5nZXQoMCkubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTp5LmdldCgwKS53ZWJraXRFbnRlckZ1bGxTY3JlZW4mJnkuZ2V0KDApLndlYmtpdEVudGVyRnVsbFNjcmVlbigpLHkuZ2V0KDApLm1zUmVxdWVzdEZ1bGxzY3JlZW4mJnkuZ2V0KDApLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKSk6ZG9jdW1lbnQuY2FuY2VsRnVsbFNjcmVlbj9kb2N1bWVudC5jYW5jZWxGdWxsU2NyZWVuKCk6CmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4/ZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpOmRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4/ZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpOmRvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuP2RvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuKCk6ZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbiYmZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpfSl9aWYoQSluKCIuaHRtbDVib3hIRCIsdykuY3NzKHtkaXNwbGF5OiJibG9jayIscG9zaXRpb246InJlbGF0aXZlIiwiZmxvYXQiOiJyaWdodCIsd2lkdGg6IjMycHgiLGhlaWdodDoiMzJweCIsbWFyZ2luOk1hdGguZmxvb3IoKG0tMzIpLzIpLGN1cnNvcjoicG9pbnRlciIsImJhY2tncm91bmQtaW1hZ2UiOiJ1cmwoJyIrYisiaHRtbDVib3hwbGF5ZXJfaGQucG5nJykiLCJiYWNrZ3JvdW5kLXBvc2l0aW9uIjooRD8icmlnaHQiOiJsZWZ0IikrIiBjZW50ZXIifSkub24oImNsaWNrIiwKZnVuY3Rpb24oKXtEPSFEO24odGhpcykuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6KEQ/InJpZ2h0IjoibGVmdCIpKyIgY2VudGVyIn0pO2UuaXNIZD1EO3ZhciBhPXEuZ2V0KDApLmlzUGF1c2VkO3EuZ2V0KDApLnNldEF0dHJpYnV0ZSgic3JjIiwoRD9BOkYpKyIjdD0iK3EuZ2V0KDApLmN1cnJlbnRUaW1lKTthP3EuZ2V0KDApLnBhdXNlKCk6cS5nZXQoMCkucGxheSgpfSk7cS5nZXQoMCkudm9sdW1lPWg7dmFyIFg9MD09aD8xOmg7YT1xLmdldCgwKS52b2x1bWU7cS5nZXQoMCkudm9sdW1lPWEvMiswLjE7aWYocS5nZXQoMCkudm9sdW1lPT09YS8yKzAuMSl7cS5nZXQoMCkudm9sdW1lPWE7aD1uKCIuaHRtbDVib3hWb2x1bWUiLHcpO3ZhciBWPW4oIi5odG1sNWJveFZvbHVtZUJ1dHRvbiIsdyksWT1uKCIuaHRtbDVib3hWb2x1bWVCYXIiLHcpLEo9bigiLmh0bWw1Ym94Vm9sdW1lQmFyQmciLHcpLFE9bigiLmh0bWw1Ym94Vm9sdW1lQmFyQWN0aXZlIix3KTtoLmNzcyh7ZGlzcGxheToiYmxvY2siLApwb3NpdGlvbjoicmVsYXRpdmUiLCJmbG9hdCI6InJpZ2h0Iix3aWR0aDoiMzJweCIsaGVpZ2h0OiIzMnB4IixtYXJnaW46TWF0aC5mbG9vcigobS0zMikvMil9KS5ob3ZlcihmdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KTt2YXIgYT1xLmdldCgwKS52b2x1bWU7US5jc3Moe2hlaWdodDpNYXRoLnJvdW5kKDEwMCphKSsiJSJ9KTtZLnNob3coKX0sZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSk7dT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WS5oaWRlKCl9LDFFMyl9KTtWLmNzcyh7ZGlzcGxheToiYmxvY2siLHBvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHdpZHRoOiIzMnB4IixoZWlnaHQ6IjMycHgiLGN1cnNvcjoicG9pbnRlciIsImJhY2tncm91bmQtaW1hZ2UiOiJ1cmwoJyIrYisiaHRtbDVib3hwbGF5ZXJfdm9sdW1lLnBuZycpIiwiYmFja2dyb3VuZC1wb3NpdGlvbiI6InRvcCAiKygwPGE/ImxlZnQiOiJyaWdodCIpfSkuaG92ZXIoZnVuY3Rpb24oKXt2YXIgYT1uKHRoaXMpLmNzcygiYmFja2dyb3VuZC1wb3NpdGlvbiIpPwpuKHRoaXMpLmNzcygiYmFja2dyb3VuZC1wb3NpdGlvbiIpLnNwbGl0KCIgIilbMF06bih0aGlzKS5jc3MoImJhY2tncm91bmQtcG9zaXRpb24teCIpO24odGhpcykuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6YSsiIGJvdHRvbSJ9KX0sZnVuY3Rpb24oKXt2YXIgYT1uKHRoaXMpLmNzcygiYmFja2dyb3VuZC1wb3NpdGlvbiIpP24odGhpcykuY3NzKCJiYWNrZ3JvdW5kLXBvc2l0aW9uIikuc3BsaXQoIiAiKVswXTpuKHRoaXMpLmNzcygiYmFja2dyb3VuZC1wb3NpdGlvbi14Iik7bih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjphKyIgdG9wIn0pfSkub24oImNsaWNrIixmdW5jdGlvbigpe3ZhciBhPXEuZ2V0KDApLnZvbHVtZTswPGE/KFg9YSxhPTApOmE9WDt2YXIgYj1uKHRoaXMpLmNzcygiYmFja2dyb3VuZC1wb3NpdGlvbiIpP24odGhpcykuY3NzKCJiYWNrZ3JvdW5kLXBvc2l0aW9uIikuc3BsaXQoIiAiKVsxXTpuKHRoaXMpLmNzcygiYmFja2dyb3VuZC1wb3NpdGlvbi15Iik7ClYuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6KDA8YT8ibGVmdCI6InJpZ2h0IikrIiAiK2J9KTtxLmdldCgwKS52b2x1bWU9YTtRLmNzcyh7aGVpZ2h0Ok1hdGgucm91bmQoMTAwKmEpKyIlIn0pfSk7WS5jc3Moe2Rpc3BsYXk6Im5vbmUiLHBvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDo0LGJvdHRvbToiMTAwJSIsd2lkdGg6MjQsaGVpZ2h0OjgwLCJtYXJnaW4tYm90dG9tIjpNYXRoLmZsb29yKChtLTMyKS8yKSwiYmFja2dyb3VuZC1jb2xvciI6IiMwMDAwMDAiLG9wYWNpdHk6MC43LGZpbHRlcjoiYWxwaGEob3BhY2l0eT03MCkifSk7Si5jc3Moe2Rpc3BsYXk6ImJsb2NrIixwb3NpdGlvbjoicmVsYXRpdmUiLHdpZHRoOjEwLGhlaWdodDo2OCxtYXJnaW46NyxjdXJzb3I6InBvaW50ZXIiLCJiYWNrZ3JvdW5kLWNvbG9yIjoiIzIyMiJ9KTtRLmNzcyh7ZGlzcGxheToiYmxvY2siLHBvc2l0aW9uOiJhYnNvbHV0ZSIsYm90dG9tOjAsbGVmdDowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLAoiYmFja2dyb3VuZC1jb2xvciI6IiNmY2M1MDAifSk7Si5vbih2LGZ1bmN0aW9uKGEpe2E9MS0oKGc/YS5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF06YSkucGFnZVktSi5vZmZzZXQoKS50b3ApL0ouaGVpZ2h0KCk7YT0xPGE/MTowPmE/MDphO1EuY3NzKHtoZWlnaHQ6TWF0aC5yb3VuZCgxMDAqYSkrIiUifSk7Vi5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoibGVmdCAiKygwPGE/InRvcCI6ImJvdHRvbSIpfSk7cS5nZXQoMCkudm9sdW1lPWE7Si5vbihyLGZ1bmN0aW9uKGEpe2E9MS0oKGc/YS5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF06YSkucGFnZVktSi5vZmZzZXQoKS50b3ApL0ouaGVpZ2h0KCk7YT0xPGE/MTowPmE/MDphO1EuY3NzKHtoZWlnaHQ6TWF0aC5yb3VuZCgxMDAqYSkrIiUifSk7Vi5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoibGVmdCAiKygwPGE/InRvcCI6ImJvdHRvbSIpfSk7cS5nZXQoMCkudm9sdW1lPWF9KX0pLm9uKGssZnVuY3Rpb24oKXtKLm9mZihyKX0pfXZhciBhYT0KZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5mbG9vcihhLzM2MDApLGM9TWF0aC5mbG9vcigoYS0zNjAwKmIpLzYwKTthPU1hdGguZmxvb3IoYS0oMzYwMCpiKzYwKmMpKTtjPSgxMD5jPyIwIitjOmMpKyI6IisoMTA+YT8iMCIrYTphKTswPGImJihjPSgxMD5iPyIwIitiOmIpKyI6IitjKTtyZXR1cm4gY307ZCYmQi5oaWRlKCk7YyYmdy5oaWRlKCk7Yj1mdW5jdGlvbigpe2R8fEIuc2hvdygpO2N8fCh3LnNob3coKSxjbGVhclRpbWVvdXQodCksSy5zaG93KCkscC5oaWRlKCkpfTt2PWZ1bmN0aW9uKCl7bih3aW5kb3cpLnRyaWdnZXIoImh0bWw1bGlnaHRib3gudmlkZW9lbmRlZCIpO2R8fEIuc2hvdygpO2N8fCh3LnNob3coKSxjbGVhclRpbWVvdXQodCksSy5zaG93KCkscC5oaWRlKCkpfTtrPWZ1bmN0aW9uKCl7dmFyIGE9cS5nZXQoMCkuY3VycmVudFRpbWU7aWYoYSl7VS50ZXh0KGFhKGEpKTt2YXIgYj1xLmdldCgwKS5kdXJhdGlvbjtpZihiKXtHLnRleHQoYWEoYikpO3ZhciBjPUMud2lkdGgoKSwKYT1NYXRoLnJvdW5kKGMqYS9iKTtPLmNzcyh7d2lkdGg6YX0pO0wuY3NzKHtsZWZ0OmF9KX19fTttPWZ1bmN0aW9uKCl7aWYocS5nZXQoMCkuYnVmZmVyZWQmJjA8cS5nZXQoMCkuYnVmZmVyZWQubGVuZ3RoJiYhaXNOYU4ocS5nZXQoMCkuYnVmZmVyZWQuZW5kKDApKSYmIWlzTmFOKHEuZ2V0KDApLmR1cmF0aW9uKSl7dmFyIGE9Qy53aWR0aCgpO1AuY3NzKHt3aWR0aDpNYXRoLnJvdW5kKGEqcS5nZXQoMCkuYnVmZmVyZWQuZW5kKDApL3EuZ2V0KDApLmR1cmF0aW9uKX0pfX07dHJ5e3Eub24oInBsYXkiLGZ1bmN0aW9uKCl7ZHx8Qi5oaWRlKCk7Y3x8KEsuaGlkZSgpLHAuc2hvdygpKX0pLHEub24oInBhdXNlIixiKSxxLm9uKCJlbmRlZCIsdikscS5vbigidGltZXVwZGF0ZSIsaykscS5vbigicHJvZ3Jlc3MiLG0pfWNhdGNoKGJhKXt9fTt2YXIgYj1qUXVlcnksRj0wO2IuZm4uaHRtbDVnYWxsZXJ5PWZ1bmN0aW9uKGspe3ZhciBlPWZ1bmN0aW9uKGEsYyxkKXt0aGlzLmNvbnRhaW5lcj0KYTt0aGlzLm9wdGlvbnM9Yzt0aGlzLmlkPWQ7dGhpcy5vcHRpb25zLmZsYXNoSW5zdGFsbGVkPSExO3RyeXtuZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2giKSYmKHRoaXMub3B0aW9ucy5mbGFzaEluc3RhbGxlZD0hMCl9Y2F0Y2goaCl7bmF2aWdhdG9yLm1pbWVUeXBlc1siYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giXSYmKHRoaXMub3B0aW9ucy5mbGFzaEluc3RhbGxlZD0hMCl9dGhpcy5vcHRpb25zLmh0bWw1VmlkZW9TdXBwb3J0ZWQ9ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpLmNhblBsYXlUeXBlO3RoaXMub3B0aW9ucy5pc0Nocm9tZT1udWxsIT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9DaHJvbWUvaSk7dGhpcy5vcHRpb25zLmlzRmlyZWZveD1udWxsIT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9GaXJlZm94L2kpO3RoaXMub3B0aW9ucy5pc09wZXJhPW51bGwhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09wZXJhL2kpfHwKbnVsbCE9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1BSXC8vaSk7dGhpcy5vcHRpb25zLmlzU2FmYXJpPW51bGwhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1NhZmFyaS9pKTt0aGlzLm9wdGlvbnMuaXNJRTExPW51bGwhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1RyaWRlbnRcLzcvKSYmbnVsbCE9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvcnY6MTEvKTt0aGlzLm9wdGlvbnMuaXNJRT1udWxsIT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9NU0lFL2kpJiYhdGhpcy5vcHRpb25zLmlzT3BlcmE7dGhpcy5vcHRpb25zLmlzSUUxMD1udWxsIT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9NU0lFIDEwL2kpJiYhdGhpcy5vcHRpb25zLmlzT3BlcmE7dGhpcy5vcHRpb25zLmlzSUU5PW51bGwhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL01TSUUgOS9pKSYmIXRoaXMub3B0aW9ucy5pc09wZXJhO3RoaXMub3B0aW9ucy5pc0lFOD1udWxsIT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9NU0lFIDgvaSkmJgohdGhpcy5vcHRpb25zLmlzT3BlcmE7dGhpcy5vcHRpb25zLmlzSUU3PW51bGwhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL01TSUUgNy9pKSYmIXRoaXMub3B0aW9ucy5pc09wZXJhO3RoaXMub3B0aW9ucy5pc0lFNj1udWxsIT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9NU0lFIDYvaSkmJiF0aGlzLm9wdGlvbnMuaXNPcGVyYTt0aGlzLm9wdGlvbnMuaXNJRTY3OD10aGlzLm9wdGlvbnMuaXNJRTZ8fHRoaXMub3B0aW9ucy5pc0lFN3x8dGhpcy5vcHRpb25zLmlzSUU4O3RoaXMub3B0aW9ucy5pc0lFNjc4OT10aGlzLm9wdGlvbnMuaXNJRTZ8fHRoaXMub3B0aW9ucy5pc0lFN3x8dGhpcy5vcHRpb25zLmlzSUU4fHx0aGlzLm9wdGlvbnMuaXNJRTk7dGhpcy5vcHRpb25zLmlzQW5kcm9pZD1udWxsIT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpO3RoaXMub3B0aW9ucy5pc0lQYWQ9bnVsbCE9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBhZC9pKTsKdGhpcy5vcHRpb25zLmlzSVBob25lPW51bGwhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQb2QvaSl8fG51bGwhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZS9pKTt0aGlzLm9wdGlvbnMuaXNJT1M9dGhpcy5vcHRpb25zLmlzSVBhZHx8dGhpcy5vcHRpb25zLmlzSVBob25lO3RoaXMub3B0aW9ucy5pc01vYmlsZT10aGlzLm9wdGlvbnMuaXNBbmRyb2lkfHx0aGlzLm9wdGlvbnMuaXNJUGFkfHx0aGlzLm9wdGlvbnMuaXNJUGhvbmU7dGhpcy5vcHRpb25zLmlzSU9TTGVzczU9dGhpcy5vcHRpb25zLmlzSVBhZCYmdGhpcy5vcHRpb25zLmlzSVBob25lJiYobnVsbCE9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgNC9pKXx8bnVsbCE9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgMy9pKSk7dGhpcy5vcHRpb25zLnN1cHBvcnRDU1NQb3NpdGlvbkZpeGVkPSF0aGlzLm9wdGlvbnMuaXNJRTYmJiF0aGlzLm9wdGlvbnMuaXNJT1NMZXNzNTt0aGlzLmVTdGFydD0KKHRoaXMuaXNUb3VjaD0ib250b3VjaHN0YXJ0ImluIHdpbmRvdyk/InRvdWNoc3RhcnQiOiJtb3VzZWRvd24iO3RoaXMuZU1vdmU9dGhpcy5pc1RvdWNoPyJ0b3VjaG1vdmUiOiJtb3VzZW1vdmUiO3RoaXMuZUNhbmNlbD10aGlzLmlzVG91Y2g/InRvdWNoY2FuY2VsIjoibW91c2V1cCI7dGhpcy5lQ2xpY2s9ImNsaWNrIjthPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik7dGhpcy5vcHRpb25zLmNhbnBsYXltcDQ9YSYmYS5jYW5QbGF5VHlwZSYmYS5jYW5QbGF5VHlwZSgidmlkZW8vbXA0IikucmVwbGFjZSgvbm8vLCIiKTt0aGlzLnNsaWRlc2hvd1RpbWVvdXQ9bnVsbDt0aGlzLmxvb3B0aW1lcz0wO3RoaXMudXBkYXRlQ2Fyb3VzZWxUaW1lb3V0PW51bGw7dGhpcy5kaXNhYmxldXBkYXRlY2Fyb3VzZWw9ITE7dGhpcy5oaWRlVG9vbGJveFRpbWVvdXQ9dGhpcy5oaWRlVGl0bGVUaW1lb3V0PW51bGw7dGhpcy5pc0hkPXRoaXMub3B0aW9ucy5oZGRlZmF1bHQ7dGhpcy5pc0hUTUw1PQohMTt0aGlzLmVsZW1BcnJheT1bXTtiKCIuaHRtbDVnYWxsZXJ5LWxvYWRpbmciKS5oaWRlKCk7dGhpcy5jb250YWluZXIuY2hpbGRyZW4oKS5oaWRlKCk7dGhpcy5jb250YWluZXIuY3NzKHtkaXNwbGF5OiJibG9jayIscG9zaXRpb246InJlbGF0aXZlIn0pO3RoaXMub3B0aW9ucy5nb29nbGVmb250cyYmMDx0aGlzLm9wdGlvbnMuZ29vZ2xlZm9udHMubGVuZ3RoJiYoYT0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PSIrdGhpcy5vcHRpb25zLmdvb2dsZWZvbnRzLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpLGMuc2V0QXR0cmlidXRlKCJyZWwiLCJzdHlsZXNoZWV0IiksYy5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGMuc2V0QXR0cmlidXRlKCJocmVmIixhKSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGMpKTt0aGlzLmluaXREYXRhKHRoaXMucHJvY2Vzc0VsZW1BcnJheSl9O2UucHJvdG90eXBlPQp7Z2V0UGFyYW1zOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXt9LGI9d2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoIiYiKSxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBoPWJbZF0uc3BsaXQoIj0iKTtoJiYyPT1oLmxlbmd0aCYmKGFbaFswXS50b0xvd2VyQ2FzZSgpXT11bmVzY2FwZShoWzFdKSl9cmV0dXJuIGF9LGluaXQ6ZnVuY3Rpb24oYSl7aWYoYS5vcHRpb25zLnJhbmRvbSlmb3IodmFyIGM9YS5lbGVtQXJyYXkubGVuZ3RoLTE7MDxjO2MtLSl7dmFyIGQ9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmMpLGg9YS5lbGVtQXJyYXlbY107YS5lbGVtQXJyYXlbY109YS5lbGVtQXJyYXlbZF07YS5lbGVtQXJyYXlbZF09aH1hLm9wdGlvbnMucmV2ZXJzZSYmYS5lbGVtQXJyYXkucmV2ZXJzZSgpO2EuaW5pdFlvdXR1YmVBcGkoKTthLm9wdGlvbnMuc2hvd2Nhcm91c2VsPSgxPGEuZWxlbUFycmF5Lmxlbmd0aHx8YS5vcHRpb25zLnNob3djYXJvdXNlbGZvcnNpbmdsZSkmJgphLm9wdGlvbnMuc2hvd2Nhcm91c2VsO2Eub3B0aW9ucy53YXRlcm1hcmtjb2RlPSIiO2Eub3B0aW9ucy5mdj9hLm9wdGlvbnMud2F0ZXJtYXJrY29kZT0iPGEgc3R5bGU9J3RleHQtZGVjb3JhdGlvbjpub25lOycgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9JyIrYS5vcHRpb25zLmZyZWVsaW5rKyInID4iOjA8YS5vcHRpb25zLndhdGVybWFya2xpbmsubGVuZ3RoJiYoYS5vcHRpb25zLndhdGVybWFya2NvZGU9IjxhIHN0eWxlPSd0ZXh0LWRlY29yYXRpb246bm9uZTsnIHRhcmdldD0nX2JsYW5rJyBocmVmPSciK2Eub3B0aW9ucy53YXRlcm1hcmtsaW5rKyInID4iKTthLm9wdGlvbnMud2F0ZXJtYXJrY29kZSs9IjxkaXYgIisoYS5vcHRpb25zLmZ2PyIiOiJjbGFzcz0naHRtbDVnYWxsZXJ5LXdhdGVybWFyay0iK2EuaWQrIicgIikrInN0eWxlPSciKyhhLm9wdGlvbnMuZnY/ImRpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTp2aXNpYmxlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMHB4O2xlZnQ6MTBweDt3aWR0aDoxNzBweDtoZWlnaHQ6MThweDtsaW5lLWhlaWdodDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6NXB4Oy1tb3otYm9yZGVyLXJhZGl1czo1cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzMzMztmb250LXNpemU6MTJweDtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsiOgowPGEub3B0aW9ucy53YXRlcm1hcmsubGVuZ3RoPyJkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowcHg7bGVmdDowcHg7IjoiZGlzcGxheTpub25lOyIpKyInID4iO2Eub3B0aW9ucy5mdj9hLm9wdGlvbnMud2F0ZXJtYXJrY29kZSs9YS5vcHRpb25zLmZ2bTowPGEub3B0aW9ucy53YXRlcm1hcmsubGVuZ3RoJiYoYS5vcHRpb25zLndhdGVybWFya2NvZGUrPSI8aW1nIHNyYz0nIithLm9wdGlvbnMud2F0ZXJtYXJrKyInIGFsdD0nJyAvPiIpO2Eub3B0aW9ucy53YXRlcm1hcmtjb2RlKz0iPC9kaXY+IjtpZihhLm9wdGlvbnMuZnZ8fDA8YS5vcHRpb25zLndhdGVybWFya2xpbmsubGVuZ3RoKWEub3B0aW9ucy53YXRlcm1hcmtjb2RlKz0iPC9hPiI7YS5jcmVhdGVTdHlsZSgpO2EuY3JlYXRlTWFya3VwKCk7YS5jcmVhdGVJbWFnZVRvb2xib3goKTtpZighKDA+PWEuZWxlbUFycmF5Lmxlbmd0aCkpe2EuY3JlYXRlU2xpZGVyVGltZW91dCgpO2EuY3JlYXRlRXZlbnRzKCk7CmEubG9hZENhcm91c2VsKCk7YS5zYXZlZEVsZW09LTE7YS5jdXJFbGVtPS0xO2EubmV4dEVsZW09LTE7YS5wcmV2RWxlbT0tMTthLmlzUGF1c2VkPSFhLm9wdGlvbnMuYXV0b3NsaWRlO2EuaXNGdWxsc2NyZWVuPSExO2EuaXNWaWRlb1BsYXlpbmc9ITE7YS5zaG93aW5nUG9zdGVyPSExO2EuZGlzYWJsZVRvdWNoU3dpcGU9ITE7YS5jcmVhdGVTb2NpYWwoITEpO2M9YS5nZXRQYXJhbXMoKTtkPWEub3B0aW9ucy5maXJzdGl0ZW1pZDtjLmh0bWw1Z2FsbGVyeWlkJiZjLmh0bWw1Z2FsbGVyeWlkIGluIGEuZWxlbUFycmF5JiYoZD1jLmh0bWw1Z2FsbGVyeWlkKTtjLmdhbGxlcnlzaGFyZWlkJiZjLmdhbGxlcnlzaGFyZWlkIGluIGEuZWxlbUFycmF5JiYoZD1jLmdhbGxlcnlzaGFyZWlkKTthLnNsaWRlUnVuKGQpO2lmKGEub3B0aW9ucy5yZXNwb25zaXZlJiYoYS5yZXNpemVHYWxsZXJ5KCksYih3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpe2EucmVzaXplR2FsbGVyeSgpfSksYS5vcHRpb25zLmlzTW9iaWxlJiYKIWEub3B0aW9ucy5tb2JpbGVyZXNpemVldmVudCkpYih3aW5kb3cpLm9uKCJvcmllbnRhdGlvbmNoYW5nZSIsZnVuY3Rpb24oKXthLnJlc2l6ZUdhbGxlcnkoKX0pO2Iod2luZG93KS50cmlnZ2VyKCJodG1sNWdhbGxlcnkuaW5pdGVkIixbYS5pZCxhLmN1ckVsZW1dKX19LHJlc2l6ZUdhbGxlcnk6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5vcHRpb25zLnNraW4pe2Nhc2UgInZlcnRpY2FsIjpjYXNlICJ2ZXJ0aWNhbGxpZ2h0IjpjYXNlICJzaG93Y2FzZSI6dGhpcy5yZXNpemVTdHlsZVZlcnRpY2FsKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJlc2l6ZVN0eWxlRGVmYXVsdCgpfXRoaXMucmVzaXplSW1hZ2VUb29sYm94KCl9LGFic29sdXRlVXJsOmZ1bmN0aW9uKGEpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtiLmhyZWY9YTtyZXR1cm4gYi5wcm90b2NvbCsiLy8iK2IuaG9zdCtiLnBhdGhuYW1lK2Iuc2VhcmNoK2IuaGFzaH0sY3JlYXRlU29jaWFsOmZ1bmN0aW9uKGEpe3RoaXMub3B0aW9ucy5pbml0c29jaWFsJiYKYigiaGVhZCIpLmFwcGVuZCgnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSInK3RoaXMub3B0aW9ucy5qc2ZvbGRlcisnaWNvbnMvY3NzL2ZvbnRlbGxvLmNzcyIgdHlwZT0idGV4dC9jc3MiIC8+Jyk7aWYodGhpcy5vcHRpb25zLnNob3dzb2NpYWwpe3ZhciBjPXRoaXM7YigiaGVhZCIpLmFwcGVuZCgiPHN0eWxlIHR5cGU9J3RleHQvY3NzJyBkYXRhLWNyZWF0b3I9J2h0bWw1Z2FsbGVyeSc+Lmh0bWw1Z2FsbGVyeS1yb3RhdGUgeyBib3JkZXItcmFkaXVzOjUwJTsgLXdlYmtpdC10cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC40cyBlYXNlLWluOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjRzIGVhc2UtaW47IH0gLmh0bWw1Z2FsbGVyeS1yb3RhdGU6aG92ZXIgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH08L3N0eWxlPiIpO3ZhciBkPSI8ZGl2IixkPWE/ZCsoJyBjbGFzcz0iaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tc29jaWFsLScrCnRoaXMuaWQrJyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsnK3RoaXMub3B0aW9ucy5zb2NpYWxwb3NpdGlvbmxpZ2h0Ym94KyciJyk6ZCsoJyBjbGFzcz0iaHRtbDVnYWxsZXJ5LXNvY2lhbC0nK3RoaXMuaWQrJyIgc3R5bGU9ImRpc3BsYXk6JysoIm1vdXNlb3ZlciI9PXRoaXMub3B0aW9ucy5zb2NpYWxtb2RlPyJub25lIjoiYmxvY2siKSsiOyIrdGhpcy5vcHRpb25zLnNvY2lhbHBvc2l0aW9uKyciJyksZD1kKyI+IixoPSgiaG9yaXpvbnRhbCI9PXRoaXMub3B0aW9ucy5zb2NpYWxkaXJlY3Rpb24/ImRpc3BsYXk6aW5saW5lLWJsb2NrOyI6ImRpc3BsYXk6YmxvY2s7IikrIm1hcmdpbjo0cHg7IixlPSJkaXNwbGF5OnRhYmxlLWNlbGw7d2lkdGg6Iit0aGlzLm9wdGlvbnMuc29jaWFsYnV0dG9uc2l6ZSsicHg7aGVpZ2h0OiIrdGhpcy5vcHRpb25zLnNvY2lhbGJ1dHRvbnNpemUrInB4O2ZvbnQtc2l6ZToiK3RoaXMub3B0aW9ucy5zb2NpYWxidXR0b25mb250c2l6ZSsicHg7Ym9yZGVyLXJhZGl1czo1MCU7Y29sb3I6I2ZmZjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzowOyI7CnRoaXMub3B0aW9ucy5zaG93ZW1haWwmJihkKz0nPGRpdiBjbGFzcz0iaHRtbDVnYWxsZXJ5LXNvY2lhbC1idG4tJyt0aGlzLmlkKyh0aGlzLm9wdGlvbnMuc29jaWFscm90YXRlZWZmZWN0PyIgaHRtbDVnYWxsZXJ5LXJvdGF0ZSI6IiIpKycgaHRtbDVnYWxsZXJ5LXNvY2lhbC1lbWFpbCIgc3R5bGU9IicraCsnIj48ZGl2IGNsYXNzPSJtaC1pY29uLW1haWwiIHN0eWxlPSInK2UrJ2JhY2tncm91bmQtY29sb3I6IzRkODNmZjsiPjwvZGl2PjwvZGl2PicpO3RoaXMub3B0aW9ucy5zaG93ZmFjZWJvb2smJihkKz0nPGRpdiBjbGFzcz0iaHRtbDVnYWxsZXJ5LXNvY2lhbC1idG4tJyt0aGlzLmlkKyh0aGlzLm9wdGlvbnMuc29jaWFscm90YXRlZWZmZWN0PyIgaHRtbDVnYWxsZXJ5LXJvdGF0ZSI6IiIpKycgaHRtbDVnYWxsZXJ5LXNvY2lhbC1mYWNlYm9vayIgc3R5bGU9IicraCsnIj48ZGl2IGNsYXNzPSJtaC1pY29uLWZhY2Vib29rIiBzdHlsZT0iJytlKydiYWNrZ3JvdW5kLWNvbG9yOiMzYjU5OTg7Ij48L2Rpdj48L2Rpdj4nKTsKdGhpcy5vcHRpb25zLnNob3d0d2l0dGVyJiYoZCs9JzxkaXYgY2xhc3M9Imh0bWw1Z2FsbGVyeS1zb2NpYWwtYnRuLScrdGhpcy5pZCsodGhpcy5vcHRpb25zLnNvY2lhbHJvdGF0ZWVmZmVjdD8iIGh0bWw1Z2FsbGVyeS1yb3RhdGUiOiIiKSsnIGh0bWw1Z2FsbGVyeS1zb2NpYWwtdHdpdHRlciIgc3R5bGU9IicraCsnIj48ZGl2IGNsYXNzPSJtaC1pY29uLXR3aXR0ZXIiIHN0eWxlPSInK2UrJ2JhY2tncm91bmQtY29sb3I6IzAzYjNlZTsiPjwvZGl2PjwvZGl2PicpO3RoaXMub3B0aW9ucy5zaG93cGludGVyZXN0JiYoZCs9JzxkaXYgY2xhc3M9Imh0bWw1Z2FsbGVyeS1zb2NpYWwtYnRuLScrdGhpcy5pZCsodGhpcy5vcHRpb25zLnNvY2lhbHJvdGF0ZWVmZmVjdD8iIGh0bWw1Z2FsbGVyeS1yb3RhdGUiOiIiKSsnIGh0bWw1Z2FsbGVyeS1zb2NpYWwtcGludGVyZXN0IiBzdHlsZT0iJytoKyciPjxkaXYgY2xhc3M9Im1oLWljb24tcGludGVyZXN0IiBzdHlsZT0iJytlKydiYWNrZ3JvdW5kLWNvbG9yOiNjOTIyMjg7Ij48L2Rpdj48L2Rpdj4nKTsKZCs9JzxkaXYgc3R5bGU9ImNsZWFyOmJvdGg7Ij48L2Rpdj48L2Rpdj4nO2E/YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLWJveC0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuYXBwZW5kKGQpOihiKCIuaHRtbDVnYWxsZXJ5LWJveC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuYXBwZW5kKGQpLCJtb3VzZW92ZXIiPT10aGlzLm9wdGlvbnMuc29jaWFsbW9kZSYmYigiLmh0bWw1Z2FsbGVyeS1ib3gtIit0aGlzLmlkKS5ob3ZlcihmdW5jdGlvbigpe2IoIi5odG1sNWdhbGxlcnktc29jaWFsLSIrYy5pZCkuZmFkZUluKCl9LGZ1bmN0aW9uKCl7YigiLmh0bWw1Z2FsbGVyeS1zb2NpYWwtIitjLmlkKS5mYWRlT3V0KCl9KSk7YigiLmh0bWw1Z2FsbGVyeS1zb2NpYWwtYnRuLSIrdGhpcy5pZCkuY2xpY2soZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cubG9jYXRpb24uaHJlZisoMD53aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKCI/Iik/Ij8iOiImIikrImdhbGxlcnlzaGFyZWlkPSIrCmMuZWxlbUFycmF5W2MuY3VyRWxlbV1bMF0sZD1jLmVsZW1BcnJheVtjLmN1ckVsZW1dWzddLGg9Yy5hYnNvbHV0ZVVybChjLmVsZW1BcnJheVtjLmN1ckVsZW1dWzJdKSxlPTU9PWMuZWxlbUFycmF5W2MuY3VyRWxlbV1bOV18fDY9PWMuZWxlbUFycmF5W2MuY3VyRWxlbV1bOV18fDc9PWMuZWxlbUFycmF5W2MuY3VyRWxlbV1bOV18fDg9PWMuZWxlbUFycmF5W2MuY3VyRWxlbV1bOV18fDk9PWMuZWxlbUFycmF5W2MuY3VyRWxlbV1bOV18fDEwPT1jLmVsZW1BcnJheVtjLmN1ckVsZW1dWzldfHwxMT09Yy5lbGVtQXJyYXlbYy5jdXJFbGVtXVs5XSxkPWQ/Yy5odG1sMlRleHQoZCk6IiI7ZSYmYy5lbGVtQXJyYXlbYy5jdXJFbGVtXVsxMl0mJihoPWMuYWJzb2x1dGVVcmwoYy5lbGVtQXJyYXlbYy5jdXJFbGVtXVsxMl0pKTtiKHRoaXMpLmhhc0NsYXNzKCJodG1sNWdhbGxlcnktc29jaWFsLWZhY2Vib29rIik/d2luZG93Lm9wZW4oImh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9zaGFyZXIvc2hhcmVyLnBocD91PSIrCmVuY29kZVVSSUNvbXBvbmVudChhKSsiJnQ9IitlbmNvZGVVUklDb21wb25lbnQoZCksIl9ibGFuayIpOmIodGhpcykuaGFzQ2xhc3MoImh0bWw1Z2FsbGVyeS1zb2NpYWwtdHdpdHRlciIpP3dpbmRvdy5vcGVuKCJodHRwczovL3R3aXR0ZXIuY29tL3NoYXJlP3VybD0iK2VuY29kZVVSSUNvbXBvbmVudChhKSsiJnRleHQ9IitlbmNvZGVVUklDb21wb25lbnQoZCksIl9ibGFuayIpOmIodGhpcykuaGFzQ2xhc3MoImh0bWw1Z2FsbGVyeS1zb2NpYWwtcGludGVyZXN0Iik/d2luZG93Lm9wZW4oImh0dHBzOi8vcGludGVyZXN0LmNvbS9waW4vY3JlYXRlL2Jvb2ttYXJrbGV0Lz9tZWRpYT0iK2VuY29kZVVSSUNvbXBvbmVudChoKSsiJnVybD0iK2VuY29kZVVSSUNvbXBvbmVudChhKSsiJmRlc2NyaXB0aW9uPSIrZW5jb2RlVVJJQ29tcG9uZW50KGQpKyImaXNfdmlkZW89IisoZT8idHJ1ZSI6ImZhbHNlIiksIl9ibGFuayIpOmIodGhpcykuaGFzQ2xhc3MoImh0bWw1Z2FsbGVyeS1zb2NpYWwtZW1haWwiKSYmCndpbmRvdy5vcGVuKCJtYWlsdG86P3N1YmplY3Q9IitlbmNvZGVVUklDb21wb25lbnQoZCkrIiZib2R5PUNoZWNrIG91dCB0aGlzOiAiK2VuY29kZVVSSUNvbXBvbmVudChhKSk7cmV0dXJuITF9KX19LGh0bWwyVGV4dDpmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtiLmlubmVySFRNTD1hO3JldHVybiBiLmlubmVyVGV4dH0sY2hlY2tNSzpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5mdil7dmFyIGE9YigiLmh0bWw1Z2FsbGVyeS1lbGVtLSIrdGhpcy5pZCx0aGlzLmNvbnRhaW5lciksYz1iKCdhW2hyZWY9IicrdGhpcy5vcHRpb25zLmZyZWVsaW5rKyciXScsYSk7aWYoMD5hLnRleHQoKS5pbmRleE9mKHRoaXMub3B0aW9ucy5mdm0pfHwwPmMubGVuZ3RoKWEuYXBwZW5kKCI8YSBzdHlsZT0ndGV4dC1kZWNvcmF0aW9uOm5vbmU7JyB0YXJnZXQ9J19ibGFuaycgaHJlZj0nIit0aGlzLm9wdGlvbnMuZnJlZWxpbmsrIicgPjxkaXYgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTp2aXNpYmxlO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMHB4O2xlZnQ6MTBweDt3aWR0aDoxNzBweDtoZWlnaHQ6MThweDtsaW5lLWhlaWdodDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6NXB4Oy1tb3otYm9yZGVyLXJhZGl1czo1cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzMzMztmb250LXNpemU6MTJweDtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsnPiIrCnRoaXMub3B0aW9ucy5mdm0rIjwvZGl2PjwvYT4iKTtlbHNlIGlmKGE9Yy5maW5kKCJkaXYiKSwibm9uZSI9PWMuY3NzKCJkaXNwbGF5Iil8fCJoaWRkZW4iPT1jLmNzcygidmlzaWJpbGl0eSIpfHw4PnBhcnNlSW50KGMuY3NzKCJmb250LXNpemUiKSl8fCJub25lIj09YS5jc3MoImRpc3BsYXkiKXx8ImhpZGRlbiI9PWEuY3NzKCJ2aXNpYmlsaXR5Iil8fDg+cGFyc2VJbnQoYS5jc3MoImZvbnQtc2l6ZSIpKSljLmF0dHIoe3N0eWxlOihjLmF0dHIoInN0eWxlIil8fCIiKSsiZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTp2aXNpYmxlIWltcG9ydGFudDtmb250LXNpemU6MTJweCFpbXBvcnRhbnQ7In0pLGEuYXR0cih7c3R5bGU6YS5hdHRyKCJzdHlsZSIpKyJkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt2aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50O2ZvbnQtc2l6ZToxMnB4IWltcG9ydGFudDsifSl9fSxpbml0RGF0YTpmdW5jdGlvbihhKXt0aGlzLmVsZW1BcnJheT0KW107aWYodGhpcy5vcHRpb25zLnNyYyYmMDx0aGlzLm9wdGlvbnMuc3JjLmxlbmd0aCl7dmFyIGM9dGhpcy5vcHRpb25zLm1lZGlhdHlwZT90aGlzLm9wdGlvbnMubWVkaWF0eXBlOnRoaXMuY2hlY2tUeXBlKHRoaXMub3B0aW9ucy5zcmMpO3RoaXMuZWxlbUFycmF5LnB1c2goWzAsIiIsdGhpcy5vcHRpb25zLnNyYyx0aGlzLm9wdGlvbnMud2VibSx0aGlzLm9wdGlvbnMub2dnLCIiLCIiLHRoaXMub3B0aW9ucy50aXRsZT90aGlzLm9wdGlvbnMudGl0bGU6IiIsdGhpcy5vcHRpb25zLnRpdGxlP3RoaXMub3B0aW9ucy50aXRsZToiIixjLHRoaXMub3B0aW9ucy53aWR0aCx0aGlzLm9wdGlvbnMuaGVpZ2h0LHRoaXMub3B0aW9ucy5wb3N0ZXIsdGhpcy5vcHRpb25zLmhkLHRoaXMub3B0aW9ucy5oZG9nZyx0aGlzLm9wdGlvbnMuaGR3ZWJtXSk7dGhpcy5yZWFkVGFncygpO2EodGhpcyl9ZWxzZSBpZih0aGlzLm9wdGlvbnMueG1sJiYwPHRoaXMub3B0aW9ucy54bWwubGVuZ3RoKXt0aGlzLm9wdGlvbnMueG1sbm9jYWNoZSYmCih0aGlzLm9wdGlvbnMueG1sKz0wPnRoaXMub3B0aW9ucy54bWwuaW5kZXhPZigiPyIpPyI/IjoiJiIsdGhpcy5vcHRpb25zLnhtbCs9TWF0aC5yYW5kb20oKSk7dmFyIGQ9dGhpcztiLmFqYXgoe3R5cGU6IkdFVCIsdXJsOnRoaXMub3B0aW9ucy54bWwsZGF0YVR5cGU6InhtbCIsc3VjY2VzczpmdW5jdGlvbihjKXtiKGMpLmZpbmQoInNsaWRlIikuZWFjaChmdW5jdGlvbihhKXt2YXIgYz1iKHRoaXMpLmZpbmQoInRpdGxlIikudGV4dCgpLGg9Yih0aGlzKS5maW5kKCJkZXNjcmlwdGlvbiIpLnRleHQoKT9iKHRoaXMpLmZpbmQoImRlc2NyaXB0aW9uIikudGV4dCgpOmIodGhpcykuZmluZCgiaW5mb3JtYXRpb24iKS50ZXh0KCk7Y3x8KGM9IiIpO2h8fChoPSIiKTt2YXIgZT1iKHRoaXMpLmZpbmQoIm1lZGlhdHlwZSIpLnRleHQoKT9iKHRoaXMpLmZpbmQoIm1lZGlhdHlwZSIpLnRleHQoKTpkLmNoZWNrVHlwZShiKHRoaXMpLmZpbmQoImZpbGUiKS50ZXh0KCkpO2QuZWxlbUFycmF5LnB1c2goW2IodGhpcykuZmluZCgiaWQiKS5sZW5ndGg/CmIodGhpcykuZmluZCgiaWQiKS50ZXh0KCk6YSxiKHRoaXMpLmZpbmQoInRodW1ibmFpbCIpLnRleHQoKSxiKHRoaXMpLmZpbmQoImZpbGUiKS50ZXh0KCksYih0aGlzKS5maW5kKCJmaWxlLW9nZyIpLnRleHQoKSxiKHRoaXMpLmZpbmQoImZpbGUtd2VibSIpLnRleHQoKSxiKHRoaXMpLmZpbmQoImxpbmsiKS50ZXh0KCksYih0aGlzKS5maW5kKCJsaW5rdGFyZ2V0IikudGV4dCgpLGMsaCxlLGIodGhpcykuZmluZCgid2lkdGgiKS5sZW5ndGgmJiFpc05hTihwYXJzZUludChiKHRoaXMpLmZpbmQoIndpZHRoIikudGV4dCgpKSk/cGFyc2VJbnQoYih0aGlzKS5maW5kKCJ3aWR0aCIpLnRleHQoKSk6ZC5vcHRpb25zLndpZHRoLGIodGhpcykuZmluZCgiaGVpZ2h0IikubGVuZ3RoJiYhaXNOYU4ocGFyc2VJbnQoYih0aGlzKS5maW5kKCJoZWlnaHQiKS50ZXh0KCkpKT9wYXJzZUludChiKHRoaXMpLmZpbmQoImhlaWdodCIpLnRleHQoKSk6ZC5vcHRpb25zLmhlaWdodCxiKHRoaXMpLmZpbmQoInBvc3RlciIpLnRleHQoKSwKYih0aGlzKS5maW5kKCJoZCIpLnRleHQoKSxiKHRoaXMpLmZpbmQoImhkb2dnIikudGV4dCgpLGIodGhpcykuZmluZCgiaGR3ZWJtIikudGV4dCgpLGIodGhpcykuZmluZCgiZHVyYXRpb24iKS50ZXh0KCksYih0aGlzKS5maW5kKCJsaWdodGJveHdpZHRoIikudGV4dCgpLGIodGhpcykuZmluZCgibGlnaHRib3hoZWlnaHQiKS50ZXh0KCksYih0aGlzKS5maW5kKCJ5b3V0dWJlYXBpa2V5IikudGV4dCgpLGIodGhpcykuZmluZCgieW91dHViZXBsYXlsaXN0aWQiKS50ZXh0KCksYih0aGlzKS5maW5kKCJ5b3V0dWJlcGxheWxpc3RtYXhyZXN1bHRzIikudGV4dCgpLCJ0cnVlIj09Yih0aGlzKS5maW5kKCJsaWdodGJveCIpLnRleHQoKS50b0xvd2VyQ2FzZSgpXSl9KTtkLnJlYWRUYWdzKCk7YShkKX19KX1lbHNlIHRoaXMub3B0aW9ucy5yZW1vdGUmJjA8dGhpcy5vcHRpb25zLnJlbW90ZS5sZW5ndGg/KGQ9dGhpcyxiLmdldEpTT04odGhpcy5vcHRpb25zLnJlbW90ZSxmdW5jdGlvbihiKXtmb3IodmFyIGM9CjA7YzxiLmxlbmd0aDtjKyspe3ZhciBlPWJbY10ubWVkaWF0eXBlP2JbY10ubWVkaWF0eXBlOmQuY2hlY2tUeXBlKGJbY10uZmlsZSk7ZC5lbGVtQXJyYXkucHVzaChbYyxiW2NdLnRodW1ibmFpbCxiW2NdLmZpbGUsYltjXS5maWxlb2dnLGJbY10uZmlsZXdlYm0sYltjXS5saW5rLGJbY10ubGlua3RhcmdldCxiW2NdLnRpdGxlLGJbY10uZGVzY3JpcHRpb24sZSxiW2NdLndpZHRoJiYhaXNOYU4ocGFyc2VJbnQoYltjXS53aWR0aCkpP3BhcnNlSW50KGJbY10ud2lkdGgpOmQub3B0aW9ucy53aWR0aCxiW2NdLmhlaWdodCYmIWlzTmFOKHBhcnNlSW50KGJbY10uaGVpZ2h0KSk/cGFyc2VJbnQoYltjXS5oZWlnaHQpOmQub3B0aW9ucy5oZWlnaHQsYltjXS5wb3N0ZXIsYltjXS5oZCxiW2NdLmhkb2dnLGJbY10uaGR3ZWJtLGJbY10uZHVyYXRpb24sYltjXS5saWdodGJveHdpZHRoLGJbY10ubGlnaHRib3hoZWlnaHQsYltjXS55b3V0dWJlYXBpa2V5LGJbY10ueW91dHViZXBsYXlsaXN0aWQsCmJbY10ueW91dHViZXBsYXlsaXN0bWF4cmVzdWx0cyxiW2NdLmxpZ2h0Ym94XSl9ZC5yZWFkVGFncygpO2EoZCl9KSk6dGhpcy5vcHRpb25zLnlvdXR1YmVjaGFubmVsPyhjPXthbHQ6Impzb24iLHY6MixvcmRlcmJ5OnRoaXMub3B0aW9ucy55b3V0dWJlY2hhbm5lbC5vcmRlcmJ5P3RoaXMub3B0aW9ucy55b3V0dWJlY2hhbm5lbC5vcmRlcmJ5OiJwdWJsaXNoZWQiLCJzdGFydC1pbmRleCI6dGhpcy5vcHRpb25zLnlvdXR1YmVjaGFubmVsWyJzdGFydC1pbmRleCJdP3RoaXMub3B0aW9ucy55b3V0dWJlY2hhbm5lbFsic3RhcnQtaW5kZXgiXToxLCJtYXgtcmVzdWx0cyI6dGhpcy5vcHRpb25zLnlvdXR1YmVjaGFubmVsWyJtYXgtcmVzdWx0cyJdP3RoaXMub3B0aW9ucy55b3V0dWJlY2hhbm5lbFsibWF4LXJlc3VsdHMiXToxMH0sdGhpcy5vcHRpb25zLnlvdXR1YmVjaGFubmVsLmF1dGhvcj9jLmF1dGhvcj10aGlzLm9wdGlvbnMueW91dHViZWNoYW5uZWwuYXV0aG9yOnRoaXMub3B0aW9ucy55b3V0dWJlY2hhbm5lbC5xJiYKKGMucT10aGlzLm9wdGlvbnMueW91dHViZWNoYW5uZWwucSksYz0iaHR0cHM6Ly9nZGF0YS55b3V0dWJlLmNvbS9mZWVkcy9hcGkvdmlkZW9zPyIrYi5wYXJhbShjKSxkPXRoaXMsYi5nZXRKU09OKGMsZnVuY3Rpb24oYil7aWYoYiYmYi5mZWVkJiZiLmZlZWQuZW50cnkpZm9yKHZhciBjPTE7YzxiLmZlZWQuZW50cnkubGVuZ3RoO2MrKylkLmVsZW1BcnJheS5wdXNoKFtjLCJodHRwczovL2ltZy55b3V0dWJlLmNvbS92aS8iK2IuZmVlZC5lbnRyeVtjXS5tZWRpYSRncm91cC55dCR2aWRlb2lkLiR0KyIvIitkLm9wdGlvbnMueW91dHViZXRodW1iLGIuZmVlZC5lbnRyeVtjXS5tZWRpYSRncm91cC5tZWRpYSRwbGF5ZXIudXJsLG51bGwsbnVsbCxudWxsLG51bGwsYi5mZWVkLmVudHJ5W2NdLm1lZGlhJGdyb3VwLm1lZGlhJHRpdGxlLiR0LGIuZmVlZC5lbnRyeVtjXS5tZWRpYSRncm91cC5tZWRpYSRkZXNjcmlwdGlvbi4kdCw5LDY0MCw0ODAsImh0dHBzOi8vaW1nLnlvdXR1YmUuY29tL3ZpLyIrCmIuZmVlZC5lbnRyeVtjXS5tZWRpYSRncm91cC55dCR2aWRlb2lkLiR0KyIvIitkLm9wdGlvbnMueW91dHViZWltYWdlLG51bGwsbnVsbCxudWxsLG51bGxdKTtkLnJlYWRUYWdzKCk7YShkKX0pKTp0aGlzLm9wdGlvbnMueW91dHViZWFwaWtleSYmdGhpcy5vcHRpb25zLnlvdXR1YmVwbGF5bGlzdGlkPyhkPXRoaXMsdGhpcy5nZXRZb3VUdWJlUGxheWxpc3QodGhpcy5vcHRpb25zLnlvdXR1YmVhcGlrZXksdGhpcy5vcHRpb25zLnlvdXR1YmVwbGF5bGlzdGlkLHRoaXMub3B0aW9ucy55b3V0dWJlcGxheWxpc3RtYXhyZXN1bHRzLC0xLGZ1bmN0aW9uKCl7ZC5yZWFkVGFncygpO2EoZCl9LHRoaXMsbnVsbCkpOih0aGlzLnJlYWRUYWdzKCksYSh0aGlzKSl9LHJlYWRUYWdzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpczsoYigiaW1nLmh0bWw1Z2FsbGVyeWltZyIsdGhpcy5jb250YWluZXIpLmxlbmd0aD9iKCJpbWcuaHRtbDVnYWxsZXJ5aW1nIix0aGlzLmNvbnRhaW5lcik6YigiaW1nIix0aGlzLmNvbnRhaW5lcikpLmVhY2goZnVuY3Rpb24oKXt2YXIgYz0KYih0aGlzKS5hdHRyKCJzcmMiKTtjfHwoYz1iKHRoaXMpLmdldCgwKS5zcmMpO2Zvcih2YXIgZD1hLm9wdGlvbnMubGF6eWxvYWR0YWdzLnNwbGl0KCIsIiksZT0wO2U8ZC5sZW5ndGg7ZSsrKWlmKGIodGhpcykuZGF0YShkW2VdKSYmMDxiKHRoaXMpLmRhdGEoZFtlXSkubGVuZ3RoKXtjPWIodGhpcykuZGF0YShkW2VdKTticmVha312YXIgZD1jLGU9Yih0aGlzKS5kYXRhKCJ0aXRsZSIpP2IodGhpcykuZGF0YSgidGl0bGUiKTpiKHRoaXMpLmF0dHIoImFsdCIpLGY9Yih0aGlzKS5kYXRhKCJkZXNjcmlwdGlvbiIpP2IodGhpcykuZGF0YSgiZGVzY3JpcHRpb24iKTpiKHRoaXMpLmRhdGEoImluZm9ybWF0aW9uIik7ZXx8KGU9IiIpO2Z8fChmPSIiKTt2YXIgaj1hLm9wdGlvbnMud2lkdGgsbD1hLm9wdGlvbnMuaGVpZ2h0LGc9Yih0aGlzKS5kYXRhKCJkdXJhdGlvbiIpP2IodGhpcykuZGF0YSgiZHVyYXRpb24iKTowLHY9bnVsbCxyPW51bGwsaz1udWxsLG09bnVsbCxuPW51bGwscz1udWxsLAp0PW51bGwsdT1udWxsLHg9bnVsbCxBPW51bGwsRj1udWxsLHE9bnVsbCxCPW51bGwsRT0hMTtiKHRoaXMpLnBhcmVudCgpLmlzKCJhIikmJihkPWIodGhpcykucGFyZW50KCkuYXR0cigiaHJlZiIpLHY9Yih0aGlzKS5wYXJlbnQoKS5kYXRhKCJvZ2ciKSxyPWIodGhpcykucGFyZW50KCkuZGF0YSgid2VibSIpLGs9Yih0aGlzKS5wYXJlbnQoKS5kYXRhKCJsaW5rIiksbT1iKHRoaXMpLnBhcmVudCgpLmRhdGEoImxpbmt0YXJnZXQiKSxuPWIodGhpcykucGFyZW50KCkuZGF0YSgicG9zdGVyIiksaXNOYU4oYih0aGlzKS5wYXJlbnQoKS5kYXRhKCJ3aWR0aCIpKXx8KGo9Yih0aGlzKS5wYXJlbnQoKS5kYXRhKCJ3aWR0aCIpKSxpc05hTihiKHRoaXMpLnBhcmVudCgpLmRhdGEoImhlaWdodCIpKXx8KGw9Yih0aGlzKS5wYXJlbnQoKS5kYXRhKCJoZWlnaHQiKSkscz1iKHRoaXMpLnBhcmVudCgpLmRhdGEoImhkIiksdD1iKHRoaXMpLnBhcmVudCgpLmRhdGEoImhkb2dnIiksdT1iKHRoaXMpLnBhcmVudCgpLmRhdGEoImhkd2VibSIpLAp4PWIodGhpcykucGFyZW50KCkuZGF0YSgibGlnaHRib3h3aWR0aCIpLEE9Yih0aGlzKS5wYXJlbnQoKS5kYXRhKCJsaWdodGJveGhlaWdodCIpLEY9Yih0aGlzKS5wYXJlbnQoKS5kYXRhKCJ5b3V0dWJlYXBpa2V5IikscT1iKHRoaXMpLnBhcmVudCgpLmRhdGEoInlvdXR1YmVwbGF5bGlzdGlkIiksQj1iKHRoaXMpLnBhcmVudCgpLmRhdGEoInlvdXR1YmVwbGF5bGlzdG1heHJlc3VsdHMiKSxFPWIodGhpcykucGFyZW50KCkuaGFzQ2xhc3MoImh0bWw1Z2FsbGVyeWxpZ2h0Ym94IikpO3ZhciB3PWIodGhpcykucGFyZW50KCkuZGF0YSgibWVkaWF0eXBlIik/Yih0aGlzKS5wYXJlbnQoKS5kYXRhKCJtZWRpYXR5cGUiKTphLmNoZWNrVHlwZShkKTthLmVsZW1BcnJheS5wdXNoKFthLmVsZW1BcnJheS5sZW5ndGgsYyxkLHYscixrLG0sZSxmLHcsaixsLG4scyx0LHUsZyx4LEEsRixxLEIsRV0pfSl9LGdldFlvdVR1YmVQbGF5bGlzdDpmdW5jdGlvbihhLGMsZCxlLGYsaixsKXswPD1lJiYKai5lbGVtQXJyYXkuc3BsaWNlKGUsMSk7dmFyIGc9Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3lvdXR1YmUvdjMvcGxheWxpc3RJdGVtcz9wYXJ0PXNuaXBwZXQmcGxheWxpc3RJZD0iK2MrIiZrZXk9IithO2QmJihnPTUwPGQ/ZysiJm1heFJlc3VsdHM9NTAiOmcrKCImbWF4UmVzdWx0cz0iK2QpKTtsJiYoZys9IiZwYWdlVG9rZW49IitsKTt2YXIgdj0hMDtiLmdldEpTT04oZyxmdW5jdGlvbihiKXtpZihiJiZiLml0ZW1zKWZvcih2YXIgZz0wO2c8Yi5pdGVtcy5sZW5ndGg7ZysrKXt2YXIgbD1iLml0ZW1zW2ddLnNuaXBwZXQucmVzb3VyY2VJZC52aWRlb0lkLGs9Imh0dHBzOi8vaW1nLnlvdXR1YmUuY29tL3ZpLyIrbCsiLyIrai5vcHRpb25zLnlvdXR1YmVpbWFnZTtqLm9wdGlvbnMueW91dHViZXBsYXlsaXN0dXNlbWF4cmVzJiYoYi5pdGVtc1tnXS5zbmlwcGV0LnRodW1ibmFpbHMmJmIuaXRlbXNbZ10uc25pcHBldC50aHVtYm5haWxzLm1heHJlcykmJihrPWIuaXRlbXNbZ10uc25pcHBldC50aHVtYm5haWxzLm1heHJlcy51cmwpOwpsPVtnLCJodHRwczovL2ltZy55b3V0dWJlLmNvbS92aS8iK2wrIi8iK2oub3B0aW9ucy55b3V0dWJldGh1bWIsImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyIrbCxudWxsLG51bGwsbnVsbCxudWxsLGIuaXRlbXNbZ10uc25pcHBldC50aXRsZSxiLml0ZW1zW2ddLnNuaXBwZXQuZGVzY3JpcHRpb24sOSw2NDAsNDgwLGssbnVsbCxudWxsLG51bGwsbnVsbF07MDw9ZT8oai5lbGVtQXJyYXkuc3BsaWNlKGUsMCxsKSxlKyspOmouZWxlbUFycmF5LnB1c2gobCl9YiYmKGIubmV4dFBhZ2VUb2tlbiYmZCYmNTA8ZCkmJih2PSExLGouZ2V0WW91VHViZVBsYXlsaXN0KGEsYyxkLTUwLGUsZixqLGIubmV4dFBhZ2VUb2tlbikpfSkuYWx3YXlzKGZ1bmN0aW9uKCl7diYmZihqKX0pfSxwcm9jZXNzRWxlbUFycmF5OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0hMSxkPTA7ZDxhLmVsZW1BcnJheS5sZW5ndGg7ZCsrKWlmKDEzPT1hLmVsZW1BcnJheVtkXVs5XSYmYS5lbGVtQXJyYXlbZF1bMTldJiYKYS5lbGVtQXJyYXlbZF1bMjBdKXtiPSEwO2JyZWFrfWI/YS5nZXRZb3VUdWJlUGxheWxpc3QoYS5lbGVtQXJyYXlbZF1bMTldLGEuZWxlbUFycmF5W2RdWzIwXSxhLmVsZW1BcnJheVtkXVsyMV0sZCxhLnByb2Nlc3NFbGVtQXJyYXksYSxudWxsKTphLmluaXQoYSl9LGNyZWF0ZU1hcmt1cDpmdW5jdGlvbigpe3RoaXMuJGdhbGxlcnk9alF1ZXJ5KCI8ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktY29udGFpbmVyLSIrdGhpcy5pZCsiJz48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktYm94LSIrdGhpcy5pZCsiJz48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQrIic+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LXRpdGxlLSIrdGhpcy5pZCsiJz48L2Rpdj48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktdGltZXItIit0aGlzLmlkKyInPjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS12aXJhbC0iK3RoaXMuaWQrIic+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LXRvb2xib3gtIisKdGhpcy5pZCsiJz48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktdG9vbGJveC1iZy0iK3RoaXMuaWQrIic+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LXRvb2xib3gtYnV0dG9ucy0iK3RoaXMuaWQrIic+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LXBsYXktIit0aGlzLmlkKyInPjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1wYXVzZS0iK3RoaXMuaWQrIic+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWxlZnQtIit0aGlzLmlkKyInPjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1yaWdodC0iK3RoaXMuaWQrIic+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWxpZ2h0Ym94LSIrdGhpcy5pZCsiJz48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktY2FyLSIrdGhpcy5pZCsiJz48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktY2FyLWxpc3QtIit0aGlzLmlkKyInPjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1jYXItbWFzay0iKwp0aGlzLmlkKyInPjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS10aHVtYnMtIit0aGlzLmlkKyInPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1jYXItc2xpZGVyLWJhci0iK3RoaXMuaWQrIic+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWNhci1zbGlkZXItYmFyLXRvcC0iK3RoaXMuaWQrIic+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWNhci1zbGlkZXItYmFyLW1pZGRsZS0iK3RoaXMuaWQrIic+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWNhci1zbGlkZXItYmFyLWJvdHRvbS0iK3RoaXMuaWQrIic+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWNhci1sZWZ0LSIrdGhpcy5pZCsiJz48L2Rpdj48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktY2FyLXJpZ2h0LSIrdGhpcy5pZCsiJz48L2Rpdj48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktY2FyLXNsaWRlci0iK3RoaXMuaWQrIic+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+Iik7CnRoaXMuJGdhbGxlcnkuYXBwZW5kVG8odGhpcy5jb250YWluZXIpO3RoaXMub3B0aW9ucy5zb2NpYWx1cmxmb3JlYWNofHx0aGlzLmNyZWF0ZVNvY2lhbE1lZGlhKCk7dGhpcy5vcHRpb25zLmdvb2dsZWFuYWx5dGljc2FjY291bnQmJiF3aW5kb3cuX2dhcSYmKHdpbmRvdy5fZ2FxPXdpbmRvdy5fZ2FxfHxbXSx3aW5kb3cuX2dhcS5wdXNoKFsiX3NldEFjY291bnQiLHRoaXMub3B0aW9ucy5nb29nbGVhbmFseXRpY3NhY2NvdW50XSksd2luZG93Ll9nYXEucHVzaChbIl90cmFja1BhZ2V2aWV3Il0pLGIuZ2V0U2NyaXB0KCJodHRwczovL3NzbC5nb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyIpKX0sY3JlYXRlU29jaWFsTWVkaWE6ZnVuY3Rpb24oKXtiKCIuaHRtbDVnYWxsZXJ5LXZpcmFsLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5lbXB0eSgpO3ZhciBhPXdpbmRvdy5sb2NhdGlvbi5ocmVmO3RoaXMub3B0aW9ucy5zb2NpYWx1cmxmb3JlYWNoJiYoYSs9KDA+d2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiPyIpPwoiPyI6IiYiKSsiaHRtbDVnYWxsZXJ5aWQ9Iit0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzBdKTtpZih0aGlzLm9wdGlvbnMuc2hvd3NvY2lhbG1lZGlhJiZ0aGlzLm9wdGlvbnMuc2hvd2ZhY2Vib29rbGlrZSl7dmFyIGM9IjxkaXYgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7IGZsb2F0OmxlZnQ7IHdpZHRoOjExMHB4OyBoZWlnaHQ6MjFweDsnPjxpZnJhbWUgc3JjPSdodHRwczovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPSIsYz10aGlzLm9wdGlvbnMuZmFjZWJvb2tsaWtldXJsJiYwPHRoaXMub3B0aW9ucy5mYWNlYm9va2xpa2V1cmwubGVuZ3RoP2MrZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMub3B0aW9ucy5mYWNlYm9va2xpa2V1cmwpOmMrYTtiKCIuaHRtbDVnYWxsZXJ5LXZpcmFsLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5hcHBlbmQoYysiJmFtcDtzZW5kPWZhbHNlJmFtcDtsYXlvdXQ9YnV0dG9uX2NvdW50JmFtcDt3aWR0aD00NTAmYW1wO3Nob3dfZmFjZXM9ZmFsc2UmYW1wO2FjdGlvbj1saWtlJmFtcDtjb2xvcnNjaGVtZT1saWdodCZhbXA7Zm9udCZhbXA7aGVpZ2h0PTIxJyBzY3JvbGxpbmc9J25vJyBmcmFtZWJvcmRlcj0nMCcgc3R5bGU9J2JvcmRlcjpub25lOztvdmVyZmxvdzpoaWRkZW47IHdpZHRoOjExMHB4OyBoZWlnaHQ6MjFweDsnIGFsbG93VHJhbnNwYXJlbmN5PSd0cnVlJz48L2lmcmFtZT48L2Rpdj4iKX10aGlzLm9wdGlvbnMuc2hvd3NvY2lhbG1lZGlhJiYKdGhpcy5vcHRpb25zLnNob3d0d2l0dGVyJiYoYz0iPGRpdiBzdHlsZT0nZGlzcGxheTpibG9jazsgZmxvYXQ6bGVmdDsgd2lkdGg6MTEwcHg7IGhlaWdodDoyMXB4Oyc+PGEgaHJlZj0naHR0cHM6Ly90d2l0dGVyLmNvbS9zaGFyZScgY2xhc3M9J3R3aXR0ZXItc2hhcmUtYnV0dG9uJyIsYz10aGlzLm9wdGlvbnMudHdpdHRlcnVybCYmMDx0aGlzLm9wdGlvbnMudHdpdHRlcnVybC5sZW5ndGg/YysoIiBkYXRhLXVybD0nIit0aGlzLm9wdGlvbnMudHdpdHRlcnVybCsiJyIpOmMrKCIgZGF0YS11cmw9JyIrYSsiJyIpLHRoaXMub3B0aW9ucy50d2l0dGVydXNlcm5hbWUmJjA8dGhpcy5vcHRpb25zLnR3aXR0ZXJ1c2VybmFtZS5sZW5ndGgmJihjKz0iIGRhdGEtdmlhPSciK3RoaXMub3B0aW9ucy50d2l0dGVydmlhKyInIGRhdGEtcmVsYXRlZD0nIit0aGlzLm9wdGlvbnMudHdpdHRlcnVzZXJuYW1lKyInIiksYigiLmh0bWw1Z2FsbGVyeS12aXJhbC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuYXBwZW5kKGMrCiI+VHdlZXQ8L2E+PC9kaXY+IiksYi5nZXRTY3JpcHQoImh0dHBzOi8vcGxhdGZvcm0udHdpdHRlci5jb20vd2lkZ2V0cy5qcyIpKTt0aGlzLm9wdGlvbnMuc2hvd3NvY2lhbG1lZGlhJiZ0aGlzLm9wdGlvbnMuc2hvd2dvb2dsZXBsdXMmJihjPSI8ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrOyBmbG9hdDpsZWZ0OyB3aWR0aDoxMDBweDsgaGVpZ2h0OjIxcHg7Jz48ZGl2IGNsYXNzPSdnLXBsdXNvbmUnIGRhdGEtc2l6ZT0nbWVkaXVtJyIsYz10aGlzLm9wdGlvbnMuZ29vZ2xlcGx1c3VybCYmMDx0aGlzLm9wdGlvbnMuZ29vZ2xlcGx1c3VybC5sZW5ndGg/YysoIiBkYXRhLWhyZWY9JyIrdGhpcy5vcHRpb25zLmdvb2dsZXBsdXN1cmwrIiciKTpjKygiIGRhdGEtaHJlZj0nIithKyInIiksYigiLmh0bWw1Z2FsbGVyeS12aXJhbC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuYXBwZW5kKGMrIj48L2Rpdj48L2Rpdj4iKSxiLmdldFNjcmlwdCgiaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvcGx1c29uZS5qcyIpKX0sCnBsYXlHYWxsZXJ5OmZ1bmN0aW9uKCl7YigiLmh0bWw1Z2FsbGVyeS1wbGF5LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5oaWRlKCk7YigiLmh0bWw1Z2FsbGVyeS1wYXVzZS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuc2hvdygpO3RoaXMuaXNQYXVzZWQ9ITE7dGhpcy5zbGlkZXNob3dUaW1lb3V0LnNldEludGVydmFsKHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTZdP3RoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTZdOnRoaXMub3B0aW9ucy5zbGlkZXNob3dpbnRlcnZhbCk7dGhpcy5zbGlkZXNob3dUaW1lb3V0LnN0YXJ0KCk7YigiLmh0bWw1Z2FsbGVyeS10aW1lci0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY3NzKHt3aWR0aDowfSl9LHBhdXNlR2FsbGVyeTpmdW5jdGlvbigpe2IoIi5odG1sNWdhbGxlcnktcGxheS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuc2hvdygpO2IoIi5odG1sNWdhbGxlcnktcGF1c2UtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmhpZGUoKTsKdGhpcy5pc1BhdXNlZD0hMDt0aGlzLnNsaWRlc2hvd1RpbWVvdXQuc3RvcCgpO2IoIi5odG1sNWdhbGxlcnktdGltZXItIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmNzcyh7d2lkdGg6MH0pfSxjcmVhdGVTbGlkZXJUaW1lb3V0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpczthLnNsaWRlc2hvd1RpbWVvdXQ9bmV3IEhUTUw1R2FsbGVyeVRpbWVyKGEub3B0aW9ucy5zbGlkZXNob3dpbnRlcnZhbCxmdW5jdGlvbigpe2Euc2xpZGVSdW4oLTEpfSxhLm9wdGlvbnMuc2hvd3RpbWVyP2Z1bmN0aW9uKGIpe2EudXBkYXRlVGltZXIoYil9Om51bGwpO2Eub3B0aW9ucy5wYXVzZW9ubW91c2VvdmVyJiZiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmhvdmVyKGZ1bmN0aW9uKCl7YS5pc1BhdXNlZHx8YS5zbGlkZXNob3dUaW1lb3V0LnBhdXNlKCl9LGZ1bmN0aW9uKCl7YS5pc1BhdXNlZHx8YS5zbGlkZXNob3dUaW1lb3V0LnJlc3VtZSghMSl9KX0sdXBkYXRlVGltZXI6ZnVuY3Rpb24oYSl7dGhpcy5pc0Z1bGxzY3JlZW4/CihhPU1hdGgubWF4KDAsTWF0aC5mbG9vcihiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tZWxlbS13cmFwcGVyLSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS53aWR0aCgpKmEpKSxiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tdGltZXItIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcyh7d2lkdGg6YSsicHgifSkpOihhPU1hdGgubWF4KDAsTWF0aC5mbG9vcihiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLndpZHRoKCkqYSkpLGIoIi5odG1sNWdhbGxlcnktdGltZXItIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmNzcyh7d2lkdGg6YSsicHgifSkpfSxjcmVhdGVFdmVudHM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2IoIi5odG1sNWdhbGxlcnktcGxheS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY2xpY2soZnVuY3Rpb24oKXthLnBsYXlHYWxsZXJ5KCl9KTtiKCIuaHRtbDVnYWxsZXJ5LXBhdXNlLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5jbGljayhmdW5jdGlvbigpe2EucGF1c2VHYWxsZXJ5KCl9KTsKYigiLmh0bWw1Z2FsbGVyeS1saWdodGJveC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY2xpY2soZnVuY3Rpb24oKXthLmdvRnVsbHNjcmVlbigpfSk7YigiLmh0bWw1Z2FsbGVyeS1sZWZ0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5jbGljayhmdW5jdGlvbigpe2Euc2xpZGVSdW4oLTIsITApfSk7YigiLmh0bWw1Z2FsbGVyeS1yaWdodC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY2xpY2soZnVuY3Rpb24oKXthLnNsaWRlUnVuKC0xLCEwKX0pO2lmKGEub3B0aW9ucy5lbmFibGV0b3VjaHN3aXBlKXt2YXIgYz1hLm9wdGlvbnMuaXNBbmRyb2lkJiZhLm9wdGlvbnMuZW5hYmxldG91Y2hzd2lwZW9uYW5kcm9pZD8hMDohMTtiKCIuaHRtbDVnYWxsZXJ5LWJveC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkudG91Y2hTd2lwZSh7cHJldmVudFdlYkJyb3dzZXI6Yyxzd2lwZUxlZnQ6ZnVuY3Rpb24oKXthLmRpc2FibGVUb3VjaFN3aXBlfHxhLnNsaWRlUnVuKC0xLCEwKX0sc3dpcGVSaWdodDpmdW5jdGlvbigpe2EuZGlzYWJsZVRvdWNoU3dpcGV8fAphLnNsaWRlUnVuKC0yLCEwKX19KX1pZighKCJvbnRvdWNoc3RhcnQiaW4gd2luZG93KXx8IWEub3B0aW9ucy5kaXNhYmxlaG92ZXJldmVudG9udG91Y2gpYigiLmh0bWw1Z2FsbGVyeS1ib3gtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLm1vdXNlbW92ZShmdW5jdGlvbigpe2lmKCJtb3VzZW92ZXIiPT1hLm9wdGlvbnMuaW1hZ2V0b29sYm94bW9kZSl7dmFyIGM9YS5lbGVtQXJyYXlbYS5jdXJFbGVtXVs5XTsoImFsd2F5cyI9PWEub3B0aW9ucy5zaG93aW1hZ2V0b29sYm94fHwiaW1hZ2UiPT1hLm9wdGlvbnMuc2hvd2ltYWdldG9vbGJveCYmMT09YykmJmEuc2hvd2ltYWdldG9vbGJveChjLCEwKX1pZihhLm9wdGlvbnMudGl0bGVvdmVybGF5JiZhLm9wdGlvbnMudGl0bGVhdXRvaGlkZSYmKCFhLm9wdGlvbnMuaGlkZXRpdGxld2hlbnZpZGVvaXNwbGF5aW5nfHwhYS5pc1ZpZGVvUGxheWluZykpYigiLmh0bWw1Z2FsbGVyeS10aXRsZS0iK2EuaWQsYS4kZ2FsbGVyeSkuc2hvdygpLGNsZWFyVGltZW91dChhLmhpZGVUaXRsZVRpbWVvdXQpLAphLmhpZGVUaXRsZVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2IoIi5odG1sNWdhbGxlcnktdGl0bGUtIithLmlkLGEuJGdhbGxlcnkpLmZhZGVPdXQoKX0sM0UzKX0pLGIoIi5odG1sNWdhbGxlcnktYm94LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5ob3ZlcihmdW5jdGlvbigpe2Eub25TbGlkZXNob3dPdmVyKCk7aWYoIm1vdXNlb3ZlciI9PWEub3B0aW9ucy5pbWFnZXRvb2xib3htb2RlKXt2YXIgYz1hLmVsZW1BcnJheVthLmN1ckVsZW1dWzldOygiYWx3YXlzIj09YS5vcHRpb25zLnNob3dpbWFnZXRvb2xib3h8fCJpbWFnZSI9PWEub3B0aW9ucy5zaG93aW1hZ2V0b29sYm94JiYxPT1jKSYmYS5zaG93aW1hZ2V0b29sYm94KGMpfWlmKGEub3B0aW9ucy50aXRsZW92ZXJsYXkmJmEub3B0aW9ucy50aXRsZWF1dG9oaWRlJiYoIWEub3B0aW9ucy5oaWRldGl0bGV3aGVudmlkZW9pc3BsYXlpbmd8fCFhLmlzVmlkZW9QbGF5aW5nKSliKCIuaHRtbDVnYWxsZXJ5LXRpdGxlLSIrCmEuaWQsYS4kZ2FsbGVyeSkuZmFkZUluKCksY2xlYXJUaW1lb3V0KGEuaGlkZVRpdGxlVGltZW91dCksYS5oaWRlVGl0bGVUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtiKCIuaHRtbDVnYWxsZXJ5LXRpdGxlLSIrYS5pZCxhLiRnYWxsZXJ5KS5mYWRlT3V0KCl9LDNFMyl9LGZ1bmN0aW9uKCl7Im1vdXNlb3ZlciI9PWEub3B0aW9ucy5pbWFnZXRvb2xib3htb2RlJiZhLmhpZGVpbWFnZXRvb2xib3goKTthLm9wdGlvbnMudGl0bGVvdmVybGF5JiZhLm9wdGlvbnMudGl0bGVhdXRvaGlkZSYmKGIoIi5odG1sNWdhbGxlcnktdGl0bGUtIithLmlkLGEuJGdhbGxlcnkpLmZhZGVPdXQoKSxjbGVhclRpbWVvdXQoYS5oaWRlVGl0bGVUaW1lb3V0KSl9KTtiKCIuaHRtbDVnYWxsZXJ5LWNhci1sZWZ0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoiLSIrU3RyaW5nKDIqdGhpcy5vcHRpb25zLmNhcm91c2VsYXJyb3d3aWR0aCkrInB4IDBweCIsCmN1cnNvcjoiIn0pO2IoIi5odG1sNWdhbGxlcnktY2FyLWxlZnQtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmRhdGEoImRpc2FibGVkIiwhMCk7YigiLmh0bWw1Z2FsbGVyeS1jYXItcmlnaHQtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmNzcyh7ImJhY2tncm91bmQtcG9zaXRpb24iOiIwcHggMHB4In0pO2IoIi5odG1sNWdhbGxlcnktY2FyLWxlZnQtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmNsaWNrKGZ1bmN0aW9uKCl7Yih0aGlzKS5kYXRhKCJkaXNhYmxlZCIpfHwoYS5kaXNhYmxldXBkYXRlY2Fyb3VzZWw9ITAsYS51cGRhdGVDYXJvdXNlbFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2EuZW5hYmxlVXBkYXRlQ2Fyb3VzZWwoKX0sYS5vcHRpb25zLnVwZGF0ZWNhcm91c2VsaW50ZXJ2YWwpLGEuY2Fyb3VzZWxQcmV2KCkpfSk7YigiLmh0bWw1Z2FsbGVyeS1jYXItcmlnaHQtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmNsaWNrKGZ1bmN0aW9uKCl7Yih0aGlzKS5kYXRhKCJkaXNhYmxlZCIpfHwKKGEuZGlzYWJsZXVwZGF0ZWNhcm91c2VsPSEwLGEudXBkYXRlQ2Fyb3VzZWxUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXthLmVuYWJsZVVwZGF0ZUNhcm91c2VsKCl9LGEub3B0aW9ucy51cGRhdGVjYXJvdXNlbGludGVydmFsKSxhLmNhcm91c2VsTmV4dCgpKX0pO2IoIi5odG1sNWdhbGxlcnktY2FyLXNsaWRlci0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkub24oImRyYWciLGZ1bmN0aW9uKGIsYyl7YS5kaXNhYmxldXBkYXRlY2Fyb3VzZWw9ITA7YS51cGRhdGVDYXJvdXNlbFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2EuZW5hYmxlVXBkYXRlQ2Fyb3VzZWwoKX0sYS5vcHRpb25zLnVwZGF0ZWNhcm91c2VsaW50ZXJ2YWwpO2EuY2Fyb3VzZWxTbGlkZXJEcmFnKGIsYyl9KTtiKCIuaHRtbDVnYWxsZXJ5LWNhci1zbGlkZXItYmFyLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5jbGljayhmdW5jdGlvbihiKXthLmRpc2FibGV1cGRhdGVjYXJvdXNlbD0hMDthLnVwZGF0ZUNhcm91c2VsVGltZW91dD0Kc2V0VGltZW91dChmdW5jdGlvbigpe2EuZW5hYmxlVXBkYXRlQ2Fyb3VzZWwoKX0sYS5vcHRpb25zLnVwZGF0ZWNhcm91c2VsaW50ZXJ2YWwpO2EuY2Fyb3VzZWxCYXJDbGlja2VkKGIpfSk7aWYoInZlcnRpY2FsIj09dGhpcy5vcHRpb25zLnNraW58fCJ2ZXJ0aWNhbGxpZ2h0Ij09dGhpcy5vcHRpb25zLnNraW58fCJzaG93Y2FzZSI9PXRoaXMub3B0aW9ucy5za2luKWIoIi5odG1sNWdhbGxlcnktY2FyLWxpc3QtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLm9uKCJET01Nb3VzZVNjcm9sbCBtb3VzZXdoZWVsIHdoZWVsIixmdW5jdGlvbihjKXtjLnByZXZlbnREZWZhdWx0KCk7dmFyIGU9YS5lbGVtQXJyYXkubGVuZ3RoKihhLm9wdGlvbnMudGh1bWJoZWlnaHQrYS5vcHRpb25zLnRodW1iZ2FwKTtpZighKGU8YS5vcHRpb25zLnRodW1iTWFza0hlaWdodCkpe3ZhciBlPS0xKihlLWEub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQpLGY9MDtjLm9yaWdpbmFsRXZlbnQmJihjLm9yaWdpbmFsRXZlbnQud2hlZWxEZWx0YVk/CmY9Yy5vcmlnaW5hbEV2ZW50LndoZWVsRGVsdGFZOmMub3JpZ2luYWxFdmVudC5kZXRhaWw/Zj0tNDAqYy5vcmlnaW5hbEV2ZW50LmRldGFpbDpjLm9yaWdpbmFsRXZlbnQud2hlZWxEZWx0YT9mPWMub3JpZ2luYWxFdmVudC53aGVlbERlbHRhOmMub3JpZ2luYWxFdmVudC5kZWx0YVkmJihmPWMub3JpZ2luYWxFdmVudC5kZWx0YVkpKTtjPXBhcnNlSW50KGIoIi5odG1sNWdhbGxlcnktdGh1bWJzLSIrYS5pZCxhLiRnYWxsZXJ5KS5jc3MoIm1hcmdpblRvcCIpKStmOzA8YyYmKGM9MCk7YzxlJiYoYz1lKTtlPShhLm9wdGlvbnMuY2Fyb3VzZWxTbGlkZXJNYXgtYS5vcHRpb25zLmNhcm91c2VsU2xpZGVyTWluKSpjL2U7YigiLmh0bWw1Z2FsbGVyeS1jYXItc2xpZGVyLSIrYS5pZCxhLiRnYWxsZXJ5KS5jc3Moe3RvcDplfSk7YigiLmh0bWw1Z2FsbGVyeS10aHVtYnMtIithLmlkLGEuJGdhbGxlcnkpLmNzcyh7bWFyZ2luVG9wOmN9KX19KTsib250b3VjaHN0YXJ0ImluIHdpbmRvd3x8KGIoIi5odG1sNWdhbGxlcnktY2FyLWxlZnQtIisKdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5ob3ZlcihmdW5jdGlvbigpe2IodGhpcykuZGF0YSgiZGlzYWJsZWQiKXx8Yih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoiLSIrYS5vcHRpb25zLmNhcm91c2VsYXJyb3d3aWR0aCsicHggMHB4In0pfSxmdW5jdGlvbigpe2IodGhpcykuZGF0YSgiZGlzYWJsZWQiKXx8Yih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoiMHB4IDBweCJ9KX0pLGIoIi5odG1sNWdhbGxlcnktY2FyLXJpZ2h0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5ob3ZlcihmdW5jdGlvbigpe2IodGhpcykuZGF0YSgiZGlzYWJsZWQiKXx8Yih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoiLSIrYS5vcHRpb25zLmNhcm91c2VsYXJyb3d3aWR0aCsicHggMHB4In0pfSxmdW5jdGlvbigpe2IodGhpcykuZGF0YSgiZGlzYWJsZWQiKXx8Yih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoiMHB4IDBweCJ9KX0pKTsib250b3VjaHN0YXJ0ImluCndpbmRvdyYmKCJ2ZXJ0aWNhbCI9PXRoaXMub3B0aW9ucy5za2lufHwidmVydGljYWxsaWdodCI9PXRoaXMub3B0aW9ucy5za2lufHwic2hvd2Nhc2UiPT10aGlzLm9wdGlvbnMuc2tpbj9iKCIuaHRtbDVnYWxsZXJ5LWNhci0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkudG91Y2hTd2lwZSh7cHJldmVudFdlYkJyb3dzZXI6ITAsc3dpcGVUb3A6ZnVuY3Rpb24oKXtiKCIuaHRtbDVnYWxsZXJ5LWNhci1yaWdodC0iK2EuaWQsYS4kZ2FsbGVyeSkuY2xpY2soKX0sc3dpcGVCb3R0b206ZnVuY3Rpb24oKXtiKCIuaHRtbDVnYWxsZXJ5LWNhci1sZWZ0LSIrYS5pZCxhLiRnYWxsZXJ5KS5jbGljaygpfSxpbnN0YW5jZTphLHByZXZlbnRXZWJCcm93c2VyQ2FsbGJhY2s6InZlcnRpY2FsUHJldmVudFdlYkJyb3dzZXJDYWxsYmFjayJ9KTpiKCIuaHRtbDVnYWxsZXJ5LWNhci0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkudG91Y2hTd2lwZSh7cHJldmVudFdlYkJyb3dzZXI6ITEsc3dpcGVMZWZ0OmZ1bmN0aW9uKCl7YigiLmh0bWw1Z2FsbGVyeS1jYXItcmlnaHQtIisKYS5pZCxhLiRnYWxsZXJ5KS5jbGljaygpfSxzd2lwZVJpZ2h0OmZ1bmN0aW9uKCl7YigiLmh0bWw1Z2FsbGVyeS1jYXItbGVmdC0iK2EuaWQsYS4kZ2FsbGVyeSkuY2xpY2soKX19KSl9LHZlcnRpY2FsUHJldmVudFdlYkJyb3dzZXJDYWxsYmFjazpmdW5jdGlvbihhKXt2YXIgYz1wYXJzZUludChiKCIuaHRtbDVnYWxsZXJ5LXRodW1icy0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY3NzKCJtYXJnaW4tdG9wIikpO3JldHVybiBhP2M+dGhpcy5vcHRpb25zLnRodW1iTWFza0hlaWdodC10aGlzLm9wdGlvbnMudGh1bWJUb3RhbEhlaWdodDowPmN9LGNyZWF0ZVN0eWxlOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMub3B0aW9ucy5za2luKXtjYXNlICJ2ZXJ0aWNhbCI6Y2FzZSAidmVydGljYWxsaWdodCI6Y2FzZSAic2hvd2Nhc2UiOnRoaXMuY3JlYXRlU3R5bGVWZXJ0aWNhbCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5jcmVhdGVTdHlsZURlZmF1bHQoKX19LHJlc2l6ZVN0eWxlVmVydGljYWw6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5wYXJlbnQoKSYmCnRoaXMuY29udGFpbmVyLnBhcmVudCgpLndpZHRoKCkpe3RoaXMub3B0aW9ucy5jb250YWluZXJXaWR0aD10aGlzLmNvbnRhaW5lci5wYXJlbnQoKS53aWR0aCgpO3RoaXMub3B0aW9ucy50b3RhbFdpZHRoPXRoaXMub3B0aW9ucy5jb250YWluZXJXaWR0aDt0aGlzLm9wdGlvbnMuc2hvd2Nhcm91c2VsJiYodGhpcy5vcHRpb25zLmNhcm91c2VsV2lkdGg9ImJvdHRvbSI9PXRoaXMub3B0aW9ucy5jYXJvdXNlbHBvc2l0aW9uP3RoaXMub3B0aW9ucy53aWR0aDp0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCk7ImJvdHRvbSI9PXRoaXMub3B0aW9ucy5jYXJvdXNlbHBvc2l0aW9uP3RoaXMub3B0aW9ucy53aWR0aD10aGlzLm9wdGlvbnMudG90YWxXaWR0aC0yKnRoaXMub3B0aW9ucy5wYWRkaW5nOih0aGlzLm9wdGlvbnMud2lkdGg9dGhpcy5vcHRpb25zLnRvdGFsV2lkdGgtMip0aGlzLm9wdGlvbnMucGFkZGluZywwPHRoaXMub3B0aW9ucy5jYXJvdXNlbFdpZHRoK3RoaXMub3B0aW9ucy5jYXJvdXNlbG1hcmdpbiYmCih0aGlzLm9wdGlvbnMud2lkdGgtPXRoaXMub3B0aW9ucy5jYXJvdXNlbFdpZHRoK3RoaXMub3B0aW9ucy5jYXJvdXNlbG1hcmdpbikpO3RoaXMub3B0aW9ucy5yZXNwb25zaXZlZnVsbHNjcmVlbiYmMDx0aGlzLmNvbnRhaW5lci5wYXJlbnQoKS5oZWlnaHQoKT8odGhpcy5vcHRpb25zLmNvbnRhaW5lckhlaWdodD10aGlzLmNvbnRhaW5lci5wYXJlbnQoKS5oZWlnaHQoKSx0aGlzLm9wdGlvbnMudG90YWxIZWlnaHQ9dGhpcy5vcHRpb25zLmNvbnRhaW5lckhlaWdodCx0aGlzLm9wdGlvbnMuaGVpZ2h0PSJib3R0b20iPT10aGlzLm9wdGlvbnMuY2Fyb3VzZWxwb3NpdGlvbj90aGlzLm9wdGlvbnMudG90YWxIZWlnaHQtKHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQrMip0aGlzLm9wdGlvbnMucGFkZGluZyt0aGlzLm9wdGlvbnMuY2Fyb3VzZWxoZWlnaHQpOnRoaXMub3B0aW9ucy50b3RhbEhlaWdodC0odGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCsyKnRoaXMub3B0aW9ucy5wYWRkaW5nKSk6Cih0aGlzLm9wdGlvbnMuaGVpZ2h0PU1hdGgucm91bmQodGhpcy5vcHRpb25zLndpZHRoKnRoaXMub3B0aW9ucy5vcmlnaW5hbEhlaWdodC90aGlzLm9wdGlvbnMub3JpZ2luYWxXaWR0aCksdGhpcy5vcHRpb25zLnRvdGFsSGVpZ2h0PSJib3R0b20iPT10aGlzLm9wdGlvbnMuY2Fyb3VzZWxwb3NpdGlvbj90aGlzLm9wdGlvbnMuaGVpZ2h0K3RoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQrMip0aGlzLm9wdGlvbnMucGFkZGluZyt0aGlzLm9wdGlvbnMuY2Fyb3VzZWxtYXJnaW4rdGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0OnRoaXMub3B0aW9ucy5oZWlnaHQrdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCsyKnRoaXMub3B0aW9ucy5wYWRkaW5nLHRoaXMub3B0aW9ucy5jb250YWluZXJIZWlnaHQ9dGhpcy5vcHRpb25zLnRvdGFsSGVpZ2h0KTt0aGlzLmNvbnRhaW5lci5jc3Moe3dpZHRoOnRoaXMub3B0aW9ucy5jb250YWluZXJXaWR0aCxoZWlnaHQ6dGhpcy5vcHRpb25zLmNvbnRhaW5lckhlaWdodH0pOwp0aGlzLm9wdGlvbnMuYm94V2lkdGg9dGhpcy5vcHRpb25zLndpZHRoO3RoaXMub3B0aW9ucy5ib3hIZWlnaHQ9dGhpcy5vcHRpb25zLmhlaWdodCt0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0O3RoaXMub3B0aW9ucy5zbGlkZXNoYWRvdyYmKHRoaXMub3B0aW9ucy5ib3hXaWR0aCs9OCk7aWYodGhpcy5vcHRpb25zLnNob3djYXJvdXNlbClpZigiYm90dG9tIj09dGhpcy5vcHRpb25zLmNhcm91c2VscG9zaXRpb24pe3RoaXMub3B0aW9ucy5jYXJvdXNlbFdpZHRoPXRoaXMub3B0aW9ucy53aWR0aDt0aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQ9dGhpcy5vcHRpb25zLmNhcm91c2VsaGVpZ2h0O3RoaXMub3B0aW9ucy5jYXJvdXNlbExlZnQ9dGhpcy5vcHRpb25zLnBhZGRpbmc7dGhpcy5vcHRpb25zLmNhcm91c2VsVG9wPXRoaXMub3B0aW9ucy5oZWlnaHQrdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCsyKnRoaXMub3B0aW9ucy5wYWRkaW5nO3RoaXMub3B0aW9ucy5jYXJBcmVhTGVuZ3RoPQp0aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQ7dGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyPU1hdGguZmxvb3IodGhpcy5vcHRpb25zLmNhckFyZWFMZW5ndGgvKHRoaXMub3B0aW9ucy50aHVtYmhlaWdodCt0aGlzLm9wdGlvbnMudGh1bWJnYXApKTx0aGlzLmVsZW1BcnJheS5sZW5ndGg7dGhpcy5vcHRpb25zLnRodW1id2lkdGg9dGhpcy5vcHRpb25zLndpZHRoO3RoaXMub3B0aW9ucy5jYXJvdXNlbFNsaWRlciYmKHRoaXMub3B0aW9ucy50aHVtYndpZHRoLT0yMCk7YigiLmh0bWw1Z2FsbGVyeS1jYXItbWFzay0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6dGhpcy5vcHRpb25zLnRodW1id2lkdGgrInB4In0pO2IoIi5odG1sNWdhbGxlcnktdG4tIit0aGlzLmlkKS5jc3Moe3dpZHRoOnRoaXMub3B0aW9ucy50aHVtYndpZHRoKyJweCJ9KTtiKCIuaHRtbDVnYWxsZXJ5LXRuLXNlbGVjdGVkLSIrdGhpcy5pZCkuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCsicHgifSk7CmIoIi5odG1sNWdhbGxlcnktY2FyLXNsaWRlci1iYXItIit0aGlzLmlkKS5jc3Moe2xlZnQ6U3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYndpZHRoKzYpKyJweCJ9KTt0aGlzLm9wdGlvbnMuaXNNb2JpbGU/KGIoIi5odG1sNWdhbGxlcnktY2FyLWxlZnQtIit0aGlzLmlkKS5jc3Moe2xlZnQ6U3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYndpZHRoKzUpKyJweCJ9KSxiKCIuaHRtbDVnYWxsZXJ5LWNhci1yaWdodC0iK3RoaXMuaWQpLmNzcyh7bGVmdDpTdHJpbmcodGhpcy5vcHRpb25zLnRodW1id2lkdGgrNSkrInB4In0pKTpiKCIuaHRtbDVnYWxsZXJ5LWNhci1zbGlkZXItIit0aGlzLmlkKS5jc3Moe2xlZnQ6U3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYndpZHRoKzUpKyJweCJ9KTt2YXIgYT10aGlzLm9wdGlvbnMudGh1bWJ3aWR0aC0zKnRoaXMub3B0aW9ucy50aHVtYm1hcmdpbjt0aGlzLm9wdGlvbnMudGh1bWJzaG93aW1hZ2UmJihhLT10aGlzLm9wdGlvbnMudGh1bWJpbWFnZXdpZHRoKwoyKnRoaXMub3B0aW9ucy50aHVtYmltYWdlYm9yZGVyKTt0aGlzLm9wdGlvbnMudGh1bWJzaG93dGl0bGUmJmIoImhlYWQiKS5hcHBlbmQoIjxzdHlsZSB0eXBlPSd0ZXh0L2NzcycgZGF0YS1jcmVhdG9yPSdodG1sNWdhbGxlcnknPi5odG1sNWdhbGxlcnktdG4tdGl0bGUtIit0aGlzLmlkKyIge3dpZHRoOiAiK2ErInB4O308L3N0eWxlPiIpfWVsc2UgdGhpcy5vcHRpb25zLmNhcm91c2VsV2lkdGg9dGhpcy5vcHRpb25zLnRodW1id2lkdGgsdGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0PXRoaXMub3B0aW9ucy5oZWlnaHQrdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCx0aGlzLm9wdGlvbnMuY2FyVG9wPTAsdGhpcy5vcHRpb25zLmNhckJvdHRvbT0wLHRoaXMub3B0aW9ucy5jYXJBcmVhTGVuZ3RoPXRoaXMub3B0aW9ucy5jYXJvdXNlbEhlaWdodC10aGlzLm9wdGlvbnMuY2FyVG9wLXRoaXMub3B0aW9ucy5jYXJCb3R0b20sdGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyPU1hdGguZmxvb3IodGhpcy5vcHRpb25zLmNhckFyZWFMZW5ndGgvCih0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrdGhpcy5vcHRpb25zLnRodW1iZ2FwKSk8dGhpcy5lbGVtQXJyYXkubGVuZ3RoLHRoaXMub3B0aW9ucy5jYXJvdXNlbFNsaWRlciYmKHRoaXMub3B0aW9ucy5jYXJvdXNlbFdpZHRoKz0yMCx0aGlzLm9wdGlvbnMud2lkdGgtPTIwLHRoaXMub3B0aW9ucy5ib3hXaWR0aD10aGlzLm9wdGlvbnMud2lkdGgsdGhpcy5vcHRpb25zLnNsaWRlc2hhZG93JiYodGhpcy5vcHRpb25zLmJveFdpZHRoKz04KSksImxlZnQiPT10aGlzLm9wdGlvbnMuY2Fyb3VzZWxwb3NpdGlvbj8odGhpcy5vcHRpb25zLmJveExlZnQ9dGhpcy5vcHRpb25zLnBhZGRpbmcrdGhpcy5vcHRpb25zLmNhcm91c2VsV2lkdGgrdGhpcy5vcHRpb25zLmNhcm91c2VsbWFyZ2luLHRoaXMub3B0aW9ucy5jYXJvdXNlbExlZnQ9dGhpcy5vcHRpb25zLnBhZGRpbmcpOnRoaXMub3B0aW9ucy5jYXJvdXNlbExlZnQ9dGhpcy5vcHRpb25zLnBhZGRpbmcrdGhpcy5vcHRpb25zLndpZHRoKwp0aGlzLm9wdGlvbnMuY2Fyb3VzZWxtYXJnaW4sdGhpcy5vcHRpb25zLmNhcm91c2VsVG9wPXRoaXMub3B0aW9ucy5wYWRkaW5nO2IoIi5odG1sNWdhbGxlcnktY29udGFpbmVyLSIrdGhpcy5pZCkuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMudG90YWxXaWR0aCsicHgiLGhlaWdodDp0aGlzLm9wdGlvbnMudG90YWxIZWlnaHQrInB4In0pO2IoIi5odG1sNWdhbGxlcnktYm94LSIrdGhpcy5pZCkuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMuYm94V2lkdGgrInB4IixoZWlnaHQ6dGhpcy5vcHRpb25zLmJveEhlaWdodCsicHgifSk7YT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzldO2lmKDE9PWF8fHRoaXMuc2hvd2luZ1Bvc3Rlcil7dmFyIGM9dGhpcy5zaG93aW5nUG9zdGVyP3RoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMjNdOnRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTBdLGQ9dGhpcy5zaG93aW5nUG9zdGVyP3RoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMjRdOgp0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzExXSxlO3RoaXMuaXNGdWxsc2NyZWVuPyhhPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTddP01hdGgubWluKHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTddLHRoaXMuZnVsbHNjcmVlbldpZHRoKTp0aGlzLmZ1bGxzY3JlZW5XaWR0aCxlPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMThdP01hdGgubWluKHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMThdLHRoaXMuZnVsbHNjcmVlbkhlaWdodCk6dGhpcy5mdWxsc2NyZWVuSGVpZ2h0LGU9TWF0aC5taW4oYS9jLGUvZCksZT0xPGU/MTplKTplPSJmaWxsIj09dGhpcy5vcHRpb25zLnJlc2l6ZW1vZGU/TWF0aC5tYXgodGhpcy5vcHRpb25zLndpZHRoL2MsdGhpcy5vcHRpb25zLmhlaWdodC9kKTpNYXRoLm1pbih0aGlzLm9wdGlvbnMud2lkdGgvYyx0aGlzLm9wdGlvbnMuaGVpZ2h0L2QpO2E9TWF0aC5yb3VuZChlKmMpO2U9TWF0aC5yb3VuZChlKmQpOwp2YXIgZD10aGlzLmlzRnVsbHNjcmVlbj9hOnRoaXMub3B0aW9ucy53aWR0aCxjPXRoaXMuaXNGdWxsc2NyZWVuP2U6dGhpcy5vcHRpb25zLmhlaWdodCxmPU1hdGgucm91bmQoZC8yLWEvMiksaj1NYXRoLnJvdW5kKGMvMi1lLzIpO3RoaXMuaXNGdWxsc2NyZWVuJiZ0aGlzLmFkanVzdEZ1bGxzY3JlZW4oZCxjLCEwKTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkKS5jc3Moe3dpZHRoOmQrInB4IixoZWlnaHQ6YysicHgifSk7YigiLmh0bWw1Z2FsbGVyeS1lbGVtLWltZy0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6ZCsicHgiLGhlaWdodDpjKyJweCJ9KTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0taW1hZ2UtIit0aGlzLmlkKS5jc3Moe3dpZHRoOmErInB4IixoZWlnaHQ6ZSsicHgiLHRvcDpqKyJweCIsbGVmdDpmKyJweCJ9KX1lbHNlIGlmKDEyPT1hfHw1PT1hfHw2PT1hfHw3PT1hfHw4PT1hfHw5PT1hfHwxMD09YXx8MTE9PWEpZD10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzEwXSwKYz10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzExXSx0aGlzLmlzRnVsbHNjcmVlbj8oYT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE3XT9NYXRoLm1pbih0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE3XSx0aGlzLmZ1bGxzY3JlZW5XaWR0aCk6dGhpcy5mdWxsc2NyZWVuV2lkdGgsZT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE4XT9NYXRoLm1pbih0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE4XSx0aGlzLmZ1bGxzY3JlZW5IZWlnaHQpOnRoaXMuZnVsbHNjcmVlbkhlaWdodCxlPU1hdGgubWluKGEvZCxlL2MpLGU9MTxlPzE6ZSxkPU1hdGgucm91bmQoZSpkKSxjPU1hdGgucm91bmQoZSpjKSx0aGlzLmFkanVzdEZ1bGxzY3JlZW4oZCxjLCEwKSk6KGQ9dGhpcy5vcHRpb25zLndpZHRoLGM9dGhpcy5vcHRpb25zLmhlaWdodCksYigiLmh0bWw1Z2FsbGVyeS1lbGVtLSIrdGhpcy5pZCkuY3NzKHt3aWR0aDpkKyJweCIsaGVpZ2h0OmMrInB4In0pLApiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkKS5jc3Moe3dpZHRoOmQrInB4IixoZWlnaHQ6YysicHgifSksYigiLmh0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLWNvbnRhaW5lci0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9KSxiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tY29udGFpbmVyLSIrdGhpcy5pZCkuZmluZCgidmlkZW8iKS5jc3Moe3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSksYigiI2h0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCkuY3NzKHt3aWR0aDpkKyJweCIsaGVpZ2h0OmMrInB4In0pLGIoIiNodG1sNWdhbGxlcnktZWxlbS12aWRlby0iK3RoaXMuaWQpLmF0dHIoIndpZHRoIixkKSxiKCIjaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkKS5hdHRyKCJoZWlnaHQiLGMpLGIoIi5odG1sNWdhbGxlcnktZWxlbS12aWRlby0iK3RoaXMuaWQpLmZpbmQoImlmcmFtZSIpLmF0dHIoIndpZHRoIiwKZCksYigiLmh0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCkuZmluZCgiaWZyYW1lIikuYXR0cigiaGVpZ2h0IixjKSxiKCIjaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkKS5maW5kKCJpZnJhbWUiKS5hdHRyKCJ3aWR0aCIsZCksYigiI2h0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCkuZmluZCgiaWZyYW1lIikuYXR0cigiaGVpZ2h0IixjKSxiKCIuaHRtbDVnYWxsZXJ5LWVsZW0taWZyYW1lLSIrdGhpcy5pZCkuY3NzKHt3aWR0aDpkKyJweCIsaGVpZ2h0OmMrInB4In0pLGIoIi5odG1sNWdhbGxlcnktZWxlbS1pZnJhbWUtIit0aGlzLmlkKS5maW5kKCJpZnJhbWUiKS5hdHRyKCJ3aWR0aCIsZCksYigiLmh0bWw1Z2FsbGVyeS1lbGVtLWlmcmFtZS0iK3RoaXMuaWQpLmZpbmQoImlmcmFtZSIpLmF0dHIoImhlaWdodCIsYyk7ZT1kPTA7ImJvdHRvbSI9PXRoaXMub3B0aW9ucy5oZWFkZXJwb3MmJihkPXRoaXMub3B0aW9ucy50aXRsZW92ZXJsYXk/CnRoaXMub3B0aW9ucy5oZWlnaHQtdGhpcy5vcHRpb25zLnRpdGxlaGVpZ2h0OnRoaXMub3B0aW9ucy5oZWlnaHQsZT10aGlzLm9wdGlvbnMudGl0bGVvdmVybGF5P3RoaXMub3B0aW9ucy5oZWlnaHQ6dGhpcy5vcHRpb25zLmhlaWdodCt0aGlzLm9wdGlvbnMudGl0bGVoZWlnaHQpO2E9dGhpcy5vcHRpb25zLnNsaWRlc2hhZG93P3RoaXMub3B0aW9ucy5ib3hXaWR0aC04OnRoaXMub3B0aW9ucy5ib3hXaWR0aDtiKCIuaHRtbDVnYWxsZXJ5LXRpdGxlLSIrdGhpcy5pZCkuY3NzKHt3aWR0aDphKyJweCJ9KTt0aGlzLm9wdGlvbnMudGl0bGVvdmVybGF5fHxiKCIuaHRtbDVnYWxsZXJ5LXRpdGxlLSIrdGhpcy5pZCkuY3NzKHt0b3A6ZCsicHgifSk7YigiLmh0bWw1Z2FsbGVyeS12aXJhbC0iK3RoaXMuaWQpLmNzcyh7dG9wOmUrInB4In0pO2IoIi5odG1sNWdhbGxlcnktdGltZXItIit0aGlzLmlkKS5jc3Moe3RvcDpTdHJpbmcodGhpcy5vcHRpb25zLmVsZW1Ub3ArdGhpcy5vcHRpb25zLmhlaWdodC0KMikrInB4In0pO3RoaXMub3B0aW9ucy5zaG93Y2Fyb3VzZWwmJihiKCIuaHRtbDVnYWxsZXJ5LWNhci0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6dGhpcy5vcHRpb25zLmNhcm91c2VsV2lkdGgrInB4IixoZWlnaHQ6dGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0KyJweCIsdG9wOnRoaXMub3B0aW9ucy5jYXJvdXNlbFRvcCsicHgiLGxlZnQ6dGhpcy5vcHRpb25zLmNhcm91c2VsTGVmdCsicHgiLHRvcDp0aGlzLm9wdGlvbnMuY2Fyb3VzZWxUb3ArInB4In0pLGIoIi5odG1sNWdhbGxlcnktY2FyLWxpc3QtIit0aGlzLmlkKS5jc3Moe3RvcDp0aGlzLm9wdGlvbnMuY2FyVG9wKyJweCIsaGVpZ2h0OlN0cmluZyh0aGlzLm9wdGlvbnMuY2FyQXJlYUxlbmd0aCkrInB4Iix3aWR0aDp0aGlzLm9wdGlvbnMuY2Fyb3VzZWxXaWR0aCsicHgifSksdGhpcy5vcHRpb25zLnRodW1iU2hvd051bT1NYXRoLmZsb29yKHRoaXMub3B0aW9ucy5jYXJBcmVhTGVuZ3RoLyh0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrCnRoaXMub3B0aW9ucy50aHVtYmdhcCkpLDE+dGhpcy5vcHRpb25zLnRodW1iU2hvd051bSYmKHRoaXMub3B0aW9ucy50aHVtYlNob3dOdW09MSksdGhpcy5vcHRpb25zLnRodW1iTWFza0hlaWdodD10aGlzLm9wdGlvbnMudGh1bWJTaG93TnVtKnRoaXMub3B0aW9ucy50aHVtYmhlaWdodCsodGhpcy5vcHRpb25zLnRodW1iU2hvd051bS0xKSp0aGlzLm9wdGlvbnMudGh1bWJnYXAsdGhpcy5vcHRpb25zLnRodW1iVG90YWxIZWlnaHQ9dGhpcy5lbGVtQXJyYXkubGVuZ3RoKnRoaXMub3B0aW9ucy50aHVtYmhlaWdodCsodGhpcy5lbGVtQXJyYXkubGVuZ3RoLTEpKnRoaXMub3B0aW9ucy50aHVtYmdhcCx0aGlzLm9wdGlvbnMuY2Fyb3VzZWxTbGlkZXImJih0aGlzLm9wdGlvbnMuY2Fyb3VzZWxTbGlkZXJNaW49MCx0aGlzLm9wdGlvbnMuY2Fyb3VzZWxTbGlkZXJNYXg9dGhpcy5vcHRpb25zLnRodW1iTWFza0hlaWdodC01NCxiKCIuaHRtbDVnYWxsZXJ5LWNhci1zbGlkZXItYmFyLSIrdGhpcy5pZCkuY3NzKHtoZWlnaHQ6dGhpcy5vcHRpb25zLnRodW1iTWFza0hlaWdodCsKInB4In0pLGIoIi5odG1sNWdhbGxlcnktY2FyLXNsaWRlci1iYXItbWlkZGxlLSIrdGhpcy5pZCkuY3NzKHtoZWlnaHQ6U3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQtMzIpKyJweCJ9KSx0aGlzLm9wdGlvbnMuaXNNb2JpbGUmJmIoIi5odG1sNWdhbGxlcnktY2FyLXJpZ2h0LSIrdGhpcy5pZCkuY3NzKHt0b3A6U3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQtMzUpKyJweCJ9KSxiKCIuaHRtbDVnYWxsZXJ5LWNhci1zbGlkZXItYmFyLSIrdGhpcy5pZCkuY3NzKHtkaXNwbGF5OiJibG9jayJ9KSxiKCIuaHRtbDVnYWxsZXJ5LWNhci1sZWZ0LSIrdGhpcy5pZCkuY3NzKHtkaXNwbGF5OiJibG9jayJ9KSxiKCIuaHRtbDVnYWxsZXJ5LWNhci1yaWdodC0iK3RoaXMuaWQpLmNzcyh7ZGlzcGxheToiYmxvY2sifSksYigiLmh0bWw1Z2FsbGVyeS1jYXItc2xpZGVyLSIrdGhpcy5pZCkuY3NzKHtkaXNwbGF5OiJibG9jayJ9KSksYT0wLHRoaXMub3B0aW9ucy5jYXJvdXNlbE5hdkJ1dHRvbiYmCihhPU1hdGgucm91bmQodGhpcy5vcHRpb25zLmNhckFyZWFMZW5ndGgvMi10aGlzLm9wdGlvbnMudGh1bWJNYXNrSGVpZ2h0LzIpKSxiKCIuaHRtbDVnYWxsZXJ5LWNhci1tYXNrLSIrdGhpcy5pZCkuY3NzKHt0b3A6YSsicHgiLGhlaWdodDp0aGlzLm9wdGlvbnMudGh1bWJNYXNrSGVpZ2h0KyJweCJ9KSx0aGlzLmNhcm91c2VsSGlnaGxpZ2h0KHRoaXMuY3VyRWxlbSkpfX0sY3JlYXRlU3R5bGVWZXJ0aWNhbDpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy50aHVtYmltYWdld2lkdGg9dGhpcy5vcHRpb25zLnRodW1ic2hvd3RpdGxlP3RoaXMub3B0aW9ucy50aHVtYmhlaWdodC0yKnRoaXMub3B0aW9ucy50aHVtYmltYWdlYm9yZGVyLTQ6dGhpcy5vcHRpb25zLnRodW1id2lkdGgtMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlci00O3RoaXMub3B0aW9ucy50aHVtYmltYWdlaGVpZ2h0PXRoaXMub3B0aW9ucy50aHVtYmhlaWdodC0yKnRoaXMub3B0aW9ucy50aHVtYmltYWdlYm9yZGVyLQo0O3RoaXMub3B0aW9ucy5zaG93dGl0bGV8fCh0aGlzLm9wdGlvbnMudGl0bGVoZWlnaHQ9MCk7aWYoIXRoaXMub3B0aW9ucy5zaG93c29jaWFsbWVkaWF8fCF0aGlzLm9wdGlvbnMuc2hvd2ZhY2Vib29rbGlrZSYmIXRoaXMub3B0aW9ucy5zaG93dHdpdHRlciYmIXRoaXMub3B0aW9ucy5zaG93Z29vZ2xlcGx1cyl0aGlzLm9wdGlvbnMuc29jaWFsaGVpZ2h0PTA7dGhpcy5vcHRpb25zLmhlYWRlckhlaWdodD10aGlzLm9wdGlvbnMudGl0bGVvdmVybGF5P3RoaXMub3B0aW9ucy5zb2NpYWxoZWlnaHQ6dGhpcy5vcHRpb25zLnRpdGxlaGVpZ2h0K3RoaXMub3B0aW9ucy5zb2NpYWxoZWlnaHQ7dGhpcy5vcHRpb25zLmJveFdpZHRoPXRoaXMub3B0aW9ucy53aWR0aDt0aGlzLm9wdGlvbnMuYm94SGVpZ2h0PXRoaXMub3B0aW9ucy5oZWlnaHQrdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodDt0aGlzLm9wdGlvbnMuYm94TGVmdD10aGlzLm9wdGlvbnMucGFkZGluZzt0aGlzLm9wdGlvbnMuYm94VG9wPQp0aGlzLm9wdGlvbnMucGFkZGluZzt0aGlzLm9wdGlvbnMuc2xpZGVzaGFkb3cmJih0aGlzLm9wdGlvbnMuYm94V2lkdGgrPTgpO3RoaXMub3B0aW9ucy5zaG93Y2Fyb3VzZWw/ImJvdHRvbSI9PXRoaXMub3B0aW9ucy5jYXJvdXNlbHBvc2l0aW9uPyh0aGlzLm9wdGlvbnMuY2Fyb3VzZWxXaWR0aD10aGlzLm9wdGlvbnMud2lkdGgsdGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0PXRoaXMub3B0aW9ucy5jYXJvdXNlbGhlaWdodCx0aGlzLm9wdGlvbnMuY2Fyb3VzZWxMZWZ0PXRoaXMub3B0aW9ucy5wYWRkaW5nLHRoaXMub3B0aW9ucy5jYXJvdXNlbFRvcD10aGlzLm9wdGlvbnMuaGVpZ2h0K3RoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQrMip0aGlzLm9wdGlvbnMucGFkZGluZyx0aGlzLm9wdGlvbnMuY2FyQXJlYUxlbmd0aD10aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQsdGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyPU1hdGguZmxvb3IodGhpcy5vcHRpb25zLmNhckFyZWFMZW5ndGgvCih0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrdGhpcy5vcHRpb25zLnRodW1iZ2FwKSk8dGhpcy5lbGVtQXJyYXkubGVuZ3RoLHRoaXMub3B0aW9ucy50aHVtYndpZHRoPXRoaXMub3B0aW9ucy53aWR0aCx0aGlzLm9wdGlvbnMuY2Fyb3VzZWxTbGlkZXImJih0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aC09MjApKToodGhpcy5vcHRpb25zLmNhcm91c2VsV2lkdGg9dGhpcy5vcHRpb25zLnRodW1id2lkdGgsdGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0PXRoaXMub3B0aW9ucy5oZWlnaHQrdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCx0aGlzLm9wdGlvbnMuY2FyVG9wPTAsdGhpcy5vcHRpb25zLmNhckJvdHRvbT0wLHRoaXMub3B0aW9ucy5jYXJBcmVhTGVuZ3RoPXRoaXMub3B0aW9ucy5jYXJvdXNlbEhlaWdodC10aGlzLm9wdGlvbnMuY2FyVG9wLXRoaXMub3B0aW9ucy5jYXJCb3R0b20sdGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyPU1hdGguZmxvb3IodGhpcy5vcHRpb25zLmNhckFyZWFMZW5ndGgvCih0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrdGhpcy5vcHRpb25zLnRodW1iZ2FwKSk8dGhpcy5lbGVtQXJyYXkubGVuZ3RoLHRoaXMub3B0aW9ucy5jYXJvdXNlbFNsaWRlciYmKHRoaXMub3B0aW9ucy5jYXJvdXNlbFdpZHRoKz0yMCksImxlZnQiPT10aGlzLm9wdGlvbnMuY2Fyb3VzZWxwb3NpdGlvbj8odGhpcy5vcHRpb25zLmJveExlZnQ9dGhpcy5vcHRpb25zLnBhZGRpbmcrdGhpcy5vcHRpb25zLmNhcm91c2VsV2lkdGgrdGhpcy5vcHRpb25zLmNhcm91c2VsbWFyZ2luLHRoaXMub3B0aW9ucy5jYXJvdXNlbExlZnQ9dGhpcy5vcHRpb25zLnBhZGRpbmcpOnRoaXMub3B0aW9ucy5jYXJvdXNlbExlZnQ9dGhpcy5vcHRpb25zLnBhZGRpbmcrdGhpcy5vcHRpb25zLndpZHRoK3RoaXMub3B0aW9ucy5jYXJvdXNlbG1hcmdpbix0aGlzLm9wdGlvbnMuY2Fyb3VzZWxUb3A9dGhpcy5vcHRpb25zLnBhZGRpbmcpOih0aGlzLm9wdGlvbnMuY2Fyb3VzZWxXaWR0aD0wLHRoaXMub3B0aW9ucy5jYXJvdXNlbEhlaWdodD0KMCx0aGlzLm9wdGlvbnMuY2Fyb3VzZWxMZWZ0PTAsdGhpcy5vcHRpb25zLmNhcm91c2VsVG9wPTAsdGhpcy5vcHRpb25zLmNhcm91c2VsbWFyZ2luPTApOyJib3R0b20iPT10aGlzLm9wdGlvbnMuY2Fyb3VzZWxwb3NpdGlvbj8odGhpcy5vcHRpb25zLnRvdGFsV2lkdGg9dGhpcy5vcHRpb25zLndpZHRoKzIqdGhpcy5vcHRpb25zLnBhZGRpbmcsdGhpcy5vcHRpb25zLnRvdGFsSGVpZ2h0PXRoaXMub3B0aW9ucy5oZWlnaHQrdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCsyKnRoaXMub3B0aW9ucy5wYWRkaW5nK3RoaXMub3B0aW9ucy5jYXJvdXNlbG1hcmdpbit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQpOih0aGlzLm9wdGlvbnMudG90YWxXaWR0aD10aGlzLm9wdGlvbnMud2lkdGgrdGhpcy5vcHRpb25zLmNhcm91c2VsV2lkdGgrdGhpcy5vcHRpb25zLmNhcm91c2VsbWFyZ2luKzIqdGhpcy5vcHRpb25zLnBhZGRpbmcsdGhpcy5vcHRpb25zLnRvdGFsSGVpZ2h0PXRoaXMub3B0aW9ucy5oZWlnaHQrCnRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQrMip0aGlzLm9wdGlvbnMucGFkZGluZyk7dGhpcy5vcHRpb25zLmNvbnRhaW5lcldpZHRoPXRoaXMub3B0aW9ucy50b3RhbFdpZHRoO3RoaXMub3B0aW9ucy5jb250YWluZXJIZWlnaHQ9dGhpcy5vcHRpb25zLnRvdGFsSGVpZ2h0O3RoaXMub3B0aW9ucy5yZXNwb25zaXZlPyh0aGlzLm9wdGlvbnMub3JpZ2luYWxXaWR0aD10aGlzLm9wdGlvbnMud2lkdGgsdGhpcy5vcHRpb25zLm9yaWdpbmFsSGVpZ2h0PXRoaXMub3B0aW9ucy5oZWlnaHQsdGhpcy5jb250YWluZXIuY3NzKHsibWF4LXdpZHRoIjoiMTAwJSJ9KSk6dGhpcy5jb250YWluZXIuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGgsaGVpZ2h0OnRoaXMub3B0aW9ucy5jb250YWluZXJIZWlnaHR9KTt2YXIgYT0wLGM9MDt0aGlzLm9wdGlvbnMuZWxlbVRvcD0wOyJ0b3AiPT10aGlzLm9wdGlvbnMuaGVhZGVycG9zPyhjPTAsYT10aGlzLm9wdGlvbnMuc29jaWFsaGVpZ2h0LAp0aGlzLm9wdGlvbnMuZWxlbVRvcD10aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0KToiYm90dG9tIj09dGhpcy5vcHRpb25zLmhlYWRlcnBvcz8odGhpcy5vcHRpb25zLmVsZW1Ub3A9MCxhPXRoaXMub3B0aW9ucy50aXRsZW92ZXJsYXk/dGhpcy5vcHRpb25zLmhlaWdodC10aGlzLm9wdGlvbnMudGl0bGVoZWlnaHQ6dGhpcy5vcHRpb25zLmhlaWdodCxjPXRoaXMub3B0aW9ucy50aXRsZW92ZXJsYXk/dGhpcy5vcHRpb25zLmhlaWdodDp0aGlzLm9wdGlvbnMuaGVpZ2h0K3RoaXMub3B0aW9ucy50aXRsZWhlaWdodCk6ImJvdHRvbW91dHNpZGUiPT10aGlzLm9wdGlvbnMuaGVhZGVycG9zJiYoYT10aGlzLm9wdGlvbnMuc2hvd2Nhcm91c2VsP3RoaXMub3B0aW9ucy5oZWlnaHQrdGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0OnRoaXMub3B0aW9ucy5oZWlnaHQpO3ZhciBkPSIgLmh0bWw1Z2FsbGVyeS1jb250YWluZXItIit0aGlzLmlkKyIgeyBkaXNwbGF5OmJsb2NrOyBwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowcHg7IHRvcDowcHg7IHdpZHRoOiIrCnRoaXMub3B0aW9ucy50b3RhbFdpZHRoKyJweDsgaGVpZ2h0OiIrdGhpcy5vcHRpb25zLnRvdGFsSGVpZ2h0KyJweDsgIisoIXRoaXMub3B0aW9ucy5iZ2ltYWdlPyIiOiJiYWNrZ3JvdW5kOnVybCgnIit0aGlzLm9wdGlvbnMuYmdpbWFnZSsiJykgY2VudGVyIHRvcDsiKSsiIGJhY2tncm91bmQtY29sb3I6Iit0aGlzLm9wdGlvbnMuYmdjb2xvcisiO30iO3RoaXMub3B0aW9ucy5nYWxsZXJ5c2hhZG93JiYoZCs9IiAuaHRtbDVnYWxsZXJ5LWNvbnRhaW5lci0iK3RoaXMuaWQrIiB7IC1tb3otYm94LXNoYWRvdzogMHB4IDJweCA1cHggI2FhYTsgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMnB4IDVweCAjYWFhOyBib3gtc2hhZG93OiAwcHggMnB4IDVweCAjYWFhO30iKTt2YXIgZD1kKygiIC5odG1sNWdhbGxlcnktYm94LSIrdGhpcy5pZCsiIHtkaXNwbGF5OmJsb2NrOyBwb3NpdGlvbjphYnNvbHV0ZTsgdGV4dC1hbGlnbjpjZW50ZXI7IGxlZnQ6Iit0aGlzLm9wdGlvbnMuYm94TGVmdCsKInB4OyB0b3A6Iit0aGlzLm9wdGlvbnMuYm94VG9wKyJweDsgd2lkdGg6Iit0aGlzLm9wdGlvbnMuYm94V2lkdGgrInB4OyBoZWlnaHQ6Iit0aGlzLm9wdGlvbnMuYm94SGVpZ2h0KyJweDsgfSIpLGU9TWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuc29jaWFsaGVpZ2h0LzItMTIpLGQ9ZCsoIiAuaHRtbDVnYWxsZXJ5LXRpdGxlLXRleHQtIit0aGlzLmlkKyIgIit0aGlzLm9wdGlvbnMudGl0bGVjc3MrIiAuaHRtbDVnYWxsZXJ5LXRpdGxlLXRleHQtIit0aGlzLmlkKyIgIit0aGlzLm9wdGlvbnMudGl0bGVjc3NsaW5rKyIgLmh0bWw1Z2FsbGVyeS1lcnJvci0iK3RoaXMuaWQrIiAiK3RoaXMub3B0aW9ucy5lcnJvcmNzcyksZD1kKygiIC5odG1sNWdhbGxlcnktZGVzY3JpcHRpb24tdGV4dC0iK3RoaXMuaWQrIiAiK3RoaXMub3B0aW9ucy5kZXNjcmlwdGlvbmNzcysiIC5odG1sNWdhbGxlcnktZGVzY3JpcHRpb24tdGV4dC0iK3RoaXMuaWQrIiAiK3RoaXMub3B0aW9ucy5kZXNjcmlwdGlvbmNzc2xpbmspLApkPWQrKCIgLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLXRpdGxlLSIrdGhpcy5pZCsiIit0aGlzLm9wdGlvbnMubGlnaHRib3h0aXRsZWNzcysiIC5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi10aXRsZS0iK3RoaXMuaWQrIiIrdGhpcy5vcHRpb25zLmxpZ2h0Ym94dGl0bGVsaW5rY3NzKSxkPWQrKCIgLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLWRlc2NyaXB0aW9uLSIrdGhpcy5pZCsiIit0aGlzLm9wdGlvbnMubGlnaHRib3hkZXNjcmlwdGlvbmNzcysiIC5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1kZXNjcmlwdGlvbi0iK3RoaXMuaWQrIiIrdGhpcy5vcHRpb25zLmxpZ2h0Ym94ZGVzY3JpcHRpb25saW5rY3NzKSxkPWQrKCIgLmh0bWw1Z2FsbGVyeS12aXJhbC0iK3RoaXMuaWQrIiB7ZGlzcGxheTpibG9jazsgb3ZlcmZsb3c6aGlkZGVuOyBwb3NpdGlvbjphYnNvbHV0ZTsgdGV4dC1hbGlnbjpsZWZ0OyB0b3A6IitjKyJweDsgbGVmdDowcHg7IHdpZHRoOiIrdGhpcy5vcHRpb25zLmJveFdpZHRoKwoicHg7IGhlaWdodDoiK3RoaXMub3B0aW9ucy5zb2NpYWxoZWlnaHQrInB4OyBwYWRkaW5nLXRvcDoiK2UrInB4O30iKSxjPXRoaXMub3B0aW9ucy5zbGlkZXNoYWRvdz90aGlzLm9wdGlvbnMuYm94V2lkdGgtODp0aGlzLm9wdGlvbnMuYm94V2lkdGgsZD1kKygiIC5odG1sNWdhbGxlcnktdGl0bGUtIit0aGlzLmlkKyIge2Rpc3BsYXk6IisodGhpcy5vcHRpb25zLnRpdGxlb3ZlcmxheSYmdGhpcy5vcHRpb25zLnRpdGxlYXV0b2hpZGU/Im5vbmUiOiJibG9jayIpKyI7IG92ZXJmbG93OmhpZGRlbjsgcG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MHB4OyB3aWR0aDoiK2MrInB4OyAiKSxkPXRoaXMub3B0aW9ucy50aXRsZW92ZXJsYXk/InRvcCI9PXRoaXMub3B0aW9ucy5oZWFkZXJwb3M/ZCsidG9wOjBweDsgaGVpZ2h0OmF1dG87IH0iOmQrImJvdHRvbTowcHg7IGhlaWdodDphdXRvOyB9IjpkKygidG9wOiIrYSsicHg7IGhlaWdodDoiK3RoaXMub3B0aW9ucy50aXRsZWhlaWdodCsicHg7IH0iKSwKZD1kKygiIC5odG1sNWdhbGxlcnktdGltZXItIit0aGlzLmlkKyIge2Rpc3BsYXk6YmxvY2s7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6IitTdHJpbmcodGhpcy5vcHRpb25zLmVsZW1Ub3ArdGhpcy5vcHRpb25zLmhlaWdodC0yKSsicHg7IGxlZnQ6MHB4OyB3aWR0aDowcHg7IGhlaWdodDoycHg7IGJhY2tncm91bmQtY29sb3I6I2NjYzsgZmlsdGVyOmFscGhhKG9wYWNpdHk9NjApOyBvcGFjaXR5OjAuNjsgfSIpLGQ9ZCsoIiAuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkKyIge2Rpc3BsYXk6YmxvY2s7IG92ZXJmbG93OmhpZGRlbjsgcG9zaXRpb246YWJzb2x1dGU7IHRvcDoiK3RoaXMub3B0aW9ucy5lbGVtVG9wKyJweDsgbGVmdDowcHg7IHdpZHRoOiIrdGhpcy5vcHRpb25zLmJveFdpZHRoKyJweDsgaGVpZ2h0OiIrdGhpcy5vcHRpb25zLmhlaWdodCsicHg7fSIpO3RoaXMub3B0aW9ucy5pc0lFN3x8dGhpcy5vcHRpb25zLmlzSUU2PyhkKz0iIC5odG1sNWdhbGxlcnktbG9hZGluZy0iKwp0aGlzLmlkKyIge2Rpc3BsYXk6bm9uZTsgfSIsZCs9IiAuaHRtbDVnYWxsZXJ5LWxvYWRpbmctY2VudGVyLSIrdGhpcy5pZCsiIHtkaXNwbGF5Om5vbmU7IH0iKTooZCs9IiAuaHRtbDVnYWxsZXJ5LWxvYWRpbmctIit0aGlzLmlkKyIge2Rpc3BsYXk6YmxvY2s7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6NHB4OyByaWdodDo0cHg7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOyBiYWNrZ3JvdW5kOnVybCgnIit0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcisibG9hZGluZy5naWYnKSBuby1yZXBlYXQgdG9wIHJpZ2h0O30iLGQrPSIgLmh0bWw1Z2FsbGVyeS1sb2FkaW5nLWNlbnRlci0iK3RoaXMuaWQrIiB7ZGlzcGxheTpibG9jazsgcG9zaXRpb246YWJzb2x1dGU7IHRvcDowcHg7IGxlZnQ6MHB4OyB3aWR0aDoxMDAlOyBoZWlnaHQ6MTAwJTsgYmFja2dyb3VuZDp1cmwoJyIrdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrImxvYWRpbmdfY2VudGVyLmdpZicpIG5vLXJlcGVhdCBjZW50ZXIgY2VudGVyO30iKTsKMDx0aGlzLm9wdGlvbnMuYm9yZGVycmFkaXVzJiYoZCs9IiAuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkKyIgeyBvdmVyZmxvdzpoaWRkZW47IGJvcmRlci1yYWRpdXM6Iit0aGlzLm9wdGlvbnMuYm9yZGVycmFkaXVzKyJweDsgLW1vei1ib3JkZXItcmFkaXVzOiIrdGhpcy5vcHRpb25zLmJvcmRlcnJhZGl1cysicHg7IC13ZWJraXQtYm9yZGVyLXJhZGl1czoiK3RoaXMub3B0aW9ucy5ib3JkZXJyYWRpdXMrInB4O30iKTt0aGlzLm9wdGlvbnMuc2xpZGVzaGFkb3cmJihkKz0iIC5odG1sNWdhbGxlcnktdGl0bGUtIit0aGlzLmlkKyIgeyBwYWRkaW5nOjRweDt9IixkKz0iIC5odG1sNWdhbGxlcnktdGltZXItIit0aGlzLmlkKyIgeyBtYXJnaW46NHB4O30iLGQrPSIgLmh0bWw1Z2FsbGVyeS1lbGVtLSIrdGhpcy5pZCsiIHsgb3ZlcmZsb3c6aGlkZGVuOyBwYWRkaW5nOjRweDsgLW1vei1ib3gtc2hhZG93OiAwcHggMnB4IDVweCAjYWFhOyAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAycHggNXB4ICNhYWE7IGJveC1zaGFkb3c6IDBweCAycHggNXB4ICNhYWE7fSIpOwp0aGlzLm9wdGlvbnMuc2hvd2Nhcm91c2VsPyhkKz0iIC5odG1sNWdhbGxlcnktY2FyLSIrdGhpcy5pZCsiIHsgcG9zaXRpb246YWJzb2x1dGU7IGRpc3BsYXk6YmxvY2s7IG92ZXJmbG93OmhpZGRlbjsgd2lkdGg6Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxXaWR0aCsicHg7IGhlaWdodDoiK3RoaXMub3B0aW9ucy5jYXJvdXNlbEhlaWdodCsicHg7IGxlZnQ6Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxMZWZ0KyJweDsgdG9wOiIrdGhpcy5vcHRpb25zLmNhcm91c2VsVG9wKyJweDsgfSIsZCs9IiAuaHRtbDVnYWxsZXJ5LWNhci1saXN0LSIrdGhpcy5pZCsiIHsgcG9zaXRpb246YWJzb2x1dGU7IGRpc3BsYXk6YmxvY2s7IG92ZXJmbG93OmhpZGRlbjsgdG9wOiIrdGhpcy5vcHRpb25zLmNhclRvcCsicHg7IGhlaWdodDoiK1N0cmluZyh0aGlzLm9wdGlvbnMuY2FyQXJlYUxlbmd0aCkrInB4OyBsZWZ0OjBweDsgd2lkdGg6Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxXaWR0aCsicHg7IH0iLGQrPQoiLmh0bWw1Z2FsbGVyeS10aHVtYnMtIit0aGlzLmlkKyIge21hcmdpbi10b3A6MHB4OyBoZWlnaHQ6IitTdHJpbmcodGhpcy5lbGVtQXJyYXkubGVuZ3RoKih0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrdGhpcy5vcHRpb25zLnRodW1iZ2FwKSkrInB4O30iLHRoaXMub3B0aW9ucy50aHVtYlNob3dOdW09TWF0aC5mbG9vcih0aGlzLm9wdGlvbnMuY2FyQXJlYUxlbmd0aC8odGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0K3RoaXMub3B0aW9ucy50aHVtYmdhcCkpLDE+dGhpcy5vcHRpb25zLnRodW1iU2hvd051bSYmKHRoaXMub3B0aW9ucy50aHVtYlNob3dOdW09MSksdGhpcy5vcHRpb25zLnRodW1iTWFza0hlaWdodD10aGlzLm9wdGlvbnMudGh1bWJTaG93TnVtKnRoaXMub3B0aW9ucy50aHVtYmhlaWdodCsodGhpcy5vcHRpb25zLnRodW1iU2hvd051bS0xKSp0aGlzLm9wdGlvbnMudGh1bWJnYXAsdGhpcy5vcHRpb25zLnRodW1iVG90YWxIZWlnaHQ9dGhpcy5lbGVtQXJyYXkubGVuZ3RoKgp0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrKHRoaXMuZWxlbUFycmF5Lmxlbmd0aC0xKSp0aGlzLm9wdGlvbnMudGh1bWJnYXAsdGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyTWluPTAsdGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyTWF4PXRoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQtNTQsZCs9IiAuaHRtbDVnYWxsZXJ5LWNhci1zbGlkZXItYmFyLSIrdGhpcy5pZCsiIHsgcG9zaXRpb246YWJzb2x1dGU7IGRpc3BsYXk6IisodGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyPyJibG9jayI6Im5vbmUiKSsiOyBvdmVyZmxvdzpoaWRkZW47IHRvcDowcHg7IGhlaWdodDoiK3RoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQrInB4OyBsZWZ0OiIrU3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYndpZHRoKzYpKyJweDsgd2lkdGg6MTRweDt9IixkKz0iIC5odG1sNWdhbGxlcnktY2FyLXNsaWRlci1iYXItdG9wLSIrdGhpcy5pZCsiIHsgcG9zaXRpb246YWJzb2x1dGU7IGRpc3BsYXk6YmxvY2s7IHRvcDowcHg7IGxlZnQ6MHB4OyB3aWR0aDoxNHB4OyBoZWlnaHQ6MTZweDsgYmFja2dyb3VuZDp1cmwoJyIrCnRoaXMub3B0aW9ucy5za2luZm9sZGVyKyJiYXJ0b3AucG5nJyl9IixkKz0iIC5odG1sNWdhbGxlcnktY2FyLXNsaWRlci1iYXItbWlkZGxlLSIrdGhpcy5pZCsiIHsgcG9zaXRpb246YWJzb2x1dGU7IGRpc3BsYXk6YmxvY2s7IHRvcDoxNnB4OyBsZWZ0OjBweDsgd2lkdGg6MTRweDsgaGVpZ2h0OiIrU3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQtMzIpKyJweDsgYmFja2dyb3VuZDp1cmwoJyIrdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrImJhci5wbmcnKX0iLGQrPSIgLmh0bWw1Z2FsbGVyeS1jYXItc2xpZGVyLWJhci1ib3R0b20tIit0aGlzLmlkKyIgeyBwb3NpdGlvbjphYnNvbHV0ZTsgZGlzcGxheTpibG9jazsgYm90dG9tOjBweDsgbGVmdDowcHg7IHdpZHRoOjE0cHg7IGhlaWdodDoxNnB4OyBiYWNrZ3JvdW5kOnVybCgnIit0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcisiYmFyYm90dG9tLnBuZycpfSIsZD10aGlzLm9wdGlvbnMuaXNNb2JpbGU/ZCsoIiAuaHRtbDVnYWxsZXJ5LWNhci1sZWZ0LSIrCnRoaXMuaWQrIiB7IHBvc2l0aW9uOmFic29sdXRlOyBkaXNwbGF5OiIrKHRoaXMub3B0aW9ucy5jYXJvdXNlbFNsaWRlcj8iYmxvY2siOiJub25lIikrIjsgY3Vyc29yOnBvaW50ZXI7IG92ZXJmbG93OmhpZGRlbjsgd2lkdGg6MTZweDsgaGVpZ2h0OjM1cHg7IGxlZnQ6IitTdHJpbmcodGhpcy5vcHRpb25zLnRodW1id2lkdGgrNSkrInB4OyB0b3A6MHB4OyBiYWNrZ3JvdW5kOnVybCgnIit0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcisic2xpZGVydG9wLnBuZycpfSAgLmh0bWw1Z2FsbGVyeS1jYXItcmlnaHQtIit0aGlzLmlkKyIgeyBwb3NpdGlvbjphYnNvbHV0ZTsgZGlzcGxheToiKyh0aGlzLm9wdGlvbnMuY2Fyb3VzZWxTbGlkZXI/ImJsb2NrIjoibm9uZSIpKyI7IGN1cnNvcjpwb2ludGVyOyBvdmVyZmxvdzpoaWRkZW47IHdpZHRoOjE2cHg7IGhlaWdodDozNXB4OyBsZWZ0OiIrU3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYndpZHRoKzUpKyJweDsgdG9wOiIrU3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQtCjM1KSsicHg7IGJhY2tncm91bmQ6dXJsKCciK3RoaXMub3B0aW9ucy5za2luZm9sZGVyKyJzbGlkZXJib3R0b20ucG5nJyl9ICIpOmQrKCIgLmh0bWw1Z2FsbGVyeS1jYXItc2xpZGVyLSIrdGhpcy5pZCsiIHsgcG9zaXRpb246YWJzb2x1dGU7IGRpc3BsYXk6IisodGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyPyJibG9jayI6Im5vbmUiKSsiOyBvdmVyZmxvdzpoaWRkZW47IGN1cnNvcjpwb2ludGVyOyB0b3A6MHB4OyBoZWlnaHQ6NTRweDsgbGVmdDoiK1N0cmluZyh0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCs1KSsicHg7IHdpZHRoOjE2cHg7IGJhY2tncm91bmQ6dXJsKCciK3RoaXMub3B0aW9ucy5za2luZm9sZGVyKyJzbGlkZXIucG5nJyk7fSIpLGE9MCx0aGlzLm9wdGlvbnMuY2Fyb3VzZWxOYXZCdXR0b24mJihhPU1hdGgucm91bmQodGhpcy5vcHRpb25zLmNhckFyZWFMZW5ndGgvMi10aGlzLm9wdGlvbnMudGh1bWJNYXNrSGVpZ2h0LzIpKSxkKz0iIC5odG1sNWdhbGxlcnktY2FyLW1hc2stIisKdGhpcy5pZCsiIHsgcG9zaXRpb246YWJzb2x1dGU7IGRpc3BsYXk6YmxvY2s7IG92ZXJmbG93OmhpZGRlbjsgdG9wOiIrYSsicHg7IGhlaWdodDoiK3RoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQrInB4OyBsZWZ0OjBweDsgd2lkdGg6Iit0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCsicHg7fSAiLGE9dGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0LHRoaXMub3B0aW9ucy5pc0lFfHwoYT10aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQtMiksZCs9IiAuaHRtbDVnYWxsZXJ5LXRuLSIrdGhpcy5pZCsiIHsgZGlzcGxheTpibG9jazsgbWFyZ2luLWJvdHRvbToiK3RoaXMub3B0aW9ucy50aHVtYmdhcCsicHg7IHRleHQtYWxpZ246Y2VudGVyOyBjdXJzb3I6cG9pbnRlcjsgd2lkdGg6Iit0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCsicHg7aGVpZ2h0OiIrYSsicHg7b3ZlcmZsb3c6aGlkZGVuOyIsdGhpcy5vcHRpb25zLmNhcm91c2VsYmd0cmFuc3BhcmVudD9kKz0iYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsiOgoodGhpcy5vcHRpb25zLmlzSUV8fChkKz0iYm9yZGVyLXRvcDoxcHggc29saWQgIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWx0b3Bib3JkZXIrIjsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxib3R0b21ib3JkZXIrIjsiKSxkKz0iYmFja2dyb3VuZC1jb2xvcjogIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2NvbG9yZW5kKyI7IGJhY2tncm91bmQ6ICIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdjb2xvcmVuZCsiIC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2NvbG9yc3RhcnQrIiksIHRvKCIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdjb2xvcmVuZCsiKSkgbm8tcmVwZWF0OyBiYWNrZ3JvdW5kOiAiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJnY29sb3JlbmQrIiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdjb2xvcnN0YXJ0KwoiLCAiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJnY29sb3JlbmQrIikgbm8tcmVwZWF0OyBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdjb2xvcnN0YXJ0KyIsIGVuZENvbG9yc3RyPSIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdjb2xvcmVuZCsiKSBuby1yZXBlYXQ7IC1tcy1maWx0ZXI6ICdwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0iK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJnY29sb3JzdGFydCsiLCBlbmRDb2xvcnN0cj0iK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJnY29sb3JlbmQrIiknIG5vLXJlcGVhdDsiKSx0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2ltYWdlJiYoZCs9ImJhY2tncm91bmQ6dXJsKCciK3RoaXMub3B0aW9ucy5za2luZm9sZGVyK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJnaW1hZ2UrIicpIGNlbnRlciB0b3A7IiksCmQ9ZCsifSIrKCIgLmh0bWw1Z2FsbGVyeS10bi1zZWxlY3RlZC0iK3RoaXMuaWQrIiB7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbi1ib3R0b206Iit0aGlzLm9wdGlvbnMudGh1bWJnYXArInB4O3RleHQtYWxpZ246Y2VudGVyOyBjdXJzb3I6cG9pbnRlcjsgd2lkdGg6Iit0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCsicHg7aGVpZ2h0OiIrYSsicHg7b3ZlcmZsb3c6aGlkZGVuOyIpLHRoaXMub3B0aW9ucy5jYXJvdXNlbGJndHJhbnNwYXJlbnQ/ZCs9ImJhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7IjoodGhpcy5vcHRpb25zLmlzSUV8fChkKz0iYm9yZGVyLXRvcDoxcHggc29saWQgIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxoaWdobGlnaHR0b3Bib3JkZXIrIjsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxoaWdobGlnaHRib3R0b21ib3JkZXIrIjsiKSxkKz0iYmFja2dyb3VuZC1jb2xvcjogIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxoaWdobGlnaHRiZ2NvbG9yZW5kKwoiOyBiYWNrZ3JvdW5kOiAiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGhpZ2hsaWdodGJnY29sb3JlbmQrIiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCIrdGhpcy5vcHRpb25zLmNhcm91c2VsaGlnaGxpZ2h0Ymdjb2xvcnN0YXJ0KyIpLCB0bygiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGhpZ2hsaWdodGJnY29sb3JlbmQrIikpIG5vLXJlcGVhdDsgYmFja2dyb3VuZDogIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxoaWdobGlnaHRiZ2NvbG9yZW5kKyIgLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGhpZ2hsaWdodGJnY29sb3JzdGFydCsiLCAiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGhpZ2hsaWdodGJnY29sb3JlbmQrIikgbm8tcmVwZWF0OyBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSIrdGhpcy5vcHRpb25zLmNhcm91c2VsaGlnaGxpZ2h0Ymdjb2xvcnN0YXJ0KwoiLCBlbmRDb2xvcnN0cj0iK3RoaXMub3B0aW9ucy5jYXJvdXNlbGhpZ2hsaWdodGJnY29sb3JlbmQrIikgbm8tcmVwZWF0OyAtbXMtZmlsdGVyOiAncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxoaWdobGlnaHRiZ2NvbG9yc3RhcnQrIiwgZW5kQ29sb3JzdHI9Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxoaWdobGlnaHRiZ2NvbG9yZW5kKyIpJyBuby1yZXBlYXQ7IiksdGhpcy5vcHRpb25zLmNhcm91c2VsYmdpbWFnZSYmKGQrPSJiYWNrZ3JvdW5kOnVybCgnIit0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2ltYWdlKyInKSBjZW50ZXIgdG9wOyIpLGQrPSJ9IixkKz0iIC5odG1sNWdhbGxlcnktdG4tc2VsZWN0ZWQtIit0aGlzLmlkKyIgLmh0bWw1Z2FsbGVyeS10bi1pbWctIit0aGlzLmlkKyIge2JhY2tncm91bmQtY29sb3I6Iit0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcmNvbG9yKwoiO30gLmh0bWw1Z2FsbGVyeS10bi0iK3RoaXMuaWQrIiB7IGZpbHRlcjphbHBoYShvcGFjaXR5PSIrTWF0aC5yb3VuZCgxMDAqdGhpcy5vcHRpb25zLnRodW1ib3BhY2l0eSkrIik7IG9wYWNpdHk6Iit0aGlzLm9wdGlvbnMudGh1bWJvcGFjaXR5KyI7IH0gIC5odG1sNWdhbGxlcnktdG4tc2VsZWN0ZWQtIit0aGlzLmlkKyIgeyBmaWx0ZXI6YWxwaGEob3BhY2l0eT0xMDApOyBvcGFjaXR5OjE7IH0gIixjPXRoaXMub3B0aW9ucy50aHVtYndpZHRoLTMqdGhpcy5vcHRpb25zLnRodW1ibWFyZ2luLHRoaXMub3B0aW9ucy50aHVtYnNob3dpbWFnZT8oYy09dGhpcy5vcHRpb25zLnRodW1iaW1hZ2V3aWR0aCsyKnRoaXMub3B0aW9ucy50aHVtYmltYWdlYm9yZGVyLGE9dGhpcy5vcHRpb25zLnRodW1ic2hvd3RpdGxlP3RoaXMub3B0aW9ucy50aHVtYm1hcmdpbjp0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aC8yLSh0aGlzLm9wdGlvbnMudGh1bWJpbWFnZXdpZHRoKzIqdGhpcy5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXIpLwoyLGU9TWF0aC5yb3VuZCgodGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0LTIpLzItKHRoaXMub3B0aW9ucy50aHVtYmltYWdlaGVpZ2h0KzIqdGhpcy5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXIpLzIpLGQrPSIgLmh0bWw1Z2FsbGVyeS10bi1pbWctIit0aGlzLmlkKyIge2Rpc3BsYXk6YmxvY2s7IG92ZXJmbG93OmhpZGRlbjsgZmxvYXQ6bGVmdDsgbWFyZ2luLXRvcDoiK2UrInB4OyBtYXJnaW4tbGVmdDoiK2ErInB4OyB3aWR0aDoiK1N0cmluZyh0aGlzLm9wdGlvbnMudGh1bWJpbWFnZXdpZHRoKzIqdGhpcy5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXIpKyJweDtoZWlnaHQ6IitTdHJpbmcodGhpcy5vcHRpb25zLnRodW1iaW1hZ2VoZWlnaHQrMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcikrInB4O30iKTpkKz0iIC5odG1sNWdhbGxlcnktdG4taW1nLSIrdGhpcy5pZCsiIHtkaXNwbGF5Om5vbmU7fSIsdGhpcy5vcHRpb25zLnRodW1ic2hvd3RpdGxlPyhkKz0iIC5odG1sNWdhbGxlcnktdG4tdGl0bGUtIisKdGhpcy5pZCsiIHtkaXNwbGF5OmJsb2NrOyBvdmVyZmxvdzpoaWRkZW47IGZsb2F0OmxlZnQ7IG1hcmdpbi10b3A6MHB4OyBtYXJnaW4tbGVmdDoiK3RoaXMub3B0aW9ucy50aHVtYm1hcmdpbisicHg7IHdpZHRoOiIrYysicHg7aGVpZ2h0OiIrU3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYmhlaWdodC0yKSsicHg7IisodGhpcy5vcHRpb25zLnRodW1ic2hvd2Rlc2NyaXB0aW9uPyIiOiJsaW5lLWhlaWdodDoiK1N0cmluZyh0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQtMikrInB4OyIpKyJ9IixkKz0iIC5odG1sNWdhbGxlcnktdG4tdGl0bGUtIit0aGlzLmlkK3RoaXMub3B0aW9ucy50aHVtYnRpdGxlY3NzLGQrPSIgLmh0bWw1Z2FsbGVyeS10bi1kZXNjcmlwdGlvbi0iK3RoaXMuaWQrdGhpcy5vcHRpb25zLnRodW1iZGVzY3JpcHRpb25jc3MpOihkKz0iIC5odG1sNWdhbGxlcnktdG4tdGl0bGUtIit0aGlzLmlkKyIge2Rpc3BsYXk6bm9uZTt9IixkKz0iIC5odG1sNWdhbGxlcnktdG4tZGVzY3JpcHRpb24tIisKdGhpcy5pZCsiIHtkaXNwbGF5Om5vbmU7fSIpLHRoaXMuY2Fyb3VzZWxIaWdobGlnaHQ9ZnVuY3Rpb24oYSl7YigiI2h0bWw1Z2FsbGVyeS10bi0iK3RoaXMuaWQrIi0iK2EsdGhpcy4kZ2FsbGVyeSkucmVtb3ZlQ2xhc3MoImh0bWw1Z2FsbGVyeS10bi0iK3RoaXMuaWQpLmFkZENsYXNzKCJodG1sNWdhbGxlcnktdG4tc2VsZWN0ZWQtIit0aGlzLmlkKTtpZighKHRoaXMub3B0aW9ucy50aHVtYlNob3dOdW0+PXRoaXMuZWxlbUFycmF5Lmxlbmd0aCkpe2E9TWF0aC5mbG9vcihhL3RoaXMub3B0aW9ucy50aHVtYlNob3dOdW0pKnRoaXMub3B0aW9ucy50aHVtYlNob3dOdW0qKHRoaXMub3B0aW9ucy50aHVtYmhlaWdodCt0aGlzLm9wdGlvbnMudGh1bWJnYXApO2E+PXRoaXMub3B0aW9ucy50aHVtYlRvdGFsSGVpZ2h0LXRoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQmJihhPXRoaXMub3B0aW9ucy50aHVtYlRvdGFsSGVpZ2h0LXRoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQpO3ZhciBjPQphLyh0aGlzLmVsZW1BcnJheS5sZW5ndGgqKHRoaXMub3B0aW9ucy50aHVtYmhlaWdodCt0aGlzLm9wdGlvbnMudGh1bWJnYXApLXRoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQpLGM9YyoodGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyTWF4LXRoaXMub3B0aW9ucy5jYXJvdXNlbFNsaWRlck1pbik7YigiLmh0bWw1Z2FsbGVyeS1jYXItc2xpZGVyLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5zdG9wKCEwKS5hbmltYXRlKHt0b3A6Y30sMzAwKTtiKCIuaHRtbDVnYWxsZXJ5LXRodW1icy0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuc3RvcCghMCkuYW5pbWF0ZSh7bWFyZ2luVG9wOi0xKmF9LDMwMCk7dGhpcy51cGRhdGVDYXJvdXNlQnV0dG9ucygtYSl9fSx0aGlzLmNhcm91c2VsQmFyQ2xpY2tlZD1mdW5jdGlvbihhKXt2YXIgYz1iKCIuaHRtbDVnYWxsZXJ5LXRodW1icy0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSk7YS5wYWdlWT5iKCIuaHRtbDVnYWxsZXJ5LWNhci1zbGlkZXItIisKdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5vZmZzZXQoKS50b3A/KGE9LTEqcGFyc2VJbnQoYy5jc3MoIm1hcmdpbi10b3AiKSkrdGhpcy5vcHRpb25zLnRodW1iU2hvd051bSoodGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0K3RoaXMub3B0aW9ucy50aHVtYmdhcCksYT49dGhpcy5vcHRpb25zLnRodW1iVG90YWxIZWlnaHQtdGhpcy5vcHRpb25zLnRodW1iTWFza0hlaWdodCYmKGE9dGhpcy5vcHRpb25zLnRodW1iVG90YWxIZWlnaHQtdGhpcy5vcHRpb25zLnRodW1iTWFza0hlaWdodCkpOihhPS0xKnBhcnNlSW50KGMuY3NzKCJtYXJnaW4tdG9wIikpLXRoaXMub3B0aW9ucy50aHVtYlNob3dOdW0qKHRoaXMub3B0aW9ucy50aHVtYmhlaWdodCt0aGlzLm9wdGlvbnMudGh1bWJnYXApLDA+YSYmKGE9MCkpO2Muc3RvcCghMCkuYW5pbWF0ZSh7bWFyZ2luVG9wOi1hfSw1MDApO3RoaXMudXBkYXRlQ2Fyb3VzZUJ1dHRvbnMoLWEpO2E9YSoodGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyTWF4LQp0aGlzLm9wdGlvbnMuY2Fyb3VzZWxTbGlkZXJNaW4pLyh0aGlzLmVsZW1BcnJheS5sZW5ndGgqKHRoaXMub3B0aW9ucy50aHVtYmhlaWdodCt0aGlzLm9wdGlvbnMudGh1bWJnYXApLXRoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQpO2E8dGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyTWluJiYoYT10aGlzLm9wdGlvbnMuY2Fyb3VzZWxTbGlkZXJNaW4pO2E+dGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyTWF4JiYoYT10aGlzLm9wdGlvbnMuY2Fyb3VzZWxTbGlkZXJNYXgpO2IoIi5odG1sNWdhbGxlcnktY2FyLXNsaWRlci0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuc3RvcCghMCkuYW5pbWF0ZSh7dG9wOmF9LDUwMCl9LHRoaXMuY2Fyb3VzZWxTbGlkZXJEcmFnPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9Yy5vZmZzZXRZLWIoIi5odG1sNWdhbGxlcnktY2FyLXNsaWRlci1iYXItIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLm9mZnNldCgpLnRvcDtkPHRoaXMub3B0aW9ucy5jYXJvdXNlbFNsaWRlck1pbiYmCihkPXRoaXMub3B0aW9ucy5jYXJvdXNlbFNsaWRlck1pbik7ZD50aGlzLm9wdGlvbnMuY2Fyb3VzZWxTbGlkZXJNYXgmJihkPXRoaXMub3B0aW9ucy5jYXJvdXNlbFNsaWRlck1heCk7YigiLmh0bWw1Z2FsbGVyeS1jYXItc2xpZGVyLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5jc3Moe3RvcDpkfSk7dmFyIGU9dGhpcy5lbGVtQXJyYXkubGVuZ3RoKih0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrdGhpcy5vcHRpb25zLnRodW1iZ2FwKS10aGlzLm9wdGlvbnMudGh1bWJNYXNrSGVpZ2h0LGU9ZSpkLyh0aGlzLm9wdGlvbnMuY2Fyb3VzZWxTbGlkZXJNYXgtdGhpcy5vcHRpb25zLmNhcm91c2VsU2xpZGVyTWluKSxlPU1hdGgucm91bmQoZS8odGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0K3RoaXMub3B0aW9ucy50aHVtYmdhcCkpLGU9LTEqZSoodGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0K3RoaXMub3B0aW9ucy50aHVtYmdhcCk7YigiLmh0bWw1Z2FsbGVyeS10aHVtYnMtIit0aGlzLmlkLAp0aGlzLiRnYWxsZXJ5KS5zdG9wKCEwKS5hbmltYXRlKHttYXJnaW5Ub3A6ZX0sMzAwKX0sdGhpcy5jYXJvdXNlbFByZXY9ZnVuY3Rpb24oKXt2YXIgYT1iKCIuaHRtbDVnYWxsZXJ5LXRodW1icy0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSk7aWYoMCE9cGFyc2VJbnQoYS5jc3MoIm1hcmdpbi10b3AiKSkpe3ZhciBjPS0xKnBhcnNlSW50KGEuY3NzKCJtYXJnaW4tdG9wIikpLXRoaXMub3B0aW9ucy50aHVtYlNob3dOdW0qKHRoaXMub3B0aW9ucy50aHVtYmhlaWdodCt0aGlzLm9wdGlvbnMudGh1bWJnYXApOzA+YyYmKGM9MCk7YS5hbmltYXRlKHttYXJnaW5Ub3A6LWN9LDUwMCx0aGlzLm9wdGlvbnMuY2Fyb3VzZWxlYXNpbmcpO3RoaXMudXBkYXRlQ2Fyb3VzZUJ1dHRvbnMoLWMpfX0sdGhpcy5jYXJvdXNlbE5leHQ9ZnVuY3Rpb24oKXt2YXIgYT1iKCIuaHRtbDVnYWxsZXJ5LXRodW1icy0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSk7aWYocGFyc2VJbnQoYS5jc3MoIm1hcmdpbi10b3AiKSkhPQotKHRoaXMub3B0aW9ucy50aHVtYlRvdGFsSGVpZ2h0LXRoaXMub3B0aW9ucy50aHVtYk1hc2tIZWlnaHQpKXt2YXIgYz0tMSpwYXJzZUludChhLmNzcygibWFyZ2luLXRvcCIpKSt0aGlzLm9wdGlvbnMudGh1bWJTaG93TnVtKih0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrdGhpcy5vcHRpb25zLnRodW1iZ2FwKTtjPj10aGlzLm9wdGlvbnMudGh1bWJUb3RhbEhlaWdodC10aGlzLm9wdGlvbnMudGh1bWJNYXNrSGVpZ2h0JiYoYz10aGlzLm9wdGlvbnMudGh1bWJUb3RhbEhlaWdodC10aGlzLm9wdGlvbnMudGh1bWJNYXNrSGVpZ2h0KTthLmFuaW1hdGUoe21hcmdpblRvcDotY30sNTAwLHRoaXMub3B0aW9ucy5jYXJvdXNlbGVhc2luZyk7dGhpcy51cGRhdGVDYXJvdXNlQnV0dG9ucygtYyl9fSx0aGlzLnVwZGF0ZUNhcm91c2VCdXR0b25zPWZ1bmN0aW9uKGEpe3ZhciBjPWIoIi5odG1sNWdhbGxlcnktY2FyLWxlZnQtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLGQ9YigiLmh0bWw1Z2FsbGVyeS1jYXItcmlnaHQtIisKdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KSxlPS0xKih0aGlzLm9wdGlvbnMudGh1bWJUb3RhbEhlaWdodC10aGlzLm9wdGlvbnMudGh1bWJNYXNrSGVpZ2h0KTswPT1hPyhjLmNzcyh7ImJhY2tncm91bmQtcG9zaXRpb24iOiItIitTdHJpbmcoMip0aGlzLm9wdGlvbnMuY2Fyb3VzZWxhcnJvd3dpZHRoKSsicHggMHB4IixjdXJzb3I6IiJ9KSxjLmRhdGEoImRpc2FibGVkIiwhMCkpOmMuZGF0YSgiZGlzYWJsZWQiKSYmKGMuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6IjBweCAwcHgiLGN1cnNvcjoicG9pbnRlciJ9KSxjLmRhdGEoImRpc2FibGVkIiwhMSkpO2E9PWU/KGQuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6Ii0iK1N0cmluZygyKnRoaXMub3B0aW9ucy5jYXJvdXNlbGFycm93d2lkdGgpKyJweCAwcHgiLGN1cnNvcjoiIn0pLGQuZGF0YSgiZGlzYWJsZWQiLCEwKSk6ZC5kYXRhKCJkaXNhYmxlZCIpJiYoZC5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoiMHB4IDBweCIsCmN1cnNvcjoicG9pbnRlciJ9KSxkLmRhdGEoImRpc2FibGVkIiwhMSkpfSk6ZCs9IiAuaHRtbDVnYWxsZXJ5LWNhci0iK3RoaXMuaWQrIiB7IGRpc3BsYXk6bm9uZTsgfSI7ZCs9Ii5odG1sNWdhbGxlcnktY29udGFpbmVyLSIrdGhpcy5pZCsiIGRpdiB7Ym94LXNpemluZzpjb250ZW50LWJveDt9IjtiKCJoZWFkIikuYXBwZW5kKCI8c3R5bGUgdHlwZT0ndGV4dC9jc3MnIGRhdGEtY3JlYXRvcj0naHRtbDVnYWxsZXJ5Jz4iK2QrIjwvc3R5bGU+Iil9LHJlc2l6ZUltYWdlVG9vbGJveDpmdW5jdGlvbigpe2lmKCJjZW50ZXIiIT10aGlzLm9wdGlvbnMuaW1hZ2V0b29sYm94c3R5bGUpe3ZhciBhPU1hdGgucm91bmQoKCJib3R0b20iPT10aGlzLm9wdGlvbnMuaGVhZGVycG9zfHwiYm90dG9tb3V0c2lkZSI9PXRoaXMub3B0aW9ucy5oZWFkZXJwb3M/MDp0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0KSt0aGlzLm9wdGlvbnMuaGVpZ2h0LzItMjQpLGM9YStNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5oZWlnaHQvCjIpLTMyLGQ9dGhpcy5vcHRpb25zLmJveFdpZHRoLTQ4LGU9dGhpcy5vcHRpb25zLnNob3dmdWxsc2NyZWVuYnV0dG9uP2QtNDg6ZDtiKCIuaHRtbDVnYWxsZXJ5LXBsYXktIit0aGlzLmlkKS5jc3Moe3RvcDpjKyJweCIsbGVmdDplKyJweCJ9KTtiKCIuaHRtbDVnYWxsZXJ5LXBhdXNlLSIrdGhpcy5pZCkuY3NzKHt0b3A6YysicHgiLGxlZnQ6ZSsicHgifSk7YigiLmh0bWw1Z2FsbGVyeS1sZWZ0LSIrdGhpcy5pZCkuY3NzKHt0b3A6YSsicHgifSk7YigiLmh0bWw1Z2FsbGVyeS1yaWdodC0iK3RoaXMuaWQpLmNzcyh7dG9wOmErInB4IixsZWZ0OmQrInB4In0pO2IoIi5odG1sNWdhbGxlcnktbGlnaHRib3gtIit0aGlzLmlkKS5jc3Moe3RvcDpjKyJweCIsbGVmdDpkKyJweCJ9KX19LGNyZWF0ZUltYWdlVG9vbGJveDpmdW5jdGlvbigpezE+PXRoaXMuZWxlbUFycmF5Lmxlbmd0aCYmKHRoaXMub3B0aW9ucy5zaG93cGxheWJ1dHRvbj10aGlzLm9wdGlvbnMuc2hvd3ByZXZidXR0b249dGhpcy5vcHRpb25zLnNob3duZXh0YnV0dG9uPQohMSk7aWYoIm5ldmVyIiE9dGhpcy5vcHRpb25zLnNob3dpbWFnZXRvb2xib3gpe3ZhciBhO2lmKCJjZW50ZXIiPT10aGlzLm9wdGlvbnMuaW1hZ2V0b29sYm94c3R5bGUpYT0iIC5odG1sNWdhbGxlcnktdG9vbGJveC0iK3RoaXMuaWQrIiB7ZGlzcGxheToiKygic2hvdyI9PXRoaXMub3B0aW9ucy5pbWFnZXRvb2xib3htb2RlPyJibG9jayI6Im5vbmUiKSsiOyBvdmVyZmxvdzpoaWRkZW47IHBvc2l0aW9uOnJlbGF0aXZlOyBtYXJnaW46MHB4IGF1dG87IHRleHQtYWxpZ246Y2VudGVyOyBoZWlnaHQ6NDBweDt9IixhKz0iIC5odG1sNWdhbGxlcnktdG9vbGJveC1iZy0iK3RoaXMuaWQrIiB7ZGlzcGxheTpibG9jazsgbGVmdDowcHg7IHRvcDowcHg7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOyBwb3NpdGlvbjphYnNvbHV0ZTsgZmlsdGVyOmFscGhhKG9wYWNpdHk9NjApOyBvcGFjaXR5OjAuNjsgYmFja2dyb3VuZC1jb2xvcjojMjIyMjIyOyB9IixhKz0iIC5odG1sNWdhbGxlcnktdG9vbGJveC1idXR0b25zLSIrCnRoaXMuaWQrIiB7ZGlzcGxheTpibG9jazsgbWFyZ2luOjBweCBhdXRvOyBoZWlnaHQ6MTAwJTt9IixhKz0iIC5odG1sNWdhbGxlcnktcGxheS0iK3RoaXMuaWQrIiB7IHBvc2l0aW9uOnJlbGF0aXZlOyBmbG9hdDpsZWZ0OyBkaXNwbGF5OiIrKCJzaG93Ij09dGhpcy5vcHRpb25zLmltYWdldG9vbGJveG1vZGU/ImJsb2NrIjoibm9uZSIpKyI7IGN1cnNvcjpwb2ludGVyOyBvdmVyZmxvdzpoaWRkZW47IHdpZHRoOjMycHg7IGhlaWdodDozMnB4OyBtYXJnaW4tbGVmdDoycHg7IG1hcmdpbi1yaWdodDoycHg7IG1hcmdpbi10b3A6IitNYXRoLnJvdW5kKDQpKyJweDsgYmFja2dyb3VuZDp1cmwoJyIrdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrInBsYXkucG5nJykgbm8tcmVwZWF0IHRvcCBsZWZ0OyB9ICIsYSs9IiAuaHRtbDVnYWxsZXJ5LXBhdXNlLSIrdGhpcy5pZCsiIHsgcG9zaXRpb246cmVsYXRpdmU7IGZsb2F0OmxlZnQ7IGRpc3BsYXk6IisoInNob3ciPT10aGlzLm9wdGlvbnMuaW1hZ2V0b29sYm94bW9kZT8KImJsb2NrIjoibm9uZSIpKyI7IGN1cnNvcjpwb2ludGVyOyBvdmVyZmxvdzpoaWRkZW47IHdpZHRoOjMycHg7IGhlaWdodDozMnB4OyBtYXJnaW4tbGVmdDoycHg7IG1hcmdpbi1yaWdodDoycHg7IG1hcmdpbi10b3A6IitNYXRoLnJvdW5kKDQpKyJweDsgYmFja2dyb3VuZDp1cmwoJyIrdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrInBhdXNlLnBuZycpIG5vLXJlcGVhdCB0b3AgbGVmdDsgfSAiLGErPSIgLmh0bWw1Z2FsbGVyeS1sZWZ0LSIrdGhpcy5pZCsiIHsgcG9zaXRpb246cmVsYXRpdmU7IGZsb2F0OmxlZnQ7IGRpc3BsYXk6IisoInNob3ciPT10aGlzLm9wdGlvbnMuaW1hZ2V0b29sYm94bW9kZT8iYmxvY2siOiJub25lIikrIjsgY3Vyc29yOnBvaW50ZXI7IG92ZXJmbG93OmhpZGRlbjsgd2lkdGg6MzJweDsgaGVpZ2h0OjMycHg7IG1hcmdpbi1sZWZ0OjJweDsgbWFyZ2luLXJpZ2h0OjJweDsgbWFyZ2luLXRvcDoiK01hdGgucm91bmQoNCkrInB4OyBiYWNrZ3JvdW5kOnVybCgnIisKdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrInByZXYucG5nJykgbm8tcmVwZWF0IHRvcCBsZWZ0OyB9ICIsYSs9IiAuaHRtbDVnYWxsZXJ5LXJpZ2h0LSIrdGhpcy5pZCsiIHsgcG9zaXRpb246cmVsYXRpdmU7IGZsb2F0OmxlZnQ7IGRpc3BsYXk6IisoInNob3ciPT10aGlzLm9wdGlvbnMuaW1hZ2V0b29sYm94bW9kZT8iYmxvY2siOiJub25lIikrIjsgY3Vyc29yOnBvaW50ZXI7IG92ZXJmbG93OmhpZGRlbjsgd2lkdGg6MzJweDsgaGVpZ2h0OjMycHg7IG1hcmdpbi1sZWZ0OjJweDsgbWFyZ2luLXJpZ2h0OjJweDsgbWFyZ2luLXRvcDoiK01hdGgucm91bmQoNCkrInB4OyBiYWNrZ3JvdW5kOnVybCgnIit0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcisibmV4dC5wbmcnKSBuby1yZXBlYXQgdG9wIGxlZnQ7IH0gIixhKz0iIC5odG1sNWdhbGxlcnktbGlnaHRib3gtIit0aGlzLmlkKyIge3Bvc2l0aW9uOnJlbGF0aXZlOyBmbG9hdDpsZWZ0OyBkaXNwbGF5OiIrKCJzaG93Ij09dGhpcy5vcHRpb25zLmltYWdldG9vbGJveG1vZGU/CiJibG9jayI6Im5vbmUiKSsiOyBjdXJzb3I6cG9pbnRlcjsgb3ZlcmZsb3c6aGlkZGVuOyB3aWR0aDozMnB4OyBoZWlnaHQ6MzJweDsgbWFyZ2luLWxlZnQ6MnB4OyBtYXJnaW4tcmlnaHQ6MnB4OyBtYXJnaW4tdG9wOiIrTWF0aC5yb3VuZCg0KSsicHg7IGJhY2tncm91bmQ6dXJsKCciK3RoaXMub3B0aW9ucy5za2luZm9sZGVyKyJsaWdodGJveC5wbmcnKSBuby1yZXBlYXQgdG9wIGxlZnQ7IH0gIjtlbHNle3ZhciBjPU1hdGgucm91bmQoKCJib3R0b20iPT10aGlzLm9wdGlvbnMuaGVhZGVycG9zPzA6dGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCkrdGhpcy5vcHRpb25zLmhlaWdodC8yLTI0KSxkPWMrTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuaGVpZ2h0LzIpLTMyLGU9dGhpcy5vcHRpb25zLndpZHRoLTU0LGY9dGhpcy5vcHRpb25zLnNob3dmdWxsc2NyZWVuYnV0dG9uP2UtNDg6ZTthPSIgLmh0bWw1Z2FsbGVyeS10b29sYm94LSIrdGhpcy5pZCsiIHtkaXNwbGF5OiIrKCJzaG93Ij09CnRoaXMub3B0aW9ucy5pbWFnZXRvb2xib3htb2RlPyJibG9jayI6Im5vbmUiKSsiO30iO2ErPSIgLmh0bWw1Z2FsbGVyeS10b29sYm94LWJnLSIrdGhpcy5pZCsiIHtkaXNwbGF5Om5vbmU7fSI7YSs9IiAuaHRtbDVnYWxsZXJ5LXRvb2xib3gtYnV0dG9ucy0iK3RoaXMuaWQrIiB7ZGlzcGxheTpibG9jazt9IjthKz0iIC5odG1sNWdhbGxlcnktcGxheS0iK3RoaXMuaWQrIiB7IHBvc2l0aW9uOmFic29sdXRlOyBkaXNwbGF5OiIrKCJzaG93Ij09dGhpcy5vcHRpb25zLmltYWdldG9vbGJveG1vZGU/ImJsb2NrIjoibm9uZSIpKyI7IGN1cnNvcjpwb2ludGVyOyB0b3A6IitkKyJweDsgbGVmdDoiK2YrInB4OyB3aWR0aDo0OHB4OyBoZWlnaHQ6NDhweDsgYmFja2dyb3VuZDp1cmwoJyIrdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrInNpZGVfcGxheS5wbmcnKSBuby1yZXBlYXQgdG9wIGxlZnQ7fSAiO2ErPSIgLmh0bWw1Z2FsbGVyeS1wYXVzZS0iK3RoaXMuaWQrIiB7IHBvc2l0aW9uOmFic29sdXRlOyBkaXNwbGF5OiIrCigic2hvdyI9PXRoaXMub3B0aW9ucy5pbWFnZXRvb2xib3htb2RlPyJibG9jayI6Im5vbmUiKSsiOyBjdXJzb3I6cG9pbnRlcjsgdG9wOiIrZCsicHg7IGxlZnQ6IitmKyJweDsgd2lkdGg6NDhweDsgaGVpZ2h0OjQ4cHg7IGJhY2tncm91bmQ6dXJsKCciK3RoaXMub3B0aW9ucy5za2luZm9sZGVyKyJzaWRlX3BhdXNlLnBuZycpIG5vLXJlcGVhdCB0b3AgbGVmdDt9ICI7YSs9IiAuaHRtbDVnYWxsZXJ5LWxlZnQtIit0aGlzLmlkKyIgeyBwb3NpdGlvbjphYnNvbHV0ZTsgZGlzcGxheToiKygic2hvdyI9PXRoaXMub3B0aW9ucy5pbWFnZXRvb2xib3htb2RlPyJibG9jayI6Im5vbmUiKSsiOyBjdXJzb3I6cG9pbnRlcjsgdG9wOiIrYysicHg7IGxlZnQ6MHB4OyB3aWR0aDo0OHB4OyBoZWlnaHQ6NDhweDsgYmFja2dyb3VuZDp1cmwoJyIrdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrInNpZGVfcHJldi5wbmcnKSBuby1yZXBlYXQgY2VudGVyIGNlbnRlcjt9ICI7YSs9IiAuaHRtbDVnYWxsZXJ5LXJpZ2h0LSIrCnRoaXMuaWQrIiB7IHBvc2l0aW9uOmFic29sdXRlOyBkaXNwbGF5OiIrKCJzaG93Ij09dGhpcy5vcHRpb25zLmltYWdldG9vbGJveG1vZGU/ImJsb2NrIjoibm9uZSIpKyI7IGN1cnNvcjpwb2ludGVyOyB0b3A6IitjKyJweDsgbGVmdDoiK2UrInB4OyB3aWR0aDo0OHB4OyBoZWlnaHQ6NDhweDsgYmFja2dyb3VuZDp1cmwoJyIrdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrInNpZGVfbmV4dC5wbmcnKSAgbm8tcmVwZWF0IGNlbnRlciBjZW50ZXI7fSAiO2ErPSIgLmh0bWw1Z2FsbGVyeS1saWdodGJveC0iK3RoaXMuaWQrIiB7cG9zaXRpb246YWJzb2x1dGU7IGRpc3BsYXk6IisoInNob3ciPT10aGlzLm9wdGlvbnMuaW1hZ2V0b29sYm94bW9kZT8iYmxvY2siOiJub25lIikrIjsgY3Vyc29yOnBvaW50ZXI7IHRvcDoiK2QrInB4OyBsZWZ0OiIrZSsicHg7IHdpZHRoOjQ4cHg7IGhlaWdodDo0OHB4OyBiYWNrZ3JvdW5kOnVybCgnIit0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcisic2lkZV9saWdodGJveC5wbmcnKSBuby1yZXBlYXQgdG9wIGxlZnQ7fSAifWIoIi5odG1sNWdhbGxlcnktcGxheS0iKwp0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmhvdmVyKGZ1bmN0aW9uKCl7Yih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoicmlnaHQgdG9wIn0pfSxmdW5jdGlvbigpe2IodGhpcykuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6ImxlZnQgdG9wIn0pfSk7YigiLmh0bWw1Z2FsbGVyeS1wYXVzZS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuaG92ZXIoZnVuY3Rpb24oKXtiKHRoaXMpLmNzcyh7ImJhY2tncm91bmQtcG9zaXRpb24iOiJyaWdodCB0b3AifSl9LGZ1bmN0aW9uKCl7Yih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoibGVmdCB0b3AifSl9KTtiKCIuaHRtbDVnYWxsZXJ5LWxlZnQtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmhvdmVyKGZ1bmN0aW9uKCl7Yih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoicmlnaHQgdG9wIn0pfSxmdW5jdGlvbigpe2IodGhpcykuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6ImxlZnQgdG9wIn0pfSk7CmIoIi5odG1sNWdhbGxlcnktcmlnaHQtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmhvdmVyKGZ1bmN0aW9uKCl7Yih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoicmlnaHQgdG9wIn0pfSxmdW5jdGlvbigpe2IodGhpcykuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6ImxlZnQgdG9wIn0pfSk7YigiLmh0bWw1Z2FsbGVyeS1saWdodGJveC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuaG92ZXIoZnVuY3Rpb24oKXtiKHRoaXMpLmNzcyh7ImJhY2tncm91bmQtcG9zaXRpb24iOiJyaWdodCB0b3AifSl9LGZ1bmN0aW9uKCl7Yih0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoibGVmdCB0b3AifSl9KTtiKCJoZWFkIikuYXBwZW5kKCI8c3R5bGUgdHlwZT0ndGV4dC9jc3MnIGRhdGEtY3JlYXRvcj0naHRtbDVnYWxsZXJ5Jz4iK2ErIjwvc3R5bGU+Iil9dGhpcy5zaG93aW1hZ2V0b29sYm94PWZ1bmN0aW9uKGEsYyl7aWYodGhpcy5vcHRpb25zLnNob3dwbGF5YnV0dG9ufHwKdGhpcy5vcHRpb25zLnNob3dwcmV2YnV0dG9ufHx0aGlzLm9wdGlvbnMuc2hvd25leHRidXR0b258fHRoaXMub3B0aW9ucy5zaG93ZnVsbHNjcmVlbmJ1dHRvbil7dmFyIGQ9dGhpcztjbGVhclRpbWVvdXQoZC5oaWRlVG9vbGJveFRpbWVvdXQpO2QuaGlkZVRvb2xib3hUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmhpZGVpbWFnZXRvb2xib3goKX0sM0UzKTtpZigiY2VudGVyIj09dGhpcy5vcHRpb25zLmltYWdldG9vbGJveHN0eWxlKXt2YXIgZT1NYXRoLnJvdW5kKCgiYm90dG9tIj09dGhpcy5vcHRpb25zLmhlYWRlcnBvcz8wOnRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQpK3RoaXMub3B0aW9ucy5oZWlnaHQvMik7aWYoNj09YXx8Nz09YXx8OD09YXx8OT09YXx8MTA9PWF8fDExPT1hKWUrPTQ1O2IoIi5odG1sNWdhbGxlcnktdG9vbGJveC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY3NzKHt0b3A6ZX0pO2U9MDt0aGlzLm9wdGlvbnMuc2hvd3BsYXlidXR0b24mJigxPT0KYXx8dGhpcy5vcHRpb25zLnNob3dwbGF5cGF1c2VmdWxsc2NyZWVuZm9yYWxsJiYoIXRoaXMub3B0aW9ucy5oaWRlcGxheXBhdXNlZnVsbHNjcmVlbndoZW52aWRlb2lzcGxheWluZ3x8IXRoaXMuaXNWaWRlb1BsYXlpbmcpKT8oZSs9MzYsdGhpcy5pc1BhdXNlZD8oYigiLmh0bWw1Z2FsbGVyeS1wbGF5LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5zaG93KCksYigiLmh0bWw1Z2FsbGVyeS1wYXVzZS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuaGlkZSgpKTooYigiLmh0bWw1Z2FsbGVyeS1wbGF5LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5oaWRlKCksYigiLmh0bWw1Z2FsbGVyeS1wYXVzZS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuc2hvdygpKSk6KGIoIi5odG1sNWdhbGxlcnktcGxheS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuaGlkZSgpLGIoIi5odG1sNWdhbGxlcnktcGF1c2UtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmhpZGUoKSk7dGhpcy5vcHRpb25zLnNob3dwcmV2YnV0dG9uPwooZSs9MzYsYigiLmh0bWw1Z2FsbGVyeS1sZWZ0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5zaG93KCkpOmIoIi5odG1sNWdhbGxlcnktbGVmdC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuaGlkZSgpO3RoaXMub3B0aW9ucy5zaG93bmV4dGJ1dHRvbj8oZSs9MzYsYigiLmh0bWw1Z2FsbGVyeS1yaWdodC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuc2hvdygpKTpiKCIuaHRtbDVnYWxsZXJ5LXJpZ2h0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5oaWRlKCk7dGhpcy5vcHRpb25zLnNob3dmdWxsc2NyZWVuYnV0dG9uJiYoMT09YXx8dGhpcy5vcHRpb25zLnNob3dwbGF5cGF1c2VmdWxsc2NyZWVuZm9yYWxsJiYoIXRoaXMub3B0aW9ucy5oaWRlcGxheXBhdXNlZnVsbHNjcmVlbndoZW52aWRlb2lzcGxheWluZ3x8IXRoaXMuaXNWaWRlb1BsYXlpbmcpKT8oZSs9MzYsYigiLmh0bWw1Z2FsbGVyeS1saWdodGJveC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuc2hvdygpKTpiKCIuaHRtbDVnYWxsZXJ5LWxpZ2h0Ym94LSIrCnRoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuaGlkZSgpO2IoIi5odG1sNWdhbGxlcnktdG9vbGJveC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY3NzKHt3aWR0aDplKzE2fSk7YigiLmh0bWw1Z2FsbGVyeS10b29sYm94LWJ1dHRvbnMtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmNzcyh7d2lkdGg6ZX0pfWVsc2UgdGhpcy5vcHRpb25zLnNob3dwbGF5YnV0dG9uJiYoMT09YXx8dGhpcy5vcHRpb25zLnNob3dwbGF5cGF1c2VmdWxsc2NyZWVuZm9yYWxsJiYoIXRoaXMub3B0aW9ucy5oaWRlcGxheXBhdXNlZnVsbHNjcmVlbndoZW52aWRlb2lzcGxheWluZ3x8IXRoaXMuaXNWaWRlb1BsYXlpbmcpKT90aGlzLmlzUGF1c2VkPyhiKCIuaHRtbDVnYWxsZXJ5LXBsYXktIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLnNob3coKSxiKCIuaHRtbDVnYWxsZXJ5LXBhdXNlLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5oaWRlKCkpOihiKCIuaHRtbDVnYWxsZXJ5LXBsYXktIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmhpZGUoKSwKYigiLmh0bWw1Z2FsbGVyeS1wYXVzZS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuc2hvdygpKTooYigiLmh0bWw1Z2FsbGVyeS1wbGF5LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5oaWRlKCksYigiLmh0bWw1Z2FsbGVyeS1wYXVzZS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuaGlkZSgpKSx0aGlzLm9wdGlvbnMuc2hvd3ByZXZidXR0b24/YigiLmh0bWw1Z2FsbGVyeS1sZWZ0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5zaG93KCk6YigiLmh0bWw1Z2FsbGVyeS1sZWZ0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5oaWRlKCksdGhpcy5vcHRpb25zLnNob3duZXh0YnV0dG9uP2IoIi5odG1sNWdhbGxlcnktcmlnaHQtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLnNob3coKTpiKCIuaHRtbDVnYWxsZXJ5LXJpZ2h0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5oaWRlKCksdGhpcy5vcHRpb25zLnNob3dmdWxsc2NyZWVuYnV0dG9uJiYoMT09YXx8dGhpcy5vcHRpb25zLnNob3dwbGF5cGF1c2VmdWxsc2NyZWVuZm9yYWxsJiYKKCF0aGlzLm9wdGlvbnMuaGlkZXBsYXlwYXVzZWZ1bGxzY3JlZW53aGVudmlkZW9pc3BsYXlpbmd8fCF0aGlzLmlzVmlkZW9QbGF5aW5nKSk/YigiLmh0bWw1Z2FsbGVyeS1saWdodGJveC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuc2hvdygpOmIoIi5odG1sNWdhbGxlcnktbGlnaHRib3gtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmhpZGUoKTt0aGlzLm9wdGlvbnMuaXNJRTY3OHx8Yz9iKCIuaHRtbDVnYWxsZXJ5LXRvb2xib3gtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLnNob3coKTpiKCIuaHRtbDVnYWxsZXJ5LXRvb2xib3gtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmZhZGVJbigpfX07dGhpcy5oaWRlaW1hZ2V0b29sYm94PWZ1bmN0aW9uKCl7InNob3ciIT10aGlzLm9wdGlvbnMuaW1hZ2V0b29sYm94bW9kZSYmKGNsZWFyVGltZW91dCh0aGlzLmhpZGVUb29sYm94VGltZW91dCksdGhpcy5vcHRpb25zLmlzSUU2Nzg/YigiLmh0bWw1Z2FsbGVyeS10b29sYm94LSIrdGhpcy5pZCwKdGhpcy4kZ2FsbGVyeSkuaGlkZSgpOmIoIi5odG1sNWdhbGxlcnktdG9vbGJveC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuZmFkZU91dCgpKX19LHJlc2l6ZVN0eWxlRGVmYXVsdDpmdW5jdGlvbigpe2lmKHRoaXMuY29udGFpbmVyLnBhcmVudCgpJiZ0aGlzLmNvbnRhaW5lci5wYXJlbnQoKS53aWR0aCgpKXt0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGg9dGhpcy5jb250YWluZXIucGFyZW50KCkud2lkdGgoKTt0aGlzLm9wdGlvbnMudG90YWxXaWR0aD10aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGg7dGhpcy5vcHRpb25zLndpZHRoPXRoaXMub3B0aW9ucy50b3RhbFdpZHRoLTIqdGhpcy5vcHRpb25zLnBhZGRpbmc7aWYodGhpcy5vcHRpb25zLnRpdGxlc21hbGxzY3JlZW4pe3ZhciBhPWIod2luZG93KS53aWR0aCgpO3RoaXMub3B0aW9ucy50aXRsZWhlaWdodD1hPHRoaXMub3B0aW9ucy50aXRsZXNtYWxsc2NyZWVud2lkdGg/dGhpcy5vcHRpb25zLnRpdGxlaGVpZ2h0c21hbGxzY3JlZW46CnRoaXMub3B0aW9ucy50aXRsZWhlaWdodGxhcmdlc2NyZWVuO3RoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQ9dGhpcy5vcHRpb25zLnRpdGxlb3ZlcmxheT90aGlzLm9wdGlvbnMuc29jaWFsaGVpZ2h0OnRoaXMub3B0aW9ucy50aXRsZWhlaWdodCt0aGlzLm9wdGlvbnMuc29jaWFsaGVpZ2h0fXRoaXMub3B0aW9ucy5zaG93Y2Fyb3VzZWwmJih0aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQ9dGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0KzIqdGhpcy5vcHRpb25zLnRodW1ibWFyZ2luLHRoaXMub3B0aW9ucy5jYXJvdXNlbG11bHRpcm93cz8oInNhbWVjb2x1bW4iPT10aGlzLm9wdGlvbnMudGh1bWJyZXNwb25zaXZlPyh0aGlzLm9wdGlvbnMuY2Fyb3VzZWxjb2x1bW49dGhpcy5vcHRpb25zLnRodW1iY29sdW1ucyx0aGlzLm9wdGlvbnMudGh1bWJjb2x1bW5zcmVzcG9uc2l2ZSYmKGE9Yih3aW5kb3cpLndpZHRoKCksYTx0aGlzLm9wdGlvbnMudGh1bWJzbWFsbHNpemU/dGhpcy5vcHRpb25zLmNhcm91c2VsY29sdW1uPQp0aGlzLm9wdGlvbnMudGh1bWJzbWFsbGNvbHVtbnM6YTx0aGlzLm9wdGlvbnMudGh1bWJtZWRpdW1zaXplJiYodGhpcy5vcHRpb25zLmNhcm91c2VsY29sdW1uPXRoaXMub3B0aW9ucy50aHVtYm1lZGl1bWNvbHVtbnMpKSx0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aD1NYXRoLm1pbigodGhpcy5vcHRpb25zLndpZHRoLXRoaXMub3B0aW9ucy50aHVtYmdhcCoodGhpcy5vcHRpb25zLmNhcm91c2VsY29sdW1uLTEpKS90aGlzLm9wdGlvbnMuY2Fyb3VzZWxjb2x1bW4pLHRoaXMub3B0aW9ucy50aHVtYmhlaWdodD10aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCp0aGlzLm9wdGlvbnMudGh1bWJvcmlnaW5hbGhlaWdodC90aGlzLm9wdGlvbnMudGh1bWJvcmlnaW5hbHdpZHRoLHRoaXMub3B0aW9ucy50aHVtYmltYWdld2lkdGg9dGhpcy5vcHRpb25zLnRodW1id2lkdGgtMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcix0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWhlaWdodD10aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQtCjIqdGhpcy5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXIsdGhpcy5vcHRpb25zLnRodW1ic2hvd3RpdGxlJiYodGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0Kz10aGlzLm9wdGlvbnMudGh1bWJ0aXRsZWhlaWdodCkpOih0aGlzLm9wdGlvbnMudGh1bWJjb2x1bW5zcmVzcG9uc2l2ZSYmKGE9Yih3aW5kb3cpLndpZHRoKCksYTx0aGlzLm9wdGlvbnMudGh1bWJzbWFsbHNpemU/KHRoaXMub3B0aW9ucy50aHVtYndpZHRoPXRoaXMub3B0aW9ucy50aHVtYnNtYWxsd2lkdGgsdGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0PXRoaXMub3B0aW9ucy50aHVtYnNtYWxsaGVpZ2h0KTphPHRoaXMub3B0aW9ucy50aHVtYm1lZGl1bXNpemU/KHRoaXMub3B0aW9ucy50aHVtYndpZHRoPXRoaXMub3B0aW9ucy50aHVtYm1lZGl1bXdpZHRoLHRoaXMub3B0aW9ucy50aHVtYmhlaWdodD10aGlzLm9wdGlvbnMudGh1bWJtZWRpdW1oZWlnaHQpOih0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aD10aGlzLm9wdGlvbnMudGh1bWJvcmlnaW5hbHdpZHRoLAp0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQ9dGhpcy5vcHRpb25zLnRodW1ib3JpZ2luYWxoZWlnaHQpLHRoaXMub3B0aW9ucy50aHVtYmltYWdld2lkdGg9dGhpcy5vcHRpb25zLnRodW1id2lkdGgtMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcix0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWhlaWdodD10aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQtMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcix0aGlzLm9wdGlvbnMudGh1bWJzaG93dGl0bGUmJih0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrPXRoaXMub3B0aW9ucy50aHVtYnRpdGxlaGVpZ2h0KSksdGhpcy5vcHRpb25zLmNhcm91c2VsY29sdW1uPU1hdGguZmxvb3IodGhpcy5vcHRpb25zLndpZHRoLyh0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCt0aGlzLm9wdGlvbnMudGh1bWJnYXApKSwxPnRoaXMub3B0aW9ucy5jYXJvdXNlbGNvbHVtbiYmKHRoaXMub3B0aW9ucy5jYXJvdXNlbGNvbHVtbj0xKSksdGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0PQpNYXRoLmNlaWwodGhpcy5lbGVtQXJyYXkubGVuZ3RoL3RoaXMub3B0aW9ucy5jYXJvdXNlbGNvbHVtbikqKHRoaXMub3B0aW9ucy50aHVtYmhlaWdodCt0aGlzLm9wdGlvbnMudGh1bWJyb3dnYXApKTp0aGlzLm9wdGlvbnMudGh1bWJjb2x1bW5zcmVzcG9uc2l2ZSYmKGE9Yih3aW5kb3cpLndpZHRoKCksYTx0aGlzLm9wdGlvbnMudGh1bWJzbWFsbHNpemU/KHRoaXMub3B0aW9ucy50aHVtYndpZHRoPXRoaXMub3B0aW9ucy50aHVtYnNtYWxsd2lkdGgsdGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0PXRoaXMub3B0aW9ucy50aHVtYnNtYWxsaGVpZ2h0KTphPHRoaXMub3B0aW9ucy50aHVtYm1lZGl1bXNpemU/KHRoaXMub3B0aW9ucy50aHVtYndpZHRoPXRoaXMub3B0aW9ucy50aHVtYm1lZGl1bXdpZHRoLHRoaXMub3B0aW9ucy50aHVtYmhlaWdodD10aGlzLm9wdGlvbnMudGh1bWJtZWRpdW1oZWlnaHQpOih0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aD10aGlzLm9wdGlvbnMudGh1bWJvcmlnaW5hbHdpZHRoLAp0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQ9dGhpcy5vcHRpb25zLnRodW1ib3JpZ2luYWxoZWlnaHQpLHRoaXMub3B0aW9ucy50aHVtYmltYWdld2lkdGg9dGhpcy5vcHRpb25zLnRodW1id2lkdGgtMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcix0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWhlaWdodD10aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQtMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcix0aGlzLm9wdGlvbnMudGh1bWJzaG93dGl0bGUmJih0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrPXRoaXMub3B0aW9ucy50aHVtYnRpdGxlaGVpZ2h0KSkpO3RoaXMub3B0aW9ucy5yZXNwb25zaXZlZnVsbHNjcmVlbiYmMDx0aGlzLmNvbnRhaW5lci5wYXJlbnQoKS5oZWlnaHQoKT8odGhpcy5vcHRpb25zLmNvbnRhaW5lckhlaWdodD10aGlzLmNvbnRhaW5lci5wYXJlbnQoKS5oZWlnaHQoKSx0aGlzLm9wdGlvbnMudG90YWxIZWlnaHQ9dGhpcy5vcHRpb25zLmNvbnRhaW5lckhlaWdodCwKdGhpcy5vcHRpb25zLmhlaWdodD10aGlzLm9wdGlvbnMudG90YWxIZWlnaHQtKHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQrMip0aGlzLm9wdGlvbnMucGFkZGluZyksMDx0aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQrdGhpcy5vcHRpb25zLmNhcm91c2VsbWFyZ2luJiYodGhpcy5vcHRpb25zLmhlaWdodC09dGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0K3RoaXMub3B0aW9ucy5jYXJvdXNlbG1hcmdpbikpOih0aGlzLm9wdGlvbnMuaGVpZ2h0PU1hdGgucm91bmQodGhpcy5vcHRpb25zLndpZHRoKnRoaXMub3B0aW9ucy5vcmlnaW5hbEhlaWdodC90aGlzLm9wdGlvbnMub3JpZ2luYWxXaWR0aCksdGhpcy5vcHRpb25zLnRvdGFsSGVpZ2h0PXRoaXMub3B0aW9ucy5oZWlnaHQrdGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0K3RoaXMub3B0aW9ucy5jYXJvdXNlbG1hcmdpbit0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0KzIqdGhpcy5vcHRpb25zLnBhZGRpbmcsdGhpcy5vcHRpb25zLmNvbnRhaW5lckhlaWdodD0KdGhpcy5vcHRpb25zLnRvdGFsSGVpZ2h0KTt0aGlzLmNvbnRhaW5lci5jc3Moe3dpZHRoOnRoaXMub3B0aW9ucy5jb250YWluZXJXaWR0aCxoZWlnaHQ6dGhpcy5vcHRpb25zLmNvbnRhaW5lckhlaWdodH0pO3RoaXMub3B0aW9ucy5ib3hXaWR0aD10aGlzLm9wdGlvbnMud2lkdGg7dGhpcy5vcHRpb25zLmJveEhlaWdodD0iYm90dG9tb3V0c2lkZSI9PXRoaXMub3B0aW9ucy5oZWFkZXJwb3M/dGhpcy5vcHRpb25zLmhlaWdodDp0aGlzLm9wdGlvbnMuaGVpZ2h0K3RoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQ7dGhpcy5vcHRpb25zLnNsaWRlc2hhZG93JiYodGhpcy5vcHRpb25zLmJveFdpZHRoKz04KTt0aGlzLm9wdGlvbnMuc2hvd2Nhcm91c2VsJiYodGhpcy5vcHRpb25zLmNhcm91c2VsV2lkdGg9dGhpcy5vcHRpb25zLndpZHRoLHRoaXMub3B0aW9ucy5jYXJvdXNlbExlZnQ9dGhpcy5vcHRpb25zLnBhZGRpbmcsdGhpcy5vcHRpb25zLmNhcm91c2VsVG9wPSJ0b3AiPT10aGlzLm9wdGlvbnMuY2Fyb3VzZWxwb3NpdGlvbj8KdGhpcy5vcHRpb25zLnBhZGRpbmc6dGhpcy5vcHRpb25zLnBhZGRpbmcrdGhpcy5vcHRpb25zLmJveEhlaWdodCt0aGlzLm9wdGlvbnMuY2Fyb3VzZWxtYXJnaW4pO2IoIi5odG1sNWdhbGxlcnktY29udGFpbmVyLSIrdGhpcy5pZCkuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMudG90YWxXaWR0aCsicHgiLGhlaWdodDp0aGlzLm9wdGlvbnMudG90YWxIZWlnaHQrInB4In0pO2IoIi5odG1sNWdhbGxlcnktYm94LSIrdGhpcy5pZCkuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMuYm94V2lkdGgrInB4IixoZWlnaHQ6dGhpcy5vcHRpb25zLmJveEhlaWdodCsicHgifSk7YT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzldO2lmKDE9PWF8fHRoaXMuc2hvd2luZ1Bvc3Rlcil7dmFyIGM9dGhpcy5zaG93aW5nUG9zdGVyP3RoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMjNdOnRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTBdLGQ9dGhpcy5zaG93aW5nUG9zdGVyP3RoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMjRdOgp0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzExXTtpZih0aGlzLmlzRnVsbHNjcmVlbil2YXIgYT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE3XT9NYXRoLm1pbih0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE3XSx0aGlzLmZ1bGxzY3JlZW5XaWR0aCk6dGhpcy5mdWxsc2NyZWVuV2lkdGgsZT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE4XT9NYXRoLm1pbih0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE4XSx0aGlzLmZ1bGxzY3JlZW5IZWlnaHQpOnRoaXMuZnVsbHNjcmVlbkhlaWdodCxhPU1hdGgubWluKGEvYyxlL2QpLGE9MTxhPzE6YTtlbHNlIGE9ImZpbGwiPT10aGlzLm9wdGlvbnMucmVzaXplbW9kZT9NYXRoLm1heCh0aGlzLm9wdGlvbnMud2lkdGgvYyx0aGlzLm9wdGlvbnMuaGVpZ2h0L2QpOk1hdGgubWluKHRoaXMub3B0aW9ucy53aWR0aC9jLHRoaXMub3B0aW9ucy5oZWlnaHQvZCk7dmFyIGY9TWF0aC5yb3VuZChhKmMpLGo9TWF0aC5yb3VuZChhKgpkKSxlPXRoaXMuaXNGdWxsc2NyZWVuP2Y6dGhpcy5vcHRpb25zLndpZHRoLGE9dGhpcy5pc0Z1bGxzY3JlZW4/ajp0aGlzLm9wdGlvbnMuaGVpZ2h0LGM9TWF0aC5yb3VuZChlLzItZi8yKSxkPU1hdGgucm91bmQoYS8yLWovMik7dGhpcy5pc0Z1bGxzY3JlZW4mJnRoaXMuYWRqdXN0RnVsbHNjcmVlbihlLGEsITApO2IoIi5odG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6ZSsicHgiLGhlaWdodDphKyJweCJ9KTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0taW1nLSIrdGhpcy5pZCkuY3NzKHt3aWR0aDplKyJweCIsaGVpZ2h0OmErInB4In0pO2IoIi5odG1sNWdhbGxlcnktZWxlbS1pbWFnZS0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6ZisicHgiLGhlaWdodDpqKyJweCIsdG9wOmQrInB4IixsZWZ0OmMrInB4In0pfWVsc2UgaWYoMTI9PWF8fDU9PWF8fDY9PWF8fDc9PWF8fDg9PWF8fDk9PWF8fDEwPT1hfHwxMT09YSlkPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTBdLApjPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTFdLHRoaXMuaXNGdWxsc2NyZWVuPyhhPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTddP01hdGgubWluKHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTddLHRoaXMuZnVsbHNjcmVlbldpZHRoKTp0aGlzLmZ1bGxzY3JlZW5XaWR0aCxlPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMThdP01hdGgubWluKHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMThdLHRoaXMuZnVsbHNjcmVlbkhlaWdodCk6dGhpcy5mdWxsc2NyZWVuSGVpZ2h0LGE9TWF0aC5taW4oYS9kLGUvYyksYT0xPGE/MTphLGU9TWF0aC5yb3VuZChhKmQpLGE9TWF0aC5yb3VuZChhKmMpLHRoaXMuYWRqdXN0RnVsbHNjcmVlbihlLGEsITApKTooZT10aGlzLm9wdGlvbnMud2lkdGgsYT10aGlzLm9wdGlvbnMuaGVpZ2h0KSxiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkKS5jc3Moe3dpZHRoOmUrInB4IixoZWlnaHQ6YSsicHgifSksCmIoIi5odG1sNWdhbGxlcnktZWxlbS12aWRlby0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6ZSsicHgiLGhlaWdodDphKyJweCJ9KSxiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tY29udGFpbmVyLSIrdGhpcy5pZCkuY3NzKHt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0pLGIoIi5odG1sNWdhbGxlcnktZWxlbS12aWRlby1jb250YWluZXItIit0aGlzLmlkKS5maW5kKCJ2aWRlbyIpLmNzcyh7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9KSxiKCIjaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkKS5jc3Moe3dpZHRoOmUrInB4IixoZWlnaHQ6YSsicHgifSksYigiI2h0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCkuYXR0cigid2lkdGgiLGUpLGIoIiNodG1sNWdhbGxlcnktZWxlbS12aWRlby0iK3RoaXMuaWQpLmF0dHIoImhlaWdodCIsYSksYigiLmh0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCkuZmluZCgiaWZyYW1lIikuYXR0cigid2lkdGgiLAplKSxiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkKS5maW5kKCJpZnJhbWUiKS5hdHRyKCJoZWlnaHQiLGEpLGIoIiNodG1sNWdhbGxlcnktZWxlbS12aWRlby0iK3RoaXMuaWQpLmZpbmQoImlmcmFtZSIpLmF0dHIoIndpZHRoIixlKSxiKCIjaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkKS5maW5kKCJpZnJhbWUiKS5hdHRyKCJoZWlnaHQiLGEpLGIoIi5odG1sNWdhbGxlcnktZWxlbS1pZnJhbWUtIit0aGlzLmlkKS5jc3Moe3dpZHRoOmUrInB4IixoZWlnaHQ6YSsicHgifSksYigiLmh0bWw1Z2FsbGVyeS1lbGVtLWlmcmFtZS0iK3RoaXMuaWQpLmZpbmQoImlmcmFtZSIpLmF0dHIoIndpZHRoIixlKSxiKCIuaHRtbDVnYWxsZXJ5LWVsZW0taWZyYW1lLSIrdGhpcy5pZCkuZmluZCgiaWZyYW1lIikuYXR0cigiaGVpZ2h0IixhKTtlPWE9MDsiYm90dG9tIj09dGhpcy5vcHRpb25zLmhlYWRlcnBvcz8oYT10aGlzLm9wdGlvbnMudGl0bGVvdmVybGF5P3RoaXMub3B0aW9ucy5oZWlnaHQtCnRoaXMub3B0aW9ucy50aXRsZWhlaWdodDp0aGlzLm9wdGlvbnMuaGVpZ2h0LGU9dGhpcy5vcHRpb25zLnRpdGxlb3ZlcmxheT90aGlzLm9wdGlvbnMuaGVpZ2h0OnRoaXMub3B0aW9ucy5oZWlnaHQrdGhpcy5vcHRpb25zLnRpdGxlaGVpZ2h0KToiYm90dG9tb3V0c2lkZSI9PXRoaXMub3B0aW9ucy5oZWFkZXJwb3MmJihhPXRoaXMub3B0aW9ucy5zaG93Y2Fyb3VzZWw/dGhpcy5vcHRpb25zLmhlaWdodCt0aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQ6dGhpcy5vcHRpb25zLmhlaWdodCk7Yz10aGlzLm9wdGlvbnMuc2xpZGVzaGFkb3c/dGhpcy5vcHRpb25zLmJveFdpZHRoLTg6dGhpcy5vcHRpb25zLmJveFdpZHRoO2IoIi5odG1sNWdhbGxlcnktdGl0bGUtIit0aGlzLmlkKS5jc3Moe3dpZHRoOmMrInB4In0pO3RoaXMub3B0aW9ucy50aXRsZW92ZXJsYXl8fGIoIi5odG1sNWdhbGxlcnktdGl0bGUtIit0aGlzLmlkKS5jc3Moe3RvcDphKyJweCJ9KTtiKCIuaHRtbDVnYWxsZXJ5LXZpcmFsLSIrCnRoaXMuaWQpLmNzcyh7dG9wOmUrInB4In0pO2IoIi5odG1sNWdhbGxlcnktdGltZXItIit0aGlzLmlkKS5jc3Moe3RvcDpTdHJpbmcodGhpcy5vcHRpb25zLmVsZW1Ub3ArdGhpcy5vcHRpb25zLmhlaWdodC0yKSsicHgifSk7aWYodGhpcy5vcHRpb25zLnNob3djYXJvdXNlbCl7YigiLmh0bWw1Z2FsbGVyeS1jYXItIit0aGlzLmlkKS5jc3Moe3dpZHRoOnRoaXMub3B0aW9ucy53aWR0aCsicHgiLHRvcDp0aGlzLm9wdGlvbnMuY2Fyb3VzZWxUb3ArInB4In0pO2IoIi5odG1sNWdhbGxlcnktY2FyLWxpc3QtIit0aGlzLmlkKS5jc3Moe3dpZHRoOlN0cmluZyh0aGlzLm9wdGlvbnMud2lkdGgtNC00KSsicHgifSk7dGhpcy5vcHRpb25zLmNhcm91c2VsTmF2QnV0dG9uPSExO01hdGguZmxvb3IoKHRoaXMub3B0aW9ucy53aWR0aC00LTQpLyh0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCt0aGlzLm9wdGlvbnMudGh1bWJnYXApKTx0aGlzLmVsZW1BcnJheS5sZW5ndGgmJih0aGlzLm9wdGlvbnMuY2Fyb3VzZWxOYXZCdXR0b249CiEwKTthPXRoaXMub3B0aW9ucy5jYXJvdXNlbE5hdkJ1dHRvbj8yKnRoaXMub3B0aW9ucy5jYXJvdXNlbGFycm93d2lkdGgrODowO2IoIi5odG1sNWdhbGxlcnktY2FyLWxlZnQtIit0aGlzLmlkKS5jc3Moe2Rpc3BsYXk6dGhpcy5vcHRpb25zLmNhcm91c2VsTmF2QnV0dG9uPyJibG9jayI6Im5vbmUifSk7YigiLmh0bWw1Z2FsbGVyeS1jYXItcmlnaHQtIit0aGlzLmlkKS5jc3Moe2Rpc3BsYXk6dGhpcy5vcHRpb25zLmNhcm91c2VsTmF2QnV0dG9uPyJibG9jayI6Im5vbmUifSk7dGhpcy5vcHRpb25zLnRodW1iU2hvd051bT1NYXRoLmZsb29yKCh0aGlzLm9wdGlvbnMud2lkdGgtNC00LWEpLyh0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCt0aGlzLm9wdGlvbnMudGh1bWJnYXApKTsxPnRoaXMub3B0aW9ucy50aHVtYlNob3dOdW0mJih0aGlzLm9wdGlvbnMudGh1bWJTaG93TnVtPTEpO3RoaXMub3B0aW9ucy50aHVtYk1hc2tXaWR0aD10aGlzLm9wdGlvbnMudGh1bWJTaG93TnVtKnRoaXMub3B0aW9ucy50aHVtYndpZHRoKwp0aGlzLm9wdGlvbnMudGh1bWJTaG93TnVtKnRoaXMub3B0aW9ucy50aHVtYmdhcDt0aGlzLm9wdGlvbnMudGh1bWJUb3RhbFdpZHRoPXRoaXMuZWxlbUFycmF5Lmxlbmd0aCp0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCsodGhpcy5lbGVtQXJyYXkubGVuZ3RoLTEpKnRoaXMub3B0aW9ucy50aHVtYmdhcDtlPTA7dGhpcy5vcHRpb25zLmNhcm91c2VsbXVsdGlyb3dzPygic2FtZWNvbHVtbiI9PXRoaXMub3B0aW9ucy50aHVtYnJlc3BvbnNpdmU/YigiLmh0bWw1Z2FsbGVyeS10aHVtYnMtIit0aGlzLmlkKS5jc3MoeyJtYXJnaW4tbGVmdCI6IjBweCIsd2lkdGg6U3RyaW5nKCh0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCt0aGlzLm9wdGlvbnMudGh1bWJnYXApKnRoaXMub3B0aW9ucy5jYXJvdXNlbGNvbHVtbikrInB4In0pOihhPU1hdGguZmxvb3IodGhpcy5vcHRpb25zLndpZHRoLyh0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCt0aGlzLm9wdGlvbnMudGh1bWJnYXApKSwxPmEmJihhPTEpLGU9Cih0aGlzLm9wdGlvbnMud2lkdGgtYSp0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aC0oYS0xKSp0aGlzLm9wdGlvbnMudGh1bWJnYXApLzIsYigiLmh0bWw1Z2FsbGVyeS10aHVtYnMtIit0aGlzLmlkKS5jc3MoeyJtYXJnaW4tbGVmdCI6ZSsicHgiLHdpZHRoOnRoaXMub3B0aW9ucy53aWR0aCsicHgifSkpLGIoIi5odG1sNWdhbGxlcnktdG4tIit0aGlzLmlkKS5jc3Moe3dpZHRoOnRoaXMub3B0aW9ucy50aHVtYndpZHRoKyJweCIsaGVpZ2h0OnRoaXMub3B0aW9ucy50aHVtYmhlaWdodCsicHgifSksYigiLmh0bWw1Z2FsbGVyeS10bi1zZWxlY3RlZC0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6dGhpcy5vcHRpb25zLnRodW1id2lkdGgrInB4IixoZWlnaHQ6dGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0KyJweCJ9KSxiKCIuaHRtbDVnYWxsZXJ5LXRuLWltZy0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6U3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYmltYWdld2lkdGgrMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcikrCiJweCIsaGVpZ2h0OlN0cmluZyh0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWhlaWdodCsyKnRoaXMub3B0aW9ucy50aHVtYmltYWdlYm9yZGVyKSsicHgifSksYigiLmh0bWw1Z2FsbGVyeS10bi1pbWFnZS0iK3RoaXMuaWQpLnBhcmVudCgpLmNzcyh7d2lkdGg6dGhpcy5vcHRpb25zLnRodW1iaW1hZ2V3aWR0aCsicHgiLGhlaWdodDp0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWhlaWdodCsicHgifSksYigiLmh0bWw1Z2FsbGVyeS10bi10aXRsZS0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6U3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYndpZHRoLTIpKyJweCJ9KSk6KHRoaXMub3B0aW9ucy50aHVtYlNob3dOdW09TWF0aC5mbG9vcigodGhpcy5vcHRpb25zLndpZHRoLTQtNC1hKS8odGhpcy5vcHRpb25zLnRodW1id2lkdGgrdGhpcy5vcHRpb25zLnRodW1iZ2FwKSksMT50aGlzLm9wdGlvbnMudGh1bWJTaG93TnVtJiYodGhpcy5vcHRpb25zLnRodW1iU2hvd051bT0xKSx0aGlzLm9wdGlvbnMudGh1bWJNYXNrV2lkdGg9CnRoaXMub3B0aW9ucy50aHVtYlNob3dOdW0qdGhpcy5vcHRpb25zLnRodW1id2lkdGgrdGhpcy5vcHRpb25zLnRodW1iU2hvd051bSp0aGlzLm9wdGlvbnMudGh1bWJnYXAsdGhpcy5vcHRpb25zLnRodW1iVG90YWxXaWR0aD10aGlzLmVsZW1BcnJheS5sZW5ndGgqdGhpcy5vcHRpb25zLnRodW1id2lkdGgrKHRoaXMuZWxlbUFycmF5Lmxlbmd0aC0xKSp0aGlzLm9wdGlvbnMudGh1bWJnYXAsZT0wLHRoaXMub3B0aW9ucy50aHVtYk1hc2tXaWR0aD50aGlzLm9wdGlvbnMudGh1bWJUb3RhbFdpZHRoJiYoZT10aGlzLm9wdGlvbnMudGh1bWJNYXNrV2lkdGgvMi10aGlzLm9wdGlvbnMudGh1bWJUb3RhbFdpZHRoLzItdGhpcy5vcHRpb25zLnRodW1iZ2FwLzIpLGIoIi5odG1sNWdhbGxlcnktY2FyLSIrdGhpcy5pZCkuY3NzKHtoZWlnaHQ6dGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0KyJweCJ9KSxiKCIuaHRtbDVnYWxsZXJ5LWNhci1saXN0LSIrdGhpcy5pZCkuY3NzKHtoZWlnaHQ6dGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0KwoicHgifSksYigiLmh0bWw1Z2FsbGVyeS1jYXItbGVmdC0iK3RoaXMuaWQpLmNzcyh7dG9wOlN0cmluZyh0aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQvMi10aGlzLm9wdGlvbnMuY2Fyb3VzZWxhcnJvd2hlaWdodC8yKSsicHgifSksYigiLmh0bWw1Z2FsbGVyeS1jYXItcmlnaHQtIit0aGlzLmlkKS5jc3Moe3RvcDpTdHJpbmcodGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0LzItdGhpcy5vcHRpb25zLmNhcm91c2VsYXJyb3doZWlnaHQvMikrInB4In0pLGIoIi5odG1sNWdhbGxlcnktdG4tdGl0bGUtIit0aGlzLmlkKS5jc3Moe3dpZHRoOlN0cmluZyh0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aC0yKSsicHgifSksYigiLmh0bWw1Z2FsbGVyeS10bi0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6dGhpcy5vcHRpb25zLnRodW1id2lkdGgrInB4IixoZWlnaHQ6dGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0KyJweCJ9KSxiKCIuaHRtbDVnYWxsZXJ5LXRuLXNlbGVjdGVkLSIrdGhpcy5pZCkuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCsKInB4IixoZWlnaHQ6dGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0KyJweCJ9KSxiKCIuaHRtbDVnYWxsZXJ5LXRuLWltZy0iK3RoaXMuaWQpLmNzcyh7d2lkdGg6U3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYmltYWdld2lkdGgrMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcikrInB4IixoZWlnaHQ6U3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYmltYWdlaGVpZ2h0KzIqdGhpcy5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXIpKyJweCJ9KSxiKCIuaHRtbDVnYWxsZXJ5LXRuLWltYWdlLSIrdGhpcy5pZCkucGFyZW50KCkuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMudGh1bWJpbWFnZXdpZHRoKyJweCIsaGVpZ2h0OnRoaXMub3B0aW9ucy50aHVtYmltYWdlaGVpZ2h0KyJweCJ9KSxiKCIuaHRtbDVnYWxsZXJ5LXRodW1icy0iK3RoaXMuaWQpLmNzcyh7Im1hcmdpbi1sZWZ0IjplKyJweCIsd2lkdGg6U3RyaW5nKHRoaXMuZWxlbUFycmF5Lmxlbmd0aCoodGhpcy5vcHRpb25zLnRodW1id2lkdGgrCnRoaXMub3B0aW9ucy50aHVtYmdhcCkpKyJweCJ9KSk7dmFyIGY9IjEwMCUiLGo9ImF1dG8iLGw9dGhpcztiKCIuaHRtbDVnYWxsZXJ5LXRuLWltYWdlLSIrdGhpcy5pZCkuZWFjaChmdW5jdGlvbigpe3ZhciBhPWIodGhpcykuZGF0YSgib3JpZ2luYWx3aWR0aCIpLGM9Yih0aGlzKS5kYXRhKCJvcmlnaW5hbGhlaWdodCIpO2lmKDA8YSYmMDxjKXt2YXIgZD1NYXRoLm1heChsLm9wdGlvbnMudGh1bWJpbWFnZXdpZHRoL2EsbC5vcHRpb25zLnRodW1iaW1hZ2VoZWlnaHQvYyk7Zj1NYXRoLnJvdW5kKGQqYSkrInB4IjtqPU1hdGgucm91bmQoZCpjKSsicHgifWIodGhpcykuY3NzKHt3aWR0aDpmLGhlaWdodDpqfSl9KTthPU1hdGgucm91bmQoKHRoaXMub3B0aW9ucy53aWR0aC00LTQpLzItdGhpcy5vcHRpb25zLnRodW1iTWFza1dpZHRoLzIpO2IoIi5odG1sNWdhbGxlcnktY2FyLW1hc2stIit0aGlzLmlkKS5jc3Moe2xlZnQ6YSsicHgiLHdpZHRoOnRoaXMub3B0aW9ucy50aHVtYk1hc2tXaWR0aCsKInB4IixoZWlnaHQ6dGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0KyJweCJ9KTt0aGlzLmNhcm91c2VsSGlnaGxpZ2h0KHRoaXMuY3VyRWxlbSwhMCl9fX0sY3JlYXRlU3R5bGVEZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnRodW1ib3JpZ2luYWx3aWR0aD10aGlzLm9wdGlvbnMudGh1bWJ3aWR0aDt0aGlzLm9wdGlvbnMudGh1bWJvcmlnaW5hbGhlaWdodD10aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQ7aWYoInNhbWVjb2x1bW4iPT10aGlzLm9wdGlvbnMudGh1bWJyZXNwb25zaXZlKXt0aGlzLm9wdGlvbnMuY2Fyb3VzZWxjb2x1bW49dGhpcy5vcHRpb25zLnRodW1iY29sdW1ucztpZih0aGlzLm9wdGlvbnMudGh1bWJjb2x1bW5zcmVzcG9uc2l2ZSl7dmFyIGE9Yih3aW5kb3cpLndpZHRoKCk7YTx0aGlzLm9wdGlvbnMudGh1bWJzbWFsbHNpemU/dGhpcy5vcHRpb25zLmNhcm91c2VsY29sdW1uPXRoaXMub3B0aW9ucy50aHVtYnNtYWxsY29sdW1uczphPHRoaXMub3B0aW9ucy50aHVtYm1lZGl1bXNpemUmJgoodGhpcy5vcHRpb25zLmNhcm91c2VsY29sdW1uPXRoaXMub3B0aW9ucy50aHVtYm1lZGl1bWNvbHVtbnMpfXRoaXMub3B0aW9ucy50aHVtYndpZHRoPU1hdGgubWluKCh0aGlzLm9wdGlvbnMud2lkdGgtdGhpcy5vcHRpb25zLnRodW1iZ2FwKih0aGlzLm9wdGlvbnMuY2Fyb3VzZWxjb2x1bW4tMSkpL3RoaXMub3B0aW9ucy5jYXJvdXNlbGNvbHVtbik7dGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0PXRoaXMub3B0aW9ucy50aHVtYndpZHRoKnRoaXMub3B0aW9ucy50aHVtYm9yaWdpbmFsaGVpZ2h0L3RoaXMub3B0aW9ucy50aHVtYm9yaWdpbmFsd2lkdGh9ZWxzZSB0aGlzLm9wdGlvbnMudGh1bWJjb2x1bW5zcmVzcG9uc2l2ZSYmKGE9Yih3aW5kb3cpLndpZHRoKCksYTx0aGlzLm9wdGlvbnMudGh1bWJzbWFsbHNpemU/KHRoaXMub3B0aW9ucy50aHVtYndpZHRoPXRoaXMub3B0aW9ucy50aHVtYnNtYWxsd2lkdGgsdGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0PXRoaXMub3B0aW9ucy50aHVtYnNtYWxsaGVpZ2h0KToKYTx0aGlzLm9wdGlvbnMudGh1bWJtZWRpdW1zaXplJiYodGhpcy5vcHRpb25zLnRodW1id2lkdGg9dGhpcy5vcHRpb25zLnRodW1ibWVkaXVtd2lkdGgsdGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0PXRoaXMub3B0aW9ucy50aHVtYm1lZGl1bWhlaWdodCkpO3RoaXMub3B0aW9ucy50aHVtYmltYWdld2lkdGg9dGhpcy5vcHRpb25zLnRodW1id2lkdGgtMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcjt0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWhlaWdodD10aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQtMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcjt0aGlzLm9wdGlvbnMudGh1bWJzaG93dGl0bGUmJih0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrPXRoaXMub3B0aW9ucy50aHVtYnRpdGxlaGVpZ2h0KTt0aGlzLm9wdGlvbnMuc2hvd3RpdGxlfHwodGhpcy5vcHRpb25zLnRpdGxlaGVpZ2h0PTApO2lmKCF0aGlzLm9wdGlvbnMuc2hvd3NvY2lhbG1lZGlhfHwhdGhpcy5vcHRpb25zLnNob3dmYWNlYm9va2xpa2UmJgohdGhpcy5vcHRpb25zLnNob3d0d2l0dGVyJiYhdGhpcy5vcHRpb25zLnNob3dnb29nbGVwbHVzKXRoaXMub3B0aW9ucy5zb2NpYWxoZWlnaHQ9MDt0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0PXRoaXMub3B0aW9ucy50aXRsZW92ZXJsYXk/dGhpcy5vcHRpb25zLnNvY2lhbGhlaWdodDp0aGlzLm9wdGlvbnMudGl0bGVoZWlnaHQrdGhpcy5vcHRpb25zLnNvY2lhbGhlaWdodDt0aGlzLm9wdGlvbnMuYm94V2lkdGg9dGhpcy5vcHRpb25zLndpZHRoO3RoaXMub3B0aW9ucy5ib3hIZWlnaHQ9ImJvdHRvbW91dHNpZGUiPT10aGlzLm9wdGlvbnMuaGVhZGVycG9zP3RoaXMub3B0aW9ucy5oZWlnaHQ6dGhpcy5vcHRpb25zLmhlaWdodCt0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0O3RoaXMub3B0aW9ucy5ib3hMZWZ0PXRoaXMub3B0aW9ucy5wYWRkaW5nO3RoaXMub3B0aW9ucy5ib3hUb3A9dGhpcy5vcHRpb25zLnBhZGRpbmc7dGhpcy5vcHRpb25zLnNsaWRlc2hhZG93JiYodGhpcy5vcHRpb25zLmJveFdpZHRoKz0KOCx0aGlzLm9wdGlvbnMuYm94TGVmdC09NCx0aGlzLm9wdGlvbnMuYm94VG9wLT00KTt0aGlzLm9wdGlvbnMuc2hvd2Nhcm91c2VsPyh0aGlzLm9wdGlvbnMuY2Fyb3VzZWxXaWR0aD10aGlzLm9wdGlvbnMud2lkdGgsdGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0PXRoaXMub3B0aW9ucy50aHVtYmhlaWdodCsyKnRoaXMub3B0aW9ucy50aHVtYm1hcmdpbix0aGlzLm9wdGlvbnMuY2Fyb3VzZWxMZWZ0PXRoaXMub3B0aW9ucy5wYWRkaW5nLCJ0b3AiPT10aGlzLm9wdGlvbnMuY2Fyb3VzZWxwb3NpdGlvbj8odGhpcy5vcHRpb25zLmNhcm91c2VsVG9wPXRoaXMub3B0aW9ucy5wYWRkaW5nLHRoaXMub3B0aW9ucy5ib3hUb3A9dGhpcy5vcHRpb25zLnBhZGRpbmcrdGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0K3RoaXMub3B0aW9ucy5jYXJvdXNlbG1hcmdpbik6dGhpcy5vcHRpb25zLmNhcm91c2VsVG9wPXRoaXMub3B0aW9ucy5wYWRkaW5nK3RoaXMub3B0aW9ucy5ib3hIZWlnaHQrCnRoaXMub3B0aW9ucy5jYXJvdXNlbG1hcmdpbix0aGlzLm9wdGlvbnMuY2Fyb3VzZWxtdWx0aXJvd3MmJigic2FtZWNvbHVtbiI9PXRoaXMub3B0aW9ucy50aHVtYnJlc3BvbnNpdmU/KHRoaXMub3B0aW9ucy5jYXJvdXNlbGNvbHVtbj10aGlzLm9wdGlvbnMudGh1bWJjb2x1bW5zLHRoaXMub3B0aW9ucy50aHVtYmNvbHVtbnNyZXNwb25zaXZlJiYoYT1iKHdpbmRvdykud2lkdGgoKSxhPHRoaXMub3B0aW9ucy50aHVtYnNtYWxsc2l6ZT90aGlzLm9wdGlvbnMuY2Fyb3VzZWxjb2x1bW49dGhpcy5vcHRpb25zLnRodW1ic21hbGxjb2x1bW5zOmE8dGhpcy5vcHRpb25zLnRodW1ibWVkaXVtc2l6ZSYmKHRoaXMub3B0aW9ucy5jYXJvdXNlbGNvbHVtbj10aGlzLm9wdGlvbnMudGh1bWJtZWRpdW1jb2x1bW5zKSksdGhpcy5vcHRpb25zLnRodW1id2lkdGg9TWF0aC5taW4oKHRoaXMub3B0aW9ucy53aWR0aC10aGlzLm9wdGlvbnMudGh1bWJnYXAqKHRoaXMub3B0aW9ucy5jYXJvdXNlbGNvbHVtbi0KMSkpL3RoaXMub3B0aW9ucy5jYXJvdXNlbGNvbHVtbiksdGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0PXRoaXMub3B0aW9ucy50aHVtYndpZHRoKnRoaXMub3B0aW9ucy50aHVtYm9yaWdpbmFsaGVpZ2h0L3RoaXMub3B0aW9ucy50aHVtYm9yaWdpbmFsd2lkdGgsdGhpcy5vcHRpb25zLnRodW1iaW1hZ2V3aWR0aD10aGlzLm9wdGlvbnMudGh1bWJ3aWR0aC0yKnRoaXMub3B0aW9ucy50aHVtYmltYWdlYm9yZGVyLHRoaXMub3B0aW9ucy50aHVtYmltYWdlaGVpZ2h0PXRoaXMub3B0aW9ucy50aHVtYmhlaWdodC0yKnRoaXMub3B0aW9ucy50aHVtYmltYWdlYm9yZGVyLHRoaXMub3B0aW9ucy50aHVtYnNob3d0aXRsZSYmKHRoaXMub3B0aW9ucy50aHVtYmhlaWdodCs9dGhpcy5vcHRpb25zLnRodW1idGl0bGVoZWlnaHQpKToodGhpcy5vcHRpb25zLmNhcm91c2VsY29sdW1uPU1hdGguZmxvb3IodGhpcy5vcHRpb25zLndpZHRoLyh0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCt0aGlzLm9wdGlvbnMudGh1bWJnYXApKSwKMT50aGlzLm9wdGlvbnMuY2Fyb3VzZWxjb2x1bW4mJih0aGlzLm9wdGlvbnMuY2Fyb3VzZWxjb2x1bW49MSkpLHRoaXMub3B0aW9ucy5jYXJvdXNlbEhlaWdodD1NYXRoLmNlaWwodGhpcy5lbGVtQXJyYXkubGVuZ3RoL3RoaXMub3B0aW9ucy5jYXJvdXNlbGNvbHVtbikqKHRoaXMub3B0aW9ucy50aHVtYmhlaWdodCt0aGlzLm9wdGlvbnMudGh1bWJyb3dnYXApKSk6KHRoaXMub3B0aW9ucy5jYXJvdXNlbFdpZHRoPTAsdGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0PTAsdGhpcy5vcHRpb25zLmNhcm91c2VsTGVmdD0wLHRoaXMub3B0aW9ucy5jYXJvdXNlbFRvcD0wLHRoaXMub3B0aW9ucy5jYXJvdXNlbG1hcmdpbj0wKTt0aGlzLm9wdGlvbnMudG90YWxXaWR0aD10aGlzLm9wdGlvbnMud2lkdGgrMip0aGlzLm9wdGlvbnMucGFkZGluZzt0aGlzLm9wdGlvbnMudG90YWxIZWlnaHQ9dGhpcy5vcHRpb25zLmhlaWdodCt0aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQrdGhpcy5vcHRpb25zLmNhcm91c2VsbWFyZ2luKwp0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0KzIqdGhpcy5vcHRpb25zLnBhZGRpbmc7dGhpcy5vcHRpb25zLmNvbnRhaW5lcldpZHRoPXRoaXMub3B0aW9ucy50b3RhbFdpZHRoO3RoaXMub3B0aW9ucy5jb250YWluZXJIZWlnaHQ9dGhpcy5vcHRpb25zLnRvdGFsSGVpZ2h0O3RoaXMub3B0aW9ucy5yZXNwb25zaXZlPyh0aGlzLm9wdGlvbnMub3JpZ2luYWxXaWR0aD10aGlzLm9wdGlvbnMud2lkdGgsdGhpcy5vcHRpb25zLm9yaWdpbmFsSGVpZ2h0PXRoaXMub3B0aW9ucy5oZWlnaHQsdGhpcy5jb250YWluZXIuY3NzKHsibWF4LXdpZHRoIjoiMTAwJSJ9KSk6dGhpcy5jb250YWluZXIuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGgsaGVpZ2h0OnRoaXMub3B0aW9ucy5jb250YWluZXJIZWlnaHR9KTt2YXIgYz0wLGQ9MDt0aGlzLm9wdGlvbnMuZWxlbVRvcD0wOyJ0b3AiPT10aGlzLm9wdGlvbnMuaGVhZGVycG9zPyhkPTAsYz10aGlzLm9wdGlvbnMuc29jaWFsaGVpZ2h0LAp0aGlzLm9wdGlvbnMuZWxlbVRvcD10aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0KToiYm90dG9tIj09dGhpcy5vcHRpb25zLmhlYWRlcnBvcyYmKHRoaXMub3B0aW9ucy5lbGVtVG9wPTAsYz10aGlzLm9wdGlvbnMudGl0bGVvdmVybGF5P3RoaXMub3B0aW9ucy5oZWlnaHQtdGhpcy5vcHRpb25zLnRpdGxlaGVpZ2h0OnRoaXMub3B0aW9ucy5oZWlnaHQsZD10aGlzLm9wdGlvbnMudGl0bGVvdmVybGF5P3RoaXMub3B0aW9ucy5oZWlnaHQ6dGhpcy5vcHRpb25zLmhlaWdodCt0aGlzLm9wdGlvbnMudGl0bGVoZWlnaHQpO2E9IiAuaHRtbDVnYWxsZXJ5LWNvbnRhaW5lci0iK3RoaXMuaWQrIiB7IGRpc3BsYXk6YmxvY2s7IHBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjBweDsgdG9wOjBweDsgd2lkdGg6Iit0aGlzLm9wdGlvbnMudG90YWxXaWR0aCsicHg7IGhlaWdodDoiK3RoaXMub3B0aW9ucy50b3RhbEhlaWdodCsicHg7ICIrKCF0aGlzLm9wdGlvbnMuYmdpbWFnZT8iIjoiYmFja2dyb3VuZDp1cmwoJyIrCnRoaXMub3B0aW9ucy5iZ2ltYWdlKyInKSBjZW50ZXIgdG9wOyIpKyIgYmFja2dyb3VuZC1jb2xvcjoiK3RoaXMub3B0aW9ucy5iZ2NvbG9yKyI7fSI7dGhpcy5vcHRpb25zLmdhbGxlcnlzaGFkb3cmJihhKz0iIC5odG1sNWdhbGxlcnktY29udGFpbmVyLSIrdGhpcy5pZCsiIHsgLW1vei1ib3gtc2hhZG93OiAwcHggMnB4IDVweCAjYWFhOyAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAycHggNXB4ICNhYWE7IGJveC1zaGFkb3c6IDBweCAycHggNXB4ICNhYWE7fSIpO3ZhciBhPWErKCIgLmh0bWw1Z2FsbGVyeS1ib3gtIit0aGlzLmlkKyIge2Rpc3BsYXk6YmxvY2s7IHBvc2l0aW9uOmFic29sdXRlOyB0ZXh0LWFsaWduOmNlbnRlcjsgbGVmdDoiK3RoaXMub3B0aW9ucy5ib3hMZWZ0KyJweDsgdG9wOiIrdGhpcy5vcHRpb25zLmJveFRvcCsicHg7IHdpZHRoOiIrdGhpcy5vcHRpb25zLmJveFdpZHRoKyJweDsgaGVpZ2h0OiIrdGhpcy5vcHRpb25zLmJveEhlaWdodCsicHg7fSIpLGU9TWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuc29jaWFsaGVpZ2h0LwoyLTEyKSxhPWErKCIgLmh0bWw1Z2FsbGVyeS10aXRsZS10ZXh0LSIrdGhpcy5pZCsiICIrdGhpcy5vcHRpb25zLnRpdGxlY3NzKyIgLmh0bWw1Z2FsbGVyeS10aXRsZS10ZXh0LSIrdGhpcy5pZCsiICIrdGhpcy5vcHRpb25zLnRpdGxlY3NzbGluaysiIC5odG1sNWdhbGxlcnktZXJyb3ItIit0aGlzLmlkKyIgIit0aGlzLm9wdGlvbnMuZXJyb3Jjc3MpLGE9YSsoIiAuaHRtbDVnYWxsZXJ5LWRlc2NyaXB0aW9uLXRleHQtIit0aGlzLmlkKyIgIit0aGlzLm9wdGlvbnMuZGVzY3JpcHRpb25jc3MrIiAuaHRtbDVnYWxsZXJ5LWRlc2NyaXB0aW9uLXRleHQtIit0aGlzLmlkKyIgIit0aGlzLm9wdGlvbnMuZGVzY3JpcHRpb25jc3NsaW5rKSxhPWErKCIgLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLXRpdGxlLSIrdGhpcy5pZCsiIit0aGlzLm9wdGlvbnMubGlnaHRib3h0aXRsZWNzcysiIC5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi10aXRsZS0iK3RoaXMuaWQrIiIrdGhpcy5vcHRpb25zLmxpZ2h0Ym94dGl0bGVsaW5rY3NzKSwKYT1hKygiIC5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1kZXNjcmlwdGlvbi0iK3RoaXMuaWQrIiIrdGhpcy5vcHRpb25zLmxpZ2h0Ym94ZGVzY3JpcHRpb25jc3MrIiAuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tZGVzY3JpcHRpb24tIit0aGlzLmlkKyIiK3RoaXMub3B0aW9ucy5saWdodGJveGRlc2NyaXB0aW9ubGlua2NzcyksYT1hKygiIC5odG1sNWdhbGxlcnktdmlyYWwtIit0aGlzLmlkKyIge2Rpc3BsYXk6YmxvY2s7IG92ZXJmbG93OmhpZGRlbjsgcG9zaXRpb246YWJzb2x1dGU7IHRleHQtYWxpZ246bGVmdDsgdG9wOiIrZCsicHg7IGxlZnQ6MHB4OyB3aWR0aDoiK3RoaXMub3B0aW9ucy5ib3hXaWR0aCsicHg7IGhlaWdodDoiK3RoaXMub3B0aW9ucy5zb2NpYWxoZWlnaHQrInB4OyBwYWRkaW5nLXRvcDoiK2UrInB4O30iKSxhPWErKCIgLmh0bWw1Z2FsbGVyeS10aXRsZS0iK3RoaXMuaWQrIiB7ZGlzcGxheToiKyh0aGlzLm9wdGlvbnMudGl0bGVvdmVybGF5JiZ0aGlzLm9wdGlvbnMudGl0bGVhdXRvaGlkZT8KIm5vbmUiOiJibG9jayIpKyI7IG92ZXJmbG93OmhpZGRlbjsgcG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MHB4OyB3aWR0aDoiKyh0aGlzLm9wdGlvbnMuc2xpZGVzaGFkb3c/dGhpcy5vcHRpb25zLmJveFdpZHRoLTg6dGhpcy5vcHRpb25zLmJveFdpZHRoKSsicHg7ICIpO3RoaXMub3B0aW9ucy50aXRsZW92ZXJsYXk/YT0idG9wIj09dGhpcy5vcHRpb25zLmhlYWRlcnBvcz9hKyJ0b3A6MHB4OyBoZWlnaHQ6YXV0bzsgfSI6YSsiYm90dG9tOjBweDsgaGVpZ2h0OmF1dG87IH0iOihhKz0idG9wOiIrYysicHg7IGhlaWdodDoiK3RoaXMub3B0aW9ucy50aXRsZWhlaWdodCsicHg7IH0iLHRoaXMub3B0aW9ucy50aXRsZXNtYWxsc2NyZWVuJiYoYSs9IiBAbWVkaWEgKG1heC13aWR0aDogIit0aGlzLm9wdGlvbnMudGl0bGVzbWFsbHNjcmVlbndpZHRoKyJweCkgeyAuaHRtbDVnYWxsZXJ5LXRpdGxlLSIrdGhpcy5pZCsiIHtoZWlnaHQ6Iit0aGlzLm9wdGlvbnMudGl0bGVoZWlnaHRzbWFsbHNjcmVlbisKInB4OyB9fSIpKTthKz0iIC5odG1sNWdhbGxlcnktdGltZXItIit0aGlzLmlkKyIge2Rpc3BsYXk6YmxvY2s7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6IitTdHJpbmcodGhpcy5vcHRpb25zLmVsZW1Ub3ArdGhpcy5vcHRpb25zLmhlaWdodC0yKSsicHg7IGxlZnQ6MHB4OyB3aWR0aDowcHg7IGhlaWdodDoycHg7IGJhY2tncm91bmQtY29sb3I6I2NjYzsgZmlsdGVyOmFscGhhKG9wYWNpdHk9NjApOyBvcGFjaXR5OjAuNjsgfSI7YSs9IiAuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkKyIge2Rpc3BsYXk6YmxvY2s7IG92ZXJmbG93OmhpZGRlbjsgcG9zaXRpb246YWJzb2x1dGU7IHRvcDoiK3RoaXMub3B0aW9ucy5lbGVtVG9wKyJweDsgbGVmdDowcHg7IHdpZHRoOiIrdGhpcy5vcHRpb25zLndpZHRoKyJweDsgaGVpZ2h0OiIrdGhpcy5vcHRpb25zLmhlaWdodCsicHg7fSI7dGhpcy5vcHRpb25zLmlzSUU3fHx0aGlzLm9wdGlvbnMuaXNJRTY/KGErPSIgLmh0bWw1Z2FsbGVyeS1sb2FkaW5nLSIrCnRoaXMuaWQrIiB7ZGlzcGxheTpub25lOyB9IixhKz0iIC5odG1sNWdhbGxlcnktbG9hZGluZy1jZW50ZXItIit0aGlzLmlkKyIge2Rpc3BsYXk6bm9uZTsgfSIpOihhKz0iIC5odG1sNWdhbGxlcnktbG9hZGluZy0iK3RoaXMuaWQrIiB7ZGlzcGxheTpibG9jazsgcG9zaXRpb246YWJzb2x1dGU7IHRvcDo0cHg7IHJpZ2h0OjRweDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7IGJhY2tncm91bmQ6dXJsKCciK3RoaXMub3B0aW9ucy5za2luZm9sZGVyKyJsb2FkaW5nLmdpZicpIG5vLXJlcGVhdCB0b3AgcmlnaHQ7fSIsYSs9IiAuaHRtbDVnYWxsZXJ5LWxvYWRpbmctY2VudGVyLSIrdGhpcy5pZCsiIHtkaXNwbGF5OmJsb2NrOyBwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjBweDsgbGVmdDowcHg7IHdpZHRoOjEwMCU7IGhlaWdodDoxMDAlOyBiYWNrZ3JvdW5kOnVybCgnIit0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcisibG9hZGluZ19jZW50ZXIuZ2lmJykgbm8tcmVwZWF0IGNlbnRlciBjZW50ZXI7fSIpOwowPHRoaXMub3B0aW9ucy5ib3JkZXJyYWRpdXMmJihhKz0iIC5odG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQrIiB7b3ZlcmZsb3c6aGlkZGVuOyBib3JkZXItcmFkaXVzOiIrdGhpcy5vcHRpb25zLmJvcmRlcnJhZGl1cysicHg7IC1tb3otYm9yZGVyLXJhZGl1czoiK3RoaXMub3B0aW9ucy5ib3JkZXJyYWRpdXMrInB4OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6Iit0aGlzLm9wdGlvbnMuYm9yZGVycmFkaXVzKyJweDt9Iik7dGhpcy5vcHRpb25zLnNsaWRlc2hhZG93JiYoYSs9IiAuaHRtbDVnYWxsZXJ5LXRpdGxlLSIrdGhpcy5pZCsiIHsgcGFkZGluZzo0cHg7fSIsYSs9IiAuaHRtbDVnYWxsZXJ5LXRpbWVyLSIrdGhpcy5pZCsiIHsgbWFyZ2luOjRweDt9IixhKz0iIC5odG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQrIiB7IG92ZXJmbG93OmhpZGRlbjsgcGFkZGluZzo0cHg7IC1tb3otYm94LXNoYWRvdzogMHB4IDJweCA1cHggI2FhYTsgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMnB4IDVweCAjYWFhOyBib3gtc2hhZG93OiAwcHggMnB4IDVweCAjYWFhO30iKTsKdGhpcy5vcHRpb25zLnNob3djYXJvdXNlbCYmdGhpcy5vcHRpb25zLmNhcm91c2VsbXVsdGlyb3dzPyhhKz0iIC5odG1sNWdhbGxlcnktY2FyLSIrdGhpcy5pZCsiIHsgcG9zaXRpb246YWJzb2x1dGU7IGRpc3BsYXk6YmxvY2s7IG92ZXJmbG93OmhpZGRlbjsgbGVmdDoiK3RoaXMub3B0aW9ucy5jYXJvdXNlbExlZnQrInB4OyB0b3A6Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxUb3ArInB4OyB3aWR0aDoiK3RoaXMub3B0aW9ucy53aWR0aCsicHg7IixhPXRoaXMub3B0aW9ucy5jYXJvdXNlbGJndHJhbnNwYXJlbnQ/YSsiYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsiOmErKCJib3JkZXItdG9wOjFweCBzb2xpZCAiK3RoaXMub3B0aW9ucy5jYXJvdXNlbHRvcGJvcmRlcisiO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICIrdGhpcy5vcHRpb25zLmNhcm91c2VsYm90dG9tYm9yZGVyKyI7YmFja2dyb3VuZC1jb2xvcjogIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2NvbG9yZW5kKyI7IGJhY2tncm91bmQ6ICIrCnRoaXMub3B0aW9ucy5jYXJvdXNlbGJnY29sb3JlbmQrIiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdjb2xvcnN0YXJ0KyIpLCB0bygiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJnY29sb3JlbmQrIikpIG5vLXJlcGVhdDsgYmFja2dyb3VuZDogIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2NvbG9yZW5kKyIgLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJnY29sb3JzdGFydCsiLCAiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJnY29sb3JlbmQrIikgbm8tcmVwZWF0OyBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdjb2xvcnN0YXJ0KyIsIGVuZENvbG9yc3RyPSIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdjb2xvcmVuZCsiKSBuby1yZXBlYXQ7IC1tcy1maWx0ZXI6ICdwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0iKwp0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2NvbG9yc3RhcnQrIiwgZW5kQ29sb3JzdHI9Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2NvbG9yZW5kKyIpJyBuby1yZXBlYXQ7IiksdGhpcy5vcHRpb25zLmNhcm91c2VsYmdpbWFnZSYmKGErPSJiYWNrZ3JvdW5kOnVybCgnIit0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2ltYWdlKyInKSBjZW50ZXIgdG9wOyIpLGM9TWF0aC5mbG9vcih0aGlzLm9wdGlvbnMud2lkdGgvKHRoaXMub3B0aW9ucy50aHVtYndpZHRoK3RoaXMub3B0aW9ucy50aHVtYmdhcCkpLDE+YyYmKGM9MSksYz0odGhpcy5vcHRpb25zLndpZHRoLWMqdGhpcy5vcHRpb25zLnRodW1id2lkdGgtKGMtMSkqdGhpcy5vcHRpb25zLnRodW1iZ2FwKS8yLGE9YSsifSIrKCIuaHRtbDVnYWxsZXJ5LXRodW1icy0iK3RoaXMuaWQrIiB7IHBvc2l0aW9uOnJlbGF0aXZlOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDoiK2MrInB4OyB3aWR0aDoiKwooInNhbWVjb2x1bW4iPT10aGlzLm9wdGlvbnMudGh1bWJyZXNwb25zaXZlPyh0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCt0aGlzLm9wdGlvbnMudGh1bWJnYXApKnRoaXMub3B0aW9ucy5jYXJvdXNlbGNvbHVtbjp0aGlzLm9wdGlvbnMud2lkdGgpKyJweDsgdG9wOjBweDsgfSIpLGErPSIgLmh0bWw1Z2FsbGVyeS10bi0iK3RoaXMuaWQrIiB7IGRpc3BsYXk6YmxvY2s7IGZsb2F0OmxlZnQ7IG1hcmdpbi1sZWZ0OjBweDsgbWFyZ2luLXJpZ2h0OiIrdGhpcy5vcHRpb25zLnRodW1iZ2FwKyJweDsgbWFyZ2luLWJvdHRvbToiK3RoaXMub3B0aW9ucy50aHVtYnJvd2dhcCsicHg7IHRleHQtYWxpZ246Y2VudGVyOyBjdXJzb3I6cG9pbnRlcjsgd2lkdGg6Iit0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCsicHg7aGVpZ2h0OiIrdGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0KyJweDtvdmVyZmxvdzpoaWRkZW47fSIsdGhpcy5vcHRpb25zLnRodW1ic2hhZG93JiYoYSs9IiAuaHRtbDVnYWxsZXJ5LXRuLSIrCnRoaXMuaWQrIiB7IC1tb3otYm94LXNoYWRvdzogMHB4IDJweCA1cHggI2FhYTsgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMnB4IDVweCAjYWFhOyBib3gtc2hhZG93OiAwcHggMnB4IDVweCAjYWFhO30iKSxhKz0iIC5odG1sNWdhbGxlcnktdG4tc2VsZWN0ZWQtIit0aGlzLmlkKyIgeyBkaXNwbGF5OmJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDowcHg7IG1hcmdpbi1yaWdodDoiK3RoaXMub3B0aW9ucy50aHVtYmdhcCsicHg7IG1hcmdpbi1ib3R0b206Iit0aGlzLm9wdGlvbnMudGh1bWJyb3dnYXArInB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgY3Vyc29yOnBvaW50ZXI7IHdpZHRoOiIrdGhpcy5vcHRpb25zLnRodW1id2lkdGgrInB4O2hlaWdodDoiK3RoaXMub3B0aW9ucy50aHVtYmhlaWdodCsicHg7b3ZlcmZsb3c6aGlkZGVuO30iLHRoaXMub3B0aW9ucy50aHVtYnNoYWRvdyYmKGErPSIgLmh0bWw1Z2FsbGVyeS10bi1zZWxlY3RlZC0iK3RoaXMuaWQrIiB7IC1tb3otYm94LXNoYWRvdzogMHB4IDJweCA1cHggI2FhYTsgLXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMnB4IDVweCAjYWFhOyBib3gtc2hhZG93OiAwcHggMnB4IDVweCAjYWFhO30iKSwKYSs9IiAuaHRtbDVnYWxsZXJ5LXRuLSIrdGhpcy5pZCsiIHtiYWNrZ3JvdW5kLWNvbG9yOiIrdGhpcy5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXJjb2xvcisiO30gLmh0bWw1Z2FsbGVyeS10bi0iK3RoaXMuaWQrIiB7IGZpbHRlcjphbHBoYShvcGFjaXR5PSIrTWF0aC5yb3VuZCgxMDAqdGhpcy5vcHRpb25zLnRodW1ib3BhY2l0eSkrIik7IG9wYWNpdHk6Iit0aGlzLm9wdGlvbnMudGh1bWJvcGFjaXR5KyI7IH0gIC5odG1sNWdhbGxlcnktdG4tc2VsZWN0ZWQtIit0aGlzLmlkKyIgeyBmaWx0ZXI6YWxwaGEob3BhY2l0eT0xMDApOyBvcGFjaXR5OjE7IH0gIixhKz0iIC5odG1sNWdhbGxlcnktdG4taW1nLSIrdGhpcy5pZCsiIHtkaXNwbGF5OmJsb2NrOyBvdmVyZmxvdzpoaWRkZW47IHdpZHRoOiIrU3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYmltYWdld2lkdGgrMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcikrInB4O2hlaWdodDoiK1N0cmluZyh0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWhlaWdodCsKMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcikrInB4O30iLHRoaXMub3B0aW9ucy50aHVtYnVuc2VsZWN0ZWRpbWFnZWJvcmRlcmNvbG9yJiYoYSs9IiAuaHRtbDVnYWxsZXJ5LXRuLXNlbGVjdGVkLSIrdGhpcy5pZCsiIHtiYWNrZ3JvdW5kLWNvbG9yOiIrdGhpcy5vcHRpb25zLnRodW1idW5zZWxlY3RlZGltYWdlYm9yZGVyY29sb3IrIjt9IiksdGhpcy5vcHRpb25zLnRodW1ic2hvd3RpdGxlPyhhKz0iIC5odG1sNWdhbGxlcnktdG4tdGl0bGUtIit0aGlzLmlkKyIge2Rpc3BsYXk6YmxvY2s7IG92ZXJmbG93OmhpZGRlbjsgZmxvYXQ6dG9wOyBoZWlnaHQ6Iit0aGlzLm9wdGlvbnMudGh1bWJ0aXRsZWhlaWdodCsicHg7d2lkdGg6IitTdHJpbmcodGhpcy5vcHRpb25zLnRodW1id2lkdGgtMikrInB4O30iLGErPSIgLmh0bWw1Z2FsbGVyeS10bi10aXRsZS0iK3RoaXMuaWQrdGhpcy5vcHRpb25zLnRodW1idGl0bGVjc3MpOmErPSIgLmh0bWw1Z2FsbGVyeS10bi10aXRsZS0iKwp0aGlzLmlkKyIge2Rpc3BsYXk6bm9uZTt9Iix0aGlzLmNhcm91c2VsSGlnaGxpZ2h0PWZ1bmN0aW9uKCl7fSk6dGhpcy5vcHRpb25zLnNob3djYXJvdXNlbD8oYSs9IiAuaHRtbDVnYWxsZXJ5LWNhci0iK3RoaXMuaWQrIiB7IHBvc2l0aW9uOmFic29sdXRlOyBkaXNwbGF5OmJsb2NrOyBvdmVyZmxvdzpoaWRkZW47IGxlZnQ6Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxMZWZ0KyJweDsgdG9wOiIrdGhpcy5vcHRpb25zLmNhcm91c2VsVG9wKyJweDsgd2lkdGg6Iit0aGlzLm9wdGlvbnMud2lkdGgrInB4OyBoZWlnaHQ6Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQrInB4OyIsYT10aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ3RyYW5zcGFyZW50P2ErImJhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7IjphKygiYm9yZGVyLXRvcDoxcHggc29saWQgIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWx0b3Bib3JkZXIrIjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJvdHRvbWJvcmRlcisKIjtiYWNrZ3JvdW5kLWNvbG9yOiAiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJnY29sb3JlbmQrIjsgYmFja2dyb3VuZDogIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2NvbG9yZW5kKyIgLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJnY29sb3JzdGFydCsiKSwgdG8oIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2NvbG9yZW5kKyIpKSBuby1yZXBlYXQ7IGJhY2tncm91bmQ6ICIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdjb2xvcmVuZCsiIC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2NvbG9yc3RhcnQrIiwgIit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2NvbG9yZW5kKyIpIG5vLXJlcGVhdDsgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0iK3RoaXMub3B0aW9ucy5jYXJvdXNlbGJnY29sb3JzdGFydCsKIiwgZW5kQ29sb3JzdHI9Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxiZ2NvbG9yZW5kKyIpIG5vLXJlcGVhdDsgLW1zLWZpbHRlcjogJ3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdjb2xvcnN0YXJ0KyIsIGVuZENvbG9yc3RyPSIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdjb2xvcmVuZCsiKScgbm8tcmVwZWF0OyIpLHRoaXMub3B0aW9ucy5jYXJvdXNlbGJnaW1hZ2UmJihhKz0iYmFja2dyb3VuZDp1cmwoJyIrdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrdGhpcy5vcHRpb25zLmNhcm91c2VsYmdpbWFnZSsiJykgY2VudGVyIHRvcDsiKSxhKz0ifSIsYSs9IiAuaHRtbDVnYWxsZXJ5LWNhci1saXN0LSIrdGhpcy5pZCsiIHsgcG9zaXRpb246YWJzb2x1dGU7IGRpc3BsYXk6YmxvY2s7IG92ZXJmbG93OmhpZGRlbjsgbGVmdDo0cHg7IHdpZHRoOiIrU3RyaW5nKHRoaXMub3B0aW9ucy53aWR0aC0KNC00KSsicHg7IHRvcDowcHg7IGhlaWdodDoiK3RoaXMub3B0aW9ucy5jYXJvdXNlbEhlaWdodCsicHg7IH0iLHRoaXMub3B0aW9ucy5jYXJvdXNlbE5hdkJ1dHRvbj0hMSxNYXRoLmZsb29yKCh0aGlzLm9wdGlvbnMud2lkdGgtNC00KS8odGhpcy5vcHRpb25zLnRodW1id2lkdGgrdGhpcy5vcHRpb25zLnRodW1iZ2FwKSk8dGhpcy5lbGVtQXJyYXkubGVuZ3RoJiYodGhpcy5vcHRpb25zLmNhcm91c2VsTmF2QnV0dG9uPSEwKSxhKz0iIC5odG1sNWdhbGxlcnktY2FyLWxlZnQtIit0aGlzLmlkKyIgeyBwb3NpdGlvbjphYnNvbHV0ZTsgb3ZlcmZsb3c6aGlkZGVuOyB3aWR0aDoiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGFycm93d2lkdGgrInB4OyBoZWlnaHQ6Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxhcnJvd2hlaWdodCsicHg7IGxlZnQ6MHB4OyB0b3A6IitTdHJpbmcodGhpcy5vcHRpb25zLmNhcm91c2VsSGVpZ2h0LzItdGhpcy5vcHRpb25zLmNhcm91c2VsYXJyb3doZWlnaHQvMikrCiJweDsgYmFja2dyb3VuZDp1cmwoJyIrdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrImNhcm91c2VsX2xlZnQucG5nJykgbm8tcmVwZWF0IDBweCAwcHg7fSAgLmh0bWw1Z2FsbGVyeS1jYXItcmlnaHQtIit0aGlzLmlkKyIgeyBwb3NpdGlvbjphYnNvbHV0ZTsgb3ZlcmZsb3c6aGlkZGVuOyB3aWR0aDoiK3RoaXMub3B0aW9ucy5jYXJvdXNlbGFycm93d2lkdGgrInB4OyBoZWlnaHQ6Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxhcnJvd2hlaWdodCsicHg7IHJpZ2h0OjBweDsgdG9wOiIrU3RyaW5nKHRoaXMub3B0aW9ucy5jYXJvdXNlbEhlaWdodC8yLXRoaXMub3B0aW9ucy5jYXJvdXNlbGFycm93aGVpZ2h0LzIpKyJweDsgYmFja2dyb3VuZDp1cmwoJyIrdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrImNhcm91c2VsX3JpZ2h0LnBuZycpIG5vLXJlcGVhdCAwcHggMHB4O30gIixjPXRoaXMub3B0aW9ucy5jYXJvdXNlbE5hdkJ1dHRvbj8yKnRoaXMub3B0aW9ucy5jYXJvdXNlbGFycm93d2lkdGgrCjg6MCxiKCIuaHRtbDVnYWxsZXJ5LWNhci1sZWZ0LSIrdGhpcy5pZCkuY3NzKHtkaXNwbGF5OnRoaXMub3B0aW9ucy5jYXJvdXNlbE5hdkJ1dHRvbj8iYmxvY2siOiJub25lIn0pLGIoIi5odG1sNWdhbGxlcnktY2FyLXJpZ2h0LSIrdGhpcy5pZCkuY3NzKHtkaXNwbGF5OnRoaXMub3B0aW9ucy5jYXJvdXNlbE5hdkJ1dHRvbj8iYmxvY2siOiJub25lIn0pLHRoaXMub3B0aW9ucy50aHVtYlNob3dOdW09TWF0aC5mbG9vcigodGhpcy5vcHRpb25zLndpZHRoLTQtNC1jKS8odGhpcy5vcHRpb25zLnRodW1id2lkdGgrdGhpcy5vcHRpb25zLnRodW1iZ2FwKSksMT50aGlzLm9wdGlvbnMudGh1bWJTaG93TnVtJiYodGhpcy5vcHRpb25zLnRodW1iU2hvd051bT0xKSx0aGlzLm9wdGlvbnMudGh1bWJNYXNrV2lkdGg9dGhpcy5vcHRpb25zLnRodW1iU2hvd051bSp0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aCt0aGlzLm9wdGlvbnMudGh1bWJTaG93TnVtKnRoaXMub3B0aW9ucy50aHVtYmdhcCx0aGlzLm9wdGlvbnMudGh1bWJUb3RhbFdpZHRoPQp0aGlzLmVsZW1BcnJheS5sZW5ndGgqdGhpcy5vcHRpb25zLnRodW1id2lkdGgrKHRoaXMuZWxlbUFycmF5Lmxlbmd0aC0xKSp0aGlzLm9wdGlvbnMudGh1bWJnYXAsYz0wLHRoaXMub3B0aW9ucy50aHVtYk1hc2tXaWR0aD50aGlzLm9wdGlvbnMudGh1bWJUb3RhbFdpZHRoJiYoYz10aGlzLm9wdGlvbnMudGh1bWJNYXNrV2lkdGgvMi10aGlzLm9wdGlvbnMudGh1bWJUb3RhbFdpZHRoLzItdGhpcy5vcHRpb25zLnRodW1iZ2FwLzIpLGErPSIuaHRtbDVnYWxsZXJ5LXRodW1icy0iK3RoaXMuaWQrIiB7IHBvc2l0aW9uOnJlbGF0aXZlOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW4tbGVmdDoiK2MrInB4OyB3aWR0aDoiK1N0cmluZyh0aGlzLmVsZW1BcnJheS5sZW5ndGgqKHRoaXMub3B0aW9ucy50aHVtYndpZHRoK3RoaXMub3B0aW9ucy50aHVtYmdhcCkpKyJweDsgdG9wOiIrTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQvMi10aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQvCjIpKyJweDsgfSIsYz1NYXRoLnJvdW5kKCh0aGlzLm9wdGlvbnMud2lkdGgtNC00KS8yLXRoaXMub3B0aW9ucy50aHVtYk1hc2tXaWR0aC8yKSxhKz0iIC5odG1sNWdhbGxlcnktY2FyLW1hc2stIit0aGlzLmlkKyIgeyBwb3NpdGlvbjphYnNvbHV0ZTsgZGlzcGxheTpibG9jazsgdGV4dC1hbGlnbjpsZWZ0OyBvdmVyZmxvdzpoaWRkZW47IGxlZnQ6IitjKyJweDsgd2lkdGg6Iit0aGlzLm9wdGlvbnMudGh1bWJNYXNrV2lkdGgrInB4OyB0b3A6MHB4OyBoZWlnaHQ6Iit0aGlzLm9wdGlvbnMuY2Fyb3VzZWxIZWlnaHQrInB4O30gIixhKz0iIC5odG1sNWdhbGxlcnktdG4tIit0aGlzLmlkKyIgeyBkaXNwbGF5OmJsb2NrOyBmbG9hdDpsZWZ0OyBtYXJnaW4tbGVmdDoiK01hdGguZmxvb3IodGhpcy5vcHRpb25zLnRodW1iZ2FwLzIpKyJweDsgbWFyZ2luLXJpZ2h0OiIrTWF0aC5mbG9vcih0aGlzLm9wdGlvbnMudGh1bWJnYXAvMikrInB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgY3Vyc29yOnBvaW50ZXI7IHdpZHRoOiIrCnRoaXMub3B0aW9ucy50aHVtYndpZHRoKyJweDtoZWlnaHQ6Iit0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrInB4O292ZXJmbG93OmhpZGRlbjt9Iix0aGlzLm9wdGlvbnMudGh1bWJzaGFkb3cmJihhKz0iIC5odG1sNWdhbGxlcnktdG4tIit0aGlzLmlkKyIgeyAtbW96LWJveC1zaGFkb3c6IDBweCAycHggNXB4ICNhYWE7IC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDJweCA1cHggI2FhYTsgYm94LXNoYWRvdzogMHB4IDJweCA1cHggI2FhYTt9IiksYSs9IiAuaHRtbDVnYWxsZXJ5LXRuLXNlbGVjdGVkLSIrdGhpcy5pZCsiIHsgZGlzcGxheTpibG9jazsgZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6IitNYXRoLmZsb29yKHRoaXMub3B0aW9ucy50aHVtYmdhcC8yKSsicHg7IG1hcmdpbi1yaWdodDoiK01hdGguZmxvb3IodGhpcy5vcHRpb25zLnRodW1iZ2FwLzIpKyJweDt0ZXh0LWFsaWduOmNlbnRlcjsgY3Vyc29yOnBvaW50ZXI7IHdpZHRoOiIrdGhpcy5vcHRpb25zLnRodW1id2lkdGgrCiJweDtoZWlnaHQ6Iit0aGlzLm9wdGlvbnMudGh1bWJoZWlnaHQrInB4O292ZXJmbG93OmhpZGRlbjt9Iix0aGlzLm9wdGlvbnMudGh1bWJzaGFkb3cmJihhKz0iIC5odG1sNWdhbGxlcnktdG4tc2VsZWN0ZWQtIit0aGlzLmlkKyIgeyAtbW96LWJveC1zaGFkb3c6IDBweCAycHggNXB4ICNhYWE7IC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDJweCA1cHggI2FhYTsgYm94LXNoYWRvdzogMHB4IDJweCA1cHggI2FhYTt9IiksYSs9IiAuaHRtbDVnYWxsZXJ5LXRuLSIrdGhpcy5pZCsiIHtiYWNrZ3JvdW5kLWNvbG9yOiIrdGhpcy5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXJjb2xvcisiO30gLmh0bWw1Z2FsbGVyeS10bi0iK3RoaXMuaWQrIiB7IGZpbHRlcjphbHBoYShvcGFjaXR5PSIrTWF0aC5yb3VuZCgxMDAqdGhpcy5vcHRpb25zLnRodW1ib3BhY2l0eSkrIik7IG9wYWNpdHk6Iit0aGlzLm9wdGlvbnMudGh1bWJvcGFjaXR5KyI7IH0gIC5odG1sNWdhbGxlcnktdG4tc2VsZWN0ZWQtIisKdGhpcy5pZCsiIHsgZmlsdGVyOmFscGhhKG9wYWNpdHk9MTAwKTsgb3BhY2l0eToxOyB9ICIsYSs9IiAuaHRtbDVnYWxsZXJ5LXRuLWltZy0iK3RoaXMuaWQrIiB7ZGlzcGxheTpibG9jazsgb3ZlcmZsb3c6aGlkZGVuOyB3aWR0aDoiK1N0cmluZyh0aGlzLm9wdGlvbnMudGh1bWJpbWFnZXdpZHRoKzIqdGhpcy5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXIpKyJweDtoZWlnaHQ6IitTdHJpbmcodGhpcy5vcHRpb25zLnRodW1iaW1hZ2VoZWlnaHQrMip0aGlzLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcikrInB4O30iLHRoaXMub3B0aW9ucy50aHVtYnVuc2VsZWN0ZWRpbWFnZWJvcmRlcmNvbG9yJiYoYSs9IiAuaHRtbDVnYWxsZXJ5LXRuLXNlbGVjdGVkLSIrdGhpcy5pZCsiIHtiYWNrZ3JvdW5kLWNvbG9yOiIrdGhpcy5vcHRpb25zLnRodW1idW5zZWxlY3RlZGltYWdlYm9yZGVyY29sb3IrIjt9IiksdGhpcy5vcHRpb25zLnRodW1ic2hvd3RpdGxlPyhhKz0iIC5odG1sNWdhbGxlcnktdG4tdGl0bGUtIisKdGhpcy5pZCsiIHtkaXNwbGF5OmJsb2NrOyBvdmVyZmxvdzpoaWRkZW47IGZsb2F0OnRvcDsgaGVpZ2h0OiIrdGhpcy5vcHRpb25zLnRodW1idGl0bGVoZWlnaHQrInB4O3dpZHRoOiIrU3RyaW5nKHRoaXMub3B0aW9ucy50aHVtYndpZHRoLTIpKyJweDt9IixhKz0iIC5odG1sNWdhbGxlcnktdG4tdGl0bGUtIit0aGlzLmlkK3RoaXMub3B0aW9ucy50aHVtYnRpdGxlY3NzKTphKz0iIC5odG1sNWdhbGxlcnktdG4tdGl0bGUtIit0aGlzLmlkKyIge2Rpc3BsYXk6bm9uZTt9Iix0aGlzLmNhcm91c2VsSGlnaGxpZ2h0PWZ1bmN0aW9uKGEsYyl7YigiI2h0bWw1Z2FsbGVyeS10bi0iK3RoaXMuaWQrIi0iK2EsdGhpcy4kZ2FsbGVyeSkucmVtb3ZlQ2xhc3MoImh0bWw1Z2FsbGVyeS10bi0iK3RoaXMuaWQpLmFkZENsYXNzKCJodG1sNWdhbGxlcnktdG4tc2VsZWN0ZWQtIit0aGlzLmlkKTtpZih0aGlzLm9wdGlvbnMudGh1bWJTaG93TnVtPj10aGlzLmVsZW1BcnJheS5sZW5ndGgpYigiLmh0bWw1Z2FsbGVyeS1jYXItbGVmdC0iKwp0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmNzcyh7ImJhY2tncm91bmQtcG9zaXRpb24iOiItIitTdHJpbmcoMip0aGlzLm9wdGlvbnMuY2Fyb3VzZWxhcnJvd3dpZHRoKSsicHggMHB4IixjdXJzb3I6IiJ9KSxiKCIuaHRtbDVnYWxsZXJ5LWNhci1sZWZ0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5kYXRhKCJkaXNhYmxlZCIsITApLGIoIi5odG1sNWdhbGxlcnktY2FyLXJpZ2h0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoiLSIrU3RyaW5nKDIqdGhpcy5vcHRpb25zLmNhcm91c2VsYXJyb3d3aWR0aCkrInB4IDBweCIsY3Vyc29yOiIifSksYigiLmh0bWw1Z2FsbGVyeS1jYXItcmlnaHQtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmRhdGEoImRpc2FibGVkIiwhMCk7ZWxzZXt2YXIgZD1NYXRoLmZsb29yKGEvdGhpcy5vcHRpb25zLnRodW1iU2hvd051bSkqdGhpcy5vcHRpb25zLnRodW1iU2hvd051bSoodGhpcy5vcHRpb25zLnRodW1id2lkdGgrCnRoaXMub3B0aW9ucy50aHVtYmdhcCk7ZD49dGhpcy5vcHRpb25zLnRodW1iVG90YWxXaWR0aC10aGlzLm9wdGlvbnMudGh1bWJNYXNrV2lkdGgrdGhpcy5vcHRpb25zLnRodW1iZ2FwJiYoZD10aGlzLm9wdGlvbnMudGh1bWJUb3RhbFdpZHRoLXRoaXMub3B0aW9ucy50aHVtYk1hc2tXaWR0aCt0aGlzLm9wdGlvbnMudGh1bWJnYXApO2Q9LWQ7Yz9iKCIuaHRtbDVnYWxsZXJ5LXRodW1icy0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY3NzKHttYXJnaW5MZWZ0OmR9KTpiKCIuaHRtbDVnYWxsZXJ5LXRodW1icy0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuYW5pbWF0ZSh7bWFyZ2luTGVmdDpkfSw1MDApO3RoaXMudXBkYXRlQ2Fyb3VzZUJ1dHRvbnMoZCl9fSx0aGlzLmNhcm91c2VsUHJldj1mdW5jdGlvbigpe3ZhciBhPWIoIi5odG1sNWdhbGxlcnktdGh1bWJzLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KTtpZigwIT1wYXJzZUludChhLmNzcygibWFyZ2luLWxlZnQiKSkpe3ZhciBjPQotMSpwYXJzZUludChhLmNzcygibWFyZ2luLWxlZnQiKSktdGhpcy5vcHRpb25zLnRodW1iU2hvd051bSoodGhpcy5vcHRpb25zLnRodW1id2lkdGgrdGhpcy5vcHRpb25zLnRodW1iZ2FwKTswPmMmJihjPTApO2EuYW5pbWF0ZSh7bWFyZ2luTGVmdDotY30sNTAwLHRoaXMub3B0aW9ucy5jYXJvdXNlbGVhc2luZyk7dGhpcy51cGRhdGVDYXJvdXNlQnV0dG9ucygtYyl9fSx0aGlzLmNhcm91c2VsTmV4dD1mdW5jdGlvbigpe3ZhciBhPWIoIi5odG1sNWdhbGxlcnktdGh1bWJzLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KTtpZihwYXJzZUludChhLmNzcygibWFyZ2luLWxlZnQiKSkhPS0odGhpcy5vcHRpb25zLnRodW1iVG90YWxXaWR0aC10aGlzLm9wdGlvbnMudGh1bWJNYXNrV2lkdGgrdGhpcy5vcHRpb25zLnRodW1iZ2FwKSl7dmFyIGM9LTEqcGFyc2VJbnQoYS5jc3MoIm1hcmdpbi1sZWZ0IikpK3RoaXMub3B0aW9ucy50aHVtYlNob3dOdW0qKHRoaXMub3B0aW9ucy50aHVtYndpZHRoKwp0aGlzLm9wdGlvbnMudGh1bWJnYXApO2M+PXRoaXMub3B0aW9ucy50aHVtYlRvdGFsV2lkdGgtdGhpcy5vcHRpb25zLnRodW1iTWFza1dpZHRoK3RoaXMub3B0aW9ucy50aHVtYmdhcCYmKGM9dGhpcy5vcHRpb25zLnRodW1iVG90YWxXaWR0aC10aGlzLm9wdGlvbnMudGh1bWJNYXNrV2lkdGgrdGhpcy5vcHRpb25zLnRodW1iZ2FwKTthLmFuaW1hdGUoe21hcmdpbkxlZnQ6LWN9LDUwMCx0aGlzLm9wdGlvbnMuY2Fyb3VzZWxlYXNpbmcpO3RoaXMudXBkYXRlQ2Fyb3VzZUJ1dHRvbnMoLWMpfX0sdGhpcy51cGRhdGVDYXJvdXNlQnV0dG9ucz1mdW5jdGlvbihhKXt2YXIgYz1iKCIuaHRtbDVnYWxsZXJ5LWNhci1sZWZ0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KSxkPWIoIi5odG1sNWdhbGxlcnktY2FyLXJpZ2h0LSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KSxlPS0xKih0aGlzLm9wdGlvbnMudGh1bWJUb3RhbFdpZHRoLXRoaXMub3B0aW9ucy50aHVtYk1hc2tXaWR0aCt0aGlzLm9wdGlvbnMudGh1bWJnYXApOwowPT1hPyhjLmNzcyh7ImJhY2tncm91bmQtcG9zaXRpb24iOiItIitTdHJpbmcoMip0aGlzLm9wdGlvbnMuY2Fyb3VzZWxhcnJvd3dpZHRoKSsicHggMHB4IixjdXJzb3I6IiJ9KSxjLmRhdGEoImRpc2FibGVkIiwhMCkpOmMuZGF0YSgiZGlzYWJsZWQiKSYmKGMuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6IjBweCAwcHgiLGN1cnNvcjoicG9pbnRlciJ9KSxjLmRhdGEoImRpc2FibGVkIiwhMSkpO2E9PWU/KGQuY3NzKHsiYmFja2dyb3VuZC1wb3NpdGlvbiI6Ii0iK1N0cmluZygyKnRoaXMub3B0aW9ucy5jYXJvdXNlbGFycm93d2lkdGgpKyJweCAwcHgiLGN1cnNvcjoiIn0pLGQuZGF0YSgiZGlzYWJsZWQiLCEwKSk6ZC5kYXRhKCJkaXNhYmxlZCIpJiYoZC5jc3MoeyJiYWNrZ3JvdW5kLXBvc2l0aW9uIjoiMHB4IDBweCIsY3Vyc29yOiJwb2ludGVyIn0pLGQuZGF0YSgiZGlzYWJsZWQiLCExKSl9KTphKz0iIC5odG1sNWdhbGxlcnktY2FyLSIrdGhpcy5pZCsiIHsgZGlzcGxheTpub25lOyB9IjsKYSs9Ii5odG1sNWdhbGxlcnktY29udGFpbmVyLSIrdGhpcy5pZCsiIGRpdiB7Ym94LXNpemluZzpjb250ZW50LWJveDt9IjtiKCJoZWFkIikuYXBwZW5kKCI8c3R5bGUgdHlwZT0ndGV4dC9jc3MnIGRhdGEtY3JlYXRvcj0naHRtbDVnYWxsZXJ5Jz4iK2ErIjwvc3R5bGU+Iil9LGh0bWwyVGV4dDpmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtiLmlubmVySFRNTD1hO3JldHVybiBiLmlubmVyVGV4dH0sbG9hZENhcm91c2VsOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxjPWIoIi5odG1sNWdhbGxlcnktdGh1bWJzLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KTtjLmVtcHR5KCk7Zm9yKHZhciBkPTA7ZDx0aGlzLmVsZW1BcnJheS5sZW5ndGg7ZCsrKXt2YXIgZT1iKCI8ZGl2ICIrKHRoaXMub3B0aW9ucy5lbmFibGV0YWJpbmRleD8idGFiaW5kZXg9JzAnICI6IiIpKyJpZD0naHRtbDVnYWxsZXJ5LXRuLSIrdGhpcy5pZCsiLSIrZCsiJyBjbGFzcz0naHRtbDVnYWxsZXJ5LXRuLSIrCnRoaXMuaWQrIicgZGF0YS1pbmRleD0iK2QrIiA+PC9kaXY+Iik7ZS5hcHBlbmRUbyhjKTtpZih0aGlzLm9wdGlvbnMuZW5hYmxldGFiaW5kZXgpZS5vbigia2V5ZG93biIsZnVuY3Rpb24oYSl7MTM9PWEua2V5Q29kZSYmYih0aGlzKS5jbGljaygpfSk7dGhpcy5vcHRpb25zLnRodW1ibGlua2ludGl0bGV8fGUub2ZmKCJjbGljayIpLmNsaWNrKGZ1bmN0aW9uKCl7YS5vblRodW1iQ2xpY2soYih0aGlzKS5kYXRhKCJpbmRleCIpKTthLnNsaWRlUnVuKGIodGhpcykuZGF0YSgiaW5kZXgiKSwhMCwhMCl9KTtlLmhvdmVyKGZ1bmN0aW9uKCl7YS5vblRodW1iT3ZlcihiKHRoaXMpLmRhdGEoImluZGV4IikpO2IodGhpcykucmVtb3ZlQ2xhc3MoImh0bWw1Z2FsbGVyeS10bi0iK2EuaWQpLmFkZENsYXNzKCJodG1sNWdhbGxlcnktdG4tc2VsZWN0ZWQtIithLmlkKX0sZnVuY3Rpb24oKXtiKHRoaXMpLmRhdGEoImluZGV4IikhPT1hLmN1ckVsZW0mJmIodGhpcykucmVtb3ZlQ2xhc3MoImh0bWw1Z2FsbGVyeS10bi1zZWxlY3RlZC0iKwphLmlkKS5hZGRDbGFzcygiaHRtbDVnYWxsZXJ5LXRuLSIrYS5pZCl9KTtlPW5ldyBJbWFnZTtlLmRhdGE9ZDtiKGUpLm9uKCJsb2FkIixmdW5jdGlvbigpe2IodGhpcykuZGF0YSgib3JpZ2luYWx3aWR0aCIsdGhpcy53aWR0aCk7Yih0aGlzKS5kYXRhKCJvcmlnaW5hbGhlaWdodCIsdGhpcy5oZWlnaHQpO3ZhciBkPU1hdGgubWF4KGEub3B0aW9ucy50aHVtYmltYWdld2lkdGgvdGhpcy53aWR0aCxhLm9wdGlvbnMudGh1bWJpbWFnZWhlaWdodC90aGlzLmhlaWdodCksZT1NYXRoLnJvdW5kKGQqdGhpcy53aWR0aCksZD1NYXRoLnJvdW5kKGQqdGhpcy5oZWlnaHQpLGg9YS5vcHRpb25zLnRodW1ic2hvd3BsYXlvbnZpZGVvJiYxIT1hLmVsZW1BcnJheVt0aGlzLmRhdGFdWzldPyI8ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktdG4taW1nLXBsYXktIithLmlkKyInIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyBvdmVyZmxvdzpoaWRkZW47IHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyB0b3A6IisKYS5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXIrInB4OyBsZWZ0OiIrYS5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXIrJ3B4O2JhY2tncm91bmQ6dXJsKCInK2Eub3B0aW9ucy5wbGF5dmlkZW90aHVtYmltYWdlKyJcIikgbm8tcmVwZWF0IGNlbnRlciBjZW50ZXI7Jz48L2Rpdj4iOiIiLGc9YS5vcHRpb25zLmFkZHRodW1ibmFpbHRpdGxlJiZhLmVsZW1BcnJheVt0aGlzLmRhdGFdWzddPycgdGl0bGU9IicrYS5lbGVtQXJyYXlbdGhpcy5kYXRhXVs3XSsnIic6IiI7YS5vcHRpb25zLmNhcm91c2VsbXVsdGlyb3dzJiYic2FtZWNvbHVtbiI9PWEub3B0aW9ucy50aHVtYnJlc3BvbnNpdmU/YigiI2h0bWw1Z2FsbGVyeS10bi0iK2EuaWQrIi0iK3RoaXMuZGF0YSxjKS5hcHBlbmQoIjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS10bi1pbWctIithLmlkKyInIitnKyIgc3R5bGU9J3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOiIrU3RyaW5nKGEub3B0aW9ucy50aHVtYmltYWdld2lkdGgrMiphLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcikrCiJweDtoZWlnaHQ6IitTdHJpbmcoYS5vcHRpb25zLnRodW1iaW1hZ2VoZWlnaHQrMiphLm9wdGlvbnMudGh1bWJpbWFnZWJvcmRlcikrInB4Oyc+PGRpdiBzdHlsZT0nZGlzcGxheTpibG9jazsgb3ZlcmZsb3c6aGlkZGVuOyBwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6IithLm9wdGlvbnMudGh1bWJpbWFnZXdpZHRoKyJweDtoZWlnaHQ6IithLm9wdGlvbnMudGh1bWJpbWFnZWhlaWdodCsicHg7IHRvcDoiK2Eub3B0aW9ucy50aHVtYmltYWdlYm9yZGVyKyJweDsgbGVmdDoiK2Eub3B0aW9ucy50aHVtYmltYWdlYm9yZGVyKyJweDsnPjxpbWcgYWx0PSciK2EuaHRtbDJUZXh0KGEuZWxlbUFycmF5W3RoaXMuZGF0YV1bN10pKyInIisoYS5vcHRpb25zLmFkZGltZ3RpdGxlPyIgdGl0bGU9JyIrYS5odG1sMlRleHQoYS5lbGVtQXJyYXlbdGhpcy5kYXRhXVs3XSkrIiciOiIiKSsiIGRhdGEtb3JpZ2luYWx3aWR0aD0iK3RoaXMud2lkdGgrIiBkYXRhLW9yaWdpbmFsaGVpZ2h0PSIrdGhpcy5oZWlnaHQrCiIgY2xhc3M9J2h0bWw1Z2FsbGVyeS10bi1pbWFnZS0iK2EuaWQrIiciK2crIiBzdHlsZT0nYm9yZGVyOm5vbmU7IHBhZGRpbmc6MHB4OyBtYXJnaW46MHB4OyBtYXgtd2lkdGg6MTAwJTsgbWF4LWhlaWdodDpub25lOyB3aWR0aDoiK2UrInB4OyBoZWlnaHQ6IitkKyJweDsnIHNyYz0nIithLmVsZW1BcnJheVt0aGlzLmRhdGFdWzFdKyInIC8+PC9kaXY+IitoKyI8L2Rpdj48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktdG4tdGl0bGUtIithLmlkKyInIHN0eWxlPSd3aWR0aDoiK1N0cmluZyhhLm9wdGlvbnMudGh1bWJ3aWR0aC0yKSsicHg7Jz4iK2EuZWxlbUFycmF5W3RoaXMuZGF0YV1bN10rKGEub3B0aW9ucy50aHVtYnNob3dkZXNjcmlwdGlvbj8iPGJyIC8+PHNwYW4gY2xhc3M9J2h0bWw1Z2FsbGVyeS10bi1kZXNjcmlwdGlvbi0iK2EuaWQrIic+IithLmVsZW1BcnJheVt0aGlzLmRhdGFdWzhdKyI8L3NwYW4+IjoiIikrIjwvZGl2PiIpOmIoIiNodG1sNWdhbGxlcnktdG4tIithLmlkKwoiLSIrdGhpcy5kYXRhLGMpLmFwcGVuZCgiPGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LXRuLWltZy0iK2EuaWQrIiciK2crIiBzdHlsZT0ncG9zaXRpb246cmVsYXRpdmU7Jz48ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrOyBvdmVyZmxvdzpoaWRkZW47IHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoiK2Eub3B0aW9ucy50aHVtYmltYWdld2lkdGgrInB4O2hlaWdodDoiK2Eub3B0aW9ucy50aHVtYmltYWdlaGVpZ2h0KyJweDsgdG9wOiIrYS5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXIrInB4OyBsZWZ0OiIrYS5vcHRpb25zLnRodW1iaW1hZ2Vib3JkZXIrInB4Oyc+PGltZyBhbHQ9JyIrYS5odG1sMlRleHQoYS5lbGVtQXJyYXlbdGhpcy5kYXRhXVs3XSkrIiciKyhhLm9wdGlvbnMuYWRkaW1ndGl0bGU/IiB0aXRsZT0nIithLmh0bWwyVGV4dChhLmVsZW1BcnJheVt0aGlzLmRhdGFdWzddKSsiJyI6IiIpKyIgZGF0YS1vcmlnaW5hbHdpZHRoPSIrdGhpcy53aWR0aCsiIGRhdGEtb3JpZ2luYWxoZWlnaHQ9IisKdGhpcy5oZWlnaHQrIiBjbGFzcz0naHRtbDVnYWxsZXJ5LXRuLWltYWdlLSIrYS5pZCsiJyIrZysiIHN0eWxlPSdib3JkZXI6bm9uZTsgcGFkZGluZzowcHg7IG1hcmdpbjowcHg7IG1heC13aWR0aDoxMDAlOyBtYXgtaGVpZ2h0Om5vbmU7IHdpZHRoOiIrZSsicHg7IGhlaWdodDoiK2QrInB4Oycgc3JjPSciK2EuZWxlbUFycmF5W3RoaXMuZGF0YV1bMV0rIicgLz48L2Rpdj4iK2grIjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS10bi10aXRsZS0iK2EuaWQrIic+IithLmVsZW1BcnJheVt0aGlzLmRhdGFdWzddKyhhLm9wdGlvbnMudGh1bWJzaG93ZGVzY3JpcHRpb24/IjxiciAvPjxzcGFuIGNsYXNzPSdodG1sNWdhbGxlcnktdG4tZGVzY3JpcHRpb24tIithLmlkKyInPiIrYS5lbGVtQXJyYXlbdGhpcy5kYXRhXVs4XSsiPC9zcGFuPiI6IiIpKyI8L2Rpdj4iKTthLm9wdGlvbnMudGh1bWJsaW5raW50aXRsZSYmYigiLmh0bWw1Z2FsbGVyeS10bi1pbWctIithLmlkLGMpLm9mZigiY2xpY2siKS5jbGljayhmdW5jdGlvbigpe2Eub25UaHVtYkNsaWNrKGIodGhpcykucGFyZW50KCkuZGF0YSgiaW5kZXgiKSk7CmEuc2xpZGVSdW4oYih0aGlzKS5wYXJlbnQoKS5kYXRhKCJpbmRleCIpLCEwLCEwKX0pfSk7ZS5zcmM9dGhpcy5lbGVtQXJyYXlbZF1bMV19dGhpcy5vcHRpb25zLmNhcm91c2VsbXVsdGlyb3dzJiZjLmFwcGVuZCgiPGRpdiBzdHlsZT0nY2xlYXI6Ym90aDsnPjwvZGl2PiIpfSxnb05vcm1hbDpmdW5jdGlvbigpe3RoaXMuaXNGdWxsc2NyZWVuPSExOzA8YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLWJveC0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikubGVuZ3RoJiZiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tYm94LSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5zdG9wKCk7dGhpcy5zbGlkZXNob3dUaW1lb3V0LnN0b3AoKTtiKGRvY3VtZW50KS5vZmYoImtleXVwLmh0bWw1Z2FsbGVyeSIpO2IoIi5odG1sNWdhbGxlcnktdGltZXItIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmNzcyh7d2lkdGg6MH0pO2lmKDA8YigiLmh0bWw1Z2FsbGVyeS1lbGVtLSIrdGhpcy5pZCwKdGhpcy4kZnVsbHNjcmVlbikubGVuZ3RoKXt2YXIgYT1iKCIuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmVtcHR5KCkuY3NzKHt0b3A6dGhpcy5vcHRpb25zLmVsZW1Ub3B9KTtiKCIuaHRtbDVnYWxsZXJ5LWJveC0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkucHJlcGVuZChhKX10aGlzLnNsaWRlUnVuKHRoaXMuY3VyRWxlbSk7dGhpcy4kZnVsbHNjcmVlbi5yZW1vdmUoKTsic2hvdyI9PXRoaXMub3B0aW9ucy5pbWFnZXRvb2xib3htb2RlP3RoaXMuc2hvd2ltYWdldG9vbGJveCh0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzldKTp0aGlzLmhpZGVpbWFnZXRvb2xib3goKX0sZ29GdWxsc2NyZWVuOmZ1bmN0aW9uKCl7dGhpcy5oaWRlaW1hZ2V0b29sYm94KCk7dGhpcy5zbGlkZXNob3dUaW1lb3V0LnN0b3AoKTtiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tdGltZXItIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcyh7d2lkdGg6MH0pOwp0aGlzLmlzRnVsbHNjcmVlbj0hMDt0aGlzLmZ1bGxzY3JlZW5Jbml0aWFsPTIwO3RoaXMuZnVsbHNjcmVlbk1hcmdpbj10aGlzLm9wdGlvbnMubGlnaHRib3hib3JkZXI7dGhpcy5mdWxsc2NyZWVuQmFySD10aGlzLm9wdGlvbnMubGlnaHRib3h0ZXh0aGVpZ2h0O3RoaXMuZnVsbHNjcmVlbk91dHNpZGVNYXJnaW49dGhpcy5vcHRpb25zLmxpZ2h0Ym94bWFyZ2luO3ZhciBhPWIod2luZG93KS53aWR0aCgpLGM9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxMF0sZD10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzExXTt0aGlzLmZ1bGxzY3JlZW5XaWR0aD1hLTIqdGhpcy5mdWxsc2NyZWVuTWFyZ2luLTIqdGhpcy5mdWxsc2NyZWVuT3V0c2lkZU1hcmdpbjt2YXIgZT1iKHdpbmRvdykuaGVpZ2h0KCk7dGhpcy5mdWxsc2NyZWVuSGVpZ2h0PWUtMip0aGlzLmZ1bGxzY3JlZW5NYXJnaW4tdGhpcy5mdWxsc2NyZWVuQmFySC0yKnRoaXMuZnVsbHNjcmVlbk91dHNpZGVNYXJnaW47CnZhciBmPU1hdGgubWF4KGUsYihkb2N1bWVudCkuaGVpZ2h0KCkpLGo9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxN10/TWF0aC5taW4odGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxN10sdGhpcy5mdWxsc2NyZWVuV2lkdGgpOnRoaXMuZnVsbHNjcmVlbldpZHRoLGw9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxOF0/TWF0aC5taW4odGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxOF0sdGhpcy5mdWxsc2NyZWVuSGVpZ2h0KTp0aGlzLmZ1bGxzY3JlZW5IZWlnaHQsaj1NYXRoLm1pbihqL2MsbC9kKTsxPmomJihjKj1qLGQqPWopO2U9Yih3aW5kb3cpLnNjcm9sbFRvcCgpK01hdGgucm91bmQoKGUtKGQrMip0aGlzLmZ1bGxzY3JlZW5NYXJnaW4rdGhpcy5mdWxsc2NyZWVuQmFySCkpLzIpO3RoaXMuJGZ1bGxzY3JlZW49YigiPGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tIit0aGlzLmlkKyInIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MHB4O2xlZnQ6MHB4O3dpZHRoOiIrCmErInB4O2hlaWdodDoiK2YrInB4O3RleHQtYWxpZ246Y2VudGVyO3otaW5kZXg6OTk5OTk7Jz48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktZnVsbHNjcmVlbi1vdmVybGF5LSIrdGhpcy5pZCsiJyBzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MHB4O2xlZnQ6MHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwO29wYWNpdHk6MC45O2ZpbHRlcjphbHBoYShvcGFjaXR5PTgwKTsnPjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLWJveC0iK3RoaXMuaWQrIicgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowcHggYXV0bzt0b3A6IitlKyJweDt3aWR0aDoiK3RoaXMuZnVsbHNjcmVlbkluaXRpYWwrInB4O2hlaWdodDoiK3RoaXMuZnVsbHNjcmVlbkluaXRpYWwrInB4Oyc+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tZWxlbS0iKwp0aGlzLmlkKyInIHN0eWxlPSdkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjt3aWR0aDoiK1N0cmluZyhjKzIqdGhpcy5mdWxsc2NyZWVuTWFyZ2luKSsicHg7aGVpZ2h0OiIrU3RyaW5nKGQrMip0aGlzLmZ1bGxzY3JlZW5NYXJnaW4pKyJweDtiYWNrZ3JvdW5kLWNvbG9yOiIrdGhpcy5vcHRpb25zLmxpZ2h0Ym94Ymdjb2xvcisiOyc+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tZWxlbS13cmFwcGVyLSIrdGhpcy5pZCsiJyBzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47bWFyZ2luOiIrdGhpcy5mdWxsc2NyZWVuTWFyZ2luKyJweDsnPjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLXRpbWVyLSIrdGhpcy5pZCsiJyBzdHlsZT0nZGlzcGxheTpibG9jazsgcG9zaXRpb246YWJzb2x1dGU7IHRvcDoiK1N0cmluZyhkLTQpKyJweDsgbGVmdDowcHg7IHdpZHRoOjBweDsgaGVpZ2h0OjRweDsgYmFja2dyb3VuZC1jb2xvcjojNjY2OyBmaWx0ZXI6YWxwaGEob3BhY2l0eT02MCk7IG9wYWNpdHk6MC42Oyc+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tYmFyLSIrCnRoaXMuaWQrIicgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6IitTdHJpbmcoYysyKnRoaXMuZnVsbHNjcmVlbk1hcmdpbikrInB4O2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MzZweDtiYWNrZ3JvdW5kLWNvbG9yOiIrdGhpcy5vcHRpb25zLmxpZ2h0Ym94Ymdjb2xvcisiOyc+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tYmFyLXdyYXBwZXItIit0aGlzLmlkKyInIHN0eWxlPSdkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MHB4ICIrdGhpcy5mdWxsc2NyZWVuTWFyZ2luKyJweCAiK3RoaXMuZnVsbHNjcmVlbk1hcmdpbisicHggIit0aGlzLmZ1bGxzY3JlZW5NYXJnaW4rInB4Oyc+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tY2xvc2UtIit0aGlzLmlkKyInIHN0eWxlPSdkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2Zsb2F0OnJpZ2h0O2N1cnNvcjpwb2ludGVyO3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7dG9wOjBweDtiYWNrZ3JvdW5kLWltYWdlOnVybChcIiIrCnRoaXMub3B0aW9ucy5za2luZm9sZGVyKyJsaWdodGJveF9jbG9zZS5wbmdcIik7Jz48L2Rpdj48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktZnVsbHNjcmVlbi1wbGF5LSIrdGhpcy5pZCsiJyBzdHlsZT0nZGlzcGxheToiKyh0aGlzLmlzUGF1c2VkJiYxPHRoaXMuZWxlbUFycmF5Lmxlbmd0aCYmMT09dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVs5XT8iYmxvY2siOiJub25lIikrJztwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpyaWdodDtjdXJzb3I6cG9pbnRlcjt3aWR0aDozMnB4O2hlaWdodDozMnB4O3RvcDowcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoIicrdGhpcy5vcHRpb25zLnNraW5mb2xkZXIrImxpZ2h0Ym94X3BsYXkucG5nXCIpOyc+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tcGF1c2UtIit0aGlzLmlkKyInIHN0eWxlPSdkaXNwbGF5OiIrKHRoaXMuaXNQYXVzZWR8fDE+PXRoaXMuZWxlbUFycmF5Lmxlbmd0aHx8MSE9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVs5XT8KIm5vbmUiOiJibG9jayIpKyc7cG9zaXRpb246cmVsYXRpdmU7ZmxvYXQ6cmlnaHQ7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDt0b3A6MHB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCInK3RoaXMub3B0aW9ucy5za2luZm9sZGVyKyJsaWdodGJveF9wYXVzZS5wbmdcIik7Jz48L2Rpdj48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktZnVsbHNjcmVlbi10aXRsZS0iK3RoaXMuaWQrIicgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxvYXQ6bGVmdDt3aWR0aDoiK1N0cmluZyhjLTIqdGhpcy5mdWxsc2NyZWVuTWFyZ2luLTcyKSsicHg7aGVpZ2h0OmF1dG87dG9wOjBweDtsZWZ0OjBweDt0ZXh0LWFsaWduOmxlZnQ7Jz48L2Rpdj48ZGl2IHN0eWxlPSdjbGVhcjpib3RoOyc+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tbmV4dC0iK3RoaXMuaWQrIicgc3R5bGU9J2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcjt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O3JpZ2h0OiIrCnRoaXMuZnVsbHNjcmVlbk1hcmdpbisicHg7dG9wOiIrTWF0aC5yb3VuZChkLzIpKydweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiJyt0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcisibGlnaHRib3hfbmV4dC5wbmdcIik7Jz48L2Rpdj48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktZnVsbHNjcmVlbi1wcmV2LSIrdGhpcy5pZCsiJyBzdHlsZT0nZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO2N1cnNvcjpwb2ludGVyO3dpZHRoOjQ4cHg7aGVpZ2h0OjQ4cHg7bGVmdDoiK3RoaXMuZnVsbHNjcmVlbk1hcmdpbisicHg7dG9wOiIrTWF0aC5yb3VuZChkLzIpKydweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiJyt0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcisibGlnaHRib3hfcHJldi5wbmdcIik7Jz48L2Rpdj48L2Rpdj48L2Rpdj4iKTt0aGlzLiRmdWxsc2NyZWVuLmFwcGVuZFRvKCJib2R5Iik7dmFyIGc9dGhpcztiKHdpbmRvdykuc2Nyb2xsKGZ1bmN0aW9uKCl7aWYoIWcub3B0aW9ucy5pc01vYmlsZXx8Cmcub3B0aW9ucy5tb2JpbGVyZXNpemVldmVudCl7dmFyIGE9YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLWJveC0iK2cuaWQsZy4kZnVsbHNjcmVlbiksYz1iKHdpbmRvdykuaGVpZ2h0KCksYz1iKHdpbmRvdykuc2Nyb2xsVG9wKCkrTWF0aC5yb3VuZCgoYy1hLmhlaWdodCgpKS8yKTthLmNzcyh7dG9wOmN9KX19KTt0aGlzLmNyZWF0ZVNvY2lhbCghMCk7YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLWJveC0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuYW5pbWF0ZSh7aGVpZ2h0OmQrMip0aGlzLmZ1bGxzY3JlZW5NYXJnaW59LCJzbG93IixmdW5jdGlvbigpe2IodGhpcykuYW5pbWF0ZSh7d2lkdGg6YysyKmcuZnVsbHNjcmVlbk1hcmdpbn0sInNsb3ciLGZ1bmN0aW9uKCl7Yih0aGlzKS5hbmltYXRlKHtoZWlnaHQ6Iis9IitnLmZ1bGxzY3JlZW5CYXJIfSwic2xvdyIsZnVuY3Rpb24oKXtpZihnLmlzRnVsbHNjcmVlbil7dmFyIGE9YigiLmh0bWw1Z2FsbGVyeS1lbGVtLSIrCmcuaWQsZy4kZ2FsbGVyeSkuZW1wdHkoKS5jc3Moe3RvcDowLHBvc2l0aW9uOiJyZWxhdGl2ZSJ9KTtiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tZWxlbS13cmFwcGVyLSIrZy5pZCxnLiRmdWxsc2NyZWVuKS5wcmVwZW5kKGEpO2cuc2xpZGVSdW4oZy5jdXJFbGVtKTtnLm9wdGlvbnMuc2hvd3NvY2lhbCYmYigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLXNvY2lhbC0iK2cuaWQsZy4kZnVsbHNjcmVlbikuc2hvdygpfX0pfSl9KTtiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tb3ZlcmxheS0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuY2xpY2soZnVuY3Rpb24oKXtnLmdvTm9ybWFsKCl9KTtiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tYm94LSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5ob3ZlcihmdW5jdGlvbigpezE8Zy5lbGVtQXJyYXkubGVuZ3RoJiYoYigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLW5leHQtIitnLmlkLGcuJGZ1bGxzY3JlZW4pLmZhZGVJbigpLApiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tcHJldi0iK2cuaWQsZy4kZnVsbHNjcmVlbikuZmFkZUluKCkpfSxmdW5jdGlvbigpe2IoIi5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1uZXh0LSIrZy5pZCxnLiRmdWxsc2NyZWVuKS5mYWRlT3V0KCk7YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLXByZXYtIitnLmlkLGcuJGZ1bGxzY3JlZW4pLmZhZGVPdXQoKX0pO2cub3B0aW9ucy5lbmFibGV0b3VjaHN3aXBlJiYoYT1nLm9wdGlvbnMuaXNBbmRyb2lkJiZnLm9wdGlvbnMuZW5hYmxldG91Y2hzd2lwZW9uYW5kcm9pZD8hMDohMSxiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tYm94LSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS50b3VjaFN3aXBlKHtwcmV2ZW50V2ViQnJvd3NlcjphLHN3aXBlTGVmdDpmdW5jdGlvbigpe2cuZGlzYWJsZVRvdWNoU3dpcGV8fGcuc2xpZGVSdW4oLTEpfSxzd2lwZVJpZ2h0OmZ1bmN0aW9uKCl7Zy5kaXNhYmxlVG91Y2hTd2lwZXx8Zy5zbGlkZVJ1bigtMil9fSkpOwpiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tY2xvc2UtIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNsaWNrKGZ1bmN0aW9uKCl7Zy5nb05vcm1hbCgpfSk7YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLW5leHQtIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNsaWNrKGZ1bmN0aW9uKCl7Zy5zbGlkZVJ1bigtMSl9KTtiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tcHJldi0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuY2xpY2soZnVuY3Rpb24oKXtnLnNsaWRlUnVuKC0yKX0pO2IoIi5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1wbGF5LSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5jbGljayhmdW5jdGlvbigpe2IoIi5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1wbGF5LSIrZy5pZCxnLiRmdWxsc2NyZWVuKS5oaWRlKCk7YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLXBhdXNlLSIrZy5pZCxnLiRmdWxsc2NyZWVuKS5zaG93KCk7Zy5pc1BhdXNlZD0hMTsKZy5zbGlkZXNob3dUaW1lb3V0LnNldEludGVydmFsKGcuZWxlbUFycmF5W2cuY3VyRWxlbV1bMTZdP2cuZWxlbUFycmF5W2cuY3VyRWxlbV1bMTZdOmcub3B0aW9ucy5zbGlkZXNob3dpbnRlcnZhbCk7Zy5zbGlkZXNob3dUaW1lb3V0LnN0YXJ0KCk7YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLXRpbWVyLSIrZy5pZCxnLiRmdWxsc2NyZWVuKS5jc3Moe3dpZHRoOjB9KX0pO2IoIi5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1wYXVzZS0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuY2xpY2soZnVuY3Rpb24oKXtiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tcGxheS0iK2cuaWQsZy4kZnVsbHNjcmVlbikuc2hvdygpO2IoIi5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1wYXVzZS0iK2cuaWQsZy4kZnVsbHNjcmVlbikuaGlkZSgpO2cuaXNQYXVzZWQ9ITA7Zy5zbGlkZXNob3dUaW1lb3V0LnN0b3AoKTtiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tdGltZXItIitnLmlkLGcuJGZ1bGxzY3JlZW4pLmNzcyh7d2lkdGg6MH0pfSk7CmIoZG9jdW1lbnQpLm9uKCJrZXl1cC5odG1sNWdhbGxlcnkiLGZ1bmN0aW9uKGEpezI3PT1hLmtleUNvZGU/Zy5nb05vcm1hbCgpOjM5PT1hLmtleUNvZGU/Zy5zbGlkZVJ1bigtMSk6Mzc9PWEua2V5Q29kZSYmZy5zbGlkZVJ1bigtMil9KX0sY2FsY0luZGV4OmZ1bmN0aW9uKGEpe3RoaXMuc2F2ZWRFbGVtPXRoaXMuY3VyRWxlbTstMj09YT8odGhpcy5uZXh0RWxlbT10aGlzLmN1ckVsZW0sdGhpcy5jdXJFbGVtPXRoaXMucHJldkVsZW0sdGhpcy5wcmV2RWxlbT0wPnRoaXMuY3VyRWxlbS0xP3RoaXMuZWxlbUFycmF5Lmxlbmd0aC0xOnRoaXMuY3VyRWxlbS0xKTotMT09YT8odGhpcy5wcmV2RWxlbT10aGlzLmN1ckVsZW0sdGhpcy5jdXJFbGVtPXRoaXMubmV4dEVsZW0sdGhpcy5uZXh0RWxlbT10aGlzLmN1ckVsZW0rMT49dGhpcy5lbGVtQXJyYXkubGVuZ3RoPzA6dGhpcy5jdXJFbGVtKzEpOjA8PWEmJih0aGlzLmN1ckVsZW09YSx0aGlzLnByZXZFbGVtPTA+dGhpcy5jdXJFbGVtLQoxP3RoaXMuZWxlbUFycmF5Lmxlbmd0aC0xOnRoaXMuY3VyRWxlbS0xLHRoaXMubmV4dEVsZW09dGhpcy5jdXJFbGVtKzE+PXRoaXMuZWxlbUFycmF5Lmxlbmd0aD8wOnRoaXMuY3VyRWxlbSsxKX0sc2hvd1NsaWRlVGltZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE2XT90aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE2XTp0aGlzLm9wdGlvbnMuc2xpZGVzaG93aW50ZXJ2YWw7dGhpcy5zbGlkZVRpbWVyQ291bnQrKzt0aGlzLmlzRnVsbHNjcmVlbj9iKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tdGltZXItIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLndpZHRoKE1hdGgucm91bmQoNTAqYigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLWVsZW0td3JhcHBlci0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikud2lkdGgoKSoodGhpcy5zbGlkZVRpbWVyQ291bnQrMSkvYSkpOmIoIi5odG1sNWdhbGxlcnktdGltZXItIit0aGlzLmlkLAp0aGlzLiRnYWxsZXJ5KS53aWR0aChNYXRoLnJvdW5kKDUwKnRoaXMub3B0aW9ucy5ib3hXaWR0aCoodGhpcy5zbGlkZVRpbWVyQ291bnQrMSkvYSkpfSxzZXRIZDpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bOV0sZD10aGlzLmlzSGQhPWEmJmImJig1PT1kfHw2PT1kfHw3PT1kfHw4PT1kKTt0aGlzLmlzSGQ9YTtkJiZ0aGlzLnNsaWRlUnVuKHRoaXMuY3VyRWxlbSwhMSwhMSwhMCl9LGVuYWJsZVVwZGF0ZUNhcm91c2VsOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxldXBkYXRlY2Fyb3VzZWw9ITF9LHNsaWRlUnVuOmZ1bmN0aW9uKGEsYyxkLGUpe3RoaXMuc2xpZGVzaG93VGltZW91dC5zdG9wKCk7dGhpcy5pc0Z1bGxzY3JlZW4/YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLXRpbWVyLSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5jc3Moe3dpZHRoOjB9KTpiKCIuaHRtbDVnYWxsZXJ5LXRpbWVyLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5jc3Moe3dpZHRoOjB9KTsKdGhpcy5vcHRpb25zLnNob3djYXJvdXNlbCYmMDw9dGhpcy5jdXJFbGVtJiZiKCIjaHRtbDVnYWxsZXJ5LXRuLSIrdGhpcy5pZCsiLSIrdGhpcy5jdXJFbGVtLHRoaXMuJGdhbGxlcnkpLnJlbW92ZUNsYXNzKCJodG1sNWdhbGxlcnktdG4tc2VsZWN0ZWQtIit0aGlzLmlkKS5hZGRDbGFzcygiaHRtbDVnYWxsZXJ5LXRuLSIrdGhpcy5pZCk7dGhpcy5jYWxjSW5kZXgoYSk7dGhpcy5vcHRpb25zLnNvY2lhbHVybGZvcmVhY2gmJnRoaXMuY3JlYXRlU29jaWFsTWVkaWEoKTshdGhpcy5pc0Z1bGxzY3JlZW4mJnRoaXMub3B0aW9ucy5zaG93Y2Fyb3VzZWwmJihiKCIjaHRtbDVnYWxsZXJ5LXRuLSIrdGhpcy5pZCsiLSIrdGhpcy5jdXJFbGVtLHRoaXMuJGdhbGxlcnkpLnJlbW92ZUNsYXNzKCJodG1sNWdhbGxlcnktdG4tIit0aGlzLmlkKS5hZGRDbGFzcygiaHRtbDVnYWxsZXJ5LXRuLXNlbGVjdGVkLSIrdGhpcy5pZCksIXRoaXMub3B0aW9ucy5ub3R1cGRhdGVjYXJvdXNlbCYmIXRoaXMuZGlzYWJsZXVwZGF0ZWNhcm91c2VsJiYKdGhpcy5jYXJvdXNlbEhpZ2hsaWdodCh0aGlzLmN1ckVsZW0pKTtpZih0aGlzLm9wdGlvbnMuc2hvd3RpdGxlfHx0aGlzLm9wdGlvbnMubGlnaHRib3hzaG93dGl0bGV8fHRoaXMub3B0aW9ucy5saWdodGJveHNob3dkZXNjcmlwdGlvbil7YT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzddO3ZhciBmPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bOF07dGhpcy5vcHRpb25zLnNob3dudW1iZXJpbmcmJihhPXRoaXMub3B0aW9ucy5udW1iZXJpbmdmb3JtYXQucmVwbGFjZSgiJU5VTSIsdGhpcy5jdXJFbGVtKzEpLnJlcGxhY2UoIiVUT1RBTCIsdGhpcy5lbGVtQXJyYXkubGVuZ3RoKSsiICIrYSk7aWYodGhpcy5pc0Z1bGxzY3JlZW4pe3ZhciBqPSIiO3RoaXMub3B0aW9ucy5saWdodGJveHNob3d0aXRsZSYmYSYmKGorPWEpO3RoaXMub3B0aW9ucy5saWdodGJveHNob3dkZXNjcmlwdGlvbiYmZiYmKGorPSI8ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktZnVsbHNjcmVlbi1kZXNjcmlwdGlvbi0iKwp0aGlzLmlkKyInPiIrZisiPC9kaXY+Iik7YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLXRpdGxlLSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5odG1sKGopfWVsc2UgdGhpcy5vcHRpb25zLnNob3d0aXRsZSYmKGo9IiIsYSYmKGorPSI8ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktdGl0bGUtdGV4dC0iK3RoaXMuaWQrIic+IithKyI8L2Rpdj4iKSx0aGlzLm9wdGlvbnMuc2hvd2Rlc2NyaXB0aW9uJiZmJiYoais9IjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1kZXNjcmlwdGlvbi10ZXh0LSIrdGhpcy5pZCsiJz4iK2YrIjwvZGl2PiIpLGIoIi5odG1sNWdhbGxlcnktdGl0bGUtIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmh0bWwoaikpOyghdGhpcy5vcHRpb25zLnRpdGxlb3ZlcmxheXx8IXRoaXMub3B0aW9ucy50aXRsZWF1dG9oaWRlKSYmYigiLmh0bWw1Z2FsbGVyeS10aXRsZS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuc2hvdygpfWE9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVs5XTsKaWYoISgwPmEpKXshdGhpcy5pc0Z1bGxzY3JlZW4mJmM/ImFsd2F5cyI9PXRoaXMub3B0aW9ucy5zaG93aW1hZ2V0b29sYm94PygibW91c2VvdmVyIj09dGhpcy5vcHRpb25zLmltYWdldG9vbGJveG1vZGV8fCJzaG93Ij09dGhpcy5vcHRpb25zLmltYWdldG9vbGJveG1vZGUpJiZ0aGlzLnNob3dpbWFnZXRvb2xib3goYSk6ImltYWdlIj09dGhpcy5vcHRpb25zLnNob3dpbWFnZXRvb2xib3gmJjEhPWEmJnRoaXMuaGlkZWltYWdldG9vbGJveCgpOiJzaG93Ij09dGhpcy5vcHRpb25zLmltYWdldG9vbGJveG1vZGU/dGhpcy5zaG93aW1hZ2V0b29sYm94KGEpOnRoaXMuaGlkZWltYWdldG9vbGJveCgpO3RoaXMub25DaGFuZ2UoKTtjPWIoIi5odG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQsbCk7Yy5maW5kKCJpZnJhbWUiKS5lYWNoKGZ1bmN0aW9uKCl7Yih0aGlzKS5hdHRyKCJzcmMiLCIiKX0pO2MuZmluZCgidmlkZW8iKS5lYWNoKGZ1bmN0aW9uKCl7Yih0aGlzKS5hdHRyKCJzcmMiLAoiIil9KTt0aGlzLmlzVmlkZW9QbGF5aW5nPXRoaXMuZGlzYWJsZVRvdWNoU3dpcGU9ITE7ZD10aGlzLm9wdGlvbnMuYXV0b3BsYXl2aWRlb3x8dGhpcy5vcHRpb25zLnBsYXl2aWRlb29uY2xpY2smJmR8fGU7dmFyIGw9dGhpcy5pc0Z1bGxzY3JlZW4/dGhpcy4kZnVsbHNjcmVlbjp0aGlzLiRnYWxsZXJ5O3RoaXMuc2hvd2luZ1Bvc3Rlcj0hMTsoNT09YXx8Nj09YXx8Nz09YXx8OD09YXx8OT09YXx8MTA9PWF8fDExPT1hKSYmIWQmJnRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTJdPyh0aGlzLnNob3dpbmdQb3N0ZXI9ITAsdGhpcy5zaG93UG9zdGVyKCkpOihiKCIuaHRtbDVnYWxsZXJ5LXZpZGVvLXBsYXktIit0aGlzLmlkLGwpLmxlbmd0aCYmYigiLmh0bWw1Z2FsbGVyeS12aWRlby1wbGF5LSIrdGhpcy5pZCxsKS5yZW1vdmUoKSwxPT1hP3RoaXMuc2hvd0ltYWdlKCk6KHRoaXMub3B0aW9ucy5oaWRldGl0bGV3aGVudmlkZW9pc3BsYXlpbmcmJmIoIi5odG1sNWdhbGxlcnktdGl0bGUtIisKdGhpcy5pZCxsKS5oaWRlKCksNT09YXx8Nj09YXx8Nz09YXx8OD09YT90aGlzLnNob3dWaWRlbyhkLGUpOjk9PWE/dGhpcy5zaG93WW91dHViZShkKToxMD09YT90aGlzLnNob3dWaW1lbyhkKToxMT09YT90aGlzLnNob3dFbWJlZFZpZGVvKGQpOjI9PWE/dGhpcy5zaG93U1dGKCk6MTI9PWEmJnRoaXMuc2hvd0lmcmFtZSgpKSk7dGhpcy5jaGVja01LKCk7dGhpcy5wcmV2RWxlbSBpbiB0aGlzLmVsZW1BcnJheSYmMT09dGhpcy5lbGVtQXJyYXlbdGhpcy5wcmV2RWxlbV1bOV0mJigobmV3IEltYWdlKS5zcmM9dGhpcy5lbGVtQXJyYXlbdGhpcy5wcmV2RWxlbV1bMl0pO3RoaXMubmV4dEVsZW0gaW4gdGhpcy5lbGVtQXJyYXkmJjE9PXRoaXMuZWxlbUFycmF5W3RoaXMubmV4dEVsZW1dWzldJiYoKG5ldyBJbWFnZSkuc3JjPXRoaXMuZWxlbUFycmF5W3RoaXMubmV4dEVsZW1dWzJdKTt0aGlzLnByZXZFbGVtIGluIHRoaXMuZWxlbUFycmF5JiYoIXRoaXMub3B0aW9ucy5hdXRvcGxheXZpZGVvJiYKdGhpcy5lbGVtQXJyYXlbdGhpcy5wcmV2RWxlbV1bMTJdKSYmKChuZXcgSW1hZ2UpLnNyYz10aGlzLmVsZW1BcnJheVt0aGlzLnByZXZFbGVtXVsxMl0pO3RoaXMubmV4dEVsZW0gaW4gdGhpcy5lbGVtQXJyYXkmJighdGhpcy5vcHRpb25zLmF1dG9wbGF5dmlkZW8mJnRoaXMuZWxlbUFycmF5W3RoaXMubmV4dEVsZW1dWzEyXSkmJigobmV3IEltYWdlKS5zcmM9dGhpcy5lbGVtQXJyYXlbdGhpcy5uZXh0RWxlbV1bMTJdKTt0aGlzLmN1ckVsZW09PXRoaXMuZWxlbUFycmF5Lmxlbmd0aC0xJiZ0aGlzLmxvb3B0aW1lcysrO3ZhciBnPXRoaXM7aWYoKDE9PWF8fHRoaXMuc2hvd2luZ1Bvc3RlcikmJiF0aGlzLmlzUGF1c2VkJiYxPHRoaXMuZWxlbUFycmF5Lmxlbmd0aCYmKCF0aGlzLm9wdGlvbnMubG9vcHx8dGhpcy5sb29wdGltZXM8dGhpcy5vcHRpb25zLmxvb3ApKXRoaXMuc2xpZGVzaG93VGltZW91dC5zZXRJbnRlcnZhbCh0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE2XT90aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE2XToKdGhpcy5vcHRpb25zLnNsaWRlc2hvd2ludGVydmFsKSx0aGlzLnNsaWRlc2hvd1RpbWVvdXQuc3RhcnQoKSx0aGlzLmlzRnVsbHNjcmVlbj9iKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tdGltZXItIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcyh7d2lkdGg6MH0pOmIoIi5odG1sNWdhbGxlcnktdGltZXItIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmNzcyh7d2lkdGg6MH0pO3RoaXMub3B0aW9ucy5sb29wJiZ0aGlzLmxvb3B0aW1lcz49dGhpcy5vcHRpb25zLmxvb3AmJih0aGlzLmxvb3B0aW1lcz0wLHRoaXMucGF1c2VHYWxsZXJ5KCkpO2E9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVs5XTsodGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVs1XXx8KHRoaXMub3B0aW9ucy5saWdodGJveHx8dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsyMl0pJiYhdGhpcy5pc0Z1bGxzY3JlZW4pJiYoIXRoaXMub3B0aW9ucy5saW5rb25seW9udmlkZW98fCEoNT09YXx8CjY9PWF8fDc9PWF8fDg9PWEpKT8oYy5jc3Moe2N1cnNvcjoicG9pbnRlciJ9KSxjLm9mZigiY2xpY2siKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7KGcub3B0aW9ucy5saWdodGJveHx8Zy5lbGVtQXJyYXlbZy5jdXJFbGVtXVsyMl0pJiYhZy5pc0Z1bGxzY3JlZW4/Zy5nb0Z1bGxzY3JlZW4oKTpnLmVsZW1BcnJheVtnLmN1ckVsZW1dWzVdJiYoZy5lbGVtQXJyYXlbZy5jdXJFbGVtXVs2XT93aW5kb3cub3BlbihnLmVsZW1BcnJheVtnLmN1ckVsZW1dWzVdLGcuZWxlbUFycmF5W2cuY3VyRWxlbV1bNl0pOndpbmRvdy5vcGVuKGcuZWxlbUFycmF5W2cuY3VyRWxlbV1bNV0pKX0pKTooYy5jc3Moe2N1cnNvcjoiIn0pLGMub2ZmKCJjbGljayIpKX19LHNob3dJbWFnZTpmdW5jdGlvbigpe3ZhciBhPWIoIi5odG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQsdGhpcy5pc0Z1bGxzY3JlZW4/dGhpcy4kZnVsbHNjcmVlbjp0aGlzLiRnYWxsZXJ5KTskcHJlbG9hZGluZz0iIj09PWEuaHRtbCgpPwpiKCI8ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktbG9hZGluZy1jZW50ZXItIit0aGlzLmlkKyInPjwvZGl2PiIpLmFwcGVuZFRvKGEpOmIoIjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1sb2FkaW5nLSIrdGhpcy5pZCsiJz48L2Rpdj4iKS5hcHBlbmRUbyhhKTt2YXIgYz10aGlzLGQ9bmV3IEltYWdlO2IoZCkub24oImxvYWQiLGZ1bmN0aW9uKCl7JHByZWxvYWRpbmcucmVtb3ZlKCk7Yy5lbGVtQXJyYXlbYy5jdXJFbGVtXVsxMF09dGhpcy53aWR0aDtjLmVsZW1BcnJheVtjLmN1ckVsZW1dWzExXT10aGlzLmhlaWdodDt2YXIgZDtpZihjLmlzRnVsbHNjcmVlbil7dmFyIGU9Yy5lbGVtQXJyYXlbYy5jdXJFbGVtXVsxN10/TWF0aC5taW4oYy5lbGVtQXJyYXlbYy5jdXJFbGVtXVsxN10sYy5mdWxsc2NyZWVuV2lkdGgpOmMuZnVsbHNjcmVlbldpZHRoO2Q9Yy5lbGVtQXJyYXlbYy5jdXJFbGVtXVsxOF0/TWF0aC5taW4oYy5lbGVtQXJyYXlbYy5jdXJFbGVtXVsxOF0sYy5mdWxsc2NyZWVuSGVpZ2h0KToKYy5mdWxsc2NyZWVuSGVpZ2h0O2Q9TWF0aC5taW4oZS90aGlzLndpZHRoLGQvdGhpcy5oZWlnaHQpO2Q9MTxkPzE6ZH1lbHNlIGQ9ImZpbGwiPT1jLm9wdGlvbnMucmVzaXplbW9kZT9NYXRoLm1heChjLm9wdGlvbnMud2lkdGgvdGhpcy53aWR0aCxjLm9wdGlvbnMuaGVpZ2h0L3RoaXMuaGVpZ2h0KTpNYXRoLm1pbihjLm9wdGlvbnMud2lkdGgvdGhpcy53aWR0aCxjLm9wdGlvbnMuaGVpZ2h0L3RoaXMuaGVpZ2h0KTtlPU1hdGgucm91bmQoZCp0aGlzLndpZHRoKTtkPU1hdGgucm91bmQoZCp0aGlzLmhlaWdodCk7dmFyIGo9Yy5pc0Z1bGxzY3JlZW4/ZTpjLm9wdGlvbnMud2lkdGgsbD1jLmlzRnVsbHNjcmVlbj9kOmMub3B0aW9ucy5oZWlnaHQsZz1NYXRoLnJvdW5kKGovMi1lLzIpLGs9TWF0aC5yb3VuZChsLzItZC8yKTtjLmlzRnVsbHNjcmVlbiYmYy5hZGp1c3RGdWxsc2NyZWVuKGosbCk7YS5jc3Moe3dpZHRoOmosaGVpZ2h0Omx9KTtlPWIoIjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1lbGVtLWltZy0iKwpjLmlkKyInIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyBwb3NpdGlvbjphYnNvbHV0ZTsgb3ZlcmZsb3c6aGlkZGVuOyB3aWR0aDoiK2orInB4OyBoZWlnaHQ6IitsKyJweDsgbGVmdDowcHg7IG1hcmdpbi1sZWZ0OiIrKGMub3B0aW9ucy5zbGlkZXNoYWRvdyYmIWMuaXNGdWxsc2NyZWVuPzQ6MCkrInB4OyB0b3A6MHB4OyBtYXJnaW4tdG9wOiIrKGMub3B0aW9ucy5zbGlkZXNoYWRvdyYmIWMuaXNGdWxsc2NyZWVuPzQ6MCkrInB4Oyc+PGltZyBhbHQ9JyIrYy5odG1sMlRleHQoYy5lbGVtQXJyYXlbYy5jdXJFbGVtXVs3XSkrIiciKyhjLm9wdGlvbnMuYWRkaW1ndGl0bGU/IiB0aXRsZT0nIitjLmh0bWwyVGV4dChjLmVsZW1BcnJheVtjLmN1ckVsZW1dWzddKSsiJyI6IiIpKyIgY2xhc3M9J2h0bWw1Z2FsbGVyeS1lbGVtLWltYWdlLSIrYy5pZCsiJyBzdHlsZT0nYm9yZGVyOm5vbmU7IHBvc2l0aW9uOmFic29sdXRlOyBvcGFjaXR5OmluaGVyaXQ7IGZpbHRlcjppbmhlcml0OyBwYWRkaW5nOjBweDsgbWFyZ2luOjBweDsgbGVmdDoiKwpnKyJweDsgdG9wOiIraysicHg7IG1heC13aWR0aDpub25lOyBtYXgtaGVpZ2h0Om5vbmU7IHdpZHRoOiIrZSsicHg7IGhlaWdodDoiK2QrInB4Oycgc3JjPSciK2MuZWxlbUFycmF5W2MuY3VyRWxlbV1bMl0rIicgLz4iK2Mub3B0aW9ucy53YXRlcm1hcmtjb2RlKyI8L2Rpdj4iKTtkPWIoIi5odG1sNWdhbGxlcnktZWxlbS1pbWctIitjLmlkLGEpO2QubGVuZ3RoPyhhLnByZXBlbmQoZSksYS5odG1sNWJveFRyYW5zaXRpb24oYy5pZCxkLGUse2VmZmVjdDpjLm9wdGlvbnMuZWZmZWN0LGVhc2luZzpjLm9wdGlvbnMuZWFzaW5nLGR1cmF0aW9uOmMub3B0aW9ucy5kdXJhdGlvbixkaXJlY3Rpb246Yy5jdXJFbGVtPj1jLnNhdmVkRWxlbSxzbGlkZTpjLm9wdGlvbnMuc2xpZGV9LGZ1bmN0aW9uKCl7fSkpOmEuaHRtbChlKTtjLm9wdGlvbnMuZ29vZ2xlYW5hbHl0aWNzYWNjb3VudCYmd2luZG93Ll9nYXEmJndpbmRvdy5fZ2FxLnB1c2goWyJfdHJhY2tFdmVudCIsIkltYWdlIiwiUGxheSIsCmMuZWxlbUFycmF5W2MuY3VyRWxlbV1bMl1dKTtjLmNoZWNrTUsoKX0pO2IoZCkub24oImVycm9yIixmdW5jdGlvbigpeyRwcmVsb2FkaW5nLnJlbW92ZSgpO2MuaXNGdWxsc2NyZWVuJiZjLmFkanVzdEZ1bGxzY3JlZW4oYy5vcHRpb25zLndpZHRoLGMub3B0aW9ucy5oZWlnaHQpO2EuaHRtbCgiPGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWVsZW0tZXJyb3ItIitjLmlkKyInIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyBwb3NpdGlvbjphYnNvbHV0ZTsgb3ZlcmZsb3c6aGlkZGVuOyB0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6IitjLm9wdGlvbnMud2lkdGgrInB4OyBsZWZ0OjBweDsgdG9wOiIrTWF0aC5yb3VuZChjLm9wdGlvbnMuaGVpZ2h0LzItMTApKyJweDsgbWFyZ2luOjRweDsnPjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1lcnJvci0iK2MuaWQrIic+VGhlIHJlcXVlc3RlZCBjb250ZW50IGNhbm5vdCBiZSBmb3VuZDwvZGl2PiIpO2Mub3B0aW9ucy5nb29nbGVhbmFseXRpY3NhY2NvdW50JiYKd2luZG93Ll9nYXEmJndpbmRvdy5fZ2FxLnB1c2goWyJfdHJhY2tFdmVudCIsIkltYWdlIiwiRXJyb3IiLGMuZWxlbUFycmF5W2MuY3VyRWxlbV1bMl1dKX0pO2Quc3JjPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMl19LGFkanVzdEZ1bGxzY3JlZW46ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWIod2luZG93KS53aWR0aCgpO3RoaXMuZnVsbHNjcmVlbldpZHRoPWUtMip0aGlzLmZ1bGxzY3JlZW5NYXJnaW4tMip0aGlzLmZ1bGxzY3JlZW5PdXRzaWRlTWFyZ2luO3ZhciBmPWIod2luZG93KS5oZWlnaHQoKTt0aGlzLmZ1bGxzY3JlZW5IZWlnaHQ9Zi0yKnRoaXMuZnVsbHNjcmVlbk1hcmdpbi10aGlzLmZ1bGxzY3JlZW5CYXJILTIqdGhpcy5mdWxsc2NyZWVuT3V0c2lkZU1hcmdpbjt2YXIgaj1NYXRoLm1heChmLGIoZG9jdW1lbnQpLmhlaWdodCgpKSxsPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTddP01hdGgubWluKHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTddLAp0aGlzLmZ1bGxzY3JlZW5XaWR0aCk6dGhpcy5mdWxsc2NyZWVuV2lkdGgsZz10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE4XT9NYXRoLm1pbih0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE4XSx0aGlzLmZ1bGxzY3JlZW5IZWlnaHQpOnRoaXMuZnVsbHNjcmVlbkhlaWdodCxsPU1hdGgubWluKGwvYSxnL2MpOzE+bCYmKGEqPWwsYyo9bCk7Zj1iKHdpbmRvdykuc2Nyb2xsVG9wKCkrTWF0aC5yb3VuZCgoZi0oYysyKnRoaXMuZnVsbHNjcmVlbk1hcmdpbit0aGlzLmZ1bGxzY3JlZW5CYXJIKSkvMik7YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLSIrdGhpcy5pZCkuY3NzKHt3aWR0aDplKyJweCIsaGVpZ2h0OmorInB4In0pO2IoIi5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi10aXRsZS0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuY3NzKHt3aWR0aDphLTIqdGhpcy5mdWxsc2NyZWVuTWFyZ2luLTcyfSk7ZD8oYigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLWJveC0iKwp0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcyh7d2lkdGg6YSsyKnRoaXMuZnVsbHNjcmVlbk1hcmdpbixoZWlnaHQ6YysyKnRoaXMuZnVsbHNjcmVlbk1hcmdpbit0aGlzLmZ1bGxzY3JlZW5CYXJILHRvcDpmfSksYigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLWVsZW0tIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcyh7d2lkdGg6YSsyKnRoaXMuZnVsbHNjcmVlbk1hcmdpbixoZWlnaHQ6YysyKnRoaXMuZnVsbHNjcmVlbk1hcmdpbn0pLGIoIi5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1lbGVtLXdyYXBwZXItIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcyh7d2lkdGg6YSxoZWlnaHQ6Y30pLGIoIi5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1iYXItIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcyh7d2lkdGg6YSsyKnRoaXMuZnVsbHNjcmVlbk1hcmdpbn0pKTooYigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLWJveC0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuYW5pbWF0ZSh7d2lkdGg6YSsKMip0aGlzLmZ1bGxzY3JlZW5NYXJnaW4saGVpZ2h0OmMrMip0aGlzLmZ1bGxzY3JlZW5NYXJnaW4rdGhpcy5mdWxsc2NyZWVuQmFySCx0b3A6Zn0sInNsb3ciKSxiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tZWxlbS0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuYW5pbWF0ZSh7d2lkdGg6YSsyKnRoaXMuZnVsbHNjcmVlbk1hcmdpbixoZWlnaHQ6YysyKnRoaXMuZnVsbHNjcmVlbk1hcmdpbn0sInNsb3ciKSxiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tZWxlbS13cmFwcGVyLSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5hbmltYXRlKHt3aWR0aDphLGhlaWdodDpjfSwic2xvdyIpLGIoIi5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1iYXItIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmFuaW1hdGUoe3dpZHRoOmErMip0aGlzLmZ1bGxzY3JlZW5NYXJnaW59LCJzbG93IikpO2IoIi5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1uZXh0LSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5jc3Moe3RvcDpNYXRoLnJvdW5kKGMvCjIpfSk7YigiLmh0bWw1Z2FsbGVyeS1mdWxsc2NyZWVuLXByZXYtIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcyh7dG9wOk1hdGgucm91bmQoYy8yKX0pO2IoIi5odG1sNWdhbGxlcnktZnVsbHNjcmVlbi1wbGF5LSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5jc3MoImRpc3BsYXkiLHRoaXMuaXNQYXVzZWQmJjE8dGhpcy5lbGVtQXJyYXkubGVuZ3RoJiYxPT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzldPyJibG9jayI6Im5vbmUiKTtiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tcGF1c2UtIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcygiZGlzcGxheSIsdGhpcy5pc1BhdXNlZHx8MT49dGhpcy5lbGVtQXJyYXkubGVuZ3RofHwxIT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzldPyJub25lIjoiYmxvY2siKTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcyh7d2lkdGg6YSxoZWlnaHQ6Y30pOwpiKCIuaHRtbDVnYWxsZXJ5LWZ1bGxzY3JlZW4tdGltZXItIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcyh7dG9wOlN0cmluZyhjLTQpKyJweCJ9KTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmNzcyh7d2lkdGg6YSsicHgiLGhlaWdodDpjKyJweCJ9KTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tY29udGFpbmVyLSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5jc3Moe3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSk7YigiLmh0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLWNvbnRhaW5lci0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuZmluZCgidmlkZW8iKS5jc3Moe3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSk7YigiI2h0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5jc3Moe3dpZHRoOmErInB4IixoZWlnaHQ6YysicHgifSk7YigiI2h0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrCnRoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuYXR0cigid2lkdGgiLGEpO2IoIiNodG1sNWdhbGxlcnktZWxlbS12aWRlby0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuYXR0cigiaGVpZ2h0IixjKTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmZpbmQoImlmcmFtZSIpLmF0dHIoIndpZHRoIixhKTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmZpbmQoImlmcmFtZSIpLmF0dHIoImhlaWdodCIsYyk7YigiI2h0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5maW5kKCJpZnJhbWUiKS5hdHRyKCJ3aWR0aCIsYSk7YigiI2h0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCx0aGlzLiRmdWxsc2NyZWVuKS5maW5kKCJpZnJhbWUiKS5hdHRyKCJoZWlnaHQiLGMpO2IoIi5odG1sNWdhbGxlcnktZWxlbS1pZnJhbWUtIit0aGlzLmlkLAp0aGlzLiRmdWxsc2NyZWVuKS5jc3Moe3dpZHRoOmErInB4IixoZWlnaHQ6YysicHgifSk7YigiLmh0bWw1Z2FsbGVyeS1lbGVtLWlmcmFtZS0iK3RoaXMuaWQsdGhpcy4kZnVsbHNjcmVlbikuZmluZCgiaWZyYW1lIikuYXR0cigid2lkdGgiLGEpO2IoIi5odG1sNWdhbGxlcnktZWxlbS1pZnJhbWUtIit0aGlzLmlkLHRoaXMuJGZ1bGxzY3JlZW4pLmZpbmQoImlmcmFtZSIpLmF0dHIoImhlaWdodCIsYyl9LHNob3dQb3N0ZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmlzRnVsbHNjcmVlbj90aGlzLiRmdWxsc2NyZWVuOnRoaXMuJGdhbGxlcnksYz1iKCIuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkLGEpOyRwcmVsb2FkaW5nPSIiPT09Yy5odG1sKCk/YigiPGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWxvYWRpbmctY2VudGVyLSIrdGhpcy5pZCsiJz48L2Rpdj4iKS5hcHBlbmRUbyhjKTpiKCI8ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktbG9hZGluZy0iK3RoaXMuaWQrIic+PC9kaXY+IikuYXBwZW5kVG8oYyk7CnZhciBkPXRoaXMsZT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzEwXSxmPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTFdLGo9bmV3IEltYWdlO2Ioaikub24oImxvYWQiLGZ1bmN0aW9uKCl7JHByZWxvYWRpbmcucmVtb3ZlKCk7ZC5lbGVtQXJyYXlbZC5jdXJFbGVtXVsyM109dGhpcy53aWR0aDtkLmVsZW1BcnJheVtkLmN1ckVsZW1dWzI0XT10aGlzLmhlaWdodDt2YXIgaixnLGs7ZC5pc0Z1bGxzY3JlZW4/KGc9ZC5lbGVtQXJyYXlbZC5jdXJFbGVtXVsxN10/TWF0aC5taW4oZC5lbGVtQXJyYXlbZC5jdXJFbGVtXVsxN10sZC5mdWxsc2NyZWVuV2lkdGgpOk1hdGgubWluKGUsZC5mdWxsc2NyZWVuV2lkdGgpLGs9ZC5lbGVtQXJyYXlbZC5jdXJFbGVtXVsxOF0/TWF0aC5taW4oZC5lbGVtQXJyYXlbZC5jdXJFbGVtXVsxOF0sZC5mdWxsc2NyZWVuSGVpZ2h0KTpNYXRoLm1pbihmLGQuZnVsbHNjcmVlbkhlaWdodCksaj1NYXRoLm1heChnL3RoaXMud2lkdGgsay90aGlzLmhlaWdodCksCmo9MTxqPzE6aik6KGo9ImZpbGwiPT1kLm9wdGlvbnMucmVzaXplbW9kZT9NYXRoLm1heChkLm9wdGlvbnMud2lkdGgvdGhpcy53aWR0aCxkLm9wdGlvbnMuaGVpZ2h0L3RoaXMuaGVpZ2h0KTpNYXRoLm1pbihkLm9wdGlvbnMud2lkdGgvdGhpcy53aWR0aCxkLm9wdGlvbnMuaGVpZ2h0L3RoaXMuaGVpZ2h0KSxnPWQub3B0aW9ucy53aWR0aCxrPWQub3B0aW9ucy5oZWlnaHQpO3ZhciBtPU1hdGgucm91bmQoaip0aGlzLndpZHRoKTtqPU1hdGgucm91bmQoaip0aGlzLmhlaWdodCk7dmFyIG49TWF0aC5yb3VuZChnLzItbS8yKSxzPU1hdGgucm91bmQoay8yLWovMik7ZC5pc0Z1bGxzY3JlZW4mJmQuYWRqdXN0RnVsbHNjcmVlbihnLGspO2MuY3NzKHt3aWR0aDpnLGhlaWdodDprfSk7Zz1iKCI8ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktZWxlbS1pbWctIitkLmlkKyInIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyBwb3NpdGlvbjphYnNvbHV0ZTsgb3ZlcmZsb3c6aGlkZGVuOyB3aWR0aDoiKwpnKyJweDsgaGVpZ2h0OiIraysicHg7IGxlZnQ6MHB4OyBtYXJnaW4tbGVmdDoiKyhkLm9wdGlvbnMuc2xpZGVzaGFkb3cmJiFkLmlzRnVsbHNjcmVlbj80OjApKyJweDsgdG9wOjBweDsgbWFyZ2luLXRvcDoiKyhkLm9wdGlvbnMuc2xpZGVzaGFkb3cmJiFkLmlzRnVsbHNjcmVlbj80OjApKyJweDsnPjxpbWcgYWx0PSciK2QuaHRtbDJUZXh0KGQuZWxlbUFycmF5W2QuY3VyRWxlbV1bN10pKyInIisoZC5vcHRpb25zLmFkZGltZ3RpdGxlPyIgdGl0bGU9JyIrZC5odG1sMlRleHQoZC5lbGVtQXJyYXlbZC5jdXJFbGVtXVs3XSkrIiciOiIiKSsiIGNsYXNzPSdodG1sNWdhbGxlcnktZWxlbS1pbWFnZS0iK2QuaWQrIicgc3R5bGU9J2JvcmRlcjpub25lOyBwb3NpdGlvbjphYnNvbHV0ZTsgb3BhY2l0eTppbmhlcml0OyBmaWx0ZXI6aW5oZXJpdDsgcGFkZGluZzowcHg7IG1hcmdpbjowcHg7IGxlZnQ6IituKyJweDsgdG9wOiIrcysicHg7IG1heC13aWR0aDpub25lOyBtYXgtaGVpZ2h0Om5vbmU7IHdpZHRoOiIrCm0rInB4OyBoZWlnaHQ6IitqKyJweDsnIHNyYz0nIitkLmVsZW1BcnJheVtkLmN1ckVsZW1dWzEyXSsiJyAvPiIrZC5vcHRpb25zLndhdGVybWFya2NvZGUrIjwvZGl2PiIpO2s9YigiLmh0bWw1Z2FsbGVyeS1lbGVtLWltZy0iK2QuaWQsYyk7ay5sZW5ndGg/KGMucHJlcGVuZChnKSxjLmh0bWw1Ym94VHJhbnNpdGlvbihkLmlkLGssZyx7ZWZmZWN0OmQub3B0aW9ucy5lZmZlY3QsZWFzaW5nOmQub3B0aW9ucy5lYXNpbmcsZHVyYXRpb246ZC5vcHRpb25zLmR1cmF0aW9uLGRpcmVjdGlvbjpkLmN1ckVsZW0+PWQuc2F2ZWRFbGVtLHNsaWRlOmQub3B0aW9ucy5zbGlkZX0sZnVuY3Rpb24oKXt9KSk6Yy5odG1sKGcpO2lmKCFiKCIuaHRtbDVnYWxsZXJ5LXZpZGVvLXBsYXktIitkLmlkLGEpLmxlbmd0aCliKCI8ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktdmlkZW8tcGxheS0iK2QuaWQrIicgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7Y3Vyc29yOnBvaW50ZXI7dG9wOjUwJTtsZWZ0OjUwJTt3aWR0aDo2NHB4O2hlaWdodDo2NHB4O21hcmdpbi1sZWZ0Oi0zMnB4O21hcmdpbi10b3A6LTMycHg7YmFja2dyb3VuZDp1cmwoXCIiKwpkLm9wdGlvbnMucGxheXZpZGVvaW1hZ2UrIlwiKSBuby1yZXBlYXQgY2VudGVyIGNlbnRlcjsnPjwvZGl2PiIpLmFwcGVuZFRvKGMpLm9mZihkLmVDbGljaykub24oZC5lQ2xpY2ssZnVuY3Rpb24oKXtkLm9wdGlvbnMuaGlkZXRpdGxld2hlbnZpZGVvaXNwbGF5aW5nJiZiKCIuaHRtbDVnYWxsZXJ5LXRpdGxlLSIrZC5pZCxkLiRnYWxsZXJ5KS5oaWRlKCk7Yih0aGlzKS5yZW1vdmUoKTtkLnNsaWRlc2hvd1RpbWVvdXQuc3RvcCgpO2IoIi5odG1sNWdhbGxlcnktdGltZXItIitkLmlkLGQuJGdhbGxlcnkpLmNzcyh7d2lkdGg6MH0pO2Quc2hvd2luZ1Bvc3Rlcj0hMTt2YXIgYT1kLmVsZW1BcnJheVtkLmN1ckVsZW1dWzldOzU9PWF8fDY9PWF8fDc9PWF8fDg9PWE/ZC5zaG93VmlkZW8oITApOjk9PWE/ZC5zaG93WW91dHViZSghMCk6MTA9PWE/ZC5zaG93VmltZW8oITApOjExPT1hJiZkLnNob3dFbWJlZFZpZGVvKCEwKTtkLmNoZWNrTUsoKX0pO2QuY2hlY2tNSygpfSk7YihqKS5vbigiZXJyb3IiLApmdW5jdGlvbigpeyRwcmVsb2FkaW5nLnJlbW92ZSgpO2QuaXNGdWxsc2NyZWVuJiZkLmFkanVzdEZ1bGxzY3JlZW4oZC5vcHRpb25zLndpZHRoLGQub3B0aW9ucy5oZWlnaHQpO2MuaHRtbCgiPGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWVsZW0tZXJyb3ItIitkLmlkKyInIHN0eWxlPSdkaXNwbGF5OmJsb2NrOyBwb3NpdGlvbjphYnNvbHV0ZTsgb3ZlcmZsb3c6aGlkZGVuOyB0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6IitkLm9wdGlvbnMud2lkdGgrInB4OyBsZWZ0OjBweDsgdG9wOiIrTWF0aC5yb3VuZChkLm9wdGlvbnMuaGVpZ2h0LzItMTApKyJweDsgbWFyZ2luOjRweDsnPjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1lcnJvci0iK2QuaWQrIic+VGhlIHJlcXVlc3RlZCBjb250ZW50IGNhbm5vdCBiZSBmb3VuZDwvZGl2PiIpO2Qub3B0aW9ucy5nb29nbGVhbmFseXRpY3NhY2NvdW50JiZ3aW5kb3cuX2dhcSYmd2luZG93Ll9nYXEucHVzaChbIl90cmFja0V2ZW50IiwiSW1hZ2UiLAoiRXJyb3IiLGQuZWxlbUFycmF5W2QuY3VyRWxlbV1bMTJdXSl9KTtqLnNyYz10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzEyXX0sZ2V0Rmxhc2hNb3ZpZU9iamVjdDpmdW5jdGlvbihhKXtpZih3aW5kb3cuZG9jdW1lbnRbYV0pcmV0dXJuIHdpbmRvdy5kb2N1bWVudFthXTtpZigtMT09bmF2aWdhdG9yLmFwcE5hbWUuaW5kZXhPZigiTWljcm9zb2Z0IEludGVybmV0Iikpe2lmKGRvY3VtZW50LmVtYmVkcyYmZG9jdW1lbnQuZW1iZWRzW2FdKXJldHVybiBkb2N1bWVudC5lbWJlZHNbYV19ZWxzZSByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSl9LHBsYXlWaWRlbzpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bOV07aWYoNT09YXx8Nj09YXx8Nz09YXx8OD09YSl0aGlzLmlzSFRNTDUmJjA8YigiI2h0bWw1Z2FsbGVyeS1lbGVtLWh0bWw1LXZpZGVvLSIrdGhpcy5pZCkubGVuZ3RoP2IoIiNodG1sNWdhbGxlcnktZWxlbS1odG1sNS12aWRlby0iKwp0aGlzLmlkLHRoaXMuY29udGFpbmVyKS5nZXQoMCkucGxheSgpOihhPXRoaXMuZ2V0Rmxhc2hNb3ZpZU9iamVjdCgiaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tZmxhc2gtIit0aGlzLmlkKSkmJiJmdW5jdGlvbiI9PT10eXBlb2YgYS5wbGF5VmlkZW8mJmEucGxheVZpZGVvKCl9LHN0b3BBbGxQbGF5aW5nOmZ1bmN0aW9uKCl7YigidmlkZW8iKS5sZW5ndGgmJmIoInZpZGVvIikuZ2V0KDApLnBhdXNlKCk7YigiYXVkaW8iKS5sZW5ndGgmJmIoImF1ZGlvIikuZ2V0KDApLnBhdXNlKCk7aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgaHRtbDVHYWxsZXJ5T2JqZWN0cyYmaHRtbDVHYWxsZXJ5T2JqZWN0cyYmaHRtbDVHYWxsZXJ5T2JqZWN0cy5vYmplY3RzKWZvcih2YXIgYT0wO2E8aHRtbDVHYWxsZXJ5T2JqZWN0cy5vYmplY3RzLmxlbmd0aDthKyspaWYoaHRtbDVHYWxsZXJ5T2JqZWN0cy5vYmplY3RzW2FdLmlkIT10aGlzLmlkKXRyeXtodG1sNUdhbGxlcnlPYmplY3RzLm9iamVjdHNbYV0ueXRQbGF5ZXImJgoiZnVuY3Rpb24iPT10eXBlb2YgaHRtbDVHYWxsZXJ5T2JqZWN0cy5vYmplY3RzW2FdLnl0UGxheWVyLnBhdXNlVmlkZW8mJmh0bWw1R2FsbGVyeU9iamVjdHMub2JqZWN0c1thXS55dFBsYXllci5wYXVzZVZpZGVvKCksaHRtbDVHYWxsZXJ5T2JqZWN0cy5vYmplY3RzW2FdLnZpbWVvUGxheWVyJiZodG1sNUdhbGxlcnlPYmplY3RzLm9iamVjdHNbYV0udmltZW9QbGF5ZXIuYXBpKCJwYXVzZSIpfWNhdGNoKGMpe319LHBhdXNlVmlkZW86ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzldOzU9PWF8fDY9PWF8fDc9PWF8fDg9PWE/dGhpcy5pc0hUTUw1JiYwPGIoIiNodG1sNWdhbGxlcnktZWxlbS1odG1sNS12aWRlby0iK3RoaXMuaWQpLmxlbmd0aD9iKCIjaHRtbDVnYWxsZXJ5LWVsZW0taHRtbDUtdmlkZW8tIit0aGlzLmlkLHRoaXMuY29udGFpbmVyKS5nZXQoMCkucGF1c2UoKTooYT10aGlzLmdldEZsYXNoTW92aWVPYmplY3QoImh0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLWZsYXNoLSIrCnRoaXMuaWQpKSYmImZ1bmN0aW9uIj09PXR5cGVvZiBhLnBhdXNlVmlkZW8mJmEucGF1c2VWaWRlbygpOjk9PWE/dGhpcy55dFBsYXllciYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMueXRQbGF5ZXIucGF1c2VWaWRlbyYmdGhpcy55dFBsYXllci5wYXVzZVZpZGVvKCk6MTA9PWE/dGhpcy52aW1lb1BsYXllciYmdGhpcy52aW1lb1BsYXllci5hcGkoInBhdXNlIik6YigidmlkZW8iLHRoaXMuY29udGFpbmVyKS5sZW5ndGgmJmIoInZpZGVvIix0aGlzLmNvbnRhaW5lcikuZ2V0KDApLnBhdXNlKCl9LHNob3dWaWRlbzpmdW5jdGlvbihhLGMpe3RoaXMub3B0aW9ucy5zdG9wYWxscGxheWluZyYmdGhpcy5zdG9wQWxsUGxheWluZygpO3RoaXMuaXNWaWRlb1BsYXlpbmc9ITA7YSYmdGhpcy5vcHRpb25zLmF1dG9zbGlkZWFuZHBsYXlhZnRlcmZpcnN0cGxheWVkJiYodGhpcy5vcHRpb25zLmF1dG9wbGF5dmlkZW89ITAsdGhpcy5pc1BhdXNlZD0hMSk7dGhpcy5kaXNhYmxlVG91Y2hTd2lwZT0KITA7dmFyIGQ9dGhpcy5pc0Z1bGxzY3JlZW4/dGhpcy4kZnVsbHNjcmVlbjp0aGlzLiRnYWxsZXJ5LGU9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxMF0sZj10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzExXTtpZih0aGlzLmlzRnVsbHNjcmVlbil7dmFyIGU9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxN10/TWF0aC5taW4odGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxN10sdGhpcy5mdWxsc2NyZWVuV2lkdGgpOk1hdGgubWluKGUsdGhpcy5mdWxsc2NyZWVuV2lkdGgpLGo9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxOF0/TWF0aC5taW4odGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxOF0sdGhpcy5mdWxsc2NyZWVuSGVpZ2h0KTpNYXRoLm1pbihmLHRoaXMuZnVsbHNjcmVlbkhlaWdodCk7dGhpcy5hZGp1c3RGdWxsc2NyZWVuKGUsaik7Zj1lO2U9an1lbHNlIGIoIi5odG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMud2lkdGgsCmhlaWdodDp0aGlzLm9wdGlvbnMuaGVpZ2h0fSksZj10aGlzLm9wdGlvbnMud2lkdGgsZT10aGlzLm9wdGlvbnMuaGVpZ2h0O2o9LTE7YyYmYigiLmh0bWw1Z2FsbGVyeS1lbGVtLSIrdGhpcy5pZCxkKS5maW5kKCJ2aWRlbyIpLmxlbmd0aCYmKGo9YigiLmh0bWw1Z2FsbGVyeS1lbGVtLSIrdGhpcy5pZCxkKS5maW5kKCJ2aWRlbzpmaXJzdCIpLmdldCgwKS5jdXJyZW50VGltZSk7YigiLmh0bWw1Z2FsbGVyeS1lbGVtLSIrdGhpcy5pZCxkKS5odG1sKCI8ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktbG9hZGluZy1jZW50ZXItIit0aGlzLmlkKyInPjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCsiJyBzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47dG9wOiIrKHRoaXMub3B0aW9ucy5zbGlkZXNoYWRvdyYmIXRoaXMuaXNGdWxsc2NyZWVuPzQ6MCkrInB4O2xlZnQ6IisodGhpcy5vcHRpb25zLnNsaWRlc2hhZG93JiYKIXRoaXMuaXNGdWxsc2NyZWVuPzQ6MCkrInB4O3dpZHRoOiIrZisicHg7aGVpZ2h0OiIrZSsicHg7Jz48L2Rpdj4iK3RoaXMub3B0aW9ucy53YXRlcm1hcmtjb2RlKTt0aGlzLmlzSFRNTDU9ITE7aWYodGhpcy5vcHRpb25zLmlzSUU2Nzh8fHRoaXMub3B0aW9ucy5pc0lFOSYmdGhpcy5vcHRpb25zLnVzZWZsYXNob25pZTl8fHRoaXMub3B0aW9ucy5pc0lFMTAmJnRoaXMub3B0aW9ucy51c2VmbGFzaG9uaWUxMHx8dGhpcy5vcHRpb25zLmlzSUUxMSYmdGhpcy5vcHRpb25zLnVzZWZsYXNob25pZTExKXRoaXMuaXNIVE1MNT0hMTtlbHNlIGlmKHRoaXMub3B0aW9ucy5pc01vYmlsZSl0aGlzLmlzSFRNTDU9ITA7ZWxzZSBpZigodGhpcy5vcHRpb25zLmh0bWw1cGxheWVyfHwhdGhpcy5vcHRpb25zLmZsYXNoSW5zdGFsbGVkKSYmdGhpcy5vcHRpb25zLmh0bWw1VmlkZW9TdXBwb3J0ZWQpaWYodGhpcy5pc0hUTUw1PSEwLHRoaXMub3B0aW9ucy5pc0ZpcmVmb3h8fHRoaXMub3B0aW9ucy5pc09wZXJhKWlmKCF0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzRdJiYKIXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bM10mJighdGhpcy5vcHRpb25zLmNhbnBsYXltcDR8fHRoaXMub3B0aW9ucy51c2VmbGFzaGZvcm1wNG9uZmlyZWZveCkpdGhpcy5pc0hUTUw1PSExO2lmKHRoaXMuaXNIVE1MNSl7dmFyIGw9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsyXSxnPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTNdO2lmKHRoaXMub3B0aW9ucy5pc0ZpcmVmb3h8fHRoaXMub3B0aW9ucy5pc09wZXJhKXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bNF0/bD10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzRdOnRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bM10mJihsPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bM10pLHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTVdP2c9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxNV06dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxNF0mJihnPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTRdKTsKdGhpcy5lbWJlZEhUTUw1VmlkZW8oYigiLmh0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCxkKSxmLGUsbCxnLGEsaixjKX1lbHNlIGo9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsyXSwiLyIhPWouY2hhckF0KDApJiYoImh0dHA6IiE9ai5zdWJzdHJpbmcoMCw1KSYmImh0dHBzOiIhPWouc3Vic3RyaW5nKDAsNikpJiYoaj10aGlzLm9wdGlvbnMuaHRtbGZvbGRlcitqKSxsPSIiLHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTNdJiYobD10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzEzXSwiLyIhPWwuY2hhckF0KDApJiYoImh0dHA6IiE9bC5zdWJzdHJpbmcoMCw1KSYmImh0dHBzOiIhPWwuc3Vic3RyaW5nKDAsNikpJiYobD10aGlzLm9wdGlvbnMuaHRtbGZvbGRlcitsKSksZj17d2lkdGg6ZixoZWlnaHQ6ZSxoaWRlY29udHJvbHM6dGhpcy5vcHRpb25zLnZpZGVvaGlkZWNvbnRyb2xzPyIxIjoiMCIsaGlkZXBsYXlidXR0b246IjAiLHZpZGVvZmlsZTpqLApoZGZpbGU6bCxpc2hkOnRoaXMuaXNIZD8iMSI6IjAiLGF1dG9wbGF5OmE/IjEiOiIwIixlcnJvcmNzczoiLmh0bWw1Ym94LWVycm9yIit0aGlzLm9wdGlvbnMuZXJyb3Jjc3MsaWQ6dGhpcy5pZH0sdGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVs1XSYmKGYuY2xpY2t0aHJvdWdoPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bNV0sdGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVs2XSYmKGYuY2xpY2t0aHJvdWdodGFyZ2V0PXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bNl0pKSx0aGlzLmVtYmVkRmxhc2goYigiLmh0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCxkKSwiMTAwJSIsIjEwMCUiLHRoaXMub3B0aW9ucy5qc2ZvbGRlcisiaHRtbDVib3hwbGF5ZXIuc3dmIiwidHJhbnNwYXJlbnQiLGYsImh0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLWZsYXNoLSIrdGhpcy5pZCk7dGhpcy5vcHRpb25zLmdvb2dsZWFuYWx5dGljc2FjY291bnQmJndpbmRvdy5fZ2FxJiYKd2luZG93Ll9nYXEucHVzaChbIl90cmFja0V2ZW50IiwiVmlkZW8iLCJQbGF5Iix0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzJdXSl9LHNob3dTV0Y6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmlzRnVsbHNjcmVlbj90aGlzLiRmdWxsc2NyZWVuOnRoaXMuJGdhbGxlcnksYz10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzEwXSxkPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTFdO3RoaXMuaXNGdWxsc2NyZWVuP3RoaXMuYWRqdXN0RnVsbHNjcmVlbihjLGQpOmIoIi5odG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMud2lkdGgsaGVpZ2h0OnRoaXMub3B0aW9ucy5oZWlnaHR9KTt2YXIgZT10aGlzLmlzRnVsbHNjcmVlbj8wOk1hdGgucm91bmQoKHRoaXMub3B0aW9ucy5oZWlnaHQtZCkvMikrKHRoaXMub3B0aW9ucy5zbGlkZXNoYWRvdz80OjApLGY9dGhpcy5pc0Z1bGxzY3JlZW4/MDpNYXRoLnJvdW5kKCh0aGlzLm9wdGlvbnMud2lkdGgtCmMpLzIpKyh0aGlzLm9wdGlvbnMuc2xpZGVzaGFkb3c/NDowKTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkLGEpLmh0bWwoIjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1lbGVtLWZsYXNoLSIrdGhpcy5pZCsiJyBzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47dG9wOiIrZSsicHg7bGVmdDoiK2YrInB4O3dpZHRoOiIrYysicHg7aGVpZ2h0OiIrZCsicHg7Jz48L2Rpdj4iK3RoaXMub3B0aW9ucy53YXRlcm1hcmtjb2RlKTt0aGlzLmVtYmVkRmxhc2goYigiLmh0bWw1Z2FsbGVyeS1lbGVtLWZsYXNoLSIrdGhpcy5pZCxhKSxjLGQsdGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsyXSwid2luZG93Iix7fSwiaHRtbDVnYWxsZXJ5LWVsZW0tZmxhc2gtb2JqZWN0LSIrdGhpcy5pZCk7dGhpcy5vcHRpb25zLmdvb2dsZWFuYWx5dGljc2FjY291bnQmJndpbmRvdy5fZ2FxJiZ3aW5kb3cuX2dhcS5wdXNoKFsiX3RyYWNrRXZlbnQiLAoiRmxhc2giLCJQbGF5Iix0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzJdXSl9LHByZXBhcmVZb3V0dWJlSHJlZjpmdW5jdGlvbihhKXt2YXIgYj0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvIithLm1hdGNoKC8oXD92PXxcL1xkXC98XC9lbWJlZFwvfFwvdlwvfFwuYmVcLykoW2EtekEtWjAtOVwtXF9dKykvKVsyXTthPXRoaXMuZ2V0WW91dHViZVBhcmFtcyhhKTt2YXIgZD0hMCxlO2ZvcihlIGluIGEpZD8oYis9Ij8iLGQ9ITEpOmIrPSImIixiKz1lKyI9IithW2VdO3JldHVybiBifSxnZXRZb3V0dWJlUGFyYW1zOmZ1bmN0aW9uKGEpe3ZhciBiPXt9O2lmKDA+YS5pbmRleE9mKCI/IikpcmV0dXJuIGI7YT1hLnN1YnN0cmluZyhhLmluZGV4T2YoIj8iKSsxKS5zcGxpdCgiJiIpO2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hW2RdLnNwbGl0KCI9Iik7ZSYmKDI9PWUubGVuZ3RoJiYidiIhPWVbMF0udG9Mb3dlckNhc2UoKSkmJihiW2VbMF0udG9Mb3dlckNhc2UoKV09CmVbMV0pfXJldHVybiBifSxpbml0WW91dHViZUFwaTpmdW5jdGlvbigpe3ZhciBhLGI9ITEsZD0hMTtmb3IoYT0wO2E8dGhpcy5lbGVtQXJyYXkubGVuZ3RoO2ErKyk5PT10aGlzLmVsZW1BcnJheVthXVs5XT9iPSEwOjEwPT10aGlzLmVsZW1BcnJheVthXVs5XSYmKGQ9ITApO2ImJihhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGEuc3JjPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS9pZnJhbWVfYXBpIixiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXSxiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsYikpO2QmJihhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGEuc3JjPXRoaXMub3B0aW9ucy5qc2ZvbGRlcisiZnJvb2dhbG9vcDIubWluLmpzIixiPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXSxiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsYikpfSxzaG93RW1iZWRWaWRlbzpmdW5jdGlvbihhKXt0aGlzLm9wdGlvbnMuc3RvcGFsbHBsYXlpbmcmJgp0aGlzLnN0b3BBbGxQbGF5aW5nKCk7dGhpcy5pc1ZpZGVvUGxheWluZz0hMDthJiZ0aGlzLm9wdGlvbnMuYXV0b3NsaWRlYW5kcGxheWFmdGVyZmlyc3RwbGF5ZWQmJih0aGlzLm9wdGlvbnMuYXV0b3BsYXl2aWRlbz0hMCx0aGlzLmlzUGF1c2VkPSExKTt2YXIgYz10aGlzLmlzRnVsbHNjcmVlbj90aGlzLiRmdWxsc2NyZWVuOnRoaXMuJGdhbGxlcnksZD10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzEwXSxlPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTFdO2lmKHRoaXMuaXNGdWxsc2NyZWVuKXt2YXIgZD10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE3XT9NYXRoLm1pbih0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE3XSx0aGlzLmZ1bGxzY3JlZW5XaWR0aCk6TWF0aC5taW4oZCx0aGlzLmZ1bGxzY3JlZW5XaWR0aCksZj10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE4XT9NYXRoLm1pbih0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE4XSwKdGhpcy5mdWxsc2NyZWVuSGVpZ2h0KTpNYXRoLm1pbihlLHRoaXMuZnVsbHNjcmVlbkhlaWdodCk7dGhpcy5hZGp1c3RGdWxsc2NyZWVuKGQsZik7ZT1kO2Q9Zn1lbHNlIGIoIi5odG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMud2lkdGgsaGVpZ2h0OnRoaXMub3B0aW9ucy5oZWlnaHR9KSxlPXRoaXMub3B0aW9ucy53aWR0aCxkPXRoaXMub3B0aW9ucy5oZWlnaHQ7Zj10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzJdO2IoIi5odG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQsYykuaHRtbCgiPGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWxvYWRpbmctY2VudGVyLSIrdGhpcy5pZCsiJz48L2Rpdj48ZGl2IGlkPSdodG1sNWdhbGxlcnktZWxlbS12aWRlby0iK3RoaXMuaWQrIicgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7b3ZlcmZsb3c6aGlkZGVuO3RvcDoiKyh0aGlzLm9wdGlvbnMuc2xpZGVzaGFkb3cmJgohdGhpcy5pc0Z1bGxzY3JlZW4/NDowKSsicHg7bGVmdDoiKyh0aGlzLm9wdGlvbnMuc2xpZGVzaGFkb3cmJiF0aGlzLmlzRnVsbHNjcmVlbj80OjApKyJweDt3aWR0aDoiK2UrInB4O2hlaWdodDoiK2QrInB4Oyc+PC9kaXY+Iit0aGlzLm9wdGlvbnMud2F0ZXJtYXJrY29kZSk7Zi5tYXRjaCgvXDpcL1wvLiooZGFpXC5seSkvaSkmJihmPSJodHRwczovL3d3dy5kYWlseW1vdGlvbi5jb20vZW1iZWQvdmlkZW8vIitmLm1hdGNoKC8oZGFpXC5seVwvKShbYS16QS1aMC05XC1cX10rKS8pWzJdKTthJiYoZj0wPmYuaW5kZXhPZigiPyIpP2YrIj9hdXRvcGxheT0xIjpmKyImYXV0b3BsYXk9MSIpO2IoIiNodG1sNWdhbGxlcnktZWxlbS12aWRlby0iK3RoaXMuaWQsYykuaHRtbCgiPGlmcmFtZSB3aWR0aD0nIitlKyInIGhlaWdodD0nIitkKyInIHNyYz0nIitmKyInIGZyYW1lYm9yZGVyPScwJyB3ZWJraXRBbGxvd0Z1bGxTY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIGFsbG93RnVsbFNjcmVlbj48L2lmcmFtZT4iKTsKdGhpcy5vcHRpb25zLmdvb2dsZWFuYWx5dGljc2FjY291bnQmJndpbmRvdy5fZ2FxJiZ3aW5kb3cuX2dhcS5wdXNoKFsiX3RyYWNrRXZlbnQiLCJWaWRlbyIsIlBsYXkiLHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMl1dKX0sc2hvd1lvdXR1YmU6ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zLnN0b3BhbGxwbGF5aW5nJiZ0aGlzLnN0b3BBbGxQbGF5aW5nKCk7dGhpcy5pc1ZpZGVvUGxheWluZz0hMDthJiZ0aGlzLm9wdGlvbnMuYXV0b3NsaWRlYW5kcGxheWFmdGVyZmlyc3RwbGF5ZWQmJih0aGlzLm9wdGlvbnMuYXV0b3BsYXl2aWRlbz0hMCx0aGlzLmlzUGF1c2VkPSExKTt2YXIgYz10aGlzLmlzRnVsbHNjcmVlbj90aGlzLiRmdWxsc2NyZWVuOnRoaXMuJGdhbGxlcnksZD10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzEwXSxlPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTFdO2lmKHRoaXMuaXNGdWxsc2NyZWVuKXt2YXIgZD10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE3XT8KTWF0aC5taW4odGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxN10sdGhpcy5mdWxsc2NyZWVuV2lkdGgpOk1hdGgubWluKGQsdGhpcy5mdWxsc2NyZWVuV2lkdGgpLGY9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxOF0/TWF0aC5taW4odGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxOF0sdGhpcy5mdWxsc2NyZWVuSGVpZ2h0KTpNYXRoLm1pbihlLHRoaXMuZnVsbHNjcmVlbkhlaWdodCk7dGhpcy5hZGp1c3RGdWxsc2NyZWVuKGQsZik7ZT1kO2Q9Zn1lbHNlIGIoIi5odG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQsdGhpcy4kZ2FsbGVyeSkuY3NzKHt3aWR0aDp0aGlzLm9wdGlvbnMud2lkdGgsaGVpZ2h0OnRoaXMub3B0aW9ucy5oZWlnaHR9KSxlPXRoaXMub3B0aW9ucy53aWR0aCxkPXRoaXMub3B0aW9ucy5oZWlnaHQ7Zj10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzJdO2IoIi5odG1sNWdhbGxlcnktZWxlbS0iK3RoaXMuaWQsYykuaHRtbCgiPGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWxvYWRpbmctY2VudGVyLSIrCnRoaXMuaWQrIic+PC9kaXY+PGRpdiBpZD0naHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkKyInIHN0eWxlPSdkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OmhpZGRlbjt0b3A6IisodGhpcy5vcHRpb25zLnNsaWRlc2hhZG93JiYhdGhpcy5pc0Z1bGxzY3JlZW4/NDowKSsicHg7bGVmdDoiKyh0aGlzLm9wdGlvbnMuc2xpZGVzaGFkb3cmJiF0aGlzLmlzRnVsbHNjcmVlbj80OjApKyJweDt3aWR0aDoiK2UrInB4O2hlaWdodDoiK2QrInB4Oyc+PC9kaXY+Iit0aGlzLm9wdGlvbnMud2F0ZXJtYXJrY29kZSk7dmFyIGo9dGhpcztpZighQVNZb3VUdWJlSWZyYW1lQVBJUmVhZHkmJihBU1lvdVR1YmVUaW1lb3V0Kz0xMDAsM0UzPkFTWW91VHViZVRpbWVvdXQpKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ai5zaG93WW91dHViZShhKX0sMTAwKTtyZXR1cm59aWYoQVNZb3VUdWJlSWZyYW1lQVBJUmVhZHkmJiF0aGlzLm9wdGlvbnMuaXNNb2JpbGUmJiF0aGlzLm9wdGlvbnMuaXNJRTYmJgohdGhpcy5vcHRpb25zLmlzSUU3KXtjPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMl0ubWF0Y2goLyhcP3Y9fFwvXGRcL3xcL2VtYmVkXC98XC92XC98XC5iZVwvKShbYS16QS1aMC05XC1cX10rKS8pWzJdO2Y9bnVsbDthJiYoZj1mdW5jdGlvbihhKXthLnRhcmdldC5wbGF5VmlkZW8oKX0pO3ZhciBsPXRoaXMuZ2V0WW91dHViZVBhcmFtcyh0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzJdKSxsPWIuZXh0ZW5kKHtodG1sNToxLGNvbnRyb2xzOmoub3B0aW9ucy52aWRlb2hpZGVjb250cm9scz8iMCI6IjEiLHNob3dpbmZvOmoub3B0aW9ucy52aWRlb2hpZGVjb250cm9scz8iMCI6IjEiLGF1dG9wbGF5OmE/MTowLHJlbDowLHdtb2RlOiJ0cmFuc3BhcmVudCJ9LGwpO3RoaXMueXRQbGF5ZXI9bmV3IFlULlBsYXllcigiaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkLHt3aWR0aDplLGhlaWdodDpkLHZpZGVvSWQ6YyxwbGF5ZXJWYXJzOmwsZXZlbnRzOntvblJlYWR5OmYsCm9uU3RhdGVDaGFuZ2U6ZnVuY3Rpb24oYSl7YS5kYXRhPT1ZVC5QbGF5ZXJTdGF0ZS5FTkRFRCYmKGoub25WaWRlb0VuZCgpLGouaXNQYXVzZWR8fGouc2xpZGVSdW4oLTEpKX19fSl9ZWxzZSBmPXRoaXMucHJlcGFyZVlvdXR1YmVIcmVmKGYpLGEmJihmPTA+Zi5pbmRleE9mKCI/Iik/ZisiP2F1dG9wbGF5PTEiOmYrIiZhdXRvcGxheT0xIiksZj0wPmYuaW5kZXhPZigiPyIpP2YrIj93bW9kZT10cmFuc3BhcmVudCZyZWw9MCI6ZisiJndtb2RlPXRyYW5zcGFyZW50JnJlbD0wIixqLm9wdGlvbnMudmlkZW9oaWRlY29udHJvbHMmJihmKz0iJmNvbnRyb2xzPTAmc2hvd2luZm89MCIpLGIoIiNodG1sNWdhbGxlcnktZWxlbS12aWRlby0iK3RoaXMuaWQsYykuaHRtbCgiPGlmcmFtZSB3aWR0aD0nIitlKyInIGhlaWdodD0nIitkKyInIHNyYz0nIitmKyInIGZyYW1lYm9yZGVyPScwJyB3ZWJraXRBbGxvd0Z1bGxTY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIGFsbG93RnVsbFNjcmVlbj48L2lmcmFtZT4iKTsKdGhpcy5vcHRpb25zLmdvb2dsZWFuYWx5dGljc2FjY291bnQmJndpbmRvdy5fZ2FxJiZ3aW5kb3cuX2dhcS5wdXNoKFsiX3RyYWNrRXZlbnQiLCJWaWRlbyIsIlBsYXkiLHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMl1dKX0sc2hvd1ZpbWVvOmZ1bmN0aW9uKGEpe3RoaXMub3B0aW9ucy5zdG9wYWxscGxheWluZyYmdGhpcy5zdG9wQWxsUGxheWluZygpO3RoaXMuaXNWaWRlb1BsYXlpbmc9ITA7YSYmdGhpcy5vcHRpb25zLmF1dG9zbGlkZWFuZHBsYXlhZnRlcmZpcnN0cGxheWVkJiYodGhpcy5vcHRpb25zLmF1dG9wbGF5dmlkZW89ITAsdGhpcy5pc1BhdXNlZD0hMSk7dmFyIGM9dGhpcztpZigiZnVuY3Rpb24iIT09dHlwZW9mICRmJiYoQVNWaW1lb1RpbWVvdXQrPTEwMCwzRTM+QVNWaW1lb1RpbWVvdXQpKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5zaG93VmltZW8oYSl9LDEwMCk7cmV0dXJufXZhciBkPXRoaXMuaXNGdWxsc2NyZWVuP3RoaXMuJGZ1bGxzY3JlZW46dGhpcy4kZ2FsbGVyeSwKZT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzEwXSxmPXRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMTFdO2lmKHRoaXMuaXNGdWxsc2NyZWVuKXt2YXIgZT10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE3XT9NYXRoLm1pbih0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE3XSx0aGlzLmZ1bGxzY3JlZW5XaWR0aCk6TWF0aC5taW4oZSx0aGlzLmZ1bGxzY3JlZW5XaWR0aCksaj10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE4XT9NYXRoLm1pbih0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzE4XSx0aGlzLmZ1bGxzY3JlZW5IZWlnaHQpOk1hdGgubWluKGYsdGhpcy5mdWxsc2NyZWVuSGVpZ2h0KTt0aGlzLmFkanVzdEZ1bGxzY3JlZW4oZSxqKTtmPWU7ZT1qfWVsc2UgYigiLmh0bWw1Z2FsbGVyeS1lbGVtLSIrdGhpcy5pZCx0aGlzLiRnYWxsZXJ5KS5jc3Moe3dpZHRoOnRoaXMub3B0aW9ucy53aWR0aCxoZWlnaHQ6dGhpcy5vcHRpb25zLmhlaWdodH0pLApmPXRoaXMub3B0aW9ucy53aWR0aCxlPXRoaXMub3B0aW9ucy5oZWlnaHQ7aj10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzJdO2o9MD5qLmluZGV4T2YoIj8iKT9qKyI/IjpqKyImIjtqPWEmJiF0aGlzLm9wdGlvbnMuaXNBbmRyb2lkP2orImF1dG9wbGF5PTEiOmorImF1dG9wbGF5PTAiO2orPSImYXBpPTEmcGxheWVyX2lkPWh0bWw1Z2FsbGVyeV92aW1lb18iK3RoaXMuaWQ7YigiLmh0bWw1Z2FsbGVyeS1lbGVtLSIrdGhpcy5pZCxkKS5odG1sKCI8ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktbG9hZGluZy1jZW50ZXItIit0aGlzLmlkKyInPjwvZGl2PjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1lbGVtLXZpZGVvLSIrdGhpcy5pZCsiJyBzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47dG9wOiIrKHRoaXMub3B0aW9ucy5zbGlkZXNoYWRvdyYmIXRoaXMuaXNGdWxsc2NyZWVuPzQ6MCkrInB4O2xlZnQ6IisodGhpcy5vcHRpb25zLnNsaWRlc2hhZG93JiYKIXRoaXMuaXNGdWxsc2NyZWVuPzQ6MCkrInB4O3dpZHRoOiIrZisicHg7aGVpZ2h0OiIrZSsicHg7Jz48L2Rpdj4iK3RoaXMub3B0aW9ucy53YXRlcm1hcmtjb2RlKTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tIit0aGlzLmlkLGQpLmh0bWwoIjxpZnJhbWUgaWQ9J2h0bWw1Z2FsbGVyeV92aW1lb18iK3RoaXMuaWQrIicgd2lkdGg9JyIrZisiJyBoZWlnaHQ9JyIrZSsiJyBzcmM9JyIraisiJyBmcmFtZWJvcmRlcj0nMCcgd2Via2l0QWxsb3dGdWxsU2NyZWVuIG1vemFsbG93ZnVsbHNjcmVlbiBhbGxvd0Z1bGxTY3JlZW4+PC9pZnJhbWU+Iik7ImZ1bmN0aW9uIj09PXR5cGVvZiAkZiYmKGEmJiF0aGlzLm9wdGlvbnMuaXNBbmRyb2lkKSYmKGQ9YigiI2h0bWw1Z2FsbGVyeV92aW1lb18iK3RoaXMuaWQpWzBdLGM9dGhpcyxjLnZpbWVvUGxheWVyPSRmKGQpLGMudmltZW9QbGF5ZXIuYWRkRXZlbnQoInJlYWR5IixmdW5jdGlvbigpe2MudmltZW9QbGF5ZXIuYWRkRXZlbnQoImZpbmlzaCIsCmZ1bmN0aW9uKCl7Yy5vblZpZGVvRW5kKCk7Yy5pc1BhdXNlZHx8Yy5zbGlkZVJ1bigtMSl9KX0pKTt0aGlzLm9wdGlvbnMuZ29vZ2xlYW5hbHl0aWNzYWNjb3VudCYmd2luZG93Ll9nYXEmJndpbmRvdy5fZ2FxLnB1c2goWyJfdHJhY2tFdmVudCIsIlZpZGVvIiwiUGxheSIsdGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsyXV0pfSxzaG93SWZyYW1lOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5pc0Z1bGxzY3JlZW4/dGhpcy4kZnVsbHNjcmVlbjp0aGlzLiRnYWxsZXJ5LGM9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxMF0sZD10aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzExXTtpZih0aGlzLmlzRnVsbHNjcmVlbil7dmFyIGM9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxN10/TWF0aC5taW4odGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxN10sdGhpcy5mdWxsc2NyZWVuV2lkdGgpOk1hdGgubWluKGMsdGhpcy5mdWxsc2NyZWVuV2lkdGgpLGU9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsxOF0/Ck1hdGgubWluKHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV1bMThdLHRoaXMuZnVsbHNjcmVlbkhlaWdodCk6TWF0aC5taW4oZCx0aGlzLmZ1bGxzY3JlZW5IZWlnaHQpO3RoaXMuYWRqdXN0RnVsbHNjcmVlbihjLGUpO2Q9YztjPWV9ZWxzZSBiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkLHRoaXMuJGdhbGxlcnkpLmNzcyh7d2lkdGg6dGhpcy5vcHRpb25zLndpZHRoLGhlaWdodDp0aGlzLm9wdGlvbnMuaGVpZ2h0fSksZD10aGlzLm9wdGlvbnMud2lkdGgsYz10aGlzLm9wdGlvbnMuaGVpZ2h0O2U9dGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXVsyXTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0tIit0aGlzLmlkLGEpLmh0bWwoIjxkaXYgY2xhc3M9J2h0bWw1Z2FsbGVyeS1sb2FkaW5nLWNlbnRlci0iK3RoaXMuaWQrIic+PC9kaXY+PGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWVsZW0taWZyYW1lLSIrdGhpcy5pZCsiJyBzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47dG9wOiIrCih0aGlzLm9wdGlvbnMuc2xpZGVzaGFkb3cmJiF0aGlzLmlzRnVsbHNjcmVlbj80OjApKyJweDtsZWZ0OiIrKHRoaXMub3B0aW9ucy5zbGlkZXNoYWRvdyYmIXRoaXMuaXNGdWxsc2NyZWVuPzQ6MCkrInB4O3dpZHRoOiIrZCsicHg7aGVpZ2h0OiIrYysicHg7Jz48L2Rpdj4iK3RoaXMub3B0aW9ucy53YXRlcm1hcmtjb2RlKTtiKCIuaHRtbDVnYWxsZXJ5LWVsZW0taWZyYW1lLSIrdGhpcy5pZCxhKS5odG1sKCI8aWZyYW1lIGlkPSdodG1sNWdhbGxlcnktaWZyYW1lLSIrdGhpcy5pZCsiJyB3aWR0aD0nIitkKyInIGhlaWdodD0nIitjKyInIHNyYz0nIitlKyInIGZyYW1lYm9yZGVyPScwJyB3ZWJraXRBbGxvd0Z1bGxTY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIGFsbG93RnVsbFNjcmVlbj48L2lmcmFtZT4iKTt0aGlzLm9wdGlvbnMuZ29vZ2xlYW5hbHl0aWNzYWNjb3VudCYmd2luZG93Ll9nYXEmJndpbmRvdy5fZ2FxLnB1c2goWyJfdHJhY2tFdmVudCIsIklmcmFtZSIsIlBsYXkiLAp0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzJdXSl9LGNoZWNrVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4hYT8tMTphLm1hdGNoKC9cLihqcGd8Z2lmfHBuZ3xibXB8anBlZykoLiopPyQvaSk/MTphLm1hdGNoKC9bXlwuXVwuKHN3ZilccyokL2kpPzI6YS5tYXRjaCgvW15cLl1cLihtcDMpXHMqJC9pKT8zOmEubWF0Y2goL1teXC5dXC4ocGRmKVxzKiQvaSk/NDphLm1hdGNoKC9cLihmbHYpKC4qKT8kL2kpPzU6YS5tYXRjaCgvXC4obXA0fG00dikoLiopPyQvaSk/NjphLm1hdGNoKC9cLihvZ3Z8b2dnKSguKik/JC9pKT83OmEubWF0Y2goL1wuKHdlYm0pKC4qKT8kL2kpPzg6YS5tYXRjaCgvXDpcL1wvLiooeW91dHViZVwuY29tKS9pKXx8YS5tYXRjaCgvXDpcL1wvLiooeW91dHVcLmJlKS9pKT85OmEubWF0Y2goL1w6XC9cLy4qKHZpbWVvXC5jb20pL2kpPzEwOmEubWF0Y2goL1w6XC9cLy4qKGRhaWx5bW90aW9uXC5jb20pL2kpfHxhLm1hdGNoKC9cOlwvXC8uKihkYWlcLmx5KS9pKT8KMTE6MX0sb25DaGFuZ2U6ZnVuY3Rpb24oKXtiKHdpbmRvdykudHJpZ2dlcigiaHRtbDVnYWxsZXJ5Lm9uY2hhbmdlIixbdGhpcy5pZCx0aGlzLmN1ckVsZW1dKTtpZih0aGlzLm9wdGlvbnMub25jaGFuZ2UmJndpbmRvd1t0aGlzLm9wdGlvbnMub25jaGFuZ2VdJiYiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93W3RoaXMub3B0aW9ucy5vbmNoYW5nZV0pd2luZG93W3RoaXMub3B0aW9ucy5vbmNoYW5nZV0odGhpcy5lbGVtQXJyYXlbdGhpcy5jdXJFbGVtXS5jb25jYXQoW3RoaXMuaWRdKSl9LG9uU2xpZGVzaG93T3ZlcjpmdW5jdGlvbigpe2Iod2luZG93KS50cmlnZ2VyKCJodG1sNWdhbGxlcnkub25zbGlkZXNob3dvdmVyIixbdGhpcy5pZCx0aGlzLmN1ckVsZW1dKTtpZih0aGlzLm9wdGlvbnMub25zbGlkZXNob3dvdmVyJiZ3aW5kb3dbdGhpcy5vcHRpb25zLm9uc2xpZGVzaG93b3Zlcl0mJiJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3dbdGhpcy5vcHRpb25zLm9uc2xpZGVzaG93b3Zlcl0pd2luZG93W3RoaXMub3B0aW9ucy5vbnNsaWRlc2hvd292ZXJdKHRoaXMuZWxlbUFycmF5W3RoaXMuY3VyRWxlbV0pfSwKb25UaHVtYk92ZXI6ZnVuY3Rpb24oYSl7Yih3aW5kb3cpLnRyaWdnZXIoImh0bWw1Z2FsbGVyeS5vbnRodW1ib3ZlciIsW3RoaXMuaWQsYV0pO2lmKHRoaXMub3B0aW9ucy5vbnRodW1ib3ZlciYmd2luZG93W3RoaXMub3B0aW9ucy5vbnRodW1ib3Zlcl0mJiJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3dbdGhpcy5vcHRpb25zLm9udGh1bWJvdmVyXSl3aW5kb3dbdGhpcy5vcHRpb25zLm9udGh1bWJvdmVyXSh0aGlzLmVsZW1BcnJheVthXSl9LG9uVGh1bWJDbGljazpmdW5jdGlvbihhKXtiKHdpbmRvdykudHJpZ2dlcigiaHRtbDVnYWxsZXJ5Lm9udGh1bWJjbGljayIsW3RoaXMuaWQsYV0pO2lmKHRoaXMub3B0aW9ucy5vbnRodW1iY2xpY2smJndpbmRvd1t0aGlzLm9wdGlvbnMub250aHVtYmNsaWNrXSYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvd1t0aGlzLm9wdGlvbnMub250aHVtYmNsaWNrXSl3aW5kb3dbdGhpcy5vcHRpb25zLm9udGh1bWJjbGlja10odGhpcy5lbGVtQXJyYXlbYV0uY29uY2F0KFt0aGlzLmlkXSkpOwp0aGlzLm9wdGlvbnMudGh1bWJqdW1wdG90b3AmJih0aGlzLm9wdGlvbnMudGh1bWJqdW1wYW5jaG9yJiYwPHRoaXMub3B0aW9ucy50aHVtYmp1bXBhbmNob3IubGVuZ3RoJiYwPGIoIiMiK3RoaXMub3B0aW9ucy50aHVtYmp1bXBhbmNob3IpLmxlbmd0aD8oYT1iKCIjIit0aGlzLm9wdGlvbnMudGh1bWJqdW1wYW5jaG9yKS5vZmZzZXQoKS50b3AsYih3aW5kb3cpLnNjcm9sbFRvcChhKSk6MDw9dGhpcy5vcHRpb25zLnRodW1ianVtcHBvc2l0aW9uP2Iod2luZG93KS5zY3JvbGxUb3AodGhpcy5vcHRpb25zLnRodW1ianVtcHBvc2l0aW9uKTooYT10aGlzLmNvbnRhaW5lci5vZmZzZXQoKS50b3AsYTxiKHdpbmRvdykuc2Nyb2xsVG9wKCkmJmIod2luZG93KS5zY3JvbGxUb3AoYSkpKX0sb25WaWRlb0VuZDpmdW5jdGlvbigpe2Iod2luZG93KS50cmlnZ2VyKCJodG1sNWdhbGxlcnkudmlkZW9lbmQiLFt0aGlzLmlkLHRoaXMuY3VyRWxlbV0pO2lmKHRoaXMub3B0aW9ucy5vbnZpZGVvZW5kJiYKd2luZG93W3RoaXMub3B0aW9ucy5vbnZpZGVvZW5kXSYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvd1t0aGlzLm9wdGlvbnMub252aWRlb2VuZF0pd2luZG93W3RoaXMub3B0aW9ucy5vbnZpZGVvZW5kXSh0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dKTt0aGlzLm9wdGlvbnMucmVsb2Fkb252aWRlb2VuZD90aGlzLnNsaWRlUnVuKHRoaXMuY3VyRWxlbSk6dGhpcy5vcHRpb25zLmxvYWRuZXh0b252aWRlb2VuZCYmdGhpcy5zbGlkZVJ1bigtMSl9LGVtYmVkSFRNTDVWaWRlbzpmdW5jdGlvbihhLGMsZCxlLGYsaixsLGcpe3ZhciBrPXRoaXM7aWYoKHRoaXMub3B0aW9ucy5pc0lFMTF8fHRoaXMub3B0aW9ucy5pc0lFKSYmdGhpcy5vcHRpb25zLnVzZW5hdGl2ZWh0bWw1Y29udHJvbHNvbmllfHx0aGlzLm9wdGlvbnMuaXNGaXJlZm94JiZ0aGlzLm9wdGlvbnMudXNlbmF0aXZlaHRtbDVjb250cm9sc29uZmlyZWZveHx8dGhpcy5vcHRpb25zLmlzSVBob25lJiZ0aGlzLm9wdGlvbnMudXNlbmF0aXZlaHRtbDVjb250cm9sc29uaXBob25lfHwKdGhpcy5vcHRpb25zLmlzSVBhZCYmdGhpcy5vcHRpb25zLnVzZW5hdGl2ZWh0bWw1Y29udHJvbHNvbmlwYWR8fHRoaXMub3B0aW9ucy5pc0FuZHJvaWQmJnRoaXMub3B0aW9ucy51c2VuYXRpdmVodG1sNWNvbnRyb2xzb25hbmRyb2lkKXRoaXMub3B0aW9ucy5uYXRpdmVodG1sNWNvbnRyb2xzPSEwO2lmKHRoaXMub3B0aW9ucy5pc0lPU3x8dGhpcy5vcHRpb25zLmlzQW5kcm9pZCl0aGlzLm9wdGlvbnMuZnVsbHNjcmVlbm5hdGl2ZWNvbnRyb2xzPSEwO2EuaHRtbCgiPGRpdiBjbGFzcz0naHRtbDVnYWxsZXJ5LWVsZW0tdmlkZW8tY29udGFpbmVyLSIrdGhpcy5pZCsiJyBzdHlsZT0ncG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTsnPjx2aWRlbyBpZD0naHRtbDVnYWxsZXJ5LWVsZW0taHRtbDUtdmlkZW8tIit0aGlzLmlkKyInIHdpZHRoPScxMDAlJyBoZWlnaHQ9JzEwMCUnIisodGhpcy5vcHRpb25zLm5hdGl2ZWh0bWw1Y29udHJvbHMmJgohdGhpcy5vcHRpb25zLnZpZGVvaGlkZWNvbnRyb2xzPyIgY29udHJvbHMiOiIiKSsodGhpcy5vcHRpb25zLmh0bWw1dmlkZW9ub2Rvd25sb2FkPycgY29udHJvbHNMaXN0PSJub2Rvd25sb2FkIic6IiIpKyI+PC9kaXY+Iik7YigidmlkZW8iLGEpLmdldCgwKS5zZXRBdHRyaWJ1dGUoInNyYyIsKGYmJnRoaXMuaXNIZD9mOmUpKygwPGw/IiN0PSIrbDoiIikpOyF0aGlzLm9wdGlvbnMubmF0aXZlaHRtbDVjb250cm9scyYmIXRoaXMub3B0aW9ucy52aWRlb2hpZGVjb250cm9scyYmKGIoInZpZGVvIixhKS5kYXRhKCJzcmMiLGUpLGIoInZpZGVvIixhKS5kYXRhKCJoZCIsZiksYigidmlkZW8iLGEpLmRhdGEoImlzaGQiLHRoaXMuaXNIZCksYigidmlkZW8iLGEpLmFkZEhUTUw1VmlkZW9Db250cm9scyh0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcix0aGlzLCIjaHRtbDVnYWxsZXJ5LWVsZW0taHRtbDUtdmlkZW8tIit0aGlzLmlkLCExLCExLDEsdGhpcy5vcHRpb25zLmZ1bGxzY3JlZW5uYXRpdmVjb250cm9scywKdGhpcy5vcHRpb25zLmh0bWw1dmlkZW9ub2Rvd25sb2FkLG51bGwpKTt0aGlzLmVsZW1BcnJheVt0aGlzLmN1ckVsZW1dWzVdJiYoYigidmlkZW8iLGEpLmNzcyh7Y3Vyc29yOiJwb2ludGVyIn0pLGIoInZpZGVvIixhKS5vZmYoImNsaWNrIikub24oImNsaWNrIixmdW5jdGlvbigpe2suZWxlbUFycmF5W2suY3VyRWxlbV1bNV0mJihrLmVsZW1BcnJheVtrLmN1ckVsZW1dWzZdP3dpbmRvdy5vcGVuKGsuZWxlbUFycmF5W2suY3VyRWxlbV1bNV0say5lbGVtQXJyYXlbay5jdXJFbGVtXVs2XSk6d2luZG93Lm9wZW4oay5lbGVtQXJyYXlbay5jdXJFbGVtXVs1XSkpfSkpOyhqfHxnKSYmYigidmlkZW8iLGEpLmdldCgwKS5wbGF5KCk7YigidmlkZW8iLGEpLm9mZigiZW5kZWQiKS5vbigiZW5kZWQiLGZ1bmN0aW9uKCl7ay5vblZpZGVvRW5kKCk7ay5pc1BhdXNlZHx8ay5zbGlkZVJ1bigtMSl9KX0sZW1iZWRGbGFzaDpmdW5jdGlvbihhLGIsZCxlLGYsaixrKXtpZih0aGlzLm9wdGlvbnMuZmxhc2hJbnN0YWxsZWQpe3ZhciBnPQp7cGx1Z2luc3BhZ2U6Imh0dHA6Ly93d3cuYWRvYmUuY29tL2dvL2dldGZsYXNocGxheWVyIixxdWFsaXR5OiJoaWdoIixhbGxvd0Z1bGxTY3JlZW46InRydWUiLGFsbG93U2NyaXB0QWNjZXNzOiJhbHdheXMiLHR5cGU6ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIn07Zy53aWR0aD1iO2cuaGVpZ2h0PWQ7Zy5zcmM9ZTtnLndtb2RlPWY7YS5hcHBlbmQoJzxkaXYgaWQ9IicraysnIj48L2Rpdj4nKTt3aW5kb3cuSFRNTDVHYWxsZXJ5U1dGT2JqZWN0PUhUTUw1R2FsbGVyeVNXRk9iamVjdEZ1bmMoKTt3aW5kb3cuSFRNTDVHYWxsZXJ5U1dGT2JqZWN0LmVtYmVkU1dGKGUsayxiLGQsIjkuMC4wIiwhMSxqLGcse30pfWVsc2UgYS5odG1sKCI8ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktZWxlbS1lcnJvci0iK3RoaXMuaWQrIicgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7IHBvc2l0aW9uOmFic29sdXRlOyB0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6Iit0aGlzLm9wdGlvbnMud2lkdGgrCiJweDsgbGVmdDowcHg7IHRvcDoiK01hdGgucm91bmQodGhpcy5vcHRpb25zLmhlaWdodC8yLTEwKSsicHg7Jz48ZGl2IGNsYXNzPSdodG1sNWdhbGxlcnktZXJyb3ItIit0aGlzLmlkKyInPjxkaXY+VGhlIHJlcXVpcmVkIEFkb2JlIEZsYXNoIFBsYXllciBwbHVnaW4gaXMgbm90IGluc3RhbGxlZDwvZGl2PjxkaXYgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTEycHg7aGVpZ2h0OjMzcHg7bWFyZ2luOjBweCBhdXRvOyc+PGEgaHJlZj0naHR0cDovL3d3dy5hZG9iZS5jb20vZ28vZ2V0Zmxhc2hwbGF5ZXInPjxpbWcgc3JjPSdodHRwOi8vd3d3LmFkb2JlLmNvbS9pbWFnZXMvc2hhcmVkL2Rvd25sb2FkX2J1dHRvbnMvZ2V0X2ZsYXNoX3BsYXllci5naWYnIGFsdD0nR2V0IEFkb2JlIEZsYXNoIHBsYXllcicgd2lkdGg9JzExMicgaGVpZ2h0PSczMyc+PC9pbWc+PC9hPjwvZGl2PjwvZGl2PiIpfX07dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9CmIodGhpcyk7az1rfHx7fTtmb3IodmFyIGMgaW4gayljLnRvTG93ZXJDYXNlKCkhPT1jJiYoa1tjLnRvTG93ZXJDYXNlKCldPWtbY10sZGVsZXRlIGtbY10pO2lmKCghYih0aGlzKS5kYXRhKCJkb25vdGluaXQiKXx8ayYmay5mb3JjZWluaXQpJiYhYih0aGlzKS5kYXRhKCJpbml0ZWQiKSl7Yih0aGlzKS5kYXRhKCJpbml0ZWQiLDEpO3RoaXMub3B0aW9ucz1iLmV4dGVuZCh7fSxrKTt2YXIgZD10aGlzO2IuZWFjaChhLmRhdGEoKSxmdW5jdGlvbihhLGIpe2Qub3B0aW9uc1thLnRvTG93ZXJDYXNlKCldPWJ9KTsic2tpbiJpbiB0aGlzLm9wdGlvbnMmJih0aGlzLm9wdGlvbnMuc2tpbj10aGlzLm9wdGlvbnMuc2tpbi50b0xvd2VyQ2FzZSgpKTtjPXtza2luZm9sZGVyOiJza2lucy9ob3Jpem9udGFsLyIscGFkZGluZzo2LGJnY29sb3I6IiNmZmZmZmYiLGJnaW1hZ2U6IiIsZ2FsbGVyeXNoYWRvdzohMCxzbGlkZXNoYWRvdzohMSxzaG93c29jaWFsbWVkaWE6ITEsaGVhZGVycG9zOiJ0b3AiLApzaG93ZGVzY3JpcHRpb246ITAsdGl0bGVvdmVybGF5OiEwLHRpdGxlYXV0b2hpZGU6ITAsdGl0bGVjc3M6IiB7Y29sb3I6I2ZmZmZmZjsgZm9udC1zaXplOjE0cHg7IGZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOyBvdmVyZmxvdzpoaWRkZW47IHRleHQtYWxpZ246bGVmdDsgcGFkZGluZzoxMHB4IDBweCAxMHB4IDEwcHg7IGJhY2tncm91bmQ6cmdiKDEwMiwgMTAyLCAxMDIpIHRyYW5zcGFyZW50OyBiYWNrZ3JvdW5kOiByZ2JhKDEwMiwgMTAyLCAxMDIsIDAuNik7IGZpbHRlcjoncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9Izk5NjY2NjY2LCBlbmRDb2xvcnN0cj0jOTk2NjY2NjYpJzsgLW1zLWZpbHRlcjoncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9Izk5NjY2NjY2LCBlbmRDb2xvcnN0cj0jOTk2NjY2NjYpJzsgfSIsdGl0bGVjc3NsaW5rOiIgYSB7Y29sb3I6I2ZmZmZmZjt9IiwKZGVzY3JpcHRpb25jc3M6IiB7Y29sb3I6I2ZmZmZmZjsgZm9udC1zaXplOjEzcHg7IGZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOyBvdmVyZmxvdzpoaWRkZW47IHRleHQtYWxpZ246bGVmdDsgcGFkZGluZzowcHggMHB4IDEwcHggMTBweDsgYmFja2dyb3VuZDpyZ2IoMTAyLCAxMDIsIDEwMikgdHJhbnNwYXJlbnQ7IGJhY2tncm91bmQ6IHJnYmEoMTAyLCAxMDIsIDEwMiwgMC42KTsgZmlsdGVyOidwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0jOTk2NjY2NjYsIGVuZENvbG9yc3RyPSM5OTY2NjY2NiknOyAtbXMtZmlsdGVyOidwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0jOTk2NjY2NjYsIGVuZENvbG9yc3RyPSM5OTY2NjY2NiknOyB9IixkZXNjcmlwdGlvbmNzc2xpbms6IiBhIHtjb2xvcjojZmZmZmZmO30iLHNob3djYXJvdXNlbDohMCxjYXJvdXNlbG1hcmdpbjowLApjYXJvdXNlbGJndHJhbnNwYXJlbnQ6ITEsY2Fyb3VzZWxiZ2NvbG9yc3RhcnQ6IiM0OTRmNTQiLGNhcm91c2VsYmdjb2xvcmVuZDoiIzI5MmMzMSIsY2Fyb3VzZWx0b3Bib3JkZXI6IiM2NjY2NjYiLGNhcm91c2VsYm90dG9tYm9yZGVyOiIjMTExMTExIix0aHVtYndpZHRoOjY0LHRodW1iaGVpZ2h0OjQ4LHRodW1iZ2FwOjQsdGh1bWJtYXJnaW46Nix0aHVtYnVuc2VsZWN0ZWRpbWFnZWJvcmRlcmNvbG9yOiIjZmZmZmZmIix0aHVtYmltYWdlYm9yZGVyOjEsdGh1bWJpbWFnZWJvcmRlcmNvbG9yOiIiLHRodW1ic2hvd3BsYXlvbnZpZGVvOiEwLHRodW1ic2hhZG93OiExLHRodW1ib3BhY2l0eTowLjh9O3ZhciBoPXtwYWRkaW5nOjEyLHNraW5mb2xkZXI6InNraW5zL2xpZ2h0LyIsYmdjb2xvcjoiIixiZ2ltYWdlOiIiLGdhbGxlcnlzaGFkb3c6ITEsc2xpZGVzaGFkb3c6ITAsc2hvd3NvY2lhbG1lZGlhOiExLGhlYWRlcnBvczoidG9wIixzaG93ZGVzY3JpcHRpb246ITAsdGl0bGVvdmVybGF5OiEwLAp0aXRsZWF1dG9oaWRlOiEwLHRpdGxlY3NzOiIge2NvbG9yOiNmZmZmZmY7IGZvbnQtc2l6ZToxNHB4OyBmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTpub3JtYWw7IHRleHQtYWxpZ246bGVmdDsgcGFkZGluZzoxMHB4IDBweCAxMHB4IDEwcHg7ICBiYWNrZ3JvdW5kOnJnYigxMDIsIDEwMiwgMTAyKSB0cmFuc3BhcmVudDsgYmFja2dyb3VuZDogcmdiYSgxMDIsIDEwMiwgMTAyLCAwLjYpOyBmaWx0ZXI6J3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSM5OTY2NjY2NiwgZW5kQ29sb3JzdHI9Izk5NjY2NjY2KSc7IC1tcy1maWx0ZXI6J3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSM5OTY2NjY2NiwgZW5kQ29sb3JzdHI9Izk5NjY2NjY2KSc7IH0iLHRpdGxlY3NzbGluazoiIGEge2NvbG9yOiNmZmZmZmY7fSIsCmRlc2NyaXB0aW9uY3NzOiIge2NvbG9yOiNmZmZmZmY7IGZvbnQtc2l6ZToxMnB4OyBmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTpub3JtYWw7IHRleHQtYWxpZ246bGVmdDsgcGFkZGluZzowcHggMHB4IDEwcHggMTBweDsgIGJhY2tncm91bmQ6cmdiKDEwMiwgMTAyLCAxMDIpIHRyYW5zcGFyZW50OyBiYWNrZ3JvdW5kOiByZ2JhKDEwMiwgMTAyLCAxMDIsIDAuNik7IGZpbHRlcjoncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9Izk5NjY2NjY2LCBlbmRDb2xvcnN0cj0jOTk2NjY2NjYpJzsgLW1zLWZpbHRlcjoncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9Izk5NjY2NjY2LCBlbmRDb2xvcnN0cj0jOTk2NjY2NjYpJzsgfSIsZGVzY3JpcHRpb25jc3NsaW5rOiIgYSB7Y29sb3I6I2ZmZmZmZjt9IiwKc2hvd2Nhcm91c2VsOiEwLGNhcm91c2VsbWFyZ2luOjEwLGNhcm91c2VsYmd0cmFuc3BhcmVudDohMCx0aHVtYndpZHRoOjQ4LHRodW1iaGVpZ2h0OjQ4LHRodW1iZ2FwOjgsdGh1bWJtYXJnaW46MTIsdGh1bWJ1bnNlbGVjdGVkaW1hZ2Vib3JkZXJjb2xvcjoiI2ZmZiIsdGh1bWJpbWFnZWJvcmRlcjoyLHRodW1iaW1hZ2Vib3JkZXJjb2xvcjoiI2ZmZiIsdGh1bWJzaG93cGxheW9udmlkZW86ITAsdGh1bWJzaGFkb3c6ITAsdGh1bWJvcGFjaXR5OjAuOH0sZj17cGFkZGluZzowLHNraW5mb2xkZXI6InNraW5zL21lZGlhcGFnZS8iLGJnY29sb3I6IiIsYmdpbWFnZToiIixnYWxsZXJ5c2hhZG93OiExLHNsaWRlc2hhZG93OiExLHNob3dzb2NpYWxtZWRpYTohMSxoZWFkZXJwb3M6InRvcCIsc2hvd2Rlc2NyaXB0aW9uOiEwLHRpdGxlb3ZlcmxheTohMCx0aXRsZWF1dG9oaWRlOiEwLHRpdGxlY3NzOiIge2NvbG9yOiNmZmZmZmY7IGZvbnQtc2l6ZToxNHB4OyBmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTpub3JtYWw7IHRleHQtYWxpZ246bGVmdDsgcGFkZGluZzoxMHB4IDBweCAxMHB4IDEwcHg7ICBiYWNrZ3JvdW5kOnJnYigxMDIsIDEwMiwgMTAyKSB0cmFuc3BhcmVudDsgYmFja2dyb3VuZDogcmdiYSgxMDIsIDEwMiwgMTAyLCAwLjYpOyBmaWx0ZXI6J3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSM5OTY2NjY2NiwgZW5kQ29sb3JzdHI9Izk5NjY2NjY2KSc7IC1tcy1maWx0ZXI6J3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSM5OTY2NjY2NiwgZW5kQ29sb3JzdHI9Izk5NjY2NjY2KSc7IH0iLAp0aXRsZWNzc2xpbms6IiBhIHtjb2xvcjojZmZmZmZmO30iLGRlc2NyaXB0aW9uY3NzOiIge2NvbG9yOiNmZmZmZmY7IGZvbnQtc2l6ZToxMnB4OyBmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTpub3JtYWw7IHRleHQtYWxpZ246bGVmdDsgcGFkZGluZzowcHggMHB4IDEwcHggMTBweDsgIGJhY2tncm91bmQ6cmdiKDEwMiwgMTAyLCAxMDIpIHRyYW5zcGFyZW50OyBiYWNrZ3JvdW5kOiByZ2JhKDEwMiwgMTAyLCAxMDIsIDAuNik7IGZpbHRlcjoncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9Izk5NjY2NjY2LCBlbmRDb2xvcnN0cj0jOTk2NjY2NjYpJzsgLW1zLWZpbHRlcjoncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9Izk5NjY2NjY2LCBlbmRDb2xvcnN0cj0jOTk2NjY2NjYpJzsgfSIsZGVzY3JpcHRpb25jc3NsaW5rOiIgYSB7Y29sb3I6I2ZmZmZmZjt9IiwKc2hvd2Nhcm91c2VsOiEwLGNhcm91c2VsbWFyZ2luOjI0LGNhcm91c2VsbXVsdGlyb3dzOiEwLHRodW1icm93Z2FwOjE2LGNhcm91c2VsYmd0cmFuc3BhcmVudDohMCx0aHVtYndpZHRoOjEyMCx0aHVtYmhlaWdodDo2MCx0aHVtYmdhcDoxMCx0aHVtYm1hcmdpbjoxMix0aHVtYnVuc2VsZWN0ZWRpbWFnZWJvcmRlcmNvbG9yOiIjZmZmIix0aHVtYmltYWdlYm9yZGVyOjAsdGh1bWJpbWFnZWJvcmRlcmNvbG9yOiIjZmZmIix0aHVtYnNob3dwbGF5b252aWRlbzohMCx0aHVtYnNoYWRvdzohMSx0aHVtYm9wYWNpdHk6MC44LHRodW1ianVtcHRvdG9wOiEwLHRodW1ic2hvd3RpdGxlOiEwLHRodW1idGl0bGVjc3M6Int0ZXh0LWFsaWduOmNlbnRlcjsgY29sb3I6IzAwMDsgZm9udC1zaXplOjEycHg7IGZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOyBvdmVyZmxvdzpoaWRkZW47fSIsdGh1bWJ0aXRsZWhlaWdodDoyNH0saj17cGFkZGluZzoxMixza2luZm9sZGVyOiJza2lucy9nYWxsZXJ5LyIsCmJnY29sb3I6IiIsYmdpbWFnZToiIixnYWxsZXJ5c2hhZG93OiExLHNsaWRlc2hhZG93OiEwLHNob3dzb2NpYWxtZWRpYTohMSxoZWFkZXJwb3M6InRvcCIsc2hvd2Rlc2NyaXB0aW9uOiEwLHRpdGxlb3ZlcmxheTohMCx0aXRsZWF1dG9oaWRlOiEwLHRpdGxlY3NzOiIge2NvbG9yOiNmZmZmZmY7IGZvbnQtc2l6ZToxNHB4OyBmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTpub3JtYWw7IHRleHQtYWxpZ246bGVmdDsgcGFkZGluZzoxMHB4IDBweCAxMHB4IDEwcHg7ICBiYWNrZ3JvdW5kOnJnYigxMDIsIDEwMiwgMTAyKSB0cmFuc3BhcmVudDsgYmFja2dyb3VuZDogcmdiYSgxMDIsIDEwMiwgMTAyLCAwLjYpOyBmaWx0ZXI6J3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSM5OTY2NjY2NiwgZW5kQ29sb3JzdHI9Izk5NjY2NjY2KSc7IC1tcy1maWx0ZXI6J3Byb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPSM5OTY2NjY2NiwgZW5kQ29sb3JzdHI9Izk5NjY2NjY2KSc7IH0iLAp0aXRsZWNzc2xpbms6IiBhIHtjb2xvcjojZmZmZmZmO30iLGRlc2NyaXB0aW9uY3NzOiIge2NvbG9yOiNmZmZmZmY7IGZvbnQtc2l6ZToxMnB4OyBmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTpub3JtYWw7IHRleHQtYWxpZ246bGVmdDsgcGFkZGluZzowcHggMHB4IDEwcHggMTBweDsgIGJhY2tncm91bmQ6cmdiKDEwMiwgMTAyLCAxMDIpIHRyYW5zcGFyZW50OyBiYWNrZ3JvdW5kOiByZ2JhKDEwMiwgMTAyLCAxMDIsIDAuNik7IGZpbHRlcjoncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9Izk5NjY2NjY2LCBlbmRDb2xvcnN0cj0jOTk2NjY2NjYpJzsgLW1zLWZpbHRlcjoncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9Izk5NjY2NjY2LCBlbmRDb2xvcnN0cj0jOTk2NjY2NjYpJzsgfSIsZGVzY3JpcHRpb25jc3NsaW5rOiIgYSB7Y29sb3I6I2ZmZmZmZjt9IiwKc2hvd2Nhcm91c2VsOiEwLGNhcm91c2VsbWFyZ2luOjEwLGNhcm91c2VsYmd0cmFuc3BhcmVudDohMCx0aHVtYndpZHRoOjEyMCx0aHVtYmhlaWdodDo2MCx0aHVtYmdhcDo4LHRodW1ibWFyZ2luOjEyLHRodW1idW5zZWxlY3RlZGltYWdlYm9yZGVyY29sb3I6IiNmZmYiLHRodW1iaW1hZ2Vib3JkZXI6Mix0aHVtYmltYWdlYm9yZGVyY29sb3I6IiNmZmYiLHRodW1ic2hvd3BsYXlvbnZpZGVvOiEwLHRodW1ic2hhZG93OiEwLHRodW1ib3BhY2l0eTowLjgsdGh1bWJzaG93dGl0bGU6ITAsdGh1bWJ0aXRsZWNzczoie3RleHQtYWxpZ246Y2VudGVyOyBjb2xvcjojMDAwOyBmb250LXNpemU6MTJweDsgZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6bm9ybWFsO30iLHRodW1idGl0bGVoZWlnaHQ6MTh9LGw9e3BhZGRpbmc6MTIsc2tpbmZvbGRlcjoic2tpbnMvZ2FsbGVyeS8iLGJnY29sb3I6IiIsYmdpbWFnZToiIiwKZ2FsbGVyeXNoYWRvdzohMSxzbGlkZXNoYWRvdzohMCxzaG93c29jaWFsbWVkaWE6ITEsaGVhZGVycG9zOiJib3R0b20iLHNob3dkZXNjcmlwdGlvbjohMCx0aXRsZW92ZXJsYXk6ITEsdGl0bGVoZWlnaHQ6NzIsdGl0bGVhdXRvaGlkZTohMCx0aXRsZWNzczoie2NvbG9yOiMzMzM7Zm9udC1zaXplOjE0cHg7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MTZweCA4cHggNHB4IDhweDt9Iix0aXRsZWNzc2xpbms6ImF7Y29sb3I6IzMzMzt9IixkZXNjcmlwdGlvbmNzczoie2NvbG9yOiMzMzM7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NHB4IDhweDsgfSIsZGVzY3JpcHRpb25jc3NsaW5rOiJhe2NvbG9yOiMzMzM7fSIsdGl0bGVzbWFsbHNjcmVlbjohMCxzaG93Y2Fyb3VzZWw6ITAsCmNhcm91c2VsbWFyZ2luOjEwLGNhcm91c2VsYmd0cmFuc3BhcmVudDohMCx0aHVtYndpZHRoOjEyMCx0aHVtYmhlaWdodDo2MCx0aHVtYmdhcDo4LHRodW1ibWFyZ2luOjEyLHRodW1idW5zZWxlY3RlZGltYWdlYm9yZGVyY29sb3I6IiNmZmYiLHRodW1iaW1hZ2Vib3JkZXI6Mix0aHVtYmltYWdlYm9yZGVyY29sb3I6IiNmZmYiLHRodW1ic2hvd3BsYXlvbnZpZGVvOiEwLHRodW1ic2hhZG93OiEwLHRodW1ib3BhY2l0eTowLjgsdGh1bWJzaG93dGl0bGU6ITEsdGh1bWJ0aXRsZWNzczoie3RleHQtYWxpZ246Y2VudGVyOyBjb2xvcjojMDAwOyBmb250LXNpemU6MTJweDsgZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6bm9ybWFsO30iLHRodW1idGl0bGVoZWlnaHQ6MTh9LGc9e3BhZGRpbmc6MTIsc2tpbmZvbGRlcjoic2tpbnMvZ2FsbGVyeS8iLGJnY29sb3I6IiIsYmdpbWFnZToiIixnYWxsZXJ5c2hhZG93OiExLApzbGlkZXNoYWRvdzohMCxzaG93c29jaWFsbWVkaWE6ITEsaGVhZGVycG9zOiJib3R0b20iLHNob3dkZXNjcmlwdGlvbjohMCx0aXRsZW92ZXJsYXk6ITEsdGl0bGVoZWlnaHQ6NzIsdGl0bGVhdXRvaGlkZTohMCx0aXRsZWNzczoie2NvbG9yOiMzMzM7Zm9udC1zaXplOjE0cHg7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MTZweCA4cHggNHB4IDhweDt9Iix0aXRsZWNzc2xpbms6ImF7Y29sb3I6IzMzMzt9IixkZXNjcmlwdGlvbmNzczoie2NvbG9yOiMzMzM7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NHB4IDhweDsgfSIsZGVzY3JpcHRpb25jc3NsaW5rOiJhe2NvbG9yOiMzMzM7fSIsdGl0bGVzbWFsbHNjcmVlbjohMCxzaG93Y2Fyb3VzZWw6ITAsY2Fyb3VzZWxtYXJnaW46MTAsCmNhcm91c2VscG9zaXRpb246InRvcCIsY2Fyb3VzZWxiZ3RyYW5zcGFyZW50OiEwLHRodW1id2lkdGg6MTIwLHRodW1iaGVpZ2h0OjYwLHRodW1iZ2FwOjgsdGh1bWJtYXJnaW46MTIsdGh1bWJ1bnNlbGVjdGVkaW1hZ2Vib3JkZXJjb2xvcjoiI2ZmZiIsdGh1bWJpbWFnZWJvcmRlcjoyLHRodW1iaW1hZ2Vib3JkZXJjb2xvcjoiI2ZmZiIsdGh1bWJzaG93cGxheW9udmlkZW86ITAsdGh1bWJzaGFkb3c6ITAsdGh1bWJvcGFjaXR5OjAuOCx0aHVtYnNob3d0aXRsZTohMCx0aHVtYnRpdGxlY3NzOiJ7dGV4dC1hbGlnbjpjZW50ZXI7IGNvbG9yOiMwMDA7IGZvbnQtc2l6ZToxMnB4OyBmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTpub3JtYWw7fSIsdGh1bWJ0aXRsZWhlaWdodDoxOH0sbT17cGFkZGluZzoxMixza2luZm9sZGVyOiJza2lucy9nYWxsZXJ5LyIsYmdjb2xvcjoiIixiZ2ltYWdlOiIiLGdhbGxlcnlzaGFkb3c6ITEsCnNsaWRlc2hhZG93OiEwLHNob3dzb2NpYWxtZWRpYTohMSxoZWFkZXJwb3M6ImJvdHRvbW91dHNpZGUiLHNob3dkZXNjcmlwdGlvbjohMCx0aXRsZW92ZXJsYXk6ITEsdGl0bGVoZWlnaHQ6NzIsdGl0bGVhdXRvaGlkZTohMCx0aXRsZWNzczoie2NvbG9yOiMzMzM7Zm9udC1zaXplOjE0cHg7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MTZweCA4cHggNHB4IDhweDt9Iix0aXRsZWNzc2xpbms6ImF7Y29sb3I6IzMzMzt9IixkZXNjcmlwdGlvbmNzczoie2NvbG9yOiMzMzM7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6NHB4IDhweDsgfSIsZGVzY3JpcHRpb25jc3NsaW5rOiJhe2NvbG9yOiMzMzM7fSIsdGl0bGVzbWFsbHNjcmVlbjohMCxzaG93Y2Fyb3VzZWw6ITAsCmNhcm91c2VsbWFyZ2luOjEwLGNhcm91c2VsYmd0cmFuc3BhcmVudDohMCx0aHVtYndpZHRoOjEyMCx0aHVtYmhlaWdodDo2MCx0aHVtYmdhcDo4LHRodW1ibWFyZ2luOjEyLHRodW1idW5zZWxlY3RlZGltYWdlYm9yZGVyY29sb3I6IiNmZmYiLHRodW1iaW1hZ2Vib3JkZXI6Mix0aHVtYmltYWdlYm9yZGVyY29sb3I6IiNmZmYiLHRodW1ic2hvd3BsYXlvbnZpZGVvOiEwLHRodW1ic2hhZG93OiEwLHRodW1ib3BhY2l0eTowLjgsdGh1bWJzaG93dGl0bGU6ITAsdGh1bWJ0aXRsZWNzczoie3RleHQtYWxpZ246Y2VudGVyOyBjb2xvcjojMDAwOyBmb250LXNpemU6MTJweDsgZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6bm9ybWFsO30iLHRodW1idGl0bGVoZWlnaHQ6MTh9LG49e3NraW5mb2xkZXI6InNraW5zL2RhcmtuZXNzLyIscGFkZGluZzoxMixiZ2NvbG9yOiIjNDQ0NDQ0IixiZ2ltYWdlOiJiYWNrZ3JvdW5kLmpwZyIsCmdhbGxlcnlzaGFkb3c6ITEsc2xpZGVzaGFkb3c6ITEsaGVhZGVycG9zOiJib3R0b20iLHNob3dkZXNjcmlwdGlvbjohMSx0aXRsZW92ZXJsYXk6ITEsdGl0bGVhdXRvaGlkZTohMSx0aXRsZWNzczoiIHtjb2xvcjojZmZmZmZmOyBmb250LXNpemU6MTZweDsgZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6bm9ybWFsOyB0ZXh0LWFsaWduOmxlZnQ7IHBhZGRpbmc6MTBweCAwcHg7fSIsdGl0bGVjc3NsaW5rOiIgYSB7Y29sb3I6I2ZmZmZmZjt9IixkZXNjcmlwdGlvbmNzczoiIHtjb2xvcjojZmZmZmZmOyBmb250LXNpemU6MTJweDsgZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6bm9ybWFsOyB0ZXh0LWFsaWduOmxlZnQ7IHBhZGRpbmc6MHB4IDBweCAxMHB4IDBweDt9IixkZXNjcmlwdGlvbmNzc2xpbms6IiBhIHtjb2xvcjojZmZmZmZmO30iLApzaG93Y2Fyb3VzZWw6ITAsY2Fyb3VzZWxtYXJnaW46OCxjYXJvdXNlbGJndHJhbnNwYXJlbnQ6ITEsY2Fyb3VzZWxiZ2NvbG9yc3RhcnQ6IiM0OTRmNTQiLGNhcm91c2VsYmdjb2xvcmVuZDoiIzI5MmMzMSIsY2Fyb3VzZWx0b3Bib3JkZXI6IiM2NjY2NjYiLGNhcm91c2VsYm90dG9tYm9yZGVyOiIjMTExMTExIix0aHVtYndpZHRoOjY0LHRodW1iaGVpZ2h0OjQ4LHRodW1iZ2FwOjQsdGh1bWJtYXJnaW46Nix0aHVtYnVuc2VsZWN0ZWRpbWFnZWJvcmRlcmNvbG9yOiIjZmZmZmZmIix0aHVtYmltYWdlYm9yZGVyOjEsdGh1bWJpbWFnZWJvcmRlcmNvbG9yOiIiLHRodW1ic2hvd3BsYXlvbnZpZGVvOiEwLHRodW1ic2hhZG93OiExLHRodW1ib3BhY2l0eTowLjh9LHM9e3NraW5mb2xkZXI6InNraW5zL3ZlcnRpY2FsbGlnaHQvIixwYWRkaW5nOjEyLGJnY29sb3I6IiNmZmYiLGJnaW1hZ2U6IiIsZ2FsbGVyeXNoYWRvdzohMSxzbGlkZXNoYWRvdzohMSxoZWFkZXJwb3M6ImJvdHRvbSIsc2hvd2Rlc2NyaXB0aW9uOiExLAp0aXRsZW92ZXJsYXk6ITEsdGl0bGVhdXRvaGlkZTohMSx0aXRsZWNzczoiIHtjb2xvcjojMzMzOyBmb250LXNpemU6MTZweDsgZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6bm9ybWFsOyB0ZXh0LWFsaWduOmxlZnQ7IHBhZGRpbmc6MTBweCAwcHg7fSIsdGl0bGVjc3NsaW5rOiIgYSB7Y29sb3I6IzMzMzt9IixkZXNjcmlwdGlvbmNzczoiIHtjb2xvcjojMzMzOyBmb250LXNpemU6MTJweDsgZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6bm9ybWFsOyB0ZXh0LWFsaWduOmxlZnQ7IHBhZGRpbmc6MHB4IDBweCAxMHB4IDBweDt9IixkZXNjcmlwdGlvbmNzc2xpbms6IiBhIHtjb2xvcjojMzMzO30iLHNob3djYXJvdXNlbDohMCxjYXJvdXNlbG1hcmdpbjo4LGNhcm91c2VscG9zaXRpb246InJpZ2h0IixjYXJvdXNlbGJndHJhbnNwYXJlbnQ6ITEsCmNhcm91c2VsYmdjb2xvcnN0YXJ0OiIjZmZmIixjYXJvdXNlbGJnY29sb3JlbmQ6IiNmZmYiLGNhcm91c2VsdG9wYm9yZGVyOiIjZmZmIixjYXJvdXNlbGJvdHRvbWJvcmRlcjoiI2ZmZiIsY2Fyb3VzZWxoaWdobGlnaHRiZ2NvbG9yc3RhcnQ6IiNmMGYwZjAiLGNhcm91c2VsaGlnaGxpZ2h0Ymdjb2xvcmVuZDoiI2YwZjBmMCIsY2Fyb3VzZWxoaWdobGlnaHR0b3Bib3JkZXI6IiNmMGYwZjAiLGNhcm91c2VsaGlnaGxpZ2h0Ym90dG9tYm9yZGVyOiIjZjBmMGYwIixjYXJvdXNlbGhpZ2hsaWdodGJnaW1hZ2U6IiIsdGh1bWJ3aWR0aDoxNDgsdGh1bWJoZWlnaHQ6NDgsdGh1bWJnYXA6Mix0aHVtYm1hcmdpbjo2LHRodW1idW5zZWxlY3RlZGltYWdlYm9yZGVyY29sb3I6IiIsdGh1bWJpbWFnZWJvcmRlcjowLHRodW1iaW1hZ2Vib3JkZXJjb2xvcjoiI2ZmZiIsdGh1bWJzaG93cGxheW9udmlkZW86ITAsdGh1bWJzaGFkb3c6ITEsdGh1bWJvcGFjaXR5OjAuOCx0aHVtYnNob3dpbWFnZTohMCwKdGh1bWJzaG93dGl0bGU6ITAsdGh1bWJ0aXRsZWNzczoie3RleHQtYWxpZ246Y2VudGVyOyBjb2xvcjojMzMzOyBmb250LXNpemU6MTJweDsgZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6bm9ybWFsO30ifSx0PXtza2luZm9sZGVyOiJza2lucy92ZXJ0aWNhbC8iLHBhZGRpbmc6MTIsYmdjb2xvcjoiIzQ0NDQ0NCIsYmdpbWFnZToiYmFja2dyb3VuZC5qcGciLGdhbGxlcnlzaGFkb3c6ITEsc2xpZGVzaGFkb3c6ITEsaGVhZGVycG9zOiJib3R0b20iLHNob3dkZXNjcmlwdGlvbjohMSx0aXRsZW92ZXJsYXk6ITEsdGl0bGVhdXRvaGlkZTohMSx0aXRsZWNzczoiIHtjb2xvcjojZmZmZmZmOyBmb250LXNpemU6MTZweDsgZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6bm9ybWFsOyB0ZXh0LWFsaWduOmxlZnQ7IHBhZGRpbmc6MTBweCAwcHg7fSIsCnRpdGxlY3NzbGluazoiIGEge2NvbG9yOiNmZmZmZmY7fSIsZGVzY3JpcHRpb25jc3M6IiB7Y29sb3I6I2ZmZmZmZjsgZm9udC1zaXplOjEycHg7IGZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOm5vcm1hbDsgdGV4dC1hbGlnbjpsZWZ0OyBwYWRkaW5nOjBweCAwcHggMTBweCAwcHg7fSIsZGVzY3JpcHRpb25jc3NsaW5rOiIgYSB7Y29sb3I6I2ZmZmZmZjt9IixzaG93Y2Fyb3VzZWw6ITAsY2Fyb3VzZWxtYXJnaW46OCxjYXJvdXNlbHBvc2l0aW9uOiJyaWdodCIsY2Fyb3VzZWxiZ3RyYW5zcGFyZW50OiExLGNhcm91c2VsYmdjb2xvcnN0YXJ0OiIjNDk0ZjU0IixjYXJvdXNlbGJnY29sb3JlbmQ6IiMyOTJjMzEiLGNhcm91c2VsdG9wYm9yZGVyOiIjNjY2NjY2IixjYXJvdXNlbGJvdHRvbWJvcmRlcjoiIzExMTExMSIsY2Fyb3VzZWxoaWdobGlnaHRiZ2NvbG9yc3RhcnQ6IiM5OTk5OTkiLGNhcm91c2VsaGlnaGxpZ2h0Ymdjb2xvcmVuZDoiIzY2NjY2NiIsCmNhcm91c2VsaGlnaGxpZ2h0dG9wYm9yZGVyOiIjY2NjY2NjIixjYXJvdXNlbGhpZ2hsaWdodGJvdHRvbWJvcmRlcjoiIzQ0NDQ0NCIsY2Fyb3VzZWxoaWdobGlnaHRiZ2ltYWdlOiIiLHRodW1id2lkdGg6MTQ4LHRodW1iaGVpZ2h0OjQ4LHRodW1iZ2FwOjIsdGh1bWJtYXJnaW46Nix0aHVtYnVuc2VsZWN0ZWRpbWFnZWJvcmRlcmNvbG9yOiIiLHRodW1iaW1hZ2Vib3JkZXI6MSx0aHVtYmltYWdlYm9yZGVyY29sb3I6IiNjY2NjY2MiLHRodW1ic2hvd3BsYXlvbnZpZGVvOiEwLHRodW1ic2hhZG93OiExLHRodW1ib3BhY2l0eTowLjgsdGh1bWJzaG93aW1hZ2U6ITAsdGh1bWJzaG93dGl0bGU6ITAsdGh1bWJ0aXRsZWNzczoie3RleHQtYWxpZ246Y2VudGVyOyBjb2xvcjojZmZmZmZmOyBmb250LXNpemU6MTJweDsgZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IG92ZXJmbG93OmhpZGRlbjsgd2hpdGUtc3BhY2U6bm9ybWFsO30ifSx4PXtza2luZm9sZGVyOiJza2lucy9zaG93Y2FzZS8iLApwYWRkaW5nOjEyLGJnY29sb3I6IiM0NDQ0NDQiLGJnaW1hZ2U6ImJhY2tncm91bmQuanBnIixnYWxsZXJ5c2hhZG93OiExLHNsaWRlc2hhZG93OiExLHNob3dzb2NpYWxtZWRpYTohMSxoZWFkZXJwb3M6ImJvdHRvbSIsc2hvd2Rlc2NyaXB0aW9uOiExLHRpdGxlb3ZlcmxheTohMSx0aXRsZWF1dG9oaWRlOiExLHRpdGxlY3NzOiIge2NvbG9yOiNmZmZmZmY7IGZvbnQtc2l6ZToxNnB4OyBmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTpub3JtYWw7IHRleHQtYWxpZ246bGVmdDsgcGFkZGluZzoxMHB4IDBweDt9Iix0aXRsZWNzc2xpbms6IiBhIHtjb2xvcjojZmZmZmZmO30iLGRlc2NyaXB0aW9uY3NzOiIge2NvbG9yOiNmZmZmZmY7IGZvbnQtc2l6ZToxMnB4OyBmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgb3ZlcmZsb3c6aGlkZGVuOyB3aGl0ZS1zcGFjZTpub3JtYWw7IHRleHQtYWxpZ246bGVmdDsgcGFkZGluZzowcHggMHB4IDEwcHggMHB4O30iLApkZXNjcmlwdGlvbmNzc2xpbms6IiBhIHtjb2xvcjojZmZmZmZmO30iLHNob3djYXJvdXNlbDohMCxjYXJvdXNlbG1hcmdpbjo4LGNhcm91c2VscG9zaXRpb246ImJvdHRvbSIsY2Fyb3VzZWxoZWlnaHQ6MjEwLGNhcm91c2VsYmd0cmFuc3BhcmVudDohMSxjYXJvdXNlbGJnY29sb3JzdGFydDoiIzQ5NGY1NCIsY2Fyb3VzZWxiZ2NvbG9yZW5kOiIjMjkyYzMxIixjYXJvdXNlbHRvcGJvcmRlcjoiIzY2NjY2NiIsY2Fyb3VzZWxib3R0b21ib3JkZXI6IiMxMTExMTEiLGNhcm91c2VsaGlnaGxpZ2h0Ymdjb2xvcnN0YXJ0OiIjOTk5OTk5IixjYXJvdXNlbGhpZ2hsaWdodGJnY29sb3JlbmQ6IiM2NjY2NjYiLGNhcm91c2VsaGlnaGxpZ2h0dG9wYm9yZGVyOiIjY2NjY2NjIixjYXJvdXNlbGhpZ2hsaWdodGJvdHRvbWJvcmRlcjoiIzQ0NDQ0NCIsY2Fyb3VzZWxoaWdobGlnaHRiZ2ltYWdlOiIiLHRodW1id2lkdGg6MTQ4LHRodW1iaGVpZ2h0OjYwLHRodW1iZ2FwOjIsdGh1bWJtYXJnaW46NiwKdGh1bWJ1bnNlbGVjdGVkaW1hZ2Vib3JkZXJjb2xvcjoiIix0aHVtYmltYWdlYm9yZGVyOjEsdGh1bWJpbWFnZWJvcmRlcmNvbG9yOiIjY2NjY2NjIix0aHVtYnNob3dwbGF5b252aWRlbzohMCx0aHVtYnNoYWRvdzohMSx0aHVtYm9wYWNpdHk6MC44LHRodW1ic2hvd2ltYWdlOiEwLHRodW1ic2hvd3RpdGxlOiEwLHRodW1idGl0bGVjc3M6Int0ZXh0LWFsaWduOmxlZnQ7IGNvbG9yOiNmZmZmZmY7IGZvbnQtc2l6ZToxMnB4OyBmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgb3ZlcmZsb3c6aGlkZGVuOyBwYWRkaW5nOiA2cHggMDt9Iix0aHVtYnNob3dkZXNjcmlwdGlvbjohMCx0aHVtYmRlc2NyaXB0aW9uY3NzOiJ7Zm9udC1zaXplOjEwcHg7fSJ9LHo9e2ZyZWVsaW5rOiJodHRwOi8vaHRtbDVib3guY29tL2h0bWw1Z2FsbGVyeS93YXRlcm1hcmsucGhwIix3YXRlcm1hcms6IiIsd2F0ZXJtYXJrbGluazoiIixlbmFibGV0YWJpbmRleDohMSxwbGF5dmlkZW9pbWFnZToicGxheXZpZGVvXzY0LnBuZyIsCnBsYXl2aWRlb3RodW1iaW1hZ2U6InBsYXl2aWRlby5wbmciLHNraW46Imhvcml6b250YWwiLGdvb2dsZWZvbnRzOiIiLG1vYmlsZXJlc2l6ZWV2ZW50OiExLGVuYWJsZXRvdWNoc3dpcGU6ITAsZW5hYmxldG91Y2hzd2lwZW9uYW5kcm9pZDohMCxkaXNhYmxlaG92ZXJldmVudG9udG91Y2g6ITEscmVzcG9uc2l2ZTohMSxyZXNwb25zaXZlZnVsbHNjcmVlbjohMSxzY3JlZW5xdWVyeTp7fSxmaXJzdGl0ZW1pZDowLGFkZGltZ3RpdGxlOiExLHNyYzoiIix4bWw6IiIseG1sbm9jYWNoZTohMCxzdG9wYWxscGxheWluZzohMSxsaWdodGJveDohMSxhdXRvc2xpZGU6ITEsc2xpZGVzaG93aW50ZXJ2YWw6NkUzLHJhbmRvbTohMSxib3JkZXJyYWRpdXM6MCxsb29wOjAscGF1c2Vvbm1vdXNlb3ZlcjohMSxyZXZlcnNlOiExLG5vdHVwZGF0ZWNhcm91c2VsOiExLHVwZGF0ZWNhcm91c2VsaW50ZXJ2YWw6NkU0LHlvdXR1YmVpbWFnZToiMC5qcGciLHlvdXR1YmV0aHVtYjoiMC5qcGciLGF1dG9wbGF5dmlkZW86ITEsCmh0bWw1cGxheWVyOiEwLHBsYXl2aWRlb29uY2xpY2s6ITAsdmlkZW9oaWRlY29udHJvbHM6ITEsdXNlZmxhc2hmb3JtcDRvbmZpcmVmb3g6ITEscmVsb2Fkb252aWRlb2VuZDohMSxsb2FkbmV4dG9udmlkZW9lbmQ6ITEsbmF0aXZlaHRtbDVjb250cm9sczohMSxoZGRlZmF1bHQ6ITEsdXNlZmxhc2hvbmllOTohMCx1c2VmbGFzaG9uaWUxMDohMSx1c2VmbGFzaG9uaWUxMTohMSxmdWxsc2NyZWVubmF0aXZlY29udHJvbHM6ITAsaHRtbDV2aWRlb25vZG93bmxvYWQ6ITAsdXNlbmF0aXZlaHRtbDVjb250cm9sc29uaXBob25lOiEwLHVzZW5hdGl2ZWh0bWw1Y29udHJvbHNvbmlwYWQ6ITAsdXNlbmF0aXZlaHRtbDVjb250cm9sc29uYW5kcm9pZDohMCx1c2VuYXRpdmVodG1sNWNvbnRyb2xzb25pZTohMSx1c2VuYXRpdmVodG1sNWNvbnRyb2xzb25maXJlZm94OiExLGF1dG9zbGlkZWFuZHBsYXlhZnRlcmZpcnN0cGxheWVkOiExLGxhenlsb2FkdGFnczoibGF6eS1zcmMsbGF6eWxvYWQtc3JjLGNmc3JjLHNyYyIsCmxpbmtvbmx5b252aWRlbzohMCxoaWRldGl0bGV3aGVudmlkZW9pc3BsYXlpbmc6ITEsaGlkZXBsYXlwYXVzZWZ1bGxzY3JlZW53aGVudmlkZW9pc3BsYXlpbmc6ITEsbGlnaHRib3hib3JkZXI6OCxsaWdodGJveHRleHRoZWlnaHQ6NzIsbGlnaHRib3htYXJnaW46MTIsbGlnaHRib3hiZ2NvbG9yOiIjZmZmIixsaWdodGJveHNob3d0aXRsZTohMCxsaWdodGJveHRpdGxlY3NzOiIge2NvbG9yOiMzMzMzMzM7IGZvbnQ6Ym9sZCAxMnB4IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOm5vcm1hbDsgbGluZS1oZWlnaHQ6MThweDt9IixsaWdodGJveHRpdGxlbGlua2NzczoiIGEge2NvbG9yOiMzMzMzMzM7fSIsbGlnaHRib3hzaG93ZGVzY3JpcHRpb246ITAsbGlnaHRib3hkZXNjcmlwdGlvbmNzczoiIHtjb2xvcjojMzMzMzMzOyBmb250Om5vcm1hbCAxMnB4IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOyBvdmVyZmxvdzpoaWRkZW47IHdoaXRlLXNwYWNlOm5vcm1hbDsgbGluZS1oZWlnaHQ6MTRweDt9IiwKbGlnaHRib3hkZXNjcmlwdGlvbmxpbmtjc3M6IiBhIHtjb2xvcjojMzMzMzMzO30iLGVmZmVjdDoiZmFkZSIsZWFzaW5nOiJlYXNlT3V0Q3ViaWMiLGR1cmF0aW9uOjE1MDAsc2xpZGU6e2R1cmF0aW9uOjFFMyxlYXNpbmc6ImVhc2VPdXRFeHBvIn0sd2lkdGg6NDgwLGhlaWdodDoyNzAsc2hvd3RpbWVyOiEwLHJlc2l6ZW1vZGU6ImZpdCIsc2hvd3RpdGxlOiEwLHRpdGxlaGVpZ2h0OjQ1LGVycm9yY3NzOiIge3RleHQtYWxpZ246Y2VudGVyOyBjb2xvcjojZmYwMDAwOyBmb250LXNpemU6MTRweDsgZm9udC1mYW1pbHk6QXJpYWwsIHNhbnMtc2VyaWY7fSIsc2hvd251bWJlcmluZzohMSxudW1iZXJpbmdmb3JtYXQ6IiVOVU0gLyAlVE9UQUwiLGdvb2dsZWFuYWx5dGljc2FjY291bnQ6IiIsc2hvd3NvY2lhbG1lZGlhOiExLHNvY2lhbGhlaWdodDozMCxzb2NpYWx1cmxmb3JlYWNoOiExLHNob3dmYWNlYm9va2xpa2U6ITAsZmFjZWJvb2tsaWtldXJsOiIiLHR3aXR0ZXJ1cmw6IiIsdHdpdHRlcnVzZXJuYW1lOiIiLAp0d2l0dGVydmlhOiJodG1sNWJveCIsc2hvd2dvb2dsZXBsdXM6ITAsZ29vZ2xlcGx1c3VybDoiIixpbml0c29jaWFsOiExLHNob3dzb2NpYWw6ITEsc29jaWFsbW9kZToibW91c2VvdmVyIixzb2NpYWxwb3NpdGlvbjoicG9zaXRpb246YWJzb2x1dGU7dG9wOjhweDtyaWdodDo4cHg7Iixzb2NpYWxwb3NpdGlvbmxpZ2h0Ym94OiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6OHB4O3JpZ2h0OjhweDsiLHNvY2lhbGRpcmVjdGlvbjoiaG9yaXpvbnRhbCIsc29jaWFsYnV0dG9uc2l6ZTozMixzb2NpYWxidXR0b25mb250c2l6ZToxOCxzb2NpYWxyb3RhdGVlZmZlY3Q6ITAsc2hvd2ZhY2Vib29rOiEwLHNob3d0d2l0dGVyOiEwLHNob3dwaW50ZXJlc3Q6ITAsc2hvd2VtYWlsOiExLHNob3dpbWFnZXRvb2xib3g6ImFsd2F5cyIsaW1hZ2V0b29sYm94c3R5bGU6InNpZGUiLGltYWdldG9vbGJveG1vZGU6Im1vdXNlb3ZlciIsc2hvd3BsYXlidXR0b246ITAsc2hvd3ByZXZidXR0b246ITAsc2hvd25leHRidXR0b246ITAsCnNob3dmdWxsc2NyZWVuYnV0dG9uOiEwLHNob3dwbGF5cGF1c2VmdWxsc2NyZWVuZm9yYWxsOiExLHNob3djYXJvdXNlbGZvcnNpbmdsZTohMSxjYXJvdXNlbGJndHJhbnNwYXJlbnQ6ITAsY2Fyb3VzZWxiZ2NvbG9yc3RhcnQ6IiNmZmZmZmYiLGNhcm91c2VsYmdjb2xvcmVuZDoiI2ZmZmZmZiIsY2Fyb3VzZWx0b3Bib3JkZXI6IiNmZmZmZmYiLGNhcm91c2VsYm90dG9tYm9yZGVyOiIjZmZmZmZmIixjYXJvdXNlbGJnaW1hZ2U6IiIsY2Fyb3VzZWxlYXNpbmc6ImVhc2VPdXRDaXJjIixjYXJvdXNlbGFycm93d2lkdGg6MzIsY2Fyb3VzZWxhcnJvd2hlaWdodDozMix0aHVtYnJlc3BvbnNpdmU6InNhbWVzaXplIix0aHVtYmNvbHVtbnM6NSx0aHVtYmNvbHVtbnNyZXNwb25zaXZlOiExLHRodW1ibWVkaXVtY29sdW1uczozLHRodW1ibWVkaXVtc2l6ZTo4MDAsdGh1bWJzbWFsbGNvbHVtbnM6Mix0aHVtYnNtYWxsc2l6ZTo0ODAsdGh1bWJtZWRpdW13aWR0aDo2NCx0aHVtYm1lZGl1bWhlaWdodDo2NCwKdGh1bWJzbWFsbHdpZHRoOjQ4LHRodW1ic21hbGxoZWlnaHQ6NDgsYWRkdGh1bWJuYWlsdGl0bGU6ITEsY2Fyb3VzZWxtdWx0aXJvd3M6ITEsdGh1bWJyb3dnYXA6MTYsdGh1bWJsaW5raW50aXRsZTohMSx0aHVtYmp1bXB0b3RvcDohMSx0aHVtYmp1bXBwb3NpdGlvbjotMSx0aHVtYmp1bXBhbmNob3I6IiIseW91dHViZWFwaWtleToiIix5b3V0dWJlcGxheWxpc3RpZDoiIix5b3V0dWJlcGxheWxpc3RtYXhyZXN1bHRzOiIiLHlvdXR1YmVwbGF5bGlzdHVzZW1heHJlczohMCx0aXRsZXNtYWxsc2NyZWVuOiExLHRpdGxlc21hbGxzY3JlZW53aWR0aDo2NDAsdGl0bGVoZWlnaHRzbWFsbHNjcmVlbjoxNDgsdmVyc2lvbjoiMy42IixmdjohMCxmbToiNzIsODQsNzcsNzYsNTMsMzIsNzEsOTcsMTA4LDEwOCwxMDEsMTE0LDEyMSwzMiw3MCwxMTQsMTAxLDEwMSwzMiw4NiwxMDEsMTE0LDExNSwxMDUsMTExLDExMCJ9LHo9InZlcnRpY2FsIj09dGhpcy5vcHRpb25zLnNraW4/Yi5leHRlbmQoeiwKdCk6InZlcnRpY2FsbGlnaHQiPT10aGlzLm9wdGlvbnMuc2tpbj9iLmV4dGVuZCh6LHMpOiJzaG93Y2FzZSI9PXRoaXMub3B0aW9ucy5za2luP2IuZXh0ZW5kKHoseCk6ImxpZ2h0Ij09dGhpcy5vcHRpb25zLnNraW4/Yi5leHRlbmQoeixoKToiZ2FsbGVyeSI9PXRoaXMub3B0aW9ucy5za2luP2IuZXh0ZW5kKHosaik6ImdhbGxlcnl3aXRodGV4dCI9PXRoaXMub3B0aW9ucy5za2luP2IuZXh0ZW5kKHosbCk6ImdhbGxlcnl3aXRodG9wdGh1bWJzIj09dGhpcy5vcHRpb25zLnNraW4/Yi5leHRlbmQoeixnKToiZ2FsbGVyeXdpdGh0ZXh0Ym90dG9tIj09dGhpcy5vcHRpb25zLnNraW4/Yi5leHRlbmQoeixtKToiaG9yaXpvbnRhbCI9PXRoaXMub3B0aW9ucy5za2luP2IuZXh0ZW5kKHosYyk6ImRhcmtuZXNzIj09dGhpcy5vcHRpb25zLnNraW4/Yi5leHRlbmQoeixuKToibWVkaWFwYWdlIj09dGhpcy5vcHRpb25zLnNraW4/Yi5leHRlbmQoeixmKTpiLmV4dGVuZCh6LGMpO3RoaXMub3B0aW9ucz0KYi5leHRlbmQoeix0aGlzLm9wdGlvbnMpO3RoaXMub3B0aW9ucy50aXRsZWhlaWdodGxhcmdlc2NyZWVuPXRoaXMub3B0aW9ucy50aXRsZWhlaWdodDt0aGlzLm9wdGlvbnMubGlnaHRib3gmJih0aGlzLm9wdGlvbnMuc2hvd2Z1bGxzY3JlZW5idXR0b249ITEpOyJzbGlkZWR1cmF0aW9uImluIHRoaXMub3B0aW9ucyYmKHRoaXMub3B0aW9ucy5zbGlkZS5kdXJhdGlvbj10aGlzLm9wdGlvbnMuc2xpZGVkdXJhdGlvbik7dGhpcy5vcHRpb25zLmh0bWxmb2xkZXI9d2luZG93LmxvY2F0aW9uLmhyZWYuc3Vic3RyKDAsd2luZG93LmxvY2F0aW9uLmhyZWYubGFzdEluZGV4T2YoIi8iKSsxKTtpZighdGhpcy5vcHRpb25zLmpzZm9sZGVyfHwhdGhpcy5vcHRpb25zLmpzZm9sZGVyLmxlbmd0aCl0aGlzLm9wdGlvbnMuanNmb2xkZXI9dTsiLyIhPXRoaXMub3B0aW9ucy5za2luZm9sZGVyLmNoYXJBdCgwKSYmKCJodHRwOiIhPXRoaXMub3B0aW9ucy5za2luZm9sZGVyLnN1YnN0cmluZygwLDUpJiYKImh0dHBzOiIhPXRoaXMub3B0aW9ucy5za2luZm9sZGVyLnN1YnN0cmluZygwLDYpKSYmKHRoaXMub3B0aW9ucy5za2luZm9sZGVyPXRoaXMub3B0aW9ucy5qc2ZvbGRlcit0aGlzLm9wdGlvbnMuc2tpbmZvbGRlcik7aD1bImJnaW1hZ2UiLCJwbGF5dmlkZW9pbWFnZSIsInBsYXl2aWRlb3RodW1iaW1hZ2UiXTtmb3IoYz0wO2M8aC5sZW5ndGg7YysrKXRoaXMub3B0aW9uc1toW2NdXSYmKDA8dGhpcy5vcHRpb25zW2hbY11dLmxlbmd0aCYmImh0dHA6Ly8iIT10aGlzLm9wdGlvbnNbaFtjXV0uc3Vic3RyaW5nKDAsNykudG9Mb3dlckNhc2UoKSYmImh0dHBzOi8vIiE9dGhpcy5vcHRpb25zW2hbY11dLnN1YnN0cmluZygwLDgpLnRvTG93ZXJDYXNlKCkpJiYodGhpcy5vcHRpb25zW2hbY11dPXRoaXMub3B0aW9ucy5za2luZm9sZGVyK3RoaXMub3B0aW9uc1toW2NdXSk7aD0iIjtmPXRoaXMub3B0aW9ucy5mbS5zcGxpdCgiLCIpO2ZvcihjPTA7YzxmLmxlbmd0aDtjKyspaCs9U3RyaW5nLmZyb21DaGFyQ29kZShmW2NdKTsKdGhpcy5vcHRpb25zLmZ2bT1oO2Y9ImhtdGFtZ2xpNWNib3hoLmljbG9sbXMiO2ZvcihjPTE7NT49YztjKyspZj1mLnNsaWNlKDAsYykrZi5zbGljZShjKzEpO2g9Zi5sZW5ndGg7Zm9yKGM9MDs1PmM7YysrKWY9Zi5zbGljZSgwLGgtOStjKStmLnNsaWNlKGgtOCtjKTstMSE9dGhpcy5vcHRpb25zLmh0bWxmb2xkZXIuaW5kZXhPZihmKSYmKHRoaXMub3B0aW9ucy5mdj0hMSk7aD1iKHdpbmRvdykud2lkdGgoKTtpZih0aGlzLm9wdGlvbnMuc2NyZWVucXVlcnkpZm9yKGMgaW4gdGhpcy5vcHRpb25zLnNjcmVlbnF1ZXJ5KWg8PXRoaXMub3B0aW9ucy5zY3JlZW5xdWVyeVtjXS5zY3JlZW53aWR0aCYmKHRoaXMub3B0aW9ucy5zY3JlZW5xdWVyeVtjXS5nYWxsZXJ5d2lkdGgmJih0aGlzLm9wdGlvbnMud2lkdGg9dGhpcy5vcHRpb25zLnNjcmVlbnF1ZXJ5W2NdLmdhbGxlcnl3aWR0aCksdGhpcy5vcHRpb25zLnNjcmVlbnF1ZXJ5W2NdLmdhbGxlcnloZWlnaHQmJih0aGlzLm9wdGlvbnMuaGVpZ2h0PQp0aGlzLm9wdGlvbnMuc2NyZWVucXVlcnlbY10uZ2FsbGVyeWhlaWdodCksdGhpcy5vcHRpb25zLnNjcmVlbnF1ZXJ5W2NdLnRodW1id2lkdGgmJih0aGlzLm9wdGlvbnMudGh1bWJ3aWR0aD10aGlzLm9wdGlvbnMuc2NyZWVucXVlcnlbY10udGh1bWJ3aWR0aCksdGhpcy5vcHRpb25zLnNjcmVlbnF1ZXJ5W2NdLnRodW1iaGVpZ2h0JiYodGhpcy5vcHRpb25zLnRodW1iaGVpZ2h0PXRoaXMub3B0aW9ucy5zY3JlZW5xdWVyeVtjXS50aHVtYmhlaWdodCkpOyJnYWxsZXJ5aWQiaW4gdGhpcy5vcHRpb25zP2M9dGhpcy5vcHRpb25zLmdhbGxlcnlpZDooYz1GLEYrKyk7aD1uZXcgZShhLHRoaXMub3B0aW9ucyxjKTthLmRhdGEoImh0bWw1Z2FsbGVyeW9iamVjdCIsaCk7YS5kYXRhKCJodG1sNWdhbGxlcnlpZCIsYyk7aHRtbDVHYWxsZXJ5T2JqZWN0cy5hZGRPYmplY3QoaCl9fSk7cmV0dXJuIHRoaXN9O2pRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtqUXVlcnkoIi5odG1sNWdhbGxlcnkiKS5odG1sNWdhbGxlcnkoKX0pfQpmdW5jdGlvbiBIVE1MNUdhbGxlcnlUaW1lcih1LHMsbSl7dmFyIHQ9dGhpczt0LnRpbWVvdXQ9dTt2YXIgeD1udWxsLGs9MCxBPSExLG49ITEsYj0hMTt0aGlzLnNldEludGVydmFsPWZ1bmN0aW9uKGIpe3QudGltZW91dD1ifTt0aGlzLnBhdXNlPWZ1bmN0aW9uKCl7biYmKEE9ITAsY2xlYXJJbnRlcnZhbCh4KSl9O3RoaXMucmVzdW1lPWZ1bmN0aW9uKHUpe2lmKCFifHx1KWI9ITEsbiYmQSYmKEE9ITEseD1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2srPTUwO2s+dC50aW1lb3V0JiYoY2xlYXJJbnRlcnZhbCh4KSxzJiZzKCkpO20mJm0oay90LnRpbWVvdXQpfSw1MCkpfTt0aGlzLnN0b3A9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHgpO20mJm0oLTEpO2s9MDtuPUE9ITF9O3RoaXMuc3RhcnQ9ZnVuY3Rpb24oKXtrPTA7QT0hMTtuPSEwO3g9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtrKz01MDtrPnQudGltZW91dCYmKGNsZWFySW50ZXJ2YWwoeCkscyYmcygpKTttJiZtKGsvdC50aW1lb3V0KX0sCjUwKX07dGhpcy5zdGFydGFuZHBhdXNlPWZ1bmN0aW9uKCl7az0wO2I9bj1BPSEwfX0KZnVuY3Rpb24gSFRNTDVHYWxsZXJ5U1dGT2JqZWN0RnVuYygpe2Z1bmN0aW9uIHUoKXtpZighQil7dHJ5e3ZhciBhPXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5hcHBlbmRDaGlsZChyLmNyZWF0ZUVsZW1lbnQoInNwYW4iKSk7YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfWNhdGNoKGIpe3JldHVybn1CPSEwO2Zvcih2YXIgYT1SLmxlbmd0aCxjPTA7YzxhO2MrKylSW2NdKCl9fWZ1bmN0aW9uIHMoYSl7Qj9hKCk6UltSLmxlbmd0aF09YX1mdW5jdGlvbiBtKGEpe2lmKHR5cGVvZiB2LmFkZEV2ZW50TGlzdGVuZXIhPWYpdi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixhLCExKTtlbHNlIGlmKHR5cGVvZiByLmFkZEV2ZW50TGlzdGVuZXIhPWYpci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixhLCExKTtlbHNlIGlmKHR5cGVvZiB2LmF0dGFjaEV2ZW50IT1mKXt2YXIgYj12O2IuYXR0YWNoRXZlbnQoIm9ubG9hZCIsYSk7TVtNLmxlbmd0aF09W2IsIm9ubG9hZCIsYV19ZWxzZSBpZigiZnVuY3Rpb24iPT0KdHlwZW9mIHYub25sb2FkKXt2YXIgYz12Lm9ubG9hZDt2Lm9ubG9hZD1mdW5jdGlvbigpe2MoKTthKCl9fWVsc2Ugdi5vbmxvYWQ9YX1mdW5jdGlvbiB0KCl7dmFyIGI9ei5sZW5ndGg7aWYoMDxiKWZvcih2YXIgYz0wO2M8YjtjKyspe3ZhciBnPXpbY10uaWQsaj16W2NdLmNhbGxiYWNrRm4saD17c3VjY2VzczohMSxpZDpnfTtpZigwPHAucHZbMF0pe3ZhciBsPWUoZyk7aWYobClpZihhKHpbY10uc3dmVmVyc2lvbikmJiEocC53ayYmMzEyPnAud2spKWQoZywhMCksaiYmKGguc3VjY2Vzcz0hMCxoLnJlZj14KGcpLGooaCkpO2Vsc2UgaWYoeltjXS5leHByZXNzSW5zdGFsbCYmaygpKXtoPXt9O2guZGF0YT16W2NdLmV4cHJlc3NJbnN0YWxsO2gud2lkdGg9bC5nZXRBdHRyaWJ1dGUoIndpZHRoIil8fCIwIjtoLmhlaWdodD1sLmdldEF0dHJpYnV0ZSgiaGVpZ2h0Iil8fCIwIjtsLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSYmKGguc3R5bGVjbGFzcz1sLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSk7CmwuZ2V0QXR0cmlidXRlKCJhbGlnbiIpJiYoaC5hbGlnbj1sLmdldEF0dHJpYnV0ZSgiYWxpZ24iKSk7Zm9yKHZhciBtPXt9LGw9bC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyYW0iKSxyPWwubGVuZ3RoLHE9MDtxPHI7cSsrKSJtb3ZpZSIhPWxbcV0uZ2V0QXR0cmlidXRlKCJuYW1lIikudG9Mb3dlckNhc2UoKSYmKG1bbFtxXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKV09bFtxXS5nZXRBdHRyaWJ1dGUoInZhbHVlIikpO0EoaCxtLGcsail9ZWxzZSBuKGwpLGomJmooaCl9ZWxzZSBpZihkKGcsITApLGope2lmKChnPXgoZykpJiZ0eXBlb2YgZy5TZXRWYXJpYWJsZSE9ZiloLnN1Y2Nlc3M9ITAsaC5yZWY9ZztqKGgpfX19ZnVuY3Rpb24geChhKXt2YXIgYj1udWxsO2lmKChhPWUoYSkpJiYiT0JKRUNUIj09YS5ub2RlTmFtZSl0eXBlb2YgYS5TZXRWYXJpYWJsZSE9Zj9iPWE6KGE9YS5nZXRFbGVtZW50c0J5VGFnTmFtZShqKVswXSkmJihiPWEpO3JldHVybiBifWZ1bmN0aW9uIGsoKXtyZXR1cm4hRSYmCmEoIjYuMC42NSIpJiYocC53aW58fHAubWFjKSYmIShwLndrJiYzMTI+cC53ayl9ZnVuY3Rpb24gQShhLGMsZCxqKXtFPSEwO1c9anx8bnVsbDtxPXtzdWNjZXNzOiExLGlkOmR9O3ZhciBoPWUoZCk7aWYoaCl7Ik9CSkVDVCI9PWgubm9kZU5hbWU/KEQ9YihoKSxUPW51bGwpOihEPWgsVD1kKTthLmlkPWc7aWYodHlwZW9mIGEud2lkdGg9PWZ8fCEvJSQvLnRlc3QoYS53aWR0aCkmJjMxMD5wYXJzZUludChhLndpZHRoLDEwKSlhLndpZHRoPSIzMTAiO2lmKHR5cGVvZiBhLmhlaWdodD09Znx8IS8lJC8udGVzdChhLmhlaWdodCkmJjEzNz5wYXJzZUludChhLmhlaWdodCwxMCkpYS5oZWlnaHQ9IjEzNyI7ci50aXRsZT1yLnRpdGxlLnNsaWNlKDAsNDcpKyIgLSBGbGFzaCBQbGF5ZXIgSW5zdGFsbGF0aW9uIjtqPXAuaWUmJnAud2luPyJBY3RpdmVYIjoiUGx1Z0luIjtqPSJNTXJlZGlyZWN0VVJMPSIrdi5sb2NhdGlvbi50b1N0cmluZygpLnJlcGxhY2UoLyYvZywiJTI2IikrIiZNTXBsYXllclR5cGU9IisKaisiJk1NZG9jdGl0bGU9IityLnRpdGxlO2MuZmxhc2h2YXJzPXR5cGVvZiBjLmZsYXNodmFycyE9Zj9jLmZsYXNodmFycysoIiYiK2opOmo7cC5pZSYmKHAud2luJiY0IT1oLnJlYWR5U3RhdGUpJiYoaj1yLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQrPSJTV0ZPYmplY3ROZXciLGouc2V0QXR0cmlidXRlKCJpZCIsZCksaC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShqLGgpLGguc3R5bGUuZGlzcGxheT0ibm9uZSIsZnVuY3Rpb24oKXs0PT1oLnJlYWR5U3RhdGU/aC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpOnNldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwxMCl9KCkpO0YoYSxjLGQpfX1mdW5jdGlvbiBuKGEpe2lmKHAuaWUmJnAud2luJiY0IT1hLnJlYWR5U3RhdGUpe3ZhciBjPXIuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjLGEpO2MucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYihhKSxjKTthLnN0eWxlLmRpc3BsYXk9Im5vbmUiOyhmdW5jdGlvbigpezQ9PQphLnJlYWR5U3RhdGU/YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpOnNldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwxMCl9KSgpfWVsc2UgYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChiKGEpLGEpfWZ1bmN0aW9uIGIoYSl7dmFyIGI9ci5jcmVhdGVFbGVtZW50KCJkaXYiKTtpZihwLndpbiYmcC5pZSliLmlubmVySFRNTD1hLmlubmVySFRNTDtlbHNlIGlmKGE9YS5nZXRFbGVtZW50c0J5VGFnTmFtZShqKVswXSlpZihhPWEuY2hpbGROb2Rlcylmb3IodmFyIGM9YS5sZW5ndGgsZD0wO2Q8YztkKyspISgxPT1hW2RdLm5vZGVUeXBlJiYiUEFSQU0iPT1hW2RdLm5vZGVOYW1lKSYmOCE9YVtkXS5ub2RlVHlwZSYmYi5hcHBlbmRDaGlsZChhW2RdLmNsb25lTm9kZSghMCkpO3JldHVybiBifWZ1bmN0aW9uIEYoYSxiLGMpe3ZhciBkLGc9ZShjKTtpZihwLndrJiYzMTI+cC53aylyZXR1cm4gZDtpZihnKWlmKHR5cGVvZiBhLmlkPT1mJiYoYS5pZD1jKSxwLmllJiZwLndpbil7dmFyIGg9CiIiLGs7Zm9yKGsgaW4gYSlhW2tdIT1PYmplY3QucHJvdG90eXBlW2tdJiYoImRhdGEiPT1rLnRvTG93ZXJDYXNlKCk/Yi5tb3ZpZT1hW2tdOiJzdHlsZWNsYXNzIj09ay50b0xvd2VyQ2FzZSgpP2grPScgY2xhc3M9IicrYVtrXSsnIic6ImNsYXNzaWQiIT1rLnRvTG93ZXJDYXNlKCkmJihoKz0iICIraysnPSInK2Fba10rJyInKSk7az0iIjtmb3IodmFyIG0gaW4gYiliW21dIT1PYmplY3QucHJvdG90eXBlW21dJiYoays9JzxwYXJhbSBuYW1lPSInK20rJyIgdmFsdWU9IicrYlttXSsnIiAvPicpO2cub3V0ZXJIVE1MPSc8b2JqZWN0IGNsYXNzaWQ9ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCInK2grIj4iK2srIjwvb2JqZWN0PiI7U1tTLmxlbmd0aF09YS5pZDtkPWUoYS5pZCl9ZWxzZXttPXIuY3JlYXRlRWxlbWVudChqKTttLnNldEF0dHJpYnV0ZSgidHlwZSIsbCk7Zm9yKHZhciBuIGluIGEpYVtuXSE9T2JqZWN0LnByb3RvdHlwZVtuXSYmKCJzdHlsZWNsYXNzIj09Cm4udG9Mb3dlckNhc2UoKT9tLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGFbbl0pOiJjbGFzc2lkIiE9bi50b0xvd2VyQ2FzZSgpJiZtLnNldEF0dHJpYnV0ZShuLGFbbl0pKTtmb3IoaCBpbiBiKWJbaF0hPU9iamVjdC5wcm90b3R5cGVbaF0mJiJtb3ZpZSIhPWgudG9Mb3dlckNhc2UoKSYmKGE9bSxrPWgsbj1iW2hdLGM9ci5jcmVhdGVFbGVtZW50KCJwYXJhbSIpLGMuc2V0QXR0cmlidXRlKCJuYW1lIixrKSxjLnNldEF0dHJpYnV0ZSgidmFsdWUiLG4pLGEuYXBwZW5kQ2hpbGQoYykpO2cucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobSxnKTtkPW19cmV0dXJuIGR9ZnVuY3Rpb24gWihhKXt2YXIgYj1lKGEpO2ImJiJPQkpFQ1QiPT1iLm5vZGVOYW1lJiYocC5pZSYmcC53aW4/KGIuc3R5bGUuZGlzcGxheT0ibm9uZSIsZnVuY3Rpb24oKXtpZig0PT1iLnJlYWR5U3RhdGUpe3ZhciBjPWUoYSk7aWYoYyl7Zm9yKHZhciBkIGluIGMpImZ1bmN0aW9uIj09dHlwZW9mIGNbZF0mJihjW2RdPW51bGwpOwpjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyl9fWVsc2Ugc2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDEwKX0oKSk6Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPW51bGw7dHJ5e2I9ci5nZXRFbGVtZW50QnlJZChhKX1jYXRjaChjKXt9cmV0dXJuIGJ9ZnVuY3Rpb24gYShhKXt2YXIgYj1wLnB2O2E9YS5zcGxpdCgiLiIpO2FbMF09cGFyc2VJbnQoYVswXSwxMCk7YVsxXT1wYXJzZUludChhWzFdLDEwKXx8MDthWzJdPXBhcnNlSW50KGFbMl0sMTApfHwwO3JldHVybiBiWzBdPmFbMF18fGJbMF09PWFbMF0mJmJbMV0+YVsxXXx8YlswXT09YVswXSYmYlsxXT09YVsxXSYmYlsyXT49YVsyXT8hMDohMX1mdW5jdGlvbiBjKGEsYixjLGQpe2lmKCFwLmllfHwhcC5tYWMpe3ZhciBlPXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTtpZihlKXtjPWMmJiJzdHJpbmciPT10eXBlb2YgYz9jOiJzY3JlZW4iO2QmJihOPXc9bnVsbCk7aWYoIXd8fApOIT1jKWQ9ci5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLGQuc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKSxkLnNldEF0dHJpYnV0ZSgibWVkaWEiLGMpLHc9ZS5hcHBlbmRDaGlsZChkKSxwLmllJiYocC53aW4mJnR5cGVvZiByLnN0eWxlU2hlZXRzIT1mJiYwPHIuc3R5bGVTaGVldHMubGVuZ3RoKSYmKHc9ci5zdHlsZVNoZWV0c1tyLnN0eWxlU2hlZXRzLmxlbmd0aC0xXSksTj1jO3AuaWUmJnAud2luP3cmJnR5cGVvZiB3LmFkZFJ1bGU9PWomJncuYWRkUnVsZShhLGIpOncmJnR5cGVvZiByLmNyZWF0ZVRleHROb2RlIT1mJiZ3LmFwcGVuZENoaWxkKHIuY3JlYXRlVGV4dE5vZGUoYSsiIHsiK2IrIn0iKSl9fX1mdW5jdGlvbiBkKGEsYil7aWYoSyl7dmFyIGQ9Yj8idmlzaWJsZSI6ImhpZGRlbiI7QiYmZShhKT9lKGEpLnN0eWxlLnZpc2liaWxpdHk9ZDpjKCIjIithLCJ2aXNpYmlsaXR5OiIrZCl9fWZ1bmN0aW9uIGgoYSl7cmV0dXJuIG51bGwhPS9bXFxcIjw+XC47XS8uZXhlYyhhKSYmCnR5cGVvZiBlbmNvZGVVUklDb21wb25lbnQhPWY/ZW5jb2RlVVJJQ29tcG9uZW50KGEpOmF9dmFyIGY9InVuZGVmaW5lZCIsaj0ib2JqZWN0IixsPSJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIsZz0iU1dGT2JqZWN0RXhwckluc3QiLHY9d2luZG93LHI9ZG9jdW1lbnQsST1uYXZpZ2F0b3IsJD0hMSxSPVtmdW5jdGlvbigpe2lmKCQpe3ZhciBhPXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxiPXIuY3JlYXRlRWxlbWVudChqKTtiLnNldEF0dHJpYnV0ZSgidHlwZSIsbCk7dmFyIGM9YS5hcHBlbmRDaGlsZChiKTtpZihjKXt2YXIgZD0wOyhmdW5jdGlvbigpe2lmKHR5cGVvZiBjLkdldFZhcmlhYmxlIT1mKXt2YXIgZT1jLkdldFZhcmlhYmxlKCIkdmVyc2lvbiIpO2UmJihlPWUuc3BsaXQoIiAiKVsxXS5zcGxpdCgiLCIpLHAucHY9W3BhcnNlSW50KGVbMF0sMTApLHBhcnNlSW50KGVbMV0sMTApLHBhcnNlSW50KGVbMl0sMTApXSl9ZWxzZSBpZigxMD5kKXtkKys7CnNldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwxMCk7cmV0dXJufWEucmVtb3ZlQ2hpbGQoYik7Yz1udWxsO3QoKX0pKCl9ZWxzZSB0KCl9ZWxzZSB0KCl9XSx6PVtdLFM9W10sTT1bXSxELFQsVyxxLEI9ITEsRT0hMSx3LE4sSz0hMCxwLFU9dHlwZW9mIHIuZ2V0RWxlbWVudEJ5SWQhPWYmJnR5cGVvZiByLmdldEVsZW1lbnRzQnlUYWdOYW1lIT1mJiZ0eXBlb2Ygci5jcmVhdGVFbGVtZW50IT1mLEc9SS51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSxDPUkucGxhdGZvcm0udG9Mb3dlckNhc2UoKSxPPUM/L3dpbi8udGVzdChDKTovd2luLy50ZXN0KEcpLEM9Qz8vbWFjLy50ZXN0KEMpOi9tYWMvLnRlc3QoRyksRz0vd2Via2l0Ly50ZXN0KEcpP3BhcnNlRmxvYXQoRy5yZXBsYWNlKC9eLip3ZWJraXRcLyhcZCsoXC5cZCspPykuKiQvLCIkMSIpKTohMSxQPSErIlx2MSIsTD1bMCwwLDBdLHk9bnVsbDtpZih0eXBlb2YgSS5wbHVnaW5zIT1mJiZ0eXBlb2YgSS5wbHVnaW5zWyJTaG9ja3dhdmUgRmxhc2giXT09Cmope2lmKCh5PUkucGx1Z2luc1siU2hvY2t3YXZlIEZsYXNoIl0uZGVzY3JpcHRpb24pJiYhKHR5cGVvZiBJLm1pbWVUeXBlcyE9ZiYmSS5taW1lVHlwZXNbbF0mJiFJLm1pbWVUeXBlc1tsXS5lbmFibGVkUGx1Z2luKSkkPSEwLFA9ITEseT15LnJlcGxhY2UoL14uKlxzKyhcUytccytcUyskKS8sIiQxIiksTFswXT1wYXJzZUludCh5LnJlcGxhY2UoL14oLiopXC4uKiQvLCIkMSIpLDEwKSxMWzFdPXBhcnNlSW50KHkucmVwbGFjZSgvXi4qXC4oLiopXHMuKiQvLCIkMSIpLDEwKSxMWzJdPS9bYS16QS1aXS8udGVzdCh5KT9wYXJzZUludCh5LnJlcGxhY2UoL14uKlthLXpBLVpdKyguKikkLywiJDEiKSwxMCk6MH1lbHNlIGlmKHR5cGVvZiB2LkFjdGl2ZVhPYmplY3QhPWYpdHJ5e3ZhciBIPW5ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIpO2lmKEgmJih5PUguR2V0VmFyaWFibGUoIiR2ZXJzaW9uIikpKVA9ITAseT15LnNwbGl0KCIgIilbMV0uc3BsaXQoIiwiKSwKTD1bcGFyc2VJbnQoeVswXSwxMCkscGFyc2VJbnQoeVsxXSwxMCkscGFyc2VJbnQoeVsyXSwxMCldfWNhdGNoKFgpe31wPXt3MzpVLHB2Okwsd2s6RyxpZTpQLHdpbjpPLG1hYzpDfTtwLnczJiYoKHR5cGVvZiByLnJlYWR5U3RhdGUhPWYmJiJjb21wbGV0ZSI9PXIucmVhZHlTdGF0ZXx8dHlwZW9mIHIucmVhZHlTdGF0ZT09ZiYmKHIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXXx8ci5ib2R5KSkmJnUoKSxCfHwodHlwZW9mIHIuYWRkRXZlbnRMaXN0ZW5lciE9ZiYmci5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIix1LCExKSxwLmllJiZwLndpbiYmKHIuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24oKXsiY29tcGxldGUiPT1yLnJlYWR5U3RhdGUmJihyLmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGFyZ3VtZW50cy5jYWxsZWUpLHUoKSl9KSx2PT10b3AmJmZ1bmN0aW9uKCl7aWYoIUIpe3RyeXtyLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3NldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwKMCk7cmV0dXJufXUoKX19KCkpLHAud2smJmZ1bmN0aW9uKCl7Qnx8KC9sb2FkZWR8Y29tcGxldGUvLnRlc3Qoci5yZWFkeVN0YXRlKT91KCk6c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApKX0oKSxtKHUpKSk7cC5pZSYmcC53aW4mJndpbmRvdy5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPU0ubGVuZ3RoLGI9MDtiPGE7YisrKU1bYl1bMF0uZGV0YWNoRXZlbnQoTVtiXVsxXSxNW2JdWzJdKTthPVMubGVuZ3RoO2ZvcihiPTA7YjxhO2IrKylaKFNbYl0pO2Zvcih2YXIgYyBpbiBwKXBbY109bnVsbDtwPW51bGw7aWYod2luZG93LkFtYXppbmdTV0ZPYmplY3Qpe2Zvcih2YXIgZCBpbiB3aW5kb3cuQW1hemluZ1NXRk9iamVjdCl3aW5kb3cuQW1hemluZ1NXRk9iamVjdFtkXT1udWxsO3dpbmRvdy5BbWF6aW5nU1dGT2JqZWN0PW51bGx9fSk7cmV0dXJue3JlZ2lzdGVyT2JqZWN0OmZ1bmN0aW9uKGEsYixjLGUpe2lmKHAudzMmJmEmJmIpe3ZhciBmPQp7fTtmLmlkPWE7Zi5zd2ZWZXJzaW9uPWI7Zi5leHByZXNzSW5zdGFsbD1jO2YuY2FsbGJhY2tGbj1lO3pbei5sZW5ndGhdPWY7ZChhLCExKX1lbHNlIGUmJmUoe3N1Y2Nlc3M6ITEsaWQ6YX0pfSxnZXRPYmplY3RCeUlkOmZ1bmN0aW9uKGEpe2lmKHAudzMpcmV0dXJuIHgoYSl9LGVtYmVkU1dGOmZ1bmN0aW9uKGIsYyxlLGcsaCxsLG0sbixxLHIpe3ZhciB0PXtzdWNjZXNzOiExLGlkOmN9O3AudzMmJiEocC53ayYmMzEyPnAud2spJiZiJiZjJiZlJiZnJiZoPyhkKGMsITEpLHMoZnVuY3Rpb24oKXtlKz0iIjtnKz0iIjt2YXIgcD17fTtpZihxJiZ0eXBlb2YgcT09PWopZm9yKHZhciBzIGluIHEpcFtzXT1xW3NdO3AuZGF0YT1iO3Aud2lkdGg9ZTtwLmhlaWdodD1nO3M9e307aWYobiYmdHlwZW9mIG49PT1qKWZvcih2YXIgdSBpbiBuKXNbdV09blt1XTtpZihtJiZ0eXBlb2YgbT09PWopZm9yKHZhciB2IGluIG0pcy5mbGFzaHZhcnM9dHlwZW9mIHMuZmxhc2h2YXJzIT1mP3MuZmxhc2h2YXJzKwooIiYiK3YrIj0iK21bdl0pOnYrIj0iK21bdl07aWYoYShoKSl1PUYocCxzLGMpLHAuaWQ9PWMmJmQoYywhMCksdC5zdWNjZXNzPSEwLHQucmVmPXU7ZWxzZXtpZihsJiZrKCkpe3AuZGF0YT1sO0EocCxzLGMscik7cmV0dXJufWQoYywhMCl9ciYmcih0KX0pKTpyJiZyKHQpfSxzd2l0Y2hPZmZBdXRvSGlkZVNob3c6ZnVuY3Rpb24oKXtLPSExfSx1YTpwLGdldEZsYXNoUGxheWVyVmVyc2lvbjpmdW5jdGlvbigpe3JldHVybnttYWpvcjpwLnB2WzBdLG1pbm9yOnAucHZbMV0scmVsZWFzZTpwLnB2WzJdfX0saGFzRmxhc2hQbGF5ZXJWZXJzaW9uOmEsY3JlYXRlU1dGOmZ1bmN0aW9uKGEsYixjKXtpZihwLnczKXJldHVybiBGKGEsYixjKX0sc2hvd0V4cHJlc3NJbnN0YWxsOmZ1bmN0aW9uKGEsYixjLGQpe3AudzMmJmsoKSYmQShhLGIsYyxkKX0scmVtb3ZlU1dGOmZ1bmN0aW9uKGEpe3AudzMmJlooYSl9LGNyZWF0ZUNTUzpmdW5jdGlvbihhLGIsZCxlKXtwLnczJiZjKGEsYixkLGUpfSwKYWRkRG9tTG9hZEV2ZW50OnMsYWRkTG9hZEV2ZW50Om0sZ2V0UXVlcnlQYXJhbVZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPXIubG9jYXRpb24uc2VhcmNofHxyLmxvY2F0aW9uLmhhc2g7aWYoYil7L1w/Ly50ZXN0KGIpJiYoYj1iLnNwbGl0KCI/IilbMV0pO2lmKG51bGw9PWEpcmV0dXJuIGgoYik7Zm9yKHZhciBiPWIuc3BsaXQoIiYiKSxjPTA7YzxiLmxlbmd0aDtjKyspaWYoYltjXS5zdWJzdHJpbmcoMCxiW2NdLmluZGV4T2YoIj0iKSk9PWEpcmV0dXJuIGgoYltjXS5zdWJzdHJpbmcoYltjXS5pbmRleE9mKCI9IikrMSkpfXJldHVybiIifSxleHByZXNzSW5zdGFsbENhbGxiYWNrOmZ1bmN0aW9uKCl7aWYoRSl7dmFyIGE9ZShnKTthJiZEJiYoYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChELGEpLFQmJihkKFQsITApLHAuaWUmJnAud2luJiYoRC5zdHlsZS5kaXNwbGF5PSJibG9jayIpKSxXJiZXKHEpKTtFPSExfX19fQp2YXIgaHRtbDVHYWxsZXJ5T2JqZWN0cz1uZXcgZnVuY3Rpb24oKXt0aGlzLm9iamVjdHM9W107dGhpcy5hZGRPYmplY3Q9ZnVuY3Rpb24odSl7dGhpcy5vYmplY3RzLnB1c2godSl9O3RoaXMubG9hZE5leHQ9ZnVuY3Rpb24odSl7dGhpcy5vYmplY3RzW3VdLm9uVmlkZW9FbmQoKTt0aGlzLm9iamVjdHNbdV0uaXNQYXVzZWR8fHRoaXMub2JqZWN0c1t1XS5zbGlkZVJ1bigtMSl9O3RoaXMuc2V0SGQ9ZnVuY3Rpb24odSxzLG0pe3RoaXMub2JqZWN0c1t1XS5zZXRIZChzLG0pfTt0aGlzLmdvdG9TbGlkZT1mdW5jdGlvbih1LHMpeyJ1bmRlZmluZWQiPT09dHlwZW9mIHMmJihzPTApO3RoaXMub2JqZWN0c1tzXSYmdGhpcy5vYmplY3RzW3NdLnNsaWRlUnVuKHUpfX07CmlmKCJ1bmRlZmluZWQiPT09dHlwZW9mIEFTWW91VHViZUlmcmFtZUFQSVJlYWR5KXZhciBBU1lvdVR1YmVJZnJhbWVBUElSZWFkeT0hMSxBU1lvdVR1YmVUaW1lb3V0PTAsb25Zb3VUdWJlSWZyYW1lQVBJUmVhZHk9ZnVuY3Rpb24oKXtBU1lvdVR1YmVJZnJhbWVBUElSZWFkeT0hMH07dmFyIEFTVmltZW9UaW1lb3V0PTA7Cg=="></script>
<script id="script_h5gallery_jquery_js" src="data:/text/plain;base64,LyohIGpRdWVyeSB2MS43LjEganF1ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwooZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjeShhKXtyZXR1cm4gZi5pc1dpbmRvdyhhKT9hOmEubm9kZVR5cGU9PT05P2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OiExfWZ1bmN0aW9uIGN2KGEpe2lmKCFja1thXSl7dmFyIGI9Yy5ib2R5LGQ9ZigiPCIrYSsiPiIpLmFwcGVuZFRvKGIpLGU9ZC5jc3MoImRpc3BsYXkiKTtkLnJlbW92ZSgpO2lmKGU9PT0ibm9uZSJ8fGU9PT0iIil7Y2x8fChjbD1jLmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLGNsLmZyYW1lQm9yZGVyPWNsLndpZHRoPWNsLmhlaWdodD0wKSxiLmFwcGVuZENoaWxkKGNsKTtpZighY218fCFjbC5jcmVhdGVFbGVtZW50KWNtPShjbC5jb250ZW50V2luZG93fHxjbC5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LGNtLndyaXRlKChjLmNvbXBhdE1vZGU9PT0iQ1NTMUNvbXBhdCI/IjwhZG9jdHlwZSBodG1sPiI6IiIpKyI8aHRtbD48Ym9keT4iKSxjbS5jbG9zZSgpO2Q9Y20uY3JlYXRlRWxlbWVudChhKSxjbS5ib2R5LmFwcGVuZENoaWxkKGQpLGU9Zi5jc3MoZCwiZGlzcGxheSIpLGIucmVtb3ZlQ2hpbGQoY2wpfWNrW2FdPWV9cmV0dXJuIGNrW2FdfWZ1bmN0aW9uIGN1KGEsYil7dmFyIGM9e307Zi5lYWNoKGNxLmNvbmNhdC5hcHBseShbXSxjcS5zbGljZSgwLGIpKSxmdW5jdGlvbigpe2NbdGhpc109YX0pO3JldHVybiBjfWZ1bmN0aW9uIGN0KCl7Y3I9Yn1mdW5jdGlvbiBjcygpe3NldFRpbWVvdXQoY3QsMCk7cmV0dXJuIGNyPWYubm93KCl9ZnVuY3Rpb24gY2ooKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1mdW5jdGlvbiBjaSgpe3RyeXtyZXR1cm4gbmV3IGEuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiBjYyhhLGMpe2EuZGF0YUZpbHRlciYmKGM9YS5kYXRhRmlsdGVyKGMsYS5kYXRhVHlwZSkpO3ZhciBkPWEuZGF0YVR5cGVzLGU9e30sZyxoLGk9ZC5sZW5ndGgsaixrPWRbMF0sbCxtLG4sbyxwO2ZvcihnPTE7ZzxpO2crKyl7aWYoZz09PTEpZm9yKGggaW4gYS5jb252ZXJ0ZXJzKXR5cGVvZiBoPT0ic3RyaW5nIiYmKGVbaC50b0xvd2VyQ2FzZSgpXT1hLmNvbnZlcnRlcnNbaF0pO2w9ayxrPWRbZ107aWYoaz09PSIqIilrPWw7ZWxzZSBpZihsIT09IioiJiZsIT09ayl7bT1sKyIgIitrLG49ZVttXXx8ZVsiKiAiK2tdO2lmKCFuKXtwPWI7Zm9yKG8gaW4gZSl7aj1vLnNwbGl0KCIgIik7aWYoalswXT09PWx8fGpbMF09PT0iKiIpe3A9ZVtqWzFdKyIgIitrXTtpZihwKXtvPWVbb10sbz09PSEwP249cDpwPT09ITAmJihuPW8pO2JyZWFrfX19fSFuJiYhcCYmZi5lcnJvcigiTm8gY29udmVyc2lvbiBmcm9tICIrbS5yZXBsYWNlKCIgIiwiIHRvICIpKSxuIT09ITAmJihjPW4/bihjKTpwKG8oYykpKX19cmV0dXJuIGN9ZnVuY3Rpb24gY2IoYSxjLGQpe3ZhciBlPWEuY29udGVudHMsZj1hLmRhdGFUeXBlcyxnPWEucmVzcG9uc2VGaWVsZHMsaCxpLGosaztmb3IoaSBpbiBnKWkgaW4gZCYmKGNbZ1tpXV09ZFtpXSk7d2hpbGUoZlswXT09PSIqIilmLnNoaWZ0KCksaD09PWImJihoPWEubWltZVR5cGV8fGMuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpKTtpZihoKWZvcihpIGluIGUpaWYoZVtpXSYmZVtpXS50ZXN0KGgpKXtmLnVuc2hpZnQoaSk7YnJlYWt9aWYoZlswXWluIGQpaj1mWzBdO2Vsc2V7Zm9yKGkgaW4gZCl7aWYoIWZbMF18fGEuY29udmVydGVyc1tpKyIgIitmWzBdXSl7aj1pO2JyZWFrfWt8fChrPWkpfWo9anx8a31pZihqKXtqIT09ZlswXSYmZi51bnNoaWZ0KGopO3JldHVybiBkW2pdfX1mdW5jdGlvbiBjYShhLGIsYyxkKXtpZihmLmlzQXJyYXkoYikpZi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxiRS50ZXN0KGEpP2QoYSxlKTpjYShhKyJbIisodHlwZW9mIGU9PSJvYmplY3QifHxmLmlzQXJyYXkoZSk/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoIWMmJmIhPW51bGwmJnR5cGVvZiBiPT0ib2JqZWN0Iilmb3IodmFyIGUgaW4gYiljYShhKyJbIitlKyJdIixiW2VdLGMsZCk7ZWxzZSBkKGEsYil9ZnVuY3Rpb24gYl8oYSxjKXt2YXIgZCxlLGc9Zi5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihkIGluIGMpY1tkXSE9PWImJigoZ1tkXT9hOmV8fChlPXt9KSlbZF09Y1tkXSk7ZSYmZi5leHRlbmQoITAsYSxlKX1mdW5jdGlvbiBiJChhLGMsZCxlLGYsZyl7Zj1mfHxjLmRhdGFUeXBlc1swXSxnPWd8fHt9LGdbZl09ITA7dmFyIGg9YVtmXSxpPTAsaj1oP2gubGVuZ3RoOjAsaz1hPT09YlQsbDtmb3IoO2k8aiYmKGt8fCFsKTtpKyspbD1oW2ldKGMsZCxlKSx0eXBlb2YgbD09InN0cmluZyImJigha3x8Z1tsXT9sPWI6KGMuZGF0YVR5cGVzLnVuc2hpZnQobCksbD1iJChhLGMsZCxlLGwsZykpKTsoa3x8IWwpJiYhZ1siKiJdJiYobD1iJChhLGMsZCxlLCIqIixnKSk7cmV0dXJuIGx9ZnVuY3Rpb24gYlooYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7dHlwZW9mIGIhPSJzdHJpbmciJiYoYz1iLGI9IioiKTtpZihmLmlzRnVuY3Rpb24oYykpe3ZhciBkPWIudG9Mb3dlckNhc2UoKS5zcGxpdChiUCksZT0wLGc9ZC5sZW5ndGgsaCxpLGo7Zm9yKDtlPGc7ZSsrKWg9ZFtlXSxqPS9eXCsvLnRlc3QoaCksaiYmKGg9aC5zdWJzdHIoMSl8fCIqIiksaT1hW2hdPWFbaF18fFtdLGlbaj8idW5zaGlmdCI6InB1c2giXShjKX19fWZ1bmN0aW9uIGJDKGEsYixjKXt2YXIgZD1iPT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGU9Yj09PSJ3aWR0aCI/Yng6YnksZz0wLGg9ZS5sZW5ndGg7aWYoZD4wKXtpZihjIT09ImJvcmRlciIpZm9yKDtnPGg7ZysrKWN8fChkLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK2VbZ10pKXx8MCksYz09PSJtYXJnaW4iP2QrPXBhcnNlRmxvYXQoZi5jc3MoYSxjK2VbZ10pKXx8MDpkLT1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrZVtnXSsiV2lkdGgiKSl8fDA7cmV0dXJuIGQrInB4In1kPWJ6KGEsYixiKTtpZihkPDB8fGQ9PW51bGwpZD1hLnN0eWxlW2JdfHwwO2Q9cGFyc2VGbG9hdChkKXx8MDtpZihjKWZvcig7ZzxoO2crKylkKz1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK2VbZ10pKXx8MCxjIT09InBhZGRpbmciJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJib3JkZXIiK2VbZ10rIldpZHRoIikpfHwwKSxjPT09Im1hcmdpbiImJihkKz1wYXJzZUZsb2F0KGYuY3NzKGEsYytlW2ddKSl8fDApO3JldHVybiBkKyJweCJ9ZnVuY3Rpb24gYnAoYSxiKXtiLnNyYz9mLmFqYXgoe3VybDpiLnNyYyxhc3luYzohMSxkYXRhVHlwZToic2NyaXB0In0pOmYuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYmYsIi8qJDAqLyIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBibyhhKXt2YXIgYj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2JoLmFwcGVuZENoaWxkKGIpLGIuaW5uZXJIVE1MPWEub3V0ZXJIVE1MO3JldHVybiBiLmZpcnN0Q2hpbGR9ZnVuY3Rpb24gYm4oYSl7dmFyIGI9KGEubm9kZU5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpO2I9PT0iaW5wdXQiP2JtKGEpOmIhPT0ic2NyaXB0IiYmdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiJiZmLmdyZXAoYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSxibSl9ZnVuY3Rpb24gYm0oYSl7aWYoYS50eXBlPT09ImNoZWNrYm94Inx8YS50eXBlPT09InJhZGlvIilhLmRlZmF1bHRDaGVja2VkPWEuY2hlY2tlZH1mdW5jdGlvbiBibChhKXtyZXR1cm4gdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTp0eXBlb2YgYS5xdWVyeVNlbGVjdG9yQWxsIT0idW5kZWZpbmVkIj9hLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTpbXX1mdW5jdGlvbiBiayhhLGIpe3ZhciBjO2lmKGIubm9kZVR5cGU9PT0xKXtiLmNsZWFyQXR0cmlidXRlcyYmYi5jbGVhckF0dHJpYnV0ZXMoKSxiLm1lcmdlQXR0cmlidXRlcyYmYi5tZXJnZUF0dHJpYnV0ZXMoYSksYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoYz09PSJvYmplY3QiKWIub3V0ZXJIVE1MPWEub3V0ZXJIVE1MO2Vsc2UgaWYoYyE9PSJpbnB1dCJ8fGEudHlwZSE9PSJjaGVja2JveCImJmEudHlwZSE9PSJyYWRpbyIpe2lmKGM9PT0ib3B0aW9uIiliLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkO2Vsc2UgaWYoYz09PSJpbnB1dCJ8fGM9PT0idGV4dGFyZWEiKWIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlfWVsc2UgYS5jaGVja2VkJiYoYi5kZWZhdWx0Q2hlY2tlZD1iLmNoZWNrZWQ9YS5jaGVja2VkKSxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSk7Yi5yZW1vdmVBdHRyaWJ1dGUoZi5leHBhbmRvKX19ZnVuY3Rpb24gYmooYSxiKXtpZihiLm5vZGVUeXBlPT09MSYmISFmLmhhc0RhdGEoYSkpe3ZhciBjLGQsZSxnPWYuX2RhdGEoYSksaD1mLl9kYXRhKGIsZyksaT1nLmV2ZW50cztpZihpKXtkZWxldGUgaC5oYW5kbGUsaC5ldmVudHM9e307Zm9yKGMgaW4gaSlmb3IoZD0wLGU9aVtjXS5sZW5ndGg7ZDxlO2QrKylmLmV2ZW50LmFkZChiLGMrKGlbY11bZF0ubmFtZXNwYWNlPyIuIjoiIikraVtjXVtkXS5uYW1lc3BhY2UsaVtjXVtkXSxpW2NdW2RdLmRhdGEpfWguZGF0YSYmKGguZGF0YT1mLmV4dGVuZCh7fSxoLmRhdGEpKX19ZnVuY3Rpb24gYmkoYSxiKXtyZXR1cm4gZi5ub2RlTmFtZShhLCJ0YWJsZSIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24gVShhKXt2YXIgYj1WLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfWZ1bmN0aW9uIFQoYSxiLGMpe2I9Ynx8MDtpZihmLmlzRnVuY3Rpb24oYikpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7dmFyIGU9ISFiLmNhbGwoYSxkLGEpO3JldHVybiBlPT09Y30pO2lmKGIubm9kZVR5cGUpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGE9PT1iPT09Y30pO2lmKHR5cGVvZiBiPT0ic3RyaW5nIil7dmFyIGQ9Zi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZVR5cGU9PT0xfSk7aWYoTy50ZXN0KGIpKXJldHVybiBmLmZpbHRlcihiLGQsIWMpO2I9Zi5maWx0ZXIoYixkKX1yZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gZi5pbkFycmF5KGEsYik+PTA9PT1jfSl9ZnVuY3Rpb24gUyhhKXtyZXR1cm4hYXx8IWEucGFyZW50Tm9kZXx8YS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTF9ZnVuY3Rpb24gSygpe3JldHVybiEwfWZ1bmN0aW9uIEooKXtyZXR1cm4hMX1mdW5jdGlvbiBuKGEsYixjKXt2YXIgZD1iKyJkZWZlciIsZT1iKyJxdWV1ZSIsZz1iKyJtYXJrIixoPWYuX2RhdGEoYSxkKTtoJiYoYz09PSJxdWV1ZSJ8fCFmLl9kYXRhKGEsZSkpJiYoYz09PSJtYXJrInx8IWYuX2RhdGEoYSxnKSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXshZi5fZGF0YShhLGUpJiYhZi5fZGF0YShhLGcpJiYoZi5yZW1vdmVEYXRhKGEsZCwhMCksaC5maXJlKCkpfSwwKX1mdW5jdGlvbiBtKGEpe2Zvcih2YXIgYiBpbiBhKXtpZihiPT09ImRhdGEiJiZmLmlzRW1wdHlPYmplY3QoYVtiXSkpY29udGludWU7aWYoYiE9PSJ0b0pTT04iKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGwoYSxjLGQpe2lmKGQ9PT1iJiZhLm5vZGVUeXBlPT09MSl7dmFyIGU9ImRhdGEtIitjLnJlcGxhY2UoaywiLSQxIikudG9Mb3dlckNhc2UoKTtkPWEuZ2V0QXR0cmlidXRlKGUpO2lmKHR5cGVvZiBkPT0ic3RyaW5nIil7dHJ5e2Q9ZD09PSJ0cnVlIj8hMDpkPT09ImZhbHNlIj8hMTpkPT09Im51bGwiP251bGw6Zi5pc051bWVyaWMoZCk/cGFyc2VGbG9hdChkKTpqLnRlc3QoZCk/Zi5wYXJzZUpTT04oZCk6ZH1jYXRjaChnKXt9Zi5kYXRhKGEsYyxkKX1lbHNlIGQ9Yn1yZXR1cm4gZH1mdW5jdGlvbiBoKGEpe3ZhciBiPWdbYV09e30sYyxkO2E9YS5zcGxpdCgvXHMrLyk7Zm9yKGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspYlthW2NdXT0hMDtyZXR1cm4gYn12YXIgYz1hLmRvY3VtZW50LGQ9YS5uYXZpZ2F0b3IsZT1hLmxvY2F0aW9uLGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBKKCl7aWYoIWUuaXNSZWFkeSl7dHJ5e2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7c2V0VGltZW91dChKLDEpO3JldHVybn1lLnJlYWR5KCl9fXZhciBlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBlLmZuLmluaXQoYSxiLGgpfSxmPWEualF1ZXJ5LGc9YS4kLGgsaT0vXig/OlteIzxdKig8W1x3XFddKz4pW14+XSokfCMoW1x3XC1dKikkKS8saj0vXFMvLGs9L15ccysvLGw9L1xzKyQvLG09L148KFx3KylccypcLz8+KD86PFwvXDE+KT8kLyxuPS9eW1xdLDp7fVxzXSokLyxvPS9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2cscD0vIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2cscT0vKD86Xnw6fCwpKD86XHMqXFspKy9nLHI9Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8scz0vKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8sdD0vKG1zaWUpIChbXHcuXSspLyx1PS8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKykpPy8sdj0vLShbYS16XXxbMC05XSkvaWcsdz0vXi1tcy0vLHg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYisiIikudG9VcHBlckNhc2UoKX0seT1kLnVzZXJBZ2VudCx6LEEsQixDPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEU9QXJyYXkucHJvdG90eXBlLnB1c2gsRj1BcnJheS5wcm90b3R5cGUuc2xpY2UsRz1TdHJpbmcucHJvdG90eXBlLnRyaW0sSD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZixJPXt9O2UuZm49ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaW5pdDpmdW5jdGlvbihhLGQsZil7dmFyIGcsaCxqLGs7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFkJiZjLmJvZHkpe3RoaXMuY29udGV4dD1jLHRoaXNbMF09Yy5ib2R5LHRoaXMuc2VsZWN0b3I9YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ic3RyaW5nIil7YS5jaGFyQXQoMCkhPT0iPCJ8fGEuY2hhckF0KGEubGVuZ3RoLTEpIT09Ij4ifHxhLmxlbmd0aDwzP2c9aS5leGVjKGEpOmc9W251bGwsYSxudWxsXTtpZihnJiYoZ1sxXXx8IWQpKXtpZihnWzFdKXtkPWQgaW5zdGFuY2VvZiBlP2RbMF06ZCxrPWQ/ZC5vd25lckRvY3VtZW50fHxkOmMsaj1tLmV4ZWMoYSksaj9lLmlzUGxhaW5PYmplY3QoZCk/KGE9W2MuY3JlYXRlRWxlbWVudChqWzFdKV0sZS5mbi5hdHRyLmNhbGwoYSxkLCEwKSk6YT1bay5jcmVhdGVFbGVtZW50KGpbMV0pXTooaj1lLmJ1aWxkRnJhZ21lbnQoW2dbMV1dLFtrXSksYT0oai5jYWNoZWFibGU/ZS5jbG9uZShqLmZyYWdtZW50KTpqLmZyYWdtZW50KS5jaGlsZE5vZGVzKTtyZXR1cm4gZS5tZXJnZSh0aGlzLGEpfWg9Yy5nZXRFbGVtZW50QnlJZChnWzJdKTtpZihoJiZoLnBhcmVudE5vZGUpe2lmKGguaWQhPT1nWzJdKXJldHVybiBmLmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWh9dGhpcy5jb250ZXh0PWMsdGhpcy5zZWxlY3Rvcj1hO3JldHVybiB0aGlzfXJldHVybiFkfHxkLmpxdWVyeT8oZHx8ZikuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGQpLmZpbmQoYSl9aWYoZS5pc0Z1bmN0aW9uKGEpKXJldHVybiBmLnJlYWR5KGEpO2Euc2VsZWN0b3IhPT1iJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpO3JldHVybiBlLm1ha2VBcnJheShhLHRoaXMpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuNy4xIixsZW5ndGg6MCxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIEYuY2FsbCh0aGlzLDApfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/dGhpcy50b0FycmF5KCk6YTwwP3RoaXNbdGhpcy5sZW5ndGgrYV06dGhpc1thXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmNvbnN0cnVjdG9yKCk7ZS5pc0FycmF5KGEpP0UuYXBwbHkoZCxhKTplLm1lcmdlKGQsYSksZC5wcmV2T2JqZWN0PXRoaXMsZC5jb250ZXh0PXRoaXMuY29udGV4dCxiPT09ImZpbmQiP2Quc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisodGhpcy5zZWxlY3Rvcj8iICI6IiIpK2M6YiYmKGQuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisiLiIrYisiKCIrYysiKSIpO3JldHVybiBkfSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGUuZWFjaCh0aGlzLGEsYil9LHJlYWR5OmZ1bmN0aW9uKGEpe2UuYmluZFJlYWR5KCksQS5hZGQoYSk7cmV0dXJuIHRoaXN9LGVxOmZ1bmN0aW9uKGEpe2E9K2E7cmV0dXJuIGE9PT0tMT90aGlzLnNsaWNlKGEpOnRoaXMuc2xpY2UoYSxhKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhGLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLEYuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOkUsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2V9LGUuZm4uaW5pdC5wcm90b3R5cGU9ZS5mbixlLmV4dGVuZD1lLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGMsZCxmLGcsaCxpPWFyZ3VtZW50c1swXXx8e30saj0xLGs9YXJndW1lbnRzLmxlbmd0aCxsPSExO3R5cGVvZiBpPT0iYm9vbGVhbiImJihsPWksaT1hcmd1bWVudHNbMV18fHt9LGo9MiksdHlwZW9mIGkhPSJvYmplY3QiJiYhZS5pc0Z1bmN0aW9uKGkpJiYoaT17fSksaz09PWomJihpPXRoaXMsLS1qKTtmb3IoO2o8aztqKyspaWYoKGE9YXJndW1lbnRzW2pdKSE9bnVsbClmb3IoYyBpbiBhKXtkPWlbY10sZj1hW2NdO2lmKGk9PT1mKWNvbnRpbnVlO2wmJmYmJihlLmlzUGxhaW5PYmplY3QoZil8fChnPWUuaXNBcnJheShmKSkpPyhnPyhnPSExLGg9ZCYmZS5pc0FycmF5KGQpP2Q6W10pOmg9ZCYmZS5pc1BsYWluT2JqZWN0KGQpP2Q6e30saVtjXT1lLmV4dGVuZChsLGgsZikpOmYhPT1iJiYoaVtjXT1mKX1yZXR1cm4gaX0sZS5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYil7YS4kPT09ZSYmKGEuJD1nKSxiJiZhLmpRdWVyeT09PWUmJihhLmpRdWVyeT1mKTtyZXR1cm4gZX0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9lLnJlYWR5V2FpdCsrOmUucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXtpZihhPT09ITAmJiEtLWUucmVhZHlXYWl0fHxhIT09ITAmJiFlLmlzUmVhZHkpe2lmKCFjLmJvZHkpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtlLmlzUmVhZHk9ITA7aWYoYSE9PSEwJiYtLWUucmVhZHlXYWl0PjApcmV0dXJuO0EuZmlyZVdpdGgoYyxbZV0pLGUuZm4udHJpZ2dlciYmZShjKS50cmlnZ2VyKCJyZWFkeSIpLm9mZigicmVhZHkiKX19LGJpbmRSZWFkeTpmdW5jdGlvbigpe2lmKCFBKXtBPWUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpO2lmKGMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpcmV0dXJuIHNldFRpbWVvdXQoZS5yZWFkeSwxKTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGUucmVhZHksITEpO2Vsc2UgaWYoYy5hdHRhY2hFdmVudCl7Yy5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixCKSxhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLGUucmVhZHkpO3ZhciBiPSExO3RyeXtiPWEuZnJhbWVFbGVtZW50PT1udWxsfWNhdGNoKGQpe31jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCYmYiYmSigpfX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJmdW5jdGlvbiJ9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGUudHlwZShhKT09PSJhcnJheSJ9LGlzV2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0eXBlb2YgYT09Im9iamVjdCImJiJzZXRJbnRlcnZhbCJpbiBhfSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYSkpJiZpc0Zpbml0ZShhKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD9TdHJpbmcoYSk6SVtDLmNhbGwoYSldfHwib2JqZWN0In0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXtpZighYXx8ZS50eXBlKGEpIT09Im9iamVjdCJ8fGEubm9kZVR5cGV8fGUuaXNXaW5kb3coYSkpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFELmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIUQuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfXZhciBkO2ZvcihkIGluIGEpO3JldHVybiBkPT09Ynx8RC5jYWxsKGEsZCl9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpcmV0dXJuITE7cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihhKX0scGFyc2VKU09OOmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nInx8IWIpcmV0dXJuIG51bGw7Yj1lLnRyaW0oYik7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKTtpZihuLnRlc3QoYi5yZXBsYWNlKG8sIkAiKS5yZXBsYWNlKHAsIl0iKS5yZXBsYWNlKHEsIiIpKSlyZXR1cm4obmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitiKSkoKTtlLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LHBhcnNlWE1MOmZ1bmN0aW9uKGMpe3ZhciBkLGY7dHJ5e2EuRE9NUGFyc2VyPyhmPW5ldyBET01QYXJzZXIsZD1mLnBhcnNlRnJvbVN0cmluZyhjLCJ0ZXh0L3htbCIpKTooZD1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGQuYXN5bmM9ImZhbHNlIixkLmxvYWRYTUwoYykpfWNhdGNoKGcpe2Q9Yn0oIWR8fCFkLmRvY3VtZW50RWxlbWVudHx8ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZlLmVycm9yKCJJbnZhbGlkIFhNTDogIitjKTtyZXR1cm4gZH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZqLnRlc3QoYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UodywibXMtIikucmVwbGFjZSh2LHgpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT1iLnRvVXBwZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGc9MCxoPWEubGVuZ3RoLGk9aD09PWJ8fGUuaXNGdW5jdGlvbihhKTtpZihkKXtpZihpKXtmb3IoZiBpbiBhKWlmKGMuYXBwbHkoYVtmXSxkKT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuYXBwbHkoYVtnKytdLGQpPT09ITEpYnJlYWt9ZWxzZSBpZihpKXtmb3IoZiBpbiBhKWlmKGMuY2FsbChhW2ZdLGYsYVtmXSk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmNhbGwoYVtnXSxnLGFbZysrXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpHP2Z1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOkcuY2FsbChhKX06ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6KGErIiIpLnJlcGxhY2UoaywiIikucmVwbGFjZShsLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107aWYoYSE9bnVsbCl7dmFyIGQ9ZS50eXBlKGEpO2EubGVuZ3RoPT1udWxsfHxkPT09InN0cmluZyJ8fGQ9PT0iZnVuY3Rpb24ifHxkPT09InJlZ2V4cCJ8fGUuaXNXaW5kb3coYSk/RS5jYWxsKGMsYSk6ZS5tZXJnZShjLGEpfXJldHVybiBjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihiKXtpZihIKXJldHVybiBILmNhbGwoYixhLGMpO2Q9Yi5sZW5ndGgsYz1jP2M8MD9NYXRoLm1heCgwLGQrYyk6YzowO2Zvcig7YzxkO2MrKylpZihjIGluIGImJmJbY109PT1hKXJldHVybiBjfXJldHVybi0xfSxtZXJnZTpmdW5jdGlvbihhLGMpe3ZhciBkPWEubGVuZ3RoLGU9MDtpZih0eXBlb2YgYy5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZj1jLmxlbmd0aDtlPGY7ZSsrKWFbZCsrXT1jW2VdO2Vsc2Ugd2hpbGUoY1tlXSE9PWIpYVtkKytdPWNbZSsrXTthLmxlbmd0aD1kO3JldHVybiBhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlO2M9ISFjO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKyllPSEhYihhW2ZdLGYpLGMhPT1lJiZkLnB1c2goYVtmXSk7cmV0dXJuIGR9LG1hcDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoPVtdLGk9MCxqPWEubGVuZ3RoLGs9YSBpbnN0YW5jZW9mIGV8fGohPT1iJiZ0eXBlb2Ygaj09Im51bWJlciImJihqPjAmJmFbMF0mJmFbai0xXXx8aj09PTB8fGUuaXNBcnJheShhKSk7aWYoaylmb3IoO2k8ajtpKyspZj1jKGFbaV0saSxkKSxmIT1udWxsJiYoaFtoLmxlbmd0aF09Zik7ZWxzZSBmb3IoZyBpbiBhKWY9YyhhW2ddLGcsZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO3JldHVybiBoLmNvbmNhdC5hcHBseShbXSxoKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYyl7aWYodHlwZW9mIGM9PSJzdHJpbmciKXt2YXIgZD1hW2NdO2M9YSxhPWR9aWYoIWUuaXNGdW5jdGlvbihhKSlyZXR1cm4gYjt2YXIgZj1GLmNhbGwoYXJndW1lbnRzLDIpLGc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShjLGYuY29uY2F0KEYuY2FsbChhcmd1bWVudHMpKSl9O2cuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxnLmd1aWR8fGUuZ3VpZCsrO3JldHVybiBnfSxhY2Nlc3M6ZnVuY3Rpb24oYSxjLGQsZixnLGgpe3ZhciBpPWEubGVuZ3RoO2lmKHR5cGVvZiBjPT0ib2JqZWN0Iil7Zm9yKHZhciBqIGluIGMpZS5hY2Nlc3MoYSxqLGNbal0sZixnLGQpO3JldHVybiBhfWlmKGQhPT1iKXtmPSFoJiZmJiZlLmlzRnVuY3Rpb24oZCk7Zm9yKHZhciBrPTA7azxpO2srKylnKGFba10sYyxmP2QuY2FsbChhW2tdLGssZyhhW2tdLGMpKTpkLGgpO3JldHVybiBhfXJldHVybiBpP2coYVswXSxjKTpifSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sdWFNYXRjaDpmdW5jdGlvbihhKXthPWEudG9Mb3dlckNhc2UoKTt2YXIgYj1yLmV4ZWMoYSl8fHMuZXhlYyhhKXx8dC5leGVjKGEpfHxhLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiZ1LmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmJbMV18fCIiLHZlcnNpb246YlsyXXx8IjAifX0sc3ViOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybiBuZXcgYS5mbi5pbml0KGIsYyl9ZS5leHRlbmQoITAsYSx0aGlzKSxhLnN1cGVyY2xhc3M9dGhpcyxhLmZuPWEucHJvdG90eXBlPXRoaXMoKSxhLmZuLmNvbnN0cnVjdG9yPWEsYS5zdWI9dGhpcy5zdWIsYS5mbi5pbml0PWZ1bmN0aW9uKGQsZil7ZiYmZiBpbnN0YW5jZW9mIGUmJiEoZiBpbnN0YW5jZW9mIGEpJiYoZj1hKGYpKTtyZXR1cm4gZS5mbi5pbml0LmNhbGwodGhpcyxkLGYsYil9LGEuZm4uaW5pdC5wcm90b3R5cGU9YS5mbjt2YXIgYj1hKGMpO3JldHVybiBhfSxicm93c2VyOnt9fSksZS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7SVsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KSx6PWUudWFNYXRjaCh5KSx6LmJyb3dzZXImJihlLmJyb3dzZXJbei5icm93c2VyXT0hMCxlLmJyb3dzZXIudmVyc2lvbj16LnZlcnNpb24pLGUuYnJvd3Nlci53ZWJraXQmJihlLmJyb3dzZXIuc2FmYXJpPSEwKSxqLnRlc3QoIsKgIikmJihrPS9eW1xzXHhBMF0rLyxsPS9bXHNceEEwXSskLyksaD1lKGMpLGMuYWRkRXZlbnRMaXN0ZW5lcj9CPWZ1bmN0aW9uKCl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCLCExKSxlLnJlYWR5KCl9OmMuYXR0YWNoRXZlbnQmJihCPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmKGMuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQiksZS5yZWFkeSgpKX0pO3JldHVybiBlfSgpLGc9e307Zi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT1hP2dbYV18fGgoYSk6e307dmFyIGM9W10sZD1bXSxlLGksaixrLGwsbT1mdW5jdGlvbihiKXt2YXIgZCxlLGcsaCxpO2ZvcihkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWc9YltkXSxoPWYudHlwZShnKSxoPT09ImFycmF5Ij9tKGcpOmg9PT0iZnVuY3Rpb24iJiYoIWEudW5pcXVlfHwhby5oYXMoZykpJiZjLnB1c2goZyl9LG49ZnVuY3Rpb24oYixmKXtmPWZ8fFtdLGU9IWEubWVtb3J5fHxbYixmXSxpPSEwLGw9anx8MCxqPTAsaz1jLmxlbmd0aDtmb3IoO2MmJmw8aztsKyspaWYoY1tsXS5hcHBseShiLGYpPT09ITEmJmEuc3RvcE9uRmFsc2Upe2U9ITA7YnJlYWt9aT0hMSxjJiYoYS5vbmNlP2U9PT0hMD9vLmRpc2FibGUoKTpjPVtdOmQmJmQubGVuZ3RoJiYoZT1kLnNoaWZ0KCksby5maXJlV2l0aChlWzBdLGVbMV0pKSl9LG89e2FkZDpmdW5jdGlvbigpe2lmKGMpe3ZhciBhPWMubGVuZ3RoO20oYXJndW1lbnRzKSxpP2s9Yy5sZW5ndGg6ZSYmZSE9PSEwJiYoaj1hLG4oZVswXSxlWzFdKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKGMpe3ZhciBiPWFyZ3VtZW50cyxkPTAsZT1iLmxlbmd0aDtmb3IoO2Q8ZTtkKyspZm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspaWYoYltkXT09PWNbZl0pe2kmJmY8PWsmJihrLS0sZjw9bCYmbC0tKSxjLnNwbGljZShmLS0sMSk7aWYoYS51bmlxdWUpYnJlYWt9fXJldHVybiB0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7aWYoYyl7dmFyIGI9MCxkPWMubGVuZ3RoO2Zvcig7YjxkO2IrKylpZihhPT09Y1tiXSlyZXR1cm4hMH1yZXR1cm4hMX0sZW1wdHk6ZnVuY3Rpb24oKXtjPVtdO3JldHVybiB0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7Yz1kPWU9YjtyZXR1cm4gdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hY30sbG9jazpmdW5jdGlvbigpe2Q9YiwoIWV8fGU9PT0hMCkmJm8uZGlzYWJsZSgpO3JldHVybiB0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hZH0sZmlyZVdpdGg6ZnVuY3Rpb24oYixjKXtkJiYoaT9hLm9uY2V8fGQucHVzaChbYixjXSk6KCFhLm9uY2V8fCFlKSYmbihiLGMpKTtyZXR1cm4gdGhpc30sZmlyZTpmdW5jdGlvbigpe28uZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZX19O3JldHVybiBvfTt2YXIgaT1bXS5zbGljZTtmLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksYz1mLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxkPWYuQ2FsbGJhY2tzKCJtZW1vcnkiKSxlPSJwZW5kaW5nIixnPXtyZXNvbHZlOmIscmVqZWN0OmMsbm90aWZ5OmR9LGg9e2RvbmU6Yi5hZGQsZmFpbDpjLmFkZCxwcm9ncmVzczpkLmFkZCxzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBlfSxpc1Jlc29sdmVkOmIuZmlyZWQsaXNSZWplY3RlZDpjLmZpcmVkLHRoZW46ZnVuY3Rpb24oYSxiLGMpe2kuZG9uZShhKS5mYWlsKGIpLnByb2dyZXNzKGMpO3JldHVybiB0aGlzfSxhbHdheXM6ZnVuY3Rpb24oKXtpLmRvbmUuYXBwbHkoaSxhcmd1bWVudHMpLmZhaWwuYXBwbHkoaSxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxwaXBlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5EZWZlcnJlZChmdW5jdGlvbihkKXtmLmVhY2goe2RvbmU6W2EsInJlc29sdmUiXSxmYWlsOltiLCJyZWplY3QiXSxwcm9ncmVzczpbYywibm90aWZ5Il19LGZ1bmN0aW9uKGEsYil7dmFyIGM9YlswXSxlPWJbMV0sZztmLmlzRnVuY3Rpb24oYyk/aVthXShmdW5jdGlvbigpe2c9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyksZyYmZi5pc0Z1bmN0aW9uKGcucHJvbWlzZSk/Zy5wcm9taXNlKCkudGhlbihkLnJlc29sdmUsZC5yZWplY3QsZC5ub3RpZnkpOmRbZSsiV2l0aCJdKHRoaXM9PT1pP2Q6dGhpcyxbZ10pfSk6aVthXShkW2VdKX0pfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe2lmKGE9PW51bGwpYT1oO2Vsc2UgZm9yKHZhciBiIGluIGgpYVtiXT1oW2JdO3JldHVybiBhfX0saT1oLnByb21pc2Uoe30pLGo7Zm9yKGogaW4gZylpW2pdPWdbal0uZmlyZSxpW2orIldpdGgiXT1nW2pdLmZpcmVXaXRoO2kuZG9uZShmdW5jdGlvbigpe2U9InJlc29sdmVkIn0sYy5kaXNhYmxlLGQubG9jaykuZmFpbChmdW5jdGlvbigpe2U9InJlamVjdGVkIn0sYi5kaXNhYmxlLGQubG9jayksYSYmYS5jYWxsKGksaSk7cmV0dXJuIGl9LHdoZW46ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbShhKXtyZXR1cm4gZnVuY3Rpb24oYil7ZVthXT1hcmd1bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpiLGoubm90aWZ5V2l0aChrLGUpfX1mdW5jdGlvbiBsKGEpe3JldHVybiBmdW5jdGlvbihjKXtiW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9pLmNhbGwoYXJndW1lbnRzLDApOmMsLS1nfHxqLnJlc29sdmVXaXRoKGosYil9fXZhciBiPWkuY2FsbChhcmd1bWVudHMsMCksYz0wLGQ9Yi5sZW5ndGgsZT1BcnJheShkKSxnPWQsaD1kLGo9ZDw9MSYmYSYmZi5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/YTpmLkRlZmVycmVkKCksaz1qLnByb21pc2UoKTtpZihkPjEpe2Zvcig7YzxkO2MrKyliW2NdJiZiW2NdLnByb21pc2UmJmYuaXNGdW5jdGlvbihiW2NdLnByb21pc2UpP2JbY10ucHJvbWlzZSgpLnRoZW4obChjKSxqLnJlamVjdCxtKGMpKTotLWc7Z3x8ai5yZXNvbHZlV2l0aChqLGIpfWVsc2UgaiE9PWEmJmoucmVzb2x2ZVdpdGgoaixkP1thXTpbXSk7cmV0dXJuIGt9fSksZi5zdXBwb3J0PWZ1bmN0aW9uKCl7dmFyIGIsZCxlLGcsaCxpLGosayxsLG0sbixvLHAscT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHI9Yy5kb2N1bWVudEVsZW1lbnQ7cS5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxxLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0ndG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjU1Oyc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLGQ9cS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLGU9cS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdO2lmKCFkfHwhZC5sZW5ndGh8fCFlKXJldHVybnt9O2c9Yy5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxoPWcuYXBwZW5kQ2hpbGQoYy5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSksaT1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLGI9e2xlYWRpbmdXaGl0ZXNwYWNlOnEuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTMsdGJvZHk6IXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLGh0bWxTZXJpYWxpemU6ISFxLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIikubGVuZ3RoLHN0eWxlOi90b3AvLnRlc3QoZS5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLGhyZWZOb3JtYWxpemVkOmUuZ2V0QXR0cmlidXRlKCJocmVmIik9PT0iL2EiLG9wYWNpdHk6L14wLjU1Ly50ZXN0KGUuc3R5bGUub3BhY2l0eSksY3NzRmxvYXQ6ISFlLnN0eWxlLmNzc0Zsb2F0LGNoZWNrT246aS52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6aC5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6cS5jbGFzc05hbWUhPT0idCIsZW5jdHlwZTohIWMuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsaHRtbDVDbG9uZTpjLmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSghMCkub3V0ZXJIVE1MIT09Ijw6bmF2PjwvOm5hdj4iLHN1Ym1pdEJ1YmJsZXM6ITAsY2hhbmdlQnViYmxlczohMCxmb2N1c2luQnViYmxlczohMSxkZWxldGVFeHBhbmRvOiEwLG5vQ2xvbmVFdmVudDohMCxpbmxpbmVCbG9ja05lZWRzTGF5b3V0OiExLHNocmlua1dyYXBCbG9ja3M6ITEscmVsaWFibGVNYXJnaW5SaWdodDohMH0saS5jaGVja2VkPSEwLGIubm9DbG9uZUNoZWNrZWQ9aS5jbG9uZU5vZGUoITApLmNoZWNrZWQsZy5kaXNhYmxlZD0hMCxiLm9wdERpc2FibGVkPSFoLmRpc2FibGVkO3RyeXtkZWxldGUgcS50ZXN0fWNhdGNoKHMpe2IuZGVsZXRlRXhwYW5kbz0hMX0hcS5hZGRFdmVudExpc3RlbmVyJiZxLmF0dGFjaEV2ZW50JiZxLmZpcmVFdmVudCYmKHEuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7Yi5ub0Nsb25lRXZlbnQ9ITF9KSxxLmNsb25lTm9kZSghMCkuZmlyZUV2ZW50KCJvbmNsaWNrIikpLGk9Yy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGkudmFsdWU9InQiLGkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxiLnJhZGlvVmFsdWU9aS52YWx1ZT09PSJ0IixpLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxxLmFwcGVuZENoaWxkKGkpLGs9Yy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksay5hcHBlbmRDaGlsZChxLmxhc3RDaGlsZCksYi5jaGVja0Nsb25lPWsuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGIuYXBwZW5kQ2hlY2tlZD1pLmNoZWNrZWQsay5yZW1vdmVDaGlsZChpKSxrLmFwcGVuZENoaWxkKHEpLHEuaW5uZXJIVE1MPSIiLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKGo9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxqLnN0eWxlLndpZHRoPSIwIixqLnN0eWxlLm1hcmdpblJpZ2h0PSIwIixxLnN0eWxlLndpZHRoPSIycHgiLHEuYXBwZW5kQ2hpbGQoaiksYi5yZWxpYWJsZU1hcmdpblJpZ2h0PShwYXJzZUludCgoYS5nZXRDb21wdXRlZFN0eWxlKGosbnVsbCl8fHttYXJnaW5SaWdodDowfSkubWFyZ2luUmlnaHQsMTApfHwwKT09PTApO2lmKHEuYXR0YWNoRXZlbnQpZm9yKG8gaW57c3VibWl0OjEsY2hhbmdlOjEsZm9jdXNpbjoxfSluPSJvbiIrbyxwPW4gaW4gcSxwfHwocS5zZXRBdHRyaWJ1dGUobiwicmV0dXJuOyIpLHA9dHlwZW9mIHFbbl09PSJmdW5jdGlvbiIpLGJbbysiQnViYmxlcyJdPXA7ay5yZW1vdmVDaGlsZChxKSxrPWc9aD1qPXE9aT1udWxsLGYoZnVuY3Rpb24oKXt2YXIgYSxkLGUsZyxoLGksaixrLG0sbixvLHI9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdOyFyfHwoaj0xLGs9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDttYXJnaW46MDsiLG09InZpc2liaWxpdHk6aGlkZGVuO2JvcmRlcjowOyIsbj0ic3R5bGU9JyIraysiYm9yZGVyOjVweCBzb2xpZCAjMDAwO3BhZGRpbmc6MDsnIixvPSI8ZGl2ICIrbisiPjxkaXY+PC9kaXY+PC9kaXY+IisiPHRhYmxlICIrbisiIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+IisiPHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT4iLGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxhLnN0eWxlLmNzc1RleHQ9bSsid2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFyZ2luLXRvcDoiK2orInB4IixyLmluc2VydEJlZm9yZShhLHIuZmlyc3RDaGlsZCkscT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGEuYXBwZW5kQ2hpbGQocSkscS5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkIHN0eWxlPSdwYWRkaW5nOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixsPXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIikscD1sWzBdLm9mZnNldEhlaWdodD09PTAsbFswXS5zdHlsZS5kaXNwbGF5PSIiLGxbMV0uc3R5bGUuZGlzcGxheT0ibm9uZSIsYi5yZWxpYWJsZUhpZGRlbk9mZnNldHM9cCYmbFswXS5vZmZzZXRIZWlnaHQ9PT0wLHEuaW5uZXJIVE1MPSIiLHEuc3R5bGUud2lkdGg9cS5zdHlsZS5wYWRkaW5nTGVmdD0iMXB4IixmLmJveE1vZGVsPWIuYm94TW9kZWw9cS5vZmZzZXRXaWR0aD09PTIsdHlwZW9mIHEuc3R5bGUuem9vbSE9InVuZGVmaW5lZCImJihxLnN0eWxlLmRpc3BsYXk9ImlubGluZSIscS5zdHlsZS56b29tPTEsYi5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PXEub2Zmc2V0V2lkdGg9PT0yLHEuc3R5bGUuZGlzcGxheT0iIixxLmlubmVySFRNTD0iPGRpdiBzdHlsZT0nd2lkdGg6NHB4Oyc+PC9kaXY+IixiLnNocmlua1dyYXBCbG9ja3M9cS5vZmZzZXRXaWR0aCE9PTIpLHEuc3R5bGUuY3NzVGV4dD1rK20scS5pbm5lckhUTUw9byxkPXEuZmlyc3RDaGlsZCxlPWQuZmlyc3RDaGlsZCxoPWQubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJzdENoaWxkLGk9e2RvZXNOb3RBZGRCb3JkZXI6ZS5vZmZzZXRUb3AhPT01LGRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzOmgub2Zmc2V0VG9wPT09NX0sZS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGUuc3R5bGUudG9wPSIyMHB4IixpLmZpeGVkUG9zaXRpb249ZS5vZmZzZXRUb3A9PT0yMHx8ZS5vZmZzZXRUb3A9PT0xNSxlLnN0eWxlLnBvc2l0aW9uPWUuc3R5bGUudG9wPSIiLGQuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGkuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlPWUub2Zmc2V0VG9wPT09LTUsaS5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldD1yLm9mZnNldFRvcCE9PWosci5yZW1vdmVDaGlsZChhKSxxPWE9bnVsbCxmLmV4dGVuZChiLGkpKX0pO3JldHVybiBifSgpO3ZhciBqPS9eKD86XHsuKlx9fFxbLipcXSkkLyxrPS8oW0EtWl0pL2c7Zi5leHRlbmQoe2NhY2hlOnt9LHV1aWQ6MCxleHBhbmRvOiJqUXVlcnkiKyhmLmZuLmpxdWVyeStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0RhdGE6e2VtYmVkOiEwLG9iamVjdDoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIixhcHBsZXQ6ITB9LGhhc0RhdGE6ZnVuY3Rpb24oYSl7YT1hLm5vZGVUeXBlP2YuY2FjaGVbYVtmLmV4cGFuZG9dXTphW2YuZXhwYW5kb107cmV0dXJuISFhJiYhbShhKX0sZGF0YTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWYuYWNjZXB0RGF0YShhKSl7dmFyIGcsaCxpLGo9Zi5leHBhbmRvLGs9dHlwZW9mIGM9PSJzdHJpbmciLGw9YS5ub2RlVHlwZSxtPWw/Zi5jYWNoZTphLG49bD9hW2pdOmFbal0mJmosbz1jPT09ImV2ZW50cyI7aWYoKCFufHwhbVtuXXx8IW8mJiFlJiYhbVtuXS5kYXRhKSYmayYmZD09PWIpcmV0dXJuO258fChsP2Fbal09bj0rK2YudXVpZDpuPWopLG1bbl18fChtW25dPXt9LGx8fChtW25dLnRvSlNPTj1mLm5vb3ApKTtpZih0eXBlb2YgYz09Im9iamVjdCJ8fHR5cGVvZiBjPT0iZnVuY3Rpb24iKWU/bVtuXT1mLmV4dGVuZChtW25dLGMpOm1bbl0uZGF0YT1mLmV4dGVuZChtW25dLmRhdGEsYyk7Zz1oPW1bbl0sZXx8KGguZGF0YXx8KGguZGF0YT17fSksaD1oLmRhdGEpLGQhPT1iJiYoaFtmLmNhbWVsQ2FzZShjKV09ZCk7aWYobyYmIWhbY10pcmV0dXJuIGcuZXZlbnRzO2s/KGk9aFtjXSxpPT1udWxsJiYoaT1oW2YuY2FtZWxDYXNlKGMpXSkpOmk9aDtyZXR1cm4gaX19LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiLGMpe2lmKCEhZi5hY2NlcHREYXRhKGEpKXt2YXIgZCxlLGcsaD1mLmV4cGFuZG8saT1hLm5vZGVUeXBlLGo9aT9mLmNhY2hlOmEsaz1pP2FbaF06aDtpZighaltrXSlyZXR1cm47aWYoYil7ZD1jP2pba106altrXS5kYXRhO2lmKGQpe2YuaXNBcnJheShiKXx8KGIgaW4gZD9iPVtiXTooYj1mLmNhbWVsQ2FzZShiKSxiIGluIGQ/Yj1bYl06Yj1iLnNwbGl0KCIgIikpKTtmb3IoZT0wLGc9Yi5sZW5ndGg7ZTxnO2UrKylkZWxldGUgZFtiW2VdXTtpZighKGM/bTpmLmlzRW1wdHlPYmplY3QpKGQpKXJldHVybn19aWYoIWMpe2RlbGV0ZSBqW2tdLmRhdGE7aWYoIW0oaltrXSkpcmV0dXJufWYuc3VwcG9ydC5kZWxldGVFeHBhbmRvfHwhai5zZXRJbnRlcnZhbD9kZWxldGUgaltrXTpqW2tdPW51bGwsaSYmKGYuc3VwcG9ydC5kZWxldGVFeHBhbmRvP2RlbGV0ZSBhW2hdOmEucmVtb3ZlQXR0cmlidXRlP2EucmVtb3ZlQXR0cmlidXRlKGgpOmFbaF09bnVsbCl9fSxfZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGF0YShhLGIsYywhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oYSl7aWYoYS5ub2RlTmFtZSl7dmFyIGI9Zi5ub0RhdGFbYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtpZihiKXJldHVybiBiIT09ITAmJmEuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIik9PT1ifXJldHVybiEwfX0pLGYuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYyl7dmFyIGQsZSxnLGg9bnVsbDtpZih0eXBlb2YgYT09InVuZGVmaW5lZCIpe2lmKHRoaXMubGVuZ3RoKXtoPWYuZGF0YSh0aGlzWzBdKTtpZih0aGlzWzBdLm5vZGVUeXBlPT09MSYmIWYuX2RhdGEodGhpc1swXSwicGFyc2VkQXR0cnMiKSl7ZT10aGlzWzBdLmF0dHJpYnV0ZXM7Zm9yKHZhciBpPTAsaj1lLmxlbmd0aDtpPGo7aSsrKWc9ZVtpXS5uYW1lLGcuaW5kZXhPZigiZGF0YS0iKT09PTAmJihnPWYuY2FtZWxDYXNlKGcuc3Vic3RyaW5nKDUpKSxsKHRoaXNbMF0sZyxoW2ddKSk7Zi5fZGF0YSh0aGlzWzBdLCJwYXJzZWRBdHRycyIsITApfX1yZXR1cm4gaH1pZih0eXBlb2YgYT09Im9iamVjdCIpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZGF0YSh0aGlzLGEpfSk7ZD1hLnNwbGl0KCIuIiksZFsxXT1kWzFdPyIuIitkWzFdOiIiO2lmKGM9PT1iKXtoPXRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiK2RbMV0rIiEiLFtkWzBdXSksaD09PWImJnRoaXMubGVuZ3RoJiYoaD1mLmRhdGEodGhpc1swXSxhKSxoPWwodGhpc1swXSxhLGgpKTtyZXR1cm4gaD09PWImJmRbMV0/dGhpcy5kYXRhKGRbMF0pOmh9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYodGhpcyksZT1bZFswXSxjXTtiLnRyaWdnZXJIYW5kbGVyKCJzZXREYXRhIitkWzFdKyIhIixlKSxmLmRhdGEodGhpcyxhLGMpLGIudHJpZ2dlckhhbmRsZXIoImNoYW5nZURhdGEiK2RbMV0rIiEiLGUpfSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YucmVtb3ZlRGF0YSh0aGlzLGEpfSl9fSksZi5leHRlbmQoe19tYXJrOmZ1bmN0aW9uKGEsYil7YSYmKGI9KGJ8fCJmeCIpKyJtYXJrIixmLl9kYXRhKGEsYiwoZi5fZGF0YShhLGIpfHwwKSsxKSl9LF91bm1hcms6ZnVuY3Rpb24oYSxiLGMpe2EhPT0hMCYmKGM9YixiPWEsYT0hMSk7aWYoYil7Yz1jfHwiZngiO3ZhciBkPWMrIm1hcmsiLGU9YT8wOihmLl9kYXRhKGIsZCl8fDEpLTE7ZT9mLl9kYXRhKGIsZCxlKTooZi5yZW1vdmVEYXRhKGIsZCwhMCksbihiLGMsIm1hcmsiKSl9fSxxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYSl7Yj0oYnx8ImZ4IikrInF1ZXVlIixkPWYuX2RhdGEoYSxiKSxjJiYoIWR8fGYuaXNBcnJheShjKT9kPWYuX2RhdGEoYSxiLGYubWFrZUFycmF5KGMpKTpkLnB1c2goYykpO3JldHVybiBkfHxbXX19LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGM9Zi5xdWV1ZShhLGIpLGQ9Yy5zaGlmdCgpLGU9e307ZD09PSJpbnByb2dyZXNzIiYmKGQ9Yy5zaGlmdCgpKSxkJiYoYj09PSJmeCImJmMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGYuX2RhdGEoYSxiKyIucnVuIixlKSxkLmNhbGwoYSxmdW5jdGlvbigpe2YuZGVxdWV1ZShhLGIpfSxlKSksYy5sZW5ndGh8fChmLnJlbW92ZURhdGEoYSxiKyJxdWV1ZSAiK2IrIi5ydW4iLCEwKSxuKGEsYiwicXVldWUiKSl9fSksZi5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYyl7dHlwZW9mIGEhPSJzdHJpbmciJiYoYz1hLGE9ImZ4Iik7aWYoYz09PWIpcmV0dXJuIGYucXVldWUodGhpc1swXSxhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zi5xdWV1ZSh0aGlzLGEsYyk7YT09PSJmeCImJmJbMF0hPT0iaW5wcm9ncmVzcyImJmYuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlbGF5OmZ1bmN0aW9uKGEsYil7YT1mLmZ4P2YuZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiO3JldHVybiB0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1zZXRUaW1lb3V0KGIsYSk7Yy5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGQpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gbSgpey0taHx8ZC5yZXNvbHZlV2l0aChlLFtlXSl9dHlwZW9mIGEhPSJzdHJpbmciJiYoYz1hLGE9YiksYT1hfHwiZngiO3ZhciBkPWYuRGVmZXJyZWQoKSxlPXRoaXMsZz1lLmxlbmd0aCxoPTEsaT1hKyJkZWZlciIsaj1hKyJxdWV1ZSIsaz1hKyJtYXJrIixsO3doaWxlKGctLSlpZihsPWYuZGF0YShlW2ddLGksYiwhMCl8fChmLmRhdGEoZVtnXSxqLGIsITApfHxmLmRhdGEoZVtnXSxrLGIsITApKSYmZi5kYXRhKGVbZ10saSxmLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwhMCkpaCsrLGwuYWRkKG0pO20oKTtyZXR1cm4gZC5wcm9taXNlKCl9fSk7dmFyIG89L1tcblx0XHJdL2cscD0vXHMrLyxxPS9cci9nLHI9L14oPzpidXR0b258aW5wdXQpJC9pLHM9L14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksdD0vXmEoPzpyZWEpPyQvaSx1PS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLHY9Zi5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZSx3LHgseTtmLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLmF0dHIpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZUF0dHIodGhpcyxhKX0pfSxwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuYWNjZXNzKHRoaXMsYSxiLCEwLGYucHJvcCl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7YT1mLnByb3BGaXhbYV18fGE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2FdPWIsZGVsZXRlIHRoaXNbYV19Y2F0Y2goYyl7fX0pfSxhZGRDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxnLGgsaTtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nIil7Yj1hLnNwbGl0KHApO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtlPXRoaXNbY107aWYoZS5ub2RlVHlwZT09PTEpaWYoIWUuY2xhc3NOYW1lJiZiLmxlbmd0aD09PTEpZS5jbGFzc05hbWU9YTtlbHNle2c9IiAiK2UuY2xhc3NOYW1lKyIgIjtmb3IoaD0wLGk9Yi5sZW5ndGg7aDxpO2grKyl+Zy5pbmRleE9mKCIgIitiW2hdKyIgIil8fChnKz1iW2hdKyIgIik7ZS5jbGFzc05hbWU9Zi50cmltKGcpfX19cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxnLGgsaSxqO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmcifHxhPT09Yil7Yz0oYXx8IiIpLnNwbGl0KHApO2ZvcihkPTAsZT10aGlzLmxlbmd0aDtkPGU7ZCsrKXtnPXRoaXNbZF07aWYoZy5ub2RlVHlwZT09PTEmJmcuY2xhc3NOYW1lKWlmKGEpe2g9KCIgIitnLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpO2ZvcihpPTAsaj1jLmxlbmd0aDtpPGo7aSsrKWg9aC5yZXBsYWNlKCIgIitjW2ldKyIgIiwiICIpO2cuY2xhc3NOYW1lPWYudHJpbShoKX1lbHNlIGcuY2xhc3NOYW1lPSIifX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYSxkPXR5cGVvZiBiPT0iYm9vbGVhbiI7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7Zih0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGM9PT0ic3RyaW5nIil7dmFyIGUsZz0wLGg9Zih0aGlzKSxpPWIsaj1hLnNwbGl0KHApO3doaWxlKGU9altnKytdKWk9ZD9pOiFoLmhhc0NsYXNzKGUpLGhbaT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGUpfWVsc2UgaWYoYz09PSJ1bmRlZmluZWQifHxjPT09ImJvb2xlYW4iKXRoaXMuY2xhc3NOYW1lJiZmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExPyIiOmYuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXt2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7Zm9yKDtjPGQ7YysrKWlmKHRoaXNbY10ubm9kZVR5cGU9PT0xJiYoIiAiK3RoaXNbY10uY2xhc3NOYW1lKyIgIikucmVwbGFjZShvLCIgIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX0sdmFsOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxnPXRoaXNbMF07e2lmKCEhYXJndW1lbnRzLmxlbmd0aCl7ZT1mLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihkKXt2YXIgZz1mKHRoaXMpLGg7aWYodGhpcy5ub2RlVHlwZT09PTEpe2U/aD1hLmNhbGwodGhpcyxkLGcudmFsKCkpOmg9YSxoPT1udWxsP2g9IiI6dHlwZW9mIGg9PSJudW1iZXIiP2grPSIiOmYuaXNBcnJheShoKSYmKGg9Zi5tYXAoaCxmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjphKyIifSkpLGM9Zi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldfHxmLnZhbEhvb2tzW3RoaXMudHlwZV07aWYoIWN8fCEoInNldCJpbiBjKXx8Yy5zZXQodGhpcyxoLCJ2YWx1ZSIpPT09Yil0aGlzLnZhbHVlPWh9fSl9aWYoZyl7Yz1mLnZhbEhvb2tzW2cubm9kZU5hbWUudG9Mb3dlckNhc2UoKV18fGYudmFsSG9va3NbZy50eXBlXTtpZihjJiYiZ2V0ImluIGMmJihkPWMuZ2V0KGcsInZhbHVlIikpIT09YilyZXR1cm4gZDtkPWcudmFsdWU7cmV0dXJuIHR5cGVvZiBkPT0ic3RyaW5nIj9kLnJlcGxhY2UocSwiIik6ZD09bnVsbD8iIjpkfX19fSksZi5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWJ8fGIuc3BlY2lmaWVkP2EudmFsdWU6YS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZz1hLnNlbGVjdGVkSW5kZXgsaD1bXSxpPWEub3B0aW9ucyxqPWEudHlwZT09PSJzZWxlY3Qtb25lIjtpZihnPDApcmV0dXJuIG51bGw7Yz1qP2c6MCxkPWo/ZysxOmkubGVuZ3RoO2Zvcig7YzxkO2MrKyl7ZT1pW2NdO2lmKGUuc2VsZWN0ZWQmJihmLnN1cHBvcnQub3B0RGlzYWJsZWQ/IWUuZGlzYWJsZWQ6ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFlLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFmLm5vZGVOYW1lKGUucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2I9ZihlKS52YWwoKTtpZihqKXJldHVybiBiO2gucHVzaChiKX19aWYoaiYmIWgubGVuZ3RoJiZpLmxlbmd0aClyZXR1cm4gZihpW2ddKS52YWwoKTtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9Zi5tYWtlQXJyYXkoYik7ZihhKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1mLmluQXJyYXkoZih0aGlzKS52YWwoKSxjKT49MH0pLGMubGVuZ3RofHwoYS5zZWxlY3RlZEluZGV4PS0xKTtyZXR1cm4gY319fSxhdHRyRm46e3ZhbDohMCxjc3M6ITAsaHRtbDohMCx0ZXh0OiEwLGRhdGE6ITAsd2lkdGg6ITAsaGVpZ2h0OiEwLG9mZnNldDohMH0sYXR0cjpmdW5jdGlvbihhLGMsZCxlKXt2YXIgZyxoLGksaj1hLm5vZGVUeXBlO2lmKCEhYSYmaiE9PTMmJmohPT04JiZqIT09Mil7aWYoZSYmYyBpbiBmLmF0dHJGbilyZXR1cm4gZihhKVtjXShkKTtpZih0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PSJ1bmRlZmluZWQiKXJldHVybiBmLnByb3AoYSxjLGQpO2k9aiE9PTF8fCFmLmlzWE1MRG9jKGEpLGkmJihjPWMudG9Mb3dlckNhc2UoKSxoPWYuYXR0ckhvb2tzW2NdfHwodS50ZXN0KGMpP3g6dykpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7Zi5yZW1vdmVBdHRyKGEsYyk7cmV0dXJufWlmKGgmJiJzZXQiaW4gaCYmaSYmKGc9aC5zZXQoYSxkLGMpKSE9PWIpcmV0dXJuIGc7YS5zZXRBdHRyaWJ1dGUoYywiIitkKTtyZXR1cm4gZH1pZihoJiYiZ2V0ImluIGgmJmkmJihnPWguZ2V0KGEsYykpIT09bnVsbClyZXR1cm4gZztnPWEuZ2V0QXR0cmlidXRlKGMpO3JldHVybiBnPT09bnVsbD9iOmd9fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGcsaD0wO2lmKGImJmEubm9kZVR5cGU9PT0xKXtkPWIudG9Mb3dlckNhc2UoKS5zcGxpdChwKSxnPWQubGVuZ3RoO2Zvcig7aDxnO2grKyllPWRbaF0sZSYmKGM9Zi5wcm9wRml4W2VdfHxlLGYuYXR0cihhLGUsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHY/ZTpjKSx1LnRlc3QoZSkmJmMgaW4gYSYmKGFbY109ITEpKX19LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoci50ZXN0KGEubm9kZU5hbWUpJiZhLnBhcmVudE5vZGUpZi5lcnJvcigidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIik7ZWxzZSBpZighZi5zdXBwb3J0LnJhZGlvVmFsdWUmJmI9PT0icmFkaW8iJiZmLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7YS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpO3JldHVybiBifX19LHZhbHVlOntnZXQ6ZnVuY3Rpb24oYSxiKXtpZih3JiZmLm5vZGVOYW1lKGEsImJ1dHRvbiIpKXJldHVybiB3LmdldChhLGIpO3JldHVybiBiIGluIGE/YS52YWx1ZTpudWxsfSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe2lmKHcmJmYubm9kZU5hbWUoYSwiYnV0dG9uIikpcmV0dXJuIHcuc2V0KGEsYixjKTthLnZhbHVlPWJ9fX0scHJvcEZpeDp7dGFiaW5kZXg6InRhYkluZGV4IixyZWFkb25seToicmVhZE9ubHkiLCJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoiY2VsbFNwYWNpbmciLGNlbGxwYWRkaW5nOiJjZWxsUGFkZGluZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJmcmFtZUJvcmRlciIsY29udGVudGVkaXRhYmxlOiJjb250ZW50RWRpdGFibGUifSxwcm9wOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnLGgsaT1hLm5vZGVUeXBlO2lmKCEhYSYmaSE9PTMmJmkhPT04JiZpIT09Mil7aD1pIT09MXx8IWYuaXNYTUxEb2MoYSksaCYmKGM9Zi5wcm9wRml4W2NdfHxjLGc9Zi5wcm9wSG9va3NbY10pO3JldHVybiBkIT09Yj9nJiYic2V0ImluIGcmJihlPWcuc2V0KGEsZCxjKSkhPT1iP2U6YVtjXT1kOmcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSxjKSkhPT1udWxsP2U6YVtjXX19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihhKXt2YXIgYz1hLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7cmV0dXJuIGMmJmMuc3BlY2lmaWVkP3BhcnNlSW50KGMudmFsdWUsMTApOnMudGVzdChhLm5vZGVOYW1lKXx8dC50ZXN0KGEubm9kZU5hbWUpJiZhLmhyZWY/MDpifX19fSksZi5hdHRySG9va3MudGFiaW5kZXg9Zi5wcm9wSG9va3MudGFiSW5kZXgseD17Z2V0OmZ1bmN0aW9uKGEsYyl7dmFyIGQsZT1mLnByb3AoYSxjKTtyZXR1cm4gZT09PSEwfHx0eXBlb2YgZSE9ImJvb2xlYW4iJiYoZD1hLmdldEF0dHJpYnV0ZU5vZGUoYykpJiZkLm5vZGVWYWx1ZSE9PSExP2MudG9Mb3dlckNhc2UoKTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2I9PT0hMT9mLnJlbW92ZUF0dHIoYSxjKTooZD1mLnByb3BGaXhbY118fGMsZCBpbiBhJiYoYVtkXT0hMCksYS5zZXRBdHRyaWJ1dGUoYyxjLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gY319LHZ8fCh5PXtuYW1lOiEwLGlkOiEwfSx3PWYudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZDtkPWEuZ2V0QXR0cmlidXRlTm9kZShjKTtyZXR1cm4gZCYmKHlbY10/ZC5ub2RlVmFsdWUhPT0iIjpkLnNwZWNpZmllZCk/ZC5ub2RlVmFsdWU6Yn0sc2V0OmZ1bmN0aW9uKGEsYixkKXt2YXIgZT1hLmdldEF0dHJpYnV0ZU5vZGUoZCk7ZXx8KGU9Yy5jcmVhdGVBdHRyaWJ1dGUoZCksYS5zZXRBdHRyaWJ1dGVOb2RlKGUpKTtyZXR1cm4gZS5ub2RlVmFsdWU9YisiIn19LGYuYXR0ckhvb2tzLnRhYmluZGV4LnNldD13LnNldCxmLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7Zi5hdHRySG9va3NbYl09Zi5leHRlbmQoZi5hdHRySG9va3NbYl0se3NldDpmdW5jdGlvbihhLGMpe2lmKGM9PT0iIil7YS5zZXRBdHRyaWJ1dGUoYiwiYXV0byIpO3JldHVybiBjfX19KX0pLGYuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZT17Z2V0OncuZ2V0LHNldDpmdW5jdGlvbihhLGIsYyl7Yj09PSIiJiYoYj0iZmFsc2UiKSx3LnNldChhLGIsYyl9fSksZi5zdXBwb3J0LmhyZWZOb3JtYWxpemVkfHxmLmVhY2goWyJocmVmIiwic3JjIiwid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGMpe2YuYXR0ckhvb2tzW2NdPWYuZXh0ZW5kKGYuYXR0ckhvb2tzW2NdLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGUoYywyKTtyZXR1cm4gZD09PW51bGw/YjpkfX0pfSksZi5zdXBwb3J0LnN0eWxlfHwoZi5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCl8fGJ9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9IiIrYn19KSxmLnN1cHBvcnQub3B0U2VsZWN0ZWR8fChmLnByb3BIb29rcy5zZWxlY3RlZD1mLmV4dGVuZChmLnByb3BIb29rcy5zZWxlY3RlZCx7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpO3JldHVybiBudWxsfX0pKSxmLnN1cHBvcnQuZW5jdHlwZXx8KGYucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpLGYuc3VwcG9ydC5jaGVja09ufHxmLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtmLnZhbEhvb2tzW3RoaXNdPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmEudmFsdWV9fX0pLGYuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2YudmFsSG9va3NbdGhpc109Zi5leHRlbmQoZi52YWxIb29rc1t0aGlzXSx7c2V0OmZ1bmN0aW9uKGEsYil7aWYoZi5pc0FycmF5KGIpKXJldHVybiBhLmNoZWNrZWQ9Zi5pbkFycmF5KGYoYSkudmFsKCksYik+PTB9fSl9KTt2YXIgej0vXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksQT0vXihbXlwuXSopPyg/OlwuKC4rKSk/JC8sQj0vXGJob3ZlcihcLlxTKyk/XGIvLEM9L15rZXkvLEQ9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLEU9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLEY9L14oXHcqKSg/OiMoW1x3XC1dKykpPyg/OlwuKFtcd1wtXSspKT8kLyxHPWZ1bmN0aW9uKGEpe3ZhciBiPUYuZXhlYyhhKTtiJiYoYlsxXT0oYlsxXXx8IiIpLnRvTG93ZXJDYXNlKCksYlszXT1iWzNdJiZuZXcgUmVnRXhwKCIoPzpefFxccykiK2JbM10rIig/Olxcc3wkKSIpKTtyZXR1cm4gYn0sSD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuYXR0cmlidXRlc3x8e307cmV0dXJuKCFiWzFdfHxhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iWzFdKSYmKCFiWzJdfHwoYy5pZHx8e30pLnZhbHVlPT09YlsyXSkmJighYlszXXx8YlszXS50ZXN0KChjWyJjbGFzcyJdfHx7fSkudmFsdWUpKX0sST1mdW5jdGlvbihhKXtyZXR1cm4gZi5ldmVudC5zcGVjaWFsLmhvdmVyP2E6YS5yZXBsYWNlKEIsIm1vdXNlZW50ZXIkMSBtb3VzZWxlYXZlJDEiKX07CmYuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scCxxLHIscztpZighKGEubm9kZVR5cGU9PT0zfHxhLm5vZGVUeXBlPT09OHx8IWN8fCFkfHwhKGg9Zi5fZGF0YShhKSkpKXtkLmhhbmRsZXImJihwPWQsZD1wLmhhbmRsZXIpLGQuZ3VpZHx8KGQuZ3VpZD1mLmd1aWQrKyksaj1oLmV2ZW50cyxqfHwoaC5ldmVudHM9aj17fSksaT1oLmhhbmRsZSxpfHwoaC5oYW5kbGU9aT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGYhPSJ1bmRlZmluZWQiJiYoIWF8fGYuZXZlbnQudHJpZ2dlcmVkIT09YS50eXBlKT9mLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGkuZWxlbSxhcmd1bWVudHMpOmJ9LGkuZWxlbT1hKSxjPWYudHJpbShJKGMpKS5zcGxpdCgiICIpO2ZvcihrPTA7azxjLmxlbmd0aDtrKyspe2w9QS5leGVjKGNba10pfHxbXSxtPWxbMV0sbj0obFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLHM9Zi5ldmVudC5zcGVjaWFsW21dfHx7fSxtPShnP3MuZGVsZWdhdGVUeXBlOnMuYmluZFR5cGUpfHxtLHM9Zi5ldmVudC5zcGVjaWFsW21dfHx7fSxvPWYuZXh0ZW5kKHt0eXBlOm0sb3JpZ1R5cGU6bFsxXSxkYXRhOmUsaGFuZGxlcjpkLGd1aWQ6ZC5ndWlkLHNlbGVjdG9yOmcscXVpY2s6RyhnKSxuYW1lc3BhY2U6bi5qb2luKCIuIil9LHApLHI9alttXTtpZighcil7cj1qW21dPVtdLHIuZGVsZWdhdGVDb3VudD0wO2lmKCFzLnNldHVwfHxzLnNldHVwLmNhbGwoYSxlLG4saSk9PT0hMSlhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKG0saSwhMSk6YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib24iK20saSl9cy5hZGQmJihzLmFkZC5jYWxsKGEsbyksby5oYW5kbGVyLmd1aWR8fChvLmhhbmRsZXIuZ3VpZD1kLmd1aWQpKSxnP3Iuc3BsaWNlKHIuZGVsZWdhdGVDb3VudCsrLDAsbyk6ci5wdXNoKG8pLGYuZXZlbnQuZ2xvYmFsW21dPSEwfWE9bnVsbH19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZz1mLmhhc0RhdGEoYSkmJmYuX2RhdGEoYSksaCxpLGosayxsLG0sbixvLHAscSxyLHM7aWYoISFnJiYhIShvPWcuZXZlbnRzKSl7Yj1mLnRyaW0oSShifHwiIikpLnNwbGl0KCIgIik7Zm9yKGg9MDtoPGIubGVuZ3RoO2grKyl7aT1BLmV4ZWMoYltoXSl8fFtdLGo9az1pWzFdLGw9aVsyXTtpZighail7Zm9yKGogaW4gbylmLmV2ZW50LnJlbW92ZShhLGorYltoXSxjLGQsITApO2NvbnRpbnVlfXA9Zi5ldmVudC5zcGVjaWFsW2pdfHx7fSxqPShkP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHxqLHI9b1tqXXx8W10sbT1yLmxlbmd0aCxsPWw/bmV3IFJlZ0V4cCgiKF58XFwuKSIrbC5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKTpudWxsO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspcz1yW25dLChlfHxrPT09cy5vcmlnVHlwZSkmJighY3x8Yy5ndWlkPT09cy5ndWlkKSYmKCFsfHxsLnRlc3Qocy5uYW1lc3BhY2UpKSYmKCFkfHxkPT09cy5zZWxlY3Rvcnx8ZD09PSIqKiImJnMuc2VsZWN0b3IpJiYoci5zcGxpY2Uobi0tLDEpLHMuc2VsZWN0b3ImJnIuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGEscykpO3IubGVuZ3RoPT09MCYmbSE9PXIubGVuZ3RoJiYoKCFwLnRlYXJkb3dufHxwLnRlYXJkb3duLmNhbGwoYSxsKT09PSExKSYmZi5yZW1vdmVFdmVudChhLGosZy5oYW5kbGUpLGRlbGV0ZSBvW2pdKX1mLmlzRW1wdHlPYmplY3QobykmJihxPWcuaGFuZGxlLHEmJihxLmVsZW09bnVsbCksZi5yZW1vdmVEYXRhKGEsWyJldmVudHMiLCJoYW5kbGUiXSwhMCkpfX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6ITAsc2V0RGF0YTohMCxjaGFuZ2VEYXRhOiEwfSx0cmlnZ2VyOmZ1bmN0aW9uKGMsZCxlLGcpe2lmKCFlfHxlLm5vZGVUeXBlIT09MyYmZS5ub2RlVHlwZSE9PTgpe3ZhciBoPWMudHlwZXx8YyxpPVtdLGosayxsLG0sbixvLHAscSxyLHM7aWYoRS50ZXN0KGgrZi5ldmVudC50cmlnZ2VyZWQpKXJldHVybjtoLmluZGV4T2YoIiEiKT49MCYmKGg9aC5zbGljZSgwLC0xKSxrPSEwKSxoLmluZGV4T2YoIi4iKT49MCYmKGk9aC5zcGxpdCgiLiIpLGg9aS5zaGlmdCgpLGkuc29ydCgpKTtpZigoIWV8fGYuZXZlbnQuY3VzdG9tRXZlbnRbaF0pJiYhZi5ldmVudC5nbG9iYWxbaF0pcmV0dXJuO2M9dHlwZW9mIGM9PSJvYmplY3QiP2NbZi5leHBhbmRvXT9jOm5ldyBmLkV2ZW50KGgsYyk6bmV3IGYuRXZlbnQoaCksYy50eXBlPWgsYy5pc1RyaWdnZXI9ITAsYy5leGNsdXNpdmU9ayxjLm5hbWVzcGFjZT1pLmpvaW4oIi4iKSxjLm5hbWVzcGFjZV9yZT1jLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpOm51bGwsbz1oLmluZGV4T2YoIjoiKTwwPyJvbiIraDoiIjtpZighZSl7aj1mLmNhY2hlO2ZvcihsIGluIGopaltsXS5ldmVudHMmJmpbbF0uZXZlbnRzW2hdJiZmLmV2ZW50LnRyaWdnZXIoYyxkLGpbbF0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZSksZD1kIT1udWxsP2YubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxwPWYuZXZlbnQuc3BlY2lhbFtoXXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkoZSxkKT09PSExKXJldHVybjtyPVtbZSxwLmJpbmRUeXBlfHxoXV07aWYoIWcmJiFwLm5vQnViYmxlJiYhZi5pc1dpbmRvdyhlKSl7cz1wLmRlbGVnYXRlVHlwZXx8aCxtPUUudGVzdChzK2gpP2U6ZS5wYXJlbnROb2RlLG49bnVsbDtmb3IoO207bT1tLnBhcmVudE5vZGUpci5wdXNoKFttLHNdKSxuPW07biYmbj09PWUub3duZXJEb2N1bWVudCYmci5wdXNoKFtuLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRvd3x8YSxzXSl9Zm9yKGw9MDtsPHIubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2wrKyltPXJbbF1bMF0sYy50eXBlPXJbbF1bMV0scT0oZi5fZGF0YShtLCJldmVudHMiKXx8e30pW2MudHlwZV0mJmYuX2RhdGEobSwiaGFuZGxlIikscSYmcS5hcHBseShtLGQpLHE9byYmbVtvXSxxJiZmLmFjY2VwdERhdGEobSkmJnEuYXBwbHkobSxkKT09PSExJiZjLnByZXZlbnREZWZhdWx0KCk7Yy50eXBlPWgsIWcmJiFjLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYoIXAuX2RlZmF1bHR8fHAuX2RlZmF1bHQuYXBwbHkoZS5vd25lckRvY3VtZW50LGQpPT09ITEpJiYoaCE9PSJjbGljayJ8fCFmLm5vZGVOYW1lKGUsImEiKSkmJmYuYWNjZXB0RGF0YShlKSYmbyYmZVtoXSYmKGghPT0iZm9jdXMiJiZoIT09ImJsdXIifHxjLnRhcmdldC5vZmZzZXRXaWR0aCE9PTApJiYhZi5pc1dpbmRvdyhlKSYmKG49ZVtvXSxuJiYoZVtvXT1udWxsKSxmLmV2ZW50LnRyaWdnZXJlZD1oLGVbaF0oKSxmLmV2ZW50LnRyaWdnZXJlZD1iLG4mJihlW29dPW4pKTtyZXR1cm4gYy5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihjKXtjPWYuZXZlbnQuZml4KGN8fGEuZXZlbnQpO3ZhciBkPShmLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYy50eXBlXXx8W10sZT1kLmRlbGVnYXRlQ291bnQsZz1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSxoPSFjLmV4Y2x1c2l2ZSYmIWMubmFtZXNwYWNlLGk9W10saixrLGwsbSxuLG8scCxxLHIscyx0O2dbMF09YyxjLmRlbGVnYXRlVGFyZ2V0PXRoaXM7aWYoZSYmIWMudGFyZ2V0LmRpc2FibGVkJiYoIWMuYnV0dG9ufHxjLnR5cGUhPT0iY2xpY2siKSl7bT1mKHRoaXMpLG0uY29udGV4dD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXM7Zm9yKGw9Yy50YXJnZXQ7bCE9dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcyl7bz17fSxxPVtdLG1bMF09bDtmb3Ioaj0wO2o8ZTtqKyspcj1kW2pdLHM9ci5zZWxlY3RvcixvW3NdPT09YiYmKG9bc109ci5xdWljaz9IKGwsci5xdWljayk6bS5pcyhzKSksb1tzXSYmcS5wdXNoKHIpO3EubGVuZ3RoJiZpLnB1c2goe2VsZW06bCxtYXRjaGVzOnF9KX19ZC5sZW5ndGg+ZSYmaS5wdXNoKHtlbGVtOnRoaXMsbWF0Y2hlczpkLnNsaWNlKGUpfSk7Zm9yKGo9MDtqPGkubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2orKyl7cD1pW2pdLGMuY3VycmVudFRhcmdldD1wLmVsZW07Zm9yKGs9MDtrPHAubWF0Y2hlcy5sZW5ndGgmJiFjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7aysrKXtyPXAubWF0Y2hlc1trXTtpZihofHwhYy5uYW1lc3BhY2UmJiFyLm5hbWVzcGFjZXx8Yy5uYW1lc3BhY2VfcmUmJmMubmFtZXNwYWNlX3JlLnRlc3Qoci5uYW1lc3BhY2UpKWMuZGF0YT1yLmRhdGEsYy5oYW5kbGVPYmo9cixuPSgoZi5ldmVudC5zcGVjaWFsW3Iub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxyLmhhbmRsZXIpLmFwcGx5KHAuZWxlbSxnKSxuIT09YiYmKGMucmVzdWx0PW4sbj09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKX19cmV0dXJuIGMucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7YS53aGljaD09bnVsbCYmKGEud2hpY2g9Yi5jaGFyQ29kZSE9bnVsbD9iLmNoYXJDb2RlOmIua2V5Q29kZSk7cmV0dXJuIGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGQpe3ZhciBlLGYsZyxoPWQuYnV0dG9uLGk9ZC5mcm9tRWxlbWVudDthLnBhZ2VYPT1udWxsJiZkLmNsaWVudFghPW51bGwmJihlPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGMsZj1lLmRvY3VtZW50RWxlbWVudCxnPWUuYm9keSxhLnBhZ2VYPWQuY2xpZW50WCsoZiYmZi5zY3JvbGxMZWZ0fHxnJiZnLnNjcm9sbExlZnR8fDApLShmJiZmLmNsaWVudExlZnR8fGcmJmcuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1kLmNsaWVudFkrKGYmJmYuc2Nyb2xsVG9wfHxnJiZnLnNjcm9sbFRvcHx8MCktKGYmJmYuY2xpZW50VG9wfHxnJiZnLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmkmJihhLnJlbGF0ZWRUYXJnZXQ9aT09PWEudGFyZ2V0P2QudG9FbGVtZW50OmkpLCFhLndoaWNoJiZoIT09YiYmKGEud2hpY2g9aCYxPzE6aCYyPzM6aCY0PzI6MCk7cmV0dXJuIGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtmLmV4cGFuZG9dKXJldHVybiBhO3ZhciBkLGUsZz1hLGg9Zi5ldmVudC5maXhIb29rc1thLnR5cGVdfHx7fSxpPWgucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoaC5wcm9wcyk6dGhpcy5wcm9wczthPWYuRXZlbnQoZyk7Zm9yKGQ9aS5sZW5ndGg7ZDspZT1pWy0tZF0sYVtlXT1nW2VdO2EudGFyZ2V0fHwoYS50YXJnZXQ9Zy5zcmNFbGVtZW50fHxjKSxhLnRhcmdldC5ub2RlVHlwZT09PTMmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9PT1iJiYoYS5tZXRhS2V5PWEuY3RybEtleSk7cmV0dXJuIGguZmlsdGVyP2guZmlsdGVyKGEsZyk6YX0sc3BlY2lhbDp7cmVhZHk6e3NldHVwOmYuYmluZFJlYWR5fSxsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e2RlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e2RlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxiZWZvcmV1bmxvYWQ6e3NldHVwOmZ1bmN0aW9uKGEsYixjKXtmLmlzV2luZG93KHRoaXMpJiYodGhpcy5vbmJlZm9yZXVubG9hZD1jKX0sdGVhcmRvd246ZnVuY3Rpb24oYSxiKXt0aGlzLm9uYmVmb3JldW5sb2FkPT09YiYmKHRoaXMub25iZWZvcmV1bmxvYWQ9bnVsbCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9Zi5leHRlbmQobmV3IGYuRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP2YuZXZlbnQudHJpZ2dlcihlLG51bGwsYik6Zi5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sZi5ldmVudC5oYW5kbGU9Zi5ldmVudC5kaXNwYXRjaCxmLnJlbW92ZUV2ZW50PWMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX06ZnVuY3Rpb24oYSxiLGMpe2EuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGMpfSxmLkV2ZW50PWZ1bmN0aW9uKGEsYil7aWYoISh0aGlzIGluc3RhbmNlb2YgZi5FdmVudCkpcmV0dXJuIG5ldyBmLkV2ZW50KGEsYik7YSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8YS5yZXR1cm5WYWx1ZT09PSExfHxhLmdldFByZXZlbnREZWZhdWx0JiZhLmdldFByZXZlbnREZWZhdWx0KCk/SzpKKTp0aGlzLnR5cGU9YSxiJiZmLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxmLm5vdygpLHRoaXNbZi5leHBhbmRvXT0hMH0sZi5FdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9Szt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7IWF8fChhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1LO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDshYXx8KGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1LLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDpKLGlzUHJvcGFnYXRpb25TdG9wcGVkOkosaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6Sn0sZi5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oYSxiKXtmLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsZD1hLnJlbGF0ZWRUYXJnZXQsZT1hLmhhbmRsZU9iaixnPWUuc2VsZWN0b3IsaDtpZighZHx8ZCE9PWMmJiFmLmNvbnRhaW5zKGMsZCkpYS50eXBlPWUub3JpZ1R5cGUsaD1lLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iO3JldHVybiBofX19KSxmLnN1cHBvcnQuc3VibWl0QnViYmxlc3x8KGYuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7aWYoZi5ub2RlTmFtZSh0aGlzLCJmb3JtIikpcmV0dXJuITE7Zi5ldmVudC5hZGQodGhpcywiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IixmdW5jdGlvbihhKXt2YXIgYz1hLnRhcmdldCxkPWYubm9kZU5hbWUoYywiaW5wdXQiKXx8Zi5ub2RlTmFtZShjLCJidXR0b24iKT9jLmZvcm06YjtkJiYhZC5fc3VibWl0X2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoZCwic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZmLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhLCEwKX0pLGQuX3N1Ym1pdF9hdHRhY2hlZD0hMCl9KX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZihmLm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpfX0pLGYuc3VwcG9ydC5jaGFuZ2VCdWJibGVzfHwoZi5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtpZih6LnRlc3QodGhpcy5ub2RlTmFtZSkpe2lmKHRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIpZi5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7YS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZT09PSJjaGVja2VkIiYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMCl9KSxmLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihhKXt0aGlzLl9qdXN0X2NoYW5nZWQmJiFhLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSxmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCkpfSk7cmV0dXJuITF9Zi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7ei50ZXN0KGIubm9kZU5hbWUpJiYhYi5fY2hhbmdlX2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoYiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNTaW11bGF0ZWQmJiFhLmlzVHJpZ2dlciYmZi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxiLl9jaGFuZ2VfYXR0YWNoZWQ9ITApfSl9LGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtpZih0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fGIudHlwZSE9PSJyYWRpbyImJmIudHlwZSE9PSJjaGVja2JveCIpcmV0dXJuIGEuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fY2hhbmdlIik7cmV0dXJuIHoudGVzdCh0aGlzLm5vZGVOYW1lKX19KSxmLnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXN8fGYuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXt2YXIgZD0wLGU9ZnVuY3Rpb24oYSl7Zi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LGYuZXZlbnQuZml4KGEpLCEwKX07Zi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe2QrKz09PTAmJmMuYWRkRXZlbnRMaXN0ZW5lcihhLGUsITApfSx0ZWFyZG93bjpmdW5jdGlvbigpey0tZD09PTAmJmMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGUsITApfX19KSxmLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxjLGQsZSxnKXt2YXIgaCxpO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7dHlwZW9mIGMhPSJzdHJpbmciJiYoZD1jLGM9Yik7Zm9yKGkgaW4gYSl0aGlzLm9uKGksYyxkLGFbaV0sZyk7cmV0dXJuIHRoaXN9ZD09bnVsbCYmZT09bnVsbD8oZT1jLGQ9Yz1iKTplPT1udWxsJiYodHlwZW9mIGM9PSJzdHJpbmciPyhlPWQsZD1iKTooZT1kLGQ9YyxjPWIpKTtpZihlPT09ITEpZT1KO2Vsc2UgaWYoIWUpcmV0dXJuIHRoaXM7Zz09PTEmJihoPWUsZT1mdW5jdGlvbihhKXtmKCkub2ZmKGEpO3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWguZ3VpZHx8KGguZ3VpZD1mLmd1aWQrKykpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LmFkZCh0aGlzLGEsZSxkLGMpfSl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbi5jYWxsKHRoaXMsYSxiLGMsZCwxKX0sb2ZmOmZ1bmN0aW9uKGEsYyxkKXtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iail7dmFyIGU9YS5oYW5kbGVPYmo7ZihhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZS5uYW1lc3BhY2U/ZS50eXBlKyIuIitlLm5hbWVzcGFjZTplLnR5cGUsZS5zZWxlY3RvcixlLmhhbmRsZXIpO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Zm9yKHZhciBnIGluIGEpdGhpcy5vZmYoZyxjLGFbZ10pO3JldHVybiB0aGlzfWlmKGM9PT0hMXx8dHlwZW9mIGM9PSJmdW5jdGlvbiIpZD1jLGM9YjtkPT09ITEmJihkPUopO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnJlbW92ZSh0aGlzLGEsZCxjKX0pfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sbGl2ZTpmdW5jdGlvbihhLGIsYyl7Zih0aGlzLmNvbnRleHQpLm9uKGEsdGhpcy5zZWxlY3RvcixiLGMpO3JldHVybiB0aGlzfSxkaWU6ZnVuY3Rpb24oYSxiKXtmKHRoaXMuY29udGV4dCkub2ZmKGEsdGhpcy5zZWxlY3Rvcnx8IioqIixiKTtyZXR1cm4gdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhLGMpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtpZih0aGlzWzBdKXJldHVybiBmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXNbMF0sITApfSx0b2dnbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLGM9YS5ndWlkfHxmLmd1aWQrKyxkPTAsZT1mdW5jdGlvbihjKXt2YXIgZT0oZi5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQpfHwwKSVkO2YuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkLGUrMSksYy5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBiW2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ITF9O2UuZ3VpZD1jO3doaWxlKGQ8Yi5sZW5ndGgpYltkKytdLmd1aWQ9YztyZXR1cm4gdGhpcy5jbGljayhlKX0saG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSksZi5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7Zi5mbltiXT1mdW5jdGlvbihhLGMpe2M9PW51bGwmJihjPWEsYT1udWxsKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfSxmLmF0dHJGbiYmKGYuYXR0ckZuW2JdPSEwKSxDLnRlc3QoYikmJihmLmV2ZW50LmZpeEhvb2tzW2JdPWYuZXZlbnQua2V5SG9va3MpLEQudGVzdChiKSYmKGYuZXZlbnQuZml4SG9va3NbYl09Zi5ldmVudC5tb3VzZUhvb2tzKX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24geChhLGIsYyxlLGYsZyl7Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBrPSExO2o9althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31pZihqLm5vZGVUeXBlPT09MSl7Z3x8KGpbZF09YyxqLnNpenNldD1oKTtpZih0eXBlb2YgYiE9InN0cmluZyIpe2lmKGo9PT1iKXtrPSEwO2JyZWFrfX1lbHNlIGlmKG0uZmlsdGVyKGIsW2pdKS5sZW5ndGg+MCl7az1qO2JyZWFrfX1qPWpbYV19ZVtoXT1rfX19ZnVuY3Rpb24gdyhhLGIsYyxlLGYsZyl7Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBrPSExO2o9althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31qLm5vZGVUeXBlPT09MSYmIWcmJihqW2RdPWMsai5zaXpzZXQ9aCk7aWYoai5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yil7az1qO2JyZWFrfWo9althXX1lW2hdPWt9fX12YXIgYT0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXlxbXF1dKlxdfFsnIl1bXiciXSpbJyJdfFteXFtcXSciXSspK1xdfFxcLnxbXiA+K34sKFxbXFxdKykrfFs+K35dKShccyosXHMqKT8oKD86LnxccnxcbikqKS9nLGQ9InNpemNhY2hlIisoTWF0aC5yYW5kb20oKSsiIikucmVwbGFjZSgiLiIsIiIpLGU9MCxnPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaD0hMSxpPSEwLGo9L1xcL2csaz0vXHJcbi9nLGw9L1xXLztbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7aT0hMTtyZXR1cm4gMH0pO3ZhciBtPWZ1bmN0aW9uKGIsZCxlLGYpe2U9ZXx8W10sZD1kfHxjO3ZhciBoPWQ7aWYoZC5ub2RlVHlwZSE9PTEmJmQubm9kZVR5cGUhPT05KXJldHVybltdO2lmKCFifHx0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuIGU7dmFyIGksaixrLGwsbixxLHIsdCx1PSEwLHY9bS5pc1hNTChkKSx3PVtdLHg9Yjtkb3thLmV4ZWMoIiIpLGk9YS5leGVjKHgpO2lmKGkpe3g9aVszXSx3LnB1c2goaVsxXSk7aWYoaVsyXSl7bD1pWzNdO2JyZWFrfX19d2hpbGUoaSk7aWYody5sZW5ndGg+MSYmcC5leGVjKGIpKWlmKHcubGVuZ3RoPT09MiYmby5yZWxhdGl2ZVt3WzBdXSlqPXkod1swXSt3WzFdLGQsZik7ZWxzZXtqPW8ucmVsYXRpdmVbd1swXV0/W2RdOm0ody5zaGlmdCgpLGQpO3doaWxlKHcubGVuZ3RoKWI9dy5zaGlmdCgpLG8ucmVsYXRpdmVbYl0mJihiKz13LnNoaWZ0KCkpLGo9eShiLGosZil9ZWxzZXshZiYmdy5sZW5ndGg+MSYmZC5ub2RlVHlwZT09PTkmJiF2JiZvLm1hdGNoLklELnRlc3Qod1swXSkmJiFvLm1hdGNoLklELnRlc3Qod1t3Lmxlbmd0aC0xXSkmJihuPW0uZmluZCh3LnNoaWZ0KCksZCx2KSxkPW4uZXhwcj9tLmZpbHRlcihuLmV4cHIsbi5zZXQpWzBdOm4uc2V0WzBdKTtpZihkKXtuPWY/e2V4cHI6dy5wb3AoKSxzZXQ6cyhmKX06bS5maW5kKHcucG9wKCksdy5sZW5ndGg9PT0xJiYod1swXT09PSJ+Inx8d1swXT09PSIrIikmJmQucGFyZW50Tm9kZT9kLnBhcmVudE5vZGU6ZCx2KSxqPW4uZXhwcj9tLmZpbHRlcihuLmV4cHIsbi5zZXQpOm4uc2V0LHcubGVuZ3RoPjA/az1zKGopOnU9ITE7d2hpbGUody5sZW5ndGgpcT13LnBvcCgpLHI9cSxvLnJlbGF0aXZlW3FdP3I9dy5wb3AoKTpxPSIiLHI9PW51bGwmJihyPWQpLG8ucmVsYXRpdmVbcV0oayxyLHYpfWVsc2Ugaz13PVtdfWt8fChrPWopLGt8fG0uZXJyb3IocXx8Yik7aWYoZy5jYWxsKGspPT09IltvYmplY3QgQXJyYXldIilpZighdSllLnB1c2guYXBwbHkoZSxrKTtlbHNlIGlmKGQmJmQubm9kZVR5cGU9PT0xKWZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYmKGtbdF09PT0hMHx8a1t0XS5ub2RlVHlwZT09PTEmJm0uY29udGFpbnMoZCxrW3RdKSkmJmUucHVzaChqW3RdKTtlbHNlIGZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYma1t0XS5ub2RlVHlwZT09PTEmJmUucHVzaChqW3RdKTtlbHNlIHMoayxlKTtsJiYobShsLGgsZSxmKSxtLnVuaXF1ZVNvcnQoZSkpO3JldHVybiBlfTttLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7aWYodSl7aD1pLGEuc29ydCh1KTtpZihoKWZvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWFbYl09PT1hW2ItMV0mJmEuc3BsaWNlKGItLSwxKX1yZXR1cm4gYX0sbS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYSxudWxsLG51bGwsYil9LG0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYixudWxsLG51bGwsW2FdKS5sZW5ndGg+MH0sbS5maW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoIWEpcmV0dXJuW107Zm9yKGU9MCxmPW8ub3JkZXIubGVuZ3RoO2U8ZjtlKyspe2g9by5vcmRlcltlXTtpZihnPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpe2k9Z1sxXSxnLnNwbGljZSgxLDEpO2lmKGkuc3Vic3RyKGkubGVuZ3RoLTEpIT09IlxcIil7Z1sxXT0oZ1sxXXx8IiIpLnJlcGxhY2UoaiwiIiksZD1vLmZpbmRbaF0oZyxiLGMpO2lmKGQhPW51bGwpe2E9YS5yZXBsYWNlKG8ubWF0Y2hbaF0sIiIpO2JyZWFrfX19fWR8fChkPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6W10pO3JldHVybntzZXQ6ZCxleHByOmF9fSxtLmZpbHRlcj1mdW5jdGlvbihhLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLHAscT1hLHI9W10scz1jLHQ9YyYmY1swXSYmbS5pc1hNTChjWzBdKTt3aGlsZShhJiZjLmxlbmd0aCl7Zm9yKGggaW4gby5maWx0ZXIpaWYoKGY9by5sZWZ0TWF0Y2hbaF0uZXhlYyhhKSkhPW51bGwmJmZbMl0pe2s9by5maWx0ZXJbaF0sbD1mWzFdLGc9ITEsZi5zcGxpY2UoMSwxKTtpZihsLnN1YnN0cihsLmxlbmd0aC0xKT09PSJcXCIpY29udGludWU7cz09PXImJihyPVtdKTtpZihvLnByZUZpbHRlcltoXSl7Zj1vLnByZUZpbHRlcltoXShmLHMsZCxyLGUsdCk7aWYoIWYpZz1pPSEwO2Vsc2UgaWYoZj09PSEwKWNvbnRpbnVlfWlmKGYpZm9yKG49MDsoaj1zW25dKSE9bnVsbDtuKyspaiYmKGk9ayhqLGYsbixzKSxwPWVeaSxkJiZpIT1udWxsP3A/Zz0hMDpzW25dPSExOnAmJihyLnB1c2goaiksZz0hMCkpO2lmKGkhPT1iKXtkfHwocz1yKSxhPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTtpZighZylyZXR1cm5bXTticmVha319aWYoYT09PXEpaWYoZz09bnVsbCltLmVycm9yKGEpO2Vsc2UgYnJlYWs7cT1hfXJldHVybiBzfSxtLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX07dmFyIG49bS5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hLm5vZGVUeXBlLGU9IiI7aWYoZCl7aWYoZD09PTF8fGQ9PT05KXtpZih0eXBlb2YgYS50ZXh0Q29udGVudD09InN0cmluZyIpcmV0dXJuIGEudGV4dENvbnRlbnQ7aWYodHlwZW9mIGEuaW5uZXJUZXh0PT0ic3RyaW5nIilyZXR1cm4gYS5pbm5lclRleHQucmVwbGFjZShrLCIiKTtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpZSs9bihhKX1lbHNlIGlmKGQ9PT0zfHxkPT09NClyZXR1cm4gYS5ub2RlVmFsdWV9ZWxzZSBmb3IoYj0wO2M9YVtiXTtiKyspYy5ub2RlVHlwZSE9PTgmJihlKz1uKGMpKTtyZXR1cm4gZX0sbz1tLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTovXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXC1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQqKT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/L30sbGVmdE1hdGNoOnt9LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidHlwZSIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBiPT0ic3RyaW5nIixkPWMmJiFsLnRlc3QoYiksZT1jJiYhZDtkJiYoYj1iLnRvTG93ZXJDYXNlKCkpO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGgsaDtmPGc7ZisrKWlmKGg9YVtmXSl7d2hpbGUoKGg9aC5wcmV2aW91c1NpYmxpbmcpJiZoLm5vZGVUeXBlIT09MSk7YVtmXT1lfHxoJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2h8fCExOmg9PT1ifWUmJm0uZmlsdGVyKGIsYSwhMCl9LCI+IjpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9dHlwZW9mIGI9PSJzdHJpbmciLGU9MCxmPWEubGVuZ3RoO2lmKGQmJiFsLnRlc3QoYikpe2I9Yi50b0xvd2VyQ2FzZSgpO2Zvcig7ZTxmO2UrKyl7Yz1hW2VdO2lmKGMpe3ZhciBnPWMucGFyZW50Tm9kZTthW2VdPWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/ZzohMX19fWVsc2V7Zm9yKDtlPGY7ZSsrKWM9YVtlXSxjJiYoYVtlXT1kP2MucGFyZW50Tm9kZTpjLnBhcmVudE5vZGU9PT1iKTtkJiZtLmZpbHRlcihiLGEsITApfX0sIiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwYXJlbnROb2RlIixiLGYsYSxkLGMpfSwifiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwcmV2aW91c1NpYmxpbmciLGIsZixhLGQsYyl9fSxmaW5kOntJRDpmdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhYyl7dmFyIGQ9Yi5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZCYmZC5wYXJlbnROb2RlP1tkXTpbXX19LE5BTUU6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5TmFtZSE9InVuZGVmaW5lZCIpe3ZhciBjPVtdLGQ9Yi5nZXRFbGVtZW50c0J5TmFtZShhWzFdKTtmb3IodmFyIGU9MCxmPWQubGVuZ3RoO2U8ZjtlKyspZFtlXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PWFbMV0mJmMucHVzaChkW2VdKTtyZXR1cm4gYy5sZW5ndGg9PT0wP251bGw6Y319LFRBRzpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKX19LHByZUZpbHRlcjp7Q0xBU1M6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2E9IiAiK2FbMV0ucmVwbGFjZShqLCIiKSsiICI7aWYoZilyZXR1cm4gYTtmb3IodmFyIGc9MCxoOyhoPWJbZ10pIT1udWxsO2crKyloJiYoZV4oaC5jbGFzc05hbWUmJigiICIraC5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcblxyXS9nLCIgIikuaW5kZXhPZihhKT49MCk/Y3x8ZC5wdXNoKGgpOmMmJihiW2ddPSExKSk7cmV0dXJuITF9LElEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIil9LFRBRzpmdW5jdGlvbihhLGIpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIikudG9Mb3dlckNhc2UoKX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7aWYoYVsxXT09PSJudGgiKXthWzJdfHxtLmVycm9yKGFbMF0pLGFbMl09YVsyXS5yZXBsYWNlKC9eXCt8XHMqL2csIiIpO3ZhciBiPS8oLT8pKFxkKikoPzpuKFsrXC1dP1xkKikpPy8uZXhlYyhhWzJdPT09ImV2ZW4iJiYiMm4ifHxhWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChhWzJdKSYmIjBuKyIrYVsyXXx8YVsyXSk7YVsyXT1iWzFdKyhiWzJdfHwxKS0wLGFbM109YlszXS0wfWVsc2UgYVsyXSYmbS5lcnJvcihhWzBdKTthWzBdPWUrKztyZXR1cm4gYX0sQVRUUjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YVsxXT1hWzFdLnJlcGxhY2UoaiwiIik7IWYmJm8uYXR0ck1hcFtnXSYmKGFbMV09by5hdHRyTWFwW2ddKSxhWzRdPShhWzRdfHxhWzVdfHwiIikucmVwbGFjZShqLCIiKSxhWzJdPT09In49IiYmKGFbNF09IiAiK2FbNF0rIiAiKTtyZXR1cm4gYX0sUFNFVURPOmZ1bmN0aW9uKGIsYyxkLGUsZil7aWYoYlsxXT09PSJub3QiKWlmKChhLmV4ZWMoYlszXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChiWzNdKSliWzNdPW0oYlszXSxudWxsLG51bGwsYyk7ZWxzZXt2YXIgZz1tLmZpbHRlcihiWzNdLGMsZCwhMF5mKTtkfHxlLnB1c2guYXBwbHkoZSxnKTtyZXR1cm4hMX1lbHNlIGlmKG8ubWF0Y2guUE9TLnRlc3QoYlswXSl8fG8ubWF0Y2guQ0hJTEQudGVzdChiWzBdKSlyZXR1cm4hMDtyZXR1cm4gYn0sUE9TOmZ1bmN0aW9uKGEpe2EudW5zaGlmdCghMCk7cmV0dXJuIGF9fSxmaWx0ZXJzOntlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITEmJmEudHlwZSE9PSJoaWRkZW4ifSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNoZWNrZWQ9PT0hMH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtyZXR1cm4gYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuISFhLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGEpe3JldHVybiFhLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuISFtKGNbM10sYSkubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuL2hcZC9pLnRlc3QoYS5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSxjPWEudHlwZTtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInRleHQiPT09YyYmKGI9PT1jfHxiPT09bnVsbCl9LHJhZGlvOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicmFkaW8iPT09YS50eXBlfSxjaGVja2JveDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImNoZWNrYm94Ij09PWEudHlwZX0sZmlsZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImZpbGUiPT09YS50eXBlfSxwYXNzd29yZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInBhc3N3b3JkIj09PWEudHlwZX0sc3VibWl0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYj09PSJpbnB1dCJ8fGI9PT0iYnV0dG9uIikmJiJzdWJtaXQiPT09YS50eXBlfSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImltYWdlIj09PWEudHlwZX0scmVzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInJlc2V0Ij09PWEudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiJidXR0b24iPT09YS50eXBlfHxiPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0wfSxsYXN0OmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiPT09ZC5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MX0sbHQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPGNbM10tMH0sZ3Q6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPmNbM10tMH0sbnRoOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn0sZXE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsxXSxmPW8uZmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpO2lmKGU9PT0iY29udGFpbnMiKXJldHVybihhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8bihbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfW0uZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz1iWzFdLGw9YTtzd2l0Y2goayl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShsPWwucHJldmlvdXNTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGs9PT0iZmlyc3QiKXJldHVybiEwO2w9YTtjYXNlImxhc3QiOndoaWxlKGw9bC5uZXh0U2libGluZylpZihsLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMDtjYXNlIm50aCI6Yz1iWzJdLGU9YlszXTtpZihjPT09MSYmZT09PTApcmV0dXJuITA7Zj1iWzBdLGc9YS5wYXJlbnROb2RlO2lmKGcmJihnW2RdIT09Znx8IWEubm9kZUluZGV4KSl7aT0wO2ZvcihsPWcuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZylsLm5vZGVUeXBlPT09MSYmKGwubm9kZUluZGV4PSsraSk7Z1tkXT1mfWo9YS5ub2RlSW5kZXgtZTtyZXR1cm4gYz09PTA/aj09PTA6aiVjPT09MCYmai9jPj0wfX0sSUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0iKiImJmEubm9kZVR5cGU9PT0xfHwhIWEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bS5hdHRyP20uYXR0cihhLGMpOm8uYXR0ckhhbmRsZVtjXT9vLmF0dHJIYW5kbGVbY10oYSk6YVtjXSE9bnVsbD9hW2NdOmEuZ2V0QXR0cmlidXRlKGMpLGU9ZCsiIixmPWJbMl0sZz1iWzRdO3JldHVybiBkPT1udWxsP2Y9PT0iIT0iOiFmJiZtLmF0dHI/ZCE9bnVsbDpmPT09Ij0iP2U9PT1nOmY9PT0iKj0iP2UuaW5kZXhPZihnKT49MDpmPT09In49Ij8oIiAiK2UrIiAiKS5pbmRleE9mKGcpPj0wOmc/Zj09PSIhPSI/ZSE9PWc6Zj09PSJePSI/ZS5pbmRleE9mKGcpPT09MDpmPT09IiQ9Ij9lLnN1YnN0cihlLmxlbmd0aC1nLmxlbmd0aCk9PT1nOmY9PT0ifD0iP2U9PT1nfHxlLnN1YnN0cigwLGcubGVuZ3RoKzEpPT09ZysiLSI6ITE6ZSYmZCE9PSExfSxQT1M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsyXSxmPW8uc2V0RmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpfX19LHA9by5tYXRjaC5QT1MscT1mdW5jdGlvbihhLGIpe3JldHVybiJcXCIrKGItMCsxKX07Zm9yKHZhciByIGluIG8ubWF0Y2gpby5tYXRjaFtyXT1uZXcgUmVnRXhwKG8ubWF0Y2hbcl0uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSksby5sZWZ0TWF0Y2hbcl09bmV3IFJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK28ubWF0Y2hbcl0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxxKSk7dmFyIHM9ZnVuY3Rpb24oYSxiKXthPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsMCk7aWYoYil7Yi5wdXNoLmFwcGx5KGIsYSk7cmV0dXJuIGJ9cmV0dXJuIGF9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlfWNhdGNoKHQpe3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9Ynx8W107aWYoZy5jYWxsKGEpPT09IltvYmplY3QgQXJyYXldIilBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGEpO2Vsc2UgaWYodHlwZW9mIGEubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGU9YS5sZW5ndGg7YzxlO2MrKylkLnB1c2goYVtjXSk7ZWxzZSBmb3IoO2FbY107YysrKWQucHVzaChhW2NdKTtyZXR1cm4gZH19dmFyIHUsdjtjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj91PWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2g9ITA7cmV0dXJuIDB9aWYoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPy0xOjE7cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmND8tMToxfToodT1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtoPSEwO3JldHVybiAwfWlmKGEuc291cmNlSW5kZXgmJmIuc291cmNlSW5kZXgpcmV0dXJuIGEuc291cmNlSW5kZXgtYi5zb3VyY2VJbmRleDt2YXIgYyxkLGU9W10sZj1bXSxnPWEucGFyZW50Tm9kZSxpPWIucGFyZW50Tm9kZSxqPWc7aWYoZz09PWkpcmV0dXJuIHYoYSxiKTtpZighZylyZXR1cm4tMTtpZighaSlyZXR1cm4gMTt3aGlsZShqKWUudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtqPWk7d2hpbGUoailmLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaz0wO2s8YyYmazxkO2srKylpZihlW2tdIT09ZltrXSlyZXR1cm4gdihlW2tdLGZba10pO3JldHVybiBrPT09Yz92KGEsZltrXSwtMSk6dihlW2tdLGIsMSl9LHY9ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PT1iKXJldHVybiBjO3ZhciBkPWEubmV4dFNpYmxpbmc7d2hpbGUoZCl7aWYoZD09PWIpcmV0dXJuLTE7ZD1kLm5leHRTaWJsaW5nfXJldHVybiAxfSksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksZT1jLmRvY3VtZW50RWxlbWVudDthLmlubmVySFRNTD0iPGEgbmFtZT0nIitkKyInLz4iLGUuaW5zZXJ0QmVmb3JlKGEsZS5maXJzdENoaWxkKSxjLmdldEVsZW1lbnRCeUlkKGQpJiYoby5maW5kLklEPWZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYy5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFkKXt2YXIgZT1jLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBlP2UuaWQ9PT1hWzFdfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT0idW5kZWZpbmVkIiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZT09PWFbMV0/W2VdOmI6W119fSxvLmZpbHRlci5JRD1mdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQiJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGEubm9kZVR5cGU9PT0xJiZjJiZjLm5vZGVWYWx1ZT09PWJ9KSxlLnJlbW92ZUNoaWxkKGEpLGU9YT1udWxsfSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmFwcGVuZENoaWxkKGMuY3JlYXRlQ29tbWVudCgiIikpLGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCYmKG8uZmluZC5UQUc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pO2lmKGFbMV09PT0iKiIpe3ZhciBkPVtdO2Zvcih2YXIgZT0wO2NbZV07ZSsrKWNbZV0ubm9kZVR5cGU9PT0xJiZkLnB1c2goY1tlXSk7Yz1kfXJldHVybiBjfSksYS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLGEuZmlyc3RDaGlsZCYmdHlwZW9mIGEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPSJ1bmRlZmluZWQiJiZhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyImJihvLmF0dHJIYW5kbGUuaHJlZj1mdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfSksYT1udWxsfSgpLGMucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgYT1tLGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJfX3NpenpsZV9fIjtiLmlubmVySFRNTD0iPHAgY2xhc3M9J1RFU1QnPjwvcD4iO2lmKCFiLnF1ZXJ5U2VsZWN0b3JBbGx8fGIucXVlcnlTZWxlY3RvckFsbCgiLlRFU1QiKS5sZW5ndGghPT0wKXttPWZ1bmN0aW9uKGIsZSxmLGcpe2U9ZXx8YztpZighZyYmIW0uaXNYTUwoZSkpe3ZhciBoPS9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1dKyQpLy5leGVjKGIpO2lmKGgmJihlLm5vZGVUeXBlPT09MXx8ZS5ub2RlVHlwZT09PTkpKXtpZihoWzFdKXJldHVybiBzKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYiksZik7aWYoaFsyXSYmby5maW5kLkNMQVNTJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIHMoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMl0pLGYpfWlmKGUubm9kZVR5cGU9PT05KXtpZihiPT09ImJvZHkiJiZlLmJvZHkpcmV0dXJuIHMoW2UuYm9keV0sZik7aWYoaCYmaFszXSl7dmFyIGk9ZS5nZXRFbGVtZW50QnlJZChoWzNdKTtpZighaXx8IWkucGFyZW50Tm9kZSlyZXR1cm4gcyhbXSxmKTtpZihpLmlkPT09aFszXSlyZXR1cm4gcyhbaV0sZil9dHJ5e3JldHVybiBzKGUucXVlcnlTZWxlY3RvckFsbChiKSxmKX1jYXRjaChqKXt9fWVsc2UgaWYoZS5ub2RlVHlwZT09PTEmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXt2YXIgaz1lLGw9ZS5nZXRBdHRyaWJ1dGUoImlkIiksbj1sfHxkLHA9ZS5wYXJlbnROb2RlLHE9L15ccypbK35dLy50ZXN0KGIpO2w/bj1uLnJlcGxhY2UoLycvZywiXFwkJiIpOmUuc2V0QXR0cmlidXRlKCJpZCIsbikscSYmcCYmKGU9ZS5wYXJlbnROb2RlKTt0cnl7aWYoIXF8fHApcmV0dXJuIHMoZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWQ9JyIrbisiJ10gIitiKSxmKX1jYXRjaChyKXt9ZmluYWxseXtsfHxrLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBhKGIsZSxmLGcpfTtmb3IodmFyIGUgaW4gYSltW2VdPWFbZV07Yj1udWxsfX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuZG9jdW1lbnRFbGVtZW50LGI9YS5tYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcjtpZihiKXt2YXIgZD0hYi5jYWxsKGMuY3JlYXRlRWxlbWVudCgiZGl2IiksImRpdiIpLGU9ITE7dHJ5e2IuY2FsbChjLmRvY3VtZW50RWxlbWVudCwiW3Rlc3QhPScnXTpzaXp6bGUiKX1jYXRjaChmKXtlPSEwfW0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYyl7Yz1jLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFtLmlzWE1MKGEpKXRyeXtpZihlfHwhby5tYXRjaC5QU0VVRE8udGVzdChjKSYmIS8hPS8udGVzdChjKSl7dmFyIGY9Yi5jYWxsKGEsYyk7aWYoZnx8IWR8fGEuZG9jdW1lbnQmJmEuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gZn19Y2F0Y2goZyl7fXJldHVybiBtKGMsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9fX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFzcz0ndGVzdCc+PC9kaXY+IjtpZighIWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MCl7YS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIjtpZihhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0xKXJldHVybjtvLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIiksby5maW5kLkNMQVNTPWZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT0idW5kZWZpbmVkIiYmIWMpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhWzFdKX0sYT1udWxsfX0oKSxjLmRvY3VtZW50RWxlbWVudC5jb250YWlucz9tLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEhPT1iJiYoYS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEwKX06Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/bS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTptLmNvbnRhaW5zPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG0uaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9KGE/YS5vd25lckRvY3VtZW50fHxhOjApLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfTt2YXIgeT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZT1bXSxmPSIiLGc9Yi5ub2RlVHlwZT9bYl06Yjt3aGlsZShkPW8ubWF0Y2guUFNFVURPLmV4ZWMoYSkpZis9ZFswXSxhPWEucmVwbGFjZShvLm1hdGNoLlBTRVVETywiIik7YT1vLnJlbGF0aXZlW2FdP2ErIioiOmE7Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKW0oYSxnW2hdLGUsYyk7cmV0dXJuIG0uZmlsdGVyKGYsZSl9O20uYXR0cj1mLmF0dHIsbS5zZWxlY3RvcnMuYXR0ck1hcD17fSxmLmZpbmQ9bSxmLmV4cHI9bS5zZWxlY3RvcnMsZi5leHByWyI6Il09Zi5leHByLmZpbHRlcnMsZi51bmlxdWU9bS51bmlxdWVTb3J0LGYudGV4dD1tLmdldFRleHQsZi5pc1hNTERvYz1tLmlzWE1MLGYuY29udGFpbnM9bS5jb250YWluc30oKTt2YXIgTD0vVW50aWwkLyxNPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLE49LywvLE89L14uW146I1xbXC4sXSokLyxQPUFycmF5LnByb3RvdHlwZS5zbGljZSxRPWYuZXhwci5tYXRjaC5QT1MsUj17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGMsZDtpZih0eXBlb2YgYSE9InN0cmluZyIpcmV0dXJuIGYoYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspaWYoZi5jb250YWlucyhiW2NdLHRoaXMpKXJldHVybiEwfSk7dmFyIGU9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGcsaCxpO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtnPWUubGVuZ3RoLGYuZmluZChhLHRoaXNbY10sZSk7aWYoYz4wKWZvcihoPWc7aDxlLmxlbmd0aDtoKyspZm9yKGk9MDtpPGc7aSsrKWlmKGVbaV09PT1lW2hdKXtlLnNwbGljZShoLS0sMSk7YnJlYWt9fXJldHVybiBlfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9ZihhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxjPWIubGVuZ3RoO2E8YzthKyspaWYoZi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVCh0aGlzLGEsITEpLCJub3QiLGEpfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFQodGhpcyxhLCEwKSwiZmlsdGVyIixhKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISFhJiYodHlwZW9mIGE9PSJzdHJpbmciP1EudGVzdChhKT9mKGEsdGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDpmLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGEpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQsZSxnPXRoaXNbMF07aWYoZi5pc0FycmF5KGEpKXt2YXIgaD0xO3doaWxlKGcmJmcub3duZXJEb2N1bWVudCYmZyE9PWIpe2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspZihnKS5pcyhhW2RdKSYmYy5wdXNoKHtzZWxlY3RvcjphW2RdLGVsZW06ZyxsZXZlbDpofSk7Zz1nLnBhcmVudE5vZGUsaCsrfXJldHVybiBjfXZhciBpPVEudGVzdChhKXx8dHlwZW9mIGEhPSJzdHJpbmciP2YoYSxifHx0aGlzLmNvbnRleHQpOjA7Zm9yKGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspe2c9dGhpc1tkXTt3aGlsZShnKXtpZihpP2kuaW5kZXgoZyk+LTE6Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihnLGEpKXtjLnB1c2goZyk7YnJlYWt9Zz1nLnBhcmVudE5vZGU7aWYoIWd8fCFnLm93bmVyRG9jdW1lbnR8fGc9PT1ifHxnLm5vZGVUeXBlPT09MTEpYnJlYWt9fWM9Yy5sZW5ndGg+MT9mLnVuaXF1ZShjKTpjO3JldHVybiB0aGlzLnB1c2hTdGFjayhjLCJjbG9zZXN0IixhKX0saW5kZXg6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLnByZXZBbGwoKS5sZW5ndGg6LTE7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBmLmluQXJyYXkodGhpc1swXSxmKGEpKTtyZXR1cm4gZi5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PSJzdHJpbmciP2YoYSxiKTpmLm1ha2VBcnJheShhJiZhLm5vZGVUeXBlP1thXTphKSxkPWYubWVyZ2UodGhpcy5nZXQoKSxjKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUyhjWzBdKXx8UyhkWzBdKT9kOmYudW5pcXVlKGQpKX0sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpfX0pLGYuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmYi5ub2RlVHlwZSE9PTExP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwYXJlbnROb2RlIixjKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciLGMpfSxwcmV2VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEucGFyZW50Tm9kZS5maXJzdENoaWxkLGEpfSxjaGlsZHJlbjpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBmLm5vZGVOYW1lKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50fHxhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6Zi5tYWtlQXJyYXkoYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPWYubWFwKHRoaXMsYixjKTtMLnRlc3QoYSl8fChkPWMpLGQmJnR5cGVvZiBkPT0ic3RyaW5nIiYmKGU9Zi5maWx0ZXIoZCxlKSksZT10aGlzLmxlbmd0aD4xJiYhUlthXT9mLnVuaXF1ZShlKTplLCh0aGlzLmxlbmd0aD4xfHxOLnRlc3QoZCkpJiZNLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSxhLFAuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9fSksZi5leHRlbmQoe2ZpbHRlcjpmdW5jdGlvbihhLGIsYyl7YyYmKGE9Ijpub3QoIithKyIpIik7cmV0dXJuIGIubGVuZ3RoPT09MT9mLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGJbMF0sYSk/W2JbMF1dOltdOmYuZmluZC5tYXRjaGVzKGEsYil9LGRpcjpmdW5jdGlvbihhLGMsZCl7dmFyIGU9W10sZz1hW2NdO3doaWxlKGcmJmcubm9kZVR5cGUhPT05JiYoZD09PWJ8fGcubm9kZVR5cGUhPT0xfHwhZihnKS5pcyhkKSkpZy5ub2RlVHlwZT09PTEmJmUucHVzaChnKSxnPWdbY107cmV0dXJuIGV9LG50aDpmdW5jdGlvbihhLGIsYyxkKXtiPWJ8fDE7dmFyIGU9MDtmb3IoO2E7YT1hW2NdKWlmKGEubm9kZVR5cGU9PT0xJiYrK2U9PT1iKWJyZWFrO3JldHVybiBhfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7dmFyIGM9W107Zm9yKDthO2E9YS5uZXh0U2libGluZylhLm5vZGVUeXBlPT09MSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY319KTt2YXIgVj0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGNhbnZhc3xkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsVz0vIGpRdWVyeVxkKz0iKD86XGQrfG51bGwpIi9nLFg9L15ccysvLFk9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9pZyxaPS88KFtcdzpdKykvLCQ9Lzx0Ym9keS9pLF89Lzx8JiM/XHcrOy8sYmE9LzwoPzpzY3JpcHR8c3R5bGUpL2ksYmI9LzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSxiYz1uZXcgUmVnRXhwKCI8KD86IitWKyIpIiwiaSIpLGJkPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGJlPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksYmY9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sYmc9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYmg9VShjKTtiZy5vcHRncm91cD1iZy5vcHRpb24sYmcudGJvZHk9YmcudGZvb3Q9YmcuY29sZ3JvdXA9YmcuY2FwdGlvbj1iZy50aGVhZCxiZy50aD1iZy50ZCxmLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KGJnLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdKSxmLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MudGV4dChhLmNhbGwodGhpcyxiLGMudGV4dCgpKSl9KTtpZih0eXBlb2YgYSE9Im9iamVjdCImJmEhPT1iKXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gZi50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1mKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdENoaWxkJiZhLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWE9YS5maXJzdENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9Zi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7Zih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe2Yubm9kZU5hbWUodGhpcywiYm9keSIpfHxmKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmFwcGVuZENoaWxkKGEpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVmb3JlKGEsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPWYuY2xlYW4oYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEsImJlZm9yZSIsYXJndW1lbnRzKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT10aGlzLnB1c2hTdGFjayh0aGlzLCJhZnRlciIsYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxmLmNsZWFuKGFyZ3VtZW50cykpO3JldHVybiBhfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZDsoZD10aGlzW2NdKSE9bnVsbDtjKyspaWYoIWF8fGYuZmlsdGVyKGEsW2RdKS5sZW5ndGgpIWImJmQubm9kZVR5cGU9PT0xJiYoZi5jbGVhbkRhdGEoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSxmLmNsZWFuRGF0YShbZF0pKSxkLnBhcmVudE5vZGUmJmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKQp7Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDthKyspe2Iubm9kZVR5cGU9PT0xJiZmLmNsZWFuRGF0YShiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7YT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09YilyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShXLCIiKTpudWxsO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJhLnRlc3QoYSkmJihmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCFYLnRlc3QoYSkpJiYhYmdbKFouZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9YS5yZXBsYWNlKFksIjwkMT48LyQyPiIpO3RyeXtmb3IodmFyIGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspdGhpc1tjXS5ub2RlVHlwZT09PTEmJihmLmNsZWFuRGF0YSh0aGlzW2NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLHRoaXNbY10uaW5uZXJIVE1MPWEpfWNhdGNoKGUpe3RoaXMuZW1wdHkoKS5hcHBlbmQoYSl9fWVsc2UgZi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MuaHRtbChhLmNhbGwodGhpcyxiLGMuaHRtbCgpKSl9KTp0aGlzLmVtcHR5KCkuYXBwZW5kKGEpO3JldHVybiB0aGlzfSxyZXBsYWNlV2l0aDpmdW5jdGlvbihhKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyksZD1jLmh0bWwoKTtjLnJlcGxhY2VXaXRoKGEuY2FsbCh0aGlzLGIsZCkpfSk7dHlwZW9mIGEhPSJzdHJpbmciJiYoYT1mKGEpLmRldGFjaCgpKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5uZXh0U2libGluZyxjPXRoaXMucGFyZW50Tm9kZTtmKHRoaXMpLnJlbW92ZSgpLGI/ZihiKS5iZWZvcmUoYSk6ZihjKS5hcHBlbmQoYSl9KX1yZXR1cm4gdGhpcy5sZW5ndGg/dGhpcy5wdXNoU3RhY2soZihmLmlzRnVuY3Rpb24oYSk/YSgpOmEpLCJyZXBsYWNlV2l0aCIsYSk6dGhpc30sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGcsaCxpLGo9YVswXSxrPVtdO2lmKCFmLnN1cHBvcnQuY2hlY2tDbG9uZSYmYXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiBqPT0ic3RyaW5nIiYmYmQudGVzdChqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zih0aGlzKS5kb21NYW5pcChhLGMsZCwhMCl9KTtpZihmLmlzRnVuY3Rpb24oaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgZz1mKHRoaXMpO2FbMF09ai5jYWxsKHRoaXMsZSxjP2cuaHRtbCgpOmIpLGcuZG9tTWFuaXAoYSxjLGQpfSk7aWYodGhpc1swXSl7aT1qJiZqLnBhcmVudE5vZGUsZi5zdXBwb3J0LnBhcmVudE5vZGUmJmkmJmkubm9kZVR5cGU9PT0xMSYmaS5jaGlsZE5vZGVzLmxlbmd0aD09PXRoaXMubGVuZ3RoP2U9e2ZyYWdtZW50Oml9OmU9Zi5idWlsZEZyYWdtZW50KGEsdGhpcyxrKSxoPWUuZnJhZ21lbnQsaC5jaGlsZE5vZGVzLmxlbmd0aD09PTE/Zz1oPWguZmlyc3RDaGlsZDpnPWguZmlyc3RDaGlsZDtpZihnKXtjPWMmJmYubm9kZU5hbWUoZywidHIiKTtmb3IodmFyIGw9MCxtPXRoaXMubGVuZ3RoLG49bS0xO2w8bTtsKyspZC5jYWxsKGM/YmkodGhpc1tsXSxnKTp0aGlzW2xdLGUuY2FjaGVhYmxlfHxtPjEmJmw8bj9mLmNsb25lKGgsITAsITApOmgpfWsubGVuZ3RoJiZmLmVhY2goayxicCl9cmV0dXJuIHRoaXN9fSksZi5idWlsZEZyYWdtZW50PWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxnLGgsaSxqPWFbMF07YiYmYlswXSYmKGk9YlswXS5vd25lckRvY3VtZW50fHxiWzBdKSxpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnR8fChpPWMpLGEubGVuZ3RoPT09MSYmdHlwZW9mIGo9PSJzdHJpbmciJiZqLmxlbmd0aDw1MTImJmk9PT1jJiZqLmNoYXJBdCgwKT09PSI8IiYmIWJiLnRlc3QoaikmJihmLnN1cHBvcnQuY2hlY2tDbG9uZXx8IWJkLnRlc3QoaikpJiYoZi5zdXBwb3J0Lmh0bWw1Q2xvbmV8fCFiYy50ZXN0KGopKSYmKGc9ITAsaD1mLmZyYWdtZW50c1tqXSxoJiZoIT09MSYmKGU9aCkpLGV8fChlPWkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGYuY2xlYW4oYSxpLGUsZCkpLGcmJihmLmZyYWdtZW50c1tqXT1oP2U6MSk7cmV0dXJue2ZyYWdtZW50OmUsY2FjaGVhYmxlOmd9fSxmLmZyYWdtZW50cz17fSxmLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYyl7dmFyIGQ9W10sZT1mKGMpLGc9dGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLnBhcmVudE5vZGU7aWYoZyYmZy5ub2RlVHlwZT09PTExJiZnLmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmZS5sZW5ndGg9PT0xKXtlW2JdKHRoaXNbMF0pO3JldHVybiB0aGlzfWZvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9KGg+MD90aGlzLmNsb25lKCEwKTp0aGlzKS5nZXQoKTtmKGVbaF0pW2JdKGopLGQ9ZC5jb25jYXQoail9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQsYSxlLnNlbGVjdG9yKX19KSxmLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZyxoPWYuc3VwcG9ydC5odG1sNUNsb25lfHwhYmMudGVzdCgiPCIrYS5ub2RlTmFtZSk/YS5jbG9uZU5vZGUoITApOmJvKGEpO2lmKCghZi5zdXBwb3J0Lm5vQ2xvbmVFdmVudHx8IWYuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkmJihhLm5vZGVUeXBlPT09MXx8YS5ub2RlVHlwZT09PTExKSYmIWYuaXNYTUxEb2MoYSkpe2JrKGEsaCksZD1ibChhKSxlPWJsKGgpO2ZvcihnPTA7ZFtnXTsrK2cpZVtnXSYmYmsoZFtnXSxlW2ddKX1pZihiKXtiaihhLGgpO2lmKGMpe2Q9YmwoYSksZT1ibChoKTtmb3IoZz0wO2RbZ107KytnKWJqKGRbZ10sZVtnXSl9fWQ9ZT1udWxsO3JldHVybiBofSxjbGVhbjpmdW5jdGlvbihhLGIsZCxlKXt2YXIgZztiPWJ8fGMsdHlwZW9mIGIuY3JlYXRlRWxlbWVudD09InVuZGVmaW5lZCImJihiPWIub3duZXJEb2N1bWVudHx8YlswXSYmYlswXS5vd25lckRvY3VtZW50fHxjKTt2YXIgaD1bXSxpO2Zvcih2YXIgaj0wLGs7KGs9YVtqXSkhPW51bGw7aisrKXt0eXBlb2Ygaz09Im51bWJlciImJihrKz0iIik7aWYoIWspY29udGludWU7aWYodHlwZW9mIGs9PSJzdHJpbmciKWlmKCFfLnRlc3Qoaykpaz1iLmNyZWF0ZVRleHROb2RlKGspO2Vsc2V7az1rLnJlcGxhY2UoWSwiPCQxPjwvJDI+Iik7dmFyIGw9KFouZXhlYyhrKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxtPWJnW2xdfHxiZy5fZGVmYXVsdCxuPW1bMF0sbz1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2I9PT1jP2JoLmFwcGVuZENoaWxkKG8pOlUoYikuYXBwZW5kQ2hpbGQobyksby5pbm5lckhUTUw9bVsxXStrK21bMl07d2hpbGUobi0tKW89by5sYXN0Q2hpbGQ7aWYoIWYuc3VwcG9ydC50Ym9keSl7dmFyIHA9JC50ZXN0KGspLHE9bD09PSJ0YWJsZSImJiFwP28uZmlyc3RDaGlsZCYmby5maXJzdENoaWxkLmNoaWxkTm9kZXM6bVsxXT09PSI8dGFibGU+IiYmIXA/by5jaGlsZE5vZGVzOltdO2ZvcihpPXEubGVuZ3RoLTE7aT49MDstLWkpZi5ub2RlTmFtZShxW2ldLCJ0Ym9keSIpJiYhcVtpXS5jaGlsZE5vZGVzLmxlbmd0aCYmcVtpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHFbaV0pfSFmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJlgudGVzdChrKSYmby5pbnNlcnRCZWZvcmUoYi5jcmVhdGVUZXh0Tm9kZShYLmV4ZWMoaylbMF0pLG8uZmlyc3RDaGlsZCksaz1vLmNoaWxkTm9kZXN9dmFyIHI7aWYoIWYuc3VwcG9ydC5hcHBlbmRDaGVja2VkKWlmKGtbMF0mJnR5cGVvZiAocj1rLmxlbmd0aCk9PSJudW1iZXIiKWZvcihpPTA7aTxyO2krKylibihrW2ldKTtlbHNlIGJuKGspO2subm9kZVR5cGU/aC5wdXNoKGspOmg9Zi5tZXJnZShoLGspfWlmKGQpe2c9ZnVuY3Rpb24oYSl7cmV0dXJuIWEudHlwZXx8YmUudGVzdChhLnR5cGUpfTtmb3Ioaj0wO2hbal07aisrKWlmKGUmJmYubm9kZU5hbWUoaFtqXSwic2NyaXB0IikmJighaFtqXS50eXBlfHxoW2pdLnR5cGUudG9Mb3dlckNhc2UoKT09PSJ0ZXh0L2phdmFzY3JpcHQiKSllLnB1c2goaFtqXS5wYXJlbnROb2RlP2hbal0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoW2pdKTpoW2pdKTtlbHNle2lmKGhbal0ubm9kZVR5cGU9PT0xKXt2YXIgcz1mLmdyZXAoaFtqXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksZyk7aC5zcGxpY2UuYXBwbHkoaCxbaisxLDBdLmNvbmNhdChzKSl9ZC5hcHBlbmRDaGlsZChoW2pdKX19cmV0dXJuIGh9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXt2YXIgYixjLGQ9Zi5jYWNoZSxlPWYuZXZlbnQuc3BlY2lhbCxnPWYuc3VwcG9ydC5kZWxldGVFeHBhbmRvO2Zvcih2YXIgaD0wLGk7KGk9YVtoXSkhPW51bGw7aCsrKXtpZihpLm5vZGVOYW1lJiZmLm5vRGF0YVtpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKWNvbnRpbnVlO2M9aVtmLmV4cGFuZG9dO2lmKGMpe2I9ZFtjXTtpZihiJiZiLmV2ZW50cyl7Zm9yKHZhciBqIGluIGIuZXZlbnRzKWVbal0/Zi5ldmVudC5yZW1vdmUoaSxqKTpmLnJlbW92ZUV2ZW50KGksaixiLmhhbmRsZSk7Yi5oYW5kbGUmJihiLmhhbmRsZS5lbGVtPW51bGwpfWc/ZGVsZXRlIGlbZi5leHBhbmRvXTppLnJlbW92ZUF0dHJpYnV0ZSYmaS5yZW1vdmVBdHRyaWJ1dGUoZi5leHBhbmRvKSxkZWxldGUgZFtjXX19fX0pO3ZhciBicT0vYWxwaGFcKFteKV0qXCkvaSxicj0vb3BhY2l0eT0oW14pXSopLyxicz0vKFtBLVpdfF5tcykvZyxidD0vXi0/XGQrKD86cHgpPyQvaSxidT0vXi0/XGQvLGJ2PS9eKFtcLStdKT0oW1wtKy5cZGVdKykvLGJ3PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxieD1bIkxlZnQiLCJSaWdodCJdLGJ5PVsiVG9wIiwiQm90dG9tIl0sYnosYkEsYkI7Zi5mbi5jc3M9ZnVuY3Rpb24oYSxjKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmYz09PWIpcmV0dXJuIHRoaXM7cmV0dXJuIGYuYWNjZXNzKHRoaXMsYSxjLCEwLGZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gZCE9PWI/Zi5zdHlsZShhLGMsZCk6Zi5jc3MoYSxjKX0pfSxmLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPWJ6KGEsIm9wYWNpdHkiLCJvcGFjaXR5Iik7cmV0dXJuIGM9PT0iIj8iMSI6Y31yZXR1cm4gYS5zdHlsZS5vcGFjaXR5fX19LGNzc051bWJlcjp7ZmlsbE9wYWNpdHk6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnsiZmxvYXQiOmYuc3VwcG9ydC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFhJiZhLm5vZGVUeXBlIT09MyYmYS5ub2RlVHlwZSE9PTgmJiEhYS5zdHlsZSl7dmFyIGcsaCxpPWYuY2FtZWxDYXNlKGMpLGo9YS5zdHlsZSxrPWYuY3NzSG9va3NbaV07Yz1mLmNzc1Byb3BzW2ldfHxpO2lmKGQ9PT1iKXtpZihrJiYiZ2V0ImluIGsmJihnPWsuZ2V0KGEsITEsZSkpIT09YilyZXR1cm4gZztyZXR1cm4galtjXX1oPXR5cGVvZiBkLGg9PT0ic3RyaW5nIiYmKGc9YnYuZXhlYyhkKSkmJihkPSsoZ1sxXSsxKSorZ1syXStwYXJzZUZsb2F0KGYuY3NzKGEsYykpLGg9Im51bWJlciIpO2lmKGQ9PW51bGx8fGg9PT0ibnVtYmVyIiYmaXNOYU4oZCkpcmV0dXJuO2g9PT0ibnVtYmVyIiYmIWYuY3NzTnVtYmVyW2ldJiYoZCs9InB4Iik7aWYoIWt8fCEoInNldCJpbiBrKXx8KGQ9ay5zZXQoYSxkKSkhPT1iKXRyeXtqW2NdPWR9Y2F0Y2gobCl7fX19LGNzczpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZztjPWYuY2FtZWxDYXNlKGMpLGc9Zi5jc3NIb29rc1tjXSxjPWYuY3NzUHJvcHNbY118fGMsYz09PSJjc3NGbG9hdCImJihjPSJmbG9hdCIpO2lmKGcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSwhMCxkKSkhPT1iKXJldHVybiBlO2lmKGJ6KXJldHVybiBieihhLGMpfSxzd2FwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fTtmb3IodmFyIGUgaW4gYilkW2VdPWEuc3R5bGVbZV0sYS5zdHlsZVtlXT1iW2VdO2MuY2FsbChhKTtmb3IoZSBpbiBiKWEuc3R5bGVbZV09ZFtlXX19KSxmLmN1ckNTUz1mLmNzcyxmLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7Zi5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxkKXt2YXIgZTtpZihjKXtpZihhLm9mZnNldFdpZHRoIT09MClyZXR1cm4gYkMoYSxiLGQpO2Yuc3dhcChhLGJ3LGZ1bmN0aW9uKCl7ZT1iQyhhLGIsZCl9KTtyZXR1cm4gZX19LHNldDpmdW5jdGlvbihhLGIpe2lmKCFidC50ZXN0KGIpKXJldHVybiBiO2I9cGFyc2VGbG9hdChiKTtpZihiPj0wKXJldHVybiBiKyJweCJ9fX0pLGYuc3VwcG9ydC5vcGFjaXR5fHwoZi5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnIudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUuZmlsdGVyKXx8IiIpP3BhcnNlRmxvYXQoUmVnRXhwLiQxKS8xMDArIiI6Yj8iMSI6IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGUsZD1hLmN1cnJlbnRTdHlsZSxlPWYuaXNOdW1lcmljKGIpPyJhbHBoYShvcGFjaXR5PSIrYioxMDArIikiOiIiLGc9ZCYmZC5maWx0ZXJ8fGMuZmlsdGVyfHwiIjtjLnpvb209MTtpZihiPj0xJiZmLnRyaW0oZy5yZXBsYWNlKGJxLCIiKSk9PT0iIil7Yy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpO2lmKGQmJiFkLmZpbHRlcilyZXR1cm59Yy5maWx0ZXI9YnEudGVzdChnKT9nLnJlcGxhY2UoYnEsZSk6ZysiICIrZX19KSxmKGZ1bmN0aW9uKCl7Zi5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fChmLmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYztmLnN3YXAoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sZnVuY3Rpb24oKXtiP2M9YnooYSwibWFyZ2luLXJpZ2h0IiwibWFyZ2luUmlnaHQiKTpjPWEuc3R5bGUubWFyZ2luUmlnaHR9KTtyZXR1cm4gY319KX0pLGMuZGVmYXVsdFZpZXcmJmMuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKGJBPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlO2I9Yi5yZXBsYWNlKGJzLCItJDEiKS50b0xvd2VyQ2FzZSgpLChkPWEub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykmJihlPWQuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpKSYmKGM9ZS5nZXRQcm9wZXJ0eVZhbHVlKGIpLGM9PT0iIiYmIWYuY29udGFpbnMoYS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhKSYmKGM9Zi5zdHlsZShhLGIpKSk7cmV0dXJuIGN9KSxjLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihiQj1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWEuY3VycmVudFN0eWxlJiZhLmN1cnJlbnRTdHlsZVtiXSxnPWEuc3R5bGU7Zj09PW51bGwmJmcmJihlPWdbYl0pJiYoZj1lKSwhYnQudGVzdChmKSYmYnUudGVzdChmKSYmKGM9Zy5sZWZ0LGQ9YS5ydW50aW1lU3R5bGUmJmEucnVudGltZVN0eWxlLmxlZnQsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksZy5sZWZ0PWI9PT0iZm9udFNpemUiPyIxZW0iOmZ8fDAsZj1nLnBpeGVsTGVmdCsicHgiLGcubGVmdD1jLGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWQpKTtyZXR1cm4gZj09PSIiPyJhdXRvIjpmfSksYno9YkF8fGJCLGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRXaWR0aCxjPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBiPT09MCYmYz09PTB8fCFmLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxmLmNzcyhhLCJkaXNwbGF5IikpPT09Im5vbmUifSxmLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFmLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9KTt2YXIgYkQ9LyUyMC9nLGJFPS9cW1xdJC8sYkY9L1xyP1xuL2csYkc9LyMuKiQvLGJIPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsYkk9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGJKPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sYks9L14oPzpHRVR8SEVBRCkkLyxiTD0vXlwvXC8vLGJNPS9cPy8sYk49LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYk89L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYlA9L1xzKy8sYlE9LyhbPyZdKV89W14mXSovLGJSPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/LyxiUz1mLmZuLmxvYWQsYlQ9e30sYlU9e30sYlYsYlcsYlg9WyIqLyJdK1siKiJdO3RyeXtiVj1lLmhyZWZ9Y2F0Y2goYlkpe2JWPWMuY3JlYXRlRWxlbWVudCgiYSIpLGJWLmhyZWY9IiIsYlY9YlYuaHJlZn1iVz1iUi5leGVjKGJWLnRvTG93ZXJDYXNlKCkpfHxbXSxmLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZiUylyZXR1cm4gYlMuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZz1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfXZhciBoPSJHRVQiO2MmJihmLmlzRnVuY3Rpb24oYyk/KGQ9YyxjPWIpOnR5cGVvZiBjPT0ib2JqZWN0IiYmKGM9Zi5wYXJhbShjLGYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxoPSJQT1NUIikpO3ZhciBpPXRoaXM7Zi5hamF4KHt1cmw6YSx0eXBlOmgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yyxjb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7Yz1hLnJlc3BvbnNlVGV4dCxhLmlzUmVzb2x2ZWQoKSYmKGEuZG9uZShmdW5jdGlvbihhKXtjPWF9KSxpLmh0bWwoZz9mKCI8ZGl2PiIpLmFwcGVuZChjLnJlcGxhY2UoYk4sIiIpKS5maW5kKGcpOmMpKSxkJiZpLmVhY2goZCxbYyxiLGFdKX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGYucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9mLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGJPLnRlc3QodGhpcy5ub2RlTmFtZSl8fGJJLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1mKHRoaXMpLnZhbCgpO3JldHVybiBjPT1udWxsP251bGw6Zi5pc0FycmF5KGMpP2YubWFwKGMsZnVuY3Rpb24oYSxjKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKGJGLCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShiRiwiXHJcbiIpfX0pLmdldCgpfX0pLGYuZWFjaCgiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtmLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksZi5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGEsYyl7ZltjXT1mdW5jdGlvbihhLGQsZSxnKXtmLmlzRnVuY3Rpb24oZCkmJihnPWd8fGUsZT1kLGQ9Yik7cmV0dXJuIGYuYWpheCh7dHlwZTpjLHVybDphLGRhdGE6ZCxzdWNjZXNzOmUsZGF0YVR5cGU6Z30pfX0pLGYuZXh0ZW5kKHtnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZi5nZXQoYSxiLGMsInNjcmlwdCIpfSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5nZXQoYSxiLGMsImpzb24iKX0sYWpheFNldHVwOmZ1bmN0aW9uKGEsYil7Yj9iXyhhLGYuYWpheFNldHRpbmdzKTooYj1hLGE9Zi5hamF4U2V0dGluZ3MpLGJfKGEsYik7cmV0dXJuIGF9LGFqYXhTZXR0aW5nczp7dXJsOmJWLGlzTG9jYWw6YkoudGVzdChiV1sxXSksZ2xvYmFsOiEwLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLHRleHQ6InRleHQvcGxhaW4iLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsIioiOmJYfSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwvLGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0In0sY29udmVydGVyczp7IiogdGV4dCI6YS5TdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6Zi5wYXJzZUpTT04sInRleHQgeG1sIjpmLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7Y29udGV4dDohMCx1cmw6ITB9fSxhamF4UHJlZmlsdGVyOmJaKGJUKSxhamF4VHJhbnNwb3J0OmJaKGJVKSxhamF4OmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gdyhhLGMsbCxtKXtpZihzIT09Mil7cz0yLHEmJmNsZWFyVGltZW91dChxKSxwPWIsbj1tfHwiIix2LnJlYWR5U3RhdGU9YT4wPzQ6MDt2YXIgbyxyLHUsdz1jLHg9bD9jYihkLHYsbCk6Yix5LHo7aWYoYT49MjAwJiZhPDMwMHx8YT09PTMwNCl7aWYoZC5pZk1vZGlmaWVkKXtpZih5PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSlmLmxhc3RNb2RpZmllZFtrXT15O2lmKHo9di5nZXRSZXNwb25zZUhlYWRlcigiRXRhZyIpKWYuZXRhZ1trXT16fWlmKGE9PT0zMDQpdz0ibm90bW9kaWZpZWQiLG89ITA7ZWxzZSB0cnl7cj1jYyhkLHgpLHc9InN1Y2Nlc3MiLG89ITB9Y2F0Y2goQSl7dz0icGFyc2VyZXJyb3IiLHU9QX19ZWxzZXt1PXc7aWYoIXd8fGEpdz0iZXJyb3IiLGE8MCYmKGE9MCl9di5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9IiIrKGN8fHcpLG8/aC5yZXNvbHZlV2l0aChlLFtyLHcsdl0pOmgucmVqZWN0V2l0aChlLFt2LHcsdV0pLHYuc3RhdHVzQ29kZShqKSxqPWIsdCYmZy50cmlnZ2VyKCJhamF4Iisobz8iU3VjY2VzcyI6IkVycm9yIiksW3YsZCxvP3I6dV0pLGkuZmlyZVdpdGgoZSxbdix3XSksdCYmKGcudHJpZ2dlcigiYWpheENvbXBsZXRlIixbdixkXSksLS1mLmFjdGl2ZXx8Zi5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKX19dHlwZW9mIGE9PSJvYmplY3QiJiYoYz1hLGE9YiksYz1jfHx7fTt2YXIgZD1mLmFqYXhTZXR1cCh7fSxjKSxlPWQuY29udGV4dHx8ZCxnPWUhPT1kJiYoZS5ub2RlVHlwZXx8ZSBpbnN0YW5jZW9mIGYpP2YoZSk6Zi5ldmVudCxoPWYuRGVmZXJyZWQoKSxpPWYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGo9ZC5zdGF0dXNDb2RlfHx7fSxrLGw9e30sbT17fSxuLG8scCxxLHIscz0wLHQsdSx2PXtyZWFkeVN0YXRlOjAsc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe2lmKCFzKXt2YXIgYz1hLnRvTG93ZXJDYXNlKCk7YT1tW2NdPW1bY118fGEsbFthXT1ifXJldHVybiB0aGlzfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gcz09PTI/bjpudWxsfSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYztpZihzPT09Mil7aWYoIW8pe289e307d2hpbGUoYz1iSC5leGVjKG4pKW9bY1sxXS50b0xvd2VyQ2FzZSgpXT1jWzJdfWM9b1thLnRvTG93ZXJDYXNlKCldfXJldHVybiBjPT09Yj9udWxsOmN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oYSl7c3x8KGQubWltZVR5cGU9YSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe2E9YXx8ImFib3J0IixwJiZwLmFib3J0KGEpLHcoMCxhKTtyZXR1cm4gdGhpc319O2gucHJvbWlzZSh2KSx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLHYuY29tcGxldGU9aS5hZGQsdi5zdGF0dXNDb2RlPWZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBiO2lmKHM8Milmb3IoYiBpbiBhKWpbYl09W2pbYl0sYVtiXV07ZWxzZSBiPWFbdi5zdGF0dXNdLHYudGhlbihiLGIpfXJldHVybiB0aGlzfSxkLnVybD0oKGF8fGQudXJsKSsiIikucmVwbGFjZShiRywiIikucmVwbGFjZShiTCxiV1sxXSsiLy8iKSxkLmRhdGFUeXBlcz1mLnRyaW0oZC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLnNwbGl0KGJQKSxkLmNyb3NzRG9tYWluPT1udWxsJiYocj1iUi5leGVjKGQudXJsLnRvTG93ZXJDYXNlKCkpLGQuY3Jvc3NEb21haW49ISghcnx8clsxXT09YldbMV0mJnJbMl09PWJXWzJdJiYoclszXXx8KHJbMV09PT0iaHR0cDoiPzgwOjQ0MykpPT0oYldbM118fChiV1sxXT09PSJodHRwOiI/ODA6NDQzKSkpKSxkLmRhdGEmJmQucHJvY2Vzc0RhdGEmJnR5cGVvZiBkLmRhdGEhPSJzdHJpbmciJiYoZC5kYXRhPWYucGFyYW0oZC5kYXRhLGQudHJhZGl0aW9uYWwpKSxiJChiVCxkLGMsdik7aWYocz09PTIpcmV0dXJuITE7dD1kLmdsb2JhbCxkLnR5cGU9ZC50eXBlLnRvVXBwZXJDYXNlKCksZC5oYXNDb250ZW50PSFiSy50ZXN0KGQudHlwZSksdCYmZi5hY3RpdmUrKz09PTAmJmYuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iik7aWYoIWQuaGFzQ29udGVudCl7ZC5kYXRhJiYoZC51cmwrPShiTS50ZXN0KGQudXJsKT8iJiI6Ij8iKStkLmRhdGEsZGVsZXRlIGQuZGF0YSksaz1kLnVybDtpZihkLmNhY2hlPT09ITEpe3ZhciB4PWYubm93KCkseT1kLnVybC5yZXBsYWNlKGJRLCIkMV89Iit4KTtkLnVybD15Kyh5PT09ZC51cmw/KGJNLnRlc3QoZC51cmwpPyImIjoiPyIpKyJfPSIreDoiIil9fShkLmRhdGEmJmQuaGFzQ29udGVudCYmZC5jb250ZW50VHlwZSE9PSExfHxjLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGQuY29udGVudFR5cGUpLGQuaWZNb2RpZmllZCYmKGs9a3x8ZC51cmwsZi5sYXN0TW9kaWZpZWRba10mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGYubGFzdE1vZGlmaWVkW2tdKSxmLmV0YWdba10mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsZi5ldGFnW2tdKSksdi5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGQuZGF0YVR5cGVzWzBdJiZkLmFjY2VwdHNbZC5kYXRhVHlwZXNbMF1dP2QuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0rKGQuZGF0YVR5cGVzWzBdIT09IioiPyIsICIrYlgrIjsgcT0wLjAxIjoiIik6ZC5hY2NlcHRzWyIqIl0pO2Zvcih1IGluIGQuaGVhZGVycyl2LnNldFJlcXVlc3RIZWFkZXIodSxkLmhlYWRlcnNbdV0pO2lmKGQuYmVmb3JlU2VuZCYmKGQuYmVmb3JlU2VuZC5jYWxsKGUsdixkKT09PSExfHxzPT09Mikpe3YuYWJvcnQoKTtyZXR1cm4hMX1mb3IodSBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl2W3VdKGRbdV0pO3A9YiQoYlUsZCxjLHYpO2lmKCFwKXcoLTEsIk5vIFRyYW5zcG9ydCIpO2Vsc2V7di5yZWFkeVN0YXRlPTEsdCYmZy50cmlnZ2VyKCJhamF4U2VuZCIsW3YsZF0pLGQuYXN5bmMmJmQudGltZW91dD4wJiYocT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7di5hYm9ydCgidGltZW91dCIpfSxkLnRpbWVvdXQpKTt0cnl7cz0xLHAuc2VuZChsLHcpfWNhdGNoKHope2lmKHM8Mil3KC0xLHopO2Vsc2UgdGhyb3cgen19cmV0dXJuIHZ9LHBhcmFtOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Zi5pc0Z1bmN0aW9uKGIpP2IoKTpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtjPT09YiYmKGM9Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKGYuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFmLmlzUGxhaW5PYmplY3QoYSkpZi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHZhciBnIGluIGEpY2EoZyxhW2ddLGMsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UoYkQsIisiKX19KSxmLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgY2Q9Zi5ub3coKSxjZT0vKFw9KVw/KCZ8JCl8XD9cPy9pO2YuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZi5leHBhbmRvKyJfIitjZCsrfX0pLGYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuY29udGVudFR5cGU9PT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiYmdHlwZW9mIGIuZGF0YT09InN0cmluZyI7aWYoYi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxiLmpzb25wIT09ITEmJihjZS50ZXN0KGIudXJsKXx8ZSYmY2UudGVzdChiLmRhdGEpKSl7dmFyIGcsaD1iLmpzb25wQ2FsbGJhY2s9Zi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJsLGs9Yi5kYXRhLGw9IiQxIitoKyIkMiI7Yi5qc29ucCE9PSExJiYoaj1qLnJlcGxhY2UoY2UsbCksYi51cmw9PT1qJiYoZSYmKGs9ay5yZXBsYWNlKGNlLGwpKSxiLmRhdGE9PT1rJiYoais9KC9cPy8udGVzdChqKT8iJiI6Ij8iKStiLmpzb25wKyI9IitoKSkpLGIudXJsPWosYi5kYXRhPWssYVtoXT1mdW5jdGlvbihhKXtnPVthXX0sZC5hbHdheXMoZnVuY3Rpb24oKXthW2hdPWksZyYmZi5pc0Z1bmN0aW9uKGkpJiZhW2hdKGdbMF0pfSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7Z3x8Zi5lcnJvcihoKyIgd2FzIG5vdCBjYWxsZWQiKTtyZXR1cm4gZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iO3JldHVybiJzY3JpcHQifX0pLGYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtmLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fX0pLGYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXthLmNhY2hlPT09YiYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksZi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBkLGU9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGYsZyl7ZD1jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQuYXN5bmM9ImFzeW5jIixhLnNjcmlwdENoYXJzZXQmJihkLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxkLnNyYz1hLnVybCxkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpe2lmKGN8fCFkLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSlkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGUmJmQucGFyZW50Tm9kZSYmZS5yZW1vdmVDaGlsZChkKSxkPWIsY3x8ZygyMDAsInN1Y2Nlc3MiKX0sZS5pbnNlcnRCZWZvcmUoZCxlLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQub25sb2FkKDAsMSl9fX19KTt2YXIgY2Y9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGNoKWNoW2FdKDAsMSl9OiExLGNnPTAsY2g7Zi5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJmNpKCl8fGNqKCl9OmNpLGZ1bmN0aW9uKGEpe2YuZXh0ZW5kKGYuc3VwcG9ydCx7YWpheDohIWEsY29yczohIWEmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYX0pfShmLmFqYXhTZXR0aW5ncy54aHIoKSksZi5zdXBwb3J0LmFqYXgmJmYuYWpheFRyYW5zcG9ydChmdW5jdGlvbihjKXtpZighYy5jcm9zc0RvbWFpbnx8Zi5zdXBwb3J0LmNvcnMpe3ZhciBkO3JldHVybntzZW5kOmZ1bmN0aW9uKGUsZyl7dmFyIGg9Yy54aHIoKSxpLGo7Yy51c2VybmFtZT9oLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMsYy51c2VybmFtZSxjLnBhc3N3b3JkKTpoLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMpO2lmKGMueGhyRmllbGRzKWZvcihqIGluIGMueGhyRmllbGRzKWhbal09Yy54aHJGaWVsZHNbal07Yy5taW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUoYy5taW1lVHlwZSksIWMuY3Jvc3NEb21haW4mJiFlWyJYLVJlcXVlc3RlZC1XaXRoIl0mJihlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihqIGluIGUpaC5zZXRSZXF1ZXN0SGVhZGVyKGosZVtqXSl9Y2F0Y2goayl7fWguc2VuZChjLmhhc0NvbnRlbnQmJmMuZGF0YXx8bnVsbCksZD1mdW5jdGlvbihhLGUpe3ZhciBqLGssbCxtLG47dHJ5e2lmKGQmJihlfHxoLnJlYWR5U3RhdGU9PT00KSl7ZD1iLGkmJihoLm9ucmVhZHlzdGF0ZWNoYW5nZT1mLm5vb3AsY2YmJmRlbGV0ZSBjaFtpXSk7aWYoZSloLnJlYWR5U3RhdGUhPT00JiZoLmFib3J0KCk7ZWxzZXtqPWguc3RhdHVzLGw9aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxtPXt9LG49aC5yZXNwb25zZVhNTCxuJiZuLmRvY3VtZW50RWxlbWVudCYmKG0ueG1sPW4pLG0udGV4dD1oLnJlc3BvbnNlVGV4dDt0cnl7az1oLnN0YXR1c1RleHR9Y2F0Y2gobyl7az0iIn0haiYmYy5pc0xvY2FsJiYhYy5jcm9zc0RvbWFpbj9qPW0udGV4dD8yMDA6NDA0Omo9PT0xMjIzJiYoaj0yMDQpfX19Y2F0Y2gocCl7ZXx8ZygtMSxwKX1tJiZnKGosayxtLGwpfSwhYy5hc3luY3x8aC5yZWFkeVN0YXRlPT09ND9kKCk6KGk9KytjZyxjZiYmKGNofHwoY2g9e30sZihhKS51bmxvYWQoY2YpKSxjaFtpXT1kKSxoLm9ucmVhZHlzdGF0ZWNoYW5nZT1kKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY2s9e30sY2wsY20sY249L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNvPS9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikkL2ksY3AsY3E9W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV0sY3I7Zi5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdSgic2hvdyIsMyksYSxiLGMpO2Zvcih2YXIgZz0wLGg9dGhpcy5sZW5ndGg7ZzxoO2crKylkPXRoaXNbZ10sZC5zdHlsZSYmKGU9ZC5zdHlsZS5kaXNwbGF5LCFmLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSYmZT09PSJub25lIiYmKGU9ZC5zdHlsZS5kaXNwbGF5PSIiKSxlPT09IiImJmYuY3NzKGQsImRpc3BsYXkiKT09PSJub25lIiYmZi5fZGF0YShkLCJvbGRkaXNwbGF5IixjdihkLm5vZGVOYW1lKSkpO2ZvcihnPTA7ZzxoO2crKyl7ZD10aGlzW2ddO2lmKGQuc3R5bGUpe2U9ZC5zdHlsZS5kaXNwbGF5O2lmKGU9PT0iInx8ZT09PSJub25lIilkLnN0eWxlLmRpc3BsYXk9Zi5fZGF0YShkLCJvbGRkaXNwbGF5Iil8fCIifX1yZXR1cm4gdGhpc30saGlkZTpmdW5jdGlvbihhLGIsYyl7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdSgiaGlkZSIsMyksYSxiLGMpO3ZhciBkLGUsZz0wLGg9dGhpcy5sZW5ndGg7Zm9yKDtnPGg7ZysrKWQ9dGhpc1tnXSxkLnN0eWxlJiYoZT1mLmNzcyhkLCJkaXNwbGF5IiksZSE9PSJub25lIiYmIWYuX2RhdGEoZCwib2xkZGlzcGxheSIpJiZmLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGUpKTtmb3IoZz0wO2c8aDtnKyspdGhpc1tnXS5zdHlsZSYmKHRoaXNbZ10uc3R5bGUuZGlzcGxheT0ibm9uZSIpO3JldHVybiB0aGlzfSxfdG9nZ2xlOmYuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dHlwZW9mIGE9PSJib29sZWFuIjtmLmlzRnVuY3Rpb24oYSkmJmYuaXNGdW5jdGlvbihiKT90aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE9PW51bGx8fGQ/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ZD9hOmYodGhpcykuaXMoIjpoaWRkZW4iKTtmKHRoaXMpW2I/InNob3ciOiJoaWRlIl0oKX0pOnRoaXMuYW5pbWF0ZShjdSgidG9nZ2xlIiwzKSxhLGIsYyk7cmV0dXJuIHRoaXN9LGZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBnKCl7ZS5xdWV1ZT09PSExJiZmLl9tYXJrKHRoaXMpO3ZhciBiPWYuZXh0ZW5kKHt9LGUpLGM9dGhpcy5ub2RlVHlwZT09PTEsZD1jJiZmKHRoaXMpLmlzKCI6aGlkZGVuIiksZyxoLGksaixrLGwsbSxuLG87Yi5hbmltYXRlZFByb3BlcnRpZXM9e307Zm9yKGkgaW4gYSl7Zz1mLmNhbWVsQ2FzZShpKSxpIT09ZyYmKGFbZ109YVtpXSxkZWxldGUgYVtpXSksaD1hW2ddLGYuaXNBcnJheShoKT8oYi5hbmltYXRlZFByb3BlcnRpZXNbZ109aFsxXSxoPWFbZ109aFswXSk6Yi5hbmltYXRlZFByb3BlcnRpZXNbZ109Yi5zcGVjaWFsRWFzaW5nJiZiLnNwZWNpYWxFYXNpbmdbZ118fGIuZWFzaW5nfHwic3dpbmciO2lmKGg9PT0iaGlkZSImJmR8fGg9PT0ic2hvdyImJiFkKXJldHVybiBiLmNvbXBsZXRlLmNhbGwodGhpcyk7YyYmKGc9PT0iaGVpZ2h0Inx8Zz09PSJ3aWR0aCIpJiYoYi5vdmVyZmxvdz1bdGhpcy5zdHlsZS5vdmVyZmxvdyx0aGlzLnN0eWxlLm92ZXJmbG93WCx0aGlzLnN0eWxlLm92ZXJmbG93WV0sZi5jc3ModGhpcywiZGlzcGxheSIpPT09ImlubGluZSImJmYuY3NzKHRoaXMsImZsb2F0Iik9PT0ibm9uZSImJighZi5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXR8fGN2KHRoaXMubm9kZU5hbWUpPT09ImlubGluZSI/dGhpcy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOnRoaXMuc3R5bGUuem9vbT0xKSl9Yi5vdmVyZmxvdyE9bnVsbCYmKHRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2ZvcihpIGluIGEpaj1uZXcgZi5meCh0aGlzLGIsaSksaD1hW2ldLGNuLnRlc3QoaCk/KG89Zi5fZGF0YSh0aGlzLCJ0b2dnbGUiK2kpfHwoaD09PSJ0b2dnbGUiP2Q/InNob3ciOiJoaWRlIjowKSxvPyhmLl9kYXRhKHRoaXMsInRvZ2dsZSIraSxvPT09InNob3ciPyJoaWRlIjoic2hvdyIpLGpbb10oKSk6altoXSgpKTooaz1jby5leGVjKGgpLGw9ai5jdXIoKSxrPyhtPXBhcnNlRmxvYXQoa1syXSksbj1rWzNdfHwoZi5jc3NOdW1iZXJbaV0/IiI6InB4IiksbiE9PSJweCImJihmLnN0eWxlKHRoaXMsaSwobXx8MSkrbiksbD0obXx8MSkvai5jdXIoKSpsLGYuc3R5bGUodGhpcyxpLGwrbikpLGtbMV0mJihtPShrWzFdPT09Ii09Ij8tMToxKSptK2wpLGouY3VzdG9tKGwsbSxuKSk6ai5jdXN0b20obCxoLCIiKSk7cmV0dXJuITB9dmFyIGU9Zi5zcGVlZChiLGMsZCk7aWYoZi5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZS5jb21wbGV0ZSxbITFdKTthPWYuZXh0ZW5kKHt9LGEpO3JldHVybiBlLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZS5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGMsZCl7dHlwZW9mIGEhPSJzdHJpbmciJiYoZD1jLGM9YSxhPWIpLGMmJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChhLGIsYyl7dmFyIGU9YltjXTtmLnJlbW92ZURhdGEoYSxjLCEwKSxlLnN0b3AoZCl9dmFyIGIsYz0hMSxlPWYudGltZXJzLGc9Zi5fZGF0YSh0aGlzKTtkfHxmLl91bm1hcmsoITAsdGhpcyk7aWYoYT09bnVsbClmb3IoYiBpbiBnKWdbYl0mJmdbYl0uc3RvcCYmYi5pbmRleE9mKCIucnVuIik9PT1iLmxlbmd0aC00JiZoKHRoaXMsZyxiKTtlbHNlIGdbYj1hKyIucnVuIl0mJmdbYl0uc3RvcCYmaCh0aGlzLGcsYik7Zm9yKGI9ZS5sZW5ndGg7Yi0tOyllW2JdLmVsZW09PT10aGlzJiYoYT09bnVsbHx8ZVtiXS5xdWV1ZT09PWEpJiYoZD9lW2JdKCEwKTplW2JdLnNhdmVTdGF0ZSgpLGM9ITAsZS5zcGxpY2UoYiwxKSk7KCFkfHwhYykmJmYuZGVxdWV1ZSh0aGlzLGEpfSl9fSksZi5lYWNoKHtzbGlkZURvd246Y3UoInNob3ciLDEpLHNsaWRlVXA6Y3UoImhpZGUiLDEpLHNsaWRlVG9nZ2xlOmN1KCJ0b2dnbGUiLDEpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLGYuZXh0ZW5kKHtzcGVlZDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmdHlwZW9mIGE9PSJvYmplY3QiP2YuZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8Zi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFmLmlzRnVuY3Rpb24oYikmJmJ9O2QuZHVyYXRpb249Zi5meC5vZmY/MDp0eXBlb2YgZC5kdXJhdGlvbj09Im51bWJlciI/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIGYuZnguc3BlZWRzP2YuZnguc3BlZWRzW2QuZHVyYXRpb25dOmYuZnguc3BlZWRzLl9kZWZhdWx0O2lmKGQucXVldWU9PW51bGx8fGQucXVldWU9PT0hMClkLnF1ZXVlPSJmeCI7ZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKGEpe2YuaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZT9mLmRlcXVldWUodGhpcyxkLnF1ZXVlKTphIT09ITEmJmYuX3VubWFyayh0aGlzKX07cmV0dXJuIGR9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjK2QqYX0sc3dpbmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKC1NYXRoLmNvcyhhKk1hdGguUEkpLzIrLjUpKmQrY319LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsYyl7dGhpcy5vcHRpb25zPWIsdGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsYi5vcmlnPWIub3JpZ3x8e319fSksZi5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSwoZi5meC5zdGVwW3RoaXMucHJvcF18fGYuZnguc3RlcC5fZGVmYXVsdCkodGhpcyl9LGN1cjpmdW5jdGlvbigpe2lmKHRoaXMuZWxlbVt0aGlzLnByb3BdIT1udWxsJiYoIXRoaXMuZWxlbS5zdHlsZXx8dGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF09PW51bGwpKXJldHVybiB0aGlzLmVsZW1bdGhpcy5wcm9wXTt2YXIgYSxiPWYuY3NzKHRoaXMuZWxlbSx0aGlzLnByb3ApO3JldHVybiBpc05hTihhPXBhcnNlRmxvYXQoYikpPyFifHxiPT09ImF1dG8iPzA6YjphfSxjdXN0b206ZnVuY3Rpb24oYSxjLGQpe2Z1bmN0aW9uIGgoYSl7cmV0dXJuIGUuc3RlcChhKX12YXIgZT10aGlzLGc9Zi5meDt0aGlzLnN0YXJ0VGltZT1jcnx8Y3MoKSx0aGlzLmVuZD1jLHRoaXMubm93PXRoaXMuc3RhcnQ9YSx0aGlzLnBvcz10aGlzLnN0YXRlPTAsdGhpcy51bml0PWR8fHRoaXMudW5pdHx8KGYuY3NzTnVtYmVyW3RoaXMucHJvcF0/IiI6InB4IiksaC5xdWV1ZT10aGlzLm9wdGlvbnMucXVldWUsaC5lbGVtPXRoaXMuZWxlbSxoLnNhdmVTdGF0ZT1mdW5jdGlvbigpe2Uub3B0aW9ucy5oaWRlJiZmLl9kYXRhKGUuZWxlbSwiZnhzaG93IitlLnByb3ApPT09YiYmZi5fZGF0YShlLmVsZW0sImZ4c2hvdyIrZS5wcm9wLGUuc3RhcnQpfSxoKCkmJmYudGltZXJzLnB1c2goaCkmJiFjcCYmKGNwPXNldEludGVydmFsKGcudGljayxnLmludGVydmFsKSl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgYT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09YXx8Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuc2hvdz0hMCxhIT09Yj90aGlzLmN1c3RvbSh0aGlzLmN1cigpLGEpOnRoaXMuY3VzdG9tKHRoaXMucHJvcD09PSJ3aWR0aCJ8fHRoaXMucHJvcD09PSJoZWlnaHQiPzE6MCx0aGlzLmN1cigpKSxmKHRoaXMuZWxlbSkuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApfHxmLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApLHRoaXMub3B0aW9ucy5oaWRlPSEwLHRoaXMuY3VzdG9tKHRoaXMuY3VyKCksMCl9LHN0ZXA6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9Y3J8fGNzKCksZz0hMCxoPXRoaXMuZWxlbSxpPXRoaXMub3B0aW9ucztpZihhfHxlPj1pLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZCx0aGlzLnBvcz10aGlzLnN0YXRlPTEsdGhpcy51cGRhdGUoKSxpLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdPSEwO2ZvcihiIGluIGkuYW5pbWF0ZWRQcm9wZXJ0aWVzKWkuYW5pbWF0ZWRQcm9wZXJ0aWVzW2JdIT09ITAmJihnPSExKTtpZihnKXtpLm92ZXJmbG93IT1udWxsJiYhZi5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MmJmYuZWFjaChbIiIsIlgiLCJZIl0sZnVuY3Rpb24oYSxiKXtoLnN0eWxlWyJvdmVyZmxvdyIrYl09aS5vdmVyZmxvd1thXX0pLGkuaGlkZSYmZihoKS5oaWRlKCk7aWYoaS5oaWRlfHxpLnNob3cpZm9yKGIgaW4gaS5hbmltYXRlZFByb3BlcnRpZXMpZi5zdHlsZShoLGIsaS5vcmlnW2JdKSxmLnJlbW92ZURhdGEoaCwiZnhzaG93IitiLCEwKSxmLnJlbW92ZURhdGEoaCwidG9nZ2xlIitiLCEwKTtkPWkuY29tcGxldGUsZCYmKGkuY29tcGxldGU9ITEsZC5jYWxsKGgpKX1yZXR1cm4hMX1pLmR1cmF0aW9uPT1JbmZpbml0eT90aGlzLm5vdz1lOihjPWUtdGhpcy5zdGFydFRpbWUsdGhpcy5zdGF0ZT1jL2kuZHVyYXRpb24sdGhpcy5wb3M9Zi5lYXNpbmdbaS5hbmltYXRlZFByb3BlcnRpZXNbdGhpcy5wcm9wXV0odGhpcy5zdGF0ZSxjLDAsMSxpLmR1cmF0aW9uKSx0aGlzLm5vdz10aGlzLnN0YXJ0Kyh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyksdGhpcy51cGRhdGUoKTtyZXR1cm4hMH19LGYuZXh0ZW5kKGYuZngse3RpY2s6ZnVuY3Rpb24oKXt2YXIgYSxiPWYudGltZXJzLGM9MDtmb3IoO2M8Yi5sZW5ndGg7YysrKWE9YltjXSwhYSgpJiZiW2NdPT09YSYmYi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxmLmZ4LnN0b3AoKX0saW50ZXJ2YWw6MTMsc3RvcDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoY3ApLGNwPW51bGx9LHNwZWVkczp7c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxzdGVwOntvcGFjaXR5OmZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLCJvcGFjaXR5IixhLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe2EuZWxlbS5zdHlsZSYmYS5lbGVtLnN0eWxlW2EucHJvcF0hPW51bGw/YS5lbGVtLnN0eWxlW2EucHJvcF09YS5ub3crYS51bml0OmEuZWxlbVthLnByb3BdPWEubm93fX19KSxmLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7Zi5meC5zdGVwW2JdPWZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLGIsTWF0aC5tYXgoMCxhLm5vdykrYS51bml0KX19KSxmLmV4cHImJmYuZXhwci5maWx0ZXJzJiYoZi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZ3JlcChmLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH0pO3ZhciBjdz0vXnQoPzphYmxlfGR8aCkkL2ksY3g9L14oPzpib2R5fGh0bWwpJC9pOyJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4gYy5kb2N1bWVudEVsZW1lbnQ/Zi5mbi5vZmZzZXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXSxjO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBmLm9mZnNldC5ib2R5T2Zmc2V0KGIpO3RyeXtjPWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2goZCl7fXZhciBlPWIub3duZXJEb2N1bWVudCxnPWUuZG9jdW1lbnRFbGVtZW50O2lmKCFjfHwhZi5jb250YWlucyhnLGIpKXJldHVybiBjP3t0b3A6Yy50b3AsbGVmdDpjLmxlZnR9Ont0b3A6MCxsZWZ0OjB9O3ZhciBoPWUuYm9keSxpPWN5KGUpLGo9Zy5jbGllbnRUb3B8fGguY2xpZW50VG9wfHwwLGs9Zy5jbGllbnRMZWZ0fHxoLmNsaWVudExlZnR8fDAsbD1pLnBhZ2VZT2Zmc2V0fHxmLnN1cHBvcnQuYm94TW9kZWwmJmcuc2Nyb2xsVG9wfHxoLnNjcm9sbFRvcCxtPWkucGFnZVhPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxMZWZ0fHxoLnNjcm9sbExlZnQsbj1jLnRvcCtsLWosbz1jLmxlZnQrbS1rO3JldHVybnt0b3A6bixsZWZ0Om99fTpmLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBmLm9mZnNldC5ib2R5T2Zmc2V0KGIpO3ZhciBjLGQ9Yi5vZmZzZXRQYXJlbnQsZT1iLGc9Yi5vd25lckRvY3VtZW50LGg9Zy5kb2N1bWVudEVsZW1lbnQsaT1nLmJvZHksaj1nLmRlZmF1bHRWaWV3LGs9aj9qLmdldENvbXB1dGVkU3R5bGUoYixudWxsKTpiLmN1cnJlbnRTdHlsZSxsPWIub2Zmc2V0VG9wLG09Yi5vZmZzZXRMZWZ0O3doaWxlKChiPWIucGFyZW50Tm9kZSkmJmIhPT1pJiZiIT09aCl7aWYoZi5zdXBwb3J0LmZpeGVkUG9zaXRpb24mJmsucG9zaXRpb249PT0iZml4ZWQiKWJyZWFrO2M9aj9qLmdldENvbXB1dGVkU3R5bGUoYixudWxsKTpiLmN1cnJlbnRTdHlsZSxsLT1iLnNjcm9sbFRvcCxtLT1iLnNjcm9sbExlZnQsYj09PWQmJihsKz1iLm9mZnNldFRvcCxtKz1iLm9mZnNldExlZnQsZi5zdXBwb3J0LmRvZXNOb3RBZGRCb3JkZXImJighZi5zdXBwb3J0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzfHwhY3cudGVzdChiLm5vZGVOYW1lKSkmJihsKz1wYXJzZUZsb2F0KGMuYm9yZGVyVG9wV2lkdGgpfHwwLG0rPXBhcnNlRmxvYXQoYy5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxlPWQsZD1iLm9mZnNldFBhcmVudCksZi5zdXBwb3J0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSYmYy5vdmVyZmxvdyE9PSJ2aXNpYmxlIiYmKGwrPXBhcnNlRmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRlckxlZnRXaWR0aCl8fDApLGs9Y31pZihrLnBvc2l0aW9uPT09InJlbGF0aXZlInx8ay5wb3NpdGlvbj09PSJzdGF0aWMiKWwrPWkub2Zmc2V0VG9wLG0rPWkub2Zmc2V0TGVmdDtmLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCImJihsKz1NYXRoLm1heChoLnNjcm9sbFRvcCxpLnNjcm9sbFRvcCksbSs9TWF0aC5tYXgoaC5zY3JvbGxMZWZ0LGkuc2Nyb2xsTGVmdCkpO3JldHVybnt0b3A6bCxsZWZ0Om19fSxmLm9mZnNldD17Ym9keU9mZnNldDpmdW5jdGlvbihhKXt2YXIgYj1hLm9mZnNldFRvcCxjPWEub2Zmc2V0TGVmdDtmLnN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQmJihiKz1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjKz1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpbkxlZnQiKSl8fDApO3JldHVybnt0b3A6YixsZWZ0OmN9fSxzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWYuY3NzKGEsInBvc2l0aW9uIik7ZD09PSJzdGF0aWMiJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKTt2YXIgZT1mKGEpLGc9ZS5vZmZzZXQoKSxoPWYuY3NzKGEsInRvcCIpLGk9Zi5jc3MoYSwibGVmdCIpLGo9KGQ9PT0iYWJzb2x1dGUifHxkPT09ImZpeGVkIikmJmYuaW5BcnJheSgiYXV0byIsW2gsaV0pPi0xLGs9e30sbD17fSxtLG47aj8obD1lLnBvc2l0aW9uKCksbT1sLnRvcCxuPWwubGVmdCk6KG09cGFyc2VGbG9hdChoKXx8MCxuPXBhcnNlRmxvYXQoaSl8fDApLGYuaXNGdW5jdGlvbihiKSYmKGI9Yi5jYWxsKGEsYyxnKSksYi50b3AhPW51bGwmJihrLnRvcD1iLnRvcC1nLnRvcCttKSxiLmxlZnQhPW51bGwmJihrLmxlZnQ9Yi5sZWZ0LWcubGVmdCtuKSwidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxrKTplLmNzcyhrKX19LGYuZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybiBudWxsO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGM9dGhpcy5vZmZzZXQoKSxkPWN4LnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtjLnRvcC09cGFyc2VGbG9hdChmLmNzcyhhLCJtYXJnaW5Ub3AiKSl8fDAsYy5sZWZ0LT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpbkxlZnQiKSl8fDAsZC50b3ArPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDAsZC5sZWZ0Kz1wYXJzZUZsb2F0KGYuY3NzKGJbMF0sImJvcmRlckxlZnRXaWR0aCIpKXx8MDtyZXR1cm57dG9wOmMudG9wLWQudG9wLGxlZnQ6Yy5sZWZ0LWQubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxjLmJvZHk7d2hpbGUoYSYmIWN4LnRlc3QoYS5ub2RlTmFtZSkmJmYuY3NzKGEsInBvc2l0aW9uIik9PT0ic3RhdGljIilhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfSl9fSksZi5lYWNoKFsiTGVmdCIsIlRvcCJdLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9InNjcm9sbCIrYztmLmZuW2RdPWZ1bmN0aW9uKGMpe3ZhciBlLGc7aWYoYz09PWIpe2U9dGhpc1swXTtpZighZSlyZXR1cm4gbnVsbDtnPWN5KGUpO3JldHVybiBnPyJwYWdlWE9mZnNldCJpbiBnP2dbYT8icGFnZVlPZmZzZXQiOiJwYWdlWE9mZnNldCJdOmYuc3VwcG9ydC5ib3hNb2RlbCYmZy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZF18fGcuZG9jdW1lbnQuYm9keVtkXTplW2RdfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtnPWN5KHRoaXMpLGc/Zy5zY3JvbGxUbyhhP2YoZykuc2Nyb2xsTGVmdCgpOmMsYT9jOmYoZykuc2Nyb2xsVG9wKCkpOnRoaXNbZF09Y30pfX0pLGYuZWFjaChbIkhlaWdodCIsIldpZHRoIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD1jLnRvTG93ZXJDYXNlKCk7Zi5mblsiaW5uZXIiK2NdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpc1swXTtyZXR1cm4gYT9hLnN0eWxlP3BhcnNlRmxvYXQoZi5jc3MoYSxkLCJwYWRkaW5nIikpOnRoaXNbZF0oKTpudWxsfSxmLmZuWyJvdXRlciIrY109ZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXTtyZXR1cm4gYj9iLnN0eWxlP3BhcnNlRmxvYXQoZi5jc3MoYixkLGE/Im1hcmdpbiI6ImJvcmRlciIpKTp0aGlzW2RdKCk6bnVsbH0sZi5mbltkXT1mdW5jdGlvbihhKXt2YXIgZT10aGlzWzBdO2lmKCFlKXJldHVybiBhPT1udWxsP251bGw6dGhpcztpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2NbZF0oYS5jYWxsKHRoaXMsYixjW2RdKCkpKX0pO2lmKGYuaXNXaW5kb3coZSkpe3ZhciBnPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2NdLGg9ZS5kb2N1bWVudC5ib2R5O3JldHVybiBlLmRvY3VtZW50LmNvbXBhdE1vZGU9PT0iQ1NTMUNvbXBhdCImJmd8fGgmJmhbImNsaWVudCIrY118fGd9aWYoZS5ub2RlVHlwZT09PTkpcmV0dXJuIE1hdGgubWF4KGUuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2NdLGUuYm9keVsic2Nyb2xsIitjXSxlLmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIitjXSxlLmJvZHlbIm9mZnNldCIrY10sZS5kb2N1bWVudEVsZW1lbnRbIm9mZnNldCIrY10pO2lmKGE9PT1iKXt2YXIgaT1mLmNzcyhlLGQpLGo9cGFyc2VGbG9hdChpKTtyZXR1cm4gZi5pc051bWVyaWMoaik/ajppfXJldHVybiB0aGlzLmNzcyhkLHR5cGVvZiBhPT0ic3RyaW5nIj9hOmErInB4Iil9fSksYS5qUXVlcnk9YS4kPWYsdHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnkmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBmfSl9KSh3aW5kb3cpOw=="></script>
    
<style type="text/css">
body, html {
  height: 100%;
  margin: 0;
  padding: 0;
}

.html5gallery-car-0 {
  border: 0 !important;
}
</style>

</head>
<body>
    
<div style="display:none;margin:0 auto;" 
	class="html5gallery"
	data-responsive="true"
	data-responsivefullscreen="true"
	data-html5player="true"
	data-autoslide="false" 
	data-skin="darkness" 
	data-showtitle="false" 
	data-showsocialmedia="false" 
	data-showfullscreenbutton="false"   
	data-autoplayvideo="false" 
	data-width="800" 
	data-height="450" 
	data-effect="slide" 
	data-resizemode="fit" 
	data-padding="0"
	data-galleryshadow="false"
	data-slideshadow="false"
	>

<a href="/fb/jtfdc"><img src="/fb/jtfdc/pages/tn/tn_1.png" alt="fb/jtfdc"></a>
<a href="/fb/jtfdcr"><img src="/fb/jtfdcr/pages/tn/tn_1.png" alt="fb/jtfdcr"></a>
<a href="/fb/jtfinc"><img src="/fb/jtfinc/pages/tn/tn_1.png" alt="fb/jtfinc"></a>
<a href="/fb/kou"><img src="/fb/kou/pages/tn/tn_1.png" alt="fb/kou"></a>
<a href="/fb/kitiworks"><img src="/fb/kitiworks/pages/tn/tn_1.png" alt="fb/kitiworks"></a>
<a href="/fb/pastryroad"><img src="/fb/pastryroad/pages/tn/tn_1.png" alt="fb/pastryroad"></a>
<a href="/fb/space"><img src="/fb/space/pages/tn/tn_1.png" alt="fb/space"></a>
<a href="/fb/byrdpucker"><img src="/fb/byrdpucker/pages/tn/tn_1.png" alt="fb/byrdpucker"></a>

<a href="./pn/imgs/pano_jtf_entrance_jtf.jpg"><img src="./pn/imgs/pano_jtf_entrance_jtf.jpg" alt="pano_jtf_entrance" data-description="The storm is raging up above, and waves are dashing high."></a>
<a href="./pn/imgs/pano_falls.jpg"><img src="./pn/imgs/pano_falls.jpg" alt="pano_falls"></a>
<a href="./pn/imgs/pano_falls_north.jpg"><img src="./pn/imgs/pano_falls_north.jpg" alt="pano_falls_north"></a>
<a href="./pn/imgs/pano_falls_south.jpg"><img src="./pn/imgs/pano_falls_south.jpg" alt="pano_falls_south"></a>
<a href="./pn/imgs/mars-gale-crater-panorama-pia11241-full.jpg"><img src="./pn/imgs/mars-gale-crater-panorama-pia11241-full.jpg" alt="./pn/imgs/mars-gale-crater-panorama-pia11241-full"></a>
<a href="index1_avril.mp4#t=20" data-poster="index1_avril.mp4#t=65">
<img src="index1_avril.mp4#t=70" alt="index1_avril" data-description="index1 - avril "></a>

<a href="http://www.youtube.com/embed/YE7VzlLtp-4" data-poster="images/Big_Buck_Bunny_1_1024.jpg"><img src="https://img.youtube.com/vi/YE7VzlLtp-4/2.jpg" alt="Big Buck Bunny" data-description="YouTube Video - Big Buck Bunny"></a>
<a href="http://www.youtube.com/embed/TLkA0RELQ1g" data-poster="images/Elephant_Dreams_954.jpg"><img src="https://img.youtube.com/vi/TLkA0RELQ1g/2.jpg" alt="Elephants Dream" data-description="YouTube Video - Elephants Dream"></a>
<a href="./index8.mp4" data-poster="./index8.jpg" data-mp4="./index8.mpr"><img src="./index8.jpg" alt="index8.mp4 " data-description="index8.mp4 - <a href='http://www.bigbuckbunny.org' target='_blank'>Copyright Blender Foundation</a>"></a>


<a href="images/Big_Buck_Bunny_1.m4v" data-poster="images/Big_Buck_Bunny_3_1024.jpg" data-webm="images/Big_Buck_Bunny_1.webm"><img src="images/Big_Buck_Bunny_1.jpg" alt="Big Buck Bunny 1" data-description="Big Buck Bunny 1 - <a href='http://www.bigbuckbunny.org' target='_blank'>Copyright Blender Foundation</a>"></a>
<a href="images/Big_Buck_Bunny_2.m4v" data-poster="images/Big_Buck_Bunny_2_1024.jpg" data-webm="images/Big_Buck_Bunny_2.webm"><img src="images/Big_Buck_Bunny_2.jpg" alt="Big Buck Bunny 2" data-description="Big Buck Bunny 2 - <a href='http://www.bigbuckbunny.org' target='_blank'>Copyright Blender Foundation</a>"></a>

<a href="images/Forest_1024.jpg"><img src="images/Forest_256.jpg" alt="Forest"></a>
<a href="images/Green_1024.jpg"><img src="images/Green_256.jpg" alt="Green"></a>
<a href="images/Dark_Beach_1024.jpg"><img src="images/Dark_Beach_256.jpg" alt="Dark Beach"></a>

<a href="imgs/btn/koeyeb.png"><img src="./imgs/koeyeb.png" alt="koeyeb"></a>
<a href="images/Evening_1024.jpg"><img src="images/Evening_256.jpg" alt="Evening"></a>
<a href="images/Island_1024.jpg"><img src="images/Island_256.jpg" alt="Island"></a>
<a href="images/Sunrise_1024.jpg"><img src="images/Sunrise_256.jpg" alt="Sunrise"></a>

<a href="images/Tulip_1024.jpg"><img src="images/Tulip_256.jpg" alt="Tulips"></a>
<a href="images/Colourful_Tulip_1024.jpg"><img src="images/Colourful_Tulip_256.jpg" alt="Colourful Tulips"></a>
<a href="images/Swan_1024.jpg"><img src="images/Swan_256.jpg" alt="Swan on Lake"></a>
<a href="./imgs/btn/ko.png"><img src="./imgs/btn/ko.png" alt="ko.png"></a>
<a href="images/Sakura_Tree_1024.jpg"><img src="images/Sakura_Tree_256.jpg" alt="Sakura Trees"></a>

</div>

<figure id="video_player">
	<video controls poster="index1_avril.mp4#t=65" defaultmutted="" muted="true" >
		<source src="index1_avril.mp4#t=125" type="video/mp4">
		<source src="index1_avril.webm" type="video/webm">
	</video>
	<figcaption>
		<a href="index1_avril.mp4#t=65"><img src="index1_avril.mp4#t=70" alt="index1_avril#t=70"></a>
		<a href="index1.mp4#t=80"><img src="index1.mp4#t=45" alt="index1#t=45"></a>
		<a href="index1_avril.mp4#t=90"><img src="index1_avril.mp4#t=65" alt="index1_avril1#t=65 3"></a>
	</figcaption>
</figure>

<style  id="style_video_player" >

#video_player {
	display: table;
	line-height: 0;
	font-size: 0;
	background: #000;
}
#video_player video,
	#video_player figcaption {
		display: table-cell;
		vertical-align: top;
}
#video_player figcaption {
	width: 25%;
}
#video_player figcaption a {
	display: block;
	opacity: .5;
	transition: 1s opacity;
}
#video_player figcaption a img,
	figure video {
		width: 100%;
		height: auto;
}
#video_player figcaption a:hover {
	opacity: 1;
}




	@media (max-width: 700px) {
		#video_player video,
		#video_player figcaption {
			display: table-row;
			}
		#video_player figcaption a {
			display: inline-block;
			width: 33.33%;
			}
		}

	</style>




	<script id="script_video_player">
		var video_player = document.getElementById("video_player"),
		links = video_player.getElementsByTagName('a');
		for (var i=0; i<links.length; i++) {
			links[i].onclick = handler;
			}


	function handler(e) {
		e.preventDefault();
		videotarget = this.getAttribute("href");
		filename = videotarget.substr(0, videotarget.lastIndexOf('.')) || videotarget;
		video = document.querySelector("#video_player video");
		video.removeAttribute("controls");
		video.removeAttribute("poster");
		source = document.querySelectorAll("#video_player video source");
		source[0].src = filename + ".mp4";
		source[1].src = filename + ".webm";
		video.load();
		video.play();    
		}
	</script>


<!--
	<video width="400" controls="controls" preload="metadata">
		<source src="./index2.mp4#t=0.5" type="video/mp4">
		</video>
	-->

	<video width="320" height="240" controls id="video" defaultmutted="" muted="true" >
		<source src="index1_avril.mp4" type="video/mp4">
		</video>

	<video width="320" height="240" controls id="video" defaultmutted="" muted="true" >
		<source src="index1.mp4#t=10,30" type="video/mp4">
		</video>

	<video width="320" height="240" controls id="video" defaultmutted="" muted="true" >
		<source src="index2.mp4#t=15" type="video/mp4">
		</video>

	<video width="320" height="240" controls id="video" defaultmutted="" muted="true" >
		<source src="index3.mp4#t=30" type="video/mp4">
		</video>

	<video width="320" height="240" controls id="video" defaultmutted="" muted="true" >
		<source src="index4.mp4#t=45" type="video/mp4">
		</video>

	<video width="320" height="240" controls id="video" defaultmutted="" muted="true" >
		<source src="index5.mp4#t=100" type="video/mp4">
		</video>

	<video width="320" height="240" controls id="video" defaultmutted="" muted="true" >
		<source src="index6.mp4#t=120" type="video/mp4">
		</video>

	<video width="320" height="240" controls id="video" defaultmutted="" muted="true" >
		<source src="index7.mp4#t=200" type="video/mp4">
		</video>

	<video width="320" height="240" controls id="video" defaultmutted="" muted="true" >
		<source src="index8.mp4" type="video/mp4">
		</video>

<script id="script_mp4tn">
$(document).ready(function() {


            var time = 15;
            var scale = 1;

            var video_obj = null;

            document.getElementById('video').addEventListener('loadedmetadata', function() {
                 this.currentTime = time;
                 video_obj = this;

            }, false);

           document.getElementById('video').addEventListener('loadeddata', function() {
                 var video = document.getElementById('video');

                 var canvas = document.createElement("canvas");
                 canvas.width = video.videoWidth * scale;
                 canvas.height = video.videoHeight * scale;
                 canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);

                 var img = document.createElement("img");
                img.src = canvas.toDataURL();
                $('#thumbnail').append(img);

                video_obj.currentTime = 0;

            }, false);

        });

	</script>


	<script>
s.addEventListener( 'dragover', function ( evt ) {
  evt.preventDefault();
}, false );
s.addEventListener( 'drop', getfiles, false );

function getfiles( ev ) {
  var files = ev.dataTransfer.files;
  if ( files.length > 0 ) {
    var i = files.length;
    while ( i-- ) {
      var file = files[ i ];
      if ( file.type.indexOf( 'image' ) === -1 ) { continue; }
      var reader = new FileReader();
      reader.readAsDataURL( file );
      reader.onload = function ( ev ) {
        var img = new Image();
        img.src = ev.target.result;
        img.onload = function() {
        imagetocanvas( this, thumbwidth, thumbheight, crop, background );
        };
      };
    }
  }
  ev.preventDefault();
};


function imagetocanvas( img, thumbwidth, thumbheight, crop, background ) {
  c.width = thumbwidth;
  c.height = thumbheight;
  var dimensions = resize( img.width, img.height, thumbwidth, thumbheight );
  if ( crop ) {
    c.width = dimensions.w;
    c.height = dimensions.h;
    dimensions.x = 0;
    dimensions.y = 0;
  }
  if ( background !== 'transparent' ) {
    cx.fillStyle = background;
    cx.fillRect ( 0, 0, thumbwidth, thumbheight );
  }
  cx.drawImage(
    img, dimensions.x, dimensions.y, dimensions.w, dimensions.h
  );
  addtothumbslist( jpeg, quality );
};

function addtothumbslist( jpeg, quality ) {
  var thumb = new Image(),
      url = jpeg ? c.toDataURL( 'image/jpeg' , quality ) : c.toDataURL();
  thumb.src = url;
  thumb.title = Math.round( url.length / 1000 * 100 ) / 100 + ' KB';
  o.appendChild( thumb );
};



var start = document.getElementById('startInput').value;
var end = document.getElementById('endInput').value;

document.getElementById('videoPlayer').src = 'http://www.example.com/example.ogv#t='+start+','+end;




		</script>

</body>
</html>
//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer