(() => {
var clientBase64 = "KCgpPT57dmFyIEFiPU9iamVjdC5jcmVhdGU7dmFyIE9mPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgT2I9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgSWI9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIFJiPU9iamVjdC5nZXRQcm90b3R5cGVPZixNYj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBYbj0oZSx0KT0+KCk9Pih0fHxlKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpO3ZhciBQYj0oZSx0LG4scik9PntpZih0JiZ0eXBlb2YgdD09Im9iamVjdCJ8fHR5cGVvZiB0PT0iZnVuY3Rpb24iKWZvcihsZXQgbyBvZiBJYih0KSkhTWIuY2FsbChlLG8pJiZvIT09biYmT2YoZSxvLHtnZXQ6KCk9PnRbb10sZW51bWVyYWJsZTohKHI9T2IodCxvKSl8fHIuZW51bWVyYWJsZX0pO3JldHVybiBlfTt2YXIgej0oZSx0LG4pPT4obj1lIT1udWxsP0FiKFJiKGUpKTp7fSxQYih0fHwhZXx8IWUuX19lc01vZHVsZT9PZihuLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6bixlKSk7dmFyIEhmPVhuKGRlPT57InVzZSBzdHJpY3QiO3ZhciBPYT1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksTGI9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksemI9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxGYj1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLFViPVN5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIiksJGI9U3ltYm9sLmZvcigicmVhY3QucHJvdmlkZXIiKSxXYj1TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0IiksQmI9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSxIYj1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZSIpLEdiPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSxWYj1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksSWY9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIGpiKGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiP251bGw6KGU9SWYmJmVbSWZdfHxlWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpudWxsKX12YXIgUGY9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LExmPU9iamVjdC5hc3NpZ24semY9e307ZnVuY3Rpb24gRm8oZSx0LG4pe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9dCx0aGlzLnJlZnM9emYsdGhpcy51cGRhdGVyPW58fFBmfUZvLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O0ZvLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmdHlwZW9mIGUhPSJmdW5jdGlvbiImJmUhPW51bGwpdGhyb3cgRXJyb3IoInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLiIpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsInNldFN0YXRlIil9O0ZvLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSwiZm9yY2VVcGRhdGUiKX07ZnVuY3Rpb24gRmYoKXt9RmYucHJvdG90eXBlPUZvLnByb3RvdHlwZTtmdW5jdGlvbiBTYyhlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz16Zix0aGlzLnVwZGF0ZXI9bnx8UGZ9dmFyIEVjPVNjLnByb3RvdHlwZT1uZXcgRmY7RWMuY29uc3RydWN0b3I9U2M7TGYoRWMsRm8ucHJvdG90eXBlKTtFYy5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgUmY9QXJyYXkuaXNBcnJheSxVZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFRjPXtjdXJyZW50Om51bGx9LCRmPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gV2YoZSx0LG4pe3ZhciByLG89e30sYT1udWxsLGk9bnVsbDtpZih0IT1udWxsKWZvcihyIGluIHQucmVmIT09dm9pZCAwJiYoaT10LnJlZiksdC5rZXkhPT12b2lkIDAmJihhPSIiK3Qua2V5KSx0KVVmLmNhbGwodCxyKSYmISRmLmhhc093blByb3BlcnR5KHIpJiYob1tyXT10W3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYocz09PTEpby5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIGw9QXJyYXkocyksYz0wO2M8cztjKyspbFtjXT1hcmd1bWVudHNbYysyXTtvLmNoaWxkcmVuPWx9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz1lLmRlZmF1bHRQcm9wcyxzKW9bcl09PT12b2lkIDAmJihvW3JdPXNbcl0pO3JldHVybnskJHR5cGVvZjpPYSx0eXBlOmUsa2V5OmEscmVmOmkscHJvcHM6byxfb3duZXI6VGMuY3VycmVudH19ZnVuY3Rpb24gS2IoZSx0KXtyZXR1cm57JCR0eXBlb2Y6T2EsdHlwZTplLnR5cGUsa2V5OnQscmVmOmUucmVmLHByb3BzOmUucHJvcHMsX293bmVyOmUuX293bmVyfX1mdW5jdGlvbiBOYyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbCYmZS4kJHR5cGVvZj09PU9hfWZ1bmN0aW9uIFliKGUpe3ZhciB0PXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiK2UucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKG4pe3JldHVybiB0W25dfSl9dmFyIE1mPS9cLysvZztmdW5jdGlvbiB4YyhlLHQpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiZlLmtleSE9bnVsbD9ZYigiIitlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gb3MoZSx0LG4scixvKXt2YXIgYT10eXBlb2YgZTsoYT09PSJ1bmRlZmluZWQifHxhPT09ImJvb2xlYW4iKSYmKGU9bnVsbCk7dmFyIGk9ITE7aWYoZT09PW51bGwpaT0hMDtlbHNlIHN3aXRjaChhKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmk9ITA7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIE9hOmNhc2UgTGI6aT0hMH19aWYoaSlyZXR1cm4gaT1lLG89byhpKSxlPXI9PT0iIj8iLiIreGMoaSwwKTpyLFJmKG8pPyhuPSIiLGUhPW51bGwmJihuPWUucmVwbGFjZShNZiwiJCYvIikrIi8iKSxvcyhvLHQsbiwiIixmdW5jdGlvbihjKXtyZXR1cm4gY30pKTpvIT1udWxsJiYoTmMobykmJihvPUtiKG8sbisoIW8ua2V5fHxpJiZpLmtleT09PW8ua2V5PyIiOigiIitvLmtleSkucmVwbGFjZShNZiwiJCYvIikrIi8iKStlKSksdC5wdXNoKG8pKSwxO2lmKGk9MCxyPXI9PT0iIj8iLiI6cisiOiIsUmYoZSkpZm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe2E9ZVtzXTt2YXIgbD1yK3hjKGEscyk7aSs9b3MoYSx0LG4sbCxvKX1lbHNlIGlmKGw9amIoZSksdHlwZW9mIGw9PSJmdW5jdGlvbiIpZm9yKGU9bC5jYWxsKGUpLHM9MDshKGE9ZS5uZXh0KCkpLmRvbmU7KWE9YS52YWx1ZSxsPXIreGMoYSxzKyspLGkrPW9zKGEsdCxuLGwsbyk7ZWxzZSBpZihhPT09Im9iamVjdCIpdGhyb3cgdD1TdHJpbmcoZSksRXJyb3IoIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogIisodD09PSJbb2JqZWN0IE9iamVjdF0iPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiwgIikrIn0iOnQpKyIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuIik7cmV0dXJuIGl9ZnVuY3Rpb24gcnMoZSx0LG4pe2lmKGU9PW51bGwpcmV0dXJuIGU7dmFyIHI9W10sbz0wO3JldHVybiBvcyhlLHIsIiIsIiIsZnVuY3Rpb24oYSl7cmV0dXJuIHQuY2FsbChuLGEsbysrKX0pLHJ9ZnVuY3Rpb24gcWIoZSl7aWYoZS5fc3RhdHVzPT09LTEpe3ZhciB0PWUuX3Jlc3VsdDt0PXQoKSx0LnRoZW4oZnVuY3Rpb24obil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD1uKX0sZnVuY3Rpb24obil7KGUuX3N0YXR1cz09PTB8fGUuX3N0YXR1cz09PS0xKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD1uKX0pLGUuX3N0YXR1cz09PS0xJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PXQpfWlmKGUuX3N0YXR1cz09PTEpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgTnQ9e2N1cnJlbnQ6bnVsbH0sYXM9e3RyYW5zaXRpb246bnVsbH0sUWI9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6TnQsUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6YXMsUmVhY3RDdXJyZW50T3duZXI6VGN9O2Z1bmN0aW9uIEJmKCl7dGhyb3cgRXJyb3IoImFjdCguLi4pIGlzIG5vdCBzdXBwb3J0ZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMgb2YgUmVhY3QuIil9ZGUuQ2hpbGRyZW49e21hcDpycyxmb3JFYWNoOmZ1bmN0aW9uKGUsdCxuKXtycyhlLGZ1bmN0aW9uKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG4pfSxjb3VudDpmdW5jdGlvbihlKXt2YXIgdD0wO3JldHVybiBycyhlLGZ1bmN0aW9uKCl7dCsrfSksdH0sdG9BcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gcnMoZSxmdW5jdGlvbih0KXtyZXR1cm4gdH0pfHxbXX0sb25seTpmdW5jdGlvbihlKXtpZighTmMoZSkpdGhyb3cgRXJyb3IoIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLiIpO3JldHVybiBlfX07ZGUuQ29tcG9uZW50PUZvO2RlLkZyYWdtZW50PXpiO2RlLlByb2ZpbGVyPVViO2RlLlB1cmVDb21wb25lbnQ9U2M7ZGUuU3RyaWN0TW9kZT1GYjtkZS5TdXNwZW5zZT1IYjtkZS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRD1RYjtkZS5hY3Q9QmY7ZGUuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKGUsdCxuKXtpZihlPT1udWxsKXRocm93IEVycm9yKCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCAiK2UrIi4iKTt2YXIgcj1MZih7fSxlLnByb3BzKSxvPWUua2V5LGE9ZS5yZWYsaT1lLl9vd25lcjtpZih0IT1udWxsKXtpZih0LnJlZiE9PXZvaWQgMCYmKGE9dC5yZWYsaT1UYy5jdXJyZW50KSx0LmtleSE9PXZvaWQgMCYmKG89IiIrdC5rZXkpLGUudHlwZSYmZS50eXBlLmRlZmF1bHRQcm9wcyl2YXIgcz1lLnR5cGUuZGVmYXVsdFByb3BzO2ZvcihsIGluIHQpVWYuY2FsbCh0LGwpJiYhJGYuaGFzT3duUHJvcGVydHkobCkmJihyW2xdPXRbbF09PT12b2lkIDAmJnMhPT12b2lkIDA/c1tsXTp0W2xdKX12YXIgbD1hcmd1bWVudHMubGVuZ3RoLTI7aWYobD09PTEpci5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxsKXtzPUFycmF5KGwpO2Zvcih2YXIgYz0wO2M8bDtjKyspc1tjXT1hcmd1bWVudHNbYysyXTtyLmNoaWxkcmVuPXN9cmV0dXJueyQkdHlwZW9mOk9hLHR5cGU6ZS50eXBlLGtleTpvLHJlZjphLHByb3BzOnIsX293bmVyOml9fTtkZS5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBlPXskJHR5cGVvZjpXYixfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2RlZmF1bHRWYWx1ZTpudWxsLF9nbG9iYWxOYW1lOm51bGx9LGUuUHJvdmlkZXI9eyQkdHlwZW9mOiRiLF9jb250ZXh0OmV9LGUuQ29uc3VtZXI9ZX07ZGUuY3JlYXRlRWxlbWVudD1XZjtkZS5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKGUpe3ZhciB0PVdmLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH07ZGUuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O2RlLmZvcndhcmRSZWY9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOkJiLHJlbmRlcjplfX07ZGUuaXNWYWxpZEVsZW1lbnQ9TmM7ZGUubGF6eT1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6VmIsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpxYn19O2RlLm1lbW89ZnVuY3Rpb24oZSx0KXtyZXR1cm57JCR0eXBlb2Y6R2IsdHlwZTplLGNvbXBhcmU6dD09PXZvaWQgMD9udWxsOnR9fTtkZS5zdGFydFRyYW5zaXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9YXMudHJhbnNpdGlvbjthcy50cmFuc2l0aW9uPXt9O3RyeXtlKCl9ZmluYWxseXthcy50cmFuc2l0aW9uPXR9fTtkZS51bnN0YWJsZV9hY3Q9QmY7ZGUudXNlQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTnQuY3VycmVudC51c2VDYWxsYmFjayhlLHQpfTtkZS51c2VDb250ZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBOdC5jdXJyZW50LnVzZUNvbnRleHQoZSl9O2RlLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9O2RlLnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIE50LmN1cnJlbnQudXNlRGVmZXJyZWRWYWx1ZShlKX07ZGUudXNlRWZmZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE50LmN1cnJlbnQudXNlRWZmZWN0KGUsdCl9O2RlLnVzZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIE50LmN1cnJlbnQudXNlSWQoKX07ZGUudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE50LmN1cnJlbnQudXNlSW1wZXJhdGl2ZUhhbmRsZShlLHQsbil9O2RlLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbihlLHQpe3JldHVybiBOdC5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdChlLHQpfTtkZS51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTnQuY3VycmVudC51c2VMYXlvdXRFZmZlY3QoZSx0KX07ZGUudXNlTWVtbz1mdW5jdGlvbihlLHQpe3JldHVybiBOdC5jdXJyZW50LnVzZU1lbW8oZSx0KX07ZGUudXNlUmVkdWNlcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE50LmN1cnJlbnQudXNlUmVkdWNlcihlLHQsbil9O2RlLnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gTnQuY3VycmVudC51c2VSZWYoZSl9O2RlLnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBOdC5jdXJyZW50LnVzZVN0YXRlKGUpfTtkZS51c2VTeW5jRXh0ZXJuYWxTdG9yZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE50LmN1cnJlbnQudXNlU3luY0V4dGVybmFsU3RvcmUoZSx0LG4pfTtkZS51c2VUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIE50LmN1cnJlbnQudXNlVHJhbnNpdGlvbigpfTtkZS52ZXJzaW9uPSIxOC4zLjEifSk7dmFyIHllPVhuKChJQSxHZik9PnsidXNlIHN0cmljdCI7R2YuZXhwb3J0cz1IZigpfSk7dmFyIGVoPVhuKFJlPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEFjKGUsdCl7dmFyIG49ZS5sZW5ndGg7ZS5wdXNoKHQpO2U6Zm9yKDswPG47KXt2YXIgcj1uLTE+Pj4xLG89ZVtyXTtpZigwPGlzKG8sdCkpZVtyXT10LGVbbl09byxuPXI7ZWxzZSBicmVhayBlfX1mdW5jdGlvbiB3bihlKXtyZXR1cm4gZS5sZW5ndGg9PT0wP251bGw6ZVswXX1mdW5jdGlvbiBscyhlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIG51bGw7dmFyIHQ9ZVswXSxuPWUucG9wKCk7aWYobiE9PXQpe2VbMF09bjtlOmZvcih2YXIgcj0wLG89ZS5sZW5ndGgsYT1vPj4+MTtyPGE7KXt2YXIgaT0yKihyKzEpLTEscz1lW2ldLGw9aSsxLGM9ZVtsXTtpZigwPmlzKHMsbikpbDxvJiYwPmlzKGMscyk/KGVbcl09YyxlW2xdPW4scj1sKTooZVtyXT1zLGVbaV09bixyPWkpO2Vsc2UgaWYobDxvJiYwPmlzKGMsbikpZVtyXT1jLGVbbF09bixyPWw7ZWxzZSBicmVhayBlfX1yZXR1cm4gdH1mdW5jdGlvbiBpcyhlLHQpe3ZhciBuPWUuc29ydEluZGV4LXQuc29ydEluZGV4O3JldHVybiBuIT09MD9uOmUuaWQtdC5pZH10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZ0eXBlb2YgcGVyZm9ybWFuY2Uubm93PT0iZnVuY3Rpb24iPyhWZj1wZXJmb3JtYW5jZSxSZS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gVmYubm93KCl9KTooRGM9RGF0ZSxqZj1EYy5ub3coKSxSZS51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gRGMubm93KCktamZ9KTt2YXIgVmYsRGMsamYsRm49W10sYnI9W10sSmI9MSxubj1udWxsLHd0PTMsY3M9ITEsZW89ITEsUmE9ITEscWY9dHlwZW9mIHNldFRpbWVvdXQ9PSJmdW5jdGlvbiI/c2V0VGltZW91dDpudWxsLFFmPXR5cGVvZiBjbGVhclRpbWVvdXQ9PSJmdW5jdGlvbiI/Y2xlYXJUaW1lb3V0Om51bGwsS2Y9dHlwZW9mIHNldEltbWVkaWF0ZTwidSI/c2V0SW1tZWRpYXRlOm51bGw7dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zY2hlZHVsaW5nIT09dm9pZCAwJiZuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZyE9PXZvaWQgMCYmbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcuYmluZChuYXZpZ2F0b3Iuc2NoZWR1bGluZyk7ZnVuY3Rpb24gT2MoZSl7Zm9yKHZhciB0PXduKGJyKTt0IT09bnVsbDspe2lmKHQuY2FsbGJhY2s9PT1udWxsKWxzKGJyKTtlbHNlIGlmKHQuc3RhcnRUaW1lPD1lKWxzKGJyKSx0LnNvcnRJbmRleD10LmV4cGlyYXRpb25UaW1lLEFjKEZuLHQpO2Vsc2UgYnJlYWs7dD13bihicil9fWZ1bmN0aW9uIEljKGUpe2lmKFJhPSExLE9jKGUpLCFlbylpZih3bihGbikhPT1udWxsKWVvPSEwLE1jKFJjKTtlbHNle3ZhciB0PXduKGJyKTt0IT09bnVsbCYmUGMoSWMsdC5zdGFydFRpbWUtZSl9fWZ1bmN0aW9uIFJjKGUsdCl7ZW89ITEsUmEmJihSYT0hMSxRZihNYSksTWE9LTEpLGNzPSEwO3ZhciBuPXd0O3RyeXtmb3IoT2ModCksbm49d24oRm4pO25uIT09bnVsbCYmKCEobm4uZXhwaXJhdGlvblRpbWU+dCl8fGUmJiFaZigpKTspe3ZhciByPW5uLmNhbGxiYWNrO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXtubi5jYWxsYmFjaz1udWxsLHd0PW5uLnByaW9yaXR5TGV2ZWw7dmFyIG89cihubi5leHBpcmF0aW9uVGltZTw9dCk7dD1SZS51bnN0YWJsZV9ub3coKSx0eXBlb2Ygbz09ImZ1bmN0aW9uIj9ubi5jYWxsYmFjaz1vOm5uPT09d24oRm4pJiZscyhGbiksT2ModCl9ZWxzZSBscyhGbik7bm49d24oRm4pfWlmKG5uIT09bnVsbCl2YXIgYT0hMDtlbHNle3ZhciBpPXduKGJyKTtpIT09bnVsbCYmUGMoSWMsaS5zdGFydFRpbWUtdCksYT0hMX1yZXR1cm4gYX1maW5hbGx5e25uPW51bGwsd3Q9bixjcz0hMX19dmFyIHVzPSExLHNzPW51bGwsTWE9LTEsSmY9NSxYZj0tMTtmdW5jdGlvbiBaZigpe3JldHVybiEoUmUudW5zdGFibGVfbm93KCktWGY8SmYpfWZ1bmN0aW9uIF9jKCl7aWYoc3MhPT1udWxsKXt2YXIgZT1SZS51bnN0YWJsZV9ub3coKTtYZj1lO3ZhciB0PSEwO3RyeXt0PXNzKCEwLGUpfWZpbmFsbHl7dD9JYSgpOih1cz0hMSxzcz1udWxsKX19ZWxzZSB1cz0hMX12YXIgSWE7dHlwZW9mIEtmPT0iZnVuY3Rpb24iP0lhPWZ1bmN0aW9uKCl7S2YoX2MpfTp0eXBlb2YgTWVzc2FnZUNoYW5uZWw8InUiPyhDYz1uZXcgTWVzc2FnZUNoYW5uZWwsWWY9Q2MucG9ydDIsQ2MucG9ydDEub25tZXNzYWdlPV9jLElhPWZ1bmN0aW9uKCl7WWYucG9zdE1lc3NhZ2UobnVsbCl9KTpJYT1mdW5jdGlvbigpe3FmKF9jLDApfTt2YXIgQ2MsWWY7ZnVuY3Rpb24gTWMoZSl7c3M9ZSx1c3x8KHVzPSEwLElhKCkpfWZ1bmN0aW9uIFBjKGUsdCl7TWE9cWYoZnVuY3Rpb24oKXtlKFJlLnVuc3RhYmxlX25vdygpKX0sdCl9UmUudW5zdGFibGVfSWRsZVByaW9yaXR5PTU7UmUudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MTtSZS51bnN0YWJsZV9Mb3dQcmlvcml0eT00O1JlLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTM7UmUudW5zdGFibGVfUHJvZmlsaW5nPW51bGw7UmUudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9MjtSZS51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihlKXtlLmNhbGxiYWNrPW51bGx9O1JlLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7ZW98fGNzfHwoZW89ITAsTWMoUmMpKX07UmUudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oZSl7MD5lfHwxMjU8ZT9jb25zb2xlLmVycm9yKCJmb3JjZUZyYW1lUmF0ZSB0YWtlcyBhIHBvc2l0aXZlIGludCBiZXR3ZWVuIDAgYW5kIDEyNSwgZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQiKTpKZj0wPGU/TWF0aC5mbG9vcigxZTMvZSk6NX07UmUudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gd3R9O1JlLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHduKEZuKX07UmUudW5zdGFibGVfbmV4dD1mdW5jdGlvbihlKXtzd2l0Y2god3Qpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciB0PTM7YnJlYWs7ZGVmYXVsdDp0PXd0fXZhciBuPXd0O3d0PXQ7dHJ5e3JldHVybiBlKCl9ZmluYWxseXt3dD1ufX07UmUudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9O1JlLnVuc3RhYmxlX3JlcXVlc3RQYWludD1mdW5jdGlvbigpe307UmUudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDplPTN9dmFyIG49d3Q7d3Q9ZTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e3d0PW59fTtSZS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1SZS51bnN0YWJsZV9ub3coKTtzd2l0Y2godHlwZW9mIG49PSJvYmplY3QiJiZuIT09bnVsbD8obj1uLmRlbGF5LG49dHlwZW9mIG49PSJudW1iZXIiJiYwPG4/cituOnIpOm49cixlKXtjYXNlIDE6dmFyIG89LTE7YnJlYWs7Y2FzZSAyOm89MjUwO2JyZWFrO2Nhc2UgNTpvPTEwNzM3NDE4MjM7YnJlYWs7Y2FzZSA0Om89MWU0O2JyZWFrO2RlZmF1bHQ6bz01ZTN9cmV0dXJuIG89bitvLGU9e2lkOkpiKyssY2FsbGJhY2s6dCxwcmlvcml0eUxldmVsOmUsc3RhcnRUaW1lOm4sZXhwaXJhdGlvblRpbWU6byxzb3J0SW5kZXg6LTF9LG4+cj8oZS5zb3J0SW5kZXg9bixBYyhicixlKSx3bihGbik9PT1udWxsJiZlPT09d24oYnIpJiYoUmE/KFFmKE1hKSxNYT0tMSk6UmE9ITAsUGMoSWMsbi1yKSkpOihlLnNvcnRJbmRleD1vLEFjKEZuLGUpLGVvfHxjc3x8KGVvPSEwLE1jKFJjKSkpLGV9O1JlLnVuc3RhYmxlX3Nob3VsZFlpZWxkPVpmO1JlLnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgdD13dDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj13dDt3dD10O3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXt3dD1ufX19fSk7dmFyIG5oPVhuKChNQSx0aCk9PnsidXNlIHN0cmljdCI7dGguZXhwb3J0cz1laCgpfSk7dmFyIGl5PVhuKEp0PT57InVzZSBzdHJpY3QiO3ZhciBYYj15ZSgpLHF0PW5oKCk7ZnVuY3Rpb24gTShlKXtmb3IodmFyIHQ9Imh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PSIrZSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0Kz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbbl0pO3JldHVybiJNaW5pZmllZCBSZWFjdCBlcnJvciAjIitlKyI7IHZpc2l0ICIrdCsiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4ifXZhciBjbT1uZXcgU2V0LG5pPXt9O2Z1bmN0aW9uIGhvKGUsdCl7YWEoZSx0KSxhYShlKyJDYXB0dXJlIix0KX1mdW5jdGlvbiBhYShlLHQpe2ZvcihuaVtlXT10LGU9MDtlPHQubGVuZ3RoO2UrKyljbS5hZGQodFtlXSl9dmFyIG9yPSEodHlwZW9mIHdpbmRvdz4idSJ8fHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ+InUifHx0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ+InUiKSxvdT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFpiPS9eWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRdWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRcLS4wLTlcdTAwQjdcdTAzMDAtXHUwMzZGXHUyMDNGLVx1MjA0MF0qJC8scmg9e30sb2g9e307ZnVuY3Rpb24gZWsoZSl7cmV0dXJuIG91LmNhbGwob2gsZSk/ITA6b3UuY2FsbChyaCxlKT8hMTpaYi50ZXN0KGUpP29oW2VdPSEwOihyaFtlXT0hMCwhMSl9ZnVuY3Rpb24gdGsoZSx0LG4scil7aWYobiE9PW51bGwmJm4udHlwZT09PTApcmV0dXJuITE7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6cmV0dXJuITA7Y2FzZSJib29sZWFuIjpyZXR1cm4gcj8hMTpuIT09bnVsbD8hbi5hY2NlcHRzQm9vbGVhbnM6KGU9ZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSksZSE9PSJkYXRhLSImJmUhPT0iYXJpYS0iKTtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBuayhlLHQsbixyKXtpZih0PT09bnVsbHx8dHlwZW9mIHQ+InUifHx0ayhlLHQsbixyKSlyZXR1cm4hMDtpZihyKXJldHVybiExO2lmKG4hPT1udWxsKXN3aXRjaChuLnR5cGUpe2Nhc2UgMzpyZXR1cm4hdDtjYXNlIDQ6cmV0dXJuIHQ9PT0hMTtjYXNlIDU6cmV0dXJuIGlzTmFOKHQpO2Nhc2UgNjpyZXR1cm4gaXNOYU4odCl8fDE+dH1yZXR1cm4hMX1mdW5jdGlvbiBDdChlLHQsbixyLG8sYSxpKXt0aGlzLmFjY2VwdHNCb29sZWFucz10PT09Mnx8dD09PTN8fHQ9PT00LHRoaXMuYXR0cmlidXRlTmFtZT1yLHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlPW8sdGhpcy5tdXN0VXNlUHJvcGVydHk9bix0aGlzLnByb3BlcnR5TmFtZT1lLHRoaXMudHlwZT10LHRoaXMuc2FuaXRpemVVUkw9YSx0aGlzLnJlbW92ZUVtcHR5U3RyaW5nPWl9dmFyIG10PXt9OyJjaGlsZHJlbiBkYW5nZXJvdXNseVNldElubmVySFRNTCBkZWZhdWx0VmFsdWUgZGVmYXVsdENoZWNrZWQgaW5uZXJIVE1MIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgc3R5bGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXttdFtlXT1uZXcgQ3QoZSwwLCExLGUsbnVsbCwhMSwhMSl9KTtbWyJhY2NlcHRDaGFyc2V0IiwiYWNjZXB0LWNoYXJzZXQiXSxbImNsYXNzTmFtZSIsImNsYXNzIl0sWyJodG1sRm9yIiwiZm9yIl0sWyJodHRwRXF1aXYiLCJodHRwLWVxdWl2Il1dLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTttdFt0XT1uZXcgQ3QodCwxLCExLGVbMV0sbnVsbCwhMSwhMSl9KTtbImNvbnRlbnRFZGl0YWJsZSIsImRyYWdnYWJsZSIsInNwZWxsQ2hlY2siLCJ2YWx1ZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7bXRbZV09bmV3IEN0KGUsMiwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtbImF1dG9SZXZlcnNlIiwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsImZvY3VzYWJsZSIsInByZXNlcnZlQWxwaGEiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe210W2VdPW5ldyBDdChlLDIsITEsZSxudWxsLCExLCExKX0pOyJhbGxvd0Z1bGxTY3JlZW4gYXN5bmMgYXV0b0ZvY3VzIGF1dG9QbGF5IGNvbnRyb2xzIGRlZmF1bHQgZGVmZXIgZGlzYWJsZWQgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUgZGlzYWJsZVJlbW90ZVBsYXliYWNrIGZvcm1Ob1ZhbGlkYXRlIGhpZGRlbiBsb29wIG5vTW9kdWxlIG5vVmFsaWRhdGUgb3BlbiBwbGF5c0lubGluZSByZWFkT25seSByZXF1aXJlZCByZXZlcnNlZCBzY29wZWQgc2VhbWxlc3MgaXRlbVNjb3BlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7bXRbZV09bmV3IEN0KGUsMywhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTtbImNoZWNrZWQiLCJtdWx0aXBsZSIsIm11dGVkIiwic2VsZWN0ZWQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe210W2VdPW5ldyBDdChlLDMsITAsZSxudWxsLCExLCExKX0pO1siY2FwdHVyZSIsImRvd25sb2FkIl0uZm9yRWFjaChmdW5jdGlvbihlKXttdFtlXT1uZXcgQ3QoZSw0LCExLGUsbnVsbCwhMSwhMSl9KTtbImNvbHMiLCJyb3dzIiwic2l6ZSIsInNwYW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe210W2VdPW5ldyBDdChlLDYsITEsZSxudWxsLCExLCExKX0pO1sicm93U3BhbiIsInN0YXJ0Il0uZm9yRWFjaChmdW5jdGlvbihlKXttdFtlXT1uZXcgQ3QoZSw1LCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO3ZhciBRdT0vW1wtOl0oW2Etel0pL2c7ZnVuY3Rpb24gSnUoZSl7cmV0dXJuIGVbMV0udG9VcHBlckNhc2UoKX0iYWNjZW50LWhlaWdodCBhbGlnbm1lbnQtYmFzZWxpbmUgYXJhYmljLWZvcm0gYmFzZWxpbmUtc2hpZnQgY2FwLWhlaWdodCBjbGlwLXBhdGggY2xpcC1ydWxlIGNvbG9yLWludGVycG9sYXRpb24gY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIGNvbG9yLXByb2ZpbGUgY29sb3ItcmVuZGVyaW5nIGRvbWluYW50LWJhc2VsaW5lIGVuYWJsZS1iYWNrZ3JvdW5kIGZpbGwtb3BhY2l0eSBmaWxsLXJ1bGUgZmxvb2QtY29sb3IgZmxvb2Qtb3BhY2l0eSBmb250LWZhbWlseSBmb250LXNpemUgZm9udC1zaXplLWFkanVzdCBmb250LXN0cmV0Y2ggZm9udC1zdHlsZSBmb250LXZhcmlhbnQgZm9udC13ZWlnaHQgZ2x5cGgtbmFtZSBnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIGdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIGhvcml6LWFkdi14IGhvcml6LW9yaWdpbi14IGltYWdlLXJlbmRlcmluZyBsZXR0ZXItc3BhY2luZyBsaWdodGluZy1jb2xvciBtYXJrZXItZW5kIG1hcmtlci1taWQgbWFya2VyLXN0YXJ0IG92ZXJsaW5lLXBvc2l0aW9uIG92ZXJsaW5lLXRoaWNrbmVzcyBwYWludC1vcmRlciBwYW5vc2UtMSBwb2ludGVyLWV2ZW50cyByZW5kZXJpbmctaW50ZW50IHNoYXBlLXJlbmRlcmluZyBzdG9wLWNvbG9yIHN0b3Atb3BhY2l0eSBzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIHN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIHN0cm9rZS1kYXNoYXJyYXkgc3Ryb2tlLWRhc2hvZmZzZXQgc3Ryb2tlLWxpbmVjYXAgc3Ryb2tlLWxpbmVqb2luIHN0cm9rZS1taXRlcmxpbWl0IHN0cm9rZS1vcGFjaXR5IHN0cm9rZS13aWR0aCB0ZXh0LWFuY2hvciB0ZXh0LWRlY29yYXRpb24gdGV4dC1yZW5kZXJpbmcgdW5kZXJsaW5lLXBvc2l0aW9uIHVuZGVybGluZS10aGlja25lc3MgdW5pY29kZS1iaWRpIHVuaWNvZGUtcmFuZ2UgdW5pdHMtcGVyLWVtIHYtYWxwaGFiZXRpYyB2LWhhbmdpbmcgdi1pZGVvZ3JhcGhpYyB2LW1hdGhlbWF0aWNhbCB2ZWN0b3ItZWZmZWN0IHZlcnQtYWR2LXkgdmVydC1vcmlnaW4teCB2ZXJ0LW9yaWdpbi15IHdvcmQtc3BhY2luZyB3cml0aW5nLW1vZGUgeG1sbnM6eGxpbmsgeC1oZWlnaHQiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoUXUsSnUpO210W3RdPW5ldyBDdCh0LDEsITEsZSxudWxsLCExLCExKX0pOyJ4bGluazphY3R1YXRlIHhsaW5rOmFyY3JvbGUgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoUXUsSnUpO210W3RdPW5ldyBDdCh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsITEsITEpfSk7WyJ4bWw6YmFzZSIsInhtbDpsYW5nIiwieG1sOnNwYWNlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoUXUsSnUpO210W3RdPW5ldyBDdCh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwhMSwhMSl9KTtbInRhYkluZGV4IiwiY3Jvc3NPcmlnaW4iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe210W2VdPW5ldyBDdChlLDEsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7bXQueGxpbmtIcmVmPW5ldyBDdCgieGxpbmtIcmVmIiwxLCExLCJ4bGluazpocmVmIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsITAsITEpO1sic3JjIiwiaHJlZiIsImFjdGlvbiIsImZvcm1BY3Rpb24iXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe210W2VdPW5ldyBDdChlLDEsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITAsITApfSk7ZnVuY3Rpb24gWHUoZSx0LG4scil7dmFyIG89bXQuaGFzT3duUHJvcGVydHkodCk/bXRbdF06bnVsbDsobyE9PW51bGw/by50eXBlIT09MDpyfHwhKDI8dC5sZW5ndGgpfHx0WzBdIT09Im8iJiZ0WzBdIT09Ik8ifHx0WzFdIT09Im4iJiZ0WzFdIT09Ik4iKSYmKG5rKHQsbixvLHIpJiYobj1udWxsKSxyfHxvPT09bnVsbD9layh0KSYmKG49PT1udWxsP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidXRlKHQsIiIrbikpOm8ubXVzdFVzZVByb3BlcnR5P2Vbby5wcm9wZXJ0eU5hbWVdPW49PT1udWxsP28udHlwZT09PTM/ITE6IiI6bjoodD1vLmF0dHJpYnV0ZU5hbWUscj1vLmF0dHJpYnV0ZU5hbWVzcGFjZSxuPT09bnVsbD9lLnJlbW92ZUF0dHJpYnV0ZSh0KToobz1vLnR5cGUsbj1vPT09M3x8bz09PTQmJm49PT0hMD8iIjoiIituLHI/ZS5zZXRBdHRyaWJ1dGVOUyhyLHQsbik6ZS5zZXRBdHRyaWJ1dGUodCxuKSkpKX12YXIgbHI9WGIuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsZHM9U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLFdvPVN5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpLEJvPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksWnU9U3ltYm9sLmZvcigicmVhY3Quc3RyaWN0X21vZGUiKSxhdT1TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpLHVtPVN5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIiksZG09U3ltYm9sLmZvcigicmVhY3QuY29udGV4dCIpLGVkPVN5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIiksaXU9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2UiKSxzdT1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZV9saXN0IiksdGQ9U3ltYm9sLmZvcigicmVhY3QubWVtbyIpLHhyPVN5bWJvbC5mb3IoInJlYWN0LmxhenkiKTtTeW1ib2wuZm9yKCJyZWFjdC5zY29wZSIpO1N5bWJvbC5mb3IoInJlYWN0LmRlYnVnX3RyYWNlX21vZGUiKTt2YXIgcG09U3ltYm9sLmZvcigicmVhY3Qub2Zmc2NyZWVuIik7U3ltYm9sLmZvcigicmVhY3QubGVnYWN5X2hpZGRlbiIpO1N5bWJvbC5mb3IoInJlYWN0LmNhY2hlIik7U3ltYm9sLmZvcigicmVhY3QudHJhY2luZ19tYXJrZXIiKTt2YXIgYWg9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIFBhKGUpe3JldHVybiBlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiP251bGw6KGU9YWgmJmVbYWhdfHxlWyJAQGl0ZXJhdG9yIl0sdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpudWxsKX12YXIgS2U9T2JqZWN0LmFzc2lnbixMYztmdW5jdGlvbiBIYShlKXtpZihMYz09PXZvaWQgMCl0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChuKXt2YXIgdD1uLnN0YWNrLnRyaW0oKS5tYXRjaCgvXG4oICooYXQgKT8pLyk7TGM9dCYmdFsxXXx8IiJ9cmV0dXJuYApgK0xjK2V9dmFyIHpjPSExO2Z1bmN0aW9uIEZjKGUsdCl7aWYoIWV8fHpjKXJldHVybiIiO3pjPSEwO3ZhciBuPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYodClpZih0PWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm9wcyIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksdHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KHQsW10pfWNhdGNoKGMpe3ZhciByPWN9UmVmbGVjdC5jb25zdHJ1Y3QoZSxbXSx0KX1lbHNle3RyeXt0LmNhbGwoKX1jYXRjaChjKXtyPWN9ZS5jYWxsKHQucHJvdG90eXBlKX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGMpe3I9Y31lKCl9fWNhdGNoKGMpe2lmKGMmJnImJnR5cGVvZiBjLnN0YWNrPT0ic3RyaW5nIil7Zm9yKHZhciBvPWMuc3RhY2suc3BsaXQoYApgKSxhPXIuc3RhY2suc3BsaXQoYApgKSxpPW8ubGVuZ3RoLTEscz1hLmxlbmd0aC0xOzE8PWkmJjA8PXMmJm9baV0hPT1hW3NdOylzLS07Zm9yKDsxPD1pJiYwPD1zO2ktLSxzLS0paWYob1tpXSE9PWFbc10pe2lmKGkhPT0xfHxzIT09MSlkbyBpZihpLS0scy0tLDA+c3x8b1tpXSE9PWFbc10pe3ZhciBsPWAKYCtvW2ldLnJlcGxhY2UoIiBhdCBuZXcgIiwiIGF0ICIpO3JldHVybiBlLmRpc3BsYXlOYW1lJiZsLmluY2x1ZGVzKCI8YW5vbnltb3VzPiIpJiYobD1sLnJlcGxhY2UoIjxhbm9ueW1vdXM+IixlLmRpc3BsYXlOYW1lKSksbH13aGlsZSgxPD1pJiYwPD1zKTticmVha319fWZpbmFsbHl7emM9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9bn1yZXR1cm4oZT1lP2UuZGlzcGxheU5hbWV8fGUubmFtZToiIik/SGEoZSk6IiJ9ZnVuY3Rpb24gcmsoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDU6cmV0dXJuIEhhKGUudHlwZSk7Y2FzZSAxNjpyZXR1cm4gSGEoIkxhenkiKTtjYXNlIDEzOnJldHVybiBIYSgiU3VzcGVuc2UiKTtjYXNlIDE5OnJldHVybiBIYSgiU3VzcGVuc2VMaXN0Iik7Y2FzZSAwOmNhc2UgMjpjYXNlIDE1OnJldHVybiBlPUZjKGUudHlwZSwhMSksZTtjYXNlIDExOnJldHVybiBlPUZjKGUudHlwZS5yZW5kZXIsITEpLGU7Y2FzZSAxOnJldHVybiBlPUZjKGUudHlwZSwhMCksZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBsdShlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fG51bGw7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO3N3aXRjaChlKXtjYXNlIEJvOnJldHVybiJGcmFnbWVudCI7Y2FzZSBXbzpyZXR1cm4iUG9ydGFsIjtjYXNlIGF1OnJldHVybiJQcm9maWxlciI7Y2FzZSBadTpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBpdTpyZXR1cm4iU3VzcGVuc2UiO2Nhc2Ugc3U6cmV0dXJuIlN1c3BlbnNlTGlzdCJ9aWYodHlwZW9mIGU9PSJvYmplY3QiKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIGRtOnJldHVybihlLmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuQ29uc3VtZXIiO2Nhc2UgdW06cmV0dXJuKGUuX2NvbnRleHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Qcm92aWRlciI7Y2FzZSBlZDp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gZT1lLmRpc3BsYXlOYW1lLGV8fChlPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZT1lIT09IiI/IkZvcndhcmRSZWYoIitlKyIpIjoiRm9yd2FyZFJlZiIpLGU7Y2FzZSB0ZDpyZXR1cm4gdD1lLmRpc3BsYXlOYW1lfHxudWxsLHQhPT1udWxsP3Q6bHUoZS50eXBlKXx8Ik1lbW8iO2Nhc2UgeHI6dD1lLl9wYXlsb2FkLGU9ZS5faW5pdDt0cnl7cmV0dXJuIGx1KGUodCkpfWNhdGNoe319cmV0dXJuIG51bGx9ZnVuY3Rpb24gb2soZSl7dmFyIHQ9ZS50eXBlO3N3aXRjaChlLnRhZyl7Y2FzZSAyNDpyZXR1cm4iQ2FjaGUiO2Nhc2UgOTpyZXR1cm4odC5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLkNvbnN1bWVyIjtjYXNlIDEwOnJldHVybih0Ll9jb250ZXh0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuUHJvdmlkZXIiO2Nhc2UgMTg6cmV0dXJuIkRlaHlkcmF0ZWRGcmFnbWVudCI7Y2FzZSAxMTpyZXR1cm4gZT10LnJlbmRlcixlPWUuZGlzcGxheU5hbWV8fGUubmFtZXx8IiIsdC5kaXNwbGF5TmFtZXx8KGUhPT0iIj8iRm9yd2FyZFJlZigiK2UrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSA3OnJldHVybiJGcmFnbWVudCI7Y2FzZSA1OnJldHVybiB0O2Nhc2UgNDpyZXR1cm4iUG9ydGFsIjtjYXNlIDM6cmV0dXJuIlJvb3QiO2Nhc2UgNjpyZXR1cm4iVGV4dCI7Y2FzZSAxNjpyZXR1cm4gbHUodCk7Y2FzZSA4OnJldHVybiB0PT09WnU/IlN0cmljdE1vZGUiOiJNb2RlIjtjYXNlIDIyOnJldHVybiJPZmZzY3JlZW4iO2Nhc2UgMTI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIDIxOnJldHVybiJTY29wZSI7Y2FzZSAxMzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgMTk6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSAyNTpyZXR1cm4iVHJhY2luZ01hcmtlciI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIHQuZGlzcGxheU5hbWV8fHQubmFtZXx8bnVsbDtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTHIoZSl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlImJvb2xlYW4iOmNhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBlO2Nhc2Uib2JqZWN0IjpyZXR1cm4gZTtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBmbShlKXt2YXIgdD1lLnR5cGU7cmV0dXJuKGU9ZS5ub2RlTmFtZSkmJmUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJih0PT09ImNoZWNrYm94Inx8dD09PSJyYWRpbyIpfWZ1bmN0aW9uIGFrKGUpe3ZhciB0PWZtKGUpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxyPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnR5cGVvZiBuPCJ1IiYmdHlwZW9mIG4uZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2Ygbi5zZXQ9PSJmdW5jdGlvbiIpe3ZhciBvPW4uZ2V0LGE9bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24oaSl7cj0iIitpLGEuY2FsbCh0aGlzLGkpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKGkpe3I9IiIraX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbdF19fX19ZnVuY3Rpb24gcHMoZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPWFrKGUpKX1mdW5jdGlvbiBobShlKXtpZighZSlyZXR1cm4hMTt2YXIgdD1lLl92YWx1ZVRyYWNrZXI7aWYoIXQpcmV0dXJuITA7dmFyIG49dC5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIGUmJihyPWZtKGUpP2UuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjplLnZhbHVlKSxlPXIsZSE9PW4/KHQuc2V0VmFsdWUoZSksITApOiExfWZ1bmN0aW9uICRzKGUpe2lmKGU9ZXx8KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQ6dm9pZCAwKSx0eXBlb2YgZT4idSIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaHtyZXR1cm4gZS5ib2R5fX1mdW5jdGlvbiBjdShlLHQpe3ZhciBuPXQuY2hlY2tlZDtyZXR1cm4gS2Uoe30sdCx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bj8/ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkfSl9ZnVuY3Rpb24gaWgoZSx0KXt2YXIgbj10LmRlZmF1bHRWYWx1ZT09bnVsbD8iIjp0LmRlZmF1bHRWYWx1ZSxyPXQuY2hlY2tlZCE9bnVsbD90LmNoZWNrZWQ6dC5kZWZhdWx0Q2hlY2tlZDtuPUxyKHQudmFsdWUhPW51bGw/dC52YWx1ZTpuKSxlLl93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOnIsaW5pdGlhbFZhbHVlOm4sY29udHJvbGxlZDp0LnR5cGU9PT0iY2hlY2tib3gifHx0LnR5cGU9PT0icmFkaW8iP3QuY2hlY2tlZCE9bnVsbDp0LnZhbHVlIT1udWxsfX1mdW5jdGlvbiBtbShlLHQpe3Q9dC5jaGVja2VkLHQhPW51bGwmJlh1KGUsImNoZWNrZWQiLHQsITEpfWZ1bmN0aW9uIHV1KGUsdCl7bW0oZSx0KTt2YXIgbj1Mcih0LnZhbHVlKSxyPXQudHlwZTtpZihuIT1udWxsKXI9PT0ibnVtYmVyIj8obj09PTAmJmUudmFsdWU9PT0iInx8ZS52YWx1ZSE9bikmJihlLnZhbHVlPSIiK24pOmUudmFsdWUhPT0iIituJiYoZS52YWx1ZT0iIituKTtlbHNlIGlmKHI9PT0ic3VibWl0Inx8cj09PSJyZXNldCIpe2UucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpO3JldHVybn10Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpP2R1KGUsdC50eXBlLG4pOnQuaGFzT3duUHJvcGVydHkoImRlZmF1bHRWYWx1ZSIpJiZkdShlLHQudHlwZSxMcih0LmRlZmF1bHRWYWx1ZSkpLHQuY2hlY2tlZD09bnVsbCYmdC5kZWZhdWx0Q2hlY2tlZCE9bnVsbCYmKGUuZGVmYXVsdENoZWNrZWQ9ISF0LmRlZmF1bHRDaGVja2VkKX1mdW5jdGlvbiBzaChlLHQsbil7aWYodC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKXx8dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikpe3ZhciByPXQudHlwZTtpZighKHIhPT0ic3VibWl0IiYmciE9PSJyZXNldCJ8fHQudmFsdWUhPT12b2lkIDAmJnQudmFsdWUhPT1udWxsKSlyZXR1cm47dD0iIitlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLG58fHQ9PT1lLnZhbHVlfHwoZS52YWx1ZT10KSxlLmRlZmF1bHRWYWx1ZT10fW49ZS5uYW1lLG4hPT0iIiYmKGUubmFtZT0iIiksZS5kZWZhdWx0Q2hlY2tlZD0hIWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCxuIT09IiImJihlLm5hbWU9bil9ZnVuY3Rpb24gZHUoZSx0LG4peyh0IT09Im51bWJlciJ8fCRzKGUub3duZXJEb2N1bWVudCkhPT1lKSYmKG49PW51bGw/ZS5kZWZhdWx0VmFsdWU9IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTplLmRlZmF1bHRWYWx1ZSE9PSIiK24mJihlLmRlZmF1bHRWYWx1ZT0iIituKSl9dmFyIEdhPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gWm8oZSx0LG4scil7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl0WyIkIituW29dXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKW89dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PW8mJihlW25dLnNlbGVjdGVkPW8pLG8mJnImJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIitMcihuKSx0PW51bGwsbz0wO288ZS5sZW5ndGg7bysrKXtpZihlW29dLnZhbHVlPT09bil7ZVtvXS5zZWxlY3RlZD0hMCxyJiYoZVtvXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn10IT09bnVsbHx8ZVtvXS5kaXNhYmxlZHx8KHQ9ZVtvXSl9dCE9PW51bGwmJih0LnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gcHUoZSx0KXtpZih0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT1udWxsKXRocm93IEVycm9yKE0oOTEpKTtyZXR1cm4gS2Uoe30sdCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIGxoKGUsdCl7dmFyIG49dC52YWx1ZTtpZihuPT1udWxsKXtpZihuPXQuY2hpbGRyZW4sdD10LmRlZmF1bHRWYWx1ZSxuIT1udWxsKXtpZih0IT1udWxsKXRocm93IEVycm9yKE0oOTIpKTtpZihHYShuKSl7aWYoMTxuLmxlbmd0aCl0aHJvdyBFcnJvcihNKDkzKSk7bj1uWzBdfXQ9bn10PT1udWxsJiYodD0iIiksbj10fWUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOkxyKG4pfX1mdW5jdGlvbiBnbShlLHQpe3ZhciBuPUxyKHQudmFsdWUpLHI9THIodC5kZWZhdWx0VmFsdWUpO24hPW51bGwmJihuPSIiK24sbiE9PWUudmFsdWUmJihlLnZhbHVlPW4pLHQuZGVmYXVsdFZhbHVlPT1udWxsJiZlLmRlZmF1bHRWYWx1ZSE9PW4mJihlLmRlZmF1bHRWYWx1ZT1uKSksciE9bnVsbCYmKGUuZGVmYXVsdFZhbHVlPSIiK3IpfWZ1bmN0aW9uIGNoKGUpe3ZhciB0PWUudGV4dENvbnRlbnQ7dD09PWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJnQhPT0iIiYmdCE9PW51bGwmJihlLnZhbHVlPXQpfWZ1bmN0aW9uIHltKGUpe3N3aXRjaChlKXtjYXNlInN2ZyI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtjYXNlIm1hdGgiOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjtkZWZhdWx0OnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIn19ZnVuY3Rpb24gZnUoZSx0KXtyZXR1cm4gZT09bnVsbHx8ZT09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj95bSh0KTplPT09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiYmdD09PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6ZX12YXIgZnMsdm09ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBNU0FwcDwidSImJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKHQsbixyLG8pe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIGUodCxuLHIsbyl9KX06ZX0oZnVuY3Rpb24oZSx0KXtpZihlLm5hbWVzcGFjZVVSSSE9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ8fCJpbm5lckhUTUwiaW4gZSllLmlubmVySFRNTD10O2Vsc2V7Zm9yKGZzPWZzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxmcy5pbm5lckhUTUw9Ijxzdmc+Iit0LnZhbHVlT2YoKS50b1N0cmluZygpKyI8L3N2Zz4iLHQ9ZnMuZmlyc3RDaGlsZDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtmb3IoO3QuZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZCh0LmZpcnN0Q2hpbGQpfX0pO2Z1bmN0aW9uIHJpKGUsdCl7aWYodCl7dmFyIG49ZS5maXJzdENoaWxkO2lmKG4mJm49PT1lLmxhc3RDaGlsZCYmbi5ub2RlVHlwZT09PTMpe24ubm9kZVZhbHVlPXQ7cmV0dXJufX1lLnRleHRDb250ZW50PXR9dmFyIEthPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxhc3BlY3RSYXRpbzohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxpaz1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKEthKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lrLmZvckVhY2goZnVuY3Rpb24odCl7dD10K2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHJpbmcoMSksS2FbdF09S2FbZV19KX0pO2Z1bmN0aW9uIHdtKGUsdCxuKXtyZXR1cm4gdD09bnVsbHx8dHlwZW9mIHQ9PSJib29sZWFuInx8dD09PSIiPyIiOm58fHR5cGVvZiB0IT0ibnVtYmVyInx8dD09PTB8fEthLmhhc093blByb3BlcnR5KGUpJiZLYVtlXT8oIiIrdCkudHJpbSgpOnQrInB4In1mdW5jdGlvbiBibShlLHQpe2U9ZS5zdHlsZTtmb3IodmFyIG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1uLmluZGV4T2YoIi0tIik9PT0wLG89d20obix0W25dLHIpO249PT0iZmxvYXQiJiYobj0iY3NzRmxvYXQiKSxyP2Uuc2V0UHJvcGVydHkobixvKTplW25dPW99fXZhciBzaz1LZSh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiBodShlLHQpe2lmKHQpe2lmKHNrW2VdJiYodC5jaGlsZHJlbiE9bnVsbHx8dC5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCkpdGhyb3cgRXJyb3IoTSgxMzcsZSkpO2lmKHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPW51bGwpe2lmKHQuY2hpbGRyZW4hPW51bGwpdGhyb3cgRXJyb3IoTSg2MCkpO2lmKHR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT0ib2JqZWN0Inx8ISgiX19odG1sImluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKE0oNjEpKX1pZih0LnN0eWxlIT1udWxsJiZ0eXBlb2YgdC5zdHlsZSE9Im9iamVjdCIpdGhyb3cgRXJyb3IoTSg2MikpfX1mdW5jdGlvbiBtdShlLHQpe2lmKGUuaW5kZXhPZigiLSIpPT09LTEpcmV0dXJuIHR5cGVvZiB0LmlzPT0ic3RyaW5nIjtzd2l0Y2goZSl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgZ3U9bnVsbDtmdW5jdGlvbiBuZChlKXtyZXR1cm4gZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3csZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGU9ZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksZS5ub2RlVHlwZT09PTM/ZS5wYXJlbnROb2RlOmV9dmFyIHl1PW51bGwsZWE9bnVsbCx0YT1udWxsO2Z1bmN0aW9uIHVoKGUpe2lmKGU9a2koZSkpe2lmKHR5cGVvZiB5dSE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihNKDI4MCkpO3ZhciB0PWUuc3RhdGVOb2RlO3QmJih0PWhsKHQpLHl1KGUuc3RhdGVOb2RlLGUudHlwZSx0KSl9fWZ1bmN0aW9uIGttKGUpe2VhP3RhP3RhLnB1c2goZSk6dGE9W2VdOmVhPWV9ZnVuY3Rpb24geG0oKXtpZihlYSl7dmFyIGU9ZWEsdD10YTtpZih0YT1lYT1udWxsLHVoKGUpLHQpZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl1aCh0W2VdKX19ZnVuY3Rpb24gU20oZSx0KXtyZXR1cm4gZSh0KX1mdW5jdGlvbiBFbSgpe312YXIgVWM9ITE7ZnVuY3Rpb24gVG0oZSx0LG4pe2lmKFVjKXJldHVybiBlKHQsbik7VWM9ITA7dHJ5e3JldHVybiBTbShlLHQsbil9ZmluYWxseXtVYz0hMSwoZWEhPT1udWxsfHx0YSE9PW51bGwpJiYoRW0oKSx4bSgpKX19ZnVuY3Rpb24gb2koZSx0KXt2YXIgbj1lLnN0YXRlTm9kZTtpZihuPT09bnVsbClyZXR1cm4gbnVsbDt2YXIgcj1obChuKTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtuPXJbdF07ZTpzd2l0Y2godCl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRW50ZXIiOihyPSFyLmRpc2FibGVkKXx8KGU9ZS50eXBlLHI9IShlPT09ImJ1dHRvbiJ8fGU9PT0iaW5wdXQifHxlPT09InNlbGVjdCJ8fGU9PT0idGV4dGFyZWEiKSksZT0hcjticmVhayBlO2RlZmF1bHQ6ZT0hMX1pZihlKXJldHVybiBudWxsO2lmKG4mJnR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKE0oMjMxLHQsdHlwZW9mIG4pKTtyZXR1cm4gbn12YXIgdnU9ITE7aWYob3IpdHJ5e1VvPXt9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVbywicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3Z1PSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixVbyxVbyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLFVvLFVvKX1jYXRjaHt2dT0hMX12YXIgVW87ZnVuY3Rpb24gbGsoZSx0LG4scixvLGEsaSxzLGwpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7dC5hcHBseShuLGMpfWNhdGNoKHUpe3RoaXMub25FcnJvcih1KX19dmFyIFlhPSExLFdzPW51bGwsQnM9ITEsd3U9bnVsbCxjaz17b25FcnJvcjpmdW5jdGlvbihlKXtZYT0hMCxXcz1lfX07ZnVuY3Rpb24gdWsoZSx0LG4scixvLGEsaSxzLGwpe1lhPSExLFdzPW51bGwsbGsuYXBwbHkoY2ssYXJndW1lbnRzKX1mdW5jdGlvbiBkayhlLHQsbixyLG8sYSxpLHMsbCl7aWYodWsuYXBwbHkodGhpcyxhcmd1bWVudHMpLFlhKXtpZihZYSl7dmFyIGM9V3M7WWE9ITEsV3M9bnVsbH1lbHNlIHRocm93IEVycm9yKE0oMTk4KSk7QnN8fChCcz0hMCx3dT1jKX19ZnVuY3Rpb24gbW8oZSl7dmFyIHQ9ZSxuPWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2U9dDtkbyB0PWUsdC5mbGFncyY0MDk4JiYobj10LnJldHVybiksZT10LnJldHVybjt3aGlsZShlKX1yZXR1cm4gdC50YWc9PT0zP246bnVsbH1mdW5jdGlvbiBObShlKXtpZihlLnRhZz09PTEzKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYodD09PW51bGwmJihlPWUuYWx0ZXJuYXRlLGUhPT1udWxsJiYodD1lLm1lbW9pemVkU3RhdGUpKSx0IT09bnVsbClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIGRoKGUpe2lmKG1vKGUpIT09ZSl0aHJvdyBFcnJvcihNKDE4OCkpfWZ1bmN0aW9uIHBrKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2lmKCF0KXtpZih0PW1vKGUpLHQ9PT1udWxsKXRocm93IEVycm9yKE0oMTg4KSk7cmV0dXJuIHQhPT1lP251bGw6ZX1mb3IodmFyIG49ZSxyPXQ7Oyl7dmFyIG89bi5yZXR1cm47aWYobz09PW51bGwpYnJlYWs7dmFyIGE9by5hbHRlcm5hdGU7aWYoYT09PW51bGwpe2lmKHI9by5yZXR1cm4sciE9PW51bGwpe249cjtjb250aW51ZX1icmVha31pZihvLmNoaWxkPT09YS5jaGlsZCl7Zm9yKGE9by5jaGlsZDthOyl7aWYoYT09PW4pcmV0dXJuIGRoKG8pLGU7aWYoYT09PXIpcmV0dXJuIGRoKG8pLHQ7YT1hLnNpYmxpbmd9dGhyb3cgRXJyb3IoTSgxODgpKX1pZihuLnJldHVybiE9PXIucmV0dXJuKW49byxyPWE7ZWxzZXtmb3IodmFyIGk9ITEscz1vLmNoaWxkO3M7KXtpZihzPT09bil7aT0hMCxuPW8scj1hO2JyZWFrfWlmKHM9PT1yKXtpPSEwLHI9byxuPWE7YnJlYWt9cz1zLnNpYmxpbmd9aWYoIWkpe2ZvcihzPWEuY2hpbGQ7czspe2lmKHM9PT1uKXtpPSEwLG49YSxyPW87YnJlYWt9aWYocz09PXIpe2k9ITAscj1hLG49bzticmVha31zPXMuc2libGluZ31pZighaSl0aHJvdyBFcnJvcihNKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IoTSgxOTApKX1pZihuLnRhZyE9PTMpdGhyb3cgRXJyb3IoTSgxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/ZTp0fWZ1bmN0aW9uIERtKGUpe3JldHVybiBlPXBrKGUpLGUhPT1udWxsP19tKGUpOm51bGx9ZnVuY3Rpb24gX20oZSl7aWYoZS50YWc9PT01fHxlLnRhZz09PTYpcmV0dXJuIGU7Zm9yKGU9ZS5jaGlsZDtlIT09bnVsbDspe3ZhciB0PV9tKGUpO2lmKHQhPT1udWxsKXJldHVybiB0O2U9ZS5zaWJsaW5nfXJldHVybiBudWxsfXZhciBDbT1xdC51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLHBoPXF0LnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLGZrPXF0LnVuc3RhYmxlX3Nob3VsZFlpZWxkLGhrPXF0LnVuc3RhYmxlX3JlcXVlc3RQYWludCxldD1xdC51bnN0YWJsZV9ub3csbWs9cXQudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwscmQ9cXQudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksQW09cXQudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksSHM9cXQudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksZ2s9cXQudW5zdGFibGVfTG93UHJpb3JpdHksT209cXQudW5zdGFibGVfSWRsZVByaW9yaXR5LHVsPW51bGwsQm49bnVsbDtmdW5jdGlvbiB5ayhlKXtpZihCbiYmdHlwZW9mIEJuLm9uQ29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXtCbi5vbkNvbW1pdEZpYmVyUm9vdCh1bCxlLHZvaWQgMCwoZS5jdXJyZW50LmZsYWdzJjEyOCk9PT0xMjgpfWNhdGNoe319dmFyIEVuPU1hdGguY2x6MzI/TWF0aC5jbHozMjpiayx2az1NYXRoLmxvZyx3az1NYXRoLkxOMjtmdW5jdGlvbiBiayhlKXtyZXR1cm4gZT4+Pj0wLGU9PT0wPzMyOjMxLSh2ayhlKS93a3wwKXwwfXZhciBocz02NCxtcz00MTk0MzA0O2Z1bmN0aW9uIFZhKGUpe3N3aXRjaChlJi1lKXtjYXNlIDE6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDg6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gMTY7Y2FzZSAzMjpyZXR1cm4gMzI7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gZSY0MTk0MjQwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6cmV0dXJuIGUmMTMwMDIzNDI0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMTA3Mzc0MTgyNDtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBHcyhlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzO2lmKG49PT0wKXJldHVybiAwO3ZhciByPTAsbz1lLnN1c3BlbmRlZExhbmVzLGE9ZS5waW5nZWRMYW5lcyxpPW4mMjY4NDM1NDU1O2lmKGkhPT0wKXt2YXIgcz1pJn5vO3MhPT0wP3I9VmEocyk6KGEmPWksYSE9PTAmJihyPVZhKGEpKSl9ZWxzZSBpPW4mfm8saSE9PTA/cj1WYShpKTphIT09MCYmKHI9VmEoYSkpO2lmKHI9PT0wKXJldHVybiAwO2lmKHQhPT0wJiZ0IT09ciYmISh0Jm8pJiYobz1yJi1yLGE9dCYtdCxvPj1hfHxvPT09MTYmJihhJjQxOTQyNDApIT09MCkpcmV0dXJuIHQ7aWYociY0JiYocnw9biYxNiksdD1lLmVudGFuZ2xlZExhbmVzLHQhPT0wKWZvcihlPWUuZW50YW5nbGVtZW50cyx0Jj1yOzA8dDspbj0zMS1Fbih0KSxvPTE8PG4scnw9ZVtuXSx0Jj1+bztyZXR1cm4gcn1mdW5jdGlvbiBrayhlLHQpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gdCsyNTA7Y2FzZSA4OmNhc2UgMTY6Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiB0KzVlMztjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0OnJldHVybi0xO2Nhc2UgMTM0MjE3NzI4OmNhc2UgMjY4NDM1NDU2OmNhc2UgNTM2ODcwOTEyOmNhc2UgMTA3Mzc0MTgyNDpyZXR1cm4tMTtkZWZhdWx0OnJldHVybi0xfX1mdW5jdGlvbiB4ayhlLHQpe2Zvcih2YXIgbj1lLnN1c3BlbmRlZExhbmVzLHI9ZS5waW5nZWRMYW5lcyxvPWUuZXhwaXJhdGlvblRpbWVzLGE9ZS5wZW5kaW5nTGFuZXM7MDxhOyl7dmFyIGk9MzEtRW4oYSkscz0xPDxpLGw9b1tpXTtsPT09LTE/KCEocyZuKXx8cyZyKSYmKG9baV09a2socyx0KSk6bDw9dCYmKGUuZXhwaXJlZExhbmVzfD1zKSxhJj1+c319ZnVuY3Rpb24gYnUoZSl7cmV0dXJuIGU9ZS5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjUsZSE9PTA/ZTplJjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIEltKCl7dmFyIGU9aHM7cmV0dXJuIGhzPDw9MSwhKGhzJjQxOTQyNDApJiYoaHM9NjQpLGV9ZnVuY3Rpb24gJGMoZSl7Zm9yKHZhciB0PVtdLG49MDszMT5uO24rKyl0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gd2koZSx0LG4pe2UucGVuZGluZ0xhbmVzfD10LHQhPT01MzY4NzA5MTImJihlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wKSxlPWUuZXZlbnRUaW1lcyx0PTMxLUVuKHQpLGVbdF09bn1mdW5jdGlvbiBTayhlLHQpe3ZhciBuPWUucGVuZGluZ0xhbmVzJn50O2UucGVuZGluZ0xhbmVzPXQsZS5zdXNwZW5kZWRMYW5lcz0wLGUucGluZ2VkTGFuZXM9MCxlLmV4cGlyZWRMYW5lcyY9dCxlLm11dGFibGVSZWFkTGFuZXMmPXQsZS5lbnRhbmdsZWRMYW5lcyY9dCx0PWUuZW50YW5nbGVtZW50czt2YXIgcj1lLmV2ZW50VGltZXM7Zm9yKGU9ZS5leHBpcmF0aW9uVGltZXM7MDxuOyl7dmFyIG89MzEtRW4obiksYT0xPDxvO3Rbb109MCxyW29dPS0xLGVbb109LTEsbiY9fmF9fWZ1bmN0aW9uIG9kKGUsdCl7dmFyIG49ZS5lbnRhbmdsZWRMYW5lc3w9dDtmb3IoZT1lLmVudGFuZ2xlbWVudHM7bjspe3ZhciByPTMxLUVuKG4pLG89MTw8cjtvJnR8ZVtyXSZ0JiYoZVtyXXw9dCksbiY9fm99fXZhciBEZT0wO2Z1bmN0aW9uIFJtKGUpe3JldHVybiBlJj0tZSwxPGU/NDxlP2UmMjY4NDM1NDU1PzE2OjUzNjg3MDkxMjo0OjF9dmFyIE1tLGFkLFBtLExtLHptLGt1PSExLGdzPVtdLF9yPW51bGwsQ3I9bnVsbCxBcj1udWxsLGFpPW5ldyBNYXAsaWk9bmV3IE1hcCxFcj1bXSxFaz0ibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0IHN1Ym1pdCIuc3BsaXQoIiAiKTtmdW5jdGlvbiBmaChlLHQpe3N3aXRjaChlKXtjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOl9yPW51bGw7YnJlYWs7Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2xlYXZlIjpDcj1udWxsO2JyZWFrO2Nhc2UibW91c2VvdmVyIjpjYXNlIm1vdXNlb3V0IjpBcj1udWxsO2JyZWFrO2Nhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcm91dCI6YWkuZGVsZXRlKHQucG9pbnRlcklkKTticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6aWkuZGVsZXRlKHQucG9pbnRlcklkKX19ZnVuY3Rpb24gTGEoZSx0LG4scixvLGEpe3JldHVybiBlPT09bnVsbHx8ZS5uYXRpdmVFdmVudCE9PWE/KGU9e2Jsb2NrZWRPbjp0LGRvbUV2ZW50TmFtZTpuLGV2ZW50U3lzdGVtRmxhZ3M6cixuYXRpdmVFdmVudDphLHRhcmdldENvbnRhaW5lcnM6W29dfSx0IT09bnVsbCYmKHQ9a2kodCksdCE9PW51bGwmJmFkKHQpKSxlKTooZS5ldmVudFN5c3RlbUZsYWdzfD1yLHQ9ZS50YXJnZXRDb250YWluZXJzLG8hPT1udWxsJiZ0LmluZGV4T2Yobyk9PT0tMSYmdC5wdXNoKG8pLGUpfWZ1bmN0aW9uIFRrKGUsdCxuLHIsbyl7c3dpdGNoKHQpe2Nhc2UiZm9jdXNpbiI6cmV0dXJuIF9yPUxhKF9yLGUsdCxuLHIsbyksITA7Y2FzZSJkcmFnZW50ZXIiOnJldHVybiBDcj1MYShDcixlLHQsbixyLG8pLCEwO2Nhc2UibW91c2VvdmVyIjpyZXR1cm4gQXI9TGEoQXIsZSx0LG4scixvKSwhMDtjYXNlInBvaW50ZXJvdmVyIjp2YXIgYT1vLnBvaW50ZXJJZDtyZXR1cm4gYWkuc2V0KGEsTGEoYWkuZ2V0KGEpfHxudWxsLGUsdCxuLHIsbykpLCEwO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOnJldHVybiBhPW8ucG9pbnRlcklkLGlpLnNldChhLExhKGlpLmdldChhKXx8bnVsbCxlLHQsbixyLG8pKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBGbShlKXt2YXIgdD1ybyhlLnRhcmdldCk7aWYodCE9PW51bGwpe3ZhciBuPW1vKHQpO2lmKG4hPT1udWxsKXtpZih0PW4udGFnLHQ9PT0xMyl7aWYodD1ObShuKSx0IT09bnVsbCl7ZS5ibG9ja2VkT249dCx6bShlLnByaW9yaXR5LGZ1bmN0aW9uKCl7UG0obil9KTtyZXR1cm59fWVsc2UgaWYodD09PTMmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe2UuYmxvY2tlZE9uPW4udGFnPT09Mz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBBcyhlKXtpZihlLmJsb2NrZWRPbiE9PW51bGwpcmV0dXJuITE7Zm9yKHZhciB0PWUudGFyZ2V0Q29udGFpbmVyczswPHQubGVuZ3RoOyl7dmFyIG49eHUoZS5kb21FdmVudE5hbWUsZS5ldmVudFN5c3RlbUZsYWdzLHRbMF0sZS5uYXRpdmVFdmVudCk7aWYobj09PW51bGwpe249ZS5uYXRpdmVFdmVudDt2YXIgcj1uZXcgbi5jb25zdHJ1Y3RvcihuLnR5cGUsbik7Z3U9cixuLnRhcmdldC5kaXNwYXRjaEV2ZW50KHIpLGd1PW51bGx9ZWxzZSByZXR1cm4gdD1raShuKSx0IT09bnVsbCYmYWQodCksZS5ibG9ja2VkT249biwhMTt0LnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gaGgoZSx0LG4pe0FzKGUpJiZuLmRlbGV0ZSh0KX1mdW5jdGlvbiBOaygpe2t1PSExLF9yIT09bnVsbCYmQXMoX3IpJiYoX3I9bnVsbCksQ3IhPT1udWxsJiZBcyhDcikmJihDcj1udWxsKSxBciE9PW51bGwmJkFzKEFyKSYmKEFyPW51bGwpLGFpLmZvckVhY2goaGgpLGlpLmZvckVhY2goaGgpfWZ1bmN0aW9uIHphKGUsdCl7ZS5ibG9ja2VkT249PT10JiYoZS5ibG9ja2VkT249bnVsbCxrdXx8KGt1PSEwLHF0LnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2socXQudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksTmspKSl9ZnVuY3Rpb24gc2koZSl7ZnVuY3Rpb24gdChvKXtyZXR1cm4gemEobyxlKX1pZigwPGdzLmxlbmd0aCl7emEoZ3NbMF0sZSk7Zm9yKHZhciBuPTE7bjxncy5sZW5ndGg7bisrKXt2YXIgcj1nc1tuXTtyLmJsb2NrZWRPbj09PWUmJihyLmJsb2NrZWRPbj1udWxsKX19Zm9yKF9yIT09bnVsbCYmemEoX3IsZSksQ3IhPT1udWxsJiZ6YShDcixlKSxBciE9PW51bGwmJnphKEFyLGUpLGFpLmZvckVhY2godCksaWkuZm9yRWFjaCh0KSxuPTA7bjxFci5sZW5ndGg7bisrKXI9RXJbbl0sci5ibG9ja2VkT249PT1lJiYoci5ibG9ja2VkT249bnVsbCk7Zm9yKDswPEVyLmxlbmd0aCYmKG49RXJbMF0sbi5ibG9ja2VkT249PT1udWxsKTspRm0obiksbi5ibG9ja2VkT249PT1udWxsJiZFci5zaGlmdCgpfXZhciBuYT1sci5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxWcz0hMDtmdW5jdGlvbiBEayhlLHQsbixyKXt2YXIgbz1EZSxhPW5hLnRyYW5zaXRpb247bmEudHJhbnNpdGlvbj1udWxsO3RyeXtEZT0xLGlkKGUsdCxuLHIpfWZpbmFsbHl7RGU9byxuYS50cmFuc2l0aW9uPWF9fWZ1bmN0aW9uIF9rKGUsdCxuLHIpe3ZhciBvPURlLGE9bmEudHJhbnNpdGlvbjtuYS50cmFuc2l0aW9uPW51bGw7dHJ5e0RlPTQsaWQoZSx0LG4scil9ZmluYWxseXtEZT1vLG5hLnRyYW5zaXRpb249YX19ZnVuY3Rpb24gaWQoZSx0LG4scil7aWYoVnMpe3ZhciBvPXh1KGUsdCxuLHIpO2lmKG89PT1udWxsKUtjKGUsdCxyLGpzLG4pLGZoKGUscik7ZWxzZSBpZihUayhvLGUsdCxuLHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihmaChlLHIpLHQmNCYmLTE8RWsuaW5kZXhPZihlKSl7Zm9yKDtvIT09bnVsbDspe3ZhciBhPWtpKG8pO2lmKGEhPT1udWxsJiZNbShhKSxhPXh1KGUsdCxuLHIpLGE9PT1udWxsJiZLYyhlLHQscixqcyxuKSxhPT09bylicmVhaztvPWF9byE9PW51bGwmJnIuc3RvcFByb3BhZ2F0aW9uKCl9ZWxzZSBLYyhlLHQscixudWxsLG4pfX12YXIganM9bnVsbDtmdW5jdGlvbiB4dShlLHQsbixyKXtpZihqcz1udWxsLGU9bmQociksZT1ybyhlKSxlIT09bnVsbClpZih0PW1vKGUpLHQ9PT1udWxsKWU9bnVsbDtlbHNlIGlmKG49dC50YWcsbj09PTEzKXtpZihlPU5tKHQpLGUhPT1udWxsKXJldHVybiBlO2U9bnVsbH1lbHNlIGlmKG49PT0zKXtpZih0LnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXJldHVybiB0LnRhZz09PTM/dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO2U9bnVsbH1lbHNlIHQhPT1lJiYoZT1udWxsKTtyZXR1cm4ganM9ZSxudWxsfWZ1bmN0aW9uIFVtKGUpe3N3aXRjaChlKXtjYXNlImNhbmNlbCI6Y2FzZSJjbGljayI6Y2FzZSJjbG9zZSI6Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjpjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNhc2UiaW5wdXQiOmNhc2UiaW52YWxpZCI6Y2FzZSJrZXlkb3duIjpjYXNlImtleXByZXNzIjpjYXNlImtleXVwIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZXVwIjpjYXNlInBhc3RlIjpjYXNlInBhdXNlIjpjYXNlInBsYXkiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVydXAiOmNhc2UicmF0ZWNoYW5nZSI6Y2FzZSJyZXNldCI6Y2FzZSJyZXNpemUiOmNhc2Uic2Vla2VkIjpjYXNlInN1Ym1pdCI6Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaHN0YXJ0IjpjYXNlInZvbHVtZWNoYW5nZSI6Y2FzZSJjaGFuZ2UiOmNhc2Uic2VsZWN0aW9uY2hhbmdlIjpjYXNlInRleHRJbnB1dCI6Y2FzZSJjb21wb3NpdGlvbnN0YXJ0IjpjYXNlImNvbXBvc2l0aW9uZW5kIjpjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpjYXNlImJlZm9yZWJsdXIiOmNhc2UiYWZ0ZXJibHVyIjpjYXNlImJlZm9yZWlucHV0IjpjYXNlImJsdXIiOmNhc2UiZnVsbHNjcmVlbmNoYW5nZSI6Y2FzZSJmb2N1cyI6Y2FzZSJoYXNoY2hhbmdlIjpjYXNlInBvcHN0YXRlIjpjYXNlInNlbGVjdCI6Y2FzZSJzZWxlY3RzdGFydCI6cmV0dXJuIDE7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNlb3V0IjpjYXNlIm1vdXNlb3ZlciI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInNjcm9sbCI6Y2FzZSJ0b2dnbGUiOmNhc2UidG91Y2htb3ZlIjpjYXNlIndoZWVsIjpjYXNlIm1vdXNlZW50ZXIiOmNhc2UibW91c2VsZWF2ZSI6Y2FzZSJwb2ludGVyZW50ZXIiOmNhc2UicG9pbnRlcmxlYXZlIjpyZXR1cm4gNDtjYXNlIm1lc3NhZ2UiOnN3aXRjaChtaygpKXtjYXNlIHJkOnJldHVybiAxO2Nhc2UgQW06cmV0dXJuIDQ7Y2FzZSBIczpjYXNlIGdrOnJldHVybiAxNjtjYXNlIE9tOnJldHVybiA1MzY4NzA5MTI7ZGVmYXVsdDpyZXR1cm4gMTZ9ZGVmYXVsdDpyZXR1cm4gMTZ9fXZhciBOcj1udWxsLHNkPW51bGwsT3M9bnVsbDtmdW5jdGlvbiAkbSgpe2lmKE9zKXJldHVybiBPczt2YXIgZSx0PXNkLG49dC5sZW5ndGgscixvPSJ2YWx1ZSJpbiBOcj9Oci52YWx1ZTpOci50ZXh0Q29udGVudCxhPW8ubGVuZ3RoO2ZvcihlPTA7ZTxuJiZ0W2VdPT09b1tlXTtlKyspO3ZhciBpPW4tZTtmb3Iocj0xO3I8PWkmJnRbbi1yXT09PW9bYS1yXTtyKyspO3JldHVybiBPcz1vLnNsaWNlKGUsMTxyPzEtcjp2b2lkIDApfWZ1bmN0aW9uIElzKGUpe3ZhciB0PWUua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gZT8oZT1lLmNoYXJDb2RlLGU9PT0wJiZ0PT09MTMmJihlPTEzKSk6ZT10LGU9PT0xMCYmKGU9MTMpLDMyPD1lfHxlPT09MTM/ZTowfWZ1bmN0aW9uIHlzKCl7cmV0dXJuITB9ZnVuY3Rpb24gbWgoKXtyZXR1cm4hMX1mdW5jdGlvbiBRdChlKXtmdW5jdGlvbiB0KG4scixvLGEsaSl7dGhpcy5fcmVhY3ROYW1lPW4sdGhpcy5fdGFyZ2V0SW5zdD1vLHRoaXMudHlwZT1yLHRoaXMubmF0aXZlRXZlbnQ9YSx0aGlzLnRhcmdldD1pLHRoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgcyBpbiBlKWUuaGFzT3duUHJvcGVydHkocykmJihuPWVbc10sdGhpc1tzXT1uP24oYSk6YVtzXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShhLmRlZmF1bHRQcmV2ZW50ZWQhPW51bGw/YS5kZWZhdWx0UHJldmVudGVkOmEucmV0dXJuVmFsdWU9PT0hMSk/eXM6bWgsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1taCx0aGlzfXJldHVybiBLZSh0LnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5wcmV2ZW50RGVmYXVsdD9uLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIG4ucmV0dXJuVmFsdWUhPSJ1bmtub3duIiYmKG4ucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXlzKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5zdG9wUHJvcGFnYXRpb24/bi5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2Ygbi5jYW5jZWxCdWJibGUhPSJ1bmtub3duIiYmKG4uY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXlzKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OnlzfSksdH12YXIgcGE9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0sbGQ9UXQocGEpLGJpPUtlKHt9LHBhLHt2aWV3OjAsZGV0YWlsOjB9KSxDaz1RdChiaSksV2MsQmMsRmEsZGw9S2Uoe30sYmkse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6Y2QsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldD09PXZvaWQgMD9lLmZyb21FbGVtZW50PT09ZS5zcmNFbGVtZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQ6ZS5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24oZSl7cmV0dXJuIm1vdmVtZW50WCJpbiBlP2UubW92ZW1lbnRYOihlIT09RmEmJihGYSYmZS50eXBlPT09Im1vdXNlbW92ZSI/KFdjPWUuc2NyZWVuWC1GYS5zY3JlZW5YLEJjPWUuc2NyZWVuWS1GYS5zY3JlZW5ZKTpCYz1XYz0wLEZhPWUpLFdjKX0sbW92ZW1lbnRZOmZ1bmN0aW9uKGUpe3JldHVybiJtb3ZlbWVudFkiaW4gZT9lLm1vdmVtZW50WTpCY319KSxnaD1RdChkbCksQWs9S2Uoe30sZGwse2RhdGFUcmFuc2ZlcjowfSksT2s9UXQoQWspLElrPUtlKHt9LGJpLHtyZWxhdGVkVGFyZ2V0OjB9KSxIYz1RdChJayksUms9S2Uoe30scGEse2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLE1rPVF0KFJrKSxQaz1LZSh7fSxwYSx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxMaz1RdChQayksems9S2Uoe30scGEse2RhdGE6MH0pLHloPVF0KHprKSxGaz17RXNjOiJFc2NhcGUiLFNwYWNlYmFyOiIgIixMZWZ0OiJBcnJvd0xlZnQiLFVwOiJBcnJvd1VwIixSaWdodDoiQXJyb3dSaWdodCIsRG93bjoiQXJyb3dEb3duIixEZWw6IkRlbGV0ZSIsV2luOiJPUyIsTWVudToiQ29udGV4dE1lbnUiLEFwcHM6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLE1velByaW50YWJsZUtleToiVW5pZGVudGlmaWVkIn0sVWs9ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMjoiQ2xlYXIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ29udHJvbCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2NhcGUiLDMyOiIgIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiQXJyb3dMZWZ0IiwzODoiQXJyb3dVcCIsMzk6IkFycm93UmlnaHQiLDQwOiJBcnJvd0Rvd24iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtTG9jayIsMTQ1OiJTY3JvbGxMb2NrIiwyMjQ6Ik1ldGEifSwkaz17QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9O2Z1bmN0aW9uIFdrKGUpe3ZhciB0PXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIHQuZ2V0TW9kaWZpZXJTdGF0ZT90LmdldE1vZGlmaWVyU3RhdGUoZSk6KGU9JGtbZV0pPyEhdFtlXTohMX1mdW5jdGlvbiBjZCgpe3JldHVybiBXa312YXIgQms9S2Uoe30sYmkse2tleTpmdW5jdGlvbihlKXtpZihlLmtleSl7dmFyIHQ9RmtbZS5rZXldfHxlLmtleTtpZih0IT09IlVuaWRlbnRpZmllZCIpcmV0dXJuIHR9cmV0dXJuIGUudHlwZT09PSJrZXlwcmVzcyI/KGU9SXMoZSksZT09PTEzPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZShlKSk6ZS50eXBlPT09ImtleWRvd24ifHxlLnR5cGU9PT0ia2V5dXAiP1VrW2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTpjZCxjaGFyQ29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50eXBlPT09ImtleXByZXNzIj9JcyhlKTowfSxrZXlDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5ZG93biJ8fGUudHlwZT09PSJrZXl1cCI/ZS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVybiBlLnR5cGU9PT0ia2V5cHJlc3MiP0lzKGUpOmUudHlwZT09PSJrZXlkb3duInx8ZS50eXBlPT09ImtleXVwIj9lLmtleUNvZGU6MH19KSxIaz1RdChCayksR2s9S2Uoe30sZGwse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksdmg9UXQoR2spLFZrPUtlKHt9LGJpLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6Y2R9KSxqaz1RdChWayksS2s9S2Uoe30scGEse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksWWs9UXQoS2spLHFrPUtlKHt9LGRsLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWCJpbiBlP2UuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiBlPy1lLndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFZImluIGU/ZS5kZWx0YVk6IndoZWVsRGVsdGFZImluIGU/LWUud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gZT8tZS53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksUWs9UXQocWspLEprPVs5LDEzLDI3LDMyXSx1ZD1vciYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LHFhPW51bGw7b3ImJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihxYT1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBYaz1vciYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiFxYSxXbT1vciYmKCF1ZHx8cWEmJjg8cWEmJjExPj1xYSksd2g9IiAiLGJoPSExO2Z1bmN0aW9uIEJtKGUsdCl7c3dpdGNoKGUpe2Nhc2Uia2V5dXAiOnJldHVybiBKay5pbmRleE9mKHQua2V5Q29kZSkhPT0tMTtjYXNlImtleWRvd24iOnJldHVybiB0LmtleUNvZGUhPT0yMjk7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiZm9jdXNvdXQiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEhtKGUpe3JldHVybiBlPWUuZGV0YWlsLHR5cGVvZiBlPT0ib2JqZWN0IiYmImRhdGEiaW4gZT9lLmRhdGE6bnVsbH12YXIgSG89ITE7ZnVuY3Rpb24gWmsoZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIEhtKHQpO2Nhc2Uia2V5cHJlc3MiOnJldHVybiB0LndoaWNoIT09MzI/bnVsbDooYmg9ITAsd2gpO2Nhc2UidGV4dElucHV0IjpyZXR1cm4gZT10LmRhdGEsZT09PXdoJiZiaD9udWxsOmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZXgoZSx0KXtpZihIbylyZXR1cm4gZT09PSJjb21wb3NpdGlvbmVuZCJ8fCF1ZCYmQm0oZSx0KT8oZT0kbSgpLE9zPXNkPU5yPW51bGwsSG89ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIFdtJiZ0LmxvY2FsZSE9PSJrbyI/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIHR4PXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiBraChlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0iaW5wdXQiPyEhdHhbZS50eXBlXTp0PT09InRleHRhcmVhIn1mdW5jdGlvbiBHbShlLHQsbixyKXtrbShyKSx0PUtzKHQsIm9uQ2hhbmdlIiksMDx0Lmxlbmd0aCYmKG49bmV3IGxkKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLHIpLGUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6dH0pKX12YXIgUWE9bnVsbCxsaT1udWxsO2Z1bmN0aW9uIG54KGUpe3RnKGUsMCl9ZnVuY3Rpb24gcGwoZSl7dmFyIHQ9am8oZSk7aWYoaG0odCkpcmV0dXJuIGV9ZnVuY3Rpb24gcngoZSx0KXtpZihlPT09ImNoYW5nZSIpcmV0dXJuIHR9dmFyIFZtPSExO29yJiYob3I/KHdzPSJvbmlucHV0ImluIGRvY3VtZW50LHdzfHwoR2M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksR2Muc2V0QXR0cmlidXRlKCJvbmlucHV0IiwicmV0dXJuOyIpLHdzPXR5cGVvZiBHYy5vbmlucHV0PT0iZnVuY3Rpb24iKSx2cz13cyk6dnM9ITEsVm09dnMmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO3ZhciB2cyx3cyxHYztmdW5jdGlvbiB4aCgpe1FhJiYoUWEuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLGptKSxsaT1RYT1udWxsKX1mdW5jdGlvbiBqbShlKXtpZihlLnByb3BlcnR5TmFtZT09PSJ2YWx1ZSImJnBsKGxpKSl7dmFyIHQ9W107R20odCxsaSxlLG5kKGUpKSxUbShueCx0KX19ZnVuY3Rpb24gb3goZSx0LG4pe2U9PT0iZm9jdXNpbiI/KHhoKCksUWE9dCxsaT1uLFFhLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixqbSkpOmU9PT0iZm9jdXNvdXQiJiZ4aCgpfWZ1bmN0aW9uIGF4KGUpe2lmKGU9PT0ic2VsZWN0aW9uY2hhbmdlInx8ZT09PSJrZXl1cCJ8fGU9PT0ia2V5ZG93biIpcmV0dXJuIHBsKGxpKX1mdW5jdGlvbiBpeChlLHQpe2lmKGU9PT0iY2xpY2siKXJldHVybiBwbCh0KX1mdW5jdGlvbiBzeChlLHQpe2lmKGU9PT0iaW5wdXQifHxlPT09ImNoYW5nZSIpcmV0dXJuIHBsKHQpfWZ1bmN0aW9uIGx4KGUsdCl7cmV0dXJuIGU9PT10JiYoZSE9PTB8fDEvZT09PTEvdCl8fGUhPT1lJiZ0IT09dH12YXIgTm49dHlwZW9mIE9iamVjdC5pcz09ImZ1bmN0aW9uIj9PYmplY3QuaXM6bHg7ZnVuY3Rpb24gY2koZSx0KXtpZihObihlLHQpKXJldHVybiEwO2lmKHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXMoZSkscj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07aWYoIW91LmNhbGwodCxvKXx8IU5uKGVbb10sdFtvXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gU2goZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIEVoKGUsdCl7dmFyIG49U2goZSk7ZT0wO2Zvcih2YXIgcjtuOyl7aWYobi5ub2RlVHlwZT09PTMpe2lmKHI9ZStuLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZyPj10KXJldHVybntub2RlOm4sb2Zmc2V0OnQtZX07ZT1yfWU6e2Zvcig7bjspe2lmKG4ubmV4dFNpYmxpbmcpe249bi5uZXh0U2libGluZzticmVhayBlfW49bi5wYXJlbnROb2RlfW49dm9pZCAwfW49U2gobil9fWZ1bmN0aW9uIEttKGUsdCl7cmV0dXJuIGUmJnQ/ZT09PXQ/ITA6ZSYmZS5ub2RlVHlwZT09PTM/ITE6dCYmdC5ub2RlVHlwZT09PTM/S20oZSx0LnBhcmVudE5vZGUpOiJjb250YWlucyJpbiBlP2UuY29udGFpbnModCk6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hIShlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJjE2KTohMTohMX1mdW5jdGlvbiBZbSgpe2Zvcih2YXIgZT13aW5kb3csdD0kcygpO3QgaW5zdGFuY2VvZiBlLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBuPXR5cGVvZiB0LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZj09InN0cmluZyJ9Y2F0Y2h7bj0hMX1pZihuKWU9dC5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7dD0kcyhlLmRvY3VtZW50KX1yZXR1cm4gdH1mdW5jdGlvbiBkZChlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQmJih0PT09ImlucHV0IiYmKGUudHlwZT09PSJ0ZXh0Inx8ZS50eXBlPT09InNlYXJjaCJ8fGUudHlwZT09PSJ0ZWwifHxlLnR5cGU9PT0idXJsInx8ZS50eXBlPT09InBhc3N3b3JkIil8fHQ9PT0idGV4dGFyZWEifHxlLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIil9ZnVuY3Rpb24gY3goZSl7dmFyIHQ9WW0oKSxuPWUuZm9jdXNlZEVsZW0scj1lLnNlbGVjdGlvblJhbmdlO2lmKHQhPT1uJiZuJiZuLm93bmVyRG9jdW1lbnQmJkttKG4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbikpe2lmKHIhPT1udWxsJiZkZChuKSl7aWYodD1yLnN0YXJ0LGU9ci5lbmQsZT09PXZvaWQgMCYmKGU9dCksInNlbGVjdGlvblN0YXJ0ImluIG4pbi5zZWxlY3Rpb25TdGFydD10LG4uc2VsZWN0aW9uRW5kPU1hdGgubWluKGUsbi52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYoZT0odD1uLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmdC5kZWZhdWx0Vmlld3x8d2luZG93LGUuZ2V0U2VsZWN0aW9uKXtlPWUuZ2V0U2VsZWN0aW9uKCk7dmFyIG89bi50ZXh0Q29udGVudC5sZW5ndGgsYT1NYXRoLm1pbihyLnN0YXJ0LG8pO3I9ci5lbmQ9PT12b2lkIDA/YTpNYXRoLm1pbihyLmVuZCxvKSwhZS5leHRlbmQmJmE+ciYmKG89cixyPWEsYT1vKSxvPUVoKG4sYSk7dmFyIGk9RWgobixyKTtvJiZpJiYoZS5yYW5nZUNvdW50IT09MXx8ZS5hbmNob3JOb2RlIT09by5ub2RlfHxlLmFuY2hvck9mZnNldCE9PW8ub2Zmc2V0fHxlLmZvY3VzTm9kZSE9PWkubm9kZXx8ZS5mb2N1c09mZnNldCE9PWkub2Zmc2V0KSYmKHQ9dC5jcmVhdGVSYW5nZSgpLHQuc2V0U3RhcnQoby5ub2RlLG8ub2Zmc2V0KSxlLnJlbW92ZUFsbFJhbmdlcygpLGE+cj8oZS5hZGRSYW5nZSh0KSxlLmV4dGVuZChpLm5vZGUsaS5vZmZzZXQpKToodC5zZXRFbmQoaS5ub2RlLGkub2Zmc2V0KSxlLmFkZFJhbmdlKHQpKSl9fWZvcih0PVtdLGU9bjtlPWUucGFyZW50Tm9kZTspZS5ub2RlVHlwZT09PTEmJnQucHVzaCh7ZWxlbWVudDplLGxlZnQ6ZS5zY3JvbGxMZWZ0LHRvcDplLnNjcm9sbFRvcH0pO2Zvcih0eXBlb2Ygbi5mb2N1cz09ImZ1bmN0aW9uIiYmbi5mb2N1cygpLG49MDtuPHQubGVuZ3RoO24rKyllPXRbbl0sZS5lbGVtZW50LnNjcm9sbExlZnQ9ZS5sZWZ0LGUuZWxlbWVudC5zY3JvbGxUb3A9ZS50b3B9fXZhciB1eD1vciYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxHbz1udWxsLFN1PW51bGwsSmE9bnVsbCxFdT0hMTtmdW5jdGlvbiBUaChlLHQsbil7dmFyIHI9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6bi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQ7RXV8fEdvPT1udWxsfHxHbyE9PSRzKHIpfHwocj1Hbywic2VsZWN0aW9uU3RhcnQiaW4gciYmZGQocik/cj17c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxyPXthbmNob3JOb2RlOnIuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9KSxKYSYmY2koSmEscil8fChKYT1yLHI9S3MoU3UsIm9uU2VsZWN0IiksMDxyLmxlbmd0aCYmKHQ9bmV3IGxkKCJvblNlbGVjdCIsInNlbGVjdCIsbnVsbCx0LG4pLGUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6cn0pLHQudGFyZ2V0PUdvKSkpfWZ1bmN0aW9uIGJzKGUsdCl7dmFyIG49e307cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXT10LnRvTG93ZXJDYXNlKCksblsiV2Via2l0IitlXT0id2Via2l0Iit0LG5bIk1veiIrZV09Im1veiIrdCxufXZhciBWbz17YW5pbWF0aW9uZW5kOmJzKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246YnMoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0OmJzKCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6YnMoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LFZjPXt9LHFtPXt9O29yJiYocW09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBWby5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBWby5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBWby5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgVm8udHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtmdW5jdGlvbiBmbChlKXtpZihWY1tlXSlyZXR1cm4gVmNbZV07aWYoIVZvW2VdKXJldHVybiBlO3ZhciB0PVZvW2VdLG47Zm9yKG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pJiZuIGluIHFtKXJldHVybiBWY1tlXT10W25dO3JldHVybiBlfXZhciBRbT1mbCgiYW5pbWF0aW9uZW5kIiksSm09ZmwoImFuaW1hdGlvbml0ZXJhdGlvbiIpLFhtPWZsKCJhbmltYXRpb25zdGFydCIpLFptPWZsKCJ0cmFuc2l0aW9uZW5kIiksZWc9bmV3IE1hcCxOaD0iYWJvcnQgYXV4Q2xpY2sgY2FuY2VsIGNhblBsYXkgY2FuUGxheVRocm91Z2ggY2xpY2sgY2xvc2UgY29udGV4dE1lbnUgY29weSBjdXQgZHJhZyBkcmFnRW5kIGRyYWdFbnRlciBkcmFnRXhpdCBkcmFnTGVhdmUgZHJhZ092ZXIgZHJhZ1N0YXJ0IGRyb3AgZHVyYXRpb25DaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgZ290UG9pbnRlckNhcHR1cmUgaW5wdXQgaW52YWxpZCBrZXlEb3duIGtleVByZXNzIGtleVVwIGxvYWQgbG9hZGVkRGF0YSBsb2FkZWRNZXRhZGF0YSBsb2FkU3RhcnQgbG9zdFBvaW50ZXJDYXB0dXJlIG1vdXNlRG93biBtb3VzZU1vdmUgbW91c2VPdXQgbW91c2VPdmVyIG1vdXNlVXAgcGFzdGUgcGF1c2UgcGxheSBwbGF5aW5nIHBvaW50ZXJDYW5jZWwgcG9pbnRlckRvd24gcG9pbnRlck1vdmUgcG9pbnRlck91dCBwb2ludGVyT3ZlciBwb2ludGVyVXAgcHJvZ3Jlc3MgcmF0ZUNoYW5nZSByZXNldCByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdWJtaXQgc3VzcGVuZCB0aW1lVXBkYXRlIHRvdWNoQ2FuY2VsIHRvdWNoRW5kIHRvdWNoU3RhcnQgdm9sdW1lQ2hhbmdlIHNjcm9sbCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWwiLnNwbGl0KCIgIik7ZnVuY3Rpb24gRnIoZSx0KXtlZy5zZXQoZSx0KSxobyh0LFtlXSl9Zm9yKGtzPTA7a3M8TmgubGVuZ3RoO2tzKyspeHM9Tmhba3NdLERoPXhzLnRvTG93ZXJDYXNlKCksX2g9eHNbMF0udG9VcHBlckNhc2UoKSt4cy5zbGljZSgxKSxGcihEaCwib24iK19oKTt2YXIgeHMsRGgsX2gsa3M7RnIoUW0sIm9uQW5pbWF0aW9uRW5kIik7RnIoSm0sIm9uQW5pbWF0aW9uSXRlcmF0aW9uIik7RnIoWG0sIm9uQW5pbWF0aW9uU3RhcnQiKTtGcigiZGJsY2xpY2siLCJvbkRvdWJsZUNsaWNrIik7RnIoImZvY3VzaW4iLCJvbkZvY3VzIik7RnIoImZvY3Vzb3V0Iiwib25CbHVyIik7RnIoWm0sIm9uVHJhbnNpdGlvbkVuZCIpO2FhKCJvbk1vdXNlRW50ZXIiLFsibW91c2VvdXQiLCJtb3VzZW92ZXIiXSk7YWEoIm9uTW91c2VMZWF2ZSIsWyJtb3VzZW91dCIsIm1vdXNlb3ZlciJdKTthYSgib25Qb2ludGVyRW50ZXIiLFsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl0pO2FhKCJvblBvaW50ZXJMZWF2ZSIsWyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXSk7aG8oIm9uQ2hhbmdlIiwiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIikpO2hvKCJvblNlbGVjdCIsImZvY3Vzb3V0IGNvbnRleHRtZW51IGRyYWdlbmQgZm9jdXNpbiBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKSk7aG8oIm9uQmVmb3JlSW5wdXQiLFsiY29tcG9zaXRpb25lbmQiLCJrZXlwcmVzcyIsInRleHRJbnB1dCIsInBhc3RlIl0pO2hvKCJvbkNvbXBvc2l0aW9uRW5kIiwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO2hvKCJvbkNvbXBvc2l0aW9uU3RhcnQiLCJjb21wb3NpdGlvbnN0YXJ0IGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpKTtobygib25Db21wb3NpdGlvblVwZGF0ZSIsImNvbXBvc2l0aW9udXBkYXRlIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpKTt2YXIgamE9ImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2UgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VzcGVuZCB0aW1ldXBkYXRlIHZvbHVtZWNoYW5nZSB3YWl0aW5nIi5zcGxpdCgiICIpLGR4PW5ldyBTZXQoImNhbmNlbCBjbG9zZSBpbnZhbGlkIGxvYWQgc2Nyb2xsIHRvZ2dsZSIuc3BsaXQoIiAiKS5jb25jYXQoamEpKTtmdW5jdGlvbiBDaChlLHQsbil7dmFyIHI9ZS50eXBlfHwidW5rbm93bi1ldmVudCI7ZS5jdXJyZW50VGFyZ2V0PW4sZGsocix0LHZvaWQgMCxlKSxlLmN1cnJlbnRUYXJnZXQ9bnVsbH1mdW5jdGlvbiB0ZyhlLHQpe3Q9KHQmNCkhPT0wO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dLG89ci5ldmVudDtyPXIubGlzdGVuZXJzO2U6e3ZhciBhPXZvaWQgMDtpZih0KWZvcih2YXIgaT1yLmxlbmd0aC0xOzA8PWk7aS0tKXt2YXIgcz1yW2ldLGw9cy5pbnN0YW5jZSxjPXMuY3VycmVudFRhcmdldDtpZihzPXMubGlzdGVuZXIsbCE9PWEmJm8uaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBlO0NoKG8scyxjKSxhPWx9ZWxzZSBmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXtpZihzPXJbaV0sbD1zLmluc3RhbmNlLGM9cy5jdXJyZW50VGFyZ2V0LHM9cy5saXN0ZW5lcixsIT09YSYmby5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7Q2gobyxzLGMpLGE9bH19fWlmKEJzKXRocm93IGU9d3UsQnM9ITEsd3U9bnVsbCxlfWZ1bmN0aW9uIExlKGUsdCl7dmFyIG49dFtDdV07bj09PXZvaWQgMCYmKG49dFtDdV09bmV3IFNldCk7dmFyIHI9ZSsiX19idWJibGUiO24uaGFzKHIpfHwobmcodCxlLDIsITEpLG4uYWRkKHIpKX1mdW5jdGlvbiBqYyhlLHQsbil7dmFyIHI9MDt0JiYocnw9NCksbmcobixlLHIsdCl9dmFyIFNzPSJfcmVhY3RMaXN0ZW5pbmciK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO2Z1bmN0aW9uIHVpKGUpe2lmKCFlW1NzXSl7ZVtTc109ITAsY20uZm9yRWFjaChmdW5jdGlvbihuKXtuIT09InNlbGVjdGlvbmNoYW5nZSImJihkeC5oYXMobil8fGpjKG4sITEsZSksamMobiwhMCxlKSl9KTt2YXIgdD1lLm5vZGVUeXBlPT09OT9lOmUub3duZXJEb2N1bWVudDt0PT09bnVsbHx8dFtTc118fCh0W1NzXT0hMCxqYygic2VsZWN0aW9uY2hhbmdlIiwhMSx0KSl9fWZ1bmN0aW9uIG5nKGUsdCxuLHIpe3N3aXRjaChVbSh0KSl7Y2FzZSAxOnZhciBvPURrO2JyZWFrO2Nhc2UgNDpvPV9rO2JyZWFrO2RlZmF1bHQ6bz1pZH1uPW8uYmluZChudWxsLHQsbixlKSxvPXZvaWQgMCwhdnV8fHQhPT0idG91Y2hzdGFydCImJnQhPT0idG91Y2htb3ZlIiYmdCE9PSJ3aGVlbCJ8fChvPSEwKSxyP28hPT12b2lkIDA/ZS5hZGRFdmVudExpc3RlbmVyKHQsbix7Y2FwdHVyZTohMCxwYXNzaXZlOm99KTplLmFkZEV2ZW50TGlzdGVuZXIodCxuLCEwKTpvIT09dm9pZCAwP2UuYWRkRXZlbnRMaXN0ZW5lcih0LG4se3Bhc3NpdmU6b30pOmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITEpfWZ1bmN0aW9uIEtjKGUsdCxuLHIsbyl7dmFyIGE9cjtpZighKHQmMSkmJiEodCYyKSYmciE9PW51bGwpZTpmb3IoOzspe2lmKHI9PT1udWxsKXJldHVybjt2YXIgaT1yLnRhZztpZihpPT09M3x8aT09PTQpe3ZhciBzPXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87aWYocz09PW98fHMubm9kZVR5cGU9PT04JiZzLnBhcmVudE5vZGU9PT1vKWJyZWFrO2lmKGk9PT00KWZvcihpPXIucmV0dXJuO2khPT1udWxsOyl7dmFyIGw9aS50YWc7aWYoKGw9PT0zfHxsPT09NCkmJihsPWkuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sbD09PW98fGwubm9kZVR5cGU9PT04JiZsLnBhcmVudE5vZGU9PT1vKSlyZXR1cm47aT1pLnJldHVybn1mb3IoO3MhPT1udWxsOyl7aWYoaT1ybyhzKSxpPT09bnVsbClyZXR1cm47aWYobD1pLnRhZyxsPT09NXx8bD09PTYpe3I9YT1pO2NvbnRpbnVlIGV9cz1zLnBhcmVudE5vZGV9fXI9ci5yZXR1cm59VG0oZnVuY3Rpb24oKXt2YXIgYz1hLHU9bmQobikscD1bXTtlOnt2YXIgZD1lZy5nZXQoZSk7aWYoZCE9PXZvaWQgMCl7dmFyIGg9bGQseT1lO3N3aXRjaChlKXtjYXNlImtleXByZXNzIjppZihJcyhuKT09PTApYnJlYWsgZTtjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOmg9SGs7YnJlYWs7Y2FzZSJmb2N1c2luIjp5PSJmb2N1cyIsaD1IYzticmVhaztjYXNlImZvY3Vzb3V0Ijp5PSJibHVyIixoPUhjO2JyZWFrO2Nhc2UiYmVmb3JlYmx1ciI6Y2FzZSJhZnRlcmJsdXIiOmg9SGM7YnJlYWs7Y2FzZSJjbGljayI6aWYobi5idXR0b249PT0yKWJyZWFrIGU7Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJtb3VzZWRvd24iOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNldXAiOmNhc2UibW91c2VvdXQiOmNhc2UibW91c2VvdmVyIjpjYXNlImNvbnRleHRtZW51IjpoPWdoO2JyZWFrO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UiZHJhZ3N0YXJ0IjpjYXNlImRyb3AiOmg9T2s7YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaG1vdmUiOmNhc2UidG91Y2hzdGFydCI6aD1qazticmVhaztjYXNlIFFtOmNhc2UgSm06Y2FzZSBYbTpoPU1rO2JyZWFrO2Nhc2UgWm06aD1ZazticmVhaztjYXNlInNjcm9sbCI6aD1DazticmVhaztjYXNlIndoZWVsIjpoPVFrO2JyZWFrO2Nhc2UiY29weSI6Y2FzZSJjdXQiOmNhc2UicGFzdGUiOmg9TGs7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJ1cCI6aD12aH12YXIgdz0odCY0KSE9PTAsYj0hdyYmZT09PSJzY3JvbGwiLGc9dz9kIT09bnVsbD9kKyJDYXB0dXJlIjpudWxsOmQ7dz1bXTtmb3IodmFyIG09Yyx2O20hPT1udWxsOyl7dj1tO3ZhciBmPXYuc3RhdGVOb2RlO2lmKHYudGFnPT09NSYmZiE9PW51bGwmJih2PWYsZyE9PW51bGwmJihmPW9pKG0sZyksZiE9bnVsbCYmdy5wdXNoKGRpKG0sZix2KSkpKSxiKWJyZWFrO209bS5yZXR1cm59MDx3Lmxlbmd0aCYmKGQ9bmV3IGgoZCx5LG51bGwsbix1KSxwLnB1c2goe2V2ZW50OmQsbGlzdGVuZXJzOnd9KSl9fWlmKCEodCY3KSl7ZTp7aWYoZD1lPT09Im1vdXNlb3ZlciJ8fGU9PT0icG9pbnRlcm92ZXIiLGg9ZT09PSJtb3VzZW91dCJ8fGU9PT0icG9pbnRlcm91dCIsZCYmbiE9PWd1JiYoeT1uLnJlbGF0ZWRUYXJnZXR8fG4uZnJvbUVsZW1lbnQpJiYocm8oeSl8fHlbYXJdKSlicmVhayBlO2lmKChofHxkKSYmKGQ9dS53aW5kb3c9PT11P3U6KGQ9dS5vd25lckRvY3VtZW50KT9kLmRlZmF1bHRWaWV3fHxkLnBhcmVudFdpbmRvdzp3aW5kb3csaD8oeT1uLnJlbGF0ZWRUYXJnZXR8fG4udG9FbGVtZW50LGg9Yyx5PXk/cm8oeSk6bnVsbCx5IT09bnVsbCYmKGI9bW8oeSkseSE9PWJ8fHkudGFnIT09NSYmeS50YWchPT02KSYmKHk9bnVsbCkpOihoPW51bGwseT1jKSxoIT09eSkpe2lmKHc9Z2gsZj0ib25Nb3VzZUxlYXZlIixnPSJvbk1vdXNlRW50ZXIiLG09Im1vdXNlIiwoZT09PSJwb2ludGVyb3V0Inx8ZT09PSJwb2ludGVyb3ZlciIpJiYodz12aCxmPSJvblBvaW50ZXJMZWF2ZSIsZz0ib25Qb2ludGVyRW50ZXIiLG09InBvaW50ZXIiKSxiPWg9PW51bGw/ZDpqbyhoKSx2PXk9PW51bGw/ZDpqbyh5KSxkPW5ldyB3KGYsbSsibGVhdmUiLGgsbix1KSxkLnRhcmdldD1iLGQucmVsYXRlZFRhcmdldD12LGY9bnVsbCxybyh1KT09PWMmJih3PW5ldyB3KGcsbSsiZW50ZXIiLHksbix1KSx3LnRhcmdldD12LHcucmVsYXRlZFRhcmdldD1iLGY9dyksYj1mLGgmJnkpdDp7Zm9yKHc9aCxnPXksbT0wLHY9dzt2O3Y9JG8odikpbSsrO2Zvcih2PTAsZj1nO2Y7Zj0kbyhmKSl2Kys7Zm9yKDswPG0tdjspdz0kbyh3KSxtLS07Zm9yKDswPHYtbTspZz0kbyhnKSx2LS07Zm9yKDttLS07KXtpZih3PT09Z3x8ZyE9PW51bGwmJnc9PT1nLmFsdGVybmF0ZSlicmVhayB0O3c9JG8odyksZz0kbyhnKX13PW51bGx9ZWxzZSB3PW51bGw7aCE9PW51bGwmJkFoKHAsZCxoLHcsITEpLHkhPT1udWxsJiZiIT09bnVsbCYmQWgocCxiLHksdywhMCl9fWU6e2lmKGQ9Yz9qbyhjKTp3aW5kb3csaD1kLm5vZGVOYW1lJiZkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksaD09PSJzZWxlY3QifHxoPT09ImlucHV0IiYmZC50eXBlPT09ImZpbGUiKXZhciB4PXJ4O2Vsc2UgaWYoa2goZCkpaWYoVm0peD1zeDtlbHNle3g9YXg7dmFyIFM9b3h9ZWxzZShoPWQubm9kZU5hbWUpJiZoLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYoZC50eXBlPT09ImNoZWNrYm94Inx8ZC50eXBlPT09InJhZGlvIikmJih4PWl4KTtpZih4JiYoeD14KGUsYykpKXtHbShwLHgsbix1KTticmVhayBlfVMmJlMoZSxkLGMpLGU9PT0iZm9jdXNvdXQiJiYoUz1kLl93cmFwcGVyU3RhdGUpJiZTLmNvbnRyb2xsZWQmJmQudHlwZT09PSJudW1iZXIiJiZkdShkLCJudW1iZXIiLGQudmFsdWUpfXN3aXRjaChTPWM/am8oYyk6d2luZG93LGUpe2Nhc2UiZm9jdXNpbiI6KGtoKFMpfHxTLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIikmJihHbz1TLFN1PWMsSmE9bnVsbCk7YnJlYWs7Y2FzZSJmb2N1c291dCI6SmE9U3U9R289bnVsbDticmVhaztjYXNlIm1vdXNlZG93biI6RXU9ITA7YnJlYWs7Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJtb3VzZXVwIjpjYXNlImRyYWdlbmQiOkV1PSExLFRoKHAsbix1KTticmVhaztjYXNlInNlbGVjdGlvbmNoYW5nZSI6aWYodXgpYnJlYWs7Y2FzZSJrZXlkb3duIjpjYXNlImtleXVwIjpUaChwLG4sdSl9dmFyIE47aWYodWQpZTp7c3dpdGNoKGUpe2Nhc2UiY29tcG9zaXRpb25zdGFydCI6dmFyIEQ9Im9uQ29tcG9zaXRpb25TdGFydCI7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9uZW5kIjpEPSJvbkNvbXBvc2l0aW9uRW5kIjticmVhayBlO2Nhc2UiY29tcG9zaXRpb251cGRhdGUiOkQ9Im9uQ29tcG9zaXRpb25VcGRhdGUiO2JyZWFrIGV9RD12b2lkIDB9ZWxzZSBIbz9CbShlLG4pJiYoRD0ib25Db21wb3NpdGlvbkVuZCIpOmU9PT0ia2V5ZG93biImJm4ua2V5Q29kZT09PTIyOSYmKEQ9Im9uQ29tcG9zaXRpb25TdGFydCIpO0QmJihXbSYmbi5sb2NhbGUhPT0ia28iJiYoSG98fEQhPT0ib25Db21wb3NpdGlvblN0YXJ0Ij9EPT09Im9uQ29tcG9zaXRpb25FbmQiJiZIbyYmKE49JG0oKSk6KE5yPXUsc2Q9InZhbHVlImluIE5yP05yLnZhbHVlOk5yLnRleHRDb250ZW50LEhvPSEwKSksUz1LcyhjLEQpLDA8Uy5sZW5ndGgmJihEPW5ldyB5aChELGUsbnVsbCxuLHUpLHAucHVzaCh7ZXZlbnQ6RCxsaXN0ZW5lcnM6U30pLE4/RC5kYXRhPU46KE49SG0obiksTiE9PW51bGwmJihELmRhdGE9TikpKSksKE49WGs/WmsoZSxuKTpleChlLG4pKSYmKGM9S3MoYywib25CZWZvcmVJbnB1dCIpLDA8Yy5sZW5ndGgmJih1PW5ldyB5aCgib25CZWZvcmVJbnB1dCIsImJlZm9yZWlucHV0IixudWxsLG4sdSkscC5wdXNoKHtldmVudDp1LGxpc3RlbmVyczpjfSksdS5kYXRhPU4pKX10ZyhwLHQpfSl9ZnVuY3Rpb24gZGkoZSx0LG4pe3JldHVybntpbnN0YW5jZTplLGxpc3RlbmVyOnQsY3VycmVudFRhcmdldDpufX1mdW5jdGlvbiBLcyhlLHQpe2Zvcih2YXIgbj10KyJDYXB0dXJlIixyPVtdO2UhPT1udWxsOyl7dmFyIG89ZSxhPW8uc3RhdGVOb2RlO28udGFnPT09NSYmYSE9PW51bGwmJihvPWEsYT1vaShlLG4pLGEhPW51bGwmJnIudW5zaGlmdChkaShlLGEsbykpLGE9b2koZSx0KSxhIT1udWxsJiZyLnB1c2goZGkoZSxhLG8pKSksZT1lLnJldHVybn1yZXR1cm4gcn1mdW5jdGlvbiAkbyhlKXtpZihlPT09bnVsbClyZXR1cm4gbnVsbDtkbyBlPWUucmV0dXJuO3doaWxlKGUmJmUudGFnIT09NSk7cmV0dXJuIGV8fG51bGx9ZnVuY3Rpb24gQWgoZSx0LG4scixvKXtmb3IodmFyIGE9dC5fcmVhY3ROYW1lLGk9W107biE9PW51bGwmJm4hPT1yOyl7dmFyIHM9bixsPXMuYWx0ZXJuYXRlLGM9cy5zdGF0ZU5vZGU7aWYobCE9PW51bGwmJmw9PT1yKWJyZWFrO3MudGFnPT09NSYmYyE9PW51bGwmJihzPWMsbz8obD1vaShuLGEpLGwhPW51bGwmJmkudW5zaGlmdChkaShuLGwscykpKTpvfHwobD1vaShuLGEpLGwhPW51bGwmJmkucHVzaChkaShuLGwscykpKSksbj1uLnJldHVybn1pLmxlbmd0aCE9PTAmJmUucHVzaCh7ZXZlbnQ6dCxsaXN0ZW5lcnM6aX0pfXZhciBweD0vXHJcbj8vZyxmeD0vXHUwMDAwfFx1RkZGRC9nO2Z1bmN0aW9uIE9oKGUpe3JldHVybih0eXBlb2YgZT09InN0cmluZyI/ZToiIitlKS5yZXBsYWNlKHB4LGAKYCkucmVwbGFjZShmeCwiIil9ZnVuY3Rpb24gRXMoZSx0LG4pe2lmKHQ9T2godCksT2goZSkhPT10JiZuKXRocm93IEVycm9yKE0oNDI1KSl9ZnVuY3Rpb24gWXMoKXt9dmFyIFR1PW51bGwsTnU9bnVsbDtmdW5jdGlvbiBEdShlLHQpe3JldHVybiBlPT09InRleHRhcmVhInx8ZT09PSJub3NjcmlwdCJ8fHR5cGVvZiB0LmNoaWxkcmVuPT0ic3RyaW5nInx8dHlwZW9mIHQuY2hpbGRyZW49PSJudW1iZXIifHx0eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTD09Im9iamVjdCImJnQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPT1udWxsJiZ0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCE9bnVsbH12YXIgX3U9dHlwZW9mIHNldFRpbWVvdXQ9PSJmdW5jdGlvbiI/c2V0VGltZW91dDp2b2lkIDAsaHg9dHlwZW9mIGNsZWFyVGltZW91dD09ImZ1bmN0aW9uIj9jbGVhclRpbWVvdXQ6dm9pZCAwLEloPXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2U6dm9pZCAwLG14PXR5cGVvZiBxdWV1ZU1pY3JvdGFzaz09ImZ1bmN0aW9uIj9xdWV1ZU1pY3JvdGFzazp0eXBlb2YgSWg8InUiP2Z1bmN0aW9uKGUpe3JldHVybiBJaC5yZXNvbHZlKG51bGwpLnRoZW4oZSkuY2F0Y2goZ3gpfTpfdTtmdW5jdGlvbiBneChlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfWZ1bmN0aW9uIFljKGUsdCl7dmFyIG49dCxyPTA7ZG97dmFyIG89bi5uZXh0U2libGluZztpZihlLnJlbW92ZUNoaWxkKG4pLG8mJm8ubm9kZVR5cGU9PT04KWlmKG49by5kYXRhLG49PT0iLyQiKXtpZihyPT09MCl7ZS5yZW1vdmVDaGlsZChvKSxzaSh0KTtyZXR1cm59ci0tfWVsc2UgbiE9PSIkIiYmbiE9PSIkPyImJm4hPT0iJCEifHxyKys7bj1vfXdoaWxlKG4pO3NpKHQpfWZ1bmN0aW9uIE9yKGUpe2Zvcig7ZSE9bnVsbDtlPWUubmV4dFNpYmxpbmcpe3ZhciB0PWUubm9kZVR5cGU7aWYodD09PTF8fHQ9PT0zKWJyZWFrO2lmKHQ9PT04KXtpZih0PWUuZGF0YSx0PT09IiQifHx0PT09IiQhInx8dD09PSIkPyIpYnJlYWs7aWYodD09PSIvJCIpcmV0dXJuIG51bGx9fXJldHVybiBlfWZ1bmN0aW9uIFJoKGUpe2U9ZS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciB0PTA7ZTspe2lmKGUubm9kZVR5cGU9PT04KXt2YXIgbj1lLmRhdGE7aWYobj09PSIkInx8bj09PSIkISJ8fG49PT0iJD8iKXtpZih0PT09MClyZXR1cm4gZTt0LS19ZWxzZSBuPT09Ii8kIiYmdCsrfWU9ZS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9dmFyIGZhPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLFduPSJfX3JlYWN0RmliZXIkIitmYSxwaT0iX19yZWFjdFByb3BzJCIrZmEsYXI9Il9fcmVhY3RDb250YWluZXIkIitmYSxDdT0iX19yZWFjdEV2ZW50cyQiK2ZhLHl4PSJfX3JlYWN0TGlzdGVuZXJzJCIrZmEsdng9Il9fcmVhY3RIYW5kbGVzJCIrZmE7ZnVuY3Rpb24gcm8oZSl7dmFyIHQ9ZVtXbl07aWYodClyZXR1cm4gdDtmb3IodmFyIG49ZS5wYXJlbnROb2RlO247KXtpZih0PW5bYXJdfHxuW1duXSl7aWYobj10LmFsdGVybmF0ZSx0LmNoaWxkIT09bnVsbHx8biE9PW51bGwmJm4uY2hpbGQhPT1udWxsKWZvcihlPVJoKGUpO2UhPT1udWxsOyl7aWYobj1lW1duXSlyZXR1cm4gbjtlPVJoKGUpfXJldHVybiB0fWU9bixuPWUucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBraShlKXtyZXR1cm4gZT1lW1duXXx8ZVthcl0sIWV8fGUudGFnIT09NSYmZS50YWchPT02JiZlLnRhZyE9PTEzJiZlLnRhZyE9PTM/bnVsbDplfWZ1bmN0aW9uIGpvKGUpe2lmKGUudGFnPT09NXx8ZS50YWc9PT02KXJldHVybiBlLnN0YXRlTm9kZTt0aHJvdyBFcnJvcihNKDMzKSl9ZnVuY3Rpb24gaGwoZSl7cmV0dXJuIGVbcGldfHxudWxsfXZhciBBdT1bXSxLbz0tMTtmdW5jdGlvbiBVcihlKXtyZXR1cm57Y3VycmVudDplfX1mdW5jdGlvbiB6ZShlKXswPktvfHwoZS5jdXJyZW50PUF1W0tvXSxBdVtLb109bnVsbCxLby0tKX1mdW5jdGlvbiBNZShlLHQpe0tvKyssQXVbS29dPWUuY3VycmVudCxlLmN1cnJlbnQ9dH12YXIgenI9e30sU3Q9VXIoenIpLEZ0PVVyKCExKSxsbz16cjtmdW5jdGlvbiBpYShlLHQpe3ZhciBuPWUudHlwZS5jb250ZXh0VHlwZXM7aWYoIW4pcmV0dXJuIHpyO3ZhciByPWUuc3RhdGVOb2RlO2lmKHImJnIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD09PXQpcmV0dXJuIHIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7dmFyIG89e30sYTtmb3IoYSBpbiBuKW9bYV09dFthXTtyZXR1cm4gciYmKGU9ZS5zdGF0ZU5vZGUsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PXQsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1vKSxvfWZ1bmN0aW9uIFV0KGUpe3JldHVybiBlPWUuY2hpbGRDb250ZXh0VHlwZXMsZSE9bnVsbH1mdW5jdGlvbiBxcygpe3plKEZ0KSx6ZShTdCl9ZnVuY3Rpb24gTWgoZSx0LG4pe2lmKFN0LmN1cnJlbnQhPT16cil0aHJvdyBFcnJvcihNKDE2OCkpO01lKFN0LHQpLE1lKEZ0LG4pfWZ1bmN0aW9uIHJnKGUsdCxuKXt2YXIgcj1lLnN0YXRlTm9kZTtpZih0PXQuY2hpbGRDb250ZXh0VHlwZXMsdHlwZW9mIHIuZ2V0Q2hpbGRDb250ZXh0IT0iZnVuY3Rpb24iKXJldHVybiBuO3I9ci5nZXRDaGlsZENvbnRleHQoKTtmb3IodmFyIG8gaW4gcilpZighKG8gaW4gdCkpdGhyb3cgRXJyb3IoTSgxMDgsb2soZSl8fCJVbmtub3duIixvKSk7cmV0dXJuIEtlKHt9LG4scil9ZnVuY3Rpb24gUXMoZSl7cmV0dXJuIGU9KGU9ZS5zdGF0ZU5vZGUpJiZlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHx6cixsbz1TdC5jdXJyZW50LE1lKFN0LGUpLE1lKEZ0LEZ0LmN1cnJlbnQpLCEwfWZ1bmN0aW9uIFBoKGUsdCxuKXt2YXIgcj1lLnN0YXRlTm9kZTtpZighcil0aHJvdyBFcnJvcihNKDE2OSkpO24/KGU9cmcoZSx0LGxvKSxyLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0PWUsemUoRnQpLHplKFN0KSxNZShTdCxlKSk6emUoRnQpLE1lKEZ0LG4pfXZhciBlcj1udWxsLG1sPSExLHFjPSExO2Z1bmN0aW9uIG9nKGUpe2VyPT09bnVsbD9lcj1bZV06ZXIucHVzaChlKX1mdW5jdGlvbiB3eChlKXttbD0hMCxvZyhlKX1mdW5jdGlvbiAkcigpe2lmKCFxYyYmZXIhPT1udWxsKXtxYz0hMDt2YXIgZT0wLHQ9RGU7dHJ5e3ZhciBuPWVyO2ZvcihEZT0xO2U8bi5sZW5ndGg7ZSsrKXt2YXIgcj1uW2VdO2RvIHI9cighMCk7d2hpbGUociE9PW51bGwpfWVyPW51bGwsbWw9ITF9Y2F0Y2gobyl7dGhyb3cgZXIhPT1udWxsJiYoZXI9ZXIuc2xpY2UoZSsxKSksQ20ocmQsJHIpLG99ZmluYWxseXtEZT10LHFjPSExfX1yZXR1cm4gbnVsbH12YXIgWW89W10scW89MCxKcz1udWxsLFhzPTAscm49W10sb249MCxjbz1udWxsLHRyPTEsbnI9IiI7ZnVuY3Rpb24gdG8oZSx0KXtZb1txbysrXT1YcyxZb1txbysrXT1KcyxKcz1lLFhzPXR9ZnVuY3Rpb24gYWcoZSx0LG4pe3JuW29uKytdPXRyLHJuW29uKytdPW5yLHJuW29uKytdPWNvLGNvPWU7dmFyIHI9dHI7ZT1ucjt2YXIgbz0zMi1FbihyKS0xO3ImPX4oMTw8byksbis9MTt2YXIgYT0zMi1Fbih0KStvO2lmKDMwPGEpe3ZhciBpPW8tbyU1O2E9KHImKDE8PGkpLTEpLnRvU3RyaW5nKDMyKSxyPj49aSxvLT1pLHRyPTE8PDMyLUVuKHQpK298bjw8b3xyLG5yPWErZX1lbHNlIHRyPTE8PGF8bjw8b3xyLG5yPWV9ZnVuY3Rpb24gcGQoZSl7ZS5yZXR1cm4hPT1udWxsJiYodG8oZSwxKSxhZyhlLDEsMCkpfWZ1bmN0aW9uIGZkKGUpe2Zvcig7ZT09PUpzOylKcz1Zb1stLXFvXSxZb1txb109bnVsbCxYcz1Zb1stLXFvXSxZb1txb109bnVsbDtmb3IoO2U9PT1jbzspY289cm5bLS1vbl0scm5bb25dPW51bGwsbnI9cm5bLS1vbl0scm5bb25dPW51bGwsdHI9cm5bLS1vbl0scm5bb25dPW51bGx9dmFyIFl0PW51bGwsS3Q9bnVsbCwkZT0hMSxTbj1udWxsO2Z1bmN0aW9uIGlnKGUsdCl7dmFyIG49YW4oNSxudWxsLG51bGwsMCk7bi5lbGVtZW50VHlwZT0iREVMRVRFRCIsbi5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLHQ9ZS5kZWxldGlvbnMsdD09PW51bGw/KGUuZGVsZXRpb25zPVtuXSxlLmZsYWdzfD0xNik6dC5wdXNoKG4pfWZ1bmN0aW9uIExoKGUsdCl7c3dpdGNoKGUudGFnKXtjYXNlIDU6dmFyIG49ZS50eXBlO3JldHVybiB0PXQubm9kZVR5cGUhPT0xfHxuLnRvTG93ZXJDYXNlKCkhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bnVsbDp0LHQhPT1udWxsPyhlLnN0YXRlTm9kZT10LFl0PWUsS3Q9T3IodC5maXJzdENoaWxkKSwhMCk6ITE7Y2FzZSA2OnJldHVybiB0PWUucGVuZGluZ1Byb3BzPT09IiJ8fHQubm9kZVR5cGUhPT0zP251bGw6dCx0IT09bnVsbD8oZS5zdGF0ZU5vZGU9dCxZdD1lLEt0PW51bGwsITApOiExO2Nhc2UgMTM6cmV0dXJuIHQ9dC5ub2RlVHlwZSE9PTg/bnVsbDp0LHQhPT1udWxsPyhuPWNvIT09bnVsbD97aWQ6dHIsb3ZlcmZsb3c6bnJ9Om51bGwsZS5tZW1vaXplZFN0YXRlPXtkZWh5ZHJhdGVkOnQsdHJlZUNvbnRleHQ6bixyZXRyeUxhbmU6MTA3Mzc0MTgyNH0sbj1hbigxOCxudWxsLG51bGwsMCksbi5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLGUuY2hpbGQ9bixZdD1lLEt0PW51bGwsITApOiExO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIE91KGUpe3JldHVybihlLm1vZGUmMSkhPT0wJiYoZS5mbGFncyYxMjgpPT09MH1mdW5jdGlvbiBJdShlKXtpZigkZSl7dmFyIHQ9S3Q7aWYodCl7dmFyIG49dDtpZighTGgoZSx0KSl7aWYoT3UoZSkpdGhyb3cgRXJyb3IoTSg0MTgpKTt0PU9yKG4ubmV4dFNpYmxpbmcpO3ZhciByPVl0O3QmJkxoKGUsdCk/aWcocixuKTooZS5mbGFncz1lLmZsYWdzJi00MDk3fDIsJGU9ITEsWXQ9ZSl9fWVsc2V7aWYoT3UoZSkpdGhyb3cgRXJyb3IoTSg0MTgpKTtlLmZsYWdzPWUuZmxhZ3MmLTQwOTd8MiwkZT0hMSxZdD1lfX19ZnVuY3Rpb24gemgoZSl7Zm9yKGU9ZS5yZXR1cm47ZSE9PW51bGwmJmUudGFnIT09NSYmZS50YWchPT0zJiZlLnRhZyE9PTEzOyllPWUucmV0dXJuO1l0PWV9ZnVuY3Rpb24gVHMoZSl7aWYoZSE9PVl0KXJldHVybiExO2lmKCEkZSlyZXR1cm4gemgoZSksJGU9ITAsITE7dmFyIHQ7aWYoKHQ9ZS50YWchPT0zKSYmISh0PWUudGFnIT09NSkmJih0PWUudHlwZSx0PXQhPT0iaGVhZCImJnQhPT0iYm9keSImJiFEdShlLnR5cGUsZS5tZW1vaXplZFByb3BzKSksdCYmKHQ9S3QpKXtpZihPdShlKSl0aHJvdyBzZygpLEVycm9yKE0oNDE4KSk7Zm9yKDt0OylpZyhlLHQpLHQ9T3IodC5uZXh0U2libGluZyl9aWYoemgoZSksZS50YWc9PT0xMyl7aWYoZT1lLm1lbW9pemVkU3RhdGUsZT1lIT09bnVsbD9lLmRlaHlkcmF0ZWQ6bnVsbCwhZSl0aHJvdyBFcnJvcihNKDMxNykpO2U6e2ZvcihlPWUubmV4dFNpYmxpbmcsdD0wO2U7KXtpZihlLm5vZGVUeXBlPT09OCl7dmFyIG49ZS5kYXRhO2lmKG49PT0iLyQiKXtpZih0PT09MCl7S3Q9T3IoZS5uZXh0U2libGluZyk7YnJlYWsgZX10LS19ZWxzZSBuIT09IiQiJiZuIT09IiQhIiYmbiE9PSIkPyJ8fHQrK31lPWUubmV4dFNpYmxpbmd9S3Q9bnVsbH19ZWxzZSBLdD1ZdD9PcihlLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1mdW5jdGlvbiBzZygpe2Zvcih2YXIgZT1LdDtlOyllPU9yKGUubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIHNhKCl7S3Q9WXQ9bnVsbCwkZT0hMX1mdW5jdGlvbiBoZChlKXtTbj09PW51bGw/U249W2VdOlNuLnB1c2goZSl9dmFyIGJ4PWxyLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO2Z1bmN0aW9uIFVhKGUsdCxuKXtpZihlPW4ucmVmLGUhPT1udWxsJiZ0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGUhPSJvYmplY3QiKXtpZihuLl9vd25lcil7aWYobj1uLl9vd25lcixuKXtpZihuLnRhZyE9PTEpdGhyb3cgRXJyb3IoTSgzMDkpKTt2YXIgcj1uLnN0YXRlTm9kZX1pZighcil0aHJvdyBFcnJvcihNKDE0NyxlKSk7dmFyIG89cixhPSIiK2U7cmV0dXJuIHQhPT1udWxsJiZ0LnJlZiE9PW51bGwmJnR5cGVvZiB0LnJlZj09ImZ1bmN0aW9uIiYmdC5yZWYuX3N0cmluZ1JlZj09PWE/dC5yZWY6KHQ9ZnVuY3Rpb24oaSl7dmFyIHM9by5yZWZzO2k9PT1udWxsP2RlbGV0ZSBzW2FdOnNbYV09aX0sdC5fc3RyaW5nUmVmPWEsdCl9aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IEVycm9yKE0oMjg0KSk7aWYoIW4uX293bmVyKXRocm93IEVycm9yKE0oMjkwLGUpKX1yZXR1cm4gZX1mdW5jdGlvbiBOcyhlLHQpe3Rocm93IGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLEVycm9yKE0oMzEsZT09PSJbb2JqZWN0IE9iamVjdF0iPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKHQpLmpvaW4oIiwgIikrIn0iOmUpKX1mdW5jdGlvbiBGaChlKXt2YXIgdD1lLl9pbml0O3JldHVybiB0KGUuX3BheWxvYWQpfWZ1bmN0aW9uIGxnKGUpe2Z1bmN0aW9uIHQoZyxtKXtpZihlKXt2YXIgdj1nLmRlbGV0aW9uczt2PT09bnVsbD8oZy5kZWxldGlvbnM9W21dLGcuZmxhZ3N8PTE2KTp2LnB1c2gobSl9fWZ1bmN0aW9uIG4oZyxtKXtpZighZSlyZXR1cm4gbnVsbDtmb3IoO20hPT1udWxsOyl0KGcsbSksbT1tLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcihnLG0pe2ZvcihnPW5ldyBNYXA7bSE9PW51bGw7KW0ua2V5IT09bnVsbD9nLnNldChtLmtleSxtKTpnLnNldChtLmluZGV4LG0pLG09bS5zaWJsaW5nO3JldHVybiBnfWZ1bmN0aW9uIG8oZyxtKXtyZXR1cm4gZz1QcihnLG0pLGcuaW5kZXg9MCxnLnNpYmxpbmc9bnVsbCxnfWZ1bmN0aW9uIGEoZyxtLHYpe3JldHVybiBnLmluZGV4PXYsZT8odj1nLmFsdGVybmF0ZSx2IT09bnVsbD8odj12LmluZGV4LHY8bT8oZy5mbGFnc3w9MixtKTp2KTooZy5mbGFnc3w9MixtKSk6KGcuZmxhZ3N8PTEwNDg1NzYsbSl9ZnVuY3Rpb24gaShnKXtyZXR1cm4gZSYmZy5hbHRlcm5hdGU9PT1udWxsJiYoZy5mbGFnc3w9MiksZ31mdW5jdGlvbiBzKGcsbSx2LGYpe3JldHVybiBtPT09bnVsbHx8bS50YWchPT02PyhtPW51KHYsZy5tb2RlLGYpLG0ucmV0dXJuPWcsbSk6KG09byhtLHYpLG0ucmV0dXJuPWcsbSl9ZnVuY3Rpb24gbChnLG0sdixmKXt2YXIgeD12LnR5cGU7cmV0dXJuIHg9PT1Cbz91KGcsbSx2LnByb3BzLmNoaWxkcmVuLGYsdi5rZXkpOm0hPT1udWxsJiYobS5lbGVtZW50VHlwZT09PXh8fHR5cGVvZiB4PT0ib2JqZWN0IiYmeCE9PW51bGwmJnguJCR0eXBlb2Y9PT14ciYmRmgoeCk9PT1tLnR5cGUpPyhmPW8obSx2LnByb3BzKSxmLnJlZj1VYShnLG0sdiksZi5yZXR1cm49ZyxmKTooZj1Vcyh2LnR5cGUsdi5rZXksdi5wcm9wcyxudWxsLGcubW9kZSxmKSxmLnJlZj1VYShnLG0sdiksZi5yZXR1cm49ZyxmKX1mdW5jdGlvbiBjKGcsbSx2LGYpe3JldHVybiBtPT09bnVsbHx8bS50YWchPT00fHxtLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIT09di5jb250YWluZXJJbmZvfHxtLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiE9PXYuaW1wbGVtZW50YXRpb24/KG09cnUodixnLm1vZGUsZiksbS5yZXR1cm49ZyxtKToobT1vKG0sdi5jaGlsZHJlbnx8W10pLG0ucmV0dXJuPWcsbSl9ZnVuY3Rpb24gdShnLG0sdixmLHgpe3JldHVybiBtPT09bnVsbHx8bS50YWchPT03PyhtPXNvKHYsZy5tb2RlLGYseCksbS5yZXR1cm49ZyxtKToobT1vKG0sdiksbS5yZXR1cm49ZyxtKX1mdW5jdGlvbiBwKGcsbSx2KXtpZih0eXBlb2YgbT09InN0cmluZyImJm0hPT0iInx8dHlwZW9mIG09PSJudW1iZXIiKXJldHVybiBtPW51KCIiK20sZy5tb2RlLHYpLG0ucmV0dXJuPWcsbTtpZih0eXBlb2YgbT09Im9iamVjdCImJm0hPT1udWxsKXtzd2l0Y2gobS4kJHR5cGVvZil7Y2FzZSBkczpyZXR1cm4gdj1VcyhtLnR5cGUsbS5rZXksbS5wcm9wcyxudWxsLGcubW9kZSx2KSx2LnJlZj1VYShnLG51bGwsbSksdi5yZXR1cm49Zyx2O2Nhc2UgV286cmV0dXJuIG09cnUobSxnLm1vZGUsdiksbS5yZXR1cm49ZyxtO2Nhc2UgeHI6dmFyIGY9bS5faW5pdDtyZXR1cm4gcChnLGYobS5fcGF5bG9hZCksdil9aWYoR2EobSl8fFBhKG0pKXJldHVybiBtPXNvKG0sZy5tb2RlLHYsbnVsbCksbS5yZXR1cm49ZyxtO05zKGcsbSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZChnLG0sdixmKXt2YXIgeD1tIT09bnVsbD9tLmtleTpudWxsO2lmKHR5cGVvZiB2PT0ic3RyaW5nIiYmdiE9PSIifHx0eXBlb2Ygdj09Im51bWJlciIpcmV0dXJuIHghPT1udWxsP251bGw6cyhnLG0sIiIrdixmKTtpZih0eXBlb2Ygdj09Im9iamVjdCImJnYhPT1udWxsKXtzd2l0Y2godi4kJHR5cGVvZil7Y2FzZSBkczpyZXR1cm4gdi5rZXk9PT14P2woZyxtLHYsZik6bnVsbDtjYXNlIFdvOnJldHVybiB2LmtleT09PXg/YyhnLG0sdixmKTpudWxsO2Nhc2UgeHI6cmV0dXJuIHg9di5faW5pdCxkKGcsbSx4KHYuX3BheWxvYWQpLGYpfWlmKEdhKHYpfHxQYSh2KSlyZXR1cm4geCE9PW51bGw/bnVsbDp1KGcsbSx2LGYsbnVsbCk7TnMoZyx2KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBoKGcsbSx2LGYseCl7aWYodHlwZW9mIGY9PSJzdHJpbmciJiZmIT09IiJ8fHR5cGVvZiBmPT0ibnVtYmVyIilyZXR1cm4gZz1nLmdldCh2KXx8bnVsbCxzKG0sZywiIitmLHgpO2lmKHR5cGVvZiBmPT0ib2JqZWN0IiYmZiE9PW51bGwpe3N3aXRjaChmLiQkdHlwZW9mKXtjYXNlIGRzOnJldHVybiBnPWcuZ2V0KGYua2V5PT09bnVsbD92OmYua2V5KXx8bnVsbCxsKG0sZyxmLHgpO2Nhc2UgV286cmV0dXJuIGc9Zy5nZXQoZi5rZXk9PT1udWxsP3Y6Zi5rZXkpfHxudWxsLGMobSxnLGYseCk7Y2FzZSB4cjp2YXIgUz1mLl9pbml0O3JldHVybiBoKGcsbSx2LFMoZi5fcGF5bG9hZCkseCl9aWYoR2EoZil8fFBhKGYpKXJldHVybiBnPWcuZ2V0KHYpfHxudWxsLHUobSxnLGYseCxudWxsKTtOcyhtLGYpfXJldHVybiBudWxsfWZ1bmN0aW9uIHkoZyxtLHYsZil7Zm9yKHZhciB4PW51bGwsUz1udWxsLE49bSxEPW09MCxfPW51bGw7TiE9PW51bGwmJkQ8di5sZW5ndGg7RCsrKXtOLmluZGV4PkQ/KF89TixOPW51bGwpOl89Ti5zaWJsaW5nO3ZhciBBPWQoZyxOLHZbRF0sZik7aWYoQT09PW51bGwpe049PT1udWxsJiYoTj1fKTticmVha31lJiZOJiZBLmFsdGVybmF0ZT09PW51bGwmJnQoZyxOKSxtPWEoQSxtLEQpLFM9PT1udWxsP3g9QTpTLnNpYmxpbmc9QSxTPUEsTj1ffWlmKEQ9PT12Lmxlbmd0aClyZXR1cm4gbihnLE4pLCRlJiZ0byhnLEQpLHg7aWYoTj09PW51bGwpe2Zvcig7RDx2Lmxlbmd0aDtEKyspTj1wKGcsdltEXSxmKSxOIT09bnVsbCYmKG09YShOLG0sRCksUz09PW51bGw/eD1OOlMuc2libGluZz1OLFM9Tik7cmV0dXJuICRlJiZ0byhnLEQpLHh9Zm9yKE49cihnLE4pO0Q8di5sZW5ndGg7RCsrKV89aChOLGcsRCx2W0RdLGYpLF8hPT1udWxsJiYoZSYmXy5hbHRlcm5hdGUhPT1udWxsJiZOLmRlbGV0ZShfLmtleT09PW51bGw/RDpfLmtleSksbT1hKF8sbSxEKSxTPT09bnVsbD94PV86Uy5zaWJsaW5nPV8sUz1fKTtyZXR1cm4gZSYmTi5mb3JFYWNoKGZ1bmN0aW9uKFApe3JldHVybiB0KGcsUCl9KSwkZSYmdG8oZyxEKSx4fWZ1bmN0aW9uIHcoZyxtLHYsZil7dmFyIHg9UGEodik7aWYodHlwZW9mIHghPSJmdW5jdGlvbiIpdGhyb3cgRXJyb3IoTSgxNTApKTtpZih2PXguY2FsbCh2KSx2PT1udWxsKXRocm93IEVycm9yKE0oMTUxKSk7Zm9yKHZhciBTPXg9bnVsbCxOPW0sRD1tPTAsXz1udWxsLEE9di5uZXh0KCk7TiE9PW51bGwmJiFBLmRvbmU7RCsrLEE9di5uZXh0KCkpe04uaW5kZXg+RD8oXz1OLE49bnVsbCk6Xz1OLnNpYmxpbmc7dmFyIFA9ZChnLE4sQS52YWx1ZSxmKTtpZihQPT09bnVsbCl7Tj09PW51bGwmJihOPV8pO2JyZWFrfWUmJk4mJlAuYWx0ZXJuYXRlPT09bnVsbCYmdChnLE4pLG09YShQLG0sRCksUz09PW51bGw/eD1QOlMuc2libGluZz1QLFM9UCxOPV99aWYoQS5kb25lKXJldHVybiBuKGcsTiksJGUmJnRvKGcsRCkseDtpZihOPT09bnVsbCl7Zm9yKDshQS5kb25lO0QrKyxBPXYubmV4dCgpKUE9cChnLEEudmFsdWUsZiksQSE9PW51bGwmJihtPWEoQSxtLEQpLFM9PT1udWxsP3g9QTpTLnNpYmxpbmc9QSxTPUEpO3JldHVybiAkZSYmdG8oZyxEKSx4fWZvcihOPXIoZyxOKTshQS5kb25lO0QrKyxBPXYubmV4dCgpKUE9aChOLGcsRCxBLnZhbHVlLGYpLEEhPT1udWxsJiYoZSYmQS5hbHRlcm5hdGUhPT1udWxsJiZOLmRlbGV0ZShBLmtleT09PW51bGw/RDpBLmtleSksbT1hKEEsbSxEKSxTPT09bnVsbD94PUE6Uy5zaWJsaW5nPUEsUz1BKTtyZXR1cm4gZSYmTi5mb3JFYWNoKGZ1bmN0aW9uKEkpe3JldHVybiB0KGcsSSl9KSwkZSYmdG8oZyxEKSx4fWZ1bmN0aW9uIGIoZyxtLHYsZil7aWYodHlwZW9mIHY9PSJvYmplY3QiJiZ2IT09bnVsbCYmdi50eXBlPT09Qm8mJnYua2V5PT09bnVsbCYmKHY9di5wcm9wcy5jaGlsZHJlbiksdHlwZW9mIHY9PSJvYmplY3QiJiZ2IT09bnVsbCl7c3dpdGNoKHYuJCR0eXBlb2Ype2Nhc2UgZHM6ZTp7Zm9yKHZhciB4PXYua2V5LFM9bTtTIT09bnVsbDspe2lmKFMua2V5PT09eCl7aWYoeD12LnR5cGUseD09PUJvKXtpZihTLnRhZz09PTcpe24oZyxTLnNpYmxpbmcpLG09byhTLHYucHJvcHMuY2hpbGRyZW4pLG0ucmV0dXJuPWcsZz1tO2JyZWFrIGV9fWVsc2UgaWYoUy5lbGVtZW50VHlwZT09PXh8fHR5cGVvZiB4PT0ib2JqZWN0IiYmeCE9PW51bGwmJnguJCR0eXBlb2Y9PT14ciYmRmgoeCk9PT1TLnR5cGUpe24oZyxTLnNpYmxpbmcpLG09byhTLHYucHJvcHMpLG0ucmVmPVVhKGcsUyx2KSxtLnJldHVybj1nLGc9bTticmVhayBlfW4oZyxTKTticmVha31lbHNlIHQoZyxTKTtTPVMuc2libGluZ312LnR5cGU9PT1Cbz8obT1zbyh2LnByb3BzLmNoaWxkcmVuLGcubW9kZSxmLHYua2V5KSxtLnJldHVybj1nLGc9bSk6KGY9VXModi50eXBlLHYua2V5LHYucHJvcHMsbnVsbCxnLm1vZGUsZiksZi5yZWY9VWEoZyxtLHYpLGYucmV0dXJuPWcsZz1mKX1yZXR1cm4gaShnKTtjYXNlIFdvOmU6e2ZvcihTPXYua2V5O20hPT1udWxsOyl7aWYobS5rZXk9PT1TKWlmKG0udGFnPT09NCYmbS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PXYuY29udGFpbmVySW5mbyYmbS5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb249PT12LmltcGxlbWVudGF0aW9uKXtuKGcsbS5zaWJsaW5nKSxtPW8obSx2LmNoaWxkcmVufHxbXSksbS5yZXR1cm49ZyxnPW07YnJlYWsgZX1lbHNle24oZyxtKTticmVha31lbHNlIHQoZyxtKTttPW0uc2libGluZ31tPXJ1KHYsZy5tb2RlLGYpLG0ucmV0dXJuPWcsZz1tfXJldHVybiBpKGcpO2Nhc2UgeHI6cmV0dXJuIFM9di5faW5pdCxiKGcsbSxTKHYuX3BheWxvYWQpLGYpfWlmKEdhKHYpKXJldHVybiB5KGcsbSx2LGYpO2lmKFBhKHYpKXJldHVybiB3KGcsbSx2LGYpO05zKGcsdil9cmV0dXJuIHR5cGVvZiB2PT0ic3RyaW5nIiYmdiE9PSIifHx0eXBlb2Ygdj09Im51bWJlciI/KHY9IiIrdixtIT09bnVsbCYmbS50YWc9PT02PyhuKGcsbS5zaWJsaW5nKSxtPW8obSx2KSxtLnJldHVybj1nLGc9bSk6KG4oZyxtKSxtPW51KHYsZy5tb2RlLGYpLG0ucmV0dXJuPWcsZz1tKSxpKGcpKTpuKGcsbSl9cmV0dXJuIGJ9dmFyIGxhPWxnKCEwKSxjZz1sZyghMSksWnM9VXIobnVsbCksZWw9bnVsbCxRbz1udWxsLG1kPW51bGw7ZnVuY3Rpb24gZ2QoKXttZD1Rbz1lbD1udWxsfWZ1bmN0aW9uIHlkKGUpe3ZhciB0PVpzLmN1cnJlbnQ7emUoWnMpLGUuX2N1cnJlbnRWYWx1ZT10fWZ1bmN0aW9uIFJ1KGUsdCxuKXtmb3IoO2UhPT1udWxsOyl7dmFyIHI9ZS5hbHRlcm5hdGU7aWYoKGUuY2hpbGRMYW5lcyZ0KSE9PXQ/KGUuY2hpbGRMYW5lc3w9dCxyIT09bnVsbCYmKHIuY2hpbGRMYW5lc3w9dCkpOnIhPT1udWxsJiYoci5jaGlsZExhbmVzJnQpIT09dCYmKHIuY2hpbGRMYW5lc3w9dCksZT09PW4pYnJlYWs7ZT1lLnJldHVybn19ZnVuY3Rpb24gcmEoZSx0KXtlbD1lLG1kPVFvPW51bGwsZT1lLmRlcGVuZGVuY2llcyxlIT09bnVsbCYmZS5maXJzdENvbnRleHQhPT1udWxsJiYoZS5sYW5lcyZ0JiYoenQ9ITApLGUuZmlyc3RDb250ZXh0PW51bGwpfWZ1bmN0aW9uIGxuKGUpe3ZhciB0PWUuX2N1cnJlbnRWYWx1ZTtpZihtZCE9PWUpaWYoZT17Y29udGV4dDplLG1lbW9pemVkVmFsdWU6dCxuZXh0Om51bGx9LFFvPT09bnVsbCl7aWYoZWw9PT1udWxsKXRocm93IEVycm9yKE0oMzA4KSk7UW89ZSxlbC5kZXBlbmRlbmNpZXM9e2xhbmVzOjAsZmlyc3RDb250ZXh0OmV9fWVsc2UgUW89UW8ubmV4dD1lO3JldHVybiB0fXZhciBvbz1udWxsO2Z1bmN0aW9uIHZkKGUpe29vPT09bnVsbD9vbz1bZV06b28ucHVzaChlKX1mdW5jdGlvbiB1ZyhlLHQsbixyKXt2YXIgbz10LmludGVybGVhdmVkO3JldHVybiBvPT09bnVsbD8obi5uZXh0PW4sdmQodCkpOihuLm5leHQ9by5uZXh0LG8ubmV4dD1uKSx0LmludGVybGVhdmVkPW4saXIoZSxyKX1mdW5jdGlvbiBpcihlLHQpe2UubGFuZXN8PXQ7dmFyIG49ZS5hbHRlcm5hdGU7Zm9yKG4hPT1udWxsJiYobi5sYW5lc3w9dCksbj1lLGU9ZS5yZXR1cm47ZSE9PW51bGw7KWUuY2hpbGRMYW5lc3w9dCxuPWUuYWx0ZXJuYXRlLG4hPT1udWxsJiYobi5jaGlsZExhbmVzfD10KSxuPWUsZT1lLnJldHVybjtyZXR1cm4gbi50YWc9PT0zP24uc3RhdGVOb2RlOm51bGx9dmFyIFNyPSExO2Z1bmN0aW9uIHdkKGUpe2UudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLm1lbW9pemVkU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm51bGwsbGFzdEJhc2VVcGRhdGU6bnVsbCxzaGFyZWQ6e3BlbmRpbmc6bnVsbCxpbnRlcmxlYXZlZDpudWxsLGxhbmVzOjB9LGVmZmVjdHM6bnVsbH19ZnVuY3Rpb24gZGcoZSx0KXtlPWUudXBkYXRlUXVldWUsdC51cGRhdGVRdWV1ZT09PWUmJih0LnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6ZS5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmUuZmlyc3RCYXNlVXBkYXRlLGxhc3RCYXNlVXBkYXRlOmUubGFzdEJhc2VVcGRhdGUsc2hhcmVkOmUuc2hhcmVkLGVmZmVjdHM6ZS5lZmZlY3RzfSl9ZnVuY3Rpb24gcnIoZSx0KXtyZXR1cm57ZXZlbnRUaW1lOmUsbGFuZTp0LHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gSXIoZSx0LG4pe3ZhciByPWUudXBkYXRlUXVldWU7aWYocj09PW51bGwpcmV0dXJuIG51bGw7aWYocj1yLnNoYXJlZCx3ZSYyKXt2YXIgbz1yLnBlbmRpbmc7cmV0dXJuIG89PT1udWxsP3QubmV4dD10Oih0Lm5leHQ9by5uZXh0LG8ubmV4dD10KSxyLnBlbmRpbmc9dCxpcihlLG4pfXJldHVybiBvPXIuaW50ZXJsZWF2ZWQsbz09PW51bGw/KHQubmV4dD10LHZkKHIpKToodC5uZXh0PW8ubmV4dCxvLm5leHQ9dCksci5pbnRlcmxlYXZlZD10LGlyKGUsbil9ZnVuY3Rpb24gUnMoZSx0LG4pe2lmKHQ9dC51cGRhdGVRdWV1ZSx0IT09bnVsbCYmKHQ9dC5zaGFyZWQsKG4mNDE5NDI0MCkhPT0wKSl7dmFyIHI9dC5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxufD1yLHQubGFuZXM9bixvZChlLG4pfX1mdW5jdGlvbiBVaChlLHQpe3ZhciBuPWUudXBkYXRlUXVldWUscj1lLmFsdGVybmF0ZTtpZihyIT09bnVsbCYmKHI9ci51cGRhdGVRdWV1ZSxuPT09cikpe3ZhciBvPW51bGwsYT1udWxsO2lmKG49bi5maXJzdEJhc2VVcGRhdGUsbiE9PW51bGwpe2Rve3ZhciBpPXtldmVudFRpbWU6bi5ldmVudFRpbWUsbGFuZTpuLmxhbmUsdGFnOm4udGFnLHBheWxvYWQ6bi5wYXlsb2FkLGNhbGxiYWNrOm4uY2FsbGJhY2ssbmV4dDpudWxsfTthPT09bnVsbD9vPWE9aTphPWEubmV4dD1pLG49bi5uZXh0fXdoaWxlKG4hPT1udWxsKTthPT09bnVsbD9vPWE9dDphPWEubmV4dD10fWVsc2Ugbz1hPXQ7bj17YmFzZVN0YXRlOnIuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTpvLGxhc3RCYXNlVXBkYXRlOmEsc2hhcmVkOnIuc2hhcmVkLGVmZmVjdHM6ci5lZmZlY3RzfSxlLnVwZGF0ZVF1ZXVlPW47cmV0dXJufWU9bi5sYXN0QmFzZVVwZGF0ZSxlPT09bnVsbD9uLmZpcnN0QmFzZVVwZGF0ZT10OmUubmV4dD10LG4ubGFzdEJhc2VVcGRhdGU9dH1mdW5jdGlvbiB0bChlLHQsbixyKXt2YXIgbz1lLnVwZGF0ZVF1ZXVlO1NyPSExO3ZhciBhPW8uZmlyc3RCYXNlVXBkYXRlLGk9by5sYXN0QmFzZVVwZGF0ZSxzPW8uc2hhcmVkLnBlbmRpbmc7aWYocyE9PW51bGwpe28uc2hhcmVkLnBlbmRpbmc9bnVsbDt2YXIgbD1zLGM9bC5uZXh0O2wubmV4dD1udWxsLGk9PT1udWxsP2E9YzppLm5leHQ9YyxpPWw7dmFyIHU9ZS5hbHRlcm5hdGU7dSE9PW51bGwmJih1PXUudXBkYXRlUXVldWUscz11Lmxhc3RCYXNlVXBkYXRlLHMhPT1pJiYocz09PW51bGw/dS5maXJzdEJhc2VVcGRhdGU9YzpzLm5leHQ9Yyx1Lmxhc3RCYXNlVXBkYXRlPWwpKX1pZihhIT09bnVsbCl7dmFyIHA9by5iYXNlU3RhdGU7aT0wLHU9Yz1sPW51bGwscz1hO2Rve3ZhciBkPXMubGFuZSxoPXMuZXZlbnRUaW1lO2lmKChyJmQpPT09ZCl7dSE9PW51bGwmJih1PXUubmV4dD17ZXZlbnRUaW1lOmgsbGFuZTowLHRhZzpzLnRhZyxwYXlsb2FkOnMucGF5bG9hZCxjYWxsYmFjazpzLmNhbGxiYWNrLG5leHQ6bnVsbH0pO2U6e3ZhciB5PWUsdz1zO3N3aXRjaChkPXQsaD1uLHcudGFnKXtjYXNlIDE6aWYoeT13LnBheWxvYWQsdHlwZW9mIHk9PSJmdW5jdGlvbiIpe3A9eS5jYWxsKGgscCxkKTticmVhayBlfXA9eTticmVhayBlO2Nhc2UgMzp5LmZsYWdzPXkuZmxhZ3MmLTY1NTM3fDEyODtjYXNlIDA6aWYoeT13LnBheWxvYWQsZD10eXBlb2YgeT09ImZ1bmN0aW9uIj95LmNhbGwoaCxwLGQpOnksZD09bnVsbClicmVhayBlO3A9S2Uoe30scCxkKTticmVhayBlO2Nhc2UgMjpTcj0hMH19cy5jYWxsYmFjayE9PW51bGwmJnMubGFuZSE9PTAmJihlLmZsYWdzfD02NCxkPW8uZWZmZWN0cyxkPT09bnVsbD9vLmVmZmVjdHM9W3NdOmQucHVzaChzKSl9ZWxzZSBoPXtldmVudFRpbWU6aCxsYW5lOmQsdGFnOnMudGFnLHBheWxvYWQ6cy5wYXlsb2FkLGNhbGxiYWNrOnMuY2FsbGJhY2ssbmV4dDpudWxsfSx1PT09bnVsbD8oYz11PWgsbD1wKTp1PXUubmV4dD1oLGl8PWQ7aWYocz1zLm5leHQscz09PW51bGwpe2lmKHM9by5zaGFyZWQucGVuZGluZyxzPT09bnVsbClicmVhaztkPXMscz1kLm5leHQsZC5uZXh0PW51bGwsby5sYXN0QmFzZVVwZGF0ZT1kLG8uc2hhcmVkLnBlbmRpbmc9bnVsbH19d2hpbGUoITApO2lmKHU9PT1udWxsJiYobD1wKSxvLmJhc2VTdGF0ZT1sLG8uZmlyc3RCYXNlVXBkYXRlPWMsby5sYXN0QmFzZVVwZGF0ZT11LHQ9by5zaGFyZWQuaW50ZXJsZWF2ZWQsdCE9PW51bGwpe289dDtkbyBpfD1vLmxhbmUsbz1vLm5leHQ7d2hpbGUobyE9PXQpfWVsc2UgYT09PW51bGwmJihvLnNoYXJlZC5sYW5lcz0wKTtwb3w9aSxlLmxhbmVzPWksZS5tZW1vaXplZFN0YXRlPXB9fWZ1bmN0aW9uICRoKGUsdCxuKXtpZihlPXQuZWZmZWN0cyx0LmVmZmVjdHM9bnVsbCxlIT09bnVsbClmb3IodD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgcj1lW3RdLG89ci5jYWxsYmFjaztpZihvIT09bnVsbCl7aWYoci5jYWxsYmFjaz1udWxsLHI9bix0eXBlb2YgbyE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihNKDE5MSxvKSk7by5jYWxsKHIpfX19dmFyIHhpPXt9LEhuPVVyKHhpKSxmaT1Vcih4aSksaGk9VXIoeGkpO2Z1bmN0aW9uIGFvKGUpe2lmKGU9PT14aSl0aHJvdyBFcnJvcihNKDE3NCkpO3JldHVybiBlfWZ1bmN0aW9uIGJkKGUsdCl7c3dpdGNoKE1lKGhpLHQpLE1lKGZpLGUpLE1lKEhuLHhpKSxlPXQubm9kZVR5cGUsZSl7Y2FzZSA5OmNhc2UgMTE6dD0odD10LmRvY3VtZW50RWxlbWVudCk/dC5uYW1lc3BhY2VVUkk6ZnUobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDplPWU9PT04P3QucGFyZW50Tm9kZTp0LHQ9ZS5uYW1lc3BhY2VVUkl8fG51bGwsZT1lLnRhZ05hbWUsdD1mdSh0LGUpfXplKEhuKSxNZShIbix0KX1mdW5jdGlvbiBjYSgpe3plKEhuKSx6ZShmaSksemUoaGkpfWZ1bmN0aW9uIHBnKGUpe2FvKGhpLmN1cnJlbnQpO3ZhciB0PWFvKEhuLmN1cnJlbnQpLG49ZnUodCxlLnR5cGUpO3QhPT1uJiYoTWUoZmksZSksTWUoSG4sbikpfWZ1bmN0aW9uIGtkKGUpe2ZpLmN1cnJlbnQ9PT1lJiYoemUoSG4pLHplKGZpKSl9dmFyIFZlPVVyKDApO2Z1bmN0aW9uIG5sKGUpe2Zvcih2YXIgdD1lO3QhPT1udWxsOyl7aWYodC50YWc9PT0xMyl7dmFyIG49dC5tZW1vaXplZFN0YXRlO2lmKG4hPT1udWxsJiYobj1uLmRlaHlkcmF0ZWQsbj09PW51bGx8fG4uZGF0YT09PSIkPyJ8fG4uZGF0YT09PSIkISIpKXJldHVybiB0fWVsc2UgaWYodC50YWc9PT0xOSYmdC5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyIT09dm9pZCAwKXtpZih0LmZsYWdzJjEyOClyZXR1cm4gdH1lbHNlIGlmKHQuY2hpbGQhPT1udWxsKXt0LmNoaWxkLnJldHVybj10LHQ9dC5jaGlsZDtjb250aW51ZX1pZih0PT09ZSlicmVhaztmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIFFjPVtdO2Z1bmN0aW9uIHhkKCl7Zm9yKHZhciBlPTA7ZTxRYy5sZW5ndGg7ZSsrKVFjW2VdLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PW51bGw7UWMubGVuZ3RoPTB9dmFyIE1zPWxyLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsSmM9bHIuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsdW89MCxqZT1udWxsLGF0PW51bGwsY3Q9bnVsbCxybD0hMSxYYT0hMSxtaT0wLGt4PTA7ZnVuY3Rpb24gYnQoKXt0aHJvdyBFcnJvcihNKDMyMSkpfWZ1bmN0aW9uIFNkKGUsdCl7aWYodD09PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmbjxlLmxlbmd0aDtuKyspaWYoIU5uKGVbbl0sdFtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gRWQoZSx0LG4scixvLGEpe2lmKHVvPWEsamU9dCx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsdC5sYW5lcz0wLE1zLmN1cnJlbnQ9ZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZT09PW51bGw/VHg6TngsZT1uKHIsbyksWGEpe2E9MDtkb3tpZihYYT0hMSxtaT0wLDI1PD1hKXRocm93IEVycm9yKE0oMzAxKSk7YSs9MSxjdD1hdD1udWxsLHQudXBkYXRlUXVldWU9bnVsbCxNcy5jdXJyZW50PUR4LGU9bihyLG8pfXdoaWxlKFhhKX1pZihNcy5jdXJyZW50PW9sLHQ9YXQhPT1udWxsJiZhdC5uZXh0IT09bnVsbCx1bz0wLGN0PWF0PWplPW51bGwscmw9ITEsdCl0aHJvdyBFcnJvcihNKDMwMCkpO3JldHVybiBlfWZ1bmN0aW9uIFRkKCl7dmFyIGU9bWkhPT0wO3JldHVybiBtaT0wLGV9ZnVuY3Rpb24gJG4oKXt2YXIgZT17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtyZXR1cm4gY3Q9PT1udWxsP2plLm1lbW9pemVkU3RhdGU9Y3Q9ZTpjdD1jdC5uZXh0PWUsY3R9ZnVuY3Rpb24gY24oKXtpZihhdD09PW51bGwpe3ZhciBlPWplLmFsdGVybmF0ZTtlPWUhPT1udWxsP2UubWVtb2l6ZWRTdGF0ZTpudWxsfWVsc2UgZT1hdC5uZXh0O3ZhciB0PWN0PT09bnVsbD9qZS5tZW1vaXplZFN0YXRlOmN0Lm5leHQ7aWYodCE9PW51bGwpY3Q9dCxhdD1lO2Vsc2V7aWYoZT09PW51bGwpdGhyb3cgRXJyb3IoTSgzMTApKTthdD1lLGU9e21lbW9pemVkU3RhdGU6YXQubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6YXQuYmFzZVN0YXRlLGJhc2VRdWV1ZTphdC5iYXNlUXVldWUscXVldWU6YXQucXVldWUsbmV4dDpudWxsfSxjdD09PW51bGw/amUubWVtb2l6ZWRTdGF0ZT1jdD1lOmN0PWN0Lm5leHQ9ZX1yZXR1cm4gY3R9ZnVuY3Rpb24gZ2koZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0fWZ1bmN0aW9uIFhjKGUpe3ZhciB0PWNuKCksbj10LnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKE0oMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9YXQsbz1yLmJhc2VRdWV1ZSxhPW4ucGVuZGluZztpZihhIT09bnVsbCl7aWYobyE9PW51bGwpe3ZhciBpPW8ubmV4dDtvLm5leHQ9YS5uZXh0LGEubmV4dD1pfXIuYmFzZVF1ZXVlPW89YSxuLnBlbmRpbmc9bnVsbH1pZihvIT09bnVsbCl7YT1vLm5leHQscj1yLmJhc2VTdGF0ZTt2YXIgcz1pPW51bGwsbD1udWxsLGM9YTtkb3t2YXIgdT1jLmxhbmU7aWYoKHVvJnUpPT09dSlsIT09bnVsbCYmKGw9bC5uZXh0PXtsYW5lOjAsYWN0aW9uOmMuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6Yy5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6Yy5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLHI9Yy5oYXNFYWdlclN0YXRlP2MuZWFnZXJTdGF0ZTplKHIsYy5hY3Rpb24pO2Vsc2V7dmFyIHA9e2xhbmU6dSxhY3Rpb246Yy5hY3Rpb24saGFzRWFnZXJTdGF0ZTpjLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpjLmVhZ2VyU3RhdGUsbmV4dDpudWxsfTtsPT09bnVsbD8ocz1sPXAsaT1yKTpsPWwubmV4dD1wLGplLmxhbmVzfD11LHBvfD11fWM9Yy5uZXh0fXdoaWxlKGMhPT1udWxsJiZjIT09YSk7bD09PW51bGw/aT1yOmwubmV4dD1zLE5uKHIsdC5tZW1vaXplZFN0YXRlKXx8KHp0PSEwKSx0Lm1lbW9pemVkU3RhdGU9cix0LmJhc2VTdGF0ZT1pLHQuYmFzZVF1ZXVlPWwsbi5sYXN0UmVuZGVyZWRTdGF0ZT1yfWlmKGU9bi5pbnRlcmxlYXZlZCxlIT09bnVsbCl7bz1lO2RvIGE9by5sYW5lLGplLmxhbmVzfD1hLHBvfD1hLG89by5uZXh0O3doaWxlKG8hPT1lKX1lbHNlIG89PT1udWxsJiYobi5sYW5lcz0wKTtyZXR1cm5bdC5tZW1vaXplZFN0YXRlLG4uZGlzcGF0Y2hdfWZ1bmN0aW9uIFpjKGUpe3ZhciB0PWNuKCksbj10LnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKE0oMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9bi5kaXNwYXRjaCxvPW4ucGVuZGluZyxhPXQubWVtb2l6ZWRTdGF0ZTtpZihvIT09bnVsbCl7bi5wZW5kaW5nPW51bGw7dmFyIGk9bz1vLm5leHQ7ZG8gYT1lKGEsaS5hY3Rpb24pLGk9aS5uZXh0O3doaWxlKGkhPT1vKTtObihhLHQubWVtb2l6ZWRTdGF0ZSl8fCh6dD0hMCksdC5tZW1vaXplZFN0YXRlPWEsdC5iYXNlUXVldWU9PT1udWxsJiYodC5iYXNlU3RhdGU9YSksbi5sYXN0UmVuZGVyZWRTdGF0ZT1hfXJldHVyblthLHJdfWZ1bmN0aW9uIGZnKCl7fWZ1bmN0aW9uIGhnKGUsdCl7dmFyIG49amUscj1jbigpLG89dCgpLGE9IU5uKHIubWVtb2l6ZWRTdGF0ZSxvKTtpZihhJiYoci5tZW1vaXplZFN0YXRlPW8senQ9ITApLHI9ci5xdWV1ZSxOZCh5Zy5iaW5kKG51bGwsbixyLGUpLFtlXSksci5nZXRTbmFwc2hvdCE9PXR8fGF8fGN0IT09bnVsbCYmY3QubWVtb2l6ZWRTdGF0ZS50YWcmMSl7aWYobi5mbGFnc3w9MjA0OCx5aSg5LGdnLmJpbmQobnVsbCxuLHIsbyx0KSx2b2lkIDAsbnVsbCksdXQ9PT1udWxsKXRocm93IEVycm9yKE0oMzQ5KSk7dW8mMzB8fG1nKG4sdCxvKX1yZXR1cm4gb31mdW5jdGlvbiBtZyhlLHQsbil7ZS5mbGFnc3w9MTYzODQsZT17Z2V0U25hcHNob3Q6dCx2YWx1ZTpufSx0PWplLnVwZGF0ZVF1ZXVlLHQ9PT1udWxsPyh0PXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LGplLnVwZGF0ZVF1ZXVlPXQsdC5zdG9yZXM9W2VdKToobj10LnN0b3JlcyxuPT09bnVsbD90LnN0b3Jlcz1bZV06bi5wdXNoKGUpKX1mdW5jdGlvbiBnZyhlLHQsbixyKXt0LnZhbHVlPW4sdC5nZXRTbmFwc2hvdD1yLHZnKHQpJiZ3ZyhlKX1mdW5jdGlvbiB5ZyhlLHQsbil7cmV0dXJuIG4oZnVuY3Rpb24oKXt2Zyh0KSYmd2coZSl9KX1mdW5jdGlvbiB2ZyhlKXt2YXIgdD1lLmdldFNuYXBzaG90O2U9ZS52YWx1ZTt0cnl7dmFyIG49dCgpO3JldHVybiFObihlLG4pfWNhdGNoe3JldHVybiEwfX1mdW5jdGlvbiB3ZyhlKXt2YXIgdD1pcihlLDEpO3QhPT1udWxsJiZUbih0LGUsMSwtMSl9ZnVuY3Rpb24gV2goZSl7dmFyIHQ9JG4oKTtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiImJihlPWUoKSksdC5tZW1vaXplZFN0YXRlPXQuYmFzZVN0YXRlPWUsZT17cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6Z2ksbGFzdFJlbmRlcmVkU3RhdGU6ZX0sdC5xdWV1ZT1lLGU9ZS5kaXNwYXRjaD1FeC5iaW5kKG51bGwsamUsZSksW3QubWVtb2l6ZWRTdGF0ZSxlXX1mdW5jdGlvbiB5aShlLHQsbixyKXtyZXR1cm4gZT17dGFnOmUsY3JlYXRlOnQsZGVzdHJveTpuLGRlcHM6cixuZXh0Om51bGx9LHQ9amUudXBkYXRlUXVldWUsdD09PW51bGw/KHQ9e2xhc3RFZmZlY3Q6bnVsbCxzdG9yZXM6bnVsbH0samUudXBkYXRlUXVldWU9dCx0Lmxhc3RFZmZlY3Q9ZS5uZXh0PWUpOihuPXQubGFzdEVmZmVjdCxuPT09bnVsbD90Lmxhc3RFZmZlY3Q9ZS5uZXh0PWU6KHI9bi5uZXh0LG4ubmV4dD1lLGUubmV4dD1yLHQubGFzdEVmZmVjdD1lKSksZX1mdW5jdGlvbiBiZygpe3JldHVybiBjbigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gUHMoZSx0LG4scil7dmFyIG89JG4oKTtqZS5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9eWkoMXx0LG4sdm9pZCAwLHI9PT12b2lkIDA/bnVsbDpyKX1mdW5jdGlvbiBnbChlLHQsbixyKXt2YXIgbz1jbigpO3I9cj09PXZvaWQgMD9udWxsOnI7dmFyIGE9dm9pZCAwO2lmKGF0IT09bnVsbCl7dmFyIGk9YXQubWVtb2l6ZWRTdGF0ZTtpZihhPWkuZGVzdHJveSxyIT09bnVsbCYmU2QocixpLmRlcHMpKXtvLm1lbW9pemVkU3RhdGU9eWkodCxuLGEscik7cmV0dXJufX1qZS5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9eWkoMXx0LG4sYSxyKX1mdW5jdGlvbiBCaChlLHQpe3JldHVybiBQcyg4MzkwNjU2LDgsZSx0KX1mdW5jdGlvbiBOZChlLHQpe3JldHVybiBnbCgyMDQ4LDgsZSx0KX1mdW5jdGlvbiBrZyhlLHQpe3JldHVybiBnbCg0LDIsZSx0KX1mdW5jdGlvbiB4ZyhlLHQpe3JldHVybiBnbCg0LDQsZSx0KX1mdW5jdGlvbiBTZyhlLHQpe2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXJldHVybiBlPWUoKSx0KGUpLGZ1bmN0aW9uKCl7dChudWxsKX07aWYodCE9bnVsbClyZXR1cm4gZT1lKCksdC5jdXJyZW50PWUsZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gRWcoZSx0LG4pe3JldHVybiBuPW4hPW51bGw/bi5jb25jYXQoW2VdKTpudWxsLGdsKDQsNCxTZy5iaW5kKG51bGwsdCxlKSxuKX1mdW5jdGlvbiBEZCgpe31mdW5jdGlvbiBUZyhlLHQpe3ZhciBuPWNuKCk7dD10PT09dm9pZCAwP251bGw6dDt2YXIgcj1uLm1lbW9pemVkU3RhdGU7cmV0dXJuIHIhPT1udWxsJiZ0IT09bnVsbCYmU2QodCxyWzFdKT9yWzBdOihuLm1lbW9pemVkU3RhdGU9W2UsdF0sZSl9ZnVuY3Rpb24gTmcoZSx0KXt2YXIgbj1jbigpO3Q9dD09PXZvaWQgMD9udWxsOnQ7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiByIT09bnVsbCYmdCE9PW51bGwmJlNkKHQsclsxXSk/clswXTooZT1lKCksbi5tZW1vaXplZFN0YXRlPVtlLHRdLGUpfWZ1bmN0aW9uIERnKGUsdCxuKXtyZXR1cm4gdW8mMjE/KE5uKG4sdCl8fChuPUltKCksamUubGFuZXN8PW4scG98PW4sZS5iYXNlU3RhdGU9ITApLHQpOihlLmJhc2VTdGF0ZSYmKGUuYmFzZVN0YXRlPSExLHp0PSEwKSxlLm1lbW9pemVkU3RhdGU9bil9ZnVuY3Rpb24geHgoZSx0KXt2YXIgbj1EZTtEZT1uIT09MCYmND5uP246NCxlKCEwKTt2YXIgcj1KYy50cmFuc2l0aW9uO0pjLnRyYW5zaXRpb249e307dHJ5e2UoITEpLHQoKX1maW5hbGx5e0RlPW4sSmMudHJhbnNpdGlvbj1yfX1mdW5jdGlvbiBfZygpe3JldHVybiBjbigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gU3goZSx0LG4pe3ZhciByPU1yKGUpO2lmKG49e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LENnKGUpKUFnKHQsbik7ZWxzZSBpZihuPXVnKGUsdCxuLHIpLG4hPT1udWxsKXt2YXIgbz1fdCgpO1RuKG4sZSxyLG8pLE9nKG4sdCxyKX19ZnVuY3Rpb24gRXgoZSx0LG4pe3ZhciByPU1yKGUpLG89e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKENnKGUpKUFnKHQsbyk7ZWxzZXt2YXIgYT1lLmFsdGVybmF0ZTtpZihlLmxhbmVzPT09MCYmKGE9PT1udWxsfHxhLmxhbmVzPT09MCkmJihhPXQubGFzdFJlbmRlcmVkUmVkdWNlcixhIT09bnVsbCkpdHJ5e3ZhciBpPXQubGFzdFJlbmRlcmVkU3RhdGUscz1hKGksbik7aWYoby5oYXNFYWdlclN0YXRlPSEwLG8uZWFnZXJTdGF0ZT1zLE5uKHMsaSkpe3ZhciBsPXQuaW50ZXJsZWF2ZWQ7bD09PW51bGw/KG8ubmV4dD1vLHZkKHQpKTooby5uZXh0PWwubmV4dCxsLm5leHQ9byksdC5pbnRlcmxlYXZlZD1vO3JldHVybn19Y2F0Y2h7fWZpbmFsbHl7fW49dWcoZSx0LG8sciksbiE9PW51bGwmJihvPV90KCksVG4obixlLHIsbyksT2cobix0LHIpKX19ZnVuY3Rpb24gQ2coZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7cmV0dXJuIGU9PT1qZXx8dCE9PW51bGwmJnQ9PT1qZX1mdW5jdGlvbiBBZyhlLHQpe1hhPXJsPSEwO3ZhciBuPWUucGVuZGluZztuPT09bnVsbD90Lm5leHQ9dDoodC5uZXh0PW4ubmV4dCxuLm5leHQ9dCksZS5wZW5kaW5nPXR9ZnVuY3Rpb24gT2coZSx0LG4pe2lmKG4mNDE5NDI0MCl7dmFyIHI9dC5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxufD1yLHQubGFuZXM9bixvZChlLG4pfX12YXIgb2w9e3JlYWRDb250ZXh0OmxuLHVzZUNhbGxiYWNrOmJ0LHVzZUNvbnRleHQ6YnQsdXNlRWZmZWN0OmJ0LHVzZUltcGVyYXRpdmVIYW5kbGU6YnQsdXNlSW5zZXJ0aW9uRWZmZWN0OmJ0LHVzZUxheW91dEVmZmVjdDpidCx1c2VNZW1vOmJ0LHVzZVJlZHVjZXI6YnQsdXNlUmVmOmJ0LHVzZVN0YXRlOmJ0LHVzZURlYnVnVmFsdWU6YnQsdXNlRGVmZXJyZWRWYWx1ZTpidCx1c2VUcmFuc2l0aW9uOmJ0LHVzZU11dGFibGVTb3VyY2U6YnQsdXNlU3luY0V4dGVybmFsU3RvcmU6YnQsdXNlSWQ6YnQsdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxUeD17cmVhZENvbnRleHQ6bG4sdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJG4oKS5tZW1vaXplZFN0YXRlPVtlLHQ9PT12b2lkIDA/bnVsbDp0XSxlfSx1c2VDb250ZXh0OmxuLHVzZUVmZmVjdDpCaCx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj1uIT1udWxsP24uY29uY2F0KFtlXSk6bnVsbCxQcyg0MTk0MzA4LDQsU2cuYmluZChudWxsLHQsZSksbil9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihlLHQpe3JldHVybiBQcyg0MTk0MzA4LDQsZSx0KX0sdXNlSW5zZXJ0aW9uRWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFBzKDQsMixlLHQpfSx1c2VNZW1vOmZ1bmN0aW9uKGUsdCl7dmFyIG49JG4oKTtyZXR1cm4gdD10PT09dm9pZCAwP251bGw6dCxlPWUoKSxuLm1lbW9pemVkU3RhdGU9W2UsdF0sZX0sdXNlUmVkdWNlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9JG4oKTtyZXR1cm4gdD1uIT09dm9pZCAwP24odCk6dCxyLm1lbW9pemVkU3RhdGU9ci5iYXNlU3RhdGU9dCxlPXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplLGxhc3RSZW5kZXJlZFN0YXRlOnR9LHIucXVldWU9ZSxlPWUuZGlzcGF0Y2g9U3guYmluZChudWxsLGplLGUpLFtyLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXt2YXIgdD0kbigpO3JldHVybiBlPXtjdXJyZW50OmV9LHQubWVtb2l6ZWRTdGF0ZT1lfSx1c2VTdGF0ZTpXaCx1c2VEZWJ1Z1ZhbHVlOkRkLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuICRuKCkubWVtb2l6ZWRTdGF0ZT1lfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9V2goITEpLHQ9ZVswXTtyZXR1cm4gZT14eC5iaW5kKG51bGwsZVsxXSksJG4oKS5tZW1vaXplZFN0YXRlPWUsW3QsZV19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oKXt9LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1qZSxvPSRuKCk7aWYoJGUpe2lmKG49PT12b2lkIDApdGhyb3cgRXJyb3IoTSg0MDcpKTtuPW4oKX1lbHNle2lmKG49dCgpLHV0PT09bnVsbCl0aHJvdyBFcnJvcihNKDM0OSkpO3VvJjMwfHxtZyhyLHQsbil9by5tZW1vaXplZFN0YXRlPW47dmFyIGE9e3ZhbHVlOm4sZ2V0U25hcHNob3Q6dH07cmV0dXJuIG8ucXVldWU9YSxCaCh5Zy5iaW5kKG51bGwscixhLGUpLFtlXSksci5mbGFnc3w9MjA0OCx5aSg5LGdnLmJpbmQobnVsbCxyLGEsbix0KSx2b2lkIDAsbnVsbCksbn0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgZT0kbigpLHQ9dXQuaWRlbnRpZmllclByZWZpeDtpZigkZSl7dmFyIG49bnIscj10cjtuPShyJn4oMTw8MzItRW4ociktMSkpLnRvU3RyaW5nKDMyKStuLHQ9IjoiK3QrIlIiK24sbj1taSsrLDA8biYmKHQrPSJIIituLnRvU3RyaW5nKDMyKSksdCs9IjoifWVsc2Ugbj1reCsrLHQ9IjoiK3QrInIiK24udG9TdHJpbmcoMzIpKyI6IjtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPXR9LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sTng9e3JlYWRDb250ZXh0OmxuLHVzZUNhbGxiYWNrOlRnLHVzZUNvbnRleHQ6bG4sdXNlRWZmZWN0Ok5kLHVzZUltcGVyYXRpdmVIYW5kbGU6RWcsdXNlSW5zZXJ0aW9uRWZmZWN0OmtnLHVzZUxheW91dEVmZmVjdDp4Zyx1c2VNZW1vOk5nLHVzZVJlZHVjZXI6WGMsdXNlUmVmOmJnLHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIFhjKGdpKX0sdXNlRGVidWdWYWx1ZTpEZCx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWNuKCk7cmV0dXJuIERnKHQsYXQubWVtb2l6ZWRTdGF0ZSxlKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPVhjKGdpKVswXSx0PWNuKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bZSx0XX0sdXNlTXV0YWJsZVNvdXJjZTpmZyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpoZyx1c2VJZDpfZyx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LER4PXtyZWFkQ29udGV4dDpsbix1c2VDYWxsYmFjazpUZyx1c2VDb250ZXh0OmxuLHVzZUVmZmVjdDpOZCx1c2VJbXBlcmF0aXZlSGFuZGxlOkVnLHVzZUluc2VydGlvbkVmZmVjdDprZyx1c2VMYXlvdXRFZmZlY3Q6eGcsdXNlTWVtbzpOZyx1c2VSZWR1Y2VyOlpjLHVzZVJlZjpiZyx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBaYyhnaSl9LHVzZURlYnVnVmFsdWU6RGQsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1jbigpO3JldHVybiBhdD09PW51bGw/dC5tZW1vaXplZFN0YXRlPWU6RGcodCxhdC5tZW1vaXplZFN0YXRlLGUpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9WmMoZ2kpWzBdLHQ9Y24oKS5tZW1vaXplZFN0YXRlO3JldHVybltlLHRdfSx1c2VNdXRhYmxlU291cmNlOmZnLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmhnLHVzZUlkOl9nLHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX07ZnVuY3Rpb24ga24oZSx0KXtpZihlJiZlLmRlZmF1bHRQcm9wcyl7dD1LZSh7fSx0KSxlPWUuZGVmYXVsdFByb3BzO2Zvcih2YXIgbiBpbiBlKXRbbl09PT12b2lkIDAmJih0W25dPWVbbl0pO3JldHVybiB0fXJldHVybiB0fWZ1bmN0aW9uIE11KGUsdCxuLHIpe3Q9ZS5tZW1vaXplZFN0YXRlLG49bihyLHQpLG49bj09bnVsbD90OktlKHt9LHQsbiksZS5tZW1vaXplZFN0YXRlPW4sZS5sYW5lcz09PTAmJihlLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1uKX12YXIgeWw9e2lzTW91bnRlZDpmdW5jdGlvbihlKXtyZXR1cm4oZT1lLl9yZWFjdEludGVybmFscyk/bW8oZSk9PT1lOiExfSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oZSx0LG4pe2U9ZS5fcmVhY3RJbnRlcm5hbHM7dmFyIHI9X3QoKSxvPU1yKGUpLGE9cnIocixvKTthLnBheWxvYWQ9dCxuIT1udWxsJiYoYS5jYWxsYmFjaz1uKSx0PUlyKGUsYSxvKSx0IT09bnVsbCYmKFRuKHQsZSxvLHIpLFJzKHQsZSxvKSl9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSx0LG4pe2U9ZS5fcmVhY3RJbnRlcm5hbHM7dmFyIHI9X3QoKSxvPU1yKGUpLGE9cnIocixvKTthLnRhZz0xLGEucGF5bG9hZD10LG4hPW51bGwmJihhLmNhbGxiYWNrPW4pLHQ9SXIoZSxhLG8pLHQhPT1udWxsJiYoVG4odCxlLG8sciksUnModCxlLG8pKX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGUsdCl7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgbj1fdCgpLHI9TXIoZSksbz1ycihuLHIpO28udGFnPTIsdCE9bnVsbCYmKG8uY2FsbGJhY2s9dCksdD1JcihlLG8sciksdCE9PW51bGwmJihUbih0LGUscixuKSxScyh0LGUscikpfX07ZnVuY3Rpb24gSGgoZSx0LG4scixvLGEsaSl7cmV0dXJuIGU9ZS5zdGF0ZU5vZGUsdHlwZW9mIGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPT0iZnVuY3Rpb24iP2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKHIsYSxpKTp0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQ/IWNpKG4scil8fCFjaShvLGEpOiEwfWZ1bmN0aW9uIElnKGUsdCxuKXt2YXIgcj0hMSxvPXpyLGE9dC5jb250ZXh0VHlwZTtyZXR1cm4gdHlwZW9mIGE9PSJvYmplY3QiJiZhIT09bnVsbD9hPWxuKGEpOihvPVV0KHQpP2xvOlN0LmN1cnJlbnQscj10LmNvbnRleHRUeXBlcyxhPShyPXIhPW51bGwpP2lhKGUsbyk6enIpLHQ9bmV3IHQobixhKSxlLm1lbW9pemVkU3RhdGU9dC5zdGF0ZSE9PW51bGwmJnQuc3RhdGUhPT12b2lkIDA/dC5zdGF0ZTpudWxsLHQudXBkYXRlcj15bCxlLnN0YXRlTm9kZT10LHQuX3JlYWN0SW50ZXJuYWxzPWUsciYmKGU9ZS5zdGF0ZU5vZGUsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PW8sZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1hKSx0fWZ1bmN0aW9uIEdoKGUsdCxuLHIpe2U9dC5zdGF0ZSx0eXBlb2YgdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZ0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobixyKSx0eXBlb2YgdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz09ImZ1bmN0aW9uIiYmdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLHQuc3RhdGUhPT1lJiZ5bC5lbnF1ZXVlUmVwbGFjZVN0YXRlKHQsdC5zdGF0ZSxudWxsKX1mdW5jdGlvbiBQdShlLHQsbixyKXt2YXIgbz1lLnN0YXRlTm9kZTtvLnByb3BzPW4sby5zdGF0ZT1lLm1lbW9pemVkU3RhdGUsby5yZWZzPXt9LHdkKGUpO3ZhciBhPXQuY29udGV4dFR5cGU7dHlwZW9mIGE9PSJvYmplY3QiJiZhIT09bnVsbD9vLmNvbnRleHQ9bG4oYSk6KGE9VXQodCk/bG86U3QuY3VycmVudCxvLmNvbnRleHQ9aWEoZSxhKSksby5zdGF0ZT1lLm1lbW9pemVkU3RhdGUsYT10LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyx0eXBlb2YgYT09ImZ1bmN0aW9uIiYmKE11KGUsdCxhLG4pLG8uc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSx0eXBlb2YgdC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PSJmdW5jdGlvbiJ8fHR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24ifHx0eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24iJiZ0eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiJ8fCh0PW8uc3RhdGUsdHlwZW9mIG8uY29tcG9uZW50V2lsbE1vdW50PT0iZnVuY3Rpb24iJiZvLmNvbXBvbmVudFdpbGxNb3VudCgpLHR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJm8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLHQhPT1vLnN0YXRlJiZ5bC5lbnF1ZXVlUmVwbGFjZVN0YXRlKG8sby5zdGF0ZSxudWxsKSx0bChlLG4sbyxyKSxvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSksdHlwZW9mIG8uY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJihlLmZsYWdzfD00MTk0MzA4KX1mdW5jdGlvbiB1YShlLHQpe3RyeXt2YXIgbj0iIixyPXQ7ZG8gbis9cmsocikscj1yLnJldHVybjt3aGlsZShyKTt2YXIgbz1ufWNhdGNoKGEpe289YApFcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBgK2EubWVzc2FnZStgCmArYS5zdGFja31yZXR1cm57dmFsdWU6ZSxzb3VyY2U6dCxzdGFjazpvLGRpZ2VzdDpudWxsfX1mdW5jdGlvbiBldShlLHQsbil7cmV0dXJue3ZhbHVlOmUsc291cmNlOm51bGwsc3RhY2s6bj8/bnVsbCxkaWdlc3Q6dD8/bnVsbH19ZnVuY3Rpb24gTHUoZSx0KXt0cnl7Y29uc29sZS5lcnJvcih0LnZhbHVlKX1jYXRjaChuKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgbn0pfX12YXIgX3g9dHlwZW9mIFdlYWtNYXA9PSJmdW5jdGlvbiI/V2Vha01hcDpNYXA7ZnVuY3Rpb24gUmcoZSx0LG4pe249cnIoLTEsbiksbi50YWc9MyxuLnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH07dmFyIHI9dC52YWx1ZTtyZXR1cm4gbi5jYWxsYmFjaz1mdW5jdGlvbigpe2lsfHwoaWw9ITAsanU9ciksTHUoZSx0KX0sbn1mdW5jdGlvbiBNZyhlLHQsbil7bj1ycigtMSxuKSxuLnRhZz0zO3ZhciByPWUudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpe3ZhciBvPXQudmFsdWU7bi5wYXlsb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIHIobyl9LG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXtMdShlLHQpfX12YXIgYT1lLnN0YXRlTm9kZTtyZXR1cm4gYSE9PW51bGwmJnR5cGVvZiBhLmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYobi5jYWxsYmFjaz1mdW5jdGlvbigpe0x1KGUsdCksdHlwZW9mIHIhPSJmdW5jdGlvbiImJihScj09PW51bGw/UnI9bmV3IFNldChbdGhpc10pOlJyLmFkZCh0aGlzKSk7dmFyIGk9dC5zdGFjazt0aGlzLmNvbXBvbmVudERpZENhdGNoKHQudmFsdWUse2NvbXBvbmVudFN0YWNrOmkhPT1udWxsP2k6IiJ9KX0pLG59ZnVuY3Rpb24gVmgoZSx0LG4pe3ZhciByPWUucGluZ0NhY2hlO2lmKHI9PT1udWxsKXtyPWUucGluZ0NhY2hlPW5ldyBfeDt2YXIgbz1uZXcgU2V0O3Iuc2V0KHQsbyl9ZWxzZSBvPXIuZ2V0KHQpLG89PT12b2lkIDAmJihvPW5ldyBTZXQsci5zZXQodCxvKSk7by5oYXMobil8fChvLmFkZChuKSxlPUJ4LmJpbmQobnVsbCxlLHQsbiksdC50aGVuKGUsZSkpfWZ1bmN0aW9uIGpoKGUpe2Rve3ZhciB0O2lmKCh0PWUudGFnPT09MTMpJiYodD1lLm1lbW9pemVkU3RhdGUsdD10IT09bnVsbD90LmRlaHlkcmF0ZWQhPT1udWxsOiEwKSx0KXJldHVybiBlO2U9ZS5yZXR1cm59d2hpbGUoZSE9PW51bGwpO3JldHVybiBudWxsfWZ1bmN0aW9uIEtoKGUsdCxuLHIsbyl7cmV0dXJuIGUubW9kZSYxPyhlLmZsYWdzfD02NTUzNixlLmxhbmVzPW8sZSk6KGU9PT10P2UuZmxhZ3N8PTY1NTM2OihlLmZsYWdzfD0xMjgsbi5mbGFnc3w9MTMxMDcyLG4uZmxhZ3MmPS01MjgwNSxuLnRhZz09PTEmJihuLmFsdGVybmF0ZT09PW51bGw/bi50YWc9MTc6KHQ9cnIoLTEsMSksdC50YWc9MixJcihuLHQsMSkpKSxuLmxhbmVzfD0xKSxlKX12YXIgQ3g9bHIuUmVhY3RDdXJyZW50T3duZXIsenQ9ITE7ZnVuY3Rpb24gRHQoZSx0LG4scil7dC5jaGlsZD1lPT09bnVsbD9jZyh0LG51bGwsbixyKTpsYSh0LGUuY2hpbGQsbixyKX1mdW5jdGlvbiBZaChlLHQsbixyLG8pe249bi5yZW5kZXI7dmFyIGE9dC5yZWY7cmV0dXJuIHJhKHQsbykscj1FZChlLHQsbixyLGEsbyksbj1UZCgpLGUhPT1udWxsJiYhenQ/KHQudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0LmZsYWdzJj0tMjA1MyxlLmxhbmVzJj1+byxzcihlLHQsbykpOigkZSYmbiYmcGQodCksdC5mbGFnc3w9MSxEdChlLHQscixvKSx0LmNoaWxkKX1mdW5jdGlvbiBxaChlLHQsbixyLG8pe2lmKGU9PT1udWxsKXt2YXIgYT1uLnR5cGU7cmV0dXJuIHR5cGVvZiBhPT0iZnVuY3Rpb24iJiYhUGQoYSkmJmEuZGVmYXVsdFByb3BzPT09dm9pZCAwJiZuLmNvbXBhcmU9PT1udWxsJiZuLmRlZmF1bHRQcm9wcz09PXZvaWQgMD8odC50YWc9MTUsdC50eXBlPWEsUGcoZSx0LGEscixvKSk6KGU9VXMobi50eXBlLG51bGwscix0LHQubW9kZSxvKSxlLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZSl9aWYoYT1lLmNoaWxkLCEoZS5sYW5lcyZvKSl7dmFyIGk9YS5tZW1vaXplZFByb3BzO2lmKG49bi5jb21wYXJlLG49biE9PW51bGw/bjpjaSxuKGkscikmJmUucmVmPT09dC5yZWYpcmV0dXJuIHNyKGUsdCxvKX1yZXR1cm4gdC5mbGFnc3w9MSxlPVByKGEsciksZS5yZWY9dC5yZWYsZS5yZXR1cm49dCx0LmNoaWxkPWV9ZnVuY3Rpb24gUGcoZSx0LG4scixvKXtpZihlIT09bnVsbCl7dmFyIGE9ZS5tZW1vaXplZFByb3BzO2lmKGNpKGEscikmJmUucmVmPT09dC5yZWYpaWYoenQ9ITEsdC5wZW5kaW5nUHJvcHM9cj1hLChlLmxhbmVzJm8pIT09MCllLmZsYWdzJjEzMTA3MiYmKHp0PSEwKTtlbHNlIHJldHVybiB0LmxhbmVzPWUubGFuZXMsc3IoZSx0LG8pfXJldHVybiB6dShlLHQsbixyLG8pfWZ1bmN0aW9uIExnKGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcyxvPXIuY2hpbGRyZW4sYT1lIT09bnVsbD9lLm1lbW9pemVkU3RhdGU6bnVsbDtpZihyLm1vZGU9PT0iaGlkZGVuIilpZighKHQubW9kZSYxKSl0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9LE1lKFhvLGp0KSxqdHw9bjtlbHNle2lmKCEobiYxMDczNzQxODI0KSlyZXR1cm4gZT1hIT09bnVsbD9hLmJhc2VMYW5lc3xuOm4sdC5sYW5lcz10LmNoaWxkTGFuZXM9MTA3Mzc0MTgyNCx0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczplLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9LHQudXBkYXRlUXVldWU9bnVsbCxNZShYbyxqdCksanR8PWUsbnVsbDt0Lm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9LHI9YSE9PW51bGw/YS5iYXNlTGFuZXM6bixNZShYbyxqdCksanR8PXJ9ZWxzZSBhIT09bnVsbD8ocj1hLmJhc2VMYW5lc3xuLHQubWVtb2l6ZWRTdGF0ZT1udWxsKTpyPW4sTWUoWG8sanQpLGp0fD1yO3JldHVybiBEdChlLHQsbyxuKSx0LmNoaWxkfWZ1bmN0aW9uIHpnKGUsdCl7dmFyIG49dC5yZWY7KGU9PT1udWxsJiZuIT09bnVsbHx8ZSE9PW51bGwmJmUucmVmIT09bikmJih0LmZsYWdzfD01MTIsdC5mbGFnc3w9MjA5NzE1Mil9ZnVuY3Rpb24genUoZSx0LG4scixvKXt2YXIgYT1VdChuKT9sbzpTdC5jdXJyZW50O3JldHVybiBhPWlhKHQsYSkscmEodCxvKSxuPUVkKGUsdCxuLHIsYSxvKSxyPVRkKCksZSE9PW51bGwmJiF6dD8odC51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLHQuZmxhZ3MmPS0yMDUzLGUubGFuZXMmPX5vLHNyKGUsdCxvKSk6KCRlJiZyJiZwZCh0KSx0LmZsYWdzfD0xLER0KGUsdCxuLG8pLHQuY2hpbGQpfWZ1bmN0aW9uIFFoKGUsdCxuLHIsbyl7aWYoVXQobikpe3ZhciBhPSEwO1FzKHQpfWVsc2UgYT0hMTtpZihyYSh0LG8pLHQuc3RhdGVOb2RlPT09bnVsbClMcyhlLHQpLElnKHQsbixyKSxQdSh0LG4scixvKSxyPSEwO2Vsc2UgaWYoZT09PW51bGwpe3ZhciBpPXQuc3RhdGVOb2RlLHM9dC5tZW1vaXplZFByb3BzO2kucHJvcHM9czt2YXIgbD1pLmNvbnRleHQsYz1uLmNvbnRleHRUeXBlO3R5cGVvZiBjPT0ib2JqZWN0IiYmYyE9PW51bGw/Yz1sbihjKTooYz1VdChuKT9sbzpTdC5jdXJyZW50LGM9aWEodCxjKSk7dmFyIHU9bi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMscD10eXBlb2YgdT09ImZ1bmN0aW9uInx8dHlwZW9mIGkuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiI7cHx8dHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiImJnR5cGVvZiBpLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiJ8fChzIT09cnx8bCE9PWMpJiZHaCh0LGkscixjKSxTcj0hMTt2YXIgZD10Lm1lbW9pemVkU3RhdGU7aS5zdGF0ZT1kLHRsKHQscixpLG8pLGw9dC5tZW1vaXplZFN0YXRlLHMhPT1yfHxkIT09bHx8RnQuY3VycmVudHx8U3I/KHR5cGVvZiB1PT0iZnVuY3Rpb24iJiYoTXUodCxuLHUsciksbD10Lm1lbW9pemVkU3RhdGUpLChzPVNyfHxIaCh0LG4scyxyLGQsbCxjKSk/KHB8fHR5cGVvZiBpLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiImJnR5cGVvZiBpLmNvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uInx8KHR5cGVvZiBpLmNvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmaS5jb21wb25lbnRXaWxsTW91bnQoKSx0eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50PT0iZnVuY3Rpb24iJiZpLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksdHlwZW9mIGkuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSk6KHR5cGVvZiBpLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYodC5mbGFnc3w9NDE5NDMwOCksdC5tZW1vaXplZFByb3BzPXIsdC5tZW1vaXplZFN0YXRlPWwpLGkucHJvcHM9cixpLnN0YXRlPWwsaS5jb250ZXh0PWMscj1zKToodHlwZW9mIGkuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00MTk0MzA4KSxyPSExKX1lbHNle2k9dC5zdGF0ZU5vZGUsZGcoZSx0KSxzPXQubWVtb2l6ZWRQcm9wcyxjPXQudHlwZT09PXQuZWxlbWVudFR5cGU/czprbih0LnR5cGUscyksaS5wcm9wcz1jLHA9dC5wZW5kaW5nUHJvcHMsZD1pLmNvbnRleHQsbD1uLmNvbnRleHRUeXBlLHR5cGVvZiBsPT0ib2JqZWN0IiYmbCE9PW51bGw/bD1sbihsKToobD1VdChuKT9sbzpTdC5jdXJyZW50LGw9aWEodCxsKSk7dmFyIGg9bi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7KHU9dHlwZW9mIGg9PSJmdW5jdGlvbiJ8fHR5cGVvZiBpLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24iKXx8dHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiImJnR5cGVvZiBpLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPSJmdW5jdGlvbiJ8fChzIT09cHx8ZCE9PWwpJiZHaCh0LGkscixsKSxTcj0hMSxkPXQubWVtb2l6ZWRTdGF0ZSxpLnN0YXRlPWQsdGwodCxyLGksbyk7dmFyIHk9dC5tZW1vaXplZFN0YXRlO3MhPT1wfHxkIT09eXx8RnQuY3VycmVudHx8U3I/KHR5cGVvZiBoPT0iZnVuY3Rpb24iJiYoTXUodCxuLGgscikseT10Lm1lbW9pemVkU3RhdGUpLChjPVNyfHxIaCh0LG4sYyxyLGQseSxsKXx8ITEpPyh1fHx0eXBlb2YgaS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSE9ImZ1bmN0aW9uIiYmdHlwZW9mIGkuY29tcG9uZW50V2lsbFVwZGF0ZSE9ImZ1bmN0aW9uInx8KHR5cGVvZiBpLmNvbXBvbmVudFdpbGxVcGRhdGU9PSJmdW5jdGlvbiImJmkuY29tcG9uZW50V2lsbFVwZGF0ZShyLHksbCksdHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGU9PSJmdW5jdGlvbiImJmkuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUocix5LGwpKSx0eXBlb2YgaS5jb21wb25lbnREaWRVcGRhdGU9PSJmdW5jdGlvbiImJih0LmZsYWdzfD00KSx0eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTEwMjQpKToodHlwZW9mIGkuY29tcG9uZW50RGlkVXBkYXRlIT0iZnVuY3Rpb24ifHxzPT09ZS5tZW1vaXplZFByb3BzJiZkPT09ZS5tZW1vaXplZFN0YXRlfHwodC5mbGFnc3w9NCksdHlwZW9mIGkuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPSJmdW5jdGlvbiJ8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmQ9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD0xMDI0KSx0Lm1lbW9pemVkUHJvcHM9cix0Lm1lbW9pemVkU3RhdGU9eSksaS5wcm9wcz1yLGkuc3RhdGU9eSxpLmNvbnRleHQ9bCxyPWMpOih0eXBlb2YgaS5jb21wb25lbnREaWRVcGRhdGUhPSJmdW5jdGlvbiJ8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmQ9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmZsYWdzfD00KSx0eXBlb2YgaS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSE9ImZ1bmN0aW9uInx8cz09PWUubWVtb2l6ZWRQcm9wcyYmZD09PWUubWVtb2l6ZWRTdGF0ZXx8KHQuZmxhZ3N8PTEwMjQpLHI9ITEpfXJldHVybiBGdShlLHQsbixyLGEsbyl9ZnVuY3Rpb24gRnUoZSx0LG4scixvLGEpe3pnKGUsdCk7dmFyIGk9KHQuZmxhZ3MmMTI4KSE9PTA7aWYoIXImJiFpKXJldHVybiBvJiZQaCh0LG4sITEpLHNyKGUsdCxhKTtyPXQuc3RhdGVOb2RlLEN4LmN1cnJlbnQ9dDt2YXIgcz1pJiZ0eXBlb2Ygbi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IhPSJmdW5jdGlvbiI/bnVsbDpyLnJlbmRlcigpO3JldHVybiB0LmZsYWdzfD0xLGUhPT1udWxsJiZpPyh0LmNoaWxkPWxhKHQsZS5jaGlsZCxudWxsLGEpLHQuY2hpbGQ9bGEodCxudWxsLHMsYSkpOkR0KGUsdCxzLGEpLHQubWVtb2l6ZWRTdGF0ZT1yLnN0YXRlLG8mJlBoKHQsbiwhMCksdC5jaGlsZH1mdW5jdGlvbiBGZyhlKXt2YXIgdD1lLnN0YXRlTm9kZTt0LnBlbmRpbmdDb250ZXh0P01oKGUsdC5wZW5kaW5nQ29udGV4dCx0LnBlbmRpbmdDb250ZXh0IT09dC5jb250ZXh0KTp0LmNvbnRleHQmJk1oKGUsdC5jb250ZXh0LCExKSxiZChlLHQuY29udGFpbmVySW5mbyl9ZnVuY3Rpb24gSmgoZSx0LG4scixvKXtyZXR1cm4gc2EoKSxoZChvKSx0LmZsYWdzfD0yNTYsRHQoZSx0LG4sciksdC5jaGlsZH12YXIgVXU9e2RlaHlkcmF0ZWQ6bnVsbCx0cmVlQ29udGV4dDpudWxsLHJldHJ5TGFuZTowfTtmdW5jdGlvbiAkdShlKXtyZXR1cm57YmFzZUxhbmVzOmUsY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6bnVsbH19ZnVuY3Rpb24gVWcoZSx0LG4pe3ZhciByPXQucGVuZGluZ1Byb3BzLG89VmUuY3VycmVudCxhPSExLGk9KHQuZmxhZ3MmMTI4KSE9PTAscztpZigocz1pKXx8KHM9ZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZT09PW51bGw/ITE6KG8mMikhPT0wKSxzPyhhPSEwLHQuZmxhZ3MmPS0xMjkpOihlPT09bnVsbHx8ZS5tZW1vaXplZFN0YXRlIT09bnVsbCkmJihvfD0xKSxNZShWZSxvJjEpLGU9PT1udWxsKXJldHVybiBJdSh0KSxlPXQubWVtb2l6ZWRTdGF0ZSxlIT09bnVsbCYmKGU9ZS5kZWh5ZHJhdGVkLGUhPT1udWxsKT8odC5tb2RlJjE/ZS5kYXRhPT09IiQhIj90LmxhbmVzPTg6dC5sYW5lcz0xMDczNzQxODI0OnQubGFuZXM9MSxudWxsKTooaT1yLmNoaWxkcmVuLGU9ci5mYWxsYmFjayxhPyhyPXQubW9kZSxhPXQuY2hpbGQsaT17bW9kZToiaGlkZGVuIixjaGlsZHJlbjppfSwhKHImMSkmJmEhPT1udWxsPyhhLmNoaWxkTGFuZXM9MCxhLnBlbmRpbmdQcm9wcz1pKTphPWJsKGksciwwLG51bGwpLGU9c28oZSxyLG4sbnVsbCksYS5yZXR1cm49dCxlLnJldHVybj10LGEuc2libGluZz1lLHQuY2hpbGQ9YSx0LmNoaWxkLm1lbW9pemVkU3RhdGU9JHUobiksdC5tZW1vaXplZFN0YXRlPVV1LGUpOl9kKHQsaSkpO2lmKG89ZS5tZW1vaXplZFN0YXRlLG8hPT1udWxsJiYocz1vLmRlaHlkcmF0ZWQscyE9PW51bGwpKXJldHVybiBBeChlLHQsaSxyLHMsbyxuKTtpZihhKXthPXIuZmFsbGJhY2ssaT10Lm1vZGUsbz1lLmNoaWxkLHM9by5zaWJsaW5nO3ZhciBsPXttb2RlOiJoaWRkZW4iLGNoaWxkcmVuOnIuY2hpbGRyZW59O3JldHVybiEoaSYxKSYmdC5jaGlsZCE9PW8/KHI9dC5jaGlsZCxyLmNoaWxkTGFuZXM9MCxyLnBlbmRpbmdQcm9wcz1sLHQuZGVsZXRpb25zPW51bGwpOihyPVByKG8sbCksci5zdWJ0cmVlRmxhZ3M9by5zdWJ0cmVlRmxhZ3MmMTQ2ODAwNjQpLHMhPT1udWxsP2E9UHIocyxhKTooYT1zbyhhLGksbixudWxsKSxhLmZsYWdzfD0yKSxhLnJldHVybj10LHIucmV0dXJuPXQsci5zaWJsaW5nPWEsdC5jaGlsZD1yLHI9YSxhPXQuY2hpbGQsaT1lLmNoaWxkLm1lbW9pemVkU3RhdGUsaT1pPT09bnVsbD8kdShuKTp7YmFzZUxhbmVzOmkuYmFzZUxhbmVzfG4sY2FjaGVQb29sOm51bGwsdHJhbnNpdGlvbnM6aS50cmFuc2l0aW9uc30sYS5tZW1vaXplZFN0YXRlPWksYS5jaGlsZExhbmVzPWUuY2hpbGRMYW5lcyZ+bix0Lm1lbW9pemVkU3RhdGU9VXUscn1yZXR1cm4gYT1lLmNoaWxkLGU9YS5zaWJsaW5nLHI9UHIoYSx7bW9kZToidmlzaWJsZSIsY2hpbGRyZW46ci5jaGlsZHJlbn0pLCEodC5tb2RlJjEpJiYoci5sYW5lcz1uKSxyLnJldHVybj10LHIuc2libGluZz1udWxsLGUhPT1udWxsJiYobj10LmRlbGV0aW9ucyxuPT09bnVsbD8odC5kZWxldGlvbnM9W2VdLHQuZmxhZ3N8PTE2KTpuLnB1c2goZSkpLHQuY2hpbGQ9cix0Lm1lbW9pemVkU3RhdGU9bnVsbCxyfWZ1bmN0aW9uIF9kKGUsdCl7cmV0dXJuIHQ9Ymwoe21vZGU6InZpc2libGUiLGNoaWxkcmVuOnR9LGUubW9kZSwwLG51bGwpLHQucmV0dXJuPWUsZS5jaGlsZD10fWZ1bmN0aW9uIERzKGUsdCxuLHIpe3JldHVybiByIT09bnVsbCYmaGQociksbGEodCxlLmNoaWxkLG51bGwsbiksZT1fZCh0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuKSxlLmZsYWdzfD0yLHQubWVtb2l6ZWRTdGF0ZT1udWxsLGV9ZnVuY3Rpb24gQXgoZSx0LG4scixvLGEsaSl7aWYobilyZXR1cm4gdC5mbGFncyYyNTY/KHQuZmxhZ3MmPS0yNTcscj1ldShFcnJvcihNKDQyMikpKSxEcyhlLHQsaSxyKSk6dC5tZW1vaXplZFN0YXRlIT09bnVsbD8odC5jaGlsZD1lLmNoaWxkLHQuZmxhZ3N8PTEyOCxudWxsKTooYT1yLmZhbGxiYWNrLG89dC5tb2RlLHI9Ymwoe21vZGU6InZpc2libGUiLGNoaWxkcmVuOnIuY2hpbGRyZW59LG8sMCxudWxsKSxhPXNvKGEsbyxpLG51bGwpLGEuZmxhZ3N8PTIsci5yZXR1cm49dCxhLnJldHVybj10LHIuc2libGluZz1hLHQuY2hpbGQ9cix0Lm1vZGUmMSYmbGEodCxlLmNoaWxkLG51bGwsaSksdC5jaGlsZC5tZW1vaXplZFN0YXRlPSR1KGkpLHQubWVtb2l6ZWRTdGF0ZT1VdSxhKTtpZighKHQubW9kZSYxKSlyZXR1cm4gRHMoZSx0LGksbnVsbCk7aWYoby5kYXRhPT09IiQhIil7aWYocj1vLm5leHRTaWJsaW5nJiZvLm5leHRTaWJsaW5nLmRhdGFzZXQscil2YXIgcz1yLmRnc3Q7cmV0dXJuIHI9cyxhPUVycm9yKE0oNDE5KSkscj1ldShhLHIsdm9pZCAwKSxEcyhlLHQsaSxyKX1pZihzPShpJmUuY2hpbGRMYW5lcykhPT0wLHp0fHxzKXtpZihyPXV0LHIhPT1udWxsKXtzd2l0Y2goaSYtaSl7Y2FzZSA0Om89MjticmVhaztjYXNlIDE2Om89ODticmVhaztjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOmNhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6bz0zMjticmVhaztjYXNlIDUzNjg3MDkxMjpvPTI2ODQzNTQ1NjticmVhaztkZWZhdWx0Om89MH1vPW8mKHIuc3VzcGVuZGVkTGFuZXN8aSk/MDpvLG8hPT0wJiZvIT09YS5yZXRyeUxhbmUmJihhLnJldHJ5TGFuZT1vLGlyKGUsbyksVG4ocixlLG8sLTEpKX1yZXR1cm4gTWQoKSxyPWV1KEVycm9yKE0oNDIxKSkpLERzKGUsdCxpLHIpfXJldHVybiBvLmRhdGE9PT0iJD8iPyh0LmZsYWdzfD0xMjgsdC5jaGlsZD1lLmNoaWxkLHQ9SHguYmluZChudWxsLGUpLG8uX3JlYWN0UmV0cnk9dCxudWxsKTooZT1hLnRyZWVDb250ZXh0LEt0PU9yKG8ubmV4dFNpYmxpbmcpLFl0PXQsJGU9ITAsU249bnVsbCxlIT09bnVsbCYmKHJuW29uKytdPXRyLHJuW29uKytdPW5yLHJuW29uKytdPWNvLHRyPWUuaWQsbnI9ZS5vdmVyZmxvdyxjbz10KSx0PV9kKHQsci5jaGlsZHJlbiksdC5mbGFnc3w9NDA5Nix0KX1mdW5jdGlvbiBYaChlLHQsbil7ZS5sYW5lc3w9dDt2YXIgcj1lLmFsdGVybmF0ZTtyIT09bnVsbCYmKHIubGFuZXN8PXQpLFJ1KGUucmV0dXJuLHQsbil9ZnVuY3Rpb24gdHUoZSx0LG4scixvKXt2YXIgYT1lLm1lbW9pemVkU3RhdGU7YT09PW51bGw/ZS5tZW1vaXplZFN0YXRlPXtpc0JhY2t3YXJkczp0LHJlbmRlcmluZzpudWxsLHJlbmRlcmluZ1N0YXJ0VGltZTowLGxhc3Q6cix0YWlsOm4sdGFpbE1vZGU6b306KGEuaXNCYWNrd2FyZHM9dCxhLnJlbmRlcmluZz1udWxsLGEucmVuZGVyaW5nU3RhcnRUaW1lPTAsYS5sYXN0PXIsYS50YWlsPW4sYS50YWlsTW9kZT1vKX1mdW5jdGlvbiAkZyhlLHQsbil7dmFyIHI9dC5wZW5kaW5nUHJvcHMsbz1yLnJldmVhbE9yZGVyLGE9ci50YWlsO2lmKER0KGUsdCxyLmNoaWxkcmVuLG4pLHI9VmUuY3VycmVudCxyJjIpcj1yJjF8Mix0LmZsYWdzfD0xMjg7ZWxzZXtpZihlIT09bnVsbCYmZS5mbGFncyYxMjgpZTpmb3IoZT10LmNoaWxkO2UhPT1udWxsOyl7aWYoZS50YWc9PT0xMyllLm1lbW9pemVkU3RhdGUhPT1udWxsJiZYaChlLG4sdCk7ZWxzZSBpZihlLnRhZz09PTE5KVhoKGUsbix0KTtlbHNlIGlmKGUuY2hpbGQhPT1udWxsKXtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZDtjb250aW51ZX1pZihlPT09dClicmVhayBlO2Zvcig7ZS5zaWJsaW5nPT09bnVsbDspe2lmKGUucmV0dXJuPT09bnVsbHx8ZS5yZXR1cm49PT10KWJyZWFrIGU7ZT1lLnJldHVybn1lLnNpYmxpbmcucmV0dXJuPWUucmV0dXJuLGU9ZS5zaWJsaW5nfXImPTF9aWYoTWUoVmUsciksISh0Lm1vZGUmMSkpdC5tZW1vaXplZFN0YXRlPW51bGw7ZWxzZSBzd2l0Y2gobyl7Y2FzZSJmb3J3YXJkcyI6Zm9yKG49dC5jaGlsZCxvPW51bGw7biE9PW51bGw7KWU9bi5hbHRlcm5hdGUsZSE9PW51bGwmJm5sKGUpPT09bnVsbCYmKG89biksbj1uLnNpYmxpbmc7bj1vLG49PT1udWxsPyhvPXQuY2hpbGQsdC5jaGlsZD1udWxsKToobz1uLnNpYmxpbmcsbi5zaWJsaW5nPW51bGwpLHR1KHQsITEsbyxuLGEpO2JyZWFrO2Nhc2UiYmFja3dhcmRzIjpmb3Iobj1udWxsLG89dC5jaGlsZCx0LmNoaWxkPW51bGw7byE9PW51bGw7KXtpZihlPW8uYWx0ZXJuYXRlLGUhPT1udWxsJiZubChlKT09PW51bGwpe3QuY2hpbGQ9bzticmVha31lPW8uc2libGluZyxvLnNpYmxpbmc9bixuPW8sbz1lfXR1KHQsITAsbixudWxsLGEpO2JyZWFrO2Nhc2UidG9nZXRoZXIiOnR1KHQsITEsbnVsbCxudWxsLHZvaWQgMCk7YnJlYWs7ZGVmYXVsdDp0Lm1lbW9pemVkU3RhdGU9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBMcyhlLHQpeyEodC5tb2RlJjEpJiZlIT09bnVsbCYmKGUuYWx0ZXJuYXRlPW51bGwsdC5hbHRlcm5hdGU9bnVsbCx0LmZsYWdzfD0yKX1mdW5jdGlvbiBzcihlLHQsbil7aWYoZSE9PW51bGwmJih0LmRlcGVuZGVuY2llcz1lLmRlcGVuZGVuY2llcykscG98PXQubGFuZXMsIShuJnQuY2hpbGRMYW5lcykpcmV0dXJuIG51bGw7aWYoZSE9PW51bGwmJnQuY2hpbGQhPT1lLmNoaWxkKXRocm93IEVycm9yKE0oMTUzKSk7aWYodC5jaGlsZCE9PW51bGwpe2ZvcihlPXQuY2hpbGQsbj1QcihlLGUucGVuZGluZ1Byb3BzKSx0LmNoaWxkPW4sbi5yZXR1cm49dDtlLnNpYmxpbmchPT1udWxsOyllPWUuc2libGluZyxuPW4uc2libGluZz1QcihlLGUucGVuZGluZ1Byb3BzKSxuLnJldHVybj10O24uc2libGluZz1udWxsfXJldHVybiB0LmNoaWxkfWZ1bmN0aW9uIE94KGUsdCxuKXtzd2l0Y2godC50YWcpe2Nhc2UgMzpGZyh0KSxzYSgpO2JyZWFrO2Nhc2UgNTpwZyh0KTticmVhaztjYXNlIDE6VXQodC50eXBlKSYmUXModCk7YnJlYWs7Y2FzZSA0OmJkKHQsdC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7Y2FzZSAxMDp2YXIgcj10LnR5cGUuX2NvbnRleHQsbz10Lm1lbW9pemVkUHJvcHMudmFsdWU7TWUoWnMsci5fY3VycmVudFZhbHVlKSxyLl9jdXJyZW50VmFsdWU9bzticmVhaztjYXNlIDEzOmlmKHI9dC5tZW1vaXplZFN0YXRlLHIhPT1udWxsKXJldHVybiByLmRlaHlkcmF0ZWQhPT1udWxsPyhNZShWZSxWZS5jdXJyZW50JjEpLHQuZmxhZ3N8PTEyOCxudWxsKTpuJnQuY2hpbGQuY2hpbGRMYW5lcz9VZyhlLHQsbik6KE1lKFZlLFZlLmN1cnJlbnQmMSksZT1zcihlLHQsbiksZSE9PW51bGw/ZS5zaWJsaW5nOm51bGwpO01lKFZlLFZlLmN1cnJlbnQmMSk7YnJlYWs7Y2FzZSAxOTppZihyPShuJnQuY2hpbGRMYW5lcykhPT0wLGUuZmxhZ3MmMTI4KXtpZihyKXJldHVybiAkZyhlLHQsbik7dC5mbGFnc3w9MTI4fWlmKG89dC5tZW1vaXplZFN0YXRlLG8hPT1udWxsJiYoby5yZW5kZXJpbmc9bnVsbCxvLnRhaWw9bnVsbCxvLmxhc3RFZmZlY3Q9bnVsbCksTWUoVmUsVmUuY3VycmVudCkscilicmVhaztyZXR1cm4gbnVsbDtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIHQubGFuZXM9MCxMZyhlLHQsbil9cmV0dXJuIHNyKGUsdCxuKX12YXIgV2csV3UsQmcsSGc7V2c9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dC5jaGlsZDtuIT09bnVsbDspe2lmKG4udGFnPT09NXx8bi50YWc9PT02KWUuYXBwZW5kQ2hpbGQobi5zdGF0ZU5vZGUpO2Vsc2UgaWYobi50YWchPT00JiZuLmNoaWxkIT09bnVsbCl7bi5jaGlsZC5yZXR1cm49bixuPW4uY2hpbGQ7Y29udGludWV9aWYobj09PXQpYnJlYWs7Zm9yKDtuLnNpYmxpbmc9PT1udWxsOyl7aWYobi5yZXR1cm49PT1udWxsfHxuLnJldHVybj09PXQpcmV0dXJuO249bi5yZXR1cm59bi5zaWJsaW5nLnJldHVybj1uLnJldHVybixuPW4uc2libGluZ319O1d1PWZ1bmN0aW9uKCl7fTtCZz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz1lLm1lbW9pemVkUHJvcHM7aWYobyE9PXIpe2U9dC5zdGF0ZU5vZGUsYW8oSG4uY3VycmVudCk7dmFyIGE9bnVsbDtzd2l0Y2gobil7Y2FzZSJpbnB1dCI6bz1jdShlLG8pLHI9Y3UoZSxyKSxhPVtdO2JyZWFrO2Nhc2Uic2VsZWN0IjpvPUtlKHt9LG8se3ZhbHVlOnZvaWQgMH0pLHI9S2Uoe30scix7dmFsdWU6dm9pZCAwfSksYT1bXTticmVhaztjYXNlInRleHRhcmVhIjpvPXB1KGUsbykscj1wdShlLHIpLGE9W107YnJlYWs7ZGVmYXVsdDp0eXBlb2Ygby5vbkNsaWNrIT0iZnVuY3Rpb24iJiZ0eXBlb2Ygci5vbkNsaWNrPT0iZnVuY3Rpb24iJiYoZS5vbmNsaWNrPVlzKX1odShuLHIpO3ZhciBpO249bnVsbDtmb3IoYyBpbiBvKWlmKCFyLmhhc093blByb3BlcnR5KGMpJiZvLmhhc093blByb3BlcnR5KGMpJiZvW2NdIT1udWxsKWlmKGM9PT0ic3R5bGUiKXt2YXIgcz1vW2NdO2ZvcihpIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShpKSYmKG58fChuPXt9KSxuW2ldPSIiKX1lbHNlIGMhPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiJiZjIT09ImNoaWxkcmVuIiYmYyE9PSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciJiZjIT09InN1cHByZXNzSHlkcmF0aW9uV2FybmluZyImJmMhPT0iYXV0b0ZvY3VzIiYmKG5pLmhhc093blByb3BlcnR5KGMpP2F8fChhPVtdKTooYT1hfHxbXSkucHVzaChjLG51bGwpKTtmb3IoYyBpbiByKXt2YXIgbD1yW2NdO2lmKHM9bz8uW2NdLHIuaGFzT3duUHJvcGVydHkoYykmJmwhPT1zJiYobCE9bnVsbHx8cyE9bnVsbCkpaWYoYz09PSJzdHlsZSIpaWYocyl7Zm9yKGkgaW4gcykhcy5oYXNPd25Qcm9wZXJ0eShpKXx8bCYmbC5oYXNPd25Qcm9wZXJ0eShpKXx8KG58fChuPXt9KSxuW2ldPSIiKTtmb3IoaSBpbiBsKWwuaGFzT3duUHJvcGVydHkoaSkmJnNbaV0hPT1sW2ldJiYobnx8KG49e30pLG5baV09bFtpXSl9ZWxzZSBufHwoYXx8KGE9W10pLGEucHVzaChjLG4pKSxuPWw7ZWxzZSBjPT09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj8obD1sP2wuX19odG1sOnZvaWQgMCxzPXM/cy5fX2h0bWw6dm9pZCAwLGwhPW51bGwmJnMhPT1sJiYoYT1hfHxbXSkucHVzaChjLGwpKTpjPT09ImNoaWxkcmVuIj90eXBlb2YgbCE9InN0cmluZyImJnR5cGVvZiBsIT0ibnVtYmVyInx8KGE9YXx8W10pLnB1c2goYywiIitsKTpjIT09InN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyImJmMhPT0ic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIiYmKG5pLmhhc093blByb3BlcnR5KGMpPyhsIT1udWxsJiZjPT09Im9uU2Nyb2xsIiYmTGUoInNjcm9sbCIsZSksYXx8cz09PWx8fChhPVtdKSk6KGE9YXx8W10pLnB1c2goYyxsKSl9biYmKGE9YXx8W10pLnB1c2goInN0eWxlIixuKTt2YXIgYz1hOyh0LnVwZGF0ZVF1ZXVlPWMpJiYodC5mbGFnc3w9NCl9fTtIZz1mdW5jdGlvbihlLHQsbixyKXtuIT09ciYmKHQuZmxhZ3N8PTQpfTtmdW5jdGlvbiAkYShlLHQpe2lmKCEkZSlzd2l0Y2goZS50YWlsTW9kZSl7Y2FzZSJoaWRkZW4iOnQ9ZS50YWlsO2Zvcih2YXIgbj1udWxsO3QhPT1udWxsOyl0LmFsdGVybmF0ZSE9PW51bGwmJihuPXQpLHQ9dC5zaWJsaW5nO249PT1udWxsP2UudGFpbD1udWxsOm4uc2libGluZz1udWxsO2JyZWFrO2Nhc2UiY29sbGFwc2VkIjpuPWUudGFpbDtmb3IodmFyIHI9bnVsbDtuIT09bnVsbDspbi5hbHRlcm5hdGUhPT1udWxsJiYocj1uKSxuPW4uc2libGluZztyPT09bnVsbD90fHxlLnRhaWw9PT1udWxsP2UudGFpbD1udWxsOmUudGFpbC5zaWJsaW5nPW51bGw6ci5zaWJsaW5nPW51bGx9fWZ1bmN0aW9uIGt0KGUpe3ZhciB0PWUuYWx0ZXJuYXRlIT09bnVsbCYmZS5hbHRlcm5hdGUuY2hpbGQ9PT1lLmNoaWxkLG49MCxyPTA7aWYodClmb3IodmFyIG89ZS5jaGlsZDtvIT09bnVsbDspbnw9by5sYW5lc3xvLmNoaWxkTGFuZXMscnw9by5zdWJ0cmVlRmxhZ3MmMTQ2ODAwNjQscnw9by5mbGFncyYxNDY4MDA2NCxvLnJldHVybj1lLG89by5zaWJsaW5nO2Vsc2UgZm9yKG89ZS5jaGlsZDtvIT09bnVsbDspbnw9by5sYW5lc3xvLmNoaWxkTGFuZXMscnw9by5zdWJ0cmVlRmxhZ3Mscnw9by5mbGFncyxvLnJldHVybj1lLG89by5zaWJsaW5nO3JldHVybiBlLnN1YnRyZWVGbGFnc3w9cixlLmNoaWxkTGFuZXM9bix0fWZ1bmN0aW9uIEl4KGUsdCxuKXt2YXIgcj10LnBlbmRpbmdQcm9wcztzd2l0Y2goZmQodCksdC50YWcpe2Nhc2UgMjpjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OnJldHVybiBrdCh0KSxudWxsO2Nhc2UgMTpyZXR1cm4gVXQodC50eXBlKSYmcXMoKSxrdCh0KSxudWxsO2Nhc2UgMzpyZXR1cm4gcj10LnN0YXRlTm9kZSxjYSgpLHplKEZ0KSx6ZShTdCkseGQoKSxyLnBlbmRpbmdDb250ZXh0JiYoci5jb250ZXh0PXIucGVuZGluZ0NvbnRleHQsci5wZW5kaW5nQ29udGV4dD1udWxsKSwoZT09PW51bGx8fGUuY2hpbGQ9PT1udWxsKSYmKFRzKHQpP3QuZmxhZ3N8PTQ6ZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQmJiEodC5mbGFncyYyNTYpfHwodC5mbGFnc3w9MTAyNCxTbiE9PW51bGwmJihxdShTbiksU249bnVsbCkpKSxXdShlLHQpLGt0KHQpLG51bGw7Y2FzZSA1OmtkKHQpO3ZhciBvPWFvKGhpLmN1cnJlbnQpO2lmKG49dC50eXBlLGUhPT1udWxsJiZ0LnN0YXRlTm9kZSE9bnVsbClCZyhlLHQsbixyLG8pLGUucmVmIT09dC5yZWYmJih0LmZsYWdzfD01MTIsdC5mbGFnc3w9MjA5NzE1Mik7ZWxzZXtpZighcil7aWYodC5zdGF0ZU5vZGU9PT1udWxsKXRocm93IEVycm9yKE0oMTY2KSk7cmV0dXJuIGt0KHQpLG51bGx9aWYoZT1hbyhIbi5jdXJyZW50KSxUcyh0KSl7cj10LnN0YXRlTm9kZSxuPXQudHlwZTt2YXIgYT10Lm1lbW9pemVkUHJvcHM7c3dpdGNoKHJbV25dPXQscltwaV09YSxlPSh0Lm1vZGUmMSkhPT0wLG4pe2Nhc2UiZGlhbG9nIjpMZSgiY2FuY2VsIixyKSxMZSgiY2xvc2UiLHIpO2JyZWFrO2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6Y2FzZSJlbWJlZCI6TGUoImxvYWQiLHIpO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihvPTA7bzxqYS5sZW5ndGg7bysrKUxlKGphW29dLHIpO2JyZWFrO2Nhc2Uic291cmNlIjpMZSgiZXJyb3IiLHIpO2JyZWFrO2Nhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImxpbmsiOkxlKCJlcnJvciIsciksTGUoImxvYWQiLHIpO2JyZWFrO2Nhc2UiZGV0YWlscyI6TGUoInRvZ2dsZSIscik7YnJlYWs7Y2FzZSJpbnB1dCI6aWgocixhKSxMZSgiaW52YWxpZCIscik7YnJlYWs7Y2FzZSJzZWxlY3QiOnIuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFhLm11bHRpcGxlfSxMZSgiaW52YWxpZCIscik7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6bGgocixhKSxMZSgiaW52YWxpZCIscil9aHUobixhKSxvPW51bGw7Zm9yKHZhciBpIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShpKSl7dmFyIHM9YVtpXTtpPT09ImNoaWxkcmVuIj90eXBlb2Ygcz09InN0cmluZyI/ci50ZXh0Q29udGVudCE9PXMmJihhLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyE9PSEwJiZFcyhyLnRleHRDb250ZW50LHMsZSksbz1bImNoaWxkcmVuIixzXSk6dHlwZW9mIHM9PSJudW1iZXIiJiZyLnRleHRDb250ZW50IT09IiIrcyYmKGEuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIT09ITAmJkVzKHIudGV4dENvbnRlbnQscyxlKSxvPVsiY2hpbGRyZW4iLCIiK3NdKTpuaS5oYXNPd25Qcm9wZXJ0eShpKSYmcyE9bnVsbCYmaT09PSJvblNjcm9sbCImJkxlKCJzY3JvbGwiLHIpfXN3aXRjaChuKXtjYXNlImlucHV0IjpwcyhyKSxzaChyLGEsITApO2JyZWFrO2Nhc2UidGV4dGFyZWEiOnBzKHIpLGNoKHIpO2JyZWFrO2Nhc2Uic2VsZWN0IjpjYXNlIm9wdGlvbiI6YnJlYWs7ZGVmYXVsdDp0eXBlb2YgYS5vbkNsaWNrPT0iZnVuY3Rpb24iJiYoci5vbmNsaWNrPVlzKX1yPW8sdC51cGRhdGVRdWV1ZT1yLHIhPT1udWxsJiYodC5mbGFnc3w9NCl9ZWxzZXtpPW8ubm9kZVR5cGU9PT05P286by5vd25lckRvY3VtZW50LGU9PT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCImJihlPXltKG4pKSxlPT09Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiP249PT0ic2NyaXB0Ij8oZT1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuaW5uZXJIVE1MPSI8c2NyaXB0PjxcL3NjcmlwdD4iLGU9ZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpKTp0eXBlb2Ygci5pcz09InN0cmluZyI/ZT1pLmNyZWF0ZUVsZW1lbnQobix7aXM6ci5pc30pOihlPWkuY3JlYXRlRWxlbWVudChuKSxuPT09InNlbGVjdCImJihpPWUsci5tdWx0aXBsZT9pLm11bHRpcGxlPSEwOnIuc2l6ZSYmKGkuc2l6ZT1yLnNpemUpKSk6ZT1pLmNyZWF0ZUVsZW1lbnROUyhlLG4pLGVbV25dPXQsZVtwaV09cixXZyhlLHQsITEsITEpLHQuc3RhdGVOb2RlPWU7ZTp7c3dpdGNoKGk9bXUobixyKSxuKXtjYXNlImRpYWxvZyI6TGUoImNhbmNlbCIsZSksTGUoImNsb3NlIixlKSxvPXI7YnJlYWs7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjpMZSgibG9hZCIsZSksbz1yO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihvPTA7bzxqYS5sZW5ndGg7bysrKUxlKGphW29dLGUpO289cjticmVhaztjYXNlInNvdXJjZSI6TGUoImVycm9yIixlKSxvPXI7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6TGUoImVycm9yIixlKSxMZSgibG9hZCIsZSksbz1yO2JyZWFrO2Nhc2UiZGV0YWlscyI6TGUoInRvZ2dsZSIsZSksbz1yO2JyZWFrO2Nhc2UiaW5wdXQiOmloKGUsciksbz1jdShlLHIpLExlKCJpbnZhbGlkIixlKTticmVhaztjYXNlIm9wdGlvbiI6bz1yO2JyZWFrO2Nhc2Uic2VsZWN0IjplLl93cmFwcGVyU3RhdGU9e3dhc011bHRpcGxlOiEhci5tdWx0aXBsZX0sbz1LZSh7fSxyLHt2YWx1ZTp2b2lkIDB9KSxMZSgiaW52YWxpZCIsZSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6bGgoZSxyKSxvPXB1KGUsciksTGUoImludmFsaWQiLGUpO2JyZWFrO2RlZmF1bHQ6bz1yfWh1KG4sbykscz1vO2ZvcihhIGluIHMpaWYocy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGw9c1thXTthPT09InN0eWxlIj9ibShlLGwpOmE9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPyhsPWw/bC5fX2h0bWw6dm9pZCAwLGwhPW51bGwmJnZtKGUsbCkpOmE9PT0iY2hpbGRyZW4iP3R5cGVvZiBsPT0ic3RyaW5nIj8obiE9PSJ0ZXh0YXJlYSJ8fGwhPT0iIikmJnJpKGUsbCk6dHlwZW9mIGw9PSJudW1iZXIiJiZyaShlLCIiK2wpOmEhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmYSE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiZhIT09ImF1dG9Gb2N1cyImJihuaS5oYXNPd25Qcm9wZXJ0eShhKT9sIT1udWxsJiZhPT09Im9uU2Nyb2xsIiYmTGUoInNjcm9sbCIsZSk6bCE9bnVsbCYmWHUoZSxhLGwsaSkpfXN3aXRjaChuKXtjYXNlImlucHV0IjpwcyhlKSxzaChlLHIsITEpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOnBzKGUpLGNoKGUpO2JyZWFrO2Nhc2Uib3B0aW9uIjpyLnZhbHVlIT1udWxsJiZlLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiK0xyKHIudmFsdWUpKTticmVhaztjYXNlInNlbGVjdCI6ZS5tdWx0aXBsZT0hIXIubXVsdGlwbGUsYT1yLnZhbHVlLGEhPW51bGw/Wm8oZSwhIXIubXVsdGlwbGUsYSwhMSk6ci5kZWZhdWx0VmFsdWUhPW51bGwmJlpvKGUsISFyLm11bHRpcGxlLHIuZGVmYXVsdFZhbHVlLCEwKTticmVhaztkZWZhdWx0OnR5cGVvZiBvLm9uQ2xpY2s9PSJmdW5jdGlvbiImJihlLm9uY2xpY2s9WXMpfXN3aXRjaChuKXtjYXNlImJ1dHRvbiI6Y2FzZSJpbnB1dCI6Y2FzZSJzZWxlY3QiOmNhc2UidGV4dGFyZWEiOnI9ISFyLmF1dG9Gb2N1czticmVhayBlO2Nhc2UiaW1nIjpyPSEwO2JyZWFrIGU7ZGVmYXVsdDpyPSExfX1yJiYodC5mbGFnc3w9NCl9dC5yZWYhPT1udWxsJiYodC5mbGFnc3w9NTEyLHQuZmxhZ3N8PTIwOTcxNTIpfXJldHVybiBrdCh0KSxudWxsO2Nhc2UgNjppZihlJiZ0LnN0YXRlTm9kZSE9bnVsbClIZyhlLHQsZS5tZW1vaXplZFByb3BzLHIpO2Vsc2V7aWYodHlwZW9mIHIhPSJzdHJpbmciJiZ0LnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoTSgxNjYpKTtpZihuPWFvKGhpLmN1cnJlbnQpLGFvKEhuLmN1cnJlbnQpLFRzKHQpKXtpZihyPXQuc3RhdGVOb2RlLG49dC5tZW1vaXplZFByb3BzLHJbV25dPXQsKGE9ci5ub2RlVmFsdWUhPT1uKSYmKGU9WXQsZSE9PW51bGwpKXN3aXRjaChlLnRhZyl7Y2FzZSAzOkVzKHIubm9kZVZhbHVlLG4sKGUubW9kZSYxKSE9PTApO2JyZWFrO2Nhc2UgNTplLm1lbW9pemVkUHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIT09ITAmJkVzKHIubm9kZVZhbHVlLG4sKGUubW9kZSYxKSE9PTApfWEmJih0LmZsYWdzfD00KX1lbHNlIHI9KG4ubm9kZVR5cGU9PT05P246bi5vd25lckRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZShyKSxyW1duXT10LHQuc3RhdGVOb2RlPXJ9cmV0dXJuIGt0KHQpLG51bGw7Y2FzZSAxMzppZih6ZShWZSkscj10Lm1lbW9pemVkU3RhdGUsZT09PW51bGx8fGUubWVtb2l6ZWRTdGF0ZSE9PW51bGwmJmUubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkIT09bnVsbCl7aWYoJGUmJkt0IT09bnVsbCYmdC5tb2RlJjEmJiEodC5mbGFncyYxMjgpKXNnKCksc2EoKSx0LmZsYWdzfD05ODU2MCxhPSExO2Vsc2UgaWYoYT1Ucyh0KSxyIT09bnVsbCYmci5kZWh5ZHJhdGVkIT09bnVsbCl7aWYoZT09PW51bGwpe2lmKCFhKXRocm93IEVycm9yKE0oMzE4KSk7aWYoYT10Lm1lbW9pemVkU3RhdGUsYT1hIT09bnVsbD9hLmRlaHlkcmF0ZWQ6bnVsbCwhYSl0aHJvdyBFcnJvcihNKDMxNykpO2FbV25dPXR9ZWxzZSBzYSgpLCEodC5mbGFncyYxMjgpJiYodC5tZW1vaXplZFN0YXRlPW51bGwpLHQuZmxhZ3N8PTQ7a3QodCksYT0hMX1lbHNlIFNuIT09bnVsbCYmKHF1KFNuKSxTbj1udWxsKSxhPSEwO2lmKCFhKXJldHVybiB0LmZsYWdzJjY1NTM2P3Q6bnVsbH1yZXR1cm4gdC5mbGFncyYxMjg/KHQubGFuZXM9bix0KToocj1yIT09bnVsbCxyIT09KGUhPT1udWxsJiZlLm1lbW9pemVkU3RhdGUhPT1udWxsKSYmciYmKHQuY2hpbGQuZmxhZ3N8PTgxOTIsdC5tb2RlJjEmJihlPT09bnVsbHx8VmUuY3VycmVudCYxP2l0PT09MCYmKGl0PTMpOk1kKCkpKSx0LnVwZGF0ZVF1ZXVlIT09bnVsbCYmKHQuZmxhZ3N8PTQpLGt0KHQpLG51bGwpO2Nhc2UgNDpyZXR1cm4gY2EoKSxXdShlLHQpLGU9PT1udWxsJiZ1aSh0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxrdCh0KSxudWxsO2Nhc2UgMTA6cmV0dXJuIHlkKHQudHlwZS5fY29udGV4dCksa3QodCksbnVsbDtjYXNlIDE3OnJldHVybiBVdCh0LnR5cGUpJiZxcygpLGt0KHQpLG51bGw7Y2FzZSAxOTppZih6ZShWZSksYT10Lm1lbW9pemVkU3RhdGUsYT09PW51bGwpcmV0dXJuIGt0KHQpLG51bGw7aWYocj0odC5mbGFncyYxMjgpIT09MCxpPWEucmVuZGVyaW5nLGk9PT1udWxsKWlmKHIpJGEoYSwhMSk7ZWxzZXtpZihpdCE9PTB8fGUhPT1udWxsJiZlLmZsYWdzJjEyOClmb3IoZT10LmNoaWxkO2UhPT1udWxsOyl7aWYoaT1ubChlKSxpIT09bnVsbCl7Zm9yKHQuZmxhZ3N8PTEyOCwkYShhLCExKSxyPWkudXBkYXRlUXVldWUsciE9PW51bGwmJih0LnVwZGF0ZVF1ZXVlPXIsdC5mbGFnc3w9NCksdC5zdWJ0cmVlRmxhZ3M9MCxyPW4sbj10LmNoaWxkO24hPT1udWxsOylhPW4sZT1yLGEuZmxhZ3MmPTE0NjgwMDY2LGk9YS5hbHRlcm5hdGUsaT09PW51bGw/KGEuY2hpbGRMYW5lcz0wLGEubGFuZXM9ZSxhLmNoaWxkPW51bGwsYS5zdWJ0cmVlRmxhZ3M9MCxhLm1lbW9pemVkUHJvcHM9bnVsbCxhLm1lbW9pemVkU3RhdGU9bnVsbCxhLnVwZGF0ZVF1ZXVlPW51bGwsYS5kZXBlbmRlbmNpZXM9bnVsbCxhLnN0YXRlTm9kZT1udWxsKTooYS5jaGlsZExhbmVzPWkuY2hpbGRMYW5lcyxhLmxhbmVzPWkubGFuZXMsYS5jaGlsZD1pLmNoaWxkLGEuc3VidHJlZUZsYWdzPTAsYS5kZWxldGlvbnM9bnVsbCxhLm1lbW9pemVkUHJvcHM9aS5tZW1vaXplZFByb3BzLGEubWVtb2l6ZWRTdGF0ZT1pLm1lbW9pemVkU3RhdGUsYS51cGRhdGVRdWV1ZT1pLnVwZGF0ZVF1ZXVlLGEudHlwZT1pLnR5cGUsZT1pLmRlcGVuZGVuY2llcyxhLmRlcGVuZGVuY2llcz1lPT09bnVsbD9udWxsOntsYW5lczplLmxhbmVzLGZpcnN0Q29udGV4dDplLmZpcnN0Q29udGV4dH0pLG49bi5zaWJsaW5nO3JldHVybiBNZShWZSxWZS5jdXJyZW50JjF8MiksdC5jaGlsZH1lPWUuc2libGluZ31hLnRhaWwhPT1udWxsJiZldCgpPmRhJiYodC5mbGFnc3w9MTI4LHI9ITAsJGEoYSwhMSksdC5sYW5lcz00MTk0MzA0KX1lbHNle2lmKCFyKWlmKGU9bmwoaSksZSE9PW51bGwpe2lmKHQuZmxhZ3N8PTEyOCxyPSEwLG49ZS51cGRhdGVRdWV1ZSxuIT09bnVsbCYmKHQudXBkYXRlUXVldWU9bix0LmZsYWdzfD00KSwkYShhLCEwKSxhLnRhaWw9PT1udWxsJiZhLnRhaWxNb2RlPT09ImhpZGRlbiImJiFpLmFsdGVybmF0ZSYmISRlKXJldHVybiBrdCh0KSxudWxsfWVsc2UgMipldCgpLWEucmVuZGVyaW5nU3RhcnRUaW1lPmRhJiZuIT09MTA3Mzc0MTgyNCYmKHQuZmxhZ3N8PTEyOCxyPSEwLCRhKGEsITEpLHQubGFuZXM9NDE5NDMwNCk7YS5pc0JhY2t3YXJkcz8oaS5zaWJsaW5nPXQuY2hpbGQsdC5jaGlsZD1pKToobj1hLmxhc3QsbiE9PW51bGw/bi5zaWJsaW5nPWk6dC5jaGlsZD1pLGEubGFzdD1pKX1yZXR1cm4gYS50YWlsIT09bnVsbD8odD1hLnRhaWwsYS5yZW5kZXJpbmc9dCxhLnRhaWw9dC5zaWJsaW5nLGEucmVuZGVyaW5nU3RhcnRUaW1lPWV0KCksdC5zaWJsaW5nPW51bGwsbj1WZS5jdXJyZW50LE1lKFZlLHI/biYxfDI6biYxKSx0KTooa3QodCksbnVsbCk7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBSZCgpLHI9dC5tZW1vaXplZFN0YXRlIT09bnVsbCxlIT09bnVsbCYmZS5tZW1vaXplZFN0YXRlIT09bnVsbCE9PXImJih0LmZsYWdzfD04MTkyKSxyJiZ0Lm1vZGUmMT9qdCYxMDczNzQxODI0JiYoa3QodCksdC5zdWJ0cmVlRmxhZ3MmNiYmKHQuZmxhZ3N8PTgxOTIpKTprdCh0KSxudWxsO2Nhc2UgMjQ6cmV0dXJuIG51bGw7Y2FzZSAyNTpyZXR1cm4gbnVsbH10aHJvdyBFcnJvcihNKDE1Nix0LnRhZykpfWZ1bmN0aW9uIFJ4KGUsdCl7c3dpdGNoKGZkKHQpLHQudGFnKXtjYXNlIDE6cmV0dXJuIFV0KHQudHlwZSkmJnFzKCksZT10LmZsYWdzLGUmNjU1MzY/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSAzOnJldHVybiBjYSgpLHplKEZ0KSx6ZShTdCkseGQoKSxlPXQuZmxhZ3MsZSY2NTUzNiYmIShlJjEyOCk/KHQuZmxhZ3M9ZSYtNjU1Mzd8MTI4LHQpOm51bGw7Y2FzZSA1OnJldHVybiBrZCh0KSxudWxsO2Nhc2UgMTM6aWYoemUoVmUpLGU9dC5tZW1vaXplZFN0YXRlLGUhPT1udWxsJiZlLmRlaHlkcmF0ZWQhPT1udWxsKXtpZih0LmFsdGVybmF0ZT09PW51bGwpdGhyb3cgRXJyb3IoTSgzNDApKTtzYSgpfXJldHVybiBlPXQuZmxhZ3MsZSY2NTUzNj8odC5mbGFncz1lJi02NTUzN3wxMjgsdCk6bnVsbDtjYXNlIDE5OnJldHVybiB6ZShWZSksbnVsbDtjYXNlIDQ6cmV0dXJuIGNhKCksbnVsbDtjYXNlIDEwOnJldHVybiB5ZCh0LnR5cGUuX2NvbnRleHQpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBSZCgpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfX12YXIgX3M9ITEseHQ9ITEsTXg9dHlwZW9mIFdlYWtTZXQ9PSJmdW5jdGlvbiI/V2Vha1NldDpTZXQsVj1udWxsO2Z1bmN0aW9uIEpvKGUsdCl7dmFyIG49ZS5yZWY7aWYobiE9PW51bGwpaWYodHlwZW9mIG49PSJmdW5jdGlvbiIpdHJ5e24obnVsbCl9Y2F0Y2gocil7cWUoZSx0LHIpfWVsc2Ugbi5jdXJyZW50PW51bGx9ZnVuY3Rpb24gQnUoZSx0LG4pe3RyeXtuKCl9Y2F0Y2gocil7cWUoZSx0LHIpfX12YXIgWmg9ITE7ZnVuY3Rpb24gUHgoZSx0KXtpZihUdT1WcyxlPVltKCksZGQoZSkpe2lmKCJzZWxlY3Rpb25TdGFydCJpbiBlKXZhciBuPXtzdGFydDplLnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVuZH07ZWxzZSBlOntuPShuPWUub3duZXJEb2N1bWVudCkmJm4uZGVmYXVsdFZpZXd8fHdpbmRvdzt2YXIgcj1uLmdldFNlbGVjdGlvbiYmbi5nZXRTZWxlY3Rpb24oKTtpZihyJiZyLnJhbmdlQ291bnQhPT0wKXtuPXIuYW5jaG9yTm9kZTt2YXIgbz1yLmFuY2hvck9mZnNldCxhPXIuZm9jdXNOb2RlO3I9ci5mb2N1c09mZnNldDt0cnl7bi5ub2RlVHlwZSxhLm5vZGVUeXBlfWNhdGNoe249bnVsbDticmVhayBlfXZhciBpPTAscz0tMSxsPS0xLGM9MCx1PTAscD1lLGQ9bnVsbDt0OmZvcig7Oyl7Zm9yKHZhciBoO3AhPT1ufHxvIT09MCYmcC5ub2RlVHlwZSE9PTN8fChzPWkrbykscCE9PWF8fHIhPT0wJiZwLm5vZGVUeXBlIT09M3x8KGw9aStyKSxwLm5vZGVUeXBlPT09MyYmKGkrPXAubm9kZVZhbHVlLmxlbmd0aCksKGg9cC5maXJzdENoaWxkKSE9PW51bGw7KWQ9cCxwPWg7Zm9yKDs7KXtpZihwPT09ZSlicmVhayB0O2lmKGQ9PT1uJiYrK2M9PT1vJiYocz1pKSxkPT09YSYmKyt1PT09ciYmKGw9aSksKGg9cC5uZXh0U2libGluZykhPT1udWxsKWJyZWFrO3A9ZCxkPXAucGFyZW50Tm9kZX1wPWh9bj1zPT09LTF8fGw9PT0tMT9udWxsOntzdGFydDpzLGVuZDpsfX1lbHNlIG49bnVsbH1uPW58fHtzdGFydDowLGVuZDowfX1lbHNlIG49bnVsbDtmb3IoTnU9e2ZvY3VzZWRFbGVtOmUsc2VsZWN0aW9uUmFuZ2U6bn0sVnM9ITEsVj10O1YhPT1udWxsOylpZih0PVYsZT10LmNoaWxkLCh0LnN1YnRyZWVGbGFncyYxMDI4KSE9PTAmJmUhPT1udWxsKWUucmV0dXJuPXQsVj1lO2Vsc2UgZm9yKDtWIT09bnVsbDspe3Q9Vjt0cnl7dmFyIHk9dC5hbHRlcm5hdGU7aWYodC5mbGFncyYxMDI0KXN3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpicmVhaztjYXNlIDE6aWYoeSE9PW51bGwpe3ZhciB3PXkubWVtb2l6ZWRQcm9wcyxiPXkubWVtb2l6ZWRTdGF0ZSxnPXQuc3RhdGVOb2RlLG09Zy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSh0LmVsZW1lbnRUeXBlPT09dC50eXBlP3c6a24odC50eXBlLHcpLGIpO2cuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9bX1icmVhaztjYXNlIDM6dmFyIHY9dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzt2Lm5vZGVUeXBlPT09MT92LnRleHRDb250ZW50PSIiOnYubm9kZVR5cGU9PT05JiZ2LmRvY3VtZW50RWxlbWVudCYmdi5yZW1vdmVDaGlsZCh2LmRvY3VtZW50RWxlbWVudCk7YnJlYWs7Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKE0oMTYzKSl9fWNhdGNoKGYpe3FlKHQsdC5yZXR1cm4sZil9aWYoZT10LnNpYmxpbmcsZSE9PW51bGwpe2UucmV0dXJuPXQucmV0dXJuLFY9ZTticmVha31WPXQucmV0dXJufXJldHVybiB5PVpoLFpoPSExLHl9ZnVuY3Rpb24gWmEoZSx0LG4pe3ZhciByPXQudXBkYXRlUXVldWU7aWYocj1yIT09bnVsbD9yLmxhc3RFZmZlY3Q6bnVsbCxyIT09bnVsbCl7dmFyIG89cj1yLm5leHQ7ZG97aWYoKG8udGFnJmUpPT09ZSl7dmFyIGE9by5kZXN0cm95O28uZGVzdHJveT12b2lkIDAsYSE9PXZvaWQgMCYmQnUodCxuLGEpfW89by5uZXh0fXdoaWxlKG8hPT1yKX19ZnVuY3Rpb24gdmwoZSx0KXtpZih0PXQudXBkYXRlUXVldWUsdD10IT09bnVsbD90Lmxhc3RFZmZlY3Q6bnVsbCx0IT09bnVsbCl7dmFyIG49dD10Lm5leHQ7ZG97aWYoKG4udGFnJmUpPT09ZSl7dmFyIHI9bi5jcmVhdGU7bi5kZXN0cm95PXIoKX1uPW4ubmV4dH13aGlsZShuIT09dCl9fWZ1bmN0aW9uIEh1KGUpe3ZhciB0PWUucmVmO2lmKHQhPT1udWxsKXt2YXIgbj1lLnN0YXRlTm9kZTtzd2l0Y2goZS50YWcpe2Nhc2UgNTplPW47YnJlYWs7ZGVmYXVsdDplPW59dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0LmN1cnJlbnQ9ZX19ZnVuY3Rpb24gR2coZSl7dmFyIHQ9ZS5hbHRlcm5hdGU7dCE9PW51bGwmJihlLmFsdGVybmF0ZT1udWxsLEdnKHQpKSxlLmNoaWxkPW51bGwsZS5kZWxldGlvbnM9bnVsbCxlLnNpYmxpbmc9bnVsbCxlLnRhZz09PTUmJih0PWUuc3RhdGVOb2RlLHQhPT1udWxsJiYoZGVsZXRlIHRbV25dLGRlbGV0ZSB0W3BpXSxkZWxldGUgdFtDdV0sZGVsZXRlIHRbeXhdLGRlbGV0ZSB0W3Z4XSkpLGUuc3RhdGVOb2RlPW51bGwsZS5yZXR1cm49bnVsbCxlLmRlcGVuZGVuY2llcz1udWxsLGUubWVtb2l6ZWRQcm9wcz1udWxsLGUubWVtb2l6ZWRTdGF0ZT1udWxsLGUucGVuZGluZ1Byb3BzPW51bGwsZS5zdGF0ZU5vZGU9bnVsbCxlLnVwZGF0ZVF1ZXVlPW51bGx9ZnVuY3Rpb24gVmcoZSl7cmV0dXJuIGUudGFnPT09NXx8ZS50YWc9PT0zfHxlLnRhZz09PTR9ZnVuY3Rpb24gZW0oZSl7ZTpmb3IoOzspe2Zvcig7ZS5zaWJsaW5nPT09bnVsbDspe2lmKGUucmV0dXJuPT09bnVsbHx8VmcoZS5yZXR1cm4pKXJldHVybiBudWxsO2U9ZS5yZXR1cm59Zm9yKGUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmc7ZS50YWchPT01JiZlLnRhZyE9PTYmJmUudGFnIT09MTg7KXtpZihlLmZsYWdzJjJ8fGUuY2hpbGQ9PT1udWxsfHxlLnRhZz09PTQpY29udGludWUgZTtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZH1pZighKGUuZmxhZ3MmMikpcmV0dXJuIGUuc3RhdGVOb2RlfX1mdW5jdGlvbiBHdShlLHQsbil7dmFyIHI9ZS50YWc7aWYocj09PTV8fHI9PT02KWU9ZS5zdGF0ZU5vZGUsdD9uLm5vZGVUeXBlPT09OD9uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdCk6bi5pbnNlcnRCZWZvcmUoZSx0KToobi5ub2RlVHlwZT09PTg/KHQ9bi5wYXJlbnROb2RlLHQuaW5zZXJ0QmVmb3JlKGUsbikpOih0PW4sdC5hcHBlbmRDaGlsZChlKSksbj1uLl9yZWFjdFJvb3RDb250YWluZXIsbiE9bnVsbHx8dC5vbmNsaWNrIT09bnVsbHx8KHQub25jbGljaz1ZcykpO2Vsc2UgaWYociE9PTQmJihlPWUuY2hpbGQsZSE9PW51bGwpKWZvcihHdShlLHQsbiksZT1lLnNpYmxpbmc7ZSE9PW51bGw7KUd1KGUsdCxuKSxlPWUuc2libGluZ31mdW5jdGlvbiBWdShlLHQsbil7dmFyIHI9ZS50YWc7aWYocj09PTV8fHI9PT02KWU9ZS5zdGF0ZU5vZGUsdD9uLmluc2VydEJlZm9yZShlLHQpOm4uYXBwZW5kQ2hpbGQoZSk7ZWxzZSBpZihyIT09NCYmKGU9ZS5jaGlsZCxlIT09bnVsbCkpZm9yKFZ1KGUsdCxuKSxlPWUuc2libGluZztlIT09bnVsbDspVnUoZSx0LG4pLGU9ZS5zaWJsaW5nfXZhciBmdD1udWxsLHhuPSExO2Z1bmN0aW9uIGtyKGUsdCxuKXtmb3Iobj1uLmNoaWxkO24hPT1udWxsOylqZyhlLHQsbiksbj1uLnNpYmxpbmd9ZnVuY3Rpb24gamcoZSx0LG4pe2lmKEJuJiZ0eXBlb2YgQm4ub25Db21taXRGaWJlclVubW91bnQ9PSJmdW5jdGlvbiIpdHJ5e0JuLm9uQ29tbWl0RmliZXJVbm1vdW50KHVsLG4pfWNhdGNoe31zd2l0Y2gobi50YWcpe2Nhc2UgNTp4dHx8Sm8obix0KTtjYXNlIDY6dmFyIHI9ZnQsbz14bjtmdD1udWxsLGtyKGUsdCxuKSxmdD1yLHhuPW8sZnQhPT1udWxsJiYoeG4/KGU9ZnQsbj1uLnN0YXRlTm9kZSxlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobik6ZS5yZW1vdmVDaGlsZChuKSk6ZnQucmVtb3ZlQ2hpbGQobi5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDE4OmZ0IT09bnVsbCYmKHhuPyhlPWZ0LG49bi5zdGF0ZU5vZGUsZS5ub2RlVHlwZT09PTg/WWMoZS5wYXJlbnROb2RlLG4pOmUubm9kZVR5cGU9PT0xJiZZYyhlLG4pLHNpKGUpKTpZYyhmdCxuLnN0YXRlTm9kZSkpO2JyZWFrO2Nhc2UgNDpyPWZ0LG89eG4sZnQ9bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyx4bj0hMCxrcihlLHQsbiksZnQ9cix4bj1vO2JyZWFrO2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTppZigheHQmJihyPW4udXBkYXRlUXVldWUsciE9PW51bGwmJihyPXIubGFzdEVmZmVjdCxyIT09bnVsbCkpKXtvPXI9ci5uZXh0O2Rve3ZhciBhPW8saT1hLmRlc3Ryb3k7YT1hLnRhZyxpIT09dm9pZCAwJiYoYSYyfHxhJjQpJiZCdShuLHQsaSksbz1vLm5leHR9d2hpbGUobyE9PXIpfWtyKGUsdCxuKTticmVhaztjYXNlIDE6aWYoIXh0JiYoSm8obix0KSxyPW4uc3RhdGVOb2RlLHR5cGVvZiByLmNvbXBvbmVudFdpbGxVbm1vdW50PT0iZnVuY3Rpb24iKSl0cnl7ci5wcm9wcz1uLm1lbW9pemVkUHJvcHMsci5zdGF0ZT1uLm1lbW9pemVkU3RhdGUsci5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKHMpe3FlKG4sdCxzKX1rcihlLHQsbik7YnJlYWs7Y2FzZSAyMTprcihlLHQsbik7YnJlYWs7Y2FzZSAyMjpuLm1vZGUmMT8oeHQ9KHI9eHQpfHxuLm1lbW9pemVkU3RhdGUhPT1udWxsLGtyKGUsdCxuKSx4dD1yKTprcihlLHQsbik7YnJlYWs7ZGVmYXVsdDprcihlLHQsbil9fWZ1bmN0aW9uIHRtKGUpe3ZhciB0PWUudXBkYXRlUXVldWU7aWYodCE9PW51bGwpe2UudXBkYXRlUXVldWU9bnVsbDt2YXIgbj1lLnN0YXRlTm9kZTtuPT09bnVsbCYmKG49ZS5zdGF0ZU5vZGU9bmV3IE14KSx0LmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG89R3guYmluZChudWxsLGUscik7bi5oYXMocil8fChuLmFkZChyKSxyLnRoZW4obyxvKSl9KX19ZnVuY3Rpb24gYm4oZSx0KXt2YXIgbj10LmRlbGV0aW9ucztpZihuIT09bnVsbClmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXTt0cnl7dmFyIGE9ZSxpPXQscz1pO2U6Zm9yKDtzIT09bnVsbDspe3N3aXRjaChzLnRhZyl7Y2FzZSA1OmZ0PXMuc3RhdGVOb2RlLHhuPSExO2JyZWFrIGU7Y2FzZSAzOmZ0PXMuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8seG49ITA7YnJlYWsgZTtjYXNlIDQ6ZnQ9cy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyx4bj0hMDticmVhayBlfXM9cy5yZXR1cm59aWYoZnQ9PT1udWxsKXRocm93IEVycm9yKE0oMTYwKSk7amcoYSxpLG8pLGZ0PW51bGwseG49ITE7dmFyIGw9by5hbHRlcm5hdGU7bCE9PW51bGwmJihsLnJldHVybj1udWxsKSxvLnJldHVybj1udWxsfWNhdGNoKGMpe3FlKG8sdCxjKX19aWYodC5zdWJ0cmVlRmxhZ3MmMTI4NTQpZm9yKHQ9dC5jaGlsZDt0IT09bnVsbDspS2codCxlKSx0PXQuc2libGluZ31mdW5jdGlvbiBLZyhlLHQpe3ZhciBuPWUuYWx0ZXJuYXRlLHI9ZS5mbGFncztzd2l0Y2goZS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTppZihibih0LGUpLFVuKGUpLHImNCl7dHJ5e1phKDMsZSxlLnJldHVybiksdmwoMyxlKX1jYXRjaCh3KXtxZShlLGUucmV0dXJuLHcpfXRyeXtaYSg1LGUsZS5yZXR1cm4pfWNhdGNoKHcpe3FlKGUsZS5yZXR1cm4sdyl9fWJyZWFrO2Nhc2UgMTpibih0LGUpLFVuKGUpLHImNTEyJiZuIT09bnVsbCYmSm8obixuLnJldHVybik7YnJlYWs7Y2FzZSA1OmlmKGJuKHQsZSksVW4oZSksciY1MTImJm4hPT1udWxsJiZKbyhuLG4ucmV0dXJuKSxlLmZsYWdzJjMyKXt2YXIgbz1lLnN0YXRlTm9kZTt0cnl7cmkobywiIil9Y2F0Y2godyl7cWUoZSxlLnJldHVybix3KX19aWYociY0JiYobz1lLnN0YXRlTm9kZSxvIT1udWxsKSl7dmFyIGE9ZS5tZW1vaXplZFByb3BzLGk9biE9PW51bGw/bi5tZW1vaXplZFByb3BzOmEscz1lLnR5cGUsbD1lLnVwZGF0ZVF1ZXVlO2lmKGUudXBkYXRlUXVldWU9bnVsbCxsIT09bnVsbCl0cnl7cz09PSJpbnB1dCImJmEudHlwZT09PSJyYWRpbyImJmEubmFtZSE9bnVsbCYmbW0obyxhKSxtdShzLGkpO3ZhciBjPW11KHMsYSk7Zm9yKGk9MDtpPGwubGVuZ3RoO2krPTIpe3ZhciB1PWxbaV0scD1sW2krMV07dT09PSJzdHlsZSI/Ym0obyxwKTp1PT09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj92bShvLHApOnU9PT0iY2hpbGRyZW4iP3JpKG8scCk6WHUobyx1LHAsYyl9c3dpdGNoKHMpe2Nhc2UiaW5wdXQiOnV1KG8sYSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6Z20obyxhKTticmVhaztjYXNlInNlbGVjdCI6dmFyIGQ9by5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlO28uX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZT0hIWEubXVsdGlwbGU7dmFyIGg9YS52YWx1ZTtoIT1udWxsP1pvKG8sISFhLm11bHRpcGxlLGgsITEpOmQhPT0hIWEubXVsdGlwbGUmJihhLmRlZmF1bHRWYWx1ZSE9bnVsbD9abyhvLCEhYS5tdWx0aXBsZSxhLmRlZmF1bHRWYWx1ZSwhMCk6Wm8obywhIWEubXVsdGlwbGUsYS5tdWx0aXBsZT9bXToiIiwhMSkpfW9bcGldPWF9Y2F0Y2godyl7cWUoZSxlLnJldHVybix3KX19YnJlYWs7Y2FzZSA2OmlmKGJuKHQsZSksVW4oZSksciY0KXtpZihlLnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoTSgxNjIpKTtvPWUuc3RhdGVOb2RlLGE9ZS5tZW1vaXplZFByb3BzO3RyeXtvLm5vZGVWYWx1ZT1hfWNhdGNoKHcpe3FlKGUsZS5yZXR1cm4sdyl9fWJyZWFrO2Nhc2UgMzppZihibih0LGUpLFVuKGUpLHImNCYmbiE9PW51bGwmJm4ubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpdHJ5e3NpKHQuY29udGFpbmVySW5mbyl9Y2F0Y2godyl7cWUoZSxlLnJldHVybix3KX1icmVhaztjYXNlIDQ6Ym4odCxlKSxVbihlKTticmVhaztjYXNlIDEzOmJuKHQsZSksVW4oZSksbz1lLmNoaWxkLG8uZmxhZ3MmODE5MiYmKGE9by5tZW1vaXplZFN0YXRlIT09bnVsbCxvLnN0YXRlTm9kZS5pc0hpZGRlbj1hLCFhfHxvLmFsdGVybmF0ZSE9PW51bGwmJm8uYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUhPT1udWxsfHwoT2Q9ZXQoKSkpLHImNCYmdG0oZSk7YnJlYWs7Y2FzZSAyMjppZih1PW4hPT1udWxsJiZuLm1lbW9pemVkU3RhdGUhPT1udWxsLGUubW9kZSYxPyh4dD0oYz14dCl8fHUsYm4odCxlKSx4dD1jKTpibih0LGUpLFVuKGUpLHImODE5Mil7aWYoYz1lLm1lbW9pemVkU3RhdGUhPT1udWxsLChlLnN0YXRlTm9kZS5pc0hpZGRlbj1jKSYmIXUmJmUubW9kZSYxKWZvcihWPWUsdT1lLmNoaWxkO3UhPT1udWxsOyl7Zm9yKHA9Vj11O1YhPT1udWxsOyl7c3dpdGNoKGQ9VixoPWQuY2hpbGQsZC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpaYSg0LGQsZC5yZXR1cm4pO2JyZWFrO2Nhc2UgMTpKbyhkLGQucmV0dXJuKTt2YXIgeT1kLnN0YXRlTm9kZTtpZih0eXBlb2YgeS5jb21wb25lbnRXaWxsVW5tb3VudD09ImZ1bmN0aW9uIil7cj1kLG49ZC5yZXR1cm47dHJ5e3Q9cix5LnByb3BzPXQubWVtb2l6ZWRQcm9wcyx5LnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSx5LmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2godyl7cWUocixuLHcpfX1icmVhaztjYXNlIDU6Sm8oZCxkLnJldHVybik7YnJlYWs7Y2FzZSAyMjppZihkLm1lbW9pemVkU3RhdGUhPT1udWxsKXtybShwKTtjb250aW51ZX19aCE9PW51bGw/KGgucmV0dXJuPWQsVj1oKTpybShwKX11PXUuc2libGluZ31lOmZvcih1PW51bGwscD1lOzspe2lmKHAudGFnPT09NSl7aWYodT09PW51bGwpe3U9cDt0cnl7bz1wLnN0YXRlTm9kZSxjPyhhPW8uc3R5bGUsdHlwZW9mIGEuc2V0UHJvcGVydHk9PSJmdW5jdGlvbiI/YS5zZXRQcm9wZXJ0eSgiZGlzcGxheSIsIm5vbmUiLCJpbXBvcnRhbnQiKTphLmRpc3BsYXk9Im5vbmUiKToocz1wLnN0YXRlTm9kZSxsPXAubWVtb2l6ZWRQcm9wcy5zdHlsZSxpPWwhPW51bGwmJmwuaGFzT3duUHJvcGVydHkoImRpc3BsYXkiKT9sLmRpc3BsYXk6bnVsbCxzLnN0eWxlLmRpc3BsYXk9d20oImRpc3BsYXkiLGkpKX1jYXRjaCh3KXtxZShlLGUucmV0dXJuLHcpfX19ZWxzZSBpZihwLnRhZz09PTYpe2lmKHU9PT1udWxsKXRyeXtwLnN0YXRlTm9kZS5ub2RlVmFsdWU9Yz8iIjpwLm1lbW9pemVkUHJvcHN9Y2F0Y2godyl7cWUoZSxlLnJldHVybix3KX19ZWxzZSBpZigocC50YWchPT0yMiYmcC50YWchPT0yM3x8cC5tZW1vaXplZFN0YXRlPT09bnVsbHx8cD09PWUpJiZwLmNoaWxkIT09bnVsbCl7cC5jaGlsZC5yZXR1cm49cCxwPXAuY2hpbGQ7Y29udGludWV9aWYocD09PWUpYnJlYWsgZTtmb3IoO3Auc2libGluZz09PW51bGw7KXtpZihwLnJldHVybj09PW51bGx8fHAucmV0dXJuPT09ZSlicmVhayBlO3U9PT1wJiYodT1udWxsKSxwPXAucmV0dXJufXU9PT1wJiYodT1udWxsKSxwLnNpYmxpbmcucmV0dXJuPXAucmV0dXJuLHA9cC5zaWJsaW5nfX1icmVhaztjYXNlIDE5OmJuKHQsZSksVW4oZSksciY0JiZ0bShlKTticmVhaztjYXNlIDIxOmJyZWFrO2RlZmF1bHQ6Ym4odCxlKSxVbihlKX19ZnVuY3Rpb24gVW4oZSl7dmFyIHQ9ZS5mbGFncztpZih0JjIpe3RyeXtlOntmb3IodmFyIG49ZS5yZXR1cm47biE9PW51bGw7KXtpZihWZyhuKSl7dmFyIHI9bjticmVhayBlfW49bi5yZXR1cm59dGhyb3cgRXJyb3IoTSgxNjApKX1zd2l0Y2goci50YWcpe2Nhc2UgNTp2YXIgbz1yLnN0YXRlTm9kZTtyLmZsYWdzJjMyJiYocmkobywiIiksci5mbGFncyY9LTMzKTt2YXIgYT1lbShlKTtWdShlLGEsbyk7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgaT1yLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLHM9ZW0oZSk7R3UoZSxzLGkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoTSgxNjEpKX19Y2F0Y2gobCl7cWUoZSxlLnJldHVybixsKX1lLmZsYWdzJj0tM310JjQwOTYmJihlLmZsYWdzJj0tNDA5Nyl9ZnVuY3Rpb24gTHgoZSx0LG4pe1Y9ZSxZZyhlLHQsbil9ZnVuY3Rpb24gWWcoZSx0LG4pe2Zvcih2YXIgcj0oZS5tb2RlJjEpIT09MDtWIT09bnVsbDspe3ZhciBvPVYsYT1vLmNoaWxkO2lmKG8udGFnPT09MjImJnIpe3ZhciBpPW8ubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fF9zO2lmKCFpKXt2YXIgcz1vLmFsdGVybmF0ZSxsPXMhPT1udWxsJiZzLm1lbW9pemVkU3RhdGUhPT1udWxsfHx4dDtzPV9zO3ZhciBjPXh0O2lmKF9zPWksKHh0PWwpJiYhYylmb3IoVj1vO1YhPT1udWxsOylpPVYsbD1pLmNoaWxkLGkudGFnPT09MjImJmkubWVtb2l6ZWRTdGF0ZSE9PW51bGw/b20obyk6bCE9PW51bGw/KGwucmV0dXJuPWksVj1sKTpvbShvKTtmb3IoO2EhPT1udWxsOylWPWEsWWcoYSx0LG4pLGE9YS5zaWJsaW5nO1Y9byxfcz1zLHh0PWN9bm0oZSx0LG4pfWVsc2Ugby5zdWJ0cmVlRmxhZ3MmODc3MiYmYSE9PW51bGw/KGEucmV0dXJuPW8sVj1hKTpubShlLHQsbil9fWZ1bmN0aW9uIG5tKGUpe2Zvcig7ViE9PW51bGw7KXt2YXIgdD1WO2lmKHQuZmxhZ3MmODc3Mil7dmFyIG49dC5hbHRlcm5hdGU7dHJ5e2lmKHQuZmxhZ3MmODc3Milzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6eHR8fHZsKDUsdCk7YnJlYWs7Y2FzZSAxOnZhciByPXQuc3RhdGVOb2RlO2lmKHQuZmxhZ3MmNCYmIXh0KWlmKG49PT1udWxsKXIuY29tcG9uZW50RGlkTW91bnQoKTtlbHNle3ZhciBvPXQuZWxlbWVudFR5cGU9PT10LnR5cGU/bi5tZW1vaXplZFByb3BzOmtuKHQudHlwZSxuLm1lbW9pemVkUHJvcHMpO3IuY29tcG9uZW50RGlkVXBkYXRlKG8sbi5tZW1vaXplZFN0YXRlLHIuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpfXZhciBhPXQudXBkYXRlUXVldWU7YSE9PW51bGwmJiRoKHQsYSxyKTticmVhaztjYXNlIDM6dmFyIGk9dC51cGRhdGVRdWV1ZTtpZihpIT09bnVsbCl7aWYobj1udWxsLHQuY2hpbGQhPT1udWxsKXN3aXRjaCh0LmNoaWxkLnRhZyl7Y2FzZSA1Om49dC5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOm49dC5jaGlsZC5zdGF0ZU5vZGV9JGgodCxpLG4pfWJyZWFrO2Nhc2UgNTp2YXIgcz10LnN0YXRlTm9kZTtpZihuPT09bnVsbCYmdC5mbGFncyY0KXtuPXM7dmFyIGw9dC5tZW1vaXplZFByb3BzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6bC5hdXRvRm9jdXMmJm4uZm9jdXMoKTticmVhaztjYXNlImltZyI6bC5zcmMmJihuLnNyYz1sLnNyYyl9fWJyZWFrO2Nhc2UgNjpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmlmKHQubWVtb2l6ZWRTdGF0ZT09PW51bGwpe3ZhciBjPXQuYWx0ZXJuYXRlO2lmKGMhPT1udWxsKXt2YXIgdT1jLm1lbW9pemVkU3RhdGU7aWYodSE9PW51bGwpe3ZhciBwPXUuZGVoeWRyYXRlZDtwIT09bnVsbCYmc2kocCl9fX1icmVhaztjYXNlIDE5OmNhc2UgMTc6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKE0oMTYzKSl9eHR8fHQuZmxhZ3MmNTEyJiZIdSh0KX1jYXRjaChkKXtxZSh0LHQucmV0dXJuLGQpfX1pZih0PT09ZSl7Vj1udWxsO2JyZWFrfWlmKG49dC5zaWJsaW5nLG4hPT1udWxsKXtuLnJldHVybj10LnJldHVybixWPW47YnJlYWt9Vj10LnJldHVybn19ZnVuY3Rpb24gcm0oZSl7Zm9yKDtWIT09bnVsbDspe3ZhciB0PVY7aWYodD09PWUpe1Y9bnVsbDticmVha312YXIgbj10LnNpYmxpbmc7aWYobiE9PW51bGwpe24ucmV0dXJuPXQucmV0dXJuLFY9bjticmVha31WPXQucmV0dXJufX1mdW5jdGlvbiBvbShlKXtmb3IoO1YhPT1udWxsOyl7dmFyIHQ9Vjt0cnl7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnZhciBuPXQucmV0dXJuO3RyeXt2bCg0LHQpfWNhdGNoKGwpe3FlKHQsbixsKX1icmVhaztjYXNlIDE6dmFyIHI9dC5zdGF0ZU5vZGU7aWYodHlwZW9mIHIuY29tcG9uZW50RGlkTW91bnQ9PSJmdW5jdGlvbiIpe3ZhciBvPXQucmV0dXJuO3RyeXtyLmNvbXBvbmVudERpZE1vdW50KCl9Y2F0Y2gobCl7cWUodCxvLGwpfX12YXIgYT10LnJldHVybjt0cnl7SHUodCl9Y2F0Y2gobCl7cWUodCxhLGwpfWJyZWFrO2Nhc2UgNTp2YXIgaT10LnJldHVybjt0cnl7SHUodCl9Y2F0Y2gobCl7cWUodCxpLGwpfX19Y2F0Y2gobCl7cWUodCx0LnJldHVybixsKX1pZih0PT09ZSl7Vj1udWxsO2JyZWFrfXZhciBzPXQuc2libGluZztpZihzIT09bnVsbCl7cy5yZXR1cm49dC5yZXR1cm4sVj1zO2JyZWFrfVY9dC5yZXR1cm59fXZhciB6eD1NYXRoLmNlaWwsYWw9bHIuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixDZD1sci5SZWFjdEN1cnJlbnRPd25lcixzbj1sci5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyx3ZT0wLHV0PW51bGwscnQ9bnVsbCxodD0wLGp0PTAsWG89VXIoMCksaXQ9MCx2aT1udWxsLHBvPTAsd2w9MCxBZD0wLGVpPW51bGwsTHQ9bnVsbCxPZD0wLGRhPTEvMCxabj1udWxsLGlsPSExLGp1PW51bGwsUnI9bnVsbCxDcz0hMSxEcj1udWxsLHNsPTAsdGk9MCxLdT1udWxsLHpzPS0xLEZzPTA7ZnVuY3Rpb24gX3QoKXtyZXR1cm4gd2UmNj9ldCgpOnpzIT09LTE/enM6enM9ZXQoKX1mdW5jdGlvbiBNcihlKXtyZXR1cm4gZS5tb2RlJjE/d2UmMiYmaHQhPT0wP2h0Ji1odDpieC50cmFuc2l0aW9uIT09bnVsbD8oRnM9PT0wJiYoRnM9SW0oKSksRnMpOihlPURlLGUhPT0wfHwoZT13aW5kb3cuZXZlbnQsZT1lPT09dm9pZCAwPzE2OlVtKGUudHlwZSkpLGUpOjF9ZnVuY3Rpb24gVG4oZSx0LG4scil7aWYoNTA8dGkpdGhyb3cgdGk9MCxLdT1udWxsLEVycm9yKE0oMTg1KSk7d2koZSxuLHIpLCghKHdlJjIpfHxlIT09dXQpJiYoZT09PXV0JiYoISh3ZSYyKSYmKHdsfD1uKSxpdD09PTQmJlRyKGUsaHQpKSwkdChlLHIpLG49PT0xJiZ3ZT09PTAmJiEodC5tb2RlJjEpJiYoZGE9ZXQoKSs1MDAsbWwmJiRyKCkpKX1mdW5jdGlvbiAkdChlLHQpe3ZhciBuPWUuY2FsbGJhY2tOb2RlO3hrKGUsdCk7dmFyIHI9R3MoZSxlPT09dXQ/aHQ6MCk7aWYocj09PTApbiE9PW51bGwmJnBoKG4pLGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7ZWxzZSBpZih0PXImLXIsZS5jYWxsYmFja1ByaW9yaXR5IT09dCl7aWYobiE9bnVsbCYmcGgobiksdD09PTEpZS50YWc9PT0wP3d4KGFtLmJpbmQobnVsbCxlKSk6b2coYW0uYmluZChudWxsLGUpKSxteChmdW5jdGlvbigpeyEod2UmNikmJiRyKCl9KSxuPW51bGw7ZWxzZXtzd2l0Y2goUm0ocikpe2Nhc2UgMTpuPXJkO2JyZWFrO2Nhc2UgNDpuPUFtO2JyZWFrO2Nhc2UgMTY6bj1IczticmVhaztjYXNlIDUzNjg3MDkxMjpuPU9tO2JyZWFrO2RlZmF1bHQ6bj1Ic31uPW55KG4scWcuYmluZChudWxsLGUpKX1lLmNhbGxiYWNrUHJpb3JpdHk9dCxlLmNhbGxiYWNrTm9kZT1ufX1mdW5jdGlvbiBxZyhlLHQpe2lmKHpzPS0xLEZzPTAsd2UmNil0aHJvdyBFcnJvcihNKDMyNykpO3ZhciBuPWUuY2FsbGJhY2tOb2RlO2lmKG9hKCkmJmUuY2FsbGJhY2tOb2RlIT09bilyZXR1cm4gbnVsbDt2YXIgcj1HcyhlLGU9PT11dD9odDowKTtpZihyPT09MClyZXR1cm4gbnVsbDtpZihyJjMwfHxyJmUuZXhwaXJlZExhbmVzfHx0KXQ9bGwoZSxyKTtlbHNle3Q9cjt2YXIgbz13ZTt3ZXw9Mjt2YXIgYT1KZygpOyh1dCE9PWV8fGh0IT09dCkmJihabj1udWxsLGRhPWV0KCkrNTAwLGlvKGUsdCkpO2RvIHRyeXskeCgpO2JyZWFrfWNhdGNoKHMpe1FnKGUscyl9d2hpbGUoITApO2dkKCksYWwuY3VycmVudD1hLHdlPW8scnQhPT1udWxsP3Q9MDoodXQ9bnVsbCxodD0wLHQ9aXQpfWlmKHQhPT0wKXtpZih0PT09MiYmKG89YnUoZSksbyE9PTAmJihyPW8sdD1ZdShlLG8pKSksdD09PTEpdGhyb3cgbj12aSxpbyhlLDApLFRyKGUsciksJHQoZSxldCgpKSxuO2lmKHQ9PT02KVRyKGUscik7ZWxzZXtpZihvPWUuY3VycmVudC5hbHRlcm5hdGUsIShyJjMwKSYmIUZ4KG8pJiYodD1sbChlLHIpLHQ9PT0yJiYoYT1idShlKSxhIT09MCYmKHI9YSx0PVl1KGUsYSkpKSx0PT09MSkpdGhyb3cgbj12aSxpbyhlLDApLFRyKGUsciksJHQoZSxldCgpKSxuO3N3aXRjaChlLmZpbmlzaGVkV29yaz1vLGUuZmluaXNoZWRMYW5lcz1yLHQpe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IoTSgzNDUpKTtjYXNlIDI6bm8oZSxMdCxabik7YnJlYWs7Y2FzZSAzOmlmKFRyKGUsciksKHImMTMwMDIzNDI0KT09PXImJih0PU9kKzUwMC1ldCgpLDEwPHQpKXtpZihHcyhlLDApIT09MClicmVhaztpZihvPWUuc3VzcGVuZGVkTGFuZXMsKG8mcikhPT1yKXtfdCgpLGUucGluZ2VkTGFuZXN8PWUuc3VzcGVuZGVkTGFuZXMmbzticmVha31lLnRpbWVvdXRIYW5kbGU9X3Uobm8uYmluZChudWxsLGUsTHQsWm4pLHQpO2JyZWFrfW5vKGUsTHQsWm4pO2JyZWFrO2Nhc2UgNDppZihUcihlLHIpLChyJjQxOTQyNDApPT09cilicmVhaztmb3IodD1lLmV2ZW50VGltZXMsbz0tMTswPHI7KXt2YXIgaT0zMS1FbihyKTthPTE8PGksaT10W2ldLGk+byYmKG89aSksciY9fmF9aWYocj1vLHI9ZXQoKS1yLHI9KDEyMD5yPzEyMDo0ODA+cj80ODA6MTA4MD5yPzEwODA6MTkyMD5yPzE5MjA6M2UzPnI/M2UzOjQzMjA+cj80MzIwOjE5NjAqengoci8xOTYwKSktciwxMDxyKXtlLnRpbWVvdXRIYW5kbGU9X3Uobm8uYmluZChudWxsLGUsTHQsWm4pLHIpO2JyZWFrfW5vKGUsTHQsWm4pO2JyZWFrO2Nhc2UgNTpubyhlLEx0LFpuKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKE0oMzI5KSl9fX1yZXR1cm4gJHQoZSxldCgpKSxlLmNhbGxiYWNrTm9kZT09PW4/cWcuYmluZChudWxsLGUpOm51bGx9ZnVuY3Rpb24gWXUoZSx0KXt2YXIgbj1laTtyZXR1cm4gZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkJiYoaW8oZSx0KS5mbGFnc3w9MjU2KSxlPWxsKGUsdCksZSE9PTImJih0PUx0LEx0PW4sdCE9PW51bGwmJnF1KHQpKSxlfWZ1bmN0aW9uIHF1KGUpe0x0PT09bnVsbD9MdD1lOkx0LnB1c2guYXBwbHkoTHQsZSl9ZnVuY3Rpb24gRngoZSl7Zm9yKHZhciB0PWU7Oyl7aWYodC5mbGFncyYxNjM4NCl7dmFyIG49dC51cGRhdGVRdWV1ZTtpZihuIT09bnVsbCYmKG49bi5zdG9yZXMsbiE9PW51bGwpKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdLGE9by5nZXRTbmFwc2hvdDtvPW8udmFsdWU7dHJ5e2lmKCFObihhKCksbykpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9fX1pZihuPXQuY2hpbGQsdC5zdWJ0cmVlRmxhZ3MmMTYzODQmJm4hPT1udWxsKW4ucmV0dXJuPXQsdD1uO2Vsc2V7aWYodD09PWUpYnJlYWs7Zm9yKDt0LnNpYmxpbmc9PT1udWxsOyl7aWYodC5yZXR1cm49PT1udWxsfHx0LnJldHVybj09PWUpcmV0dXJuITA7dD10LnJldHVybn10LnNpYmxpbmcucmV0dXJuPXQucmV0dXJuLHQ9dC5zaWJsaW5nfX1yZXR1cm4hMH1mdW5jdGlvbiBUcihlLHQpe2Zvcih0Jj1+QWQsdCY9fndsLGUuc3VzcGVuZGVkTGFuZXN8PXQsZS5waW5nZWRMYW5lcyY9fnQsZT1lLmV4cGlyYXRpb25UaW1lczswPHQ7KXt2YXIgbj0zMS1Fbih0KSxyPTE8PG47ZVtuXT0tMSx0Jj1+cn19ZnVuY3Rpb24gYW0oZSl7aWYod2UmNil0aHJvdyBFcnJvcihNKDMyNykpO29hKCk7dmFyIHQ9R3MoZSwwKTtpZighKHQmMSkpcmV0dXJuICR0KGUsZXQoKSksbnVsbDt2YXIgbj1sbChlLHQpO2lmKGUudGFnIT09MCYmbj09PTIpe3ZhciByPWJ1KGUpO3IhPT0wJiYodD1yLG49WXUoZSxyKSl9aWYobj09PTEpdGhyb3cgbj12aSxpbyhlLDApLFRyKGUsdCksJHQoZSxldCgpKSxuO2lmKG49PT02KXRocm93IEVycm9yKE0oMzQ1KSk7cmV0dXJuIGUuZmluaXNoZWRXb3JrPWUuY3VycmVudC5hbHRlcm5hdGUsZS5maW5pc2hlZExhbmVzPXQsbm8oZSxMdCxabiksJHQoZSxldCgpKSxudWxsfWZ1bmN0aW9uIElkKGUsdCl7dmFyIG49d2U7d2V8PTE7dHJ5e3JldHVybiBlKHQpfWZpbmFsbHl7d2U9bix3ZT09PTAmJihkYT1ldCgpKzUwMCxtbCYmJHIoKSl9fWZ1bmN0aW9uIGZvKGUpe0RyIT09bnVsbCYmRHIudGFnPT09MCYmISh3ZSY2KSYmb2EoKTt2YXIgdD13ZTt3ZXw9MTt2YXIgbj1zbi50cmFuc2l0aW9uLHI9RGU7dHJ5e2lmKHNuLnRyYW5zaXRpb249bnVsbCxEZT0xLGUpcmV0dXJuIGUoKX1maW5hbGx5e0RlPXIsc24udHJhbnNpdGlvbj1uLHdlPXQsISh3ZSY2KSYmJHIoKX19ZnVuY3Rpb24gUmQoKXtqdD1Yby5jdXJyZW50LHplKFhvKX1mdW5jdGlvbiBpbyhlLHQpe2UuZmluaXNoZWRXb3JrPW51bGwsZS5maW5pc2hlZExhbmVzPTA7dmFyIG49ZS50aW1lb3V0SGFuZGxlO2lmKG4hPT0tMSYmKGUudGltZW91dEhhbmRsZT0tMSxoeChuKSkscnQhPT1udWxsKWZvcihuPXJ0LnJldHVybjtuIT09bnVsbDspe3ZhciByPW47c3dpdGNoKGZkKHIpLHIudGFnKXtjYXNlIDE6cj1yLnR5cGUuY2hpbGRDb250ZXh0VHlwZXMsciE9bnVsbCYmcXMoKTticmVhaztjYXNlIDM6Y2EoKSx6ZShGdCksemUoU3QpLHhkKCk7YnJlYWs7Y2FzZSA1OmtkKHIpO2JyZWFrO2Nhc2UgNDpjYSgpO2JyZWFrO2Nhc2UgMTM6emUoVmUpO2JyZWFrO2Nhc2UgMTk6emUoVmUpO2JyZWFrO2Nhc2UgMTA6eWQoci50eXBlLl9jb250ZXh0KTticmVhaztjYXNlIDIyOmNhc2UgMjM6UmQoKX1uPW4ucmV0dXJufWlmKHV0PWUscnQ9ZT1QcihlLmN1cnJlbnQsbnVsbCksaHQ9anQ9dCxpdD0wLHZpPW51bGwsQWQ9d2w9cG89MCxMdD1laT1udWxsLG9vIT09bnVsbCl7Zm9yKHQ9MDt0PG9vLmxlbmd0aDt0KyspaWYobj1vb1t0XSxyPW4uaW50ZXJsZWF2ZWQsciE9PW51bGwpe24uaW50ZXJsZWF2ZWQ9bnVsbDt2YXIgbz1yLm5leHQsYT1uLnBlbmRpbmc7aWYoYSE9PW51bGwpe3ZhciBpPWEubmV4dDthLm5leHQ9byxyLm5leHQ9aX1uLnBlbmRpbmc9cn1vbz1udWxsfXJldHVybiBlfWZ1bmN0aW9uIFFnKGUsdCl7ZG97dmFyIG49cnQ7dHJ5e2lmKGdkKCksTXMuY3VycmVudD1vbCxybCl7Zm9yKHZhciByPWplLm1lbW9pemVkU3RhdGU7ciE9PW51bGw7KXt2YXIgbz1yLnF1ZXVlO28hPT1udWxsJiYoby5wZW5kaW5nPW51bGwpLHI9ci5uZXh0fXJsPSExfWlmKHVvPTAsY3Q9YXQ9amU9bnVsbCxYYT0hMSxtaT0wLENkLmN1cnJlbnQ9bnVsbCxuPT09bnVsbHx8bi5yZXR1cm49PT1udWxsKXtpdD0xLHZpPXQscnQ9bnVsbDticmVha31lOnt2YXIgYT1lLGk9bi5yZXR1cm4scz1uLGw9dDtpZih0PWh0LHMuZmxhZ3N8PTMyNzY4LGwhPT1udWxsJiZ0eXBlb2YgbD09Im9iamVjdCImJnR5cGVvZiBsLnRoZW49PSJmdW5jdGlvbiIpe3ZhciBjPWwsdT1zLHA9dS50YWc7aWYoISh1Lm1vZGUmMSkmJihwPT09MHx8cD09PTExfHxwPT09MTUpKXt2YXIgZD11LmFsdGVybmF0ZTtkPyh1LnVwZGF0ZVF1ZXVlPWQudXBkYXRlUXVldWUsdS5tZW1vaXplZFN0YXRlPWQubWVtb2l6ZWRTdGF0ZSx1LmxhbmVzPWQubGFuZXMpOih1LnVwZGF0ZVF1ZXVlPW51bGwsdS5tZW1vaXplZFN0YXRlPW51bGwpfXZhciBoPWpoKGkpO2lmKGghPT1udWxsKXtoLmZsYWdzJj0tMjU3LEtoKGgsaSxzLGEsdCksaC5tb2RlJjEmJlZoKGEsYyx0KSx0PWgsbD1jO3ZhciB5PXQudXBkYXRlUXVldWU7aWYoeT09PW51bGwpe3ZhciB3PW5ldyBTZXQ7dy5hZGQobCksdC51cGRhdGVRdWV1ZT13fWVsc2UgeS5hZGQobCk7YnJlYWsgZX1lbHNle2lmKCEodCYxKSl7VmgoYSxjLHQpLE1kKCk7YnJlYWsgZX1sPUVycm9yKE0oNDI2KSl9fWVsc2UgaWYoJGUmJnMubW9kZSYxKXt2YXIgYj1qaChpKTtpZihiIT09bnVsbCl7IShiLmZsYWdzJjY1NTM2KSYmKGIuZmxhZ3N8PTI1NiksS2goYixpLHMsYSx0KSxoZCh1YShsLHMpKTticmVhayBlfX1hPWw9dWEobCxzKSxpdCE9PTQmJihpdD0yKSxlaT09PW51bGw/ZWk9W2FdOmVpLnB1c2goYSksYT1pO2Rve3N3aXRjaChhLnRhZyl7Y2FzZSAzOmEuZmxhZ3N8PTY1NTM2LHQmPS10LGEubGFuZXN8PXQ7dmFyIGc9UmcoYSxsLHQpO1VoKGEsZyk7YnJlYWsgZTtjYXNlIDE6cz1sO3ZhciBtPWEudHlwZSx2PWEuc3RhdGVOb2RlO2lmKCEoYS5mbGFncyYxMjgpJiYodHlwZW9mIG0uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yPT0iZnVuY3Rpb24ifHx2IT09bnVsbCYmdHlwZW9mIHYuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihScj09PW51bGx8fCFSci5oYXModikpKSl7YS5mbGFnc3w9NjU1MzYsdCY9LXQsYS5sYW5lc3w9dDt2YXIgZj1NZyhhLHMsdCk7VWgoYSxmKTticmVhayBlfX1hPWEucmV0dXJufXdoaWxlKGEhPT1udWxsKX1aZyhuKX1jYXRjaCh4KXt0PXgscnQ9PT1uJiZuIT09bnVsbCYmKHJ0PW49bi5yZXR1cm4pO2NvbnRpbnVlfWJyZWFrfXdoaWxlKCEwKX1mdW5jdGlvbiBKZygpe3ZhciBlPWFsLmN1cnJlbnQ7cmV0dXJuIGFsLmN1cnJlbnQ9b2wsZT09PW51bGw/b2w6ZX1mdW5jdGlvbiBNZCgpeyhpdD09PTB8fGl0PT09M3x8aXQ9PT0yKSYmKGl0PTQpLHV0PT09bnVsbHx8IShwbyYyNjg0MzU0NTUpJiYhKHdsJjI2ODQzNTQ1NSl8fFRyKHV0LGh0KX1mdW5jdGlvbiBsbChlLHQpe3ZhciBuPXdlO3dlfD0yO3ZhciByPUpnKCk7KHV0IT09ZXx8aHQhPT10KSYmKFpuPW51bGwsaW8oZSx0KSk7ZG8gdHJ5e1V4KCk7YnJlYWt9Y2F0Y2gobyl7UWcoZSxvKX13aGlsZSghMCk7aWYoZ2QoKSx3ZT1uLGFsLmN1cnJlbnQ9cixydCE9PW51bGwpdGhyb3cgRXJyb3IoTSgyNjEpKTtyZXR1cm4gdXQ9bnVsbCxodD0wLGl0fWZ1bmN0aW9uIFV4KCl7Zm9yKDtydCE9PW51bGw7KVhnKHJ0KX1mdW5jdGlvbiAkeCgpe2Zvcig7cnQhPT1udWxsJiYhZmsoKTspWGcocnQpfWZ1bmN0aW9uIFhnKGUpe3ZhciB0PXR5KGUuYWx0ZXJuYXRlLGUsanQpO2UubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyx0PT09bnVsbD9aZyhlKTpydD10LENkLmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBaZyhlKXt2YXIgdD1lO2Rve3ZhciBuPXQuYWx0ZXJuYXRlO2lmKGU9dC5yZXR1cm4sdC5mbGFncyYzMjc2OCl7aWYobj1SeChuLHQpLG4hPT1udWxsKXtuLmZsYWdzJj0zMjc2NyxydD1uO3JldHVybn1pZihlIT09bnVsbCllLmZsYWdzfD0zMjc2OCxlLnN1YnRyZWVGbGFncz0wLGUuZGVsZXRpb25zPW51bGw7ZWxzZXtpdD02LHJ0PW51bGw7cmV0dXJufX1lbHNlIGlmKG49SXgobix0LGp0KSxuIT09bnVsbCl7cnQ9bjtyZXR1cm59aWYodD10LnNpYmxpbmcsdCE9PW51bGwpe3J0PXQ7cmV0dXJufXJ0PXQ9ZX13aGlsZSh0IT09bnVsbCk7aXQ9PT0wJiYoaXQ9NSl9ZnVuY3Rpb24gbm8oZSx0LG4pe3ZhciByPURlLG89c24udHJhbnNpdGlvbjt0cnl7c24udHJhbnNpdGlvbj1udWxsLERlPTEsV3goZSx0LG4scil9ZmluYWxseXtzbi50cmFuc2l0aW9uPW8sRGU9cn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBXeChlLHQsbixyKXtkbyBvYSgpO3doaWxlKERyIT09bnVsbCk7aWYod2UmNil0aHJvdyBFcnJvcihNKDMyNykpO249ZS5maW5pc2hlZFdvcms7dmFyIG89ZS5maW5pc2hlZExhbmVzO2lmKG49PT1udWxsKXJldHVybiBudWxsO2lmKGUuZmluaXNoZWRXb3JrPW51bGwsZS5maW5pc2hlZExhbmVzPTAsbj09PWUuY3VycmVudCl0aHJvdyBFcnJvcihNKDE3NykpO2UuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7dmFyIGE9bi5sYW5lc3xuLmNoaWxkTGFuZXM7aWYoU2soZSxhKSxlPT09dXQmJihydD11dD1udWxsLGh0PTApLCEobi5zdWJ0cmVlRmxhZ3MmMjA2NCkmJiEobi5mbGFncyYyMDY0KXx8Q3N8fChDcz0hMCxueShIcyxmdW5jdGlvbigpe3JldHVybiBvYSgpLG51bGx9KSksYT0obi5mbGFncyYxNTk5MCkhPT0wLG4uc3VidHJlZUZsYWdzJjE1OTkwfHxhKXthPXNuLnRyYW5zaXRpb24sc24udHJhbnNpdGlvbj1udWxsO3ZhciBpPURlO0RlPTE7dmFyIHM9d2U7d2V8PTQsQ2QuY3VycmVudD1udWxsLFB4KGUsbiksS2cobixlKSxjeChOdSksVnM9ISFUdSxOdT1UdT1udWxsLGUuY3VycmVudD1uLEx4KG4sZSxvKSxoaygpLHdlPXMsRGU9aSxzbi50cmFuc2l0aW9uPWF9ZWxzZSBlLmN1cnJlbnQ9bjtpZihDcyYmKENzPSExLERyPWUsc2w9byksYT1lLnBlbmRpbmdMYW5lcyxhPT09MCYmKFJyPW51bGwpLHlrKG4uc3RhdGVOb2RlLHIpLCR0KGUsZXQoKSksdCE9PW51bGwpZm9yKHI9ZS5vblJlY292ZXJhYmxlRXJyb3Isbj0wO248dC5sZW5ndGg7bisrKW89dFtuXSxyKG8udmFsdWUse2NvbXBvbmVudFN0YWNrOm8uc3RhY2ssZGlnZXN0Om8uZGlnZXN0fSk7aWYoaWwpdGhyb3cgaWw9ITEsZT1qdSxqdT1udWxsLGU7cmV0dXJuIHNsJjEmJmUudGFnIT09MCYmb2EoKSxhPWUucGVuZGluZ0xhbmVzLGEmMT9lPT09S3U/dGkrKzoodGk9MCxLdT1lKTp0aT0wLCRyKCksbnVsbH1mdW5jdGlvbiBvYSgpe2lmKERyIT09bnVsbCl7dmFyIGU9Um0oc2wpLHQ9c24udHJhbnNpdGlvbixuPURlO3RyeXtpZihzbi50cmFuc2l0aW9uPW51bGwsRGU9MTY+ZT8xNjplLERyPT09bnVsbCl2YXIgcj0hMTtlbHNle2lmKGU9RHIsRHI9bnVsbCxzbD0wLHdlJjYpdGhyb3cgRXJyb3IoTSgzMzEpKTt2YXIgbz13ZTtmb3Iod2V8PTQsVj1lLmN1cnJlbnQ7ViE9PW51bGw7KXt2YXIgYT1WLGk9YS5jaGlsZDtpZihWLmZsYWdzJjE2KXt2YXIgcz1hLmRlbGV0aW9ucztpZihzIT09bnVsbCl7Zm9yKHZhciBsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF07Zm9yKFY9YztWIT09bnVsbDspe3ZhciB1PVY7c3dpdGNoKHUudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OlphKDgsdSxhKX12YXIgcD11LmNoaWxkO2lmKHAhPT1udWxsKXAucmV0dXJuPXUsVj1wO2Vsc2UgZm9yKDtWIT09bnVsbDspe3U9Vjt2YXIgZD11LnNpYmxpbmcsaD11LnJldHVybjtpZihHZyh1KSx1PT09Yyl7Vj1udWxsO2JyZWFrfWlmKGQhPT1udWxsKXtkLnJldHVybj1oLFY9ZDticmVha31WPWh9fX12YXIgeT1hLmFsdGVybmF0ZTtpZih5IT09bnVsbCl7dmFyIHc9eS5jaGlsZDtpZih3IT09bnVsbCl7eS5jaGlsZD1udWxsO2Rve3ZhciBiPXcuc2libGluZzt3LnNpYmxpbmc9bnVsbCx3PWJ9d2hpbGUodyE9PW51bGwpfX1WPWF9fWlmKGEuc3VidHJlZUZsYWdzJjIwNjQmJmkhPT1udWxsKWkucmV0dXJuPWEsVj1pO2Vsc2UgZTpmb3IoO1YhPT1udWxsOyl7aWYoYT1WLGEuZmxhZ3MmMjA0OClzd2l0Y2goYS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6WmEoOSxhLGEucmV0dXJuKX12YXIgZz1hLnNpYmxpbmc7aWYoZyE9PW51bGwpe2cucmV0dXJuPWEucmV0dXJuLFY9ZzticmVhayBlfVY9YS5yZXR1cm59fXZhciBtPWUuY3VycmVudDtmb3IoVj1tO1YhPT1udWxsOyl7aT1WO3ZhciB2PWkuY2hpbGQ7aWYoaS5zdWJ0cmVlRmxhZ3MmMjA2NCYmdiE9PW51bGwpdi5yZXR1cm49aSxWPXY7ZWxzZSBlOmZvcihpPW07ViE9PW51bGw7KXtpZihzPVYscy5mbGFncyYyMDQ4KXRyeXtzd2l0Y2gocy50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6dmwoOSxzKX19Y2F0Y2goeCl7cWUocyxzLnJldHVybix4KX1pZihzPT09aSl7Vj1udWxsO2JyZWFrIGV9dmFyIGY9cy5zaWJsaW5nO2lmKGYhPT1udWxsKXtmLnJldHVybj1zLnJldHVybixWPWY7YnJlYWsgZX1WPXMucmV0dXJufX1pZih3ZT1vLCRyKCksQm4mJnR5cGVvZiBCbi5vblBvc3RDb21taXRGaWJlclJvb3Q9PSJmdW5jdGlvbiIpdHJ5e0JuLm9uUG9zdENvbW1pdEZpYmVyUm9vdCh1bCxlKX1jYXRjaHt9cj0hMH1yZXR1cm4gcn1maW5hbGx5e0RlPW4sc24udHJhbnNpdGlvbj10fX1yZXR1cm4hMX1mdW5jdGlvbiBpbShlLHQsbil7dD11YShuLHQpLHQ9UmcoZSx0LDEpLGU9SXIoZSx0LDEpLHQ9X3QoKSxlIT09bnVsbCYmKHdpKGUsMSx0KSwkdChlLHQpKX1mdW5jdGlvbiBxZShlLHQsbil7aWYoZS50YWc9PT0zKWltKGUsZSxuKTtlbHNlIGZvcig7dCE9PW51bGw7KXtpZih0LnRhZz09PTMpe2ltKHQsZSxuKTticmVha31lbHNlIGlmKHQudGFnPT09MSl7dmFyIHI9dC5zdGF0ZU5vZGU7aWYodHlwZW9mIHQudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I9PSJmdW5jdGlvbiJ8fHR5cGVvZiByLmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYoUnI9PT1udWxsfHwhUnIuaGFzKHIpKSl7ZT11YShuLGUpLGU9TWcodCxlLDEpLHQ9SXIodCxlLDEpLGU9X3QoKSx0IT09bnVsbCYmKHdpKHQsMSxlKSwkdCh0LGUpKTticmVha319dD10LnJldHVybn19ZnVuY3Rpb24gQngoZSx0LG4pe3ZhciByPWUucGluZ0NhY2hlO3IhPT1udWxsJiZyLmRlbGV0ZSh0KSx0PV90KCksZS5waW5nZWRMYW5lc3w9ZS5zdXNwZW5kZWRMYW5lcyZuLHV0PT09ZSYmKGh0Jm4pPT09biYmKGl0PT09NHx8aXQ9PT0zJiYoaHQmMTMwMDIzNDI0KT09PWh0JiY1MDA+ZXQoKS1PZD9pbyhlLDApOkFkfD1uKSwkdChlLHQpfWZ1bmN0aW9uIGV5KGUsdCl7dD09PTAmJihlLm1vZGUmMT8odD1tcyxtczw8PTEsIShtcyYxMzAwMjM0MjQpJiYobXM9NDE5NDMwNCkpOnQ9MSk7dmFyIG49X3QoKTtlPWlyKGUsdCksZSE9PW51bGwmJih3aShlLHQsbiksJHQoZSxuKSl9ZnVuY3Rpb24gSHgoZSl7dmFyIHQ9ZS5tZW1vaXplZFN0YXRlLG49MDt0IT09bnVsbCYmKG49dC5yZXRyeUxhbmUpLGV5KGUsbil9ZnVuY3Rpb24gR3goZSx0KXt2YXIgbj0wO3N3aXRjaChlLnRhZyl7Y2FzZSAxMzp2YXIgcj1lLnN0YXRlTm9kZSxvPWUubWVtb2l6ZWRTdGF0ZTtvIT09bnVsbCYmKG49by5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6cj1lLnN0YXRlTm9kZTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKE0oMzE0KSl9ciE9PW51bGwmJnIuZGVsZXRlKHQpLGV5KGUsbil9dmFyIHR5O3R5PWZ1bmN0aW9uKGUsdCxuKXtpZihlIT09bnVsbClpZihlLm1lbW9pemVkUHJvcHMhPT10LnBlbmRpbmdQcm9wc3x8RnQuY3VycmVudCl6dD0hMDtlbHNle2lmKCEoZS5sYW5lcyZuKSYmISh0LmZsYWdzJjEyOCkpcmV0dXJuIHp0PSExLE94KGUsdCxuKTt6dD0hIShlLmZsYWdzJjEzMTA3Mil9ZWxzZSB6dD0hMSwkZSYmdC5mbGFncyYxMDQ4NTc2JiZhZyh0LFhzLHQuaW5kZXgpO3N3aXRjaCh0LmxhbmVzPTAsdC50YWcpe2Nhc2UgMjp2YXIgcj10LnR5cGU7THMoZSx0KSxlPXQucGVuZGluZ1Byb3BzO3ZhciBvPWlhKHQsU3QuY3VycmVudCk7cmEodCxuKSxvPUVkKG51bGwsdCxyLGUsbyxuKTt2YXIgYT1UZCgpO3JldHVybiB0LmZsYWdzfD0xLHR5cGVvZiBvPT0ib2JqZWN0IiYmbyE9PW51bGwmJnR5cGVvZiBvLnJlbmRlcj09ImZ1bmN0aW9uIiYmby4kJHR5cGVvZj09PXZvaWQgMD8odC50YWc9MSx0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LnVwZGF0ZVF1ZXVlPW51bGwsVXQocik/KGE9ITAsUXModCkpOmE9ITEsdC5tZW1vaXplZFN0YXRlPW8uc3RhdGUhPT1udWxsJiZvLnN0YXRlIT09dm9pZCAwP28uc3RhdGU6bnVsbCx3ZCh0KSxvLnVwZGF0ZXI9eWwsdC5zdGF0ZU5vZGU9byxvLl9yZWFjdEludGVybmFscz10LFB1KHQscixlLG4pLHQ9RnUobnVsbCx0LHIsITAsYSxuKSk6KHQudGFnPTAsJGUmJmEmJnBkKHQpLER0KG51bGwsdCxvLG4pLHQ9dC5jaGlsZCksdDtjYXNlIDE2OnI9dC5lbGVtZW50VHlwZTtlOntzd2l0Y2goTHMoZSx0KSxlPXQucGVuZGluZ1Byb3BzLG89ci5faW5pdCxyPW8oci5fcGF5bG9hZCksdC50eXBlPXIsbz10LnRhZz1qeChyKSxlPWtuKHIsZSksbyl7Y2FzZSAwOnQ9enUobnVsbCx0LHIsZSxuKTticmVhayBlO2Nhc2UgMTp0PVFoKG51bGwsdCxyLGUsbik7YnJlYWsgZTtjYXNlIDExOnQ9WWgobnVsbCx0LHIsZSxuKTticmVhayBlO2Nhc2UgMTQ6dD1xaChudWxsLHQscixrbihyLnR5cGUsZSksbik7YnJlYWsgZX10aHJvdyBFcnJvcihNKDMwNixyLCIiKSl9cmV0dXJuIHQ7Y2FzZSAwOnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzprbihyLG8pLHp1KGUsdCxyLG8sbik7Y2FzZSAxOnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzprbihyLG8pLFFoKGUsdCxyLG8sbik7Y2FzZSAzOmU6e2lmKEZnKHQpLGU9PT1udWxsKXRocm93IEVycm9yKE0oMzg3KSk7cj10LnBlbmRpbmdQcm9wcyxhPXQubWVtb2l6ZWRTdGF0ZSxvPWEuZWxlbWVudCxkZyhlLHQpLHRsKHQscixudWxsLG4pO3ZhciBpPXQubWVtb2l6ZWRTdGF0ZTtpZihyPWkuZWxlbWVudCxhLmlzRGVoeWRyYXRlZClpZihhPXtlbGVtZW50OnIsaXNEZWh5ZHJhdGVkOiExLGNhY2hlOmkuY2FjaGUscGVuZGluZ1N1c3BlbnNlQm91bmRhcmllczppLnBlbmRpbmdTdXNwZW5zZUJvdW5kYXJpZXMsdHJhbnNpdGlvbnM6aS50cmFuc2l0aW9uc30sdC51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9YSx0Lm1lbW9pemVkU3RhdGU9YSx0LmZsYWdzJjI1Nil7bz11YShFcnJvcihNKDQyMykpLHQpLHQ9SmgoZSx0LHIsbixvKTticmVhayBlfWVsc2UgaWYociE9PW8pe289dWEoRXJyb3IoTSg0MjQpKSx0KSx0PUpoKGUsdCxyLG4sbyk7YnJlYWsgZX1lbHNlIGZvcihLdD1Pcih0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLmZpcnN0Q2hpbGQpLFl0PXQsJGU9ITAsU249bnVsbCxuPWNnKHQsbnVsbCxyLG4pLHQuY2hpbGQ9bjtuOyluLmZsYWdzPW4uZmxhZ3MmLTN8NDA5NixuPW4uc2libGluZztlbHNle2lmKHNhKCkscj09PW8pe3Q9c3IoZSx0LG4pO2JyZWFrIGV9RHQoZSx0LHIsbil9dD10LmNoaWxkfXJldHVybiB0O2Nhc2UgNTpyZXR1cm4gcGcodCksZT09PW51bGwmJkl1KHQpLHI9dC50eXBlLG89dC5wZW5kaW5nUHJvcHMsYT1lIT09bnVsbD9lLm1lbW9pemVkUHJvcHM6bnVsbCxpPW8uY2hpbGRyZW4sRHUocixvKT9pPW51bGw6YSE9PW51bGwmJkR1KHIsYSkmJih0LmZsYWdzfD0zMiksemcoZSx0KSxEdChlLHQsaSxuKSx0LmNoaWxkO2Nhc2UgNjpyZXR1cm4gZT09PW51bGwmJkl1KHQpLG51bGw7Y2FzZSAxMzpyZXR1cm4gVWcoZSx0LG4pO2Nhc2UgNDpyZXR1cm4gYmQodCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxyPXQucGVuZGluZ1Byb3BzLGU9PT1udWxsP3QuY2hpbGQ9bGEodCxudWxsLHIsbik6RHQoZSx0LHIsbiksdC5jaGlsZDtjYXNlIDExOnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzprbihyLG8pLFloKGUsdCxyLG8sbik7Y2FzZSA3OnJldHVybiBEdChlLHQsdC5wZW5kaW5nUHJvcHMsbiksdC5jaGlsZDtjYXNlIDg6cmV0dXJuIER0KGUsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixuKSx0LmNoaWxkO2Nhc2UgMTI6cmV0dXJuIER0KGUsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixuKSx0LmNoaWxkO2Nhc2UgMTA6ZTp7aWYocj10LnR5cGUuX2NvbnRleHQsbz10LnBlbmRpbmdQcm9wcyxhPXQubWVtb2l6ZWRQcm9wcyxpPW8udmFsdWUsTWUoWnMsci5fY3VycmVudFZhbHVlKSxyLl9jdXJyZW50VmFsdWU9aSxhIT09bnVsbClpZihObihhLnZhbHVlLGkpKXtpZihhLmNoaWxkcmVuPT09by5jaGlsZHJlbiYmIUZ0LmN1cnJlbnQpe3Q9c3IoZSx0LG4pO2JyZWFrIGV9fWVsc2UgZm9yKGE9dC5jaGlsZCxhIT09bnVsbCYmKGEucmV0dXJuPXQpO2EhPT1udWxsOyl7dmFyIHM9YS5kZXBlbmRlbmNpZXM7aWYocyE9PW51bGwpe2k9YS5jaGlsZDtmb3IodmFyIGw9cy5maXJzdENvbnRleHQ7bCE9PW51bGw7KXtpZihsLmNvbnRleHQ9PT1yKXtpZihhLnRhZz09PTEpe2w9cnIoLTEsbiYtbiksbC50YWc9Mjt2YXIgYz1hLnVwZGF0ZVF1ZXVlO2lmKGMhPT1udWxsKXtjPWMuc2hhcmVkO3ZhciB1PWMucGVuZGluZzt1PT09bnVsbD9sLm5leHQ9bDoobC5uZXh0PXUubmV4dCx1Lm5leHQ9bCksYy5wZW5kaW5nPWx9fWEubGFuZXN8PW4sbD1hLmFsdGVybmF0ZSxsIT09bnVsbCYmKGwubGFuZXN8PW4pLFJ1KGEucmV0dXJuLG4sdCkscy5sYW5lc3w9bjticmVha31sPWwubmV4dH19ZWxzZSBpZihhLnRhZz09PTEwKWk9YS50eXBlPT09dC50eXBlP251bGw6YS5jaGlsZDtlbHNlIGlmKGEudGFnPT09MTgpe2lmKGk9YS5yZXR1cm4saT09PW51bGwpdGhyb3cgRXJyb3IoTSgzNDEpKTtpLmxhbmVzfD1uLHM9aS5hbHRlcm5hdGUscyE9PW51bGwmJihzLmxhbmVzfD1uKSxSdShpLG4sdCksaT1hLnNpYmxpbmd9ZWxzZSBpPWEuY2hpbGQ7aWYoaSE9PW51bGwpaS5yZXR1cm49YTtlbHNlIGZvcihpPWE7aSE9PW51bGw7KXtpZihpPT09dCl7aT1udWxsO2JyZWFrfWlmKGE9aS5zaWJsaW5nLGEhPT1udWxsKXthLnJldHVybj1pLnJldHVybixpPWE7YnJlYWt9aT1pLnJldHVybn1hPWl9RHQoZSx0LG8uY2hpbGRyZW4sbiksdD10LmNoaWxkfXJldHVybiB0O2Nhc2UgOTpyZXR1cm4gbz10LnR5cGUscj10LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixyYSh0LG4pLG89bG4obykscj1yKG8pLHQuZmxhZ3N8PTEsRHQoZSx0LHIsbiksdC5jaGlsZDtjYXNlIDE0OnJldHVybiByPXQudHlwZSxvPWtuKHIsdC5wZW5kaW5nUHJvcHMpLG89a24oci50eXBlLG8pLHFoKGUsdCxyLG8sbik7Y2FzZSAxNTpyZXR1cm4gUGcoZSx0LHQudHlwZSx0LnBlbmRpbmdQcm9wcyxuKTtjYXNlIDE3OnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzprbihyLG8pLExzKGUsdCksdC50YWc9MSxVdChyKT8oZT0hMCxRcyh0KSk6ZT0hMSxyYSh0LG4pLElnKHQscixvKSxQdSh0LHIsbyxuKSxGdShudWxsLHQsciwhMCxlLG4pO2Nhc2UgMTk6cmV0dXJuICRnKGUsdCxuKTtjYXNlIDIyOnJldHVybiBMZyhlLHQsbil9dGhyb3cgRXJyb3IoTSgxNTYsdC50YWcpKX07ZnVuY3Rpb24gbnkoZSx0KXtyZXR1cm4gQ20oZSx0KX1mdW5jdGlvbiBWeChlLHQsbixyKXt0aGlzLnRhZz1lLHRoaXMua2V5PW4sdGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbCx0aGlzLmluZGV4PTAsdGhpcy5yZWY9bnVsbCx0aGlzLnBlbmRpbmdQcm9wcz10LHRoaXMuZGVwZW5kZW5jaWVzPXRoaXMubWVtb2l6ZWRTdGF0ZT10aGlzLnVwZGF0ZVF1ZXVlPXRoaXMubWVtb2l6ZWRQcm9wcz1udWxsLHRoaXMubW9kZT1yLHRoaXMuc3VidHJlZUZsYWdzPXRoaXMuZmxhZ3M9MCx0aGlzLmRlbGV0aW9ucz1udWxsLHRoaXMuY2hpbGRMYW5lcz10aGlzLmxhbmVzPTAsdGhpcy5hbHRlcm5hdGU9bnVsbH1mdW5jdGlvbiBhbihlLHQsbixyKXtyZXR1cm4gbmV3IFZ4KGUsdCxuLHIpfWZ1bmN0aW9uIFBkKGUpe3JldHVybiBlPWUucHJvdG90eXBlLCEoIWV8fCFlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIGp4KGUpe2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBQZChlKT8xOjA7aWYoZSE9bnVsbCl7aWYoZT1lLiQkdHlwZW9mLGU9PT1lZClyZXR1cm4gMTE7aWYoZT09PXRkKXJldHVybiAxNH1yZXR1cm4gMn1mdW5jdGlvbiBQcihlLHQpe3ZhciBuPWUuYWx0ZXJuYXRlO3JldHVybiBuPT09bnVsbD8obj1hbihlLnRhZyx0LGUua2V5LGUubW9kZSksbi5lbGVtZW50VHlwZT1lLmVsZW1lbnRUeXBlLG4udHlwZT1lLnR5cGUsbi5zdGF0ZU5vZGU9ZS5zdGF0ZU5vZGUsbi5hbHRlcm5hdGU9ZSxlLmFsdGVybmF0ZT1uKToobi5wZW5kaW5nUHJvcHM9dCxuLnR5cGU9ZS50eXBlLG4uZmxhZ3M9MCxuLnN1YnRyZWVGbGFncz0wLG4uZGVsZXRpb25zPW51bGwpLG4uZmxhZ3M9ZS5mbGFncyYxNDY4MDA2NCxuLmNoaWxkTGFuZXM9ZS5jaGlsZExhbmVzLG4ubGFuZXM9ZS5sYW5lcyxuLmNoaWxkPWUuY2hpbGQsbi5tZW1vaXplZFByb3BzPWUubWVtb2l6ZWRQcm9wcyxuLm1lbW9pemVkU3RhdGU9ZS5tZW1vaXplZFN0YXRlLG4udXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0PWUuZGVwZW5kZW5jaWVzLG4uZGVwZW5kZW5jaWVzPXQ9PT1udWxsP251bGw6e2xhbmVzOnQubGFuZXMsZmlyc3RDb250ZXh0OnQuZmlyc3RDb250ZXh0fSxuLnNpYmxpbmc9ZS5zaWJsaW5nLG4uaW5kZXg9ZS5pbmRleCxuLnJlZj1lLnJlZixufWZ1bmN0aW9uIFVzKGUsdCxuLHIsbyxhKXt2YXIgaT0yO2lmKHI9ZSx0eXBlb2YgZT09ImZ1bmN0aW9uIilQZChlKSYmKGk9MSk7ZWxzZSBpZih0eXBlb2YgZT09InN0cmluZyIpaT01O2Vsc2UgZTpzd2l0Y2goZSl7Y2FzZSBCbzpyZXR1cm4gc28obi5jaGlsZHJlbixvLGEsdCk7Y2FzZSBadTppPTgsb3w9ODticmVhaztjYXNlIGF1OnJldHVybiBlPWFuKDEyLG4sdCxvfDIpLGUuZWxlbWVudFR5cGU9YXUsZS5sYW5lcz1hLGU7Y2FzZSBpdTpyZXR1cm4gZT1hbigxMyxuLHQsbyksZS5lbGVtZW50VHlwZT1pdSxlLmxhbmVzPWEsZTtjYXNlIHN1OnJldHVybiBlPWFuKDE5LG4sdCxvKSxlLmVsZW1lbnRUeXBlPXN1LGUubGFuZXM9YSxlO2Nhc2UgcG06cmV0dXJuIGJsKG4sbyxhLHQpO2RlZmF1bHQ6aWYodHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbClzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSB1bTppPTEwO2JyZWFrIGU7Y2FzZSBkbTppPTk7YnJlYWsgZTtjYXNlIGVkOmk9MTE7YnJlYWsgZTtjYXNlIHRkOmk9MTQ7YnJlYWsgZTtjYXNlIHhyOmk9MTYscj1udWxsO2JyZWFrIGV9dGhyb3cgRXJyb3IoTSgxMzAsZT09bnVsbD9lOnR5cGVvZiBlLCIiKSl9cmV0dXJuIHQ9YW4oaSxuLHQsbyksdC5lbGVtZW50VHlwZT1lLHQudHlwZT1yLHQubGFuZXM9YSx0fWZ1bmN0aW9uIHNvKGUsdCxuLHIpe3JldHVybiBlPWFuKDcsZSxyLHQpLGUubGFuZXM9bixlfWZ1bmN0aW9uIGJsKGUsdCxuLHIpe3JldHVybiBlPWFuKDIyLGUscix0KSxlLmVsZW1lbnRUeXBlPXBtLGUubGFuZXM9bixlLnN0YXRlTm9kZT17aXNIaWRkZW46ITF9LGV9ZnVuY3Rpb24gbnUoZSx0LG4pe3JldHVybiBlPWFuKDYsZSxudWxsLHQpLGUubGFuZXM9bixlfWZ1bmN0aW9uIHJ1KGUsdCxuKXtyZXR1cm4gdD1hbig0LGUuY2hpbGRyZW4hPT1udWxsP2UuY2hpbGRyZW46W10sZS5rZXksdCksdC5sYW5lcz1uLHQuc3RhdGVOb2RlPXtjb250YWluZXJJbmZvOmUuY29udGFpbmVySW5mbyxwZW5kaW5nQ2hpbGRyZW46bnVsbCxpbXBsZW1lbnRhdGlvbjplLmltcGxlbWVudGF0aW9ufSx0fWZ1bmN0aW9uIEt4KGUsdCxuLHIsbyl7dGhpcy50YWc9dCx0aGlzLmNvbnRhaW5lckluZm89ZSx0aGlzLmZpbmlzaGVkV29yaz10aGlzLnBpbmdDYWNoZT10aGlzLmN1cnJlbnQ9dGhpcy5wZW5kaW5nQ2hpbGRyZW49bnVsbCx0aGlzLnRpbWVvdXRIYW5kbGU9LTEsdGhpcy5jYWxsYmFja05vZGU9dGhpcy5wZW5kaW5nQ29udGV4dD10aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MCx0aGlzLmV2ZW50VGltZXM9JGMoMCksdGhpcy5leHBpcmF0aW9uVGltZXM9JGMoLTEpLHRoaXMuZW50YW5nbGVkTGFuZXM9dGhpcy5maW5pc2hlZExhbmVzPXRoaXMubXV0YWJsZVJlYWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MCx0aGlzLmVudGFuZ2xlbWVudHM9JGMoMCksdGhpcy5pZGVudGlmaWVyUHJlZml4PXIsdGhpcy5vblJlY292ZXJhYmxlRXJyb3I9byx0aGlzLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9bnVsbH1mdW5jdGlvbiBMZChlLHQsbixyLG8sYSxpLHMsbCl7cmV0dXJuIGU9bmV3IEt4KGUsdCxuLHMsbCksdD09PTE/KHQ9MSxhPT09ITAmJih0fD04KSk6dD0wLGE9YW4oMyxudWxsLG51bGwsdCksZS5jdXJyZW50PWEsYS5zdGF0ZU5vZGU9ZSxhLm1lbW9pemVkU3RhdGU9e2VsZW1lbnQ6cixpc0RlaHlkcmF0ZWQ6bixjYWNoZTpudWxsLHRyYW5zaXRpb25zOm51bGwscGVuZGluZ1N1c3BlbnNlQm91bmRhcmllczpudWxsfSx3ZChhKSxlfWZ1bmN0aW9uIFl4KGUsdCxuKXt2YXIgcj0zPGFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6V28sa2V5OnI9PW51bGw/bnVsbDoiIityLGNoaWxkcmVuOmUsY29udGFpbmVySW5mbzp0LGltcGxlbWVudGF0aW9uOm59fWZ1bmN0aW9uIHJ5KGUpe2lmKCFlKXJldHVybiB6cjtlPWUuX3JlYWN0SW50ZXJuYWxzO2U6e2lmKG1vKGUpIT09ZXx8ZS50YWchPT0xKXRocm93IEVycm9yKE0oMTcwKSk7dmFyIHQ9ZTtkb3tzd2l0Y2godC50YWcpe2Nhc2UgMzp0PXQuc3RhdGVOb2RlLmNvbnRleHQ7YnJlYWsgZTtjYXNlIDE6aWYoVXQodC50eXBlKSl7dD10LnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDticmVhayBlfX10PXQucmV0dXJufXdoaWxlKHQhPT1udWxsKTt0aHJvdyBFcnJvcihNKDE3MSkpfWlmKGUudGFnPT09MSl7dmFyIG49ZS50eXBlO2lmKFV0KG4pKXJldHVybiByZyhlLG4sdCl9cmV0dXJuIHR9ZnVuY3Rpb24gb3koZSx0LG4scixvLGEsaSxzLGwpe3JldHVybiBlPUxkKG4sciwhMCxlLG8sYSxpLHMsbCksZS5jb250ZXh0PXJ5KG51bGwpLG49ZS5jdXJyZW50LHI9X3QoKSxvPU1yKG4pLGE9cnIocixvKSxhLmNhbGxiYWNrPXQ/P251bGwsSXIobixhLG8pLGUuY3VycmVudC5sYW5lcz1vLHdpKGUsbyxyKSwkdChlLHIpLGV9ZnVuY3Rpb24ga2woZSx0LG4scil7dmFyIG89dC5jdXJyZW50LGE9X3QoKSxpPU1yKG8pO3JldHVybiBuPXJ5KG4pLHQuY29udGV4dD09PW51bGw/dC5jb250ZXh0PW46dC5wZW5kaW5nQ29udGV4dD1uLHQ9cnIoYSxpKSx0LnBheWxvYWQ9e2VsZW1lbnQ6ZX0scj1yPT09dm9pZCAwP251bGw6cixyIT09bnVsbCYmKHQuY2FsbGJhY2s9ciksZT1JcihvLHQsaSksZSE9PW51bGwmJihUbihlLG8saSxhKSxScyhlLG8saSkpLGl9ZnVuY3Rpb24gY2woZSl7aWYoZT1lLmN1cnJlbnQsIWUuY2hpbGQpcmV0dXJuIG51bGw7c3dpdGNoKGUuY2hpbGQudGFnKXtjYXNlIDU6cmV0dXJuIGUuY2hpbGQuc3RhdGVOb2RlO2RlZmF1bHQ6cmV0dXJuIGUuY2hpbGQuc3RhdGVOb2RlfX1mdW5jdGlvbiBzbShlLHQpe2lmKGU9ZS5tZW1vaXplZFN0YXRlLGUhPT1udWxsJiZlLmRlaHlkcmF0ZWQhPT1udWxsKXt2YXIgbj1lLnJldHJ5TGFuZTtlLnJldHJ5TGFuZT1uIT09MCYmbjx0P246dH19ZnVuY3Rpb24gemQoZSx0KXtzbShlLHQpLChlPWUuYWx0ZXJuYXRlKSYmc20oZSx0KX1mdW5jdGlvbiBxeCgpe3JldHVybiBudWxsfXZhciBheT10eXBlb2YgcmVwb3J0RXJyb3I9PSJmdW5jdGlvbiI/cmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihlKX07ZnVuY3Rpb24gRmQoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9eGwucHJvdG90eXBlLnJlbmRlcj1GZC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2ludGVybmFsUm9vdDtpZih0PT09bnVsbCl0aHJvdyBFcnJvcihNKDQwOSkpO2tsKGUsdCxudWxsLG51bGwpfTt4bC5wcm90b3R5cGUudW5tb3VudD1GZC5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ludGVybmFsUm9vdDtpZihlIT09bnVsbCl7dGhpcy5faW50ZXJuYWxSb290PW51bGw7dmFyIHQ9ZS5jb250YWluZXJJbmZvO2ZvKGZ1bmN0aW9uKCl7a2wobnVsbCxlLG51bGwsbnVsbCl9KSx0W2FyXT1udWxsfX07ZnVuY3Rpb24geGwoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9eGwucHJvdG90eXBlLnVuc3RhYmxlX3NjaGVkdWxlSHlkcmF0aW9uPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PUxtKCk7ZT17YmxvY2tlZE9uOm51bGwsdGFyZ2V0OmUscHJpb3JpdHk6dH07Zm9yKHZhciBuPTA7bjxFci5sZW5ndGgmJnQhPT0wJiZ0PEVyW25dLnByaW9yaXR5O24rKyk7RXIuc3BsaWNlKG4sMCxlKSxuPT09MCYmRm0oZSl9fTtmdW5jdGlvbiBVZChlKXtyZXR1cm4hKCFlfHxlLm5vZGVUeXBlIT09MSYmZS5ub2RlVHlwZSE9PTkmJmUubm9kZVR5cGUhPT0xMSl9ZnVuY3Rpb24gU2woZSl7cmV0dXJuISghZXx8ZS5ub2RlVHlwZSE9PTEmJmUubm9kZVR5cGUhPT05JiZlLm5vZGVUeXBlIT09MTEmJihlLm5vZGVUeXBlIT09OHx8ZS5ub2RlVmFsdWUhPT0iIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlICIpKX1mdW5jdGlvbiBsbSgpe31mdW5jdGlvbiBReChlLHQsbixyLG8pe2lmKG8pe2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgYT1yO3I9ZnVuY3Rpb24oKXt2YXIgYz1jbChpKTthLmNhbGwoYyl9fXZhciBpPW95KHQscixlLDAsbnVsbCwhMSwhMSwiIixsbSk7cmV0dXJuIGUuX3JlYWN0Um9vdENvbnRhaW5lcj1pLGVbYXJdPWkuY3VycmVudCx1aShlLm5vZGVUeXBlPT09OD9lLnBhcmVudE5vZGU6ZSksZm8oKSxpfWZvcig7bz1lLmxhc3RDaGlsZDspZS5yZW1vdmVDaGlsZChvKTtpZih0eXBlb2Ygcj09ImZ1bmN0aW9uIil7dmFyIHM9cjtyPWZ1bmN0aW9uKCl7dmFyIGM9Y2wobCk7cy5jYWxsKGMpfX12YXIgbD1MZChlLDAsITEsbnVsbCxudWxsLCExLCExLCIiLGxtKTtyZXR1cm4gZS5fcmVhY3RSb290Q29udGFpbmVyPWwsZVthcl09bC5jdXJyZW50LHVpKGUubm9kZVR5cGU9PT04P2UucGFyZW50Tm9kZTplKSxmbyhmdW5jdGlvbigpe2tsKHQsbCxuLHIpfSksbH1mdW5jdGlvbiBFbChlLHQsbixyLG8pe3ZhciBhPW4uX3JlYWN0Um9vdENvbnRhaW5lcjtpZihhKXt2YXIgaT1hO2lmKHR5cGVvZiBvPT0iZnVuY3Rpb24iKXt2YXIgcz1vO289ZnVuY3Rpb24oKXt2YXIgbD1jbChpKTtzLmNhbGwobCl9fWtsKHQsaSxlLG8pfWVsc2UgaT1ReChuLHQsZSxvLHIpO3JldHVybiBjbChpKX1NbT1mdW5jdGlvbihlKXtzd2l0Y2goZS50YWcpe2Nhc2UgMzp2YXIgdD1lLnN0YXRlTm9kZTtpZih0LmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe3ZhciBuPVZhKHQucGVuZGluZ0xhbmVzKTtuIT09MCYmKG9kKHQsbnwxKSwkdCh0LGV0KCkpLCEod2UmNikmJihkYT1ldCgpKzUwMCwkcigpKSl9YnJlYWs7Y2FzZSAxMzpmbyhmdW5jdGlvbigpe3ZhciByPWlyKGUsMSk7aWYociE9PW51bGwpe3ZhciBvPV90KCk7VG4ocixlLDEsbyl9fSksemQoZSwxKX19O2FkPWZ1bmN0aW9uKGUpe2lmKGUudGFnPT09MTMpe3ZhciB0PWlyKGUsMTM0MjE3NzI4KTtpZih0IT09bnVsbCl7dmFyIG49X3QoKTtUbih0LGUsMTM0MjE3NzI4LG4pfXpkKGUsMTM0MjE3NzI4KX19O1BtPWZ1bmN0aW9uKGUpe2lmKGUudGFnPT09MTMpe3ZhciB0PU1yKGUpLG49aXIoZSx0KTtpZihuIT09bnVsbCl7dmFyIHI9X3QoKTtUbihuLGUsdCxyKX16ZChlLHQpfX07TG09ZnVuY3Rpb24oKXtyZXR1cm4gRGV9O3ptPWZ1bmN0aW9uKGUsdCl7dmFyIG49RGU7dHJ5e3JldHVybiBEZT1lLHQoKX1maW5hbGx5e0RlPW59fTt5dT1mdW5jdGlvbihlLHQsbil7c3dpdGNoKHQpe2Nhc2UiaW5wdXQiOmlmKHV1KGUsbiksdD1uLm5hbWUsbi50eXBlPT09InJhZGlvIiYmdCE9bnVsbCl7Zm9yKG49ZTtuLnBhcmVudE5vZGU7KW49bi5wYXJlbnROb2RlO2ZvcihuPW4ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZT0iK0pTT04uc3RyaW5naWZ5KCIiK3QpKyddW3R5cGU9InJhZGlvIl0nKSx0PTA7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07aWYociE9PWUmJnIuZm9ybT09PWUuZm9ybSl7dmFyIG89aGwocik7aWYoIW8pdGhyb3cgRXJyb3IoTSg5MCkpO2htKHIpLHV1KHIsbyl9fX1icmVhaztjYXNlInRleHRhcmVhIjpnbShlLG4pO2JyZWFrO2Nhc2Uic2VsZWN0Ijp0PW4udmFsdWUsdCE9bnVsbCYmWm8oZSwhIW4ubXVsdGlwbGUsdCwhMSl9fTtTbT1JZDtFbT1mbzt2YXIgSng9e3VzaW5nQ2xpZW50RW50cnlQb2ludDohMSxFdmVudHM6W2tpLGpvLGhsLGttLHhtLElkXX0sV2E9e2ZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOnJvLGJ1bmRsZVR5cGU6MCx2ZXJzaW9uOiIxOC4zLjEiLHJlbmRlcmVyUGFja2FnZU5hbWU6InJlYWN0LWRvbSJ9LFh4PXtidW5kbGVUeXBlOldhLmJ1bmRsZVR5cGUsdmVyc2lvbjpXYS52ZXJzaW9uLHJlbmRlcmVyUGFja2FnZU5hbWU6V2EucmVuZGVyZXJQYWNrYWdlTmFtZSxyZW5kZXJlckNvbmZpZzpXYS5yZW5kZXJlckNvbmZpZyxvdmVycmlkZUhvb2tTdGF0ZTpudWxsLG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDpudWxsLG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aDpudWxsLG92ZXJyaWRlUHJvcHM6bnVsbCxvdmVycmlkZVByb3BzRGVsZXRlUGF0aDpudWxsLG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoOm51bGwsc2V0RXJyb3JIYW5kbGVyOm51bGwsc2V0U3VzcGVuc2VIYW5kbGVyOm51bGwsc2NoZWR1bGVVcGRhdGU6bnVsbCxjdXJyZW50RGlzcGF0Y2hlclJlZjpsci5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPURtKGUpLGU9PT1udWxsP251bGw6ZS5zdGF0ZU5vZGV9LGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOldhLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlfHxxeCxmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6bnVsbCxzY2hlZHVsZVJlZnJlc2g6bnVsbCxzY2hlZHVsZVJvb3Q6bnVsbCxzZXRSZWZyZXNoSGFuZGxlcjpudWxsLGdldEN1cnJlbnRGaWJlcjpudWxsLHJlY29uY2lsZXJWZXJzaW9uOiIxOC4zLjEtbmV4dC1mMTMzOGY4MDgwLTIwMjQwNDI2In07aWYodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXzwidSImJihCYT1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18sIUJhLmlzRGlzYWJsZWQmJkJhLnN1cHBvcnRzRmliZXIpKXRyeXt1bD1CYS5pbmplY3QoWHgpLEJuPUJhfWNhdGNoe312YXIgQmE7SnQuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9Sng7SnQuY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKGUsdCl7dmFyIG49Mjxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGw7aWYoIVVkKHQpKXRocm93IEVycm9yKE0oMjAwKSk7cmV0dXJuIFl4KGUsdCxudWxsLG4pfTtKdC5jcmVhdGVSb290PWZ1bmN0aW9uKGUsdCl7aWYoIVVkKGUpKXRocm93IEVycm9yKE0oMjk5KSk7dmFyIG49ITEscj0iIixvPWF5O3JldHVybiB0IT1udWxsJiYodC51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihuPSEwKSx0LmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihyPXQuaWRlbnRpZmllclByZWZpeCksdC5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihvPXQub25SZWNvdmVyYWJsZUVycm9yKSksdD1MZChlLDEsITEsbnVsbCxudWxsLG4sITEscixvKSxlW2FyXT10LmN1cnJlbnQsdWkoZS5ub2RlVHlwZT09PTg/ZS5wYXJlbnROb2RlOmUpLG5ldyBGZCh0KX07SnQuZmluZERPTU5vZGU9ZnVuY3Rpb24oZSl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtpZihlLm5vZGVUeXBlPT09MSlyZXR1cm4gZTt2YXIgdD1lLl9yZWFjdEludGVybmFscztpZih0PT09dm9pZCAwKXRocm93IHR5cGVvZiBlLnJlbmRlcj09ImZ1bmN0aW9uIj9FcnJvcihNKDE4OCkpOihlPU9iamVjdC5rZXlzKGUpLmpvaW4oIiwiKSxFcnJvcihNKDI2OCxlKSkpO3JldHVybiBlPURtKHQpLGU9ZT09PW51bGw/bnVsbDplLnN0YXRlTm9kZSxlfTtKdC5mbHVzaFN5bmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZvKGUpfTtKdC5oeWRyYXRlPWZ1bmN0aW9uKGUsdCxuKXtpZighU2wodCkpdGhyb3cgRXJyb3IoTSgyMDApKTtyZXR1cm4gRWwobnVsbCxlLHQsITAsbil9O0p0Lmh5ZHJhdGVSb290PWZ1bmN0aW9uKGUsdCxuKXtpZighVWQoZSkpdGhyb3cgRXJyb3IoTSg0MDUpKTt2YXIgcj1uIT1udWxsJiZuLmh5ZHJhdGVkU291cmNlc3x8bnVsbCxvPSExLGE9IiIsaT1heTtpZihuIT1udWxsJiYobi51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihvPSEwKSxuLmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihhPW4uaWRlbnRpZmllclByZWZpeCksbi5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihpPW4ub25SZWNvdmVyYWJsZUVycm9yKSksdD1veSh0LG51bGwsZSwxLG4/P251bGwsbywhMSxhLGkpLGVbYXJdPXQuY3VycmVudCx1aShlKSxyKWZvcihlPTA7ZTxyLmxlbmd0aDtlKyspbj1yW2VdLG89bi5fZ2V0VmVyc2lvbixvPW8obi5fc291cmNlKSx0Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9PW51bGw/dC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPVtuLG9dOnQubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG4sbyk7cmV0dXJuIG5ldyB4bCh0KX07SnQucmVuZGVyPWZ1bmN0aW9uKGUsdCxuKXtpZighU2wodCkpdGhyb3cgRXJyb3IoTSgyMDApKTtyZXR1cm4gRWwobnVsbCxlLHQsITEsbil9O0p0LnVubW91bnRDb21wb25lbnRBdE5vZGU9ZnVuY3Rpb24oZSl7aWYoIVNsKGUpKXRocm93IEVycm9yKE0oNDApKTtyZXR1cm4gZS5fcmVhY3RSb290Q29udGFpbmVyPyhmbyhmdW5jdGlvbigpe0VsKG51bGwsbnVsbCxlLCExLGZ1bmN0aW9uKCl7ZS5fcmVhY3RSb290Q29udGFpbmVyPW51bGwsZVthcl09bnVsbH0pfSksITApOiExfTtKdC51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcz1JZDtKdC51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcj1mdW5jdGlvbihlLHQsbixyKXtpZighU2wobikpdGhyb3cgRXJyb3IoTSgyMDApKTtpZihlPT1udWxsfHxlLl9yZWFjdEludGVybmFscz09PXZvaWQgMCl0aHJvdyBFcnJvcihNKDM4KSk7cmV0dXJuIEVsKGUsdCxuLCExLHIpfTtKdC52ZXJzaW9uPSIxOC4zLjEtbmV4dC1mMTMzOGY4MDgwLTIwMjQwNDI2In0pO3ZhciBjeT1YbigoTEEsbHkpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHN5KCl7aWYoISh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fPiJ1Inx8dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSE9ImZ1bmN0aW9uIikpdHJ5e19fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShzeSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19c3koKSxseS5leHBvcnRzPWl5KCl9KTt2YXIgZHk9WG4oJGQ9PnsidXNlIHN0cmljdCI7dmFyIHV5PWN5KCk7JGQuY3JlYXRlUm9vdD11eS5jcmVhdGVSb290LCRkLmh5ZHJhdGVSb290PXV5Lmh5ZHJhdGVSb290O3ZhciB6QX0pO3ZhciBndj1YbihXbD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZ1M9eWUoKSx5Uz1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksdlM9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSx3Uz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGJTPWdTLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELlJlYWN0Q3VycmVudE93bmVyLGtTPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gbXYoZSx0LG4pe3ZhciByLG89e30sYT1udWxsLGk9bnVsbDtuIT09dm9pZCAwJiYoYT0iIituKSx0LmtleSE9PXZvaWQgMCYmKGE9IiIrdC5rZXkpLHQucmVmIT09dm9pZCAwJiYoaT10LnJlZik7Zm9yKHIgaW4gdCl3Uy5jYWxsKHQscikmJiFrUy5oYXNPd25Qcm9wZXJ0eShyKSYmKG9bcl09dFtyXSk7aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gdD1lLmRlZmF1bHRQcm9wcyx0KW9bcl09PT12b2lkIDAmJihvW3JdPXRbcl0pO3JldHVybnskJHR5cGVvZjp5Uyx0eXBlOmUsa2V5OmEscmVmOmkscHJvcHM6byxfb3duZXI6YlMuY3VycmVudH19V2wuRnJhZ21lbnQ9dlM7V2wuanN4PW12O1dsLmpzeHM9bXZ9KTt2YXIgcmU9WG4oKFlSLHl2KT0+eyJ1c2Ugc3RyaWN0Ijt5di5leHBvcnRzPWd2KCl9KTt2YXIgRGI9eihkeSgpLDEpO3ZhciBBdD17REVGQVVMVDoiZGVmYXVsdCIsTEFZT1VUX0NPTkZJRzoibGF5b3V0Q29uZmlnIixTRVRUSU5HU19DT05GSUc6InNldHRpbmdzQ29uZmlnIn07dmFyIGZ5PXR5cGVvZiBwcm9jZXNzPCJ1IiYmITEsRG49ITEsV2Q9MzAsV2U9InBsdWdpbnMvZGFzaGJvYXJkIixUbD0icGxhbm5pbmcvcXVhcnRlcmx5IixoeT17YW50aHJvcGljOiJBbnRocm9waWMgQVBJIEtleSIsZGVlcHNlZWs6IkRlZXBTZWVrIEFQSSBLZXkiLGdlbWluaToiR2VtaW5pIEFQSSBLZXkiLGdyb2s6Ikdyb2sgQVBJIEtleSIsb3BlbmFpOiJPcGVuQUkgQVBJIEtleSJ9O3ZhciBLPXtCQUNLR1JPVU5EX0lNQUdFX1VSTDoiQmFja2dyb3VuZCBJbWFnZSBVUkwiLEJBQ0tHUk9VTkRfSU1BR0VfTU9ERToiQmFja2dyb3VuZCBJbWFnZSBNb2RlIixDT05TT0xFX0xPR0dJTkc6IkNvbnNvbGUgbG9nZ2luZyIsREFTSEJPQVJEX0NPTVBPTkVOVFM6ImRhc2hib2FyZF9lbGVtZW50cyIsREVCVUdfQ09OU09MRToiZGVidWdfY29uc29sZSIsTExNX0FQSV9LRVlfQU5USFJPUElDOiJBbnRocm9waWMgQVBJIEtleSIsTExNX0FQSV9LRVlfR0VNSU5JOiJHZW1pbmkgQVBJIEtleSIsTExNX0FQSV9LRVlfR1JPSzoiR3JvayBBUEkgS2V5IixMTE1fQVBJX0tFWV9PUEVOQUk6Ik9wZW5BSSBBUEkgS2V5IixMTE1fUFJPVklERVJfTU9ERUw6IkxMTSBQcm92aWRlciIsRklSU1RfSU5TVEFMTEVEX0FUOiJkYXNoYm9hcmRfZmlyc3RfaW5zdGFsbGVkX2F0IixTRUxFQ1RFRF9MQVlPVVRfUFJPRklMRToiZGFzaGJvYXJkX3NlbGVjdGVkX2xheW91dF9wcm9maWxlIixUQVNLX0RPTUFJTlM6ImRhc2hib2FyZF90YXNrX2RvbWFpbnMiLFBMQU5OSU5HX05PVEVfVEFHOiJUYWcgdG8gYXBwbHkgdG8gcGxhbm5pbmcgbm90ZXMifSxteT17YW50aHJvcGljOksuTExNX0FQSV9LRVlfQU5USFJPUElDLGdlbWluaTpLLkxMTV9BUElfS0VZX0dFTUlOSSxncm9rOksuTExNX0FQSV9LRVlfR1JPSyxvcGVuYWk6Sy5MTE1fQVBJX0tFWV9PUEVOQUl9LHB5PXtub25lOm51bGwsb3BlbmFpOiJvcGVuYWkiLGFudGhyb3BpYzoiYW50aHJvcGljIiwiYW50aHJvcGljLXNvbm5ldCI6ImFudGhyb3BpYyIsZ2VtaW5pOiJnZW1pbmkiLGdyb2s6Imdyb2sifTtmdW5jdGlvbiBXcihlKXtyZXR1cm4hZXx8ZT09PSJub25lIj9udWxsOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChweSxlKT9weVtlXTpteVtlXT9lOm51bGx9ZnVuY3Rpb24gV3QoZSl7cmV0dXJuIG15W2VdfHxudWxsfWZ1bmN0aW9uIGhhKGUpe3JldHVybmBkYXNoYm9hcmRfJHtlfV9jb25maWdgfWZ1bmN0aW9uIE5sKGUsdCl7bGV0IG49ZT8uW2hhKHQpXTtpZighbilyZXR1cm5bXTtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiBuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShuKX1jYXRjaHtyZXR1cm5bXX19dmFyIGd5PVt7dmFsdWU6ImNvdmVyIixsYWJlbDoiQ292ZXIgKGZpbGwgZW50aXJlIGJhY2tncm91bmQpIn0se3ZhbHVlOiJjb250YWluIixsYWJlbDoiQ29udGFpbiAoZml0IHdpdGhvdXQgY3JvcHBpbmcpIn0se3ZhbHVlOiJyZXBlYXQiLGxhYmVsOiJSZXBlYXQgKHRpbGUgdGhlIGltYWdlKSJ9LHt2YWx1ZToicmVwZWF0LXgiLGxhYmVsOiJSZXBlYXQgaG9yaXpvbnRhbGx5In0se3ZhbHVlOiJyZXBlYXQteSIsbGFiZWw6IlJlcGVhdCB2ZXJ0aWNhbGx5In0se3ZhbHVlOiJuby1yZXBlYXQiLGxhYmVsOiJObyByZXBlYXQgKHNpbmdsZSBjZW50ZXJlZCBpbWFnZSkifV0sVUE9Sy5EQVNIQk9BUkRfQ09NUE9ORU5UUyxaeD0yNCo2MCo2MCoxZTMsQnQ9W3t3aWRnZXRJZDoibGF5b3V0LXBpY2tlciIsbmFtZToiTGF5b3V0IFBpY2tlciIsZGVzY3JpcHRpb246Ik9uZS1jbGljayBwcmVzZXRzIHRoYXQgcmVhcnJhbmdlIHlvdXIgZW50aXJlIGRhc2hib2FyZCBpbnRvIGEgY3VyYXRlZCBwcm9maWxlIixpY29uOiJcdXsxRjVDMn1cdUZFMEYiLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsbWF4SG9yaXpvbnRhbFRpbGVzOjIsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6InBsYW5uaW5nIixuYW1lOiJRdWFydGVybHkgUGxhbm5pbmciLGRlc2NyaXB0aW9uOiJQbGFuIGFuZCB0cmFjayB5b3VyIHF1YXJ0ZXJseSBnb2FscyBhbmQgcHJpb3JpdGllcyIsaWNvbjoiXHV7MUY0Q0J9IixkZWZhdWx0R3JpZFdpZHRoU2l6ZToyLG1heEhvcml6b250YWxUaWxlczo0LG1heFZlcnRpY2FsVGlsZXM6Mn0se3dpZGdldElkOiJ2aWN0b3J5LXZhbHVlIixuYW1lOiJWaWN0b3J5IFZhbHVlIixkZXNjcmlwdGlvbjoiQ2VsZWJyYXRlIHdpbnMgYW5kIHRyYWNrIGhpZ2gtdmFsdWUgdGFzayBjb21wbGV0aW9ucyIsaWNvbjoiXHV7MUYzQzZ9IixkZWZhdWx0R3JpZFdpZHRoU2l6ZToyLG1heEhvcml6b250YWxUaWxlczo0LG1heFZlcnRpY2FsVGlsZXM6Mn0se3dpZGdldElkOiJkcmVhbS10YXNrIixuYW1lOiJHb2FsIENvYWNoIixkZXNjcmlwdGlvbjoiR2V0IHRhc2sgc3VnZ2VzdGlvbnMgdGhhdCBibGVuZCBxdWFydGVybHkvbW9udGhseSBnb2FscyB3aXRoIGRheS1vZi13ZWVrIHByZWZlcmVuY2VzIixpY29uOiJcdXsxRjUyRX0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsbWF4SG9yaXpvbnRhbFRpbGVzOjQsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6ImRheS1za2V0Y2giLG5hbWU6IkRheSBTa2V0Y2hlciIsZGVzY3JpcHRpb246Ik5vdGVib29rLXBhcGVyIGRheSBwbGFubmVyIHdpdGggaG91ci1ieS1ob3VyIGVudHJpZXMgc2F2ZWQgdG8gYSBub3RlIixpY29uOiJcdXsxRjVEMn1cdUZFMEYiLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsbWF4SG9yaXpvbnRhbFRpbGVzOjQsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6ImFnZW5kYSIsbmFtZToiVGFzayBBZ2VuZGEiLGRlc2NyaXB0aW9uOiJWaWV3IGFuZCBtYW5hZ2UgeW91ciBwcmlvcml0aXplZCB0YXNrIGxpc3QiLGljb246Ilx1ezFGNENDfSIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MixtYXhIb3Jpem9udGFsVGlsZXM6NCxtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoicXVvdGVzIixuYW1lOiJJbnNwaXJhdGlvbiBRdW90ZXMiLGRlc2NyaXB0aW9uOiJSb3RhdGluZyBpbnNwaXJhdGlvbmFsIHF1b3RlcyB0byBrZWVwIHlvdSBtb3RpdmF0ZWQiLGljb246Ilx1ezFGNEExfSIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MixtYXhIb3Jpem9udGFsVGlsZXM6NCxtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoiZ3JhdmV5YXJkIixuYW1lOiJUYXNrIFJldGlyZW1lbnQgQ2VudGVyIixkZXNjcmlwdGlvbjoiU3VyZmFjZSBuZWdsZWN0ZWQgdGFza3MgYW5kIHJldGlyZSB0aGVtIHRvIGFuIGFyY2hpdmVkIG5vdGUiLGljb246Ilx1ezFGNDc1fVx1RkUwRiIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MixpbnRyb2R1Y2VkQXQ6IjIwMjYtMDUtMDkiLG1heEhvcml6b250YWxUaWxlczoyLG1heFZlcnRpY2FsVGlsZXM6Mn0se3dpZGdldElkOiJyZWNlbnQtbm90ZXMiLG5hbWU6IlJldmlzaXQgQ2FuZGlkYXRlIixkZXNjcmlwdGlvbjoiTm90ZXMgd2l0aCBvcGVuIHRhc2tzIHRoYXQgaGF2ZSBub3QgaGFkIGEgbmV3IHRhc2sgaW4gb3ZlciBhIHdlZWsiLGljb246Ilx1ezFGNENDfSIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MSxtYXhIb3Jpem9udGFsVGlsZXM6NCxtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoibW9vZCIsbmFtZToiTW9vZCBUcmFja2VyIix2aXNpYmxlVGl0bGU6IkhvdyBhcmUgeW91IGZlZWxpbmc/IixkZXNjcmlwdGlvbjoiTG9nIHlvdXIgZGFpbHkgbW9vZCBhbmQgdmlzdWFsaXplIHRyZW5kcyBvdmVyIHRpbWUiLGljb246Ilx1ezFGM0FEfSIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MSxtYXhIb3Jpem9udGFsVGlsZXM6MixtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoiY2FsZW5kYXIiLG5hbWU6IkNhbGVuZGFyIixkZXNjcmlwdGlvbjoiU2VlIHVwY29taW5nIGV2ZW50cyBhbmQgYXBwb2ludG1lbnRzIGF0IGEgZ2xhbmNlIixpY29uOiJcdXsxRjRDNX0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjEsbWF4SG9yaXpvbnRhbFRpbGVzOjIsbWF4VmVydGljYWxUaWxlczoyfSx7d2lkZ2V0SWQ6InF1aWNrLWFjdGlvbnMiLG5hbWU6IlF1aWNrIEFjdGlvbnMiLGRlc2NyaXB0aW9uOiJTaG9ydGN1dHMgZm9yIHlvdXIgbW9zdCBmcmVxdWVudGx5IHVzZWQgZGFzaGJvYXJkIGFjdGlvbnMiLGljb246Ilx1MjZBMSIsZGVmYXVsdEdyaWRXaWR0aFNpemU6MSxtYXhIb3Jpem9udGFsVGlsZXM6MixtYXhWZXJ0aWNhbFRpbGVzOjJ9LHt3aWRnZXRJZDoicGVhay1ob3VycyIsbmFtZToiUGVhayBIb3VycyIsZGVzY3JpcHRpb246IkhvdXJseSBkaXN0cmlidXRpb24gb2YgdGFzayBjcmVhdGlvbiBhbmQgY29tcGxldGlvbiBhY3Rpdml0eSIsaWNvbjoiXHUyM0YwIixkZWZhdWx0R3JpZFdpZHRoU2l6ZToyLG1heEhvcml6b250YWxUaWxlczo0LG1heFZlcnRpY2FsVGlsZXM6Mn0se3dpZGdldElkOiJkZWJ1Zy1jb25zb2xlIixuYW1lOiJEZWJ1ZyBDb25zb2xlIixkZXNjcmlwdGlvbjoiU2Nyb2xsYWJsZSBsb2cgdmlld2VyIHNob3dpbmcgYWxsIGxvZ0lmRW5hYmxlZCBtZXNzYWdlcyAoZGV2ZWxvcGVyIHRvb2wpIixpY29uOiJcdXsxRjQxQn0iLGRlZmF1bHRHcmlkV2lkdGhTaXplOjIsbWF4SG9yaXpvbnRhbFRpbGVzOjQsbWF4VmVydGljYWxUaWxlczoyLGRlYnVnT25seTohMH1dO2Z1bmN0aW9uIGxlKGUpe2xldCB0PUJ0LmZpbmQobj0+bi53aWRnZXRJZD09PWUpO3JldHVybiB0Py52aXNpYmxlVGl0bGV8fHQ/Lm5hbWV8fGV9ZnVuY3Rpb24geXkoZSl7cmV0dXJuIEJ0LmZpbmQodD0+dC53aWRnZXRJZD09PWUpfHxudWxsfXZhciBnbz1CdC5maWx0ZXIoZT0+IWUuZGVidWdPbmx5KS5tYXAoZT0+KHt3aWRnZXRJZDplLndpZGdldElkLGdyaWRXaWR0aFNpemU6ZS5kZWZhdWx0R3JpZFdpZHRoU2l6ZSxncmlkSGVpZ2h0U2l6ZToxLHNldHRpbmdzOnt9fSkpO3ZhciBCZD0hMSxlMT0wLHQxPTIwMCxEbD1bXSxIZD1uZXcgU2V0O2Z1bmN0aW9uIEdkKGUpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpe0JkPWU7cmV0dXJufWxldCB0PVN0cmluZyhlfHwiIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7QmQ9WyJ0cnVlIiwieWVzIiwiMSIsIm9uIiwiZW5hYmxlZCJdLmluY2x1ZGVzKHQpfWZ1bmN0aW9uIEUoLi4uZSl7aWYoQmQpe2NvbnNvbGUubG9nKC4uLmUpO2xldCB0PXtpZDorK2UxLHRzOkRhdGUubm93KCksYXJnczplfTtEbC5wdXNoKHQpLERsLmxlbmd0aD50MSYmRGwuc2hpZnQoKSxzZXRUaW1lb3V0KCgpPT5IZC5mb3JFYWNoKG49Pm4odCkpLDApfX1mdW5jdGlvbiB2eSgpe3JldHVyblsuLi5EbF19ZnVuY3Rpb24gd3koZSl7SGQuYWRkKGUpfWZ1bmN0aW9uIGJ5KGUpe0hkLmRlbGV0ZShlKX12YXIgbWE9eyJkb21haW4td29yay11dWlkIjpbe3V1aWQ6Im5vdGUtd29yay0xIixuYW1lOiJRMSBHb2FsIFJldmlldyIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtd29yay0yIixuYW1lOiJTdGFuZC11cCBOb3RlcyIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtd29yay0zIixuYW1lOiJGZWF0dXJlIEltcGxlbWVudGF0aW9uIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS13b3JrLTQiLG5hbWU6IkRlc2lnbiBGZWVkYmFjayIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtd29yay01IixuYW1lOiJCdWRnZXQgVHJhY2tlciIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtd29yay02IixuYW1lOiJPZmZsaW5lIFRlc3RpbmciLHRhZ3M6WyJ3b3JrIl19LHt1dWlkOiJub3RlLXdvcmstNyIsbmFtZToiU3ByaW50IFJldHJvIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS13b3JrLTgiLG5hbWU6IkFQSSBMYXllciBSZXNlYXJjaCIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtd29yay05IixuYW1lOiJJbnRlZ3JhdGlvbiBUZXN0cyIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtd29yay0xMCIsbmFtZToiUHVsbCBSZXF1ZXN0IFF1ZXVlIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS13b3JrLTExIixuYW1lOiJTZXR0aW5ncyBNb2R1bGUgVGVzdHMiLHRhZ3M6WyJ3b3JrIl19LHt1dWlkOiJub3RlLXdvcmstMTIiLG5hbWU6IkNTUyBDbGVhbnVwIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS13b3JrLTEzIixuYW1lOiJEYXNoYm9hcmQgTWVtb3J5IExlYWsiLHRhZ3M6WyJ3b3JrIl19LHt1dWlkOiJub3RlLXdvcmstMTQiLG5hbWU6IkNsaWVudCBGZWVkYmFjayIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtd29yay0xNSIsbmFtZToiQVBJIEVycm9yIEhhbmRsaW5nIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS13b3JrLTE2IixuYW1lOiJBdXRoIFRva2VuIFJlZnJlc2giLHRhZ3M6WyJ3b3JrIl19LHt1dWlkOiJub3RlLXdvcmstMTciLG5hbWU6IkRCIFF1ZXJ5IFBlcmZvcm1hbmNlIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS1vbGQtM21vIixuYW1lOiJTZWN1cml0eSBCYWNrbG9nIChRNCkiLHRhZ3M6WyJ3b3JrIl19LHt1dWlkOiJub3RlLW9sZC00bW8iLG5hbWU6IlBsYXRmb3JtIE1pZ3JhdGlvbiBOb3RlcyIsdGFnczpbIndvcmsiXX0se3V1aWQ6Im5vdGUtb2xkLTVtbyIsbmFtZToiVGVjaCBEZWJ0IFRyYWNrZXIiLHRhZ3M6WyJ3b3JrIl19LHt1dWlkOiJub3RlLW9sZC02bW8iLG5hbWU6IkFiYW5kb25lZCBGZWF0dXJlIENvbmNlcHRzIix0YWdzOlsid29yayJdfSx7dXVpZDoibm90ZS1vbGQtN21vIixuYW1lOiJMZWdhY3kgU3lzdGVtIERvY3MiLHRhZ3M6WyJ3b3JrIl19XSwiZG9tYWluLXBlcnNvbmFsLXV1aWQiOlt7dXVpZDoibm90ZS1wZXJzb25hbC0xIixuYW1lOiJOZXR3b3JraW5nIE91dHJlYWNoIix0YWdzOlsicGVyc29uYWwiXX0se3V1aWQ6Im5vdGUtcGVyc29uYWwtMiIsbmFtZToiRml0bmVzcyBMb2ciLHRhZ3M6WyJwZXJzb25hbCJdfSx7dXVpZDoibm90ZS1wZXJzb25hbC0zIixuYW1lOiJTb2NpYWwgUmVtaW5kZXJzIix0YWdzOlsicGVyc29uYWwiXX0se3V1aWQ6Im5vdGUtcGVyc29uYWwtNCIsbmFtZToiRW50ZXJ0YWlubWVudCIsdGFnczpbInBlcnNvbmFsIl19LHt1dWlkOiJub3RlLXBlcnNvbmFsLTUiLG5hbWU6IlNob3BwaW5nIExpc3QiLHRhZ3M6WyJwZXJzb25hbCJdfSx7dXVpZDoibm90ZS1wZXJzb25hbC02IixuYW1lOiJIZWFsdGggQXBwb2ludG1lbnRzIix0YWdzOlsicGVyc29uYWwiXX0se3V1aWQ6Im5vdGUtcGVyc29uYWwtNyIsbmFtZToiUmVhZGluZyBMaXN0Iix0YWdzOlsicGVyc29uYWwiXX0se3V1aWQ6Im5vdGUtcGVyc29uYWwtOCIsbmFtZToiSG9iYmllcyIsdGFnczpbInBlcnNvbmFsIl19LHt1dWlkOiJub3RlLXBlcnNvbmFsLTkiLG5hbWU6IlRyaXAgUGxhbm5pbmciLHRhZ3M6WyJwZXJzb25hbCJdfSx7dXVpZDoibm90ZS1wZXJzb25hbC0xMCIsbmFtZToiSG9tZSBPZmZpY2UiLHRhZ3M6WyJwZXJzb25hbCJdfV0sImRvbWFpbi1zaWRlLXV1aWQiOlt7dXVpZDoibm90ZS1zaWRlLTEiLG5hbWU6IkJsb2cgUG9zdCBJZGVhcyIsdGFnczpbInNpZGUtcHJvamVjdHMiXX0se3V1aWQ6Im5vdGUtc2lkZS0yIixuYW1lOiJTaWRlIFByb2plY3QgUkVBRE1FIix0YWdzOlsic2lkZS1wcm9qZWN0cyJdfSx7dXVpZDoibm90ZS1zaWRlLTMiLG5hbWU6IkNJIFBpcGVsaW5lIFNldHVwIix0YWdzOlsic2lkZS1wcm9qZWN0cyJdfV19O2Z1bmN0aW9uIGt5KGUpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wuYXN5bmNJdGVyYXRvcix7dmFsdWU6ZnVuY3Rpb24oKXtsZXQgdD0wO3JldHVybntuZXh0OigpPT50PGUubGVuZ3RoP1Byb21pc2UucmVzb2x2ZSh7dmFsdWU6ZVt0KytdLGRvbmU6ITF9KTpQcm9taXNlLnJlc29sdmUoe2RvbmU6ITB9KX19fSksZX12YXIgeHk9IkNvbnNvbGUgbG9nZ2luZyIsbjE9bmV3IFNldChbImNoYW5nZWQiLCJjcmVhdGVkIiwib3BlbmVkIiwicmVsZXZhbmNlIiwidGl0bGUiLCJ1cGRhdGVkIl0pO2Z1bmN0aW9uIF9sKGUpe3JldHVybmBkYXNoYm9hcmRfJHtlfV9jb25maWdgfWZ1bmN0aW9uIFZkKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy51dWlkfWZ1bmN0aW9uIF95KGUpe3JldHVybihlLm1hdGNoKC9eKCN7MSw2fSlccysoLispJC9nbSl8fFtdKS5tYXAoKG4scik9Pih7aGVhZGluZzp7dGV4dDpuLnJlcGxhY2UoL14jezEsNn1ccysvLCIiKS50cmltKCksbGV2ZWw6KG4ubWF0Y2goL14jKy8pfHxbIiJdKVswXS5sZW5ndGh9LGluZGV4OnJ9KSl9ZnVuY3Rpb24gQ2woZSl7cmV0dXJuIGU9PW51bGw/bnVsbDplPDFlMTA/ZSoxZTM6ZX1mdW5jdGlvbiByMShlKXtsZXQgdD1uZXcgRGF0ZShlKSxuPXQuZ2V0RGF5KCk7cmV0dXJuIHQuc2V0RGF0ZSh0LmdldERhdGUoKS1uKyhuPT09MD8tNjoxKSksdC5zZXRIb3VycygwLDAsMCwwKSx0fWZ1bmN0aW9uIEtkKGUpe3JldHVybihlfHxbXSkubWFwKHQ9Pih7Li4udCxzY29yZTp0Py5zY29yZT8/dD8udmljdG9yeVZhbHVlPz8wfSkpfWZ1bmN0aW9uIG8xKGUsdCl7bGV0IG49bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSkuZ2V0VGltZSgpLHI9bis4NjRlNTtyZXR1cm4gZS5maWx0ZXIobz0+e2xldCBhPUNsKG8uc3RhcnRBdCk7cmV0dXJuIW8uY29tcGxldGVkQXQmJiFvLmRpc21pc3NlZEF0JiZhIT1udWxsJiZhPj1uJiZhPHJ9KX1mdW5jdGlvbiBDeShlLHQpe2xldCBuPXQuZ2V0VGltZSgpLHI9bis3Kjg2NGU1O3JldHVybiBlLmZpbHRlcihvPT57bGV0IGE9Q2woby5jb21wbGV0ZWRBdCk7cmV0dXJuIGEhPW51bGwmJmE+PW4mJmE8cn0pfWZ1bmN0aW9uIGExKGUsdCl7cmV0dXJuIEN5KGUsdCkucmVkdWNlKChuLHIpPT5uKyhyLnZpY3RvcnlWYWx1ZXx8MCksMCl9ZnVuY3Rpb24gaTEoZSx0KXtyZXR1cm5bIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCIsIlN1biJdLm1hcCgocixvKT0+e2xldCBhPW5ldyBEYXRlKHQpO2Euc2V0RGF0ZShhLmdldERhdGUoKStvKTtsZXQgaT1uZXcgRGF0ZShhKTtpLnNldERhdGUoaS5nZXREYXRlKCkrMSk7bGV0IHM9ZS5maWx0ZXIobD0+e2xldCBjPUNsKGwuY29tcGxldGVkQXQpO3JldHVybiBjIT1udWxsJiZjPj1hLmdldFRpbWUoKSYmYzxpLmdldFRpbWUoKX0pO3JldHVybntkYXk6cixkYXRlOmEudG9JU09TdHJpbmcoKSx2YWx1ZTpzLnJlZHVjZSgobCxjKT0+bCsoYy52aWN0b3J5VmFsdWV8fDApLDApLHRhc2tDb3VudDpzLmxlbmd0aH19KX1mdW5jdGlvbiBTeShlKXtsZXQgdD1bIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbj0oZS0xKSozO3JldHVyblt0W25dLHRbbisxXSx0W24rMl1dfWZ1bmN0aW9uIHMxKGUsdCl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTtuLnN0eWxlLmRpc3BsYXk9ImZsZXgiLG4uc3R5bGUuYWxpZ25JdGVtcz0iY2VudGVyIixuLnN0eWxlLmdhcD0iMTBweCI7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3IudGV4dENvbnRlbnQ9ZT8ubGFiZWx8fGBJbnB1dCAke3QrMX1gLHIuc3R5bGUubWluV2lkdGg9IjE0MHB4IixuLmFwcGVuZENoaWxkKHIpO2xldCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uc3R5bGUuZmxleD0iMSIsbi5hcHBlbmRDaGlsZChvKTtsZXQgYT1lPy50eXBlfHwidGV4dCIsaT1BcnJheS5pc0FycmF5KGU/Lm9wdGlvbnMpP2Uub3B0aW9uczpbXTtpZihhPT09ImNoZWNrYm94Iil7bGV0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gbC50eXBlPSJjaGVja2JveCIsbC5jaGVja2VkPSEhZT8udmFsdWUsby5hcHBlbmRDaGlsZChsKSx7bGluZTpuLGZvY3VzVGFyZ2V0OmwsZ2V0VmFsdWU6KCk9PmwuY2hlY2tlZH19aWYoYT09PSJyYWRpbyIpe2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuc3R5bGUuZGlzcGxheT0iZmxleCIsbC5zdHlsZS5mbGV4V3JhcD0id3JhcCIsbC5zdHlsZS5nYXA9IjEwcHgiO2xldCBjPWBkZXYtcHJvbXB0LXJhZGlvLSR7RGF0ZS5ub3coKX0tJHt0fWAsdT1udWxsO2ZvcihsZXRbcCxkXW9mIGkuZW50cmllcygpKXtsZXQgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO2guc3R5bGUuZGlzcGxheT0iaW5saW5lLWZsZXgiLGguc3R5bGUuYWxpZ25JdGVtcz0iY2VudGVyIixoLnN0eWxlLmdhcD0iNHB4IjtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3kudHlwZT0icmFkaW8iLHkubmFtZT1jLHkudmFsdWU9U3RyaW5nKGQ/LnZhbHVlPz9kPy5sYWJlbD8/IiIpLGU/LnZhbHVlIT1udWxsJiZTdHJpbmcoZS52YWx1ZSk9PT15LnZhbHVlJiYoeS5jaGVja2VkPSEwKSx1fHwodT15KTtsZXQgdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7dy50ZXh0Q29udGVudD1kPy5sYWJlbD8/eS52YWx1ZSxoLmFwcGVuZCh5LHcpLGwuYXBwZW5kQ2hpbGQoaCkscD09PWkubGVuZ3RoLTEmJiFsLnF1ZXJ5U2VsZWN0b3IoImlucHV0OmNoZWNrZWQiKSYmdSYmKHUuY2hlY2tlZD0hMCl9cmV0dXJuIG8uYXBwZW5kQ2hpbGQobCkse2xpbmU6bixmb2N1c1RhcmdldDp1LGdldFZhbHVlOigpPT57bGV0IHA9bC5xdWVyeVNlbGVjdG9yKCJpbnB1dDpjaGVja2VkIik7cmV0dXJuIHA/cC52YWx1ZTpudWxsfX19aWYoYT09PSJzZWxlY3QiKXtsZXQgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTtsLnN0eWxlLndpZHRoPSIxMDAlIjtmb3IobGV0IGMgb2YgaSl7bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7dS52YWx1ZT1TdHJpbmcoYz8udmFsdWU/P2M/LmxhYmVsPz8iIiksdS50ZXh0Q29udGVudD1jPy5sYWJlbD8/dS52YWx1ZSxsLmFwcGVuZENoaWxkKHUpfXJldHVybiBlPy52YWx1ZSE9bnVsbCYmKGwudmFsdWU9U3RyaW5nKGUudmFsdWUpKSxvLmFwcGVuZENoaWxkKGwpLHtsaW5lOm4sZm9jdXNUYXJnZXQ6bCxnZXRWYWx1ZTooKT0+bC52YWx1ZX19aWYoYT09PSJkYXRlIil7bGV0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtpZihsLnR5cGU9ImRhdGUiLGU/LnZhbHVlIT1udWxsKXtsZXQgYz1uZXcgRGF0ZShDbChOdW1iZXIoZS52YWx1ZSkpKTtOdW1iZXIuaXNOYU4oYy5nZXRUaW1lKCkpfHwobC52YWx1ZT1jLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCkpfXJldHVybiBsLnN0eWxlLndpZHRoPSIxMDAlIixvLmFwcGVuZENoaWxkKGwpLHtsaW5lOm4sZm9jdXNUYXJnZXQ6bCxnZXRWYWx1ZTooKT0+e2lmKCFsLnZhbHVlKXJldHVybiBudWxsO2xldCBjPURhdGUucGFyc2UoYCR7bC52YWx1ZX1UMDA6MDA6MDBaYCk7cmV0dXJuIE51bWJlci5pc05hTihjKT9udWxsOk1hdGguZmxvb3IoYy8xZTMpfX19aWYoYT09PSJ0ZXh0Iil7bGV0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtyZXR1cm4gbC5yb3dzPTIsbC5zdHlsZS53aWR0aD0iMTAwJSIsbC52YWx1ZT1TdHJpbmcoZT8udmFsdWU/PyIiKSxlPy5wbGFjZWhvbGRlciYmKGwucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlciksby5hcHBlbmRDaGlsZChsKSx7bGluZTpuLGZvY3VzVGFyZ2V0OmwsZ2V0VmFsdWU6KCk9PmwudmFsdWV9fWxldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIHMudHlwZT1hPT09InNlY3VyZVRleHQiPyJwYXNzd29yZCI6InRleHQiLHMuc3R5bGUud2lkdGg9IjEwMCUiLHMudmFsdWU9U3RyaW5nKGU/LnZhbHVlPz8iIiksZT8ucGxhY2Vob2xkZXImJihzLnBsYWNlaG9sZGVyPWUucGxhY2Vob2xkZXIpLG8uYXBwZW5kQ2hpbGQocykse2xpbmU6bixmb2N1c1RhcmdldDpzLGdldFZhbHVlOigpPT5zLnZhbHVlfX1mdW5jdGlvbiBsMShlLHQ9e30pe2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtsZXQgbj1BcnJheS5pc0FycmF5KHQ/LmlucHV0cykmJnQuaW5wdXRzLmxlbmd0aD4wP3QuaW5wdXRzOlt7dHlwZToidGV4dCJ9XSxyPUFycmF5LmlzQXJyYXkodD8uYWN0aW9ucyk/dC5hY3Rpb25zOltdO3JldHVybiBuZXcgUHJvbWlzZShvPT57bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5kYXRhc2V0LmRldlByb21wdD0ib3ZlcmxheSIsYS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGEuc3R5bGUuaW5zZXQ9IjAiLGEuc3R5bGUuYmFja2dyb3VuZD0icmdiYSgwLDAsMCwwLjM1KSIsYS5zdHlsZS56SW5kZXg9Ijk5OTk5IixhLnN0eWxlLmRpc3BsYXk9ImdyaWQiLGEuc3R5bGUucGxhY2VJdGVtcz0iY2VudGVyIjtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpLnN0eWxlLndpZHRoPSJtaW4oNjgwcHgsIDkydncpIixpLnN0eWxlLmJhY2tncm91bmQ9IiNmZmYiLGkuc3R5bGUuY29sb3I9IiMxMTEiLGkuc3R5bGUuYm9yZGVyUmFkaXVzPSIxMHB4IixpLnN0eWxlLnBhZGRpbmc9IjE2cHgiLGkuc3R5bGUuYm94U2hhZG93PSIwIDE2cHggNDhweCByZ2JhKDAsMCwwLDAuMjUpIixhLmFwcGVuZENoaWxkKGkpO2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3MudGV4dENvbnRlbnQ9U3RyaW5nKGU/PyJQcm9tcHQiKSxzLnN0eWxlLmZvbnRXZWlnaHQ9IjYwMCIscy5zdHlsZS5tYXJnaW5Cb3R0b209IjEycHgiLGkuYXBwZW5kQ2hpbGQocyk7bGV0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpO2wuc3R5bGUuZGlzcGxheT0iZmxleCIsbC5zdHlsZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iLGwuc3R5bGUuZ2FwPSIxMHB4IixpLmFwcGVuZENoaWxkKGwpO2xldCBjPW4ubWFwKCh3LGIpPT5zMSh3LGIpKTtmb3IobGV0IHcgb2YgYylsLmFwcGVuZENoaWxkKHcubGluZSk7bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5zdHlsZS5kaXNwbGF5PSJmbGV4Iix1LnN0eWxlLmp1c3RpZnlDb250ZW50PSJmbGV4LWVuZCIsdS5zdHlsZS5nYXA9IjhweCIsdS5zdHlsZS5tYXJnaW5Ub3A9IjhweCIsbC5hcHBlbmRDaGlsZCh1KTtsZXQgcD0tMTtmb3IobGV0W3csYl1vZiByLmVudHJpZXMoKSl7bGV0IGc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Zy50eXBlPSJidXR0b24iLGcudGV4dENvbnRlbnQ9Yj8ubGFiZWx8fGBBY3Rpb24gJHt3KzF9YCxnLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoKT0+e3A9Yj8udmFsdWU/P3csbC5yZXF1ZXN0U3VibWl0KCl9KSx1LmFwcGVuZENoaWxkKGcpfWxldCBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO2QudHlwZT0iYnV0dG9uIixkLmRhdGFzZXQuZGV2UHJvbXB0Q2FuY2VsPSJ0cnVlIixkLnRleHRDb250ZW50PSJDYW5jZWwiLGQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCgpPT57YS5yZW1vdmUoKSxvKG51bGwpfSksdS5hcHBlbmRDaGlsZChkKTtsZXQgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtoLnR5cGU9InN1Ym1pdCIsaC50ZXh0Q29udGVudD0iU3VibWl0Iix1LmFwcGVuZENoaWxkKGgpLGwuYWRkRXZlbnRMaXN0ZW5lcigic3VibWl0Iix3PT57dy5wcmV2ZW50RGVmYXVsdCgpO2xldCBiPWMubWFwKGc9PmcuZ2V0VmFsdWUoKSk7YS5yZW1vdmUoKSxiLmxlbmd0aD09PTEmJnIubGVuZ3RoPT09MD9vKGJbMF0pOnIubGVuZ3RoPT09MD9vKGIpOm8oWy4uLmIscF0pfSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtsZXQgeT1jLmZpbmQodz0+dy5mb2N1c1RhcmdldCk/LmZvY3VzVGFyZ2V0O3kmJnkuZm9jdXMoKX0pfXZhciBTaT1udWxsO2FzeW5jIGZ1bmN0aW9uIEF5KCl7aWYoU2khPT1udWxsKXJldHVybiBTaTt0cnl7U2k9YXdhaXQoYXdhaXQgZmV0Y2goIi9hcGkvc2V0dGluZ3MiKSkuanNvbigpfWNhdGNoe1NpPXt9fXJldHVybiBTaX1hc3luYyBmdW5jdGlvbiBjMShlLHQpe2xldCBuPWF3YWl0IEF5KCk7bltlXT10O3RyeXthd2FpdCBmZXRjaCgiL2FwaS9zZXR0aW5ncyIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHtrZXk6ZSx2YWx1ZTp0fSl9KX1jYXRjaChyKXtjb25zb2xlLndhcm4oIltkZXYtYXBwXSBmYWlsZWQgdG8gcGVyc2lzdCBzZXR0aW5nIixlLHIpfX1hc3luYyBmdW5jdGlvbiBqZCgpe3RyeXtsZXQgZT1hd2FpdCBmZXRjaCgiL2FwaS90YXNrcyIpO3JldHVybiBLZChhd2FpdCBlLmpzb24oKSl9Y2F0Y2h7cmV0dXJuW119fWFzeW5jIGZ1bmN0aW9uIHUxKGUsdCl7dHJ5e2xldCBuPWF3YWl0IGZldGNoKGAvYXBpL3Rhc2tzP2Zyb209JHtlfSZ0bz0ke3R9YCk7cmV0dXJuIEtkKGF3YWl0IG4uanNvbigpKX1jYXRjaHtyZXR1cm5bXX19YXN5bmMgZnVuY3Rpb24gRXkoZSl7dHJ5e2xldCB0PWU/YC9hcGkvbW9vZHM/ZnJvbT0ke2V9YDoiL2FwaS9tb29kcyI7cmV0dXJuIGF3YWl0KGF3YWl0IGZldGNoKHQpKS5qc29uKCl9Y2F0Y2h7cmV0dXJuW119fXZhciBkMT1be2lkOiJkb21haW4td29yay11dWlkIixuYW1lOiJXb3JrIix1dWlkOiJkb21haW4td29yay11dWlkIixub3RlczptYVsiZG9tYWluLXdvcmstdXVpZCJdfSx7aWQ6ImRvbWFpbi1wZXJzb25hbC11dWlkIixuYW1lOiJQZXJzb25hbCIsdXVpZDoiZG9tYWluLXBlcnNvbmFsLXV1aWQiLG5vdGVzOm1hWyJkb21haW4tcGVyc29uYWwtdXVpZCJdfSx7aWQ6ImRvbWFpbi1zaWRlLXV1aWQiLG5hbWU6IlNpZGUgUHJvamVjdHMiLHV1aWQ6ImRvbWFpbi1zaWRlLXV1aWQiLG5vdGVzOm1hWyJkb21haW4tc2lkZS11dWlkIl19XTtmdW5jdGlvbiBUeShlLHQ9IiIsbj0iIil7bGV0IHI9dHlwZW9mIG49PSJzdHJpbmciP24udHJpbSgpLnRvTG93ZXJDYXNlKCk6IiI7aWYoIW4xLmhhcyhyKXx8cj09PSJyZWxldmFuY2UiJiYhdClyZXR1cm4gZTtpZighWyJyZWxldmFuY2UiLCJ0aXRsZSJdLmluY2x1ZGVzKHIpKXJldHVyblsuLi5lXTtsZXQgbz10LnRyaW0oKS50b0xvd2VyQ2FzZSgpO3JldHVyblsuLi5lXS5zb3J0KChhLGkpPT57bGV0IHM9YT8ubmFtZXx8IiIsbD1pPy5uYW1lfHwiIjtpZihyPT09InRpdGxlIilyZXR1cm4gcy5sb2NhbGVDb21wYXJlKGwpO2xldCBjPXA9PntsZXQgZD1wLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGQ9PT1vPzM6ZC5zdGFydHNXaXRoKG8pPzI6ZC5pbmNsdWRlcyhvKT8xOjB9LHU9YyhsKS1jKHMpO3JldHVybiB1IT09MD91OnMubG9jYWxlQ29tcGFyZShsKX0pfWFzeW5jIGZ1bmN0aW9uIE55KGUpe3RyeXtyZXR1cm4gYXdhaXQoYXdhaXQgZmV0Y2goYC9hcGkvbm90ZS1maW5kP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoZSl9YCkpLmpzb24oKX1jYXRjaHtyZXR1cm4gbnVsbH19YXN5bmMgZnVuY3Rpb24gRHkoZSl7dHJ5e2xldCBuPWF3YWl0IFlkKCkuZ2V0Tm90ZUNvbnRlbnQoZSk7cmV0dXJuIF95KG58fCIiKX1jYXRjaHtyZXR1cm5bXX19dmFyIGdhPW51bGw7ZnVuY3Rpb24gWWQoKXtpZihnYSlyZXR1cm4gZ2E7bGV0IGU9dD0+e2xldCBuPS9eaHR0cHM6XC9cL3d3d1wuYW1wbGVub3RlXC5jb21cL25vdGVzKD86JHxbLz9dLiopLy50ZXN0KHQpO3JldHVybiBuP2NvbnNvbGUubG9nKCJbZGV2LWFwcF0gbmF2aWdhdGUiLHQpOmNvbnNvbGUud2FybigiW2Rldi1hcHBdIG5hdmlnYXRlIHJlamVjdGVkIGludmFsaWQgVVJMIix0KSxufTtyZXR1cm4gZ2E9e3NldHRpbmdzOnt9LGFzeW5jIGluaXQoKXtsZXQgdD1hd2FpdCBBeSgpO2lmKHRbeHldfHwodFt4eV09InRydWUiKSx0eXBlb2YgdC5kYXNoYm9hcmRfZWxlbWVudHM9PSJzdHJpbmciKXRyeXt0LmRhc2hib2FyZF9lbGVtZW50cz1KU09OLnBhcnNlKHQuZGFzaGJvYXJkX2VsZW1lbnRzKX1jYXRjaHt0LmRhc2hib2FyZF9lbGVtZW50cz1udWxsfWZvcihsZXQgdiBvZltfbCgidmljdG9yeS12YWx1ZSIpLF9sKCJjYWxlbmRhciIpLF9sKCJtb29kIiksX2woInF1b3RlcyIpXSlpZih0eXBlb2YgdFt2XT09InN0cmluZyIpdHJ5e3Rbdl09SlNPTi5wYXJzZSh0W3ZdKX1jYXRjaHt0W3ZdPW51bGx9bGV0IG49bmV3IERhdGUscj1yMShuKSxvPWF3YWl0IGpkKCksYT1hd2FpdCBFeSgpLGk9TWF0aC5jZWlsKChuLmdldE1vbnRoKCkrMSkvMykscz1gUSR7aX0gJHtuLmdldEZ1bGxZZWFyKCl9YCxsPWk9PT00PzE6aSsxLGM9aT09PTQ/bi5nZXRGdWxsWWVhcigpKzE6bi5nZXRGdWxsWWVhcigpLHU9YFEke2x9ICR7Y31gLFtwLGRdPWF3YWl0IFByb21pc2UuYWxsKFtOeShgJHtzfSBQbGFuYCksTnkoYCR7dX0gUGxhbmApXSksW2gseV09YXdhaXQgUHJvbWlzZS5hbGwoW3A/LnV1aWQ/RHkocC51dWlkKTpQcm9taXNlLnJlc29sdmUoW10pLGQ/LnV1aWQ/RHkoZC51dWlkKTpQcm9taXNlLnJlc29sdmUoW10pXSksdz1TeShpKSxiPVN5KGwpLGc9dy5ldmVyeSh2PT5oLnNvbWUoZj0+Zi5oZWFkaW5nPy50ZXh0Py50cmltKCkudG9Mb3dlckNhc2UoKT09PXYudG9Mb3dlckNhc2UoKSkpLG09Yi5ldmVyeSh2PT55LnNvbWUoZj0+Zi5oZWFkaW5nPy50ZXh0Py50cmltKCkudG9Mb3dlckNhc2UoKT09PXYudG9Mb3dlckNhc2UoKSkpO3JldHVybiBnYS5zZXR0aW5ncz10LHt0YXNrczpvLHRvZGF5VGFza3M6bzEobyxuKSxjb21wbGV0ZWRUaGlzV2VlazpDeShvLHIpLHdlZWtseVZpY3RvcnlWYWx1ZTphMShvLHIpLGRhaWx5VmljdG9yeVZhbHVlczppMShvLHIpLG1vb2RSYXRpbmdzOmEscXVhcnRlcmx5UGxhbnM6e2N1cnJlbnQ6e3llYXI6bi5nZXRGdWxsWWVhcigpLHF1YXJ0ZXI6aSxsYWJlbDpzLG5vdGVVVUlEOnA/LnV1aWQ/P251bGwsaGFzQWxsTW9udGhseURldGFpbHM6Z30sbmV4dDp7eWVhcjpjLHF1YXJ0ZXI6bCxsYWJlbDp1LG5vdGVVVUlEOmQ/LnV1aWQ/P251bGwsaGFzQWxsTW9udGhseURldGFpbHM6bX19LGN1cnJlbnREYXRlOm4udG9JU09TdHJpbmcoKSxzZXR0aW5nczp0LHRhc2tEb21haW5zOlt7bmFtZToiV29yayIsdXVpZDoiZG9tYWluLXdvcmstdXVpZCJ9LHtuYW1lOiJQZXJzb25hbCIsdXVpZDoiZG9tYWluLXBlcnNvbmFsLXV1aWQifSx7bmFtZToiU2lkZSBQcm9qZWN0cyIsdXVpZDoiZG9tYWluLXNpZGUtdXVpZCJ9XSxhY3RpdmVUYXNrRG9tYWluOiJkb21haW4td29yay11dWlkIn19LGFzeW5jIGNvbmZpZ3VyZSgpe3JldHVybiBudWxsfSxhc3luYyBnZXRNb29kUmF0aW5ncyh0KXtyZXR1cm4gRXkodCl9LGFzeW5jIGdldENvbXBsZXRlZFRhc2tzKHQsbil7cmV0dXJuIHUxKHQsbil9LGFzeW5jIGdldEV4dGVybmFsQ2FsZW5kYXJFdmVudHMoKXtsZXQgdD1uZXcgRGF0ZSxuPXQuZ2V0RnVsbFllYXIoKSxyPXQuZ2V0TW9udGgoKSxvPXQuZ2V0RGF0ZSgpO3JldHVyblt7YWxsRGF5OiExLGNhbGVuZGFyOnt1dWlkOiJjYWwtcGVyc29uYWwtdXVpZCIsbmFtZToiUGVyc29uYWwifSxjb2xvcjoiIzQyODVmNCIsZW5kOm5ldyBEYXRlKG4scixvLDE3LDAsMCksc3RhcnQ6bmV3IERhdGUobixyLG8sMTYsMCwwKSx0aXRsZToiQmlydGhkYXkgcGFydHkifSx7YWxsRGF5OiExLGNhbGVuZGFyOnt1dWlkOiJjYWwtd29yay11dWlkIixuYW1lOiJXb3JrIn0sY29sb3I6IiMwYjgwNDMiLGVuZDpuZXcgRGF0ZShuLHIsbysyLDEyLDI1LDApLHN0YXJ0Om5ldyBEYXRlKG4scixvKzIsMTEsMjUsMCksdGl0bGU6IlF1YXJ0ZXJseSBSZXZpZXcgU3luYyJ9XX0sYXN5bmMgZ2V0VGFza0RvbWFpbnMoKXtyZXR1cm4gZDF9LGFzeW5jIGdldFRhc2tEb21haW5UYXNrcyh0KXtsZXQgbj10P2AvYXBpL3Rhc2tzP2RvbWFpbj0ke2VuY29kZVVSSUNvbXBvbmVudCh0KX1gOiIvYXBpL3Rhc2tzIixyPWF3YWl0IGZldGNoKG4pO3JldHVybiBLZChhd2FpdCByLmpzb24oKSl9LGFzeW5jIGdldE5vdGVUYXNrcyh0LG4pe2xldCByPXR5cGVvZiB0PT0ic3RyaW5nIj90OnQ/LnV1aWQ7cmV0dXJuKGF3YWl0IGpkKCkpLmZpbHRlcihhPT5hLm5vdGVVVUlEPT09ciYmYS5jb21wbGV0ZWRBdD09bnVsbCYmYS5kaXNtaXNzZWRBdD09bnVsbCl9LGFzeW5jIGdldFRhc2sodCl7cmV0dXJuKGF3YWl0IGpkKCkpLmZpbmQocj0+ci51dWlkPT09dCl8fG51bGx9LG5hdmlnYXRlKHQpe3JldHVybiBlKHQpfSxhc3luYyBzZXRTZXR0aW5nKHQsbil7bGV0IHI9bj09bnVsbD8iIjpTdHJpbmcobik7Z2Euc2V0dGluZ3NbdF09cixhd2FpdCBjMSh0LHIpfSxhc3luYyByZWNvcmRNb29kUmF0aW5nKHQpe3RyeXtyZXR1cm4oYXdhaXQoYXdhaXQgZmV0Y2goIi9hcGkvbW9vZHMiLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dmFsdWU6dH0pfSkpLmpzb24oKSkudXVpZH1jYXRjaChuKXtyZXR1cm4gRSgiW2Rldi1hcHBdIHJlY29yZE1vb2RSYXRpbmcgZmFpbGVkOiIsbiksbnVsbH19LGFzeW5jIHVwZGF0ZU1vb2RSYXRpbmcodCxuKXt0cnl7YXdhaXQgZmV0Y2goIi9hcGkvbW9vZHMiLHttZXRob2Q6IlBBVENIIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3V1aWQ6dCx1cGRhdGVzOm59KX0pfWNhdGNoKHIpe0UoIltkZXYtYXBwXSB1cGRhdGVNb29kUmF0aW5nIGZhaWxlZDoiLHIpfX0sYXN5bmMgZ2V0Tm90ZUNvbnRlbnQodCl7bGV0IG49VmQodCk7dHJ5e3JldHVybihhd2FpdChhd2FpdCBmZXRjaChgL2FwaS9ub3RlLWNvbnRlbnQ/dXVpZD0ke2VuY29kZVVSSUNvbXBvbmVudChuKX1gKSkuanNvbigpKS5jb250ZW50Pz8iIn1jYXRjaHtyZXR1cm4iIn19LGFzeW5jIGdldE5vdGVTZWN0aW9ucyh0KXtsZXQgbj1hd2FpdCB0aGlzLmdldE5vdGVDb250ZW50KHQpO3JldHVybiBfeShuKX0sYXN5bmMgZmluZE5vdGUodD17fSl7dHJ5e2xldCBuPXQudXVpZD9gdXVpZD0ke2VuY29kZVVSSUNvbXBvbmVudCh0LnV1aWQpfWA6YG5hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodC5uYW1lKX1gLG89YXdhaXQoYXdhaXQgZmV0Y2goYC9hcGkvbm90ZS1maW5kPyR7bn1gKSkuanNvbigpO3JldHVybiBvPy51dWlkP286bnVsbH1jYXRjaHtyZXR1cm4gbnVsbH19LGZpbHRlck5vdGVzKHQ9e30sbj0iIil7bGV0IHI7aWYodC50YXNrRG9tYWluVVVJRClyPVR5KG1hW3QudGFza0RvbWFpblVVSURdfHxbXSx0LnF1ZXJ5LG4pO2Vsc2V7bGV0IG89T2JqZWN0LnZhbHVlcyhtYSkuZmxhdCgpLGE9dC5xdWVyeT9vLmZpbHRlcihpPT4oaS5uYW1lfHwiIikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpKTpvO3I9VHkoYSx0LnF1ZXJ5fHxudWxsLG4pfXJldHVybiBreShyKX0sYXN5bmMgdXBkYXRlVGFzayh0LG4pe3JldHVybiBFKCJbZGV2LWFwcF0gdXBkYXRlVGFzayIsdCxuKSwhMH0sYXN5bmMgY3JlYXRlTm90ZSh0LG49W10pe3RyeXtyZXR1cm4oYXdhaXQoYXdhaXQgZmV0Y2goIi9hcGkvbm90ZS1jcmVhdGUiLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7bmFtZTp0LHRhZ3M6bn0pfSkpLmpzb24oKSkudXVpZH1jYXRjaHtyZXR1cm4gbnVsbH19LGFzeW5jIHJlcGxhY2VOb3RlQ29udGVudCh0LG4scj17fSl7bGV0IG89VmQodCk7dHJ5e2xldCBhPXt1dWlkOm8sY29udGVudDpufTtyZXR1cm4gci5zZWN0aW9uJiYoYS5zZWN0aW9uPXIuc2VjdGlvbiksKGF3YWl0KGF3YWl0IGZldGNoKCIvYXBpL25vdGUtY29udGVudCIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KGEpfSkpLmpzb24oKSkub2t8fCExfWNhdGNoe3JldHVybiExfX0sYXN5bmMgaW5zZXJ0Tm90ZUNvbnRlbnQodCxuLHI9e30pe2xldCBvPVZkKHQpO3RyeXthd2FpdCBmZXRjaCgiL2FwaS9ub3RlLWFwcGVuZCIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1dWlkOm8sY29udGVudDpuLGF0RW5kOiEhci5hdEVuZH0pfSl9Y2F0Y2h7fX0sYXN5bmMgYXR0YWNoTm90ZU1lZGlhKHQsbil7RSgiW2Rldi1hcHBdIGF0dGFjaE5vdGVNZWRpYSBjYWxsZWQsIGRhdGFVUkwgbGVuZ3RoOiIsbj8ubGVuZ3RofHwwKTt0cnl7bGV0IGE9KGF3YWl0KGF3YWl0IGZldGNoKCIvYXBpL2F0dGFjaC1tZWRpYSIse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHtkYXRhVVJMOm59KX0pKS5qc29uKCkpLnVybHx8bnVsbDtyZXR1cm4gRSgiW2Rldi1hcHBdIGF0dGFjaE5vdGVNZWRpYSByZXNwb25zZToiLGE/YFVSTCByZWNlaXZlZDogJHthfWA6Im5vIFVSTCBpbiByZXNwb25zZSIpLGF9Y2F0Y2gocil7cmV0dXJuIEUoIltkZXYtYXBwXSBhdHRhY2hOb3RlTWVkaWEgRkFJTEVEOiIsciksbnVsbH19LGFzeW5jIHByb21wdCh0LG49e30pe3JldHVybiBsMSh0LG4pfX0sZ2F9dmFyIG1lPXooeWUoKSwxKTt2YXIgRWk9WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHAxPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0scWQ9Y2xhc3N7Y29uc3RydWN0b3Ioe2luZGV4OnQsc2hvcnQ6bixmdWxsOnIscGxhbjpvLGN1cnJlbnQ6YX0pe3RoaXMuaW5kZXg9dCx0aGlzLnNob3J0PW4sdGhpcy5mdWxsPXIsdGhpcy5wbGFuPW8sdGhpcy5jdXJyZW50PWF9fTtmdW5jdGlvbiBRZCgpe2xldCBlPW5ldyBEYXRlLHQ9ZS5nZXRGdWxsWWVhcigpLG49ZS5nZXRNb250aCgpLHI9TWF0aC5mbG9vcihuLzMpKzE7cmV0dXJue3llYXI6dCxxdWFydGVyOnIsbGFiZWw6YFEke3J9ICR7dH1gfX1mdW5jdGlvbiBPeShlLHQpe2xldCBuPShlLnF1YXJ0ZXItMSkqMyxyPW5ldyBEYXRlKCkuZ2V0TW9udGgoKSxvPVtdO2ZvcihsZXQgYT0wO2E8NjthKyspe2xldCBpPShuK2EpJTEyO28ucHVzaChuZXcgcWQoe2luZGV4Omksc2hvcnQ6cDFbaV0sZnVsbDpFaVtpXSxwbGFuOmE8Mz9lOnQsY3VycmVudDppPT09cn0pKX1yZXR1cm4gb31mdW5jdGlvbiBBbCgpe2xldCBlPW5ldyBEYXRlLHQ9ZS5nZXREYXkoKSxuO3JldHVybiB0PT09Nj9uPTI6dD09PTA/bj0xOm49MS10LG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCkrbil9ZnVuY3Rpb24gT2woZSl7cmV0dXJuYFdlZWsgb2YgJHtFaVtlLmdldE1vbnRoKCldfSAke2UuZ2V0RGF0ZSgpfWB9ZnVuY3Rpb24geWEoZSx0KXtsZXQgbj10LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIikscj1uZXcgUmVnRXhwKGAoXnxcXG4pKCN7MSw2fSlcXHMrJHtufVxccypcXG5gLCJpIiksbz1lLm1hdGNoKHIpO2lmKCFvKXJldHVybiBudWxsO2xldCBhPW8uaW5kZXgrb1swXS5sZW5ndGgsaT1lLnN1YnN0cmluZyhhKSxzPWkubWF0Y2goL1xuI3sxLDZ9XHMvKTtyZXR1cm4ocz9pLnN1YnN0cmluZygwLHMuaW5kZXgpOmkpLnRyaW0oKX1mdW5jdGlvbiBKZChlKXtyZXR1cm5gCiMjIyAke2V9Ci0gRm9jdXM6Ci0gS2V5IG1vdmU6CmB9ZnVuY3Rpb24gWGQoZSl7cmV0dXJuYAojIyMgJHtlfQotIFByaW1hcnkgZm9jdXM6Ci0gS2V5IHRhc2tzOgotIENvbW1pdG1lbnRzOgpgfXZhciBRZT0idG9wIixzdD0iYm90dG9tIixvdD0icmlnaHQiLHR0PSJsZWZ0IixJbD0iYXV0byIsQnI9W1FlLHN0LG90LHR0XSxjcj0ic3RhcnQiLHlvPSJlbmQiLEl5PSJjbGlwcGluZ1BhcmVudHMiLFJsPSJ2aWV3cG9ydCIsdmE9InBvcHBlciIsUnk9InJlZmVyZW5jZSIsWmQ9QnIucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY29uY2F0KFt0KyItIitjcix0KyItIit5b10pfSxbXSksTWw9W10uY29uY2F0KEJyLFtJbF0pLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlLmNvbmNhdChbdCx0KyItIitjcix0KyItIit5b10pfSxbXSksZjE9ImJlZm9yZVJlYWQiLGgxPSJyZWFkIixtMT0iYWZ0ZXJSZWFkIixnMT0iYmVmb3JlTWFpbiIseTE9Im1haW4iLHYxPSJhZnRlck1haW4iLHcxPSJiZWZvcmVXcml0ZSIsYjE9IndyaXRlIixrMT0iYWZ0ZXJXcml0ZSIsTXk9W2YxLGgxLG0xLGcxLHkxLHYxLHcxLGIxLGsxXTtmdW5jdGlvbiBkdChlKXtyZXR1cm4gZT8oZS5ub2RlTmFtZXx8IiIpLnRvTG93ZXJDYXNlKCk6bnVsbH1mdW5jdGlvbiBCZShlKXtpZihlPT1udWxsKXJldHVybiB3aW5kb3c7aWYoZS50b1N0cmluZygpIT09IltvYmplY3QgV2luZG93XSIpe3ZhciB0PWUub3duZXJEb2N1bWVudDtyZXR1cm4gdCYmdC5kZWZhdWx0Vmlld3x8d2luZG93fXJldHVybiBlfWZ1bmN0aW9uIHVuKGUpe3ZhciB0PUJlKGUpLkVsZW1lbnQ7cmV0dXJuIGUgaW5zdGFuY2VvZiB0fHxlIGluc3RhbmNlb2YgRWxlbWVudH1mdW5jdGlvbiBsdChlKXt2YXIgdD1CZShlKS5IVE1MRWxlbWVudDtyZXR1cm4gZSBpbnN0YW5jZW9mIHR8fGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH1mdW5jdGlvbiB3YShlKXtpZih0eXBlb2YgU2hhZG93Um9vdD4idSIpcmV0dXJuITE7dmFyIHQ9QmUoZSkuU2hhZG93Um9vdDtyZXR1cm4gZSBpbnN0YW5jZW9mIHR8fGUgaW5zdGFuY2VvZiBTaGFkb3dSb290fWZ1bmN0aW9uIHgxKGUpe3ZhciB0PWUuc3RhdGU7T2JqZWN0LmtleXModC5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj10LnN0eWxlc1tuXXx8e30sbz10LmF0dHJpYnV0ZXNbbl18fHt9LGE9dC5lbGVtZW50c1tuXTshbHQoYSl8fCFkdChhKXx8KE9iamVjdC5hc3NpZ24oYS5zdHlsZSxyKSxPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPW9baV07cz09PSExP2EucmVtb3ZlQXR0cmlidXRlKGkpOmEuc2V0QXR0cmlidXRlKGkscz09PSEwPyIiOnMpfSkpfSl9ZnVuY3Rpb24gUzEoZSl7dmFyIHQ9ZS5zdGF0ZSxuPXtwb3BwZXI6e3Bvc2l0aW9uOnQub3B0aW9ucy5zdHJhdGVneSxsZWZ0OiIwIix0b3A6IjAiLG1hcmdpbjoiMCJ9LGFycm93Ontwb3NpdGlvbjoiYWJzb2x1dGUifSxyZWZlcmVuY2U6e319O3JldHVybiBPYmplY3QuYXNzaWduKHQuZWxlbWVudHMucG9wcGVyLnN0eWxlLG4ucG9wcGVyKSx0LnN0eWxlcz1uLHQuZWxlbWVudHMuYXJyb3cmJk9iamVjdC5hc3NpZ24odC5lbGVtZW50cy5hcnJvdy5zdHlsZSxuLmFycm93KSxmdW5jdGlvbigpe09iamVjdC5rZXlzKHQuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG89dC5lbGVtZW50c1tyXSxhPXQuYXR0cmlidXRlc1tyXXx8e30saT1PYmplY3Qua2V5cyh0LnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShyKT90LnN0eWxlc1tyXTpuW3JdKSxzPWkucmVkdWNlKGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGxbY109IiIsbH0se30pOyFsdChvKXx8IWR0KG8pfHwoT2JqZWN0LmFzc2lnbihvLnN0eWxlLHMpLE9iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24obCl7by5yZW1vdmVBdHRyaWJ1dGUobCl9KSl9KX19dmFyIFRpPXtuYW1lOiJhcHBseVN0eWxlcyIsZW5hYmxlZDohMCxwaGFzZToid3JpdGUiLGZuOngxLGVmZmVjdDpTMSxyZXF1aXJlczpbImNvbXB1dGVTdHlsZXMiXX07ZnVuY3Rpb24gcHQoZSl7cmV0dXJuIGUuc3BsaXQoIi0iKVswXX12YXIgX249TWF0aC5tYXgsdm89TWF0aC5taW4sdXI9TWF0aC5yb3VuZDtmdW5jdGlvbiBiYSgpe3ZhciBlPW5hdmlnYXRvci51c2VyQWdlbnREYXRhO3JldHVybiBlIT1udWxsJiZlLmJyYW5kcyYmQXJyYXkuaXNBcnJheShlLmJyYW5kcyk/ZS5icmFuZHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJyYW5kKyIvIit0LnZlcnNpb259KS5qb2luKCIgIik6bmF2aWdhdG9yLnVzZXJBZ2VudH1mdW5jdGlvbiBOaSgpe3JldHVybiEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KGJhKCkpfWZ1bmN0aW9uIGRuKGUsdCxuKXt0PT09dm9pZCAwJiYodD0hMSksbj09PXZvaWQgMCYmKG49ITEpO3ZhciByPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz0xLGE9MTt0JiZsdChlKSYmKG89ZS5vZmZzZXRXaWR0aD4wJiZ1cihyLndpZHRoKS9lLm9mZnNldFdpZHRofHwxLGE9ZS5vZmZzZXRIZWlnaHQ+MCYmdXIoci5oZWlnaHQpL2Uub2Zmc2V0SGVpZ2h0fHwxKTt2YXIgaT11bihlKT9CZShlKTp3aW5kb3cscz1pLnZpc3VhbFZpZXdwb3J0LGw9IU5pKCkmJm4sYz0oci5sZWZ0KyhsJiZzP3Mub2Zmc2V0TGVmdDowKSkvbyx1PShyLnRvcCsobCYmcz9zLm9mZnNldFRvcDowKSkvYSxwPXIud2lkdGgvbyxkPXIuaGVpZ2h0L2E7cmV0dXJue3dpZHRoOnAsaGVpZ2h0OmQsdG9wOnUscmlnaHQ6YytwLGJvdHRvbTp1K2QsbGVmdDpjLHg6Yyx5OnV9fWZ1bmN0aW9uIHdvKGUpe3ZhciB0PWRuKGUpLG49ZS5vZmZzZXRXaWR0aCxyPWUub2Zmc2V0SGVpZ2h0O3JldHVybiBNYXRoLmFicyh0LndpZHRoLW4pPD0xJiYobj10LndpZHRoKSxNYXRoLmFicyh0LmhlaWdodC1yKTw9MSYmKHI9dC5oZWlnaHQpLHt4OmUub2Zmc2V0TGVmdCx5OmUub2Zmc2V0VG9wLHdpZHRoOm4saGVpZ2h0OnJ9fWZ1bmN0aW9uIERpKGUsdCl7dmFyIG49dC5nZXRSb290Tm9kZSYmdC5nZXRSb290Tm9kZSgpO2lmKGUuY29udGFpbnModCkpcmV0dXJuITA7aWYobiYmd2Eobikpe3ZhciByPXQ7ZG97aWYociYmZS5pc1NhbWVOb2RlKHIpKXJldHVybiEwO3I9ci5wYXJlbnROb2RlfHxyLmhvc3R9d2hpbGUocil9cmV0dXJuITF9ZnVuY3Rpb24gT3QoZSl7cmV0dXJuIEJlKGUpLmdldENvbXB1dGVkU3R5bGUoZSl9ZnVuY3Rpb24gZXAoZSl7cmV0dXJuWyJ0YWJsZSIsInRkIiwidGgiXS5pbmRleE9mKGR0KGUpKT49MH1mdW5jdGlvbiBndChlKXtyZXR1cm4oKHVuKGUpP2Uub3duZXJEb2N1bWVudDplLmRvY3VtZW50KXx8d2luZG93LmRvY3VtZW50KS5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gZHIoZSl7cmV0dXJuIGR0KGUpPT09Imh0bWwiP2U6ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8KHdhKGUpP2UuaG9zdDpudWxsKXx8Z3QoZSl9ZnVuY3Rpb24gUHkoZSl7cmV0dXJuIWx0KGUpfHxPdChlKS5wb3NpdGlvbj09PSJmaXhlZCI/bnVsbDplLm9mZnNldFBhcmVudH1mdW5jdGlvbiBFMShlKXt2YXIgdD0vZmlyZWZveC9pLnRlc3QoYmEoKSksbj0vVHJpZGVudC9pLnRlc3QoYmEoKSk7aWYobiYmbHQoZSkpe3ZhciByPU90KGUpO2lmKHIucG9zaXRpb249PT0iZml4ZWQiKXJldHVybiBudWxsfXZhciBvPWRyKGUpO2Zvcih3YShvKSYmKG89by5ob3N0KTtsdChvKSYmWyJodG1sIiwiYm9keSJdLmluZGV4T2YoZHQobykpPDA7KXt2YXIgYT1PdChvKTtpZihhLnRyYW5zZm9ybSE9PSJub25lInx8YS5wZXJzcGVjdGl2ZSE9PSJub25lInx8YS5jb250YWluPT09InBhaW50Inx8WyJ0cmFuc2Zvcm0iLCJwZXJzcGVjdGl2ZSJdLmluZGV4T2YoYS53aWxsQ2hhbmdlKSE9PS0xfHx0JiZhLndpbGxDaGFuZ2U9PT0iZmlsdGVyInx8dCYmYS5maWx0ZXImJmEuZmlsdGVyIT09Im5vbmUiKXJldHVybiBvO289by5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIENuKGUpe2Zvcih2YXIgdD1CZShlKSxuPVB5KGUpO24mJmVwKG4pJiZPdChuKS5wb3NpdGlvbj09PSJzdGF0aWMiOyluPVB5KG4pO3JldHVybiBuJiYoZHQobik9PT0iaHRtbCJ8fGR0KG4pPT09ImJvZHkiJiZPdChuKS5wb3NpdGlvbj09PSJzdGF0aWMiKT90Om58fEUxKGUpfHx0fWZ1bmN0aW9uIGJvKGUpe3JldHVyblsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihlKT49MD8ieCI6InkifWZ1bmN0aW9uIGtvKGUsdCxuKXtyZXR1cm4gX24oZSx2byh0LG4pKX1mdW5jdGlvbiBMeShlLHQsbil7dmFyIHI9a28oZSx0LG4pO3JldHVybiByPm4/bjpyfWZ1bmN0aW9uIF9pKCl7cmV0dXJue3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfX1mdW5jdGlvbiBDaShlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxfaSgpLGUpfWZ1bmN0aW9uIEFpKGUsdCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKG4scil7cmV0dXJuIG5bcl09ZSxufSx7fSl9dmFyIFQxPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChPYmplY3QuYXNzaWduKHt9LG4ucmVjdHMse3BsYWNlbWVudDpuLnBsYWNlbWVudH0pKTp0LENpKHR5cGVvZiB0IT0ibnVtYmVyIj90OkFpKHQsQnIpKX07ZnVuY3Rpb24gTjEoZSl7dmFyIHQsbj1lLnN0YXRlLHI9ZS5uYW1lLG89ZS5vcHRpb25zLGE9bi5lbGVtZW50cy5hcnJvdyxpPW4ubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLHM9cHQobi5wbGFjZW1lbnQpLGw9Ym8ocyksYz1bdHQsb3RdLmluZGV4T2Yocyk+PTAsdT1jPyJoZWlnaHQiOiJ3aWR0aCI7aWYoISghYXx8IWkpKXt2YXIgcD1UMShvLnBhZGRpbmcsbiksZD13byhhKSxoPWw9PT0ieSI/UWU6dHQseT1sPT09InkiP3N0Om90LHc9bi5yZWN0cy5yZWZlcmVuY2VbdV0rbi5yZWN0cy5yZWZlcmVuY2VbbF0taVtsXS1uLnJlY3RzLnBvcHBlclt1XSxiPWlbbF0tbi5yZWN0cy5yZWZlcmVuY2VbbF0sZz1DbihhKSxtPWc/bD09PSJ5Ij9nLmNsaWVudEhlaWdodHx8MDpnLmNsaWVudFdpZHRofHwwOjAsdj13LzItYi8yLGY9cFtoXSx4PW0tZFt1XS1wW3ldLFM9bS8yLWRbdV0vMit2LE49a28oZixTLHgpLEQ9bDtuLm1vZGlmaWVyc0RhdGFbcl09KHQ9e30sdFtEXT1OLHQuY2VudGVyT2Zmc2V0PU4tUyx0KX19ZnVuY3Rpb24gRDEoZSl7dmFyIHQ9ZS5zdGF0ZSxuPWUub3B0aW9ucyxyPW4uZWxlbWVudCxvPXI9PT12b2lkIDA/IltkYXRhLXBvcHBlci1hcnJvd10iOnI7byE9bnVsbCYmKHR5cGVvZiBvPT0ic3RyaW5nIiYmKG89dC5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihvKSwhbyl8fERpKHQuZWxlbWVudHMucG9wcGVyLG8pJiYodC5lbGVtZW50cy5hcnJvdz1vKSl9dmFyIHp5PXtuYW1lOiJhcnJvdyIsZW5hYmxlZDohMCxwaGFzZToibWFpbiIsZm46TjEsZWZmZWN0OkQxLHJlcXVpcmVzOlsicG9wcGVyT2Zmc2V0cyJdLHJlcXVpcmVzSWZFeGlzdHM6WyJwcmV2ZW50T3ZlcmZsb3ciXX07ZnVuY3Rpb24gcG4oZSl7cmV0dXJuIGUuc3BsaXQoIi0iKVsxXX12YXIgXzE9e3RvcDoiYXV0byIscmlnaHQ6ImF1dG8iLGJvdHRvbToiYXV0byIsbGVmdDoiYXV0byJ9O2Z1bmN0aW9uIEMxKGUsdCl7dmFyIG49ZS54LHI9ZS55LG89dC5kZXZpY2VQaXhlbFJhdGlvfHwxO3JldHVybnt4OnVyKG4qbykvb3x8MCx5OnVyKHIqbykvb3x8MH19ZnVuY3Rpb24gRnkoZSl7dmFyIHQsbj1lLnBvcHBlcixyPWUucG9wcGVyUmVjdCxvPWUucGxhY2VtZW50LGE9ZS52YXJpYXRpb24saT1lLm9mZnNldHMscz1lLnBvc2l0aW9uLGw9ZS5ncHVBY2NlbGVyYXRpb24sYz1lLmFkYXB0aXZlLHU9ZS5yb3VuZE9mZnNldHMscD1lLmlzRml4ZWQsZD1pLngsaD1kPT09dm9pZCAwPzA6ZCx5PWkueSx3PXk9PT12b2lkIDA/MDp5LGI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dSh7eDpoLHk6d30pOnt4OmgseTp3fTtoPWIueCx3PWIueTt2YXIgZz1pLmhhc093blByb3BlcnR5KCJ4IiksbT1pLmhhc093blByb3BlcnR5KCJ5Iiksdj10dCxmPVFlLHg9d2luZG93O2lmKGMpe3ZhciBTPUNuKG4pLE49ImNsaWVudEhlaWdodCIsRD0iY2xpZW50V2lkdGgiO2lmKFM9PT1CZShuKSYmKFM9Z3QobiksT3QoUykucG9zaXRpb24hPT0ic3RhdGljIiYmcz09PSJhYnNvbHV0ZSImJihOPSJzY3JvbGxIZWlnaHQiLEQ9InNjcm9sbFdpZHRoIikpLFM9UyxvPT09UWV8fChvPT09dHR8fG89PT1vdCkmJmE9PT15byl7Zj1zdDt2YXIgXz1wJiZTPT09eCYmeC52aXN1YWxWaWV3cG9ydD94LnZpc3VhbFZpZXdwb3J0LmhlaWdodDpTW05dO3ctPV8tci5oZWlnaHQsdyo9bD8xOi0xfWlmKG89PT10dHx8KG89PT1RZXx8bz09PXN0KSYmYT09PXlvKXt2PW90O3ZhciBBPXAmJlM9PT14JiZ4LnZpc3VhbFZpZXdwb3J0P3gudmlzdWFsVmlld3BvcnQud2lkdGg6U1tEXTtoLT1BLXIud2lkdGgsaCo9bD8xOi0xfX12YXIgUD1PYmplY3QuYXNzaWduKHtwb3NpdGlvbjpzfSxjJiZfMSksST11PT09ITA/QzEoe3g6aCx5Ond9LEJlKG4pKTp7eDpoLHk6d307aWYoaD1JLngsdz1JLnksbCl7dmFyIEw7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sUCwoTD17fSxMW2ZdPW0/IjAiOiIiLExbdl09Zz8iMCI6IiIsTC50cmFuc2Zvcm09KHguZGV2aWNlUGl4ZWxSYXRpb3x8MSk8PTE/InRyYW5zbGF0ZSgiK2grInB4LCAiK3crInB4KSI6InRyYW5zbGF0ZTNkKCIraCsicHgsICIrdysicHgsIDApIixMKSl9cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sUCwodD17fSx0W2ZdPW0/dysicHgiOiIiLHRbdl09Zz9oKyJweCI6IiIsdC50cmFuc2Zvcm09IiIsdCkpfWZ1bmN0aW9uIEExKGUpe3ZhciB0PWUuc3RhdGUsbj1lLm9wdGlvbnMscj1uLmdwdUFjY2VsZXJhdGlvbixvPXI9PT12b2lkIDA/ITA6cixhPW4uYWRhcHRpdmUsaT1hPT09dm9pZCAwPyEwOmEscz1uLnJvdW5kT2Zmc2V0cyxsPXM9PT12b2lkIDA/ITA6cyxjPXtwbGFjZW1lbnQ6cHQodC5wbGFjZW1lbnQpLHZhcmlhdGlvbjpwbih0LnBsYWNlbWVudCkscG9wcGVyOnQuZWxlbWVudHMucG9wcGVyLHBvcHBlclJlY3Q6dC5yZWN0cy5wb3BwZXIsZ3B1QWNjZWxlcmF0aW9uOm8saXNGaXhlZDp0Lm9wdGlvbnMuc3RyYXRlZ3k9PT0iZml4ZWQifTt0Lm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyE9bnVsbCYmKHQuc3R5bGVzLnBvcHBlcj1PYmplY3QuYXNzaWduKHt9LHQuc3R5bGVzLnBvcHBlcixGeShPYmplY3QuYXNzaWduKHt9LGMse29mZnNldHM6dC5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMscG9zaXRpb246dC5vcHRpb25zLnN0cmF0ZWd5LGFkYXB0aXZlOmkscm91bmRPZmZzZXRzOmx9KSkpKSx0Lm1vZGlmaWVyc0RhdGEuYXJyb3chPW51bGwmJih0LnN0eWxlcy5hcnJvdz1PYmplY3QuYXNzaWduKHt9LHQuc3R5bGVzLmFycm93LEZ5KE9iamVjdC5hc3NpZ24oe30sYyx7b2Zmc2V0czp0Lm1vZGlmaWVyc0RhdGEuYXJyb3cscG9zaXRpb246ImFic29sdXRlIixhZGFwdGl2ZTohMSxyb3VuZE9mZnNldHM6bH0pKSkpLHQuYXR0cmlidXRlcy5wb3BwZXI9T2JqZWN0LmFzc2lnbih7fSx0LmF0dHJpYnV0ZXMucG9wcGVyLHsiZGF0YS1wb3BwZXItcGxhY2VtZW50Ijp0LnBsYWNlbWVudH0pfXZhciBVeT17bmFtZToiY29tcHV0ZVN0eWxlcyIsZW5hYmxlZDohMCxwaGFzZToiYmVmb3JlV3JpdGUiLGZuOkExLGRhdGE6e319O3ZhciBQbD17cGFzc2l2ZTohMH07ZnVuY3Rpb24gTzEoZSl7dmFyIHQ9ZS5zdGF0ZSxuPWUuaW5zdGFuY2Uscj1lLm9wdGlvbnMsbz1yLnNjcm9sbCxhPW89PT12b2lkIDA/ITA6byxpPXIucmVzaXplLHM9aT09PXZvaWQgMD8hMDppLGw9QmUodC5lbGVtZW50cy5wb3BwZXIpLGM9W10uY29uY2F0KHQuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsdC5zY3JvbGxQYXJlbnRzLnBvcHBlcik7cmV0dXJuIGEmJmMuZm9yRWFjaChmdW5jdGlvbih1KXt1LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsbi51cGRhdGUsUGwpfSkscyYmbC5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLG4udXBkYXRlLFBsKSxmdW5jdGlvbigpe2EmJmMuZm9yRWFjaChmdW5jdGlvbih1KXt1LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsbi51cGRhdGUsUGwpfSkscyYmbC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLG4udXBkYXRlLFBsKX19dmFyICR5PXtuYW1lOiJldmVudExpc3RlbmVycyIsZW5hYmxlZDohMCxwaGFzZToid3JpdGUiLGZuOmZ1bmN0aW9uKCl7fSxlZmZlY3Q6TzEsZGF0YTp7fX07dmFyIEkxPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLGJvdHRvbToidG9wIix0b3A6ImJvdHRvbSJ9O2Z1bmN0aW9uIGthKGUpe3JldHVybiBlLnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLGZ1bmN0aW9uKHQpe3JldHVybiBJMVt0XX0pfXZhciBSMT17c3RhcnQ6ImVuZCIsZW5kOiJzdGFydCJ9O2Z1bmN0aW9uIExsKGUpe3JldHVybiBlLnJlcGxhY2UoL3N0YXJ0fGVuZC9nLGZ1bmN0aW9uKHQpe3JldHVybiBSMVt0XX0pfWZ1bmN0aW9uIHhvKGUpe3ZhciB0PUJlKGUpLG49dC5wYWdlWE9mZnNldCxyPXQucGFnZVlPZmZzZXQ7cmV0dXJue3Njcm9sbExlZnQ6bixzY3JvbGxUb3A6cn19ZnVuY3Rpb24gU28oZSl7cmV0dXJuIGRuKGd0KGUpKS5sZWZ0K3hvKGUpLnNjcm9sbExlZnR9ZnVuY3Rpb24gdHAoZSx0KXt2YXIgbj1CZShlKSxyPWd0KGUpLG89bi52aXN1YWxWaWV3cG9ydCxhPXIuY2xpZW50V2lkdGgsaT1yLmNsaWVudEhlaWdodCxzPTAsbD0wO2lmKG8pe2E9by53aWR0aCxpPW8uaGVpZ2h0O3ZhciBjPU5pKCk7KGN8fCFjJiZ0PT09ImZpeGVkIikmJihzPW8ub2Zmc2V0TGVmdCxsPW8ub2Zmc2V0VG9wKX1yZXR1cm57d2lkdGg6YSxoZWlnaHQ6aSx4OnMrU28oZSkseTpsfX1mdW5jdGlvbiBucChlKXt2YXIgdCxuPWd0KGUpLHI9eG8oZSksbz0odD1lLm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDp0LmJvZHksYT1fbihuLnNjcm9sbFdpZHRoLG4uY2xpZW50V2lkdGgsbz9vLnNjcm9sbFdpZHRoOjAsbz9vLmNsaWVudFdpZHRoOjApLGk9X24obi5zY3JvbGxIZWlnaHQsbi5jbGllbnRIZWlnaHQsbz9vLnNjcm9sbEhlaWdodDowLG8/by5jbGllbnRIZWlnaHQ6MCkscz0tci5zY3JvbGxMZWZ0K1NvKGUpLGw9LXIuc2Nyb2xsVG9wO3JldHVybiBPdChvfHxuKS5kaXJlY3Rpb249PT0icnRsIiYmKHMrPV9uKG4uY2xpZW50V2lkdGgsbz9vLmNsaWVudFdpZHRoOjApLWEpLHt3aWR0aDphLGhlaWdodDppLHg6cyx5Omx9fWZ1bmN0aW9uIEVvKGUpe3ZhciB0PU90KGUpLG49dC5vdmVyZmxvdyxyPXQub3ZlcmZsb3dYLG89dC5vdmVyZmxvd1k7cmV0dXJuL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG4rbytyKX1mdW5jdGlvbiB6bChlKXtyZXR1cm5bImh0bWwiLCJib2R5IiwiI2RvY3VtZW50Il0uaW5kZXhPZihkdChlKSk+PTA/ZS5vd25lckRvY3VtZW50LmJvZHk6bHQoZSkmJkVvKGUpP2U6emwoZHIoZSkpfWZ1bmN0aW9uIEhyKGUsdCl7dmFyIG47dD09PXZvaWQgMCYmKHQ9W10pO3ZhciByPXpsKGUpLG89cj09PSgobj1lLm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDpuLmJvZHkpLGE9QmUociksaT1vP1thXS5jb25jYXQoYS52aXN1YWxWaWV3cG9ydHx8W10sRW8ocik/cjpbXSk6cixzPXQuY29uY2F0KGkpO3JldHVybiBvP3M6cy5jb25jYXQoSHIoZHIoaSkpKX1mdW5jdGlvbiB4YShlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxlLHtsZWZ0OmUueCx0b3A6ZS55LHJpZ2h0OmUueCtlLndpZHRoLGJvdHRvbTplLnkrZS5oZWlnaHR9KX1mdW5jdGlvbiBNMShlLHQpe3ZhciBuPWRuKGUsITEsdD09PSJmaXhlZCIpO3JldHVybiBuLnRvcD1uLnRvcCtlLmNsaWVudFRvcCxuLmxlZnQ9bi5sZWZ0K2UuY2xpZW50TGVmdCxuLmJvdHRvbT1uLnRvcCtlLmNsaWVudEhlaWdodCxuLnJpZ2h0PW4ubGVmdCtlLmNsaWVudFdpZHRoLG4ud2lkdGg9ZS5jbGllbnRXaWR0aCxuLmhlaWdodD1lLmNsaWVudEhlaWdodCxuLng9bi5sZWZ0LG4ueT1uLnRvcCxufWZ1bmN0aW9uIFd5KGUsdCxuKXtyZXR1cm4gdD09PVJsP3hhKHRwKGUsbikpOnVuKHQpP00xKHQsbik6eGEobnAoZ3QoZSkpKX1mdW5jdGlvbiBQMShlKXt2YXIgdD1IcihkcihlKSksbj1bImFic29sdXRlIiwiZml4ZWQiXS5pbmRleE9mKE90KGUpLnBvc2l0aW9uKT49MCxyPW4mJmx0KGUpP0NuKGUpOmU7cmV0dXJuIHVuKHIpP3QuZmlsdGVyKGZ1bmN0aW9uKG8pe3JldHVybiB1bihvKSYmRGkobyxyKSYmZHQobykhPT0iYm9keSJ9KTpbXX1mdW5jdGlvbiBycChlLHQsbixyKXt2YXIgbz10PT09ImNsaXBwaW5nUGFyZW50cyI/UDEoZSk6W10uY29uY2F0KHQpLGE9W10uY29uY2F0KG8sW25dKSxpPWFbMF0scz1hLnJlZHVjZShmdW5jdGlvbihsLGMpe3ZhciB1PVd5KGUsYyxyKTtyZXR1cm4gbC50b3A9X24odS50b3AsbC50b3ApLGwucmlnaHQ9dm8odS5yaWdodCxsLnJpZ2h0KSxsLmJvdHRvbT12byh1LmJvdHRvbSxsLmJvdHRvbSksbC5sZWZ0PV9uKHUubGVmdCxsLmxlZnQpLGx9LFd5KGUsaSxyKSk7cmV0dXJuIHMud2lkdGg9cy5yaWdodC1zLmxlZnQscy5oZWlnaHQ9cy5ib3R0b20tcy50b3Ascy54PXMubGVmdCxzLnk9cy50b3Asc31mdW5jdGlvbiBPaShlKXt2YXIgdD1lLnJlZmVyZW5jZSxuPWUuZWxlbWVudCxyPWUucGxhY2VtZW50LG89cj9wdChyKTpudWxsLGE9cj9wbihyKTpudWxsLGk9dC54K3Qud2lkdGgvMi1uLndpZHRoLzIscz10LnkrdC5oZWlnaHQvMi1uLmhlaWdodC8yLGw7c3dpdGNoKG8pe2Nhc2UgUWU6bD17eDppLHk6dC55LW4uaGVpZ2h0fTticmVhaztjYXNlIHN0Omw9e3g6aSx5OnQueSt0LmhlaWdodH07YnJlYWs7Y2FzZSBvdDpsPXt4OnQueCt0LndpZHRoLHk6c307YnJlYWs7Y2FzZSB0dDpsPXt4OnQueC1uLndpZHRoLHk6c307YnJlYWs7ZGVmYXVsdDpsPXt4OnQueCx5OnQueX19dmFyIGM9bz9ibyhvKTpudWxsO2lmKGMhPW51bGwpe3ZhciB1PWM9PT0ieSI/ImhlaWdodCI6IndpZHRoIjtzd2l0Y2goYSl7Y2FzZSBjcjpsW2NdPWxbY10tKHRbdV0vMi1uW3VdLzIpO2JyZWFrO2Nhc2UgeW86bFtjXT1sW2NdKyh0W3VdLzItblt1XS8yKTticmVhaztkZWZhdWx0On19cmV0dXJuIGx9ZnVuY3Rpb24gQW4oZSx0KXt0PT09dm9pZCAwJiYodD17fSk7dmFyIG49dCxyPW4ucGxhY2VtZW50LG89cj09PXZvaWQgMD9lLnBsYWNlbWVudDpyLGE9bi5zdHJhdGVneSxpPWE9PT12b2lkIDA/ZS5zdHJhdGVneTphLHM9bi5ib3VuZGFyeSxsPXM9PT12b2lkIDA/SXk6cyxjPW4ucm9vdEJvdW5kYXJ5LHU9Yz09PXZvaWQgMD9SbDpjLHA9bi5lbGVtZW50Q29udGV4dCxkPXA9PT12b2lkIDA/dmE6cCxoPW4uYWx0Qm91bmRhcnkseT1oPT09dm9pZCAwPyExOmgsdz1uLnBhZGRpbmcsYj13PT09dm9pZCAwPzA6dyxnPUNpKHR5cGVvZiBiIT0ibnVtYmVyIj9iOkFpKGIsQnIpKSxtPWQ9PT12YT9SeTp2YSx2PWUucmVjdHMucG9wcGVyLGY9ZS5lbGVtZW50c1t5P206ZF0seD1ycCh1bihmKT9mOmYuY29udGV4dEVsZW1lbnR8fGd0KGUuZWxlbWVudHMucG9wcGVyKSxsLHUsaSksUz1kbihlLmVsZW1lbnRzLnJlZmVyZW5jZSksTj1PaSh7cmVmZXJlbmNlOlMsZWxlbWVudDp2LHN0cmF0ZWd5OiJhYnNvbHV0ZSIscGxhY2VtZW50Om99KSxEPXhhKE9iamVjdC5hc3NpZ24oe30sdixOKSksXz1kPT09dmE/RDpTLEE9e3RvcDp4LnRvcC1fLnRvcCtnLnRvcCxib3R0b206Xy5ib3R0b20teC5ib3R0b20rZy5ib3R0b20sbGVmdDp4LmxlZnQtXy5sZWZ0K2cubGVmdCxyaWdodDpfLnJpZ2h0LXgucmlnaHQrZy5yaWdodH0sUD1lLm1vZGlmaWVyc0RhdGEub2Zmc2V0O2lmKGQ9PT12YSYmUCl7dmFyIEk9UFtvXTtPYmplY3Qua2V5cyhBKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3ZhciBVPVtvdCxzdF0uaW5kZXhPZihMKT49MD8xOi0xLEY9W1FlLHN0XS5pbmRleE9mKEwpPj0wPyJ5IjoieCI7QVtMXSs9SVtGXSpVfSl9cmV0dXJuIEF9ZnVuY3Rpb24gb3AoZSx0KXt0PT09dm9pZCAwJiYodD17fSk7dmFyIG49dCxyPW4ucGxhY2VtZW50LG89bi5ib3VuZGFyeSxhPW4ucm9vdEJvdW5kYXJ5LGk9bi5wYWRkaW5nLHM9bi5mbGlwVmFyaWF0aW9ucyxsPW4uYWxsb3dlZEF1dG9QbGFjZW1lbnRzLGM9bD09PXZvaWQgMD9NbDpsLHU9cG4ocikscD11P3M/WmQ6WmQuZmlsdGVyKGZ1bmN0aW9uKHkpe3JldHVybiBwbih5KT09PXV9KTpCcixkPXAuZmlsdGVyKGZ1bmN0aW9uKHkpe3JldHVybiBjLmluZGV4T2YoeSk+PTB9KTtkLmxlbmd0aD09PTAmJihkPXApO3ZhciBoPWQucmVkdWNlKGZ1bmN0aW9uKHksdyl7cmV0dXJuIHlbd109QW4oZSx7cGxhY2VtZW50OncsYm91bmRhcnk6byxyb290Qm91bmRhcnk6YSxwYWRkaW5nOml9KVtwdCh3KV0seX0se30pO3JldHVybiBPYmplY3Qua2V5cyhoKS5zb3J0KGZ1bmN0aW9uKHksdyl7cmV0dXJuIGhbeV0taFt3XX0pfWZ1bmN0aW9uIEwxKGUpe2lmKHB0KGUpPT09SWwpcmV0dXJuW107dmFyIHQ9a2EoZSk7cmV0dXJuW0xsKGUpLHQsTGwodCldfWZ1bmN0aW9uIHoxKGUpe3ZhciB0PWUuc3RhdGUsbj1lLm9wdGlvbnMscj1lLm5hbWU7aWYoIXQubW9kaWZpZXJzRGF0YVtyXS5fc2tpcCl7Zm9yKHZhciBvPW4ubWFpbkF4aXMsYT1vPT09dm9pZCAwPyEwOm8saT1uLmFsdEF4aXMscz1pPT09dm9pZCAwPyEwOmksbD1uLmZhbGxiYWNrUGxhY2VtZW50cyxjPW4ucGFkZGluZyx1PW4uYm91bmRhcnkscD1uLnJvb3RCb3VuZGFyeSxkPW4uYWx0Qm91bmRhcnksaD1uLmZsaXBWYXJpYXRpb25zLHk9aD09PXZvaWQgMD8hMDpoLHc9bi5hbGxvd2VkQXV0b1BsYWNlbWVudHMsYj10Lm9wdGlvbnMucGxhY2VtZW50LGc9cHQoYiksbT1nPT09Yix2PWx8fChtfHwheT9ba2EoYildOkwxKGIpKSxmPVtiXS5jb25jYXQodikucmVkdWNlKGZ1bmN0aW9uKFgsWil7cmV0dXJuIFguY29uY2F0KHB0KFopPT09SWw/b3AodCx7cGxhY2VtZW50OlosYm91bmRhcnk6dSxyb290Qm91bmRhcnk6cCxwYWRkaW5nOmMsZmxpcFZhcmlhdGlvbnM6eSxhbGxvd2VkQXV0b1BsYWNlbWVudHM6d30pOlopfSxbXSkseD10LnJlY3RzLnJlZmVyZW5jZSxTPXQucmVjdHMucG9wcGVyLE49bmV3IE1hcCxEPSEwLF89ZlswXSxBPTA7QTxmLmxlbmd0aDtBKyspe3ZhciBQPWZbQV0sST1wdChQKSxMPXBuKFApPT09Y3IsVT1bUWUsc3RdLmluZGV4T2YoSSk+PTAsRj1VPyJ3aWR0aCI6ImhlaWdodCIsSD1Bbih0LHtwbGFjZW1lbnQ6UCxib3VuZGFyeTp1LHJvb3RCb3VuZGFyeTpwLGFsdEJvdW5kYXJ5OmQscGFkZGluZzpjfSksaWU9VT9MP290OnR0Okw/c3Q6UWU7eFtGXT5TW0ZdJiYoaWU9a2EoaWUpKTt2YXIgTz1rYShpZSksRz1bXTtpZihhJiZHLnB1c2goSFtJXTw9MCkscyYmRy5wdXNoKEhbaWVdPD0wLEhbT108PTApLEcuZXZlcnkoZnVuY3Rpb24oWCl7cmV0dXJuIFh9KSl7Xz1QLEQ9ITE7YnJlYWt9Ti5zZXQoUCxHKX1pZihEKWZvcih2YXIgVD15PzM6MSxrPWZ1bmN0aW9uKFope3ZhciBlZT1mLmZpbmQoZnVuY3Rpb24ocSl7dmFyIG9lPU4uZ2V0KHEpO2lmKG9lKXJldHVybiBvZS5zbGljZSgwLFopLmV2ZXJ5KGZ1bmN0aW9uKHBlKXtyZXR1cm4gcGV9KX0pO2lmKGVlKXJldHVybiBfPWVlLCJicmVhayJ9LFI9VDtSPjA7Ui0tKXt2YXIgJD1rKFIpO2lmKCQ9PT0iYnJlYWsiKWJyZWFrfXQucGxhY2VtZW50IT09XyYmKHQubW9kaWZpZXJzRGF0YVtyXS5fc2tpcD0hMCx0LnBsYWNlbWVudD1fLHQucmVzZXQ9ITApfX12YXIgQnk9e25hbWU6ImZsaXAiLGVuYWJsZWQ6ITAscGhhc2U6Im1haW4iLGZuOnoxLHJlcXVpcmVzSWZFeGlzdHM6WyJvZmZzZXQiXSxkYXRhOntfc2tpcDohMX19O2Z1bmN0aW9uIEh5KGUsdCxuKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49e3g6MCx5OjB9KSx7dG9wOmUudG9wLXQuaGVpZ2h0LW4ueSxyaWdodDplLnJpZ2h0LXQud2lkdGgrbi54LGJvdHRvbTplLmJvdHRvbS10LmhlaWdodCtuLnksbGVmdDplLmxlZnQtdC53aWR0aC1uLnh9fWZ1bmN0aW9uIEd5KGUpe3JldHVybltRZSxvdCxzdCx0dF0uc29tZShmdW5jdGlvbih0KXtyZXR1cm4gZVt0XT49MH0pfWZ1bmN0aW9uIEYxKGUpe3ZhciB0PWUuc3RhdGUsbj1lLm5hbWUscj10LnJlY3RzLnJlZmVyZW5jZSxvPXQucmVjdHMucG9wcGVyLGE9dC5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdyxpPUFuKHQse2VsZW1lbnRDb250ZXh0OiJyZWZlcmVuY2UifSkscz1Bbih0LHthbHRCb3VuZGFyeTohMH0pLGw9SHkoaSxyKSxjPUh5KHMsbyxhKSx1PUd5KGwpLHA9R3koYyk7dC5tb2RpZmllcnNEYXRhW25dPXtyZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6bCxwb3BwZXJFc2NhcGVPZmZzZXRzOmMsaXNSZWZlcmVuY2VIaWRkZW46dSxoYXNQb3BwZXJFc2NhcGVkOnB9LHQuYXR0cmlidXRlcy5wb3BwZXI9T2JqZWN0LmFzc2lnbih7fSx0LmF0dHJpYnV0ZXMucG9wcGVyLHsiZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbiI6dSwiZGF0YS1wb3BwZXItZXNjYXBlZCI6cH0pfXZhciBWeT17bmFtZToiaGlkZSIsZW5hYmxlZDohMCxwaGFzZToibWFpbiIscmVxdWlyZXNJZkV4aXN0czpbInByZXZlbnRPdmVyZmxvdyJdLGZuOkYxfTtmdW5jdGlvbiBVMShlLHQsbil7dmFyIHI9cHQoZSksbz1bdHQsUWVdLmluZGV4T2Yocik+PTA/LTE6MSxhPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oT2JqZWN0LmFzc2lnbih7fSx0LHtwbGFjZW1lbnQ6ZX0pKTpuLGk9YVswXSxzPWFbMV07cmV0dXJuIGk9aXx8MCxzPShzfHwwKSpvLFt0dCxvdF0uaW5kZXhPZihyKT49MD97eDpzLHk6aX06e3g6aSx5OnN9fWZ1bmN0aW9uICQxKGUpe3ZhciB0PWUuc3RhdGUsbj1lLm9wdGlvbnMscj1lLm5hbWUsbz1uLm9mZnNldCxhPW89PT12b2lkIDA/WzAsMF06byxpPU1sLnJlZHVjZShmdW5jdGlvbih1LHApe3JldHVybiB1W3BdPVUxKHAsdC5yZWN0cyxhKSx1fSx7fSkscz1pW3QucGxhY2VtZW50XSxsPXMueCxjPXMueTt0Lm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyE9bnVsbCYmKHQubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLngrPWwsdC5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSs9YyksdC5tb2RpZmllcnNEYXRhW3JdPWl9dmFyIGp5PXtuYW1lOiJvZmZzZXQiLGVuYWJsZWQ6ITAscGhhc2U6Im1haW4iLHJlcXVpcmVzOlsicG9wcGVyT2Zmc2V0cyJdLGZuOiQxfTtmdW5jdGlvbiBXMShlKXt2YXIgdD1lLnN0YXRlLG49ZS5uYW1lO3QubW9kaWZpZXJzRGF0YVtuXT1PaSh7cmVmZXJlbmNlOnQucmVjdHMucmVmZXJlbmNlLGVsZW1lbnQ6dC5yZWN0cy5wb3BwZXIsc3RyYXRlZ3k6ImFic29sdXRlIixwbGFjZW1lbnQ6dC5wbGFjZW1lbnR9KX12YXIgS3k9e25hbWU6InBvcHBlck9mZnNldHMiLGVuYWJsZWQ6ITAscGhhc2U6InJlYWQiLGZuOlcxLGRhdGE6e319O2Z1bmN0aW9uIGFwKGUpe3JldHVybiBlPT09IngiPyJ5IjoieCJ9ZnVuY3Rpb24gQjEoZSl7dmFyIHQ9ZS5zdGF0ZSxuPWUub3B0aW9ucyxyPWUubmFtZSxvPW4ubWFpbkF4aXMsYT1vPT09dm9pZCAwPyEwOm8saT1uLmFsdEF4aXMscz1pPT09dm9pZCAwPyExOmksbD1uLmJvdW5kYXJ5LGM9bi5yb290Qm91bmRhcnksdT1uLmFsdEJvdW5kYXJ5LHA9bi5wYWRkaW5nLGQ9bi50ZXRoZXIsaD1kPT09dm9pZCAwPyEwOmQseT1uLnRldGhlck9mZnNldCx3PXk9PT12b2lkIDA/MDp5LGI9QW4odCx7Ym91bmRhcnk6bCxyb290Qm91bmRhcnk6YyxwYWRkaW5nOnAsYWx0Qm91bmRhcnk6dX0pLGc9cHQodC5wbGFjZW1lbnQpLG09cG4odC5wbGFjZW1lbnQpLHY9IW0sZj1ibyhnKSx4PWFwKGYpLFM9dC5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsTj10LnJlY3RzLnJlZmVyZW5jZSxEPXQucmVjdHMucG9wcGVyLF89dHlwZW9mIHc9PSJmdW5jdGlvbiI/dyhPYmplY3QuYXNzaWduKHt9LHQucmVjdHMse3BsYWNlbWVudDp0LnBsYWNlbWVudH0pKTp3LEE9dHlwZW9mIF89PSJudW1iZXIiP3ttYWluQXhpczpfLGFsdEF4aXM6X306T2JqZWN0LmFzc2lnbih7bWFpbkF4aXM6MCxhbHRBeGlzOjB9LF8pLFA9dC5tb2RpZmllcnNEYXRhLm9mZnNldD90Lm1vZGlmaWVyc0RhdGEub2Zmc2V0W3QucGxhY2VtZW50XTpudWxsLEk9e3g6MCx5OjB9O2lmKFMpe2lmKGEpe3ZhciBMLFU9Zj09PSJ5Ij9RZTp0dCxGPWY9PT0ieSI/c3Q6b3QsSD1mPT09InkiPyJoZWlnaHQiOiJ3aWR0aCIsaWU9U1tmXSxPPWllK2JbVV0sRz1pZS1iW0ZdLFQ9aD8tRFtIXS8yOjAsaz1tPT09Y3I/TltIXTpEW0hdLFI9bT09PWNyPy1EW0hdOi1OW0hdLCQ9dC5lbGVtZW50cy5hcnJvdyxYPWgmJiQ/d28oJCk6e3dpZHRoOjAsaGVpZ2h0OjB9LFo9dC5tb2RpZmllcnNEYXRhWyJhcnJvdyNwZXJzaXN0ZW50Il0/dC5tb2RpZmllcnNEYXRhWyJhcnJvdyNwZXJzaXN0ZW50Il0ucGFkZGluZzpfaSgpLGVlPVpbVV0scT1aW0ZdLG9lPWtvKDAsTltIXSxYW0hdKSxwZT12P05bSF0vMi1ULW9lLWVlLUEubWFpbkF4aXM6ay1vZS1lZS1BLm1haW5BeGlzLGdlPXY/LU5bSF0vMitUK29lK3ErQS5tYWluQXhpczpSK29lK3ErQS5tYWluQXhpcyx0ZT10LmVsZW1lbnRzLmFycm93JiZDbih0LmVsZW1lbnRzLmFycm93KSxzZT10ZT9mPT09InkiP3RlLmNsaWVudFRvcHx8MDp0ZS5jbGllbnRMZWZ0fHwwOjAsdWU9KEw9UD8uW2ZdKSE9bnVsbD9MOjAsbmU9aWUrcGUtdWUtc2UsQWU9aWUrZ2UtdWUsWGU9a28oaD92byhPLG5lKTpPLGllLGg/X24oRyxBZSk6Ryk7U1tmXT1YZSxJW2ZdPVhlLWllfWlmKHMpe3ZhciBaZSx5dD1mPT09IngiP1FlOnR0LFB0PWY9PT0ieCI/c3Q6b3QsVWU9U1t4XSxFdD14PT09InkiPyJoZWlnaHQiOiJ3aWR0aCIsTG49VWUrYlt5dF0sZ249VWUtYltQdF0seW49W1FlLHR0XS5pbmRleE9mKGcpIT09LTEsd3I9KFplPVA/Llt4XSkhPW51bGw/WmU6MCx6bj15bj9MbjpVZS1OW0V0XS1EW0V0XS13citBLmFsdEF4aXMsZmU9eW4/VWUrTltFdF0rRFtFdF0td3ItQS5hbHRBeGlzOmduLE9lPWgmJnluP0x5KHpuLFVlLGZlKTprbyhoP3puOkxuLFVlLGg/ZmU6Z24pO1NbeF09T2UsSVt4XT1PZS1VZX10Lm1vZGlmaWVyc0RhdGFbcl09SX19dmFyIFl5PXtuYW1lOiJwcmV2ZW50T3ZlcmZsb3ciLGVuYWJsZWQ6ITAscGhhc2U6Im1haW4iLGZuOkIxLHJlcXVpcmVzSWZFeGlzdHM6WyJvZmZzZXQiXX07ZnVuY3Rpb24gaXAoZSl7cmV0dXJue3Njcm9sbExlZnQ6ZS5zY3JvbGxMZWZ0LHNjcm9sbFRvcDplLnNjcm9sbFRvcH19ZnVuY3Rpb24gc3AoZSl7cmV0dXJuIGU9PT1CZShlKXx8IWx0KGUpP3hvKGUpOmlwKGUpfWZ1bmN0aW9uIEgxKGUpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj11cih0LndpZHRoKS9lLm9mZnNldFdpZHRofHwxLHI9dXIodC5oZWlnaHQpL2Uub2Zmc2V0SGVpZ2h0fHwxO3JldHVybiBuIT09MXx8ciE9PTF9ZnVuY3Rpb24gbHAoZSx0LG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgcj1sdCh0KSxvPWx0KHQpJiZIMSh0KSxhPWd0KHQpLGk9ZG4oZSxvLG4pLHM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0sbD17eDowLHk6MH07cmV0dXJuKHJ8fCFyJiYhbikmJigoZHQodCkhPT0iYm9keSJ8fEVvKGEpKSYmKHM9c3AodCkpLGx0KHQpPyhsPWRuKHQsITApLGwueCs9dC5jbGllbnRMZWZ0LGwueSs9dC5jbGllbnRUb3ApOmEmJihsLng9U28oYSkpKSx7eDppLmxlZnQrcy5zY3JvbGxMZWZ0LWwueCx5OmkudG9wK3Muc2Nyb2xsVG9wLWwueSx3aWR0aDppLndpZHRoLGhlaWdodDppLmhlaWdodH19ZnVuY3Rpb24gRzEoZSl7dmFyIHQ9bmV3IE1hcCxuPW5ldyBTZXQscj1bXTtlLmZvckVhY2goZnVuY3Rpb24oYSl7dC5zZXQoYS5uYW1lLGEpfSk7ZnVuY3Rpb24gbyhhKXtuLmFkZChhLm5hbWUpO3ZhciBpPVtdLmNvbmNhdChhLnJlcXVpcmVzfHxbXSxhLnJlcXVpcmVzSWZFeGlzdHN8fFtdKTtpLmZvckVhY2goZnVuY3Rpb24ocyl7aWYoIW4uaGFzKHMpKXt2YXIgbD10LmdldChzKTtsJiZvKGwpfX0pLHIucHVzaChhKX1yZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGEpe24uaGFzKGEubmFtZSl8fG8oYSl9KSxyfWZ1bmN0aW9uIGNwKGUpe3ZhciB0PUcxKGUpO3JldHVybiBNeS5yZWR1Y2UoZnVuY3Rpb24obixyKXtyZXR1cm4gbi5jb25jYXQodC5maWx0ZXIoZnVuY3Rpb24obyl7cmV0dXJuIG8ucGhhc2U9PT1yfSkpfSxbXSl9ZnVuY3Rpb24gdXAoZSl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR8fCh0PW5ldyBQcm9taXNlKGZ1bmN0aW9uKG4pe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXt0PXZvaWQgMCxuKGUoKSl9KX0pKSx0fX1mdW5jdGlvbiBkcChlKXt2YXIgdD1lLnJlZHVjZShmdW5jdGlvbihuLHIpe3ZhciBvPW5bci5uYW1lXTtyZXR1cm4gbltyLm5hbWVdPW8/T2JqZWN0LmFzc2lnbih7fSxvLHIse29wdGlvbnM6T2JqZWN0LmFzc2lnbih7fSxvLm9wdGlvbnMsci5vcHRpb25zKSxkYXRhOk9iamVjdC5hc3NpZ24oe30sby5kYXRhLHIuZGF0YSl9KTpyLG59LHt9KTtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0W25dfSl9dmFyIHF5PXtwbGFjZW1lbnQ6ImJvdHRvbSIsbW9kaWZpZXJzOltdLHN0cmF0ZWd5OiJhYnNvbHV0ZSJ9O2Z1bmN0aW9uIFF5KCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl07cmV0dXJuIXQuc29tZShmdW5jdGlvbihyKXtyZXR1cm4hKHImJnR5cGVvZiByLmdldEJvdW5kaW5nQ2xpZW50UmVjdD09ImZ1bmN0aW9uIil9KX1mdW5jdGlvbiBKeShlKXtlPT09dm9pZCAwJiYoZT17fSk7dmFyIHQ9ZSxuPXQuZGVmYXVsdE1vZGlmaWVycyxyPW49PT12b2lkIDA/W106bixvPXQuZGVmYXVsdE9wdGlvbnMsYT1vPT09dm9pZCAwP3F5Om87cmV0dXJuIGZ1bmN0aW9uKHMsbCxjKXtjPT09dm9pZCAwJiYoYz1hKTt2YXIgdT17cGxhY2VtZW50OiJib3R0b20iLG9yZGVyZWRNb2RpZmllcnM6W10sb3B0aW9uczpPYmplY3QuYXNzaWduKHt9LHF5LGEpLG1vZGlmaWVyc0RhdGE6e30sZWxlbWVudHM6e3JlZmVyZW5jZTpzLHBvcHBlcjpsfSxhdHRyaWJ1dGVzOnt9LHN0eWxlczp7fX0scD1bXSxkPSExLGg9e3N0YXRlOnUsc2V0T3B0aW9uczpmdW5jdGlvbihnKXt2YXIgbT10eXBlb2YgZz09ImZ1bmN0aW9uIj9nKHUub3B0aW9ucyk6Zzt3KCksdS5vcHRpb25zPU9iamVjdC5hc3NpZ24oe30sYSx1Lm9wdGlvbnMsbSksdS5zY3JvbGxQYXJlbnRzPXtyZWZlcmVuY2U6dW4ocyk/SHIocyk6cy5jb250ZXh0RWxlbWVudD9IcihzLmNvbnRleHRFbGVtZW50KTpbXSxwb3BwZXI6SHIobCl9O3ZhciB2PWNwKGRwKFtdLmNvbmNhdChyLHUub3B0aW9ucy5tb2RpZmllcnMpKSk7cmV0dXJuIHUub3JkZXJlZE1vZGlmaWVycz12LmZpbHRlcihmdW5jdGlvbihmKXtyZXR1cm4gZi5lbmFibGVkfSkseSgpLGgudXBkYXRlKCl9LGZvcmNlVXBkYXRlOmZ1bmN0aW9uKCl7aWYoIWQpe3ZhciBnPXUuZWxlbWVudHMsbT1nLnJlZmVyZW5jZSx2PWcucG9wcGVyO2lmKFF5KG0sdikpe3UucmVjdHM9e3JlZmVyZW5jZTpscChtLENuKHYpLHUub3B0aW9ucy5zdHJhdGVneT09PSJmaXhlZCIpLHBvcHBlcjp3byh2KX0sdS5yZXNldD0hMSx1LnBsYWNlbWVudD11Lm9wdGlvbnMucGxhY2VtZW50LHUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uKEEpe3JldHVybiB1Lm1vZGlmaWVyc0RhdGFbQS5uYW1lXT1PYmplY3QuYXNzaWduKHt9LEEuZGF0YSl9KTtmb3IodmFyIGY9MDtmPHUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7ZisrKXtpZih1LnJlc2V0PT09ITApe3UucmVzZXQ9ITEsZj0tMTtjb250aW51ZX12YXIgeD11Lm9yZGVyZWRNb2RpZmllcnNbZl0sUz14LmZuLE49eC5vcHRpb25zLEQ9Tj09PXZvaWQgMD97fTpOLF89eC5uYW1lO3R5cGVvZiBTPT0iZnVuY3Rpb24iJiYodT1TKHtzdGF0ZTp1LG9wdGlvbnM6RCxuYW1lOl8saW5zdGFuY2U6aH0pfHx1KX19fX0sdXBkYXRlOnVwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGIpe2guZm9yY2VVcGRhdGUoKSxiKHUpfSl9KSxkZXN0cm95OmZ1bmN0aW9uKCl7dygpLGQ9ITB9fTtpZighUXkocyxsKSlyZXR1cm4gaDtoLnNldE9wdGlvbnMoYykudGhlbihmdW5jdGlvbihiKXshZCYmYy5vbkZpcnN0VXBkYXRlJiZjLm9uRmlyc3RVcGRhdGUoYil9KTtmdW5jdGlvbiB5KCl7dS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGc9Yi5uYW1lLG09Yi5vcHRpb25zLHY9bT09PXZvaWQgMD97fTptLGY9Yi5lZmZlY3Q7aWYodHlwZW9mIGY9PSJmdW5jdGlvbiIpe3ZhciB4PWYoe3N0YXRlOnUsbmFtZTpnLGluc3RhbmNlOmgsb3B0aW9uczp2fSksUz1mdW5jdGlvbigpe307cC5wdXNoKHh8fFMpfX0pfWZ1bmN0aW9uIHcoKXtwLmZvckVhY2goZnVuY3Rpb24oYil7cmV0dXJuIGIoKX0pLHA9W119cmV0dXJuIGh9fXZhciBWMT1bJHksS3ksVXksVGksanksQnksWXksenksVnldLHBwPUp5KHtkZWZhdWx0TW9kaWZpZXJzOlYxfSk7dmFyIGoxPSJ0aXBweS1ib3giLHN2PSJ0aXBweS1jb250ZW50IixLMT0idGlwcHktYmFja2Ryb3AiLGx2PSJ0aXBweS1hcnJvdyIsY3Y9InRpcHB5LXN2Zy1hcnJvdyIsVG89e3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0sdXY9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYm9keX07ZnVuY3Rpb24gZnAoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciByPWVbdF07cmV0dXJuIHI/PyhBcnJheS5pc0FycmF5KG4pP25bdF06bil9cmV0dXJuIGV9ZnVuY3Rpb24gd3AoZSx0KXt2YXIgbj17fS50b1N0cmluZy5jYWxsKGUpO3JldHVybiBuLmluZGV4T2YoIltvYmplY3QiKT09PTAmJm4uaW5kZXhPZih0KyJdIik+LTF9ZnVuY3Rpb24gZHYoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZS5hcHBseSh2b2lkIDAsdCk6ZX1mdW5jdGlvbiBYeShlLHQpe2lmKHQ9PT0wKXJldHVybiBlO3ZhciBuO3JldHVybiBmdW5jdGlvbihyKXtjbGVhclRpbWVvdXQobiksbj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShyKX0sdCl9fWZ1bmN0aW9uIFkxKGUpe3JldHVybiBlLnNwbGl0KC9ccysvKS5maWx0ZXIoQm9vbGVhbil9ZnVuY3Rpb24gU2EoZSl7cmV0dXJuW10uY29uY2F0KGUpfWZ1bmN0aW9uIFp5KGUsdCl7ZS5pbmRleE9mKHQpPT09LTEmJmUucHVzaCh0KX1mdW5jdGlvbiBxMShlKXtyZXR1cm4gZS5maWx0ZXIoZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5pbmRleE9mKHQpPT09bn0pfWZ1bmN0aW9uIFExKGUpe3JldHVybiBlLnNwbGl0KCItIilbMF19ZnVuY3Rpb24gVWwoZSl7cmV0dXJuW10uc2xpY2UuY2FsbChlKX1mdW5jdGlvbiBldihlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbbl0hPT12b2lkIDAmJih0W25dPWVbbl0pLHR9LHt9KX1mdW5jdGlvbiBJaSgpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKX1mdW5jdGlvbiAkbChlKXtyZXR1cm5bIkVsZW1lbnQiLCJGcmFnbWVudCJdLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHdwKGUsdCl9KX1mdW5jdGlvbiBKMShlKXtyZXR1cm4gd3AoZSwiTm9kZUxpc3QiKX1mdW5jdGlvbiBYMShlKXtyZXR1cm4gd3AoZSwiTW91c2VFdmVudCIpfWZ1bmN0aW9uIFoxKGUpe3JldHVybiEhKGUmJmUuX3RpcHB5JiZlLl90aXBweS5yZWZlcmVuY2U9PT1lKX1mdW5jdGlvbiBlUyhlKXtyZXR1cm4gJGwoZSk/W2VdOkoxKGUpP1VsKGUpOkFycmF5LmlzQXJyYXkoZSk/ZTpVbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpKX1mdW5jdGlvbiBocChlLHQpe2UuZm9yRWFjaChmdW5jdGlvbihuKXtuJiYobi5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249dCsibXMiKX0pfWZ1bmN0aW9uIHR2KGUsdCl7ZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24mJm4uc2V0QXR0cmlidXRlKCJkYXRhLXN0YXRlIix0KX0pfWZ1bmN0aW9uIHRTKGUpe3ZhciB0LG49U2EoZSkscj1uWzBdO3JldHVybiByIT1udWxsJiYodD1yLm93bmVyRG9jdW1lbnQpIT1udWxsJiZ0LmJvZHk/ci5vd25lckRvY3VtZW50OmRvY3VtZW50fWZ1bmN0aW9uIG5TKGUsdCl7dmFyIG49dC5jbGllbnRYLHI9dC5jbGllbnRZO3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKG8pe3ZhciBhPW8ucG9wcGVyUmVjdCxpPW8ucG9wcGVyU3RhdGUscz1vLnByb3BzLGw9cy5pbnRlcmFjdGl2ZUJvcmRlcixjPVExKGkucGxhY2VtZW50KSx1PWkubW9kaWZpZXJzRGF0YS5vZmZzZXQ7aWYoIXUpcmV0dXJuITA7dmFyIHA9Yz09PSJib3R0b20iP3UudG9wLnk6MCxkPWM9PT0idG9wIj91LmJvdHRvbS55OjAsaD1jPT09InJpZ2h0Ij91LmxlZnQueDowLHk9Yz09PSJsZWZ0Ij91LnJpZ2h0Lng6MCx3PWEudG9wLXIrcD5sLGI9ci1hLmJvdHRvbS1kPmwsZz1hLmxlZnQtbitoPmwsbT1uLWEucmlnaHQteT5sO3JldHVybiB3fHxifHxnfHxtfSl9ZnVuY3Rpb24gbXAoZSx0LG4pe3ZhciByPXQrIkV2ZW50TGlzdGVuZXIiO1sidHJhbnNpdGlvbmVuZCIsIndlYmtpdFRyYW5zaXRpb25FbmQiXS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2Vbcl0obyxuKX0pfWZ1bmN0aW9uIG52KGUsdCl7Zm9yKHZhciBuPXQ7bjspe3ZhciByO2lmKGUuY29udGFpbnMobikpcmV0dXJuITA7bj1uLmdldFJvb3ROb2RlPT1udWxsfHwocj1uLmdldFJvb3ROb2RlKCkpPT1udWxsP3ZvaWQgMDpyLmhvc3R9cmV0dXJuITF9dmFyIEduPXtpc1RvdWNoOiExfSxydj0wO2Z1bmN0aW9uIHJTKCl7R24uaXNUb3VjaHx8KEduLmlzVG91Y2g9ITAsd2luZG93LnBlcmZvcm1hbmNlJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHB2KSl9ZnVuY3Rpb24gcHYoKXt2YXIgZT1wZXJmb3JtYW5jZS5ub3coKTtlLXJ2PDIwJiYoR24uaXNUb3VjaD0hMSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHB2KSkscnY9ZX1mdW5jdGlvbiBvUygpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoWjEoZSkpe3ZhciB0PWUuX3RpcHB5O2UuYmx1ciYmIXQuc3RhdGUuaXNWaXNpYmxlJiZlLmJsdXIoKX19ZnVuY3Rpb24gYVMoKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixyUyxUbyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLG9TKX12YXIgaVM9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsc1M9aVM/ISF3aW5kb3cubXNDcnlwdG86ITE7dmFyIGxTPXthbmltYXRlRmlsbDohMSxmb2xsb3dDdXJzb3I6ITEsaW5saW5lUG9zaXRpb25pbmc6ITEsc3RpY2t5OiExfSxjUz17YWxsb3dIVE1MOiExLGFuaW1hdGlvbjoiZmFkZSIsYXJyb3c6ITAsY29udGVudDoiIixpbmVydGlhOiExLG1heFdpZHRoOjM1MCxyb2xlOiJ0b29sdGlwIix0aGVtZToiIix6SW5kZXg6OTk5OX0sT249T2JqZWN0LmFzc2lnbih7YXBwZW5kVG86dXYsYXJpYTp7Y29udGVudDoiYXV0byIsZXhwYW5kZWQ6ImF1dG8ifSxkZWxheTowLGR1cmF0aW9uOlszMDAsMjUwXSxnZXRSZWZlcmVuY2VDbGllbnRSZWN0Om51bGwsaGlkZU9uQ2xpY2s6ITAsaWdub3JlQXR0cmlidXRlczohMSxpbnRlcmFjdGl2ZTohMSxpbnRlcmFjdGl2ZUJvcmRlcjoyLGludGVyYWN0aXZlRGVib3VuY2U6MCxtb3ZlVHJhbnNpdGlvbjoiIixvZmZzZXQ6WzAsMTBdLG9uQWZ0ZXJVcGRhdGU6ZnVuY3Rpb24oKXt9LG9uQmVmb3JlVXBkYXRlOmZ1bmN0aW9uKCl7fSxvbkNyZWF0ZTpmdW5jdGlvbigpe30sb25EZXN0cm95OmZ1bmN0aW9uKCl7fSxvbkhpZGRlbjpmdW5jdGlvbigpe30sb25IaWRlOmZ1bmN0aW9uKCl7fSxvbk1vdW50OmZ1bmN0aW9uKCl7fSxvblNob3c6ZnVuY3Rpb24oKXt9LG9uU2hvd246ZnVuY3Rpb24oKXt9LG9uVHJpZ2dlcjpmdW5jdGlvbigpe30sb25VbnRyaWdnZXI6ZnVuY3Rpb24oKXt9LG9uQ2xpY2tPdXRzaWRlOmZ1bmN0aW9uKCl7fSxwbGFjZW1lbnQ6InRvcCIscGx1Z2luczpbXSxwb3BwZXJPcHRpb25zOnt9LHJlbmRlcjpudWxsLHNob3dPbkNyZWF0ZTohMSx0b3VjaDohMCx0cmlnZ2VyOiJtb3VzZWVudGVyIGZvY3VzIix0cmlnZ2VyVGFyZ2V0Om51bGx9LGxTLGNTKSx1Uz1PYmplY3Qua2V5cyhPbiksZFM9ZnVuY3Rpb24odCl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKGZ1bmN0aW9uKHIpe09uW3JdPXRbcl19KX07ZnVuY3Rpb24gZnYoZSl7dmFyIHQ9ZS5wbHVnaW5zfHxbXSxuPXQucmVkdWNlKGZ1bmN0aW9uKHIsbyl7dmFyIGE9by5uYW1lLGk9by5kZWZhdWx0VmFsdWU7aWYoYSl7dmFyIHM7clthXT1lW2FdIT09dm9pZCAwP2VbYV06KHM9T25bYV0pIT1udWxsP3M6aX1yZXR1cm4gcn0se30pO3JldHVybiBPYmplY3QuYXNzaWduKHt9LGUsbil9ZnVuY3Rpb24gcFMoZSx0KXt2YXIgbj10P09iamVjdC5rZXlzKGZ2KE9iamVjdC5hc3NpZ24oe30sT24se3BsdWdpbnM6dH0pKSk6dVMscj1uLnJlZHVjZShmdW5jdGlvbihvLGEpe3ZhciBpPShlLmdldEF0dHJpYnV0ZSgiZGF0YS10aXBweS0iK2EpfHwiIikudHJpbSgpO2lmKCFpKXJldHVybiBvO2lmKGE9PT0iY29udGVudCIpb1thXT1pO2Vsc2UgdHJ5e29bYV09SlNPTi5wYXJzZShpKX1jYXRjaHtvW2FdPWl9cmV0dXJuIG99LHt9KTtyZXR1cm4gcn1mdW5jdGlvbiBvdihlLHQpe3ZhciBuPU9iamVjdC5hc3NpZ24oe30sdCx7Y29udGVudDpkdih0LmNvbnRlbnQsW2VdKX0sdC5pZ25vcmVBdHRyaWJ1dGVzP3t9OnBTKGUsdC5wbHVnaW5zKSk7cmV0dXJuIG4uYXJpYT1PYmplY3QuYXNzaWduKHt9LE9uLmFyaWEsbi5hcmlhKSxuLmFyaWE9e2V4cGFuZGVkOm4uYXJpYS5leHBhbmRlZD09PSJhdXRvIj90LmludGVyYWN0aXZlOm4uYXJpYS5leHBhbmRlZCxjb250ZW50Om4uYXJpYS5jb250ZW50PT09ImF1dG8iP3QuaW50ZXJhY3RpdmU/bnVsbDoiZGVzY3JpYmVkYnkiOm4uYXJpYS5jb250ZW50fSxufXZhciBmUz1mdW5jdGlvbigpe3JldHVybiJpbm5lckhUTUwifTtmdW5jdGlvbiB5cChlLHQpe2VbZlMoKV09dH1mdW5jdGlvbiBhdihlKXt2YXIgdD1JaSgpO3JldHVybiBlPT09ITA/dC5jbGFzc05hbWU9bHY6KHQuY2xhc3NOYW1lPWN2LCRsKGUpP3QuYXBwZW5kQ2hpbGQoZSk6eXAodCxlKSksdH1mdW5jdGlvbiBpdihlLHQpeyRsKHQuY29udGVudCk/KHlwKGUsIiIpLGUuYXBwZW5kQ2hpbGQodC5jb250ZW50KSk6dHlwZW9mIHQuY29udGVudCE9ImZ1bmN0aW9uIiYmKHQuYWxsb3dIVE1MP3lwKGUsdC5jb250ZW50KTplLnRleHRDb250ZW50PXQuY29udGVudCl9ZnVuY3Rpb24gdnAoZSl7dmFyIHQ9ZS5maXJzdEVsZW1lbnRDaGlsZCxuPVVsKHQuY2hpbGRyZW4pO3JldHVybntib3g6dCxjb250ZW50Om4uZmluZChmdW5jdGlvbihyKXtyZXR1cm4gci5jbGFzc0xpc3QuY29udGFpbnMoc3YpfSksYXJyb3c6bi5maW5kKGZ1bmN0aW9uKHIpe3JldHVybiByLmNsYXNzTGlzdC5jb250YWlucyhsdil8fHIuY2xhc3NMaXN0LmNvbnRhaW5zKGN2KX0pLGJhY2tkcm9wOm4uZmluZChmdW5jdGlvbihyKXtyZXR1cm4gci5jbGFzc0xpc3QuY29udGFpbnMoSzEpfSl9fWZ1bmN0aW9uIGh2KGUpe3ZhciB0PUlpKCksbj1JaSgpO24uY2xhc3NOYW1lPWoxLG4uc2V0QXR0cmlidXRlKCJkYXRhLXN0YXRlIiwiaGlkZGVuIiksbi5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKTt2YXIgcj1JaSgpO3IuY2xhc3NOYW1lPXN2LHIuc2V0QXR0cmlidXRlKCJkYXRhLXN0YXRlIiwiaGlkZGVuIiksaXYocixlLnByb3BzKSx0LmFwcGVuZENoaWxkKG4pLG4uYXBwZW5kQ2hpbGQociksbyhlLnByb3BzLGUucHJvcHMpO2Z1bmN0aW9uIG8oYSxpKXt2YXIgcz12cCh0KSxsPXMuYm94LGM9cy5jb250ZW50LHU9cy5hcnJvdztpLnRoZW1lP2wuc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIixpLnRoZW1lKTpsLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS10aGVtZSIpLHR5cGVvZiBpLmFuaW1hdGlvbj09InN0cmluZyI/bC5zZXRBdHRyaWJ1dGUoImRhdGEtYW5pbWF0aW9uIixpLmFuaW1hdGlvbik6bC5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtYW5pbWF0aW9uIiksaS5pbmVydGlhP2wuc2V0QXR0cmlidXRlKCJkYXRhLWluZXJ0aWEiLCIiKTpsLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1pbmVydGlhIiksbC5zdHlsZS5tYXhXaWR0aD10eXBlb2YgaS5tYXhXaWR0aD09Im51bWJlciI/aS5tYXhXaWR0aCsicHgiOmkubWF4V2lkdGgsaS5yb2xlP2wuc2V0QXR0cmlidXRlKCJyb2xlIixpLnJvbGUpOmwucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksKGEuY29udGVudCE9PWkuY29udGVudHx8YS5hbGxvd0hUTUwhPT1pLmFsbG93SFRNTCkmJml2KGMsZS5wcm9wcyksaS5hcnJvdz91P2EuYXJyb3chPT1pLmFycm93JiYobC5yZW1vdmVDaGlsZCh1KSxsLmFwcGVuZENoaWxkKGF2KGkuYXJyb3cpKSk6bC5hcHBlbmRDaGlsZChhdihpLmFycm93KSk6dSYmbC5yZW1vdmVDaGlsZCh1KX1yZXR1cm57cG9wcGVyOnQsb25VcGRhdGU6b319aHYuJCR0aXBweT0hMDt2YXIgaFM9MSxGbD1bXSxncD1bXTtmdW5jdGlvbiBtUyhlLHQpe3ZhciBuPW92KGUsT2JqZWN0LmFzc2lnbih7fSxPbixmdihldih0KSkpKSxyLG8sYSxpPSExLHM9ITEsbD0hMSxjPSExLHUscCxkLGg9W10seT1YeShuZSxuLmludGVyYWN0aXZlRGVib3VuY2UpLHcsYj1oUysrLGc9bnVsbCxtPXExKG4ucGx1Z2lucyksdj17aXNFbmFibGVkOiEwLGlzVmlzaWJsZTohMSxpc0Rlc3Ryb3llZDohMSxpc01vdW50ZWQ6ITEsaXNTaG93bjohMX0sZj17aWQ6YixyZWZlcmVuY2U6ZSxwb3BwZXI6SWkoKSxwb3BwZXJJbnN0YW5jZTpnLHByb3BzOm4sc3RhdGU6dixwbHVnaW5zOm0sY2xlYXJEZWxheVRpbWVvdXRzOnpuLHNldFByb3BzOmZlLHNldENvbnRlbnQ6T2Usc2hvdzp2dCxoaWRlOmVuLGhpZGVXaXRoSW50ZXJhY3Rpdml0eTp2bixlbmFibGU6eW4sZGlzYWJsZTp3cix1bm1vdW50OlhyLGRlc3Ryb3k6UG99O2lmKCFuLnJlbmRlcilyZXR1cm4gZjt2YXIgeD1uLnJlbmRlcihmKSxTPXgucG9wcGVyLE49eC5vblVwZGF0ZTtTLnNldEF0dHJpYnV0ZSgiZGF0YS10aXBweS1yb290IiwiIiksUy5pZD0idGlwcHktIitmLmlkLGYucG9wcGVyPVMsZS5fdGlwcHk9ZixTLl90aXBweT1mO3ZhciBEPW0ubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBDLmZuKGYpfSksXz1lLmhhc0F0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpO3JldHVybiB0ZSgpLFQoKSxpZSgpLE8oIm9uQ3JlYXRlIixbZl0pLG4uc2hvd09uQ3JlYXRlJiZMbigpLFMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsZnVuY3Rpb24oKXtmLnByb3BzLmludGVyYWN0aXZlJiZmLnN0YXRlLmlzVmlzaWJsZSYmZi5jbGVhckRlbGF5VGltZW91dHMoKX0pLFMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtmLnByb3BzLmludGVyYWN0aXZlJiZmLnByb3BzLnRyaWdnZXIuaW5kZXhPZigibW91c2VlbnRlciIpPj0wJiZVKCkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix5KX0pLGY7ZnVuY3Rpb24gQSgpe3ZhciBDPWYucHJvcHMudG91Y2g7cmV0dXJuIEFycmF5LmlzQXJyYXkoQyk/QzpbQywwXX1mdW5jdGlvbiBQKCl7cmV0dXJuIEEoKVswXT09PSJob2xkIn1mdW5jdGlvbiBJKCl7dmFyIEM7cmV0dXJuISEoKEM9Zi5wcm9wcy5yZW5kZXIpIT1udWxsJiZDLiQkdGlwcHkpfWZ1bmN0aW9uIEwoKXtyZXR1cm4gd3x8ZX1mdW5jdGlvbiBVKCl7dmFyIEM9TCgpLnBhcmVudE5vZGU7cmV0dXJuIEM/dFMoQyk6ZG9jdW1lbnR9ZnVuY3Rpb24gRigpe3JldHVybiB2cChTKX1mdW5jdGlvbiBIKEMpe3JldHVybiBmLnN0YXRlLmlzTW91bnRlZCYmIWYuc3RhdGUuaXNWaXNpYmxlfHxHbi5pc1RvdWNofHx1JiZ1LnR5cGU9PT0iZm9jdXMiPzA6ZnAoZi5wcm9wcy5kZWxheSxDPzA6MSxPbi5kZWxheSl9ZnVuY3Rpb24gaWUoQyl7Qz09PXZvaWQgMCYmKEM9ITEpLFMuc3R5bGUucG9pbnRlckV2ZW50cz1mLnByb3BzLmludGVyYWN0aXZlJiYhQz8iIjoibm9uZSIsUy5zdHlsZS56SW5kZXg9IiIrZi5wcm9wcy56SW5kZXh9ZnVuY3Rpb24gTyhDLFksYWUpe2lmKGFlPT09dm9pZCAwJiYoYWU9ITApLEQuZm9yRWFjaChmdW5jdGlvbih2ZSl7dmVbQ10mJnZlW0NdLmFwcGx5KHZlLFkpfSksYWUpe3ZhciBOZTsoTmU9Zi5wcm9wcylbQ10uYXBwbHkoTmUsWSl9fWZ1bmN0aW9uIEcoKXt2YXIgQz1mLnByb3BzLmFyaWE7aWYoQy5jb250ZW50KXt2YXIgWT0iYXJpYS0iK0MuY29udGVudCxhZT1TLmlkLE5lPVNhKGYucHJvcHMudHJpZ2dlclRhcmdldHx8ZSk7TmUuZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFR0PXZlLmdldEF0dHJpYnV0ZShZKTtpZihmLnN0YXRlLmlzVmlzaWJsZSl2ZS5zZXRBdHRyaWJ1dGUoWSxUdD9UdCsiICIrYWU6YWUpO2Vsc2V7dmFyIHRuPVR0JiZUdC5yZXBsYWNlKGFlLCIiKS50cmltKCk7dG4/dmUuc2V0QXR0cmlidXRlKFksdG4pOnZlLnJlbW92ZUF0dHJpYnV0ZShZKX19KX19ZnVuY3Rpb24gVCgpe2lmKCEoX3x8IWYucHJvcHMuYXJpYS5leHBhbmRlZCkpe3ZhciBDPVNhKGYucHJvcHMudHJpZ2dlclRhcmdldHx8ZSk7Qy5mb3JFYWNoKGZ1bmN0aW9uKFkpe2YucHJvcHMuaW50ZXJhY3RpdmU/WS5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLGYuc3RhdGUuaXNWaXNpYmxlJiZZPT09TCgpPyJ0cnVlIjoiZmFsc2UiKTpZLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpfSl9fWZ1bmN0aW9uIGsoKXtVKCkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix5KSxGbD1GbC5maWx0ZXIoZnVuY3Rpb24oQyl7cmV0dXJuIEMhPT15fSl9ZnVuY3Rpb24gUihDKXtpZighKEduLmlzVG91Y2gmJihsfHxDLnR5cGU9PT0ibW91c2Vkb3duIikpKXt2YXIgWT1DLmNvbXBvc2VkUGF0aCYmQy5jb21wb3NlZFBhdGgoKVswXXx8Qy50YXJnZXQ7aWYoIShmLnByb3BzLmludGVyYWN0aXZlJiZudihTLFkpKSl7aWYoU2EoZi5wcm9wcy50cmlnZ2VyVGFyZ2V0fHxlKS5zb21lKGZ1bmN0aW9uKGFlKXtyZXR1cm4gbnYoYWUsWSl9KSl7aWYoR24uaXNUb3VjaHx8Zi5zdGF0ZS5pc1Zpc2libGUmJmYucHJvcHMudHJpZ2dlci5pbmRleE9mKCJjbGljayIpPj0wKXJldHVybn1lbHNlIE8oIm9uQ2xpY2tPdXRzaWRlIixbZixDXSk7Zi5wcm9wcy5oaWRlT25DbGljaz09PSEwJiYoZi5jbGVhckRlbGF5VGltZW91dHMoKSxmLmhpZGUoKSxzPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPSExfSksZi5zdGF0ZS5pc01vdW50ZWR8fGVlKCkpfX19ZnVuY3Rpb24gJCgpe2w9ITB9ZnVuY3Rpb24gWCgpe2w9ITF9ZnVuY3Rpb24gWigpe3ZhciBDPVUoKTtDLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsUiwhMCksQy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsUixUbyksQy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixYLFRvKSxDLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsJCxUbyl9ZnVuY3Rpb24gZWUoKXt2YXIgQz1VKCk7Qy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFIsITApLEMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLFIsVG8pLEMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsWCxUbyksQy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCQsVG8pfWZ1bmN0aW9uIHEoQyxZKXtwZShDLGZ1bmN0aW9uKCl7IWYuc3RhdGUuaXNWaXNpYmxlJiZTLnBhcmVudE5vZGUmJlMucGFyZW50Tm9kZS5jb250YWlucyhTKSYmWSgpfSl9ZnVuY3Rpb24gb2UoQyxZKXtwZShDLFkpfWZ1bmN0aW9uIHBlKEMsWSl7dmFyIGFlPUYoKS5ib3g7ZnVuY3Rpb24gTmUodmUpe3ZlLnRhcmdldD09PWFlJiYobXAoYWUsInJlbW92ZSIsTmUpLFkoKSl9aWYoQz09PTApcmV0dXJuIFkoKTttcChhZSwicmVtb3ZlIixwKSxtcChhZSwiYWRkIixOZSkscD1OZX1mdW5jdGlvbiBnZShDLFksYWUpe2FlPT09dm9pZCAwJiYoYWU9ITEpO3ZhciBOZT1TYShmLnByb3BzLnRyaWdnZXJUYXJnZXR8fGUpO05lLmZvckVhY2goZnVuY3Rpb24odmUpe3ZlLmFkZEV2ZW50TGlzdGVuZXIoQyxZLGFlKSxoLnB1c2goe25vZGU6dmUsZXZlbnRUeXBlOkMsaGFuZGxlcjpZLG9wdGlvbnM6YWV9KX0pfWZ1bmN0aW9uIHRlKCl7UCgpJiYoZ2UoInRvdWNoc3RhcnQiLHVlLHtwYXNzaXZlOiEwfSksZ2UoInRvdWNoZW5kIixBZSx7cGFzc2l2ZTohMH0pKSxZMShmLnByb3BzLnRyaWdnZXIpLmZvckVhY2goZnVuY3Rpb24oQyl7aWYoQyE9PSJtYW51YWwiKXN3aXRjaChnZShDLHVlKSxDKXtjYXNlIm1vdXNlZW50ZXIiOmdlKCJtb3VzZWxlYXZlIixBZSk7YnJlYWs7Y2FzZSJmb2N1cyI6Z2Uoc1M/ImZvY3Vzb3V0IjoiYmx1ciIsWGUpO2JyZWFrO2Nhc2UiZm9jdXNpbiI6Z2UoImZvY3Vzb3V0IixYZSk7YnJlYWt9fSl9ZnVuY3Rpb24gc2UoKXtoLmZvckVhY2goZnVuY3Rpb24oQyl7dmFyIFk9Qy5ub2RlLGFlPUMuZXZlbnRUeXBlLE5lPUMuaGFuZGxlcix2ZT1DLm9wdGlvbnM7WS5yZW1vdmVFdmVudExpc3RlbmVyKGFlLE5lLHZlKX0pLGg9W119ZnVuY3Rpb24gdWUoQyl7dmFyIFksYWU9ITE7aWYoISghZi5zdGF0ZS5pc0VuYWJsZWR8fFplKEMpfHxzKSl7dmFyIE5lPSgoWT11KT09bnVsbD92b2lkIDA6WS50eXBlKT09PSJmb2N1cyI7dT1DLHc9Qy5jdXJyZW50VGFyZ2V0LFQoKSwhZi5zdGF0ZS5pc1Zpc2libGUmJlgxKEMpJiZGbC5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtyZXR1cm4gdmUoQyl9KSxDLnR5cGU9PT0iY2xpY2siJiYoZi5wcm9wcy50cmlnZ2VyLmluZGV4T2YoIm1vdXNlZW50ZXIiKTwwfHxpKSYmZi5wcm9wcy5oaWRlT25DbGljayE9PSExJiZmLnN0YXRlLmlzVmlzaWJsZT9hZT0hMDpMbihDKSxDLnR5cGU9PT0iY2xpY2siJiYoaT0hYWUpLGFlJiYhTmUmJmduKEMpfX1mdW5jdGlvbiBuZShDKXt2YXIgWT1DLnRhcmdldCxhZT1MKCkuY29udGFpbnMoWSl8fFMuY29udGFpbnMoWSk7aWYoIShDLnR5cGU9PT0ibW91c2Vtb3ZlIiYmYWUpKXt2YXIgTmU9RXQoKS5jb25jYXQoUykubWFwKGZ1bmN0aW9uKHZlKXt2YXIgVHQsdG49dmUuX3RpcHB5LExvPShUdD10bi5wb3BwZXJJbnN0YW5jZSk9PW51bGw/dm9pZCAwOlR0LnN0YXRlO3JldHVybiBMbz97cG9wcGVyUmVjdDp2ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwb3BwZXJTdGF0ZTpMbyxwcm9wczpufTpudWxsfSkuZmlsdGVyKEJvb2xlYW4pO25TKE5lLEMpJiYoaygpLGduKEMpKX19ZnVuY3Rpb24gQWUoQyl7dmFyIFk9WmUoQyl8fGYucHJvcHMudHJpZ2dlci5pbmRleE9mKCJjbGljayIpPj0wJiZpO2lmKCFZKXtpZihmLnByb3BzLmludGVyYWN0aXZlKXtmLmhpZGVXaXRoSW50ZXJhY3Rpdml0eShDKTtyZXR1cm59Z24oQyl9fWZ1bmN0aW9uIFhlKEMpe2YucHJvcHMudHJpZ2dlci5pbmRleE9mKCJmb2N1c2luIik8MCYmQy50YXJnZXQhPT1MKCl8fGYucHJvcHMuaW50ZXJhY3RpdmUmJkMucmVsYXRlZFRhcmdldCYmUy5jb250YWlucyhDLnJlbGF0ZWRUYXJnZXQpfHxnbihDKX1mdW5jdGlvbiBaZShDKXtyZXR1cm4gR24uaXNUb3VjaD9QKCkhPT1DLnR5cGUuaW5kZXhPZigidG91Y2giKT49MDohMX1mdW5jdGlvbiB5dCgpe1B0KCk7dmFyIEM9Zi5wcm9wcyxZPUMucG9wcGVyT3B0aW9ucyxhZT1DLnBsYWNlbWVudCxOZT1DLm9mZnNldCx2ZT1DLmdldFJlZmVyZW5jZUNsaWVudFJlY3QsVHQ9Qy5tb3ZlVHJhbnNpdGlvbix0bj1JKCk/dnAoUykuYXJyb3c6bnVsbCxMbz12ZT97Z2V0Qm91bmRpbmdDbGllbnRSZWN0OnZlLGNvbnRleHRFbGVtZW50OnZlLmNvbnRleHRFbGVtZW50fHxMKCl9OmUsQWY9e25hbWU6IiQkdGlwcHkiLGVuYWJsZWQ6ITAscGhhc2U6ImJlZm9yZVdyaXRlIixyZXF1aXJlczpbImNvbXB1dGVTdHlsZXMiXSxmbjpmdW5jdGlvbih0cyl7dmFyIHpvPXRzLnN0YXRlO2lmKEkoKSl7dmFyIENiPUYoKSxrYz1DYi5ib3g7WyJwbGFjZW1lbnQiLCJyZWZlcmVuY2UtaGlkZGVuIiwiZXNjYXBlZCJdLmZvckVhY2goZnVuY3Rpb24obnMpe25zPT09InBsYWNlbWVudCI/a2Muc2V0QXR0cmlidXRlKCJkYXRhLXBsYWNlbWVudCIsem8ucGxhY2VtZW50KTp6by5hdHRyaWJ1dGVzLnBvcHBlclsiZGF0YS1wb3BwZXItIituc10/a2Muc2V0QXR0cmlidXRlKCJkYXRhLSIrbnMsIiIpOmtjLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS0iK25zKX0pLHpvLmF0dHJpYnV0ZXMucG9wcGVyPXt9fX19LFpyPVt7bmFtZToib2Zmc2V0IixvcHRpb25zOntvZmZzZXQ6TmV9fSx7bmFtZToicHJldmVudE92ZXJmbG93IixvcHRpb25zOntwYWRkaW5nOnt0b3A6Mixib3R0b206MixsZWZ0OjUscmlnaHQ6NX19fSx7bmFtZToiZmxpcCIsb3B0aW9uczp7cGFkZGluZzo1fX0se25hbWU6ImNvbXB1dGVTdHlsZXMiLG9wdGlvbnM6e2FkYXB0aXZlOiFUdH19LEFmXTtJKCkmJnRuJiZaci5wdXNoKHtuYW1lOiJhcnJvdyIsb3B0aW9uczp7ZWxlbWVudDp0bixwYWRkaW5nOjN9fSksWnIucHVzaC5hcHBseShacixZPy5tb2RpZmllcnN8fFtdKSxmLnBvcHBlckluc3RhbmNlPXBwKExvLFMsT2JqZWN0LmFzc2lnbih7fSxZLHtwbGFjZW1lbnQ6YWUsb25GaXJzdFVwZGF0ZTpkLG1vZGlmaWVyczpacn0pKX1mdW5jdGlvbiBQdCgpe2YucG9wcGVySW5zdGFuY2UmJihmLnBvcHBlckluc3RhbmNlLmRlc3Ryb3koKSxmLnBvcHBlckluc3RhbmNlPW51bGwpfWZ1bmN0aW9uIFVlKCl7dmFyIEM9Zi5wcm9wcy5hcHBlbmRUbyxZLGFlPUwoKTtmLnByb3BzLmludGVyYWN0aXZlJiZDPT09dXZ8fEM9PT0icGFyZW50Ij9ZPWFlLnBhcmVudE5vZGU6WT1kdihDLFthZV0pLFkuY29udGFpbnMoUyl8fFkuYXBwZW5kQ2hpbGQoUyksZi5zdGF0ZS5pc01vdW50ZWQ9ITAseXQoKX1mdW5jdGlvbiBFdCgpe3JldHVybiBVbChTLnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXRpcHB5LXJvb3RdIikpfWZ1bmN0aW9uIExuKEMpe2YuY2xlYXJEZWxheVRpbWVvdXRzKCksQyYmTygib25UcmlnZ2VyIixbZixDXSksWigpO3ZhciBZPUgoITApLGFlPUEoKSxOZT1hZVswXSx2ZT1hZVsxXTtHbi5pc1RvdWNoJiZOZT09PSJob2xkIiYmdmUmJihZPXZlKSxZP3I9c2V0VGltZW91dChmdW5jdGlvbigpe2Yuc2hvdygpfSxZKTpmLnNob3coKX1mdW5jdGlvbiBnbihDKXtpZihmLmNsZWFyRGVsYXlUaW1lb3V0cygpLE8oIm9uVW50cmlnZ2VyIixbZixDXSksIWYuc3RhdGUuaXNWaXNpYmxlKXtlZSgpO3JldHVybn1pZighKGYucHJvcHMudHJpZ2dlci5pbmRleE9mKCJtb3VzZWVudGVyIik+PTAmJmYucHJvcHMudHJpZ2dlci5pbmRleE9mKCJjbGljayIpPj0wJiZbIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiXS5pbmRleE9mKEMudHlwZSk+PTAmJmkpKXt2YXIgWT1IKCExKTtZP289c2V0VGltZW91dChmdW5jdGlvbigpe2Yuc3RhdGUuaXNWaXNpYmxlJiZmLmhpZGUoKX0sWSk6YT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtmLmhpZGUoKX0pfX1mdW5jdGlvbiB5bigpe2Yuc3RhdGUuaXNFbmFibGVkPSEwfWZ1bmN0aW9uIHdyKCl7Zi5oaWRlKCksZi5zdGF0ZS5pc0VuYWJsZWQ9ITF9ZnVuY3Rpb24gem4oKXtjbGVhclRpbWVvdXQociksY2xlYXJUaW1lb3V0KG8pLGNhbmNlbEFuaW1hdGlvbkZyYW1lKGEpfWZ1bmN0aW9uIGZlKEMpe2lmKCFmLnN0YXRlLmlzRGVzdHJveWVkKXtPKCJvbkJlZm9yZVVwZGF0ZSIsW2YsQ10pLHNlKCk7dmFyIFk9Zi5wcm9wcyxhZT1vdihlLE9iamVjdC5hc3NpZ24oe30sWSxldihDKSx7aWdub3JlQXR0cmlidXRlczohMH0pKTtmLnByb3BzPWFlLHRlKCksWS5pbnRlcmFjdGl2ZURlYm91bmNlIT09YWUuaW50ZXJhY3RpdmVEZWJvdW5jZSYmKGsoKSx5PVh5KG5lLGFlLmludGVyYWN0aXZlRGVib3VuY2UpKSxZLnRyaWdnZXJUYXJnZXQmJiFhZS50cmlnZ2VyVGFyZ2V0P1NhKFkudHJpZ2dlclRhcmdldCkuZm9yRWFjaChmdW5jdGlvbihOZSl7TmUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIil9KTphZS50cmlnZ2VyVGFyZ2V0JiZlLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpLFQoKSxpZSgpLE4mJk4oWSxhZSksZi5wb3BwZXJJbnN0YW5jZSYmKHl0KCksRXQoKS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTmUuX3RpcHB5LnBvcHBlckluc3RhbmNlLmZvcmNlVXBkYXRlKX0pKSxPKCJvbkFmdGVyVXBkYXRlIixbZixDXSl9fWZ1bmN0aW9uIE9lKEMpe2Yuc2V0UHJvcHMoe2NvbnRlbnQ6Q30pfWZ1bmN0aW9uIHZ0KCl7dmFyIEM9Zi5zdGF0ZS5pc1Zpc2libGUsWT1mLnN0YXRlLmlzRGVzdHJveWVkLGFlPSFmLnN0YXRlLmlzRW5hYmxlZCxOZT1Hbi5pc1RvdWNoJiYhZi5wcm9wcy50b3VjaCx2ZT1mcChmLnByb3BzLmR1cmF0aW9uLDAsT24uZHVyYXRpb24pO2lmKCEoQ3x8WXx8YWV8fE5lKSYmIUwoKS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJihPKCJvblNob3ciLFtmXSwhMSksZi5wcm9wcy5vblNob3coZikhPT0hMSkpe2lmKGYuc3RhdGUuaXNWaXNpYmxlPSEwLEkoKSYmKFMuc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIpLGllKCksWigpLGYuc3RhdGUuaXNNb3VudGVkfHwoUy5zdHlsZS50cmFuc2l0aW9uPSJub25lIiksSSgpKXt2YXIgVHQ9RigpLHRuPVR0LmJveCxMbz1UdC5jb250ZW50O2hwKFt0bixMb10sMCl9ZD1mdW5jdGlvbigpe3ZhciBacjtpZighKCFmLnN0YXRlLmlzVmlzaWJsZXx8Yykpe2lmKGM9ITAsUy5vZmZzZXRIZWlnaHQsUy5zdHlsZS50cmFuc2l0aW9uPWYucHJvcHMubW92ZVRyYW5zaXRpb24sSSgpJiZmLnByb3BzLmFuaW1hdGlvbil7dmFyIGJjPUYoKSx0cz1iYy5ib3gsem89YmMuY29udGVudDtocChbdHMsem9dLHZlKSx0dihbdHMsem9dLCJ2aXNpYmxlIil9RygpLFQoKSxaeShncCxmKSwoWnI9Zi5wb3BwZXJJbnN0YW5jZSk9PW51bGx8fFpyLmZvcmNlVXBkYXRlKCksTygib25Nb3VudCIsW2ZdKSxmLnByb3BzLmFuaW1hdGlvbiYmSSgpJiZvZSh2ZSxmdW5jdGlvbigpe2Yuc3RhdGUuaXNTaG93bj0hMCxPKCJvblNob3duIixbZl0pfSl9fSxVZSgpfX1mdW5jdGlvbiBlbigpe3ZhciBDPSFmLnN0YXRlLmlzVmlzaWJsZSxZPWYuc3RhdGUuaXNEZXN0cm95ZWQsYWU9IWYuc3RhdGUuaXNFbmFibGVkLE5lPWZwKGYucHJvcHMuZHVyYXRpb24sMSxPbi5kdXJhdGlvbik7aWYoIShDfHxZfHxhZSkmJihPKCJvbkhpZGUiLFtmXSwhMSksZi5wcm9wcy5vbkhpZGUoZikhPT0hMSkpe2lmKGYuc3RhdGUuaXNWaXNpYmxlPSExLGYuc3RhdGUuaXNTaG93bj0hMSxjPSExLGk9ITEsSSgpJiYoUy5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iKSxrKCksZWUoKSxpZSghMCksSSgpKXt2YXIgdmU9RigpLFR0PXZlLmJveCx0bj12ZS5jb250ZW50O2YucHJvcHMuYW5pbWF0aW9uJiYoaHAoW1R0LHRuXSxOZSksdHYoW1R0LHRuXSwiaGlkZGVuIikpfUcoKSxUKCksZi5wcm9wcy5hbmltYXRpb24/SSgpJiZxKE5lLGYudW5tb3VudCk6Zi51bm1vdW50KCl9fWZ1bmN0aW9uIHZuKEMpe1UoKS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHkpLFp5KEZsLHkpLHkoQyl9ZnVuY3Rpb24gWHIoKXtmLnN0YXRlLmlzVmlzaWJsZSYmZi5oaWRlKCksZi5zdGF0ZS5pc01vdW50ZWQmJihQdCgpLEV0KCkuZm9yRWFjaChmdW5jdGlvbihDKXtDLl90aXBweS51bm1vdW50KCl9KSxTLnBhcmVudE5vZGUmJlMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChTKSxncD1ncC5maWx0ZXIoZnVuY3Rpb24oQyl7cmV0dXJuIEMhPT1mfSksZi5zdGF0ZS5pc01vdW50ZWQ9ITEsTygib25IaWRkZW4iLFtmXSkpfWZ1bmN0aW9uIFBvKCl7Zi5zdGF0ZS5pc0Rlc3Ryb3llZHx8KGYuY2xlYXJEZWxheVRpbWVvdXRzKCksZi51bm1vdW50KCksc2UoKSxkZWxldGUgZS5fdGlwcHksZi5zdGF0ZS5pc0Rlc3Ryb3llZD0hMCxPKCJvbkRlc3Ryb3kiLFtmXSkpfX1mdW5jdGlvbiBSaShlLHQpe3Q9PT12b2lkIDAmJih0PXt9KTt2YXIgbj1Pbi5wbHVnaW5zLmNvbmNhdCh0LnBsdWdpbnN8fFtdKTthUygpO3ZhciByPU9iamVjdC5hc3NpZ24oe30sdCx7cGx1Z2luczpufSksbz1lUyhlKTtpZigwKXZhciBhLGk7dmFyIHM9by5yZWR1Y2UoZnVuY3Rpb24obCxjKXt2YXIgdT1jJiZtUyhjLHIpO3JldHVybiB1JiZsLnB1c2godSksbH0sW10pO3JldHVybiAkbChlKT9zWzBdOnN9UmkuZGVmYXVsdFByb3BzPU9uO1JpLnNldERlZmF1bHRQcm9wcz1kUztSaS5jdXJyZW50SW5wdXQ9R247dmFyIEhSPU9iamVjdC5hc3NpZ24oe30sVGkse2VmZmVjdDpmdW5jdGlvbih0KXt2YXIgbj10LnN0YXRlLHI9e3BvcHBlcjp7cG9zaXRpb246bi5vcHRpb25zLnN0cmF0ZWd5LGxlZnQ6IjAiLHRvcDoiMCIsbWFyZ2luOiIwIn0sYXJyb3c6e3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9LHJlZmVyZW5jZTp7fX07T2JqZWN0LmFzc2lnbihuLmVsZW1lbnRzLnBvcHBlci5zdHlsZSxyLnBvcHBlciksbi5zdHlsZXM9cixuLmVsZW1lbnRzLmFycm93JiZPYmplY3QuYXNzaWduKG4uZWxlbWVudHMuYXJyb3cuc3R5bGUsci5hcnJvdyl9fSk7Umkuc2V0RGVmYXVsdFByb3BzKHtyZW5kZXI6aHZ9KTt2YXIgTWk9Umk7dmFyIGZuPXooeWUoKSwxKTt2YXIgd3Y9eihyZSgpLDEpLHZ2PXt0aGVtZToiZGFzaGJvYXJkIixkdXJhdGlvbjpbMTIwLDgwXSxhcnJvdzohMCxvZmZzZXQ6WzAsOF19O2Z1bmN0aW9uIFBpKHtjb250ZW50OmUscGxhY2VtZW50OnQsaW50ZXJhY3RpdmU6bixjaGlsZHJlbjpyLC4uLm99KXtsZXQgYT0oMCxmbi51c2VSZWYpKG51bGwpLGk9KDAsZm4udXNlUmVmKShudWxsKTtyZXR1cm4oMCxmbi51c2VFZmZlY3QpKCgpPT57aWYoYS5jdXJyZW50KXJldHVybiBpLmN1cnJlbnQ9TWkoYS5jdXJyZW50LHsuLi52dixjb250ZW50OmV8fCIiLHBsYWNlbWVudDp0fHwidG9wIixpbnRlcmFjdGl2ZTpufHwhMSxhbGxvd0hUTUw6ITAsLi4ub30pLCgpPT57aS5jdXJyZW50Py5kZXN0cm95KCksaS5jdXJyZW50PW51bGx9fSxbXSksKDAsZm4udXNlRWZmZWN0KSgoKT0+e2kuY3VycmVudCYmZSE9bnVsbCYmaS5jdXJyZW50LnNldENvbnRlbnQoZSl9LFtlXSksKDAsd3YuanN4KSgic3BhbiIse3JlZjphLHN0eWxlOntkaXNwbGF5OiJpbmxpbmUifSxjaGlsZHJlbjpyfSl9ZnVuY3Rpb24gTGkoZT17fSl7bGV0IHQ9KDAsZm4udXNlUmVmKShudWxsKSxuPSgwLGZuLnVzZVJlZikoe3dpZHRoOjAsaGVpZ2h0OjAsdG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9KSxyPSgwLGZuLnVzZVJlZikobnVsbCksbz0oMCxmbi51c2VSZWYpKGUuaGlkZURlbGF5fHwzMDApLGE9KDAsZm4udXNlUmVmKShudWxsKTtmdW5jdGlvbiBpKCl7ci5jdXJyZW50JiYoY2xlYXJUaW1lb3V0KHIuY3VycmVudCksci5jdXJyZW50PW51bGwpfWZ1bmN0aW9uIHModSxwKXtpKCkscCE9PXZvaWQgMCYmKGEuY3VycmVudD1wKSxyLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e3IuY3VycmVudD1udWxsLHQuY3VycmVudD8uaGlkZSgpLGEuY3VycmVudCYmYS5jdXJyZW50KCl9LHU/P28uY3VycmVudCl9KDAsZm4udXNlRWZmZWN0KSgoKT0+e3QuY3VycmVudD1NaShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx7Li4udnYsZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdDooKT0+bi5jdXJyZW50LHRyaWdnZXI6Im1hbnVhbCIsaGlkZU9uQ2xpY2s6ITEsYWxsb3dIVE1MOiEwLGludGVyYWN0aXZlOiEhZS5pbnRlcmFjdGl2ZSxwbGFjZW1lbnQ6ZS5wbGFjZW1lbnR8fCJ0b3AiLGFwcGVuZFRvOigpPT5kb2N1bWVudC5ib2R5LC4uLmV9KTtsZXQgdSxwO2lmKGUuaW50ZXJhY3RpdmUpe2xldCBkPXQuY3VycmVudC5wb3BwZXI7dT0oKT0+aSgpLHA9KCk9PnMoKSxkLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLHUpLGQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIscCl9cmV0dXJuKCk9PntpZihlLmludGVyYWN0aXZlJiZ0LmN1cnJlbnQpe2xldCBkPXQuY3VycmVudC5wb3BwZXI7dSYmZC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix1KSxwJiZkLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHApfWkoKSx0LmN1cnJlbnQ/LmRlc3Ryb3koKSx0LmN1cnJlbnQ9bnVsbH19LFtdKTtmdW5jdGlvbiBsKHUscCxkLGgpe2koKTtsZXQgeT10LmN1cnJlbnQ7aWYoIXkpcmV0dXJuO24uY3VycmVudD17d2lkdGg6MCxoZWlnaHQ6MCx0b3A6ZCxyaWdodDpwLGJvdHRvbTpkLGxlZnQ6cH0seS5zZXRDb250ZW50KHUpO2xldCB3PWh8fHt9LGI9dy5wbGFjZW1lbnR8fHkucHJvcHMucGxhY2VtZW50O2IhPT15LnByb3BzLnBsYWNlbWVudCYmeS5zZXRQcm9wcyh7cGxhY2VtZW50OmJ9KTtsZXQgZz15LnBvcHBlci5maXJzdEVsZW1lbnRDaGlsZDtnJiZnLmNsYXNzTGlzdC50b2dnbGUoImJlbG93LWNoYXJ0IiwhIXcuYmVsb3dDaGFydCkseS5zdGF0ZS5pc1Zpc2libGU/eS5wb3BwZXJJbnN0YW5jZT8udXBkYXRlKCk6eS5zaG93KCl9ZnVuY3Rpb24gYygpe2koKSx0LmN1cnJlbnQ/LmhpZGUoKX1yZXR1cm57c2hvdzpsLGhpZGU6YyxzY2hlZHVsZUhpZGU6cyxjYW5jZWxTY2hlZHVsZWRIaWRlOml9fXZhciBUYT16KHllKCkpO3ZhciB6aT17c2V0dGluZ3M6e30sY29udGV4dDp7fX07ZnVuY3Rpb24gYnYoZSl7ZS5zZXR0aW5ncyYmKHppLnNldHRpbmdzPWUuc2V0dGluZ3MpLGUuY29udGV4dCYmKHppLmNvbnRleHQ9ZS5jb250ZXh0KX1mdW5jdGlvbiBIZSgpe3JldHVybiB6aS5zZXR0aW5nc31mdW5jdGlvbiBGaSgpe3JldHVybiB6aS5jb250ZXh0fWZ1bmN0aW9uIEJsKGUsdCl7emkuc2V0dGluZ3NbZV09dH1mdW5jdGlvbiBudChlLHt0aHJvd09uSW52YWxpZDp0PSEwfT17fSl7bGV0IG49KCk9PntpZighdClyZXR1cm4gbnVsbDt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGRhdGUgaW5wdXQ6ICR7U3RyaW5nKGUpfWApfTtpZihlPT1udWxsfHxlPT09IiIpcmV0dXJuIG4oKTtpZihlIGluc3RhbmNlb2YgRGF0ZSl7bGV0IG89bmV3IERhdGUoZSk7cmV0dXJuIE51bWJlci5pc05hTihvLmdldFRpbWUoKSk/bigpOm99aWYodHlwZW9mIGU9PSJudW1iZXIiKXtpZighTnVtYmVyLmlzRmluaXRlKGUpKXJldHVybiBuKCk7bGV0IG89TWF0aC5hYnMoZSk8MWUxMD9lKjFlMzplLGE9bmV3IERhdGUobyk7cmV0dXJuIE51bWJlci5pc05hTihhLmdldFRpbWUoKSk/bigpOmF9aWYodHlwZW9mIGU9PSJzdHJpbmciKXtsZXQgbz1lLnRyaW0oKTtpZighbylyZXR1cm4gbigpO2lmKC9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KGUpKXtsZXRbcyxsLGNdPWUuc3BsaXQoIi0iKS5tYXAoTnVtYmVyKTtyZXR1cm4gbmV3IERhdGUocyxsLTEsYyl9bGV0IGE9TnVtYmVyKG8pO2lmKCFOdW1iZXIuaXNOYU4oYSkpcmV0dXJuIG50KGEse3Rocm93T25JbnZhbGlkOnR9KTtsZXQgaT1uZXcgRGF0ZShvKTtyZXR1cm4gTnVtYmVyLmlzTmFOKGkuZ2V0VGltZSgpKT9uKCk6aX1sZXQgcj1uZXcgRGF0ZShlKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHIuZ2V0VGltZSgpKT9uKCk6cn1mdW5jdGlvbiBwcihlKXtsZXQgdD1udChlKSxuPXQuZ2V0RnVsbFllYXIoKSxyPVN0cmluZyh0LmdldE1vbnRoKCkrMSkucGFkU3RhcnQoMiwiMCIpLG89U3RyaW5nKHQuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCIwIik7cmV0dXJuYCR7bn0tJHtyfS0ke299YH1mdW5jdGlvbiBGZShlKXtyZXR1cm4gcHIoZSl9ZnVuY3Rpb24gaG4oZSx0PTEpe2xldCBuPW50KGUpLG89KG4uZ2V0RGF5KCktdCs3KSU3LGE9bmV3IERhdGUobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKS1vKTtyZXR1cm4gYS5zZXRIb3VycygwLDAsMCwwKSxhfWZ1bmN0aW9uIGt2KGUsdD0xKXtsZXQgbj1obihlLHQpLHI9bmV3IERhdGUobik7cmV0dXJuIHIuc2V0RGF0ZShyLmdldERhdGUoKSs2KSxyLnNldEhvdXJzKDIzLDU5LDU5LDk5OSkscn1mdW5jdGlvbiB4dihlLHQ9MSl7bGV0IG49aG4oZSx0KSxyPVtdO2ZvcihsZXQgbz0wO288NztvKyspe2xldCBhPW5ldyBEYXRlKG4uZ2V0RnVsbFllYXIoKSxuLmdldE1vbnRoKCksbi5nZXREYXRlKCkrbyksaT1uZXcgRGF0ZShuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpK28rMSk7ci5wdXNoKHtmcm9tOk1hdGguZmxvb3IoYS5nZXRUaW1lKCkvMWUzKSx0bzpNYXRoLmZsb29yKGkuZ2V0VGltZSgpLzFlMyksZGF0ZUtleTpGZShhKX0pfXJldHVybntib3VuZGFyaWVzOnIsd2Vla1N0YXJ0S2V5OkZlKG4pfX1mdW5jdGlvbiBTdihlLHQ9MSl7bGV0IG49aG4oZSx0KTtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOjd9LChyLG8pPT57bGV0IGE9bmV3IERhdGUobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKStvKTtyZXR1cm57ZGF5OmEudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7d2Vla2RheToic2hvcnQifSksZGF0ZTphLnRvSVNPU3RyaW5nKCksZGF0ZUtleTpGZShhKX19KX1mdW5jdGlvbiBIbChlKXtyZXR1cm4gZT09PSJzdW5kYXkiPzA6MX1mdW5jdGlvbiBFYShlLHQpe3JldHVybiB0PT09IjI0aCI/YCR7U3RyaW5nKGUpLnBhZFN0YXJ0KDIsIjAiKX06MDBgOmU9PT0wPyIxMmFtIjplPDEyP2Ake2V9YW1gOmU9PT0xMj8iMTJwbSI6YCR7ZS0xMn1wbWB9ZnVuY3Rpb24gRXYoZSl7cmV0dXJuIG50KGUpLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse3dlZWtkYXk6InNob3J0Iixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyJ9KX1hc3luYyBmdW5jdGlvbiBUdihlLHQpe2xldCBuPW5ldyBEYXRlLHI9aG4obiksbz1rdihuKSxhPUhlKClbSy5UQVNLX0RPTUFJTlNdLGk9e307dHJ5e2k9YT9KU09OLnBhcnNlKGEpOnt9fWNhdGNoe2k9e319aS5zZWxlY3RlZERvbWFpblV1aWQ9dCxhd2FpdCBlLnNldFNldHRpbmcoSy5UQVNLX0RPTUFJTlMsSlNPTi5zdHJpbmdpZnkoaSkpO2xldCBzPWF3YWl0IFNTKGUsdCk7cmV0dXJue3Rhc2tzOnMsdG9kYXlUYXNrczpFUyhzLG4pLGNvbXBsZXRlZFRoaXNXZWVrOkl2KHMscixvKSx3ZWVrbHlWaWN0b3J5VmFsdWU6VFMocyxyLG8pLGRhaWx5VmljdG9yeVZhbHVlczpOUyhzLHIpLGFjdGl2ZVRhc2tEb21haW46dH19YXN5bmMgZnVuY3Rpb24gTnYoZSl7RSgiW3JlZnJlc2hUYXNrRG9tYWluc10gU3RhcnRpbmcgZG9tYWluIHJlZnJlc2giKTtsZXQgdD1hd2FpdCBlLmdldFRhc2tEb21haW5zKCk7RShgW3JlZnJlc2hUYXNrRG9tYWluc10gRmV0Y2hlZCAke3Q/Lmxlbmd0aD8/MH0gZG9tYWlucyBmcm9tIEFQSWAsdCk7bGV0IG49SGUoKVtLLlRBU0tfRE9NQUlOU10scj17fTt0cnl7cj1uP0pTT04ucGFyc2Uobik6e319Y2F0Y2h7cj17fX1yZXR1cm4gci5kb21haW5zPXQubWFwKGE9Pih7bmFtZTphLm5hbWUsdXVpZDphLnV1aWR9KSksci5sYXN0UmV0cmlldmVkPURhdGUubm93KCksci5zZWxlY3RlZERvbWFpblV1aWQmJnIuZG9tYWlucy5zb21lKGE9PmEudXVpZD09PXIuc2VsZWN0ZWREb21haW5VdWlkKXx8KEUoYFtyZWZyZXNoVGFza0RvbWFpbnNdIFByZXZpb3VzIHNlbGVjdGlvbiAke3Iuc2VsZWN0ZWREb21haW5VdWlkfSBubyBsb25nZXIgZXhpc3RzLCBwaWNraW5nIGRlZmF1bHRgKSxyLnNlbGVjdGVkRG9tYWluVXVpZD14UyhyLmRvbWFpbnMpKSxhd2FpdCBlLnNldFNldHRpbmcoSy5UQVNLX0RPTUFJTlMsSlNPTi5zdHJpbmdpZnkocikpLEUoYFtyZWZyZXNoVGFza0RvbWFpbnNdIFJlZnJlc2ggY29tcGxldGUgXHUyMDE0ICR7ci5kb21haW5zLmxlbmd0aH0gZG9tYWlucywgYWN0aXZlOiAke3Iuc2VsZWN0ZWREb21haW5VdWlkfWApLHtkb21haW5zOnIuZG9tYWlucyxhY3RpdmVUYXNrRG9tYWluOnIuc2VsZWN0ZWREb21haW5VdWlkfX1hc3luYyBmdW5jdGlvbiBEdihlLHQpe2xldHtsYWJlbDpuLHllYXI6cixxdWFydGVyOm99PXQsYT1gJHtufSBQbGFuYCxpPUhlKClbSy5QTEFOTklOR19OT1RFX1RBR118fFRsLHM9W1dlLGldLGM9KGF3YWl0IGUuZmlsdGVyTm90ZXMoe3F1ZXJ5OmF9KSkuZmluZChkPT5kLm5hbWU9PT1hKTtpZihjKXJldHVybiBhd2FpdCBlLm5hdmlnYXRlKGBodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzLyR7Yy51dWlkfWApLHt1dWlkOmMudXVpZCxleGlzdGVkOiEwfTtsZXQgdT1rcChuLG8pLHA9YXdhaXQgZS5jcmVhdGVOb3RlKGEscyk7cmV0dXJuIGF3YWl0IGUuaW5zZXJ0Tm90ZUNvbnRlbnQoe3V1aWQ6cH0sdSksYXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke3B9YCkse3V1aWQ6cCxleGlzdGVkOiExfX1hc3luYyBmdW5jdGlvbiBfdihlLHQse2FwaUtleTpuLHByb3ZpZGVyOnJ9PXt9KXtsZXQgbz1IZSgpO2lmKG58fChuPW9bIkxMTSBBUEkgS2V5Il0pLHJ8fChyPW9bSy5MTE1fUFJPVklERVJfTU9ERUxdfHwib3BlbmFpIiksIW4pcmV0dXJuW107bGV0IGE9dD9gQmFzZWQgb24gdGhlc2UgcXVhcnRlcmx5IGdvYWxzLCBnZW5lcmF0ZSAyIHNob3J0IGluc3BpcmF0aW9uYWwgcXVvdGVzICgxLTIgc2VudGVuY2VzIGVhY2gpIHRoYXQgbW90aXZhdGUgcHJvZ3Jlc3MgdG93YXJkIHRoZXNlIGdvYWxzLiBSZXR1cm4gYXMgSlNPTiBhcnJheSBbe3RleHQsIGF1dGhvcn1dLiBHb2FsczogJHt0LnN1YnN0cmluZygwLDUwMCl9YDoiR2VuZXJhdGUgMiBzaG9ydCBpbnNwaXJhdGlvbmFsIHF1b3RlcyBhYm91dCBwcm9kdWN0aXZpdHkgYW5kIHBlcnNvbmFsIGdyb3d0aC4gUmV0dXJuIGFzIEpTT04gYXJyYXkgW3t0ZXh0LCBhdXRob3J9XS4iLGk9cj09PSJhbnRocm9waWMiPyJodHRwczovL2FwaS5hbnRocm9waWMuY29tL3YxL21lc3NhZ2VzIjoiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9jaGF0L2NvbXBsZXRpb25zIixzPXI9PT0iYW50aHJvcGljIj97IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24iLCJ4LWFwaS1rZXkiOm4sImFudGhyb3BpYy12ZXJzaW9uIjoiMjAyMy0wNi0wMSJ9OnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiIsQXV0aG9yaXphdGlvbjpgQmVhcmVyICR7bn1gfSxsPXI9PT0iYW50aHJvcGljIj97bW9kZWw6ImNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNCIsbWF4X3Rva2VuczozMDAsbWVzc2FnZXM6W3tyb2xlOiJ1c2VyIixjb250ZW50OmF9XX06e21vZGVsOiJncHQtNG8tbWluaSIsbWVzc2FnZXM6W3tyb2xlOiJ1c2VyIixjb250ZW50OmF9XSxtYXhfdG9rZW5zOjMwMH07dHJ5e2xldCB1PWF3YWl0KGF3YWl0IGZldGNoKGkse21ldGhvZDoiUE9TVCIsaGVhZGVyczpzLGJvZHk6SlNPTi5zdHJpbmdpZnkobCl9KSkuanNvbigpLHA9cj09PSJhbnRocm9waWMiP3U/LmNvbnRlbnQ/LlswXT8udGV4dDp1Py5jaG9pY2VzPy5bMF0/Lm1lc3NhZ2U/LmNvbnRlbnQ7cmV0dXJuIEpTT04ucGFyc2UocCl9Y2F0Y2goYyl7cmV0dXJuIEUoIlF1b3RlIGZldGNoIGVycm9yOiIsYyksW3t0ZXh0OiJXaGF0IGdldHMgbWVhc3VyZWQgZ2V0cyBtYW5hZ2VkLiIsYXV0aG9yOiJQZXRlciBEcnVja2VyIn0se3RleHQ6IlNtYWxsIGRhaWx5IGltcHJvdmVtZW50cyBsZWFkIHRvIHN0dW5uaW5nIHJlc3VsdHMuIixhdXRob3I6IlJvYmluIFNoYXJtYSJ9XX19YXN5bmMgZnVuY3Rpb24gYnAoZSx0LG4pe2lmKCF0KXJldHVybntmb3VuZDohMSxjb250ZW50Om51bGx9O2xldCByPWF3YWl0IGUuZ2V0Tm90ZVNlY3Rpb25zKHt1dWlkOnR9KTtFKGBbZ2V0TW9udGhseVBsYW5Db250ZW50XSBub3RlVVVJRD0ke3R9IG1vbnRoTmFtZT0iJHtufSIgc2VjdGlvbnM6YCxyPy5tYXAocz0+cy5oZWFkaW5nPy50ZXh0KSk7bGV0IG89ci5maW5kKHM9PnMuaGVhZGluZyYmcy5oZWFkaW5nLnRleHQmJnMuaGVhZGluZy50ZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpPT09bi50b0xvd2VyQ2FzZSgpKTtpZihFKCJbZ2V0TW9udGhseVBsYW5Db250ZW50XSBtb250aFNlY3Rpb24gZm91bmQ6IiwhIW8pLCFvKXJldHVybntmb3VuZDohMSxjb250ZW50Om51bGx9O2xldCBhPWF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6dH0pLGk9eWEoYSxuKTtyZXR1cm4gRShgW2dldE1vbnRobHlQbGFuQ29udGVudF0gZXh0cmFjdGVkIGNvbnRlbnQgbGVuZ3RoOiAke2k/Lmxlbmd0aD8/MH1gKSx7Zm91bmQ6ITAsY29udGVudDppfHwiIn19YXN5bmMgZnVuY3Rpb24gQ3YoZSx0LG4pe2xldHtsYWJlbDpyLHllYXI6byxxdWFydGVyOmF9PXQsaT1gJHtyfSBQbGFuYCxzPUhlKClbSy5QTEFOTklOR19OT1RFX1RBR118fFRsLGw9W1dlLHNdLHU9KGF3YWl0IGUuZmlsdGVyTm90ZXMoe3F1ZXJ5Oml9KSkuZmluZChoPT5oLm5hbWU9PT1pKSxwO2lmKHUpcD11LnV1aWQsYXdhaXQgZS5pbnNlcnROb3RlQ29udGVudCh7dXVpZDpwfSxKZChuKSx7YXRFbmQ6ITB9KTtlbHNle2xldCBoPWtwKHIsYSk7cD1hd2FpdCBlLmNyZWF0ZU5vdGUoaSxsKSxhd2FpdCBlLmluc2VydE5vdGVDb250ZW50KHt1dWlkOnB9LGgpfWxldCBkPWF3YWl0IE92KGUscCxuKTtyZXR1cm57bm90ZVVVSUQ6cCxjb250ZW50OmQsY3JlYXRlZDohdX19YXN5bmMgZnVuY3Rpb24gQXYoZSx0LG4pe2xldHtsYWJlbDpyLHllYXI6byxxdWFydGVyOmF9PXQsaT1gJHtyfSBQbGFuYCxzPUhlKClbSy5QTEFOTklOR19OT1RFX1RBR118fFRsLGw9W1dlLHNdLHU9KGF3YWl0IGUuZmlsdGVyTm90ZXMoe3F1ZXJ5Oml9KSkuZmluZChoPT5oLm5hbWU9PT1pKSxwO2lmKHUpcD11LnV1aWQsKGF3YWl0IGJwKGUscCxuKSkuZm91bmR8fGF3YWl0IGUuaW5zZXJ0Tm90ZUNvbnRlbnQoe3V1aWQ6cH0sWGQobikse2F0RW5kOiEwfSk7ZWxzZXtsZXQgaD1rcChyLGEpO3A9YXdhaXQgZS5jcmVhdGVOb3RlKGksbCksYXdhaXQgZS5pbnNlcnROb3RlQ29udGVudCh7dXVpZDpwfSxoKSxhd2FpdCBlLmluc2VydE5vdGVDb250ZW50KHt1dWlkOnB9LFhkKG4pLHthdEVuZDohMH0pfWxldCBkPWF3YWl0IE92KGUscCxuKTtyZXR1cm57bm90ZVVVSUQ6cCxjb250ZW50OmR9fWFzeW5jIGZ1bmN0aW9uIE92KGUsdCxuLHthdHRlbXB0czpyPTMsZGVsYXlNczpvPTUwMH09e30pe2ZvcihsZXQgYT0wO2E8cjthKyspe2E+MCYmYXdhaXQgbmV3IFByb21pc2UobD0+c2V0VGltZW91dChsLG8pKTtsZXQgaT1hd2FpdCBlLmdldE5vdGVDb250ZW50KHt1dWlkOnR9KSxzPXlhKGksbik7aWYocylyZXR1cm4gc31yZXR1cm4gSmQobikuc3BsaXQoYApgKS5maWx0ZXIoYT0+YSYmIWEuc3RhcnRzV2l0aCgiIyIpKS5qb2luKGAKYCl9ZnVuY3Rpb24geFMoZSl7aWYoIWV8fGUubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtsZXQgdD1lLmZpbmQobj0+bi5uYW1lPT09IldvcmsiKTtyZXR1cm4gdD90LnV1aWQ6ZVswXS51dWlkfWFzeW5jIGZ1bmN0aW9uIFNTKGUsdCl7aWYoIXQpcmV0dXJuW107bGV0IG49RGF0ZS5ub3coKSxyPWF3YWl0IGUuZ2V0VGFza0RvbWFpblRhc2tzKHQpLG89QXJyYXkuaXNBcnJheShyKT9yOltdO3JldHVybiBFKGBbX2ZldGNoVGFza3NGb3JEb21haW5dIGdldFRhc2tEb21haW5UYXNrcyByZXR1cm5lZCAke28ubGVuZ3RofSB0YXNrcyBpbiAke0RhdGUubm93KCktbn1tc2ApLG99ZnVuY3Rpb24gRVMoZSx0KXtsZXQgbj1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKS5nZXRUaW1lKCkscj1uKzg2NGU1O3JldHVybiBlLmZpbHRlcihvPT4hby5jb21wbGV0ZWRBdCYmIW8uZGlzbWlzc2VkQXQmJkluKG8uc3RhcnRBdCkmJkluKG8uc3RhcnRBdCk+PW4mJkluKG8uc3RhcnRBdCk8cikuc29ydCgobyxhKT0+KEluKG8uc3RhcnRBdCl8fDApLShJbihhLnN0YXJ0QXQpfHwwKSl9ZnVuY3Rpb24gSXYoZSx0LG4pe2xldCByPXQuZ2V0VGltZSgpLG89bi5nZXRUaW1lKCk7cmV0dXJuIGUuZmlsdGVyKGE9PkluKGEuY29tcGxldGVkQXQpJiZJbihhLmNvbXBsZXRlZEF0KT49ciYmSW4oYS5jb21wbGV0ZWRBdCk8PW8pfWZ1bmN0aW9uIFRTKGUsdCxuKXtyZXR1cm4gSXYoZSx0LG4pLnJlZHVjZSgocixvKT0+cisoby52aWN0b3J5VmFsdWV8fDApLDApfWZ1bmN0aW9uIE5TKGUsdCl7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDo3fSwocixvKT0+e2xldCBhPW5ldyBEYXRlKHQpO2Euc2V0RGF0ZShhLmdldERhdGUoKStvKTtsZXQgaT1uZXcgRGF0ZShhKTtpLnNldERhdGUoaS5nZXREYXRlKCkrMSk7bGV0IHM9ZS5maWx0ZXIobD0+SW4obC5jb21wbGV0ZWRBdCkmJkluKGwuY29tcGxldGVkQXQpPj1hLmdldFRpbWUoKSYmSW4obC5jb21wbGV0ZWRBdCk8aS5nZXRUaW1lKCkpO3JldHVybntkYXk6WyJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiLCJTdW4iXVtvXSxkYXRlOmEudG9JU09TdHJpbmcoKSx2YWx1ZTpzLnJlZHVjZSgobCxjKT0+bCsoYy52aWN0b3J5VmFsdWV8fDApLDApLHRhc2tDb3VudDpzLmxlbmd0aH19KX1mdW5jdGlvbiBJbihlKXtpZihlPT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiBlIT0ibnVtYmVyIil7bGV0IHQ9TnVtYmVyKGUpO3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCk/dDwxZTEwP3QqMWUzOnQ6bnVsbH1yZXR1cm4gZTwxZTEwP2UqMWUzOmV9ZnVuY3Rpb24ga3AoZSx0KXtsZXQgcj17MTpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIl0sMjpbIkFwcmlsIiwiTWF5IiwiSnVuZSJdLDM6WyJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIl0sNDpbIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl19W3RdfHxbIk1vbnRoIDEiLCJNb250aCAyIiwiTW9udGggMyJdO3JldHVybmBRdWFydGVybHkgUGxhbiBcdTIwMTQgJHtlfQoKIyBRdWFydGVyIFRoZW1lCltPbmUgc2VudGVuY2UgZGVzY3JpYmluZyB0aGUgbWFpbiBmb2N1cyBvZiB0aGlzIHF1YXJ0ZXIuXQoKIyMgU3VjY2VzcyBMb29rcyBMaWtlCjEuIFsgXSBbVG9wIG91dGNvbWVdCjIuIFsgXSBbVG9wIG91dGNvbWVdCjMuIFsgXSBbVG9wIG91dGNvbWVdCgojIFByb2plY3RzCgojIyBbUHJvamVjdCAxXQotIE91dGNvbWU6Ci0gV2h5IG5vdzoKLSBXZWVrbHkgcmh5dGhtOgotIERlYWRsaW5lOgotIENvbnN0cmFpbnRzOgotIERvbmUgZW5vdWdoIHdoZW46CgojIyBbUHJvamVjdCAyXQotIE91dGNvbWU6Ci0gV2h5IG5vdzoKLSBXZWVrbHkgcmh5dGhtOgotIERlYWRsaW5lOgotIENvbnN0cmFpbnRzOgotIERvbmUgZW5vdWdoIHdoZW46CgojIyBbUHJvamVjdCAzXQotIE91dGNvbWU6Ci0gV2h5IG5vdzoKLSBXZWVrbHkgcmh5dGhtOgotIERlYWRsaW5lOgotIENvbnN0cmFpbnRzOgotIERvbmUgZW5vdWdoIHdoZW46CgojIE5vdCBUaGlzIFF1YXJ0ZXIKLSBbIF0gW0xvd2VyLXByaW9yaXR5IHByb2plY3RdCi0gWyBdIFtDb21taXRtZW50IHRvIGRlY2xpbmVdCi0gWyBdIFtBcmVhIHRvIGludGVudGlvbmFsbHkgaWdub3JlXQoKIyBEYXktb2YtV2VlayBCcmVha2Rvd24KQW55IGNhdGVnb3J5IG9mIHRhc2sgeW91IHdvdWxkIGxpa2UgdG8gaGF2ZSBiZSB0aGUgZm9jdXMgZm9yIGRpZmZlcmVudCBkYXlzLW9mLXdlZWsgKHNvbWV0aW1lcyBjYWxsZWQgImRheSBzdHJpcGluZyIpPwpTZXBhcmF0ZSB5b3VyIHRhc2sgY2F0ZWdvcmllcyB3aXRoIGEgc2VtaWNvbG9uIChpLmUuLCAiOyIpLiBXZSB3aWxsIGNvbnNpZGVyIHRoZW0gd2hlbiBwcm9wb3NpbmcgcG9zc2libGUgCmRhaWx5IGFnZW5kYXMgZnJvbSB5b3VyIGV4aXN0aW5nIHRhc2tzLiAgCgotIE1vbmRheXM6IAotIFR1ZXNkYXlzOiAKLSBXZWRuZXNkYXlzOiAKLSBUaHVyc2RheXM6IAotIEZyaWRheXM6IAoKW0FtcGxlbm90ZSBtZXNzYWdlXQpZb3UgY2FuIGFsc28gYWRkIFNhdHVyZGF5IGFuZCBTdW5kYXkgaWYgeW91IGxpa2U7IHRoZXkncmUgbm90IGluIHRoZSBsaXN0IHNpbmNlIGJ5IGRlZmF1bHQgYmVjYXVzZSB3ZSBzdXNwZWN0IAp5b3UncmUgYmVzdCBvZmYgcHJlc2VydmluZyB5b3VyIHdlZWtlbmQgZm9yIHVucGxhbm5lZCBmYW1pbHkgJiByZXN0b3JhdGlvbiBhY3Rpdml0aWVzLiAgIAoKIyBNb250aC1ieS1Nb250aCBCcmVha2Rvd24KCiMjICR7clswXX0KLSBGb2N1czoKLSBLZXkgbW92ZToKCiMjICR7clsxXX0KLSBGb2N1czoKLSBLZXkgbW92ZToKCiMjICR7clsyXX0KLSBGb2N1czoKLSBLZXkgbW92ZToKCiMgV2Vla2x5IFBsYW5uaW5nIFByb21wdApXaGljaCBwcm9qZWN0cyBuZWVkIHRpbWUgb24gbXkgY2FsZW5kYXIgdGhpcyB3ZWVrPwoKIyBRdWFydGVybHkgUmV2aWV3Ci0gRmluaXNoZWQ6Ci0gUHJvZ3Jlc3MgbWFkZToKLSBMZXNzb25zIGxlYXJuZWQ6Ci0gQ2FycnkgZm9yd2FyZDpgfWFzeW5jIGZ1bmN0aW9uIHhwKGUsdCxuKXtyZXR1cm4gYXdhaXQgYnAoZSx0LG4pfWFzeW5jIGZ1bmN0aW9uIFJ2KGUsdCxuKXtyZXR1cm4gYXdhaXQgQ3YoZSx0LG4pfWFzeW5jIGZ1bmN0aW9uIE12KGUsdCxuKXtyZXR1cm4gYXdhaXQgQXYoZSx0LG4pfWFzeW5jIGZ1bmN0aW9uIFB2KGUsdCl7bGV0IG49YXdhaXQgRHYoZSx0KTtyZXR1cm4gRG4mJm4/LnV1aWQ/ey4uLm4sZGV2RWRpdDohMCxub3RlVVVJRDpuLnV1aWR9Om59YXN5bmMgZnVuY3Rpb24gR2woZSx0KXtyZXR1cm4gRG4/e2RldkVkaXQ6ITAsbm90ZVVVSUQ6dH06YXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke3R9YCl9YXN5bmMgZnVuY3Rpb24gTHYoZSx0KXtyZXR1cm4gYXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDp0fSl9YXN5bmMgZnVuY3Rpb24genYoZSx0LG4scil7cmV0dXJuIGF3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KHt1dWlkOnR9LG4scil9dmFyIEdyPXoocmUoKSk7ZnVuY3Rpb24gU3Aoe2FwcDplLG5vdGVVVUlEOnQsb25CYWNrOm59KXtsZXRbcixvXT0oMCxUYS51c2VTdGF0ZSkoIiIpLFthLGldPSgwLFRhLnVzZVN0YXRlKSghMCksW3MsbF09KDAsVGEudXNlU3RhdGUpKCExKTsoMCxUYS51c2VFZmZlY3QpKCgpPT57bGV0IHU9ITE7cmV0dXJuIEx2KGUsdCkudGhlbihwPT57dXx8KG8ocHx8IiIpLGkoITEpKX0pLCgpPT57dT0hMH19LFt0LGVdKTtsZXQgYz1hc3luYygpPT57bCghMCksYXdhaXQgenYoZSx0LHIpLGwoITEpfTtyZXR1cm4gYT8oMCxHci5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im5vdGUtZWRpdG9yLWxvYWRpbmciLGNoaWxkcmVuOiJMb2FkaW5nIG5vdGVcdTIwMjYifSk6KDAsR3IuanN4cykoImRpdiIse2NsYXNzTmFtZToibm90ZS1lZGl0b3IiLGNoaWxkcmVuOlsoMCxHci5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJub3RlLWVkaXRvci10b29sYmFyIixjaGlsZHJlbjpbKDAsR3IuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJub3RlLWVkaXRvci1idG4gbm90ZS1lZGl0b3ItYnRuLS1iYWNrIixvbkNsaWNrOm4sY2hpbGRyZW46Ilx1MjE5MCBCYWNrIn0pLCgwLEdyLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToibm90ZS1lZGl0b3ItYnRuIG5vdGUtZWRpdG9yLWJ0bi0tc2F2ZSIsb25DbGljazpjLGRpc2FibGVkOnMsY2hpbGRyZW46cz8iU2F2aW5nXHUyMDI2IjoiU2F2ZSJ9KV19KSwoMCxHci5qc3gpKCJ0ZXh0YXJlYSIse2NsYXNzTmFtZToibm90ZS1lZGl0b3ItdGV4dGFyZWEiLHZhbHVlOnIsb25DaGFuZ2U6dT0+byh1LnRhcmdldC52YWx1ZSl9KV19KX12YXIgUm49eih5ZSgpKTtmdW5jdGlvbiBEcCgpe3JldHVybnthc3luYzohMSxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxob29rczpudWxsLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2lsZW50OiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbH19dmFyIERvPURwKCk7ZnVuY3Rpb24gSHYoZSl7RG89ZX12YXIgV2k9e2V4ZWM6KCk9Pm51bGx9O2Z1bmN0aW9uIEVlKGUsdD0iIil7bGV0IG49dHlwZW9mIGU9PSJzdHJpbmciP2U6ZS5zb3VyY2Uscj17cmVwbGFjZToobyxhKT0+e2xldCBpPXR5cGVvZiBhPT0ic3RyaW5nIj9hOmEuc291cmNlO3JldHVybiBpPWkucmVwbGFjZShJdC5jYXJldCwiJDEiKSxuPW4ucmVwbGFjZShvLGkpLHJ9LGdldFJlZ2V4OigpPT5uZXcgUmVnRXhwKG4sdCl9O3JldHVybiByfXZhciBJdD17Y29kZVJlbW92ZUluZGVudDovXig/OiB7MSw0fXwgezAsM31cdCkvZ20sb3V0cHV0TGlua1JlcGxhY2U6L1xcKFtcW1xdXSkvZyxpbmRlbnRDb2RlQ29tcGVuc2F0aW9uOi9eKFxzKykoPzpgYGApLyxiZWdpbm5pbmdTcGFjZTovXlxzKy8sZW5kaW5nSGFzaDovIyQvLHN0YXJ0aW5nU3BhY2VDaGFyOi9eIC8sZW5kaW5nU3BhY2VDaGFyOi8gJC8sbm9uU3BhY2VDaGFyOi9bXiBdLyxuZXdMaW5lQ2hhckdsb2JhbDovXG4vZyx0YWJDaGFyR2xvYmFsOi9cdC9nLG11bHRpcGxlU3BhY2VHbG9iYWw6L1xzKy9nLGJsYW5rTGluZTovXlsgXHRdKiQvLGRvdWJsZUJsYW5rTGluZTovXG5bIFx0XSpcblsgXHRdKiQvLGJsb2NrcXVvdGVTdGFydDovXiB7MCwzfT4vLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlOi9cbiB7MCwzfSgoPzo9K3wtKykgKikoPz1cbnwkKS9nLGJsb2NrcXVvdGVTZXRleHRSZXBsYWNlMjovXiB7MCwzfT5bIFx0XT8vZ20sbGlzdFJlcGxhY2VUYWJzOi9eXHQrLyxsaXN0UmVwbGFjZU5lc3Rpbmc6L14gezEsNH0oPz0oIHs0fSkqW14gXSkvZyxsaXN0SXNUYXNrOi9eXFtbIHhYXVxdIC8sbGlzdFJlcGxhY2VUYXNrOi9eXFtbIHhYXVxdICsvLGFueUxpbmU6L1xuLipcbi8saHJlZkJyYWNrZXRzOi9ePCguKik+JC8sdGFibGVEZWxpbWl0ZXI6L1s6fF0vLHRhYmxlQWxpZ25DaGFyczovXlx8fFx8ICokL2csdGFibGVSb3dCbGFua0xpbmU6L1xuWyBcdF0qJC8sdGFibGVBbGlnblJpZ2h0Oi9eICotKzogKiQvLHRhYmxlQWxpZ25DZW50ZXI6L14gKjotKzogKiQvLHRhYmxlQWxpZ25MZWZ0Oi9eICo6LSsgKiQvLHN0YXJ0QVRhZzovXjxhIC9pLGVuZEFUYWc6L148XC9hPi9pLHN0YXJ0UHJlU2NyaXB0VGFnOi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLGVuZFByZVNjcmlwdFRhZzovXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLHN0YXJ0QW5nbGVCcmFja2V0Oi9ePC8sZW5kQW5nbGVCcmFja2V0Oi8+JC8scGVkYW50aWNIcmVmVGl0bGU6L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLyx1bmljb2RlQWxwaGFOdW1lcmljOi9bXHB7TH1ccHtOfV0vdSxlc2NhcGVUZXN0Oi9bJjw+IiddLyxlc2NhcGVSZXBsYWNlOi9bJjw+IiddL2csZXNjYXBlVGVzdE5vRW5jb2RlOi9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxlc2NhcGVSZXBsYWNlTm9FbmNvZGU6L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvZyx1bmVzY2FwZVRlc3Q6LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vaWcsY2FyZXQ6LyhefFteXFtdKVxeL2cscGVyY2VudERlY29kZTovJTI1L2csZmluZFBpcGU6L1x8L2csc3BsaXRQaXBlOi8gXHwvLHNsYXNoUGlwZTovXFxcfC9nLGNhcnJpYWdlUmV0dXJuOi9cclxufFxyL2csc3BhY2VMaW5lOi9eICskL2dtLG5vdFNwYWNlU3RhcnQ6L15cUyovLGVuZGluZ05ld2xpbmU6L1xuJC8sbGlzdEl0ZW1SZWdleDplPT5uZXcgUmVnRXhwKGBeKCB7MCwzfSR7ZX0pKCg/OlsJIF1bXlxcbl0qKT8oPzpcXG58JCkpYCksbmV4dEJ1bGxldFJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyAJXVteXFxuXSopPyg/OlxcbnwkKSlgKSxoclJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSxmZW5jZXNCZWdpblJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fSg/OlxgXGBcYHx+fn4pYCksaGVhZGluZ0JlZ2luUmVnZXg6ZT0+bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsZS0xKX19I2ApLGh0bWxCZWdpblJlZ2V4OmU9Pm5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLGUtMSl9fTwoPzpbYS16XS4qPnwhLS0pYCwiaSIpfSxEUz0vXig/OlsgXHRdKig/OlxufCQpKSsvLF9TPS9eKCg/OiB7NH18IHswLDN9XHQpW15cbl0rKD86XG4oPzpbIFx0XSooPzpcbnwkKSkqKT8pKy8sQ1M9L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxCaT0vXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxBUz0vXiB7MCwzfSgjezEsNn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxfcD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxHdj0vXig/IWJ1bGwgfGJsb2NrQ29kZXxmZW5jZXN8YmxvY2txdW90ZXxoZWFkaW5nfGh0bWx8dGFibGUpKCg/Oi58XG4oPyFccyo/XG58YnVsbCB8YmxvY2tDb2RlfGZlbmNlc3xibG9ja3F1b3RlfGhlYWRpbmd8aHRtbHx0YWJsZSkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLFZ2PUVlKEd2KS5yZXBsYWNlKC9idWxsL2csX3ApLnJlcGxhY2UoL2Jsb2NrQ29kZS9nLC8oPzogezR9fCB7MCwzfVx0KS8pLnJlcGxhY2UoL2ZlbmNlcy9nLC8gezAsM30oPzpgezMsfXx+ezMsfSkvKS5yZXBsYWNlKC9ibG9ja3F1b3RlL2csLyB7MCwzfT4vKS5yZXBsYWNlKC9oZWFkaW5nL2csLyB7MCwzfSN7MSw2fS8pLnJlcGxhY2UoL2h0bWwvZywvIHswLDN9PFteXG4+XSs+XG4vKS5yZXBsYWNlKC9cfHRhYmxlL2csIiIpLmdldFJlZ2V4KCksT1M9RWUoR3YpLnJlcGxhY2UoL2J1bGwvZyxfcCkucmVwbGFjZSgvYmxvY2tDb2RlL2csLyg/OiB7NH18IHswLDN9XHQpLykucmVwbGFjZSgvZmVuY2VzL2csLyB7MCwzfSg/OmB7Myx9fH57Myx9KS8pLnJlcGxhY2UoL2Jsb2NrcXVvdGUvZywvIHswLDN9Pi8pLnJlcGxhY2UoL2hlYWRpbmcvZywvIHswLDN9I3sxLDZ9LykucmVwbGFjZSgvaHRtbC9nLC8gezAsM308W15cbj5dKz5cbi8pLnJlcGxhY2UoL3RhYmxlL2csLyB7MCwzfVx8Pyg/Ols6XC0gXSpcfCkrW1w6XC0gXSpcbi8pLmdldFJlZ2V4KCksQ3A9L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sSVM9L15bXlxuXSsvLEFwPS8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLFJTPUVlKC9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcblsgXHRdKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzogKyg/OlxuWyBcdF0qKT98ICpcblsgXHRdKikodGl0bGUpKT8gKig/OlxuK3wkKS8pLnJlcGxhY2UoImxhYmVsIixBcCkucmVwbGFjZSgidGl0bGUiLC8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvKS5nZXRSZWdleCgpLE1TPUVlKC9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvKS5yZXBsYWNlKC9idWxsL2csX3ApLmdldFJlZ2V4KCksUWw9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlYXJjaHxzZWN0aW9ufHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLE9wPS88IS0tKD86LT8+fFtcc1xTXSo/KD86LS0+fCQpKS8sUFM9RWUoIl4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG5bIAldKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG5bIAldKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcblsgCV0qKStcXG58JCkpIiwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLE9wKS5yZXBsYWNlKCJ0YWciLFFsKS5yZXBsYWNlKCJhdHRyaWJ1dGUiLC8gK1thLXpBLVo6X11bXHcuOi1dKig/OiAqPSAqIlteIlxuXSoifCAqPSAqJ1teJ1xuXSonfCAqPSAqW15ccyInPTw+YF0rKT8vKS5nZXRSZWdleCgpLGp2PUVlKENwKS5yZXBsYWNlKCJociIsQmkpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsUWwpLmdldFJlZ2V4KCksTFM9RWUoL14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8pLnJlcGxhY2UoInBhcmFncmFwaCIsanYpLmdldFJlZ2V4KCksSXA9e2Jsb2NrcXVvdGU6TFMsY29kZTpfUyxkZWY6UlMsZmVuY2VzOkNTLGhlYWRpbmc6QVMsaHI6QmksaHRtbDpQUyxsaGVhZGluZzpWdixsaXN0Ok1TLG5ld2xpbmU6RFMscGFyYWdyYXBoOmp2LHRhYmxlOldpLHRleHQ6SVN9LEZ2PUVlKCJeICooW15cXG4gXS4qKVxcbiB7MCwzfSgoPzpcXHwgKik/Oj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSooPzpcXHwgKik/KSg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86XFxufCQpKSopXFxuKnwkKSIpLnJlcGxhY2UoImhyIixCaSkucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIig/OiB7NH18IHswLDN9CSlbXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLFFsKS5nZXRSZWdleCgpLHpTPXsuLi5JcCxsaGVhZGluZzpPUyx0YWJsZTpGdixwYXJhZ3JhcGg6RWUoQ3ApLnJlcGxhY2UoImhyIixCaSkucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSg/Olxcc3wkKSIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInRhYmxlIixGdikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLFFsKS5nZXRSZWdleCgpfSxGUz17Li4uSXAsaHRtbDpFZShgXiAqKD86Y29tbWVudCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86IlteIl0qInwnW14nXSonfFxcc1teJyIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSlgKS5yZXBsYWNlKCJjb21tZW50IixPcCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6V2ksbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6RWUoQ3ApLnJlcGxhY2UoImhyIixCaSkucmVwbGFjZSgiaGVhZGluZyIsYCAqI3sxLDZ9ICpbXgpdYCkucmVwbGFjZSgibGhlYWRpbmciLFZ2KS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikucmVwbGFjZSgifHRhZyIsIiIpLmdldFJlZ2V4KCl9LFVTPS9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9AXFtcXVxcXl9ge3x9fl0pLywkUz0vXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLEt2PS9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLFdTPS9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLEpsPS9bXHB7UH1ccHtTfV0vdSxScD0vW1xzXHB7UH1ccHtTfV0vdSxZdj0vW15cc1xwe1B9XHB7U31dL3UsQlM9RWUoL14oKD8hWypfXSlwdW5jdFNwYWNlKS8sInUiKS5yZXBsYWNlKC9wdW5jdFNwYWNlL2csUnApLmdldFJlZ2V4KCkscXY9Lyg/IX4pW1xwe1B9XHB7U31dL3UsSFM9Lyg/IX4pW1xzXHB7UH1ccHtTfV0vdSxHUz0vKD86W15cc1xwe1B9XHB7U31dfH4pL3UsVlM9L1xbW15bXF1dKj9cXVwoKD86XFwufFteXFxcKFwpXXxcKCg/OlxcLnxbXlxcXChcKV0pKlwpKSpcKXxgW15gXSo/YHw8W148Pl0qPz4vZyxRdj0vXig/OlwqKyg/OigoPyFcKilwdW5jdCl8W15ccypdKSl8Xl8rKD86KCg/IV8pcHVuY3QpfChbXlxzX10pKS8salM9RWUoUXYsInUiKS5yZXBsYWNlKC9wdW5jdC9nLEpsKS5nZXRSZWdleCgpLEtTPUVlKFF2LCJ1IikucmVwbGFjZSgvcHVuY3QvZyxxdikuZ2V0UmVnZXgoKSxKdj0iXlteXypdKj9fX1teXypdKj9cXCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXFwqKXB1bmN0KFxcKispKD89W1xcc118JCl8bm90UHVuY3RTcGFjZShcXCorKSg/IVxcKikoPz1wdW5jdFNwYWNlfCQpfCg/IVxcKilwdW5jdFNwYWNlKFxcKispKD89bm90UHVuY3RTcGFjZSl8W1xcc10oXFwqKykoPyFcXCopKD89cHVuY3QpfCg/IVxcKilwdW5jdChcXCorKSg/IVxcKikoPz1wdW5jdCl8bm90UHVuY3RTcGFjZShcXCorKSg/PW5vdFB1bmN0U3BhY2UpIixZUz1FZShKdiwiZ3UiKS5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csWXYpLnJlcGxhY2UoL3B1bmN0U3BhY2UvZyxScCkucmVwbGFjZSgvcHVuY3QvZyxKbCkuZ2V0UmVnZXgoKSxxUz1FZShKdiwiZ3UiKS5yZXBsYWNlKC9ub3RQdW5jdFNwYWNlL2csR1MpLnJlcGxhY2UoL3B1bmN0U3BhY2UvZyxIUykucmVwbGFjZSgvcHVuY3QvZyxxdikuZ2V0UmVnZXgoKSxRUz1FZSgiXlteXypdKj9cXCpcXCpbXl8qXSo/X1teXypdKj8oPz1cXCpcXCopfFteX10rKD89W15fXSl8KD8hXylwdW5jdChfKykoPz1bXFxzXXwkKXxub3RQdW5jdFNwYWNlKF8rKSg/IV8pKD89cHVuY3RTcGFjZXwkKXwoPyFfKXB1bmN0U3BhY2UoXyspKD89bm90UHVuY3RTcGFjZSl8W1xcc10oXyspKD8hXykoPz1wdW5jdCl8KD8hXylwdW5jdChfKykoPyFfKSg/PXB1bmN0KSIsImd1IikucmVwbGFjZSgvbm90UHVuY3RTcGFjZS9nLFl2KS5yZXBsYWNlKC9wdW5jdFNwYWNlL2csUnApLnJlcGxhY2UoL3B1bmN0L2csSmwpLmdldFJlZ2V4KCksSlM9RWUoL1xcKHB1bmN0KS8sImd1IikucmVwbGFjZSgvcHVuY3QvZyxKbCkuZ2V0UmVnZXgoKSxYUz1FZSgvXjwoc2NoZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vKS5yZXBsYWNlKCJzY2hlbWUiLC9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LykucmVwbGFjZSgiZW1haWwiLC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8pLmdldFJlZ2V4KCksWlM9RWUoT3ApLnJlcGxhY2UoIig/Oi0tPnwkKSIsIi0tPiIpLmdldFJlZ2V4KCksZUU9RWUoIl5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+IikucmVwbGFjZSgiY29tbWVudCIsWlMpLnJlcGxhY2UoImF0dHJpYnV0ZSIsL1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksS2w9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sdEU9RWUoL14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzooPzpbIFx0XSooPzpcblsgXHRdKik/KSh0aXRsZSkpP1xzKlwpLykucmVwbGFjZSgibGFiZWwiLEtsKS5yZXBsYWNlKCJocmVmIiwvPCg/OlxcLnxbXlxuPD5cXF0pKz58W14gXHRcblx4MDAtXHgxZl0qLykucmVwbGFjZSgidGl0bGUiLC8iKD86XFwiP3xbXiJcXF0pKiJ8Jyg/OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98W14pXFxdKSpcKS8pLmdldFJlZ2V4KCksWHY9RWUoL14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLykucmVwbGFjZSgibGFiZWwiLEtsKS5yZXBsYWNlKCJyZWYiLEFwKS5nZXRSZWdleCgpLFp2PUVlKC9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vKS5yZXBsYWNlKCJyZWYiLEFwKS5nZXRSZWdleCgpLG5FPUVlKCJyZWZsaW5rfG5vbGluayg/IVxcKCkiLCJnIikucmVwbGFjZSgicmVmbGluayIsWHYpLnJlcGxhY2UoIm5vbGluayIsWnYpLmdldFJlZ2V4KCksTXA9e19iYWNrcGVkYWw6V2ksYW55UHVuY3R1YXRpb246SlMsYXV0b2xpbms6WFMsYmxvY2tTa2lwOlZTLGJyOkt2LGNvZGU6JFMsZGVsOldpLGVtU3Ryb25nTERlbGltOmpTLGVtU3Ryb25nUkRlbGltQXN0OllTLGVtU3Ryb25nUkRlbGltVW5kOlFTLGVzY2FwZTpVUyxsaW5rOnRFLG5vbGluazpadixwdW5jdHVhdGlvbjpCUyxyZWZsaW5rOlh2LHJlZmxpbmtTZWFyY2g6bkUsdGFnOmVFLHRleHQ6V1MsdXJsOldpfSxyRT17Li4uTXAsbGluazpFZSgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsS2wpLmdldFJlZ2V4KCkscmVmbGluazpFZSgvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsS2wpLmdldFJlZ2V4KCl9LEVwPXsuLi5NcCxlbVN0cm9uZ1JEZWxpbUFzdDpxUyxlbVN0cm9uZ0xEZWxpbTpLUyx1cmw6RWUoL14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLCJpIikucmVwbGFjZSgiZW1haWwiLC9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLykuZ2V0UmVnZXgoKSxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKCg/OlxcLnxbXlxcXSkqPyg/OlxcLnxbXlxzflxcXSkpXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99LG9FPXsuLi5FcCxicjpFZShLdikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6RWUoRXAudGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9LFZsPXtub3JtYWw6SXAsZ2ZtOnpTLHBlZGFudGljOkZTfSxVaT17bm9ybWFsOk1wLGdmbTpFcCxicmVha3M6b0UscGVkYW50aWM6ckV9LGFFPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxVdj1lPT5hRVtlXTtmdW5jdGlvbiBWbihlLHQpe2lmKHQpe2lmKEl0LmVzY2FwZVRlc3QudGVzdChlKSlyZXR1cm4gZS5yZXBsYWNlKEl0LmVzY2FwZVJlcGxhY2UsVXYpfWVsc2UgaWYoSXQuZXNjYXBlVGVzdE5vRW5jb2RlLnRlc3QoZSkpcmV0dXJuIGUucmVwbGFjZShJdC5lc2NhcGVSZXBsYWNlTm9FbmNvZGUsVXYpO3JldHVybiBlfWZ1bmN0aW9uICR2KGUpe3RyeXtlPWVuY29kZVVSSShlKS5yZXBsYWNlKEl0LnBlcmNlbnREZWNvZGUsIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gZX1mdW5jdGlvbiBXdihlLHQpe2xldCBuPWUucmVwbGFjZShJdC5maW5kUGlwZSwoYSxpLHMpPT57bGV0IGw9ITEsYz1pO2Zvcig7LS1jPj0wJiZzW2NdPT09IlxcIjspbD0hbDtyZXR1cm4gbD8ifCI6IiB8In0pLHI9bi5zcGxpdChJdC5zcGxpdFBpcGUpLG89MDtpZihyWzBdLnRyaW0oKXx8ci5zaGlmdCgpLHIubGVuZ3RoPjAmJiFyLmF0KC0xKT8udHJpbSgpJiZyLnBvcCgpLHQpaWYoci5sZW5ndGg+dClyLnNwbGljZSh0KTtlbHNlIGZvcig7ci5sZW5ndGg8dDspci5wdXNoKCIiKTtmb3IoO288ci5sZW5ndGg7bysrKXJbb109cltvXS50cmltKCkucmVwbGFjZShJdC5zbGFzaFBpcGUsInwiKTtyZXR1cm4gcn1mdW5jdGlvbiAkaShlLHQsbil7bGV0IHI9ZS5sZW5ndGg7aWYocj09PTApcmV0dXJuIiI7bGV0IG89MDtmb3IoO288cjspe2xldCBhPWUuY2hhckF0KHItby0xKTtpZihhPT09dCYmIW4pbysrO2Vsc2UgaWYoYSE9PXQmJm4pbysrO2Vsc2UgYnJlYWt9cmV0dXJuIGUuc2xpY2UoMCxyLW8pfWZ1bmN0aW9uIGlFKGUsdCl7aWYoZS5pbmRleE9mKHRbMV0pPT09LTEpcmV0dXJuLTE7bGV0IG49MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdPT09IlxcIilyKys7ZWxzZSBpZihlW3JdPT09dFswXSluKys7ZWxzZSBpZihlW3JdPT09dFsxXSYmKG4tLSxuPDApKXJldHVybiByO3JldHVybiBuPjA/LTI6LTF9ZnVuY3Rpb24gQnYoZSx0LG4scixvKXtsZXQgYT10LmhyZWYsaT10LnRpdGxlfHxudWxsLHM9ZVsxXS5yZXBsYWNlKG8ub3RoZXIub3V0cHV0TGlua1JlcGxhY2UsIiQxIik7ci5zdGF0ZS5pbkxpbms9ITA7bGV0IGw9e3R5cGU6ZVswXS5jaGFyQXQoMCk9PT0iISI/ImltYWdlIjoibGluayIscmF3Om4saHJlZjphLHRpdGxlOmksdGV4dDpzLHRva2VuczpyLmlubGluZVRva2VucyhzKX07cmV0dXJuIHIuc3RhdGUuaW5MaW5rPSExLGx9ZnVuY3Rpb24gc0UoZSx0LG4pe2xldCByPWUubWF0Y2gobi5vdGhlci5pbmRlbnRDb2RlQ29tcGVuc2F0aW9uKTtpZihyPT09bnVsbClyZXR1cm4gdDtsZXQgbz1yWzFdO3JldHVybiB0LnNwbGl0KGAKYCkubWFwKGE9PntsZXQgaT1hLm1hdGNoKG4ub3RoZXIuYmVnaW5uaW5nU3BhY2UpO2lmKGk9PT1udWxsKXJldHVybiBhO2xldFtzXT1pO3JldHVybiBzLmxlbmd0aD49by5sZW5ndGg/YS5zbGljZShvLmxlbmd0aCk6YX0pLmpvaW4oYApgKX12YXIgWWw9Y2xhc3N7b3B0aW9ucztydWxlcztsZXhlcjtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8RG99c3BhY2UoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMoZSk7aWYodCYmdFswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzp0WzBdfX1jb2RlKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGUpO2lmKHQpe2xldCBuPXRbMF0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmNvZGVSZW1vdmVJbmRlbnQsIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6dFswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP246JGkobixgCmApfX19ZmVuY2VzKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMoZSk7aWYodCl7bGV0IG49dFswXSxyPXNFKG4sdFszXXx8IiIsdGhpcy5ydWxlcyk7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpuLGxhbmc6dFsyXT90WzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLCIkMSIpOnRbMl0sdGV4dDpyfX19aGVhZGluZyhlKXtsZXQgdD10aGlzLnJ1bGVzLmJsb2NrLmhlYWRpbmcuZXhlYyhlKTtpZih0KXtsZXQgbj10WzJdLnRyaW0oKTtpZih0aGlzLnJ1bGVzLm90aGVyLmVuZGluZ0hhc2gudGVzdChuKSl7bGV0IHI9JGkobiwiIyIpOyh0aGlzLm9wdGlvbnMucGVkYW50aWN8fCFyfHx0aGlzLnJ1bGVzLm90aGVyLmVuZGluZ1NwYWNlQ2hhci50ZXN0KHIpKSYmKG49ci50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6dFswXSxkZXB0aDp0WzFdLmxlbmd0aCx0ZXh0Om4sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG4pfX19aHIoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImhyIixyYXc6JGkodFswXSxgCmApfX1ibG9ja3F1b3RlKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGUpO2lmKHQpe2xldCBuPSRpKHRbMF0sYApgKS5zcGxpdChgCmApLHI9IiIsbz0iIixhPVtdO2Zvcig7bi5sZW5ndGg+MDspe2xldCBpPSExLHM9W10sbDtmb3IobD0wO2w8bi5sZW5ndGg7bCsrKWlmKHRoaXMucnVsZXMub3RoZXIuYmxvY2txdW90ZVN0YXJ0LnRlc3QobltsXSkpcy5wdXNoKG5bbF0pLGk9ITA7ZWxzZSBpZighaSlzLnB1c2gobltsXSk7ZWxzZSBicmVhaztuPW4uc2xpY2UobCk7bGV0IGM9cy5qb2luKGAKYCksdT1jLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZSxgCiAgICAkMWApLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5ibG9ja3F1b3RlU2V0ZXh0UmVwbGFjZTIsIiIpO3I9cj9gJHtyfQoke2N9YDpjLG89bz9gJHtvfQoke3V9YDp1O2xldCBwPXRoaXMubGV4ZXIuc3RhdGUudG9wO2lmKHRoaXMubGV4ZXIuc3RhdGUudG9wPSEwLHRoaXMubGV4ZXIuYmxvY2tUb2tlbnModSxhLCEwKSx0aGlzLmxleGVyLnN0YXRlLnRvcD1wLG4ubGVuZ3RoPT09MClicmVhaztsZXQgZD1hLmF0KC0xKTtpZihkPy50eXBlPT09ImNvZGUiKWJyZWFrO2lmKGQ/LnR5cGU9PT0iYmxvY2txdW90ZSIpe2xldCBoPWQseT1oLnJhdytgCmArbi5qb2luKGAKYCksdz10aGlzLmJsb2NrcXVvdGUoeSk7YVthLmxlbmd0aC0xXT13LHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC1oLnJhdy5sZW5ndGgpK3cucmF3LG89by5zdWJzdHJpbmcoMCxvLmxlbmd0aC1oLnRleHQubGVuZ3RoKSt3LnRleHQ7YnJlYWt9ZWxzZSBpZihkPy50eXBlPT09Imxpc3QiKXtsZXQgaD1kLHk9aC5yYXcrYApgK24uam9pbihgCmApLHc9dGhpcy5saXN0KHkpO2FbYS5sZW5ndGgtMV09dyxyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtZC5yYXcubGVuZ3RoKSt3LnJhdyxvPW8uc3Vic3RyaW5nKDAsby5sZW5ndGgtaC5yYXcubGVuZ3RoKSt3LnJhdyxuPXkuc3Vic3RyaW5nKGEuYXQoLTEpLnJhdy5sZW5ndGgpLnNwbGl0KGAKYCk7Y29udGludWV9fXJldHVybnt0eXBlOiJibG9ja3F1b3RlIixyYXc6cix0b2tlbnM6YSx0ZXh0Om99fX1saXN0KGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKGUpO2lmKHQpe2xldCBuPXRbMV0udHJpbSgpLHI9bi5sZW5ndGg+MSxvPXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpyLHN0YXJ0OnI/K24uc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119O249cj9gXFxkezEsOX1cXCR7bi5zbGljZSgtMSl9YDpgXFwke259YCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihuPXI/bjoiWyorLV0iKTtsZXQgYT10aGlzLnJ1bGVzLm90aGVyLmxpc3RJdGVtUmVnZXgobiksaT0hMTtmb3IoO2U7KXtsZXQgbD0hMSxjPSIiLHU9IiI7aWYoISh0PWEuZXhlYyhlKSl8fHRoaXMucnVsZXMuYmxvY2suaHIudGVzdChlKSlicmVhaztjPXRbMF0sZT1lLnN1YnN0cmluZyhjLmxlbmd0aCk7bGV0IHA9dFsyXS5zcGxpdChgCmAsMSlbMF0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlVGFicyxnPT4iICIucmVwZWF0KDMqZy5sZW5ndGgpKSxkPWUuc3BsaXQoYApgLDEpWzBdLGg9IXAudHJpbSgpLHk9MDtpZih0aGlzLm9wdGlvbnMucGVkYW50aWM/KHk9Mix1PXAudHJpbVN0YXJ0KCkpOmg/eT10WzFdLmxlbmd0aCsxOih5PXRbMl0uc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKSx5PXk+ND8xOnksdT1wLnNsaWNlKHkpLHkrPXRbMV0ubGVuZ3RoKSxoJiZ0aGlzLnJ1bGVzLm90aGVyLmJsYW5rTGluZS50ZXN0KGQpJiYoYys9ZCtgCmAsZT1lLnN1YnN0cmluZyhkLmxlbmd0aCsxKSxsPSEwKSwhbCl7bGV0IGc9dGhpcy5ydWxlcy5vdGhlci5uZXh0QnVsbGV0UmVnZXgoeSksbT10aGlzLnJ1bGVzLm90aGVyLmhyUmVnZXgoeSksdj10aGlzLnJ1bGVzLm90aGVyLmZlbmNlc0JlZ2luUmVnZXgoeSksZj10aGlzLnJ1bGVzLm90aGVyLmhlYWRpbmdCZWdpblJlZ2V4KHkpLHg9dGhpcy5ydWxlcy5vdGhlci5odG1sQmVnaW5SZWdleCh5KTtmb3IoO2U7KXtsZXQgUz1lLnNwbGl0KGAKYCwxKVswXSxOO2lmKGQ9Uyx0aGlzLm9wdGlvbnMucGVkYW50aWM/KGQ9ZC5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIubGlzdFJlcGxhY2VOZXN0aW5nLCIgICIpLE49ZCk6Tj1kLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJDaGFyR2xvYmFsLCIgICAgIiksdi50ZXN0KGQpfHxmLnRlc3QoZCl8fHgudGVzdChkKXx8Zy50ZXN0KGQpfHxtLnRlc3QoZCkpYnJlYWs7aWYoTi5zZWFyY2godGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIpPj15fHwhZC50cmltKCkpdSs9YApgK04uc2xpY2UoeSk7ZWxzZXtpZihofHxwLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJDaGFyR2xvYmFsLCIgICAgIikuc2VhcmNoKHRoaXMucnVsZXMub3RoZXIubm9uU3BhY2VDaGFyKT49NHx8di50ZXN0KHApfHxmLnRlc3QocCl8fG0udGVzdChwKSlicmVhazt1Kz1gCmArZH0haCYmIWQudHJpbSgpJiYoaD0hMCksYys9UytgCmAsZT1lLnN1YnN0cmluZyhTLmxlbmd0aCsxKSxwPU4uc2xpY2UoeSl9fW8ubG9vc2V8fChpP28ubG9vc2U9ITA6dGhpcy5ydWxlcy5vdGhlci5kb3VibGVCbGFua0xpbmUudGVzdChjKSYmKGk9ITApKTtsZXQgdz1udWxsLGI7dGhpcy5vcHRpb25zLmdmbSYmKHc9dGhpcy5ydWxlcy5vdGhlci5saXN0SXNUYXNrLmV4ZWModSksdyYmKGI9d1swXSE9PSJbIF0gIix1PXUucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLmxpc3RSZXBsYWNlVGFzaywiIikpKSxvLml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OmMsdGFzazohIXcsY2hlY2tlZDpiLGxvb3NlOiExLHRleHQ6dSx0b2tlbnM6W119KSxvLnJhdys9Y31sZXQgcz1vLml0ZW1zLmF0KC0xKTtpZihzKXMucmF3PXMucmF3LnRyaW1FbmQoKSxzLnRleHQ9cy50ZXh0LnRyaW1FbmQoKTtlbHNlIHJldHVybjtvLnJhdz1vLnJhdy50cmltRW5kKCk7Zm9yKGxldCBsPTA7bDxvLml0ZW1zLmxlbmd0aDtsKyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsby5pdGVtc1tsXS50b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhvLml0ZW1zW2xdLnRleHQsW10pLCFvLmxvb3NlKXtsZXQgYz1vLml0ZW1zW2xdLnRva2Vucy5maWx0ZXIocD0+cC50eXBlPT09InNwYWNlIiksdT1jLmxlbmd0aD4wJiZjLnNvbWUocD0+dGhpcy5ydWxlcy5vdGhlci5hbnlMaW5lLnRlc3QocC5yYXcpKTtvLmxvb3NlPXV9aWYoby5sb29zZSlmb3IobGV0IGw9MDtsPG8uaXRlbXMubGVuZ3RoO2wrKylvLml0ZW1zW2xdLmxvb3NlPSEwO3JldHVybiBvfX1odG1sKGUpe2xldCB0PXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6Imh0bWwiLGJsb2NrOiEwLHJhdzp0WzBdLHByZTp0WzFdPT09InByZSJ8fHRbMV09PT0ic2NyaXB0Inx8dFsxXT09PSJzdHlsZSIsdGV4dDp0WzBdfX1kZWYoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhlKTtpZih0KXtsZXQgbj10WzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLm11bHRpcGxlU3BhY2VHbG9iYWwsIiAiKSxyPXRbMl0/dFsyXS5yZXBsYWNlKHRoaXMucnVsZXMub3RoZXIuaHJlZkJyYWNrZXRzLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIik6IiIsbz10WzNdP3RbM10uc3Vic3RyaW5nKDEsdFszXS5sZW5ndGgtMSkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKTp0WzNdO3JldHVybnt0eXBlOiJkZWYiLHRhZzpuLHJhdzp0WzBdLGhyZWY6cix0aXRsZTpvfX19dGFibGUoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGUpO2lmKCF0fHwhdGhpcy5ydWxlcy5vdGhlci50YWJsZURlbGltaXRlci50ZXN0KHRbMl0pKXJldHVybjtsZXQgbj1Xdih0WzFdKSxyPXRbMl0ucmVwbGFjZSh0aGlzLnJ1bGVzLm90aGVyLnRhYmxlQWxpZ25DaGFycywiIikuc3BsaXQoInwiKSxvPXRbM10/LnRyaW0oKT90WzNdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci50YWJsZVJvd0JsYW5rTGluZSwiIikuc3BsaXQoYApgKTpbXSxhPXt0eXBlOiJ0YWJsZSIscmF3OnRbMF0saGVhZGVyOltdLGFsaWduOltdLHJvd3M6W119O2lmKG4ubGVuZ3RoPT09ci5sZW5ndGgpe2ZvcihsZXQgaSBvZiByKXRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnblJpZ2h0LnRlc3QoaSk/YS5hbGlnbi5wdXNoKCJyaWdodCIpOnRoaXMucnVsZXMub3RoZXIudGFibGVBbGlnbkNlbnRlci50ZXN0KGkpP2EuYWxpZ24ucHVzaCgiY2VudGVyIik6dGhpcy5ydWxlcy5vdGhlci50YWJsZUFsaWduTGVmdC50ZXN0KGkpP2EuYWxpZ24ucHVzaCgibGVmdCIpOmEuYWxpZ24ucHVzaChudWxsKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylhLmhlYWRlci5wdXNoKHt0ZXh0Om5baV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKG5baV0pLGhlYWRlcjohMCxhbGlnbjphLmFsaWduW2ldfSk7Zm9yKGxldCBpIG9mIG8pYS5yb3dzLnB1c2goV3YoaSxhLmhlYWRlci5sZW5ndGgpLm1hcCgocyxsKT0+KHt0ZXh0OnMsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHMpLGhlYWRlcjohMSxhbGlnbjphLmFsaWduW2xdfSkpKTtyZXR1cm4gYX19bGhlYWRpbmcoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzp0WzBdLGRlcHRoOnRbMl0uY2hhckF0KDApPT09Ij0iPzE6Mix0ZXh0OnRbMV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMV0pfX1wYXJhZ3JhcGgoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhlKTtpZih0KXtsZXQgbj10WzFdLmNoYXJBdCh0WzFdLmxlbmd0aC0xKT09PWAKYD90WzFdLnNsaWNlKDAsLTEpOnRbMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OnRbMF0sdGV4dDpuLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShuKX19fXRleHQoZSl7bGV0IHQ9dGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWMoZSk7aWYodClyZXR1cm57dHlwZToidGV4dCIscmF3OnRbMF0sdGV4dDp0WzBdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh0WzBdKX19ZXNjYXBlKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OnRbMF0sdGV4dDp0WzFdfX10YWcoZSl7bGV0IHQ9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMoZSk7aWYodClyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJnRoaXMucnVsZXMub3RoZXIuc3RhcnRBVGFnLnRlc3QodFswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJnRoaXMucnVsZXMub3RoZXIuZW5kQVRhZy50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJnRoaXMucnVsZXMub3RoZXIuc3RhcnRQcmVTY3JpcHRUYWcudGVzdCh0WzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiZ0aGlzLnJ1bGVzLm90aGVyLmVuZFByZVNjcmlwdFRhZy50ZXN0KHRbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZToiaHRtbCIscmF3OnRbMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3QmxvY2s6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6dFswXX19bGluayhlKXtsZXQgdD10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMoZSk7aWYodCl7bGV0IG49dFsyXS50cmltKCk7aWYoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmdGhpcy5ydWxlcy5vdGhlci5zdGFydEFuZ2xlQnJhY2tldC50ZXN0KG4pKXtpZighdGhpcy5ydWxlcy5vdGhlci5lbmRBbmdsZUJyYWNrZXQudGVzdChuKSlyZXR1cm47bGV0IGE9JGkobi5zbGljZSgwLC0xKSwiXFwiKTtpZigobi5sZW5ndGgtYS5sZW5ndGgpJTI9PT0wKXJldHVybn1lbHNle2xldCBhPWlFKHRbMl0sIigpIik7aWYoYT09PS0yKXJldHVybjtpZihhPi0xKXtsZXQgcz0odFswXS5pbmRleE9mKCIhIik9PT0wPzU6NCkrdFsxXS5sZW5ndGgrYTt0WzJdPXRbMl0uc3Vic3RyaW5nKDAsYSksdFswXT10WzBdLnN1YnN0cmluZygwLHMpLnRyaW0oKSx0WzNdPSIifX1sZXQgcj10WzJdLG89IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtsZXQgYT10aGlzLnJ1bGVzLm90aGVyLnBlZGFudGljSHJlZlRpdGxlLmV4ZWMocik7YSYmKHI9YVsxXSxvPWFbM10pfWVsc2Ugbz10WzNdP3RbM10uc2xpY2UoMSwtMSk6IiI7cmV0dXJuIHI9ci50cmltKCksdGhpcy5ydWxlcy5vdGhlci5zdGFydEFuZ2xlQnJhY2tldC50ZXN0KHIpJiYodGhpcy5vcHRpb25zLnBlZGFudGljJiYhdGhpcy5ydWxlcy5vdGhlci5lbmRBbmdsZUJyYWNrZXQudGVzdChuKT9yPXIuc2xpY2UoMSk6cj1yLnNsaWNlKDEsLTEpKSxCdih0LHtocmVmOnImJnIucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbiwiJDEiKSx0aXRsZTpvJiZvLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24sIiQxIil9LHRbMF0sdGhpcy5sZXhlcix0aGlzLnJ1bGVzKX19cmVmbGluayhlLHQpe2xldCBuO2lmKChuPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyhlKSl8fChuPXRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKGUpKSl7bGV0IHI9KG5bMl18fG5bMV0pLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5tdWx0aXBsZVNwYWNlR2xvYmFsLCIgIiksbz10W3IudG9Mb3dlckNhc2UoKV07aWYoIW8pe2xldCBhPW5bMF0uY2hhckF0KDApO3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6YSx0ZXh0OmF9fXJldHVybiBCdihuLG8sblswXSx0aGlzLmxleGVyLHRoaXMucnVsZXMpfX1lbVN0cm9uZyhlLHQsbj0iIil7bGV0IHI9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdMRGVsaW0uZXhlYyhlKTtpZighcnx8clszXSYmbi5tYXRjaCh0aGlzLnJ1bGVzLm90aGVyLnVuaWNvZGVBbHBoYU51bWVyaWMpKXJldHVybjtpZighKHJbMV18fHJbMl18fCIiKXx8IW58fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMobikpe2xldCBhPVsuLi5yWzBdXS5sZW5ndGgtMSxpLHMsbD1hLGM9MCx1PXJbMF1bMF09PT0iKiI/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmdSRGVsaW1VbmQ7Zm9yKHUubGFzdEluZGV4PTAsdD10LnNsaWNlKC0xKmUubGVuZ3RoK2EpOyhyPXUuZXhlYyh0KSkhPW51bGw7KXtpZihpPXJbMV18fHJbMl18fHJbM118fHJbNF18fHJbNV18fHJbNl0sIWkpY29udGludWU7aWYocz1bLi4uaV0ubGVuZ3RoLHJbM118fHJbNF0pe2wrPXM7Y29udGludWV9ZWxzZSBpZigocls1XXx8cls2XSkmJmElMyYmISgoYStzKSUzKSl7Yys9cztjb250aW51ZX1pZihsLT1zLGw+MCljb250aW51ZTtzPU1hdGgubWluKHMscytsK2MpO2xldCBwPVsuLi5yWzBdXVswXS5sZW5ndGgsZD1lLnNsaWNlKDAsYStyLmluZGV4K3Arcyk7aWYoTWF0aC5taW4oYSxzKSUyKXtsZXQgeT1kLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OmQsdGV4dDp5LHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2Vucyh5KX19bGV0IGg9ZC5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ryb25nIixyYXc6ZCx0ZXh0OmgsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKGgpfX19fWNvZGVzcGFuKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhlKTtpZih0KXtsZXQgbj10WzJdLnJlcGxhY2UodGhpcy5ydWxlcy5vdGhlci5uZXdMaW5lQ2hhckdsb2JhbCwiICIpLHI9dGhpcy5ydWxlcy5vdGhlci5ub25TcGFjZUNoYXIudGVzdChuKSxvPXRoaXMucnVsZXMub3RoZXIuc3RhcnRpbmdTcGFjZUNoYXIudGVzdChuKSYmdGhpcy5ydWxlcy5vdGhlci5lbmRpbmdTcGFjZUNoYXIudGVzdChuKTtyZXR1cm4gciYmbyYmKG49bi5zdWJzdHJpbmcoMSxuLmxlbmd0aC0xKSkse3R5cGU6ImNvZGVzcGFuIixyYXc6dFswXSx0ZXh0Om59fX1icihlKXtsZXQgdD10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImJyIixyYXc6dFswXX19ZGVsKGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGUpO2lmKHQpcmV0dXJue3R5cGU6ImRlbCIscmF3OnRbMF0sdGV4dDp0WzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2Vucyh0WzJdKX19YXV0b2xpbmsoZSl7bGV0IHQ9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhlKTtpZih0KXtsZXQgbixyO3JldHVybiB0WzJdPT09IkAiPyhuPXRbMV0scj0ibWFpbHRvOiIrbik6KG49dFsxXSxyPW4pLHt0eXBlOiJsaW5rIixyYXc6dFswXSx0ZXh0Om4saHJlZjpyLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpuLHRleHQ6bn1dfX19dXJsKGUpe2xldCB0O2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWMoZSkpe2xldCBuLHI7aWYodFsyXT09PSJAIiluPXRbMF0scj0ibWFpbHRvOiIrbjtlbHNle2xldCBvO2RvIG89dFswXSx0WzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyh0WzBdKT8uWzBdPz8iIjt3aGlsZShvIT09dFswXSk7bj10WzBdLHRbMV09PT0id3d3LiI/cj0iaHR0cDovLyIrdFswXTpyPXRbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzp0WzBdLHRleHQ6bixocmVmOnIsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3Om4sdGV4dDpufV19fX1pbmxpbmVUZXh0KGUpe2xldCB0PXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyhlKTtpZih0KXtsZXQgbj10aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s7cmV0dXJue3R5cGU6InRleHQiLHJhdzp0WzBdLHRleHQ6dFswXSxlc2NhcGVkOm59fX19LGZyPWNsYXNzIFRwe3Rva2VucztvcHRpb25zO3N0YXRlO3Rva2VuaXplcjtpbmxpbmVRdWV1ZTtjb25zdHJ1Y3Rvcih0KXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz10fHxEbyx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBZbCx0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMudG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2xldCBuPXtvdGhlcjpJdCxibG9jazpWbC5ub3JtYWwsaW5saW5lOlVpLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhuLmJsb2NrPVZsLnBlZGFudGljLG4uaW5saW5lPVVpLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYobi5ibG9jaz1WbC5nZm0sdGhpcy5vcHRpb25zLmJyZWFrcz9uLmlubGluZT1VaS5icmVha3M6bi5pbmxpbmU9VWkuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1ufXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6VmwsaW5saW5lOlVpfX1zdGF0aWMgbGV4KHQsbil7cmV0dXJuIG5ldyBUcChuKS5sZXgodCl9c3RhdGljIGxleElubGluZSh0LG4pe3JldHVybiBuZXcgVHAobikuaW5saW5lVG9rZW5zKHQpfWxleCh0KXt0PXQucmVwbGFjZShJdC5jYXJyaWFnZVJldHVybixgCmApLHRoaXMuYmxvY2tUb2tlbnModCx0aGlzLnRva2Vucyk7Zm9yKGxldCBuPTA7bjx0aGlzLmlubGluZVF1ZXVlLmxlbmd0aDtuKyspe2xldCByPXRoaXMuaW5saW5lUXVldWVbbl07dGhpcy5pbmxpbmVUb2tlbnMoci5zcmMsci50b2tlbnMpfXJldHVybiB0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKHQsbj1bXSxyPSExKXtmb3IodGhpcy5vcHRpb25zLnBlZGFudGljJiYodD10LnJlcGxhY2UoSXQudGFiQ2hhckdsb2JhbCwiICAgICIpLnJlcGxhY2UoSXQuc3BhY2VMaW5lLCIiKSk7dDspe2xldCBvO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5ibG9jaz8uc29tZShpPT4obz1pLmNhbGwoe2xleGVyOnRoaXN9LHQsbikpPyh0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pLCEwKTohMSkpY29udGludWU7aWYobz10aGlzLnRva2VuaXplci5zcGFjZSh0KSl7dD10LnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpO2xldCBpPW4uYXQoLTEpO28ucmF3Lmxlbmd0aD09PTEmJmkhPT12b2lkIDA/aS5yYXcrPWAKYDpuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5jb2RlKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCk7bGV0IGk9bi5hdCgtMSk7aT8udHlwZT09PSJwYXJhZ3JhcGgifHxpPy50eXBlPT09InRleHQiPyhpLnJhdys9YApgK28ucmF3LGkudGV4dCs9YApgK28udGV4dCx0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmM9aS50ZXh0KTpuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5mZW5jZXModCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSxuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5oZWFkaW5nKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pO2NvbnRpbnVlfWlmKG89dGhpcy50b2tlbml6ZXIuaHIodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSxuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pO2NvbnRpbnVlfWlmKG89dGhpcy50b2tlbml6ZXIubGlzdCh0KSl7dD10LnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpLG4ucHVzaChvKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLmh0bWwodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKSxuLnB1c2gobyk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci5kZWYodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKTtsZXQgaT1uLmF0KC0xKTtpPy50eXBlPT09InBhcmFncmFwaCJ8fGk/LnR5cGU9PT0idGV4dCI/KGkucmF3Kz1gCmArby5yYXcsaS50ZXh0Kz1gCmArby5yYXcsdGhpcy5pbmxpbmVRdWV1ZS5hdCgtMSkuc3JjPWkudGV4dCk6dGhpcy50b2tlbnMubGlua3Nbby50YWddfHwodGhpcy50b2tlbnMubGlua3Nbby50YWddPXtocmVmOm8uaHJlZix0aXRsZTpvLnRpdGxlfSk7Y29udGludWV9aWYobz10aGlzLnRva2VuaXplci50YWJsZSh0KSl7dD10LnN1YnN0cmluZyhvLnJhdy5sZW5ndGgpLG4ucHVzaChvKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLmxoZWFkaW5nKHQpKXt0PXQuc3Vic3RyaW5nKG8ucmF3Lmxlbmd0aCksbi5wdXNoKG8pO2NvbnRpbnVlfWxldCBhPXQ7aWYodGhpcy5vcHRpb25zLmV4dGVuc2lvbnM/LnN0YXJ0QmxvY2spe2xldCBpPTEvMCxzPXQuc2xpY2UoMSksbDt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goYz0+e2w9Yy5jYWxsKHtsZXhlcjp0aGlzfSxzKSx0eXBlb2YgbD09Im51bWJlciImJmw+PTAmJihpPU1hdGgubWluKGksbCkpfSksaTwxLzAmJmk+PTAmJihhPXQuc3Vic3RyaW5nKDAsaSsxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihvPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChhKSkpe2xldCBpPW4uYXQoLTEpO3ImJmk/LnR5cGU9PT0icGFyYWdyYXBoIj8oaS5yYXcrPWAKYCtvLnJhdyxpLnRleHQrPWAKYCtvLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlLmF0KC0xKS5zcmM9aS50ZXh0KTpuLnB1c2gobykscj1hLmxlbmd0aCE9PXQubGVuZ3RoLHQ9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKTtjb250aW51ZX1pZihvPXRoaXMudG9rZW5pemVyLnRleHQodCkpe3Q9dC5zdWJzdHJpbmcoby5yYXcubGVuZ3RoKTtsZXQgaT1uLmF0KC0xKTtpPy50eXBlPT09InRleHQiPyhpLnJhdys9YApgK28ucmF3LGkudGV4dCs9YApgK28udGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWUuYXQoLTEpLnNyYz1pLnRleHQpOm4ucHVzaChvKTtjb250aW51ZX1pZih0KXtsZXQgaT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK3QuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKGkpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IEVycm9yKGkpfX1yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAsbn1pbmxpbmUodCxuPVtdKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6dCx0b2tlbnM6bn0pLG59aW5saW5lVG9rZW5zKHQsbj1bXSl7bGV0IHI9dCxvPW51bGw7aWYodGhpcy50b2tlbnMubGlua3Mpe2xldCBzPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZihzLmxlbmd0aD4wKWZvcig7KG89dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyhyKSkhPW51bGw7KXMuaW5jbHVkZXMob1swXS5zbGljZShvWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYocj1yLnNsaWNlKDAsby5pbmRleCkrIlsiKyJhIi5yZXBlYXQob1swXS5sZW5ndGgtMikrIl0iK3Iuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDsobz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyhyKSkhPW51bGw7KXI9ci5zbGljZSgwLG8uaW5kZXgpKyIrKyIrci5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoOyhvPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyhyKSkhPW51bGw7KXI9ci5zbGljZSgwLG8uaW5kZXgpKyJbIisiYSIucmVwZWF0KG9bMF0ubGVuZ3RoLTIpKyJdIityLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtsZXQgYT0hMSxpPSIiO2Zvcig7dDspe2F8fChpPSIiKSxhPSExO2xldCBzO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5pbmxpbmU/LnNvbWUoYz0+KHM9Yy5jYWxsKHtsZXhlcjp0aGlzfSx0LG4pKT8odD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKSwhMCk6ITEpKWNvbnRpbnVlO2lmKHM9dGhpcy50b2tlbml6ZXIuZXNjYXBlKHQpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIudGFnKHQpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIubGluayh0KSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1pZihzPXRoaXMudG9rZW5pemVyLnJlZmxpbmsodCx0aGlzLnRva2Vucy5saW5rcykpe3Q9dC5zdWJzdHJpbmcocy5yYXcubGVuZ3RoKTtsZXQgYz1uLmF0KC0xKTtzLnR5cGU9PT0idGV4dCImJmM/LnR5cGU9PT0idGV4dCI/KGMucmF3Kz1zLnJhdyxjLnRleHQrPXMudGV4dCk6bi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIuZW1TdHJvbmcodCxyLGkpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKHM9dGhpcy50b2tlbml6ZXIuY29kZXNwYW4odCkpe3Q9dC5zdWJzdHJpbmcocy5yYXcubGVuZ3RoKSxuLnB1c2gocyk7Y29udGludWV9aWYocz10aGlzLnRva2VuaXplci5icih0KSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1pZihzPXRoaXMudG9rZW5pemVyLmRlbCh0KSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1pZihzPXRoaXMudG9rZW5pemVyLmF1dG9saW5rKHQpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCksbi5wdXNoKHMpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRlLmluTGluayYmKHM9dGhpcy50b2tlbml6ZXIudXJsKHQpKSl7dD10LnN1YnN0cmluZyhzLnJhdy5sZW5ndGgpLG4ucHVzaChzKTtjb250aW51ZX1sZXQgbD10O2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5zdGFydElubGluZSl7bGV0IGM9MS8wLHU9dC5zbGljZSgxKSxwO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2goZD0+e3A9ZC5jYWxsKHtsZXhlcjp0aGlzfSx1KSx0eXBlb2YgcD09Im51bWJlciImJnA+PTAmJihjPU1hdGgubWluKGMscCkpfSksYzwxLzAmJmM+PTAmJihsPXQuc3Vic3RyaW5nKDAsYysxKSl9aWYocz10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGwpKXt0PXQuc3Vic3RyaW5nKHMucmF3Lmxlbmd0aCkscy5yYXcuc2xpY2UoLTEpIT09Il8iJiYoaT1zLnJhdy5zbGljZSgtMSkpLGE9ITA7bGV0IGM9bi5hdCgtMSk7Yz8udHlwZT09PSJ0ZXh0Ij8oYy5yYXcrPXMucmF3LGMudGV4dCs9cy50ZXh0KTpuLnB1c2gocyk7Y29udGludWV9aWYodCl7bGV0IGM9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIit0LmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihjKTticmVha31lbHNlIHRocm93IG5ldyBFcnJvcihjKX19cmV0dXJuIG59fSxxbD1jbGFzc3tvcHRpb25zO3BhcnNlcjtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wdGlvbnM9ZXx8RG99c3BhY2UoZSl7cmV0dXJuIiJ9Y29kZSh7dGV4dDplLGxhbmc6dCxlc2NhcGVkOm59KXtsZXQgcj0odHx8IiIpLm1hdGNoKEl0Lm5vdFNwYWNlU3RhcnQpPy5bMF0sbz1lLnJlcGxhY2UoSXQuZW5kaW5nTmV3bGluZSwiIikrYApgO3JldHVybiByPyc8cHJlPjxjb2RlIGNsYXNzPSJsYW5ndWFnZS0nK1ZuKHIpKyciPicrKG4/bzpWbihvLCEwKSkrYDwvY29kZT48L3ByZT4KYDoiPHByZT48Y29kZT4iKyhuP286Vm4obywhMCkpK2A8L2NvZGU+PC9wcmU+CmB9YmxvY2txdW90ZSh7dG9rZW5zOmV9KXtyZXR1cm5gPGJsb2NrcXVvdGU+CiR7dGhpcy5wYXJzZXIucGFyc2UoZSl9PC9ibG9ja3F1b3RlPgpgfWh0bWwoe3RleHQ6ZX0pe3JldHVybiBlfWhlYWRpbmcoe3Rva2VuczplLGRlcHRoOnR9KXtyZXR1cm5gPGgke3R9PiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9oJHt0fT4KYH1ocihlKXtyZXR1cm5gPGhyPgpgfWxpc3QoZSl7bGV0IHQ9ZS5vcmRlcmVkLG49ZS5zdGFydCxyPSIiO2ZvcihsZXQgaT0wO2k8ZS5pdGVtcy5sZW5ndGg7aSsrKXtsZXQgcz1lLml0ZW1zW2ldO3IrPXRoaXMubGlzdGl0ZW0ocyl9bGV0IG89dD8ib2wiOiJ1bCIsYT10JiZuIT09MT8nIHN0YXJ0PSInK24rJyInOiIiO3JldHVybiI8IitvK2ErYD4KYCtyKyI8LyIrbytgPgpgfWxpc3RpdGVtKGUpe2xldCB0PSIiO2lmKGUudGFzayl7bGV0IG49dGhpcy5jaGVja2JveCh7Y2hlY2tlZDohIWUuY2hlY2tlZH0pO2UubG9vc2U/ZS50b2tlbnNbMF0/LnR5cGU9PT0icGFyYWdyYXBoIj8oZS50b2tlbnNbMF0udGV4dD1uKyIgIitlLnRva2Vuc1swXS50ZXh0LGUudG9rZW5zWzBdLnRva2VucyYmZS50b2tlbnNbMF0udG9rZW5zLmxlbmd0aD4wJiZlLnRva2Vuc1swXS50b2tlbnNbMF0udHlwZT09PSJ0ZXh0IiYmKGUudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PW4rIiAiK1ZuKGUudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0KSxlLnRva2Vuc1swXS50b2tlbnNbMF0uZXNjYXBlZD0hMCkpOmUudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHJhdzpuKyIgIix0ZXh0Om4rIiAiLGVzY2FwZWQ6ITB9KTp0Kz1uKyIgIn1yZXR1cm4gdCs9dGhpcy5wYXJzZXIucGFyc2UoZS50b2tlbnMsISFlLmxvb3NlKSxgPGxpPiR7dH08L2xpPgpgfWNoZWNrYm94KHtjaGVja2VkOmV9KXtyZXR1cm4iPGlucHV0ICIrKGU/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94Ij4nfXBhcmFncmFwaCh7dG9rZW5zOmV9KXtyZXR1cm5gPHA+JHt0aGlzLnBhcnNlci5wYXJzZUlubGluZShlKX08L3A+CmB9dGFibGUoZSl7bGV0IHQ9IiIsbj0iIjtmb3IobGV0IG89MDtvPGUuaGVhZGVyLmxlbmd0aDtvKyspbis9dGhpcy50YWJsZWNlbGwoZS5oZWFkZXJbb10pO3QrPXRoaXMudGFibGVyb3coe3RleHQ6bn0pO2xldCByPSIiO2ZvcihsZXQgbz0wO288ZS5yb3dzLmxlbmd0aDtvKyspe2xldCBhPWUucm93c1tvXTtuPSIiO2ZvcihsZXQgaT0wO2k8YS5sZW5ndGg7aSsrKW4rPXRoaXMudGFibGVjZWxsKGFbaV0pO3IrPXRoaXMudGFibGVyb3coe3RleHQ6bn0pfXJldHVybiByJiYocj1gPHRib2R5PiR7cn08L3Rib2R5PmApLGA8dGFibGU+Cjx0aGVhZD4KYCt0K2A8L3RoZWFkPgpgK3IrYDwvdGFibGU+CmB9dGFibGVyb3coe3RleHQ6ZX0pe3JldHVybmA8dHI+CiR7ZX08L3RyPgpgfXRhYmxlY2VsbChlKXtsZXQgdD10aGlzLnBhcnNlci5wYXJzZUlubGluZShlLnRva2Vucyksbj1lLmhlYWRlcj8idGgiOiJ0ZCI7cmV0dXJuKGUuYWxpZ24/YDwke259IGFsaWduPSIke2UuYWxpZ259Ij5gOmA8JHtufT5gKSt0K2A8LyR7bn0+CmB9c3Ryb25nKHt0b2tlbnM6ZX0pe3JldHVybmA8c3Ryb25nPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9zdHJvbmc+YH1lbSh7dG9rZW5zOmV9KXtyZXR1cm5gPGVtPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9lbT5gfWNvZGVzcGFuKHt0ZXh0OmV9KXtyZXR1cm5gPGNvZGU+JHtWbihlLCEwKX08L2NvZGU+YH1icihlKXtyZXR1cm4iPGJyPiJ9ZGVsKHt0b2tlbnM6ZX0pe3JldHVybmA8ZGVsPiR7dGhpcy5wYXJzZXIucGFyc2VJbmxpbmUoZSl9PC9kZWw+YH1saW5rKHtocmVmOmUsdGl0bGU6dCx0b2tlbnM6bn0pe2xldCByPXRoaXMucGFyc2VyLnBhcnNlSW5saW5lKG4pLG89JHYoZSk7aWYobz09PW51bGwpcmV0dXJuIHI7ZT1vO2xldCBhPSc8YSBocmVmPSInK2UrJyInO3JldHVybiB0JiYoYSs9JyB0aXRsZT0iJytWbih0KSsnIicpLGErPSI+IityKyI8L2E+IixhfWltYWdlKHtocmVmOmUsdGl0bGU6dCx0ZXh0Om4sdG9rZW5zOnJ9KXtyJiYobj10aGlzLnBhcnNlci5wYXJzZUlubGluZShyLHRoaXMucGFyc2VyLnRleHRSZW5kZXJlcikpO2xldCBvPSR2KGUpO2lmKG89PT1udWxsKXJldHVybiBWbihuKTtlPW87bGV0IGE9YDxpbWcgc3JjPSIke2V9IiBhbHQ9IiR7bn0iYDtyZXR1cm4gdCYmKGErPWAgdGl0bGU9IiR7Vm4odCl9ImApLGErPSI+IixhfXRleHQoZSl7cmV0dXJuInRva2VucyJpbiBlJiZlLnRva2Vucz90aGlzLnBhcnNlci5wYXJzZUlubGluZShlLnRva2Vucyk6ImVzY2FwZWQiaW4gZSYmZS5lc2NhcGVkP2UudGV4dDpWbihlLnRleHQpfX0sSGk9Y2xhc3N7c3Ryb25nKHt0ZXh0OmV9KXtyZXR1cm4gZX1lbSh7dGV4dDplfSl7cmV0dXJuIGV9Y29kZXNwYW4oe3RleHQ6ZX0pe3JldHVybiBlfWRlbCh7dGV4dDplfSl7cmV0dXJuIGV9aHRtbCh7dGV4dDplfSl7cmV0dXJuIGV9dGV4dCh7dGV4dDplfSl7cmV0dXJuIGV9bGluayh7dGV4dDplfSl7cmV0dXJuIiIrZX1pbWFnZSh7dGV4dDplfSl7cmV0dXJuIiIrZX1icigpe3JldHVybiIifX0saHI9Y2xhc3MgTnB7b3B0aW9ucztyZW5kZXJlcjt0ZXh0UmVuZGVyZXI7Y29uc3RydWN0b3IodCl7dGhpcy5vcHRpb25zPXR8fERvLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBxbCx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMucmVuZGVyZXIucGFyc2VyPXRoaXMsdGhpcy50ZXh0UmVuZGVyZXI9bmV3IEhpfXN0YXRpYyBwYXJzZSh0LG4pe3JldHVybiBuZXcgTnAobikucGFyc2UodCl9c3RhdGljIHBhcnNlSW5saW5lKHQsbil7cmV0dXJuIG5ldyBOcChuKS5wYXJzZUlubGluZSh0KX1wYXJzZSh0LG49ITApe2xldCByPSIiO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgYT10W29dO2lmKHRoaXMub3B0aW9ucy5leHRlbnNpb25zPy5yZW5kZXJlcnM/LlthLnR5cGVdKXtsZXQgcz1hLGw9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW3MudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LHMpO2lmKGwhPT0hMXx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFibGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMocy50eXBlKSl7cis9bHx8IiI7Y29udGludWV9fWxldCBpPWE7c3dpdGNoKGkudHlwZSl7Y2FzZSJzcGFjZSI6e3IrPXRoaXMucmVuZGVyZXIuc3BhY2UoaSk7Y29udGludWV9Y2FzZSJociI6e3IrPXRoaXMucmVuZGVyZXIuaHIoaSk7Y29udGludWV9Y2FzZSJoZWFkaW5nIjp7cis9dGhpcy5yZW5kZXJlci5oZWFkaW5nKGkpO2NvbnRpbnVlfWNhc2UiY29kZSI6e3IrPXRoaXMucmVuZGVyZXIuY29kZShpKTtjb250aW51ZX1jYXNlInRhYmxlIjp7cis9dGhpcy5yZW5kZXJlci50YWJsZShpKTtjb250aW51ZX1jYXNlImJsb2NrcXVvdGUiOntyKz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoaSk7Y29udGludWV9Y2FzZSJsaXN0Ijp7cis9dGhpcy5yZW5kZXJlci5saXN0KGkpO2NvbnRpbnVlfWNhc2UiaHRtbCI6e3IrPXRoaXMucmVuZGVyZXIuaHRtbChpKTtjb250aW51ZX1jYXNlInBhcmFncmFwaCI6e3IrPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKGkpO2NvbnRpbnVlfWNhc2UidGV4dCI6e2xldCBzPWksbD10aGlzLnJlbmRlcmVyLnRleHQocyk7Zm9yKDtvKzE8dC5sZW5ndGgmJnRbbysxXS50eXBlPT09InRleHQiOylzPXRbKytvXSxsKz1gCmArdGhpcy5yZW5kZXJlci50ZXh0KHMpO24/cis9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoe3R5cGU6InBhcmFncmFwaCIscmF3OmwsdGV4dDpsLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpsLHRleHQ6bCxlc2NhcGVkOiEwfV19KTpyKz1sO2NvbnRpbnVlfWRlZmF1bHQ6e2xldCBzPSdUb2tlbiB3aXRoICInK2kudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKHMpLCIiO3Rocm93IG5ldyBFcnJvcihzKX19fXJldHVybiByfXBhcnNlSW5saW5lKHQsbj10aGlzLnJlbmRlcmVyKXtsZXQgcj0iIjtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7bGV0IGE9dFtvXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucz8ucmVuZGVyZXJzPy5bYS50eXBlXSl7bGV0IHM9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2EudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGEpO2lmKHMhPT0hMXx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhhLnR5cGUpKXtyKz1zfHwiIjtjb250aW51ZX19bGV0IGk9YTtzd2l0Y2goaS50eXBlKXtjYXNlImVzY2FwZSI6e3IrPW4udGV4dChpKTticmVha31jYXNlImh0bWwiOntyKz1uLmh0bWwoaSk7YnJlYWt9Y2FzZSJsaW5rIjp7cis9bi5saW5rKGkpO2JyZWFrfWNhc2UiaW1hZ2UiOntyKz1uLmltYWdlKGkpO2JyZWFrfWNhc2Uic3Ryb25nIjp7cis9bi5zdHJvbmcoaSk7YnJlYWt9Y2FzZSJlbSI6e3IrPW4uZW0oaSk7YnJlYWt9Y2FzZSJjb2Rlc3BhbiI6e3IrPW4uY29kZXNwYW4oaSk7YnJlYWt9Y2FzZSJiciI6e3IrPW4uYnIoaSk7YnJlYWt9Y2FzZSJkZWwiOntyKz1uLmRlbChpKTticmVha31jYXNlInRleHQiOntyKz1uLnRleHQoaSk7YnJlYWt9ZGVmYXVsdDp7bGV0IHM9J1Rva2VuIHdpdGggIicraS50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IocyksIiI7dGhyb3cgbmV3IEVycm9yKHMpfX19cmV0dXJuIHJ9fSxqbD1jbGFzc3tvcHRpb25zO2Jsb2NrO2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0aW9ucz1lfHxEb31zdGF0aWMgcGFzc1Rocm91Z2hIb29rcz1uZXcgU2V0KFsicHJlcHJvY2VzcyIsInBvc3Rwcm9jZXNzIiwicHJvY2Vzc0FsbFRva2VucyJdKTtwcmVwcm9jZXNzKGUpe3JldHVybiBlfXBvc3Rwcm9jZXNzKGUpe3JldHVybiBlfXByb2Nlc3NBbGxUb2tlbnMoZSl7cmV0dXJuIGV9cHJvdmlkZUxleGVyKCl7cmV0dXJuIHRoaXMuYmxvY2s/ZnIubGV4OmZyLmxleElubGluZX1wcm92aWRlUGFyc2VyKCl7cmV0dXJuIHRoaXMuYmxvY2s/aHIucGFyc2U6aHIucGFyc2VJbmxpbmV9fSxsRT1jbGFzc3tkZWZhdWx0cz1EcCgpO29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMucGFyc2VNYXJrZG93bighMCk7cGFyc2VJbmxpbmU9dGhpcy5wYXJzZU1hcmtkb3duKCExKTtQYXJzZXI9aHI7UmVuZGVyZXI9cWw7VGV4dFJlbmRlcmVyPUhpO0xleGVyPWZyO1Rva2VuaXplcj1ZbDtIb29rcz1qbDtjb25zdHJ1Y3RvciguLi5lKXt0aGlzLnVzZSguLi5lKX13YWxrVG9rZW5zKGUsdCl7bGV0IG49W107Zm9yKGxldCByIG9mIGUpc3dpdGNoKG49bi5jb25jYXQodC5jYWxsKHRoaXMscikpLHIudHlwZSl7Y2FzZSJ0YWJsZSI6e2xldCBvPXI7Zm9yKGxldCBhIG9mIG8uaGVhZGVyKW49bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGEudG9rZW5zLHQpKTtmb3IobGV0IGEgb2Ygby5yb3dzKWZvcihsZXQgaSBvZiBhKW49bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKGkudG9rZW5zLHQpKTticmVha31jYXNlImxpc3QiOntsZXQgbz1yO249bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKG8uaXRlbXMsdCkpO2JyZWFrfWRlZmF1bHQ6e2xldCBvPXI7dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zPy5jaGlsZFRva2Vucz8uW28udHlwZV0/dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW28udHlwZV0uZm9yRWFjaChhPT57bGV0IGk9b1thXS5mbGF0KDEvMCk7bj1uLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaSx0KSl9KTpvLnRva2VucyYmKG49bi5jb25jYXQodGhpcy53YWxrVG9rZW5zKG8udG9rZW5zLHQpKSl9fXJldHVybiBufXVzZSguLi5lKXtsZXQgdD10aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnN8fHtyZW5kZXJlcnM6e30sY2hpbGRUb2tlbnM6e319O3JldHVybiBlLmZvckVhY2gobj0+e2xldCByPXsuLi5ufTtpZihyLmFzeW5jPXRoaXMuZGVmYXVsdHMuYXN5bmN8fHIuYXN5bmN8fCExLG4uZXh0ZW5zaW9ucyYmKG4uZXh0ZW5zaW9ucy5mb3JFYWNoKG89PntpZighby5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTtpZigicmVuZGVyZXIiaW4gbyl7bGV0IGE9dC5yZW5kZXJlcnNbby5uYW1lXTthP3QucmVuZGVyZXJzW28ubmFtZV09ZnVuY3Rpb24oLi4uaSl7bGV0IHM9by5yZW5kZXJlci5hcHBseSh0aGlzLGkpO3JldHVybiBzPT09ITEmJihzPWEuYXBwbHkodGhpcyxpKSksc306dC5yZW5kZXJlcnNbby5uYW1lXT1vLnJlbmRlcmVyfWlmKCJ0b2tlbml6ZXIiaW4gbyl7aWYoIW8ubGV2ZWx8fG8ubGV2ZWwhPT0iYmxvY2siJiZvLmxldmVsIT09ImlubGluZSIpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7bGV0IGE9dFtvLmxldmVsXTthP2EudW5zaGlmdChvLnRva2VuaXplcik6dFtvLmxldmVsXT1bby50b2tlbml6ZXJdLG8uc3RhcnQmJihvLmxldmVsPT09ImJsb2NrIj90LnN0YXJ0QmxvY2s/dC5zdGFydEJsb2NrLnB1c2goby5zdGFydCk6dC5zdGFydEJsb2NrPVtvLnN0YXJ0XTpvLmxldmVsPT09ImlubGluZSImJih0LnN0YXJ0SW5saW5lP3Quc3RhcnRJbmxpbmUucHVzaChvLnN0YXJ0KTp0LnN0YXJ0SW5saW5lPVtvLnN0YXJ0XSkpfSJjaGlsZFRva2VucyJpbiBvJiZvLmNoaWxkVG9rZW5zJiYodC5jaGlsZFRva2Vuc1tvLm5hbWVdPW8uY2hpbGRUb2tlbnMpfSksci5leHRlbnNpb25zPXQpLG4ucmVuZGVyZXIpe2xldCBvPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBxbCh0aGlzLmRlZmF1bHRzKTtmb3IobGV0IGEgaW4gbi5yZW5kZXJlcil7aWYoIShhIGluIG8pKXRocm93IG5ldyBFcnJvcihgcmVuZGVyZXIgJyR7YX0nIGRvZXMgbm90IGV4aXN0YCk7aWYoWyJvcHRpb25zIiwicGFyc2VyIl0uaW5jbHVkZXMoYSkpY29udGludWU7bGV0IGk9YSxzPW4ucmVuZGVyZXJbaV0sbD1vW2ldO29baV09KC4uLmMpPT57bGV0IHU9cy5hcHBseShvLGMpO3JldHVybiB1PT09ITEmJih1PWwuYXBwbHkobyxjKSksdXx8IiJ9fXIucmVuZGVyZXI9b31pZihuLnRva2VuaXplcil7bGV0IG89dGhpcy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyBZbCh0aGlzLmRlZmF1bHRzKTtmb3IobGV0IGEgaW4gbi50b2tlbml6ZXIpe2lmKCEoYSBpbiBvKSl0aHJvdyBuZXcgRXJyb3IoYHRva2VuaXplciAnJHthfScgZG9lcyBub3QgZXhpc3RgKTtpZihbIm9wdGlvbnMiLCJydWxlcyIsImxleGVyIl0uaW5jbHVkZXMoYSkpY29udGludWU7bGV0IGk9YSxzPW4udG9rZW5pemVyW2ldLGw9b1tpXTtvW2ldPSguLi5jKT0+e2xldCB1PXMuYXBwbHkobyxjKTtyZXR1cm4gdT09PSExJiYodT1sLmFwcGx5KG8sYykpLHV9fXIudG9rZW5pemVyPW99aWYobi5ob29rcyl7bGV0IG89dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IGpsO2ZvcihsZXQgYSBpbiBuLmhvb2tzKXtpZighKGEgaW4gbykpdGhyb3cgbmV3IEVycm9yKGBob29rICcke2F9JyBkb2VzIG5vdCBleGlzdGApO2lmKFsib3B0aW9ucyIsImJsb2NrIl0uaW5jbHVkZXMoYSkpY29udGludWU7bGV0IGk9YSxzPW4uaG9va3NbaV0sbD1vW2ldO2psLnBhc3NUaHJvdWdoSG9va3MuaGFzKGEpP29baV09Yz0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShzLmNhbGwobyxjKSkudGhlbihwPT5sLmNhbGwobyxwKSk7bGV0IHU9cy5jYWxsKG8sYyk7cmV0dXJuIGwuY2FsbChvLHUpfTpvW2ldPSguLi5jKT0+e2xldCB1PXMuYXBwbHkobyxjKTtyZXR1cm4gdT09PSExJiYodT1sLmFwcGx5KG8sYykpLHV9fXIuaG9va3M9b31pZihuLndhbGtUb2tlbnMpe2xldCBvPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucyxhPW4ud2Fsa1Rva2VucztyLndhbGtUb2tlbnM9ZnVuY3Rpb24oaSl7bGV0IHM9W107cmV0dXJuIHMucHVzaChhLmNhbGwodGhpcyxpKSksbyYmKHM9cy5jb25jYXQoby5jYWxsKHRoaXMsaSkpKSxzfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLnJ9fSksdGhpc31zZXRPcHRpb25zKGUpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmV9LHRoaXN9bGV4ZXIoZSx0KXtyZXR1cm4gZnIubGV4KGUsdD8/dGhpcy5kZWZhdWx0cyl9cGFyc2VyKGUsdCl7cmV0dXJuIGhyLnBhcnNlKGUsdD8/dGhpcy5kZWZhdWx0cyl9cGFyc2VNYXJrZG93bihlKXtyZXR1cm4obixyKT0+e2xldCBvPXsuLi5yfSxhPXsuLi50aGlzLmRlZmF1bHRzLC4uLm99LGk9dGhpcy5vbkVycm9yKCEhYS5zaWxlbnQsISFhLmFzeW5jKTtpZih0aGlzLmRlZmF1bHRzLmFzeW5jPT09ITAmJm8uYXN5bmM9PT0hMSlyZXR1cm4gaShuZXcgRXJyb3IoIm1hcmtlZCgpOiBUaGUgYXN5bmMgb3B0aW9uIHdhcyBzZXQgdG8gdHJ1ZSBieSBhbiBleHRlbnNpb24uIFJlbW92ZSBhc3luYzogZmFsc2UgZnJvbSB0aGUgcGFyc2Ugb3B0aW9ucyBvYmplY3QgdG8gcmV0dXJuIGEgUHJvbWlzZS4iKSk7aWYodHlwZW9mIG4+InUifHxuPT09bnVsbClyZXR1cm4gaShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYodHlwZW9mIG4hPSJzdHJpbmciKXJldHVybiBpKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKyIsIHN0cmluZyBleHBlY3RlZCIpKTthLmhvb2tzJiYoYS5ob29rcy5vcHRpb25zPWEsYS5ob29rcy5ibG9jaz1lKTtsZXQgcz1hLmhvb2tzP2EuaG9va3MucHJvdmlkZUxleGVyKCk6ZT9mci5sZXg6ZnIubGV4SW5saW5lLGw9YS5ob29rcz9hLmhvb2tzLnByb3ZpZGVQYXJzZXIoKTplP2hyLnBhcnNlOmhyLnBhcnNlSW5saW5lO2lmKGEuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShhLmhvb2tzP2EuaG9va3MucHJlcHJvY2VzcyhuKTpuKS50aGVuKGM9PnMoYyxhKSkudGhlbihjPT5hLmhvb2tzP2EuaG9va3MucHJvY2Vzc0FsbFRva2VucyhjKTpjKS50aGVuKGM9PmEud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoYyxhLndhbGtUb2tlbnMpKS50aGVuKCgpPT5jKTpjKS50aGVuKGM9PmwoYyxhKSkudGhlbihjPT5hLmhvb2tzP2EuaG9va3MucG9zdHByb2Nlc3MoYyk6YykuY2F0Y2goaSk7dHJ5e2EuaG9va3MmJihuPWEuaG9va3MucHJlcHJvY2VzcyhuKSk7bGV0IGM9cyhuLGEpO2EuaG9va3MmJihjPWEuaG9va3MucHJvY2Vzc0FsbFRva2VucyhjKSksYS53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoYyxhLndhbGtUb2tlbnMpO2xldCB1PWwoYyxhKTtyZXR1cm4gYS5ob29rcyYmKHU9YS5ob29rcy5wb3N0cHJvY2Vzcyh1KSksdX1jYXRjaChjKXtyZXR1cm4gaShjKX19fW9uRXJyb3IoZSx0KXtyZXR1cm4gbj0+e2lmKG4ubWVzc2FnZSs9YApQbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC5gLGUpe2xldCByPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK1ZuKG4ubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIHQ/UHJvbWlzZS5yZXNvbHZlKHIpOnJ9aWYodClyZXR1cm4gUHJvbWlzZS5yZWplY3Qobik7dGhyb3cgbn19fSxObz1uZXcgbEU7ZnVuY3Rpb24ga2UoZSx0KXtyZXR1cm4gTm8ucGFyc2UoZSx0KX1rZS5vcHRpb25zPWtlLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIE5vLnNldE9wdGlvbnMoZSksa2UuZGVmYXVsdHM9Tm8uZGVmYXVsdHMsSHYoa2UuZGVmYXVsdHMpLGtlfTtrZS5nZXREZWZhdWx0cz1EcDtrZS5kZWZhdWx0cz1EbztrZS51c2U9ZnVuY3Rpb24oLi4uZSl7cmV0dXJuIE5vLnVzZSguLi5lKSxrZS5kZWZhdWx0cz1Oby5kZWZhdWx0cyxIdihrZS5kZWZhdWx0cyksa2V9O2tlLndhbGtUb2tlbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTm8ud2Fsa1Rva2VucyhlLHQpfTtrZS5wYXJzZUlubGluZT1Oby5wYXJzZUlubGluZTtrZS5QYXJzZXI9aHI7a2UucGFyc2VyPWhyLnBhcnNlO2tlLlJlbmRlcmVyPXFsO2tlLlRleHRSZW5kZXJlcj1IaTtrZS5MZXhlcj1mcjtrZS5sZXhlcj1mci5sZXg7a2UuVG9rZW5pemVyPVlsO2tlLkhvb2tzPWpsO2tlLnBhcnNlPWtlO3ZhciBmTT1rZS5vcHRpb25zLGhNPWtlLnNldE9wdGlvbnMsbU09a2UudXNlLGdNPWtlLndhbGtUb2tlbnMsZXc9a2UucGFyc2VJbmxpbmU7dmFyIHlNPWhyLnBhcnNlLHZNPWZyLmxleDtrZS51c2Uoe2JyZWFrczohMCxnZm06ITAscmVuZGVyZXI6e2xpbmsoe2hyZWY6ZSx0aXRsZTp0LHRleHQ6bn0pe2xldCByPXQ/YCB0aXRsZT0iJHt0fSJgOiIiO3JldHVybmA8YSBocmVmPSIke2V9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiR7cn0+JHtufTwvYT5gfX19KTtmdW5jdGlvbiBOYShlKXtyZXR1cm4gZT9rZS5wYXJzZUlubGluZShlKToiIn1mdW5jdGlvbiBQcChlKXtyZXR1cm4gZT9rZS5wYXJzZShlKToiIn1mdW5jdGlvbiB0dyhlKXtpZighZSlyZXR1cm4iIjtsZXQgdD1lLnJlcGxhY2UoL1xbKFteXF1dKylcXVxbXF4/XGQrXF0vZywiJDEiKS5yZXBsYWNlKC9cW1xeW15cXV0qXF0vZywiIikucmVwbGFjZSgvPT0oW149XSspPT0vZywiJDEiKTtyZXR1cm4gZXcodCx7cmVuZGVyZXI6bmV3IEhpfSkudHJpbSgpfXZhciBabD16KHllKCkpO3ZhciBZZT16KHllKCkpLG1yPXoocmUoKSksWGw9ImRhc2hib2FyZDp3aWRnZXQtZm9jdXMtcmVxdWVzdCIsY0U9MmUzLExwPSJkYXNoYm9hcmQ6d2lkZ2V0LWRyYWctcmVhZHkiLG53PTIyMDtmdW5jdGlvbiB1RShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEVsZW1lbnQ/ISFlLmNsb3Nlc3QoImJ1dHRvbiwgYSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPSdidXR0b24nXSIpOiExfWZ1bmN0aW9uIEdpKCl7aWYodHlwZW9mIG5hdmlnYXRvcj4idSJ8fHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2xldCBlPW5hdmlnYXRvci51c2VyQWdlbnR8fCIiLHQ9L0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KGUpLG49bmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjEmJi9NYWNpbnRvc2gvLnRlc3QoZSk7cmV0dXJuIXQmJiFuJiZ3aW5kb3cuaW5uZXJXaWR0aD44MDB9ZnVuY3Rpb24gZEUoZSx0LG4pe2lmKCFBcnJheS5pc0FycmF5KGUpfHwhdHx8IW58fHQ9PT1uKXJldHVybiBlO2xldCByPWUuZmluZEluZGV4KGw9Pmw/LndpZGdldElkPT09dCksbz1lLmZpbmRJbmRleChsPT5sPy53aWRnZXRJZD09PW4pO2lmKHI8MHx8bzwwfHxyPT09bylyZXR1cm4gZTtsZXQgYT1bLi4uZV0sW2ldPWEuc3BsaWNlKHIsMSkscz1yPG8/by0xOm87cmV0dXJuIGEuc3BsaWNlKHMsMCxpKSxhfWZ1bmN0aW9uIHBFKCl7aWYodHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm4gbmV3IE1hcDtsZXQgZT1uZXcgTWFwO3JldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZGFzaGJvYXJkLWdyaWQgLmdyaWQtY2VsbFtkYXRhLXdpZGdldC1pZF0iKS5mb3JFYWNoKG49PntsZXQgcj1uLmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKTtyJiZlLnNldChyLG4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpfSksZX1mdW5jdGlvbiBmRShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIE1hcCl8fGUuc2l6ZT09PTB8fHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuO2xldCBuPVtdO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYXNoYm9hcmQtZ3JpZCAuZ3JpZC1jZWxsW2RhdGEtd2lkZ2V0LWlkXSIpLmZvckVhY2gobz0+e2xldCBhPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXdpZGdldC1pZCIpO2lmKCFhfHxhPT09dClyZXR1cm47bGV0IGk9ZS5nZXQoYSk7aWYoIWkpcmV0dXJuO2xldCBzPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD1pLmxlZnQtcy5sZWZ0LGM9aS50b3Atcy50b3A7TWF0aC5hYnMobCk8MSYmTWF0aC5hYnMoYyk8MXx8KG8uc3R5bGUudHJhbnNpdGlvbj0ibm9uZSIsby5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1mbGlwLXgiLGAke2x9cHhgKSxvLnN0eWxlLnNldFByb3BlcnR5KCItLWZsaXAteSIsYCR7Y31weGApLG4ucHVzaChvKSl9KSxuLmxlbmd0aCE9PTAmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLmZvckVhY2gobz0+e28uc3R5bGUudHJhbnNpdGlvbj1gdHJhbnNmb3JtICR7bnd9bXMgZWFzZWAsby5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1mbGlwLXgiLCIwcHgiKSxvLnN0eWxlLnNldFByb3BlcnR5KCItLWZsaXAteSIsIjBweCIpfSksd2luZG93LnNldFRpbWVvdXQoKCk9PntuLmZvckVhY2gobz0+by5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNpdGlvbiIpKX0sbncrNDApfSl9ZnVuY3Rpb24gcncoZSl7cmV0dXJuKGV8fFtdKS5tYXAodD0+dD8ud2lkZ2V0SWQpLmZpbHRlcihCb29sZWFuKS5qb2luKCJ8Iil9ZnVuY3Rpb24gb3coZSx0KXtsZXRbbixyXT0oMCxZZS51c2VTdGF0ZSkobnVsbCksW28sYV09KDAsWWUudXNlU3RhdGUpKGUpLGk9KDAsWWUudXNlUmVmKShlKSxzPSgwLFllLnVzZVJlZikobnVsbCk7KDAsWWUudXNlRWZmZWN0KSgoKT0+e258fGEoZSl9LFtlLG5dKSwoMCxZZS51c2VFZmZlY3QpKCgpPT57aS5jdXJyZW50PW99LFtvXSksKDAsWWUudXNlTGF5b3V0RWZmZWN0KSgoKT0+e2xldCBjPXMuY3VycmVudDshbnx8IWN8fChzLmN1cnJlbnQ9bnVsbCxmRShjLG4pKX0sW28sbl0pLCgwLFllLnVzZUVmZmVjdCkoKCk9PntsZXQgYz11PT57bGV0IHA9dT8uZGV0YWlsPy53aWRnZXRJZDtwJiYocihwKSxhKGQ9PkFycmF5LmlzQXJyYXkoZCkmJmQubGVuZ3RoP2Q6ZSkpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoTHAsYyksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKExwLGMpfSxbZV0pO2xldCBsPSgwLFllLnVzZUNhbGxiYWNrKSgoKT0+e2lmKCFuKXJldHVybjtsZXQgYz1ydyhlKSx1PXJ3KGkuY3VycmVudCk7cihudWxsKSx1JiZjIT09dSYmdChpLmN1cnJlbnQubWFwKHA9PnAud2lkZ2V0SWQpKX0sW2Usbix0XSk7cmV0dXJuKDAsWWUudXNlRWZmZWN0KSgoKT0+e2lmKCFuKXJldHVybjtsZXQgYz1kPT57aWYoKGQuYnV0dG9ucyYxKSE9PTEpe2woKTtyZXR1cm59bGV0IHc9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChkLmNsaWVudFgsZC5jbGllbnRZKT8uY2xvc2VzdD8uKCIuZGFzaGJvYXJkLWdyaWQgLmdyaWQtY2VsbFtkYXRhLXdpZGdldC1pZF0iKT8uZ2V0QXR0cmlidXRlPy4oImRhdGEtd2lkZ2V0LWlkIik7aWYoIXd8fHc9PT1uKXJldHVybjtsZXQgYj1wRSgpO2EoZz0+e2xldCBtPWRFKGcsbix3KTtyZXR1cm4gbSE9PWcmJihzLmN1cnJlbnQ9YiksbX0pfSx1PSgpPT5sKCkscD0oKT0+bCgpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixjKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHApLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsYyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixwKX19LFtuLGxdKSx7ZHJhZ2dpbmdXaWRnZXRJZDpuLGRpc3BsYXllZENvbXBvbmVudHM6b319ZnVuY3Rpb24genAoe2NvbmZpZ3VyYWJsZTplLGhlYWRlckFjdGlvbnM6dCxpY29uOm4sb25Db25maWd1cmU6cixzdWJ0aXRsZTpvLHRpdGxlOmEsd2lkZ2V0SWQ6aX0pe2xldFtzLGxdPSgwLFllLnVzZVN0YXRlKSgoKT0+R2koKSksYz0oMCxZZS51c2VSZWYpKG51bGwpLHU9KDAsWWUudXNlUmVmKShudWxsKSxwPSgwLFllLnVzZVJlZikoITEpLGQ9KDAsWWUudXNlTWVtbykoKCk9Pih7d2lkZ2V0SWQ6aX0pLFtpXSk7cmV0dXJuKDAsWWUudXNlRWZmZWN0KSgoKT0+e2xldCBoPSgpPT5sKEdpKCkpO3JldHVybiBoKCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsaCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLGgpfSxbXSksKDAsWWUudXNlRWZmZWN0KSgoKT0+e2xldCBoPWMuY3VycmVudDtpZighaClyZXR1cm47bGV0IHk9KCk9Pnt1LmN1cnJlbnQhPW51bGwmJih3aW5kb3cuY2xlYXJUaW1lb3V0KHUuY3VycmVudCksdS5jdXJyZW50PW51bGwpfSx3PW09PntoLmNsYXNzTGlzdC50b2dnbGUoIndpZGdldC1oZWFkaW5nLWJhci0tZHJhZy1yZWFkeSIsISFtKX0sYj1tPT57bS5idXR0b249PT0wJiYodUUobS50YXJnZXQpfHwocC5jdXJyZW50PSExLHcoITEpLHkoKSx1LmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoKCk9PntwLmN1cnJlbnQ9ITAsdyghMCksd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KExwLHtkZXRhaWw6ZH0pKX0sY0UpKSl9LGc9KCk9Pnt5KCkscC5jdXJyZW50PSExLHcoITEpfTtyZXR1cm4gaC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixnKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsZyksKCk9Pnt5KCksdyghMSksaC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGIpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixnKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsZyl9fSxbZF0pLCgwLG1yLmpzeHMpKCJkaXYiLHtyZWY6YyxjbGFzc05hbWU6YHdpZGdldC1oZWFkZXIgd2lkZ2V0LWhlYWRpbmctYmFyJHtzPyIgd2lkZ2V0LWhlYWRpbmctYmFyLS1mb2N1c2FibGUiOiIifWAsY2hpbGRyZW46W3M/KDAsbXIuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJ3aWRnZXQtaWNvbiB3aWRnZXQtaWNvbi1idXR0b24iLHR5cGU6ImJ1dHRvbiIsdGl0bGU6YEZvY3VzICR7YX1gLCJhcmlhLWxhYmVsIjpgRm9jdXMgJHthfWAsb25DbGljazooKT0+d2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFhsLHtkZXRhaWw6ZH0pKSxjaGlsZHJlbjpufSk6KDAsbXIuanN4KSgic3BhbiIse2NsYXNzTmFtZToid2lkZ2V0LWljb24iLGNoaWxkcmVuOm59KSwoMCxtci5qc3hzKSgiaDMiLHtjbGFzc05hbWU6IndpZGdldC10aXRsZSIsY2hpbGRyZW46WygwLG1yLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6IndpZGdldC10aXRsZV9fbGFiZWwiLGNoaWxkcmVuOmF9KSxvPygwLG1yLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6IndpZGdldC10aXRsZV9fc3VidGl0bGUiLGNoaWxkcmVuOm99KTpudWxsXX0pLHR8fG51bGwsZT8oMCxtci5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6IndpZGdldC1jb25maWd1cmUiLG9uQ2xpY2s6cixjaGlsZHJlbjoiXHUyNjk5IENvbmZpZ3VyZSJ9KTpudWxsXX0pfXZhciBWaT16KHJlKCkpLEZwPSgwLFpsLmNyZWF0ZUNvbnRleHQpKG51bGwpO2Z1bmN0aW9uIGNlKHthcHA6ZSxjaGlsZHJlbjp0LGNvbmZpZ3VyYWJsZTpuLGdyaWRIZWlnaHRTaXplOnIsZ3JpZFdpZHRoU2l6ZTpvLGhlYWRlckFjdGlvbnM6YSxpY29uOmksb25Db25maWd1cmU6cyxzdWJ0aXRsZTpsLHRpdGxlOmMsd2lkZ2V0SWQ6dX0pe2xldCBwPSgwLFpsLnVzZUNvbnRleHQpKEZwKSxkPWFzeW5jKCk9PntzP3MoKTplJiZhd2FpdCBlLmNvbmZpZ3VyZSh1KSYmd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSxoPW8/P3A/LmdyaWRXaWR0aFNpemUseT1yPz9wPy5ncmlkSGVpZ2h0U2l6ZSx3PU51bWJlcihoKT4wP051bWJlcihoKToxLGI9TnVtYmVyKHkpPjA/TnVtYmVyKHkpOjEsZz1gaG9yaXpvbnRhbC0ke3d9LWNlbGwgdmVydGljYWwtJHtifS1jZWxsYDtyZXR1cm4oMCxWaS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOmB3aWRnZXQgd2lkZ2V0LSR7dX0gJHtnfWAsY2hpbGRyZW46WygwLFZpLmpzeCkoenAse2NvbmZpZ3VyYWJsZTpuLGhlYWRlckFjdGlvbnM6YSxpY29uOmksc3VidGl0bGU6bCx0aXRsZTpjLHdpZGdldElkOnUsb25Db25maWd1cmU6ZH0pLCgwLFZpLmpzeCkoImRpdiIse2NsYXNzTmFtZToid2lkZ2V0LWJvZHkiLGNoaWxkcmVuOnR9KV19KX12YXIgaGU9eihyZSgpKTthc3luYyBmdW5jdGlvbiBoRShlLHQpe3JldHVybiB0Lm5vdGVVVUlEP2F3YWl0IEdsKGUsdC5ub3RlVVVJRCk6YXdhaXQgUHYoZSx0KX1hc3luYyBmdW5jdGlvbiBhdyhlLHQse2FjdGl2ZVRhYjpuLHNldEFjdGl2ZVRhYjpyLHNldE1vbnRoTG9hZGluZzpvLHNldE1vbnRoQ29udGVudDphfSl7aWYobj09PXQuaW5kZXgpe3IobnVsbCksYShudWxsKTtyZXR1cm59cih0LmluZGV4KSxvKCEwKSxhKG51bGwpO2xldCBpPXQucGxhbi5ub3RlVVVJRDt0cnl7aWYoIWkpYSh7Zm91bmQ6ITEscGxhbjp0LnBsYW4sbW9udGhOYW1lOnQuZnVsbCx5ZWFyOnQucGxhbi55ZWFyfSk7ZWxzZXtsZXQgcz1hd2FpdCB4cChlLGksdC5mdWxsKTtFKGBbUGxhbm5pbmddIFJhdyBtYXJrZG93biBmb3IgJHt0LmZ1bGx9OmAscz8uY29udGVudCksYSh7Li4ucyxwbGFuOnQucGxhbixtb250aE5hbWU6dC5mdWxsLHllYXI6dC5wbGFuLnllYXJ9KX19Y2F0Y2h7YSh7Zm91bmQ6ITEscGxhbjp0LnBsYW4sbW9udGhOYW1lOnQuZnVsbCx5ZWFyOnQucGxhbi55ZWFyfSl9ZmluYWxseXtvKCExKX19YXN5bmMgZnVuY3Rpb24gbUUoZSx0LHtzZXRNb250aExvYWRpbmc6bixzZXRNb250aENvbnRlbnQ6cn0pe2lmKHQpe24oITApO3RyeXtsZXQgbz1hd2FpdCBSdihlLHQucGxhbix0Lm1vbnRoTmFtZSk7aWYobyYmby5ub3RlVVVJRClyZXR1cm4gcihhPT4oey4uLmEsZm91bmQ6ITAsY29udGVudDpvLmNvbnRlbnR8fCIifSkpLGF3YWl0IEdsKGUsby5ub3RlVVVJRCl9Y2F0Y2h7fWZpbmFsbHl7bighMSl9fX1hc3luYyBmdW5jdGlvbiBnRShlLHQsbixyLG8pe3IoITApO3RyeXtsZXQgYT1hd2FpdCBNdihlLHQsbik7aWYoYT8ubm90ZVVVSUQpcmV0dXJuIG8oe2ZvdW5kOiEwLGNvbnRlbnQ6YS5jb250ZW50fHwiIn0pLGF3YWl0IEdsKGUsYS5ub3RlVVVJRCl9Y2F0Y2h7fWZpbmFsbHl7cighMSl9fWZ1bmN0aW9uIHlFKHtwbGFuOmUsb25DYXJkQ2xpY2s6dH0pe2xldCBuPSEhZS5ub3RlVVVJRCxyPSEhZS5oYXNBbGxNb250aGx5RGV0YWlscyxvPSJxdWFydGVyLWNhcmQiKyhuPyIgcXVhcnRlci1jYXJkLS1oYXMtcGxhbiI6IiIpLGE9cj8iXHUyNzA1IjoiXHV7MUY2QTd9IixpPXI/IkFsbCAzIG1vbnRocyBpbiB0aGlzIHF1YXJ0ZXIgaGF2ZSBiZWVuIHBsYW5uZWQuIjoiTW9udGhseSBkZXRhaWxzIGFyZSBtaXNzaW5nIGZvciBvbmUgb3IgbW9yZSBtb250aHMgXHUyMDE0IHRoaXMgcGxhbiBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MuIjtyZXR1cm4oMCxoZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOm8sb25DbGljazp0LGNoaWxkcmVuOlsoMCxoZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJxdWFydGVyLWxhYmVsIixjaGlsZHJlbjplLmxhYmVsfSksKDAsaGUuanN4cykoImRpdiIse2NsYXNzTmFtZToicXVhcnRlci1zdGF0dXMtcm93IixjaGlsZHJlbjpbKDAsaGUuanN4KSgic3BhbiIse2NsYXNzTmFtZToicXVhcnRlci1zdGF0dXMiLGNoaWxkcmVuOm4/Ilx1ezFGNEREfSBPcGVuIFBsYW4iOiIrIENyZWF0ZSBQbGFuIn0pLG4/KDAsaGUuanN4KShQaSx7Y29udGVudDppLHBsYWNlbWVudDoiYm90dG9tIixjaGlsZHJlbjooMCxoZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJxdWFydGVyLXBsYW4taW5kaWNhdG9yIixvbkNsaWNrOnM9PnMuc3RvcFByb3BhZ2F0aW9uKCksY2hpbGRyZW46YX0pfSk6bnVsbF19KV19KX1mdW5jdGlvbiB2RSh7bW9udGhMb2FkaW5nOmUsbW9udGhDb250ZW50OnQsb25DcmVhdGVQbGFuOm59KXtyZXR1cm4gZT8oMCxoZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLWNvbnRlbnQtbG9hZGluZyIsY2hpbGRyZW46IkxvYWRpbmdcdTIwMjYifSk6dD90LmZvdW5kPygwLGhlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLWNvbnRlbnQiLGNoaWxkcmVuOlsoMCxoZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLWNvbnRlbnQtaGVhZGVyIixjaGlsZHJlbjp0Lm1vbnRoTmFtZX0pLCgwLGhlLmpzeCkoImRpdiIse2NsYXNzTmFtZToibW9udGgtY29udGVudC10ZXh0IixkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOlBwKHQuY29udGVudCl8fCI8cD4oRW1wdHkgc2VjdGlvbik8L3A+In19KV19KTooMCxoZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLWNvbnRlbnQtZW1wdHkiLGNoaWxkcmVuOigwLGhlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiY3JlYXRlLW1vbnRoLXBsYW4tbGluayIsb25DbGljazpuLGNoaWxkcmVuOmBDcmVhdGUgYSBwbGFuIGZvciAke3QubW9udGhOYW1lfSAke3QueWVhcn1gfSl9KTpudWxsfWZ1bmN0aW9uIHdFKHt3ZWVrTGFiZWw6ZSx5ZWFyOnQsd2Vla0xvYWRpbmc6bix3ZWVrQ29udGVudDpyLG9uQ3JlYXRlV2Vla1BsYW46b30pe3JldHVybiBuPygwLGhlLmpzeCkoImRpdiIse2NsYXNzTmFtZToid2Vla2x5LXBsYW4tc2VjdGlvbiIsY2hpbGRyZW46KDAsaGUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJ3ZWVrbHktcGxhbi1sb2FkaW5nIixjaGlsZHJlbjoiTG9hZGluZ1x1MjAyNiJ9KX0pOnI/LmZvdW5kPygwLGhlLmpzeCkoImRpdiIse2NsYXNzTmFtZToibW9udGgtY29udGVudC1hcmVhIixjaGlsZHJlbjooMCxoZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50IixjaGlsZHJlbjpbKDAsaGUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50LWhlYWRlciIsY2hpbGRyZW46ZX0pLCgwLGhlLmpzeCkoImRpdiIse2NsYXNzTmFtZToibW9udGgtY29udGVudC10ZXh0IixkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOlBwKHIuY29udGVudCl8fCI8cD4oRW1wdHkgc2VjdGlvbik8L3A+In19KV19KX0pOigwLGhlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6IndlZWtseS1wbGFuLXNlY3Rpb24iLGNoaWxkcmVuOlsoMCxoZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6IndlZWtseS1wbGFuLWhlYWRlciIsY2hpbGRyZW46IldlZWtseSBQbGFuIn0pLCgwLGhlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiY3JlYXRlLXdlZWstcGxhbi1saW5rIixvbkNsaWNrOm8sY2hpbGRyZW46YENyZWF0ZSBhIHdlZWtseSBwbGFuIGZvciAke2V9LCAke3R9YH0pXX0pfWZ1bmN0aW9uIFVwKHthcHA6ZSxncmlkSGVpZ2h0U2l6ZTp0PTEscXVhcnRlcmx5UGxhbnM6bn0pe2xldFtyLG9dPSgwLFJuLnVzZVN0YXRlKShudWxsKSxbYSxpXT0oMCxSbi51c2VTdGF0ZSkobnVsbCksW3MsbF09KDAsUm4udXNlU3RhdGUpKCExKSxbYyx1XT0oMCxSbi51c2VTdGF0ZSkobnVsbCksW3AsZF09KDAsUm4udXNlU3RhdGUpKCExKSxbaCx5XT0oMCxSbi51c2VTdGF0ZSkoITEpLFt3LGJdPSgwLFJuLnVzZVN0YXRlKShudWxsKSxnPXQ+PTI7aWYodyYmRG4pcmV0dXJuKDAsaGUuanN4KShjZSx7dGl0bGU6bGUoInBsYW5uaW5nIiksaWNvbjoiXHV7MUY0Q0J9Iix3aWRnZXRJZDoicGxhbm5pbmciLGNoaWxkcmVuOigwLGhlLmpzeCkoU3Ase2FwcDplLG5vdGVVVUlEOncsb25CYWNrOigpPT5iKG51bGwpfSl9KTtpZighbj8uY3VycmVudHx8IW4/Lm5leHQpcmV0dXJuKDAsaGUuanN4KShjZSx7dGl0bGU6bGUoInBsYW5uaW5nIiksaWNvbjoiXHV7MUY0Q0J9Iix3aWRnZXRJZDoicGxhbm5pbmciLGNoaWxkcmVuOigwLGhlLmpzeCkoInAiLHtjbGFzc05hbWU6InBsYW5uaW5nLWVtcHR5IixjaGlsZHJlbjoiTG9hZGluZyBxdWFydGVybHkgcGxhbnNcdTIwMjYifSl9KTtsZXQgbT1PeShuLmN1cnJlbnQsbi5uZXh0KSx2PXthY3RpdmVUYWI6cixzZXRBY3RpdmVUYWI6byxzZXRNb250aExvYWRpbmc6bCxzZXRNb250aENvbnRlbnQ6aX0sZj17c2V0TW9udGhMb2FkaW5nOmwsc2V0TW9udGhDb250ZW50Oml9LHg9RD0+e0Q/LmRldkVkaXQmJkQubm90ZVVVSUQmJmIoRC5ub3RlVVVJRCl9LFM9QWwoKSxOPU9sKFMpO3JldHVybigwLFJuLnVzZUVmZmVjdCkoKCk9PntpZihoKXJldHVybjtsZXQgRD1tLmZpbmQoXz0+Xy5jdXJyZW50KTtEJiYoeSghMCksYXcoZSxELHYpKX0sW2hdKSwoMCxSbi51c2VFZmZlY3QpKCgpPT57aWYoIWcpcmV0dXJuO2xldCBEPW4uY3VycmVudD8ubm90ZVVVSUQ7RCYmKGQoITApLHhwKGUsRCxOKS50aGVuKF89PntFKGBbUGxhbm5pbmddIFdlZWtseSBzZWN0aW9uICIke059IjpgLF8pLHUoXyl9KS5jYXRjaCgoKT0+dSh7Zm91bmQ6ITEsY29udGVudDpudWxsfSkpLmZpbmFsbHkoKCk9PmQoITEpKSl9LFtnLG4uY3VycmVudD8ubm90ZVVVSUQsTl0pLCgwLGhlLmpzeHMpKGNlLHt0aXRsZTpsZSgicGxhbm5pbmciKSxpY29uOiJcdXsxRjRDQn0iLHdpZGdldElkOiJwbGFubmluZyIsY2hpbGRyZW46WygwLGhlLmpzeCkoImRpdiIse2NsYXNzTmFtZToicGxhbm5pbmctcXVhcnRlcnMiLGNoaWxkcmVuOltuLmN1cnJlbnQsbi5uZXh0XS5tYXAoRD0+KDAsaGUuanN4KSh5RSx7cGxhbjpELG9uQ2FyZENsaWNrOmFzeW5jKCk9PntsZXQgXz1hd2FpdCBoRShlLEQpO3goXyl9fSxELmxhYmVsKSl9KSwoMCxoZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6Im1vbnRoLXRhYnMiLGNoaWxkcmVuOm0ubWFwKEQ9PigwLGhlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToibW9udGgtdGFiIisoRC5pbmRleD09PXI/IiBhY3RpdmUiOiIiKSxvbkNsaWNrOigpPT5hdyhlLEQsdiksY2hpbGRyZW46RC5zaG9ydH0sRC5pbmRleCkpfSksciE9PW51bGw/KDAsaGUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJtb250aC1jb250ZW50LWFyZWEiLGNoaWxkcmVuOigwLGhlLmpzeCkodkUse21vbnRoTG9hZGluZzpzLG1vbnRoQ29udGVudDphLG9uQ3JlYXRlUGxhbjphc3luYygpPT57bGV0IEQ9YXdhaXQgbUUoZSxhLGYpO3goRCl9fSl9KTpudWxsLGc/KDAsaGUuanN4KSh3RSx7d2Vla0xhYmVsOk4seWVhcjpuLmN1cnJlbnQueWVhcix3ZWVrTG9hZGluZzpwLHdlZWtDb250ZW50OmMsb25DcmVhdGVXZWVrUGxhbjphc3luYygpPT57bGV0IEQ9YXdhaXQgZ0UoZSxuLmN1cnJlbnQsTixkLHUpO3goRCl9fSk6bnVsbF19KX12YXIgQ289eih5ZSgpKTt2YXIgYkU9L1xbKFteXF1dKylcXVxbXF4/KFxkKylcXS9nLGl3PS9ccypcW1xePyhcZCspXF1bLjpdXHMqLyxrRT0vXiFcWyhbXlxdXSopXF1cKChbXildKylcKS8seEU9L15cWyhbXlxdXSopXF1cKChbXildKilcKS8sU0U9L1wuKG1wNHx3ZWJtfG9nZykoXD98JCkvaSxsdz0vKD86eW91dHViZVwuY29tXC93YXRjaFw/dj18eW91dHVcLmJlXC8pKFthLXpBLVowLTlfLV0rKS8sY3c9L3ZpbWVvXC5jb21cLyhcZCspLztmdW5jdGlvbiBFRShlKXtyZXR1cm4gU0UudGVzdChlKXx8bHcudGVzdChlKXx8Y3cudGVzdChlKX1mdW5jdGlvbiBqaShlKXtyZXR1cm4gZS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjMzk7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gJHAoZSl7cmV0dXJuIGUucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7Iil9ZnVuY3Rpb24gVEUoZSx0KXtsZXQgbj1lLm1hdGNoKGtFKTtpZihuKXtsZXQgbz1uWzJdO0VFKG8pP3QudmlkZW9zLnB1c2goe2FsdDpuWzFdLHVybDpvfSk6dC5pbWFnZXMucHVzaCh7YWx0Om5bMV0sdXJsOm99KTtyZXR1cm59bGV0IHI9ZS5tYXRjaCh4RSk7aWYocil7IXQuZGVzY3JpcHRpb24mJiF0LnVybD8odC5kZXNjcmlwdGlvbj1yWzFdfHwiIix0LnVybD1yWzJdfHwiIik6dC50ZXh0LnB1c2goZSk7cmV0dXJufWUmJnQudGV4dC5wdXNoKGUpfWZ1bmN0aW9uIE5FKGUpe2xldCB0PWUubWF0Y2goaXcpO2lmKCF0KXJldHVybntmb290bm90ZXM6e30sY2xlYW5lZE1hcmtkb3duOmV9O2xldCBuPWUuc3Vic3RyaW5nKDAsdC5pbmRleCkudHJpbUVuZCgpLHI9ZS5zdWJzdHJpbmcodC5pbmRleCksbz17fSxhPW5ldyBSZWdFeHAoaXcuc291cmNlLCJnIiksaT1udWxsLHM9MCxsO2Zvcig7KGw9YS5leGVjKHIpKSE9PW51bGw7KWkhPT1udWxsJiYob1tpXT1zdyhyLnN1YnN0cmluZyhzLGwuaW5kZXgpKSksaT1sWzFdLHM9bC5pbmRleCtsWzBdLmxlbmd0aDtyZXR1cm4gaSE9PW51bGwmJihvW2ldPXN3KHIuc3Vic3RyaW5nKHMpKSkse2Zvb3Rub3RlczpvLGNsZWFuZWRNYXJrZG93bjpufX1mdW5jdGlvbiBzdyhlKXtsZXQgdD17ZGVzY3JpcHRpb246IiIsdXJsOiIiLGltYWdlczpbXSx2aWRlb3M6W10sdGV4dDpbXX07Zm9yKGxldCBuIG9mIGUuc3BsaXQoYApgKSl7bGV0IHI9bi50cmltKCk7ciYmVEUocix0KX1yZXR1cm4gdH1mdW5jdGlvbiBERShlKXtsZXQgdD1bXTtyZXR1cm4gZS5pbWFnZXMubGVuZ3RoJiZ0LnB1c2goe2NsczoiaW1hZ2UiLHRpdGxlOiJDb250YWlucyBpbWFnZSIsc3ltYm9sOiJcdXsxRjVCQ30ifSksZS52aWRlb3MubGVuZ3RoJiZ0LnB1c2goe2NsczoidmlkZW8iLHRpdGxlOiJDb250YWlucyB2aWRlbyIsc3ltYm9sOiJcdXsxRjNBQ30ifSksIWUuaW1hZ2VzLmxlbmd0aCYmIWUudmlkZW9zLmxlbmd0aCYmKGUudXJsP3QucHVzaCh7Y2xzOiJ1cmwiLHRpdGxlOiJDb250YWlucyBsaW5rIixzeW1ib2w6Ilx1ezFGNTE3fSJ9KTooZS5kZXNjcmlwdGlvbnx8ZS50ZXh0Lmxlbmd0aCkmJnQucHVzaCh7Y2xzOiJ0ZXh0Iix0aXRsZToiQ29udGFpbnMgZGV0YWlscyIsc3ltYm9sOiJcdXsxRjRERH0ifSkpLHR9ZnVuY3Rpb24gX0UoZSl7bGV0IHQ9Wyc8ZGl2IGNsYXNzPSJyaWNoLWZvb3Rub3RlLXBvcHVwIj4nXTtlLnVybCYmdC5wdXNoKGA8ZGl2IGNsYXNzPSJyaWNoLWZvb3Rub3RlLXBvcHVwLXVybCI+PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTggMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNiIvPjxwb2x5bGluZSBwb2ludHM9IjE1IDMgMjEgMyAyMSA5Ii8+PGxpbmUgeDE9IjEwIiB5MT0iMTQiIHgyPSIyMSIgeTI9IjMiLz48L3N2Zz48YSBocmVmPSIke2ppKGUudXJsKX0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPiR7JHAoZS51cmwpfTwvYT48L2Rpdj5gKSxlLmRlc2NyaXB0aW9uJiZ0LnB1c2goYDxkaXYgY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAtdGV4dCI+JHskcChlLmRlc2NyaXB0aW9uKX08L2Rpdj5gKTtmb3IobGV0IG4gb2YgZS50ZXh0KXQucHVzaChgPGRpdiBjbGFzcz0icmljaC1mb290bm90ZS1wb3B1cC10ZXh0Ij4keyRwKG4pfTwvZGl2PmApO2ZvcihsZXQgbiBvZiBlLmltYWdlcyl0LnB1c2goYDxkaXYgY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAtbWVkaWEiPjxpbWcgc3JjPSIke2ppKG4udXJsKX0iIGFsdD0iJHtqaShuLmFsdCl9IiBsb2FkaW5nPSJsYXp5Ii8+PC9kaXY+YCk7Zm9yKGxldCBuIG9mIGUudmlkZW9zKXtsZXQgcj1uLnVybC5tYXRjaChsdyksbz1uLnVybC5tYXRjaChjdyk7cj90LnB1c2goYDxkaXYgY2xhc3M9InJpY2gtZm9vdG5vdGUtcG9wdXAtbWVkaWEiPjxpZnJhbWUgc3JjPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke3JbMV19IiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPjwvZGl2PmApOm8/dC5wdXNoKGA8ZGl2IGNsYXNzPSJyaWNoLWZvb3Rub3RlLXBvcHVwLW1lZGlhIj48aWZyYW1lIHNyYz0iaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLyR7b1sxXX0iIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+PC9kaXY+YCk6dC5wdXNoKGA8ZGl2IGNsYXNzPSJyaWNoLWZvb3Rub3RlLXBvcHVwLW1lZGlhIj48dmlkZW8gc3JjPSIke2ppKG4udXJsKX0iIGNvbnRyb2xzPjwvdmlkZW8+PC9kaXY+YCl9cmV0dXJuIHQucHVzaCgnPGRpdiBjbGFzcz0icmljaC1mb290bm90ZS1wb3B1cC1hY3Rpb25zIj48YnV0dG9uIGNsYXNzPSJyaWNoLWZvb3Rub3RlLXBvcHVwLWNsb3NlIiB0eXBlPSJidXR0b24iPkNMT1NFPC9idXR0b24+PC9kaXY+JyksdC5wdXNoKCI8L2Rpdj4iKSx0LmpvaW4oIiIpfWZ1bmN0aW9uIENFKGUsdCl7bGV0IG49REUodCkscj1lbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoe3VybDp0LnVybCxkZXNjcmlwdGlvbjp0LmRlc2NyaXB0aW9uLHRleHQ6dC50ZXh0LGltYWdlczp0LmltYWdlcyx2aWRlb3M6dC52aWRlb3N9KSksbz10LnVybHx8IiMiLGE9bi5tYXAoaT0+YDxzcGFuIGNsYXNzPSJyaWNoLWZvb3Rub3RlLWluZGljYXRvciByaWNoLWZvb3Rub3RlLWluZGljYXRvci0tJHtpLmNsc30iIHRpdGxlPSIke2kudGl0bGV9Ij4ke2kuc3ltYm9sfTwvc3Bhbj5gKS5qb2luKCIiKTtyZXR1cm5gPGRpdiBjbGFzcz0icmljaC1mb290bm90ZS13cmFwIj48YSBjbGFzcz0icmljaC1mb290bm90ZS1saW5rIiBocmVmPSIke2ppKG8pfSIgZGF0YS1yaWNoLWZvb3Rub3RlPSIke3J9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4ke2V9PC9hPmArYSsiPC9kaXY+In1mdW5jdGlvbiBfbyhlKXtpZighZSlyZXR1cm4iIjtsZXR7Zm9vdG5vdGVzOnQsY2xlYW5lZE1hcmtkb3duOm59PU5FKGUpO2lmKE9iamVjdC5rZXlzKHQpLmxlbmd0aD09PTApcmV0dXJuIE5hKGUpO2xldCByPVtdLG89bi5yZXBsYWNlKGJFLChpLHMsbCk9PntpZighdFtsXSlyZXR1cm4gaTtsZXQgYz1yLmxlbmd0aDtyZXR1cm4gci5wdXNoKHt0ZXh0OnMsZm5JZDpsfSksYDwhLS1GTlJFRjoke2N9LS0+YH0pLGE9TmEobyk7cmV0dXJuIGE9YS5yZXBsYWNlKC88IS0tRk5SRUY6KFxkKyktLT4vZywoaSxzKT0+e2xldHt0ZXh0OmwsZm5JZDpjfT1yW3BhcnNlSW50KHMpXSx1PXRbY107aWYoIXUpcmV0dXJuIGw7bGV0IHA9TmEobCk7cmV0dXJuIENFKHAsdSl9KSxhfWZ1bmN0aW9uIERhKGUpe2lmKCFlKXJldHVybjtsZXQgdD1lLnF1ZXJ5U2VsZWN0b3JBbGwoIi5yaWNoLWZvb3Rub3RlLWxpbmtbZGF0YS1yaWNoLWZvb3Rub3RlXSIpO2ZvcihsZXQgbiBvZiB0KXtpZihuLl90aXBweVJpY2hGb290bm90ZSljb250aW51ZTtsZXQgcjt0cnl7cj1KU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudChuLmRhdGFzZXQucmljaEZvb3Rub3RlKSl9Y2F0Y2h7Y29udGludWV9aWYoISEhKHIuZGVzY3JpcHRpb258fHIudGV4dD8ubGVuZ3RofHxyLmltYWdlcz8ubGVuZ3RofHxyLnZpZGVvcz8ubGVuZ3RoKSljb250aW51ZTtsZXQgYT1fRShyKSxpPU1pKG4se2NvbnRlbnQ6YSxhbGxvd0hUTUw6ITAsaW50ZXJhY3RpdmU6ITAsdHJpZ2dlcjoibWFudWFsIixwbGFjZW1lbnQ6ImJvdHRvbS1zdGFydCIsdGhlbWU6InJpY2gtZm9vdG5vdGUiLG1heFdpZHRoOjQyMCxhcnJvdzohMCxkdXJhdGlvbjpbMTUwLDEwMF0sYXBwZW5kVG86KCk9PmRvY3VtZW50LmJvZHksb25TaG93bigpe2xldCBzPWkucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoIi5yaWNoLWZvb3Rub3RlLXBvcHVwLWNsb3NlIik7cyYmcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9PmkuaGlkZSgpLHtvbmNlOiEwfSl9fSk7bi5fdGlwcHlSaWNoRm9vdG5vdGU9aSxuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixzPT57aWYoaS5zdGF0ZS5pc1Zpc2libGUpe2kuaGlkZSgpO3JldHVybn1zLnByZXZlbnREZWZhdWx0KCkscy5zdG9wUHJvcGFnYXRpb24oKSxpLnNob3coKX0pfX12YXIgUGU9eihyZSgpKSxlYz0zO2Z1bmN0aW9uIHV3KGUsdCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoZSl8fCF0P1tdOmUuZmlsdGVyKG49Pm4/LnN0YXJ0JiZwcihuLnN0YXJ0KT09PXQpfWZ1bmN0aW9uIFdwKHthcHA6ZSxjYWxlbmRhckV2ZW50czp0LGN1cnJlbnREYXRlOm4sc2VsZWN0ZWREYXRlOnIsdGFza3M6byx0aW1lRm9ybWF0OmF9KXtsZXRbaSxzXT0oMCxDby51c2VTdGF0ZSkoMCksbD0oMCxDby51c2VSZWYpKG51bGwpLGM9cHIobnx8bmV3IERhdGUoKS50b0lTT1N0cmluZygpKSx1PU9iamVjdC5rZXlzKG98fHt9KS5zb3J0KCksZD1BcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD4wP3V3KHQsYyk6W10saD1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnUsLi4uZC5sZW5ndGg+MD9bY106W11dKSkuc29ydCgpLHk9ciYmIWguaW5jbHVkZXMocik/Wy4uLmgscl0uc29ydCgpOmgsdz1NYXRoLm1heCgxLE1hdGguY2VpbCh5Lmxlbmd0aC9lYykpOygwLENvLnVzZUVmZmVjdCkoKCk9PntpZighcilyZXR1cm47bGV0IE89eS5pbmRleE9mKHIpO08+PTAmJnMoTWF0aC5mbG9vcihPL2VjKSl9LFtyXSksKDAsQ28udXNlRWZmZWN0KSgoKT0+e0RhKGwuY3VycmVudCl9KTtsZXQgYj1NYXRoLm1pbihpLHctMSksZz15LnNsaWNlKGIqZWMsKGIrMSkqZWMpLG09Tz0+Ty5pbXBvcnRhbnQmJk8udXJnZW50PyJwcmlvcml0eS1jcml0aWNhbCI6Ty5pbXBvcnRhbnQ/InByaW9yaXR5LWltcG9ydGFudCI6Ty51cmdlbnQ/InByaW9yaXR5LXVyZ2VudCI6InByaW9yaXR5LW5vcm1hbCIsdj1PPT57aWYoIU8pcmV0dXJuIG51bGw7aWYoTyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIE8uZ2V0VGltZSgpO2lmKHR5cGVvZiBPPT0ibnVtYmVyIilyZXR1cm4gTzwxZTEwP08qMWUzOk87aWYodHlwZW9mIE89PSJzdHJpbmciKXtsZXQgRz1uZXcgRGF0ZShPKS5nZXRUaW1lKCk7cmV0dXJuIE51bWJlci5pc05hTihHKT9udWxsOkd9cmV0dXJuIG51bGx9LGY9Tz0+e2xldCBHPXYoTz8uZW5kKSxUPXYoTz8uc3RhcnQpO3JldHVybiBHPT1udWxsfHxUPT1udWxsfHxHPD1UP251bGw6TWF0aC5yb3VuZCgoRy1UKS82ZTQpfSx4PU89PntsZXQgRz12KE8pO2lmKCFHKXJldHVybiIiO2xldCBUPWE9PT0iMjRoIj97aG91cjoiMi1kaWdpdCIsbWludXRlOiIyLWRpZ2l0Iixob3VyMTI6ITF9Ontob3VyOiIyLWRpZ2l0IixtaW51dGU6IjItZGlnaXQifTtyZXR1cm4gbmV3IERhdGUoRykudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLFQpfSxTPU89Pk8ubm90ZVVVSUR8fE8ubm90ZVV1aWR8fE8ubm90ZT8udXVpZHx8bnVsbCxOPU89Pk8ubm90ZU5hbWV8fE8ubm90ZVRpdGxlfHxPLm5vdGU/Lm5hbWV8fCJPcGVuIG5vdGUiLEQ9YXN5bmMgTz0+e2xldCBHPVMoTyk7IUd8fCFPLnV1aWR8fGF3YWl0IGUubmF2aWdhdGUoYGh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvJHtHfT9oaWdobGlnaHRUYXNrVVVJRD0ke08udXVpZH1gKX0sXz1hc3luYyhPLEcpPT57Ry5zdG9wUHJvcGFnYXRpb24oKTtsZXQgVD1TKE8pO1QmJmF3YWl0IGUubmF2aWdhdGUoYGh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvJHtUfWApfSxBPU89Pm5ldyBEYXRlKGAke099VDAwOjAwOjAwYCkudG9Mb2NhbGVEYXRlU3RyaW5nKFtdLHt3ZWVrZGF5OiJzaG9ydCIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMifSksUD1EYXRlLm5vdygpLEk9Tz0+Ty5maWx0ZXIoRz0+e2xldCBUPXYoRy5oaWRlVW50aWwpO3JldHVybiBUPT1udWxsPyEwOlQ8PVB9KSxMPShPLEcpPT57aWYoRy50eXBlPT09ImV2ZW50IiYmRy5ldmVudC5hbGxEYXkpcmV0dXJuIG5ldyBEYXRlKGAke099VDAwOjAwOjAwYCkuZ2V0VGltZSgpO2xldCBUPUcudHlwZT09PSJldmVudCI/Ry5ldmVudC5zdGFydDpHLnRhc2suc3RhcnRBdHx8Ry50YXNrLmRlYWRsaW5lLGs9dihUKTtyZXR1cm4gaz8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSxVPShPLEcsVCk9PlsuLi5ULm1hcCgoayxSKT0+KHtpbmRleDpSLHNvcnRNczpMKE8se3Rhc2s6ayx0eXBlOiJ0YXNrIn0pLHRhc2s6ayx0eXBlOiJ0YXNrIn0pKSwuLi5HLm1hcCgoayxSKT0+KHtldmVudDprLGluZGV4OlIsc29ydE1zOkwoTyx7ZXZlbnQ6ayx0eXBlOiJldmVudCJ9KSxzb3VyY2VPcmRlcjpULmxlbmd0aCtSLHR5cGU6ImV2ZW50In0pKV0ubWFwKChrLFIpPT4oey4uLmssc291cmNlT3JkZXI6ay5zb3VyY2VPcmRlcj8/Un0pKS5zb3J0KChrLFIpPT5rLnNvcnRNcy1SLnNvcnRNc3x8ay5zb3VyY2VPcmRlci1SLnNvdXJjZU9yZGVyKSxGPXc+MT8oMCxQZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJhZ2VuZGEtcGFnaW5hdGlvbiIsY2hpbGRyZW46WygwLFBlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiYWdlbmRhLXBhZ2UtYXJyb3ciLG9uQ2xpY2s6KCk9PnMoTz0+TWF0aC5tYXgoMCxPLTEpKSxkaXNhYmxlZDpiPT09MCxjaGlsZHJlbjoiXHUyNUMwIn0pLCgwLFBlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImFnZW5kYS1wYWdlLWluZGljYXRvciIsY2hpbGRyZW46YCR7YisxfSAvICR7d31gfSksKDAsUGUuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJhZ2VuZGEtcGFnZS1hcnJvdyIsb25DbGljazooKT0+cyhPPT5NYXRoLm1pbih3LTEsTysxKSksZGlzYWJsZWQ6Yj49dy0xLGNoaWxkcmVuOiJcdTI1QjYifSldfSk6bnVsbCxIPU89PntsZXQgRz12KE8udGFzay5zdGFydEF0KSxUPXYoTy50YXNrLmVuZEF0KSxrPUcmJlQmJlQ+RztyZXR1cm4oMCxQZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJhZ2VuZGEtaXRlbSBhZ2VuZGEtdGFzay1yb3ciLG9uQ2xpY2s6Uj0+e1IudGFyZ2V0LmNsb3Nlc3QoImEiKXx8RChPLnRhc2spfSxjaGlsZHJlbjpbKDAsUGUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOmBhZ2VuZGEtaW5kaWNhdG9yICR7bShPLnRhc2spfWB9KSwoMCxQZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJhZ2VuZGEtY29udGVudCIsY2hpbGRyZW46WygwLFBlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImFnZW5kYS10aW1lIix0aXRsZTpgJHtPLnRhc2suc3RhcnRBdD8iU3RhcnQiOiJEZWFkbGluZSJ9IHRpbWUgZm9yIHRhc2tgLGNoaWxkcmVuOngoTy50YXNrLnN0YXJ0QXR8fE8udGFzay5kZWFkbGluZSl9KSwoMCxQZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJhZ2VuZGEtdGV4dCIsZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDpfbyhPLnRhc2suY29udGVudCl8fCJVbnRpdGxlZCB0YXNrIn19KSxTKE8udGFzayk/KDAsUGUuanN4KSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixjbGFzc05hbWU6ImFnZW5kYS1ub3RlLWxpbmsiLG9uQ2xpY2s6Uj0+XyhPLnRhc2ssUiksY2hpbGRyZW46TihPLnRhc2spfSk6bnVsbF19KSxrPygwLFBlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImFnZW5kYS1kdXJhdGlvbiIsY2hpbGRyZW46TWF0aC5yb3VuZCgoVC1HKS82ZTQpKyJtIn0pOm51bGxdfSxPLnRhc2sudXVpZCl9LGllPU89PntsZXQgRz1mKE8uZXZlbnQpO3JldHVybigwLFBlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImFnZW5kYS1pdGVtIGFnZW5kYS10YXNrLXJvdyIsY2hpbGRyZW46WygwLFBlLmpzeCkoImRpdiIse2NsYXNzTmFtZToiYWdlbmRhLWluZGljYXRvciBwcmlvcml0eS1ub3JtYWwifSksKDAsUGUuanN4cykoImRpdiIse2NsYXNzTmFtZToiYWdlbmRhLWNvbnRlbnQiLGNoaWxkcmVuOltPLmV2ZW50LmFsbERheT8oMCxQZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJhZ2VuZGEtdGltZSIsY2hpbGRyZW46IkFsbCBkYXkifSk6Ty5ldmVudC5zdGFydD8oMCxQZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJhZ2VuZGEtdGltZSIsY2hpbGRyZW46eChPLmV2ZW50LnN0YXJ0KX0pOm51bGwsKDAsUGUuanN4KSgic3BhbiIse2NsYXNzTmFtZToiYWdlbmRhLXRleHQiLGNoaWxkcmVuOk8uZXZlbnQudGl0bGV8fCJDYWxlbmRhciBldmVudCJ9KSxPLmV2ZW50LmNhbGVuZGFyPy5uYW1lPygwLFBlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImFnZW5kYS1ub3RlLWxpbmsiLGNoaWxkcmVuOk8uZXZlbnQuY2FsZW5kYXIubmFtZX0pOm51bGxdfSksRz8oMCxQZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJhZ2VuZGEtZHVyYXRpb24iLGNoaWxkcmVuOkcrIm0ifSk6bnVsbF19LGBjYWwtJHtPLmluZGV4fWApfTtyZXR1cm4oMCxQZS5qc3gpKGNlLHt0aXRsZTpsZSgiYWdlbmRhIiksaWNvbjoiXHV7MUY0Q0J9Iix3aWRnZXRJZDoiYWdlbmRhIixoZWFkZXJBY3Rpb25zOkYsY2hpbGRyZW46KDAsUGUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJhZ2VuZGEtbGlzdCIscmVmOmwsY2hpbGRyZW46Zy5tYXAoTz0+e2xldCBHPW9bT118fFtdLFQ9SShHKSxrPXV3KHQsTyksUj1VKE8sayxUKTtyZXR1cm4oMCxQZS5qc3hzKSgic2VjdGlvbiIse2NsYXNzTmFtZToiYWdlbmRhLWRheSIsY2hpbGRyZW46WygwLFBlLmpzeCkoImg0Iix7Y2xhc3NOYW1lOiJhZ2VuZGEtZGF0ZS1sYWJlbCIsY2hpbGRyZW46QShPKX0pLFQubGVuZ3RoPT09MCYmay5sZW5ndGg9PT0wPygwLFBlLmpzeCkoInAiLHtjbGFzc05hbWU6ImFnZW5kYS1lbXB0eS1kYXkiLGNoaWxkcmVuOk89PT1jPyJObyB0YXNrcyBzY2hlZHVsZWQgZm9yIHRvZGF5IjoiTm8gdGFza3Mgc2NoZWR1bGVkIn0pOlIubWFwKCQ9PiQudHlwZT09PSJ0YXNrIj9IKCQpOmllKCQpKV19LE8pfSl9KX0pfXZhciBkdz16KHllKCkpO3ZhciBYdD16KHJlKCkpO2Z1bmN0aW9uIEJwKHthcHA6ZSxjb21wbGV0ZWRUYXNrc0J5RGF0ZTp0LGN1cnJlbnREYXRlOm4sZ3JpZEhlaWdodFNpemU6cixncmlkV2lkdGhTaXplOm8sb25EYXRlU2VsZWN0OmEsb25PcGVuU2V0dGluZ3M6aSxvcGVuVGFza3M6cyxzZWxlY3RlZERhdGU6bCx3ZWVrRm9ybWF0OmN9KXtsZXQgdT1uZXcgRGF0ZShuKSxbcCxkXT0oMCxkdy51c2VTdGF0ZSkobmV3IERhdGUodS5nZXRGdWxsWWVhcigpLHUuZ2V0TW9udGgoKSwxKSksaD1jPT09Im1vbmRheSI/MTowLHk9bmV3IERhdGUocC5nZXRGdWxsWWVhcigpLHAuZ2V0TW9udGgoKSsxLDApLmdldERhdGUoKSx3PShuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCkscC5nZXRNb250aCgpLDEpLmdldERheSgpLWgrNyklNyxiPWg9PT0xP1siTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIiwiU3UiXTpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZz17fSxtPXAuZ2V0RnVsbFllYXIoKSx2PXAuZ2V0TW9udGgoKSxmPWAke219LSR7U3RyaW5nKHYrMSkucGFkU3RhcnQoMiwiMCIpfS1gO1tzLHRdLmZvckVhY2goTD0+e09iamVjdC5rZXlzKEx8fHt9KS5mb3JFYWNoKFU9PntpZihVLnN0YXJ0c1dpdGgoZikpe2xldCBGPXBhcnNlSW50KFUuc3Vic3RyaW5nKDgpLDEwKTtnW0ZdPShnW0ZdfHwwKSsoTFtVXT8ubGVuZ3RofHwwKX19KX0pO2xldCB4PSgpPT5kKG5ldyBEYXRlKHAuZ2V0RnVsbFllYXIoKSxwLmdldE1vbnRoKCktMSwxKSksUz0oKT0+ZChuZXcgRGF0ZShwLmdldEZ1bGxZZWFyKCkscC5nZXRNb250aCgpKzEsMSkpLE49cC50b0xvY2FsZVN0cmluZygiZGVmYXVsdCIse21vbnRoOiJsb25nIix5ZWFyOiJudW1lcmljIn0pLEQ9TD0+TD09PXUuZ2V0RGF0ZSgpJiZwLmdldE1vbnRoKCk9PT11LmdldE1vbnRoKCkmJnAuZ2V0RnVsbFllYXIoKT09PXUuZ2V0RnVsbFllYXIoKSxfPUw9PntsZXQgVT1wLmdldEZ1bGxZZWFyKCksRj1TdHJpbmcocC5nZXRNb250aCgpKzEpLnBhZFN0YXJ0KDIsIjAiKSxIPVN0cmluZyhMKS5wYWRTdGFydCgyLCIwIik7cmV0dXJuYCR7VX0tJHtGfS0ke0h9YH0sQT1MPT5sJiZfKEwpPT09bCxQPUw9PntpZihhKXtsZXQgVT1fKEwpO2EoVT09PWw/bnVsbDpVKX19LEk9W107Zm9yKGxldCBMPTA7TDx3O0wrKylJLnB1c2goKDAsWHQuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjYWwtY2VsbCBlbXB0eSJ9LCJlbXB0eS0iK0wpKTtmb3IobGV0IEw9MTtMPD15O0wrKyl7bGV0IFU9Z1tMXXx8MCxGPVU9PT0wPyJub25lIjpVPD0yPyIjODZlZmFjIjpVPD01PyIjZmJiZjI0IjoiI2Y4NzE3MSIsSD0iY2FsLWNlbGwiO0QoTCkmJihIKz0iIHRvZGF5IiksQShMKSYmKEgrPSIgc2VsZWN0ZWQiKSxJLnB1c2goKDAsWHQuanN4cykoImRpdiIse2NsYXNzTmFtZTpILG9uQ2xpY2s6KCk9PlAoTCksY2hpbGRyZW46WygwLFh0LmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImNhbC1kYXkiLGNoaWxkcmVuOkx9KSxGIT09Im5vbmUiPygwLFh0LmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImNhbC1kb3QiLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6Rn19KTpudWxsXX0sTCkpfXJldHVybigwLFh0LmpzeHMpKGNlLHtjb25maWd1cmFibGU6ITAsZ3JpZEhlaWdodFNpemU6cixncmlkV2lkdGhTaXplOm8saWNvbjoiXHV7MUY0QzV9IixvbkNvbmZpZ3VyZTppLHRpdGxlOmxlKCJjYWxlbmRhciIpLHdpZGdldElkOiJjYWxlbmRhciIsY2hpbGRyZW46WygwLFh0LmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNhbC1uYXYiLGNoaWxkcmVuOlsoMCxYdC5qc3gpKCJidXR0b24iLHtvbkNsaWNrOngsY2xhc3NOYW1lOiJjYWwtYXJyb3ciLGNoaWxkcmVuOiJcdTI1QzAifSksKDAsWHQuanN4KSgic3BhbiIse2NsYXNzTmFtZToiY2FsLW1vbnRoIixjaGlsZHJlbjpOfSksKDAsWHQuanN4KSgiYnV0dG9uIix7b25DbGljazpTLGNsYXNzTmFtZToiY2FsLWFycm93IixjaGlsZHJlbjoiXHUyNUI2In0pXX0pLCgwLFh0LmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNhbC1ncmlkIixjaGlsZHJlbjpbYi5tYXAoTD0+KDAsWHQuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjYWwtaGVhZGVyIixjaGlsZHJlbjpMfSxMKSksSV19KV19KX12YXIgcHc9ImxheW91dC1waWNrZXIiO2Z1bmN0aW9uIEFFKCl7cmV0dXJuIEJ0LmZpbHRlcihlPT5lLndpZGdldElkIT09cHcpLm1hcChlPT4oe3dpZGdldElkOmUud2lkZ2V0SWQsZ3JpZFdpZHRoU2l6ZTplLmRlZmF1bHRHcmlkV2lkdGhTaXplfSkpfXZhciBfYT1be2lkOiJnb2FsLW9yaWVudGVkIixuYW1lOiJHb2FsLU9yaWVudGVkIChSZWNvbW1lbmRlZCkiLGljb246Ilx1ezFGM0FGfSIsZGVzY3JpcHRpb246IlF1YXJ0ZXJseSBwbGFubmluZywgdmljdG9yeSB0cmFja2luZywgYW5kIEFJIGNvYWNoaW5nIGFsb25nc2lkZSB5b3VyIGRhaWx5IHRhc2sgbGlzdC4gQmVzdCBmb3IgdXNlcnMgYWN0aXZlbHkgd29ya2luZyB0b3dhcmQgbG9uZy1ob3Jpem9uIGdvYWxzLiIsd2lkZ2V0czpBRSgpfSx7aWQ6ImRheS10by1kYXkiLG5hbWU6IkRheS10by1EYXkiLGljb246Ilx1ezFGNEM1fSIsZGVzY3JpcHRpb246IkV4ZWN1dGluZyB0b2RheSdzIHdvcmsgXHUyMDE0IHRhc2tzLCBzY2hlZHVsZSwgYW5kIGRhaWx5IHBsYW5uaW5nIHdpdGhvdXQgbG9uZ2VyLWhvcml6b24gbm9pc2UuIE5vIG1vb2QgdHJhY2tpbmcgb3IgZ29hbCB3aWRnZXRzLiIsd2lkZ2V0czpbe3dpZGdldElkOiJhZ2VuZGEiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJkYXktc2tldGNoIixncmlkV2lkdGhTaXplOjJ9LHt3aWRnZXRJZDoiY2FsZW5kYXIiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJkcmVhbS10YXNrIixncmlkV2lkdGhTaXplOjJ9LHt3aWRnZXRJZDoiZ3JhdmV5YXJkIixncmlkV2lkdGhTaXplOjJ9LHt3aWRnZXRJZDoicXVvdGVzIixncmlkV2lkdGhTaXplOjJ9LHt3aWRnZXRJZDoicmVjZW50LW5vdGVzIixncmlkV2lkdGhTaXplOjJ9LHt3aWRnZXRJZDoicGVhay1ob3VycyIsZ3JpZFdpZHRoU2l6ZToyfV19LHtpZDoibWluZGZ1bC1hY2hpZXZlciIsbmFtZToiTWluZGZ1bCBBY2hpZXZlciIsaWNvbjoiXHV7MUYzMzF9IixkZXNjcmlwdGlvbjoiRm9yIHRob3NlIHdobyB0cmFjayB3ZWxsYmVpbmcgYWxvbmdzaWRlIHRhc2tzLiBCYWxhbmNlcyBtb29kLCBpbnNwaXJhdGlvbiwgYW5kIHRhc2sgaHlnaWVuZSBcdTIwMTQgd2l0aG91dCBvdmVyd2hlbG1pbmcgdGhlIHZpZXcgd2l0aCBwbGFubmluZyB3aWRnZXRzLiIsd2lkZ2V0czpbe3dpZGdldElkOiJhZ2VuZGEiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJxdW90ZXMiLGdyaWRXaWR0aFNpemU6Mn0se3dpZGdldElkOiJtb29kIixncmlkV2lkdGhTaXplOjF9LHt3aWRnZXRJZDoiZGF5LXNrZXRjaCIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6ImdyYXZleWFyZCIsZ3JpZFdpZHRoU2l6ZToxfSx7d2lkZ2V0SWQ6InBsYW5uaW5nIixncmlkV2lkdGhTaXplOjJ9LHt3aWRnZXRJZDoiZHJlYW0tdGFzayIsZ3JpZFdpZHRoU2l6ZToyfSx7d2lkZ2V0SWQ6ImNhbGVuZGFyIixncmlkV2lkdGhTaXplOjJ9LHt3aWRnZXRJZDoidmljdG9yeS12YWx1ZSIsZ3JpZFdpZHRoU2l6ZToyfV19XTtmdW5jdGlvbiBLaShlKXtsZXQgdD1PYmplY3QuZnJvbUVudHJpZXMoQnQubWFwKG49PltuLndpZGdldElkLHtncmlkSGVpZ2h0U2l6ZToxLGdyaWRXaWR0aFNpemU6bi5kZWZhdWx0R3JpZFdpZHRoU2l6ZXx8MX1dKSk7cmV0dXJuKGU/LndpZGdldHN8fFtdKS5mb3JFYWNoKG49Pnt0W24ud2lkZ2V0SWRdJiYodFtuLndpZGdldElkXT17Li4udFtuLndpZGdldElkXSxncmlkV2lkdGhTaXplOk51bWJlcihuLmdyaWRXaWR0aFNpemUpfHx0W24ud2lkZ2V0SWRdLmdyaWRXaWR0aFNpemV9KX0pLHR9ZnVuY3Rpb24gZncoZSx0KXtsZXQgcj0oQXJyYXkuaXNBcnJheShlKT9lOltdKS5maWx0ZXIoaT0+aS53aWRnZXRJZCE9PXB3KSxvPXQud2lkZ2V0cyxhPUtpKHQpO3JldHVybiByLmxlbmd0aCE9PW8ubGVuZ3RoPyExOm8uZXZlcnkoKGkscyk9PnJbc10/LndpZGdldElkPT09aS53aWRnZXRJZCYmTnVtYmVyKHJbc10/LmdyaWRXaWR0aFNpemUpPT09YVtpLndpZGdldElkXT8uZ3JpZFdpZHRoU2l6ZSl9ZnVuY3Rpb24gaHcoZSl7cmV0dXJuIF9hLmZpbmQodD0+dC5pZD09PWUpfHxudWxsfXZhciBtbj16KHllKCkpO3ZhciBRPXoocmUoKSk7ZnVuY3Rpb24geXcoZSl7cmV0dXJuIEJ0LmZpbmQodD0+dC53aWRnZXRJZD09PWUpfWZ1bmN0aW9uIE9FKGUsdCl7bGV0IG49bmV3IFNldCh0fHxbXSkscj1CdC5tYXAocz0+cy53aWRnZXRJZCkuZmlsdGVyKHM9PiFuLmhhcyhzKSksYT0oQXJyYXkuaXNBcnJheShlKT9lOltdKS5tYXAocz0+cy53aWRnZXRJZCkuZmlsdGVyKHM9PnIuaW5jbHVkZXMocykpLGk9ci5maWx0ZXIocz0+IWEuaW5jbHVkZXMocykpO3JldHVybntyZW5kZXJlZElkczphLGhpZGRlbklkczppfX1mdW5jdGlvbiBtdyhlLHQpe2xldCBuPW5ldyBTZXQodHx8W10pLHI9e307cmV0dXJuIEJ0LmZpbHRlcihhPT4hbi5oYXMoYS53aWRnZXRJZCkpLmZvckVhY2goYT0+e3JbYS53aWRnZXRJZF09e2dyaWRXaWR0aFNpemU6YS5kZWZhdWx0R3JpZFdpZHRoU2l6ZXx8MSxncmlkSGVpZ2h0U2l6ZToxfX0pLChBcnJheS5pc0FycmF5KGUpP2U6W10pLmZvckVhY2goYT0+e3JbYS53aWRnZXRJZF0mJihyW2Eud2lkZ2V0SWRdPXtncmlkV2lkdGhTaXplOmEuZ3JpZFdpZHRoU2l6ZXx8clthLndpZGdldElkXS5ncmlkV2lkdGhTaXplLGdyaWRIZWlnaHRTaXplOmEuZ3JpZEhlaWdodFNpemV8fDF9KX0pLHJ9ZnVuY3Rpb24gSUUoZSx0LG4scil7bGV0IG89Wy4uLmUsLi4udF0sYT1vLmluZGV4T2Yobik7aWYocj09PSJ1cCImJmE9PT0wfHxyPT09ImRvd24iJiZhPT09by5sZW5ndGgtMSlyZXR1cm4gbnVsbDtsZXQgaT1bLi4ub10scz1yPT09InVwIj9hLTE6YSsxO3JldHVybltpW2FdLGlbc11dPVtpW3NdLGlbYV1dLHtyZW5kZXJlZElkczppLnNsaWNlKDAsZS5sZW5ndGgpLGhpZGRlbklkczppLnNsaWNlKGUubGVuZ3RoKX19ZnVuY3Rpb24gUkUoZSx0LG4scil7bGV0IG89ZS5maWx0ZXIoaT0+aSE9PW4pLGE9dC5maWx0ZXIoaT0+aSE9PW4pO3JldHVybiBlLmluY2x1ZGVzKHIpP28uc3BsaWNlKG8uaW5kZXhPZihyKSwwLG4pOmEuc3BsaWNlKGEuaW5kZXhPZihyKSwwLG4pLHtyZW5kZXJlZElkczpvLGhpZGRlbklkczphfX1mdW5jdGlvbiBNRShlLHQsbixyKXtsZXQgbz1lLmZpbHRlcihpPT5pIT09biksYT10LmZpbHRlcihpPT5pIT09bik7cmV0dXJuKHI9PT0icmVuZGVyZWQiP286YSkucHVzaChuKSx7cmVuZGVyZWRJZHM6byxoaWRkZW5JZHM6YX19ZnVuY3Rpb24gUEUoe3dpZGdldElkOmUsY3R4OnR9KXtsZXQgbj15dyhlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj1bLi4udC5yZW5kZXJlZElkcywuLi50LmhpZGRlbklkc10sbz1yLmluZGV4T2YoZSksYT1bImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbSIsdC5kcmFnZ2luZ0lkPT09ZT8iZGFzaGJvYXJkLWxheW91dC1wb3B1cC1pdGVtLS1kcmFnZ2luZyI6IiIsdC5kcmFnT3ZlcklkPT09ZT8iZGFzaGJvYXJkLWxheW91dC1wb3B1cC1pdGVtLS1kcmFnLW92ZXIiOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO3JldHVybigwLFEuanN4cykoImRpdiIse2NsYXNzTmFtZTphLGRyYWdnYWJsZTohMCxvbkRyYWdTdGFydDppPT50Lm9uRHJhZ1N0YXJ0KGksZSksb25EcmFnRW5kOnQub25EcmFnRW5kLG9uRHJhZ092ZXI6aT0+dC5vbkRyYWdPdmVySXRlbShpLGUpLG9uRHJvcDppPT50Lm9uRHJvcE9uSXRlbShpLGUpLGNoaWxkcmVuOlsoMCxRLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1oYW5kbGUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOiJcdTI4M0YifSksKDAsUS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWl0ZW0taWNvbiIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46bi5pY29ufSksKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWl0ZW0taW5mbyIsY2hpbGRyZW46WygwLFEuanN4KSgic3BhbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1pdGVtLW5hbWUiLGNoaWxkcmVuOm4ubmFtZX0pLG4uZGVzY3JpcHRpb24mJigwLFEuanN4KSgic3BhbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1pdGVtLWRlc2NyaXB0aW9uIixjaGlsZHJlbjpuLmRlc2NyaXB0aW9ufSldfSksKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWl0ZW0tYWN0aW9ucyIsY2hpbGRyZW46WygwLFEuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWFycm93LWJ1dHRvbiIsdHlwZToiYnV0dG9uIixkaXNhYmxlZDpvPT09MCx0aXRsZToiTW92ZSB1cCIsImFyaWEtbGFiZWwiOmBNb3ZlICR7bi5uYW1lfSB1cGAsb25DbGljazppPT57aS5zdG9wUHJvcGFnYXRpb24oKSx0Lm9uTW92ZShlLCJ1cCIpfSxjaGlsZHJlbjoiXHUyMTkxIn0pLCgwLFEuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWFycm93LWJ1dHRvbiIsdHlwZToiYnV0dG9uIixkaXNhYmxlZDpvPT09ci5sZW5ndGgtMSx0aXRsZToiTW92ZSBkb3duIiwiYXJpYS1sYWJlbCI6YE1vdmUgJHtuLm5hbWV9IGRvd25gLG9uQ2xpY2s6aT0+e2kuc3RvcFByb3BhZ2F0aW9uKCksdC5vbk1vdmUoZSwiZG93biIpfSxjaGlsZHJlbjoiXHUyMTkzIn0pXX0pXX0pfWZ1bmN0aW9uIGd3KHtzZWN0aW9uSWQ6ZSxsYWJlbDp0LGljb246bixpdGVtczpyLGN0eDpvfSl7bGV0IGE9WyJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXNlY3Rpb24iLG8uZHJhZ092ZXJTZWN0aW9uPT09ZT8iZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zZWN0aW9uLS1kcmFnLW92ZXIiOiIiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO3JldHVybigwLFEuanN4cykoImRpdiIse2NsYXNzTmFtZTphLG9uRHJhZ092ZXI6aT0+by5vbkRyYWdPdmVyU2VjdGlvbihpLGUpLG9uRHJhZ0xlYXZlOm8ub25EcmFnTGVhdmVTZWN0aW9uLG9uRHJvcDppPT5vLm9uRHJvcE9uU2VjdGlvbihpLGUpLGNoaWxkcmVuOlsoMCxRLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2VjdGlvbi1oZWFkZXIiLGNoaWxkcmVuOlsoMCxRLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2VjdGlvbi1pY29uIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpufSksKDAsUS5qc3gpKCJoNCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zZWN0aW9uLXRpdGxlIixjaGlsZHJlbjp0fSldfSksci5sZW5ndGg9PT0wPygwLFEuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWVtcHR5IixjaGlsZHJlbjplPT09InJlbmRlcmVkIj8iRHJhZyBjb21wb25lbnRzIGhlcmUgdG8gc2hvdyB0aGVtIG9uIHRoZSBkYXNoYm9hcmQiOiJBbGwgY29tcG9uZW50cyBhcmUgY3VycmVudGx5IHNob3duIn0pOigwLFEuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLWxpc3QiLGNoaWxkcmVuOnIubWFwKGk9PigwLFEuanN4KShQRSx7d2lkZ2V0SWQ6aSxjdHg6b30saSkpfSldfSl9ZnVuY3Rpb24gTEUoe3dpZGdldElkOmUsc2l6aW5nOnQsb25TaXppbmdDaGFuZ2U6bn0pe2xldCByPXl3KGUpO2lmKCFyKXJldHVybiBudWxsO2xldCBvPXRbZV0/LmdyaWRXaWR0aFNpemU/P3IuZGVmYXVsdEdyaWRXaWR0aFNpemU/PzEsYT10W2VdPy5ncmlkSGVpZ2h0U2l6ZT8/MSxpPXIubWF4SG9yaXpvbnRhbFRpbGVzfHw0LHM9ci5tYXhWZXJ0aWNhbFRpbGVzfHwyO3JldHVybigwLFEuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctaXRlbSIsY2hpbGRyZW46WygwLFEuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctaXRlbS1oZWFkZXIiLGNoaWxkcmVuOlsoMCxRLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1pY29uIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpyLmljb259KSwoMCxRLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtaXRlbS1uYW1lIixjaGlsZHJlbjpyLm5hbWV9KV19KSwoMCxRLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nLWl0ZW0tY29udHJvbHMiLGNoaWxkcmVuOlsoMCxRLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nLWZpZWxkIixjaGlsZHJlbjpbKDAsUS5qc3gpKCJsYWJlbCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctbGFiZWwiLGNoaWxkcmVuOiJXaWR0aCJ9KSwoMCxRLmpzeCkoInNlbGVjdCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctc2VsZWN0Iix2YWx1ZTpvLG9uQ2hhbmdlOmw9Pm4oZSwiZ3JpZFdpZHRoU2l6ZSIsTnVtYmVyKGwudGFyZ2V0LnZhbHVlKSksY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOml9LChsLGMpPT4oMCxRLmpzeCkoIm9wdGlvbiIse3ZhbHVlOmMrMSxjaGlsZHJlbjpgJHtjKzF9YH0sYysxKSl9KV19KSwoMCxRLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtc2l6aW5nLWZpZWxkIixjaGlsZHJlbjpbKDAsUS5qc3gpKCJsYWJlbCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctbGFiZWwiLGNoaWxkcmVuOiJWZXJ0aWNhbCB0aWxlcyJ9KSwoMCxRLmpzeCkoInNlbGVjdCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1zaXppbmctc2VsZWN0Iix2YWx1ZTphLG9uQ2hhbmdlOmw9Pm4oZSwiZ3JpZEhlaWdodFNpemUiLE51bWJlcihsLnRhcmdldC52YWx1ZSkpLGNoaWxkcmVuOkFycmF5LmZyb20oe2xlbmd0aDpzfSwobCxjKT0+KDAsUS5qc3gpKCJvcHRpb24iLHt2YWx1ZTpjKzEsY2hpbGRyZW46YCR7YysxfWB9LGMrMSkpfSldfSldfSldfSl9ZnVuY3Rpb24gekUoZSx0KXtsZXR7cmVuZGVyZWRJZHM6bixoaWRkZW5JZHM6cn09T0UoZSx0KSxbbyxhXT0oMCxtbi51c2VTdGF0ZSkobiksW2ksc109KDAsbW4udXNlU3RhdGUpKHIpLFtsLGNdPSgwLG1uLnVzZVN0YXRlKSgoKT0+bXcoZSx0KSksW3UscF09KDAsbW4udXNlU3RhdGUpKG51bGwpLFtkLGhdPSgwLG1uLnVzZVN0YXRlKShudWxsKSxbeSx3XT0oMCxtbi51c2VTdGF0ZSkobnVsbCksYj0oMCxtbi51c2VSZWYpKG51bGwpLFtnLG1dPSgwLG1uLnVzZVN0YXRlKSghMSksdj0oKT0+e2IuY3VycmVudD1udWxsLHAobnVsbCksaChudWxsKSx3KG51bGwpfTtyZXR1cm57cmVuZGVyZWRJZHM6byxoaWRkZW5JZHM6aSxzaXppbmc6bCxkcmFnZ2luZ0lkOnUsZHJhZ092ZXJJZDpkLGRyYWdPdmVyU2VjdGlvbjp5LGhhc1Jlc2V0Omcsb25Nb3ZlOihVLEYpPT57bGV0IEg9SUUobyxpLFUsRik7SCYmKGEoSC5yZW5kZXJlZElkcykscyhILmhpZGRlbklkcykpfSxvbkRyYWdTdGFydDooVSxGKT0+e2IuY3VycmVudD1GLFUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ9Im1vdmUiLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+cChGKSl9LG9uRHJhZ0VuZDooKT0+digpLG9uRHJhZ092ZXJJdGVtOihVLEYpPT57VS5wcmV2ZW50RGVmYXVsdCgpLFUuc3RvcFByb3BhZ2F0aW9uKCksVS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0ibW92ZSIsaChGKSx3KG51bGwpfSxvbkRyYWdPdmVyU2VjdGlvbjooVSxGKT0+e1UucHJldmVudERlZmF1bHQoKSxVLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJtb3ZlIix3KEYpLGgobnVsbCl9LG9uRHJhZ0xlYXZlU2VjdGlvbjpVPT57VS5jdXJyZW50VGFyZ2V0LmNvbnRhaW5zKFUucmVsYXRlZFRhcmdldCl8fHcobnVsbCl9LG9uRHJvcE9uSXRlbTooVSxGKT0+e1UucHJldmVudERlZmF1bHQoKSxVLnN0b3BQcm9wYWdhdGlvbigpO2xldCBIPWIuY3VycmVudDtpZih2KCksIUh8fEg9PT1GKXJldHVybjtsZXR7cmVuZGVyZWRJZHM6aWUsaGlkZGVuSWRzOk99PVJFKG8saSxILEYpO2EoaWUpLHMoTyl9LG9uRHJvcE9uU2VjdGlvbjooVSxGKT0+e1UucHJldmVudERlZmF1bHQoKTtsZXQgSD1iLmN1cnJlbnQ7aWYodigpLCFIKXJldHVybjtsZXR7cmVuZGVyZWRJZHM6aWUsaGlkZGVuSWRzOk99PU1FKG8saSxILEYpO2EoaWUpLHMoTyl9LG9uU2l6aW5nQ2hhbmdlOihVLEYsSCk9PntjKGllPT4oey4uLmllLFtVXTp7Li4uaWVbVV0sW0ZdOkh9fSkpfSxvblJlc2V0OlU9PntsZXQgRj1uZXcgU2V0KHR8fFtdKSxIPWh3KFUpO2lmKEgpe2xldCBpZT1ILndpZGdldHMubWFwKEc9Pkcud2lkZ2V0SWQpLmZpbHRlcihHPT4hRi5oYXMoRykpLE89QnQubWFwKEc9Pkcud2lkZ2V0SWQpLmZpbHRlcihHPT4hRi5oYXMoRykpO2EoaWUpLHMoTy5maWx0ZXIoRz0+IWllLmluY2x1ZGVzKEcpKSksYyhLaShIKSl9ZWxzZXtsZXQgaWU9QnQubWFwKE89Pk8ud2lkZ2V0SWQpLmZpbHRlcihPPT4hRi5oYXMoTykpO2EoaWUpLHMoW10pLGMobXcobnVsbCx0KSl9bSghMCl9fX1mdW5jdGlvbiBIcCh7Y3VycmVudExheW91dDplLGV4Y2x1ZGVXaWRnZXRJZHM6dCxvblNhdmU6bixvbkNhbmNlbDpyLHNlbGVjdGVkTGF5b3V0UHJvZmlsZTpvfSl7bGV0W2EsaV09KDAsbW4udXNlU3RhdGUpKCJjb21wb25lbnRzIiksW3MsbF09KDAsbW4udXNlU3RhdGUpKG98fG51bGwpLGM9ekUoZSx0KSx7cmVuZGVyZWRJZHM6dSxoaWRkZW5JZHM6cCxzaXppbmc6ZCxoYXNSZXNldDpoLG9uUmVzZXQ6eSxvblNpemluZ0NoYW5nZTp3fT1jLGI9YT09PSJjb21wb25lbnRzIj8oMCxRLmpzeHMpKFEuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCxRLmpzeCkoZ3cse3NlY3Rpb25JZDoicmVuZGVyZWQiLGxhYmVsOiJSZW5kZXJlZCBEYXNoYm9hcmQgRWxlbWVudHMiLGljb246Ilx1ezFGNDQxfSIsaXRlbXM6dSxjdHg6Y30pLCgwLFEuanN4KShndyx7c2VjdGlvbklkOiJoaWRkZW4iLGxhYmVsOiJIaWRkZW4gRGFzaGJvYXJkIEVsZW1lbnRzIixpY29uOiJcdXsxRjZBQn0iLGl0ZW1zOnAsY3R4OmN9KV19KTp1Lmxlbmd0aD09PTA/KDAsUS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtZW1wdHkiLGNoaWxkcmVuOiJObyByZW5kZXJlZCBjb21wb25lbnRzLiBBZGQgY29tcG9uZW50cyBpbiB0aGUgQ29tcG9uZW50cyB0YWIuIn0pOigwLFEuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXNpemluZyIsY2hpbGRyZW46dS5tYXAoZz0+KDAsUS5qc3gpKExFLHt3aWRnZXRJZDpnLHNpemluZzpkLG9uU2l6aW5nQ2hhbmdlOnd9LGcpKX0pO3JldHVybigwLFEuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtb3ZlcmxheSIsb25DbGljazpnPT5nLnRhcmdldD09PWcuY3VycmVudFRhcmdldCYmcigpLGNoaWxkcmVuOigwLFEuanN4cykoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLWNvbnRhaW5lciBkYXNoYm9hcmQtbGF5b3V0LXBvcHVwIixjaGlsZHJlbjpbKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtaGVhZGVyIixjaGlsZHJlbjpbKDAsUS5qc3gpKCJoMyIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLXRpdGxlIixjaGlsZHJlbjoiXHUyNjk5XHVGRTBGIERhc2hib2FyZCBMYXlvdXQifSksKDAsUS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImV4cGxhbmF0aW9uLXBhcmFncmFwaCIsY2hpbGRyZW46IkN1c3RvbWl6ZSB0aGUgb3JkZXIgb2YgeW91ciB3aWRnZXRzIGJ5IGRyYWdnaW5nIG9yIHNpemluZyB0aGVtIGluIHRoaXMgbWVudS4gWW91IGNhbiBhbHNvIHJlb3JkZXIgd2lkZ2V0cyBvdXRzaWRlIHRoaXMgbWVudSBieSBjbGlja2luZyBvbiB0aGVpciBoZWFkZXIgZm9yIDIgc2Vjb25kcyB0byBlbmdhZ2UgZHJhZyByZW9yZGVyaW5nLiJ9KSwoMCxRLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImV4cGxhbmF0aW9uLXBhcmFncmFwaCIsY2hpbGRyZW46WygwLFEuanN4KSgibGFiZWwiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtcHJvZmlsZS1sYWJlbCIsY2hpbGRyZW46IkRlZmF1bHQgbGF5b3V0In0pLCgwLFEuanN4cykoInNlbGVjdCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC1wcm9maWxlLXNlbGVjdCIsdmFsdWU6c3x8IiIsb25DaGFuZ2U6Zz0+bChnLnRhcmdldC52YWx1ZXx8bnVsbCksY2hpbGRyZW46WygwLFEuanN4KSgib3B0aW9uIix7dmFsdWU6IiIsY2hpbGRyZW46IkN1c3RvbSAobm8gcHJlc2V0KSJ9KSxfYS5tYXAoZz0+KDAsUS5qc3gpKCJvcHRpb24iLHt2YWx1ZTpnLmlkLGNoaWxkcmVuOmcubmFtZX0sZy5pZCkpXX0pXX0pLCgwLFEuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWxheW91dC1wb3B1cC10YWJzIixjaGlsZHJlbjpbKDAsUS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1sYXlvdXQtcG9wdXAtdGFiIisoYT09PSJjb21wb25lbnRzIj8iIGFjdGl2ZSI6IiIpLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+aSgiY29tcG9uZW50cyIpLGNoaWxkcmVuOiJDb21wb25lbnRzIn0pLCgwLFEuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbGF5b3V0LXBvcHVwLXRhYiIrKGE9PT0ic2l6aW5nIj8iIGFjdGl2ZSI6IiIpLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+aSgic2l6aW5nIiksY2hpbGRyZW46IlNpemluZyJ9KV19KV19KSwoMCxRLmpzeCkoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLWJvZHkgZGFzaGJvYXJkLWxheW91dC1wb3B1cC1ib2R5IixjaGlsZHJlbjpifSksKDAsUS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtYWN0aW9ucyIsY2hpbGRyZW46WygwLFEuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtbGluayIsdHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT55KHMpLGNoaWxkcmVuOiJSZXNldCB0byBkZWZhdWx0cyJ9KSwoMCxRLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLWJ0biBjb25maWctcG9wdXAtYnRuLS1jYW5jZWwiLHR5cGU6ImJ1dHRvbiIsb25DbGljazpyLGNoaWxkcmVuOiJDYW5jZWwifSksKDAsUS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1idG4gY29uZmlnLXBvcHVwLWJ0bi0tc3VibWl0Iix0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9Pm4odSxoLGQscyksY2hpbGRyZW46IlNhdmUgTGF5b3V0In0pXX0pXX0pfSl9dmFyIHZ3PSJNaXNzaW9uIENvbnRyb2wgRGFzaGJvYXJkOiBwbHVnaW4gc2V0dGluZ3MiO2Z1bmN0aW9uIHd3KCl7dHJ5e2xldHtob3VyQ3ljbGU6ZX09bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodm9pZCAwLHtob3VyOiJudW1lcmljIn0pLnJlc29sdmVkT3B0aW9ucygpO3JldHVybiBlPT09ImgyMyJ8fGU9PT0iaDI0Ij8iMjRoIjoibWVyaWRpYW4ifWNhdGNoe3JldHVybiJtZXJpZGlhbiJ9fWZ1bmN0aW9uIGJ3KCl7dHJ5e2xldCBlPW5ldyBJbnRsLkxvY2FsZShuYXZpZ2F0b3IubGFuZ3VhZ2UpLHQ9ZS53ZWVrSW5mb3x8ZS5nZXRXZWVrSW5mbz8uKCk7cmV0dXJuIHQ/LmZpcnN0RGF5PT09N3x8dD8uZmlyc3REYXk9PT0wPyJzdW5kYXkiOiJtb25kYXkifWNhdGNoe3JldHVybiJtb25kYXkifX1mdW5jdGlvbiBGRShlKXtsZXQgdD17fTtpZighZSlyZXR1cm4gdDtmb3IobGV0IG4gb2YgZS5zcGxpdChgCmApKXtsZXQgcj1uLm1hdGNoKC9eKFteOl0rKTpccyooLispLyk7aWYoIXIpY29udGludWU7bGV0IG89clsxXS50cmltKCkudG9Mb3dlckNhc2UoKSxhPXJbMl0udHJpbSgpLnRvTG93ZXJDYXNlKCk7bz09PSJ0aW1lIGZvcm1hdCImJih0LnRpbWVGb3JtYXQ9YSksbz09PSJ3ZWVrIGZvcm1hdCImJih0LndlZWtGb3JtYXQ9YSl9cmV0dXJuIHR9ZnVuY3Rpb24ga3coZSl7bGV0IHQ9W107cmV0dXJuIGUudGltZUZvcm1hdCYmdC5wdXNoKGBUaW1lIGZvcm1hdDogJHtlLnRpbWVGb3JtYXR9YCksZS53ZWVrRm9ybWF0JiZ0LnB1c2goYFdlZWsgZm9ybWF0OiAke2Uud2Vla0Zvcm1hdH1gKSx0LmpvaW4oYApgKX12YXIgWWk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fYXBwPXQsdGhpcy5fbm90ZVVVSUQ9bnVsbCx0aGlzLl9zZXR0aW5ncz1udWxsfWFzeW5jIGxvYWQoKXtsZXQgdD1hd2FpdCB0aGlzLl9hcHAuZmluZE5vdGUoe25hbWU6dncsdGFnczpbV2VdfSk7aWYodD8udXVpZCl7dGhpcy5fbm90ZVVVSUQ9dC51dWlkO2xldCByPWF3YWl0IHRoaXMuX2FwcC5nZXROb3RlQ29udGVudCh7dXVpZDp0LnV1aWR9KTtyZXR1cm4gdGhpcy5fc2V0dGluZ3M9RkUociksdGhpcy5fc2V0dGluZ3MudGltZUZvcm1hdHx8KHRoaXMuX3NldHRpbmdzLnRpbWVGb3JtYXQ9d3coKSksdGhpcy5fc2V0dGluZ3Mud2Vla0Zvcm1hdHx8KHRoaXMuX3NldHRpbmdzLndlZWtGb3JtYXQ9YncoKSksRSgiW0Rhc2hib2FyZFNldHRpbmdOb3RlXSBsb2FkZWQgc2V0dGluZ3M6Iix0aGlzLl9zZXR0aW5ncyksey4uLnRoaXMuX3NldHRpbmdzfX10aGlzLl9zZXR0aW5ncz17dGltZUZvcm1hdDp3dygpLHdlZWtGb3JtYXQ6YncoKX07bGV0IG49YXdhaXQgdGhpcy5fYXBwLmNyZWF0ZU5vdGUodncsW1dlXSx7YXJjaGl2ZTohMH0pO3JldHVybiB0aGlzLl9ub3RlVVVJRD10eXBlb2Ygbj09Im9iamVjdCI/bi51dWlkOm4sYXdhaXQgdGhpcy5fYXBwLnJlcGxhY2VOb3RlQ29udGVudCh7dXVpZDp0aGlzLl9ub3RlVVVJRH0sa3codGhpcy5fc2V0dGluZ3MpKSxFKCJbRGFzaGJvYXJkU2V0dGluZ05vdGVdIGNyZWF0ZWQgc2V0dGluZ3Mgbm90ZToiLHRoaXMuX25vdGVVVUlEKSx7Li4udGhpcy5fc2V0dGluZ3N9fWFzeW5jIHNhdmUodCl7aWYodGhpcy5fc2V0dGluZ3M9ey4uLnRoaXMuX3NldHRpbmdzLC4uLnR9LCF0aGlzLl9ub3RlVVVJRCl7RSgiW0Rhc2hib2FyZFNldHRpbmdOb3RlXSBubyBub3RlVVVJRDsgY2Fubm90IHNhdmUiKTtyZXR1cm59YXdhaXQgdGhpcy5fYXBwLnJlcGxhY2VOb3RlQ29udGVudCh7dXVpZDp0aGlzLl9ub3RlVVVJRH0sa3codGhpcy5fc2V0dGluZ3MpKSxFKCJbRGFzaGJvYXJkU2V0dGluZ05vdGVdIHNhdmVkIHNldHRpbmdzOiIsdGhpcy5fc2V0dGluZ3MpfWdldCBzZXR0aW5ncygpe3JldHVybiB0aGlzLl9zZXR0aW5ncz97Li4udGhpcy5fc2V0dGluZ3N9Om51bGx9fTt2YXIgdGM9eih5ZSgpLDEpO3ZhciBqbj16KHJlKCksMSk7ZnVuY3Rpb24gQW8oe3RpdGxlOmUsb25TdWJtaXQ6dCxvbkNhbmNlbDpuLHN1Ym1pdExhYmVsOnI9IlN1Ym1pdCIsY2hpbGRyZW46byxzY3JvbGxUb3A6YX0pe2xldCBpPSgwLHRjLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsdGMudXNlRWZmZWN0KSgoKT0+e2lmKGE9PT12b2lkIDApcmV0dXJuO2xldCBsPWM9PntpLmN1cnJlbnQmJiFpLmN1cnJlbnQuY29udGFpbnMoYy50YXJnZXQpJiZuKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGwpLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGwpfSxbYSxuXSksKDAsam4uanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtb3ZlcmxheSIsc3R5bGU6YSE9PXZvaWQgMD97cG9zaXRpb246ImFic29sdXRlIix0b3A6YSxsZWZ0OjAscmlnaHQ6MCxtaW5IZWlnaHQ6IjEwMHZoIixwb2ludGVyRXZlbnRzOiJub25lIixhbGlnbkl0ZW1zOiJmbGV4LXN0YXJ0IixwYWRkaW5nOiIxNnB4In06dm9pZCAwLG9uQ2xpY2s6YT09PXZvaWQgMD9sPT57bC50YXJnZXQ9PT1sLmN1cnJlbnRUYXJnZXQmJm4oKX06dm9pZCAwLGNoaWxkcmVuOigwLGpuLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1wb3B1cC1jb250YWluZXIiLHJlZjppLHN0eWxlOmEhPT12b2lkIDA/e3BvaW50ZXJFdmVudHM6ImF1dG8ifTp2b2lkIDAsY2hpbGRyZW46W2U/KDAsam4uanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtaGVhZGVyIixjaGlsZHJlbjooMCxqbi5qc3gpKCJoMyIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLXRpdGxlIixjaGlsZHJlbjplfSl9KTpudWxsLCgwLGpuLmpzeCkoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLWJvZHkiLGNoaWxkcmVuOm99KSwoMCxqbi5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctcG9wdXAtYWN0aW9ucyIsY2hpbGRyZW46WygwLGpuLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLWJ0biBjb25maWctcG9wdXAtYnRuLS1jYW5jZWwiLG9uQ2xpY2s6bixjaGlsZHJlbjoiQ2FuY2VsIn0pLCgwLGpuLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiY29uZmlnLXBvcHVwLWJ0biBjb25maWctcG9wdXAtYnRuLS1zdWJtaXQiLG9uQ2xpY2s6dCxjaGlsZHJlbjpyfSldfSldfSl9KX12YXIgVUU9NTAqMTAyNCo0O3ZhciB4dz17YW50aHJvcGljOiJodHRwczovL2NvbnNvbGUuYW50aHJvcGljLmNvbS9zZXR0aW5ncy9rZXlzIiwiYW50aHJvcGljLXNvbm5ldCI6Imh0dHBzOi8vY29uc29sZS5hbnRocm9waWMuY29tL3NldHRpbmdzL2tleXMiLGRlZXBzZWVrOiJodHRwczovL3BsYXRmb3JtLmRlZXBzZWVrLmNvbS9hcGlfa2V5cyIsZ2VtaW5pOiJodHRwczovL2Fpc3R1ZGlvLmdvb2dsZS5jb20vYXBwL2FwaS1rZXlzIixncm9rOiJodHRwczovL2NvbnNvbGUueC5haS90ZWFtL2RlZmF1bHQvYXBpLWtleXMiLG9wZW5haToiaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2FwaS1rZXlzIixwZXJwbGV4aXR5OiJodHRwczovL3d3dy5wZXJwbGV4aXR5LmFpL2FjY291bnQvYXBpL2tleXMifSxncj17YW50aHJvcGljOiJjbGF1ZGUtb3B1cy00LTYiLCJhbnRocm9waWMtc29ubmV0IjoiY2xhdWRlLXNvbm5ldC00LTYiLGRlZXBzZWVrOiJkZWVwc2Vlay1jaGF0IixnZW1pbmk6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLGdyb2s6Imdyb2stNC4yMCIsb3BlbmFpOiJncHQtNS40IixwZXJwbGV4aXR5OiJzb25hci1wcm8ifTt2YXIgR3A9e2FudGhyb3BpYzoiaHR0cHM6Ly9hcGkuYW50aHJvcGljLmNvbS92MS9tZXNzYWdlcyIsImFudGhyb3BpYy1zb25uZXQiOiJodHRwczovL2FwaS5hbnRocm9waWMuY29tL3YxL21lc3NhZ2VzIixkZWVwc2VlazoiaHR0cHM6Ly9hcGkuZGVlcHNlZWsuY29tL3YxL2NoYXQvY29tcGxldGlvbnMiLGdlbWluaToiaHR0cHM6Ly9nZW5lcmF0aXZlbGFuZ3VhZ2UuZ29vZ2xlYXBpcy5jb20vdjFiZXRhL21vZGVscy97bW9kZWwtbmFtZX06Z2VuZXJhdGVDb250ZW50Iixncm9rOiJodHRwczovL2FwaS54LmFpL3YxL2NoYXQvY29tcGxldGlvbnMiLG9wZW5haToiaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MS9jaGF0L2NvbXBsZXRpb25zIixwZXJwbGV4aXR5OiJodHRwczovL2FwaS5wZXJwbGV4aXR5LmFpL2NoYXQvY29tcGxldGlvbnMifSxfUD1PYmplY3Qua2V5cyhHcCksU3c9eyJjbGF1ZGUtb3B1cy00LTYiOjIwMCoxMDI0KjQsImNsYXVkZS1zb25uZXQtNC02IjoyMDAqMTAyNCo0LCJjbGF1ZGUtc29ubmV0LTQtNSI6MjAwKjEwMjQqNCwiY2xhdWRlLXNvbm5ldC00LTUtMjAyNTA5MjkiOjIwMCoxMDI0KjQsImNsYXVkZS1oYWlrdS00LTUiOjIwMCoxMDI0KjQsImNsYXVkZS1oYWlrdS00LTUtMjAyNTEwMDEiOjIwMCoxMDI0KjQsImNsYXVkZS1vcHVzLTQtNSI6MjAwKjEwMjQqNCwiY2xhdWRlLW9wdXMtNC01LTIwMjUxMTAxIjoyMDAqMTAyNCo0LCJjbGF1ZGUtb3B1cy00LTEiOjIwMCoxMDI0KjQsImNsYXVkZS1vcHVzLTQtMS0yMDI1MDgwNSI6MjAwKjEwMjQqNCwiY2xhdWRlLXNvbm5ldC00LTAiOjIwMCoxMDI0KjQsImNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNCI6MjAwKjEwMjQqNCwiY2xhdWRlLTMtNy1zb25uZXQtbGF0ZXN0IjoyMDAqMTAyNCo0LCJjbGF1ZGUtMy03LXNvbm5ldC0yMDI1MDIxOSI6MjAwKjEwMjQqNCwiY2xhdWRlLW9wdXMtNC0wIjoyMDAqMTAyNCo0LCJjbGF1ZGUtb3B1cy00LTIwMjUwNTE0IjoyMDAqMTAyNCo0LCJjbGF1ZGUtMy01LWhhaWt1LWxhdGVzdCI6MjAwKjEwMjQqNCwiY2xhdWRlLTMtNS1oYWlrdS0yMDI0MTAyMiI6MjAwKjEwMjQqNCwiY2xhdWRlLTMtNS1zb25uZXQtbGF0ZXN0IjoyMDAqMTAyNCo0LCJjbGF1ZGUtMy1oYWlrdS0yMDI0MDMwNyI6MjAwKjEwMjQqNH0sRXc9eyJkZWVwc2Vlay1jaGF0Ijo2NCoxMDI0KjQsImRlZXBzZWVrLXJlYXNvbmVyIjo2NCoxMDI0KjQsImRlZXBzZWVrLXIxIjo2NCoxMDI0KjQsImRlZXBzZWVrLXIxLTA1MjgiOjY0KjEwMjQqNH0sVHc9eyJnZW1pbmktMy1mbGFzaCI6NjQqMTAyNCo0LCJnZW1pbmktMy1mbGFzaC1wcmV2aWV3Ijo2NCoxMDI0KjQsImdlbWluaS0zLXBybyI6MTAyNCoxMDI0KjQsImdlbWluaS0zLXByby1wcmV2aWV3IjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyI6MTAyNCoxMDI0KjQsImdlbWluaS0zLXByby1pbWFnZS1wcmV2aWV3Ijo2NCoxMDI0KjQsImdlbWluaS0yLjUtcHJvIjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTIuNS1mbGFzaCI6MTAyNCoxMDI0KjQsImdlbWluaS0yLjUtZmxhc2gtbGl0ZSI6MTAyNCoxMDI0KjQsImdlbWluaS0yLjUtZmxhc2gtbGl0ZS1wcmV2aWV3LTA2LTE3IjoxMDI0KjEwMjQqNCwiZ2VtaW5pLTIuMC1mbGFzaCI6MTAyNCoxMDI0KjQsImdlbWluaS0yLjAtZmxhc2gtbGl0ZSI6MTAyNCoxMDI0KjR9LE53PXsiZ3Jvay00LTEtZmFzdCI6MjA0OCoxMDI0KjQsImdyb2stNC1mYXN0IjoyMDQ4KjEwMjQqNCwiZ3Jvay00IjoyNTYqMTAyNCo0LCJncm9rLTQuMjAiOjI1NioxMDI0KjQsImdyb2stNC0wNzA5IjoyNTYqMTAyNCo0LCJncm9rLTMiOjEyOCoxMDI0KjQsImdyb2stMy1iZXRhIjoxMjgqMTAyNCo0LCJncm9rLTMtbWluaSI6MTI4KjEwMjQqNCwiZ3Jvay0zLW1pbmktYmV0YSI6MTI4KjEwMjQqNCwiZ3Jvay0yLXZpc2lvbi0xMjEyIjo4KjEwMjQqNCwiZ3Jvay0yLWltYWdlLTEyMTIiOjEyOCoxMDI0KjQsImdyb2stMi0xMjEyIjoxMjgqMTAyNCo0fSxEdz17ImdwdC01LjQiOjQwMCoxMDI0KjQsImdwdC01LjIiOjQwMCoxMDI0KjQsImdwdC01LjEiOjQwMCoxMDI0KjQsImdwdC01LjEtY29kZXgtbWF4Ijo0MDAqMTAyNCo0LCJncHQtNSI6NDAwKjEwMjQqNCwiZ3B0LTUtZmFzdCI6NDAwKjEwMjQqNCwiZ3B0LTUtdGhpbmtpbmciOjQwMCoxMDI0KjQsImdwdC00LjEiOjFlMyoxMDI0KjQsImdwdC00LjEtbWluaSI6MTI4KjEwMjQqNCwiZ3B0LTRvIjoxMjgqMTAyNCo0LCJncHQtNG8tbWluaSI6MTI4KjEwMjQqNCxvMzoyMDAqMTAyNCo0LCJvMy1taW5pIjoyMDAqMTAyNCo0LCJvMy1wcm8iOjIwMCoxMDI0KjQsIm80LW1pbmkiOjIwMCoxMDI0KjQsImdwdC00Ijo4KjEwMjQqNCwiZ3B0LTQtMTEwNi1wcmV2aWV3IjoxMjgqMTAyNCo0LCJncHQtNC0zMmsiOjMyKjEwMjQqNCwiZ3B0LTQtMzJrLTA2MTMiOjMyKjEwMjQqNCwiZ3B0LTQtdmlzaW9uLXByZXZpZXciOjEyOCoxMDI0KjR9LENQPXsic29uYXItcHJvIjoyMDAqMTAyNCo0LHNvbmFyOjEyOCoxMDI0KjQsInNvbmFyLXJlYXNvbmluZy1wcm8iOjEyOCoxMDI0KjQsInNvbmFyLXJlYXNvbmluZyI6MTI4KjEwMjQqNCwic29uYXItZGVlcC1yZXNlYXJjaCI6MTI4KjEwMjQqNH0sJEU9ey4uLlN3LC4uLkV3LC4uLlR3LC4uLk53LC4uLkR3fSxWcD17YW50aHJvcGljOk9iamVjdC5rZXlzKFN3KSxkZWVwc2VlazpPYmplY3Qua2V5cyhFdyksZ2VtaW5pOk9iamVjdC5rZXlzKFR3KSxncm9rOk9iamVjdC5rZXlzKE53KSxvcGVuYWk6T2JqZWN0LmtleXMoRHcpfTt2YXIgSHQ9eih5ZSgpKTtmdW5jdGlvbiBXRShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQsbik9PntsZXQgcj1uZXcgRmlsZVJlYWRlcjtyLm9ubG9hZD1vPT50KG8udGFyZ2V0LnJlc3VsdCksci5vbmVycm9yPW89PntyLmFib3J0KCksbihvLnRhcmdldC5lcnJvcil9LHIucmVhZEFzRGF0YVVSTChlKX0pfWZ1bmN0aW9uIGpwKHthcHA6ZSxwbHVnaW5Ob3RlVVVJRDp0LGluaXRpYWxJbWFnZVVybDpuPSIiLGluaXRpYWxNb2RlOnI9ImNvdmVyIn09e30pe2xldFtvLGFdPSgwLEh0LnVzZVN0YXRlKShuKSxbaSxzXT0oMCxIdC51c2VTdGF0ZSkociksW2wsY109KDAsSHQudXNlU3RhdGUpKCExKSxbdSxwXT0oMCxIdC51c2VTdGF0ZSkoITEpLGQ9KDAsSHQudXNlUmVmKShudWxsKSxoPSgwLEh0LnVzZUNhbGxiYWNrKShhc3luYyB2PT57aWYoIXZ8fCF2LnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpe0UoIltiZy11cGxvYWRdIHJlamVjdGVkIGZpbGUgKG5vdCBhbiBpbWFnZSBvciBtaXNzaW5nKToiLHY/LnR5cGUpO3JldHVybn1FKCJbYmctdXBsb2FkXSBzdGFydGluZyB1cGxvYWQgZm9yOiIsdi5uYW1lLHYudHlwZSx2LnNpemUsImJ5dGVzIiksYyghMCk7dHJ5e2xldCBmPWF3YWl0IFdFKHYpO0UoIltiZy11cGxvYWRdIGZpbGUgY29udmVydGVkIHRvIGRhdGEgVVJMLCBsZW5ndGg6IixmLmxlbmd0aCk7bGV0IHg9YXdhaXQgZS5hdHRhY2hOb3RlTWVkaWEoe3V1aWQ6dH0sZik7RSgiW2JnLXVwbG9hZF0gYXR0YWNoTm90ZU1lZGlhIHJldHVybmVkIFVSTDoiLHgpLHg/YSh4KTpFKCJbYmctdXBsb2FkXSBhdHRhY2hOb3RlTWVkaWEgcmV0dXJuZWQgZmFsc3kgVVJMIFx1MjAxNCB1cGxvYWQgbWF5IGhhdmUgZmFpbGVkIHNpbGVudGx5Iil9Y2F0Y2goZil7RSgiW2JnLXVwbG9hZF0gdXBsb2FkIEZBSUxFRCB3aXRoIGV4Y2VwdGlvbjoiLGYpfWZpbmFsbHl7YyghMSksRSgiW2JnLXVwbG9hZF0gdXBsb2FkIGZsb3cgY29tcGxldGUiKX19LFtdKSx5PSgwLEh0LnVzZUNhbGxiYWNrKSh2PT57di5wcmV2ZW50RGVmYXVsdCgpLHYuc3RvcFByb3BhZ2F0aW9uKCkscCghMSk7bGV0IGY9di5kYXRhVHJhbnNmZXI/LmZpbGVzPy5bMF07ZiYmaChmKX0sW2hdKSx3PSgwLEh0LnVzZUNhbGxiYWNrKSh2PT57di5wcmV2ZW50RGVmYXVsdCgpLHYuc3RvcFByb3BhZ2F0aW9uKCkscCghMCl9LFtdKSxiPSgwLEh0LnVzZUNhbGxiYWNrKSh2PT57di5wcmV2ZW50RGVmYXVsdCgpLHYuc3RvcFByb3BhZ2F0aW9uKCkscCghMSl9LFtdKSxnPSgwLEh0LnVzZUNhbGxiYWNrKSh2PT57bGV0IGY9di50YXJnZXQuZmlsZXM/LlswXTtmJiZoKGYpfSxbaF0pLG09KDAsSHQudXNlQ2FsbGJhY2spKCgpPT57YSgiIil9LFtdKTtyZXR1cm57YmFja2dyb3VuZEltYWdlVXJsOm8sYmFja2dyb3VuZE1vZGU6aSxzZXRCYWNrZ3JvdW5kTW9kZTpzLHVwbG9hZGluZzpsLGRyYWdPdmVyOnUsZmlsZUlucHV0UmVmOmQsaGFuZGxlRHJvcDp5LGhhbmRsZURyYWdPdmVyOncsaGFuZGxlRHJhZ0xlYXZlOmIsaGFuZGxlRmlsZUlucHV0Q2hhbmdlOmcsaGFuZGxlUmVtb3ZlSW1hZ2U6bX19dmFyIE9vPXooeWUoKSk7dmFyIEo9eihyZSgpKSxWcj1be3ZhbHVlOiJub25lIixsYWJlbDoiTm9uZSAoZGlzYWJsZSBBSSBmZWF0dXJlcykiLGFwaUtleVByb3ZpZGVyOm51bGx9LHt2YWx1ZToib3BlbmFpIixsYWJlbDoiT3BlbkFJIENoYXRHUFQiLGFwaUtleVByb3ZpZGVyOiJvcGVuYWkifSx7dmFsdWU6ImFudGhyb3BpYyIsbGFiZWw6IkFudGhyb3BpYyBPcHVzIixhcGlLZXlQcm92aWRlcjoiYW50aHJvcGljIn0se3ZhbHVlOiJhbnRocm9waWMtc29ubmV0IixsYWJlbDoiQW50aHJvcGljIFNvbm5ldCIsYXBpS2V5UHJvdmlkZXI6ImFudGhyb3BpYyJ9LHt2YWx1ZToiZ2VtaW5pIixsYWJlbDoiR29vZ2xlIEdlbWluaSIsYXBpS2V5UHJvdmlkZXI6ImdlbWluaSJ9LHt2YWx1ZToiZ3JvayIsbGFiZWw6Ikdyb2siLGFwaUtleVByb3ZpZGVyOiJncm9rIn1dO2Z1bmN0aW9uIEJFKCl7bGV0IGU9bmF2aWdhdG9yLnVzZXJBZ2VudHx8IiIsdD1uYXZpZ2F0b3IucGxhdGZvcm18fCIiLG49L0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KGUpLHI9bmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjEmJi9NYWNpbnRvc2gvLnRlc3QoZSk7cmV0dXJuIG58fHI/e2xpbmtQYXJlbnRoZXRpY2FsOiJsb25nLXByZXNzLCBPcGVuIGluIE5ldyBUYWIiLG5vdGU6IkxvbmctcHJlc3MgdGhlIGZvbGxvd2luZyBsaW5rLCB0aGVuIGNob29zZSBPcGVuIGluIE5ldyBUYWIgb3IgT3BlbiBpbiBCcm93c2VyLiBBIG5vcm1hbCBjbGljayBtYXkgaGF2ZSBubyB2aXNpYmxlIGVmZmVjdC4ifTovTWFjfGlQaG9uZXxpUG9kfGlQYWQvLnRlc3QodCl8fC9NYWMgT1MgWC8udGVzdChlKT97bGlua1BhcmVudGhldGljYWw6IkNtZCtjbGljayIsbm90ZToiQ21kLWNsaWNrIHRoZSBmb2xsb3dpbmcgbGluayB0byBvcGVuIGl0LiBBIG5vcm1hbCBjbGljayBtYXkgaGF2ZSBubyB2aXNpYmxlIGVmZmVjdC4ifTovV2luLy50ZXN0KHQpP3tsaW5rUGFyZW50aGV0aWNhbDoiQ3RybCtjbGljayIsbm90ZToiQ3RybC1jbGljayB0aGUgZm9sbG93aW5nIGxpbmsgdG8gb3BlbiBpdC4gQSBub3JtYWwgY2xpY2sgbWF5IGhhdmUgbm8gdmlzaWJsZSBlZmZlY3QuIn06e2xpbmtQYXJlbnRoZXRpY2FsOiJDdHJsK2NsaWNrIixub3RlOiJDdHJsLWNsaWNrIHRoZSBmb2xsb3dpbmcgbGluayB0byBvcGVuIGl0LiBBIG5vcm1hbCBjbGljayBtYXkgaGF2ZSBubyB2aXNpYmxlIGVmZmVjdCJ9fWZ1bmN0aW9uIEhFKHthcGlLZXk6ZSxhcGlLZXlWaXNpYmxlOnQsbGlua1BhcmVudGhldGljYWw6bixub3RlOnIsb25BcGlLZXlDaGFuZ2U6byxvblByb3ZpZGVyQ2hhbmdlOmEsb25Ub2dnbGVLZXlWaXNpYmlsaXR5OmkscHJvdmlkZXJBcGlLZXlVcmw6cyxwcm92aWRlck5hbWU6bCxzZWxlY3RlZFByb3ZpZGVyOmN9KXtyZXR1cm4oMCxKLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uIHNlY3Rpb24iLGNoaWxkcmVuOlsoMCxKLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlciIsY2hpbGRyZW46WygwLEouanN4KSgiaDQiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uLXRpdGxlIixjaGlsZHJlbjoiQUkgUHJvdmlkZXIifSksKDAsSi5qc3gpKCJwIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VjdGlvbi1kZXNjIixjaGlsZHJlbjoiRW5hYmxlIGFuYWx5c2lzIG9mIHF1YXJ0ZXJseSBwbGFuICYgc3VnZ2VzdGVkIHRhc2tzLiJ9KV19KSwoMCxKLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZCIsY2hpbGRyZW46WygwLEouanN4cykoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWxpbmUiLGNoaWxkcmVuOlsoMCxKLmpzeCkoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkLWxhYmVsIixjaGlsZHJlbjoiTExNIFByb3ZpZGVyIn0pLCgwLEouanN4KSgic2VsZWN0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VsZWN0IixpZDoibGxtLXByb3ZpZGVyLXNlbGVjdCIsdmFsdWU6YyxvbkNoYW5nZTp1PT5hKHUudGFyZ2V0LnZhbHVlKSxjaGlsZHJlbjpWci5tYXAodT0+KDAsSi5qc3gpKCJvcHRpb24iLHt2YWx1ZTp1LnZhbHVlLGNoaWxkcmVuOnUubGFiZWx9LHUudmFsdWUpKX0pXX0pLCgwLEouanN4cykoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWxpbmUiLGNoaWxkcmVuOlsoMCxKLmpzeCkoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkLWxhYmVsIixjaGlsZHJlbjoiQVBJIEtleSJ9KSwoMCxKLmpzeCkoInAiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1hcGkta2V5LWhpbnQiLGNoaWxkcmVuOnJ9KSwoMCxKLmpzeCkoImEiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1hcGkta2V5LWxpbmsiLGhyZWY6cyx0YXJnZXQ6Il9ibGFuayIscmVsOiJub29wZW5lciBub3JlZmVycmVyIixjaGlsZHJlbjpgUmV0cmlldmUgeW91ciAke2x9IEFQSSBrZXkgKCR7bn0pIFx1MjE5MmB9KSwoMCxKLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1hcGkta2V5LWlucHV0LXJvdyIsY2hpbGRyZW46WygwLEouanN4KSgiaW5wdXQiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1hcGkta2V5LWlucHV0Iix0eXBlOnQ/InRleHQiOiJwYXNzd29yZCIsdmFsdWU6ZSxvbkNoYW5nZTp1PT5vKHUudGFyZ2V0LnZhbHVlKSxwbGFjZWhvbGRlcjoiUGFzdGUgeW91ciBBUEkga2V5IGhlcmUiLGF1dG9Db21wbGV0ZToib2ZmIixzcGVsbENoZWNrOiExfSksKDAsSi5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1hcGkta2V5LXRvZ2dsZSIsdHlwZToiYnV0dG9uIixvbkNsaWNrOmksdGl0bGU6dD8iSGlkZSBBUEkga2V5IjoiU2hvdyBBUEkga2V5IiwiYXJpYS1sYWJlbCI6dD8iSGlkZSBBUEkga2V5IjoiU2hvdyBBUEkga2V5IixjaGlsZHJlbjp0PyJcdXsxRjY0OH0iOiJcdXsxRjQ0MX1cdUZFMEYifSldfSldfSldfSldfSl9ZnVuY3Rpb24gR0Uoe2JhY2tncm91bmRJbWFnZVVybDplLGJhY2tncm91bmRNb2RlOnQsZHJhZ092ZXI6bixmaWxlSW5wdXRSZWY6cixvbkJhY2tncm91bmRNb2RlQ2hhbmdlOm8sb25EcmFnTGVhdmU6YSxvbkRyYWdPdmVyOmksb25Ecm9wOnMsb25GaWxlSW5wdXRDaGFuZ2U6bCxvblJlbW92ZUltYWdlOmMsdXBsb2FkaW5nOnV9KXtyZXR1cm4oMCxKLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uIHNlY3Rpb24iLGNoaWxkcmVuOlsoMCxKLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlciIsY2hpbGRyZW46WygwLEouanN4KSgiaDQiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uLXRpdGxlIixjaGlsZHJlbjoiQmFja2dyb3VuZCBJbWFnZSJ9KSwoMCxKLmpzeCkoInAiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uLWRlc2MiLGNoaWxkcmVuOiJVcGxvYWQgYW4gaW1hZ2UgdG8gdXNlIGFzIHlvdXIgZGFzaGJvYXJkIGJhY2tncm91bmQuIn0pXX0pLCgwLEouanN4cykoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkIixjaGlsZHJlbjpbKDAsSi5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOmBkYXNoYm9hcmQtc2V0dGluZ3MtZHJvcHpvbmUke24/IiBkYXNoYm9hcmQtc2V0dGluZ3MtZHJvcHpvbmUtLWFjdGl2ZSI6IiJ9JHt1PyIgZGFzaGJvYXJkLXNldHRpbmdzLWRyb3B6b25lLS11cGxvYWRpbmciOiIifWAsb25Ecm9wOnMsb25EcmFnT3ZlcjppLG9uRHJhZ0xlYXZlOmEsb25DbGljazooKT0+IXUmJnIuY3VycmVudD8uY2xpY2soKSxjaGlsZHJlbjpbKDAsSi5qc3gpKCJpbnB1dCIse3JlZjpyLHR5cGU6ImZpbGUiLGFjY2VwdDoiaW1hZ2UvKiIsY2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtZHJvcHpvbmUtaW5wdXQiLG9uQ2hhbmdlOmx9KSx1PygwLEouanN4KSgic3BhbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLWRyb3B6b25lLXRleHQiLGNoaWxkcmVuOiJVcGxvYWRpbmcuLi4ifSk6ZT8oMCxKLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1kcm9wem9uZS1wcmV2aWV3IixjaGlsZHJlbjpbKDAsSi5qc3gpKCJpbWciLHtzcmM6ZSxhbHQ6IkJhY2tncm91bmQgcHJldmlldyIsY2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtZHJvcHpvbmUtcHJldmlldy1pbWciLG9uTG9hZDooKT0+RSgiW3NldHRpbmdzLXBvcHVwXSBiYWNrZ3JvdW5kIHByZXZpZXcgaW1hZ2UgbG9hZGVkIE9LOiIsZSksb25FcnJvcjpkPT5FKCJbc2V0dGluZ3MtcG9wdXBdIGJhY2tncm91bmQgcHJldmlldyBpbWFnZSBGQUlMRUQgdG8gbG9hZDoiLGUsZC50eXBlKX0pLCgwLEouanN4KSgic3BhbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLWRyb3B6b25lLXRleHQiLGNoaWxkcmVuOiJEcm9wIGEgbmV3IGltYWdlIG9yIGNsaWNrIHRvIHJlcGxhY2UifSldfSk6KDAsSi5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3MtZHJvcHpvbmUtdGV4dCIsY2hpbGRyZW46IkRyYWcgJiBkcm9wIGFuIGltYWdlIGhlcmUsIG9yIGNsaWNrIHRvIHVwbG9hZCJ9KV19KSxlJiYoMCxKLmpzeCkoImEiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1yZW1vdmUtaW1hZ2UiLGhyZWY6IiMiLG9uQ2xpY2s6ZD0+e2QucHJldmVudERlZmF1bHQoKSxjKCl9LGNoaWxkcmVuOiJSZW1vdmUgaW1hZ2UifSldfSksZSYmKDAsSi5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQiLGNoaWxkcmVuOlsoMCxKLmpzeCkoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkLWxhYmVsIixjaGlsZHJlbjoiRGlzcGxheSBNb2RlIn0pLCgwLEouanN4KSgic2VsZWN0Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtc2V0dGluZ3Mtc2VsZWN0Iix2YWx1ZTp0LG9uQ2hhbmdlOmQ9Pm8oZC50YXJnZXQudmFsdWUpLGNoaWxkcmVuOmd5Lm1hcChkPT4oMCxKLmpzeCkoIm9wdGlvbiIse3ZhbHVlOmQudmFsdWUsY2hpbGRyZW46ZC5sYWJlbH0sZC52YWx1ZSkpfSldfSldfSl9ZnVuY3Rpb24gVkUoe29uVGltZUZvcm1hdENoYW5nZTplLG9uV2Vla0Zvcm1hdENoYW5nZTp0LHRpbWVGb3JtYXQ6bix3ZWVrRm9ybWF0OnJ9KXtyZXR1cm4oMCxKLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uIHNlY3Rpb24iLGNoaWxkcmVuOlsoMCxKLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlciIsY2hpbGRyZW46WygwLEouanN4KSgiaDQiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1zZWN0aW9uLXRpdGxlIixjaGlsZHJlbjoiVGltZSAmIERhdGUgRm9ybWF0In0pLCgwLEouanN4KSgicCIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXNldHRpbmdzLXNlY3Rpb24tZGVzYyIsY2hpbGRyZW46IkNob29zZSBob3cgdGltZXMgYW5kIHdlZWtzIGFyZSBkaXNwbGF5ZWQgYWNyb3NzIHRoZSBkYXNoYm9hcmQuIn0pXX0pLCgwLEouanN4cykoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkIixjaGlsZHJlbjpbKDAsSi5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctbGluZSIsY2hpbGRyZW46WygwLEouanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQtbGFiZWwiLGNoaWxkcmVuOiJUaW1lIEZvcm1hdCJ9KSwoMCxKLmpzeHMpKCJsYWJlbCIse2NoaWxkcmVuOlsoMCxKLmpzeCkoImlucHV0Iix7dHlwZToicmFkaW8iLG5hbWU6InRpbWUtZm9ybWF0Iix2YWx1ZToibWVyaWRpYW4iLGNoZWNrZWQ6bj09PSJtZXJpZGlhbiIsb25DaGFuZ2U6KCk9PmUoIm1lcmlkaWFuIil9KSwiVXNlIG1lcmlkaWFuIChhbS9wbSkgdGltZXMiXX0pLCgwLEouanN4cykoImxhYmVsIix7Y2hpbGRyZW46WygwLEouanN4KSgiaW5wdXQiLHt0eXBlOiJyYWRpbyIsbmFtZToidGltZS1mb3JtYXQiLHZhbHVlOiIyNGgiLGNoZWNrZWQ6bj09PSIyNGgiLG9uQ2hhbmdlOigpPT5lKCIyNGgiKX0pLCIyNCBob3VyIHRpbWUiXX0pXX0pLCgwLEouanN4cykoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWxpbmUiLGNoaWxkcmVuOlsoMCxKLmpzeCkoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkLWxhYmVsIixjaGlsZHJlbjoiV2VlayBGb3JtYXQifSksKDAsSi5qc3hzKSgibGFiZWwiLHtjaGlsZHJlbjpbKDAsSi5qc3gpKCJpbnB1dCIse3R5cGU6InJhZGlvIixuYW1lOiJ3ZWVrLWZvcm1hdCIsdmFsdWU6InN1bmRheSIsY2hlY2tlZDpyPT09InN1bmRheSIsb25DaGFuZ2U6KCk9PnQoInN1bmRheSIpfSksIldlZWsgYmVnaW5zIG9uIFN1bmRheSJdfSksKDAsSi5qc3hzKSgibGFiZWwiLHtjaGlsZHJlbjpbKDAsSi5qc3gpKCJpbnB1dCIse3R5cGU6InJhZGlvIixuYW1lOiJ3ZWVrLWZvcm1hdCIsdmFsdWU6Im1vbmRheSIsY2hlY2tlZDpyPT09Im1vbmRheSIsb25DaGFuZ2U6KCk9PnQoIm1vbmRheSIpfSksIldlZWsgYmVnaW5zIG9uIE1vbmRheSJdfSldfSldfSldfSl9ZnVuY3Rpb24gX3coZSx0KXtpZighdClyZXR1cm4iIjtsZXQgbj1XdCh0KTtyZXR1cm4gbiYmZT8uW25dfHwiIn1mdW5jdGlvbiBLcCh7YXBwOmUsY29uZmlnUGFyYW1zOnQsb25DYW5jZWw6bixvblNhdmU6cixwbHVnaW5Ob3RlVVVJRDpvLHRpbWVGb3JtYXQ6YSx3ZWVrRm9ybWF0Oml9KXtsZXRbc109KDAsT28udXNlU3RhdGUpKCgpPT50eXBlb2Ygd2luZG93PiJ1Ij8wOndpbmRvdy5zY3JvbGxZPz9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wPz8wKSxsPXQ/LltLLkxMTV9QUk9WSURFUl9NT0RFTF0sYz10Py5bSy5CQUNLR1JPVU5EX0lNQUdFX1VSTF0sdT10Py5bSy5CQUNLR1JPVU5EX0lNQUdFX01PREVdLHA9VnIuZmluZCgkPT4kLnZhbHVlPT09bCl8fFZyWzBdLFtkLGhdPSgwLE9vLnVzZVN0YXRlKShfdyh0LHAuYXBpS2V5UHJvdmlkZXIpKSxbeSx3XT0oMCxPby51c2VTdGF0ZSkoITEpLFtiLGddPSgwLE9vLnVzZVN0YXRlKShsfHwib3BlbmFpIiksW20sdl09KDAsT28udXNlU3RhdGUpKGF8fCJtZXJpZGlhbiIpLFtmLHhdPSgwLE9vLnVzZVN0YXRlKShpfHwic3VuZGF5Iik7RSgiW3NldHRpbmdzLXBvcHVwXSByZW5kZXJpbmcgRGFzaGJvYXJkU2V0dGluZ3NQb3B1cCwgY3VycmVudEJhY2tncm91bmRJbWFnZVVybDoiLGMpO2xldHtiYWNrZ3JvdW5kSW1hZ2VVcmw6UyxiYWNrZ3JvdW5kTW9kZTpOLHNldEJhY2tncm91bmRNb2RlOkQsdXBsb2FkaW5nOl8sZHJhZ092ZXI6QSxmaWxlSW5wdXRSZWY6UCxoYW5kbGVEcm9wOkksaGFuZGxlRHJhZ092ZXI6TCxoYW5kbGVEcmFnTGVhdmU6VSxoYW5kbGVGaWxlSW5wdXRDaGFuZ2U6RixoYW5kbGVSZW1vdmVJbWFnZTpIfT1qcCh7YXBwOmUscGx1Z2luTm90ZVVVSUQ6byxpbml0aWFsSW1hZ2VVcmw6Yyxpbml0aWFsTW9kZTp1fSksaWU9VnIuZmluZCgkPT4kLnZhbHVlPT09Yil8fFZyWzBdLE89eHdbaWUuYXBpS2V5UHJvdmlkZXJdLEc9VnIuZmluZCgkPT4kLnZhbHVlPT09Yik/LmxhYmVsLFQ9JD0+e2coJCk7bGV0IFg9VnIuZmluZChlZT0+ZWUudmFsdWU9PT0kKXx8VnJbMF0sWj1fdyh0LFguYXBpS2V5UHJvdmlkZXIpO2goWil9LHtsaW5rUGFyZW50aGV0aWNhbDprLG5vdGU6Un09QkUoKTtyZXR1cm4oMCxKLmpzeCkoQW8se3RpdGxlOiJcdTI2OTlcdUZFMEYgRGFzaGJvYXJkIFNldHRpbmdzIixzY3JvbGxUb3A6cyxvblN1Ym1pdDooKT0+cih7YXBpS2V5OmQsYXBpS2V5UHJvdmlkZXI6aWUuYXBpS2V5UHJvdmlkZXIsYmFja2dyb3VuZEltYWdlVXJsOlMsYmFja2dyb3VuZE1vZGU6TixsbG1Qcm92aWRlcjpiLHRpbWVGb3JtYXQ6bSx3ZWVrRm9ybWF0OmZ9KSxvbkNhbmNlbDpuLHN1Ym1pdExhYmVsOiJTYXZlIFNldHRpbmdzIixjaGlsZHJlbjooMCxKLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC1zZXR0aW5ncy1jb250YWluZXIiLGNoaWxkcmVuOlsoMCxKLmpzeCkoR0Use2JhY2tncm91bmRJbWFnZVVybDpTLGJhY2tncm91bmRNb2RlOk4sZHJhZ092ZXI6QSxmaWxlSW5wdXRSZWY6UCxvbkJhY2tncm91bmRNb2RlQ2hhbmdlOkQsb25EcmFnTGVhdmU6VSxvbkRyYWdPdmVyOkwsb25Ecm9wOkksb25GaWxlSW5wdXRDaGFuZ2U6RixvblJlbW92ZUltYWdlOkgsdXBsb2FkaW5nOl99KSwoMCxKLmpzeCkoSEUse2FwaUtleTpkLGFwaUtleVZpc2libGU6eSxsaW5rUGFyZW50aGV0aWNhbDprLG5vdGU6UixvbkFwaUtleUNoYW5nZTpoLG9uUHJvdmlkZXJDaGFuZ2U6VCxvblRvZ2dsZUtleVZpc2liaWxpdHk6KCk9PncoJD0+ISQpLHByb3ZpZGVyQXBpS2V5VXJsOk8scHJvdmlkZXJOYW1lOkcsc2VsZWN0ZWRQcm92aWRlcjpifSksKDAsSi5qc3gpKFZFLHtvblRpbWVGb3JtYXRDaGFuZ2U6dixvbldlZWtGb3JtYXRDaGFuZ2U6eCx0aW1lRm9ybWF0Om0sd2Vla0Zvcm1hdDpmfSldfSl9KX12YXIgWXA9e307KGZ1bmN0aW9uIGUodCxuLHIsbyl7dmFyIGE9ISEodC5Xb3JrZXImJnQuQmxvYiYmdC5Qcm9taXNlJiZ0Lk9mZnNjcmVlbkNhbnZhcyYmdC5PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQmJnQuSFRNTENhbnZhc0VsZW1lbnQmJnQuSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuJiZ0LlVSTCYmdC5VUkwuY3JlYXRlT2JqZWN0VVJMKSxpPXR5cGVvZiBQYXRoMkQ9PSJmdW5jdGlvbiImJnR5cGVvZiBET01NYXRyaXg9PSJmdW5jdGlvbiIscz1mdW5jdGlvbigpe2lmKCF0Lk9mZnNjcmVlbkNhbnZhcylyZXR1cm4hMTt0cnl7dmFyIFQ9bmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLGs9VC5nZXRDb250ZXh0KCIyZCIpO2suZmlsbFJlY3QoMCwwLDEsMSk7dmFyIFI9VC50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTtrLmNyZWF0ZVBhdHRlcm4oUiwibm8tcmVwZWF0Iil9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9KCk7ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBjKFQpe3ZhciBrPW4uZXhwb3J0cy5Qcm9taXNlLFI9ayE9PXZvaWQgMD9rOnQuUHJvbWlzZTtyZXR1cm4gdHlwZW9mIFI9PSJmdW5jdGlvbiI/bmV3IFIoVCk6KFQobCxsKSxudWxsKX12YXIgdT1mdW5jdGlvbihULGspe3JldHVybnt0cmFuc2Zvcm06ZnVuY3Rpb24oUil7aWYoVClyZXR1cm4gUjtpZihrLmhhcyhSKSlyZXR1cm4gay5nZXQoUik7dmFyICQ9bmV3IE9mZnNjcmVlbkNhbnZhcyhSLndpZHRoLFIuaGVpZ2h0KSxYPSQuZ2V0Q29udGV4dCgiMmQiKTtyZXR1cm4gWC5kcmF3SW1hZ2UoUiwwLDApLGsuc2V0KFIsJCksJH0sY2xlYXI6ZnVuY3Rpb24oKXtrLmNsZWFyKCl9fX0ocyxuZXcgTWFwKSxwPWZ1bmN0aW9uKCl7dmFyIFQ9TWF0aC5mbG9vcigxNi42NjY2NjY2NjY2NjY2NjgpLGssUiwkPXt9LFg9MDtyZXR1cm4gdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lPT0iZnVuY3Rpb24iPyhrPWZ1bmN0aW9uKFope3ZhciBlZT1NYXRoLnJhbmRvbSgpO3JldHVybiAkW2VlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gcShvZSl7WD09PW9lfHxYK1QtMTxvZT8oWD1vZSxkZWxldGUgJFtlZV0sWigpKTokW2VlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocSl9KSxlZX0sUj1mdW5jdGlvbihaKXskW1pdJiZjYW5jZWxBbmltYXRpb25GcmFtZSgkW1pdKX0pOihrPWZ1bmN0aW9uKFope3JldHVybiBzZXRUaW1lb3V0KFosVCl9LFI9ZnVuY3Rpb24oWil7cmV0dXJuIGNsZWFyVGltZW91dChaKX0pLHtmcmFtZTprLGNhbmNlbDpSfX0oKSxkPWZ1bmN0aW9uKCl7dmFyIFQsayxSPXt9O2Z1bmN0aW9uICQoWCl7ZnVuY3Rpb24gWihlZSxxKXtYLnBvc3RNZXNzYWdlKHtvcHRpb25zOmVlfHx7fSxjYWxsYmFjazpxfSl9WC5pbml0PWZ1bmN0aW9uKHEpe3ZhciBvZT1xLnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKCk7WC5wb3N0TWVzc2FnZSh7Y2FudmFzOm9lfSxbb2VdKX0sWC5maXJlPWZ1bmN0aW9uKHEsb2UscGUpe2lmKGspcmV0dXJuIFoocSxudWxsKSxrO3ZhciBnZT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtyZXR1cm4gaz1jKGZ1bmN0aW9uKHRlKXtmdW5jdGlvbiBzZSh1ZSl7dWUuZGF0YS5jYWxsYmFjaz09PWdlJiYoZGVsZXRlIFJbZ2VdLFgucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsc2UpLGs9bnVsbCx1LmNsZWFyKCkscGUoKSx0ZSgpKX1YLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHNlKSxaKHEsZ2UpLFJbZ2VdPXNlLmJpbmQobnVsbCx7ZGF0YTp7Y2FsbGJhY2s6Z2V9fSl9KSxrfSxYLnJlc2V0PWZ1bmN0aW9uKCl7WC5wb3N0TWVzc2FnZSh7cmVzZXQ6ITB9KTtmb3IodmFyIHEgaW4gUilSW3FdKCksZGVsZXRlIFJbcV19fXJldHVybiBmdW5jdGlvbigpe2lmKFQpcmV0dXJuIFQ7aWYoIXImJmEpe3ZhciBYPVsidmFyIENPTkZFVFRJLCBTSVpFID0ge30sIG1vZHVsZSA9IHt9OyIsIigiK2UudG9TdHJpbmcoKSsiKSh0aGlzLCBtb2R1bGUsIHRydWUsIFNJWkUpOyIsIm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1zZykgeyIsIiAgaWYgKG1zZy5kYXRhLm9wdGlvbnMpIHsiLCIgICAgQ09ORkVUVEkobXNnLmRhdGEub3B0aW9ucykudGhlbihmdW5jdGlvbiAoKSB7IiwiICAgICAgaWYgKG1zZy5kYXRhLmNhbGxiYWNrKSB7IiwiICAgICAgICBwb3N0TWVzc2FnZSh7IGNhbGxiYWNrOiBtc2cuZGF0YS5jYWxsYmFjayB9KTsiLCIgICAgICB9IiwiICAgIH0pOyIsIiAgfSBlbHNlIGlmIChtc2cuZGF0YS5yZXNldCkgeyIsIiAgICBDT05GRVRUSSAmJiBDT05GRVRUSS5yZXNldCgpOyIsIiAgfSBlbHNlIGlmIChtc2cuZGF0YS5yZXNpemUpIHsiLCIgICAgU0laRS53aWR0aCA9IG1zZy5kYXRhLnJlc2l6ZS53aWR0aDsiLCIgICAgU0laRS5oZWlnaHQgPSBtc2cuZGF0YS5yZXNpemUuaGVpZ2h0OyIsIiAgfSBlbHNlIGlmIChtc2cuZGF0YS5jYW52YXMpIHsiLCIgICAgU0laRS53aWR0aCA9IG1zZy5kYXRhLmNhbnZhcy53aWR0aDsiLCIgICAgU0laRS5oZWlnaHQgPSBtc2cuZGF0YS5jYW52YXMuaGVpZ2h0OyIsIiAgICBDT05GRVRUSSA9IG1vZHVsZS5leHBvcnRzLmNyZWF0ZShtc2cuZGF0YS5jYW52YXMpOyIsIiAgfSIsIn0iXS5qb2luKGAKYCk7dHJ5e1Q9bmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtYXSkpKX1jYXRjaChaKXtyZXR1cm4gdHlwZW9mIGNvbnNvbGU8InUiJiZ0eXBlb2YgY29uc29sZS53YXJuPT0iZnVuY3Rpb24iJiZjb25zb2xlLndhcm4oIlx1ezFGMzhBfSBDb3VsZCBub3QgbG9hZCB3b3JrZXIiLFopLG51bGx9JChUKX1yZXR1cm4gVH19KCksaD17cGFydGljbGVDb3VudDo1MCxhbmdsZTo5MCxzcHJlYWQ6NDUsc3RhcnRWZWxvY2l0eTo0NSxkZWNheTouOSxncmF2aXR5OjEsZHJpZnQ6MCx0aWNrczoyMDAseDouNSx5Oi41LHNoYXBlczpbInNxdWFyZSIsImNpcmNsZSJdLHpJbmRleDoxMDAsY29sb3JzOlsiIzI2Y2NmZiIsIiNhMjVhZmQiLCIjZmY1ZTdlIiwiIzg4ZmY1YSIsIiNmY2ZmNDIiLCIjZmZhNjJkIiwiI2ZmMzZmZiJdLGRpc2FibGVGb3JSZWR1Y2VkTW90aW9uOiExLHNjYWxhcjoxfTtmdW5jdGlvbiB5KFQsayl7cmV0dXJuIGs/ayhUKTpUfWZ1bmN0aW9uIHcoVCl7cmV0dXJuIFQhPW51bGx9ZnVuY3Rpb24gYihULGssUil7cmV0dXJuIHkoVCYmdyhUW2tdKT9UW2tdOmhba10sUil9ZnVuY3Rpb24gZyhUKXtyZXR1cm4gVDwwPzA6TWF0aC5mbG9vcihUKX1mdW5jdGlvbiBtKFQsayl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooay1UKSkrVH1mdW5jdGlvbiB2KFQpe3JldHVybiBwYXJzZUludChULDE2KX1mdW5jdGlvbiBmKFQpe3JldHVybiBULm1hcCh4KX1mdW5jdGlvbiB4KFQpe3ZhciBrPVN0cmluZyhUKS5yZXBsYWNlKC9bXjAtOWEtZl0vZ2ksIiIpO3JldHVybiBrLmxlbmd0aDw2JiYoaz1rWzBdK2tbMF0ra1sxXStrWzFdK2tbMl0ra1syXSkse3I6dihrLnN1YnN0cmluZygwLDIpKSxnOnYoay5zdWJzdHJpbmcoMiw0KSksYjp2KGsuc3Vic3RyaW5nKDQsNikpfX1mdW5jdGlvbiBTKFQpe3ZhciBrPWIoVCwib3JpZ2luIixPYmplY3QpO3JldHVybiBrLng9YihrLCJ4IixOdW1iZXIpLGsueT1iKGssInkiLE51bWJlciksa31mdW5jdGlvbiBOKFQpe1Qud2lkdGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLFQuaGVpZ2h0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR9ZnVuY3Rpb24gRChUKXt2YXIgaz1ULmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1Qud2lkdGg9ay53aWR0aCxULmhlaWdodD1rLmhlaWdodH1mdW5jdGlvbiBfKFQpe3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBrLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsay5zdHlsZS50b3A9IjBweCIsay5zdHlsZS5sZWZ0PSIwcHgiLGsuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsay5zdHlsZS56SW5kZXg9VCxrfWZ1bmN0aW9uIEEoVCxrLFIsJCxYLFosZWUscSxvZSl7VC5zYXZlKCksVC50cmFuc2xhdGUoayxSKSxULnJvdGF0ZShaKSxULnNjYWxlKCQsWCksVC5hcmMoMCwwLDEsZWUscSxvZSksVC5yZXN0b3JlKCl9ZnVuY3Rpb24gUChUKXt2YXIgaz1ULmFuZ2xlKihNYXRoLlBJLzE4MCksUj1ULnNwcmVhZCooTWF0aC5QSS8xODApO3JldHVybnt4OlQueCx5OlQueSx3b2JibGU6TWF0aC5yYW5kb20oKSoxMCx3b2JibGVTcGVlZDpNYXRoLm1pbiguMTEsTWF0aC5yYW5kb20oKSouMSsuMDUpLHZlbG9jaXR5OlQuc3RhcnRWZWxvY2l0eSouNStNYXRoLnJhbmRvbSgpKlQuc3RhcnRWZWxvY2l0eSxhbmdsZTJEOi1rKyguNSpSLU1hdGgucmFuZG9tKCkqUiksdGlsdEFuZ2xlOihNYXRoLnJhbmRvbSgpKiguNzUtLjI1KSsuMjUpKk1hdGguUEksY29sb3I6VC5jb2xvcixzaGFwZTpULnNoYXBlLHRpY2s6MCx0b3RhbFRpY2tzOlQudGlja3MsZGVjYXk6VC5kZWNheSxkcmlmdDpULmRyaWZ0LHJhbmRvbTpNYXRoLnJhbmRvbSgpKzIsdGlsdFNpbjowLHRpbHRDb3M6MCx3b2JibGVYOjAsd29iYmxlWTowLGdyYXZpdHk6VC5ncmF2aXR5KjMsb3ZhbFNjYWxhcjouNixzY2FsYXI6VC5zY2FsYXIsZmxhdDpULmZsYXR9fWZ1bmN0aW9uIEkoVCxrKXtrLngrPU1hdGguY29zKGsuYW5nbGUyRCkqay52ZWxvY2l0eStrLmRyaWZ0LGsueSs9TWF0aC5zaW4oay5hbmdsZTJEKSprLnZlbG9jaXR5K2suZ3Jhdml0eSxrLnZlbG9jaXR5Kj1rLmRlY2F5LGsuZmxhdD8oay53b2JibGU9MCxrLndvYmJsZVg9ay54KzEwKmsuc2NhbGFyLGsud29iYmxlWT1rLnkrMTAqay5zY2FsYXIsay50aWx0U2luPTAsay50aWx0Q29zPTAsay5yYW5kb209MSk6KGsud29iYmxlKz1rLndvYmJsZVNwZWVkLGsud29iYmxlWD1rLngrMTAqay5zY2FsYXIqTWF0aC5jb3Moay53b2JibGUpLGsud29iYmxlWT1rLnkrMTAqay5zY2FsYXIqTWF0aC5zaW4oay53b2JibGUpLGsudGlsdEFuZ2xlKz0uMSxrLnRpbHRTaW49TWF0aC5zaW4oay50aWx0QW5nbGUpLGsudGlsdENvcz1NYXRoLmNvcyhrLnRpbHRBbmdsZSksay5yYW5kb209TWF0aC5yYW5kb20oKSsyKTt2YXIgUj1rLnRpY2srKy9rLnRvdGFsVGlja3MsJD1rLngray5yYW5kb20qay50aWx0Q29zLFg9ay55K2sucmFuZG9tKmsudGlsdFNpbixaPWsud29iYmxlWCtrLnJhbmRvbSprLnRpbHRDb3MsZWU9ay53b2JibGVZK2sucmFuZG9tKmsudGlsdFNpbjtpZihULmZpbGxTdHlsZT0icmdiYSgiK2suY29sb3IucisiLCAiK2suY29sb3IuZysiLCAiK2suY29sb3IuYisiLCAiKygxLVIpKyIpIixULmJlZ2luUGF0aCgpLGkmJmsuc2hhcGUudHlwZT09PSJwYXRoIiYmdHlwZW9mIGsuc2hhcGUucGF0aD09InN0cmluZyImJkFycmF5LmlzQXJyYXkoay5zaGFwZS5tYXRyaXgpKVQuZmlsbChpZShrLnNoYXBlLnBhdGgsay5zaGFwZS5tYXRyaXgsay54LGsueSxNYXRoLmFicyhaLSQpKi4xLE1hdGguYWJzKGVlLVgpKi4xLE1hdGguUEkvMTAqay53b2JibGUpKTtlbHNlIGlmKGsuc2hhcGUudHlwZT09PSJiaXRtYXAiKXt2YXIgcT1NYXRoLlBJLzEwKmsud29iYmxlLG9lPU1hdGguYWJzKFotJCkqLjEscGU9TWF0aC5hYnMoZWUtWCkqLjEsZ2U9ay5zaGFwZS5iaXRtYXAud2lkdGgqay5zY2FsYXIsdGU9ay5zaGFwZS5iaXRtYXAuaGVpZ2h0Kmsuc2NhbGFyLHNlPW5ldyBET01NYXRyaXgoW01hdGguY29zKHEpKm9lLE1hdGguc2luKHEpKm9lLC1NYXRoLnNpbihxKSpwZSxNYXRoLmNvcyhxKSpwZSxrLngsay55XSk7c2UubXVsdGlwbHlTZWxmKG5ldyBET01NYXRyaXgoay5zaGFwZS5tYXRyaXgpKTt2YXIgdWU9VC5jcmVhdGVQYXR0ZXJuKHUudHJhbnNmb3JtKGsuc2hhcGUuYml0bWFwKSwibm8tcmVwZWF0Iik7dWUuc2V0VHJhbnNmb3JtKHNlKSxULmdsb2JhbEFscGhhPTEtUixULmZpbGxTdHlsZT11ZSxULmZpbGxSZWN0KGsueC1nZS8yLGsueS10ZS8yLGdlLHRlKSxULmdsb2JhbEFscGhhPTF9ZWxzZSBpZihrLnNoYXBlPT09ImNpcmNsZSIpVC5lbGxpcHNlP1QuZWxsaXBzZShrLngsay55LE1hdGguYWJzKFotJCkqay5vdmFsU2NhbGFyLE1hdGguYWJzKGVlLVgpKmsub3ZhbFNjYWxhcixNYXRoLlBJLzEwKmsud29iYmxlLDAsMipNYXRoLlBJKTpBKFQsay54LGsueSxNYXRoLmFicyhaLSQpKmsub3ZhbFNjYWxhcixNYXRoLmFicyhlZS1YKSprLm92YWxTY2FsYXIsTWF0aC5QSS8xMCprLndvYmJsZSwwLDIqTWF0aC5QSSk7ZWxzZSBpZihrLnNoYXBlPT09InN0YXIiKWZvcih2YXIgbmU9TWF0aC5QSS8yKjMsQWU9NCprLnNjYWxhcixYZT04Kmsuc2NhbGFyLFplPWsueCx5dD1rLnksUHQ9NSxVZT1NYXRoLlBJL1B0O1B0LS07KVplPWsueCtNYXRoLmNvcyhuZSkqWGUseXQ9ay55K01hdGguc2luKG5lKSpYZSxULmxpbmVUbyhaZSx5dCksbmUrPVVlLFplPWsueCtNYXRoLmNvcyhuZSkqQWUseXQ9ay55K01hdGguc2luKG5lKSpBZSxULmxpbmVUbyhaZSx5dCksbmUrPVVlO2Vsc2UgVC5tb3ZlVG8oTWF0aC5mbG9vcihrLngpLE1hdGguZmxvb3Ioay55KSksVC5saW5lVG8oTWF0aC5mbG9vcihrLndvYmJsZVgpLE1hdGguZmxvb3IoWCkpLFQubGluZVRvKE1hdGguZmxvb3IoWiksTWF0aC5mbG9vcihlZSkpLFQubGluZVRvKE1hdGguZmxvb3IoJCksTWF0aC5mbG9vcihrLndvYmJsZVkpKTtyZXR1cm4gVC5jbG9zZVBhdGgoKSxULmZpbGwoKSxrLnRpY2s8ay50b3RhbFRpY2tzfWZ1bmN0aW9uIEwoVCxrLFIsJCxYKXt2YXIgWj1rLnNsaWNlKCksZWU9VC5nZXRDb250ZXh0KCIyZCIpLHEsb2UscGU9YyhmdW5jdGlvbihnZSl7ZnVuY3Rpb24gdGUoKXtxPW9lPW51bGwsZWUuY2xlYXJSZWN0KDAsMCwkLndpZHRoLCQuaGVpZ2h0KSx1LmNsZWFyKCksWCgpLGdlKCl9ZnVuY3Rpb24gc2UoKXtyJiYhKCQud2lkdGg9PT1vLndpZHRoJiYkLmhlaWdodD09PW8uaGVpZ2h0KSYmKCQud2lkdGg9VC53aWR0aD1vLndpZHRoLCQuaGVpZ2h0PVQuaGVpZ2h0PW8uaGVpZ2h0KSwhJC53aWR0aCYmISQuaGVpZ2h0JiYoUihUKSwkLndpZHRoPVQud2lkdGgsJC5oZWlnaHQ9VC5oZWlnaHQpLGVlLmNsZWFyUmVjdCgwLDAsJC53aWR0aCwkLmhlaWdodCksWj1aLmZpbHRlcihmdW5jdGlvbih1ZSl7cmV0dXJuIEkoZWUsdWUpfSksWi5sZW5ndGg/cT1wLmZyYW1lKHNlKTp0ZSgpfXE9cC5mcmFtZShzZSksb2U9dGV9KTtyZXR1cm57YWRkRmV0dGlzOmZ1bmN0aW9uKGdlKXtyZXR1cm4gWj1aLmNvbmNhdChnZSkscGV9LGNhbnZhczpULHByb21pc2U6cGUscmVzZXQ6ZnVuY3Rpb24oKXtxJiZwLmNhbmNlbChxKSxvZSYmb2UoKX19fWZ1bmN0aW9uIFUoVCxrKXt2YXIgUj0hVCwkPSEhYihrfHx7fSwicmVzaXplIiksWD0hMSxaPWIoaywiZGlzYWJsZUZvclJlZHVjZWRNb3Rpb24iLEJvb2xlYW4pLGVlPWEmJiEhYihrfHx7fSwidXNlV29ya2VyIikscT1lZT9kKCk6bnVsbCxvZT1SP046RCxwZT1UJiZxPyEhVC5fX2NvbmZldHRpX2luaXRpYWxpemVkOiExLGdlPXR5cGVvZiBtYXRjaE1lZGlhPT0iZnVuY3Rpb24iJiZtYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbikiKS5tYXRjaGVzLHRlO2Z1bmN0aW9uIHNlKG5lLEFlLFhlKXtmb3IodmFyIFplPWIobmUsInBhcnRpY2xlQ291bnQiLGcpLHl0PWIobmUsImFuZ2xlIixOdW1iZXIpLFB0PWIobmUsInNwcmVhZCIsTnVtYmVyKSxVZT1iKG5lLCJzdGFydFZlbG9jaXR5IixOdW1iZXIpLEV0PWIobmUsImRlY2F5IixOdW1iZXIpLExuPWIobmUsImdyYXZpdHkiLE51bWJlciksZ249YihuZSwiZHJpZnQiLE51bWJlcikseW49YihuZSwiY29sb3JzIixmKSx3cj1iKG5lLCJ0aWNrcyIsTnVtYmVyKSx6bj1iKG5lLCJzaGFwZXMiKSxmZT1iKG5lLCJzY2FsYXIiKSxPZT0hIWIobmUsImZsYXQiKSx2dD1TKG5lKSxlbj1aZSx2bj1bXSxYcj1ULndpZHRoKnZ0LngsUG89VC5oZWlnaHQqdnQueTtlbi0tOyl2bi5wdXNoKFAoe3g6WHIseTpQbyxhbmdsZTp5dCxzcHJlYWQ6UHQsc3RhcnRWZWxvY2l0eTpVZSxjb2xvcjp5bltlbiV5bi5sZW5ndGhdLHNoYXBlOnpuW20oMCx6bi5sZW5ndGgpXSx0aWNrczp3cixkZWNheTpFdCxncmF2aXR5OkxuLGRyaWZ0OmduLHNjYWxhcjpmZSxmbGF0Ok9lfSkpO3JldHVybiB0ZT90ZS5hZGRGZXR0aXModm4pOih0ZT1MKFQsdm4sb2UsQWUsWGUpLHRlLnByb21pc2UpfWZ1bmN0aW9uIHVlKG5lKXt2YXIgQWU9Wnx8YihuZSwiZGlzYWJsZUZvclJlZHVjZWRNb3Rpb24iLEJvb2xlYW4pLFhlPWIobmUsInpJbmRleCIsTnVtYmVyKTtpZihBZSYmZ2UpcmV0dXJuIGMoZnVuY3Rpb24oVWUpe1VlKCl9KTtSJiZ0ZT9UPXRlLmNhbnZhczpSJiYhVCYmKFQ9XyhYZSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChUKSksJCYmIXBlJiZvZShUKTt2YXIgWmU9e3dpZHRoOlQud2lkdGgsaGVpZ2h0OlQuaGVpZ2h0fTtxJiYhcGUmJnEuaW5pdChUKSxwZT0hMCxxJiYoVC5fX2NvbmZldHRpX2luaXRpYWxpemVkPSEwKTtmdW5jdGlvbiB5dCgpe2lmKHEpe3ZhciBVZT17Z2V0Qm91bmRpbmdDbGllbnRSZWN0OmZ1bmN0aW9uKCl7aWYoIVIpcmV0dXJuIFQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9fTtvZShVZSkscS5wb3N0TWVzc2FnZSh7cmVzaXplOnt3aWR0aDpVZS53aWR0aCxoZWlnaHQ6VWUuaGVpZ2h0fX0pO3JldHVybn1aZS53aWR0aD1aZS5oZWlnaHQ9bnVsbH1mdW5jdGlvbiBQdCgpe3RlPW51bGwsJCYmKFg9ITEsdC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHl0KSksUiYmVCYmKGRvY3VtZW50LmJvZHkuY29udGFpbnMoVCkmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoVCksVD1udWxsLHBlPSExKX1yZXR1cm4gJCYmIVgmJihYPSEwLHQuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix5dCwhMSkpLHE/cS5maXJlKG5lLFplLFB0KTpzZShuZSxaZSxQdCl9cmV0dXJuIHVlLnJlc2V0PWZ1bmN0aW9uKCl7cSYmcS5yZXNldCgpLHRlJiZ0ZS5yZXNldCgpfSx1ZX12YXIgRjtmdW5jdGlvbiBIKCl7cmV0dXJuIEZ8fChGPVUobnVsbCx7dXNlV29ya2VyOiEwLHJlc2l6ZTohMH0pKSxGfWZ1bmN0aW9uIGllKFQsayxSLCQsWCxaLGVlKXt2YXIgcT1uZXcgUGF0aDJEKFQpLG9lPW5ldyBQYXRoMkQ7b2UuYWRkUGF0aChxLG5ldyBET01NYXRyaXgoaykpO3ZhciBwZT1uZXcgUGF0aDJEO3JldHVybiBwZS5hZGRQYXRoKG9lLG5ldyBET01NYXRyaXgoW01hdGguY29zKGVlKSpYLE1hdGguc2luKGVlKSpYLC1NYXRoLnNpbihlZSkqWixNYXRoLmNvcyhlZSkqWixSLCRdKSkscGV9ZnVuY3Rpb24gTyhUKXtpZighaSl0aHJvdyBuZXcgRXJyb3IoInBhdGggY29uZmV0dGkgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyIik7dmFyIGssUjt0eXBlb2YgVD09InN0cmluZyI/az1UOihrPVQucGF0aCxSPVQubWF0cml4KTt2YXIgJD1uZXcgUGF0aDJEKGspLFg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksWj1YLmdldENvbnRleHQoIjJkIik7aWYoIVIpe2Zvcih2YXIgZWU9MWUzLHE9ZWUsb2U9ZWUscGU9MCxnZT0wLHRlLHNlLHVlPTA7dWU8ZWU7dWUrPTIpZm9yKHZhciBuZT0wO25lPGVlO25lKz0yKVouaXNQb2ludEluUGF0aCgkLHVlLG5lLCJub256ZXJvIikmJihxPU1hdGgubWluKHEsdWUpLG9lPU1hdGgubWluKG9lLG5lKSxwZT1NYXRoLm1heChwZSx1ZSksZ2U9TWF0aC5tYXgoZ2UsbmUpKTt0ZT1wZS1xLHNlPWdlLW9lO3ZhciBBZT0xMCxYZT1NYXRoLm1pbihBZS90ZSxBZS9zZSk7Uj1bWGUsMCwwLFhlLC1NYXRoLnJvdW5kKHRlLzIrcSkqWGUsLU1hdGgucm91bmQoc2UvMitvZSkqWGVdfXJldHVybnt0eXBlOiJwYXRoIixwYXRoOmssbWF0cml4OlJ9fWZ1bmN0aW9uIEcoVCl7dmFyIGssUj0xLCQ9IiMwMDAwMDAiLFg9JyJBcHBsZSBDb2xvciBFbW9qaSIsICJTZWdvZSBVSSBFbW9qaSIsICJTZWdvZSBVSSBTeW1ib2wiLCAiTm90byBDb2xvciBFbW9qaSIsICJFbW9qaU9uZSBDb2xvciIsICJBbmRyb2lkIEVtb2ppIiwgIlR3ZW1vamkgTW96aWxsYSIsICJzeXN0ZW0gZW1vamkiLCBzYW5zLXNlcmlmJzt0eXBlb2YgVD09InN0cmluZyI/az1UOihrPVQudGV4dCxSPSJzY2FsYXIiaW4gVD9ULnNjYWxhcjpSLFg9ImZvbnRGYW1pbHkiaW4gVD9ULmZvbnRGYW1pbHk6WCwkPSJjb2xvciJpbiBUP1QuY29sb3I6JCk7dmFyIFo9MTAqUixlZT0iIitaKyJweCAiK1gscT1uZXcgT2Zmc2NyZWVuQ2FudmFzKFosWiksb2U9cS5nZXRDb250ZXh0KCIyZCIpO29lLmZvbnQ9ZWU7dmFyIHBlPW9lLm1lYXN1cmVUZXh0KGspLGdlPU1hdGguY2VpbChwZS5hY3R1YWxCb3VuZGluZ0JveFJpZ2h0K3BlLmFjdHVhbEJvdW5kaW5nQm94TGVmdCksdGU9TWF0aC5jZWlsKHBlLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50K3BlLmFjdHVhbEJvdW5kaW5nQm94RGVzY2VudCksc2U9Mix1ZT1wZS5hY3R1YWxCb3VuZGluZ0JveExlZnQrc2UsbmU9cGUuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQrc2U7Z2UrPXNlK3NlLHRlKz1zZStzZSxxPW5ldyBPZmZzY3JlZW5DYW52YXMoZ2UsdGUpLG9lPXEuZ2V0Q29udGV4dCgiMmQiKSxvZS5mb250PWVlLG9lLmZpbGxTdHlsZT0kLG9lLmZpbGxUZXh0KGssdWUsbmUpO3ZhciBBZT0xL1I7cmV0dXJue3R5cGU6ImJpdG1hcCIsYml0bWFwOnEudHJhbnNmZXJUb0ltYWdlQml0bWFwKCksbWF0cml4OltBZSwwLDAsQWUsLWdlKkFlLzIsLXRlKkFlLzJdfX1uLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gSCgpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sbi5leHBvcnRzLnJlc2V0PWZ1bmN0aW9uKCl7SCgpLnJlc2V0KCl9LG4uZXhwb3J0cy5jcmVhdGU9VSxuLmV4cG9ydHMuc2hhcGVGcm9tUGF0aD1PLG4uZXhwb3J0cy5zaGFwZUZyb21UZXh0PUd9KShmdW5jdGlvbigpe3JldHVybiB0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpc3x8e319KCksWXAsITEpO3ZhciBuYz1ZcC5leHBvcnRzLEJQPVlwLmV4cG9ydHMuY3JlYXRlO3ZhciByYz0iQW1wbGUgQWdlbnQgUHJvIixxcD0iWHJ4aEdXUGJibWdTQko2ZlNDVm5zNTdrIjtmdW5jdGlvbiBvYygpe2xldCBlPUhlKClbSy5MTE1fUFJPVklERVJfTU9ERUxdO2lmKCFlfHxlPT09Im5vbmUiKXJldHVybltdO2xldCB0PVdyKGUpfHxlLG49VnBbdF07aWYoIW58fG4ubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgcj1nclt0XTtyZXR1cm4gcj9bciwuLi5uLmZpbHRlcihvPT5vIT09cildOlsuLi5uXX1mdW5jdGlvbiBDdyhlLHQpe2xldCBuPUhlKCkscj1XdCh0KTtpZihyJiZuW3JdKXJldHVybiBuW3JdLnRyaW0oKTtsZXQgbz1uWyJMTE0gQVBJIEtleSJdO2lmKG8pcmV0dXJuIG8udHJpbSgpO2lmKGZ5KXRocm93IG5ldyBFcnJvcihgQ291bGRudCBmaW5kIGEgJHt0fSBrZXkgaW4gJHtKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhuKSl9YCk7cmV0dXJuIGUuYWxlcnQoIlBsZWFzZSBjb25maWd1cmUgeW91ciBBUEkga2V5IGluIHBsdWdpbiBzZXR0aW5ncy4iKSxudWxsfWZ1bmN0aW9uIEF3KGUsdCl7bGV0IG49anIoZSkscj1HcFtuXTtyZXR1cm4gcj1yLnJlcGxhY2UoInttb2RlbC1uYW1lfSIsZSksbj09PSJnZW1pbmkiJiYocj1gJHtyfT9rZXk9JHt0fWApLHJ9ZnVuY3Rpb24ganIoZSl7Zm9yKGxldFt0LG5db2YgT2JqZWN0LmVudHJpZXMoVnApKWlmKG4uaW5jbHVkZXMoZSkpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKGBNb2RlbCAke2V9IG5vdCBmb3VuZCBpbiBhbnkgcHJvdmlkZXJgKX1mdW5jdGlvbiBLcihlKXtyZXR1cm57YW50aHJvcGljOiJBbnRocm9waWMiLGRlZXBzZWVrOiJEZWVwU2VlayIsZ2VtaW5pOiJHZW1pbmkiLGdyb2s6Ikdyb2siLG9wZW5haToiT3BlbkFJIixwZXJwbGV4aXR5OiJQZXJwbGV4aXR5In1bZV18fGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX1mdW5jdGlvbiBPdyhlKXtsZXQgdCxuPWUudHJpbSgpLHI9bi5pbmRleE9mKCJbIiksbz1uLmluZGV4T2YoInsiKSxhPW4uaW5jbHVkZXMoIn0iKSxpPW4uaW5jbHVkZXMoIl0iKSxzPSExLGw9LTE7YSYmbz09PS0xJiYoZT1geyR7ZX1gLG89MCksaSYmcj09PS0xJiYoZT1gWyR7ZX1gLHI9MCkscj1lLmluZGV4T2YoIlsiKSxvPWUuaW5kZXhPZigieyIpLHIhPT0tMSYmKG89PT0tMXx8cjxvKT8ocz0hMCxsPXIpOm8hPT0tMT8ocz0hMSxsPW8pOihlPWB7JHtlfX1gLGw9MCxzPSExKTtsZXQgYz1zPyJdIjoifSIsdT1lLmxhc3RJbmRleE9mKGMpO2lmKHU9PT0tMSl7ZVtlLmxlbmd0aC0xXT09PSIsIiYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0xKSk7bGV0IHA9ZS5pbmNsdWRlcygiWyIpJiYhZS5pbmNsdWRlcygiXSIpLGQ9ZS5pbmNsdWRlcygieyIpJiYhZS5pbmNsdWRlcygifSIpO3AmJmQ/ZSs9In1dIjpwP2UrPSJdIjpkP2UrPSJ9IjplPXM/YCR7ZX1dYDpgJHtlfX1gfWVsc2UgZT1lLnN1YnN0cmluZyhsLHUrMSk7dHJ5e3JldHVybiB0PUpTT04ucGFyc2UoZSksdH1jYXRjaChwKXtsZXQgZD1lO2U9akUoZSksRShgRmFpbGVkIHRvIHBhcnNlIGpzb25UZXh0IFNUQVJUOgoke2R9CkVORAogZHVlIHRvICR7cH0uIEF0dGVtcHRlZCByZWJhbGFuY2UgeWllbGRlZDogJHtlfSAob3JpZ2luYWwgc2l6ZSAke2QubGVuZ3RofHwiKG51bGwpIn0sIHJlYmFsYW5jZSBzaXplICR7ZT8ubGVuZ3RofHwiKDApIn0pYCk7dHJ5e3JldHVybiB0PUpTT04ucGFyc2UoZSksdH1jYXRjaCh5KXtFKCJSZWJhbGFuY2VkIGpzb25UZXh0IHN0aWxsIGZhaWxzIix5KX1sZXQgaD1lLnJlcGxhY2UoLyIiIi9nLCciXFwiIicpLnJlcGxhY2UoLyJcbi9nLCciXFxuJyk7aWYoaD1oLnJlcGxhY2UoLyhbeyxdXHMqKShbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopIjovZywnJDEiJDIiOicpLGg9aC5yZXBsYWNlKC9cblxzKlsn4oCc4oCdXS9nLGAKImApLnJlcGxhY2UoL1sn4oCc4oCdXSxccypcbi9nLGAiLApgKS5yZXBsYWNlKC9bJ+KAnOKAnV1ccyooW1xuXF1dKS8sJyIkMScpLGghPT1lKXRyeXtyZXR1cm4gdD1KU09OLnBhcnNlKGgpLHR9Y2F0Y2goeSl7RSgiUmVmb3JtYXR0ZWQgdGV4dCBzdGlsbCBmYWlscyIseSl9fXJldHVybiBudWxsfWZ1bmN0aW9uIGpFKGUpe2xldCB0PWUuaW5kZXhPZigieyIpO2lmKHQ9PT0tMSlyZXR1cm4gbnVsbDtsZXQgbj1lLnN1YnN0cmluZyh0KS50cmltKCkscj1bXSxvPSIiO2ZvcihsZXQgYSBvZiBuKWlmKG8rPWEsYT09PSJ7Ij9yLnB1c2goIn0iKTphPT09In0iP3Jbci5sZW5ndGgtMV09PT0ifSImJnIucG9wKCk6YT09PSJbIj9yLnB1c2goIl0iKTphPT09Il0iJiZyW3IubGVuZ3RoLTFdPT09Il0iJiZyLnBvcCgpLHIubGVuZ3RoPT09MClicmVhaztyZXR1cm4gci5sZW5ndGgmJihFKCJGb3VuZCIsci5sZW5ndGgsImNoYXJhY3RlcnMgdG8gYXBwZW5kIHRvIGJhbGFuY2UiLG8sIi4gQWRkaW5nICIsci5yZXZlcnNlKCkuam9pbigiIikpLG8rPXIucmV2ZXJzZSgpLmpvaW4oIiIpKSxvfXZhciBJdz0yO2Z1bmN0aW9uIGFjKGUpe2xldCB0PWUudHJpbSgpO3QuaW5kZXhPZigieyIpPT09LTEmJih0PSJ7Iit0KTtsZXQgcjt0LnNwbGl0KCJ9eyIpLmxlbmd0aD4xPyhyPXQuc3BsaXQoIn17IikubWFwKGk9PmAke2lbMF09PT0ieyI/IiI6InsifSR7aX0ke2lbaS5sZW5ndGgtMV09PT0ifSI/IiI6In0ifWApLEUoIlJlY2VpdmVkIG11bHRpcGxlIHJlc3BvbnNlcyBmcm9tIEFJLCBldmFsdWF0aW5nIGVhY2ggb2YiLHIpKTpyPVt0XTtsZXQgYT1yLm1hcChpPT5PdyhpKSkuZmlsdGVyKGk9PmkpO2lmKGEubGVuZ3RoKWlmKGEubGVuZ3RoPjEpe2xldCBpPWFbMF07cmV0dXJuIE9iamVjdC5lbnRyaWVzKGkpLmZvckVhY2goKFtzLGxdKT0+e2ZvcihsZXQgYyBvZiBhLnNsaWNlKDEpKXtsZXQgdT1jW3NdO3UmJkFycmF5LmlzQXJyYXkodSkmJkFycmF5LmlzQXJyYXkobCkmJihpW3NdPVsuLi5uZXcgU2V0KFsuLi5sLC4uLnVdKV0uZmlsdGVyKHA9PnApKX19KSxpfWVsc2UgcmV0dXJuIGFbMF07cmV0dXJuIG51bGx9ZnVuY3Rpb24gS0UoZSx0KXtsZXQgbjtzd2l0Y2goZSl7Y2FzZSJhbnRocm9waWMiOm49dD8uY29udGVudD8uYXQoMCk/LnRleHQ7YnJlYWs7Y2FzZSJnZW1pbmkiOm49dD8uY2FuZGlkYXRlcz8uYXQoMCk/LmNvbnRlbnQ/LnBhcnRzPy5hdCgwKT8udGV4dDticmVhaztjYXNlIm9sbGFtYSI6bj10Py5tZXNzYWdlPy5jb250ZW50fHx0Py5yZXNwb25zZTticmVhaztjYXNlImRlZXBzZWVrIjpjYXNlImdyb2siOmNhc2Uib3BlbmFpIjpjYXNlInBlcnBsZXhpdHkiOmRlZmF1bHQ6bj10Py5jaG9pY2VzPy5hdCgwKT8ubWVzc2FnZT8uY29udGVudHx8dD8uY2hvaWNlcz8uYXQoMCk/Lm1lc3NhZ2U/LnRvb2xfY2FsbHM/LmF0KDApPy5mdW5jdGlvbj8uYXJndW1lbnRzO2JyZWFrfXJldHVybiBufHxFKGBDb3VsZCBub3QgZXh0cmFjdCBjb250ZW50IGZyb20gJHtlfSByZXNwb25zZTpgLEpTT04uc3RyaW5naWZ5KHQsbnVsbCwyKSksbnx8bnVsbH1hc3luYyBmdW5jdGlvbiBSdyhlLHQsbixyLG8sYSx7dGltZW91dFNlY29uZHM6aT0zMH09e30pe2xldCBzPWpyKG4pLGw7aWYobylsPWF3YWl0IFlFKGUsdCxuLCEwLG8pLGUuYWxlcnQobCx7c2Nyb2xsVG9FbmQ6ITB9KTtlbHNlIHRyeXthd2FpdCBQcm9taXNlLnJhY2UoW25ldyBQcm9taXNlKGFzeW5jKHUscCk9PntsZXQgZD1hd2FpdCB0Lmpzb24oKTtsPUtFKHMsZCksdShsKX0pLG5ldyBQcm9taXNlKCh1LHApPT5zZXRUaW1lb3V0KCgpPT5wKG5ldyBFcnJvcihgJHtzfSBUaW1lb3V0YCkpLGkqMWUzKSldKX1jYXRjaCh1KXt0aHJvdyBFKCJGYWlsZWQgdG8gcGFyc2UgcmVzcG9uc2UgZnJvbSIsbiwiZXJyb3IiLHUpLHV9bGV0IGM9bDtyZXR1cm4gbD1hYyhsKSwhYXx8YShsKT9sOihjJiZFKCJSZWNlaXZlZCIsYywiYnV0IGNvdWxkIG5vdCBwYXJzZSBhcyBhIHZhbGlkIHJlc3VsdCIpLG51bGwpfWFzeW5jIGZ1bmN0aW9uIFlFKGUsdCxuLHIsbyl7cmV0dXJuIHR5cGVvZiBnbG9iYWw8InUiJiZ0eXBlb2YgZ2xvYmFsLmZldGNoPCJ1Ij9hd2FpdCBxRShlLHQsbixyLG8pOmF3YWl0IFFFKGUsdCxuLHIsbyl9YXN5bmMgZnVuY3Rpb24gcUUoZSx0LG4scixvKXtsZXQgYT10LmJvZHksaT0hMSxzPSIiLGwsYztyZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHUscCk9PntsZXQgZD0oKT0+e2xldCBoPTAseT0oKT0+e2xldCB3PWEucmVhZCgpO2lmKHcpe2g9MDtsZXQgYj13LnRvU3RyaW5nKCk7aWYoe2Fib3J0OmksZmFpbGVkUGFyc2VDb250ZW50OmwsaW5jcmVtZW50YWxDb250ZW50czpjLHJlY2VpdmVkQ29udGVudDpzfT1vKGUsYixzLG4scixsKSxpfHwhTXcoYyxzKSl7dSgpO3JldHVybn15KCl9ZWxzZSBoKz0xLGg8Mz9zZXRUaW1lb3V0KHksSXcqMWUzKTp1KCl9O3koKX07YS5vbigicmVhZGFibGUiLGQpfSksc31hc3luYyBmdW5jdGlvbiBRRShlLHQsbixyLG8pe2xldCBhPXQuYm9keS5nZXRSZWFkZXIoKSxpPW5ldyBUZXh0RGVjb2RlcixzLGwsYyx1LHA9MCxkPSIiO2Zvcig7IWw7KXtsZXQgaD1udWxsLHk9ITE7dHJ5e2F3YWl0IFByb21pc2UucmFjZShbe2RvbmU6eSx2YWx1ZTpofT1hd2FpdCBhLnJlYWQoKSxuZXcgUHJvbWlzZSgodyxiKT0+c2V0VGltZW91dCgoKT0+YihuZXcgRXJyb3IoIlRpbWVvdXQiKSksSXcqMWUzKSldKX1jYXRjaCh3KXtsPXcsRSgiRmFpbGVkIHRvIHJlY2VpdmUgZnVydGhlciBzdHJlYW0gZGF0YSBpbiB0aW1lIix3KTticmVha31pZih5fHxwPjMpe0UoIkNvbXBsZXRlZCBnZW5lcmF0aW5nIHJlc3BvbnNlIGxlbmd0aCIpO2JyZWFrfWVsc2UgaWYoaCl7bGV0IHc9aS5kZWNvZGUoaCx7c3RyZWFtOiEwfSk7dHJ5e2lmKHR5cGVvZiB3PT0ic3RyaW5nIil7cD0wO2xldCBiPW8oZSx3LGQsbixyLGMpO2lmKGIpe2lmKHthYm9ydDpzLGZhaWxlZFBhcnNlQ29udGVudDpjLGluY3JlbWVudGFsQ29udGVudHM6dSxyZWNlaXZlZENvbnRlbnQ6ZH09YixzfHwhTXcodSxkKSlicmVha31lbHNlIEUoIkZhaWxlZCB0byBwYXJzZSBzdHJlYW0gZnJvbSIsaCwiYXMgSlNPTiIpLHArPTF9ZWxzZSBFKCJGYWlsZWQgdG8gcGFyc2Ugc3RyZWFtIGZyb20iLGgsImFzIEpTT04iKSxwKz0xfWNhdGNoKGIpe0UoIlRoZXJlIHdhcyBhbiBlcnJvciBwYXJzaW5nIHRoZSByZXNwb25zZSBmcm9tIHN0cmVhbToiLGIpO2JyZWFrfX1lbHNlIHArPTF9cmV0dXJuIGR9ZnVuY3Rpb24gTXcoZSx0KXtsZXQgbjtpZihlPy5sZW5ndGgmJih0Py5sZW5ndGh8fDApPj1XZCl7bGV0IHI9dC5yZXBsYWNlKC9cbi9nLCIgIik7bj1yLnN1YnN0cmluZyhyLmxlbmd0aC1XZCkudHJpbSgpPT09IiIsbiYmRSgiUmVzcG9uc2UgZXhjZWVkcyBlbXB0eSBzcGFjZSB0aHJlc2hvbGQuIEFib3J0aW5nIil9cmV0dXJuIW59dmFyIEpFPTMwLFB3PTUwO2FzeW5jIGZ1bmN0aW9uIFhFKGUsdCxuLHIsbyxhLGkpe2xldCBzPW9jKCk7ciYmKHM9cy5maWx0ZXIoeT0+eSE9PXIpLHMudW5zaGlmdChyKSk7bGV0IGw9cy5zaGlmdCgpO0UoIltsbG1Qcm9tcHRdIG1vZGVsIHJlc29sdXRpb24iLHthaU1vZGVsT3ZlcnJpZGU6cixtb2RlbFRvVXNlOmw/P251bGwscmVtYWluaW5nQ2FuZGlkYXRlQ291bnQ6cy5sZW5ndGgsYXBpS2V5T3ZlcnJpZGVQcmVzZW50OiEhb30pO2xldCBjPVt7cm9sZToidXNlciIsY29udGVudDpufV0sdT1pP3t0aW1lb3V0U2Vjb25kczppfTp7fTtvJiYodS5hcGlLZXk9byk7bGV0IHA9YXdhaXQgdFQoZSxjLGwsdSksaD1hd2FpdCBSdyhlLHAsbCxhPyJsbG1Qcm9tcHRKc29uIjpudWxsLG51bGwsbnVsbCk7cmV0dXJuIGgmJmEmJnR5cGVvZiBoPT0ic3RyaW5nIj9hYyhoKTpofWFzeW5jIGZ1bmN0aW9uIEx3KGUsdCx7anNvblJlc3BvbnNlOm4sYWlNb2RlbDpyLGFwaUtleTpvLHRpbWVvdXRTZWNvbmRzOmF9PXt9KXtsZXQgaT1wZXJmb3JtYW5jZS5ub3coKTtFKCJbbGxtUHJvbXB0XSBzdGFydGluZyIse3Byb21wdExlbmd0aDp0Py5sZW5ndGg/PzAsYW1wbGVBZ2VudFByb1V1aWQ6cXAsaGFzQ2FsbFBsdWdpbjp0eXBlb2YgZT8uY2FsbFBsdWdpbj09ImZ1bmN0aW9uIixqc29uUmVzcG9uc2U6ISFuLGFpTW9kZWxPdmVycmlkZTpyPz9udWxsLGFwaUtleU92ZXJyaWRlUHJlc2VudDohIW99KTt0cnl7bGV0IGM9YXdhaXQgZS5jYWxsUGx1Z2luKHtzb3VyY2U6cXB9LHQpO2lmKHR5cGVvZiBjPiJ1Iil7bGV0IHA9YXdhaXQgZS5maW5kTm90ZSh7bmFtZTpyY30pO0UoIltsbG1Qcm9tcHRXaXRoUGx1Z2luRmFsbGJhY2tdIGNhbGxQbHVnaW4gcmV0dXJuZWQgdW5kZWZpbmVkOyBjaGVja2luZyBmb3IgQW1wbGUgQWdlbnQgUHJvIG5vdGUgZXhpc3RlbmNlLCBnb3QiLHApLHAmJihjPWF3YWl0IGUuY2FsbFBsdWdpbih7dXVpZDpwLnV1aWR9LHQpLEUoYFtsbG1Qcm9tcHRXaXRoUGx1Z2luRmFsbGJhY2tdIEF0dGVtcHQgdG8gY2FsbFBsdWdpbiBmb3Igbm90ZSB1dWlkICR7cC51dWlkfSB5aWVsZGVkYCxjKSl9bGV0IHU9TnVtYmVyKChwZXJmb3JtYW5jZS5ub3coKS1pKS50b0ZpeGVkKDEpKTtpZihjKXtsZXQgZD10eXBlb2YgYz09InN0cmluZyI/Yy5zdWJzdHJpbmcoMCwzMDApOkpTT04uc3RyaW5naWZ5KGMpLnN1YnN0cmluZygwLDMwMCk7RSgiW2xsbVByb21wdFdpdGhQbHVnaW5GYWxsYmFja10gY2FsbFBsdWdpbiByYXcgcmVzdWx0Iix7ZHVyYXRpb25Nczp1LHJlc3VsdFR5cGU6dHlwZW9mIGMscmVzdWx0TGVuZ3RoOnR5cGVvZiBjPT0ic3RyaW5nIj9jLmxlbmd0aDpudWxsLHJlc3VsdFNuaXBwZXQ6ZH0pO2xldCBoPW4mJnR5cGVvZiBjPT0ic3RyaW5nIj9hYyhjKTpjO3JldHVybiBFKCJbbGxtUHJvbXB0V2l0aFBsdWdpbkZhbGxiYWNrXSBjYWxsUGx1Z2luIHBhcnNlZCByZXN1bHQiLHtwYXJzZWRUeXBlOmg9PT1udWxsPyJudWxsIjp0eXBlb2YgaCxoYXNUYXNrc0ZpZWxkOiEhKGgmJnR5cGVvZiBoPT0ib2JqZWN0IiYmInRhc2tzImluIGgpLHRhc2tzTGVuZ3RoOkFycmF5LmlzQXJyYXkoaD8udGFza3MpP2gudGFza3MubGVuZ3RoOm51bGwsaGFzR29hbHNTdW1tYXJ5OiEhKGgmJnR5cGVvZiBoPT0ib2JqZWN0IiYmaC5nb2Fsc1N1bW1hcnkpfSksaH1FKGBbbGxtUHJvbXB0V2l0aFBsdWdpbkZhbGxiYWNrXSBjYWxsUGx1Z2luIHJldHVybmVkICcke2N9JyAodHlwZW9mICR7dHlwZW9mIGN9KSBcdTIwMTQgZmFsbGluZyBiYWNrIHRvIGRpcmVjdCBMTE1gLHtkdXJhdGlvbk1zOnUscGx1Z2luUmVzdWx0VmFsdWU6YyxwbHVnaW5SZXN1bHRUeXBlOnR5cGVvZiBjfSl9Y2F0Y2goYyl7RSgiW2xsbVByb21wdFdpdGhQbHVnaW5GYWxsYmFja10gY2FsbFBsdWdpbiB0aHJldyBcdTIwMTQgZmFsbGluZyBiYWNrIHRvIGRpcmVjdCBMTE0iLHtkdXJhdGlvbk1zOk51bWJlcigocGVyZm9ybWFuY2Uubm93KCktaSkudG9GaXhlZCgxKSksZXJyb3JNZXNzYWdlOmM/Lm1lc3NhZ2UsZXJyb3JOYW1lOmM/Lm5hbWV9KX1sZXQgcz1wZXJmb3JtYW5jZS5ub3coKSxsPWF3YWl0IFhFKGUsbnVsbCx0LHIsbyxuLGEpO3JldHVybiBFKCJbbGxtUHJvbXB0V2l0aFBsdWdpbkZhbGxiYWNrXSBsbG1Qcm9tcHQgZmFsbGJhY2sgY29tcGxldGUiLHtkdXJhdGlvbk1zOk51bWJlcigocGVyZm9ybWFuY2Uubm93KCktcykudG9GaXhlZCgxKSkscmVzdWx0VHlwZTpsPT09bnVsbD8ibnVsbCI6dHlwZW9mIGwsaGFzVGFza3NGaWVsZDohIShsJiZ0eXBlb2YgbD09Im9iamVjdCImJiJ0YXNrcyJpbiBsKX0pLGx9ZnVuY3Rpb24gUXAoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5tYXAodD0+UXAodCkpOiFlfHx0eXBlb2YgZSE9Im9iamVjdCI/ZTpPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkubWFwKChbdCxuXSk9PnQ9PT0iY29udGVudCImJnR5cGVvZiBuPT0ic3RyaW5nIiYmbi5sZW5ndGg+UHc/W3QsYCR7bi5zbGljZSgwLFB3LTMpfS4uLmBdOlt0LFFwKG4pXSkpfWZ1bmN0aW9uIFpFKGUsdCl7bGV0IG49eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn07c3dpdGNoKGUpe2Nhc2UiYW50aHJvcGljIjpyZXR1cm57Li4ubiwieC1hcGkta2V5Ijp0LCJhbnRocm9waWMtZGFuZ2Vyb3VzLWRpcmVjdC1icm93c2VyLWFjY2VzcyI6InRydWUiLCJhbnRocm9waWMtdmVyc2lvbiI6IjIwMjMtMDYtMDEifTtjYXNlImdlbWluaSI6cmV0dXJuIG47ZGVmYXVsdDpyZXR1cm57Li4ubixBdXRob3JpemF0aW9uOmBCZWFyZXIgJHt0fWB9fX1mdW5jdGlvbiBlVChlLHQsbixyLHtwcm9tcHRLZXk6bz1udWxsfT17fSl7bGV0IGE7c3dpdGNoKGpyKHQpKXtjYXNlImFudGhyb3BpYyI6e2xldCBzPWUuZmluZChjPT5jLnJvbGU9PT0ic3lzdGVtIiksbD1lLmZpbHRlcihjPT5jLnJvbGUhPT0ic3lzdGVtIik7YT17bWF4X3Rva2Vuczo0MDk2LG1vZGVsOnQsbWVzc2FnZXM6bH0sbiYmKGEuc3RyZWFtPW4pLHMmJihhLnN5c3RlbT1zLmNvbnRlbnQpO2JyZWFrfWNhc2UiZ2VtaW5pIjp7bGV0IHM9ZS5maW5kKGM9PmMucm9sZT09PSJzeXN0ZW0iKTthPXtjb250ZW50czplLmZpbHRlcihjPT5jLnJvbGUhPT0ic3lzdGVtIikubWFwKGM9Pih7cm9sZTpjLnJvbGU9PT0iYXNzaXN0YW50Ij8ibW9kZWwiOiJ1c2VyIixwYXJ0czpbe3RleHQ6Yy5jb250ZW50fV19KSl9LHMmJihhLnN5c3RlbUluc3RydWN0aW9uPXtwYXJ0czpbe3RleHQ6cy5jb250ZW50fV19KSxhLmdlbmVyYXRpb25Db25maWc9e3Jlc3BvbnNlTWltZVR5cGU6ImFwcGxpY2F0aW9uL2pzb24ifTticmVha31jYXNlImdyb2siOmNhc2UicGVycGxleGl0eSI6YT17bW9kZWw6dCxtZXNzYWdlczplfSxuJiYoYS5zdHJlYW09biksciYmKGEudG9vbHM9cik7YnJlYWs7Y2FzZSJkZWVwc2VlayI6e2E9e21vZGVsOnQsbWVzc2FnZXM6ZX0sbiYmKGEuc3RyZWFtPW4pLHImJihhLnRvb2xzPXIpLGEucmVzcG9uc2VfZm9ybWF0PXt0eXBlOiJqc29uX29iamVjdCJ9O2JyZWFrfWNhc2Uib3BlbmFpIjpkZWZhdWx0OnthPXttb2RlbDp0LG1lc3NhZ2VzOmV9LG4mJihhLnN0cmVhbT1uKSxyJiYoYS50b29scz1yKSxhLnJlc3BvbnNlX2Zvcm1hdD17dHlwZToianNvbl9vYmplY3QifTticmVha319cmV0dXJuIGF9YXN5bmMgZnVuY3Rpb24gdFQoZSx0LG4se2FwaUtleTpyPW51bGwsYXR0ZW1wdE51bWJlcjpvPTEscHJvbXB0S2V5OmE9bnVsbCxzdHJlYW06aT1udWxsLHRpbWVvdXRTZWNvbmRzOnM9SkUsdG9vbHM6bD1udWxsfT17fSl7bGV0IGM9anIobik7bz4wJiZFKGBBdHRlbXB0ICMke299OiBUcnlpbmcgJHtufSB3aXRoICR7YXx8Im5vIHByb21wdEtleSJ9YCkscnx8KHI9Q3coZSxjKSk7bGV0IHU9ZVQodCxuLGksbCx7cHJvbXB0S2V5OmF9KSxwPUF3KG4scik7RShgQ2FsbGluZyAke2N9IGF0ICR7cH0gd2l0aCBib2R5ICR7SlNPTi5zdHJpbmdpZnkoUXAodSkpfSBhdCAke25ldyBEYXRlfWApO2xldCBkPVpFKGMsciksaD1hd2FpdCBQcm9taXNlLnJhY2UoW2ZldGNoKHAse21ldGhvZDoiUE9TVCIsaGVhZGVyczpkLGJvZHk6SlNPTi5zdHJpbmdpZnkodSl9KSxuZXcgUHJvbWlzZSgoeSx3KT0+c2V0VGltZW91dCgoKT0+dyhuZXcgRXJyb3IoIlRpbWVvdXQiKSkscyoxZTMpKV0pO2lmKCFoLm9rKXtsZXQgeT1uZXcgRXJyb3IoYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7aC5zdGF0dXN9YCk7dGhyb3cgeS5yZXNwb25zZT1oLHl9cmV0dXJuIGh9dmFyIG5UPVsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxyVD01MCxvVD0yZTMsYVQ9M2UzLGlUPTFlMyxzVD0xZTMsVXc9NTAwLHp3PTg2NDAwLHFpPTFlMTAsbFQ9NjAsY1Q9Myx1VD0yMDAsZFQ9NDAxLHBUPTQwMyxmVD0xLGhUPTEwLG1UPTUsZ1Q9Nyx5VD01LHZUPS41LHdUPTMsYlQ9MjAsa1Q9MTUseFQ9MTUsU1Q9OCxFVD0yNSxUVD0yMCxOVD0xMixEVD01LF9UPTUsQ1Q9MyxBVD0xNSxPVD0xMCxJVD01LEZ3PTEsUlQ9MyxNVD03LFBUPSJzdWciLExUPTFlNix6VD0uMTthc3luYyBmdW5jdGlvbiAkdyhlLHtleGNsdWRlVXVpZHM6dCxleGlzdGluZ05vdGVIYW5kbGU6bixtaW5pbXVtVGFza0NvdW50OnI9MSxub3RlTmFtZTpvPWBEYXNoYm9hcmQgcHJvcG9zZWQgdGFza3MgZm9yICR7bmV3IERhdGUoKS50b0xvY2FsZVN0cmluZyhbXSx7eWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyJ9KX1gLHByb3ZpZGVyRW1PdmVycmlkZTphfT17fSl7bGV0IGk9TWF0aC5tYXgoMSxwYXJzZUludChyLDEwKXx8MSkscz10IGluc3RhbmNlb2YgU2V0P3Q6bnVsbCxsPW5ldyBEYXRlLGM9blRbbC5nZXREYXkoKV0sdT1FaVtsLmdldE1vbnRoKCldLHA9bC5nZXREYXkoKT09PTB8fGwuZ2V0RGF5KCk9PT02O0UoIltkcmVhbS10YXNrXSBhbmFseXplRHJlYW1UYXNrcyBlbnRyeSIse25vdGVOYW1lOm8sbWluaW11bVN1Z2dlc3Rpb25Db3VudDppLGV4Y2x1ZGVVdWlkc1NpemU6cz8uc2l6ZT8/MCxwcm92aWRlckVtT3ZlcnJpZGU6YT8/bnVsbCxleGlzdGluZ05vdGVIYW5kbGVVdWlkOm4/LnV1aWQ/P251bGx9KTtsZXQgZD1hd2FpdCBVVChlLG8sbiksaD1kLmNhY2hlZC50YXNrcy5maWx0ZXIoeD0+IWljKHgpKS5sZW5ndGg7aWYoRSgiW2RyZWFtLXRhc2tdIGNhY2hlZC1ub3RlIHN0YXRlIix7bm90ZVVVSUQ6ZC5ub3RlSGFuZGxlPy51dWlkPz9udWxsLGV4aXN0aW5nQ29udGVudExlbmd0aDpkLmV4aXN0aW5nQ29udGVudD8ubGVuZ3RoPz8wLGNhY2hlZFRhc2tDb3VudDpkLmNhY2hlZC50YXNrcy5sZW5ndGgsdW5kaXNtaXNzZWRDb3VudDpoLG1pbmltdW1TdWdnZXN0aW9uQ291bnQ6aSx3aWxsVXNlQ2FjaGU6aD49aX0pLGg+PWkpe2xldCB4PWF3YWl0IFdUKGUsZC5jYWNoZWQudGFza3MpO3JldHVybiBIVChkLHgpfWxldCB5PWF3YWl0IEJUKGUpLHc9TWF0aC5tYXgoY1QsaS1kLmNhY2hlZC50YXNrcy5sZW5ndGgpLGI9R1QoeS5vcGVuVGFza3MscyksZz1hd2FpdCBWVChlLHUsZC5leGlzdGluZ0NvbnRlbnQpLG09RlQobCxjLHUpO2lmKCEhIShnLnF1YXJ0ZXJseUNvbnRlbnR8fGcubW9udGhseUNvbnRlbnR8fGcud2Vla2x5Q29udGVudCkmJmIubGVuZ3RoPT09MClyZXR1cm57dGFza3M6W10sZXJyb3I6Ik5vIHBsYW5uaW5nIGRhdGEgb3IgdGFza3MgZm91bmQgdG8gZ2VuZXJhdGUgc3VnZ2VzdGlvbnMgZnJvbS4gUG9wdWxhdGUgeW91ciBxdWFydGVybHkgYW5kL29yIG1vbnRobHkgcGxhbiB0byByZWNlaXZlIEFJLXN1Z2dlc3RlZCB0YXNrcy4iLGVycm9yQ29kZToibm9fcGxhbm5pbmdfZGF0YSIsbm90ZVVVSUQ6ZC5ub3RlSGFuZGxlLnV1aWR9O2xldCBmPWF3YWl0IGpUKHthcHA6ZSxjYW5kaWRhdGVUYXNrczpiLGRhdGVIZWFkaW5nOm0sZGF5TmFtZTpjLGlzV2Vla2VuZDpwLG5vdGVVdWlkRnJvbVRhc2tVdWlkOnkubm90ZVV1aWRGcm9tVGFza1V1aWQscHJvdmlkZXJFbU92ZXJyaWRlOmEscGxhbm5pbmdDb250ZXh0OmcscmVxdWVzdGVkU3VnZ2VzdGlvbkNvdW50Ond9KTtyZXR1cm4gZi5lcnJvcj97dGFza3M6W10sZXJyb3I6Zi5lcnJvcixlcnJvckNvZGU6Zi5lcnJvckNvZGUsZXJyb3JEZXRhaWw6Zi5lcnJvckRldGFpbCxub3RlVVVJRDpkLm5vdGVIYW5kbGUudXVpZH06KGF3YWl0IFFUKGUsZC5leGlzdGluZ0NvbnRlbnQsZi5nb2Fsc1N1bW1hcnksZi5sbG1BdHRyaWJ1dGlvbkZvb3RlcixkLm5vdGVIYW5kbGUsZi5lbmZvcmNlZFRhc2tzKSxKVChkLHksZikpfWZ1bmN0aW9uIEZUKGUsdCxuKXtyZXR1cm5gJHt0fSAke259ICR7ZS5nZXREYXRlKCl9LCAke2UuZ2V0RnVsbFllYXIoKX1gfWFzeW5jIGZ1bmN0aW9uIFVUKGUsdCxuKXtsZXQgcj1hd2FpdCAkVChlLHQsbiksbz1hd2FpdCBlLmdldE5vdGVDb250ZW50KHt1dWlkOnIudXVpZH0pLGE9dHlwZW9mIG89PSJzdHJpbmciP28ucmVwbGFjZSgvXHJcbi9nLGAKYCk6IiI7cmV0dXJue25vdGVIYW5kbGU6cixleGlzdGluZ0NvbnRlbnQ6YSxjYWNoZWQ6dE4oYSl9fWFzeW5jIGZ1bmN0aW9uICRUKGUsdCxuKXtpZihuPy51dWlkKXJldHVybiBFKCJbZHJlYW0tdGFza10gX3Jlc29sdmVEcmVhbVRhc2tOb3RlSGFuZGxlOiB1c2luZyBleGlzdGluZ05vdGVIYW5kbGUiLG4udXVpZCksbjtsZXQgcj1hd2FpdCBlLmZpbmROb3RlKHtuYW1lOnQsdGFnczpbV2VdfSk7aWYocilyZXR1cm4gRSgiW2RyZWFtLXRhc2tdIF9yZXNvbHZlRHJlYW1UYXNrTm90ZUhhbmRsZTogZmluZE5vdGUgbG9jYXRlZCIsci51dWlkLCJmb3IiLHQpLHI7bGV0IG89YXdhaXQgZS5jcmVhdGVOb3RlKHQsW1dlXSx7YXJjaGl2ZTohMH0pO3JldHVybiBFKGBbZHJlYW0tdGFza10gQ3JlYXRlZCBkYWlseSBub3RlICIke3R9IiB3aXRoIHV1aWQgJHtvfWApLHt1dWlkOm99fWFzeW5jIGZ1bmN0aW9uIFdUKGUsdCl7bGV0IG49dC5maWx0ZXIocz0+cy51dWlkJiYhaWMocykpLm1hcChzPT5zLnV1aWQpLHI9KGF3YWl0IFByb21pc2UuYWxsKG4ubWFwKHM9PmUuZ2V0VGFzayhzKS5jYXRjaCgoKT0+bnVsbCkpKSkuZmlsdGVyKEJvb2xlYW4pLG89SHcociksYT1CdyhyKSxpPWF3YWl0IFd3KGUscik7cmV0dXJue25hdGl2ZVRhc2tGcm9tVGFza1V1aWQ6byxub3RlTmFtZUZyb21Ob3RlVXVpZDppLG5vdGVVdWlkRnJvbVRhc2tVdWlkOmEsZGVmYXVsdE5vdGVVVUlEOm51bGx9fWFzeW5jIGZ1bmN0aW9uIEJUKGUpe2xldCB0PWF3YWl0IFpUKGUpLG49dD9hd2FpdCBlLmdldFRhc2tEb21haW5UYXNrcyh0KTpbXSxyPW4uZmlsdGVyKGw9PiFsLmNvbXBsZXRlZEF0JiYhbC5kaXNtaXNzZWRBdCk7RShgW2RyZWFtLXRhc2tdIEZvdW5kICR7ci5sZW5ndGh9IG9wZW4gdGFza3MgZnJvbSBkb21haW4gJHt0fWApO2xldCBvPWF3YWl0IFd3KGUsciksYT1IdyhyKSxpPUJ3KHIpLHM9ZU4obik7cmV0dXJuIEUoYFtkcmVhbS10YXNrXSBEZWZhdWx0IG5vdGUgZm9yIG5ldyB0YXNrczogJHtzfWApLHthbGxUYXNrczpuLGRlZmF1bHROb3RlVVVJRDpzLGRvbWFpblV1aWQ6dCxuYXRpdmVUYXNrRnJvbVRhc2tVdWlkOmEsbm90ZU5hbWVGcm9tTm90ZVV1aWQ6byxub3RlVXVpZEZyb21UYXNrVXVpZDppLG9wZW5UYXNrczpyfX1hc3luYyBmdW5jdGlvbiBXdyhlLHQpe2xldCBuPW5ldyBTZXQ7Zm9yKGxldCBvIG9mIHQpby5ub3RlVVVJRCYmbi5hZGQoby5ub3RlVVVJRCk7bGV0IHI9bmV3IE1hcDtmb3IobGV0IG8gb2YgdCl7aWYoIW8ubm90ZVVVSUQpY29udGludWU7bGV0IGE9KG8ubm90ZU5hbWV8fG8ubm90ZVRpdGxlfHwiIikudHJpbSgpO2EmJnIuc2V0KG8ubm90ZVVVSUQsYSl9cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFsuLi5uXS5tYXAoYXN5bmMgbz0+e2lmKCFyLmhhcyhvKSl0cnl7bGV0IGE9YXdhaXQgZS5maW5kTm90ZSh7dXVpZDpvfSk7YT8ubmFtZSYmci5zZXQobyxhLm5hbWUpfWNhdGNoKGEpe0UoIltkcmVhbS10YXNrXSBmaW5kTm90ZSh7IHV1aWQgfSkgZmFpbGVkOiIsbyxhKX19KSkscn1mdW5jdGlvbiBCdyhlKXtsZXQgdD1uZXcgTWFwO2ZvcihsZXQgbiBvZiBlKW4udXVpZCYmbi5ub3RlVVVJRCYmdC5zZXQobi51dWlkLG4ubm90ZVVVSUQpO3JldHVybiB0fWZ1bmN0aW9uIEh3KGUpe2xldCB0PW5ldyBNYXA7Zm9yKGxldCBuIG9mIGUpbi51dWlkJiZ0LnNldChuLnV1aWQsbik7cmV0dXJuIHR9ZnVuY3Rpb24gSFQoZSx0KXtFKGBbZHJlYW0tdGFza10gVXNpbmcgJHtlLmNhY2hlZC50YXNrcy5sZW5ndGh9IGNhY2hlZCBkYWlseSBzdWdnZXN0aW9ucyBmcm9tIG5vdGVgKTtsZXR7bmF0aXZlVGFza0Zyb21UYXNrVXVpZDpuLG5vdGVOYW1lRnJvbU5vdGVVdWlkOnIsbm90ZVV1aWRGcm9tVGFza1V1aWQ6b309dDtyZXR1cm57dGFza3M6ZS5jYWNoZWQudGFza3MuZmlsdGVyKGk9PiFpYyhpKSkubWFwKGk9Pkd3KGp3KGkpLHtuYXRpdmVUYXNrRnJvbVRhc2tVdWlkOm4sbm90ZU5hbWVGcm9tTm90ZVV1aWQ6cixub3RlVXVpZEZyb21UYXNrVXVpZDpvfSkpLGdvYWxzU3VtbWFyeTplLmNhY2hlZC5nb2Fsc1N1bW1hcnksY2FjaGVkOiEwLG5vdGVVVUlEOmUubm90ZUhhbmRsZS51dWlkLGRlZmF1bHROb3RlVVVJRDp0LmRlZmF1bHROb3RlVVVJRCxzaG93blV1aWRzOltdLGxsbUF0dHJpYnV0aW9uRm9vdGVyOnFUKGUuZXhpc3RpbmdDb250ZW50KX19ZnVuY3Rpb24gR3coZSx7bmF0aXZlVGFza0Zyb21UYXNrVXVpZDp0LG5vdGVOYW1lRnJvbU5vdGVVdWlkOm4sbm90ZVV1aWRGcm9tVGFza1V1aWQ6cn0pe2xldCBvPWUudXVpZCYmdC5nZXQoZS51dWlkKXx8bnVsbCxhPWUudXVpZCYmci5nZXQoZS51dWlkKXx8bnVsbCxpPWUuaXNFeGlzdGluZyE9PXZvaWQgMD9lLmlzRXhpc3Rpbmc6ISFlLnV1aWQscz1hJiZuJiZuLmdldChhKXx8bnVsbDtyZXR1cm57Li4uZSxub3RlVVVJRDphLGlzRXhpc3Rpbmc6aSxuYXRpdmVUYXNrOm8sc291cmNlTm90ZU5hbWU6c319ZnVuY3Rpb24gR1QoZSx0KXtsZXQgbj10JiZ0LnNpemU+MD9lLmZpbHRlcihyPT4hdC5oYXMoci51dWlkKSk6ZTtyZXR1cm4gRShgW2RyZWFtLXRhc2tdIEFmdGVyIGV4Y2x1c2lvbjogJHtuLmxlbmd0aH0gY2FuZGlkYXRlIHRhc2tzICgke2UubGVuZ3RoLW4ubGVuZ3RofSBleGNsdWRlZClgKSxufWFzeW5jIGZ1bmN0aW9uIFZUKGUsdCxuKXtsZXQgbz1gJHtRZCgpLmxhYmVsfSBQbGFuYCxpPShhd2FpdCBlLmZpbHRlck5vdGVzKHtxdWVyeTpvfSkpLmZpbmQocD0+cC5uYW1lPT09bykscz1udWxsLGw9bnVsbCxjPW51bGw7aWYoaSl7bGV0IHA9YXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDppLnV1aWR9KTtpZihwKXtzPXAsbD15YShwLHQpO2xldCBkPU9sKEFsKCkpO2M9eWEocCxkKX19bGV0IHU9bj9uLnN1YnN0cmluZygwLG9UKTpudWxsO3JldHVybntxdWFydGVybHlDb250ZW50OnMsbW9udGhseUNvbnRlbnQ6bCx3ZWVrbHlDb250ZW50OmMscHJldmlvdXNBbmFseXNlczp1fX1hc3luYyBmdW5jdGlvbiBqVChlKXtsZXR7YXBwOnQsY2FuZGlkYXRlVGFza3M6bixkYXRlSGVhZGluZzpyLGRheU5hbWU6byxpc1dlZWtlbmQ6YSxub3RlVXVpZEZyb21UYXNrVXVpZDppLHByb3ZpZGVyRW1PdmVycmlkZTpzLHBsYW5uaW5nQ29udGV4dDpsLHJlcXVlc3RlZFN1Z2dlc3Rpb25Db3VudDpjfT1lLHU9c3x8SGUoKVtLLkxMTV9QUk9WSURFUl9NT0RFTF07aWYoISghIXUmJnUhPT0ibm9uZSIpKXtsZXQgeD1hd2FpdCB0LmZpbmROb3RlKHtuYW1lOnJjfSk7aWYoRSgiW2RyZWFtLXRhc2tdIG5vIHByb3ZpZGVyIGNvbmZpZ3VyZWQgXHUyMDE0IGNoZWNraW5nIGZvciBBbXBsZSBBZ2VudCBQcm8gZmFsbGJhY2siLHthbXBsZUFnZW50Tm90ZUZvdW5kOiEheCxhbXBsZUFnZW50Tm90ZVV1aWQ6eD8udXVpZD8/bnVsbH0pLCF4KXJldHVybntlcnJvcjoiTm8gQUkgcHJvdmlkZXIgY29uZmlndXJlZC4gUGxlYXNlIHNlbGVjdCBhIHByb3ZpZGVyIGluIHRoZSBwbHVnaW4gc2V0dGluZ3MuIixlcnJvckNvZGU6Im5vX3Byb3ZpZGVyX2NvbmZpZ3VyZWQifX1sZXQgZD1pTihuKSxoPWQubWFwKHg9PnNOKHgpKTtFKGBbZHJlYW0tdGFza10gU2VsZWN0ZWQgJHtoLmxlbmd0aH0gdG9wIHRhc2tzIGZyb20gJHtuLmxlbmd0aH0gY2FuZGlkYXRlIHRhc2tzIGZvciBMTE0gYW5hbHlzaXNgKTtsZXQgeT1sTih7ZGF0ZUhlYWRpbmc6cixkYXlOYW1lOm8saXNXZWVrZW5kOmEsdGFza0pzb25PYmplY3RzOmgscXVhcnRlcmx5Q29udGVudDpsLnF1YXJ0ZXJseUNvbnRlbnQsbW9udGhseUNvbnRlbnQ6bC5tb250aGx5Q29udGVudCx3ZWVrbHlDb250ZW50Omwud2Vla2x5Q29udGVudCxwcmV2aW91c0FuYWx5c2VzOmwucHJldmlvdXNBbmFseXNlcyxvcGVuVGFza0NvdW50Om4ubGVuZ3RoLHJlcXVlc3RlZFN1Z2dlc3Rpb25Db3VudDpjfSksdyxiPXBlcmZvcm1hbmNlLm5vdygpO3RyeXtFKCJbZHJlYW0tdGFza10gU2VuZGluZyBwcm9tcHQgdG8gTExNLCBsZW5ndGg6Iix5Lmxlbmd0aCk7bGV0e2FpTW9kZWw6eCxhcGlLZXk6Uyxqc29uUmVzcG9uc2U6Tix0aW1lb3V0U2Vjb25kczpEfT1WdyhzKTt3PWF3YWl0IEx3KHQseSx7YWlNb2RlbDp4LGFwaUtleTpTLGpzb25SZXNwb25zZTpOLHRpbWVvdXRTZWNvbmRzOkR9KSxFKCJbZHJlYW0tdGFza10gbGxtUHJvbXB0V2l0aFBsdWdpbkZhbGxiYWNrIHJldHVybmVkIix7ZHVyYXRpb25NczpOdW1iZXIoKHBlcmZvcm1hbmNlLm5vdygpLWIpLnRvRml4ZWQoMSkpLHJlc3VsdFR5cGU6dz09PW51bGw/Im51bGwiOnR5cGVvZiB3LHJlc3VsdElzQXJyYXk6QXJyYXkuaXNBcnJheSh3KSxoYXNUYXNrc0ZpZWxkOiEhKHcmJnR5cGVvZiB3PT0ib2JqZWN0IiYmInRhc2tzImluIHcpLHRhc2tzTGVuZ3RoOkFycmF5LmlzQXJyYXkodz8udGFza3MpP3cudGFza3MubGVuZ3RoOm51bGwsZ29hbHNTdW1tYXJ5UHJlc2VudDohISh3JiZ0eXBlb2Ygdz09Im9iamVjdCImJncuZ29hbHNTdW1tYXJ5KX0pfWNhdGNoKHgpe2NvbnNvbGUuZXJyb3IoIltkcmVhbS10YXNrXSBMTE0gcHJvbXB0Iix5LCJjYWxsIGZhaWxlZCIseCksRSgiW2RyZWFtLXRhc2tdIGxsbVByb21wdFdpdGhQbHVnaW5GYWxsYmFjayB0aHJldyIse2R1cmF0aW9uTXM6TnVtYmVyKChwZXJmb3JtYW5jZS5ub3coKS1iKS50b0ZpeGVkKDEpKSxzdGF0dXM6eD8ucmVzcG9uc2U/LnN0YXR1cyxtZXNzYWdlOng/Lm1lc3NhZ2V9KTtsZXQgUz14LnJlc3BvbnNlPy5zdGF0dXM7cmV0dXJuIFM9PT1kVHx8Uz09PXBUP3tlcnJvcjoiVGhlIEFQSSBrZXkgYXBwZWFycyB0byBiZSBpbnZhbGlkIG9yIHVuYXV0aG9yaXplZC4iLGVycm9yQ29kZToiaW52YWxpZF9hcGlfa2V5In06e2Vycm9yOmBMTE0gcmVxdWVzdCBmYWlsZWQgKCR7eC5tZXNzYWdlfHwidW5rbm93biBlcnJvciJ9KS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5gLGVycm9yQ29kZToibGxtX2Vycm9yIixlcnJvckRldGFpbDp4Lm1lc3NhZ2V8fG51bGx9fWlmKCF3fHwhdy50YXNrcylyZXR1cm4gRSgiW2RyZWFtLXRhc2tdIExMTSByZXR1cm5lZCBpbnZhbGlkIHJlc3BvbnNlOiIsdykse2Vycm9yOiJVbmFibGUgdG8gcHJvY2VzcyB0aGUgQUkgcHJvdmlkZXIncyByZXNwb25zZSBpbnRvIHRhc2sgc3VnZ2VzdGlvbnMuIixlcnJvckNvZGU6InBhcnNlX2Vycm9yIixlcnJvckRldGFpbDp3P0pTT04uc3RyaW5naWZ5KHcpLnN1YnN0cmluZygwLHVUKToiZW1wdHkgcmVzcG9uc2UifTtsZXQgZz1uZXcgU2V0KG4ubWFwKHg9PngudXVpZCkuZmlsdGVyKEJvb2xlYW4pKSxtPW5OKHcudGFza3MsZyxjKSx2PXJOKGFOKGksbSxkKSksZj1vTih3LmdvYWxzU3VtbWFyeSk7cmV0dXJue2VuZm9yY2VkVGFza3M6dixnb2Fsc1N1bW1hcnk6ZixsbG1BdHRyaWJ1dGlvbkZvb3RlcjpZVChzKX19ZnVuY3Rpb24gVncoZT1udWxsKXtsZXQgdD1IZSgpLG49e2pzb25SZXNwb25zZTohMCx0aW1lb3V0U2Vjb25kczpsVH0scj1lO2lmKHIpe2xldCBzPWdyW3JdfHxudWxsLGw9V3QociksYz1sPyh0Py5bbF18fCIiKS50cmltKCk6IiI7aWYocyYmYylyZXR1cm4gbi5haU1vZGVsPXMsbi5hcGlLZXk9YyxufWxldCBvPXRbSy5MTE1fUFJPVklERVJfTU9ERUxdLGE9V3Iobyk7aWYoRG4mJnByb2Nlc3MuZW52Lk9QRU5fQUlfQUNDRVNTX1RPS0VOJiZhPT09Im9wZW5haSIpbi5haU1vZGVsPWdyLm9wZW5haSxuLmFwaUtleT1wcm9jZXNzLmVudi5PUEVOX0FJX0FDQ0VTU19UT0tFTixFKCJbZHJlYW0tdGFza10gRGV2IG1vZGU6IHVzaW5nIE9QRU5fQUlfQUNDRVNTX1RPS0VOIHdpdGggT3BlbkFJIChkYXNoYm9hcmQgcHJvdmlkZXIgaXMgT3BlbkFJKSIpO2Vsc2UgaWYobyYmZ3Jbb10pe24uYWlNb2RlbD1ncltvXTtsZXQgcz1XdChhKTtpZihzKXtsZXQgbD0odFtzXXx8IiIpLnRyaW0oKTtsJiYobi5hcGlLZXk9bCl9RSgiW2RyZWFtLXRhc2tdIF9idWlsZExsbU9wdGlvbnMgcmVzb2x2ZWQgcHJvdmlkZXI6IixvLCJcdTIxOTIgbW9kZWw6IixuLmFpTW9kZWwpfXJldHVybiBufWZ1bmN0aW9uIEtUKGU9bnVsbCl7bGV0IHQ9VncoZSksbj1vYygpLHI9dC5haU1vZGVsPz9udWxsO3JldHVybiByJiYobj1uLmZpbHRlcihvPT5vIT09ciksbi51bnNoaWZ0KHIpKSxuWzBdPz9udWxsfWZ1bmN0aW9uIFlUKGU9bnVsbCl7bGV0IHQ9S1QoZSk7aWYoIXQpcmV0dXJuIG51bGw7bGV0IG49anIodCk7cmV0dXJuYEdlbmVyYXRlZCBieSAke0tyKG4pfSBceEI3ICR7dH1gfWZ1bmN0aW9uIHFUKGUpe2lmKCFlfHx0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIG51bGw7bGV0IG49ZS5yZXBsYWNlKC9cclxuL2csYApgKS5tYXRjaCgvXG4tLS1ccypcblxuPlxzKihbXlxuXSspLyk7cmV0dXJuIG4/blsxXS50cmltKCk6bnVsbH1hc3luYyBmdW5jdGlvbiBRVChlLHQsbixyLG8sYSl7bGV0IGk9YERyZWFtVGFzayBzdWdnZXN0aW9ucyBnZW5lcmF0ZWQgJHtuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKFtdLHtob3VyOiIyLWRpZ2l0IixtaW51dGU6IjItZGlnaXQiLHNlY29uZDoiMi1kaWdpdCJ9KX1gLHM9Y04oaSxuLHIsYSksbD1YVChzLHQpO3RyeXthd2FpdCBlLnJlcGxhY2VOb3RlQ29udGVudChvLGwpLEUoIltkcmVhbS10YXNrXSBQcmVwZW5kZWQgZ2VuZXJhdGVkIHN1Z2dlc3Rpb25zIHRvIGRhaWx5IG5vdGUiKSxFKCJbZHJlYW0tdGFza10gUGVyc2lzdGVkIExMTSBhdHRyaWJ1dGlvbiBpbiBkYWlseSBub3RlIChkYXRhIHN0b3JlKToiLHI/PyIobm9uZSkiKX1jYXRjaChjKXtFKCJbZHJlYW0tdGFza10gRmFpbGVkIHRvIHdyaXRlIHRvIGRhaWx5IG5vdGU6IixjKX19ZnVuY3Rpb24gSlQoZSx0LG4pe2xldCByPW4uZW5mb3JjZWRUYXNrcy5maWx0ZXIobD0+bC51dWlkKS5tYXAobD0+bC51dWlkKSx7bmF0aXZlVGFza0Zyb21UYXNrVXVpZDpvLG5vdGVOYW1lRnJvbU5vdGVVdWlkOmEsbm90ZVV1aWRGcm9tVGFza1V1aWQ6aX09dDtyZXR1cm57dGFza3M6Wy4uLm4uZW5mb3JjZWRUYXNrcywuLi5lLmNhY2hlZC50YXNrc10uZmlsdGVyKGw9PiFpYyhsKSkubWFwKGw9Pkd3KGp3KGwpLHtuYXRpdmVUYXNrRnJvbVRhc2tVdWlkOm8sbm90ZU5hbWVGcm9tTm90ZVV1aWQ6YSxub3RlVXVpZEZyb21UYXNrVXVpZDppfSkpLGdvYWxzU3VtbWFyeTpuLmdvYWxzU3VtbWFyeSxjYWNoZWQ6ITEsbm90ZVVVSUQ6ZS5ub3RlSGFuZGxlLnV1aWQsZGVmYXVsdE5vdGVVVUlEOnQuZGVmYXVsdE5vdGVVVUlELHNob3duVXVpZHM6cixsbG1BdHRyaWJ1dGlvbkZvb3RlcjpuLmxsbUF0dHJpYnV0aW9uRm9vdGVyPz9udWxsfX1mdW5jdGlvbiBpYyhlKXtyZXR1cm4hIShlPy5jb21wbGV0ZWRBdHx8ZT8ucmVtb3ZlZEF0KX1mdW5jdGlvbiBqdyhlKXtyZXR1cm4gZT8uc3VnZ2VzdGlvbklkP2U6ey4uLmUsc3VnZ2VzdGlvbklkOkt3KCl9fWZ1bmN0aW9uIFhUKGUsdCl7cmV0dXJuIXR8fCF0LnRyaW0oKT9lOmAke2V9CiR7dC50cmltKCl9CmB9YXN5bmMgZnVuY3Rpb24gWlQoZSl7bGV0IHQ9SGUoKVtLLlRBU0tfRE9NQUlOU10sbj10P0pTT04ucGFyc2UodCk6e307aWYobi5zZWxlY3RlZERvbWFpblV1aWQpcmV0dXJuIG4uc2VsZWN0ZWREb21haW5VdWlkO2xldCByPWF3YWl0IGUuZ2V0VGFza0RvbWFpbnMoKTtpZighcnx8ci5sZW5ndGg9PT0wKXJldHVybiBudWxsO2xldCBvPXIuZmluZChhPT5hLm5hbWU9PT0iV29yayIpO3JldHVybiBvP28udXVpZDpyWzBdLnV1aWR9ZnVuY3Rpb24gZU4oZSl7bGV0IHQ9e307Zm9yKGxldCBvIG9mIGUpby5ub3RlVVVJRCYmKHRbby5ub3RlVVVJRF09KHRbby5ub3RlVVVJRF18fDApKzEpO2xldCBuPTAscj1udWxsO2ZvcihsZXRbbyxhXW9mIE9iamVjdC5lbnRyaWVzKHQpKWE+biYmKG49YSxyPW8pO3JldHVybiByfWZ1bmN0aW9uIHROKGUpe2xldCB0PVtdLG49LyMjIyBcZCtcLlxzKyguKz8pXHMrXChSYXRpbmc6XHMqKFxkKylcLzEwXClcbihbXHNcU10qPykoPz1cbiMjIyB8XG4tLS18JCkvZyxyO2Zvcig7KHI9bi5leGVjKGUpKSE9PW51bGw7KXtsZXQgaT1yWzNdLHM9aS5tYXRjaCgvPCEtLSB0YXNrOihcUyspIC0tPi8pfHxpLm1hdGNoKC9cKlxbdGFzazooW15cXV0rKVxdXCovKSxsPWkubWF0Y2goLzwhLS0gc3VnZ2VzdGlvbjooXFMrKSAtLT4vKSxjPS88IS0tIGRyZWFtLXByZXNlcnZlOnRocm91Z2gtdG9tb3Jyb3cgLS0+Ly50ZXN0KGkpLHU9aS5tYXRjaCgvPCEtLSBkcmVhbS1jb21wbGV0ZWQtYXQ6KFteXG5dKykgLS0+LykscD1pLm1hdGNoKC88IS0tIGRyZWFtLXJlbW92ZWQtYXQ6KFteXG5dKykgLS0+LyksZD1zP3NbMV06bnVsbCxoPWw/bFsxXTpudWxsLHk9aS5yZXBsYWNlKC88IS0tIHRhc2s6XFMrIC0tPlxuPy9nLCIiKS5yZXBsYWNlKC88IS0tIHN1Z2dlc3Rpb246XFMrIC0tPlxuPy9nLCIiKS5yZXBsYWNlKC88IS0tIGRyZWFtLXByZXNlcnZlOnRocm91Z2gtdG9tb3Jyb3cgLS0+XG4/L2csIiIpLnJlcGxhY2UoLzwhLS0gZHJlYW0tY29tcGxldGVkLWF0OlteXG5dKyAtLT5cbj8vZywiIikucmVwbGFjZSgvPCEtLSBkcmVhbS1yZW1vdmVkLWF0OlteXG5dKyAtLT5cbj8vZywiIikucmVwbGFjZSgvXCpcW3Rhc2s6W15cXV0rXF1cKlxuPy9nLCIiKS50cmltKCk7dC5wdXNoKHt0aXRsZTpyWzFdLnRyaW0oKSxyYXRpbmc6cGFyc2VJbnQoclsyXSwxMCksdXVpZDpkLHN1Z2dlc3Rpb25JZDpoLGlzRXhpc3Rpbmc6ISFkLHByZXNlcnZlVGhyb3VnaFRvbW9ycm93OmMsY29tcGxldGVkQXQ6dT91WzFdLnRyaW0oKTpudWxsLHJlbW92ZWRBdDpwP3BbMV0udHJpbSgpOm51bGwsZXhwbGFuYXRpb246eX0pfWxldCBvPW51bGwsYT1lLnNlYXJjaCgvIyMjIFxkK1wuLyk7aWYoYT4wKXtsZXQgcz1lLnN1YnN0cmluZygwLGEpLnRyaW0oKS5tYXRjaCgvXCpcKllvdXIgZ29hbHMgdGhpcyBxdWFydGVyXC9tb250aFwvd2VlazpcKlwqXHMqKFtcc1xTXSopLyk7cyYmKG89c1sxXS50cmltKCkpfXJldHVybnt0YXNrczp0LGdvYWxzU3VtbWFyeTpvfX1mdW5jdGlvbiBuTihlLHQsbj15VCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5maWx0ZXIocj0+ciYmdHlwZW9mIHIudGl0bGU9PSJzdHJpbmciJiZyLnRpdGxlLnRyaW0oKS5sZW5ndGg+MCkubWFwKHI9PntsZXQgbz1yLnV1aWQmJnQmJnQuaGFzKHIudXVpZCk/ci51dWlkOm51bGw7cmV0dXJue3RpdGxlOlN0cmluZyhyLnRpdGxlKS50cmltKCksZXhwbGFuYXRpb246U3RyaW5nKHIuZXhwbGFuYXRpb258fCIiKS50cmltKCkscmF0aW5nOk1hdGgubWluKGhULE1hdGgubWF4KGZULHBhcnNlSW50KHIucmF0aW5nLDEwKXx8bVQpKSx1dWlkOm8saXNFeGlzdGluZzohIW99fSkuc2xpY2UoMCxNYXRoLm1heCgxLG4pKTpbXX1mdW5jdGlvbiByTihlKXtyZXR1cm4gZS5tYXAodD0+KHsuLi50LHN1Z2dlc3Rpb25JZDp0LnN1Z2dlc3Rpb25JZHx8S3coKX0pKX1mdW5jdGlvbiBLdygpe2xldCBlPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpMVCkudG9TdHJpbmcoMzYpLnBhZFN0YXJ0KDQsIjAiKTtyZXR1cm5gJHtQVH0tJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0tJHtlfWB9ZnVuY3Rpb24gb04oZSl7aWYoIWV8fHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gbnVsbDtsZXQgdD1lLnRyaW0oKTtyZXR1cm4gdD90LnN1YnN0cmluZygwLFV3KTpudWxsfWZ1bmN0aW9uIGFOKGUsdCxuKXtsZXQgcj10LmZpbHRlcihjPT5jLmlzRXhpc3RpbmcpLmxlbmd0aCxvPU1hdGguY2VpbCh0Lmxlbmd0aCp2VCk7aWYocj49bylyZXR1cm4gdC5tYXAoYz0+KHsuLi5jLG5vdGVVVUlEOmMudXVpZCYmZS5nZXQoYy51dWlkKXx8bnVsbH0pKTtsZXQgYT1uZXcgU2V0KHQuZmlsdGVyKGM9PmMudXVpZCkubWFwKGM9PmMudXVpZCkpLGk9bi5maWx0ZXIoYz0+Yy51dWlkJiYhYS5oYXMoYy51dWlkKSkuc2xpY2UoMCxvLXIpLm1hcChjPT4oe3RpdGxlOmMuY29udGVudHx8IlVudGl0bGVkIHRhc2siLGV4cGxhbmF0aW9uOiJIaWdobHktcmFua2VkIHRhc2sgZnJvbSB5b3VyIHRhc2sgbGlzdCB0aGF0IGFsaWducyB3aXRoIHlvdXIgY3VycmVudCBwcmlvcml0aWVzLiIscmF0aW5nOmdULHV1aWQ6Yy51dWlkLGlzRXhpc3Rpbmc6ITAsbm90ZVVVSUQ6ZS5nZXQoYy51dWlkKXx8bnVsbH0pKSxzPVsuLi50XS5tYXAoYz0+KHsuLi5jLG5vdGVVVUlEOmMudXVpZCYmZS5nZXQoYy51dWlkKXx8bnVsbH0pKSxsPXMubWFwKChjLHUpPT4oe2luZGV4OnUscmF0aW5nOmMucmF0aW5nLGlzRXhpc3Rpbmc6Yy5pc0V4aXN0aW5nfSkpLmZpbHRlcihjPT4hYy5pc0V4aXN0aW5nKS5zb3J0KChjLHUpPT5jLnJhdGluZy11LnJhdGluZyk7Zm9yKGxldCBjPTA7YzxpLmxlbmd0aCYmYzxsLmxlbmd0aDtjKyspc1tsW2NdLmluZGV4XT1pW2NdO3JldHVybiBzfWZ1bmN0aW9uIGlOKGUpe2xldCB0PWUubWFwKHI9PntsZXQgbz0wLGE9ci5zY29yZT8/ci52aWN0b3J5VmFsdWU/PzA7aWYoci5pbXBvcnRhbnQmJihvKz1iVCksci51cmdlbnQmJihvKz1rVCksYT5PVD9vKz14VDphPklUJiYobys9U1QpLHIuZGVhZGxpbmUpe2xldCBpPURhdGUubm93KCkvMWUzLGw9KChyLmRlYWRsaW5lPHFpP3IuZGVhZGxpbmU6ci5kZWFkbGluZS8xZTMpLWkpL3p3O2w8MD9vKz1FVDpsPD1Gdz9vKz1UVDpsPD1SVD9vKz1OVDpsPD1NVCYmKG8rPURUKX1pZihyLnN0YXJ0QXQpe2xldCBpPURhdGUubm93KCkvMWUzLHM9ci5zdGFydEF0PHFpP3Iuc3RhcnRBdDpyLnN0YXJ0QXQvMWUzO3M8PWk/bys9X1Q6KHMtaSkvenc8PUZ3JiYobys9Q1QpfXJldHVybiBvKz1NYXRoLm1pbihhLEFUKSx7dGFzazpyLHJhbms6b319KTt0LnNvcnQoKHIsbyk9Pm8ucmFuay1yLnJhbmspO2xldCBuPU1hdGgubWluKE1hdGguY2VpbChlLmxlbmd0aCp6VCksclQpO3JldHVybiB0LnNsaWNlKDAsTWF0aC5tYXgobix3VCkpLm1hcChyPT5yLnRhc2spfWZ1bmN0aW9uIHNOKGUpe2xldCB0PXtjb250ZW50OmUuY29udGVudCx1dWlkOmUudXVpZH07ZS5pbXBvcnRhbnQmJih0LmltcG9ydGFudD0hMCksZS51cmdlbnQmJih0LnVyZ2VudD0hMCk7bGV0IG49ZS5zY29yZT8/ZS52aWN0b3J5VmFsdWU7cmV0dXJuIG4hPW51bGwmJih0LnNjb3JlPW4pLGUuZGVhZGxpbmUmJih0LmRlYWRsaW5lPWUuZGVhZGxpbmUsdC5kZWFkbGluZUZvcm1hdHRlZD1uZXcgRGF0ZShlLmRlYWRsaW5lPHFpP2UuZGVhZGxpbmUqMWUzOmUuZGVhZGxpbmUpLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tVVMiLHt3ZWVrZGF5OiJzaG9ydCIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLHllYXI6Im51bWVyaWMifSkpLGUuc3RhcnRBdCYmKHQuc3RhcnRBdD1lLnN0YXJ0QXQsdC5zdGFydEF0Rm9ybWF0dGVkPW5ldyBEYXRlKGUuc3RhcnRBdDxxaT9lLnN0YXJ0QXQqMWUzOmUuc3RhcnRBdCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1VUyIse3dlZWtkYXk6InNob3J0Iixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIseWVhcjoibnVtZXJpYyJ9KSksZS5oaWRlVW50aWwmJih0LmhpZGRlblVudGlsRm9ybWF0dGVkPW5ldyBEYXRlKGUuaGlkZVVudGlsPHFpP2UuaGlkZVVudGlsKjFlMzplLmhpZGVVbnRpbCkudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1VUyIse21vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIn0pKSxlLmlzUmVwZWF0aW5nJiYodC5pc1JlcGVhdGluZz0hMCksdH1mdW5jdGlvbiBsTih7ZGF0ZUhlYWRpbmc6ZSxkYXlOYW1lOnQsaXNXZWVrZW5kOm4sdGFza0pzb25PYmplY3RzOnIscXVhcnRlcmx5Q29udGVudDpvLG1vbnRobHlDb250ZW50OmEsd2Vla2x5Q29udGVudDppLHByZXZpb3VzQW5hbHlzZXM6cyxvcGVuVGFza0NvdW50OmwscmVxdWVzdGVkU3VnZ2VzdGlvbkNvdW50OmN9KXtsZXQgdT1gWW91IGFyZSBhIHByb2R1Y3Rpdml0eSBjb2FjaCBhbmFseXppbmcgYSB1c2VyJ3MgdGFzayBsaXN0IGFuZCBnb2FscyB0byBzdWdnZXN0IHRoZSBtb3N0IGltcGFjdGZ1bCB0YXNrcyBmb3IgdG9kYXkuCgpUb2RheSBpcyAke2V9LmA7cmV0dXJuIG4/dSs9YApJdCBpcyAke3R9IFx1MjAxNCBhIHdlZWtlbmQgZGF5LiBMZWFuIHRvd2FyZCBjcmVhdGl2ZSwgZXhwbG9yYXRvcnksIG9yIGVuam95YWJsZSB0YXNrcyB0aGF0IHN0aWxsIGFkdmFuY2UgdGhlIHVzZXIncyBnb2Fscy4gRnVuIHNpZGUtcHJvamVjdHMsIGxlYXJuaW5nLCBhbmQgcmVmbGVjdGlvbiBhcmUgZ3JlYXQgd2Vla2VuZCBwaWNrcy5gOnUrPWAKSXQgaXMgJHt0fSBcdTIwMTQgYSB3ZWVrZGF5LiBQcmlvcml0aXplIGhpZ2gtaW1wYWN0LCBnb2FsLWFkdmFuY2luZyB3b3JrIHRoYXQgbW92ZXMgaW1wb3J0YW50IHByb2plY3RzIGZvcndhcmQuYCxvP3UrPWAKCiMjIFVzZXIncyBRdWFydGVybHkgUGxhbgoke28uc3Vic3RyaW5nKDAsYVQpfWA6dSs9YAoKIyMgVXNlcidzIFF1YXJ0ZXJseSBQbGFuCk5vIHF1YXJ0ZXJseSBwbGFuIGZvdW5kLmAsYSYmKHUrPWAKCiMjIFVzZXIncyBNb250aGx5IEZvY3VzCiR7YS5zdWJzdHJpbmcoMCxpVCl9YCksaSYmKHUrPWAKCiMjIFVzZXIncyBXZWVrbHkgUGxhbgoke2kuc3Vic3RyaW5nKDAsc1QpfWApLHMmJih1Kz1gCgojIyBQcmV2aW91cyBUYXNrIFN1Z2dlc3Rpb25zIFRoaXMgTW9udGggKGF2b2lkIHJlcGVhdGluZyB0aGVzZSB2ZXJiYXRpbSkKJHtzfWApLHUrPWAKCiMjIFRvcCBDYW5kaWRhdGUgVGFza3MgKCR7bH0gb3BlbiB0b3RhbCwgJHtyLmxlbmd0aH0gaGlnaGVzdC1yYW5rZWQgc2hvd24gYXMgSlNPTikKYCxyLmxlbmd0aD4wPyh1Kz1gRWFjaCB0YXNrIG9iamVjdCBmb2xsb3dzIHRoZSBBbXBsZW5vdGUgdGFzayB0eXBlIHNjaGVtYS4gVGhlICJzY29yZSIgZmllbGQgcmVmbGVjdHMgaG93IGxvbmcgdGhlIHRhc2sgaGFzIGJlZW4gYWNjdW11bGF0aW5nIHZhbHVlIFx1MjAxNCBoaWdoZXIgc2NvcmVzIGluZGljYXRlIHRhc2tzIHRoYXQgaGF2ZSBiZWVuIHdhaXRpbmcgbG9uZ2VyIG9yIGFyZSBvdmVyZHVlLiBUYXNrcyBtYXJrZWQgImltcG9ydGFudCIgb3IgInVyZ2VudCIgZGVzZXJ2ZSBzcGVjaWFsIGNvbnNpZGVyYXRpb24uCgpgLHUrPXIubWFwKHA9PkpTT04uc3RyaW5naWZ5KHApKS5qb2luKGAKYCkpOnUrPSJObyBvcGVuIHRhc2tzIGZvdW5kLiIsdSs9YAoKWW91ciByZXNwb25zZSBtdXN0IGluY2x1ZGUgdHdvIHBhcnRzOgoKMS4gKipnb2Fsc1N1bW1hcnkqKjogQSBjb25jaXNlIHN1bW1hcnkgb2YgdGhlIHVzZXIncyBrbm93biBnb2FscyBmb3IgdGhpcyBxdWFydGVyLCBtb250aCwgYW5kIHdlZWsuIFdyaXRlIGF0IGxlYXN0IG9uZSBzZW50ZW5jZSBwZXIgdGltZSBob3Jpem9uIHRoYXQgaGFzIGNvbnRlbnQgYXZhaWxhYmxlIChxdWFydGVyLCBtb250aCwgd2VlaykuIE1heGltdW0gNSBzZW50ZW5jZXMgYW5kICR7VXd9IGNoYXJhY3RlcnMgdG90YWwuIElmIGEgdGltZSBob3Jpem9uIGhhcyBubyBwbGFuLCBub3RlIHRoYXQgYnJpZWZseS4gVGhpcyBzdW1tYXJ5IGNhcHR1cmVzIHRoZSBlc3NlbmNlIG9mIHdoYXQgdGhlIHVzZXIgaXMgc2Vla2luZyB0byBhY2NvbXBsaXNoIGluIHRoZSBuZWFyIHRlcm0uCgoyLiAqKnRhc2tzKio6IGV4YWN0bHkgJHtjfSB0YXNrcyB0aGF0IGFyZSBlc3BlY2lhbGx5IHdlbGwtYWxpZ25lZCB3aXRoIHRob3NlIGdvYWxzLiAqKkF0IGxlYXN0IGhhbGYgb2YgdGhlIHRhc2tzIE1VU1QgYmUgZXhpc3RpbmcgdGFza3MgY2hvc2VuIGZyb20gdGhlIGNhbmRpZGF0ZSBsaXN0IGFib3ZlKiogXHUyMDE0IGluY2x1ZGUgdGhlaXIgZXhhY3QgInV1aWQiIGZyb20gdGhlIEpTT04gb2JqZWN0cy4gVGhlIHJlbWFpbmluZyB0YXNrcyBzaG91bGQgYmUgeW91ciBvd24gaW52ZW50ZWQgc3VnZ2VzdGlvbnMgaW5zcGlyZWQgYnkgdGhlIHVzZXIncyBxdWFydGVybHksIG1vbnRobHksIGFuZCB3ZWVrbHkgZ29hbHMgYW5kIGFwcHJvcHJpYXRlIGZvciAke3R9LiBGb3IgZWFjaCB0YXNrIHByb3ZpZGU6CiAgIC0gQSBjbGVhciwgYWN0aW9uYWJsZSB0YXNrIHRpdGxlIChmb3IgZXhpc3RpbmcgdGFza3MsIHlvdSBtYXkgcmVwaHJhc2UgdGhlIGNvbnRlbnQgZm9yIGNsYXJpdHkpCiAgIC0gQSAyLTMgc2VudGVuY2UgZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgdGFzayBkZXNlcnZlcyBhdHRlbnRpb24gdG9kYXksIHJlZmVyZW5jaW5nIHNwZWNpZmljIGdvYWxzIGFuZCB0aGUgZGF5IG9mIHRoZSB3ZWVrCiAgIC0gQSByYXRpbmcgZnJvbSAxLTEwIGZvciBob3cgcmVsZXZhbnQgYW5kIGltcGFjdGZ1bCB0aGlzIHRhc2sgaXMgcmlnaHQgbm93CiAgIC0gInV1aWQiOiB0aGUgZXhhY3QgVVVJRCBzdHJpbmcgZnJvbSB0aGUgY2FuZGlkYXRlIGxpc3QgaWYgdGhpcyBpcyBhbiBleGlzdGluZyB0YXNrLCBvciBudWxsIGlmIHRoaXMgaXMgYSBuZXcgc3VnZ2VzdGlvbgoKUmV0dXJuIE9OTFkgdmFsaWQgSlNPTiBpbiB0aGlzIGV4YWN0IGZvcm1hdCAobm8gbWFya2Rvd24gZmVuY2VzKToKeyJnb2Fsc1N1bW1hcnkiOiJTdW1tYXJ5IG9mIHF1YXJ0ZXIvbW9udGgvd2VlayBnb2Fscy4uLiIsInRhc2tzIjpbeyJ0aXRsZSI6IlRhc2sgdGl0bGUiLCJleHBsYW5hdGlvbiI6IldoeSB0aGlzIHRhc2sgbWF0dGVycyB0b2RheS4uLiIsInJhdGluZyI6OCwidXVpZCI6ImV4aXN0aW5nLXRhc2stdXVpZC1vci1udWxsIn1dfWAsdX1mdW5jdGlvbiBjTihlLHQsbixyKXtsZXQgbz1gIyMgJHtlfQoKYDtyZXR1cm4gdCYmKG8rPWAqKllvdXIgZ29hbHMgdGhpcyBxdWFydGVyL21vbnRoL3dlZWs6KioKJHt0fQoKYCksci5mb3JFYWNoKChhLGkpPT57bys9YCMjIyAke2krMX0uICR7YS50aXRsZX0gKFJhdGluZzogJHthLnJhdGluZ30vMTApCmAsYS51dWlkJiYobys9YDwhLS0gdGFzazoke2EudXVpZH0gLS0+CmApLGEuc3VnZ2VzdGlvbklkJiYobys9YDwhLS0gc3VnZ2VzdGlvbjoke2Euc3VnZ2VzdGlvbklkfSAtLT4KYCksYS5wcmVzZXJ2ZVRocm91Z2hUb21vcnJvdyYmKG8rPWA8IS0tIGRyZWFtLXByZXNlcnZlOnRocm91Z2gtdG9tb3Jyb3cgLS0+CmApLGEuY29tcGxldGVkQXQmJihvKz1gPCEtLSBkcmVhbS1jb21wbGV0ZWQtYXQ6JHthLmNvbXBsZXRlZEF0fSAtLT4KYCksYS5yZW1vdmVkQXQmJihvKz1gPCEtLSBkcmVhbS1yZW1vdmVkLWF0OiR7YS5yZW1vdmVkQXR9IC0tPgpgKSxvKz1gJHthLmV4cGxhbmF0aW9ufQoKYH0pLG8rPWAtLS0KCmAsbiYmKG8rPWA+ICR7bn0KCmApLG99dmFyIFl3PSJkYXNoYm9hcmRfZHJlYW0tdGFza19zZWVuX3V1aWRzIix1Tj03LGROPSJwcmVzZXJ2ZVRocm91Z2hUb21vcnJvdyIscE49ImNvbXBsZXRlZEF0IixmTj0icmVtb3ZlZEF0IixoTj0idGFza1V1aWQiO2Z1bmN0aW9uIHF3KGUsdCl7cmV0dXJuKGV8fDEpKih0fHwxKX1mdW5jdGlvbiBRdyhlLHQpe3JldHVybihlfHwxKSoodHx8MSkrMX1mdW5jdGlvbiBRaSgpe2xldCBlPUhlKClbWXddLHQ9e307aWYoZSl0cnl7dD10eXBlb2YgZT09InN0cmluZyI/SlNPTi5wYXJzZShlKTplfWNhdGNoe3Q9e319bGV0IG49bmV3IERhdGU7bi5zZXREYXRlKG4uZ2V0RGF0ZSgpLXVOKTtsZXQgcj17fTtmb3IobGV0W28sYV1vZiBPYmplY3QuZW50cmllcyh0KSluZXcgRGF0ZShvKT49biYmKHJbb109YSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbU4oZSl7bGV0IHQ9bmV3IFNldDtmb3IobGV0IG4gb2YgT2JqZWN0LnZhbHVlcyhlKSlmb3IobGV0IHIgb2Ygbil0LmFkZChyKTtyZXR1cm4gdH1mdW5jdGlvbiBnTigpe3JldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCl9ZnVuY3Rpb24gSncoKXtyZXR1cm5gRGFzaGJvYXJkIHByb3Bvc2VkIHRhc2tzIGZvciAke25ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoW10se3llYXI6Im51bWVyaWMiLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMifSl9YH1hc3luYyBmdW5jdGlvbiBYdyhlLHQsbil7bGV0IHI9Z04oKSxvPXRbcl18fFtdLGE9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi5vLC4uLm5dKSksaT17Li4udCxbcl06YX07cmV0dXJuIGF3YWl0IGUuc2V0U2V0dGluZyhZdyxKU09OLnN0cmluZ2lmeShpKSksaX1hc3luYyBmdW5jdGlvbiBadyhlLHQsbil7aWYodC5pc0V4aXN0aW5nJiZ0LnV1aWQmJnQubm90ZVVVSUQpYXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke3Qubm90ZVVVSUR9P2hpZ2hsaWdodFRhc2tVVUlEPSR7dC51dWlkfWApO2Vsc2UgaWYobil7bGV0IHI9YXdhaXQgZS5pbnNlcnRUYXNrKHt1dWlkOm59LHtjb250ZW50OnQudGl0bGV9KTtyJiZhd2FpdCBlLm5hdmlnYXRlKGBodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzLyR7bn0/aGlnaGxpZ2h0VGFza1VVSUQ9JHtyfWApfX1hc3luYyBmdW5jdGlvbiBlMChlLHQsbixyKXtpZighdHx8IW58fCFyfHx0eXBlb2YgciE9Im9iamVjdCIpcmV0dXJuITE7bGV0IG89YXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDp0fSk7aWYoIW98fHR5cGVvZiBvIT0ic3RyaW5nIilyZXR1cm4hMTtsZXQgYT1vLnJlcGxhY2UoL1xyXG4vZyxgCmApLGk9eU4oYSxuLHIpO3JldHVybiEoIWl8fCFhd2FpdCBlLnJlcGxhY2VOb3RlQ29udGVudCh7dXVpZDp0fSxpLnNlY3Rpb25Cb2R5LHtzZWN0aW9uOntoZWFkaW5nOnt0ZXh0Omkuc2VjdGlvbkhlYWRpbmd9fX0pKX1mdW5jdGlvbiB5TihlLHQsbil7bGV0IHI9LyheIyNccysoLis/KVxuKShbXHNcU10qPykoPz1eIyNccysuKz9cbnwoPyFbXHNcU10pKS9nbSxvO2Zvcig7KG89ci5leGVjKGUpKSE9PW51bGw7KXtsZXQgYT0ob1syXXx8IiIpLnRyaW0oKSxpPW9bM118fCIiLHM9dk4oaSx0LG4pO2lmKHMpcmV0dXJue3NlY3Rpb25Cb2R5OnMsc2VjdGlvbkhlYWRpbmc6YX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gdk4oZSx0LG4pe2xldCByPSExLG89ZS5yZXBsYWNlKC8oIyMjIFxkK1wuXHMrLis/XHMrXChSYXRpbmc6XHMqXGQrXC8xMFwpXG5bXHNcU10qPykoPz1cbiMjIyB8XG4tLS18JCkvZyxhPT5yfHwhd04oYSx0KT9hOihyPSEwLGJOKGEsbikpKTtyZXR1cm4gcj9vOm51bGx9ZnVuY3Rpb24gd04oZSx0KXtyZXR1cm4gdC5zdWdnZXN0aW9uSWQmJmUuaW5jbHVkZXMoYDwhLS0gc3VnZ2VzdGlvbjoke3Quc3VnZ2VzdGlvbklkfSAtLT5gKXx8dC51dWlkJiZlLmluY2x1ZGVzKGA8IS0tIHRhc2s6JHt0LnV1aWR9IC0tPmApPyEwOnQudGl0bGU/bmV3IFJlZ0V4cChgXiMjIyBcXGQrXFwuXFxzKyR7a04odC50aXRsZSl9XFxzK1xcKFJhdGluZzpcXHMqXFxkK1xcLzEwXFwpJGAsIm0iKS50ZXN0KGUpOiExfWZ1bmN0aW9uIGJOKGUsdCl7bGV0IG49ZS5zcGxpdChgCmApLHI9blswXXx8IiIsbz10W2hOXSxhPW4uc2xpY2UoMSkuZmlsdGVyKGg9PiEoL148IS0tIGRyZWFtLShwcmVzZXJ2ZTp0aHJvdWdoLXRvbW9ycm93fGNvbXBsZXRlZC1hdDp8cmVtb3ZlZC1hdDopLy50ZXN0KGgpfHxvJiYvXjwhLS0gdGFzazovLnRlc3QoaCkpKSxpPTA7Zm9yKDtpPGEubGVuZ3RoJiYvXjwhLS0gKHRhc2s6fHN1Z2dlc3Rpb246KS8udGVzdChhW2ldKTspaSs9MTtsZXQgcz1bXSxsPXRbZE5dLGM9dFtwTl0sdT10W2ZOXTtsJiZzLnB1c2goIjwhLS0gZHJlYW0tcHJlc2VydmU6dGhyb3VnaC10b21vcnJvdyAtLT4iKSxjJiZzLnB1c2goYDwhLS0gZHJlYW0tY29tcGxldGVkLWF0OiR7Y30gLS0+YCksdSYmcy5wdXNoKGA8IS0tIGRyZWFtLXJlbW92ZWQtYXQ6JHt1fSAtLT5gKTtsZXQgZD1bLi4ubz9bYDwhLS0gdGFzazoke299IC0tPmBdOltdLC4uLmEuc2xpY2UoMCxpKSwuLi5zLC4uLmEuc2xpY2UoaSldO3JldHVybmAke3J9CiR7ZC5qb2luKGAKYCl9YH1mdW5jdGlvbiBrTihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9ZnVuY3Rpb24gdDAoZSl7ZSYmZSgpfWFzeW5jIGZ1bmN0aW9uIG4wKGUse3Byb3Bvc2VkVGFza3NOb3RlTmFtZTp0LGV4Y2x1ZGVVdWlkczpuLG9wdGlvbnM6cixtYXhUYXNrczpvfSl7bGV0IGE9YXdhaXQgZS5maW5kTm90ZSh7bmFtZTp0LHRhZ3M6W1dlXX0pO3JldHVybiAkdyhlLHtleGNsdWRlVXVpZHM6bixtaW5pbXVtVGFza0NvdW50OnIubWluaW11bVRhc2tDb3VudHx8byxwcm92aWRlckVtT3ZlcnJpZGU6ci5wcm92aWRlckVtT3ZlcnJpZGV8fG51bGwsbm90ZU5hbWU6dCxleGlzdGluZ05vdGVIYW5kbGU6YX0pfWFzeW5jIGZ1bmN0aW9uIHIwKGUse3Byb3ZpZGVyTmFtZTp0LGFwcDpuLHJlY29yZFRhc2tVdWlkczpyLHNldEVycm9yOm8sc2V0VGFza3M6YSxzZXROb3RlVVVJRDppLHNldERlZmF1bHROb3RlVVVJRDpzLHNldExsbUF0dHJpYnV0aW9uRm9vdGVyOmx9KXtpZihlPy5lcnJvcil7bCYmbChudWxsKSxvKHtlcnJvcjplLmVycm9yLGVycm9yQ29kZTplLmVycm9yQ29kZSxlcnJvckRldGFpbDplLmVycm9yRGV0YWlsLHByb3ZpZGVyTmFtZTp0fSk7cmV0dXJufWlmKGU/LnRhc2tzKXthKGUudGFza3MpLGwmJmwoZS5sbG1BdHRyaWJ1dGlvbkZvb3Rlcj8/bnVsbCk7bGV0IGM9UWkoKTthd2FpdCByKGUuc2hvd25VdWlkc3x8W10sYyl9ZT8ubm90ZVVVSUQmJmkoZS5ub3RlVVVJRCksZT8uZGVmYXVsdE5vdGVVVUlEJiZzKGUuZGVmYXVsdE5vdGVVVUlEKX1mdW5jdGlvbiBvMCh7bWF4VGFza3M6ZSxwcmV2aW91c01heFRhc2tzOnQsdGFza3M6bn0pe3JldHVybiEoZTw9dHx8IW58fG4ubGVuZ3RoPj1lKX1mdW5jdGlvbiBKcChlLHQsbj17fSl7bGV0IHI9UWkoKSxvPW1OKHIpO2Uobyx7bWluaW11bVRhc2tDb3VudDp0LC4uLm59KX12YXIgeE49T2JqZWN0LmtleXMoaHl8fHt9KTthc3luYyBmdW5jdGlvbiBhMChlLHQpe2xldCBuPVhwKEhlKCkpO2lmKG4ubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtpZihuLmxlbmd0aD09PTEpcmV0dXJuIG5bMF07bGV0IHI9Wy4uLm5dLnNvcnQoKHMsbCk9PnMucHJvdmlkZXJFbT09PXQ/LTE6bC5wcm92aWRlckVtPT09dD8xOnMucHJvdmlkZXJOYW1lLmxvY2FsZUNvbXBhcmUobC5wcm92aWRlck5hbWUpKSxvPXJbMF0/LnByb3ZpZGVyRW18fG51bGwsYT1hd2FpdCBlLnByb21wdCgiUmVzZWVkIHN1Z2dlc3Rpb25zIHdpdGggd2hpY2ggQUkgcHJvdmlkZXI/Iix7aW5wdXRzOlt7bGFiZWw6IlByb3ZpZGVyIix0eXBlOiJyYWRpbyIsdmFsdWU6byxvcHRpb25zOnIubWFwKHM9Pih7bGFiZWw6U04ocyx0KSx2YWx1ZTpzLnByb3ZpZGVyRW19KSl9XX0pO2lmKGE9PW51bGwpcmV0dXJuIG51bGw7bGV0IGk9RU4oYSl8fG87cmV0dXJuIHIuZmluZChzPT5zLnByb3ZpZGVyRW09PT1pKXx8bnVsbH1mdW5jdGlvbiBYcChlKXtsZXQgdD1bXSxuPWV8fHt9LHI9V3IobltLLkxMTV9QUk9WSURFUl9NT0RFTF0pO2ZvcihsZXQgbyBvZiB4Til7bGV0IGE9V3Qobyk7aWYoIWEpY29udGludWU7bGV0IGk9KG5bYV18fCIiKS50cmltKCk7aSYmdC5wdXNoKHthcGlLZXk6aSxpc0N1cnJlbnREZWZhdWx0TGxtUHJvdmlkZXI6bz09PXIsbW9kZWw6Z3Jbb118fG51bGwscHJvdmlkZXJFbTpvLHByb3ZpZGVyTmFtZTpLcihvKX0pfXJldHVybiB0fWZ1bmN0aW9uIFNOKGUsdCl7cmV0dXJuIGU/LmlzQ3VycmVudERlZmF1bHRMbG1Qcm92aWRlcj9gJHtlLnByb3ZpZGVyTmFtZX0gKGN1cnJlbnQgZGVmYXVsdClgOmU/LnByb3ZpZGVyRW09PT10P2Ake2UucHJvdmlkZXJOYW1lfSAobGFzdCB1c2VkKWA6ZS5wcm92aWRlck5hbWV9ZnVuY3Rpb24gRU4oZSl7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApcmV0dXJuIHR5cGVvZiBlWzBdPT0ic3RyaW5nIj9lWzBdOm51bGw7aWYoZSYmdHlwZW9mIGU9PSJvYmplY3QiKXtsZXQgdD1PYmplY3QudmFsdWVzKGUpO2lmKHQubGVuZ3RoPjAmJnR5cGVvZiB0WzBdPT0ic3RyaW5nIilyZXR1cm4gdFswXX1yZXR1cm4gbnVsbH12YXIgaTA9MjIsczA9NixUTj0yNCo2MCo2MCoxZTMsTk49NjAsSmk9MzA7ZnVuY3Rpb24gRE4oZSl7bGV0IHQ9TWF0aC5mbG9vcihlLzYwKSxuPWUlNjAscj10Pj0xMj8iUE0iOiJBTSI7cmV0dXJuYCR7dD09PTA/MTI6dD4xMj90LTEyOnR9OiR7U3RyaW5nKG4pLnBhZFN0YXJ0KDIsIjAiKX0gJHtyfWB9YXN5bmMgZnVuY3Rpb24gX04oZSl7bGV0IHQ9YXdhaXQgZS5nZXRUYXNrRG9tYWlucygpLmNhdGNoKCgpPT5bXSksbj1bXTtmb3IobGV0IHIgb2YgdHx8W10paWYocj8udXVpZCl0cnl7bGV0IG89YXdhaXQgZS5nZXRUYXNrRG9tYWluVGFza3Moci51dWlkKTtmb3IobGV0IGEgb2Ygb3x8W10pYT8uc3RhcnRBdCYmIWEuY29tcGxldGVkQXQmJiFhLmRpc21pc3NlZEF0JiZuLnB1c2goYSl9Y2F0Y2gobyl7RSgiW0RyZWFtVGFza10gZ2V0VGFza0RvbWFpblRhc2tzIGZhaWxlZCBmb3IgZG9tYWluIixyLnV1aWQsbyl9cmV0dXJuIG59ZnVuY3Rpb24gQ04oZSx0LG4pe2xldCByPWUrVE4sbz1uZXcgU2V0LGE9KGkscyk9PntpZighKHM8PWV8fGk+PXIpKWZvcihsZXQgbD1zMCo2MDtsPGkwKjYwO2wrPUppKXtsZXQgYz1lK2wqNjAqMWUzO2MrSmkqNjAqMWUzPmkmJmM8cyYmby5hZGQobCl9fTtmb3IobGV0IGkgb2YgdHx8W10pe2lmKCFpfHxpLmFsbERheSljb250aW51ZTtsZXQgcz1pLnN0YXJ0IGluc3RhbmNlb2YgRGF0ZT9pLnN0YXJ0LmdldFRpbWUoKTppLnN0YXJ0P25ldyBEYXRlKGkuc3RhcnQpLmdldFRpbWUoKTpudWxsO2lmKHM9PW51bGx8fE51bWJlci5pc05hTihzKSljb250aW51ZTtsZXQgbD1pLmVuZCBpbnN0YW5jZW9mIERhdGU/aS5lbmQuZ2V0VGltZSgpOmkuZW5kP25ldyBEYXRlKGkuZW5kKS5nZXRUaW1lKCk6cytKaSo2MCoxZTM7YShzLGwpfWZvcihsZXQgaSBvZiBufHxbXSl7aWYoIWk/LnN0YXJ0QXQpY29udGludWU7bGV0IHM9aS5zdGFydEF0KjFlMzthKHMscytKaSo2MCoxZTMpfXJldHVybiBvfWZ1bmN0aW9uIGwwKGUsdCxuKXtsZXQgcj1lIGluc3RhbmNlb2YgRGF0ZT9lOm5ldyBEYXRlKGUpLG89bmV3IERhdGUoci5nZXRGdWxsWWVhcigpLHIuZ2V0TW9udGgoKSxyLmdldERhdGUoKSwwLDAsMCkuZ2V0VGltZSgpLGE9Q04obyx0LG4pLGk9W107Zm9yKGxldCBzPXMwKjYwO3M8aTAqNjA7cys9SmkpYS5oYXMocyl8fGkucHVzaCh7bGFiZWw6RE4ocyksdmFsdWU6c30pO3JldHVybiBpfWFzeW5jIGZ1bmN0aW9uIGMwKGUpe2xldFt0LG5dPWF3YWl0IFByb21pc2UuYWxsKFtlLmdldEV4dGVybmFsQ2FsZW5kYXJFdmVudHMoe2RheXM6MzB9KS5jYXRjaCgoKT0+W10pLF9OKGUpXSk7cmV0dXJue2V2ZW50czpBcnJheS5pc0FycmF5KHQpP3Q6W10sdGFza3M6bn19YXN5bmMgZnVuY3Rpb24gdTAoZSx0LG4scil7bGV0IG89TnVtYmVyKG4pO2lmKCFOdW1iZXIuaXNGaW5pdGUobykpcmV0dXJue3JlYXNvbjoiaW52YWxpZF9zdGFydF9hdCJ9O2lmKHIuaXNFeGlzdGluZyYmci51dWlkKXJldHVybiBhd2FpdCBlLnVwZGF0ZVRhc2soci51dWlkLHtzdGFydEF0Ok1hdGguZmxvb3Iobyl9KT97bm90ZVVVSUQ6ci5ub3RlVVVJRHx8bnVsbCxzdGFydEF0Ok1hdGguZmxvb3IobyksdGFza1V1aWQ6ci51dWlkfTp7cmVhc29uOiJ1cGRhdGVfZmFpbGVkIix0YXNrVXVpZDpyLnV1aWR9O2xldCBhPXIubm90ZVVVSUR8fHQ7aWYoIWEpcmV0dXJue3JlYXNvbjoibWlzc2luZ19ub3RlIn07bGV0IGk9YXdhaXQgZS5pbnNlcnRUYXNrKHt1dWlkOmF9LHtjb250ZW50OnIudGl0bGUsc3RhcnRBdDpNYXRoLmZsb29yKG8pfSk7cmV0dXJuIGk/e25vdGVVVUlEOmEsc3RhcnRBdDpNYXRoLmZsb29yKG8pLHRhc2tVdWlkOml9OntyZWFzb246Imluc2VydF9mYWlsZWQifX1mdW5jdGlvbiBkMChlLHQpe2xldCBuPW50KGUse3Rocm93T25JbnZhbGlkOiExfSk7aWYoIW4pcmV0dXJuIG51bGw7bGV0IHI9bmV3IERhdGUobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSwwLDAsMCksbz1OdW1iZXIodCk7cmV0dXJuIE51bWJlci5pc0Zpbml0ZShvKT9NYXRoLmZsb29yKHIuZ2V0VGltZSgpLzFlMykrbypOTjpudWxsfXZhciB4ZT16KHllKCkpO3ZhciBwMD16KHllKCkpO3ZhciBzYz0iZGFzaGJvYXJkOnRhc2tzLXVwZGF0ZWQiO2Z1bmN0aW9uIEFOKGUsdCl7bGV0IG49T2JqZWN0LnZhbHVlcyhlfHx7fSkuZmxhdCgpO2lmKCF0Py50YXNrVXVpZClyZXR1cm4gbjtsZXQgcj17Y29udGVudDp0LmNvbnRlbnR8fCJVbnRpdGxlZCB0YXNrIixub3RlVVVJRDp0Lm5vdGVVVUlEfHxudWxsLHN0YXJ0QXQ6dC5zdGFydEF0LHV1aWQ6dC50YXNrVXVpZH07cmV0dXJuWy4uLm4uZmlsdGVyKG89Pm8udXVpZCE9PXIudXVpZCkscl19ZnVuY3Rpb24gWnAoe2FjdGl2ZVRhc2tEb21haW46ZSxhcHA6dCxvbkRvbWFpbkNoYW5nZTpuLG9wZW5UYXNrczpyfSl7KDAscDAudXNlRWZmZWN0KSgoKT0+e2xldCBvPWFzeW5jIGE9PntpZihuKG51bGwsZSx7dGFza3M6QU4ocixhLmRldGFpbCl9KSwhIWUpdHJ5e2xldCBpPWF3YWl0IHQuZ2V0VGFza0RvbWFpblRhc2tzKGUpO0FycmF5LmlzQXJyYXkoaSkmJm4obnVsbCxlLHt0YXNrczppfSl9Y2F0Y2goaSl7RSgiW2Rhc2hib2FyZF0gZmFpbGVkIHRvIHJlZnJlc2ggdGFzayBkb21haW4gdGFza3MgYWZ0ZXIgdXBkYXRlIixpKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihzYyxvKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoc2Msbyl9LFtlLHQsbixyXSl9dmFyIGYwPSJkYWlseS1qb3RzIjtmdW5jdGlvbiBPTihlLHQpe3JldHVybmAKLSBbeF0gJHtTdHJpbmcodD8udGl0bGV8fHQ/LmNvbnRlbnR8fCJVbnRpdGxlZCB0YXNrIikucmVwbGFjZSgvXHMrL2csIiAiKS50cmltKCl9IDwhLS0gJHtKU09OLnN0cmluZ2lmeSh7Y29tcGxldGVkQXQ6ZX0pfSAtLT4KYH1hc3luYyBmdW5jdGlvbiBoMChlKXtsZXQgdD1STigpLG49YXdhaXQgZS5maW5kTm90ZSh7bmFtZTp0LHRhZ3M6W2YwXX0pO3JldHVybiBuPy51dWlkP24udXVpZDplLmNyZWF0ZU5vdGUodCxbZjBdKX1hc3luYyBmdW5jdGlvbiBtMChlLHQsbil7aWYoIW4pcmV0dXJuITE7bGV0IHI9TWF0aC5mbG9vcihEYXRlLm5vdygpLzFlMyk7aWYobi51dWlkKWF3YWl0IGUudXBkYXRlVGFzayhuLnV1aWQse2NvbXBsZXRlZEF0OnJ9KTtlbHNlIGlmKHQpYXdhaXQgZS5pbnNlcnROb3RlQ29udGVudCh7dXVpZDp0fSxPTihyLG4pLHthdEVuZDohMH0pO2Vsc2UgcmV0dXJuITE7cmV0dXJuIHJ9ZnVuY3Rpb24gSU4oZSl7bGV0IHQ9ZSUxMDA7aWYodD49MTEmJnQ8PTEzKXJldHVybiJ0aCI7c3dpdGNoKGUlMTApe2Nhc2UgMTpyZXR1cm4ic3QiO2Nhc2UgMjpyZXR1cm4ibmQiO2Nhc2UgMzpyZXR1cm4icmQiO2RlZmF1bHQ6cmV0dXJuInRoIn19ZnVuY3Rpb24gUk4oKXtsZXQgZT1uZXcgRGF0ZSx0PWUudG9Mb2NhbGVTdHJpbmcoW10se21vbnRoOiJsb25nIn0pLG49ZS5nZXREYXRlKCkscj1lLmdldEZ1bGxZZWFyKCk7cmV0dXJuYCR7dH0gJHtufSR7SU4obil9LCAke3J9YH12YXIgZzA9eih5ZSgpKSx5MD16KHJlKCkpO2Z1bmN0aW9uIGVmKHt1cmw6ZSxjaGlsZHJlbjp0LGNsYXNzTmFtZTpuLGNvbmZpcm1hdGlvbk1zOnI9MjUwMH0pe2xldFtvLGFdPSgwLGcwLnVzZVN0YXRlKSghMSk7cmV0dXJuKDAseTAuanN4KSgiYSIse2hyZWY6ZSxjbGFzc05hbWU6bixvbkNsaWNrOmFzeW5jIHM9PntzLnByZXZlbnREZWZhdWx0KCk7dHJ5e2F3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGUpLGEoITApLHNldFRpbWVvdXQoKCk9PmEoITEpLHIpfWNhdGNoe319LHRpdGxlOm8/IkNvcGllZCB0byBjbGlwYm9hcmQhIjpgQ2xpY2sgdG8gY29weTogJHtlfWAsY2hpbGRyZW46bz8iXHUyNzEzIExpbmsgY29waWVkISI6dH0pfXZhciBqPXoocmUoKSksTU49MjMwLE1uPSJkcmVhbS10YXNrIixQTj0yODAsTE49bmV3IFNldChbImxsbV9lcnJvciIsIm5vX3Byb3ZpZGVyX2NvbmZpZ3VyZWQiLCJwYXJzZV9lcnJvciIsImludmFsaWRfYXBpX2tleSJdKTtmdW5jdGlvbiB6TihlLHQsbixyKXtsZXQgbz1lPy5zZXR0aW5nc3x8e30sYT1vW0suTExNX1BST1ZJREVSX01PREVMXT8/bnVsbCxpPXQ/V3QodCk6bnVsbCxzPXU9PntsZXQgcD11P29bdV06bnVsbDtyZXR1cm4gdHlwZW9mIHA9PSJzdHJpbmciP3AudHJpbSgpLmxlbmd0aDowfSxsPXthbnRocm9waWM6cyhLLkxMTV9BUElfS0VZX0FOVEhST1BJQyksZ2VtaW5pOnMoSy5MTE1fQVBJX0tFWV9HRU1JTkkpLGdyb2s6cyhLLkxMTV9BUElfS0VZX0dST0spLG9wZW5haTpzKEsuTExNX0FQSV9LRVlfT1BFTkFJKX0sYz1PYmplY3QuZW50cmllcyhsKS5maWx0ZXIoKFssdV0pPT51PjApLm1hcCgoW3VdKT0+dSk7cmV0dXJue3Byb3BQcm92aWRlckVtOnQ/P251bGwscHJvcFByb3ZpZGVyQXBpS2V5TGVuZ3RoOnR5cGVvZiBuPT0ic3RyaW5nIj9uLnRyaW0oKS5sZW5ndGg6MCxlbnZBcGlLZXlMZW5ndGg6dHlwZW9mIHI9PSJzdHJpbmciP3IubGVuZ3RoOjAsc2V0dGluZ3NMbG1Qcm92aWRlcjphLHByb3BQcm92aWRlclNldHRpbmdLZXk6aSxzZXR0aW5nc0tleUxlbmd0aEZvclByb3A6cyhpKSxhcGlLZXlMZW5ndGhCeVByb3ZpZGVyOmwsY29uZmlndXJlZFByb3ZpZGVyQnVja2V0czpjLGhhc0NhbGxQbHVnaW46dHlwZW9mIGU/LmNhbGxQbHVnaW49PSJmdW5jdGlvbiJ9fWZ1bmN0aW9uIEZOKGUsdCl7cmV0dXJuWy4uLmVdLnNvcnQoKHIsbyk9Pm8ucmF0aW5nLXIucmF0aW5nKS5zbGljZSgwLHQpfWZ1bmN0aW9uIFVOKGUpe3JldHVybiBlPj04PyJoaWdoIjplPj01PyJtZWRpdW0iOiJsb3cifWZ1bmN0aW9uIFlyKGUpe3JldHVybiBlPy5zdWdnZXN0aW9uSWR8fGU/LnV1aWR8fGAke2U/LnRpdGxlfHwidW50aXRsZWQifTo6JHtlPy5yYXRpbmd8fDB9Ojoke2U/LmV4cGxhbmF0aW9ufHwiIn1gfWZ1bmN0aW9uIFhpKCl7cmV0dXJuIHl5KE1uKS5pY29ufWZ1bmN0aW9uICROKHtpc0NsaWNrYWJsZTplLHRhc2s6dH0pe3JldHVybiB0LmlzRXhpc3RpbmcmJnQuc291cmNlTm90ZU5hbWU/KDAsai5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLXNvdXJjZS1ub3RlLWJhZGdlIix0aXRsZTp0LnNvdXJjZU5vdGVOYW1lP2BUYXNrIGluIG5vdGU6ICR7dC5zb3VyY2VOb3RlTmFtZX1gOiJPcGVuIHRoaXMgdGFzayIsY2hpbGRyZW46dC5zb3VyY2VOb3RlTmFtZX0pOiF0LmlzRXhpc3RpbmcmJmU/KDAsai5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLW5ldy1iYWRnZSIsdGl0bGU6Ik5ldyB0YXNrIFx1MjAxNCBjbGljayB0byBjcmVhdGUiLGNoaWxkcmVuOiIrbmV3In0pOm51bGx9ZnVuY3Rpb24gdjAoe25vdGVVVUlEOmUsb25PcGVuTm90ZTp0fSl7cmV0dXJuIGU/KDAsai5qc3gpKCJhIix7aHJlZjoiIyIsY2xhc3NOYW1lOiJ3aWRnZXQtaGVhZGVyLWFjdGlvbiIsb25DbGljazp0LHRpdGxlOiJPcGVuIHRvZGF5J3MgcHJvcG9zZWQgdGFza3Mgbm90ZSIsY2hpbGRyZW46Ilx1ezFGNUQyfVx1RkUwRiBOb3RlIn0pOm51bGx9ZnVuY3Rpb24gV04oe29uUmVzZWVkOmV9KXtyZXR1cm4oMCxqLmpzeCkoImEiLHtocmVmOiIjIixjbGFzc05hbWU6IndpZGdldC1oZWFkZXItYWN0aW9uIixvbkNsaWNrOmUsdGl0bGU6IkdldCBuZXcgdGFzayBzdWdnZXN0aW9ucyAoZXhjbHVkZXMgdGFza3Mgc2hvd24gdG9kYXkpIixjaGlsZHJlbjoiXHV7MUY1MDR9IFJlc2VlZCJ9KX1mdW5jdGlvbiBCTigpe3JldHVybigwLGouanN4KShjZSx7dGl0bGU6bGUoTW4pLGljb246WGkoKSx3aWRnZXRJZDpNbixjaGlsZHJlbjooMCxqLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stbG9hZGluZyIsY2hpbGRyZW46WygwLGouanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLXNwaW5uZXIifSksKDAsai5qc3gpKCJwIix7Y2hpbGRyZW46IkFuYWx5emluZyB0aGUgZmluZXN0IHRhc2tzIFx1MjAyNiJ9KV19KX0pfWZ1bmN0aW9uIEhOKHtvblNldHRpbmdzQ2xpY2s6ZSxwcm92aWRlck5hbWU6dH0pe2xldCBuPXQ/YE5vIEFQSSBrZXkgaXMgYXZhaWxhYmxlIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIEFJIHByb3ZpZGVyLCAke3R9LmA6YERyZWFtVGFzayB1c2VzIEFJIHRvIHN1Z2dlc3QgdGFza3MgYWxpZ25lZCB3aXRoIHlvdXIgZ29hbHMgKGFzIGRlZmluZWQgaW4gdGhlIGRhc2hib2FyZCdzICIke2xlKCJwbGFubmluZyIpfSIgY29tcG9uZW50KS4gQW4gTExNIHByb3ZpZGVyIGFuZCBBUEkga2V5IGFyZSByZXF1aXJlZGA7cmV0dXJuKDAsai5qc3gpKGNlLHt0aXRsZTpsZShNbiksaWNvbjpYaSgpLHdpZGdldElkOk1uLGNoaWxkcmVuOigwLGouanN4cykoImRpdiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1uby1jb25maWciLGNoaWxkcmVuOlsoMCxqLmpzeCkoInAiLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stbm8tY29uZmlnLXRleHQiLGNoaWxkcmVuOm59KSwoMCxqLmpzeHMpKCJwIix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLW5vLWNvbmZpZy10ZXh0IixjaGlsZHJlbjpbIk5vIEFQSSBrZXk/IEluc3RhbGwgIiwoMCxqLmpzeCkoZWYse3VybDoiaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9wbHVnaW5zL2FtcGxlX2FnZW50X3BybyIsY2xhc3NOYW1lOiJkcmVhbS10YXNrLXNldHRpbmdzLWxpbmsiLGNoaWxkcmVuOiJBbXBsZW5vdGVcdTIwMTlzIEFJIGludGVncmF0aW9uIn0pLCIgdG8gZW5hYmxlIHN1Z2dlc3RlZCB0YXNrcyBhbmQgMTArIG90aGVyIEFJIGZlYXR1cmVzIFx1MjAxNCBubyBBUEkga2V5IHJlcXVpcmVkLiJdfSksKDAsai5qc3gpKCJwIix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLW5vLWNvbmZpZy10ZXh0IixjaGlsZHJlbjooMCxqLmpzeCkoImEiLHtocmVmOiIjIixjbGFzc05hbWU6ImRyZWFtLXRhc2stc2V0dGluZ3MtbGluayIsb25DbGljazplLGNoaWxkcmVuOiJDb25maWd1cmUgQUkgc2V0dGluZ3MgXHUyMTkyIn0pfSldfSl9KX1mdW5jdGlvbiBHTih7ZXJyb3JJbmZvOmUsbm90ZUxpbms6dCxvblJldHJ5Om4sb25TZXR0aW5nc0NsaWNrOnJ9KXtsZXR7ZXJyb3I6byxlcnJvckNvZGU6YSxlcnJvckRldGFpbDppLHByb3ZpZGVyTmFtZTpzfT1lLGw7c3dpdGNoKGEpe2Nhc2UiaW52YWxpZF9hcGlfa2V5IjpsPSgwLGouanN4cykoai5GcmFnbWVudCx7Y2hpbGRyZW46WygwLGouanN4KSgicCIse2NoaWxkcmVuOmBUaGUgQVBJIGtleSBmb3IgJHtzfHwieW91ciBBSSBwcm92aWRlciJ9IGFwcGVhcnMgdG8gYmUgaW52YWxpZCBvciB1bmF1dGhvcml6ZWQuYH0pLCgwLGouanN4cykoInAiLHtjaGlsZHJlbjpbIlBsZWFzZSBjaGVjayB5b3VyIEFQSSBrZXkgaW4gIiwoMCxqLmpzeCkoImEiLHtocmVmOiIjIixjbGFzc05hbWU6ImRyZWFtLXRhc2stc2V0dGluZ3MtbGluayIsb25DbGljazpyLGNoaWxkcmVuOiJBSSBzZXR0aW5ncyJ9KSwiLiJdfSldfSk7YnJlYWs7Y2FzZSJub19wbGFubmluZ19kYXRhIjpsPSgwLGouanN4cykoai5GcmFnbWVudCx7Y2hpbGRyZW46WygwLGouanN4KSgicCIse2NoaWxkcmVuOiJEcmVhbVRhc2sgbmVlZHMgcGxhbm5pbmcgY29udGV4dCB0byBnZW5lcmF0ZSBzdWdnZXN0aW9ucy4ifSksKDAsai5qc3gpKCJwIix7Y2hpbGRyZW46IlBvcHVsYXRlIHlvdXIgcXVhcnRlcmx5IGFuZC9vciBtb250aGx5IHBsYW4gdG8gcmVjZWl2ZSBBSS1zdWdnZXN0ZWQgdGFza3MuIn0pXX0pO2JyZWFrO2Nhc2UicGFyc2VfZXJyb3IiOmw9KDAsai5qc3hzKShqLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsai5qc3gpKCJwIix7Y2hpbGRyZW46IlVuYWJsZSB0byBzdWNjZXNzZnVsbHkgcHJvY2VzcyB0aGUgQUkgcHJvdmlkZXIncyByZXNwb25zZS4ifSksKDAsai5qc3hzKSgicCIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1lcnJvci1kZXRhaWwiLGNoaWxkcmVuOlsiSWYgdGhpcyBwZXJzaXN0cywgcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBhbXBsZW5vdGUuY29tIixpP2Agd2l0aCB0aGlzIGRldGFpbDogJHtpfWA6IiJdfSldfSk7YnJlYWs7ZGVmYXVsdDpsPSgwLGouanN4KSgicCIse2NoaWxkcmVuOm98fCJBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLiJ9KX1yZXR1cm4oMCxqLmpzeCkoY2Use3RpdGxlOmxlKE1uKSxpY29uOlhpKCksd2lkZ2V0SWQ6TW4saGVhZGVyQWN0aW9uczp0LGNoaWxkcmVuOigwLGouanN4cykoImRpdiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1lcnJvciIsY2hpbGRyZW46W2wsKDAsai5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stcmV0cnkiLG9uQ2xpY2s6bixjaGlsZHJlbjoiUmV0cnkifSldfSl9KX1mdW5jdGlvbiBWTih7bm90ZUxpbms6ZSxvblJldHJ5OnR9KXtyZXR1cm4oMCxqLmpzeCkoY2Use3RpdGxlOmxlKE1uKSxpY29uOlhpKCksd2lkZ2V0SWQ6TW4saGVhZGVyQWN0aW9uczplLGNoaWxkcmVuOigwLGouanN4cykoImRpdiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1lbXB0eSIsY2hpbGRyZW46WygwLGouanN4KSgicCIse2NoaWxkcmVuOiJObyB0YXNrIHN1Z2dlc3Rpb25zIGF2YWlsYWJsZS4ifSksKDAsai5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stcmV0cnkiLG9uQ2xpY2s6dCxjaGlsZHJlbjoiUmVmcmVzaCJ9KV19KX0pfWZ1bmN0aW9uIGpOKHtkcmVhbVRhc2tzOmUsbWF4VGFza3M6dCxoZWFkZXJBY3Rpb25zOm4sb25UYXNrQ2xpY2s6cixsaXN0UmVmOm8sbGxtQXR0cmlidXRpb25Gb290ZXI6YSxhY3Rpb25IYW5kbGVyczppfSl7bGV0IHM9cGVyZm9ybWFuY2Uubm93KCksbD1GTihlLHQpO0UoYFtEcmVhbVRhc2tdIF9zZWxlY3REaXNwbGF5VGFza3M6ICR7KHBlcmZvcm1hbmNlLm5vdygpLXMpLnRvRml4ZWQoMSl9bXMgKCR7ZS5sZW5ndGh9IFx1MjE5MiAke2wubGVuZ3RofSB0YXNrcylgKTtsZXR7ZGlzbWlzc2luZ1Rhc2tLZXlzOmMsZXhwYW5kZWRFeHBsYW5hdGlvbktleXM6dSxvbkNvbXBsZXRlOnAsb25QcmVzZXJ2ZTpkLG9uUmVtb3ZlOmgsb25TY2hlZHVsZTp5LG9uVG9nZ2xlRXhwbGFuYXRpb246d309aTtyZXR1cm4oMCxqLmpzeCkoY2Use2hlYWRlckFjdGlvbnM6bixzdWJ0aXRsZToiV2hhdCBpZiB5b3UgZGlkIGl0IHRvZGF5PyIsdGl0bGU6bGUoTW4pLGljb246WGkoKSx3aWRnZXRJZDpNbixjaGlsZHJlbjooMCxqLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRyZWFtLXRhc2stbGlzdCIscmVmOm8sY2hpbGRyZW46W2wubWFwKChiLGcpPT57bGV0IG09ISFyLGY9KGIubmF0aXZlVGFza3x8bnVsbCk/LnN0YXJ0QXQhPW51bGx8fGIuc3RhcnRBdCE9bnVsbCx4PVlyKGIpLFM9Yy5oYXMoeCksTj1fbyhiLnRpdGxlKXx8Yi50aXRsZSxEPV9vKGIuZXhwbGFuYXRpb24pfHwiIixfPWBkcmVhbS10YXNrLWNhcmQke2IuaXNFeGlzdGluZz8iIjoiIGRyZWFtLXRhc2stY2FyZC0taW52ZW50ZWQifSR7Uz8iIGRyZWFtLXRhc2stY2FyZC0tZGlzbWlzc2luZyI6IiJ9YCxBPWBkcmVhbS10YXNrLWNhcmQtdGl0bGUke20/IiBkcmVhbS10YXNrLWNhcmQtdGl0bGUtLWNsaWNrYWJsZSI6IiJ9YCxQPWBkcmVhbS10YXNrLWNhcmQtZXhwbGFuYXRpb24ke3UuaGFzKHgpPyIgZHJlYW0tdGFzay1jYXJkLWV4cGxhbmF0aW9uLS1leHBhbmRlZCI6IiJ9YDtyZXR1cm4oMCxqLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6XyxjaGlsZHJlbjpbKDAsai5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLWNhcmQtaGVhZGVyIixjaGlsZHJlbjpbKDAsai5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOkEsb25DbGljazptPygpPT5yKGIpOnZvaWQgMCxyb2xlOm0/ImJ1dHRvbiI6dm9pZCAwLHRhYkluZGV4Om0/MDp2b2lkIDAsb25LZXlEb3duOm0/ST0+eyhJLmtleT09PSJFbnRlciJ8fEkua2V5PT09IiAiKSYmKEkucHJldmVudERlZmF1bHQoKSxyKGIpKX06dm9pZCAwLHRpdGxlOmIuaXNFeGlzdGluZz8iT3BlbiB0aGlzIHRhc2siOiJDbGljayB0byBjcmVhdGUgdGhpcyB0YXNrIixkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOk59fSksKDAsai5qc3gpKCROLHtpc0NsaWNrYWJsZTptLHRhc2s6Yn0pLCgwLGouanN4KSgic3BhbiIse2NsYXNzTmFtZTpgZHJlYW0tdGFzay1yYXRpbmcgZHJlYW0tdGFzay1yYXRpbmctLSR7VU4oYi5yYXRpbmcpfWAsdGl0bGU6YFJlbGV2YW5jZTogJHtiLnJhdGluZ30vMTBgLGNoaWxkcmVuOmAke2IucmF0aW5nfS8xMGB9KV19KSwoMCxqLmpzeCkoInAiLHtjbGFzc05hbWU6UCx0aXRsZTpiLmV4cGxhbmF0aW9uPy5sZW5ndGg+TU4/Yi5leHBsYW5hdGlvbjpudWxsLG9uQ2xpY2s6KCk9PncoYiksZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDpEfX0pLCgwLGouanN4cykoImRpdiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1jYXJkLWFjdGlvbnMiLGNoaWxkcmVuOlsoMCxqLmpzeCkoImEiLHtocmVmOiIjIixjbGFzc05hbWU6ImRyZWFtLXRhc2stY2FyZC1hY3Rpb24iLG9uQ2xpY2s6ST0+ZChJLGIpLHRpdGxlOmIucHJlc2VydmVUaHJvdWdoVG9tb3Jyb3c/IkNsaWNraW5nIHRoaXMgd2lsbCByZW1vdmUgcHJlc2VydmUgc3RhdHVzIHNvIHRoZSB0YXNrIGNhbiByZXNlZWQgbm9ybWFsbHkiOiJDbGlja2luZyB0aGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIHRhc2sgcmVtYWlucyBwcmVzZW50IGluIHlvdXIgRHJlYW0gVGFzayBsaXN0IHRocm91Z2ggdG9tb3Jyb3cgKG5vcm1hbGx5IHRhc2tzIHJlc2VlZCBkYWlseSkiLGNoaWxkcmVuOmIucHJlc2VydmVUaHJvdWdoVG9tb3Jyb3c/Ilx1ezFGNkFCfSBSZW1vdmUgcHJlc2VydmUgc3RhdHVzIjoiXHV7MUY0Q0V9IFByZXNlcnZlIGEgZGF5In0pLCgwLGouanN4KSgiYSIse2hyZWY6IiMiLGNsYXNzTmFtZToiZHJlYW0tdGFzay1jYXJkLWFjdGlvbiIsb25DbGljazpJPT5wKEksYiksdGl0bGU6Ik1hcmsgdGhpcyB0YXNrIGNvbXBsZXRlIGFuZCByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBzdWdnZXN0aW9uIHdoZW4gYXZhaWxhYmxlIixjaGlsZHJlbjoiXHUyNzA1IENvbXBsZXRlZCJ9KSxmP251bGw6KDAsai5qc3gpKCJhIix7aHJlZjoiIyIsY2xhc3NOYW1lOiJkcmVhbS10YXNrLWNhcmQtYWN0aW9uIixvbkNsaWNrOkk9PnkoSSxiKSx0aXRsZToiU2NoZWR1bGUgdGhpcyB0YXNrIGZvciBhIHNwZWNpZmljIGRhdGUgYW5kIHRpbWUiLGNoaWxkcmVuOiJcdXsxRjRDNX0gU2NoZWR1bGUifSksKDAsai5qc3gpKCJhIix7aHJlZjoiIyIsY2xhc3NOYW1lOiJkcmVhbS10YXNrLWNhcmQtYWN0aW9uIixvbkNsaWNrOkk9PmgoSSxiKSx0aXRsZToiUmVtb3ZlIHRoaXMgdGFzayBhbmQgcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgc3VnZ2VzdGlvbiB3aGVuIGF2YWlsYWJsZSIsY2hpbGRyZW46Ilx1Mjc0QyBSZW1vdmUifSldfSldfSx4fHxnKX0pLGE/KDAsai5qc3gpKCJwIix7Y2xhc3NOYW1lOiJkcmVhbS10YXNrLWxsbS1hdHRyaWJ1dGlvbiIsY2hpbGRyZW46YX0pOm51bGxdfSl9KX1mdW5jdGlvbiBLTih7bG9hZGluZzplLGVycm9yOnQsdGFza3M6bixtYXhUYXNrczpyLG5vdGVMaW5rOm8saGVhZGVyQWN0aW9uczphLG9uU2V0dGluZ3NDbGljazppLHJ1bkFuYWx5c2lzOnMsb25UYXNrQ2xpY2s6bCxsaXN0UmVmOmMsbGxtQXR0cmlidXRpb25Gb290ZXI6dSxhY3Rpb25IYW5kbGVyczpwfSl7cmV0dXJuIGU/KDAsai5qc3gpKEJOLHt9KTp0PygwLGouanN4KShHTix7ZXJyb3JJbmZvOnQsbm90ZUxpbms6byxvblJldHJ5OigpPT5zKG51bGwpLG9uU2V0dGluZ3NDbGljazppfSk6IW58fG4ubGVuZ3RoPT09MD8oMCxqLmpzeCkoVk4se25vdGVMaW5rOm8sb25SZXRyeTooKT0+cyhudWxsKX0pOigwLGouanN4KShqTix7ZHJlYW1UYXNrczpuLG1heFRhc2tzOnIsaGVhZGVyQWN0aW9uczphLG9uVGFza0NsaWNrOmwsbGlzdFJlZjpjLGxsbUF0dHJpYnV0aW9uRm9vdGVyOnUsYWN0aW9uSGFuZGxlcnM6cH0pfWZ1bmN0aW9uIFlOKHtub3RlVVVJRDplLG9uT3Blbk5vdGU6dCxvblJlc2VlZDpufSl7cmV0dXJuKDAsai5qc3hzKSgic3BhbiIse2NsYXNzTmFtZToiZHJlYW0tdGFzay1oZWFkZXItYWN0aW9ucyIsY2hpbGRyZW46WygwLGouanN4KShXTix7b25SZXNlZWQ6bn0pLCgwLGouanN4KSh2MCx7bm90ZVVVSUQ6ZSxvbk9wZW5Ob3RlOnR9KV19KX1mdW5jdGlvbiBxTihlLHQsbixyKXtsZXRbbyxhXT0oMCx4ZS51c2VTdGF0ZSkoKCk9Pm5ldyBTZXQpLFtpLHNdPSgwLHhlLnVzZVN0YXRlKSgoKT0+bmV3IFNldCksbD0oMCx4ZS51c2VDYWxsYmFjaykoKCk9PnthKG5ldyBTZXQpLHMobmV3IFNldCl9LFtdKSxjPSgwLHhlLnVzZUNhbGxiYWNrKShhc3luYyhnLG0pPT57YXdhaXQgZTAoZSxuLGcsbSl9LFtlLG5dKSx1PSgwLHhlLnVzZUNhbGxiYWNrKShnPT57bGV0IG09WXIoZyk7YSh2PT57bGV0IGY9bmV3IFNldCh2KTtyZXR1cm4gZi5hZGQobSksZn0pLHNldFRpbWVvdXQoKCk9PntyKHY9Pih2fHxbXSkuZmlsdGVyKGY9PllyKGYpIT09bSkpLGEodj0+e2xldCBmPW5ldyBTZXQodik7cmV0dXJuIGYuZGVsZXRlKG0pLGZ9KSxzKHY9PntsZXQgZj1uZXcgU2V0KHYpO3JldHVybiBmLmRlbGV0ZShtKSxmfSl9LFBOKX0sW3JdKSxwPSgwLHhlLnVzZUNhbGxiYWNrKShnPT57bGV0IG09Zy5jdXJyZW50VGFyZ2V0Py5jbG9zZXN0Py4oIi5kcmVhbS10YXNrLWNhcmQiKTtpZighbXx8dHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuO2xldCB2PW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IXYud2lkdGh8fCF2LmhlaWdodHx8bmMoe29yaWdpbjp7eDoodi5sZWZ0K3Yud2lkdGgvMikvd2luZG93LmlubmVyV2lkdGgseToodi50b3Ardi5oZWlnaHQvMikvd2luZG93LmlubmVySGVpZ2h0fSxwYXJ0aWNsZUNvdW50OjkwLHNwcmVhZDo3NSxzdGFydFZlbG9jaXR5OjQyfSl9LFtdKSxkPSgwLHhlLnVzZUNhbGxiYWNrKShhc3luYyhnLG0pPT57Zy5wcmV2ZW50RGVmYXVsdCgpLHAoZyk7bGV0IHY9bS51dWlkP251bGw6YXdhaXQgaDAoZSksZj1hd2FpdCBtMChlLHYsbSk7ZiYmYXdhaXQgYyhtLHtjb21wbGV0ZWRBdDpmLHJlbW92ZWRBdDpudWxsfSksdShtKX0sW2UscCxjLHVdKSxoPSgwLHhlLnVzZUNhbGxiYWNrKShhc3luYyhnLG0pPT57Zy5wcmV2ZW50RGVmYXVsdCgpO2xldCB2PVlyKG0pLGY9IW0ucHJlc2VydmVUaHJvdWdoVG9tb3Jyb3c7cih4PT4oeHx8W10pLm1hcChTPT5ZcihTKT09PXY/ey4uLlMscHJlc2VydmVUaHJvdWdoVG9tb3Jyb3c6Zn06UykpLGF3YWl0IGMobSx7cHJlc2VydmVUaHJvdWdoVG9tb3Jyb3c6Zn0pfSxbYyxyXSkseT0oMCx4ZS51c2VDYWxsYmFjaykoYXN5bmMoZyxtKT0+e2cucHJldmVudERlZmF1bHQoKTtsZXQgdj1uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7YXdhaXQgYyhtLHtjb21wbGV0ZWRBdDpudWxsLHJlbW92ZWRBdDp2fSksdShtKX0sW2MsdV0pLHc9KDAseGUudXNlQ2FsbGJhY2spKGFzeW5jKGcsbSk9PntnLnByZXZlbnREZWZhdWx0KCk7bGV0e2V2ZW50czp2LHRhc2tzOmZ9PWF3YWl0IGMwKGUpLHg9bmV3IERhdGUsUz1uZXcgRGF0ZSh4LmdldEZ1bGxZZWFyKCkseC5nZXRNb250aCgpLHguZ2V0RGF0ZSgpLDAsMCwwKSxOPU1hdGguZmxvb3IoUy5nZXRUaW1lKCkvMWUzKSxEPWwwKHgsdixmKTtpZihELmxlbmd0aD09PTApe2F3YWl0IGUuYWxlcnQoIk5vIGF2YWlsYWJsZSAzMC1taW51dGUgc2xvdHMgdG9kYXkuIFBsZWFzZSBzY2hlZHVsZSBtYW51YWxseS4iKTtyZXR1cm59bGV0IF89YXdhaXQgZS5wcm9tcHQoIlBpY2sgd2hlbiB0byBzY2hlZHVsZSB0aGlzIHRhc2suIFRpbWVzIGxpc3RlZCBhcmUgZnJlZSB0b2RheTsgY2hvb3NlIGEgZGlmZmVyZW50IGRhdGUgb25seSBpZiB0aG9zZSBjb25mbGljdHMgYXJlIGFjY2VwdGFibGUuIix7aW5wdXRzOlt7bGFiZWw6IkRhdGUiLHR5cGU6ImRhdGUiLHZhbHVlOk59LHtsYWJlbDoiVGltZSIsb3B0aW9uczpELHR5cGU6InNlbGVjdCIsdmFsdWU6RFswXS52YWx1ZX1dfSk7aWYoIV8pcmV0dXJuO2xldFtBLFBdPV87aWYoQT09bnVsbHx8UD09bnVsbClyZXR1cm47bGV0IEk9ZDAoQSxQKTtpZihJPT1udWxsKXtFKCJbRHJlYW1UYXNrXSBTY2hlZHVsZTogaW52YWxpZCBkYXRlL3RpbWUgcmV0dXJuZWQgYnkgcHJvbXB0Iix7ZGF0ZVNlYzpBLHRpbWVNaW51dGVzOlB9KSxhd2FpdCBlLmFsZXJ0KCJDb3VsZCBub3Qgc2NoZWR1bGU6IHRoZSBzZWxlY3RlZCBkYXRlIG9yIHRpbWUgd2FzIGludmFsaWQuIik7cmV0dXJufWxldCBMPWF3YWl0IHUwKGUsdCxJLG0pO2lmKCFMLnRhc2tVdWlkKXtFKCJbRHJlYW1UYXNrXSBTY2hlZHVsZSBmYWlsZWQiLEwpO2xldCBGPUwucmVhc29uPT09Im1pc3Npbmdfbm90ZSI/IkNvdWxkIG5vdCBzY2hlZHVsZTogbm8gdGFyZ2V0IG5vdGUgaXMgYXZhaWxhYmxlIGZvciB0aGlzIHN1Z2dlc3Rpb24uIjoiQ291bGQgbm90IHNjaGVkdWxlIHRoaXMgdGFzay4gUGxlYXNlIHRyeSBhZ2FpbiBvciBzY2hlZHVsZSBpdCBtYW51YWxseS4iO2F3YWl0IGUuYWxlcnQoRik7cmV0dXJufWF3YWl0IGMobSx7dGFza1V1aWQ6TC50YXNrVXVpZH0pO2xldCBVPVlyKG0pO2lmKHIoRj0+KEZ8fFtdKS5tYXAoSD0+WXIoSCk9PT1VP3suLi5ILGlzRXhpc3Rpbmc6ITAsbm90ZVVVSUQ6TC5ub3RlVVVJRHx8SC5ub3RlVVVJRHx8dCxzdGFydEF0Okwuc3RhcnRBdHx8SSx1dWlkOkwudGFza1V1aWR9OkgpKSx0eXBlb2Ygd2luZG93PCJ1Iil7bGV0IEY9bmV3IEN1c3RvbUV2ZW50KHNjLHtjb250ZW50Om0udGl0bGUsbm90ZVVVSUQ6TC5ub3RlVVVJRHx8bS5ub3RlVVVJRHx8dCxzdGFydEF0OkksdGFza1V1aWQ6TC50YXNrVXVpZH0pO3dpbmRvdy5kaXNwYXRjaEV2ZW50KEYpfX0sW2UsdCxjLHJdKSxiPSgwLHhlLnVzZUNhbGxiYWNrKShnPT57bGV0IG09WXIoZyk7cyh2PT57bGV0IGY9bmV3IFNldCh2KTtyZXR1cm4gZi5oYXMobSk/Zi5kZWxldGUobSk6Zi5hZGQobSksZn0pfSxbXSk7cmV0dXJue2Rpc21pc3NpbmdUYXNrS2V5czpvLGV4cGFuZGVkRXhwbGFuYXRpb25LZXlzOmksb25Db21wbGV0ZVRhc2s6ZCxvblByZXNlcnZlVGFzazpoLG9uUmVtb3ZlVGFzazp5LG9uU2NoZWR1bGVUYXNrOncsb25Ub2dnbGVFeHBsYW5hdGlvbjpiLHJlc2V0QWN0aW9uU3RhdGU6bH19ZnVuY3Rpb24gdGYoe2FwcDplLGdyaWRIZWlnaHRTaXplOnQsZ3JpZFdpZHRoU2l6ZTpuLG9uT3BlblNldHRpbmdzOnIscHJvdmlkZXJBcGlLZXk6byxwcm92aWRlckVtOmF9KXtsZXRbaSxzXT0oMCx4ZS51c2VTdGF0ZSkoITEpLFtsLGNdPSgwLHhlLnVzZVN0YXRlKShudWxsKSxbdSxwXT0oMCx4ZS51c2VTdGF0ZSkobnVsbCksW2QsaF09KDAseGUudXNlU3RhdGUpKG51bGwpLFt5LHddPSgwLHhlLnVzZVN0YXRlKShudWxsKSxbYixnXT0oMCx4ZS51c2VTdGF0ZSkobnVsbCksWyxtXT0oMCx4ZS51c2VTdGF0ZSkoKCk9PlFpKCkpLHY9KDAseGUudXNlUmVmKShudWxsKSxmPSgwLHhlLnVzZVJlZikoMCk7Zi5jdXJyZW50Kz0xO2xldCB4PXR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy5lbnY/Lk9QRU5fQUlfQUNDRVNTX1RPS0VOfHwiIixTPSEhKHh8fG8pLE49YT9LcihhKTpudWxsLEQ9cXcobix0KSxfPVF3KG4sdCksQT1KdygpLFA9KDAseGUudXNlUmVmKShfKSx7ZGlzbWlzc2luZ1Rhc2tLZXlzOkksZXhwYW5kZWRFeHBsYW5hdGlvbktleXM6TCxvbkNvbXBsZXRlVGFzazpVLG9uUHJlc2VydmVUYXNrOkYsb25SZW1vdmVUYXNrOkgsb25TY2hlZHVsZVRhc2s6aWUsb25Ub2dnbGVFeHBsYW5hdGlvbjpPLHJlc2V0QWN0aW9uU3RhdGU6R309cU4oZSx5LGQsYyksVD0oMCx4ZS51c2VDYWxsYmFjaykoYXN5bmModGUsc2UpPT57bGV0IHVlPSh0ZXx8W10pLmZpbHRlcihCb29sZWFuKTtpZih1ZS5sZW5ndGg9PT0wKXJldHVybiBzZTtsZXQgbmU9YXdhaXQgWHcoZSxzZSx1ZSk7cmV0dXJuIG0obmUpLG5lfSxbZV0pLGs9KDAseGUudXNlQ2FsbGJhY2spKGFzeW5jKHRlLHNlPXt9KT0+e2xldCB1ZT1zZS5wcm92aWRlckVtT3ZlcnJpZGU/S3Ioc2UucHJvdmlkZXJFbU92ZXJyaWRlKTpOO0UoIltEcmVhbVRhc2tdIHJ1bkFuYWx5c2lzIGVudHJ5Iix7aGFzTGxtQ29uZmlnOlMscHJvdmlkZXJOYW1lOnVlLGV4Y2x1ZGVVdWlkc1NpemU6dGU/LnNpemU/PzAsb3B0aW9uczpzZSx0YXNrR2VuZXJhdGVDb3VudDpfLHByb3Bvc2VkVGFza3NOb3RlTmFtZTpBfSkscyghMCkscChudWxsKSxnKG51bGwpO3RyeXtsZXQgbmU9cGVyZm9ybWFuY2Uubm93KCksQWU9YXdhaXQgbjAoZSx7ZXhjbHVkZVV1aWRzOnRlLG9wdGlvbnM6c2UscHJvcG9zZWRUYXNrc05vdGVOYW1lOkEsbWF4VGFza3M6X30pO0UoYFtEcmVhbVRhc2tdIGZldGNoRHJlYW1UYXNrU3VnZ2VzdGlvbnMgdG9vayAkeyhwZXJmb3JtYW5jZS5ub3coKS1uZSkudG9GaXhlZCgxKX1tc2Ase2NhY2hlZDpBZT8uY2FjaGVkLHRhc2tDb3VudDpBZT8udGFza3M/Lmxlbmd0aD8/MCxlcnJvckNvZGU6QWU/LmVycm9yQ29kZT8/bnVsbCxub3RlVVVJRDpBZT8ubm90ZVVVSUQ/P251bGx9KTtsZXQgWGU9cGVyZm9ybWFuY2Uubm93KCk7YXdhaXQgcjAoQWUse3Byb3ZpZGVyTmFtZTp1ZSxhcHA6ZSxyZWNvcmRUYXNrVXVpZHM6VCxzZXRFcnJvcjpwLHNldFRhc2tzOmMsc2V0Tm90ZVVVSUQ6aCxzZXREZWZhdWx0Tm90ZVVVSUQ6dyxzZXRMbG1BdHRyaWJ1dGlvbkZvb3RlcjpnfSksRShgW0RyZWFtVGFza10gYXBwbHlEcmVhbVRhc2tBbmFseXNpc1Jlc3VsdCB0b29rICR7KHBlcmZvcm1hbmNlLm5vdygpLVhlKS50b0ZpeGVkKDEpfW1zYCl9Y2F0Y2gobmUpe0UoIltEcmVhbVRhc2tdIHJ1bkFuYWx5c2lzIGNhdWdodCB1bmV4cGVjdGVkIGVycm9yIixuZSkscCh7ZXJyb3I6bmUubWVzc2FnZXx8IkFuYWx5c2lzIGZhaWxlZCIsZXJyb3JDb2RlOiJsbG1fZXJyb3IiLHByb3ZpZGVyTmFtZTp1ZX0pfWZpbmFsbHl7cyghMSl9fSxbVCxfLEEsTixTXSk7KDAseGUudXNlRWZmZWN0KSgoKT0+e20oUWkoKSl9LFtdKSwoMCx4ZS51c2VFZmZlY3QpKCgpPT57aXx8bD8ubGVuZ3RofHxrKG51bGwse21pbmltdW1UYXNrQ291bnQ6X30pfSxbU10pLCgwLHhlLnVzZUVmZmVjdCkoKCk9PntsZXQgdGU9ek4oZSxhLG8seCk7RSgiW0RyZWFtVGFza10gY29uZmlnIHNuYXBzaG90Iix7aGFzTGxtQ29uZmlnOlMscHJvdmlkZXJOYW1lOk4scmVuZGVyQ291bnQ6Zi5jdXJyZW50LC4uLnRlfSl9LFtTLGEsbyx4LE5dKSwoMCx4ZS51c2VFZmZlY3QpKCgpPT57aWYoIVMpcmV0dXJuO2xldCB0ZT1QLmN1cnJlbnQ7UC5jdXJyZW50PV8sbzAoe21heFRhc2tzOl8scHJldmlvdXNNYXhUYXNrczp0ZSx0YXNrczpsfSkmJkpwKGssXyl9LFtTLF8sbF0pLCgwLHhlLnVzZUVmZmVjdCkoKCk9PntsZXQgdGU9cGVyZm9ybWFuY2Uubm93KCk7RGEodi5jdXJyZW50KSxFKGBbRHJlYW1UYXNrXSBhdHRhY2hGb290bm90ZVBvcHVwczogJHsocGVyZm9ybWFuY2Uubm93KCktdGUpLnRvRml4ZWQoMSl9bXNgKX0sW2wsdSxpXSk7bGV0IFI9YXN5bmMgdGU9Pnt0ZS5wcmV2ZW50RGVmYXVsdCgpLGQmJmF3YWl0IGUubmF2aWdhdGUoYGh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvJHtkfWApfSwkPXRlPT57dGUucHJldmVudERlZmF1bHQoKSx0MChyKX0sWD1hc3luYyB0ZT0+e3RlLnByZXZlbnREZWZhdWx0KCk7bGV0IHNlPVhwKEhlKCkpLHVlPXt9O2lmKHNlLmxlbmd0aD4xKXtsZXQgbmU9YXdhaXQgYTAoZSxhKTtpZighbmUpcmV0dXJuO3VlPXtwcm92aWRlckVtT3ZlcnJpZGU6bmUucHJvdmlkZXJFbX19ZWxzZSBzZS5sZW5ndGg9PT0xJiYodWU9e3Byb3ZpZGVyRW1PdmVycmlkZTpzZVswXS5wcm92aWRlckVtfSk7YyhudWxsKSxHKCksZyhudWxsKSxKcChrLF8sdWUpfSxaPSFpJiYhbCYmIXUsZWU9ISF1JiZMTi5oYXModS5lcnJvckNvZGUpO3JldHVybiFTJiYhaSYmKCFsfHxsLmxlbmd0aD09PTApJiYoWnx8ZWUpPyhFKCJbRHJlYW1UYXNrXSByZW5kZXJpbmcgbm8tY29uZmlnIHN0YXRlIix7cHJvdmlkZXJOYW1lOk4saGFzRXJyb3I6ISF1LGVycm9yQ29kZTp1Py5lcnJvckNvZGU/P251bGwsdGFza0NvdW50Omw/Lmxlbmd0aD8/MH0pLCgwLGouanN4KShITix7b25TZXR0aW5nc0NsaWNrOiQscHJvdmlkZXJOYW1lOk59KSk6KDAsai5qc3gpKEtOLHtlcnJvcjp1LGhlYWRlckFjdGlvbnM6KDAsai5qc3gpKFlOLHtub3RlVVVJRDpkLG9uT3Blbk5vdGU6UixvblJlc2VlZDpYfSksbGlzdFJlZjp2LGxvYWRpbmc6aSxsbG1BdHRyaWJ1dGlvbkZvb3RlcjpiLG1heFRhc2tzOkQsbm90ZUxpbms6KDAsai5qc3gpKHYwLHtub3RlVVVJRDpkLG9uT3Blbk5vdGU6Un0pLG9uVGFza0NsaWNrOnRlPT5adyhlLHRlLHkpLHRhc2tzOmwsb25TZXR0aW5nc0NsaWNrOiQscnVuQW5hbHlzaXM6ayxhY3Rpb25IYW5kbGVyczp7ZGlzbWlzc2luZ1Rhc2tLZXlzOkksZXhwYW5kZWRFeHBsYW5hdGlvbktleXM6TCxvbkNvbXBsZXRlOlUsb25QcmVzZXJ2ZTpGLG9uUmVtb3ZlOkgsb25TY2hlZHVsZTppZSxvblRvZ2dsZUV4cGxhbmF0aW9uOk99fSl9dmFyIHlyPXooeWUoKSk7dmFyIFFOPTEuMDIsSk49LjksdzA9OTY7ZnVuY3Rpb24gYjAoZSx0KXtyZXR1cm4gTWF0aC5hYnMoZSk8MT8wOnQvTWF0aC5hYnMoZSl9ZnVuY3Rpb24gWE4oZSx0LG4pe3JldHVybiBuPyEhKGV8fHQhPT1BdC5ERUZBVUxUfHwhR2koKSk6ITF9ZnVuY3Rpb24gWk4oZSl7aWYoZSlyZXR1cm57Ii0tZm9jdXMtYmx1ciI6ZS5ibHVyLCItLWZvY3VzLW9wYWNpdHkiOmAke2Uub3BhY2l0eX1gLCItLWZvY3VzLXNjYWxlIjpgJHtlLnNjYWxlfWAsIi0tZm9jdXMteCI6ZS54LCItLWZvY3VzLXkiOmUueX19ZnVuY3Rpb24gZUQoZSx0KXtsZXQgbj1lLmxlZnQrZS53aWR0aC8yLHI9ZS50b3ArZS5oZWlnaHQvMjtyZXR1cm57Ymx1cjoiMHB4IixvcGFjaXR5OjEsc2NhbGU6UU4seDpgJHt0Lngtbn1weGAseTpgJHt0Lnktcn1weGB9fWZ1bmN0aW9uIHREKGUsdCl7bGV0IG49ZS5sZWZ0K2Uud2lkdGgvMixyPWUudG9wK2UuaGVpZ2h0LzIsbz1uLXQueCxhPXItdC55O01hdGguYWJzKG8pPDEmJk1hdGguYWJzKGEpPDEmJihhPS0xKTtsZXQgaT10LngrZS53aWR0aC8yK3cwLHM9dC55K2UuaGVpZ2h0LzIrdzAsbD1NYXRoLm1heChiMChvLGkpLGIwKGEscyksMS4zNSk7cmV0dXJue2JsdXI6IjJweCIsb3BhY2l0eTowLHNjYWxlOkpOLHg6YCR7byoobC0xKX1weGAseTpgJHthKihsLTEpfXB4YH19ZnVuY3Rpb24gbkQoZSl7aWYodHlwZW9mIGRvY3VtZW50PiJ1Inx8dHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIG51bGw7bGV0IHQ9QXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuZGFzaGJvYXJkLWdyaWQgLmdyaWQtY2VsbFtkYXRhLXdpZGdldC1pZF0iKSk7aWYoIXQubGVuZ3RoKXJldHVybiBudWxsO2xldCBuPXt4OndpbmRvdy5pbm5lcldpZHRoLzIseTp3aW5kb3cuaW5uZXJIZWlnaHQvMn0scj17fTtyZXR1cm4gdC5mb3JFYWNoKG89PntsZXQgYT1vLmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKTtpZighYSlyZXR1cm47bGV0IGk9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyW2FdPWE9PT1lP2VEKGksbik6dEQoaSxuKX0pLHJ9ZnVuY3Rpb24gazAoZSx0LG4pe3JldHVybntjbGFzc05hbWVzOltlPyJncmlkLWNlbGwtLWZvY3VzLW1vZGUiOiIiLGUmJmU9PT1uPyJncmlkLWNlbGwtLWZvY3VzZWQiOiIiLGUmJmUhPT1uPyJncmlkLWNlbGwtLWZvY3VzLWhpZGRlbiI6IiJdLmZpbHRlcihCb29sZWFuKSxzdHlsZTpaTih0KX19ZnVuY3Rpb24geDAoZSx0KXtsZXRbbixyXT0oMCx5ci51c2VTdGF0ZSkobnVsbCksW28sYV09KDAseXIudXNlU3RhdGUpKHt9KSxpPSgwLHlyLnVzZUNhbGxiYWNrKSgoKT0+e3IobnVsbCksYSh7fSl9LFtdKTtyZXR1cm4oMCx5ci51c2VFZmZlY3QpKCgpPT57bGV0IHM9bD0+e2lmKHQhPT1BdC5ERUZBVUxUfHxlfHwhR2koKSlyZXR1cm47bGV0IGM9bD8uZGV0YWlsPy53aWRnZXRJZDtpZighYylyZXR1cm47aWYoYz09PW4pe2koKTtyZXR1cm59bGV0IHU9bkQoYyk7dSYmKGEodSkscihjKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihYbCxzKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoWGwscyl9LFtpLGUsbix0XSksKDAseXIudXNlRWZmZWN0KSgoKT0+e1hOKGUsdCxuKSYmaSgpfSxbaSxlLG4sdF0pLCgwLHlyLnVzZUVmZmVjdCkoKCk9PntpZighbilyZXR1cm47bGV0IHM9Yz0+e2Mua2V5PT09IkVzY2FwZSImJmkoKX0sbD0oKT0+aSgpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbCl9fSxbaSxuXSkse2NsZWFyRm9jdXNlZFdpZGdldDppLGZvY3VzZWRXaWRnZXRJZDpuLGlzV2lkZ2V0Rm9jdXNNb2RlOiEhKG4mJnQ9PT1BdC5ERUZBVUxUJiYhZSksd2lkZ2V0Rm9jdXNUcmFuc2Zvcm1zOm99fXZhciByRD0wLG9EPTIsbmY9MixhRD0xLGlEPTcsc0Q9OSxsRD0yNCxjRD0xMDAsUzA9WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHVEPTYwLEUwPTFlMyxkRD02MCxwRD1pRCpsRCp1RCpkRCpFMDtmdW5jdGlvbiBmRChlKXtsZXQgdD1uZXcgU2V0O2ZvcihsZXQgbiBvZiBlKWZvcihsZXQgciBvZiBuLnV1aWRzKXQuYWRkKHIpO3JldHVybiB0fWFzeW5jIGZ1bmN0aW9uIGhEKGUpe2xldCB0PW1EKG5ldyBEYXRlKTtFKCJbR3JhdmV5YXJkXSBmaW5kT3JDcmVhdGVHcmF2ZXlhcmROb3RlOiBsb29raW5nIGZvciBub3RlIG5hbWVkIixKU09OLnN0cmluZ2lmeSh0KSwid2l0aCB0YWciLFdlKTtsZXQgbj1hd2FpdCBlLmZpbmROb3RlKHtuYW1lOnQsdGFnczpbV2VdfSk7aWYoRSgiW0dyYXZleWFyZF0gZmluZE9yQ3JlYXRlR3JhdmV5YXJkTm90ZTogZmluZE5vdGUgcmVzdWx0OiIsbj9gdXVpZD0ke24udXVpZH1gOiJudWxsL3VuZGVmaW5lZCIpLG4/LnV1aWQpcmV0dXJuIG47RSgiW0dyYXZleWFyZF0gZmluZE9yQ3JlYXRlR3JhdmV5YXJkTm90ZTogbm90ZSBub3QgZm91bmQsIGNyZWF0aW5nIG5ldyBub3RlIik7bGV0IHI9YXdhaXQgZS5jcmVhdGVOb3RlKHQsW1dlXSx7YXJjaGl2ZTohMH0pO3JldHVybiBFKCJbR3JhdmV5YXJkXSBmaW5kT3JDcmVhdGVHcmF2ZXlhcmROb3RlOiBjcmVhdGVkIG5vdGUgd2l0aCB1dWlkOiIsciksYXdhaXQgZS5yZXBsYWNlTm90ZUNvbnRlbnQoe3V1aWQ6cn0sVDAoW10pKSx7bmFtZTp0LHV1aWQ6cn19ZnVuY3Rpb24gVDAoZSl7bGV0IHQ9YCMgR3JhdmV5YXJkIHRhc2sgY2FuZGlkYXRlcwoKfCBEYXRlIHwgVGFzayBVVUlEcyB8IFRhc2sgbm90ZSBtZXRhZGF0YSB8CnwtLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfApgLG49ZS5tYXAocj0+e2xldCBvPUFycmF5LmlzQXJyYXkoci50YXNrRW50cmllcykmJnIudGFza0VudHJpZXMubGVuZ3RoPjA/ci50YXNrRW50cmllczpyLnV1aWRzLm1hcChpPT4oe25vdGVOYW1lOm51bGwsbm90ZVVVSUQ6bnVsbCx1dWlkOml9KSksYT1lbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoby5tYXAoaT0+KHtub3RlTmFtZTppLm5vdGVOYW1lfHxudWxsLG5vdGVVVUlEOmkubm90ZVVVSUR8fG51bGwsdXVpZDppLnV1aWR9KSkpKTtyZXR1cm5gfCAke3IuZGF0ZUtleX0gfCAke3IudXVpZHMuam9pbigiLCIpfSB8ICR7YX0gfGB9KS5qb2luKGAKYCk7cmV0dXJuIHQrbisobj9gCmA6IiIpfWZ1bmN0aW9uIG1EKGUpe2xldCB0PWUgaW5zdGFuY2VvZiBEYXRlP2U6bmV3IERhdGUoZSk7cmV0dXJuYFRhc2sgZ3JhdmV5YXJkIGRhdGE6ICR7UzBbdC5nZXRNb250aCgpXX0gJHt0LmdldEZ1bGxZZWFyKCl9YH1mdW5jdGlvbiBnRChlKXtsZXQgdD1lIGluc3RhbmNlb2YgRGF0ZT9lOm5ldyBEYXRlKGUpO3JldHVybmBTdWNjZXNzZnVsbHkgcmV0aXJlZCB0YXNrczogJHtTMFt0LmdldE1vbnRoKCldfSAke3QuZ2V0RnVsbFllYXIoKX1gfWZ1bmN0aW9uIHlEKGUpe2xldCB0PVtdLG49KGV8fCIiKS5zcGxpdChgCmApLHI9MCxvPTAsYT0wLGk9MDtmb3IobGV0IHMgb2Ygbil7bGV0IGw9cy50cmltKCk7aWYoIWwuc3RhcnRzV2l0aCgifCIpKXtyKys7Y29udGludWV9bGV0IGM9bC5zbGljZSgxLC0xKS5zcGxpdCgifCIpLm1hcChoPT5oLnRyaW0oKSk7aWYoYy5sZW5ndGg8b0Qpe2ErKztjb250aW51ZX1sZXQgdT1jW3JEXTtpZih1PT09IkRhdGUifHwvXi0rJC8udGVzdCh1KSl7bysrO2NvbnRpbnVlfWxldCBwPWNbYURdLnNwbGl0KCIsIikubWFwKGg9PmgudHJpbSgpKS5maWx0ZXIoQm9vbGVhbiksZD1wLm1hcChoPT4oe25vdGVOYW1lOm51bGwsbm90ZVVVSUQ6bnVsbCx1dWlkOmh9KSk7aWYoY1tuZl0pdHJ5e2xldCBoPUpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGNbbmZdKSk7QXJyYXkuaXNBcnJheShoKT9kPWguZmlsdGVyKHk9Pnk/LnV1aWQpLm1hcCh5PT4oe25vdGVOYW1lOnkubm90ZU5hbWV8fG51bGwsbm90ZVVVSUQ6eS5ub3RlVVVJRHx8bnVsbCx1dWlkOnkudXVpZH0pKTpFKCJbR3JhdmV5YXJkXSByb3dzRnJvbUdyYXZleWFyZENvbnRlbnQ6IHRhc2tFbnRyaWVzIGNvbHVtbiB3YXMgbm90IGFuIGFycmF5IGFmdGVyIHBhcnNlLCB2YWx1ZToiLGgpfWNhdGNoKGgpe0UoIltHcmF2ZXlhcmRdIGZhaWxlZCB0byBwYXJzZSBjYWNoZWQgdGFzayBub3RlIG1ldGFkYXRhOiIsaCwiXHUyMDE0IHJhdyBjZWxsIHZhbHVlOiIsY1tuZl0/LnNsaWNlKDAsMTIwKSl9ZWxzZSBFKGBbR3JhdmV5YXJkXSByb3dzRnJvbUdyYXZleWFyZENvbnRlbnQ6IG5vIHRhc2tFbnRyaWVzIGNvbHVtbiBmb3IgZGF0ZUtleT0ke0pTT04uc3RyaW5naWZ5KHUpfSwgZmFsbGluZyBiYWNrIHRvIHV1aWQtb25seSBlbnRyaWVzYCk7dSYmcC5sZW5ndGg+MD90LnB1c2goe2RhdGVLZXk6dSx0YXNrRW50cmllczpkLHV1aWRzOnB9KTppKyt9cmV0dXJuIHR9YXN5bmMgZnVuY3Rpb24gdkQoZSx0LG4pe2xldCByPWF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChuLm1hcChhPT5lLmdldE5vdGVUYXNrcyh7dXVpZDphLnV1aWR9LHtpbmNsdWRlRG9uZTohMX0pLnRoZW4oaT0+KHtub3RlSGFuZGxlOmEsdGFza3M6aXx8W119KSkpKSxvPVtdO2ZvcihsZXQgYSBvZiByKXtpZihhLnN0YXR1cz09PSJyZWplY3RlZCIpe0UoIltHcmF2ZXlhcmRdIGdldE5vdGVUYXNrcyBmYWlsZWQ6IixhLnJlYXNvbik7Y29udGludWV9bGV0e25vdGVIYW5kbGU6aSx0YXNrczpzfT1hLnZhbHVlLGw9MDtmb3IobGV0IGMgb2YgcykhYz8udXVpZHx8dC5oYXMoYy51dWlkKXx8Yy5jb21wbGV0ZWRBdHx8Yy5kaXNtaXNzZWRBdHx8KG8ucHVzaCh7Li4uYyxub3RlTmFtZTpjLm5vdGVOYW1lfHxjLm5vdGVUaXRsZXx8Yy5ub3RlPy5uYW1lfHxpLm5hbWV8fG51bGwsbm90ZVVVSUQ6Yy5ub3RlVVVJRHx8aS51dWlkfSksbCsrKX1yZXR1cm4gb31hc3luYyBmdW5jdGlvbiB3RChlLHQsbixyKXtsZXQgbz1yP3t0YXNrRG9tYWluVVVJRDpyfTp7fTtvPXsuLi5vLGdyb3VwOiJ0YXNrTGlzdHMifTtsZXQgYT1bXTtmb3IgYXdhaXQobGV0IGMgb2YgYXdhaXQgZS5maWx0ZXJOb3RlcyhvLCJvcGVuZWQiKSlhLnB1c2goYyk7bGV0IGk9Wy4uLmFdLnJldmVyc2UoKS5zbGljZSgwLGNEKTtFKGBbR3JhdmV5YXJkXSBzY2FubmluZyAke2kubGVuZ3RofSBub3RlcyBmb3IgdGFza3NgKTtsZXQgcz1hd2FpdCB2RChlLG4saSksbD1OMCh0LHMpO3JldHVybiBFKGBbR3JhdmV5YXJkXSB0YXNrIGNvdW50cyBcdTIwMTQgdG90YWwgc2NvcmVkOiAke3MubGVuZ3RofSwgc2VsZWN0ZWQ6ICR7bC5sZW5ndGh9IChuZWVkICR7dH0pYCksbH1mdW5jdGlvbiBiRChlKXtsZXQgdD1OdW1iZXIoZT8uc2NvcmU/P2U/LnZpY3RvcnlWYWx1ZT8/MCk7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KT90OjB9ZnVuY3Rpb24ga0QoZSx0KXtsZXQgbj1TRCh0KSxyPW49PT1udWxsP051bWJlci5QT1NJVElWRV9JTkZJTklUWTpNYXRoLmFicyhuLWUpL3BEO3JldHVybiBiRCh0KS1NYXRoLmxvZygxK3IpfWFzeW5jIGZ1bmN0aW9uIHhEKGUsdCxuKXtpZihFKCJbR3JhdmV5YXJkXSBoeWRyYXRlZFRhc2tzRnJvbVV1aWRzOiBjYWxsZWQgd2l0aCB1dWlkQ291bnQ6IixuPy5sZW5ndGgsInRhc2tFbnRyeUNvdW50OiIsdD8ubGVuZ3RoKSwhbnx8bi5sZW5ndGg9PT0wKXJldHVybltdO2xldCByPW5ldyBNYXAoKHR8fFtdKS5maWx0ZXIoYz0+Yz8udXVpZCkubWFwKGM9PltjLnV1aWQsY10pKSxvPWF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChuLm1hcChjPT5lLmdldFRhc2soYykpKSxhPTAsaT0wLHM9MCxsPW8ubWFwKChjLHUpPT57bGV0IHA9blt1XTtpZihjLnN0YXR1cz09PSJyZWplY3RlZCJ8fCFjLnZhbHVlKXJldHVybiBhKyssRSgiW0dyYXZleWFyZF0gaHlkcmF0ZWRUYXNrc0Zyb21VdWlkczogdXVpZCBub3QgZm91bmQ6IixwKSxudWxsO2xldCBkPWMudmFsdWU7aWYoZC5jb21wbGV0ZWRBdHx8ZC5kaXNtaXNzZWRBdClyZXR1cm4gaSsrLEUoIltHcmF2ZXlhcmRdIGh5ZHJhdGVkVGFza3NGcm9tVXVpZHM6IHV1aWQgZmlsdGVyZWQgXHUyMDE0IGNvbXBsZXRlZEF0OiIsZC5jb21wbGV0ZWRBdCwiZGlzbWlzc2VkQXQ6IixkLmRpc21pc3NlZEF0LCJ1dWlkOiIscCksbnVsbDtzKys7bGV0IGg9ci5nZXQocCk7cmV0dXJuey4uLmQsbm90ZU5hbWU6ZC5ub3RlTmFtZXx8ZC5ub3RlVGl0bGV8fGQubm90ZT8ubmFtZXx8aD8ubm90ZU5hbWV8fG51bGwsbm90ZVVVSUQ6ZC5ub3RlVVVJRHx8aD8ubm90ZVVVSUR8fG51bGx9fSkuZmlsdGVyKEJvb2xlYW4pO3JldHVybiBFKGBbR3JhdmV5YXJkXSBoeWRyYXRlZFRhc2tzRnJvbVV1aWRzOiByZXN1bHRzIFx1MjAxNCBhY2NlcHRlZD0ke3N9IG1pc3Npbmc9JHthfSBjb21wbGV0ZWRPckRpc21pc3NlZD0ke2l9IHRvdGFsPSR7bC5sZW5ndGh9YCksbH1mdW5jdGlvbiBOMChlLHQpe2lmKHQubGVuZ3RoPT09MClyZXR1cm5bXTtsZXQgbj1FRChuZXcgRGF0ZSkscj10Lm1hcCgobyxhKT0+KHsuLi5vLGdyYXZleWFyZEhldXJpc3RpY1JhbmtJbmRleDphLGdyYXZleWFyZEhldXJpc3RpY1Njb3JlOmtEKG4sbyl9KSk7cmV0dXJuIHIuc29ydCgobyxhKT0+by5ncmF2ZXlhcmRIZXVyaXN0aWNTY29yZSE9PWEuZ3JhdmV5YXJkSGV1cmlzdGljU2NvcmU/YS5ncmF2ZXlhcmRIZXVyaXN0aWNTY29yZT5vLmdyYXZleWFyZEhldXJpc3RpY1Njb3JlPzE6LTE6by5ncmF2ZXlhcmRIZXVyaXN0aWNSYW5rSW5kZXgtYS5ncmF2ZXlhcmRIZXVyaXN0aWNSYW5rSW5kZXgpLHIuc2xpY2UoMCxlKS5tYXAoKHtncmF2ZXlhcmRIZXVyaXN0aWNSYW5rSW5kZXg6bywuLi5hfSk9PmEpfWZ1bmN0aW9uIFNEKGUpe2xldCB0PU51bWJlcihlPy5jcmVhdGVkQXQ/P2U/LmNyZWF0ZWQpO2lmKCFOdW1iZXIuaXNGaW5pdGUodCkpcmV0dXJuIG51bGw7bGV0IG49dDwxZTEwP3QqRTA6dCxyPW5ldyBEYXRlKG4pO3JldHVybiBOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpP251bGw6bn1mdW5jdGlvbiBFRChlKXtsZXQgdD1uZXcgRGF0ZShlKTtyZXR1cm4gdC5zZXRNb250aCh0LmdldE1vbnRoKCktc0QpLHQuZ2V0VGltZSgpfWFzeW5jIGZ1bmN0aW9uIEQwKGUsdCl7bGV0IG49Z0QobmV3IERhdGUpLHI9YXdhaXQgZS5maW5kTm90ZSh7bmFtZTpuLHRhZ3M6W1dlXX0pLmNhdGNoKCgpPT5udWxsKTtpZighcj8udXVpZCl7bGV0IHM9YXdhaXQgZS5jcmVhdGVOb3RlKG4sW1dlXSx7YXJjaGl2ZTohMH0pO3I9e25hbWU6bix1dWlkOnN9LGF3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KHIsYCMgU3VjY2Vzc2Z1bGx5IHJldGlyZWQgdGFza3MKCmApLmNhdGNoKCgpPT57fSl9bGV0IG89dC50aXRsZXx8dC5jb250ZW50fHwiVW50aXRsZWQgdGFzayIsYT1GZShuZXcgRGF0ZSksaT1gLSBbeF0gJHtvfSA8IS0tIHsicmV0aXJlZEF0IjoiJHthfSJ9IC0tPgpgO2F3YWl0IGUuaW5zZXJ0Tm90ZUNvbnRlbnQocixpLHthdEVuZDohMH0pLmNhdGNoKHM9PkUoIltHcmF2ZXlhcmRdIGFwcGVuZFRhc2tUb1JldGlyZWROb3RlIGZhaWxlZDoiLHMpKX1hc3luYyBmdW5jdGlvbiBfMChlLHQsbixyPXt9KXtsZXQgbz0hIXI/LmZvcmNlUmVmcmVzaDtFKCJbR3JhdmV5YXJkXSBsb2FkR3JhdmV5YXJkQ2FuZGlkYXRlczogc3RhcnQgXHUyMDE0IGNvdW50OiIsdCwidGFza0RvbWFpblVVSUQ6IixuLCJmb3JjZVJlZnJlc2g6IixvKTtsZXQgYT1hd2FpdCBoRChlKTtFKCJbR3JhdmV5YXJkXSBsb2FkR3JhdmV5YXJkQ2FuZGlkYXRlczogdXNpbmcgZGF0YSBub3RlOiIsYT8udXVpZCxhPy5uYW1lKTtsZXQgaT0iIjt0cnl7aT1hd2FpdCBlLmdldE5vdGVDb250ZW50KGEpLEUoIltHcmF2ZXlhcmRdIGxvYWRHcmF2ZXlhcmRDYW5kaWRhdGVzOiBmZXRjaGVkIG5vdGUgY29udGVudCwgbGVuZ3RoOiIsaT8ubGVuZ3RoPz8ibnVsbC91bmRlZmluZWQiKSxpPWl8fCIifWNhdGNoKGgpe0UoIltHcmF2ZXlhcmRdIGxvYWRHcmF2ZXlhcmRDYW5kaWRhdGVzOiBnZXROb3RlQ29udGVudCB0aHJldzoiLGgsIlx1MjAxNCB0cmVhdGluZyBhcyBlbXB0eSIpLGk9IiJ9bGV0IHM9eUQoaSk7RSgiW0dyYXZleWFyZF0gbG9hZEdyYXZleWFyZENhbmRpZGF0ZXM6IHBhcnNlZCIscy5sZW5ndGgsInJvd3MgZnJvbSBub3RlOyBkYXRlS2V5czoiLHMubWFwKGg9PmguZGF0ZUtleSkpO2xldCBsPUZlKG5ldyBEYXRlKTtFKCJbR3JhdmV5YXJkXSBsb2FkR3JhdmV5YXJkQ2FuZGlkYXRlczogdG9kYXlLZXkgPSIsbCk7bGV0IGM9cy5maW5kKGg9PmguZGF0ZUtleT09PWwpO2lmKEUoIltHcmF2ZXlhcmRdIGxvYWRHcmF2ZXlhcmRDYW5kaWRhdGVzOiB0b2RheVJvdyBmb3VuZDoiLCEhYyxjP2B1dWlkcz0ke2MudXVpZHMubGVuZ3RofWA6IiIpLCFvJiZjPy51dWlkcy5sZW5ndGg+MCl7RSgiW0dyYXZleWFyZF0gbG9hZEdyYXZleWFyZENhbmRpZGF0ZXM6IGNhY2hlIGhpdCBcdTIwMTQgaHlkcmF0aW5nIixjLnV1aWRzLmxlbmd0aCwidXVpZHM6IixjLnV1aWRzKTtsZXQgaD1hd2FpdCB4RChlLGMudGFza0VudHJpZXMsYy51dWlkcykseT1OMCh0LGgpO2lmKEUoIltHcmF2ZXlhcmRdIGxvYWRlZCBjYWNoZWQgY2FuZGlkYXRlczoiLHkubGVuZ3RoKSx5Lmxlbmd0aD4wKXJldHVybntjYW5kaWRhdGVzOnksbm90ZUhhbmRsZTphfTtFKCJbR3JhdmV5YXJkXSBsb2FkR3JhdmV5YXJkQ2FuZGlkYXRlczogY2FjaGVkIFVVSURzIGFsbCBtaXNzaW5nIGZyb20gZG9tYWluIFx1MjAxNCBkaXNjYXJkaW5nIHN0YWxlIHRvZGF5IHJvdyBhbmQgcmVkaXNjb3ZlcmluZyIpfWVsc2UgbyYmRSgiW0dyYXZleWFyZF0gbG9hZEdyYXZleWFyZENhbmRpZGF0ZXM6IGZvcmNlUmVmcmVzaCByZXF1ZXN0ZWQgXHUyMDE0IGJ5cGFzc2luZyB0b2RheSBjYWNoZSByb3ciKTtsZXQgdT1vP3M6cy5maWx0ZXIoaD0+aC5kYXRlS2V5IT09bCkscD1mRCh1KSxkPWF3YWl0IHdEKGUsdCxwLG4pO2lmKGQubGVuZ3RoPjApe2xldCBoPWQubWFwKHc9Pih7bm90ZU5hbWU6dy5ub3RlTmFtZXx8dy5ub3RlVGl0bGV8fHcubm90ZT8ubmFtZSxub3RlVVVJRDp3Lm5vdGVVVUlELHV1aWQ6dy51dWlkfSkpLHk9W3tkYXRlS2V5OmwsdGFza0VudHJpZXM6aCx1dWlkczpkLm1hcCh3PT53LnV1aWQpfSwuLi5zLmZpbHRlcih3PT53LmRhdGVLZXkhPT1sKV07YXdhaXQgZS5yZXBsYWNlTm90ZUNvbnRlbnQoYSxUMCh5KSkuY2F0Y2godz0+RSgiW0dyYXZleWFyZF0gZmFpbGVkIHRvIHBlcnNpc3QgY2FuZGlkYXRlczoiLHcpKX1yZXR1cm4gRSgiW0dyYXZleWFyZF0gZGlzY292ZXJlZCBmcmVzaCBjYW5kaWRhdGVzOiIsZC5sZW5ndGgpLHtjYW5kaWRhdGVzOmQsbm90ZUhhbmRsZTphfX12YXIgUnQ9eih5ZSgpKTt2YXIgQzA9WyJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNjkwNTkyNTM0Ni0yMWJkYTRkMzJkZjQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MDA3MTQ1OTYwNC0zYjVlYzNhN2ZlMDUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwMTc4NTg4ODA0MS1hZjNlZjI4NWI0NzAiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NDgyMjc1OTAyMy1mZWQ2MjJmZjJjM2IiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUxOTY4MTM5Mzc4NC1kMTIwMjY3OTMzYmEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3NTkyNDE1NjczNC00OTZmNmNhYzZlYzEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ5MDczMDE0MTEwMy02Y2FjMjdhYWFiOTQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQzMzA4Njk2NjM1OC01NDg1OWQwZWQ3MTYiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MjIxNDEwMzQ1MS05Mzc0YmQxYzc5OGUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQxNDYwOTI0NTIyNC1hZmEwMmJmYjNmZGEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2OTQ3NDk2ODAyOC01NjYyM2YwMmU0MmUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQyNjYwNDk2Njg0OC1kN2FkYWM0MDJiZmYiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NTE0NjM0NDQyNS1mMDBkNWY1YzhmMDciLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ5MTU1Mzg5NTkxMS0wMDU1ZWNhNjQwMmQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MDc3MDg0MTA3Mi1mOTc4Y2Y0ZDAxOWUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NDgyMzA2MzUzMC0wOGYxMGVkMWEyZGQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQzOTg1Mzk0OTEyNy1mYTY0NzgyMWViYTAiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MjM5Njk2MTY5My0xNDJlNmUyNjkwMjciLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQzMTc5NDA2MjIzMi0yYTk5YTU0MzFjNmMiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ0Njc3NjgxMTk1My1iMjNkNTdiZDIxYWEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNjc0NDAzODEzNi00NjI3MzgzNGIzZmIiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTU3MjI5MzA3MTI3Ny1lZjFiM2U3NjEwNDUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQxODA2NTQ2MDQ4Ny0zZTQxYTZjODRkYzUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MDI0Njk3MzkxOC0yOWE5MzIyMWM0NTUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MzExNjc2MzI0OS0yZmFhZWY4MWNjZGEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQzOTc5MjY3NTEwNS03MDFlNmE0YWI2ZjAiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2MzMyMDcyNjI4MS02OTZhNDg1OTI4YzciLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ5OTAwMjIzODQ0MC1kMjY0ZWRkNTk2ZWMiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUxMDc5ODgzMTk3MS02NjFlYjA0YjM3MzkiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNzUyNTQyODAzNC1iNzIzY2Y5NjFkM2UiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ0MTk3NDIzMTUzMS1jNjIyN2RiNzZiNmUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ1ODY2ODM4Mzk3MC04ZGRkMzkyN2RlZWQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3MDc3MDkwMzY3Ni02OWI5ODIwMWVhMWMiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NDAzNzg2NjU1Ni02ODEyYzlkMWM3MmUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ1NTIxODg3MzUwOS04MDk3MzA1ZWUzNzgiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NTkxOTI5MjI3NS1jNjBiYTQ5ZGE2YWUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ0ODM3NTI0MDU4Ni04ODI3MDdkYjg4OGIiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ1MTE4NzU4MDQ1OS00MzQ5MDI3OWMwZmEiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ2NTEwMTA0NjUzMC03MzM5OGM3ZjI4Y2EiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQyMTc4OTY2NTIwOS1jOWIyYTQzNWUzZGMiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3NzQxNDM0ODQ2My1jMGViN2YxMzU5YjYiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwMDUzMDg1NTY5Ny1iNTg2ZDg5YmEzZWUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ1NTE1NjIxODM4OC01ZTYxYjUyNjgxOGIiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ0Nzc1Mjg3NTIxNS1iMjc2MWFjYjNjNWQiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ0Mzg5MDkyMzQyMi03ODE5ZWQ0MTAxYzAiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ5NDc4MzM2NzE5My0xNDkwMzRjMDVlOGYiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTYwODk1MzAyOTYwMS03YTZlNWU3ZmQ1NDgiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwMjA4MjU1MzA0OC1mMDA5YzM3MTI5YjkiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUxOTkwNDk4MTA2My1iMGNmNDQ4ZDQ3OWUiLCJodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTQ3NjIzMTY4MjgyOC0zN2U1NzFiYzE3MmYiXSxBMD1bImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTAwNTM0MzE0MjA5LWEyNWRkYjJiZDQyOSIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTAxODU0MTQwODAxLTUwZDAxNjk4OTUwYiIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTU5ODI3MjYwLWRjNjZkNTJiZWYxOSIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTMwOTA4Mjk1NDE4LWExMmUzMjY5NjZiYSIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTkyMjkwNDM1MzM4LTY4MmM0MDBjYjZmOCIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTIwOTYyODgwMjQ3LWNmYWY1NDFjODcyNCIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNDQ0MjEwOTcxMDQ4LTYxMzBjZjBjNDZjZiIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTI4MzYwOTgzMjc3LTEzZDQwMWNkYzE4NiIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNjA3MTM2MTA0MDgwLTc4YmJmZTJkMTIzNCIsImh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNDQwMzQyMzU5NzQzLTg0ZmNiOGMyMWYyMSJdLGxjPXtzbWFsbDp7d2lkdGg6NjAwLGhlaWdodDo2MDB9LGxhcmdlOnt3aWR0aDoxOTIwLGhlaWdodDoxMDgwfX07ZnVuY3Rpb24gTzAoZSl7bGV0IHQ9U3RyaW5nKGU/PyJkZWZhdWx0LXNlZWQiKSxuPTA7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKz0xKW49KG48PDUpLW4rdC5jaGFyQ29kZUF0KHIpLG58PTA7cmV0dXJuIE1hdGguYWJzKG4pfWZ1bmN0aW9uIEkwKGU9InNtYWxsIix0PSJncmF2ZXlhcmQiKXtsZXQgbj1sY1tlXXx8bGMuc21hbGw7cmV0dXJuYCR7QTBbTzAodCklQTAubGVuZ3RoXX0/dz0ke24ud2lkdGh9Jmg9JHtuLmhlaWdodH0mZml0PWNyb3AmYXV0bz1mb3JtYXRgfWZ1bmN0aW9uIGNjKGU9InNtYWxsIix0PSJkZWZhdWx0IixuPTApe2xldCByPWxjW2VdfHxsYy5zbWFsbCxvPWAke3R9OiR7bn1gLGE9TzAobyklQzAubGVuZ3RoLGk9QzBbYV0scz1gP3c9JHtyLndpZHRofSZoPSR7ci5oZWlnaHR9JmZpdD1jcm9wJmF1dG89Zm9ybWF0YDtyZXR1cm5gJHtpfSR7c31gfXZhciBTZT16KHJlKCkpLFREPTUsTkQ9NTAwLHFyPSJncmF2ZXlhcmQiO2Z1bmN0aW9uIEREKHtoZWFkZXJBY3Rpb25zOmV9KXtyZXR1cm4oMCxTZS5qc3gpKGNlLHtoZWFkZXJBY3Rpb25zOmUsaWNvbjoiXHV7MUY0NzV9Iix0aXRsZTpsZShxciksd2lkZ2V0SWQ6cXIsY2hpbGRyZW46KDAsU2UuanN4KSgicCIse2NsYXNzTmFtZToiZ3JhdmV5YXJkLWVtcHR5IixjaGlsZHJlbjoiTm8gbmVnbGVjdGVkIHRhc2tzIGZvdW5kIFx1MjAxNCBldmVyeXRoaW5nIGxvb2tzIGN1cnJlbnQhIn0pfSl9ZnVuY3Rpb24gX0Qoe2Vycm9yTWVzc2FnZTplLGhlYWRlckFjdGlvbnM6dCxvblJldHJ5Om59KXtyZXR1cm4oMCxTZS5qc3gpKGNlLHtoZWFkZXJBY3Rpb25zOnQsaWNvbjoiXHV7MUY0NzV9Iix0aXRsZTpsZShxciksd2lkZ2V0SWQ6cXIsY2hpbGRyZW46KDAsU2UuanN4cykoImRpdiIse2NsYXNzTmFtZToiZ3JhdmV5YXJkLWVycm9yIixjaGlsZHJlbjpbKDAsU2UuanN4KSgicCIse2NoaWxkcmVuOmV8fCJGYWlsZWQgdG8gbG9hZCB0YXNrcy4ifSksKDAsU2UuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJncmF2ZXlhcmQtcmV0cnkiLG9uQ2xpY2s6bix0eXBlOiJidXR0b24iLGNoaWxkcmVuOiJSZXRyeSJ9KV19KX0pfWZ1bmN0aW9uIENEKHtoZWFkZXJBY3Rpb25zOmV9KXtyZXR1cm4oMCxTZS5qc3gpKGNlLHtoZWFkZXJBY3Rpb25zOmUsaWNvbjoiXHV7MUY0NzV9Iix0aXRsZTpsZShxciksd2lkZ2V0SWQ6cXIsY2hpbGRyZW46KDAsU2UuanN4KSgicCIse2NsYXNzTmFtZToiZ3JhdmV5YXJkLWxvYWRpbmciLGNoaWxkcmVuOiJTZWFyY2hpbmcgZm9yIGZvcmdvdHRlbiB0YXNrc1x1MjAyNiJ9KX0pfWZ1bmN0aW9uIEFEKHtpc1JlZnJlc2hpbmc6ZSxvblJlZnJlc2g6dH0pe3JldHVybigwLFNlLmpzeCkoImEiLHsiYXJpYS1kaXNhYmxlZCI6ZT8idHJ1ZSI6ImZhbHNlIixjbGFzc05hbWU6IndpZGdldC1oZWFkZXItYWN0aW9uIixocmVmOiIjIixvbkNsaWNrOnQsdGFiSW5kZXg6ZT8tMTowLHRpdGxlOmU/IlJlZnJlc2hpbmcgZ3JhdmV5YXJkIGNhbmRpZGF0ZXMiOiJGaW5kIGEgbmV3IHNldCBvZiBncmF2ZXlhcmQgY2FuZGlkYXRlcyIsY2hpbGRyZW46ZT8iXHUyMUJCIFJlZnJlc2hpbmdcdTIwMjYiOiJcdTIxQkIgUmVmcmVzaCJ9KX1mdW5jdGlvbiBSMChlKXtpZighZT8uY3JlYXRlZEF0KXJldHVybiBudWxsO2xldCB0PU51bWJlcihlLmNyZWF0ZWRBdCk7aWYoIU51bWJlci5pc0Zpbml0ZSh0KSlyZXR1cm4gbnVsbDtsZXQgbj10PDFlMTA/dCoxZTM6dCxyPW5ldyBEYXRlKG4pO3JldHVybiBOdW1iZXIuaXNOYU4oci5nZXRUaW1lKCkpP251bGw6cn1mdW5jdGlvbiBPRChlLHQpe2xldCBuPVIwKGUpO2lmKCFuKXJldHVybiBudWxsO2xldCByPW4udG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6InNob3J0Iix5ZWFyOiJudW1lcmljIn0pO3JldHVybiB0P3I6YENyZWF0ZWQgJHtyfWB9ZnVuY3Rpb24gTTAoZSl7bGV0IHQ9TnVtYmVyKGU/LnNjb3JlPz9lPy52aWN0b3J5VmFsdWU/PzApO3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCk/dDowfWZ1bmN0aW9uIElEKGUpe2xldCB0PU0wKGUpO3JldHVybiB0PD0zPyJtdXRlZCI6dDw9NT8iY29vbCI6dDwxMD8id2FybSI6ImhvdCJ9ZnVuY3Rpb24gcmYoZSl7cmV0dXJuYCR7ZT8/IiJ9YC5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKX1mdW5jdGlvbiBSRChlLHQpe2lmKCFOdW1iZXIuaXNGaW5pdGUodCl8fHQ8PTApcmV0dXJuIDA7bGV0IG49bmV3IERhdGUsbz1gJHtgJHtuLmdldEZ1bGxZZWFyKCl9OiR7bi5nZXRNb250aCgpfToke24uZ2V0RGF0ZSgpfToke24uZ2V0SG91cnMoKX1gfToke2U/PyIifWAsYT0wO2ZvcihsZXQgaT0wO2k8by5sZW5ndGg7aSs9MSlhPWEqMzErby5jaGFyQ29kZUF0KGkpPj4+MDtyZXR1cm4gYSV0fWZ1bmN0aW9uIE1EKGUpe2xldCB0PVIwKGUpLG49TTAoZSkscj1OdW1iZXIuaXNJbnRlZ2VyKG4pP2Ake259YDpuLnRvRml4ZWQoMikucmVwbGFjZSgvXC4/MCskLywiIiksbz1lPy5ub3RlTmFtZXx8ZT8ubm90ZVRpdGxlfHxlPy5ub3RlPy5uYW1lfHwiVW5rbm93biBub3RlIixhPUlEKGUpLGk9dD90LnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse2RhdGVTdHlsZToibWVkaXVtIn0pOiJVbmtub3duIjtyZXR1cm5gCiAgICA8ZGl2IGNsYXNzPSJncmF2ZXlhcmQtdGFzay10b29sdGlwIiByb2xlPSJ0b29sdGlwIj4KICAgICAgPGRpdiBjbGFzcz0iZ3JhdmV5YXJkLXRhc2stdG9vbHRpcC1tZXRhIj4KICAgICAgICA8c3BhbiBjbGFzcz0iZ3JhdmV5YXJkLXRhc2stdG9vbHRpcC1ub3RlIj4ke3JmKG8pfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZ3JhdmV5YXJkLXRhc2stdG9vbHRpcC1jcmVhdGVkIj5DcmVhdGVkICR7cmYoaSl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZ3JhdmV5YXJkLXRhc2stdG9vbHRpcC1jb250ZW50Ij4KICAgICAgICAke19vKGUuY29udGVudHx8ZS50aXRsZXx8IlVudGl0bGVkIHRhc2siKX0KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImdyYXZleWFyZC10YXNrLXRvb2x0aXAtZm9vdGVyIj4KICAgICAgICA8c3BhbiBjbGFzcz0iZ3JhdmV5YXJkLXRhc2stc2NvcmUgZ3JhdmV5YXJkLXRhc2stc2NvcmUtLSR7YX0iPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImdyYXZleWFyZC10YXNrLXNjb3JlLWRvdCIgYXJpYS1oaWRkZW49InRydWUiPjwvc3Bhbj4KICAgICAgICAgIDxzcGFuPlNjb3JlICR7cmYocil9PC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgfWZ1bmN0aW9uIFBEKGUpe2xldCB0PWUuY3VycmVudFRhcmdldD8uY2xvc2VzdD8uKCIuZ3JhdmV5YXJkLXRhc2staXRlbSIpO2lmKCF0fHx0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTshbi53aWR0aHx8IW4uaGVpZ2h0fHxuYyh7b3JpZ2luOnt4OihuLmxlZnQrbi53aWR0aC8yKS93aW5kb3cuaW5uZXJXaWR0aCx5OihuLnRvcCtuLmhlaWdodC8yKS93aW5kb3cuaW5uZXJIZWlnaHR9LHBhcnRpY2xlQ291bnQ6ODAsc3ByZWFkOjcwLHN0YXJ0VmVsb2NpdHk6Mzh9KX1mdW5jdGlvbiBMRCh7aXNEaXNtaXNzaW5nOmUsaXNTaW5nbGVDb2x1bW46dCx0YXNrSW5kZXg6bixvbk9wZW5Ob3RlOnIsb25HcmF2ZXlhcmQ6byxvbktlZXA6YSx0YXNrOml9KXtsZXQgcz1pLnRpdGxlfHxpLmNvbnRlbnR8fCJVbnRpdGxlZCB0YXNrIixsPU9EKGksdCksYz1gZ3JhdmV5YXJkLXRhc2staXRlbSR7ZT8iIGdyYXZleWFyZC10YXNrLWl0ZW0tLWRpc21pc3NpbmciOiIifWAsdT1bIkRpc21pc3MiLCJTZW5kIHRvIGEgZmFybSB1cHN0YXRlIiwiUmV0aXJlIiwiTGV0IGdvIiwiRXhpbGUiLCJCdXJ5IiwiU2VuZCBvZmYiLCJSZWxlYXNlIGludG8gdGhlIHdpbGQiLCJQdXQgb3V0IHRvIHBhc3R1cmUiLCJMYXkgdG8gcmVzdCIsIkRlY29tbWlzc2lvbiIsIlJlbGVhc2UgdG8gdGhlIGdyZWF0IGJleW9uZCIsIlNlbmQgdG8gdGhlIGV0ZXJuYWwgcmVzdCIsIkEgc29sZW1uIGZhcmV3ZWxsIiwiUGF5IGEgZmluYWwgdHJpYnV0ZSIsIlNlbmQgdG8gdGhlIGhlcmVhZnRlciJdLHA9dVtSRChuLHUubGVuZ3RoKV07cmV0dXJuKDAsU2UuanN4cykoImxpIix7Y2xhc3NOYW1lOmMsY2hpbGRyZW46WygwLFNlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImdyYXZleWFyZC10YXNrLWhlYWRlciIsY2hpbGRyZW46WygwLFNlLmpzeCkoImRpdiIse2NsYXNzTmFtZToiZ3JhdmV5YXJkLXRhc2stdGl0bGUtd3JhcCIsY2hpbGRyZW46KDAsU2UuanN4KShQaSx7Y29udGVudDpNRChpKSxkZWxheTpbTkQsMF0saW50ZXJhY3RpdmU6ITAsbWF4V2lkdGg6dD8yODA6MzQwLG9uU2hvd246ZD0+RGEoZD8ucG9wcGVyKSxwbGFjZW1lbnQ6ImJvdHRvbS1zdGFydCIsY2hpbGRyZW46KDAsU2UuanN4KSgic3BhbiIse2NsYXNzTmFtZToiZ3JhdmV5YXJkLXRhc2stdGl0bGUiLGlkOmBncmF2ZXlhcmQtdGl0bGUtJHtpLnV1aWR9YCx0YWJJbmRleDowLGNoaWxkcmVuOnN9KX0pfSksbD8oMCxTZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJncmF2ZXlhcmQtdGFzay1hZ2UiLGNoaWxkcmVuOmx9KTpudWxsXX0pLCgwLFNlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImdyYXZleWFyZC10YXNrLWFjdGlvbnMiLGNoaWxkcmVuOlsoMCxTZS5qc3gpKCJhIix7Y2xhc3NOYW1lOiJncmF2ZXlhcmQtdGFzay1hY3Rpb24gZ3JhdmV5YXJkLXRhc2stYWN0aW9uLS1zZW5kIixocmVmOiIjIixvbkNsaWNrOmQ9PntkLnByZXZlbnREZWZhdWx0KCksbyhkLGkpfSx0aXRsZToiRGlzbWlzcyB0aGlzIHRhc2sgXHUyMDE0IHJlbW92ZXMgaXQgZnJvbSB5b3VyIHRhc2sgZG9tYWluIGFuZCBwbGFjZXMgaXQgaW4gYW4gYXJjaGl2ZWQgbm90ZSB5b3UgY2FuIHJldmlzaXQgbGF0ZXIgaWYgZGVzaXJlZCIsY2hpbGRyZW46YFx1ezFGNUQxfVx1RkUwRiAke3B9YH0pLCgwLFNlLmpzeCkoImEiLHtjbGFzc05hbWU6ImdyYXZleWFyZC10YXNrLWFjdGlvbiBncmF2ZXlhcmQtdGFzay1hY3Rpb24tLWtlZXAiLGhyZWY6IiMiLG9uQ2xpY2s6ZD0+e2QucHJldmVudERlZmF1bHQoKSxhKGkpfSx0aXRsZToiUHJlc2VydmUgdGhpcyB0YXNrIFx1MjAxNCByZW1vdmUgaXQgZnJvbSB0aGlzIGxpc3Qgd2l0aG91dCBkaXNtaXNzaW5nIGl0IixjaGlsZHJlbjoiXHV7MUY5RjJ9IEtlZXAifSksKDAsU2UuanN4KSgiYSIse2NsYXNzTmFtZToiZ3JhdmV5YXJkLXRhc2stYWN0aW9uIGdyYXZleWFyZC10YXNrLWFjdGlvbi0tbm90ZSIsaHJlZjoiIyIsb25DbGljazpkPT57ZC5wcmV2ZW50RGVmYXVsdCgpLHIoaSl9LHRpdGxlOiJPcGVuIHRoZSBub3RlIHdoZXJlIHRoaXMgdGFzayBsaXZlcyIsY2hpbGRyZW46Ilx1ezFGNEQzfSBOb3RlIn0pXX0pXX0pfWZ1bmN0aW9uIHpEKHtkaXNtaXNzaW5nVXVpZHM6ZSxoZWFkZXJBY3Rpb25zOnQsaXNTaW5nbGVDb2x1bW46bixtZWFkb3dPcGFjaXR5OnIsbWVhZG93VXJsOm8sb25PcGVuTm90ZTphLG9uR3JhdmV5YXJkOmksb25LZWVwOnMsdGFza3M6bH0pe3JldHVybigwLFNlLmpzeCkoY2Use2hlYWRlckFjdGlvbnM6dCxpY29uOiJcdXsxRjQ3NX0iLHRpdGxlOmxlKHFyKSx3aWRnZXRJZDpxcixjaGlsZHJlbjooMCxTZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJncmF2ZXlhcmQtbWVhZG93LXdyYXBwZXIiLGNoaWxkcmVuOlsoMCxTZS5qc3gpKCJpbWciLHthbHQ6IiIsY2xhc3NOYW1lOiJncmF2ZXlhcmQtbWVhZG93LWJnIixzcmM6byxzdHlsZTp7b3BhY2l0eTpyfX0pLCgwLFNlLmpzeCkoInVsIix7Y2xhc3NOYW1lOiJncmF2ZXlhcmQtdGFzay1saXN0IixjaGlsZHJlbjpsLm1hcCgoYyx1KT0+KDAsU2UuanN4KShMRCx7aXNEaXNtaXNzaW5nOmUuaGFzKGMudXVpZCksaXNTaW5nbGVDb2x1bW46bix0YXNrSW5kZXg6dSxvbk9wZW5Ob3RlOmEsb25HcmF2ZXlhcmQ6aSxvbktlZXA6cyx0YXNrOmN9LGMudXVpZCkpfSldfSl9KX1mdW5jdGlvbiBvZih7YXBwOmUsZ3JpZEhlaWdodFNpemU6dD0xLGdyaWRXaWR0aFNpemU6bj0yLHRhc2tEb21haW5VVUlEOnJ9KXtsZXQgbz0odHx8MSkqVEQsYT1OdW1iZXIobik9PT0xLFtpLHNdPSgwLFJ0LnVzZVN0YXRlKSgoKT0+bmV3IFNldCksW2wsY109KDAsUnQudXNlU3RhdGUpKG51bGwpLFt1LHBdPSgwLFJ0LnVzZVN0YXRlKSghMCksW2QsaF09KDAsUnQudXNlU3RhdGUpKG51bGwpLHk9KDAsUnQudXNlTWVtbykoKCk9PkkwKCJzbWFsbCIsbmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKSksW10pLHc9aS5zaXplPjA/MTowLGI9KDAsUnQudXNlQ2FsbGJhY2spKGFzeW5jKFM9e30pPT57bGV0IE49ISFTPy5mb3JjZVJlZnJlc2g7RSgiW0dyYXZleWFyZF0gbG9hZENhbmRpZGF0ZXMgZmlyZWQsIHRhc2tEb21haW5VVUlEOiIsciwiZm9yY2VSZWZyZXNoOiIsTiksYyhudWxsKSxOJiZzKG5ldyBTZXQpLHAoITApO3RyeXtsZXR7Y2FuZGlkYXRlczpEfT1hd2FpdCBfMChlLG8scix7Zm9yY2VSZWZyZXNoOk59KSxfPUQuc2xpY2UoMCxvKTtoKF8pfWNhdGNoKEQpe0UoIltHcmF2ZXlhcmRdIGxvYWQgZmFpbGVkOiIsRCksYyhELm1lc3NhZ2V8fCJGYWlsZWQgdG8gbG9hZCB0YXNrcyIpfWZpbmFsbHl7cCghMSl9fSxbZSxvLHJdKTsoMCxSdC51c2VFZmZlY3QpKCgpPT57YigpfSxbYl0pO2xldCBnPSgwLFJ0LnVzZUNhbGxiYWNrKShTPT57Uy5wcmV2ZW50RGVmYXVsdCgpLCF1JiZiKHtmb3JjZVJlZnJlc2g6ITB9KX0sW2IsdV0pLG09KDAsUnQudXNlQ2FsbGJhY2spKGFzeW5jKFMsTik9PntQRChTKSxzKEQ9PntsZXQgXz1uZXcgU2V0KEQpO3JldHVybiBfLmFkZChOLnV1aWQpLF99KSxlLnVwZGF0ZVRhc2soTi51dWlkLHtkaXNtaXNzZWRBdDpNYXRoLmZsb29yKERhdGUubm93KCkvMWUzKX0pLmNhdGNoKEQ9PkUoIltHcmF2ZXlhcmRdIHVwZGF0ZVRhc2sgZmFpbGVkOiIsRCkpLEQwKGUsTikuY2F0Y2goRD0+RSgiW0dyYXZleWFyZF0gYXBwZW5kVGFza1RvUmV0aXJlZE5vdGUgZmFpbGVkOiIsRCkpfSxbZV0pLHY9KDAsUnQudXNlQ2FsbGJhY2spKFM9PntzKE49PntsZXQgRD1uZXcgU2V0KE4pO3JldHVybiBELmFkZChTLnV1aWQpLER9KX0sW10pLGY9KDAsUnQudXNlQ2FsbGJhY2spKGFzeW5jIFM9PntTPy5ub3RlVVVJRCYmYXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke1Mubm90ZVVVSUR9YCl9LFtlXSkseD0oMCxTZS5qc3gpKEFELHtpc1JlZnJlc2hpbmc6dSxvblJlZnJlc2g6Z30pO3JldHVybiB1PygwLFNlLmpzeCkoQ0Qse2hlYWRlckFjdGlvbnM6eH0pOmw/KDAsU2UuanN4KShfRCx7ZXJyb3JNZXNzYWdlOmwsaGVhZGVyQWN0aW9uczp4LG9uUmV0cnk6Yn0pOmQ9PT1udWxsfHxkLmxlbmd0aD09PTAmJmkuc2l6ZT09PTA/KDAsU2UuanN4KShERCx7aGVhZGVyQWN0aW9uczp4fSk6KDAsU2UuanN4KSh6RCx7ZGlzbWlzc2luZ1V1aWRzOmksaGVhZGVyQWN0aW9uczp4LGlzU2luZ2xlQ29sdW1uOmEsbWVhZG93T3BhY2l0eTp3LG1lYWRvd1VybDp5LG9uT3Blbk5vdGU6ZixvbkdyYXZleWFyZDptLG9uS2VlcDp2LHRhc2tzOmR9KX12YXIgUDA9eih5ZSgpKTt2YXIgR3Q9eihyZSgpKSxhZj0ibGF5b3V0LXBpY2tlciI7YXN5bmMgZnVuY3Rpb24gc2Yoe2FwcDplLGlzUmVzZXQ6dCxvbkxheW91dFBlcnNpc3Q6bixvblNlbGVjdGVkUHJvZmlsZUNoYW5nZTpyLHByb2ZpbGVJZDpvLHNpemluZzphLHdpZGdldElkczppfSl7YXdhaXQgbihpLHQsYSksbyE9bnVsbD8oZS5zZXRTZXR0aW5nKEsuU0VMRUNURURfTEFZT1VUX1BST0ZJTEUsbykscihvKSk6bz09PW51bGwmJihlLnNldFNldHRpbmcoSy5TRUxFQ1RFRF9MQVlPVVRfUFJPRklMRSwiIikscihudWxsKSl9ZnVuY3Rpb24gRkQoe3Byb2ZpbGU6ZSxvbkFwcGx5OnQsYXBwbHlpbmdJZDpuLGlzTWF0Y2g6cn0pe2xldCBvPW49PT1lLmlkLGE9ISFuLGk9bz8iQXBwbHlpbmdcdTIwMjYiOnI/IkFwcGx5IjoiQXBwbHkgXHUyMDE0IHJlcGxhY2VzIGFsbCB3aWRnZXRzIFx1MjE5MiIscz1gbGF5b3V0LXBpY2tlci1wcm9maWxlLWJ1dHRvbiR7bz8iIGxheW91dC1waWNrZXItcHJvZmlsZS1idXR0b24tLWFwcGx5aW5nIjoiIn0ke3I/IiBsYXlvdXQtcGlja2VyLXByb2ZpbGUtYnV0dG9uLS1jdXJyZW50IjoiIn1gLGw9YGxheW91dC1waWNrZXItcHJvZmlsZS1hY3Rpb24ke3I/IiBsYXlvdXQtcGlja2VyLXByb2ZpbGUtYWN0aW9uLS1jdXJyZW50IjoiIn1gO3JldHVybigwLEd0LmpzeCkoImRpdiIse2NsYXNzTmFtZToibGF5b3V0LXBpY2tlci1wcm9maWxlIixjaGlsZHJlbjooMCxHdC5qc3hzKSgiYnV0dG9uIix7Y2xhc3NOYW1lOnMsZGlzYWJsZWQ6YSxvbkNsaWNrOigpPT50KGUpLHR5cGU6ImJ1dHRvbiIsY2hpbGRyZW46WygwLEd0LmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImxheW91dC1waWNrZXItcHJvZmlsZS1oZWFkZXIiLGNoaWxkcmVuOlsoMCxHdC5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJsYXlvdXQtcGlja2VyLXByb2ZpbGUtaWNvbiIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46ZS5pY29ufSksKDAsR3QuanN4KSgic3BhbiIse2NsYXNzTmFtZToibGF5b3V0LXBpY2tlci1wcm9maWxlLW5hbWUiLGNoaWxkcmVuOmUubmFtZX0pLCgwLEd0LmpzeCkoInNwYW4iLHtjbGFzc05hbWU6bCxjaGlsZHJlbjppfSldfSksKDAsR3QuanN4KSgicCIse2NsYXNzTmFtZToibGF5b3V0LXBpY2tlci1wcm9maWxlLWRlc2NyaXB0aW9uIixjaGlsZHJlbjplLmRlc2NyaXB0aW9ufSldfSl9KX1mdW5jdGlvbiBsZih7YXBwOmUsY3VycmVudExheW91dDp0LG9uTGF5b3V0QXBwbHk6bixvblNlbGVjdGVkUHJvZmlsZUNoYW5nZTpyfSl7bGV0W28sYV09KDAsUDAudXNlU3RhdGUpKG51bGwpLGk9X2EubWFwKHA9PmZ3KHQscCkpLHM9aS5zb21lKEJvb2xlYW4pLGw9YXN5bmMgcD0+e2lmKCFvKXthKHAuaWQpO3RyeXtsZXQgZD1wLndpZGdldHMubWFwKHk9Pnkud2lkZ2V0SWQpLGg9S2kocCk7YXdhaXQgc2Yoe2FwcDplLGlzUmVzZXQ6ITAsb25MYXlvdXRQZXJzaXN0Om4sb25TZWxlY3RlZFByb2ZpbGVDaGFuZ2U6cixwcm9maWxlSWQ6cC5pZCxzaXppbmc6aCx3aWRnZXRJZHM6ZH0pfWZpbmFsbHl7YShudWxsKX19fTtyZXR1cm4oMCxHdC5qc3hzKShjZSx7aGVhZGVyQWN0aW9uczooMCxHdC5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJ3aWRnZXQtaGVhZGVyLWFjdGlvbiIsb25DbGljazooKT0+e2xldCBkPShBcnJheS5pc0FycmF5KHQpP3Q6W10pLmZpbHRlcihoPT5oLndpZGdldElkIT09YWYpLm1hcChoPT5oLndpZGdldElkKTtuKGQsITEsbnVsbCl9LGNoaWxkcmVuOiJcdTI3MTUgRGlzbWlzcyJ9KSxpY29uOiJcdXsxRjVDMn1cdUZFMEYiLHRpdGxlOmxlKGFmKSx3aWRnZXRJZDphZixjaGlsZHJlbjpbcz9udWxsOigwLEd0LmpzeCkoInAiLHtjbGFzc05hbWU6ImxheW91dC1waWNrZXItd2FybmluZyIsY2hpbGRyZW46Ilx1MjZBMFx1RkUwRiBDbGlja2luZyBhIHByb2ZpbGUgcmVvcmRlcnMgYWxsIGRhc2hib2FyZCB3aWRnZXRzLiJ9KSwoMCxHdC5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImxheW91dC1waWNrZXItcHJvZmlsZXMiLGNoaWxkcmVuOl9hLm1hcCgocCxkKT0+KDAsR3QuanN4KShGRCx7cHJvZmlsZTpwLG9uQXBwbHk6bCxhcHBseWluZ0lkOm8saXNNYXRjaDppW2RdfSxwLmlkKSl9KV19KX12YXIgX2U9eih5ZSgpKTt2YXIgUG49eihyZSgpKSxMMD0iZGF5LXNrZXRjaCIsY2Y9NixGMD0yMSxVRD0xZTQsJEQ9MzAwLFFyPUFycmF5LmZyb20oe2xlbmd0aDpGMC1jZisxfSwoZSx0KT0+Y2YrdCk7ZnVuY3Rpb24gVTAoZSl7cmV0dXJuIGUudG9Mb2NhbGVEYXRlU3RyaW5nKCJlbi1VUyIse3dlZWtkYXk6ImxvbmciLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLHllYXI6Im51bWVyaWMifSl9ZnVuY3Rpb24gV0QoZSl7cmV0dXJuYERheSBTa2V0Y2ggJHtVMChlKX1gfWZ1bmN0aW9uIEJEKGUpe2xldCB0PXt9LG49bmV3IFNldDtpZighZSlyZXR1cm57ZW50cmllczp0LGh1bWFuRWRpdGVkSG91cnM6bn07Zm9yKGxldCByIG9mIGUuc3BsaXQoYApgKSl7bGV0IG89ci5tYXRjaCgvXmh1bWFuLWVkaXRlZDpccyooW1xkLFxzXSopL2kpO2lmKG8pe29bMV0uc3BsaXQoIiwiKS5mb3JFYWNoKGM9PntsZXQgdT1wYXJzZUludChjLnRyaW0oKSwxMCk7aXNOYU4odSl8fG4uYWRkKHUpfSk7Y29udGludWV9bGV0IGE9ci5tYXRjaCgvXihcZHsxLDJ9KD86YW18cG0pKTpccyooLiopL2kpO2lmKCFhKWNvbnRpbnVlO2xldCBpPWFbMV0udG9Mb3dlckNhc2UoKSxzPWFbMl0ucmVwbGFjZSgvXFwrJC8sIiIpLnRyaW0oKSxsPUhEKGkpO2whPT1udWxsJiZRci5pbmNsdWRlcyhsKSYmKHRbbF09cyl9cmV0dXJue2VudHJpZXM6dCxodW1hbkVkaXRlZEhvdXJzOm59fWZ1bmN0aW9uIEhEKGUpe2xldCB0PWUubWF0Y2goL14oXGR7MSwyfSkoYW18cG0pJC9pKTtpZighdClyZXR1cm4gbnVsbDtsZXQgbj1wYXJzZUludCh0WzFdLDEwKSxyPXRbMl0udG9Mb3dlckNhc2UoKTtyZXR1cm4gcj09PSJhbSImJm49PT0xMj9uPTA6cj09PSJwbSImJm4hPT0xMiYmKG4rPTEyKSxufWZ1bmN0aW9uIEdEKGUsdCl7bGV0IG49UXIubWFwKHI9PntsZXQgbz1FYShyKSxhPWVbcl18fCIiO3JldHVybmAke299OiAke2F9YH0pO2lmKHQuc2l6ZT4wKXtsZXQgcj1bLi4udF0uc29ydCgobyxhKT0+by1hKTtuLnB1c2goYGh1bWFuLWVkaXRlZDogJHtyLmpvaW4oIiwiKX1gKX1yZXR1cm4gbi5qb2luKGAKYCl9ZnVuY3Rpb24gdWMoKXtsZXQgZT17fTtyZXR1cm4gUXIuZm9yRWFjaCh0PT57ZVt0XT0iIn0pLGV9ZnVuY3Rpb24gejAoZSl7cmV0dXJuIGU/ZSBpbnN0YW5jZW9mIERhdGU/ZS5nZXRUaW1lKCk6dHlwZW9mIGU9PSJudW1iZXIiP2U8MWUxMD9lKjFlMzplOm51bGw6bnVsbH1mdW5jdGlvbiBWRChlKXtsZXQgdD16MChlPy5zdGFydEF0KTtpZighdClyZXR1cm5bXTtsZXQgbj1uZXcgRGF0ZSh0KS5nZXRIb3VycygpLHI9W25dLG89ejAoZT8uZW5kQXQpO2lmKCFvfHxvPD10KXJldHVybiByO2xldCBhPU1hdGguZmxvb3IoKG8tdCkvKDYwKjYwKjFlMykpO2ZvcihsZXQgaT0xO2k8YTtpKz0xKXIucHVzaChuK2kpO3JldHVybiByfWZ1bmN0aW9uIGpEKGUpe2lmKCFlPy5zdGFydHx8IShlLnN0YXJ0IGluc3RhbmNlb2YgRGF0ZSl8fGUuYWxsRGF5KXJldHVybltdO2xldCB0PWUuc3RhcnQuZ2V0SG91cnMoKTtpZighZS5lbmR8fCEoZS5lbmQgaW5zdGFuY2VvZiBEYXRlKXx8ZS5lbmQ8PWUuc3RhcnQpcmV0dXJuW3RdO2xldCBuPWUuZW5kLmdldEhvdXJzKCkrKGUuZW5kLmdldE1pbnV0ZXMoKT4wPzE6MCkscj1bXTtmb3IobGV0IG89dDtvPG47bysrKXIucHVzaChvKTtyZXR1cm4gci5sZW5ndGg+MD9yOlt0XX1mdW5jdGlvbiBLRChlKXtsZXQgdD0oZT8uY29udGVudHx8IiIpLnNwbGl0KGAKYClbMF07cmV0dXJuIHR3KHQpfWZ1bmN0aW9uIFlEKGUsdCl7cmV0dXJuIHQhPT1udWxsJiZKU09OLnN0cmluZ2lmeShlKSE9PUpTT04uc3RyaW5naWZ5KHQpfWZ1bmN0aW9uIHFEKGUsdCxuKXtsZXQgcj17Li4uZX07cmV0dXJuIHQuZm9yRWFjaChvPT57bGV0IGE9S0Qobyk7YSYmVkQobykuZm9yRWFjaChpPT57UXIuaW5jbHVkZXMoaSkmJiFyW2ldJiYhbi5oYXMoaSkmJihyW2ldPWEpfSl9KSxyfWZ1bmN0aW9uIFFEKGUsdCxuLHIpe2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIGU7bGV0IG89RmUobiksYT17Li4uZX07cmV0dXJuIHQuZm9yRWFjaChpPT57IWk/LnRpdGxlfHxpLmFsbERheXx8IShpLnN0YXJ0IGluc3RhbmNlb2YgRGF0ZSl8fEZlKGkuc3RhcnQpIT09b3x8akQoaSkuZm9yRWFjaChzPT57UXIuaW5jbHVkZXMocykmJiFhW3NdJiYhci5oYXMocykmJihhW3NdPWkudGl0bGUpfSl9KSxhfWZ1bmN0aW9uIEpEKHthcHA6ZSxub3RlTmFtZTp0fSl7bGV0W24scl09KDAsX2UudXNlU3RhdGUpKHVjKSxbbyxhXT0oMCxfZS51c2VTdGF0ZSkoKCk9Pm5ldyBTZXQpLFtpLHNdPSgwLF9lLnVzZVN0YXRlKSghMCksW2wsY109KDAsX2UudXNlU3RhdGUpKG51bGwpLFt1LHBdPSgwLF9lLnVzZVN0YXRlKShudWxsKSxkPSgwLF9lLnVzZVJlZikobnVsbCksaD0oMCxfZS51c2VSZWYpKG4pLHk9KDAsX2UudXNlUmVmKShvKTtoLmN1cnJlbnQ9bix5LmN1cnJlbnQ9bztsZXQgdz0oMCxfZS51c2VDYWxsYmFjaykoYXN5bmMobSx2KT0+e2lmKCFlKXJldHVybjtsZXQgZj1HRChtLHYpO3RyeXtsZXQgeD1sO3h8fCh4PShhd2FpdCBlLmZpbmROb3RlKHtuYW1lOnR9KSk/LnV1aWR8fGF3YWl0IGUuY3JlYXRlTm90ZSh0LFtXZV0pLGMoeCkpLGF3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KHt1dWlkOnh9LGYpLHAoey4uLm19KSxFKGBbRGF5U2tldGNoXSBwZXJzaXN0ZWQgJHt0fWApfWNhdGNoKHgpe0UoIltEYXlTa2V0Y2hdIHNhdmUgZmFpbGVkIix4KX19LFtlLHQsbF0pLGI9KDAsX2UudXNlQ2FsbGJhY2spKChtPVVEKT0+e2QuY3VycmVudCYmY2xlYXJUaW1lb3V0KGQuY3VycmVudCksZC5jdXJyZW50PXNldFRpbWVvdXQoKCk9Pnt3KGguY3VycmVudCx5LmN1cnJlbnQpfSxtKX0sW3ddKSxnPSgwLF9lLnVzZUNhbGxiYWNrKSgoKT0+e2QuY3VycmVudCYmY2xlYXJUaW1lb3V0KGQuY3VycmVudCksdyhoLmN1cnJlbnQseS5jdXJyZW50KX0sW3ddKTtyZXR1cm4oMCxfZS51c2VFZmZlY3QpKCgpPT57bGV0IG09ITE7cmV0dXJuKGFzeW5jKCk9PntzKCEwKTt0cnl7bGV0IHY9YXdhaXQgZS5maW5kTm90ZSh7bmFtZTp0fSk7aWYobSlyZXR1cm47aWYodj8udXVpZCl7Yyh2LnV1aWQpO2xldCBmPWF3YWl0IGUuZ2V0Tm90ZUNvbnRlbnQoe3V1aWQ6di51dWlkfSk7aWYobSlyZXR1cm47bGV0e2VudHJpZXM6eCxodW1hbkVkaXRlZEhvdXJzOlN9PUJEKGYpLE49dWMoKTtTLmZvckVhY2goRD0+e3hbRF0hPT12b2lkIDAmJihOW0RdPXhbRF0pfSkscihOKSxhKFMpLHAoey4uLk59KX1lbHNle2xldCBmPXVjKCk7cihmKSxhKG5ldyBTZXQpLHAoZil9fWNhdGNoKHYpe2lmKEUoIltEYXlTa2V0Y2hdIGxvYWQgZmFpbGVkIix2KSwhbSl7bGV0IGY9dWMoKTtyKGYpLGEobmV3IFNldCkscChmKX19ZmluYWxseXttfHxzKCExKX19KSgpLCgpPT57bT0hMH19LFtlLHRdKSwoMCxfZS51c2VFZmZlY3QpKCgpPT4oKT0+e2QuY3VycmVudCYmY2xlYXJUaW1lb3V0KGQuY3VycmVudCl9LFtdKSx7ZW50cmllczpuLGh1bWFuRWRpdGVkSG91cnM6byxpc0RpcnR5OllEKG4sdSksbG9hZGluZzppLHNhdmVOb3c6ZyxzY2hlZHVsZVNhdmU6YixzZXRFbnRyaWVzOnIsc2V0SHVtYW5FZGl0ZWRIb3VyczphfX1mdW5jdGlvbiBYRCh7YWdlbmRhVGFza3M6ZSxjdXJyZW50RGF0ZTp0LGh1bWFuRWRpdGVkSG91cnM6bixsb2FkaW5nOnIsc2V0RW50cmllczpvfSl7KDAsX2UudXNlRWZmZWN0KSgoKT0+e2lmKCFlfHwhdHx8cilyZXR1cm47bGV0IGE9RmUodCksaT1lW2FdfHxbXTtpLmxlbmd0aCE9PTAmJm8ocz0+e2xldCBsPXFEKHMsaSxuKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobCk9PT1KU09OLnN0cmluZ2lmeShzKT9zOmx9KX0sW2UsdCxuLHIsb10pfWZ1bmN0aW9uIFpEKHtjYWxlbmRhckV2ZW50czplLGN1cnJlbnREYXRlOnQsaHVtYW5FZGl0ZWRIb3VyczpuLGxvYWRpbmc6cixzZXRFbnRyaWVzOm99KXsoMCxfZS51c2VFZmZlY3QpKCgpPT57IWV8fCF0fHxyfHxvKGE9PntsZXQgaT1RRChhLGUsdCxuKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaSk9PT1KU09OLnN0cmluZ2lmeShhKT9hOml9KX0sW2UsdCxuLHIsb10pfWZ1bmN0aW9uIGVfKGUsdCl7aWYoIWUpcmV0dXJuIDA7bGV0IG49ZS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ob3VyPSIke3R9Il1gKTtyZXR1cm4gbj9NYXRoLm1heCgwLG4ub2Zmc2V0VG9wLShlLmNsaWVudEhlaWdodC1uLmNsaWVudEhlaWdodCkvMik6MH1mdW5jdGlvbiB0Xyh7Y3VycmVudERhdGU6ZSxsb2FkaW5nOnQsbm90ZWJvb2tSZWY6bn0pe2xldCByPSgwLF9lLnVzZVJlZikobnVsbCksbz0oMCxfZS51c2VSZWYpKG51bGwpOygwLF9lLnVzZUVmZmVjdCkoKCk9PntsZXQgYT1GZShlKTtpZighYSlyZXR1cm47aWYodCl7ci5jdXJyZW50PWE7cmV0dXJufWlmKHIuY3VycmVudCE9PWF8fG8uY3VycmVudD09PWEpcmV0dXJuO2xldCBpPXNldFRpbWVvdXQoKCk9PntsZXQgcz1uLmN1cnJlbnQ7aWYoIXMpcmV0dXJuO2xldCBsPU1hdGgubWluKEYwLE1hdGgubWF4KGNmLG5ldyBEYXRlKCkuZ2V0SG91cnMoKSkpO3Muc2Nyb2xsVG9wPWVfKHMsbCksci5jdXJyZW50PW51bGwsby5jdXJyZW50PWF9LDApO3JldHVybigpPT5jbGVhclRpbWVvdXQoaSl9LFtlLHQsbl0pfWZ1bmN0aW9uIG5fKCl7bGV0IGU9KDAsX2UudXNlUmVmKSh7fSksdD0oMCxfZS51c2VDYWxsYmFjaykoKHIsbyk9PntvP2UuY3VycmVudFtyXT1vOmRlbGV0ZSBlLmN1cnJlbnRbcl19LFtdKTtyZXR1cm57aGFuZGxlSW5wdXRLZXlEb3duOigwLF9lLnVzZUNhbGxiYWNrKSgocixvKT0+e2lmKG8ua2V5IT09IkFycm93RG93biImJm8ua2V5IT09IkFycm93VXAiKXJldHVybjtpZihvLnByZXZlbnREZWZhdWx0KCksby5zaGlmdEtleSl7bGV0IHc9by5jdXJyZW50VGFyZ2V0LGI9dy52YWx1ZS5sZW5ndGg7by5rZXk9PT0iQXJyb3dVcCI/dy5zZXRTZWxlY3Rpb25SYW5nZSgwLGIsImJhY2t3YXJkIik6dy5zZXRTZWxlY3Rpb25SYW5nZSgwLGIsImZvcndhcmQiKTtyZXR1cm59bGV0IGE9UXIuaW5kZXhPZihyKTtpZihhPT09LTEpcmV0dXJuO2xldCBpPW8ua2V5PT09IkFycm93RG93biI/MTotMSxzPVFyW2EraV07aWYoIXMpcmV0dXJuO2xldCBsPW8uY3VycmVudFRhcmdldCxjPWUuY3VycmVudFtzXTtpZighYylyZXR1cm47bGV0IHU9bC5zZWxlY3Rpb25TdGFydCxwPWwuc2VsZWN0aW9uRW5kLGQ9Yy52YWx1ZS5sZW5ndGgsaD11PT09bnVsbD9kOk1hdGgubWluKHUsZCkseT1wPT09bnVsbD9oOk1hdGgubWluKHAsZCk7Yy5mb2N1cygpLGMuc2V0U2VsZWN0aW9uUmFuZ2UoaCx5KX0sW10pLHNldElucHV0UmVmOnR9fWZ1bmN0aW9uIHJfKHtlbnRyaWVzOmUsaGFuZGxlQmx1cjp0LGhhbmRsZUlucHV0Q2hhbmdlOm4saGFuZGxlSW5wdXRLZXlEb3duOnIsaG91cjpvLHNldElucHV0UmVmOmEsdGltZUZvcm1hdDppfSl7cmV0dXJuKDAsUG4uanN4cykoImRpdiIse2NsYXNzTmFtZToiZGF5LXNrZXRjaC1saW5lIiwiZGF0YS1ob3VyIjpvLGNoaWxkcmVuOlsoMCxQbi5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJkYXktc2tldGNoLWhvdXItbGFiZWwiLGNoaWxkcmVuOkVhKG8saSl9KSwoMCxQbi5qc3gpKCJpbnB1dCIse3R5cGU6InRleHQiLGNsYXNzTmFtZToiZGF5LXNrZXRjaC1pbnB1dCIsdmFsdWU6ZVtvXXx8IiIscmVmOnM9PmEobyxzKSxvbkNoYW5nZTpzPT5uKG8scy50YXJnZXQudmFsdWUpLG9uS2V5RG93bjpzPT5yKG8scyksb25CbHVyOnQscGxhY2Vob2xkZXI6IiIsImFyaWEtbGFiZWwiOmAke0VhKG8saSl9IGVudHJ5YH0pXX0pfWZ1bmN0aW9uIG9fKHtpc0RpcnR5OmUsb25TYXZlQ2xpY2s6dH0pe3JldHVybigwLFBuLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZTpgZGF5LXNrZXRjaC1zYXZlLWJ0biR7ZT8iIjoiIGRheS1za2V0Y2gtc2F2ZS1idG4tLWRpc2FibGVkIn1gLGRpc2FibGVkOiFlLG9uQ2xpY2s6dCx0aXRsZTplPyJTYXZlIGNoYW5nZXMiOiJObyB1bnNhdmVkIGNoYW5nZXMiLGNoaWxkcmVuOmU/IlNhdmUiOiJTYXZlZCJ9KX1mdW5jdGlvbiB1Zih7YWdlbmRhVGFza3M6ZSxhcHA6dCxjYWxlbmRhckV2ZW50czpuLGN1cnJlbnREYXRlOnIsdGltZUZvcm1hdDpvfSl7bGV0IGE9KDAsX2UudXNlUmVmKShudWxsKSxpPW50KHIpLHM9V0QoaSkse2hhbmRsZUlucHV0S2V5RG93bjpsLHNldElucHV0UmVmOmN9PW5fKCkse2VudHJpZXM6dSxodW1hbkVkaXRlZEhvdXJzOnAsaXNEaXJ0eTpkLGxvYWRpbmc6aCxzYXZlTm93Onksc2NoZWR1bGVTYXZlOncsc2V0RW50cmllczpiLHNldEh1bWFuRWRpdGVkSG91cnM6Z309SkQoe2FwcDp0LG5vdGVOYW1lOnN9KTtYRCh7YWdlbmRhVGFza3M6ZSxjdXJyZW50RGF0ZTpyLGh1bWFuRWRpdGVkSG91cnM6cCxsb2FkaW5nOmgsc2V0RW50cmllczpifSksWkQoe2NhbGVuZGFyRXZlbnRzOm4sY3VycmVudERhdGU6cixodW1hbkVkaXRlZEhvdXJzOnAsbG9hZGluZzpoLHNldEVudHJpZXM6Yn0pLHRfKHtjdXJyZW50RGF0ZTpyLGxvYWRpbmc6aCxub3RlYm9va1JlZjphfSk7bGV0IG09KDAsX2UudXNlQ2FsbGJhY2spKCgpPT57dygkRCl9LFt3XSksdj0oMCxfZS51c2VDYWxsYmFjaykoKGYseCk9PntiKFM9Pih7Li4uUyxbZl06eH0pKSxnKFM9Pm5ldyBTZXQoWy4uLlMsZl0pKSx3KCl9LFt3LGIsZ10pO3JldHVybigwLFBuLmpzeCkoY2Use3RpdGxlOmxlKEwwKSxzdWJ0aXRsZTpVMChpKSxpY29uOiJcdXsxRjVEMn1cdUZFMEYiLHdpZGdldElkOkwwLGhlYWRlckFjdGlvbnM6KDAsUG4uanN4KShvXyx7aXNEaXJ0eTpkLG9uU2F2ZUNsaWNrOnl9KSxjaGlsZHJlbjooMCxQbi5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImRheS1za2V0Y2gtbm90ZWJvb2siLHJlZjphLGNoaWxkcmVuOmg/KDAsUG4uanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXktc2tldGNoLWxvYWRpbmciLGNoaWxkcmVuOiJMb2FkaW5nXHUyMDI2In0pOlFyLm1hcChmPT4oMCxQbi5qc3gpKHJfLHtlbnRyaWVzOnUsaGFuZGxlQmx1cjptLGhhbmRsZUlucHV0Q2hhbmdlOnYsaGFuZGxlSW5wdXRLZXlEb3duOmwsaG91cjpmLHNldElucHV0UmVmOmMsdGltZUZvcm1hdDpvfSxmKSl9KX0pfXZhciBJbz16KHllKCkpO3ZhciB2cj16KHJlKCkpLCQwPSJkZWJ1Zy1jb25zb2xlIjtmdW5jdGlvbiBhXyhlKXtyZXR1cm4gZS5tYXAodD0+e2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gdDtpZih0IGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuYCR7dC5uYW1lfTogJHt0Lm1lc3NhZ2V9YDt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpfWNhdGNoe3JldHVybiBTdHJpbmcodCl9fSkuam9pbigiICIpfWZ1bmN0aW9uIGRmKCl7bGV0W2UsdF09KDAsSW8udXNlU3RhdGUpKCgpPT52eSgpKSxuPSgwLElvLnVzZVJlZikobnVsbCk7KDAsSW8udXNlRWZmZWN0KSgoKT0+e2Z1bmN0aW9uIGEoaSl7dChzPT57bGV0IGw9Wy4uLnMsaV07cmV0dXJuIGwubGVuZ3RoPjIwMD9sLnNsaWNlKC0yMDApOmx9KX1yZXR1cm4gd3koYSksKCk9PmJ5KGEpfSxbXSksKDAsSW8udXNlRWZmZWN0KSgoKT0+e24uY3VycmVudCYmKG4uY3VycmVudC5zY3JvbGxUb3A9bi5jdXJyZW50LnNjcm9sbEhlaWdodCl9LFtlXSk7bGV0IG89KDAsdnIuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJkZWJ1Zy1jb25zb2xlX19jbGVhci1idXR0b24iLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+dChbXSksdGl0bGU6IkNsZWFyIGxvZyBlbnRyaWVzIixjaGlsZHJlbjoiQ2xlYXIifSk7cmV0dXJuKDAsdnIuanN4KShjZSx7dGl0bGU6bGUoJDApLHdpZGdldElkOiQwLGhlYWRlckFjdGlvbnM6byxjaGlsZHJlbjooMCx2ci5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImRlYnVnLWNvbnNvbGUiLHJlZjpuLGNoaWxkcmVuOmUubGVuZ3RoPT09MD8oMCx2ci5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImRlYnVnLWNvbnNvbGVfX2VtcHR5IixjaGlsZHJlbjoiTm8gbG9nIG1lc3NhZ2VzIHlldC4gRW5hYmxlIENvbnNvbGUgTG9nZ2luZyBpbiBTZXR0aW5ncyB0byBzdGFydCBjYXB0dXJpbmcgbWVzc2FnZXMuIn0pOmUubWFwKGE9PigwLHZyLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRlYnVnLWNvbnNvbGVfX2VudHJ5IixjaGlsZHJlbjpbKDAsdnIuanN4KSgic3BhbiIse2NsYXNzTmFtZToiZGVidWctY29uc29sZV9fdGltZXN0YW1wIixjaGlsZHJlbjpuZXcgRGF0ZShhLnRzKS50b0lTT1N0cmluZygpLnNsaWNlKDExLDIzKX0pLCgwLHZyLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6ImRlYnVnLWNvbnNvbGVfX21lc3NhZ2UiLGNoaWxkcmVuOmFfKGEuYXJncyl9KV19LGEuaWQpKX0pfSl9dmFyIEtuPXooeWUoKSk7ZnVuY3Rpb24gaV8oZSl7bGV0IHQ9e307Zm9yKGxldHtkYXRlS2V5Om4sdGFza3M6cn1vZiBlKXRbbl09cjtyZXR1cm4gdH1mdW5jdGlvbiBwZihlKXtsZXRbdCxuXT0oMCxLbi51c2VTdGF0ZSkoe30pLHI9KDAsS24udXNlUmVmKSghMSksbz0oMCxLbi51c2VSZWYpKG51bGwpLGE9KDAsS24udXNlUmVmKShuZXcgU2V0KSxpPSgwLEtuLnVzZVJlZikobnVsbCkscz0oMCxLbi51c2VSZWYpKHt9KSxsPSgwLEtuLnVzZUNhbGxiYWNrKShhc3luYyhjLHUpPT57aS5jdXJyZW50IT09dSYmKGkuY3VycmVudD11LGEuY3VycmVudD1uZXcgU2V0LHMuY3VycmVudD17fSk7bGV0e2JvdW5kYXJpZXM6cCx3ZWVrU3RhcnRLZXk6ZH09eHYoYyksaD1gJHtkfTo6JHt1fHwiIn1gO2lmKGEuY3VycmVudC5oYXMoaCkpcmV0dXJuIHMuY3VycmVudDtyLmN1cnJlbnQ9ITAsby5jdXJyZW50PW51bGw7dHJ5e2xldCB5PWF3YWl0IFByb21pc2UuYWxsKHAubWFwKGFzeW5jKHtmcm9tOmcsdG86bSxkYXRlS2V5OnZ9KT0+e2xldCBmPWF3YWl0IGUuZ2V0Q29tcGxldGVkVGFza3MoZyxtKTtyZXR1cm57ZGF0ZUtleTp2LHRhc2tzOmZ8fFtdfX0pKSx3PWlfKHkpLGI9ey4uLnMuY3VycmVudCwuLi53fTtyZXR1cm4gbihiKSxzLmN1cnJlbnQ9YixhLmN1cnJlbnQuYWRkKGgpLGJ9Y2F0Y2goeSl7cmV0dXJuIEUoInVzZUNvbXBsZXRlZFRhc2tzOiBmYWlsZWQgdG8gZmV0Y2ggY29tcGxldGVkIHRhc2tzIix5KSxvLmN1cnJlbnQ9eSxzLmN1cnJlbnR9ZmluYWxseXtyLmN1cnJlbnQ9ITF9fSxbXSk7cmV0dXJue2NvbXBsZXRlZFRhc2tzQnlEYXRlOnQsZ2V0IGxvYWRpbmcoKXtyZXR1cm4gci5jdXJyZW50fSxnZXQgZXJyb3IoKXtyZXR1cm4gby5jdXJyZW50fSxmZXRjaENvbXBsZXRlZFRhc2tzOmx9fXZhciBXMD16KHllKCkpO2Z1bmN0aW9uIGZmKHtjb25maWdQYXJhbXM6ZX0pe3JldHVybnthY3RpdmVDb21wb25lbnRzOigwLFcwLnVzZU1lbW8pKCgpPT57aWYoIWUpcmV0dXJuW107bGV0IG49ZVtLLkRBU0hCT0FSRF9DT01QT05FTlRTXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmbi5sZW5ndGg+MD9uOmdvfSxbZV0pfX12YXIgWW49eih5ZSgpKTtmdW5jdGlvbiBkYyhlKXtyZXR1cm4gZS5zdGFydEF0fHxlLmRlYWRsaW5lfWZ1bmN0aW9uIGhmKGUsdCxuPSgpPT4hMCl7bGV0IHI9e30sbz0wLGE9bmV3IERhdGU7cmV0dXJuIGUuZm9yRWFjaChpPT57aWYobys9MSwhbihpKSlyZXR1cm47bGV0IHM9dChpKTtpZighcylyZXR1cm47bGV0IGw9cHIocyk7cltsXXx8KHJbbF09W10pLHJbbF0ucHVzaChpKX0pLEUoYEFuYWx5emVkICR7b30gdGFza3MsIGdyb3VwZWQgaW50byAke09iamVjdC5rZXlzKHIpLmxlbmd0aH0gZGF0ZSBrZXlzIGluICR7bmV3IERhdGUtYX1tc2ApLHJ9ZnVuY3Rpb24gQjAoZSl7cmV0dXJuIGhmKGUsZGMsdD0+IXQuY29tcGxldGVkQXQmJiF0LmRpc21pc3NlZEF0KX1mdW5jdGlvbiBIMChlKXtyZXR1cm4gaGYoZSx0PT50LmNvbXBsZXRlZEF0LHQ9PiEhdC5jb21wbGV0ZWRBdCl9ZnVuY3Rpb24gc18oZSx0KXtsZXQgbj1lLmZpbHRlcihvPT5vPnQpLHI9ZS5maWx0ZXIobz0+bzx0KTtyZXR1cm57dXBjb21pbmdEYXRlS2V5czpuLG9sZGVyRGF0ZUtleXM6cn19ZnVuY3Rpb24gbF8oZSx0KXtsZXQgbj17fTtyZXR1cm4gdC5mb3JFYWNoKHI9PntuW3JdPWVbcl18fFtdfSksbn1mdW5jdGlvbiBtZigpe2xldFtlLHRdPSgwLFluLnVzZVN0YXRlKShbXSksW24scl09KDAsWW4udXNlU3RhdGUpKG51bGwpLFtvLGFdPSgwLFluLnVzZVN0YXRlKShudWxsKSxbaSxzXT0oMCxZbi51c2VTdGF0ZSkoe30pLFtsLGNdPSgwLFluLnVzZVN0YXRlKSh7fSksdT1uZXcgRGF0ZSxwPSgwLFluLnVzZUNhbGxiYWNrKSh5PT57aWYoIXkpcmV0dXJuO3QoeS50YXNrRG9tYWluc3x8W10pLHIoeS5hY3RpdmVUYXNrRG9tYWlufHxudWxsKTtsZXQgdz15LnRhc2tzfHxbXTtzKEIwKHcpKSxjKEgwKHcpKSxhKERhdGUubm93KCkpfSxbXSksZD0oMCxZbi51c2VDYWxsYmFjaykoKHksdyxiKT0+e2lmKHkmJnQoeSksdyYmcih3KSxiKXtsZXQgZz1iLnRhc2tzfHxbXTtzKEIwKGcpKSxjKEgwKGcpKSxhKERhdGUubm93KCkpfX0sW10pLGg9KDAsWW4udXNlQ2FsbGJhY2spKHk9PntsZXQgdz15P25ldyBEYXRlKHkpOm5ldyBEYXRlLGI9cHIodyksZz1PYmplY3QudmFsdWVzKGkpLmZsYXQoKSxtPWcuZmlsdGVyKE49PiEhKE4uc3RhcnRBdHx8Ti5kZWFkbGluZSkpLnNvcnQoKE4sRCk9PmRjKE4pLWRjKEQpKTtFKGBBZ2VuZGEgd2lsbCByZXZpZXdlZCAke2cubGVuZ3RofSBvcGVuIHRhc2tzYCxnLm1hcChOPT4oe2RlYWRsaW5lVGV4dDpOLmRlYWRsaW5lP3ByKE4uZGVhZGxpbmUpOiJOL0EiLHN0YXJ0VGV4dDpOLnN0YXJ0QXQ/cHIoTi5zdGFydEF0KToiTm9uZSJ9KSkpLEUoYCR7bS5sZW5ndGh9IHJlbGV2YW50IHBlbmRpbmcgdGFza3MgZm91bmQgKHdpdGggc3RhcnRBdClgKTtsZXQgdj1oZihtLGRjKSxmPU9iamVjdC5rZXlzKHYpLnNvcnQoKSx7dXBjb21pbmdEYXRlS2V5czp4fT1zXyhmLGIpLFM9W2IsLi4ueF07cmV0dXJuIGxfKHYsUyl9LFtpXSk7cmV0dXJuIEUoYHVzZURvbWFpblRhc2tzIGluaXRpYWxpemVkIHdpdGggYWN0aXZlIGRvbWFpbiAke259IGluICR7bmV3IERhdGUtdX1tc2ApLHt0YXNrRG9tYWluczplLGFjdGl2ZVRhc2tEb21haW46bix0YXNrc0ZldGNoZWRBdDpvLG9wZW5UYXNrczppLGNvbXBsZXRlZFRhc2tzOmwsaW5pdGlhbGl6ZURvbWFpblRhc2tzOnAsb25Eb21haW5DaGFuZ2U6ZCxidWlsZEFnZW5kYVRhc2tzQnlEYXRlOmh9fXZhciBwYz16KHllKCkpO2Z1bmN0aW9uIEcwKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBOdW1iZXIuaXNOYU4oZS5nZXRUaW1lKCkpP251bGw6bmV3IERhdGUoZS5nZXRUaW1lKCkpO2lmKHR5cGVvZiBlIT0ibnVtYmVyIiYmdHlwZW9mIGUhPSJzdHJpbmciKXJldHVybiBudWxsO2xldCB0PXR5cGVvZiBlPT0ibnVtYmVyIiYmZTwxZTEwP25ldyBEYXRlKGUqMWUzKTpuZXcgRGF0ZShlKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQuZ2V0VGltZSgpKT9udWxsOnR9ZnVuY3Rpb24gY18oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5maWx0ZXIodD0+dCYmdHlwZW9mIHQ9PSJvYmplY3QiKS5tYXAodD0+KHsuLi50LGVuZDpHMCh0LmVuZCksc3RhcnQ6RzAodC5zdGFydCl9KSk6W119ZnVuY3Rpb24gVjAoZSx0LG4pe2UuZ2V0RXh0ZXJuYWxDYWxlbmRhckV2ZW50cyh7ZGF5czozLHRhc2tEb21haW5VVUlEOnR9KS50aGVuKHI9PntFKCJbdXNlRXh0ZXJuYWxDYWxlbmRhckV2ZW50c10gUmVjZWl2ZWQgY2FsZW5kYXIgZXZlbnRzIixyKSxuKGNfKHIpKX0pLmNhdGNoKCgpPT57bihbXSl9KX1mdW5jdGlvbiBnZihlLHQpe2xldFtuLHJdPSgwLHBjLnVzZVN0YXRlKShudWxsKTtyZXR1cm4oMCxwYy51c2VFZmZlY3QpKCgpPT57cihudWxsKSxWMChlLHQscik7ZnVuY3Rpb24gbygpe2RvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJ2aXNpYmxlIiYmVjAoZSx0LHIpfXJldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixvKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsbyl9LFtlLHRdKSx7Y2FsZW5kYXJFdmVudHM6bixjYWxlbmRhckV2ZW50c0xvYWRlZDpuIT09bnVsbH19dmFyIEplPXooeWUoKSk7dmFyIGJlPXoocmUoKSksdV89NWUzLEowPTcsZF89MyxDZT0yMjAsWDA9MTQsWjA9MixwXz00LGZfPTc4LGhfPTQwLGowPTQsbV89NDgsZ189OTUseV89MTYsdl89LjA0LHdfPTEyLGJfPTEyLEswPS41LGtfPTEuOCx4Xz0tNCxTXz01LFkwPS43LEVfPTMuMyxUXz0xOCxOXz0yMixEXz0tNSxfXz0xMSxDXz0xMyxBXz0yNixPXz0xMCxJXz0zMCxSXz00NCxNXz01LGZjPTEvMyxQXz0xLjMsTF89W1swLCIjMjdBRTYwNTAiXSxbLjUsIiNGMkM5NEMyMCJdLFsxLCIjRTg0NTNDMDgiXV0sel89MixGXz0zLjUsVV89MS4yLCRfPTgscTA9LjMsV189MixCXz0xLEhfPTE2LEdfPTI4LFEwPS43LFZfPTMsal89LTExLEtfPTE0LFlfPTU2LHFfPTQ2LFFfPTE2LEpfPTgsWF89MzMsWl89MTIsZUM9LjI1LHRDPS43NSxuQz0yNSxyQz0xMjAwLG9DPTFlMyxlYj0zLGhjPVt7dmFsdWU6LTIsZW1vamk6Ilx1ezFGNjM1fVx1MjAwRFx1ezFGNEFCfSIsbGFiZWw6IkF3ZnVsIn0se3ZhbHVlOi0xLGVtb2ppOiJcdXsxRkFFNH0iLGxhYmVsOiJCYWQifSx7dmFsdWU6MCxlbW9qaToiXHV7MUY2NDJ9IixsYWJlbDoiT2theSJ9LHt2YWx1ZToxLGVtb2ppOiJcdXsxRjYwMH0iLGxhYmVsOiJHb29kIn0se3ZhbHVlOjIsZW1vamk6Ilx1ezFGOTI5fSIsbGFiZWw6IkdyZWF0In1dLGFDPXsiLTIiOiIjRTg0NTNDIiwiLTEiOiIjRjI5OTRBIiwwOiIjRjJDOTRDIiwxOiIjNkZDRjk3IiwyOiIjMjdBRTYwIn0saUM9T2JqZWN0LmZyb21FbnRyaWVzKGhjLm1hcChlPT5bZS52YWx1ZSxlLmVtb2ppXSkpO2Z1bmN0aW9uIENhKGUpe3JldHVybiBhQ1tNYXRoLnJvdW5kKGUpXXx8IiNjY2MifWZ1bmN0aW9uIHRiKGUpe3JldHVybiBpQ1tNYXRoLnJvdW5kKGUpXXx8Ilx1Mjc1MyJ9ZnVuY3Rpb24gc0MoZSl7bGV0IHQ9aGMuZmluZChuPT5uLnZhbHVlPT09ZSk7cmV0dXJuIHQ/dC5sYWJlbDoiIn1mdW5jdGlvbiBuYihlKXtpZighZSlyZXR1cm4iIjtsZXR7ZnVsbERhdGU6dCxlbnRyaWVzOm59PWUscj1bYDxkaXYgY2xhc3M9Im1vb2Qtdml6LXRvb2x0aXAtZGF0ZSI+JHt0fTwvZGl2PmBdO2ZvcihsZXQgbyBvZiBuKXtsZXQgYT1oYy5maW5kKGw9PmwudmFsdWU9PT1vLnJhdGluZyk/LmVtb2ppfHwiXHUyNzUzIixpPXNDKG8ucmF0aW5nKSxzPWA8ZGl2IGNsYXNzPSJtb29kLXZpei10b29sdGlwLWVudHJ5Ij48c3BhbiBjbGFzcz0ibW9vZC12aXotdG9vbHRpcC10aW1lIj4ke28udGltZX08L3NwYW4+PHNwYW4gY2xhc3M9Im1vb2Qtdml6LXRvb2x0aXAtbW9vZCI+JHthfSA8c3BhbiBjbGFzcz0ibW9vZC12aXotbGFiZWwiPiR7aX0gKCR7by5yYXRpbmc+MD9gKyR7by5yYXRpbmd9YDpvLnJhdGluZ30pPC9zcGFuPjwvc3Bhbj5gO28ubm90ZXMmJihzKz1gPGRpdiBjbGFzcz0ibW9vZC12aXotdG9vbHRpcC1ub3RlIj4ke28ubm90ZXN9PC9kaXY+YCkscys9IjwvZGl2PiIsci5wdXNoKHMpfXJldHVybiByLmpvaW4oIiIpfWZ1bmN0aW9uIGxDKGUsdCxuLHIpe3R8fG58fHIoZSl9ZnVuY3Rpb24gY0MoZSx0LG4scixvLGEsaSl7dC5rZXk9PT0iRW50ZXIiJiYodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiYodC5wcmV2ZW50RGVmYXVsdCgpLHJiKGUsbixyLG8sYSxpKSl9YXN5bmMgZnVuY3Rpb24gcmIoZSx0LG4scixvLGEpe3IoITApLEUoIlJlY29yZGluZyBtb29kIHJhdGluZyB3aXRoIHZhbHVlOiIsdC52YWx1ZSk7bGV0IGk9YXdhaXQgZS5yZWNvcmRNb29kUmF0aW5nKHQudmFsdWUpLHM9bi50cmltKCk7RShgTW9vZCByYXRpbmcgdXVpZCAke2l9IHJlY2VpdmVkLCB0cmltbWVkIG5vdGVzIHNpemUgJHtzLmxlbmd0aH0gY2hhcmFjdGVyc2ApLHMmJihhd2FpdCBlLnVwZGF0ZU1vb2RSYXRpbmcoaSx7bm90ZTpzfSksRShgTW9vZCByYXRpbmcgdXVpZCAke2l9IHVwZGF0ZWQgd2l0aCBub3Rlc2ApKSxvKCEwKSxhPyhFKCJSZXRyaWV2ZWQgbW9vZCByYXRpbmcgVVVJRDoiLGksImNhbGxpbmcgb25Nb29kUmVjb3JkZWQiKSxhKHtyYXRpbmc6dC52YWx1ZSx0aW1lc3RhbXA6TWF0aC5mbG9vcihEYXRlLm5vdygpLzFlMyksbm90ZTpzfHxudWxsfSksRSgib25Nb29kUmVjb3JkZWQgY2FsbGJhY2sgY29tcGxldGUiKSk6RSgib25Nb29kUmVjb3JkZWQgY2FsbGJhY2sgbm90IHByb3ZpZGVkLCBza2lwcGluZyIpLHIoITEpfWZ1bmN0aW9uIHVDKGUpe2xldCB0PShlfHxbXSkuc2xpY2UoLUowKTtpZighdC5sZW5ndGgpcmV0dXJue3JlY2VudE1vb2RzOnQsYXZlcmFnZU1vb2Q6Ilx1MjAxNCJ9O2xldCBuPSh0LnJlZHVjZSgocixvKT0+citvLnJhdGluZywwKS90Lmxlbmd0aCkudG9GaXhlZCgxKTtyZXR1cm57cmVjZW50TW9vZHM6dCxhdmVyYWdlTW9vZDpufX1mdW5jdGlvbiBvYigpe2xldCBlPWdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSx0PW49PmUuZ2V0UHJvcGVydHlWYWx1ZShuKS50cmltKCk7cmV0dXJue2JnQ2FyZDp0KCItLWRhc2hib2FyZC1jb2xvci1iZy1jYXJkIiksYmdQYWdlOnQoIi0tZGFzaGJvYXJkLWNvbG9yLWJnLXBhZ2UiKSxib3JkZXI6dCgiLS1kYXNoYm9hcmQtY29sb3ItYm9yZGVyIiksdGV4dFNlY29uZGFyeTp0KCItLWRhc2hib2FyZC1jb2xvci10ZXh0LXNlY29uZGFyeSIpLHRleHRNdXRlZDp0KCItLWRhc2hib2FyZC1jb2xvci10ZXh0LW11dGVkIil9fWZ1bmN0aW9uIHlmKGUsdCl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiIyIpJiZlLmxlbmd0aD09PTc/ZSt0OmV9ZnVuY3Rpb24gZEMoe21vb2REYXRhOmV9KXtsZXQgdD0oMCxKZS51c2VSZWYpKG51bGwpLG49KDAsSmUudXNlUmVmKShudWxsKSxbcixvXT0oMCxKZS51c2VTdGF0ZSkoMCksYT1MaSgpLGk9SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuKDAsSmUudXNlRWZmZWN0KSgoKT0+e28oMCk7bGV0IGMsdT1udWxsLHA9ckMsZD1oPT57dXx8KHU9aCk7bGV0IHk9TWF0aC5taW4oKGgtdSkvcCwxKSx3PTEtTWF0aC5wb3coMS15LGViKTtvKHcpLHk8MSYmKGM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07cmV0dXJuIGM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShjKX0sW2ldKSwoMCxKZS51c2VFZmZlY3QpKCgpPT57bGV0IGM9dC5jdXJyZW50O2lmKCFjKXJldHVybjtsZXQgdT1jLmdldENvbnRleHQoIjJkIikscD13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8WjA7Yy53aWR0aD1DZSpwLGMuaGVpZ2h0PUNlKnAsdS5zY2FsZShwLHApLHUuY2xlYXJSZWN0KDAsMCxDZSxDZSk7bGV0IGQ9b2IoKSxoPUNlLzIseT1DZS8yK3BfLHc9Zl8sYj1oXzt1LmZpbGxTdHlsZT1kLmJnQ2FyZCx1LmJlZ2luUGF0aCgpLHUucm91bmRSZWN0KDAsMCxDZSxDZSxYMCksdS5maWxsKCksdS5zdHJva2VTdHlsZT15ZihkLmJvcmRlciwiMjgiKSx1LmxpbmVXaWR0aD0xO2ZvcihsZXQgeD1tXzt4PD1nXzt4Kz15Xyl1LmJlZ2luUGF0aCgpLHUuYXJjKGgseSx4LDAsTWF0aC5QSSoyKSx1LnN0cm9rZSgpO2xldCBnPWUubWFwKHg9Pih7bGFiZWw6eC5kYXlMYWJlbCxkYXRlTGFiZWw6eC5kYXRlTGFiZWwsdmFsOngucmF0aW5nfSkpLG09TWF0aC5tYXgoZy5sZW5ndGgsMSksdj1NYXRoLlBJKjIvbSxmPWcubGVuZ3RoPjE/dl86MDtpZihuLmN1cnJlbnQ9e2NlbnRlclg6aCxjZW50ZXJZOnksaW5uZXJSYWRpdXM6YixvdXRlclJhZGl1czp3LHNlZ21lbnRDb3VudDpnLmxlbmd0aCxzZWdtZW50QW5nbGU6dixnYXBBbmdsZTpmfSxnLmZvckVhY2goKHtsYWJlbDp4LGRhdGVMYWJlbDpTLHZhbDpOfSxEKT0+e2xldCBfPS1NYXRoLlBJLzIrRCp2K2YsQT1fKyh2LWYqMikqcixQPUNhKE4pO3Uuc2hhZG93Q29sb3I9UCx1LnNoYWRvd0JsdXI9d18qcix1LmJlZ2luUGF0aCgpLHUuYXJjKGgseSx3LF8sQSksdS5hcmMoaCx5LGIsQSxfLCEwKSx1LmNsb3NlUGF0aCgpO2xldCBJPXUuY3JlYXRlUmFkaWFsR3JhZGllbnQoaCx5LGIsaCx5LHcpO2lmKEkuYWRkQ29sb3JTdG9wKDAsUCsiOTkiKSxJLmFkZENvbG9yU3RvcCgxLFArImZmIiksdS5maWxsU3R5bGU9SSx1LmZpbGwoKSx1LnNoYWRvd0JsdXI9MCxyPkswKXtsZXQgTD1fKyh2LWYqMikvMixVPXcrYl8sRj1oK01hdGguY29zKEwpKlUsSD15K01hdGguc2luKEwpKlU7dS5maWxsU3R5bGU9ZC50ZXh0U2Vjb25kYXJ5LHUuZ2xvYmFsQWxwaGE9KHItSzApKmtfLHUuZm9udD0iYm9sZCA4cHggLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZiIsdS50ZXh0QWxpZ249ImNlbnRlciIsdS50ZXh0QmFzZWxpbmU9Im1pZGRsZSIsdS5maWxsVGV4dCh4LEYsSCt4XyksdS5mb250PSI3cHggLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZiIsdS5maWxsU3R5bGU9ZC50ZXh0TXV0ZWQsdS5maWxsVGV4dChTLEYsSCtTXyksdS5nbG9iYWxBbHBoYT0xfWlmKHI+WTApe2xldCBMPV8rKHYtZioyKS8yLFU9KHcrYikvMixGPWgrTWF0aC5jb3MoTCkqVSxIPXkrTWF0aC5zaW4oTCkqVTt1LmZvbnQ9IjEzcHggc2VyaWYiLHUudGV4dEFsaWduPSJjZW50ZXIiLHUudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHUuZ2xvYmFsQWxwaGE9TWF0aC5taW4oKHItWTApKkVfLDEpLHUuZmlsbFRleHQodGIoTiksRixIKSx1Lmdsb2JhbEFscGhhPTF9fSksdS5iZWdpblBhdGgoKSx1LmFyYyhoLHksYi1qMCwwLE1hdGguUEkqMiksdS5maWxsU3R5bGU9ZC5iZ1BhZ2UsdS5maWxsKCksZy5sZW5ndGg+MCl7bGV0IHg9KGcucmVkdWNlKChTLE4pPT5TK04udmFsLDApL2cubGVuZ3RoKS50b0ZpeGVkKDEpO3UuZmlsbFN0eWxlPUNhKE1hdGgucm91bmQoTnVtYmVyKHgpKSksdS5mb250PWBib2xkICR7Tl99cHggLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZmAsdS50ZXh0QWxpZ249ImNlbnRlciIsdS50ZXh0QmFzZWxpbmU9Im1pZGRsZSIsdS5nbG9iYWxBbHBoYT1yLHUuZmlsbFRleHQoeCxoLHkrRF8pLHUuZmlsbFN0eWxlPWQudGV4dE11dGVkLHUuZm9udD0iYm9sZCA3cHggLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZiIsdS5maWxsVGV4dCgiNy1EQVkgQVZHIixoLHkrX18pLHUuZ2xvYmFsQWxwaGE9MX11LmZpbGxTdHlsZT1kLnRleHRNdXRlZCx1LmZvbnQ9ImJvbGQgOHB4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLHUudGV4dEFsaWduPSJjZW50ZXIiLHUudGV4dEJhc2VsaW5lPSJhbHBoYWJldGljIix1LmZpbGxUZXh0KCJXIEUgRSBLICAgUiBJIE4gRyIsaCxDXyl9LFtpLHJdKSwoMCxiZS5qc3gpKCJkaXYiLHtzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixsaW5lSGVpZ2h0OjB9LGNoaWxkcmVuOigwLGJlLmpzeCkoImNhbnZhcyIse3JlZjp0LGNsYXNzTmFtZToibW9vZC12aXotY2FudmFzIixvbk1vdXNlTW92ZTpjPT57bGV0IHU9bi5jdXJyZW50LHA9dC5jdXJyZW50O2lmKCF1fHwhdS5zZWdtZW50Q291bnR8fCFwKXthLmhpZGUoKTtyZXR1cm59bGV0IGQ9cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPShjLmNsaWVudFgtZC5sZWZ0KSooQ2UvZC53aWR0aCkseT0oYy5jbGllbnRZLWQudG9wKSooQ2UvZC5oZWlnaHQpLHc9aC11LmNlbnRlclgsYj15LXUuY2VudGVyWSxnPU1hdGguc3FydCh3KncrYipiKTtpZihnPHUuaW5uZXJSYWRpdXMtajB8fGc+dS5vdXRlclJhZGl1cytUXyl7YS5oaWRlKCk7cmV0dXJufWxldCBtPU1hdGguYXRhbjIoYix3KStNYXRoLlBJLzI7bTwwJiYobSs9TWF0aC5QSSoyKTtsZXQgdj1NYXRoLmZsb29yKG0vdS5zZWdtZW50QW5nbGUpO2lmKHY+PTAmJnY8dS5zZWdtZW50Q291bnQpe2xldCBmPWVbdl0seD1kLmxlZnQraC9DZSpkLndpZHRoLFM9ZC50b3AreS9DZSpkLmhlaWdodDthLnNob3cobmIoe2Z1bGxEYXRlOmYuZnVsbERhdGUsZW50cmllczpmLmVudHJpZXN8fFtmXX0pLHgsUyl9ZWxzZSBhLmhpZGUoKX0sb25Nb3VzZUxlYXZlOigpPT5hLmhpZGUoKX0pfSl9ZnVuY3Rpb24gcEMoe21vb2REYXRhOmV9KXtsZXQgdD0oMCxKZS51c2VSZWYpKG51bGwpLG49KDAsSmUudXNlUmVmKShbXSksW3Isb109KDAsSmUudXNlU3RhdGUpKDApLGE9TGkoKSxpPUpTT04uc3RyaW5naWZ5KGUpO3JldHVybigwLEplLnVzZUVmZmVjdCkoKCk9PntvKDApO2xldCBjLHU9bnVsbCxwPW9DLGQ9aD0+e3V8fCh1PWgpO2xldCB5PU1hdGgubWluKChoLXUpL3AsMSk7bygxLU1hdGgucG93KDEteSxlYikpLHk8MSYmKGM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07cmV0dXJuIGM9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShjKX0sW2ldKSwoMCxKZS51c2VFZmZlY3QpKCgpPT57bGV0IGM9dC5jdXJyZW50O2lmKCFjKXJldHVybjtsZXQgdT1jLmdldENvbnRleHQoIjJkIikscD13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8WjA7Yy53aWR0aD1DZSpwLGMuaGVpZ2h0PUNlKnAsdS5zY2FsZShwLHApLHUuY2xlYXJSZWN0KDAsMCxDZSxDZSk7bGV0IGQ9b2IoKTt1LmJlZ2luUGF0aCgpLHUucm91bmRSZWN0KDAsMCxDZSxDZSxYMCksdS5maWxsU3R5bGU9ZC5iZ0NhcmQsdS5maWxsKCk7bGV0IGg9QV8seT1PXyx3PUlfLGI9Ul8sZz1DZS1oLXksbT1DZS13LWIsdj13K207Zm9yKGxldCBfPS0yO188PTI7XysrKXtsZXQgQT13K20tKF8rMikvNCptO3Uuc3Ryb2tlU3R5bGU9eWYoZC5ib3JkZXIsIjUwIiksdS5saW5lV2lkdGg9MSx1LmJlZ2luUGF0aCgpLHUubW92ZVRvKGgsQSksdS5saW5lVG8oQ2UteSxBKSx1LnN0cm9rZSgpLHUuZmlsbFN0eWxlPWQudGV4dE11dGVkLHUuZm9udD0iYm9sZCA4cHggLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZiIsdS50ZXh0QWxpZ249InJpZ2h0Iix1LnRleHRCYXNlbGluZT0ibWlkZGxlIix1LmZpbGxUZXh0KF8+MD9gKyR7X31gOl8saC1NXyxBKX1sZXQgZj1lLm1hcChfPT4oe2xhYmVsOl8uZGF5TGFiZWwsZGF0ZUxhYmVsOl8uZGF0ZUxhYmVsLHZhbDpfLnJhdGluZ30pKSx4PShfLEEpPT5BPT09MT9oK2cvMjpBPT09Mj9oK2cqKF89PT0wP2VDOnRDKTpoK18vKEEtMSkqZyxTPWYubWFwKChfLEEpPT4oe3g6eChBLGYubGVuZ3RoKSx5OncrbS0oXy52YWwrMikvNCptLHZhbDpfLnZhbCxsYWJlbDpfLmxhYmVsLGRhdGVMYWJlbDpfLmRhdGVMYWJlbH0pKTtuLmN1cnJlbnQ9UztsZXQgTj1TLm1hcChfPT4oey4uLl8seTp3K20tKF8udmFsKzIpLzQqbSpNYXRoLm1pbihyKlBfLDEpfSkpLEQ9KF8sQSk9Pnt1LmJlZ2luUGF0aCgpLHUubW92ZVRvKF9bMF0ueCxfWzBdLnkpO2ZvcihsZXQgUD0wO1A8Xy5sZW5ndGgtMTtQKyspe2xldCBJPV9bUCsxXS54LV9bUF0ueCxMPV9bUF0ueCtJKmZjLFU9X1tQKzFdLngtSSpmYzt1LmJlemllckN1cnZlVG8oTCxfW1BdLnksVSxfW1ArMV0ueSxfW1ArMV0ueCxfW1ArMV0ueSl9QSYmKHUubGluZVRvKF9bXy5sZW5ndGgtMV0ueCx2KSx1LmxpbmVUbyhfWzBdLngsdiksdS5jbG9zZVBhdGgoKSl9O2lmKE4ubGVuZ3RoPj0yKXtsZXQgXz11LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsdywwLHYpO2ZvcihsZXRbQSxQXW9mIExfKV8uYWRkQ29sb3JTdG9wKEEsUCk7RChOLCEwKSx1LmZpbGxTdHlsZT1fLHUuZmlsbCgpLHUubGluZVdpZHRoPXpfLHUubGluZUNhcD0icm91bmQiO2ZvcihsZXQgQT0wO0E8Ti5sZW5ndGgtMTtBKyspe2xldCBQPU5bQV0sST1OW0ErMV0sTD11LmNyZWF0ZUxpbmVhckdyYWRpZW50KFAueCxQLnksSS54LEkueSk7TC5hZGRDb2xvclN0b3AoMCxDYShQLnZhbCkpLEwuYWRkQ29sb3JTdG9wKDEsQ2EoSS52YWwpKSx1LnN0cm9rZVN0eWxlPUwsdS5iZWdpblBhdGgoKTtsZXQgVT1JLngtUC54LEY9UC54K1UqZmMsSD1JLngtVSpmYzt1Lm1vdmVUbyhQLngsUC55KSx1LmJlemllckN1cnZlVG8oRixQLnksSCxJLnksSS54LEkueSksdS5zdHJva2UoKX19aWYocj5xMCYmTi5mb3JFYWNoKF89PntsZXQgQT1NYXRoLm1pbigoci1xMCkqV18sMSksUD1DYShfLnZhbCk7dS5zaGFkb3dDb2xvcj1QLHUuc2hhZG93Qmx1cj0kXyx1LmJlZ2luUGF0aCgpLHUuYXJjKF8ueCxfLnksRl8sMCxNYXRoLlBJKjIpLHUuZmlsbFN0eWxlPVAsdS5nbG9iYWxBbHBoYT1BLHUuZmlsbCgpLHUuc2hhZG93Qmx1cj0wLHUuYmVnaW5QYXRoKCksdS5hcmMoXy54LF8ueSxVXywwLE1hdGguUEkqMiksdS5maWxsU3R5bGU9ZC5iZ0NhcmQsdS5maWxsKCksdS5nbG9iYWxBbHBoYT0xLHUuZmlsbFN0eWxlPWQudGV4dFNlY29uZGFyeSx1Lmdsb2JhbEFscGhhPUEqQl8sdS5mb250PSJib2xkIDEwcHggLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZiIsdS50ZXh0QWxpZ249ImNlbnRlciIsdS50ZXh0QmFzZWxpbmU9ImFscGhhYmV0aWMiLHUuZmlsbFRleHQoXy5sYWJlbCxfLngsditIXyksdS5mb250PSI5cHggLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZiIsdS5maWxsVGV4dChfLmRhdGVMYWJlbCxfLngsditHXyksdS5nbG9iYWxBbHBoYT0xLHI+UTAmJih1Lmdsb2JhbEFscGhhPU1hdGgubWluKChyLVEwKSpWXywxKSx1LmZvbnQ9IjExcHggc2VyaWYiLHUuZmlsbFRleHQodGIoXy52YWwpLF8ueCxfLnkral8pLHUuZ2xvYmFsQWxwaGE9MSl9KSx1LmZpbGxTdHlsZT1kLnRleHRNdXRlZCx1LmZvbnQ9ImJvbGQgOHB4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLHUudGV4dEFsaWduPSJjZW50ZXIiLHUudGV4dEJhc2VsaW5lPSJhbHBoYWJldGljIix1LmZpbGxUZXh0KCJNIE8gTyBEICAgVyBBIFYgRSIsQ2UvMixLXyksZi5sZW5ndGg+MCl7bGV0IF89KGYucmVkdWNlKChQLEkpPT5QK0kudmFsLDApL2YubGVuZ3RoKS50b0ZpeGVkKDEpLEE9Q2EoTWF0aC5yb3VuZChOdW1iZXIoXykpKTt1LmZpbGxTdHlsZT15ZihBLCIyMiIpLHUuYmVnaW5QYXRoKCksdS5yb3VuZFJlY3QoQ2UtWV8sNCxxXyxRXyxKXyksdS5maWxsKCksdS5maWxsU3R5bGU9QSx1LmZvbnQ9ImJvbGQgOHB4IC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWYiLHUudGV4dEFsaWduPSJjZW50ZXIiLHUudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHUuZmlsbFRleHQoYEF2ZyAke199YCxDZS1YXyxaXyl9fSxbaSxyXSksKDAsYmUuanN4KSgiZGl2Iix7c3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsbGluZUhlaWdodDowfSxjaGlsZHJlbjooMCxiZS5qc3gpKCJjYW52YXMiLHtyZWY6dCxjbGFzc05hbWU6Im1vb2Qtdml6LWNhbnZhcyIsb25Nb3VzZU1vdmU6Yz0+e2xldCB1PXQuY3VycmVudDtpZighdSlyZXR1cm47bGV0IHA9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPShjLmNsaWVudFgtcC5sZWZ0KSooQ2UvcC53aWR0aCksaD0oYy5jbGllbnRZLXAudG9wKSooQ2UvcC5oZWlnaHQpLHk9bi5jdXJyZW50O2lmKCF5fHwheS5sZW5ndGgpe2EuaGlkZSgpO3JldHVybn1sZXQgdz0tMSxiPW5DO2ZvcihsZXQgZz0wO2c8eS5sZW5ndGg7ZysrKXtsZXQgbT1kLXlbZ10ueCx2PWgteVtnXS55LGY9TWF0aC5zcXJ0KG0qbSt2KnYpO2Y8YiYmKGI9Zix3PWcpfWlmKHc+PTApe2xldCBnPXlbd10sbT1lW3ddLHY9cC5sZWZ0K2cueC9DZSpwLndpZHRoLGY9cC50b3ArZy55L0NlKnAuaGVpZ2h0O2Euc2hvdyhuYih7ZnVsbERhdGU6bS5mdWxsRGF0ZSxlbnRyaWVzOm0uZW50cmllc3x8W21dfSksdixmKX1lbHNlIGEuaGlkZSgpfSxvbk1vdXNlTGVhdmU6KCk9PmEuaGlkZSgpfSl9KX1mdW5jdGlvbiBmQyhlKXtsZXQgdD1bIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG49Wy4uLmV8fFtdXS5zb3J0KChhLGkpPT4oYS50aW1lc3RhbXB8fDApLShpLnRpbWVzdGFtcHx8MCkpO2lmKG4ubGVuZ3RoKWNvbnNvbGUubG9nKCJGb3VuZCBleGlzdGluZyByYXRpbmdzIik7ZWxzZSByZXR1cm4gY29uc29sZS5sb2coIk5vIHJhdGluZ3MgZm91bmQsIHJldHVybmluZyBbXSIpLFtdO2xldCByPW5ldyBNYXA7Zm9yKGxldCBhIG9mIG4pe2xldCBpPWEudGltZXN0YW1wP25ldyBEYXRlKGEudGltZXN0YW1wKjFlMyk6bmV3IERhdGUscz1gJHtpLmdldEZ1bGxZZWFyKCl9LSR7aS5nZXRNb250aCgpKzF9LSR7aS5nZXREYXRlKCl9YDtyLmhhcyhzKXx8ci5zZXQocyx7ZGF5TGFiZWw6dFtpLmdldERheSgpXSxkYXRlTGFiZWw6YCR7aS5nZXRNb250aCgpKzF9LyR7aS5nZXREYXRlKCl9YCxkYXRlS2V5OnMsZnVsbERhdGU6aS50b0xvY2FsZURhdGVTdHJpbmcoImVuLVVTIix7d2Vla2RheToibG9uZyIseWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyJ9KSxlbnRyaWVzOltdLHJhdGluZ1N1bTowLHJhdGluZ0NvdW50OjB9KTtsZXQgbD1yLmdldChzKTtsLmVudHJpZXMucHVzaCh7cmF0aW5nOmEucmF0aW5nLHRpbWU6KGEudGltZXN0YW1wP25ldyBEYXRlKGEudGltZXN0YW1wKjFlMyk6bmV3IERhdGUpLnRvTG9jYWxlVGltZVN0cmluZygiZW4tVVMiLHtob3VyOiJudW1lcmljIixtaW51dGU6IjItZGlnaXQifSksbm90ZXM6YS5ub3Rlc3x8YS5ub3RlfHxudWxsLHRpbWVzdGFtcDphLnRpbWVzdGFtcH0pLGwucmF0aW5nU3VtKz1hLnJhdGluZyxsLnJhdGluZ0NvdW50Kz0xfXJldHVyblsuLi5yLnZhbHVlcygpXS5zbGljZSgtSjApLm1hcChhPT4oe3JhdGluZzphLnJhdGluZ1N1bS9hLnJhdGluZ0NvdW50LGRheUxhYmVsOmEuZGF5TGFiZWwsZGF0ZUxhYmVsOmEuZGF0ZUxhYmVsLGRhdGVLZXk6YS5kYXRlS2V5LGZ1bGxEYXRlOmEuZnVsbERhdGUsdGltZTphLmVudHJpZXNbYS5lbnRyaWVzLmxlbmd0aC0xXS50aW1lLHRpbWVzdGFtcDphLmVudHJpZXNbYS5lbnRyaWVzLmxlbmd0aC0xXS50aW1lc3RhbXAsbm90ZXM6YS5lbnRyaWVzW2EuZW50cmllcy5sZW5ndGgtMV0ubm90ZXMsZW50cmllczphLmVudHJpZXN9KSl9ZnVuY3Rpb24gaEMoe21vb2RSYXRpbmdzOmUsYXZlcmFnZU1vb2Q6dCx2aXN1YWxpemF0aW9uTW9kZTpuLHZpc3VhbGl6YXRpb25LZXk6cixvbkNvbmZpZ3VyZTpvfSl7aWYoIShlfHxbXSkubGVuZ3RoKXJldHVybigwLGJlLmpzeCkoImRpdiIse2NsYXNzTmFtZToibW9vZC1zdW1tYXJ5IixjaGlsZHJlbjooMCxiZS5qc3gpKCJzcGFuIix7Y2hpbGRyZW46IkF2ZyBtb29kICg3ZCk6ICIrdH0pfSk7bGV0IGE9ZkMoZSk7cmV0dXJuKDAsYmUuanN4cykoImRpdiIse2NsYXNzTmFtZToibW9vZC12aXotc2VjdGlvbiIsY2hpbGRyZW46WygwLGJlLmpzeCkoImRpdiIse2NsYXNzTmFtZToibW9vZC12aXotY2FudmFzLXdyYXAiLGNoaWxkcmVuOm49PT0id2F2ZSI/KDAsYmUuanN4KShwQyx7bW9vZERhdGE6YX0scik6KDAsYmUuanN4KShkQyx7bW9vZERhdGE6YX0scil9KSwoMCxiZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6Im1vb2Qtdml6LWNvbmZpZ3VyZS1saW5rIixvbkNsaWNrOm8sY2hpbGRyZW46Ilx1MjY5OSBDb25maWd1cmUifSldfSl9ZnVuY3Rpb24gdmYoe2FwcDplLG1vb2RSYXRpbmdzOnQsb25Nb29kUmVjb3JkZWQ6bn0pe2xldFtyLG9dPSgwLEplLnVzZVN0YXRlKShudWxsKSxbYSxpXT0oMCxKZS51c2VTdGF0ZSkoIiIpLFtzLGxdPSgwLEplLnVzZVN0YXRlKSghMSksW2MsdV09KDAsSmUudXNlU3RhdGUpKCExKSxkPU5sKEhlKCksIm1vb2QiKVswXXx8InJpbmciLFtoLHldPSgwLEplLnVzZVN0YXRlKShkKSxbdyxiXT0oMCxKZS51c2VTdGF0ZSkoZCksW2csbV09KDAsSmUudXNlU3RhdGUpKDApLFt2LGZdPSgwLEplLnVzZVN0YXRlKSghMSk7KDAsSmUudXNlRWZmZWN0KSgoKT0+e2lmKCFjKXJldHVybjtFKCJTZXR0aW5nIHRpbWVvdXQgdG8gcmVzZXQgbW9vZCBjb21wb25lbnQgYWZ0ZXIgc3VibWlzc2lvbiIpO2xldCBJPXNldFRpbWVvdXQoKCk9Pnt1KCExKSxvKG51bGwpLGkoIiIpfSx1Xyk7cmV0dXJuKCk9PmNsZWFyVGltZW91dChJKX0sW2NdKTtsZXQgeD0oKT0+e2IoaCksZighMCl9LFM9KCk9Pnt5KHcpLG0oST0+SSsxKSxmKCExKSxlLnNldFNldHRpbmcoaGEoIm1vb2QiKSxKU09OLnN0cmluZ2lmeShbd10pKX0sTj0oKT0+e2IoaCksZighMSl9LEQ9KCk9PntvKG51bGwpLGkoIiIpfSx7YXZlcmFnZU1vb2Q6X309dUModCksQT0oMCxiZS5qc3gpKGhDLHttb29kUmF0aW5nczp0LGF2ZXJhZ2VNb29kOl8sdmlzdWFsaXphdGlvbk1vZGU6aCx2aXN1YWxpemF0aW9uS2V5Omcsb25Db25maWd1cmU6eH0pLFA9dj8oMCxiZS5qc3gpKEFvLHt0aXRsZToiTW9vZCBWaXN1YWxpemF0aW9uIixvblN1Ym1pdDpTLG9uQ2FuY2VsOk4sc3VibWl0TGFiZWw6IkFwcGx5IixjaGlsZHJlbjooMCxiZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQiLGNoaWxkcmVuOlsoMCxiZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6ImNvbmZpZy1maWVsZC1sYWJlbCIsY2hpbGRyZW46IkRpc3BsYXkgc3R5bGUifSksW1sicmluZyIsIlJpbmciXSxbIndhdmUiLCJXYXZlIl1dLm1hcCgoW0ksTF0pPT4oMCxiZS5qc3hzKSgibGFiZWwiLHtjbGFzc05hbWU6Im1vb2Qtdml6LWNvbmZpZy1vcHRpb24iLGNoaWxkcmVuOlsoMCxiZS5qc3gpKCJpbnB1dCIse3R5cGU6InJhZGlvIixuYW1lOiJtb29kLXZpei1tb2RlIix2YWx1ZTpJLGNoZWNrZWQ6dz09PUksb25DaGFuZ2U6KCk9PmIoSSl9KSxMXX0sSSkpXX0pfSk6bnVsbDtyZXR1cm4gYz8oMCxiZS5qc3hzKShjZSx7dGl0bGU6bGUoIm1vb2QiKSxpY29uOiJcdXsxRjNBRH0iLHdpZGdldElkOiJtb29kIixjaGlsZHJlbjpbUCwoMCxiZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJtb29kLWNvbmZpcm1hdGlvbiIsY2hpbGRyZW46WygwLGJlLmpzeCkoImRpdiIse2NsYXNzTmFtZToibW9vZC1jb25maXJtYXRpb24taWNvbiIsY2hpbGRyZW46ci5lbW9qaX0pLCgwLGJlLmpzeCkoInAiLHtjbGFzc05hbWU6Im1vb2QtY29uZmlybWF0aW9uLXRleHQiLGNoaWxkcmVuOiJNb29kIHJhdGluZyByZWNvcmRlZCJ9KV19KSxBXX0pOigwLGJlLmpzeHMpKGNlLHt0aXRsZTpsZSgibW9vZCIpLGljb246Ilx1ezFGM0FEfSIsd2lkZ2V0SWQ6Im1vb2QiLGNoaWxkcmVuOltQLCgwLGJlLmpzeCkoImRpdiIse2NsYXNzTmFtZToibW9vZC1zZWxlY3RvciIsY2hpbGRyZW46aGMubWFwKEk9PigwLGJlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToibW9vZC1idG4iKyhyPy52YWx1ZT09PUkudmFsdWU/IiBtb29kLWJ0bi0tc2VsZWN0ZWQiOiIiKSx0aXRsZTpJLmxhYmVsLG9uQ2xpY2s6KCk9PmxDKEkscyxjLG8pLGNoaWxkcmVuOigwLGJlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6Im1vb2QtZW1vamkiLGNoaWxkcmVuOkkuZW1vaml9KX0sSS52YWx1ZSkpfSksciE9PW51bGwmJigwLGJlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6Im1vb2QtZGV0YWlscyIsY2hpbGRyZW46WygwLGJlLmpzeCkoImxhYmVsIix7Y2xhc3NOYW1lOiJtb29kLWRldGFpbHMtbGFiZWwiLGNoaWxkcmVuOiJNb3JlIGRldGFpbHMgKG9wdGlvbmFsKSJ9KSwoMCxiZS5qc3gpKCJ0ZXh0YXJlYSIse2NsYXNzTmFtZToibW9vZC1kZXRhaWxzLXRleHRhcmVhIix2YWx1ZTphLG9uQ2hhbmdlOkk9PmkoSS50YXJnZXQudmFsdWUpLG9uS2V5RG93bjpJPT5jQyhlLEkscixhLGwsdSxuKSxwbGFjZWhvbGRlcjoiV2hhdCdzIG9uIHlvdXIgbWluZD8iLHJvd3M6ZF99KV19KSxyIT09bnVsbCYmKDAsYmUuanN4cykoImRpdiIse2NsYXNzTmFtZToibW9vZC1zdWJtaXQtcm93IixjaGlsZHJlbjpbKDAsYmUuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJtb29kLWNhbmNlbC1idG4iLG9uQ2xpY2s6RCxkaXNhYmxlZDpzLGNoaWxkcmVuOiJDYW5jZWwifSksKDAsYmUuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJtb29kLXN1Ym1pdC1idG4iLG9uQ2xpY2s6KCk9PnJiKGUscixhLGwsdSxuKSxkaXNhYmxlZDpzLGNoaWxkcmVuOnM/IlJlY29yZGluZy4uLiI6IlN1Ym1pdCJ9KV19KSxyPT09bnVsbCYmQV19KX12YXIgTXQ9eih5ZSgpKTt2YXIgSWU9eihyZSgpKSxtYz0icGVhay1ob3VycyI7ZnVuY3Rpb24gbUMoZSl7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDoyNH0sKHQsbik9PkVhKG4sZSkpfWZ1bmN0aW9uIGFiKGUpe3JldHVybiBlP2UgaW5zdGFuY2VvZiBEYXRlP2U6dHlwZW9mIGU9PSJudW1iZXIiP25ldyBEYXRlKGU8MWUxMj9lKjFlMzplKTpuZXcgRGF0ZShlKTpudWxsfWZ1bmN0aW9uIGdDKGUpe2xldCB0PW50KGUpLG49dC5nZXRGdWxsWWVhcigpLHI9dC5nZXRNb250aCgpLG89bmV3IERhdGUobixyLDEsMCwwLDAsMCksYT1uZXcgRGF0ZShuLHIrMSwxLDAsMCwwLDApO3JldHVybntmcm9tOk1hdGguZmxvb3Ioby5nZXRUaW1lKCkvMWUzKSx0bzpNYXRoLmZsb29yKGEuZ2V0VGltZSgpLzFlMyksbW9udGhLZXk6YCR7bn0tJHtTdHJpbmcocisxKS5wYWRTdGFydCgyLCIwIil9YH19ZnVuY3Rpb24geUMoZSl7bGV0IHQ9bmV3IEFycmF5KDI0KS5maWxsKDApLG49bmV3IEFycmF5KDI0KS5maWxsKDApLHI9MDtmb3IobGV0IGkgb2YgZSl7bGV0IHM9aS52aWN0b3J5VmFsdWV8fDEsbD1hYihpLmNyZWF0ZWRBdHx8aS5zdGFydEF0KTtsJiYhaXNOYU4obCkmJih0W2wuZ2V0SG91cnMoKV0rPXMscisrKTtsZXQgYz1hYihpLmNvbXBsZXRlZEF0KTtjJiYhaXNOYU4oYykmJihuW2MuZ2V0SG91cnMoKV0rPXMpfWxldCBvPXQuaW5kZXhPZihNYXRoLm1heCguLi50KSksYT1uLmluZGV4T2YoTWF0aC5tYXgoLi4ubikpO3JldHVybntjb21wbGV0ZWRCeUhvdXI6bixjcmVhdGVkQnlIb3VyOnQscGVha0NvbXBsZXRlSG91ckluZGV4OmEscGVha0NyZWF0ZUhvdXJJbmRleDpvLHRvdGFsVGFza3M6cn19ZnVuY3Rpb24gdkMoZSl7bGV0IHQ9Z2V0Q29tcHV0ZWRTdHlsZShlKTtyZXR1cm57YmFyQ3JlYXRlZDp0LmdldFByb3BlcnR5VmFsdWUoIi0tZGFzaGJvYXJkLWNvbG9yLWJsdWUiKS50cmltKCl8fCIjNWI3YmJmIixiYXJDb21wbGV0ZWQ6dC5nZXRQcm9wZXJ0eVZhbHVlKCItLWRhc2hib2FyZC1jb2xvci1hY2NlbnQiKS50cmltKCl8fCIjZTg4NTNkIixheGlzVGV4dDp0LmdldFByb3BlcnR5VmFsdWUoIi0tZGFzaGJvYXJkLWNvbG9yLXRleHQtc2Vjb25kYXJ5IikudHJpbSgpfHwiIzdhODY5OSIsZ3JpZExpbmU6dC5nZXRQcm9wZXJ0eVZhbHVlKCItLWRhc2hib2FyZC1jb2xvci1ib3JkZXIiKS50cmltKCl8fCIjZDhkZGU2In19ZnVuY3Rpb24gaWIoZSx0LG4scil7bGV0IG89ZS5nZXRDb250ZXh0KCIyZCIpLGE9d2luZG93LmRldmljZVBpeGVsUmF0aW98fDEsaT1lLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1pLndpZHRoLGw9aS5oZWlnaHQ7aWYoczw9MHx8bDw9MClyZXR1cm47ZS53aWR0aD1zKmEsZS5oZWlnaHQ9bCphLGUuc3R5bGUud2lkdGg9YCR7c31weGAsZS5zdHlsZS5oZWlnaHQ9YCR7bH1weGAsby5zY2FsZShhLGEpO2xldCBjPXZDKGUpLHU9NDgscD0xMixkPTEyLGg9NDAseT1zLXUtcCx3PWwtZC1oLGI9TWF0aC5tYXgoLi4udCwuLi5uLDEpLGc9TWF0aC5jZWlsKGIvMTApKjEwfHwxMDtvLmNsZWFyUmVjdCgwLDAscyxsKTtsZXQgbT01O28uZm9udD0iMTFweCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHN5c3RlbS11aSwgc2Fucy1zZXJpZiIsby50ZXh0QWxpZ249InJpZ2h0IixvLnRleHRCYXNlbGluZT0ibWlkZGxlIjtmb3IobGV0IEQ9MDtEPD1tO0QrKyl7bGV0IF89TWF0aC5yb3VuZChnL20qRCksQT1kK3ctdypEL207by5maWxsU3R5bGU9Yy5heGlzVGV4dCxvLmZpbGxUZXh0KGAke199YCx1LTgsQSksRD4wJiYoby5zdHJva2VTdHlsZT1jLmdyaWRMaW5lLG8uZ2xvYmFsQWxwaGE9LjQsby5saW5lV2lkdGg9LjUsby5iZWdpblBhdGgoKSxvLm1vdmVUbyh1LEEpLG8ubGluZVRvKHUreSxBKSxvLnN0cm9rZSgpLG8uZ2xvYmFsQWxwaGE9MSl9bGV0IHY9MjQsZj15L3YseD1mKi4zMixTPWYqLjA0O2ZvcihsZXQgRD0wO0Q8djtEKyspe2xldCBfPXUrRCpmKyhmLXgqMi1TKS8yLEE9dFtEXS9nKncsUD1uW0RdL2cqdztvLmZpbGxTdHlsZT1jLmJhckNyZWF0ZWQsc2IobyxfLGQrdy1BLHgsQSwyKSxvLmZpbGxTdHlsZT1jLmJhckNvbXBsZXRlZCxzYihvLF8reCtTLGQrdy1QLHgsUCwyKX1vLmZpbGxTdHlsZT1jLmF4aXNUZXh0LG8uZm9udD0iMTBweCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHN5c3RlbS11aSwgc2Fucy1zZXJpZiIsby50ZXh0QWxpZ249ImNlbnRlciIsby50ZXh0QmFzZWxpbmU9InRvcCI7bGV0IE49eTwzMDA/NDoyO2ZvcihsZXQgRD0wO0Q8djtEKz1OKXtsZXQgXz11K0QqZitmLzI7by5maWxsVGV4dChyW0RdLF8sZCt3KzgpfX1mdW5jdGlvbiBzYihlLHQsbixyLG8sYSl7bzwxfHwoYT1NYXRoLm1pbihhLG8vMixyLzIpLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8odCthLG4pLGUubGluZVRvKHQrci1hLG4pLGUuYXJjVG8odCtyLG4sdCtyLG4rYSxhKSxlLmxpbmVUbyh0K3IsbitvKSxlLmxpbmVUbyh0LG4rbyksZS5saW5lVG8odCxuK2EpLGUuYXJjVG8odCxuLHQrYSxuLGEpLGUuY2xvc2VQYXRoKCksZS5maWxsKCkpfWZ1bmN0aW9uIHdDKGUsdCl7bGV0IG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXQuY2xpZW50WC1uLmxlZnQsbz1uLndpZHRoLGE9NDgscz1vLWEtMTIsbD1yLWE7cmV0dXJuIGw8MHx8bD5zPy0xOk1hdGguZmxvb3IobC9zKjI0KX1mdW5jdGlvbiB3Zih7bGFiZWw6ZSx2YWx1ZTp0fSl7cmV0dXJuKDAsSWUuanN4cykoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy1tZXRyaWMtY2FyZCIsY2hpbGRyZW46WygwLEllLmpzeCkoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy1tZXRyaWMtbGFiZWwiLGNoaWxkcmVuOmV9KSwoMCxJZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtbWV0cmljLXZhbHVlIixjaGlsZHJlbjp0fSldfSl9ZnVuY3Rpb24gbGIoe21vZGlmaWVyQ2xhc3M6ZSxsYWJlbDp0fSl7cmV0dXJuKDAsSWUuanN4cykoInNwYW4iLHtjbGFzc05hbWU6InBlYWstaG91cnMtbGVnZW5kLWl0ZW0iLGNoaWxkcmVuOlsoMCxJZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOmBwZWFrLWhvdXJzLWxlZ2VuZC1zd2F0Y2ggJHtlfWB9KSx0XX0pfWZ1bmN0aW9uIGJmKHthcHA6ZSxjdXJyZW50RGF0ZTp0LHNlbGVjdGVkRGF0ZTpuLHRpbWVGb3JtYXQ6cn0pe2xldCBvPSgwLE10LnVzZVJlZikobnVsbCksW2EsaV09KDAsTXQudXNlU3RhdGUpKG51bGwpLFtzLGxdPSgwLE10LnVzZVN0YXRlKShbXSksYz0oMCxNdC51c2VSZWYpKG51bGwpLHU9bnx8dDsoMCxNdC51c2VFZmZlY3QpKCgpPT57aWYoIXV8fCFlKXJldHVybjtsZXR7ZnJvbTpOLHRvOkQsbW9udGhLZXk6X309Z0ModSk7aWYoYy5jdXJyZW50PT09XylyZXR1cm47Yy5jdXJyZW50PV87bGV0IEE9ITE7cmV0dXJuIGUuZ2V0Q29tcGxldGVkVGFza3MoTixEKS50aGVuKFA9PntBfHxsKEFycmF5LmlzQXJyYXkoUCk/UDpbXSl9KS5jYXRjaChQPT57RSgiW3BlYWstaG91cnNdIGZhaWxlZCB0byBmZXRjaCBtb250aCB0YXNrcyIsUCksQXx8bChbXSl9KSwoKT0+e0E9ITB9fSxbZSx1XSk7bGV0IHA9bUMocikse2NvbXBsZXRlZEJ5SG91cjpkLGNyZWF0ZWRCeUhvdXI6aCxwZWFrQ29tcGxldGVIb3VySW5kZXg6eSxwZWFrQ3JlYXRlSG91ckluZGV4OncsdG90YWxUYXNrczpifT0oMCxNdC51c2VNZW1vKSgoKT0+eUMocyksW3NdKSxnPXBbd10sbT1wW3ldLHttb250aFN1YnRpdGxlOnYsZGF0ZVJhbmdlOmZ9PSgwLE10LnVzZU1lbW8pKCgpPT57aWYoIXUpcmV0dXJue21vbnRoU3VidGl0bGU6bnVsbCxkYXRlUmFuZ2U6bnVsbH07bGV0IE49bnQodSksRD1OLmdldEZ1bGxZZWFyKCksXz1OLmdldE1vbnRoKCk7cmV0dXJue21vbnRoU3VidGl0bGU6Ti50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHttb250aDoibG9uZyIseWVhcjoibnVtZXJpYyJ9KSxkYXRlUmFuZ2U6e3N0YXJ0Om5ldyBEYXRlKEQsXywxKSxlbmQ6bmV3IERhdGUoRCxfKzEsMCl9fX0sW3VdKTsoMCxNdC51c2VFZmZlY3QpKCgpPT57aWYoIW8uY3VycmVudClyZXR1cm47aWIoby5jdXJyZW50LGgsZCxwKTtsZXQgTj0oKT0+e28uY3VycmVudCYmaWIoby5jdXJyZW50LGgsZCxwKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLE4pLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixOKX0sW2QsaCxwXSk7bGV0IHg9KDAsTXQudXNlQ2FsbGJhY2spKE49PntsZXQgRD13QyhvLmN1cnJlbnQsTik7aWYoRDwwfHxEPjIzKXtpKG51bGwpO3JldHVybn1sZXQgXz1vLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aSh7eDpOLmNsaWVudFgtXy5sZWZ0LHk6Ti5jbGllbnRZLV8udG9wLTYwLGhvdXI6cFtEXSxjcmVhdGVkOmhbRF0sY29tcGxldGVkOmRbRF19KX0sW2gsZF0pLFM9KDAsTXQudXNlQ2FsbGJhY2spKCgpPT5pKG51bGwpLFtdKTtyZXR1cm4gYj09PTA/KDAsSWUuanN4KShjZSx7dGl0bGU6bGUobWMpLGljb246Ilx1MjNGMCIsd2lkZ2V0SWQ6bWMsc3VidGl0bGU6dixjaGlsZHJlbjooMCxJZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtZW1wdHkiLGNoaWxkcmVuOigwLEllLmpzeCkoInAiLHtjaGlsZHJlbjoiTm8gY29tcGxldGVkIHRhc2sgZGF0YSBhdmFpbGFibGUgeWV0LiJ9KX0pfSk6KDAsSWUuanN4cykoY2Use3RpdGxlOmxlKG1jKSxpY29uOiJcdTIzRjAiLHdpZGdldElkOm1jLHN1YnRpdGxlOnYsY2hpbGRyZW46WygwLEllLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtbWV0cmljcy1ncmlkIixjaGlsZHJlbjpbKDAsSWUuanN4KSh3Zix7bGFiZWw6IlRhc2tzIGFuYWx5emVkIix2YWx1ZTpifSksKDAsSWUuanN4KSh3Zix7bGFiZWw6IlBlYWsgY3JlYXRlIGhvdXIiLHZhbHVlOmd9KSwoMCxJZS5qc3gpKHdmLHtsYWJlbDoiUGVhayBjb21wbGV0ZSBob3VyIix2YWx1ZTptfSldfSksKDAsSWUuanN4cykoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy1sZWdlbmQiLGNoaWxkcmVuOlsoMCxJZS5qc3gpKGxiLHttb2RpZmllckNsYXNzOiJwZWFrLWhvdXJzLWxlZ2VuZC1zd2F0Y2gtLWNyZWF0ZWQiLGxhYmVsOiJDcmVhdGVkIHZhbHVlIn0pLCgwLEllLmpzeCkobGIse21vZGlmaWVyQ2xhc3M6InBlYWstaG91cnMtbGVnZW5kLXN3YXRjaC0tY29tcGxldGVkIixsYWJlbDoiQ29tcGxldGVkIHZhbHVlIn0pXX0pLCgwLEllLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtY2hhcnQtY29udGFpbmVyIixjaGlsZHJlbjpbKDAsSWUuanN4KSgiY2FudmFzIix7cmVmOm8sY2xhc3NOYW1lOiJwZWFrLWhvdXJzLWNhbnZhcyIsb25Nb3VzZU1vdmU6eCxvbk1vdXNlTGVhdmU6U30pLGEmJigwLEllLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtdG9vbHRpcCIsc3R5bGU6e2xlZnQ6YS54LHRvcDphLnksdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIn0sY2hpbGRyZW46WygwLEllLmpzeCkoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy10b29sdGlwLWhlYWRlciIsY2hpbGRyZW46YS5ob3VyfSksKDAsSWUuanN4cykoImRpdiIse2NsYXNzTmFtZToicGVhay1ob3Vycy10b29sdGlwLXJvdyIsY2hpbGRyZW46WygwLEllLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InBlYWstaG91cnMtdG9vbHRpcC1sYWJlbCBwZWFrLWhvdXJzLXRvb2x0aXAtbGFiZWwtLWNyZWF0ZWQiLGNoaWxkcmVuOiJDcmVhdGVkOiJ9KSxgICR7YS5jcmVhdGVkfSBwdHNgXX0pLCgwLEllLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtdG9vbHRpcC1yb3ciLGNoaWxkcmVuOlsoMCxJZS5qc3gpKCJzcGFuIix7Y2xhc3NOYW1lOiJwZWFrLWhvdXJzLXRvb2x0aXAtbGFiZWwgcGVhay1ob3Vycy10b29sdGlwLWxhYmVsLS1jb21wbGV0ZWQiLGNoaWxkcmVuOiJDb21wbGV0ZWQ6In0pLGAgJHthLmNvbXBsZXRlZH0gcHRzYF19KV19KV19KSxmJiYoMCxJZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6InBlYWstaG91cnMtZm9vdGVyIixjaGlsZHJlbjp2fSldfSl9dmFyIFJvPXooeWUoKSk7dmFyIGJDPVt7dGV4dDoiVGhlIHNlY3JldCBvZiBnZXR0aW5nIGFoZWFkIGlzIGdldHRpbmcgc3RhcnRlZC4iLGF1dGhvcjoiTWFyayBUd2FpbiJ9LHt0ZXh0OiJZb3UgZG9uJ3QgaGF2ZSB0byBiZSBncmVhdCB0byBzdGFydCwgYnV0IHlvdSBoYXZlIHRvIHN0YXJ0IHRvIGJlIGdyZWF0LiIsYXV0aG9yOiJaaWcgWmlnbGFyIn0se3RleHQ6IkFjdGlvbiBpcyB0aGUgZm91bmRhdGlvbmFsIGtleSB0byBhbGwgc3VjY2Vzcy4iLGF1dGhvcjoiUGFibG8gUGljYXNzbyJ9LHt0ZXh0OiJEb25lIGlzIGJldHRlciB0aGFuIHBlcmZlY3QuIixhdXRob3I6IlNoZXJ5bCBTYW5kYmVyZyJ9LHt0ZXh0OiJBbWF0ZXVycyBzaXQgYW5kIHdhaXQgZm9yIGluc3BpcmF0aW9uOyB0aGUgcmVzdCBvZiB1cyBqdXN0IGdldCB1cCBhbmQgZ28gdG8gd29yay4iLGF1dGhvcjoiU3RlcGhlbiBLaW5nIn0se3RleHQ6IlRoZSB3YXkgdG8gZ2V0IHN0YXJ0ZWQgaXMgdG8gcXVpdCB0YWxraW5nIGFuZCBiZWdpbiBkb2luZy4iLGF1dGhvcjoiV2FsdCBEaXNuZXkifSx7dGV4dDoiRm9jdXMgb24gYmVpbmcgcHJvZHVjdGl2ZSBpbnN0ZWFkIG9mIGJ1c3kuIixhdXRob3I6IlRpbSBGZXJyaXNzIn0se3RleHQ6Ikl0J3Mgbm90IGFib3V0IGhhdmluZyB0aW1lLiBJdCdzIGFib3V0IG1ha2luZyB0aW1lLiIsYXV0aG9yOiIifSx7dGV4dDoiV29yayBleHBhbmRzIHRvIGZpbGwgdGhlIHRpbWUgYXZhaWxhYmxlIGZvciBpdHMgY29tcGxldGlvbi4iLGF1dGhvcjoiQ3lyaWwgTm9ydGhjb3RlIFBhcmtpbnNvbiJ9LHt0ZXh0OiJTdG9wIHdhaXRpbmcgZm9yIHRoZSByaWdodCB0aW1lLiBUaGUgdGltZSB3aWxsIG5ldmVyIGJlIGp1c3QgcmlnaHQuIixhdXRob3I6Ik5hcG9sZW9uIEhpbGwifSx7dGV4dDoiTW90aXZhdGlvbiBpcyB3aGF0IGdldHMgeW91IHN0YXJ0ZWQuIEhhYml0IGlzIHdoYXQga2VlcHMgeW91IGdvaW5nLiIsYXV0aG9yOiJKaW0gUnl1biJ9LHt0ZXh0OiJJZiB5b3Ugc3BlbmQgdG9vIG11Y2ggdGltZSB0aGlua2luZyBhYm91dCBhIHRoaW5nLCB5b3UnbGwgbmV2ZXIgZ2V0IGl0IGRvbmUuIixhdXRob3I6IkJydWNlIExlZSJ9LHt0ZXh0OiJUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9yZGluYXJ5IGFuZCBleHRyYW9yZGluYXJ5IGlzIHRoYXQgbGl0dGxlICdleHRyYScuIixhdXRob3I6IiJ9LHt0ZXh0OiJFZmZpY2llbmN5IGlzIGRvaW5nIHRoaW5ncyByaWdodC4gRWZmZWN0aXZlbmVzcyBpcyBkb2luZyB0aGUgcmlnaHQgdGhpbmdzLiIsYXV0aG9yOiJQZXRlciBEcnVja2VyIn0se3RleHQ6IllvdSBhcmUgbmV2ZXIgdG9vIG9sZCB0byBzZXQgYW5vdGhlciBnb2FsIG9yIHRvIGRyZWFtIGEgbmV3IGRyZWFtLiIsYXV0aG9yOiJDLlMuIExld2lzIn0se3RleHQ6IlNtYWxsIGRhaWx5IGltcHJvdmVtZW50cyBhcmUgdGhlIGtleSB0byBzdGFnZ2VyaW5nIGxvbmctdGVybSByZXN1bHRzLiIsYXV0aG9yOiJSb2JpbiBTaGFybWEifSx7dGV4dDoiRHJlYW1zIGRvbid0IHdvcmsgdW5sZXNzIHlvdSBkby4iLGF1dGhvcjoiSm9obiBDLiBNYXh3ZWxsIn0se3RleHQ6IlRoZSBtb3N0IGVmZmVjdGl2ZSB3YXkgdG8gZG8gaXQgaXMgdG8gZG8gaXQuIixhdXRob3I6IkFtZWxpYSBFYXJoYXJ0In0se3RleHQ6IlRha2UgdGltZSB0byBkZWxpYmVyYXRlLCBidXQgd2hlbiB0aGUgdGltZSBmb3IgYWN0aW9uIGFycml2ZXMsIHN0b3AgdGhpbmtpbmcgYW5kIGdvIGluLiIsYXV0aG9yOiJOYXBvbGVvbiBCb25hcGFydGUifSx7dGV4dDoiU3RyaXZpbmcgZm9yIGV4Y2VsbGVuY2UgbW90aXZhdGVzIHlvdTsgc3RyaXZpbmcgZm9yIHBlcmZlY3Rpb24gaXMgZGVtb3JhbGl6aW5nLiIsYXV0aG9yOiJIYXJyaWV0IEJyYWlrZXIifSx7dGV4dDoiVGhlIGpvdXJuZXkgb2YgYSB0aG91c2FuZCBtaWxlcyBiZWdpbnMgd2l0aCBhIHNpbmdsZSBzdGVwLiIsYXV0aG9yOiJMYW8gVHp1In0se3RleHQ6IkEgeWVhciBmcm9tIG5vdyB5b3UgbWF5IHdpc2ggeW91IGhhZCBzdGFydGVkIHRvZGF5LiIsYXV0aG9yOiJLYXJlbiBMYW1iIn0se3RleHQ6IlRoZSBiZWdpbm5pbmcgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHBhcnQgb2YgdGhlIHdvcmsuIixhdXRob3I6IlBsYXRvIn0se3RleHQ6IllvdSBkb24ndCBuZWVkIHRvIHNlZSB0aGUgd2hvbGUgc3RhaXJjYXNlLCBqdXN0IHRha2UgdGhlIGZpcnN0IHN0ZXAuIixhdXRob3I6Ik1hcnRpbiBMdXRoZXIgS2luZyBKci4ifSx7dGV4dDoiU3RhcnQgd2hlcmUgeW91IGFyZS4gVXNlIHdoYXQgeW91IGhhdmUuIERvIHdoYXQgeW91IGNhbi4iLGF1dGhvcjoiQXJ0aHVyIEFzaGUifSx7dGV4dDoiVGhlIGZpcnN0IHN0ZXAgaXMgeW91IGhhdmUgdG8gc2F5IHRoYXQgeW91IGNhbi4iLGF1dGhvcjoiV2lsbCBTbWl0aCJ9LHt0ZXh0OiJJbiB0aGUgbWlkZGxlIG9mIGV2ZXJ5IGRpZmZpY3VsdHkgbGllcyBvcHBvcnR1bml0eS4iLGF1dGhvcjoiQWxiZXJ0IEVpbnN0ZWluIn0se3RleHQ6IkV2ZW4gdGhlIGxvbmdlc3Qgam91cm5leSBzdGFydHMgd2l0aCBwdXR0aW5nIG9uZSBmb290IGluIGZyb250IG9mIHRoZSBvdGhlci4iLGF1dGhvcjoiIn0se3RleHQ6IllvdSBkb24ndCBoYXZlIHRvIGJlIHBlcmZlY3QgdG8gc3RhcnQsIGJ1dCB5b3UgaGF2ZSB0byBzdGFydCB0byBiZSBwZXJmZWN0LiIsYXV0aG9yOiIifSx7dGV4dDoiQ291cmFnZSBpcyBub3QgdGhlIGFic2VuY2Ugb2YgZmVhciwgYnV0IHRoZSBqdWRnbWVudCB0aGF0IHNvbWV0aGluZyBlbHNlIGlzIG1vcmUgaW1wb3J0YW50LiIsYXV0aG9yOiJBbWJyb3NlIFJlZG1vb24ifSx7dGV4dDoiV2hhdGV2ZXIgeW91IGNhbiBkbywgb3IgZHJlYW0geW91IGNhbiBcdTIwMTQgYmVnaW4gaXQuIEJvbGRuZXNzIGhhcyBnZW5pdXMsIHBvd2VyLCBhbmQgbWFnaWMgaW4gaXQuIixhdXRob3I6IkpvaGFubiBXb2xmZ2FuZyB2b24gR29ldGhlIn0se3RleHQ6IlRoZSBoYXJkZXN0IHBhcnQgaXMgc3RhcnRpbmcuIE9uY2UgeW91IGdldCB0aGF0IG91dCBvZiB0aGUgd2F5LCB5b3UnbGwgZmluZCB0aGUgcmVzdCBvZiB0aGUgam91cm5leSBtdWNoIGVhc2llci4iLGF1dGhvcjoiIn0se3RleHQ6IkluYWN0aW9uIGJyZWVkcyBkb3VidCBhbmQgZmVhci4gQWN0aW9uIGJyZWVkcyBjb25maWRlbmNlIGFuZCBjb3VyYWdlLiIsYXV0aG9yOiJEYWxlIENhcm5lZ2llIn0se3RleHQ6IlRoZSBiZXN0IHRpbWUgdG8gcGxhbnQgYSB0cmVlIHdhcyB0d2VudHkgeWVhcnMgYWdvLiBUaGUgc2Vjb25kIGJlc3QgdGltZSBpcyBub3cuIixhdXRob3I6IkNoaW5lc2UgUHJvdmVyYiJ9LHt0ZXh0OiJZb3UgZG9uJ3QgaGF2ZSB0byBiZSBmZWFybGVzcy4gSnVzdCBkb24ndCBsZXQgZmVhciBzdG9wIHlvdS4iLGF1dGhvcjoiIn0se3RleHQ6IlByb2dyZXNzLCBub3QgcGVyZmVjdGlvbiwgaXMgdGhlIGdvYWwuIixhdXRob3I6IiJ9LHt0ZXh0OiJOb3RoaW5nIHdpbGwgd29yayB1bmxlc3MgeW91IGRvLiIsYXV0aG9yOiJNYXlhIEFuZ2Vsb3UifSx7dGV4dDoiTGVhcCBhbmQgdGhlIG5ldCB3aWxsIGFwcGVhci4iLGF1dGhvcjoiSm9obiBCdXJyb3VnaHMifSx7dGV4dDoiVGhlIGZpcnN0IHN0ZXAgYmluZHMgb25lIHRvIHRoZSBzZWNvbmQuIixhdXRob3I6IkZyZW5jaCBQcm92ZXJiIn0se3RleHQ6IlRha2UgdGhlIGZpcnN0IHN0ZXAgaW4gZmFpdGguIFlvdSBkb24ndCBoYXZlIHRvIHNlZSB0aGUgd2hvbGUgc3RhaXJjYXNlLiIsYXV0aG9yOiJNYXJ0aW4gTHV0aGVyIEtpbmcgSnIuIn0se3RleHQ6IlRvZGF5IGlzIGEgbmV3IGRheS4gRG9uJ3QgbGV0IHllc3RlcmRheSdzIGZhaWx1cmVzIGhhdW50IGl0LiIsYXV0aG9yOiIifSx7dGV4dDoiRXZlcnkgbW9ybmluZyB3ZSBhcmUgYm9ybiBhZ2Fpbi4gV2hhdCB3ZSBkbyB0b2RheSBtYXR0ZXJzIG1vc3QuIixhdXRob3I6IkJ1ZGRoYSJ9LHt0ZXh0OiJXaXRoIHRoZSBuZXcgZGF5IGNvbWVzIG5ldyBzdHJlbmd0aCBhbmQgbmV3IHRob3VnaHRzLiIsYXV0aG9yOiJFbGVhbm9yIFJvb3NldmVsdCJ9LHt0ZXh0OiJUb2RheSBpcyBhbm90aGVyIGNoYW5jZSB0byBnZXQgYmV0dGVyLiIsYXV0aG9yOiIifSx7dGV4dDoiWWVzdGVyZGF5IGlzIG5vdCBvdXJzIHRvIHJlY292ZXIsIGJ1dCB0b21vcnJvdyBpcyBvdXJzIHRvIHdpbiBvciBsb3NlLiIsYXV0aG9yOiJMeW5kb24gQi4gSm9obnNvbiJ9LHt0ZXh0OiJUaGUgc3VuIGlzIGEgZGFpbHkgcmVtaW5kZXIgdGhhdCB3ZSB0b28gY2FuIHJpc2UgYWdhaW4gZnJvbSB0aGUgZGFya25lc3MuIixhdXRob3I6IlMuIEFqbmEifSx7dGV4dDoiRXZlcnkgZGF5IGlzIGEgc2Vjb25kIGNoYW5jZS4iLGF1dGhvcjoiIn0se3RleHQ6IlRvZGF5J3MgYWNjb21wbGlzaG1lbnRzIHdlcmUgeWVzdGVyZGF5J3MgaW1wb3NzaWJpbGl0aWVzLiIsYXV0aG9yOiJSb2JlcnQgSC4gU2NodWxsZXIifSx7dGV4dDoiRWFjaCBuZXcgZGF5IGlzIGEgYmxhbmsgcGFnZSBpbiB0aGUgZGlhcnkgb2YgeW91ciBsaWZlLiIsYXV0aG9yOiIifSx7dGV4dDoiQW4gb3B0aW1pc3Qgc2VlcyBhbiBvcHBvcnR1bml0eSBpbiBldmVyeSBjYWxhbWl0eTsgYSBwZXNzaW1pc3Qgc2VlcyBhIGNhbGFtaXR5IGluIGV2ZXJ5IG9wcG9ydHVuaXR5LiIsYXV0aG9yOiJXaW5zdG9uIENodXJjaGlsbCJ9LHt0ZXh0OiJPcHBvcnR1bml0aWVzIGRvbid0IGhhcHBlbi4gWW91IGNyZWF0ZSB0aGVtLiIsYXV0aG9yOiJDaHJpcyBHcm9zc2VyIn0se3RleHQ6IlRoaXMgaXMgYSB3b25kZXJmdWwgZGF5LiBJJ3ZlIG5ldmVyIHNlZW4gdGhpcyBvbmUgYmVmb3JlLiIsYXV0aG9yOiJNYXlhIEFuZ2Vsb3UifSx7dGV4dDoiWW91IGhhdmUgZXhhY3RseSBvbmUgbGlmZSBpbiB3aGljaCB0byBkbyBldmVyeXRoaW5nIHlvdSdsbCBldmVyIGRvLiBBY3QgYWNjb3JkaW5nbHkuIixhdXRob3I6IkNvbGluIFdyaWdodCJ9LHt0ZXh0OiJMaWZlIGlzIHdoYXQgaGFwcGVucyB3aGVuIHlvdSdyZSBidXN5IG1ha2luZyBvdGhlciBwbGFucy4iLGF1dGhvcjoiSm9obiBMZW5ub24ifSx7dGV4dDoiWW91ciBsaWZlIGRvZXMgbm90IGdldCBiZXR0ZXIgYnkgY2hhbmNlLCBpdCBnZXRzIGJldHRlciBieSBjaGFuZ2UuIixhdXRob3I6IkppbSBSb2huIn0se3RleHQ6IkRvbid0IHdhdGNoIHRoZSBjbG9jazsgZG8gd2hhdCBpdCBkb2VzLiBLZWVwIGdvaW5nLiIsYXV0aG9yOiJTYW0gTGV2ZW5zb24ifSx7dGV4dDoiQmVsaWV2ZSB5b3UgY2FuIGFuZCB5b3UncmUgaGFsZndheSB0aGVyZS4iLGF1dGhvcjoiVGhlb2RvcmUgUm9vc2V2ZWx0In0se3RleHQ6Ikl0IGRvZXMgbm90IG1hdHRlciBob3cgc2xvd2x5IHlvdSBnbyBhcyBsb25nIGFzIHlvdSBkbyBub3Qgc3RvcC4iLGF1dGhvcjoiQ29uZnVjaXVzIn0se3RleHQ6IlRoZSBvbmx5IGxpbWl0IHRvIG91ciByZWFsaXphdGlvbiBvZiB0b21vcnJvdyB3aWxsIGJlIG91ciBkb3VidHMgb2YgdG9kYXkuIixhdXRob3I6IkZyYW5rbGluIEQuIFJvb3NldmVsdCJ9LHt0ZXh0OiJUaGUgZnV0dXJlIGJlbG9uZ3MgdG8gdGhvc2Ugd2hvIGJlbGlldmUgaW4gdGhlIGJlYXV0eSBvZiB0aGVpciBkcmVhbXMuIixhdXRob3I6IkVsZWFub3IgUm9vc2V2ZWx0In0se3RleHQ6IklmIHlvdSdyZSBnb2luZyB0aHJvdWdoIGhlbGwsIGtlZXAgZ29pbmcuIixhdXRob3I6IldpbnN0b24gQ2h1cmNoaWxsIn0se3RleHQ6IlBlcnNpc3RlbmNlIGd1YXJhbnRlZXMgdGhhdCByZXN1bHRzIGFyZSBpbmV2aXRhYmxlLiIsYXV0aG9yOiJQYXJhbWFoYW5zYSBZb2dhbmFuZGEifSx7dGV4dDoiU3VjY2VzcyBpcyBub3QgZmluYWwsIGZhaWx1cmUgaXMgbm90IGZhdGFsOiBpdCBpcyB0aGUgY291cmFnZSB0byBjb250aW51ZSB0aGF0IGNvdW50cy4iLGF1dGhvcjoiV2luc3RvbiBDaHVyY2hpbGwifSx7dGV4dDoiWW91IG1pc3MgMTAwJSBvZiB0aGUgc2hvdHMgeW91IGRvbid0IHRha2UuIixhdXRob3I6IldheW5lIEdyZXR6a3kifSx7dGV4dDoiSXQgYWx3YXlzIHNlZW1zIGltcG9zc2libGUgdW50aWwgaXQncyBkb25lLiIsYXV0aG9yOiJOZWxzb24gTWFuZGVsYSJ9LHt0ZXh0OiJXZSBtYXkgZW5jb3VudGVyIG1hbnkgZGVmZWF0cywgYnV0IHdlIG11c3Qgbm90IGJlIGRlZmVhdGVkLiIsYXV0aG9yOiJNYXlhIEFuZ2Vsb3UifSx7dGV4dDoiSSBuZXZlciBkcmVhbWVkIGFib3V0IHN1Y2Nlc3MuIEkgd29ya2VkIGZvciBpdC4iLGF1dGhvcjoiRXN0XHhFOWUgTGF1ZGVyIn0se3RleHQ6IlRoZSBvbmx5IHdheSBvdXQgaXMgdGhyb3VnaC4iLGF1dGhvcjoiUm9iZXJ0IEZyb3N0In0se3RleHQ6IkhhcmRzaGlwcyBvZnRlbiBwcmVwYXJlIG9yZGluYXJ5IHBlb3BsZSBmb3IgYW4gZXh0cmFvcmRpbmFyeSBkZXN0aW55LiIsYXV0aG9yOiJDLlMuIExld2lzIn0se3RleHQ6IkFjdCBhcyBpZiB3aGF0IHlvdSBkbyBtYWtlcyBhIGRpZmZlcmVuY2UuIEl0IGRvZXMuIixhdXRob3I6IldpbGxpYW0gSmFtZXMifSx7dGV4dDoiSW4gdGhlIG1pZGRsZSBvZiBkaWZmaWN1bHR5IGxpZXMgb3Bwb3J0dW5pdHkuIixhdXRob3I6IkFsYmVydCBFaW5zdGVpbiJ9LHt0ZXh0OiJZb3UgYXJlIGJyYXZlciB0aGFuIHlvdSBiZWxpZXZlLCBzdHJvbmdlciB0aGFuIHlvdSBzZWVtLCBhbmQgc21hcnRlciB0aGFuIHlvdSB0aGluay4iLGF1dGhvcjoiQS5BLiBNaWxuZSJ9LHt0ZXh0OiJLZWVwIHlvdXIgZXllcyBvbiB0aGUgc3RhcnMgYW5kIHlvdXIgZmVldCBvbiB0aGUgZ3JvdW5kLiIsYXV0aG9yOiJUaGVvZG9yZSBSb29zZXZlbHQifSx7dGV4dDoiV2hhdCB5b3UgZG8gdG9kYXkgY2FuIGltcHJvdmUgYWxsIHlvdXIgdG9tb3Jyb3dzLiIsYXV0aG9yOiJSYWxwaCBNYXJzdG9uIn0se3RleHQ6IkRvbid0IGJlIHB1c2hlZCBhcm91bmQgYnkgdGhlIGZlYXJzIGluIHlvdXIgbWluZC4gQmUgbGVkIGJ5IHRoZSBkcmVhbXMgaW4geW91ciBoZWFydC4iLGF1dGhvcjoiUm95IFQuIEJlbm5ldHQifSx7dGV4dDoiVGhlIG9ubHkgcGVyc29uIHlvdSBzaG91bGQgdHJ5IHRvIGJlIGJldHRlciB0aGFuIGlzIHdobyB5b3Ugd2VyZSB5ZXN0ZXJkYXkuIixhdXRob3I6IiJ9LHt0ZXh0OiJJZiB5b3Ugd2FudCB0byBhY2hpZXZlIGdyZWF0bmVzcywgc3RvcCBhc2tpbmcgZm9yIHBlcm1pc3Npb24uIixhdXRob3I6IiJ9LHt0ZXh0OiJUaGluZ3Mgd29yayBvdXQgYmVzdCBmb3IgdGhvc2Ugd2hvIG1ha2UgdGhlIGJlc3Qgb2YgaG93IHRoaW5ncyB3b3JrIG91dC4iLGF1dGhvcjoiSm9obiBXb29kZW4ifSx7dGV4dDoiVG8gbGl2ZSBhIGNyZWF0aXZlIGxpZmUsIHdlIG11c3QgbG9zZSBvdXIgZmVhciBvZiBiZWluZyB3cm9uZy4iLGF1dGhvcjoiSm9zZXBoIENoaWx0b24gUGVhcmNlIn0se3RleHQ6IklmIHlvdSBhcmUgbm90IHdpbGxpbmcgdG8gcmlzayB0aGUgdXN1YWwsIHlvdSB3aWxsIGhhdmUgdG8gc2V0dGxlIGZvciB0aGUgb3JkaW5hcnkuIixhdXRob3I6IkppbSBSb2huIn0se3RleHQ6IlRydXN0IHlvdXJzZWxmLiBZb3Uga25vdyBtb3JlIHRoYW4geW91IHRoaW5rIHlvdSBkby4iLGF1dGhvcjoiQmVuamFtaW4gU3BvY2sifSx7dGV4dDoiV2hhdCBzZWVtcyB0byB1cyBhcyBiaXR0ZXIgdHJpYWxzIGFyZSBvZnRlbiBibGVzc2luZ3MgaW4gZGlzZ3Vpc2UuIixhdXRob3I6Ik9zY2FyIFdpbGRlIn0se3RleHQ6IlRoZSBvbmx5IHBsYWNlIHdoZXJlIHN1Y2Nlc3MgY29tZXMgYmVmb3JlIHdvcmsgaXMgaW4gdGhlIGRpY3Rpb25hcnkuIixhdXRob3I6IlZpZGFsIFNhc3Nvb24ifSx7dGV4dDoiVG9vIG1hbnkgb2YgdXMgYXJlIG5vdCBsaXZpbmcgb3VyIGRyZWFtcyBiZWNhdXNlIHdlIGFyZSBsaXZpbmcgb3VyIGZlYXJzLiIsYXV0aG9yOiJMZXMgQnJvd24ifSx7dGV4dDoiSSBmaW5kIHRoYXQgdGhlIGhhcmRlciBJIHdvcmssIHRoZSBtb3JlIGx1Y2sgSSBzZWVtIHRvIGhhdmUuIixhdXRob3I6IlRob21hcyBKZWZmZXJzb24ifSx7dGV4dDoiU3VjY2VzcyB1c3VhbGx5IGNvbWVzIHRvIHRob3NlIHdobyBhcmUgdG9vIGJ1c3kgdG8gYmUgbG9va2luZyBmb3IgaXQuIixhdXRob3I6IkhlbnJ5IERhdmlkIFRob3JlYXUifSx7dGV4dDoiSWYgeW91IHJlYWxseSBsb29rIGNsb3NlbHksIG1vc3Qgb3Zlcm5pZ2h0IHN1Y2Nlc3NlcyB0b29rIGEgbG9uZyB0aW1lLiIsYXV0aG9yOiJTdGV2ZSBKb2JzIn0se3RleHQ6Ik5ldmVyIGdpdmUgdXAgb24gYSBkcmVhbSBqdXN0IGJlY2F1c2Ugb2YgdGhlIHRpbWUgaXQgd2lsbCB0YWtlIHRvIGFjY29tcGxpc2ggaXQuIixhdXRob3I6IkVhcmwgTmlnaHRpbmdhbGUifSx7dGV4dDoiWW91J3ZlIGdvdCB0byBnZXQgdXAgZXZlcnkgbW9ybmluZyB3aXRoIGRldGVybWluYXRpb24gaWYgeW91J3JlIGdvaW5nIHRvIGdvIHRvIGJlZCB3aXRoIHNhdGlzZmFjdGlvbi4iLGF1dGhvcjoiR2VvcmdlIExvcmltZXIifSx7dGV4dDoiVGhlIHNlY3JldCBvZiB5b3VyIHN1Y2Nlc3MgaXMgZGV0ZXJtaW5lZCBieSB5b3VyIGRhaWx5IGFnZW5kYS4iLGF1dGhvcjoiSm9obiBDLiBNYXh3ZWxsIn1dO2Z1bmN0aW9uIFppKGU9Mil7cmV0dXJuWy4uLmJDXS5zb3J0KCgpPT5NYXRoLnJhbmRvbSgpLS41KS5zbGljZSgwLGUpfXZhciBxbj16KHJlKCkpO2Z1bmN0aW9uIGtmKHthcHA6ZSxncmlkSGVpZ2h0U2l6ZTp0LHBsYW5Db250ZW50Om4scHJvdmlkZXJBcGlLZXk6cixxdW90ZXM6b30pe2xldCBhPSh0fHwxKT49Mj80OjIsW2ksc109KDAsUm8udXNlU3RhdGUpKG98fChuP1tdOlppKGEpKSksW2wsY109KDAsUm8udXNlU3RhdGUpKCFvJiYhIW4pLFt1XT0oMCxSby51c2VTdGF0ZSkoKCk9PmAke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKX1gKTsoMCxSby51c2VFZmZlY3QpKCgpPT57IW8mJm4mJihjKCEwKSxfdihlLG4se2FwaUtleTpyfSkudGhlbihoPT57cyhoJiZoLmxlbmd0aD9oOlppKGEpKSxjKCExKX0pKX0sW10pLCgwLFJvLnVzZUVmZmVjdCkoKCk9PnshbCYmaS5sZW5ndGg8YSYmcyhaaShhKSl9LFthXSk7bGV0IGQ9KDAscW4uanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJ3aWRnZXQtaGVhZGVyLWFjdGlvbiIsb25DbGljazooKT0+e3MoWmkoYSkpfSx0aXRsZToiUmVzZWVkIHF1b3RlcyIsY2hpbGRyZW46Ilx1MjFCQiBSZXNlZWQifSk7cmV0dXJuIGw/KDAscW4uanN4KShjZSx7dGl0bGU6bGUoInF1b3RlcyIpLGljb246Ilx1ezFGNEExfSIsd2lkZ2V0SWQ6InF1b3RlcyIsY2hpbGRyZW46KDAscW4uanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJxdW90ZXMtbG9hZGluZyIsY2hpbGRyZW46IkdlbmVyYXRpbmcgcXVvdGVzLi4uIn0pfSk6KDAscW4uanN4KShjZSx7dGl0bGU6bGUoInF1b3RlcyIpLGljb246Ilx1ezFGNEExfSIsd2lkZ2V0SWQ6InF1b3RlcyIsaGVhZGVyQWN0aW9uczpkLGNoaWxkcmVuOigwLHFuLmpzeCkoImRpdiIse2NsYXNzTmFtZToicXVvdGVzLWdyaWQiLGNoaWxkcmVuOmkuc2xpY2UoMCxhKS5tYXAoKGgseSk9PigwLHFuLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InF1b3RlLXRpbGUiLHN0eWxlOntiYWNrZ3JvdW5kSW1hZ2U6ImxpbmVhci1ncmFkaWVudChyZ2JhKDAsMCwwLDAuNSksIHJnYmEoMCwwLDAsMC42KSksIHVybCgiK2NjKCJzbWFsbCIsdSx5KSsiKSJ9LGNoaWxkcmVuOlsoMCxxbi5qc3gpKCJwIix7Y2xhc3NOYW1lOiJxdW90ZS10ZXh0IixjaGlsZHJlbjonIicraC50ZXh0KyciJ30pLGguYXV0aG9yPygwLHFuLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InF1b3RlLWF1dGhvciIsY2hpbGRyZW46Ilx1MjAxNCAiK2guYXV0aG9yfSk6bnVsbF19LHkpKX0pfSl9dmFyIE1vPXoocmUoKSksa0M9e2RhaWx5Sm90OiJodHRwczovL3d3dy5hbXBsZW5vdGUuY29tL25vdGVzL2pvdHMiLGpvdXJuYWw6Imh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvam90cyIsY2FsZW5kYXI6Imh0dHBzOi8vd3d3LmFtcGxlbm90ZS5jb20vbm90ZXMvY2FsZW5kYXIifTthc3luYyBmdW5jdGlvbiB4QyhlKXtsZXQgdDt0cnl7dD1hd2FpdCBlLmdldFRhc2tEb21haW5zKCl9Y2F0Y2h7cmV0dXJufWxldCBuPShBcnJheS5pc0FycmF5KHQpP3Q6W10pLmZpbHRlcihvPT5vIT1udWxsKS5mbGF0TWFwKG89Pm8ubm90ZXN8fFtdKTtpZighbi5sZW5ndGgpcmV0dXJuO2xldCByPW5bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm4ubGVuZ3RoKV07cj8udXVpZCYmYXdhaXQgZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke3IudXVpZH1gKX1mdW5jdGlvbiB4Zih7YXBwOmV9KXtsZXQgdD1be2xhYmVsOiJEYWlseSBKb3QiLGljb246Ilx1ezFGNEREfSIsYWN0aW9uOiJkYWlseUpvdCJ9LHtsYWJlbDoiSm91cm5hbCIsaWNvbjoiXHV7MUY0RDN9IixhY3Rpb246ImpvdXJuYWwifSx7bGFiZWw6IkNhbGVuZGFyIixpY29uOiJcdXsxRjRDNX0iLGFjdGlvbjoiY2FsZW5kYXIifSx7bGFiZWw6IlJhbmRvbSBOb3RlIixpY29uOiJcdXsxRjNCMn0iLGFjdGlvbjoicmFuZG9tTm90ZSJ9XSxuPWFzeW5jIHI9PntpZihyPT09InJhbmRvbU5vdGUiKXthd2FpdCB4QyhlKTtyZXR1cm59bGV0IG89a0Nbcl07byYmYXdhaXQgZS5uYXZpZ2F0ZShvKX07cmV0dXJuKDAsTW8uanN4KShjZSx7dGl0bGU6bGUoInF1aWNrLWFjdGlvbnMiKSxpY29uOiJcdTI2QTEiLHdpZGdldElkOiJxdWljay1hY3Rpb25zIixjaGlsZHJlbjooMCxNby5qc3gpKCJkaXYiLHtjbGFzc05hbWU6InFhLWdyaWQiLGNoaWxkcmVuOnQubWFwKHI9PigwLE1vLmpzeHMpKCJidXR0b24iLHtjbGFzc05hbWU6InFhLWJ1dHRvbiIsb25DbGljazooKT0+bihyLmFjdGlvbiksY2hpbGRyZW46WygwLE1vLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InFhLWljb24iLGNoaWxkcmVuOnIuaWNvbn0pLCgwLE1vLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InFhLWxhYmVsIixjaGlsZHJlbjpyLmxhYmVsfSldfSxyLmFjdGlvbikpfSl9KX12YXIgSnI9eih5ZSgpKTt2YXIgU0M9NyoyNCo2MCo2MCoxZTMscGI9MyxFQz01LFRDPTUsZmI9NTAsTkM9MjUwLFNmPTI1MCxoYj03LERDPTE7ZnVuY3Rpb24gbWIoZSl7cmV0dXJuIF9DKGAke0ZlKG5ldyBEYXRlKX0tJHtlfWApfWFzeW5jIGZ1bmN0aW9uIGNiKGUsdCxuPW5ldyBTZXQpe2lmKCF0KXJldHVybltdO2xldCByPW5ldyBTZXQsbz1bXTtmb3IgYXdhaXQobGV0IGEgb2YgYXdhaXQgZS5maWx0ZXJOb3Rlcyh7Z3JvdXA6InRhc2tMaXN0cyIsdGFza0RvbWFpblVVSUQ6dH0sImNoYW5nZWQiKSlpZighbi5oYXMoYT8udXVpZCkmJmE/LnV1aWQmJiFyLmhhcyhhLnV1aWQpJiYoci5hZGQoYS51dWlkKSxvLnB1c2goYSksby5sZW5ndGg+PU5DKSlyZXR1cm4gbztyZXR1cm4gb31hc3luYyBmdW5jdGlvbiBnYihlLHQsbil7bGV0IHI9bnQobi5kYXRlS2V5KSxvPU9DKG4sdmIocikpO2F3YWl0IGUucmVwbGFjZU5vdGVDb250ZW50KHQsbyl9YXN5bmMgZnVuY3Rpb24geWIoe2FwcDplLG1heE5vdGVzOnQ9RUMsc2VlZDpuLHRhc2tEb21haW5VVUlEOnI9bnVsbH0pe2xldCBvPWF3YWl0IElDKGUpLGE9QUMoby5zdGF0ZSxyLG8uc3RhdGUuZGF0ZUtleSksaT1hLnNlbGVjdGVkTm90ZXM7aWYoYS5zZWxlY3Rpb25TZWVkPT09biYmaS5sZW5ndGg+PU1hdGgubWluKHBiLHQpKXJldHVybiB1YihlLGkuc2xpY2UoMCx0KSk7bGV0IHM9YXdhaXQgTEMoZSxhLHIpLGw9Z2MoWy4uLmEuc3RhbGVDYW5kaWRhdGVzLC4uLnMuc3RhbGVDYW5kaWRhdGVzXSksYz1hLmhpc3RvcnlCeURheSx1PWwuZmlsdGVyKHc9PiFrYihjKS5oYXMody51dWlkKSk7bC5sZW5ndGg+MCYmdS5sZW5ndGg9PT0wJiYoYz17fSx1PWwpO2xldCBwPU1DKHUsdCxuKSxkPWF3YWl0IHViKGUscCksaD1QQyhkKSx5PWgubWFwKHc9PncudXVpZCkuZmlsdGVyKEJvb2xlYW4pO2E9QWEoey4uLmEsaGlzdG9yeUJ5RGF5OmRiKGMsYS5kYXRlS2V5LHksU2YpLHNlbGVjdGlvblNlZWQ6bixzZWxlY3RlZE5vdGVzOmgsc3RhbGVDYW5kaWRhdGVzOmwsdGFza0RvbWFpblVVSUQ6cix2aXNpdGVkQnlEYXk6ZGIoYS52aXNpdGVkQnlEYXksYS5kYXRlS2V5LHMudmlzaXRlZFV1aWRzLFNmKX0sYS5kYXRlS2V5KTt0cnl7YXdhaXQgZ2IoZSxvLm5vdGVIYW5kbGUsYSl9Y2F0Y2godyl7RSgiW1JlY2VudE5vdGVzXSBGYWlsZWQgdG8gcGVyc2lzdCByZWNlbnQtbm90ZSBzdGF0ZToiLHcpfXJldHVybiBkfWZ1bmN0aW9uIF9DKGUpe2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspdD0odCtlLmNoYXJDb2RlQXQobikqKG4rMSkpJTEwMDAwMDM7cmV0dXJuIHR9YXN5bmMgZnVuY3Rpb24gdWIoZSx0KXtsZXQgbj1BcnJheS5pc0FycmF5KHQpP3Q6W107cmV0dXJuIFByb21pc2UuYWxsKG4ubWFwKHI9PmUuZmluZE5vdGUoe3V1aWQ6ci51dWlkfSkudGhlbihvPT4oe2xhdGVzdFRhc2tUaW1lc3RhbXA6ci5sYXRlc3RUYXNrVGltZXN0YW1wLG5vdGVIYW5kbGU6b3x8e25hbWU6ci5uYW1lLHV1aWQ6ci51dWlkfSx0YXNrQ291bnQ6ci50YXNrQ291bnR9KSkuY2F0Y2goKCk9Pih7bGF0ZXN0VGFza1RpbWVzdGFtcDpyLmxhdGVzdFRhc2tUaW1lc3RhbXAsbm90ZUhhbmRsZTp7bmFtZTpyLm5hbWUsdXVpZDpyLnV1aWR9LHRhc2tDb3VudDpyLnRhc2tDb3VudH0pKSkpfWZ1bmN0aW9uIENDKGUpe2xldCB0PU51bWJlci5pc0Zpbml0ZShlKT9NYXRoLmFicyhNYXRoLmZsb29yKGUpKToxO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0PSh0KjkzMDErNDkyOTcpJTIzMzI4MCx0LzIzMzI4MH19ZnVuY3Rpb24gZGIoZSx0LG4scil7bGV0IG89eWMoZSx0KSxhPW9bdF18fFtdLGk9KEFycmF5LmlzQXJyYXkobik/bjpbXSkuZmlsdGVyKGw9PnR5cGVvZiBsPT0ic3RyaW5nIiYmbC5sZW5ndGg+MCkscz1bLi4ubmV3IFNldChbLi4uYSwuLi5pXSldLnNsaWNlKC1yKTtyZXR1cm4geWMoey4uLm8sW3RdOnN9LHQpfWZ1bmN0aW9uIGdjKGUpe2xldCB0PW5ldyBTZXQsbj1bXTtmb3IobGV0IHIgb2YgQXJyYXkuaXNBcnJheShlKT9lOltdKXtsZXQgbz1yPy51dWlkfHxyPy5ub3RlSGFuZGxlPy51dWlkO2lmKCEoIW98fHQuaGFzKG8pKSYmKHQuYWRkKG8pLG4ucHVzaCh7bGF0ZXN0VGFza1RpbWVzdGFtcDpOdW1iZXIoci5sYXRlc3RUYXNrVGltZXN0YW1wKXx8MCxuYW1lOnIubmFtZXx8ci5ub3RlSGFuZGxlPy5uYW1lfHwiVW50aXRsZWQiLHRhc2tDb3VudDpOdW1iZXIoci50YXNrQ291bnQpfHwwLHV1aWQ6b30pLG4ubGVuZ3RoPj1mYikpYnJlYWt9cmV0dXJuIG59ZnVuY3Rpb24geWMoZSx0KXtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QifHxBcnJheS5pc0FycmF5KGUpKXJldHVybnt9O2xldCBuPW50KHQpO24uc2V0RGF0ZShuLmdldERhdGUoKS1oYisxKTtsZXQgcj1GZShuKSxvPXt9O2ZvcihsZXRbYSxpXW9mIE9iamVjdC5lbnRyaWVzKGUpKXtpZighL15cZHs0fS1cZHsyfS1cZHsyfSQvLnRlc3QoYSl8fGE8ciljb250aW51ZTtsZXQgcz1BcnJheS5pc0FycmF5KGkpP2kuZmlsdGVyKGw9PnR5cGVvZiBsPT0ic3RyaW5nIiYmbC5sZW5ndGg+MCk6W107b1thXT1bLi4ubmV3IFNldChzKV0uc2xpY2UoLVNmKX1yZXR1cm4gb31mdW5jdGlvbiBBYShlLHQpe2xldCBuPWUmJnR5cGVvZiBlPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoZSk/ZTp7fTtyZXR1cm57ZGF0ZUtleTp0LGhpc3RvcnlCeURheTp5YyhuLmhpc3RvcnlCeURheSx0KSxzY2hlbWFWZXJzaW9uOkRDLHNlbGVjdGlvblNlZWQ6TnVtYmVyLmlzRmluaXRlKG4uc2VsZWN0aW9uU2VlZCk/bi5zZWxlY3Rpb25TZWVkOm51bGwsc2VsZWN0ZWROb3RlczpnYyhuLnNlbGVjdGVkTm90ZXMpLHN0YWxlQ2FuZGlkYXRlczpnYyhuLnN0YWxlQ2FuZGlkYXRlcyksdGFza0RvbWFpblVVSUQ6dHlwZW9mIG4udGFza0RvbWFpblVVSUQ9PSJzdHJpbmciJiZuLnRhc2tEb21haW5VVUlELmxlbmd0aD4wP24udGFza0RvbWFpblVVSUQ6bnVsbCx2aXNpdGVkQnlEYXk6eWMobi52aXNpdGVkQnlEYXksdCl9fWZ1bmN0aW9uIEFDKGUsdCxuKXtyZXR1cm4oZT8udGFza0RvbWFpblVVSUR8fG51bGwpPT09KHR8fG51bGwpP2U6QWEoe3NlbGVjdGlvblNlZWQ6bnVsbCx0YXNrRG9tYWluVVVJRDp0fSxuKX1mdW5jdGlvbiB2YihlKXtyZXR1cm4gZS50b0xvY2FsZVN0cmluZyhbXSx7ZGF5OiJudW1lcmljIixtb250aDoibG9uZyIseWVhcjoibnVtZXJpYyJ9KX1mdW5jdGlvbiBPQyhlLHQpe3JldHVybltgIyBSZWNlbnQgTm90ZXMgZGF0YSBmb3IgJHt0fWAsIiIsIlRoaXMgYXJjaGl2ZWQgbm90ZSBpcyBtYWludGFpbmVkIGJ5IHRoZSBkYXNoYm9hcmQgcGx1Z2luLiIsIiIsImBgYGpzb24iLEpTT04uc3RyaW5naWZ5KGUsbnVsbCwyKSwiYGBgIiwiIl0uam9pbihgCmApfWZ1bmN0aW9uIHdiKGUpe3JldHVybmBEYXNoYm9hcmQgcmVjZW50IG5vdGVzIGZvciAke3ZiKGUpfWB9ZnVuY3Rpb24gYmIoZSx0KXtpZighZXx8dHlwZW9mIGUhPSJzdHJpbmciKXJldHVybiBBYSh7fSx0KTtsZXQgbj1lLm1hdGNoKC9gYGBqc29uXHMqKFtcc1xTXSo/KWBgYC9pKSxyPW4/blsxXTplO3RyeXtyZXR1cm4gQWEoSlNPTi5wYXJzZShyKSx0KX1jYXRjaHtyZXR1cm4gQWEoe30sdCl9fWFzeW5jIGZ1bmN0aW9uIElDKGUpe2xldCB0PW5ldyBEYXRlLG49RmUodCkscj13Yih0KSxvPWF3YWl0IGUuZmluZE5vdGUoe25hbWU6cix0YWdzOltXZV19KTtpZihvPy51dWlkKXtsZXQgbD1hd2FpdCBlLmdldE5vdGVDb250ZW50KHt1dWlkOm8udXVpZH0pO3JldHVybntub3RlSGFuZGxlOm8sc3RhdGU6YmIobCxuKX19bGV0IGE9YXdhaXQgUkMoZSx0KSxpPUFhKHsuLi5hLHNlbGVjdGVkTm90ZXM6W119LG4pLHM9YXdhaXQgZS5jcmVhdGVOb3RlKHIsW1dlXSx7YXJjaGl2ZTohMH0pO3JldHVybiBvPXt1dWlkOnR5cGVvZiBzPT0ib2JqZWN0Ij9zLnV1aWQ6c30sYXdhaXQgZ2IoZSxvLGkpLEUoYFtSZWNlbnROb3Rlc10gQ3JlYXRlZCBkYWlseSBub3RlICIke3J9IiB3aXRoIHV1aWQgJHtvLnV1aWR9YCkse25vdGVIYW5kbGU6byxzdGF0ZTppfX1hc3luYyBmdW5jdGlvbiBSQyhlLHQpe2ZvcihsZXQgbj0xO248PWhiO24rKyl7bGV0IHI9bmV3IERhdGUodCk7ci5zZXREYXRlKHIuZ2V0RGF0ZSgpLW4pO2xldCBvPWF3YWl0IGUuZmluZE5vdGUoe25hbWU6d2IociksdGFnczpbV2VdfSk7aWYoIW8/LnV1aWQpY29udGludWU7bGV0IGE9YXdhaXQgZS5nZXROb3RlQ29udGVudCh7dXVpZDpvLnV1aWR9KTtyZXR1cm4gYmIoYSxGZSh0KSl9cmV0dXJue319ZnVuY3Rpb24gTUMoZSx0LG4pe2xldCByPUNDKG4pLG89W10sYT1bXTtmb3IobGV0IGkgb2YgZSl7aWYoby5sZW5ndGg+PXQpYnJlYWs7YS5sZW5ndGg8VEMmJnIoKTwuNT9hLnB1c2goaSk6by5wdXNoKGkpfXJldHVybiBvLmxlbmd0aD49cGI/bzpbLi4ubywuLi5hXS5zbGljZSgwLHQpfWZ1bmN0aW9uIFBDKGUpe3JldHVybiBnYygoQXJyYXkuaXNBcnJheShlKT9lOltdKS5tYXAodD0+KHtsYXRlc3RUYXNrVGltZXN0YW1wOnQubGF0ZXN0VGFza1RpbWVzdGFtcCxuYW1lOnQubm90ZUhhbmRsZT8ubmFtZXx8IlVudGl0bGVkIix0YXNrQ291bnQ6dC50YXNrQ291bnQsdXVpZDp0Lm5vdGVIYW5kbGU/LnV1aWR9KSkpfWFzeW5jIGZ1bmN0aW9uIExDKGUsdCxuKXtsZXQgcj1rYih0LnZpc2l0ZWRCeURheSksbz1hd2FpdCBjYihlLG4sciksYT1yO28ubGVuZ3RoPT09MCYmdC5zdGFsZUNhbmRpZGF0ZXMubGVuZ3RoPT09MCYmKGE9bmV3IFNldCxvPWF3YWl0IGNiKGUsbixhKSk7bGV0IGk9W10scz1bXSxsPW5ldyBTZXQodC5zdGFsZUNhbmRpZGF0ZXMubWFwKGM9PmMudXVpZCkpO2ZvcihsZXQgYyBvZiBvKWlmKCEoIWM/LnV1aWR8fGEuaGFzKGMudXVpZCkpKXRyeXtsZXQgdT1hd2FpdCBlLmdldE5vdGVUYXNrcyh7dXVpZDpjLnV1aWR9LHtpbmNsdWRlRG9uZTohMX0pO2lmKHMucHVzaChjLnV1aWQpLCFBcnJheS5pc0FycmF5KHUpfHx1Lmxlbmd0aD09PTApY29udGludWU7bGV0IHA9dS5yZWR1Y2UoKGQsaCk9PntsZXQgeT1oLnN0YXJ0QXQ/aC5zdGFydEF0KjFlMzowO3JldHVybiBNYXRoLm1heChkLHkpfSwwKTtpZihwIT09MCYmcD49RGF0ZS5ub3coKS1TQyljb250aW51ZTtpZihsLmhhcyhjLnV1aWQpfHwoaS5wdXNoKHtsYXRlc3RUYXNrVGltZXN0YW1wOnAsbmFtZTpjLm5hbWUsdGFza0NvdW50OnUubGVuZ3RoLHV1aWQ6Yy51dWlkfSksbC5hZGQoYy51dWlkKSksdC5zdGFsZUNhbmRpZGF0ZXMubGVuZ3RoK2kubGVuZ3RoPj1mYilicmVha31jYXRjaCh1KXtFKGBbUmVjZW50Tm90ZXNdIEZhaWxlZCB0byBmZXRjaCB0YXNrcyBmb3Igbm90ZSAke2MudXVpZH06YCx1KX1yZXR1cm57c3RhbGVDYW5kaWRhdGVzOmksdmlzaXRlZFV1aWRzOnN9fWZ1bmN0aW9uIGtiKGUpe2xldCB0PW5ldyBTZXQ7Zm9yKGxldCBuIG9mIE9iamVjdC52YWx1ZXMoZXx8e30pKUFycmF5LmlzQXJyYXkobikmJm4uZm9yRWFjaChyPT50LmFkZChyKSk7cmV0dXJuIHR9dmFyIFp0PXoocmUoKSksekM9MyxGQz01O2Z1bmN0aW9uIEVmKHthcHA6ZSxncmlkSGVpZ2h0U2l6ZTp0PTEsdGFza0RvbWFpblVVSUQ6bj1udWxsfSl7bGV0W3Isb109KDAsSnIudXNlU3RhdGUpKDApLFthLGldPSgwLEpyLnVzZVN0YXRlKShudWxsKSxbcyxsXT0oMCxKci51c2VTdGF0ZSkobnVsbCksYz10Pj0yPzEwOkZDLHU9KDAsSnIudXNlTWVtbykoKCk9Pm1iKHIpLFtyXSk7KDAsSnIudXNlRWZmZWN0KSgoKT0+e2xldCB5PSEwO3JldHVybiBpKG51bGwpLGwobnVsbCkseWIoe2FwcDplLG1heE5vdGVzOmMsc2VlZDp1LHRhc2tEb21haW5VVUlEOm59KS50aGVuKHc9Pnt5JiYoaSh3KSxFKCJbUmVjZW50Tm90ZXNdIHN0YWxlTm90ZXM6Iix3LCJzZWVkOiIsdSwicmVzZWVkQ291bnQ6IixyKSl9KS5jYXRjaCh3PT57eSYmKEUoIltSZWNlbnROb3Rlc10gZmV0Y2ggZXJyb3I6Iix3KSxsKHcubWVzc2FnZXx8IkZhaWxlZCB0byBsb2FkIG5vdGVzIikpfSksKCk9Pnt5PSExfX0sW2UsYyxyLHUsbl0pO2xldCBkPSgwLFp0LmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToid2lkZ2V0LWhlYWRlci1hY3Rpb24iLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+byh5PT55KzEpLHRpdGxlOiJTaG93IGEgZGlmZmVyZW50IHNldCBvZiBub3RlcyIsY2hpbGRyZW46Ilx1MjFCQiBSZXNlZWQifSksaD0oKT0+cz8oMCxadC5qc3gpKCJwIix7Y2xhc3NOYW1lOiJub3RlLWVycm9yIixjaGlsZHJlbjpgRXJyb3I6ICR7c31gfSk6YT09PW51bGw/KDAsWnQuanN4KSgicCIse2NsYXNzTmFtZToibm90ZS1sb2FkaW5nIixjaGlsZHJlbjoiTG9hZGluZ1x1MjAyNiJ9KTphLmxlbmd0aDx6Qz8oMCxadC5qc3gpKCJwIix7Y2xhc3NOYW1lOiJub3RlLWVtcHR5IixjaGlsZHJlbjoiTm8gbm90ZXMgd2l0aCBzdGFsZSB0YXNrcyBmb3VuZC4ifSk6KDAsWnQuanN4KSgidWwiLHtjbGFzc05hbWU6Im5vdGUtbGlzdCIsY2hpbGRyZW46YS5tYXAoKHtub3RlSGFuZGxlOnksdGFza0NvdW50Ond9KT0+KDAsWnQuanN4cykoImxpIix7Y2xhc3NOYW1lOiJub3RlLWl0ZW0iLGNoaWxkcmVuOlsoMCxadC5qc3hzKSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJub3RlLWxpbmsiLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+ZS5uYXZpZ2F0ZShgaHR0cHM6Ly93d3cuYW1wbGVub3RlLmNvbS9ub3Rlcy8ke3kudXVpZH1gKSx0aXRsZTpgT3BlbiAiJHt5Lm5hbWV8fCJVbnRpdGxlZCJ9ImAsY2hpbGRyZW46WygwLFp0LmpzeCkoInNwYW4iLHtjbGFzc05hbWU6Im5vdGUtbmFtZSIsY2hpbGRyZW46eS5uYW1lfHwiVW50aXRsZWQifSksKDAsWnQuanN4KSgic3BhbiIse2NsYXNzTmFtZToibm90ZS1jb3VudCIsY2hpbGRyZW46YCR7d30gb3BlbiB0YXNrJHt3IT09MT8icyI6IiJ9YH0pXX0pLCgwLFp0LmpzeCkoImRpdiIse2NsYXNzTmFtZToibm90ZS1tZXRhZGF0YSIsY2hpbGRyZW46eS5jaGFuZ2VkP2BMYXN0IHVwZGF0ZWQ6ICR7bmV3IERhdGUoeS5jaGFuZ2VkKS50b0xvY2FsZURhdGVTdHJpbmcoKX1gOiJObyB1cGRhdGUgZGF0ZSJ9KV19LHkudXVpZCkpfSk7cmV0dXJuKDAsWnQuanN4KShjZSx7aGVhZGVyQWN0aW9uczpkLGljb246Ilx1ezFGNEREfSIsdGl0bGU6bGUoInJlY2VudC1ub3RlcyIpLHdpZGdldElkOiJyZWNlbnQtbm90ZXMiLGNoaWxkcmVuOmgoKX0pfXZhciB4Yj16KHllKCkpO3ZhciBRbj16KHJlKCkpO2Z1bmN0aW9uIFRmKHthY3RpdmVUYXNrRG9tYWluOmUsYXBwOnQsZG9tYWluczpuLG9uRG9tYWluQ2hhbmdlOnJ9KXtsZXRbbyxhXT0oMCx4Yi51c2VTdGF0ZSkoITEpLGk9YXN5bmMoKT0+e0UoIltUYXNrRG9tYWluc10gUmVmcmVzaCB0cmlnZ2VyZWQiKSxhKCEwKTt0cnl7bGV0IGw9YXdhaXQgTnYodCk7RSgiW1Rhc2tEb21haW5zXSBSZWZyZXNoIHJlc3VsdCIsbCksbCYmciYmcihsLmRvbWFpbnMsbC5hY3RpdmVUYXNrRG9tYWluKX1jYXRjaChsKXt0aHJvdyBFKCJbVGFza0RvbWFpbnNdIFJlZnJlc2ggZmFpbGVkIixsKSxsfWZpbmFsbHl7YSghMSl9fSxzPWFzeW5jIGw9PntpZihsPT09ZSlyZXR1cm47bGV0IGM9YXdhaXQgVHYodCxsKTtjJiZyJiZyKG51bGwsbCxjKX07cmV0dXJuIW58fG4ubGVuZ3RoPT09MD8oMCxRbi5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJ0YXNrLWRvbWFpbnMgdGFzay1kb21haW5zLS1lbXB0eSIsY2hpbGRyZW46WygwLFFuLmpzeCkoImRpdiIse2NsYXNzTmFtZToidGFzay1kb21haW5zLWVtcHR5IixjaGlsZHJlbjonVmlzaXQgIlNldHRpbmdzIiA+ICJUYXNrIENhbGVuZGFyIiB0byBjcmVhdGUgYSB0YXNrIGRvbWFpbiwgZW5hYmxpbmcgRGFzaGJvYXJkLid9KSwoMCxRbi5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6InRhc2stZG9tYWlucy1yZWZyZXNoIixvbkNsaWNrOmksZGlzYWJsZWQ6byx0eXBlOiJidXR0b24iLGNoaWxkcmVuOm8/IlJlZnJlc2hpbmcuLi4iOiJcdTIxQkIgUmVmcmVzaCJ9KV19KTooMCxRbi5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJ0YXNrLWRvbWFpbnMiLGNoaWxkcmVuOlsoMCxRbi5qc3gpKCJkaXYiLHtjbGFzc05hbWU6InRhc2stZG9tYWlucy1saXN0IixjaGlsZHJlbjpuLm1hcChsPT4oMCxRbi5qc3gpKCJkaXYiLHtjbGFzc05hbWU6InRhc2stZG9tYWluLWl0ZW0iKyhsLnV1aWQ9PT1lPyIgYWN0aXZlIjoiIiksb25DbGljazooKT0+cyhsLnV1aWQpLGNoaWxkcmVuOigwLFFuLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InRhc2stZG9tYWluLW5hbWUiLGNoaWxkcmVuOmwubmFtZX0pfSxsLnV1aWQpKX0pLCgwLFFuLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToidGFzay1kb21haW5zLXJlZnJlc2giLG9uQ2xpY2s6aSxkaXNhYmxlZDpvLGNoaWxkcmVuOm8/IlJlZnJlc2hpbmcuLi4iOiJcdTIxQkIgUmVmcmVzaCBUYXNrIERvbWFpbnMifSldfSl9dmFyIHZjPXooeWUoKSk7ZnVuY3Rpb24gU2IoZSl7bGV0IHQ9KDAsdmMudXNlUmVmKShudWxsKTt0LmN1cnJlbnQ9PT1udWxsJiYodC5jdXJyZW50PXBlcmZvcm1hbmNlLm5vdygpLEUoYFtkYXNoYm9hcmRdIFdpZGdldCAiJHtlfSIgbG9hZGluZy4uLmApKSwoMCx2Yy51c2VFZmZlY3QpKCgpPT57dC5jdXJyZW50IT09bnVsbCYmKEUoYFtkYXNoYm9hcmRdIFdpZGdldCAiJHtlfSIgZmluaXNoZWQgbG9hZGluZyBpbiAkeyhwZXJmb3JtYW5jZS5ub3coKS10LmN1cnJlbnQpLnRvRml4ZWQoMSl9bXNgKSx0LmN1cnJlbnQ9bnVsbCl9LFtdKX12YXIgSm49eih5ZSgpKTt2YXIgR2U9eihyZSgpKSxVQz1be3ZhbHVlOi0yLGVtb2ppOiJcdXsxRjYyMn0iLGxhYmVsOiJBd2Z1bCJ9LHt2YWx1ZTotMSxlbW9qaToiXHV7MUY2MUZ9IixsYWJlbDoiQmFkIn0se3ZhbHVlOjAsZW1vamk6Ilx1ezFGNjEwfSIsbGFiZWw6Ik9rYXkifSx7dmFsdWU6MSxlbW9qaToiXHV7MUY2NDJ9IixsYWJlbDoiR29vZCJ9LHt2YWx1ZToyLGVtb2ppOiJcdXsxRjYwNH0iLGxhYmVsOiJHcmVhdCJ9XTtmdW5jdGlvbiAkQyhlKXtpZighZXx8ZS5sZW5ndGg8NylyZXR1cm4iIjtsZXQgdD1udChlWzBdLmRhdGUpLG49bnQoZVs2XS5kYXRlKSxyPW89Pm8udG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6InNob3J0IixkYXk6Im51bWVyaWMifSk7cmV0dXJuYCR7cih0KX0gXHUyMDEzICR7cihuKX1gfWZ1bmN0aW9uIEViKGUsdCl7bGV0IG49bnQoZSk7cmV0dXJuIG4uc2V0RGF0ZShuLmdldERhdGUoKSt0KjcpLEZlKG4pfWZ1bmN0aW9uIFdDKGUsdCl7bGV0IG49aG4oZSx0KSxyPWhuKG5ldyBEYXRlLHQpO3JldHVybiBuPj1yfWZ1bmN0aW9uIEJDKGUsdCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoZSl8fGUubGVuZ3RoPT09MD9bXTohdHx8dHlwZW9mIHQhPSJvYmplY3QiP2U6ZS5tYXAobj0+e2xldCByPUZlKG4uZGF0ZSksbz1BcnJheS5pc0FycmF5KHRbcl0pP3Rbcl06W10sYT1vLnJlZHVjZSgoaSxzKT0+aSsocy52aWN0b3J5VmFsdWV8fDApLDApO3JldHVybnsuLi5uLHZhbHVlOmEsdGFza0NvdW50Om8ubGVuZ3RofX0pfWZ1bmN0aW9uIEhDKGUsdCxuLHIpe2xldCBvPVN2KGUscik7cmV0dXJuIW58fHR5cGVvZiBuIT0ib2JqZWN0Ij9CQyh0LG4pOm8ubWFwKGE9PntsZXQgaT1BcnJheS5pc0FycmF5KG5bYS5kYXRlS2V5XSk/blthLmRhdGVLZXldOltdLHM9aS5yZWR1Y2UoKGwsYyk9PmwrKGMudmljdG9yeVZhbHVlfHwwKSwwKTtyZXR1cm57ZGF5OmEuZGF5LGRhdGU6YS5kYXRlLHZhbHVlOnMsdGFza0NvdW50OmkubGVuZ3RofX0pfWFzeW5jIGZ1bmN0aW9uIEdDKGUsdCxuLHIpe2xldCBvPVt0LFN0cmluZyhuKV07YXdhaXQgZS5zZXRTZXR0aW5nKGhhKCJ2aWN0b3J5LXZhbHVlIiksSlNPTi5zdHJpbmdpZnkobykpLHIoITEpfWZ1bmN0aW9uIFRiKGUpe3JldHVybiBlPT1udWxsPyEwOmU9PT0idHJ1ZSJ8fGU9PT0hMH1mdW5jdGlvbiBWQyhlLHQsbixyKXt0KGVbMF18fCJ3ZWVrIiksbihUYihlWzFdKSkscighMSl9ZnVuY3Rpb24gakMoZSx0LG4pe2xldCByPWUuY3VycmVudDtpZighcilyZXR1cm47bGV0IG89ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPW4uY2xpZW50WC1vLmxlZnQscz0oby53aWR0aC04MCkvNztmb3IobGV0IGw9MDtsPDc7bCsrKXtsZXQgYz00MCtsKnMsdT1jK3M7aWYoYT49YyYmYTx1KXt0KGwpO3JldHVybn19dChudWxsKX1mdW5jdGlvbiBLQyhlLHQpe2xldCBuPWUuY3VycmVudDtpZighbilyZXR1cm4gMDtsZXQgbz0obi5vZmZzZXRXaWR0aC04MCkvNztyZXR1cm4gNDArdCpvK28qLjV9ZnVuY3Rpb24gWUMoZSx0LG4scil7bGV0IG89ZS5jdXJyZW50O2lmKCFvKXJldHVybiAwO2xldCBhPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1vLm9mZnNldEhlaWdodC01MCxjPShuW3RdPy52YWx1ZXx8MCkvcipzKi44NTtyZXR1cm4gYS50b3Arcy1jKzEwfWZ1bmN0aW9uIHFDKGUsdCxuKXtpZighbnx8IXRbZV0pcmV0dXJuW107bGV0IHI9RmUodFtlXS5kYXRlKTtyZXR1cm4obltyXXx8W10pLnNsaWNlKCkuc29ydCgobyxhKT0+KGEudmljdG9yeVZhbHVlfHwwKS0oby52aWN0b3J5VmFsdWV8fDApKX1mdW5jdGlvbiBRQyhlLHQpe2lmKCFlfHwhQXJyYXkuaXNBcnJheShlKXx8IXQpcmV0dXJuW107bGV0IG49e307Zm9yKGxldCByIG9mIGUpe2lmKCFyfHxyLnRpbWVzdGFtcD09bnVsbCljb250aW51ZTtsZXQgbz1uZXcgRGF0ZShyLnRpbWVzdGFtcCoxZTMpLGE9RmUobyk7KCFuW2FdfHxyLnRpbWVzdGFtcD5uW2FdLnRpbWVzdGFtcCkmJihuW2FdPXIpfXJldHVybiB0Lm1hcChyPT57bGV0IG89RmUoci5kYXRlKTtyZXR1cm4gbltvXXx8bnVsbH0pfWZ1bmN0aW9uIEpDKGUsdCxuKXtpZighdHx8IXRbZV0pcmV0dXJuIG51bGw7aWYobiYmbltlXSl7bGV0IG89bmV3IERhdGU7aWYoby5zZXRIb3VycygyMyw1OSw1OSw5OTkpLG50KG5bZV0uZGF0ZSk+bylyZXR1cm4gbnVsbH1sZXQgcj10W2VdLnJhdGluZztyZXR1cm4gVUMuZmluZChvPT5vLnZhbHVlPT09cil8fG51bGx9ZnVuY3Rpb24gWEMoZSx0LG4scixvLGEpe3QuZm9yRWFjaCgoaSxzKT0+e2xldCBsPWkudmFsdWUvbipvKi44NSxjPTQwK3MqcityKi4xNSx1PW8tbCsxMDtlLmZpbGxTdHlsZT1pLnZhbHVlPjA/IiM2MzY2ZjEiOiIjZTVlN2ViIixlLmJlZ2luUGF0aCgpLGUucm91bmRSZWN0KGMsdSxyKi43LGwsWzQsNCwwLDBdKSxlLmZpbGwoKSxlLmZpbGxTdHlsZT0iIzZiNzI4MCIsZS5mb250PSIxMXB4IHN5c3RlbS11aSIsZS50ZXh0QWxpZ249ImNlbnRlciIsZS5maWxsVGV4dChpLmRheSxjK3IqLjM1LGEtMTUpO2xldCBkPW50KGkuZGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7bW9udGg6InNob3J0IixkYXk6Im51bWVyaWMifSk7ZS5maWxsU3R5bGU9IiM5Y2EzYWYiLGUuZm9udD0iOXB4IHN5c3RlbS11aSIsZS5maWxsVGV4dChkLGMrciouMzUsYS0zKSxpLnZhbHVlPjAmJihlLmZpbGxTdHlsZT0iI2ZmZmZmZiIsZS5mb250PSJib2xkIDEwcHggc3lzdGVtLXVpIixlLmZpbGxUZXh0KFpDKGkudmFsdWUpLGMrciouMzUsdSsxNCkpfSl9ZnVuY3Rpb24gWkMoZSl7cmV0dXJuKE1hdGgucm91bmQoKGV8fDApKjEwKS8xMCkudG9GaXhlZCgxKX1mdW5jdGlvbiBlQShlLHQsbixyLG8pe2xldCBhPW5ldyBEYXRlO2Euc2V0SG91cnMoMjMsNTksNTksOTk5KTtsZXQgaT1bXTtpZih0LmZvckVhY2goKHMsbCk9PntpZighc3x8IW5bbF18fG50KG5bbF0uZGF0ZSk+YSlyZXR1cm47bGV0IHU9by0ocy5yYXRpbmcrMikvNCpvKzEwLHA9NDArbCpyK3IqLjU7aS5wdXNoKHtpbmRleDpsLHg6cCx5OnV9KX0pLGkubGVuZ3RoIT09MCl7ZS5zdHJva2VTdHlsZT0iI2Y1OWUwYiIsZS5saW5lV2lkdGg9Mjtmb3IobGV0IHM9MTtzPGkubGVuZ3RoO3MrKyl7bGV0IGw9aVtzLTFdLGM9aVtzXTtlLnNldExpbmVEYXNoKGMuaW5kZXg9PT1sLmluZGV4KzE/W106WzMsNF0pLGUuYmVnaW5QYXRoKCksZS5tb3ZlVG8obC54LGwueSksZS5saW5lVG8oYy54LGMueSksZS5zdHJva2UoKX1lLnNldExpbmVEYXNoKFtdKSxpLmZvckVhY2goKHt4OnMseTpsfSk9PntlLmZpbGxTdHlsZT0iI2Y1OWUwYiIsZS5iZWdpblBhdGgoKSxlLmFyYyhzLGwsMywwLE1hdGguUEkqMiksZS5maWxsKCl9KX19ZnVuY3Rpb24gdEEoZSx0LG4scixvKXtsZXQgYT1lLmN1cnJlbnQ7aWYoIWEpcmV0dXJuO2xldCBpPWEuZ2V0Q29udGV4dCgiMmQiKSxzPWEud2lkdGg9YS5vZmZzZXRXaWR0aCoyLGw9YS5oZWlnaHQ9YS5vZmZzZXRIZWlnaHQqMjtpLnNjYWxlKDIsMik7bGV0IGM9cy8yLHU9bC8yLHA9KGMtODApLzcsZD11LTUwO2kuY2xlYXJSZWN0KDAsMCxjLHUpLFhDKGksdCxuLHAsZCx1KSxvJiZyJiZyLnNvbWUoaD0+aCE9PW51bGwpJiZlQShpLHIsdCxwLGQpfWZ1bmN0aW9uIG5BKGUsdCxuLHIpe2xldCBvPXFDKGUsdCxuKSxhPUpDKGUscix0KSxzPVtgPGRpdiBjbGFzcz0iZGFzaGJvYXJkLXRvb2x0aXAtaGVhZGVyIj4ke3RbZV0/RXYodFtlXS5kYXRlKToiIn08L2Rpdj5gXTtpZihhJiZzLnB1c2goYDxkaXYgY2xhc3M9ImRhc2hib2FyZC10b29sdGlwLXNlY3Rpb24iPiR7YS5lbW9qaX0gJHthLmxhYmVsfTwvZGl2PmApLG8ubGVuZ3RoPjApZm9yKGxldCBsIG9mIG8pcy5wdXNoKGA8ZGl2IGNsYXNzPSJkYXNoYm9hcmQtdG9vbHRpcC1yb3ciPjxzcGFuIGNsYXNzPSJkYXNoYm9hcmQtdG9vbHRpcC1yb3ctbGFiZWwiPiR7TmEobC5jb250ZW50KX08L3NwYW4+PHNwYW4gY2xhc3M9ImRhc2hib2FyZC10b29sdGlwLXJvdy12YWx1ZSI+JHtsLnZpY3RvcnlWYWx1ZXx8MH0gcHRzPC9zcGFuPjwvZGl2PmApO2Vsc2Ugcy5wdXNoKCc8ZGl2IGNsYXNzPSJkYXNoYm9hcmQtdG9vbHRpcC1lbXB0eSI+Tm8gY29tcGxldGVkIHRhc2tzPC9kaXY+Jyk7cmV0dXJuIHMuam9pbigiIil9ZnVuY3Rpb24gckEoe3RpbWVSYW5nZTplLHNldFRpbWVSYW5nZTp0fSl7cmV0dXJuKDAsR2UuanN4KShHZS5GcmFnbWVudCx7Y2hpbGRyZW46WyJ3ZWVrIiwibW9udGgiLCIzMGRheXMiXS5tYXAobj0+KDAsR2UuanN4cykoImxhYmVsIix7Y2hpbGRyZW46WygwLEdlLmpzeCkoImlucHV0Iix7dHlwZToicmFkaW8iLG5hbWU6InZ2LXRpbWUtcmFuZ2UiLHZhbHVlOm4sY2hlY2tlZDplPT09bixvbkNoYW5nZTp0LmJpbmQobnVsbCxuKX0pLG49PT0id2VlayI/IlRoaXMgd2VlayI6bj09PSJtb250aCI/IlRoaXMgbW9udGgiOiJMYXN0IDMwIGRheXMiXX0sbikpfSl9ZnVuY3Rpb24gTmYoe2FwcDplLGNvbXBsZXRlZFRhc2tzQnlEYXRlOnQsZGFpbHlWYWx1ZXM6bixtb29kUmF0aW5nczpyLG9uUmVmZXJlbmNlRGF0ZUNoYW5nZTpvLHJlZmVyZW5jZURhdGU6YSx3ZWVrRm9ybWF0Omksd2Vla2x5VG90YWw6c30pe2xldCBsPSgwLEpuLnVzZVJlZikobnVsbCksYz1IbChpKSx1PUhDKGEsbix0LGMpLHA9TWF0aC5tYXgoLi4udS5tYXAoRj0+Ri52YWx1ZSksMSksZD11LnJlZHVjZSgoRixIKT0+RisoSC52YWx1ZXx8MCksMCksaD1NYXRoLnJvdW5kKGR8fHN8fDApLHk9UUMocix1KSxbdyxiXT0oMCxKbi51c2VTdGF0ZSkoITEpLFtnLG1dPSgwLEpuLnVzZVN0YXRlKShudWxsKSx2PU5sKEhlKCksInZpY3RvcnktdmFsdWUiKSxbZix4XT0oMCxKbi51c2VTdGF0ZSkodlswXXx8IndlZWsiKSxbUyxOXT0oMCxKbi51c2VTdGF0ZSkoVGIodlsxXSkpLEQ9Yi5iaW5kKG51bGwsITApLF89R0MuYmluZChudWxsLGUsZixTLGIpLEE9VkMuYmluZChudWxsLHYseCxOLGIpLFA9JEModSksST1MaSh7aW50ZXJhY3RpdmU6ITB9KSxMPUY9PntJLmNhbmNlbFNjaGVkdWxlZEhpZGUoKSxqQyhsLG0sRil9LFU9KCk9Pkkuc2NoZWR1bGVIaWRlKDMwMCwoKT0+bShudWxsKSk7cmV0dXJuKDAsSm4udXNlRWZmZWN0KSgoKT0+e3RBKGwsdSxwLHksUyl9LFt1LHAseSxTXSksKDAsSm4udXNlRWZmZWN0KSgoKT0+e2lmKGc9PT1udWxsKXtJLmhpZGUoKTtyZXR1cm59bGV0IEY9bC5jdXJyZW50O2lmKCFGKXJldHVybjtsZXQgSD1GLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGllPUtDKGwsZyksTz1ILmxlZnQraWUsRz1ZQyhsLGcsdSxwKSxUPUcsaz13aW5kb3cuaW5uZXJIZWlnaHQtSC5ib3R0b20sUj1uQShnLHUsdCx5KTtrPlQ/SS5zaG93KFIsTyxILmJvdHRvbSx7cGxhY2VtZW50OiJib3R0b20iLGJlbG93Q2hhcnQ6ITB9KTpJLnNob3coUixPLEcse3BsYWNlbWVudDoidG9wIn0pfSxbZ10pLCgwLEdlLmpzeHMpKGNlLHt0aXRsZTpsZSgidmljdG9yeS12YWx1ZSIpLGljb246Ilx1ezFGM0M2fSIsd2lkZ2V0SWQ6InZpY3RvcnktdmFsdWUiLGNvbmZpZ3VyYWJsZTohMCxvbkNvbmZpZ3VyZTpELGNoaWxkcmVuOlt3PygwLEdlLmpzeHMpKEFvLHt0aXRsZToiQ29uZmlndXJlIFZpY3RvcnkgVmFsdWUiLG9uU3VibWl0Ol8sb25DYW5jZWw6QSxjaGlsZHJlbjpbKDAsR2UuanN4cykoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkIixjaGlsZHJlbjpbKDAsR2UuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQtbGFiZWwiLGNoaWxkcmVuOiJUaW1lIHJhbmdlIn0pLCgwLEdlLmpzeCkockEse3RpbWVSYW5nZTpmLHNldFRpbWVSYW5nZTp4fSldfSksKDAsR2UuanN4cykoImRpdiIse2NsYXNzTmFtZToiY29uZmlnLWZpZWxkIixjaGlsZHJlbjpbKDAsR2UuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJjb25maWctZmllbGQtbGFiZWwiLGNoaWxkcmVuOiJNb29kIG92ZXJsYXkifSksKDAsR2UuanN4cykoImxhYmVsIix7Y2hpbGRyZW46WygwLEdlLmpzeCkoImlucHV0Iix7dHlwZToiY2hlY2tib3giLGNoZWNrZWQ6UyxvbkNoYW5nZTpGPT5OKEYudGFyZ2V0LmNoZWNrZWQpfSksIlNob3cgbW9vZCBvdmVybGF5Il19KV19KV19KTpudWxsLCgwLEdlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6InZ2LWhlYWRlciIsY2hpbGRyZW46WygwLEdlLmpzeCkoInNwYW4iLHtjbGFzc05hbWU6InZ2LXRvdGFsIixjaGlsZHJlbjpofSksKDAsR2UuanN4KSgic3BhbiIse2NsYXNzTmFtZToidnYtbGFiZWwiLGNoaWxkcmVuOmBwb2ludHMgJHtQfWB9KV19KSwoMCxHZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJ2di1jaGFydC1jb250YWluZXIiLGNoaWxkcmVuOlsoMCxHZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6InZ2LW5hdi1hcnJvdyIsdHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5vJiZvKEViKGEsLTEpKSx0aXRsZToiUHJldmlvdXMgd2VlayIsImFyaWEtbGFiZWwiOiJQcmV2aW91cyB3ZWVrIixjaGlsZHJlbjoiXHUyMDM5In0pLCgwLEdlLmpzeCkoImRpdiIse2NsYXNzTmFtZToidnYtY2hhcnQtd3JhcCIsY2hpbGRyZW46KDAsR2UuanN4KSgiY2FudmFzIix7cmVmOmwsY2xhc3NOYW1lOiJ2di1jaGFydCIsb25Nb3VzZU1vdmU6TCxvbk1vdXNlTGVhdmU6VX0pfSksKDAsR2UuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJ2di1uYXYtYXJyb3ciLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6V0MoYSxjKSxvbkNsaWNrOigpPT5vJiZvKEViKGEsMSkpLHRpdGxlOiJOZXh0IHdlZWsiLCJhcmlhLWxhYmVsIjoiTmV4dCB3ZWVrIixjaGlsZHJlbjoiXHUyMDNBIn0pXX0pXX0pfXZhciBUZT16KHJlKCksMSk7ZnVuY3Rpb24gb0EoZSl7bGV0IHQ9TnVtYmVyKGU/LmdyaWRXaWR0aFNpemUpPjA/TnVtYmVyKGUuZ3JpZFdpZHRoU2l6ZSk6MSxuPU51bWJlcihlPy5ncmlkSGVpZ2h0U2l6ZSk+MD9OdW1iZXIoZS5ncmlkSGVpZ2h0U2l6ZSk6MTtyZXR1cm5gZ3JpZC1jZWxsIGhvcml6b250YWwtJHt0fS1jZWxsIHZlcnRpY2FsLSR7bn0tY2VsbGB9ZnVuY3Rpb24gYUEoZSx0LG4scil7bGV0IG89ZT8ud2lkZ2V0SWQse2NsYXNzTmFtZXM6YSxzdHlsZTppfT1rMChuLHIsbyk7cmV0dXJue2NsYXNzTmFtZTpbb0EoZSksdD8iZ3JpZC1jZWxsLS1kcmFnLWFjdGl2ZSI6IiIsdCYmdD09PW8/ImdyaWQtY2VsbC0tZHJhZ2dpbmctcmVhZHkiOiIiLHQmJnQhPT1vPyJncmlkLWNlbGwtLWRyYWctc2hpZnQiOiIiLC4uLmFdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIiksImRhdGEtd2lkZ2V0LWlkIjpvLHN0eWxlOml9fXZhciBEZj1jbGFzcyBleHRlbmRzIG1lLkNvbXBvbmVudHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnN0YXRlPXtoYXNFcnJvcjohMSxlcnJvcjpudWxsfX1zdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKHQpe3JldHVybntoYXNFcnJvcjohMCxlcnJvcjp0fX1jb21wb25lbnREaWRDYXRjaCh0LG4pe0UoYFtXaWRnZXRFcnJvckJvdW5kYXJ5XSBXaWRnZXQgIiR7dGhpcy5wcm9wcy53aWRnZXRJZH0iIGNyYXNoZWQ6YCx0LG4pfXJlbmRlcigpe3JldHVybiB0aGlzLnN0YXRlLmhhc0Vycm9yPygwLFRlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6IndpZGdldC1lcnJvci1mYWxsYmFjayIsY2hpbGRyZW46WygwLFRlLmpzeCkoInAiLHtjbGFzc05hbWU6IndpZGdldC1lcnJvci1mYWxsYmFjay10aXRsZSIsY2hpbGRyZW46YFx1MjZBMCAke3RoaXMucHJvcHMud2lkZ2V0SWR9YH0pLCgwLFRlLmpzeCkoInAiLHtjbGFzc05hbWU6IndpZGdldC1lcnJvci1mYWxsYmFjay1tZXNzYWdlIixjaGlsZHJlbjp0aGlzLnN0YXRlLmVycm9yPy5tZXNzYWdlfHwiQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCJ9KSwoMCxUZS5qc3gpKCJidXR0b24iLHtjbGFzc05hbWU6IndpZGdldC1lcnJvci1mYWxsYmFjay1yZXRyeSIsb25DbGljazooKT0+dGhpcy5zZXRTdGF0ZSh7aGFzRXJyb3I6ITEsZXJyb3I6bnVsbH0pLGNoaWxkcmVuOiJSZXRyeSJ9KV19KTp0aGlzLnByb3BzLmNoaWxkcmVufX07ZnVuY3Rpb24gVnQoZSx0LG4pe3JldHVybigwLG1lLm1lbW8pKGZ1bmN0aW9uKG8pe1NiKGUpO2xldHtjb25maWc6YSxkcmFnZ2luZ1dpZGdldElkOmksZm9jdXNlZFdpZGdldElkOnMsd2lkZ2V0Rm9jdXNUcmFuc2Zvcm06bH09byxjPXtncmlkSGVpZ2h0U2l6ZTpOdW1iZXIoYT8uZ3JpZEhlaWdodFNpemUpPjA/TnVtYmVyKGEuZ3JpZEhlaWdodFNpemUpOjEsZ3JpZFdpZHRoU2l6ZTpOdW1iZXIoYT8uZ3JpZFdpZHRoU2l6ZSk+MD9OdW1iZXIoYS5ncmlkV2lkdGhTaXplKToxfTtyZXR1cm4oMCxUZS5qc3gpKCJkaXYiLHsuLi5hQShhLGkscyxsKSxjaGlsZHJlbjooMCxUZS5qc3gpKERmLHt3aWRnZXRJZDplLGNoaWxkcmVuOigwLFRlLmpzeCkoRnAuUHJvdmlkZXIse3ZhbHVlOmMsY2hpbGRyZW46KDAsVGUuanN4KSh0LHsuLi5uKG8pfSl9KX0pfSl9KX1mdW5jdGlvbiBlcyguLi5lKXtyZXR1cm4gdD0+e2xldCBuPXt9O2ZvcihsZXQgciBvZiBlKW5bcl09dFtyXTtyZXR1cm4gbn19dmFyIGlBPVZ0KCJhZ2VuZGEiLFdwLCh7YWdlbmRhVGFza3M6ZSxhcHA6dCxjYWxlbmRhckV2ZW50czpuLGNhbGVuZGFyRXZlbnRzTG9hZGVkOnIsY3VycmVudERhdGU6byxzZWxlY3RlZERhdGU6YSx0aW1lRm9ybWF0Oml9KT0+KHthcHA6dCxjYWxlbmRhckV2ZW50czpyP246bnVsbCxjdXJyZW50RGF0ZTpvLHNlbGVjdGVkRGF0ZTphLHRhc2tzOmUsdGltZUZvcm1hdDppfSkpLHNBPVZ0KCJkYXktc2tldGNoIix1Ziwoe2FnZW5kYVRhc2tzOmUsYXBwOnQsY2FsZW5kYXJFdmVudHM6bixjYWxlbmRhckV2ZW50c0xvYWRlZDpyLGN1cnJlbnREYXRlOm8sdGltZUZvcm1hdDphfSk9Pih7YWdlbmRhVGFza3M6ZSxhcHA6dCxjYWxlbmRhckV2ZW50czpyP246bnVsbCxjdXJyZW50RGF0ZTpvLHRpbWVGb3JtYXQ6YX0pKSxsQT1WdCgiY2FsZW5kYXIiLEJwLCh7YXBwOmUsY29tcGxldGVkVGFza3NCeURhdGU6dCxjb25maWc6bixjdXJyZW50RGF0ZTpyLG9uRGF0ZVNlbGVjdDpvLG9uT3BlblNldHRpbmdzOmEsb3BlblRhc2tzOmksc2VsZWN0ZWREYXRlOnMsd2Vla0Zvcm1hdDpsfSk9Pih7YXBwOmUsY29tcGxldGVkVGFza3NCeURhdGU6dCxjdXJyZW50RGF0ZTpyLGdyaWRIZWlnaHRTaXplOm4/LmdyaWRIZWlnaHRTaXplLGdyaWRXaWR0aFNpemU6bj8uZ3JpZFdpZHRoU2l6ZSxvbkRhdGVTZWxlY3Q6byxvbk9wZW5TZXR0aW5nczphLG9wZW5UYXNrczppLHNlbGVjdGVkRGF0ZTpzLHdlZWtGb3JtYXQ6bH0pKSxjQT1WdCgiZGVidWctY29uc29sZSIsZGYsKCk9Pih7fSkpLHVBPVZ0KCJkcmVhbS10YXNrIix0Ziwoe2FwcDplLGNvbmZpZzp0LG9uT3BlblNldHRpbmdzOm4scHJvdmlkZXJBcGlLZXk6cixwcm92aWRlckVtOm99KT0+KHthcHA6ZSxncmlkSGVpZ2h0U2l6ZTpOdW1iZXIodD8uZ3JpZEhlaWdodFNpemUpfHwxLGdyaWRXaWR0aFNpemU6TnVtYmVyKHQ/LmdyaWRXaWR0aFNpemUpfHwyLG9uT3BlblNldHRpbmdzOm4scHJvdmlkZXJBcGlLZXk6cixwcm92aWRlckVtOm99KSksZEE9VnQoIm1vb2QiLHZmLGVzKCJhcHAiLCJtb29kUmF0aW5ncyIsIm9uTW9vZFJlY29yZGVkIikpLHBBPVZ0KCJwZWFrLWhvdXJzIixiZixlcygiYXBwIiwiY3VycmVudERhdGUiLCJzZWxlY3RlZERhdGUiLCJ0aW1lRm9ybWF0IikpLGZBPVZ0KCJwbGFubmluZyIsVXAsKHthcHA6ZSxjb25maWc6dCxxdWFydGVybHlQbGFuczpufSk9Pih7YXBwOmUsZ3JpZEhlaWdodFNpemU6TnVtYmVyKHQ/LmdyaWRIZWlnaHRTaXplKXx8MSxxdWFydGVybHlQbGFuczpufSkpLGhBPVZ0KCJxdWljay1hY3Rpb25zIix4ZixlcygiYXBwIikpLG1BPVZ0KCJxdW90ZXMiLGtmLCh7YXBwOmUsY29uZmlnOnQscHJvdmlkZXJBcGlLZXk6bn0pPT4oe2FwcDplLGdyaWRIZWlnaHRTaXplOk51bWJlcih0Py5ncmlkSGVpZ2h0U2l6ZSl8fDEscGxhbkNvbnRlbnQ6bnVsbCxwcm92aWRlckFwaUtleTpuLHF1b3RlczpudWxsfSkpLGdBPVZ0KCJyZWNlbnQtbm90ZXMiLEVmLCh7YXBwOmUsY29uZmlnOnQsdGFza0RvbWFpblVVSUQ6bn0pPT4oe2FwcDplLGdyaWRIZWlnaHRTaXplOk51bWJlcih0Py5ncmlkSGVpZ2h0U2l6ZSl8fDEsdGFza0RvbWFpblVVSUQ6bn0pKSx5QT1WdCgiZ3JhdmV5YXJkIixvZiwoe2FwcDplLGNvbmZpZzp0LHRhc2tEb21haW5VVUlEOm59KT0+KHthcHA6ZSxncmlkSGVpZ2h0U2l6ZTpOdW1iZXIodD8uZ3JpZEhlaWdodFNpemUpfHwxLGdyaWRXaWR0aFNpemU6TnVtYmVyKHQ/LmdyaWRXaWR0aFNpemUpfHwyLHRhc2tEb21haW5VVUlEOm59KSksdkE9VnQoInZpY3RvcnktdmFsdWUiLE5mLGVzKCJhcHAiLCJjb21wbGV0ZWRUYXNrc0J5RGF0ZSIsImRhaWx5VmFsdWVzIiwibW9vZFJhdGluZ3MiLCJvblJlZmVyZW5jZURhdGVDaGFuZ2UiLCJyZWZlcmVuY2VEYXRlIiwid2Vla0Zvcm1hdCIsIndlZWtseVRvdGFsIikpLHdBPVZ0KCJsYXlvdXQtcGlja2VyIixsZixlcygiYXBwIiwiY3VycmVudExheW91dCIsIm9uTGF5b3V0QXBwbHkiLCJvblNlbGVjdGVkUHJvZmlsZUNoYW5nZSIpKSxiQT17YWdlbmRhOmlBLGNhbGVuZGFyOmxBLCJkYXktc2tldGNoIjpzQSwiZGVidWctY29uc29sZSI6Y0EsImRyZWFtLXRhc2siOnVBLGdyYXZleWFyZDp5QSwibGF5b3V0LXBpY2tlciI6d0EsbW9vZDpkQSwicGVhay1ob3VycyI6cEEscGxhbm5pbmc6ZkEsInF1aWNrLWFjdGlvbnMiOmhBLHF1b3RlczptQSwicmVjZW50LW5vdGVzIjpnQSwidmljdG9yeS12YWx1ZSI6dkF9O2Z1bmN0aW9uIGtBKGUse2luaXREYXRhRnJlc2hSZWY6dCxpbml0aWFsaXplRG9tYWluVGFza3M6bixzZXRDb25maWdQYXJhbXM6cixzZXRDdXJyZW50RGF0ZTpvLHNldERhaWx5VmljdG9yeVZhbHVlczphLHNldE1vb2RSYXRpbmdzOmksc2V0UGx1Z2luTm90ZVVVSUQ6cyxzZXRRdWFydGVybHlQbGFuczpsLHNldFdlZWtseVZpY3RvcnlWYWx1ZTpjfSl7R2QoZS5zZXR0aW5ncz8uW0suQ09OU09MRV9MT0dHSU5HXSksRShgW2Rhc2hib2FyZF0gYXBwbHlEYXNoYm9hcmREYXRhIFx1MjAxNCB0YXNrczoke2UudGFza3M/Lmxlbmd0aD8/MH0gbW9vZFJhdGluZ3M6ICR7ZS5tb29kUmF0aW5ncz8ubGVuZ3RoPz8wfWApLG4oZSksaShlLm1vb2RSYXRpbmdzKSxsKGUucXVhcnRlcmx5UGxhbnMpLHIoZS5zZXR0aW5ncyksYShlLmRhaWx5VmljdG9yeVZhbHVlcyksYyhlLndlZWtseVZpY3RvcnlWYWx1ZSksbyhlLmN1cnJlbnREYXRlKSxlLnBsdWdpbk5vdGVVVUlEJiZzKGUucGx1Z2luTm90ZVVVSUQpLHQuY3VycmVudD0hMH1mdW5jdGlvbiBOYihlKXtsZXQgdD1uZXcgRGF0ZSxuPWhuKHQsZSk7cmV0dXJuIHQuZ2V0VGltZSgpLW4uZ2V0VGltZSgpPDMqMjQqNjAqNjAqMWUzfWZ1bmN0aW9uIHhBKGUsdCl7bGV0IG49bmV3IE1hcDtmb3IobGV0IHIgb2ZbLi4uZXx8W10sLi4udHx8W11dKXtpZighcnx8ci50aW1lc3RhbXA9PW51bGwpY29udGludWU7bGV0IG89ci51dWlkfHxgJHtyLnRpbWVzdGFtcH06JHtyLnJhdGluZ306JHtyLm5vdGV8fCIifWA7bi5zZXQobyxyKX1yZXR1cm4gQXJyYXkuZnJvbShuLnZhbHVlcygpKS5zb3J0KChyLG8pPT4oci50aW1lc3RhbXB8fDApLShvLnRpbWVzdGFtcHx8MCkpfWFzeW5jIGZ1bmN0aW9uIFNBKGUsdCxuLHIpe2xldCBvPWhuKHQscik7TmIocikmJihvPW5ldyBEYXRlKG8pLG8uc2V0RGF0ZShvLmdldERhdGUoKS03KSk7bGV0IGE9TWF0aC5mbG9vcihvLmdldFRpbWUoKS8xZTMpO3RyeXtsZXQgaT1hd2FpdCBlLmdldE1vb2RSYXRpbmdzKGEpO0FycmF5LmlzQXJyYXkoaSkmJm4ocz0+eEEocyxpKSl9Y2F0Y2goaSl7RSgiZmV0Y2hNb29kUmF0aW5nczogZmFpbGVkIHRvIGxvYWQgbW9vZCByYXRpbmdzIixpKX19ZnVuY3Rpb24gRUEoZSx0LG4scixvLGEpe2UocixvLGEpLGEmJih0KGEuZGFpbHlWaWN0b3J5VmFsdWVzKSxuKGEud2Vla2x5VmljdG9yeVZhbHVlKSl9YXN5bmMgZnVuY3Rpb24gVEEoZSx0LG4scixvPSExLGE9bnVsbCl7bGV0IGk9QXJyYXkuaXNBcnJheSh0Py5bSy5EQVNIQk9BUkRfQ09NUE9ORU5UU10pP3RbSy5EQVNIQk9BUkRfQ09NUE9ORU5UU106Z28scz17fTtvfHxpLmZvckVhY2goYz0+e3NbYy53aWRnZXRJZF09Y30pO2xldCBsPXIubWFwKGM9PntsZXQgdT1zW2NdLHA9QnQuZmluZChoPT5oLndpZGdldElkPT09YyksZD1hPy5bY107cmV0dXJue3dpZGdldElkOmMsZ3JpZFdpZHRoU2l6ZTpkPy5ncmlkV2lkdGhTaXplPz91Py5ncmlkV2lkdGhTaXplPz9wPy5kZWZhdWx0R3JpZFdpZHRoU2l6ZT8/MSxncmlkSGVpZ2h0U2l6ZTpkPy5ncmlkSGVpZ2h0U2l6ZT8/dT8uZ3JpZEhlaWdodFNpemU/PzEsc2V0dGluZ3M6dT8uc2V0dGluZ3N8fHt9fX0pO2F3YWl0IGUuc2V0U2V0dGluZyhLLkRBU0hCT0FSRF9DT01QT05FTlRTLEpTT04uc3RyaW5naWZ5KGwpKSxCbChLLkRBU0hCT0FSRF9DT01QT05FTlRTLGwpLG4oYz0+KHsuLi5jLFtLLkRBU0hCT0FSRF9DT01QT05FTlRTXTpsfSkpfWFzeW5jIGZ1bmN0aW9uIE5BKGUsdCxuLHIsbyxhLHthcGlLZXk6aSxhcGlLZXlQcm92aWRlcjpzLGJhY2tncm91bmRJbWFnZVVybDpsLGJhY2tncm91bmRNb2RlOmMsbGxtUHJvdmlkZXI6dSx0aW1lRm9ybWF0OnAsd2Vla0Zvcm1hdDpkfSl7RSgiW2Rhc2hib2FyZF0gaGFuZGxlU2V0dGluZ3NTYXZlIGNhbGxlZCB3aXRoOiIse2xsbVByb3ZpZGVyOnUsYXBpS2V5UHJvdmlkZXI6cyxiYWNrZ3JvdW5kTW9kZTpjLGJhY2tncm91bmRJbWFnZVVybDpsIT1udWxsPyIoc2V0KSI6Iih1bmNoYW5nZWQpIix0aW1lRm9ybWF0OnAsd2Vla0Zvcm1hdDpkfSk7bGV0IGg9V3Qoc3x8dSkseT1bZS5zZXRTZXR0aW5nKEsuTExNX1BST1ZJREVSX01PREVMLHUpLGUuc2V0U2V0dGluZyhLLkJBQ0tHUk9VTkRfSU1BR0VfVVJMLGx8fCIiKV07aCYmaSYmeS5wdXNoKGUuc2V0U2V0dGluZyhoLGkpKSxsJiZjJiZ5LnB1c2goZS5zZXRTZXR0aW5nKEsuQkFDS0dST1VORF9JTUFHRV9NT0RFLGMpKSx0LmN1cnJlbnQmJihwfHxkKSYmeS5wdXNoKHQuY3VycmVudC5zYXZlKHt0aW1lRm9ybWF0OnAsd2Vla0Zvcm1hdDpkfSkpO3RyeXthd2FpdCBQcm9taXNlLmFsbCh5KSxFKCJbZGFzaGJvYXJkXSBzZXR0aW5ncyBzYXZlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkiKX1jYXRjaChiKXtFKCJbZGFzaGJvYXJkXSBzZXR0aW5ncyBzYXZlIEZBSUxFRDoiLGIpfUJsKEsuTExNX1BST1ZJREVSX01PREVMLHUpLGgmJkJsKGgsaSk7bGV0IHc9e1tLLkxMTV9QUk9WSURFUl9NT0RFTF06dSxbSy5CQUNLR1JPVU5EX0lNQUdFX1VSTF06bHx8IiIsW0suQkFDS0dST1VORF9JTUFHRV9NT0RFXTpsP2N8fCJjb3ZlciI6IiJ9O2gmJih3W2hdPWkpLG4oYj0+KHsuLi5iLC4uLnd9KSkscCYmbyhwKSxkJiZhKGQpLHIoQXQuREVGQVVMVCl9ZnVuY3Rpb24gREEoZSx0KXtlKG49PlsuLi5ufHxbXSx0XSl9ZnVuY3Rpb24gX2Yoe2FwcDplLGluaXRQcm9taXNlOnR9KXtsZXR7YWN0aXZlVGFza0RvbWFpbjpuLGJ1aWxkQWdlbmRhVGFza3NCeURhdGU6cixpbml0aWFsaXplRG9tYWluVGFza3M6byxvbkRvbWFpbkNoYW5nZTphLG9wZW5UYXNrczppLHRhc2tEb21haW5zOnN9PW1mKCkse2NvbXBsZXRlZFRhc2tzQnlEYXRlOmwsZmV0Y2hDb21wbGV0ZWRUYXNrczpjfT1wZihlKSx7Y2FsZW5kYXJFdmVudHM6dSxjYWxlbmRhckV2ZW50c0xvYWRlZDpwfT1nZihlLG4pLFtkLGhdPSgwLG1lLnVzZVN0YXRlKShudWxsKSxbeSx3XT0oMCxtZS51c2VTdGF0ZSkobnVsbCksW2IsZ109KDAsbWUudXNlU3RhdGUpKG51bGwpLFttLHZdPSgwLG1lLnVzZVN0YXRlKShudWxsKSxbZix4XT0oMCxtZS51c2VTdGF0ZSkoQXQuREVGQVVMVCksW1MsTl09KDAsbWUudXNlU3RhdGUpKG51bGwpLFtELF9dPSgwLG1lLnVzZVN0YXRlKShudWxsKSxbQSxQXT0oMCxtZS51c2VTdGF0ZSkobnVsbCksW0ksTF09KDAsbWUudXNlU3RhdGUpKG51bGwpLFtVLEZdPSgwLG1lLnVzZVN0YXRlKSgibWVyaWRpYW4iKSxbSCxpZV09KDAsbWUudXNlU3RhdGUpKCJzdW5kYXkiKSxbTyxHXT0oMCxtZS51c2VTdGF0ZSkobnVsbCksVD0oMCxtZS51c2VSZWYpKG51bGwpLGs9KDAsbWUudXNlUmVmKSghMSksUj1IbChIKTsoMCxtZS51c2VFZmZlY3QpKCgpPT57bGV0IGZlPURhdGUubm93KCk7RSgiW2Rhc2hib2FyZF0gYXdhaXRpbmcgaW5pdCBkYXRhIiksdC50aGVuKGFzeW5jIE9lPT57aWYoRShgW2Rhc2hib2FyZF0gaW5pdCBkYXRhIHJlY2VpdmVkIGluICR7RGF0ZS5ub3coKS1mZX1tc2ApLE9lPy5lcnJvcil2KE9lLmVycm9yKTtlbHNle2J2KE9lKSxrQShPZSx7aW5pdERhdGFGcmVzaFJlZjprLGluaXRpYWxpemVEb21haW5UYXNrczpvLHNldENvbmZpZ1BhcmFtczpoLHNldEN1cnJlbnREYXRlOncsc2V0RGFpbHlWaWN0b3J5VmFsdWVzOmcsc2V0TW9vZFJhdGluZ3M6TixzZXRQbHVnaW5Ob3RlVVVJRDpfLHNldFF1YXJ0ZXJseVBsYW5zOlAsc2V0V2Vla2x5VmljdG9yeVZhbHVlOkd9KSxULmN1cnJlbnQ9bmV3IFlpKGUpO2xldCB2dD1EYXRlLm5vdygpO0UoIltkYXNoYm9hcmRdIGxvYWRpbmcgRGFzaGJvYXJkU2V0dGluZ05vdGUiKTtsZXR7dGltZUZvcm1hdDplbix3ZWVrRm9ybWF0OnZufT1hd2FpdCBULmN1cnJlbnQubG9hZCgpO0UoYFtkYXNoYm9hcmRdIERhc2hib2FyZFNldHRpbmdOb3RlIGxvYWRlZCBpbiAke0RhdGUubm93KCktdnR9bXNgKSxlbiYmRihlbiksdm4mJmllKHZuKX19KS5jYXRjaChPZT0+dihPZS5tZXNzYWdlKSl9LFtdKTtsZXQgJD0oMCxtZS51c2VNZW1vKSgoKT0+e2lmKEkpcmV0dXJuIEk7aWYoIXkpcmV0dXJuIG51bGw7aWYoTmIoUikpe2xldCBmZT1obih5LFIpLE9lPW5ldyBEYXRlKGZlKTtyZXR1cm4gT2Uuc2V0RGF0ZShPZS5nZXREYXRlKCktMSksRmUoT2UpfXJldHVybiB5fSxbeSxJLFJdKSxYPSgwLG1lLnVzZUNhbGxiYWNrKShmZT0+U0EoZSxmZSxOLFIpLFtlLFJdKTsoMCxtZS51c2VFZmZlY3QpKCgpPT57bGV0IGZlPUl8fHk7ZmUmJihrLmN1cnJlbnQ/ay5jdXJyZW50PSExOlgoZmUpLG4mJihjKGZlLG4pLCQmJiQhPT1mZSYmYygkLG4pKSl9LFtuLHksYyxYLEksJF0pO2xldCBaPSgwLG1lLnVzZUNhbGxiYWNrKSgoZmUsT2UsdnQpPT5FQShhLGcsRyxmZSxPZSx2dCksW2FdKSxlZT0oMCxtZS51c2VDYWxsYmFjaykoKGZlLE9lPSExLHZ0PW51bGwpPT5UQShlLGQsaCxmZSxPZSx2dCksW2UsZF0pLHE9KDAsbWUudXNlQ2FsbGJhY2spKGZlPT5oKE9lPT4oey4uLk9lLFtLLlNFTEVDVEVEX0xBWU9VVF9QUk9GSUxFXTpmZX0pKSxbXSksb2U9KDAsbWUudXNlQ2FsbGJhY2spKGFzeW5jKGZlLE9lPSExLHZ0PW51bGwsZW49dm9pZCAwKT0+e2F3YWl0IHNmKHthcHA6ZSxpc1Jlc2V0Ok9lLG9uTGF5b3V0UGVyc2lzdDplZSxvblNlbGVjdGVkUHJvZmlsZUNoYW5nZTpxLHByb2ZpbGVJZDplbixzaXppbmc6dnQsd2lkZ2V0SWRzOmZlfSkseChBdC5ERUZBVUxUKX0sW2UsZWUscV0pLHBlPSgwLG1lLnVzZUNhbGxiYWNrKShmZT0+TkEoZSxULGgseCxGLGllLGZlKSxbZV0pLGdlPSgwLG1lLnVzZUNhbGxiYWNrKShmZT0+REEoTixmZSksW10pO1pwKHthY3RpdmVUYXNrRG9tYWluOm4sYXBwOmUsb25Eb21haW5DaGFuZ2U6YSxvcGVuVGFza3M6aX0pO2xldCB0ZT0oMCxtZS51c2VNZW1vKSgoKT0+eT9yKHkpOnt9LFtyLHldKSx7YWN0aXZlQ29tcG9uZW50czpzZX09ZmYoe2NvbmZpZ1BhcmFtczpkfSkse2RyYWdnaW5nV2lkZ2V0SWQ6dWUsZGlzcGxheWVkQ29tcG9uZW50czpuZX09b3coc2UsZWUpLHtjbGVhckZvY3VzZWRXaWRnZXQ6QWUsZm9jdXNlZFdpZGdldElkOlhlLGlzV2lkZ2V0Rm9jdXNNb2RlOlplLHdpZGdldEZvY3VzVHJhbnNmb3Jtczp5dH09eDAodWUsZiksUHQ9KDAsbWUudXNlQ2FsbGJhY2spKCgpPT54KEF0LlNFVFRJTkdTX0NPTkZJRyksW10pO2lmKG0pcmV0dXJuKDAsVGUuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWVycm9yIixjaGlsZHJlbjpbKDAsVGUuanN4KSgiaDIiLHtjaGlsZHJlbjoiRGFzaGJvYXJkIEVycm9yIn0pLCgwLFRlLmpzeCkoInAiLHtjaGlsZHJlbjptfSldfSk7aWYoIWQpcmV0dXJuKDAsVGUuanN4KSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtb3V0ZXItY29udGFpbmVyIixjaGlsZHJlbjooMCxUZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtbG9hZGluZyIsY2hpbGRyZW46WygwLFRlLmpzeCkoImRpdiIse2NsYXNzTmFtZToic3Bpbm5lciJ9KSwoMCxUZS5qc3gpKCJwIix7Y2hpbGRyZW46IkxvYWRpbmcgZGFzaGJvYXJkLi4uIn0pXX0pfSk7bGV0IFVlPWQ/LltLLkJBQ0tHUk9VTkRfSU1BR0VfVVJMXSxFdD1kPy5bSy5CQUNLR1JPVU5EX0lNQUdFX01PREVdfHwiY292ZXIiLExuPVVlfHxjYygibGFyZ2UiLEZlKHl8fG5ldyBEYXRlKSk7VWUmJkUoIltkYXNoYm9hcmRdIGJhY2tncm91bmQgaW1hZ2UgVVJMIGZyb20gc2V0dGluZ3M6IixVZSwibW9kZToiLEV0KTtsZXQgZ249TG4/KCgpPT57bGV0IGZlPUV0LnN0YXJ0c1dpdGgoInJlcGVhdCIpO3JldHVybntiYWNrZ3JvdW5kSW1hZ2U6YHVybCgke0xufSlgLGJhY2tncm91bmRTaXplOmZlPyJhdXRvIjpFdCxiYWNrZ3JvdW5kUmVwZWF0OmZlP0V0OiJuby1yZXBlYXQiLGJhY2tncm91bmRQb3NpdGlvbjoiY2VudGVyIixiYWNrZ3JvdW5kQXR0YWNobWVudDoiZml4ZWQifX0pKCk6dm9pZCAwLHluPVN0cmluZyhkW0suREVCVUdfQ09OU09MRV18fCIiKS50cmltKCk9PT0idHJ1ZSJ8fERufHxGaSgpLnBsdWdpblVVSUQ9PT0iNmRhMDM1NzQtMGY0Yi0xMWYxLWJhOWUtMTFiYTljNzE2ZjU5Ijt5bj9FKGBbZGFzaGJvYXJkXSBEZWJ1ZyBjb25zb2xlIGVuYWJsZWQgKGNvbmZpZ1BhcmFtcyAke2RbSy5ERUJVR19DT05TT0xFXX0gYXBwIHNldHRpbmcga2V5cyAke09iamVjdC5rZXlzKGUuc2V0dGluZ3MpfSwgJHtGaSgpLnBsdWdpblVVSUR9KSwgaW5jbHVkaW5nIGluIGxheW91dCBwb3B1cGApOkUoYFtkYXNoYm9hcmRdIERlYnVnIGNvbnNvbGUgZGlzYWJsZWQgKCR7Sy5ERUJVR19DT05TT0xFfSBpcyAnJHtkPy5bSy5ERUJVR19DT05TT0xFXX0nLCBwbHVnaW5VVUlEICR7RmkoKS5wbHVnaW5VVUlEfSwgY29udGV4dCAke0pTT04uc3RyaW5naWZ5KEZpKCkpfSksIGV4Y2x1ZGluZyBmcm9tIGxheW91dCBwb3B1cGApO2xldCB3cj15bj9bXTpbImRlYnVnLWNvbnNvbGUiXSx6bj1BcnJheS5pc0FycmF5KGQ/LltLLkRBU0hCT0FSRF9DT01QT05FTlRTXSk/ZFtLLkRBU0hCT0FSRF9DT01QT05FTlRTXTpnbztyZXR1cm4oMCxUZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtb3V0ZXItY29udGFpbmVyIixzdHlsZTpnbixjaGlsZHJlbjpbZj09PUF0LkxBWU9VVF9DT05GSUc/KDAsVGUuanN4KShIcCx7Y3VycmVudExheW91dDp6bixleGNsdWRlV2lkZ2V0SWRzOndyLG9uU2F2ZTpvZSxvbkNhbmNlbDooKT0+eChBdC5ERUZBVUxUKSxzZWxlY3RlZExheW91dFByb2ZpbGU6ZD8uW0suU0VMRUNURURfTEFZT1VUX1BST0ZJTEVdfHxudWxsfSk6bnVsbCxmPT09QXQuU0VUVElOR1NfQ09ORklHPyhFKCJbZGFzaGJvYXJkXSByZW5kZXJpbmcgRGFzaGJvYXJkU2V0dGluZ3NQb3B1cCwgYmdVcmw6IixkPy5bSy5CQUNLR1JPVU5EX0lNQUdFX1VSTF0pLCgwLFRlLmpzeCkoS3Ase2FwcDplLGNvbmZpZ1BhcmFtczpkLG9uQ2FuY2VsOigpPT54KEF0LkRFRkFVTFQpLG9uU2F2ZTpwZSxwbHVnaW5Ob3RlVVVJRDpELHRpbWVGb3JtYXQ6VSx3ZWVrRm9ybWF0Okh9KSk6bnVsbCwoMCxUZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtY29udGVudCIsY2hpbGRyZW46WygwLFRlLmpzeHMpKCJkaXYiLHtjbGFzc05hbWU6ImRhc2hib2FyZC10b29sYmFyIixjaGlsZHJlbjpbKDAsVGUuanN4KShUZix7YWN0aXZlVGFza0RvbWFpbjpuLGFwcDplLGRvbWFpbnM6cyxvbkRvbWFpbkNoYW5nZTpafSksKDAsVGUuanN4cykoImRpdiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLXRvb2xiYXItYWN0aW9ucyIsY2hpbGRyZW46WygwLFRlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWNvbmZpZ3VyZS1idXR0b24iLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e0UoIltkYXNoYm9hcmRdIG9wZW5pbmcgU2V0dGluZ3MgcG9wdXAiKSx4KEF0LlNFVFRJTkdTX0NPTkZJRyl9LHRpdGxlOiJDb25maWd1cmUgTExNIHByb3ZpZGVyIGFuZCBBUEkga2V5IGZvciBBSS1wb3dlcmVkIGZlYXR1cmVzIixjaGlsZHJlbjoiXHUyNjk5XHVGRTBGIFNldHRpbmdzIn0pLCgwLFRlLmpzeCkoImJ1dHRvbiIse2NsYXNzTmFtZToiZGFzaGJvYXJkLWNvbmZpZ3VyZS1idXR0b24iLHR5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+eChBdC5MQVlPVVRfQ09ORklHKSx0aXRsZToiQ29uZmlndXJlIHdoaWNoIHdpZGdldHMgYXJlIHNob3duIGFuZCBpbiB3aGF0IG9yZGVyIixjaGlsZHJlbjoiXHUyNjMwIExheW91dCJ9KV19KV19KSwoMCxUZS5qc3hzKSgiZGl2Iix7Y2xhc3NOYW1lOmBkYXNoYm9hcmQtZ3JpZC1zaGVsbCR7WmU/IiBkYXNoYm9hcmQtZ3JpZC1zaGVsbC0tZm9jdXNlZCI6IiJ9YCxjaGlsZHJlbjpbWmU/KDAsVGUuanN4KSgiYnV0dG9uIix7Y2xhc3NOYW1lOiJkYXNoYm9hcmQtZ3JpZC1mb2N1cy1iYWNrZHJvcCIsdHlwZToiYnV0dG9uIix0aXRsZToiUmV0dXJuIGFsbCB3aWRnZXRzIHRvIHRoZSBkYXNoYm9hcmQgZ3JpZCIsImFyaWEtbGFiZWwiOiJSZXR1cm4gYWxsIHdpZGdldHMgdG8gdGhlIGRhc2hib2FyZCBncmlkIixvbkNsaWNrOkFlfSk6bnVsbCwoMCxUZS5qc3gpKCJkaXYiLHtjbGFzc05hbWU6YGRhc2hib2FyZC1ncmlkJHt1ZT8iIGRhc2hib2FyZC1ncmlkLS1kcmFnZ2luZyI6IiJ9JHtaZT8iIGRhc2hib2FyZC1ncmlkLS1mb2N1c2VkIjoiIn1gLGNoaWxkcmVuOm5lLm1hcCgoZmUsT2UpPT57bGV0IHZ0PWZlPy53aWRnZXRJZHx8Z29bT2VdPy53aWRnZXRJZCxlbj1iQVt2dF07aWYoIWVuKXJldHVybiBudWxsO2xldCB2bj1kPy5bSy5MTE1fUFJPVklERVJfTU9ERUxdLFhyPVdyKHZuKSxQbz1Ycj9XdChYcik6bnVsbCxDPVBvJiZkPy5bUG9dfHwiIjtyZXR1cm4oMCxUZS5qc3gpKGVuLHthZ2VuZGFUYXNrczp0ZSxhcHA6ZSxjYWxlbmRhckV2ZW50czp1LGNhbGVuZGFyRXZlbnRzTG9hZGVkOnAsY29tcGxldGVkVGFza3NCeURhdGU6bCxjb25maWc6ZmUsY3VycmVudERhdGU6eSxkYWlseVZhbHVlczpiLGRyYWdnaW5nV2lkZ2V0SWQ6dWUsZm9jdXNlZFdpZGdldElkOlhlLG1vb2RSYXRpbmdzOlMsb25EYXRlU2VsZWN0OkwsY3VycmVudExheW91dDp6bixvbkxheW91dEFwcGx5OmVlLG9uU2VsZWN0ZWRQcm9maWxlQ2hhbmdlOnEsb25Nb29kUmVjb3JkZWQ6Z2Usb25PcGVuU2V0dGluZ3M6UHQsb25SZWZlcmVuY2VEYXRlQ2hhbmdlOkwsb3BlblRhc2tzOmkscHJvdmlkZXJBcGlLZXk6Qyxwcm92aWRlckVtOlhyfHx2bnx8bnVsbCxxdWFydGVybHlQbGFuczpBLHJlZmVyZW5jZURhdGU6JCxzZWxlY3RlZERhdGU6SSx0YXNrRG9tYWluVVVJRDpuLHRpbWVGb3JtYXQ6VSx3ZWVrRm9ybWF0Okgsd2Vla2x5VG90YWw6Tyx3aWRnZXRGb2N1c1RyYW5zZm9ybTp5dFt2dF18fG51bGx9LHZ0KX0pLmZpbHRlcihCb29sZWFuKX0pXX0pXX0pXX0pfXZhciBfYj16KHJlKCksMSksX0E9NDMwLENBPSJkYXNoYm9hcmQtbGFyZ2UtcGhvbmUtdmlld3BvcnQiOyhmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtsZXQgbj1NYXRoLm1pbihzY3JlZW4ud2lkdGgsc2NyZWVuLmhlaWdodCkscj13aW5kb3cubWF0Y2hNZWRpYSgiKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIikubWF0Y2hlcz9NYXRoLm1heChzY3JlZW4ud2lkdGgsc2NyZWVuLmhlaWdodCk6bjtpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDQSxyPD1fQSkscj49d2luZG93LmlubmVyV2lkdGgpe2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5tYXhXaWR0aD0iIixkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dYPSIiLGRvY3VtZW50LmJvZHkuc3R5bGUubWF4V2lkdGg9IiIsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvd1g9IiI7cmV0dXJufWxldCBvPXIrInB4Ijtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUubWF4V2lkdGg9byxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dYPSJoaWRkZW4iLGRvY3VtZW50LmJvZHkuc3R5bGUubWF4V2lkdGg9byxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93WD0iaGlkZGVuIn10KCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdCl9KSgpO3ZhciB3YyxDZjtEbj8od2M9WWQoKSxDZj13Yy5pbml0KCkpOih3Yz1uZXcgUHJveHkoe30se2dldChlLHQpe2lmKHR5cGVvZiB0IT0ic3ltYm9sIilyZXR1cm4oLi4ubik9PndpbmRvdy5jYWxsQW1wbGVub3RlUGx1Z2luKHQsLi4ubil9fSksQ2Y9d2luZG93LmNhbGxBbXBsZW5vdGVQbHVnaW4oImluaXQiKSk7KDAsRGIuY3JlYXRlUm9vdCkoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhc2hib2FyZC1yb290IikpLnJlbmRlcigoMCxfYi5qc3gpKF9mLHthcHA6d2MsaW5pdFByb21pc2U6Q2Z9KSk7fSkoKTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCnJlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qczoKICAoKioKICAgKiBAbGljZW5zZSBSZWFjdAogICAqIHJlYWN0LnByb2R1Y3Rpb24ubWluLmpzCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICAgKgogICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogICAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICAgKikKCnNjaGVkdWxlci9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzOgogICgqKgogICAqIEBsaWNlbnNlIFJlYWN0CiAgICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICAgKgogICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogICAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICAgKikKCnJlYWN0LWRvbS9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzOgogICgqKgogICAqIEBsaWNlbnNlIFJlYWN0CiAgICogcmVhY3QtZG9tLnByb2R1Y3Rpb24ubWluLmpzCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICAgKgogICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogICAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICAgKikKCnJlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qczoKICAoKioKICAgKiBAbGljZW5zZSBSZWFjdAogICAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICAgKgogICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogICAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICAgKikKKi8K";
var compiledCSS = `[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{border-radius:6px;font-size:.75rem;line-height:1.4;outline:0;position:relative;transition-property:transform,visibility,opacity;white-space:normal}.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}.tippy-content{padding:8px 12px;position:relative;z-index:1}.tippy-arrow{color:var(--dashboard-color-tooltip-bg);height:16px;width:16px}.tippy-arrow:before{border-color:#0000;border-style:solid;content:"";position:absolute}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{border-top-color:initial;border-width:8px 8px 0;bottom:-7px;left:0;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:initial;border-width:0 8px 8px;left:0;top:-7px;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-left-color:initial;border-width:8px 0 8px 8px;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{border-right-color:initial;border-width:8px 8px 8px 0;left:-7px;transform-origin:center right}.tippy-box[data-theme~=dashboard]{background:var(--dashboard-color-tooltip-bg);box-shadow:0 4px 12px var(--dashboard-color-tooltip-shadow);color:var(--dashboard-color-tooltip-text);max-width:260px;min-width:180px}.tippy-box[data-theme~=dashboard]>.tippy-arrow{color:var(--dashboard-color-tooltip-bg)}.tippy-box[data-theme~=dashboard].below-chart>.tippy-content{max-height:40vh;overflow-y:auto}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-header{border-bottom:1px solid var(--dashboard-color-tooltip-border);font-weight:600;margin-bottom:4px;padding-bottom:4px}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-section{border-bottom:1px solid var(--dashboard-color-tooltip-border);margin-bottom:4px;padding-bottom:4px}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row{align-items:baseline;display:flex;gap:8px;justify-content:space-between;padding:2px 0}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row-label p{display:inline;margin:0}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-row-value{color:var(--dashboard-color-tooltip-accent);flex-shrink:0;font-weight:600}.tippy-box[data-theme~=dashboard] .dashboard-tooltip-empty{color:var(--dashboard-color-tooltip-text-muted);font-style:italic}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-date{border-bottom:1px solid var(--dashboard-color-tooltip-border);font-weight:600;margin-bottom:4px;padding-bottom:4px}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-entry{align-items:baseline;display:flex;flex-wrap:wrap;gap:4px 6px;padding:2px 0}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-time{color:var(--dashboard-color-tooltip-text-muted);font-size:.7rem;min-width:52px}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-mood .mood-viz-label{color:var(--dashboard-color-tooltip-text-muted)}.tippy-box[data-theme~=dashboard] .mood-viz-tooltip-note{color:var(--dashboard-color-tooltip-text);flex-basis:100%;font-size:.7rem;font-style:italic;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-word}.widget .widget-body{overflow-y:auto}.widget .widget-heading-bar,.widget .widget-title{align-items:center;display:flex}.widget .widget-title__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget .widget-header-action{text-decoration:none;white-space:nowrap}.widget .widget-header-action:hover{text-decoration:underline}.widget-planning .planning-quarters{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:16px}.widget-planning .quarter-card{border:2px dashed var(--dashboard-color-border);border-radius:10px;cursor:pointer;display:flex;flex:1 1 140px;flex-direction:column;gap:4px;min-width:0;padding:12px 16px;transition:background .15s,border-color .15s}.widget-planning .quarter-card:hover{border-color:var(--dashboard-color-blue)}.widget-planning .quarter-card--has-plan{background:var(--dashboard-color-plan-created-bg);border-color:var(--dashboard-color-plan-created-border);border-style:solid}.widget-planning .quarter-card--has-plan:hover{border-color:var(--dashboard-color-plan-created-border);filter:brightness(.97)}.widget-planning .quarter-card .quarter-label{color:var(--dashboard-color-navy);font-size:.95rem;font-weight:700}.widget-planning .quarter-card .quarter-status-row{align-items:center;display:flex;gap:8px;justify-content:space-between}.widget-planning .quarter-card .quarter-status{color:var(--dashboard-color-text-secondary);font-size:.75rem}.widget-planning .quarter-card .quarter-plan-indicator{cursor:default;flex-shrink:0;font-size:.85rem;line-height:1}.widget-planning .month-tabs{display:flex;flex-wrap:wrap;gap:4px}.widget-planning .month-tab{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex:1;font-size:.8rem;padding:8px 12px;transition:background .15s,color .15s}.widget-planning .month-tab:hover{background:var(--dashboard-color-blue-light)}.widget-planning .month-tab.active{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent);font-weight:600}.widget-planning .month-content-area{border:1px solid var(--dashboard-color-border);border-radius:6px;margin-top:12px;overflow:hidden;padding:12px 16px}.widget-planning .month-content-loading{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic}.widget-planning .month-content-header{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700;margin-bottom:8px}.widget-planning .month-content-text{color:var(--dashboard-color-text);font-size:.8rem;line-height:1.4}.widget-planning .month-content-text p{margin:0 0 4px}.widget-planning .month-content-text ol,.widget-planning .month-content-text ul{margin:0 0 4px;padding-left:16px}.widget-planning .month-content-text li{margin:0;padding:0}.widget-planning .month-content-text strong{color:var(--dashboard-color-navy)}.widget-planning .month-content-text>:last-child{margin-bottom:0}.widget-planning .month-content-empty{text-align:center}.widget-planning .create-month-plan-link{background:none;border:2px dashed var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-link);cursor:pointer;font-size:.8rem;padding:8px 16px;transition:border-color .15s,color .15s}.widget-planning .create-month-plan-link:hover{border-color:var(--dashboard-color-blue);color:var(--dashboard-color-navy)}.widget-planning .planning-empty{color:var(--dashboard-color-text-muted);font-size:.85rem;font-style:italic;padding:16px 0;text-align:center}.widget-planning .weekly-plan-section{border-top:1px solid var(--dashboard-color-border);margin-top:16px;padding-top:12px}.widget-planning .weekly-plan-header{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700;margin-bottom:8px}.widget-planning .weekly-plan-loading{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic}.widget-planning .create-week-plan-link{background:none;border:2px dashed var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-link);cursor:pointer;font-size:.8rem;padding:8px 16px;transition:border-color .15s,color .15s;width:100%}.widget-planning .create-week-plan-link:hover{border-color:var(--dashboard-color-blue);color:var(--dashboard-color-navy)}.widget-planning .note-editor{display:flex;flex-direction:column;gap:8px;height:100%}.widget-planning .note-editor-loading{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic;padding:12px}.widget-planning .note-editor-toolbar{display:flex;gap:8px}.widget-planning .note-editor-btn{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;cursor:pointer;font-size:.8rem;padding:4px 12px;transition:background .15s}.widget-planning .note-editor-btn:hover{background:var(--dashboard-color-blue-light)}.widget-planning .note-editor-btn--save{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent);font-weight:600}.widget-planning .note-editor-btn--save:hover{filter:brightness(.92)}.widget-planning .note-editor-btn--save:disabled{cursor:default;opacity:.6}.widget-planning .note-editor-textarea{border:1px solid var(--dashboard-color-border);border-radius:6px;flex:1;font-family:monospace;font-size:.8rem;line-height:1.5;min-height:180px;padding:12px;resize:vertical}.rich-footnote-wrap{display:inline}.rich-footnote-indicator{cursor:default;display:inline-block;font-size:.65em;margin-left:2px;opacity:.65;vertical-align:super}.rich-footnote-indicator:hover{opacity:1}.tippy-box[data-theme~=rich-footnote]{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:10px;box-shadow:0 4px 16px var(--dashboard-color-overlay-shadow);color:var(--dashboard-color-text);font-size:.85rem;line-height:1.5;max-width:420px;min-width:200px}.tippy-box[data-theme~=rich-footnote]>.tippy-arrow{color:var(--dashboard-color-bg-card)}.tippy-box[data-theme~=rich-footnote]>.tippy-content{padding:12px}.rich-footnote-popup{display:flex;flex-direction:column;gap:8px}.rich-footnote-popup-url{align-items:center;display:flex;gap:4px}.rich-footnote-popup-url svg{color:var(--dashboard-color-accent);flex-shrink:0}.rich-footnote-popup-url a{color:var(--dashboard-color-link);overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.rich-footnote-popup-url a:hover{text-decoration:underline}.rich-footnote-popup-text{color:var(--dashboard-color-text)}.rich-footnote-popup-media{border-radius:6px;overflow:hidden}.rich-footnote-popup-media img,.rich-footnote-popup-media video,.rich-footnote-popup-media iframe{display:block;max-width:100%;width:100%}.rich-footnote-popup-media iframe{aspect-ratio:16/9;border:0}.rich-footnote-popup-actions{border-top:1px solid var(--dashboard-color-border);display:flex;justify-content:flex-end;padding-top:8px}.rich-footnote-popup-close{background:none;border:none;color:var(--dashboard-color-accent);cursor:pointer;font-size:.8rem;font-weight:600;letter-spacing:.5px;padding:4px 8px}.rich-footnote-popup-close:hover{opacity:.8}.widget-agenda a{color:var(--dashboard-color-link);text-decoration:none}.widget-agenda a:hover{text-decoration:underline}.widget-agenda img{max-width:100%}.widget-agenda .widget-body{display:flex;flex-direction:column;overflow:hidden}.widget-agenda .agenda-list{display:flex;flex:1;flex-direction:column;gap:12px;min-height:0;overflow-x:hidden;overflow-y:auto;padding-right:4px}.widget-agenda .agenda-day{display:flex;flex-direction:column;gap:4px}.widget-agenda .agenda-date-label{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase}.widget-agenda .agenda-empty-day{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic;padding:4px 0}.widget-agenda .agenda-item{align-items:center;display:flex;gap:12px;padding:8px 0}.widget-agenda .agenda-item .agenda-indicator{border-radius:2px;flex-shrink:0;height:36px;width:4px}.widget-agenda .agenda-item .agenda-indicator.priority-critical{background-color:var(--dashboard-color-agenda-priority-critical)}.widget-agenda .agenda-item .agenda-indicator.priority-important{background-color:var(--dashboard-color-agenda-priority-important)}.widget-agenda .agenda-item .agenda-indicator.priority-urgent{background-color:var(--dashboard-color-agenda-priority-urgent)}.widget-agenda .agenda-item .agenda-indicator.priority-normal{background-color:var(--dashboard-color-agenda-priority-normal)}.widget-agenda .agenda-item .agenda-content{display:flex;flex:1;flex-direction:column;gap:4px}.widget-agenda .agenda-item .agenda-content .agenda-time{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:600}.widget-agenda .agenda-item .agenda-content .agenda-text{color:var(--dashboard-color-text);font-size:.85rem;overflow:hidden;white-space:nowrap}.widget-agenda .agenda-item .agenda-content .agenda-note-link{background:#0000;border:0;color:var(--dashboard-color-link);cursor:pointer;font-size:.72rem;margin:0;padding:0;text-align:left;text-decoration:underline}.widget-agenda .agenda-item .agenda-duration{color:var(--dashboard-color-text-muted);font-size:.7rem}.widget-agenda .agenda-task-row{border-radius:6px;cursor:pointer;padding:8px;transition:background-color .12s ease}.widget-agenda .agenda-task-row:hover{background:var(--dashboard-color-bg-page)}.widget-agenda .agenda-empty{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:24px 0;text-align:center}.widget-agenda .agenda-pagination{align-items:center;display:flex;gap:4px}.widget-agenda .agenda-page-arrow{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.65rem;line-height:1;padding:2px 4px}.widget-agenda .agenda-page-arrow:hover:not(:disabled){color:var(--dashboard-color-navy)}.widget-agenda .agenda-page-arrow:disabled{cursor:default;opacity:.3}.widget-agenda .agenda-page-indicator{color:var(--dashboard-color-text-muted);font-size:.7rem;white-space:nowrap}.widget-calendar.vertical-2-cell .cal-arrow{font-size:.9rem}.widget-calendar.vertical-2-cell .cal-month{font-size:1.1rem}.widget-calendar.vertical-2-cell .cal-header{font-size:.85rem}.widget-calendar.vertical-2-cell .cal-cell{padding-top:0}.widget-calendar.vertical-2-cell .cal-cell .cal-day{font-size:16px;top:0}.widget-calendar.vertical-2-cell .cal-cell .cal-dot{bottom:18%;height:6px;width:6px}.widget-calendar.horizontal-2-cell.vertical-1-cell .widget-body{display:flex;flex-direction:column;padding:8px 16px}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-nav{margin-bottom:8px}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-grid{flex:1}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-header{padding:2px 0}.widget-calendar.horizontal-2-cell.vertical-1-cell .cal-cell{aspect-ratio:auto;border-radius:12px}.widget-calendar .cal-nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:12px}.widget-calendar .cal-arrow{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;padding:4px}.widget-calendar .cal-arrow:hover{color:var(--dashboard-color-navy)}.widget-calendar .cal-month{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700}.widget-calendar .cal-grid{display:grid;gap:2px;grid-template-columns:repeat(7,1fr);text-align:center}.widget-calendar .cal-header{color:var(--dashboard-color-text-muted);font-size:.7rem;font-weight:600;padding:4px 0}.widget-calendar .cal-cell{align-items:center;aspect-ratio:1;border-radius:50%;cursor:pointer;display:flex;flex-direction:column;justify-content:center;padding:4px 0;position:relative;transition:background-color .12s ease}.widget-calendar .cal-cell:not(.empty):hover{background:var(--dashboard-color-blue-light)}.widget-calendar .cal-cell.empty{cursor:default;visibility:hidden}.widget-calendar .cal-cell.today{background:var(--dashboard-color-blue)}.widget-calendar .cal-cell.today .cal-day{color:var(--dashboard-color-text-on-accent);font-weight:700}.widget-calendar .cal-cell.today:hover{background:var(--dashboard-color-navy)}.widget-calendar .cal-cell.selected{outline:2px solid var(--dashboard-color-accent);outline-offset:0}.widget-calendar .cal-cell.today.selected{outline-color:var(--dashboard-color-accent)}.widget-calendar .cal-cell .cal-day{color:var(--dashboard-color-text);font-size:.8rem;position:relative;top:-2px}.widget-calendar .cal-cell .cal-dot{border-radius:50%;bottom:6px;height:4px;position:absolute;width:4px}@media (max-width: 430px){.widget-calendar .cal-cell{aspect-ratio:auto;min-height:32px}.widget-calendar .cal-cell .cal-dot{bottom:auto;margin-top:6px;position:static}}.dashboard-large-phone-viewport .widget-calendar .cal-cell{aspect-ratio:auto;min-height:32px}.dashboard-large-phone-viewport .widget-calendar .cal-cell .cal-dot{bottom:auto;margin-top:6px;position:static}.dashboard-layout-popup{display:flex;flex-direction:column;margin:16px;max-height:min(800px,100vh - 32px);max-width:min(800px,100vw - 32px);min-width:0;width:100%}.dashboard-layout-popup .dashboard-layout-popup-tabs{display:flex;gap:4px;margin-top:12px}.dashboard-layout-popup .dashboard-layout-popup-tab{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex:1;font-size:.8rem;padding:8px 12px;transition:background .15s ease,color .15s ease}.dashboard-layout-popup .dashboard-layout-popup-tab:hover{background:var(--dashboard-color-blue-light)}.dashboard-layout-popup .dashboard-layout-popup-tab.active{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent);font-weight:600}.dashboard-layout-popup .dashboard-layout-popup-body{display:flex;flex:1;flex-direction:column;gap:16px;overflow-y:auto;padding:16px}.dashboard-layout-popup .dashboard-layout-popup-section{border:2px dashed rgba(0,0,0,0);border-radius:10px;padding:4px;transition:border-color .15s ease,background .15s ease}.dashboard-layout-popup .dashboard-layout-popup-section--drag-over{background:var(--dashboard-color-blue-light);border-color:var(--dashboard-color-accent)}.dashboard-layout-popup .dashboard-layout-popup-section-header{align-items:center;border-bottom:1px solid var(--dashboard-color-border);display:flex;gap:8px;margin-bottom:8px;padding-bottom:8px}.dashboard-layout-popup .dashboard-layout-popup-section-icon{flex-shrink:0;font-size:.9rem;line-height:1}.dashboard-layout-popup .dashboard-layout-popup-section-title{color:var(--dashboard-color-text-secondary);font-size:.72rem;font-weight:700;letter-spacing:.05em;margin:0;text-transform:uppercase}.dashboard-layout-popup .dashboard-layout-popup-list{display:flex;flex-direction:column;gap:4px}.dashboard-layout-popup .dashboard-layout-popup-item{align-items:center;background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;cursor:grab;display:flex;gap:8px;padding:8px 12px;transition:opacity .12s ease,box-shadow .12s ease,background .12s ease;-webkit-user-select:none;user-select:none}.dashboard-layout-popup .dashboard-layout-popup-item:active{cursor:grabbing}.dashboard-layout-popup .dashboard-layout-popup-item--dragging{opacity:.35}.dashboard-layout-popup .dashboard-layout-popup-item--drag-over{background:var(--dashboard-color-bg-card);box-shadow:0 -2px 0 var(--dashboard-color-accent)}.dashboard-layout-popup .dashboard-layout-popup-item-handle{color:var(--dashboard-color-text-muted);cursor:grab;flex-shrink:0;font-size:1rem;line-height:1}.dashboard-layout-popup .dashboard-layout-popup-item-handle:active{cursor:grabbing}.dashboard-layout-popup .dashboard-layout-popup-item-icon{flex-shrink:0;font-size:1rem;line-height:1}.dashboard-layout-popup .dashboard-layout-popup-item-info{display:flex;flex:1;flex-direction:column;gap:1px;min-width:0;overflow:hidden}.dashboard-layout-popup .dashboard-layout-popup-item-name{color:var(--dashboard-color-text);font-size:.875rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-layout-popup .dashboard-layout-popup-item-description{color:var(--dashboard-color-text-secondary);font-size:.75rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dashboard-layout-popup .dashboard-layout-popup-item-actions{display:flex;flex-shrink:0;gap:2px}.dashboard-layout-popup .dashboard-layout-popup-arrow-button{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;line-height:1;padding:3px 7px;transition:background .1s ease,color .1s ease}.dashboard-layout-popup .dashboard-layout-popup-arrow-button:hover:not(:disabled){background:var(--dashboard-color-bg-card);color:var(--dashboard-color-text)}.dashboard-layout-popup .dashboard-layout-popup-arrow-button:disabled{cursor:not-allowed;opacity:.3}.dashboard-layout-popup .dashboard-layout-popup-empty{color:var(--dashboard-color-text-muted);font-size:.8rem;font-style:italic;padding:12px 8px;text-align:center}.dashboard-layout-popup .dashboard-layout-popup-sizing{display:flex;flex-direction:column;gap:8px}.dashboard-layout-popup .dashboard-layout-popup-sizing-item{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;display:flex;align-items:center;gap:12px;padding:8px 12px}.dashboard-layout-popup .dashboard-layout-popup-sizing-item-header{align-items:center;display:flex;gap:8px;flex:1;min-width:0}.dashboard-layout-popup .dashboard-layout-popup-sizing-item-controls{display:flex;flex-shrink:0;gap:16px}.dashboard-layout-popup .dashboard-layout-popup-profile-select{margin-left:8px;padding:3px 6px}.dashboard-layout-popup .dashboard-layout-popup-sizing-field{align-items:center;display:flex;gap:4px}.dashboard-layout-popup .dashboard-layout-popup-sizing-label{color:var(--dashboard-color-text-secondary);font-size:.72rem;font-weight:600;letter-spacing:.03em;text-transform:uppercase;white-space:nowrap}.dashboard-layout-popup .dashboard-layout-popup-sizing-select{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:.8rem;padding:4px 8px}.dashboard-layout-popup .config-popup-actions .config-popup-link{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;margin-right:auto;padding:0;text-decoration:underline}.dashboard-layout-popup .config-popup-actions .config-popup-link:hover{color:var(--dashboard-color-text)}.dashboard-toolbar{align-items:stretch;display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;margin-bottom:16px}.dashboard-toolbar .dashboard-toolbar-actions{align-items:center;display:flex;background-color:var(--dashboard-color-bg-card);border-radius:6px;border:1px solid var(--dashboard-color-border);color:var(--dashboard-color-text-secondary);flex-shrink:0;padding:5px 8px}.dashboard-toolbar .dashboard-configure-button{background-color:var(--dashboard-color-bg-card);border:1px solid rgba(0,0,0,0);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:.8rem;font-weight:500;padding:4px 12px;transition:background .15s ease,color .15s ease,border-color .15s ease;white-space:nowrap}.dashboard-toolbar .dashboard-configure-button:hover{background:var(--dashboard-color-bg-page);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text)}.config-popup-overlay{align-items:center;background:var(--dashboard-color-overlay-backdrop);display:flex;inset:0;justify-content:center;position:fixed;z-index:1000}.config-popup-container{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:14px;box-shadow:0 8px 32px var(--dashboard-color-overlay-shadow);max-width:90%;min-width:320px;width:650px}.config-popup-container .explanation-paragraph{font-size:14px;margin:12px 0 20px}.config-popup-container .config-popup-header{border-bottom:1px solid var(--dashboard-color-border);padding:16px}.config-popup-container .config-popup-title{color:var(--dashboard-color-navy);font-size:.95rem;font-weight:700;margin:0}.config-popup-container .config-popup-body{padding:16px}.config-popup-container .config-popup-body label{align-items:center;color:var(--dashboard-color-text);cursor:pointer;display:flex;font-size:.85rem;gap:8px;padding:4px 0}.config-popup-container .config-popup-body input[type=radio],.config-popup-container .config-popup-body input[type=checkbox]{accent-color:var(--dashboard-color-accent)}.config-popup-container .config-popup-body .config-field{margin-bottom:12px}.config-popup-container .config-popup-body .config-field .config-line{margin-bottom:10px;margin-top:10px}.config-popup-container .config-popup-body .config-field:last-child{margin-bottom:0}.config-popup-container .config-popup-body .config-field-label{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:600;letter-spacing:.03em;margin-bottom:4px;text-transform:uppercase}.config-popup-container .config-popup-actions{border-top:1px solid var(--dashboard-color-border);display:flex;gap:8px;justify-content:flex-end;padding:12px 16px}.config-popup-container .config-popup-actions>button{padding-left:8px;padding-right:8px}.config-popup-container .config-popup-btn{border:1px solid var(--dashboard-color-border);border-radius:6px;cursor:pointer;font-size:.8rem;font-weight:600;padding:8px 16px}.config-popup-container .config-popup-btn--cancel{background:#0000;color:var(--dashboard-color-text-secondary)}.config-popup-container .config-popup-btn--cancel:hover{background:var(--dashboard-color-bg-page-hover)}.config-popup-container .config-popup-btn--submit{background:var(--dashboard-color-accent);border-color:var(--dashboard-color-accent);color:var(--dashboard-color-text-on-accent)}.config-popup-container .config-popup-btn--submit:hover{opacity:.9}.dashboard-settings-container .dashboard-settings-section{display:flex;flex-direction:column}.dashboard-settings-container .dashboard-settings-section.section:not(:first-child){border-top:1px solid var(--dashboard-color-border);margin-top:16px;padding-top:16px}.dashboard-settings-container .dashboard-settings-section-header{display:flex;flex-direction:column;gap:4px}.dashboard-settings-container .dashboard-settings-section-title{color:var(--dashboard-color-navy);font-size:.85rem;font-weight:700;letter-spacing:.02em;margin:0}.dashboard-settings-container .dashboard-settings-section-desc{color:var(--dashboard-color-text-secondary);font-size:.8rem;line-height:1.5;margin:0}.dashboard-settings-container .dashboard-settings-select{-webkit-appearance:none;appearance:none;background:var(--dashboard-color-bg-page);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23999' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-position:right 8px center;background-repeat:no-repeat;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);cursor:pointer;font-size:.85rem;padding:8px 24px 8px 8px;transition:border-color .15s ease;width:100%}.dashboard-settings-container .dashboard-settings-select:focus{border-color:var(--dashboard-color-accent);outline:none}.dashboard-settings-container .dashboard-settings-dropzone{align-items:center;background:var(--dashboard-color-bg-page);border:2px dashed var(--dashboard-color-border);border-radius:6px;cursor:pointer;display:flex;flex-direction:column;gap:8px;justify-content:center;min-height:120px;padding:16px;text-align:center;transition:border-color .15s ease,background .15s ease}.dashboard-settings-container .dashboard-settings-dropzone:hover{border-color:var(--dashboard-color-accent)}.dashboard-settings-container .dashboard-settings-dropzone--active{background:#00000008;border-color:var(--dashboard-color-accent);border-style:solid}.dashboard-settings-container .dashboard-settings-dropzone--uploading{cursor:wait;opacity:.7}.dashboard-settings-container .dashboard-settings-dropzone-input{display:none}.dashboard-settings-container .dashboard-settings-dropzone-text{color:var(--dashboard-color-text-muted);font-size:.8rem}.dashboard-settings-container .dashboard-settings-dropzone-preview{align-items:center;display:flex;flex-direction:column;gap:8px}.dashboard-settings-container .dashboard-settings-dropzone-preview-img{border-radius:6px;max-height:80px;max-width:100%;object-fit:contain}.dashboard-settings-container .dashboard-settings-remove-image{color:var(--dashboard-color-danger);cursor:pointer;display:inline-block;font-size:.8rem;margin-top:4px;text-decoration:none}.dashboard-settings-container .dashboard-settings-remove-image:hover{text-decoration:underline}.dashboard-settings-container .dashboard-settings-api-key-hint{color:var(--dashboard-color-text-secondary);font-size:.8rem;line-height:1.45;margin:0 0 4px}.dashboard-settings-container .dashboard-settings-api-key-link{color:var(--dashboard-color-link);display:inline-block;font-size:.8rem;margin-bottom:4px;text-decoration:none}.dashboard-settings-container .dashboard-settings-api-key-link:hover{text-decoration:underline}.dashboard-settings-container .dashboard-settings-api-key-input-row{align-items:center;display:flex;gap:4px}.dashboard-settings-container .dashboard-settings-api-key-input{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);flex:1;font-family:monospace;font-size:.82rem;min-width:0;padding:8px;transition:border-color .15s ease}.dashboard-settings-container .dashboard-settings-api-key-input::placeholder{color:var(--dashboard-color-text-muted)}.dashboard-settings-container .dashboard-settings-api-key-input:focus{border-color:var(--dashboard-color-accent);outline:none}.dashboard-settings-container .dashboard-settings-api-key-toggle{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex-shrink:0;font-size:.9rem;line-height:1;padding:8px;transition:background .1s ease,color .1s ease}.dashboard-settings-container .dashboard-settings-api-key-toggle:hover{background:var(--dashboard-color-bg-card);color:var(--dashboard-color-text)}.dashboard-outer-container .widget-dream-task .dream-task-header-actions{align-items:center;display:flex;gap:8px}.dashboard-outer-container .widget-dream-task .dream-task-list{display:flex;flex-direction:column;gap:12px}.dashboard-outer-container .widget-dream-task .dream-task-llm-attribution{color:var(--dashboard-color-text-secondary);font-size:.7rem;line-height:1.4;padding-top:8px}.dashboard-outer-container .widget-dream-task .widget-title{align-items:center;display:flex}@media (max-width: 430px){.dashboard-outer-container .widget-dream-task .widget-title .widget-title__subtitle{display:none}}.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .widget-title .widget-title__subtitle{display:none}.dashboard-outer-container .widget-dream-task .dream-task-goals-summary{border-bottom:1px solid var(--dashboard-color-border);margin-bottom:8px;padding-bottom:12px}.dashboard-outer-container .widget-dream-task .dream-task-goals-text{color:var(--dashboard-color-text-secondary);font-size:.8rem;font-style:italic;line-height:1.5;margin:0}.dashboard-outer-container .widget-dream-task .dream-task-card{border:1px solid var(--dashboard-color-border);border-radius:10px;opacity:1;padding:12px 16px;transition:border-color .15s ease,opacity .28s ease,transform .28s ease}.dashboard-outer-container .widget-dream-task .dream-task-card:hover{border-color:var(--dashboard-color-blue-light)}.dashboard-outer-container .widget-dream-task .dream-task-card--dismissing{opacity:0;pointer-events:none;transform:translateY(6px) scale(.98)}.dashboard-outer-container .widget-dream-task .dream-task-card-header{align-items:flex-start;display:flex;gap:8px;justify-content:space-between;margin-bottom:8px}.dashboard-outer-container .widget-dream-task .dream-task-card-title{color:var(--dashboard-color-navy);font-size:.9rem;font-weight:600;line-height:1.3}.dashboard-outer-container .widget-dream-task .dream-task-card-title--clickable{cursor:pointer}.dashboard-outer-container .widget-dream-task .dream-task-card-title--clickable:hover{color:var(--dashboard-color-blue);text-decoration:underline}.dashboard-outer-container .widget-dream-task .dream-task-rating{border-radius:6px;flex-shrink:0}.dashboard-outer-container .widget-dream-task .dream-task-rating--high{background:#22c55e1f;color:var(--dashboard-color-success)}.dashboard-outer-container .widget-dream-task .dream-task-rating--medium{background:#eab3081f;color:var(--dashboard-color-warning)}.dashboard-outer-container .widget-dream-task .dream-task-rating--low{background:#ef44441f;color:var(--dashboard-color-danger)}.dashboard-outer-container .widget-dream-task .dream-task-card--invented{border-left:2px solid var(--dashboard-color-blue-light)}.dashboard-outer-container .widget-dream-task .dream-task-new-badge{background:#4a9eff1f;border-radius:6px;color:var(--dashboard-color-blue);flex-shrink:0}.dashboard-outer-container .widget-dream-task .dream-task-source-note-badge{background:#7c3aed1a;border-radius:6px;color:var(--dashboard-color-navy);flex-shrink:0;font-size:11px;font-weight:600;max-width:11rem;overflow:hidden;padding:2px 4px;text-overflow:ellipsis;text-transform:none;white-space:nowrap}.dashboard-outer-container .widget-dream-task .dream-task-new-badge,.dashboard-outer-container .widget-dream-task .dream-task-rating{font-size:11px;font-weight:700;padding:2px 4px;text-transform:uppercase;white-space:nowrap}@media (max-width: 430px){.dashboard-outer-container .widget-dream-task .dream-task-card-header{gap:4px;justify-content:flex-start}.dashboard-outer-container .widget-dream-task .dream-task-card-title{flex:1 0 100%;min-width:0;order:1}.dashboard-outer-container .widget-dream-task .dream-task-new-badge,.dashboard-outer-container .widget-dream-task .dream-task-source-note-badge,.dashboard-outer-container .widget-dream-task .dream-task-rating{display:none}}.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .dream-task-card-header{gap:4px;justify-content:flex-start}.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .dream-task-card-title{flex:1 0 100%;min-width:0;order:1}.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .dream-task-new-badge,.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .dream-task-source-note-badge,.dashboard-large-phone-viewport .dashboard-outer-container .widget-dream-task .dream-task-rating{display:none}.dashboard-outer-container .widget-dream-task .dream-task-card-explanation{color:var(--dashboard-color-text-secondary);cursor:pointer;display:-webkit-box;font-size:.8rem;line-height:1.5;margin:0;overflow:hidden;text-overflow:ellipsis;line-clamp:3;-webkit-box-orient:vertical;-webkit-line-clamp:3}.dashboard-outer-container .widget-dream-task .dream-task-card-explanation--expanded{display:block;overflow:visible;text-overflow:clip;line-clamp:initial;-webkit-box-orient:initial;-webkit-line-clamp:initial}.dashboard-outer-container .widget-dream-task .dream-task-card-actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.dashboard-outer-container .widget-dream-task .dream-task-card-action{color:var(--dashboard-color-link);cursor:pointer;font-size:.75rem;font-weight:600;text-decoration:none}.dashboard-outer-container .widget-dream-task .dream-task-card-action:hover{text-decoration:underline}.dashboard-outer-container .widget-dream-task .dream-task-no-config{align-items:center;display:flex;flex-direction:column;gap:12px;padding:24px 16px;text-align:center}.dashboard-outer-container .widget-dream-task .dream-task-no-config-text{color:var(--dashboard-color-text-secondary);font-size:.85rem;line-height:1.5;margin:0}.dashboard-outer-container .widget-dream-task .dream-task-settings-link{color:var(--dashboard-color-link);font-weight:600;text-decoration:none}.dashboard-outer-container .widget-dream-task .dream-task-settings-link:hover{text-decoration:underline}.dashboard-outer-container .widget-dream-task .dream-task-loading{align-items:center;display:flex;flex-direction:column;gap:12px;padding:24px;text-align:center}.dashboard-outer-container .widget-dream-task .dream-task-loading p{color:var(--dashboard-color-text-secondary);font-size:.85rem;margin:0}.dashboard-outer-container .widget-dream-task .dream-task-spinner{animation:spin .8s linear infinite;border:3px solid var(--dashboard-color-border);border-radius:50%;border-top-color:var(--dashboard-color-blue);height:24px;width:24px}.dashboard-outer-container .widget-dream-task .dream-task-error{padding:16px;text-align:center}.dashboard-outer-container .widget-dream-task .dream-task-error p{color:var(--dashboard-color-danger);font-size:.85rem;margin:0 0 12px}.dashboard-outer-container .widget-dream-task .dream-task-empty{padding:16px;text-align:center}.dashboard-outer-container .widget-dream-task .dream-task-empty p{color:var(--dashboard-color-text-secondary);font-size:.85rem;margin:0 0 12px}.dashboard-outer-container .widget-dream-task .dream-task-retry{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;padding:4px 12px}.dashboard-outer-container .widget-dream-task .dream-task-retry:hover{border-color:var(--dashboard-color-blue);color:var(--dashboard-color-blue)}.widget-graveyard .widget-body{display:flex;flex-direction:column;overflow:hidden}.widget-graveyard.horizontal-1-cell .widget-title__subtitle{display:none}.widget-graveyard .graveyard-meadow-wrapper{flex:1;min-height:0;overflow:hidden;position:relative}.widget-graveyard .graveyard-meadow-bg{border-radius:6px;height:100%;inset:0;object-fit:cover;position:absolute;transition:opacity .6s ease;width:100%}.widget-graveyard .graveyard-task-list{display:flex;flex-direction:column;gap:4px;list-style:none;max-height:100%;overflow-y:auto;padding:0;position:relative;z-index:1}.widget-graveyard .graveyard-task-item{background:var(--dashboard-color-bg-card);border-bottom:1px solid var(--dashboard-color-border);display:flex;flex-direction:column;gap:4px;padding:8px 12px}.widget-graveyard .graveyard-task-item:last-child{border-bottom:none}.widget-graveyard .graveyard-task-item--dismissing{pointer-events:none;visibility:hidden}.widget-graveyard .graveyard-task-header{align-items:baseline;display:flex;gap:8px;justify-content:space-between}.widget-graveyard .graveyard-task-title-wrap{flex:1;min-width:0}.widget-graveyard .graveyard-task-title{color:var(--dashboard-color-text);display:block;font-size:.85rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-graveyard .graveyard-task-title:focus{outline:1px solid var(--dashboard-color-link);outline-offset:2px}.widget-graveyard .graveyard-task-title-wrap:hover .graveyard-task-title,.widget-graveyard .graveyard-task-title-wrap:focus-within .graveyard-task-title{text-decoration:underline dotted}.widget-graveyard .graveyard-task-tooltip{display:flex;flex-direction:column;gap:8px;max-height:280px;overflow-y:auto;padding:12px}.widget-graveyard .graveyard-task-tooltip-meta{align-items:baseline;display:flex;flex-wrap:wrap;gap:4px 12px;justify-content:space-between}.widget-graveyard .graveyard-task-tooltip-note{color:var(--dashboard-color-tooltip-accent);font-size:.76rem;font-weight:600}.widget-graveyard .graveyard-task-tooltip-created{color:var(--dashboard-color-tooltip-text-muted);font-size:.72rem}.widget-graveyard .graveyard-task-tooltip-content{color:var(--dashboard-color-tooltip-text);font-size:.78rem;line-height:1.4}.widget-graveyard .graveyard-task-tooltip-content code{background:#ffffff14;border-radius:4px;padding:1px 4px}.widget-graveyard .graveyard-task-tooltip-footer{border-top:1px solid var(--dashboard-color-tooltip-border);padding-top:8px}.widget-graveyard .graveyard-task-score--muted{color:var(--dashboard-color-tooltip-text-muted)}.widget-graveyard .graveyard-task-score--cool{color:var(--dashboard-color-blue-light)}.widget-graveyard .graveyard-task-score--warm{color:var(--dashboard-color-warning)}.widget-graveyard .graveyard-task-score--hot{color:var(--dashboard-color-danger)}.widget-graveyard .graveyard-task-score-dot{background:currentColor;border-radius:999px;display:inline-block;height:9px;width:9px}.widget-graveyard .graveyard-task-age{color:var(--dashboard-color-text-muted);flex-shrink:0;font-size:.75rem;white-space:nowrap}.widget-graveyard .graveyard-task-actions{display:flex;gap:12px}.widget-graveyard .graveyard-task-actions>a{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-graveyard .graveyard-task-action{color:var(--dashboard-color-text-secondary);font-size:.75rem;text-decoration:none}.widget-graveyard .graveyard-task-action:hover{text-decoration:underline}.widget-graveyard .graveyard-task-action--send:hover{color:var(--dashboard-color-danger)}.widget-graveyard .graveyard-task-action--keep:hover{color:var(--dashboard-color-link)}.widget-graveyard .graveyard-task-action--note:hover{color:var(--dashboard-color-blue)}.widget-graveyard.vertical-1-cell .graveyard-task-tooltip{max-height:220px}.widget-graveyard.horizontal-1-cell.vertical-1-cell .graveyard-task-header{align-items:flex-start}.widget-graveyard.horizontal-1-cell.vertical-1-cell .graveyard-task-age{font-size:.7rem}.widget-graveyard .graveyard-loading,.widget-graveyard .graveyard-empty{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:12px 0;text-align:center}.widget-graveyard .graveyard-error{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 0}.widget-graveyard .graveyard-error p{color:var(--dashboard-color-danger);font-size:.85rem;text-align:center}.widget-graveyard .graveyard-retry{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.8rem;padding:4px 8px}.widget-graveyard .graveyard-retry:hover{border-color:var(--dashboard-color-border);color:var(--dashboard-color-text)}.widget-layout-picker .layout-picker-warning{background:color-mix(in srgb,var(--dashboard-color-warning) 15%,transparent);border:1px solid color-mix(in srgb,var(--dashboard-color-warning) 40%,transparent);border-radius:6px;color:var(--dashboard-color-text);font-size:.8rem;font-weight:600;margin-bottom:12px;padding:8px 12px}.widget-layout-picker .layout-picker-profiles{display:flex;flex-direction:column;gap:8px}.widget-layout-picker .layout-picker-profile-button{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:10px;color:var(--dashboard-color-text);cursor:pointer;padding:12px;text-align:left;transition:background .15s ease,border-color .15s ease;width:100%}.widget-layout-picker .layout-picker-profile-button:hover:not(:disabled){background:var(--dashboard-color-bg-page-hover);border-color:var(--dashboard-color-accent)}.widget-layout-picker .layout-picker-profile-button:disabled{cursor:not-allowed;opacity:.6}.widget-layout-picker .layout-picker-profile-button--applying{border-color:var(--dashboard-color-accent)}.widget-layout-picker .layout-picker-profile-button--current{border-color:color-mix(in srgb,var(--dashboard-color-accent) 50%,transparent)}.widget-layout-picker .layout-picker-profile-header{align-items:baseline;display:flex;flex-wrap:wrap;gap:4px 8px;margin-bottom:8px}.widget-layout-picker .layout-picker-profile-icon{flex-shrink:0;font-size:1.1rem;line-height:1}.widget-layout-picker .layout-picker-profile-name{flex:1;font-size:.95rem;font-weight:700;min-width:0}.widget-layout-picker .layout-picker-profile-action{color:var(--dashboard-color-accent);font-size:.72rem;font-weight:600}.widget-layout-picker .layout-picker-profile-action--current{color:var(--dashboard-color-text-muted)}.widget-layout-picker .layout-picker-profile-description{color:var(--dashboard-color-text-secondary);font-size:.8rem;line-height:1.45;margin:0}.widget-day-sketch .widget-body{display:flex;flex-direction:column;overflow:hidden;padding:0}.widget-day-sketch .day-sketch-notebook{background-color:#fffef5;background-image:repeating-linear-gradient(transparent,transparent 33px,#b8d4e8 33px,#b8d4e8 34px);background-attachment:local;background-position:0 0;background-size:100% 34px;border-left:3px solid #e88e8e;flex:1;margin-left:0;min-height:0;overflow-y:auto;padding:0 8px 0 0}.widget-day-sketch .day-sketch-line{align-items:center;display:flex;height:34px;padding-left:4px;position:relative}.widget-day-sketch .day-sketch-hour-label{color:#a0a0a0;flex-shrink:0;font-family:Segoe Script,Bradley Hand,Comic Sans MS,cursive,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:.78rem;font-weight:700;letter-spacing:.02em;text-align:right;text-transform:lowercase;-webkit-user-select:none;user-select:none;width:64px;padding-right:8px}.widget-day-sketch .day-sketch-input{background:#0000;border:none;color:#333;flex:1;font-family:Segoe Script,Bradley Hand,Comic Sans MS,cursive,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:.88rem;height:100%;line-height:34px;outline:none;padding:0 4px}.widget-day-sketch .day-sketch-input::placeholder{color:#0000}.widget-day-sketch .day-sketch-input:focus{background:#b8d4e81f}.widget-day-sketch .day-sketch-loading{align-items:center;color:var(--dashboard-color-text-muted);display:flex;font-size:.85rem;height:100%;justify-content:center;padding:24px}.widget-day-sketch .day-sketch-save-btn{background:none;border:1px solid var(--dashboard-color-blue);border-radius:6px;color:var(--dashboard-color-blue);cursor:pointer;font-size:.72rem;font-weight:600;padding:2px 8px;transition:background .15s ease,color .15s ease}.widget-day-sketch .day-sketch-save-btn:hover:not(:disabled){background:var(--dashboard-color-blue);color:var(--dashboard-color-text-on-accent)}.widget-day-sketch .day-sketch-save-btn--disabled{border-color:var(--dashboard-color-text-muted);color:var(--dashboard-color-text-muted);cursor:default;opacity:.5}@media (prefers-color-scheme: dark){.widget-day-sketch .day-sketch-notebook{background-color:#2a2923;background-image:repeating-linear-gradient(transparent,transparent 33px,#4a5568 33px,#4a5568 34px);border-left-color:#7c4444}.widget-day-sketch .day-sketch-hour-label{color:#6b7280}.widget-day-sketch .day-sketch-input{color:#e2e0d8}.widget-day-sketch .day-sketch-input:focus{background:#4a556826}}.widget-debug-console .widget-body{max-height:2000px;overflow-y:auto;padding:0}.widget-debug-console .debug-console{font-family:Courier New,Courier,monospace;font-size:11px;height:100%;max-height:100%;overflow-y:auto;padding:6px 8px}.widget-debug-console .debug-console__empty{color:var(--color-text-muted, #888);font-family:inherit;font-size:12px;padding:12px 4px}.widget-debug-console .debug-console__entry{align-items:baseline;border-bottom:1px solid var(--color-border, rgba(0, 0, 0, .06));display:flex;gap:8px;line-height:1.4;padding:2px 0}.widget-debug-console .debug-console__entry:last-child{border-bottom:none}.widget-debug-console .debug-console__timestamp{color:var(--color-text-secondary, #888);flex-shrink:0;font-size:10px;opacity:.75;-webkit-user-select:none;user-select:none}.widget-debug-console .debug-console__message{color:var(--color-text, #222);overflow-wrap:break-word;word-break:break-all}.widget-debug-console .debug-console__clear-button{background:none;border:1px solid var(--color-border, rgba(0, 0, 0, .2));border-radius:3px;color:var(--color-text-muted, #888);cursor:pointer;font-size:11px;line-height:1;padding:2px 6px}.widget-debug-console .debug-console__clear-button:hover{background:var(--color-hover, rgba(0, 0, 0, .06));color:var(--color-text, #222)}@keyframes mood-fadeout{0%{opacity:1}to{opacity:0}}.widget-mood .mood-selector{display:flex;gap:8px;justify-content:center;margin-bottom:16px}.widget-mood .mood-btn{align-items:center;background:none;border:2px solid rgba(0,0,0,0);border-radius:50%;cursor:pointer;display:flex;height:44px;justify-content:center;transition:border-color .15s,transform .15s;width:44px}.widget-mood .mood-btn:hover{border-color:var(--dashboard-color-blue);transform:scale(1.15)}.widget-mood .mood-btn--selected{border-color:var(--dashboard-color-blue);background:var(--dashboard-color-blue-light);transform:scale(1.15)}.widget-mood .mood-btn .mood-emoji{font-size:1.5rem}.widget-mood .mood-details{margin-bottom:12px}.widget-mood .mood-details-label{color:var(--dashboard-color-text-secondary);display:block;font-size:.8rem;margin-bottom:4px}.widget-mood .mood-details-textarea{background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;font-size:.85rem;padding:8px;resize:vertical;width:100%}.widget-mood .mood-details-textarea:focus{border-color:var(--dashboard-color-blue);outline:none}.widget-mood .mood-details-textarea::placeholder{color:var(--dashboard-color-text-muted)}.widget-mood .mood-submit-row{display:flex;gap:8px;margin-bottom:16px}.widget-mood .mood-submit-btn{background:var(--dashboard-color-blue);border:none;border-radius:6px;color:var(--dashboard-color-text-on-accent);cursor:pointer;flex:1;font-size:.85rem;font-weight:600;padding:8px 16px;transition:opacity .15s}.widget-mood .mood-submit-btn:hover:not(:disabled){opacity:.9}.widget-mood .mood-submit-btn:disabled{cursor:not-allowed;opacity:.6}.widget-mood .mood-cancel-btn{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.85rem;font-weight:600;padding:8px 16px;transition:border-color .15s,color .15s}.widget-mood .mood-cancel-btn:hover:not(:disabled){border-color:var(--dashboard-color-text-secondary);color:var(--dashboard-color-text)}.widget-mood .mood-cancel-btn:disabled{cursor:not-allowed;opacity:.6}.widget-mood .mood-confirmation{align-items:center;animation:mood-fadeout 1s ease-out 4s forwards;display:flex;flex-direction:column;gap:8px;margin-bottom:16px;padding:16px 0}.widget-mood .mood-confirmation-icon{font-size:2.5rem}.widget-mood .mood-confirmation-text{color:var(--dashboard-color-success);font-size:.9rem;font-weight:600}.widget-mood .mood-summary{color:var(--dashboard-color-text-secondary);font-size:.8rem;text-align:center}.widget-mood .mood-sparkline{align-items:flex-end;display:flex;gap:3px;height:24px;justify-content:center;margin-top:8px}.widget-mood .mood-dot{background:var(--dashboard-color-blue);border-radius:2px;min-height:4px;position:relative;width:4px}.widget-mood .mood-viz-section{align-items:center;display:flex;flex-direction:column;gap:4px;margin-top:8px}.widget-mood .mood-viz-canvas-wrap{border-radius:10px;line-height:0;overflow:visible;position:relative}.widget-mood .mood-viz-canvas{border-radius:10px;display:block;height:220px;width:220px}.widget-mood .mood-viz-configure-link{background:none;border:none;color:var(--dashboard-color-text-muted);cursor:pointer;font-size:.75rem;padding:4px 8px;transition:color .15s}.widget-mood .mood-viz-configure-link:hover{color:var(--dashboard-color-text-secondary)}.widget-mood .mood-viz-config-option{align-items:center;cursor:pointer;display:flex;font-size:.9rem;gap:8px;padding:4px 0}.widget-mood .mood-viz-config-option input[type=radio]{accent-color:var(--dashboard-color-blue);cursor:pointer}.widget-peak-hours .peak-hours-metrics-grid{display:grid;gap:12px;grid-template-columns:repeat(3,1fr);margin-bottom:16px}.widget-peak-hours .peak-hours-metric-card{background:var(--dashboard-color-bg-page);border-radius:10px;padding:12px 16px}.widget-peak-hours .peak-hours-metric-label{color:var(--dashboard-color-text-secondary);font-size:.8rem;margin-bottom:4px}.widget-peak-hours .peak-hours-metric-value{color:var(--dashboard-color-navy);font-size:1.25rem;font-weight:600}.widget-peak-hours .peak-hours-legend{color:var(--dashboard-color-text-secondary);display:flex;flex-wrap:wrap;font-size:.75rem;gap:16px;margin-bottom:8px}.widget-peak-hours .peak-hours-legend-item{align-items:center;display:flex;gap:4px}.widget-peak-hours .peak-hours-legend-swatch{border-radius:2px;display:inline-block;height:10px;width:10px}.widget-peak-hours .peak-hours-legend-swatch--created{background:var(--dashboard-color-blue)}.widget-peak-hours .peak-hours-legend-swatch--completed{background:var(--dashboard-color-accent)}.widget-peak-hours .peak-hours-chart-container{height:220px;position:relative;width:100%}.widget-peak-hours .peak-hours-canvas{display:block;height:100%;width:100%}.widget-peak-hours .peak-hours-tooltip{background:var(--dashboard-color-tooltip-bg);border:1px solid var(--dashboard-color-tooltip-border);border-radius:6px;box-shadow:0 2px 8px var(--dashboard-color-tooltip-shadow);color:var(--dashboard-color-tooltip-text);font-size:.75rem;padding:8px 12px;pointer-events:none;position:absolute;white-space:nowrap;z-index:10}.widget-peak-hours .peak-hours-tooltip-header{font-weight:600;margin-bottom:4px}.widget-peak-hours .peak-hours-tooltip-label--created{color:var(--dashboard-color-tooltip-accent)}.widget-peak-hours .peak-hours-tooltip-label--completed{color:var(--dashboard-color-accent)}.widget-peak-hours .peak-hours-footer{color:var(--dashboard-color-text-muted);font-size:.75rem;margin-top:12px;text-align:center}.widget-peak-hours .peak-hours-empty{padding:24px;text-align:center}.widget-peak-hours .peak-hours-empty p{color:var(--dashboard-color-text-secondary);font-size:.85rem;margin:0}.vertical-1-cell .widget-peak-hours .peak-hours-metrics-grid{gap:8px}.vertical-1-cell .widget-peak-hours .peak-hours-metric-card{padding:4px 8px}.vertical-1-cell .widget-peak-hours .peak-hours-metric-label{font-size:.7rem;margin-bottom:0}.vertical-1-cell .widget-peak-hours .peak-hours-metric-value{font-size:1rem}.vertical-1-cell .widget-peak-hours .peak-hours-legend{margin-bottom:4px}.vertical-1-cell .widget-peak-hours .peak-hours-chart-container{height:160px}.vertical-1-cell .widget-peak-hours .peak-hours-footer{margin-top:8px}.horizontal-2-cell .widget-peak-hours .peak-hours-chart-container{height:220px}.vertical-2-cell .widget-peak-hours .peak-hours-chart-container{height:380px}.horizontal-2-cell.vertical-2-cell .widget-peak-hours .peak-hours-chart-container{height:440px}.widget-quotes .widget-body{display:flex;flex-direction:column}.widget-quotes .quotes-grid{display:grid;flex:1;gap:16px;grid-template-columns:1fr 1fr}.widget-quotes .quote-tile{background-position:center;background-size:cover;border-radius:10px;color:var(--dashboard-color-text-on-accent);display:flex;flex-direction:column;justify-content:flex-end;min-height:150px;padding:24px 16px}.widget-quotes .quote-tile .quote-text{font-family:Georgia,Times New Roman,serif;font-size:.95rem;font-style:italic;line-height:1.5;margin:0 0 8px}.widget-quotes .quote-tile .quote-author{font-size:.75rem;opacity:.85}.widget-quotes .quotes-loading{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:24px 0;text-align:center}.widget-quick-actions .qa-grid{display:grid;gap:8px;grid-template-columns:1fr 1fr}.widget-quick-actions .qa-button{align-items:center;background:var(--dashboard-color-bg-page);border:1px solid var(--dashboard-color-border);border-radius:10px;cursor:pointer;display:flex;flex-direction:column;gap:8px;padding:16px 8px;transition:background .15s}.widget-quick-actions .qa-button:hover{background:var(--dashboard-color-bg-page-hover)}.widget-quick-actions .qa-button .qa-icon{font-size:1.4rem}.widget-quick-actions .qa-button .qa-label{color:var(--dashboard-color-text);font-size:.75rem;font-weight:500}.widget-recent-notes .widget-body{display:flex;flex-direction:column;overflow:hidden}.widget-recent-notes .note-list{display:flex;flex:1;flex-direction:column;gap:4px;list-style:none;min-height:0;overflow-y:auto}.widget-recent-notes .note-item:hover{background-color:var(--dashboard-color-bg-page)}.widget-recent-notes .note-link{align-items:center;background:none;border:none;border-radius:6px;color:inherit;cursor:pointer;display:flex;font-family:inherit;gap:8px;justify-content:space-between;padding:8px 12px;text-align:left;width:100%}.widget-recent-notes .note-name{color:var(--dashboard-color-text);flex:1;font-size:.85rem;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.widget-recent-notes .note-count,.widget-recent-notes .note-metadata{color:var(--dashboard-color-text-muted);flex-shrink:0;font-size:.75rem;white-space:nowrap}.widget-recent-notes .note-loading,.widget-recent-notes .note-empty,.widget-recent-notes .note-error{color:var(--dashboard-color-text-secondary);font-size:.85rem;padding:12px 0;text-align:center}.widget-recent-notes .note-error{color:var(--dashboard-color-danger)}.dashboard-toolbar .task-domains{align-items:center;background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:6px;display:flex;gap:12px;padding:8px 12px}.dashboard-toolbar .task-domains-list{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:8px}.dashboard-toolbar .task-domain-item{align-items:center;border:1px solid rgba(0,0,0,0);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;display:inline-flex;font-size:.8rem;font-weight:500;gap:4px;padding:4px 12px;transition:all .15s ease}.dashboard-toolbar .task-domain-item:hover{background:var(--dashboard-color-blue-light);color:var(--dashboard-color-navy)}.dashboard-toolbar .task-domain-item.active{background:var(--dashboard-color-navy);border-color:var(--dashboard-color-navy);color:var(--dashboard-color-bg-card)}.dashboard-toolbar .task-domain-item.active .task-domain-settings{color:var(--dashboard-color-text-on-accent-muted)}.dashboard-toolbar .task-domain-item.active .task-domain-settings:hover{color:var(--dashboard-color-text-on-accent)}.dashboard-toolbar .task-domain-name{-webkit-user-select:none;user-select:none}.dashboard-toolbar .task-domain-settings{background:none;border:none;color:var(--dashboard-color-text-muted);cursor:pointer;font-size:.85rem;line-height:1;padding:0}.dashboard-toolbar .task-domain-settings:hover{color:var(--dashboard-color-navy)}.dashboard-toolbar .task-domains-refresh{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;padding:4px 8px;white-space:nowrap}@media (max-width: 800px){.dashboard-toolbar .task-domains-refresh{display:none}}.dashboard-toolbar .task-domains-refresh:hover{color:var(--dashboard-color-navy)}.dashboard-toolbar .task-domains-refresh:disabled{cursor:default;opacity:.5}.dashboard-toolbar .task-domains-empty{color:var(--dashboard-color-text-muted);font-size:.8rem}.dashboard-toolbar .task-domains--empty .task-domains-empty{flex:1 1 100%;font-weight:500}.widget-victory-value .widget-body{display:flex;flex-direction:column;justify-content:space-between}.widget-victory-value .vv-header{align-items:baseline;display:flex;gap:8px;margin-bottom:8px}.widget-victory-value .vv-header .vv-total{color:var(--dashboard-color-navy);font-size:2rem;font-weight:700}.widget-victory-value .vv-header .vv-label{color:var(--dashboard-color-text-secondary);font-size:.8rem}.widget-victory-value .vv-date-range{color:var(--dashboard-color-text-secondary);font-size:.75rem;font-weight:400}.widget-victory-value .vv-chart-container{align-items:center;display:flex;gap:4px}.widget-victory-value .vv-chart-wrap{flex:1;min-width:0;position:relative}.widget-victory-value .vv-chart{border-radius:6px;display:block;width:100%}.widget-victory-value .vv-nav-arrow{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;flex-shrink:0;font-size:1.25rem;line-height:1;padding:4px 8px;transition:background .15s,color .15s}.widget-victory-value .vv-nav-arrow:hover:not(:disabled){background:var(--dashboard-color-bg-page-hover);color:var(--dashboard-color-navy)}.widget-victory-value .vv-nav-arrow:disabled{cursor:not-allowed;opacity:.3}.vertical-1-cell .widget-victory-value .vv-chart{height:180px}.horizontal-2-cell .widget-victory-value .vv-chart{height:260px}.vertical-2-cell .widget-victory-value .vv-chart{height:380px}.horizontal-2-cell.vertical-2-cell .widget-victory-value .vv-chart{height:460px}:root{--dashboard-color-accent: #e8853d;--dashboard-color-agenda-priority-critical: #e85353;--dashboard-color-agenda-priority-important: #e8853d;--dashboard-color-agenda-priority-normal: #7a8699;--dashboard-color-agenda-priority-urgent: #5b7bbf;--dashboard-color-bg-card: #ffffff;--dashboard-color-bg-page: #eef1f5;--dashboard-color-bg-page-hover: #e6ebf2;--dashboard-color-blue: #5b7bbf;--dashboard-color-blue-light: #e8edf5;--dashboard-color-border: #d8dde6;--dashboard-color-danger: #e85353;--dashboard-color-info: #5b7bbf;--dashboard-color-link: #5b7bbf;--dashboard-color-navy: #2c3e6b;--dashboard-color-overlay-backdrop: rgba(0, 0, 0, .4);--dashboard-color-overlay-shadow: rgba(0, 0, 0, .15);--dashboard-color-success: #4caf80;--dashboard-color-text: #1e2a3a;--dashboard-color-text-muted: #a3aebb;--dashboard-color-text-on-accent: #ffffff;--dashboard-color-text-on-accent-muted: rgba(255, 255, 255, .6);--dashboard-color-text-secondary: #7a8699;--dashboard-color-tooltip-accent: #5b7bbf;--dashboard-color-tooltip-bg: #1f2937;--dashboard-color-tooltip-border: rgba(255, 255, 255, .15);--dashboard-color-tooltip-shadow: rgba(0, 0, 0, .3);--dashboard-color-tooltip-text: #f9fafb;--dashboard-color-tooltip-text-muted: rgba(255, 255, 255, .5);--dashboard-color-warning: #e8853d;--dashboard-color-plan-created-bg: rgba(76, 175, 128, .08);--dashboard-color-plan-created-border: #4caf80}@media (prefers-color-scheme: dark){:root{--dashboard-color-accent: #ffb36b;--dashboard-color-agenda-priority-critical: #ff7a7a;--dashboard-color-agenda-priority-important: #ffb36b;--dashboard-color-agenda-priority-normal: #a3b0c4;--dashboard-color-agenda-priority-urgent: #8fb2ff;--dashboard-color-bg-card: #1f2937;--dashboard-color-bg-page: #111827;--dashboard-color-bg-page-hover: #1a2436;--dashboard-color-blue: #8fb2ff;--dashboard-color-blue-light: #253553;--dashboard-color-border: #374151;--dashboard-color-danger: #ff7a7a;--dashboard-color-info: #8fb2ff;--dashboard-color-link: #60a5fa;--dashboard-color-navy: #c5d8ff;--dashboard-color-overlay-backdrop: rgba(0, 0, 0, .5);--dashboard-color-overlay-shadow: rgba(0, 0, 0, .4);--dashboard-color-success: #73d4a3;--dashboard-color-text: #e5ecf5;--dashboard-color-text-muted: #95a3b8;--dashboard-color-text-on-accent: #ffffff;--dashboard-color-text-on-accent-muted: rgba(255, 255, 255, .6);--dashboard-color-text-secondary: #b6c0cf;--dashboard-color-tooltip-accent: #a5b4fc;--dashboard-color-tooltip-bg: #1f2937;--dashboard-color-tooltip-border: rgba(255, 255, 255, .15);--dashboard-color-tooltip-shadow: rgba(0, 0, 0, .5);--dashboard-color-tooltip-text: #f9fafb;--dashboard-color-tooltip-text-muted: rgba(255, 255, 255, .5);--dashboard-color-warning: #ffb36b;--dashboard-color-plan-created-bg: rgba(115, 212, 163, .1);--dashboard-color-plan-created-border: #73d4a3}}html{overflow-y:scroll}html *,html *:before,html *:after{box-sizing:border-box;margin:0;padding:0}html body{-webkit-font-smoothing:antialiased;background:var(--dashboard-color-bg-page);color:var(--dashboard-color-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif}.dashboard-outer-container{min-height:100vh;overflow-x:hidden;position:relative;width:100%}.dashboard-outer-container .dashboard-content{margin:0 auto;max-width:1200px;padding:24px;position:relative}.dashboard-outer-container .dashboard-content .dashboard-grid-shell{isolation:isolate;position:relative}.dashboard-outer-container .dashboard-content .dashboard-grid-shell--focused{z-index:2}.dashboard-outer-container .dashboard-content .dashboard-grid-focus-backdrop{background:rgba(var(--dashboard-color-bg-page),.18);border:none;cursor:zoom-out;inset:-12px;position:absolute;z-index:2}.dashboard-outer-container .dashboard-content .dashboard-grid{display:grid;gap:16px;grid-template-columns:repeat(4,1fr);position:relative}.dashboard-outer-container .dashboard-content .grid-cell{--drag-scale: 1;--flip-x: 0px;--flip-y: 0px;--focus-blur: 0px;--focus-opacity: 1;--focus-scale: 1;--focus-x: 0px;--focus-y: 0px;--grid-cell-base-opacity: .95;filter:blur(var(--focus-blur));min-width:0;opacity:calc(var(--grid-cell-base-opacity)*var(--focus-opacity));position:relative;transform:translate(var(--flip-x),var(--flip-y)) translate(var(--focus-x),var(--focus-y)) scale(var(--drag-scale)) scale(var(--focus-scale));transition:filter .32s ease,opacity .32s ease,transform .32s ease;will-change:transform}.dashboard-outer-container .dashboard-content .grid-cell:hover{--grid-cell-base-opacity: 1}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-2-cell{grid-column:span 2}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-3-cell{grid-column:span 3}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-4-cell{grid-column:span 4}.dashboard-outer-container .dashboard-content .grid-cell.vertical-1-cell{max-height:420px;min-height:320px}.dashboard-outer-container .dashboard-content .grid-cell.vertical-2-cell{grid-row:span 2;max-height:800px;min-height:600px}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--drag-active{cursor:grabbing}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--dragging-ready{animation:widget-wobble .35s ease-in-out infinite alternate;opacity:1;z-index:3}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--drag-shift{--drag-scale: .985}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--focus-mode{pointer-events:none}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--focused{--grid-cell-base-opacity: 1;pointer-events:auto;z-index:4}.dashboard-outer-container .dashboard-content .grid-cell.grid-cell--focus-hidden{z-index:1}@media (max-width: 800px){.dashboard-outer-container .dashboard-content{padding:12px}.dashboard-outer-container .dashboard-content .dashboard-grid{grid-template-columns:1fr}.dashboard-outer-container .dashboard-content .grid-cell.horizontal-2-cell,.dashboard-outer-container .dashboard-content .grid-cell.horizontal-3-cell,.dashboard-outer-container .dashboard-content .grid-cell.horizontal-4-cell{grid-column:span 1}.dashboard-outer-container .dashboard-content .grid-cell.vertical-1-cell,.dashboard-outer-container .dashboard-content .grid-cell.vertical-2-cell{grid-row:span 1;max-height:none;min-height:auto}}.dashboard-outer-container .widget{background:var(--dashboard-color-bg-card);border:1px solid var(--dashboard-color-border);border-radius:14px;display:flex;flex-direction:column;height:100%;max-width:100%;overflow:hidden}.dashboard-outer-container .widget-header{align-items:center;border-bottom:1px solid var(--dashboard-color-border);display:flex;gap:8px;padding:12px 16px}.dashboard-outer-container .widget-heading-bar{-webkit-user-select:none;user-select:none}.dashboard-outer-container .widget-heading-bar.widget-heading-bar--drag-ready{cursor:grabbing}.dashboard-outer-container .widget-heading-bar.widget-heading-bar--focusable .widget-icon-button:hover{transform:scale(1.06)}.dashboard-outer-container .widget-icon{font-size:1rem}.dashboard-outer-container .widget-icon-button{background:rgba(var(--dashboard-color-bg-page),.6);border:1px solid rgba(0,0,0,0);border-radius:999px;cursor:pointer;line-height:1;padding:4px;transition:background .2s ease,border-color .2s ease,transform .2s ease}.dashboard-outer-container .widget-icon-button:hover{background:rgba(var(--dashboard-color-blue),.12);border-color:rgba(var(--dashboard-color-blue),.28)}.dashboard-outer-container .widget-title{color:var(--dashboard-color-navy);display:flex;flex:1;font-size:.85rem;font-weight:700;gap:8px;letter-spacing:.03em;margin:0;text-transform:uppercase}.dashboard-outer-container .widget-title__subtitle{color:var(--dashboard-color-text-muted);font-size:.75rem;font-weight:400;letter-spacing:.01em;text-transform:none}.dashboard-outer-container .widget-configure,.dashboard-outer-container .widget-header-action{background:none;border:none;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;padding:4px 8px}.dashboard-outer-container .widget-configure:hover,.dashboard-outer-container .widget-header-action:hover{color:var(--dashboard-color-navy)}.dashboard-outer-container .widget-body{flex:1;padding:16px}.dashboard-outer-container .dashboard-loading{align-items:center;color:var(--dashboard-color-text-secondary);display:flex;flex-direction:column;gap:16px;height:100vh;justify-content:center;width:100%}.dashboard-outer-container .dashboard-loading .spinner{animation:spin .8s linear infinite;border:3px solid var(--dashboard-color-border);border-radius:50%;border-top-color:var(--dashboard-color-blue);height:32px;width:32px}.dashboard-outer-container .dashboard-error{color:var(--dashboard-color-danger);padding:40px;text-align:center}.dashboard-outer-container .dashboard-error p{color:var(--dashboard-color-text-secondary);margin-top:8px}.dashboard-outer-container .widget-error-fallback{align-items:center;background:var(--dashboard-color-bg-card);border:1px dashed var(--dashboard-color-danger);border-radius:10px;display:flex;flex-direction:column;gap:8px;height:100%;justify-content:center;padding:24px;text-align:center}.dashboard-outer-container .widget-error-fallback-title{color:var(--dashboard-color-danger);font-size:.9rem;font-weight:700}.dashboard-outer-container .widget-error-fallback-message{color:var(--dashboard-color-text-muted);font-size:.8rem;max-width:280px;word-break:break-word}.dashboard-outer-container .widget-error-fallback-retry{background:none;border:1px solid var(--dashboard-color-border);border-radius:6px;color:var(--dashboard-color-text-secondary);cursor:pointer;font-size:.75rem;margin-top:4px;padding:4px 12px;transition:color .15s ease,border-color .15s ease}.dashboard-outer-container .widget-error-fallback-retry:hover{border-color:var(--dashboard-color-navy);color:var(--dashboard-color-navy)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes widget-wobble{0%{transform:rotate(-1.5deg)}to{transform:rotate(1.5deg)}}
`;
function buildEmbedHTML() {
return `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>${compiledCSS}</style>
</head>
<body>
<div id="dashboard-root"></div>
<script type="text/javascript" src="data:text/javascript;base64,${clientBase64}"><\/script>
</body>
</html>`;
}
var SETTING_KEYS = {
BACKGROUND_IMAGE_URL: "Background Image URL",
BACKGROUND_IMAGE_MODE: "Background Image Mode",
CONSOLE_LOGGING: "Console logging",
DASHBOARD_COMPONENTS: "dashboard_elements",
DEBUG_CONSOLE: "debug_console",
LLM_API_KEY_ANTHROPIC: "Anthropic API Key",
LLM_API_KEY_GEMINI: "Gemini API Key",
LLM_API_KEY_GROK: "Grok API Key",
LLM_API_KEY_OPENAI: "OpenAI API Key",
LLM_PROVIDER_MODEL: "LLM Provider",
FIRST_INSTALLED_AT: "dashboard_first_installed_at",
SELECTED_LAYOUT_PROFILE: "dashboard_selected_layout_profile",
TASK_DOMAINS: "dashboard_task_domains",
PLANNING_NOTE_TAG: "Tag to apply to planning notes"
};
var API_KEY_FROM_PROVIDER = {
anthropic: SETTING_KEYS.LLM_API_KEY_ANTHROPIC,
gemini: SETTING_KEYS.LLM_API_KEY_GEMINI,
grok: SETTING_KEYS.LLM_API_KEY_GROK,
openai: SETTING_KEYS.LLM_API_KEY_OPENAI
};
function widgetConfigKey(widgetId) {
return `dashboard_${widgetId}_config`;
}
var DASHBOARD_COMPONENTS = SETTING_KEYS.DASHBOARD_COMPONENTS;
var TASK_DOMAIN_STALE_MS = 24 * 60 * 60 * 1e3;
var WIDGET_REGISTRY = [
{
widgetId: "layout-picker",
name: "Layout Picker",
description: "One-click presets that rearrange your entire dashboard into a curated profile",
icon: "\u{1F5C2}\uFE0F",
defaultGridWidthSize: 2,
maxHorizontalTiles: 2,
maxVerticalTiles: 2
},
{
widgetId: "planning",
name: "Quarterly Planning",
description: "Plan and track your quarterly goals and priorities",
icon: "\u{1F4CB}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "victory-value",
name: "Victory Value",
description: "Celebrate wins and track high-value task completions",
icon: "\u{1F3C6}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "dream-task",
name: "Goal Coach",
description: "Get task suggestions that blend quarterly/monthly goals with day-of-week preferences",
icon: "\u{1F52E}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "day-sketch",
name: "Day Sketcher",
description: "Notebook-paper day planner with hour-by-hour entries saved to a note",
icon: "\u{1F5D2}\uFE0F",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "agenda",
name: "Task Agenda",
description: "View and manage your prioritized task list",
icon: "\u{1F4CC}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "quotes",
name: "Inspiration Quotes",
description: "Rotating inspirational quotes to keep you motivated",
icon: "\u{1F4A1}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "graveyard",
name: "Task Retirement Center",
description: "Surface neglected tasks and retire them to an archived note",
icon: "\u{1F475}\uFE0F",
defaultGridWidthSize: 2,
introducedAt: "2026-05-09",
maxHorizontalTiles: 2,
maxVerticalTiles: 2
},
{
widgetId: "recent-notes",
name: "Revisit Candidate",
description: "Notes with open tasks that have not had a new task in over a week",
icon: "\u{1F4CC}",
defaultGridWidthSize: 1,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "mood",
name: "Mood Tracker",
visibleTitle: "How are you feeling?",
description: "Log your daily mood and visualize trends over time",
icon: "\u{1F3AD}",
defaultGridWidthSize: 1,
maxHorizontalTiles: 2,
maxVerticalTiles: 2
},
{
widgetId: "calendar",
name: "Calendar",
description: "See upcoming events and appointments at a glance",
icon: "\u{1F4C5}",
defaultGridWidthSize: 1,
maxHorizontalTiles: 2,
maxVerticalTiles: 2
},
{
widgetId: "quick-actions",
name: "Quick Actions",
description: "Shortcuts for your most frequently used dashboard actions",
icon: "\u26A1",
defaultGridWidthSize: 1,
maxHorizontalTiles: 2,
maxVerticalTiles: 2
},
{
widgetId: "peak-hours",
name: "Peak Hours",
description: "Hourly distribution of task creation and completion activity",
icon: "\u23F0",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2
},
{
widgetId: "debug-console",
name: "Debug Console",
description: "Scrollable log viewer showing all logIfEnabled messages (developer tool)",
icon: "\u{1F41B}",
defaultGridWidthSize: 2,
maxHorizontalTiles: 4,
maxVerticalTiles: 2,
debugOnly: true
}
];
var DEFAULT_DASHBOARD_COMPONENTS = WIDGET_REGISTRY.filter((w) => !w.debugOnly).map((w) => ({
widgetId: w.widgetId,
gridWidthSize: w.defaultGridWidthSize,
gridHeightSize: 1,
settings: {}
}));
var FULL_MONTH_NAMES = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
];
function getCurrentQuarter() {
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth();
const quarter = Math.floor(month / 3) + 1;
return { year, quarter, label: `Q${quarter} ${year}` };
}
function getNextQuarter() {
let { year, quarter } = getCurrentQuarter();
quarter++;
if (quarter > 4) {
quarter = 1;
year++;
}
return { year, quarter, label: `Q${quarter} ${year}` };
}
function dateFromDateInput(dateInput, { throwOnInvalid = true } = {}) {
const fail = () => {
if (!throwOnInvalid)
return null;
throw new TypeError(`Invalid date input: ${String(dateInput)}`);
};
if (dateInput == null || dateInput === "")
return fail();
if (dateInput instanceof Date) {
const date = new Date(dateInput);
return Number.isNaN(date.getTime()) ? fail() : date;
}
if (typeof dateInput === "number") {
if (!Number.isFinite(dateInput))
return fail();
const millis = Math.abs(dateInput) < 1e10 ? dateInput * 1e3 : dateInput;
const parsed2 = new Date(millis);
return Number.isNaN(parsed2.getTime()) ? fail() : parsed2;
}
if (typeof dateInput === "string") {
const trimmed = dateInput.trim();
if (!trimmed)
return fail();
if (/^\d{4}-\d{2}-\d{2}$/.test(dateInput)) {
const [year, month, day] = dateInput.split("-").map(Number);
return new Date(year, month - 1, day);
}
const numericValue = Number(trimmed);
if (!Number.isNaN(numericValue))
return dateFromDateInput(numericValue, { throwOnInvalid });
const parsed2 = new Date(trimmed);
return Number.isNaN(parsed2.getTime()) ? fail() : parsed2;
}
const parsed = new Date(dateInput);
return Number.isNaN(parsed.getTime()) ? fail() : parsed;
}
function weekStartFromDateInput(dateInput, weekStartDay = 1) {
const date = dateFromDateInput(dateInput);
const dayOfWeek = date.getDay();
const delta = (dayOfWeek - weekStartDay + 7) % 7;
const weekStart = new Date(date.getFullYear(), date.getMonth(), date.getDate() - delta);
weekStart.setHours(0, 0, 0, 0);
return weekStart;
}
function weekEndFromDateInput(dateInput, weekStartDay = 1) {
const weekStart = weekStartFromDateInput(dateInput, weekStartDay);
const weekEnd = new Date(weekStart);
weekEnd.setDate(weekEnd.getDate() + 6);
weekEnd.setHours(23, 59, 59, 999);
return weekEnd;
}
var _enabled = false;
var _entryId = 0;
var MAX_LOG_BUFFER = 200;
var _logBuffer = [];
var _listeners = new Set();
function setLoggingEnabled(settingValue) {
if (typeof settingValue === "boolean") {
_enabled = settingValue;
return;
}
const normalized = String(settingValue || "").trim().toLowerCase();
_enabled = ["true", "yes", "1", "on", "enabled"].includes(normalized);
}
function logIfEnabled(...args) {
if (_enabled) {
console.log(...args);
const entry = { id: ++_entryId, ts: Date.now(), args };
_logBuffer.push(entry);
if (_logBuffer.length > MAX_LOG_BUFFER)
_logBuffer.shift();
setTimeout(() => _listeners.forEach((fn) => fn(entry)), 0);
}
}
async function fetchDashboardData(app) {
setLoggingEnabled(app.settings[SETTING_KEYS.CONSOLE_LOGGING]);
const t0 = Date.now();
logIfEnabled("[fetchDashboardData] starting \u2014 launching domain + mood/plans/settings in parallel");
const now = new Date();
const weekStart = weekStartFromDateInput(now);
const weekEnd = weekEndFromDateInput(now);
const twoWeeksAgoUnixSeconds = Math.floor(Date.now() / 1e3) - 60 * 60 * 24 * 14;
const domainPromise = _resolveTaskDomains(app).catch((err) => {
logIfEnabled("[fetchDashboardData] _resolveTaskDomains failed:", err);
return { domains: [], selectedDomainUuid: null };
});
const tasksPromise = domainPromise.then((info) => {
logIfEnabled(`[fetchDashboardData] domain resolved in ${Date.now() - t0}ms, uuid=${info.selectedDomainUuid} \u2014 fetching tasks`);
return _fetchTasksForDomain(app, info.selectedDomainUuid);
});
const [taskDomainInfo, moodRatings, quarterlyPlans, settings, domainTasks] = await Promise.all([
domainPromise,
_safeMoodRatings(app, twoWeeksAgoUnixSeconds),
_findQuarterlyPlans(app),
_readDashboardSettings(app),
tasksPromise
]);
logIfEnabled(`[fetchDashboardData] all resolved in ${Date.now() - t0}ms \u2014 ${domainTasks.length} tasks, ${moodRatings?.length ?? 0} mood ratings`);
return {
activeTaskDomain: taskDomainInfo.selectedDomainUuid,
completedThisWeek: _filterCompletedInRange(domainTasks, weekStart, weekEnd),
context: { noteUUID: app.context?.noteUUID || null, pluginUUID: app.context?.pluginUUID || null },
currentDate: now.toISOString(),
dailyVictoryValues: _calculateDailyVictoryValues(domainTasks, weekStart),
moodRatings,
pluginNoteUUID: app.context?.noteUUID || null,
quarterlyPlans,
settings,
tasks: domainTasks,
todayTasks: _filterTodayTasks(domainTasks, now),
taskDomains: taskDomainInfo.domains,
weeklyVictoryValue: _calculateWeeklyVictoryValue(domainTasks, weekStart, weekEnd)
};
}
async function _resolveTaskDomains(app) {
const raw = app.settings[SETTING_KEYS.TASK_DOMAINS];
let stored = {};
try {
stored = raw ? JSON.parse(raw) : {};
} catch {
stored = {};
}
const isStale = !stored.lastRetrieved || Date.now() - stored.lastRetrieved > TASK_DOMAIN_STALE_MS;
const hasDomains = Array.isArray(stored.domains) && stored.domains.length > 0;
if (!hasDomains || isStale) {
logIfEnabled(`[_resolveTaskDomains] cache ${hasDomains ? "stale" : "empty"} \u2014 calling getTaskDomains()`);
const t0 = Date.now();
const freshDomains = await app.getTaskDomains();
logIfEnabled(`[_resolveTaskDomains] getTaskDomains() returned ${freshDomains?.length ?? 0} domains in ${Date.now() - t0}ms`);
stored.domains = (Array.isArray(freshDomains) ? freshDomains : []).filter((d) => d && d.uuid).map((d) => ({ name: d.name, uuid: d.uuid }));
stored.lastRetrieved = Date.now();
const selectedStillExists = stored.selectedDomainUuid && stored.domains.some((d) => d.uuid === stored.selectedDomainUuid);
if (!selectedStillExists) {
stored.selectedDomainUuid = _pickDefaultDomain(stored.domains);
}
await app.setSetting(SETTING_KEYS.TASK_DOMAINS, JSON.stringify(stored));
}
if (!stored.selectedDomainUuid && stored.domains.length > 0) {
stored.selectedDomainUuid = _pickDefaultDomain(stored.domains);
await app.setSetting(SETTING_KEYS.TASK_DOMAINS, JSON.stringify(stored));
}
return stored;
}
function _pickDefaultDomain(domains) {
if (!domains || domains.length === 0)
return null;
const work = domains.find((d) => d.name === "Work");
return work ? work.uuid : domains[0].uuid;
}
async function _fetchTasksForDomain(app, domainUuid) {
if (!domainUuid)
return [];
const t0 = Date.now();
const tasks = await app.getTaskDomainTasks(domainUuid);
const list = Array.isArray(tasks) ? tasks : [];
logIfEnabled(`[_fetchTasksForDomain] getTaskDomainTasks returned ${list.length} tasks in ${Date.now() - t0}ms`);
return list;
}
function _filterTodayTasks(tasks, now) {
const dayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();
const dayEnd = dayStart + 864e5;
return tasks.filter(
(t) => !t.completedAt && !t.dismissedAt && _millisFromTimestamp(t.startAt) && _millisFromTimestamp(t.startAt) >= dayStart && _millisFromTimestamp(t.startAt) < dayEnd
).sort((a, b) => (_millisFromTimestamp(a.startAt) || 0) - (_millisFromTimestamp(b.startAt) || 0));
}
function _filterCompletedInRange(tasks, start, end) {
const startMs = start.getTime();
const endMs = end.getTime();
return tasks.filter(
(t) => _millisFromTimestamp(t.completedAt) && _millisFromTimestamp(t.completedAt) >= startMs && _millisFromTimestamp(t.completedAt) <= endMs
);
}
function _calculateWeeklyVictoryValue(tasks, weekStart, weekEnd) {
return _filterCompletedInRange(tasks, weekStart, weekEnd).reduce((sum, t) => sum + (t.victoryValue || 0), 0);
}
function _calculateDailyVictoryValues(tasks, weekStart) {
const days = Array.from({ length: 7 }, (_, i) => {
const dayStart = new Date(weekStart);
dayStart.setDate(dayStart.getDate() + i);
const dayEnd = new Date(dayStart);
dayEnd.setDate(dayEnd.getDate() + 1);
const dayTasks = tasks.filter(
(t) => _millisFromTimestamp(t.completedAt) && _millisFromTimestamp(t.completedAt) >= dayStart.getTime() && _millisFromTimestamp(t.completedAt) < dayEnd.getTime()
);
return {
day: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"][i],
date: dayStart.toISOString(),
value: dayTasks.reduce((sum, t) => sum + (t.victoryValue || 0), 0),
taskCount: dayTasks.length
};
});
return days;
}
async function _safeMoodRatings(app, fromUnixSeconds) {
const moodRatings = await app.getMoodRatings(fromUnixSeconds);
logIfEnabled("Mood ratings", moodRatings, "from", fromUnixSeconds);
return moodRatings;
}
async function _findQuarterlyPlans(app) {
const t0 = Date.now();
const current = getCurrentQuarter();
const next = getNextQuarter();
logIfEnabled(`[_findQuarterlyPlans] querying: "${current.label} Plan", "${next.label} Plan"`);
const [currentPlans, nextPlans] = await Promise.all([
app.filterNotes({ query: `${current.label} Plan` }),
app.filterNotes({ query: `${next.label} Plan` })
]);
logIfEnabled(`[_findQuarterlyPlans] filterNotes results \u2014 current:`, currentPlans, `next:`, nextPlans);
const currentNoteUUID = currentPlans.find((n) => n.name === `${current.label} Plan`)?.uuid;
const nextNoteUUID = nextPlans.find((n) => n.name === `${next.label} Plan`)?.uuid;
logIfEnabled(`[_findQuarterlyPlans] resolved UUIDs \u2014 current: ${currentNoteUUID}, next: ${nextNoteUUID}`);
const currentMonths = _quarterMonthNames(current.quarter);
const nextMonths = _quarterMonthNames(next.quarter);
const [currentHasAll, nextHasAll] = await Promise.all([
currentNoteUUID ? _hasAllMonthSections(app, currentNoteUUID, currentMonths) : Promise.resolve(false),
nextNoteUUID ? _hasAllMonthSections(app, nextNoteUUID, nextMonths) : Promise.resolve(false)
]);
logIfEnabled(`[_findQuarterlyPlans] hasAllMonthlyDetails \u2014 current: ${currentHasAll}, next: ${nextHasAll} (${Date.now() - t0}ms total)`);
return {
current: { ...current, noteUUID: currentNoteUUID, hasAllMonthlyDetails: currentHasAll },
next: { ...next, noteUUID: nextNoteUUID, hasAllMonthlyDetails: nextHasAll }
};
}
function _quarterMonthNames(quarter) {
const start = (quarter - 1) * 3;
return [0, 1, 2].map((i) => FULL_MONTH_NAMES[(start + i) % 12]);
}
async function _hasAllMonthSections(app, noteUUID, monthNames) {
try {
const sections = await app.getNoteSections({ uuid: noteUUID });
return monthNames.every(
(name) => sections.some((s) => s.heading?.text?.trim().toLowerCase() === name.toLowerCase())
);
} catch {
return false;
}
}
async function _readDashboardSettings(app) {
const keys = [
widgetConfigKey("victory-value"),
widgetConfigKey("calendar"),
widgetConfigKey("quotes"),
widgetConfigKey("mood"),
widgetConfigKey("recent-notes")
];
const settings = {};
for (const key of keys) {
try {
const val = app.settings[key];
settings[key] = val ? JSON.parse(val) : null;
} catch {
settings[key] = null;
}
}
settings[SETTING_KEYS.BACKGROUND_IMAGE_URL] = app.settings[SETTING_KEYS.BACKGROUND_IMAGE_URL] || "";
settings[SETTING_KEYS.BACKGROUND_IMAGE_MODE] = app.settings[SETTING_KEYS.BACKGROUND_IMAGE_MODE] || "cover";
settings[SETTING_KEYS.CONSOLE_LOGGING] = app.settings[SETTING_KEYS.CONSOLE_LOGGING] || "";
settings[SETTING_KEYS.LLM_PROVIDER_MODEL] = app.settings[SETTING_KEYS.LLM_PROVIDER_MODEL] || "";
settings[SETTING_KEYS.LLM_API_KEY_ANTHROPIC] = app.settings[SETTING_KEYS.LLM_API_KEY_ANTHROPIC] || "";
settings[SETTING_KEYS.LLM_API_KEY_GEMINI] = app.settings[SETTING_KEYS.LLM_API_KEY_GEMINI] || "";
settings[SETTING_KEYS.LLM_API_KEY_GROK] = app.settings[SETTING_KEYS.LLM_API_KEY_GROK] || "";
settings[SETTING_KEYS.LLM_API_KEY_OPENAI] = app.settings[SETTING_KEYS.LLM_API_KEY_OPENAI] || "";
let componentLayout = null;
try {
componentLayout = app.settings[SETTING_KEYS.DASHBOARD_COMPONENTS] ? JSON.parse(app.settings[SETTING_KEYS.DASHBOARD_COMPONENTS]) : null;
} catch {
componentLayout = null;
}
if (!Array.isArray(componentLayout) || componentLayout.length === 0) {
componentLayout = DEFAULT_DASHBOARD_COMPONENTS.map((component) => ({ ...component }));
await app.setSetting(SETTING_KEYS.DASHBOARD_COMPONENTS, JSON.stringify(componentLayout));
}
settings[SETTING_KEYS.DASHBOARD_COMPONENTS] = componentLayout;
return settings;
}
function _millisFromTimestamp(timestamp) {
if (timestamp == null)
return null;
if (typeof timestamp !== "number") {
const parsed = Number(timestamp);
if (!Number.isFinite(parsed))
return null;
return parsed < 1e10 ? parsed * 1e3 : parsed;
}
return timestamp < 1e10 ? timestamp * 1e3 : timestamp;
}
var plugin = {
constants: {},
appOption: {
"Open Dashboard": async function(app) {
await app.openSidebarEmbed(1.5);
},
"Open Dashboard (Full)": async function(app) {
await app.openEmbed();
}
},
async renderEmbed(app) {
console.debug("Rendering Dashboard plugin embed");
try {
return buildEmbedHTML();
} catch (error) {
console.error("Dashboard renderEmbed error:", error);
return `<div style="padding:20px;color:red;">Dashboard failed to load: ${error.message}</div>`;
}
},
async onEmbedCall(app, actionType, ...args) {
setLoggingEnabled(app.settings[SETTING_KEYS.CONSOLE_LOGGING]);
try {
switch (actionType) {
case "attachNoteMedia":
const noteHandle = { uuid: app.context.noteUUID };
logIfEnabled(`[plugin] attachNoteMedia called \u2014 uploading to plugin note ${noteHandle.uuid}`);
const result = await app.attachNoteMedia(noteHandle, args[1]);
logIfEnabled(`[plugin] attachNoteMedia result:`, result ? "(URL received)" : "(no URL)");
return result;
case "configure":
return await this._handleConfigure(app, args[0]);
case "init":
return await fetchDashboardData(app);
default:
if (typeof app[actionType] === "function") {
return await app[actionType](...args);
}
logIfEnabled(`Unknown embed action: ${actionType}`);
return null;
}
} catch (error) {
logIfEnabled(`onEmbedCall error (${actionType}):`, error);
return { error: error.message };
}
},
async _handleConfigure(app, widgetId) {
const configs = {
"victory-value": {
title: "Configure Victory Value",
inputs: [
{ label: "Time range", type: "radio", options: [
{ label: "This week", value: "week" },
{ label: "This month", value: "month" },
{ label: "Last 30 days", value: "30days" }
] },
{ label: "Show mood overlay", type: "checkbox", value: true }
]
},
"calendar": {
title: "Configure Calendar",
inputs: [
{ label: "Week starts on", type: "radio", options: [
{ label: "Sunday", value: "0" },
{ label: "Monday", value: "1" }
] }
]
},
"quotes": {
title: "Configure Quotes",
inputs: [
{ label: "Quote style", type: "radio", options: [
{ label: "Motivational", value: "motivational" },
{ label: "Philosophical", value: "philosophical" },
{ label: "From quarterly goals", value: "goals" }
] }
]
}
};
const config = configs[widgetId];
if (!config)
return null;
const result = await app.prompt(config.title, { inputs: config.inputs });
if (!result)
return null;
await app.setSetting(widgetConfigKey(widgetId), JSON.stringify(
Array.isArray(result) ? result : [result]
));
return result;
}
};
return plugin;
})()